ich habe analog zu https://community.openhab.org/t/washing ... hine/15587 eine regelbasierte State Machine für meine Waschmaschine erstellt.
Das rules-File sieht folgendermaßen aus:
Code: Alles auswählen
val Number MODE_OFF = 0
val Number MODE_STANDBY = 1
val Number MODE_ACTIVE = 2
val Number MODE_FINISHED = 3
var Timer Washing_Machine_Timer
rule "Washingmachine Consumption State Machine"
when
Item TPL1_Power changed
then
logInfo("powerconsumption.rules", "Washing Machine rule initiated.")
if (TPL1_Power.state < 0.2) { Washingmachine_OpState.postUpdate(MODE_OFF) logInfo("powerconsumption.rules", "Washing Machine OFF.") }
else if (TPL1_Power.state > 10) {
if (Washing_Machine_Timer !== null) {
Washing_Machine_Timer.cancel()
logInfo("powerconsumption.rules", "Timer cancelled.")
Washingmachine_OpState.postUpdate(MODE_ACTIVE)
logInfo("powerconsumption.rules", "Washing Machine ACTIVE.")
}
Washingmachine_OpState.postUpdate(MODE_ACTIVE)
logInfo("powerconsumption.rules", "Washing Machine ACTIVE.")
logInfo("powerconsumption.rules", "Timer not cancelled due to it being null.")
}
else if (TPL1_Power.state < 4) {
if (Washingmachine_OpState.state == MODE_OFF) { Washingmachine_OpState.postUpdate(MODE_STANDBY) logInfo("powerconsumption.rules", "Washing Machine STANDBY") }
else if (Washingmachine_OpState.state == MODE_ACTIVE) {
if (Washing_Machine_Timer === null) {
logInfo("powerconsumption.rules", "Timer created.")
Washing_Machine_Timer = createTimer(now.plusMinutes(3), [ |
Washingmachine_OpState.postUpdate(MODE_FINISHED)
Washing_Machine_Timer.cancel()
logInfo("powerconsumption.rules", "Timer cancelled after execution.")
logInfo("powerconsumption.rules", "Washing Machine FINISHED.")
sendTelegram("bot1", "Hey Stefan, washing machine is finished.")
sendTelegram("bot2", "Hey Alexa, washing machine is finished.")
])
}
}
}
end
Nun zu meinem Problem. Leider wird der Status, dass die Waschmaschine fertig ist, nicht gesetzt. Ich kann mir leider nicht erklären warum.
In den Logs kann ich sehen, dass immer wieder ein Timer gesetzt wird, der dann auch richtigerweise abgebrochen wird.
Leider scheint die Regel aber nicht in das entsprechende IF zu laufen, wenn die Maschine fertig ist.
Ich bin mir nicht ganz sicher, ob
Code: Alles auswählen
if (Washing_Machine_Timer === null)
Sieht jemand ggf. was das Problem ist?
Vielen Dank im Voraus!
Stefan