Wert in Regel als Variable zwischenspeichern
Verfasst: 18. Nov 2018 16:52
Hallo zusammen,
ich habe mir ein Skript gebaut, welches den Verbrauch der Waschmaschine messen soll. Dazu speicher ich mir zu Beginn den Gesamtverbrauch in einer Variablen zwischen und substrahiere es nach Beendigung mit dem neuen Gesamtverbrauch. Das klappt leider nicht, da dann immer null in der Variablen steht.. Wenn ich die Werte aber bei jeder Leistungsänderung logge, funktioniert es plötzlich und die Variable merkt sich den Wert
Hier meine Regel:
In der Änderungsregel für die Leistungsänderung (wird im Schnitt alle 2 Sekunden durchlaufen) habe ich folgende Zeile stehen:
Wenn ich diese Zeile IMMER aktiv lasse, funktioniert alles.. Wenn ich sie aber entferne und erst nach einigen Minuten reinkopiere, erhalte ich folgenden Log:
Vergisst das Framework diese Variablen wieder, wenn ich nicht regelmäßig darauf zugreife? (eben z.B. über Logging?)
Vielen Dank schon mal für eure Hilfe!
Grüße, Raptor
ich habe mir ein Skript gebaut, welches den Verbrauch der Waschmaschine messen soll. Dazu speicher ich mir zu Beginn den Gesamtverbrauch in einer Variablen zwischen und substrahiere es nach Beendigung mit dem neuen Gesamtverbrauch. Das klappt leider nicht, da dann immer null in der Variablen steht.. Wenn ich die Werte aber bei jeder Leistungsänderung logge, funktioniert es plötzlich und die Variable merkt sich den Wert

Hier meine Regel:
Code: Alles auswählen
// Temporäre Variablen für Durchlauf
var Number var_Durchlauf_Verbrauch_Start_kwh
var Number var_Durchlauf_Verbrauch_kwh
var Number var_Durchlauf_Kosten_eur
rule "Durchlauf Aktionen Waschmaschine"
when
Item Waschmaschine_Status changed
then
if (Waschmaschine_Status.state == MODE_ACTIVE) {
// Merke Start-Verbrauchsstand
var_Durchlauf_Verbrauch_Start_kwh = Waschmaschine_Gesamtverbrauch_kwh.state as DecimalType
logInfo("WASCHMASCHINE_KOSTEN_LOG", "BERECHNUNG GESTARTET - Startverbrauch: " + var_Durchlauf_Verbrauch_Start_kwh + " kWh - Gesamt: " + Waschmaschine_Gesamtverbrauch_kwh.state + " kWh")
sendTelegram("mich", "Die Waschmaschine wurde gestartet.")
} else if (Waschmaschine_Status.state == MODE_STANDBY) {
sendTelegram("mich", "Die Waschmaschine wurde angeschaltet.")
} else if (Waschmaschine_Status.state == MODE_OFF) {
// Berechne Verbrauch des Durchlaufs mittels Startwert und aktuellem Gesamtwert
var_Durchlauf_Verbrauch_kwh = Waschmaschine_Gesamtverbrauch_kwh.state as DecimalType - var_Durchlauf_Verbrauch_Start_kwh
// Berechne Durchlaufskosten
var_Durchlauf_Kosten_eur = var_Durchlauf_Verbrauch_kwh * ESSL_KWH
logInfo("WASCHMASCHINE_KOSTEN_LOG", "BERECHNUNG BEENDET - Startverbrauch: " + var_Durchlauf_Verbrauch_Start_kwh + " kWh - Gesamt: " + Waschmaschine_Gesamtverbrauch_kwh.state + " kWh")
sendTelegram("mich", "Die Waschmaschine wurde ausgeschaltet. Der Durchlauf hat " +
var_Durchlauf_Verbrauch_kwh + " kWh verbraucht und " +
String::format("%.2f", var_Durchlauf_Kosten_eur.floatValue()) + " € gekostet.")
}
end
Code: Alles auswählen
logInfo("WASCHMASCHINE_KOSTEN_LOG", "Startverbrauch: " + var_Durchlauf_Verbrauch_Start_kwh + " kWh; Aktuell: " + Waschmaschine_Gesamtverbrauch_kwh.state + " kWh")
Code: Alles auswählen
2018-11-18 16:32:59.876 [INFO ] [odel.script.WASCHMASCHINE_KOSTEN_LOG] - BERECHNUNG GESTARTET - Startverbrauch: 3.97 kWh - Gesamt: 3.97 kWh
[... einige Minuten später, ich habe die entsprechende Zeile in den Code kopiert...]
2018-11-18 16:36:19.898 [INFO ] [odel.script.WASCHMASCHINE_KOSTEN_LOG] - Startverbrauch: null kWh; Aktuell: 3.97 kWh
Vielen Dank schon mal für eure Hilfe!
Grüße, Raptor