ich verzweifel langsam. Ich möchte in der Mediola App den Tageswert vom Regen darstellen.
Wenn ich das Gerät selbst auswähle, kommt der aufaddierte Wert, seit dem letzten Neustart des Sensors.
Wie bekannt ist, gibt es dafür ein Script, das Systemintern alles berechnet und dann z.B. in der Favoritenliste anzeigt.
Da ich aber mit Scripten noch nicht vertraut bin und einfach null Ahnung davon hab, wie ich das machen muss, wende ich mich jetz an euch.
Meine Idee war, ein Script, das mir den errechneten Tageswert in meine bereits erstellte Systemvariable "tagesregenmenge" einfügt.
Diese Systemvariable stell ich dann mit einem normalen Programm mit Zeitmodul zurück.
Wie muss das Script aussehen ich bin echt am ende mitm grübeln.
Das Script, dass momentan angelegt ist sieht so aus.
Vielen Dank schon mal für eure hilfe!!!
Code: Alles auswählen
object chn = dom.GetObject('4632');
object oOverflow = chn.DPByControl('WEATHER_TRANSMIT.RAIN_COUNTER_OVERFLOW');
object oRainCounter = chn.DPByControl('WEATHER_TRANSMIT.RAIN_COUNTER');
object oSysVarRain = dom.GetObject('svHmIPRainCounter_4632_001858A992B97C:1');
object oSysVarRainOldVal = dom.GetObject('svHmIPRainCounterOldVal_4632');
object oSysVarCounterToday = dom.GetObject('svHmIPRainCounterToday_4632');
object oSysVarCounterYesterday = dom.GetObject('svHmIPRainCounterYesterday_4632');
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);