Ich habe Homematic-Sensoren und Fritz-Dect und Comet-Dect Thermostate im Einsatz. Ich habe das ganze mit zwei Regeln erledigt. Diese Versionen habe ich ausgewählt um andere Zustände beim Trigger als "OPEN" und "CLOSED" auszuschliessen. Das geht vielleicht noch ein bisschen eleganter.
Das Trigger-Item, das ich benutze, ist eigentlich ein Group-Item, da ich zwei Fenster in diesem Raum habe und ichmir damit die Frage, ob alle Fenster geschlossen sind oder nicht erspare.
Weiterhin überprüfe ich, ob Standard-Einstellungen (ECO,COMFORT) benutzt werden, oder ob eine individuelle Temperatur(ON) eingestellt worden ist.
Dazu habe ich mir noch zwei Items pro Thermostat angelegt. Das kann man aber sicherlich auch anders (Variablen) lösen.
Das Ganze sieht dann so aus:
.items
Code: Alles auswählen
// Fensterkontakte
Group:Contact:OR(OPEN,CLOSED) gWindowOffice "Fensterkontakte Büro [MAP(de.map):%s]"
Contact HmIP_SWDO_DB1C_1STATECONTACT "Fenster Arbeitszimmer Ost Kontakt[MAP(de.map):%s]" <window> (gHomeMatic,gWindow,EG_Buro,gWindowOffice) {channel="homematic:HMIP-SWDO:xxxxxxxxxxxxxxx:yyyyyyyyyyyyyy:1#STATE_CONTACT"}
Contact HmIP_SWDO_D6D5_1STATECONTACT "Fenster Arbeitszimmer Nord Kontakt[MAP(de.map):%s]" <window> (gHomeMatic,gWindow,EG_Buro,gWindowOffice) {channel="homematic:HMIP-SWDO:xxxxxxxxxxxxxxx:yyyyyyyyyyyyyy:1#STATE_CONTACT"}
//Thermostat im Arbeitszimmer (Comet Dect)
Group gRFritz_01 "Thermostat Fritz RF01 Büro" <dect301> (gFritz) // RF stands for Radiator-Fritz
Number:Temperature radiator_valve_01 "Temp. Büro Heizkörperregler[%.1f %unit%]" <heating1> (EG_Buro,gRFritz_01,gRtIstI) //{ channel="avmfritz:Comet_DECT:Fritz-Box-7490:119601003400:actual_temp" }
Number:Temperature radiator_valve_01_Set "Thermostat Büro Richtwert [%.1f %unit%]" <heating1> (EG_Buro,gRFritz_01,gRtSoll) { channel="avmfritz:Comet_DECT:Fritz-Box-7490:119601003400:set_temp" }
Number:Temperature radiator_valve_01_Eco "Thermostat Büro Richtwert Eco [%.1f %unit%]" <dect301> (EG_Buro,gRFritz_01) { channel="avmfritz:Comet_DECT:Fritz-Box-7490:119601003400:eco_temp" }
Number:Temperature radiator_valve_01_Comfort "Thermostat Büro Richtwert Komfort [%.1f %unit%]" <dect301> (EG_Buro,gRFritz_01) { channel="avmfritz:Comet_DECT:Fritz-Box-7490:119601003400:comfort_temp" }
String radiator_valve_01_ModeX "Heizkörper Büro Modus 01 [%s]" <temperature> (EG_Buro,gRFritz_01) { channel="avmfritz:Comet_DECT:Fritz-Box-7490:119601003400:mode" }
String radiator_valve_01_Mode "Heizkörper Büro Modus [%s]" <heating2> (EG_Buro,gRFritz_01) { channel="avmfritz:Comet_DECT:Fritz-Box-7490:119601003400:radiator_mode" }
Switch radiator_valve_01_Battery "Batterie Büro Zustand [MAP(battery.map):%s]" <lowbattery1> (EG_Buro,gRFritz_01,gBatt) { channel="avmfritz:Comet_DECT:Fritz-Box-7490:119601003400:battery_low" }
Number radiator_valve_01_Battery_Level "Batterie Büro Level [%d %%]" <batterylevel> (EG_Buro,gRFritz_01,gBattLevel) { channel="avmfritz:Comet_DECT:Fritz-Box-7490:119601003400:battery_level" }
Contact radiator_valve_01_locked "Thermostat Büro Sperre extern [MAP(fritz.map):%s]" <lock> (EG_Buro,gRFritz_01) { channel="avmfritz:Comet_DECT:Fritz-Box-7490:119601003400:locked" }
Contact radiator_valve_01_dev_locked "Thermostat Büro Sperre intern [MAP(fritz.map):%s]" <lock> (EG_Buro,gRFritz_01) { channel="avmfritz:Comet_DECT:Fritz-Box-7490:119601003400:device_locked" }
DateTime radiator_valve_01_next_change "Umschalt-Zeitpunkt Büro [%1$ta, %1$ty-%1$tm-%1$td %1$tH:%1$tM]" <time> (EG_Buro,gRFritz_01) { channel="avmfritz:Comet_DECT:Fritz-Box-7490:119601003400:next_change" }
Number:Temperature radiator_valve_01_next_temp "Umschalt-Temperatur Büro [%.1f %unit%]" <temperature> (EG_Buro,gRFritz_01) { channel="avmfritz:Comet_DECT:Fritz-Box-7490:119601003400:next_temp" }
Number:Temperature radiator_valve_01_Temp "Thermostat Büro Temperatur [%.1f %unit%]" <temperature> (EG_Buro,gRtIstI,gRFritz_01) { channel="avmfritz:Comet_DECT:Fritz-Box-7490:119601003400:temperature" }
Number:Temperature radiator_valve_01_Set_prev "Temp Büro vorher [%.1f %unit%]" <heating1> (EG_Buro,gRFritz_01,gFritzPrev)
String radiator_valve_01_Mode_prev "Heizkörper Büro Modus vorher[%s]" <dect301> (EG_Buro,gRFritz_01,gFritzPrev)
//
und die zwei Regeln hierzu:
.rules
Code: Alles auswählen
rule "Fenster Arbeitszimmer Offen"
when
Item gWindowOffice changed from "CLOSED" to "OPEN"
then
if(radiator_valve_01_Mode.state == "OFF") return; // Es sind bereits Fenster offen bzw. der Thermostat ist ausgeschaltet
radiator_valve_01_Set_prev.postUpdate(radiator_valve_01_Set.state)
radiator_valve_01_Mode_prev.postUpdate(radiator_valve_01_Mode.state)
radiator_valve_01_Mode.sendCommand("OFF")
logInfo("Fenster Arbeitszimmer Offen"," radiator_valve_01_Set {}", radiator_valve_01_Set)
end
//===============================================================================
rule "Fenster Arbeitszimmer Geschlossen"
when
Item gWindowOffice changed from "OPEN" to "CLOSED"
then
if ((radiator_valve_01_Mode_prev.state == "ECO") || (radiator_valve_01_Mode_prev.state == "COMFORT") || (radiator_valve_01_Mode_prev.state == "OFF")) {
radiator_valve_01_Mode.sendCommand(radiator_valve_01_Mode_prev.state.toString)
logInfo("Fenster Arbeitszimmer Geschlossen"," radiator_valve_01_Set {}", radiator_valve_01_Set)
}
if (radiator_valve_01_Mode_prev.state == "ON") {
radiator_valve_01_Set.sendCommand(radiator_valve_01_Set_prev.state as Number)
logInfo("Fenster Arbeitszimmer Geschlossen"," radiator_valve_01_Set {}", radiator_valve_01_Set)
}
end
//===============================================================================
Ich bin aber auch noch in der Experimentier-Phase. Dass mit der If-Bedingung ( if(radiator_valve_01_Mode.state == "OFF") return;) ist noch nicht ganz zu Ende gedacht.
Ich habe hier auch bewusst auf Timer verzichtet. Die Heizung geht erst wieder an, wenn die Fenster zu sind ! (bzw. die Temperatur unter 6 Grad fällt-Fritzbox-Automatik).