Hi Alchy, danke für Deine Zeit !
Bei Mediola habe ich jetzt als Nachricht #1 nachgefragt, was das soll. Wenn die Antwort nicht sinnvoll ist, dann muss es eh schärfer werden, so es was bringt.
Folgendes, ich möchte nicht die ganzen Probleme nicht mehr auf zig Threads verteilen, ich bleibe in diesem hier, wenns ok ist.
Natürlich, wie du meinst, alles wurscht.
Und in 4 Wochen weißt du das auch noch, wenn dir mal einfällt die SV doch zum Triggern zu benutzen usw.
Ja, das würde ich wissen, aber Du hast schon recht, wenn die Station wieder in der aktiven CCU ist, dann stelle ich das auf State um.
Klar doch: alles wurscht, aber einen 5 min Trigger einstellen. Das passt dann schon alles zusammen.
Kann man ja froh sein, das die nicht alle 5 Sekunden die Station abfragst und dich hier in noch mehr Threads zum selben Thema beschwerst.
Ich hatte auch Scripte mit 10min Intervall laufen, welche von allen Temperatursensoren, Bad, Pool, Dachboden usw - also nicht von der Wetterstat. MIN/MAX Werte in SVs schreibt. Derzeit hängt vorm Haus noch ein IP Aussenfühler (soll ja dann durch den Wettermast ersetzt werden), aber diesen habe ich jetzt für die MinMax Werte als Hardware-Trigger eingetragen und das Zeitmodul entfernt.
Bild kann ich DIr erst wieder posten, wenn die Station wieder dort ist wo sie sein soll, auf der Reserve-CCU sind alle Zähler auf 0.
Fakt ist, dass (fast) die ganzen Rega Errors seit entfernen der Station und CCU Neustart weg sind.
Nur diese Meldung taucht dann und wann mal auf, 1x oder 4x hintereinander, im Moment suche ich gerade von was das wieder kommt
Code: Alles auswählen
Error: IseESP::ExecForEach: WARNING - invalid expression used in foreach(): system.SetSessionVar("sessionCTV", "true"); [iseESPexec.cpp:494]
Zur Wetterstation, ja die legt 3 systeminterne Programme an
#1 getriggert über Zeitmodul 7h täglich
Code: Alles auswählen
object chn = dom.GetObject('1266');
object oSysVarSunshineCounterToday = dom.GetObject('svHmIPSunshineCounterToday_1266');
object oSysVarSunshineCounterYesterday = dom.GetObject('svHmIPSunshineCounterYesterday_1266');
object oSysVarRainCounterToday = dom.GetObject('svHmIPRainCounterToday_1266');
object oSysVarRainCounterYesterday = dom.GetObject('svHmIPRainCounterYesterday_1266');
if (oSysVarSunshineCounterYesterday && oSysVarSunshineCounterToday) {oSysVarSunshineCounterYesterday.State(oSysVarSunshineCounterToday.Value());}if (oSysVarSunshineCounterToday) {oSysVarSunshineCounterToday.State(0);}if (oSysVarRainCounterYesterday && oSysVarRainCounterToday) {oSysVarRainCounterYesterday.State(oSysVarRainCounterToday.Value());}if (oSysVarRainCounterToday) {oSysVarRainCounterToday.State(0);}
#2 bei Regenmenge >0.0mm bei Aktualisierung
Code: Alles auswählen
object chn = dom.GetObject('1266');
object oOverflow = chn.DPByControl('WEATHER_TRANSMIT.RAIN_COUNTER_OVERFLOW');
object oRainCounter = chn.DPByControl('WEATHER_TRANSMIT.RAIN_COUNTER');
object oSysVarRain = dom.GetObject('svHmIPRainCounter_1266_001858A98C18F0:1');
object oSysVarRainOldVal = dom.GetObject('svHmIPRainCounterOldVal_1266');
object oSysVarCounterToday = dom.GetObject('svHmIPRainCounterToday_1266');
object oSysVarCounterYesterday = dom.GetObject('svHmIPRainCounterYesterday_1266');
boolean overFlowFlag = oOverflow.Value();
real devVal = oRainCounter.Value();
real devValMax = oRainCounter.ValueMax();
real oldDevVal = oSysVarRainOldVal.Value();
real diffVal = 0.0;
real sysVarVal = oSysVarRain.Value();
real sysVarTodayVal = oSysVarCounterToday.Value();
real todayTotal = 0.0;
integer tmp_devVal = (devVal.ToString().ToFloat() * 1000).ToInteger();
integer tmp_oldDevVal = (oldDevVal.ToString().ToFloat() * 1000).ToInteger();
if (overFlowFlag == false) {
! Normal conditions
if (tmp_oldDevVal <= tmp_devVal) {
diffVal = devVal - oldDevVal;
}
! Device has rebooted
if (tmp_oldDevVal > tmp_devVal) {
diffVal = devVal;
}
} else {
!overFlow is true
if (tmp_oldDevVal > tmp_devVal) {
! An device overflow has occured
diffVal = (devVal + devValMax) - oldDevVal;
} else {
! Once the overflow flag has been set it will only be false when the device reboots
! Therefore this is the normal condition after an device overflow
diffVal = devVal - oldDevVal;
}
}
oSysVarRainOldVal.State(devVal);
oSysVarRain.State(sysVarVal + diffVal);
todayTotal = sysVarTodayVal + diffVal;
if (todayTotal >= 1440.0) {todayTotal = 0.0;}
oSysVarCounterToday.State(todayTotal);
und #3 bei Helligkeit >0 bei Aktualisierung
Code: Alles auswählen
object chn = dom.GetObject('1266');
object oOverflow = chn.DPByControl('WEATHER_TRANSMIT.SUNSHINEDURATION_OVERFLOW');
object oSunshineCounter = chn.DPByControl('WEATHER_TRANSMIT.SUNSHINEDURATION');
object oSysVarSunshine = dom.GetObject('svHmIPSunshineCounter_1266_001858A98C18F0:1');
object oSysVarSunshineOldVal = dom.GetObject('svHmIPSunshineCounterOldVal_1266');
object oSysVarCounterToday = dom.GetObject('svHmIPSunshineCounterToday_1266');
object oSysVarCounterYesterday = dom.GetObject('svHmIPSunshineCounterYesterday_1266');
boolean overFlowFlag = oOverflow.Value();
real devVal = oSunshineCounter.Value();
real devValMax = oSunshineCounter.ValueMax();
real oldDevVal = oSysVarSunshineOldVal.Value();
real diffVal = 0.0;
real sysVarVal = oSysVarSunshine.Value();
real sysVarTodayVal = oSysVarCounterToday.Value();
real todayTotal = 0.0;
integer tmp_devVal = (devVal.ToString().ToFloat() * 1000).ToInteger();
integer tmp_oldDevVal = (oldDevVal.ToString().ToFloat() * 1000).ToInteger();
if (overFlowFlag == false) {
! Normal conditions
if (tmp_oldDevVal <= tmp_devVal) {
diffVal = devVal - oldDevVal;
}
! Device has rebooted
if (tmp_oldDevVal > tmp_devVal) {
diffVal = devVal;
}
} else {
!overFlow is true
if (tmp_oldDevVal > tmp_devVal) {
! An device overflow has occured
diffVal = (devVal + devValMax) - oldDevVal;
} else {
! Once the overflow flag has been set it will only be false when the device reboots
! Therefore this is the normal condition after an device overflow
diffVal = devVal - oldDevVal;
}
}
oSysVarSunshineOldVal.State(devVal);
oSysVarSunshine.State(sysVarVal + diffVal);
todayTotal = sysVarTodayVal + diffVal;
if (todayTotal >= 1440.0) {todayTotal = 0.0;}
oSysVarCounterToday.State(todayTotal);