heute wende ich mich wieder an Euch, weil ich mal wieder Probleme mit einer Regel habe.
Vorab:
Ich habe als Heizkörperthermostat Geräte von CometDECT. Ich kann diese steuern.
Im Sommer ist der Heizkörper ausgeschaltet. Der "RadiatorMode" ist OFF und "SetTemp" steht auf 6.0.
Ist im Winter eine Temperatur von 21 Grad gegeben, so ist der "RadiatorMode" auf ON und "SetTemp" steht auf 21.0.
Was funktioniert:
Ist 21 Grad als Temperatur eingestellt, ich öffne das Fenster, dann geht die Heizung aus und beim schließen des Fensters wird die Temperatur wiederhergestellt.
Ich muss den Temperaturwert in eine Variable speichern, da ich nicht mit previousState arbeiten kann. Das liegt daran, dass beim Abschalten der Heizung die Temperatur auf 6.0 gestellt wird und der previousState dann nicht mehr 21.0, sondern 6.0 wiederherstellt.
Was nicht funktioniert:
Wenn die Heizung abgeschaltet ist, soll das Thermostat kein OFF-Command und auch keinen gespeicherten Temperaturwert erhalten. Gerade im Hinblick darauf, dass man 6.0 zwar senden kann, dies aber automatisch in 8.0 als Minimumtemperatur geändert wird und die Heizung dann nicht mehr OFF ist.
Code: Alles auswählen
// Wird das Wohnzimmerfenster geöffnet, so schaltet die Heizung ab und der letzte Wert wird wiederhergestellt.
var Number savedTemp = null
rule "Heizventil schließen bei offenem Fenster -Wohnzimmer-"
when Item XiaomiDoorSensorWohnzimmerIsOpen changed //Wenn sich das Fenster öffnet oder schließt
then
if(XiaomiDoorSensorWohnzimmerIsOpen.state == OPEN) {
logInfo("Testing", "Aktueller Status Heizung: " + HeizungWohnzimmerRadiatorMode.state)
logInfo("Testing", "Aktueller Wert: " + HeizungWohnzimmerSetTemp.state)
if (HeizungWohnzimmerSetTemp == "6.0"){
logInfo("Testing", "Die Heizung ist ausgeschaltet.")
savedTemp = 0}
else {
savedTemp = HeizungWohnzimmerSetTemp.state as Number
sendCommand(HeizungWohnzimmerRadiatorMode, "OFF")
}
}
if(XiaomiDoorSensorWohnzimmerIsOpen.state == CLOSED) {
if (savedTemp == 0) {
logInfo("Testing", "Die Heizung ist ausgeschaltet. Dies bleibt auch so.")}
else {
logInfo("Testing", "Letzter Status Heizung: " + HeizungWohnzimmerRadiatorMode.state)
logInfo("Testing", "Letzter Wert: " + savedTemp)
HeizungWohnzimmerSetTemp.sendCommand(savedTemp)}
}
end
Code: Alles auswählen
2020-07-18 09:23:13.833 [INFO ] [lipse.smarthome.model.script.Testing] - Aktueller Status Heizung: OFF
2020-07-18 09:23:13.839 [INFO ] [lipse.smarthome.model.script.Testing] - Aktueller Wert: 6.0 °C
==> /var/log/openhab2/events.log <==
2020-07-18 09:23:13.864 [ome.event.ItemCommandEvent] - Item 'HeizungWohnzimmerRadiatorMode' received command OFF
2020-07-18 09:23:13.866 [nt.ItemStatePredictedEvent] - HeizungWohnzimmerRadiatorMode predicted to become OFF
2020-07-18 09:24:09.025 [vent.ItemStateChangedEvent] - XiaomiDoorSensorWohnzimmerIsOpen changed from OPEN to CLOSED
2020-07-18 09:24:09.063 [INFO ] [lipse.smarthome.model.script.Testing] - Letzter Status Heizung: OFF
2020-07-18 09:24:09.071 [INFO ] [lipse.smarthome.model.script.Testing] - Letzter Wert: 6.0 °C
==> /var/log/openhab2/events.log <==
2020-07-18 09:24:09.095 [ome.event.ItemCommandEvent] - Item 'HeizungWohnzimmerSetTemp' received command 6.0 °C
2020-07-18 09:24:09.098 [nt.ItemStatePredictedEvent] - HeizungWohnzimmerSetTemp predicted to become 6.0 °C
2020-07-18 09:24:09.132 [vent.ItemStateChangedEvent] - HeizungWohnzimmerRadiatorMode changed from OFF to ON
2020-07-18 09:24:20.936 [vent.ItemStateChangedEvent] - HeizungWohnzimmerSetTemp changed from 6.0 °C to 8.0 °C
Es wäre schön, wenn mir jemand einen Tipp geben könnte, woran es hakt.
Viele Grüße
Matthias