Temperatur eines FRITZDect 301 per Rule setzen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

fmarkus
Beiträge: 5
Answers: 0
Registriert: 1. Dez 2019 19:29

Temperatur eines FRITZDect 301 per Rule setzen

Beitrag von fmarkus »

Hallo zusammen,

nach fast 15 Jahren mit KNX habe ich nun meine Installation um Komponenten von AVM (FRITZ!Dect 200 und FRITZ!Dect 301) sowie einigen HUE-Lampen (LED-Stripes) ergänzt. Visualisiert und teilweise gesteuert wird das Ganze per openHABian und rasbian mit deCONZ; alles funktioniert soweit wunderbar.

Nun habe ich mich seit einigen Tagen mit Rules beschäftigt; ein paar Zeitschaltungen sowie einige Timer habe ich bereits erfolgreich erstellt.

Was aber ganz und gar nicht klappt - wahrscheinlich mangels Verständnis der Objekte - ist das Beeinflussen von FRITZ!Dect-Thermostaten aufgrund von "Fenster-offen"-Meldungen des KNX per Regeln.

Anbei die eigentlich recht simplen Codes.
avm things:

Code: Alles auswählen

Thing FRITZ_DECT_301 FRITZ_DECT_301_Duschbad "FRITZ!Dect Duschbad" [ ain="099950142640" ]
myown.rules:

Code: Alles auswählen

var  Duschbad_LastTemp
rule "Fenster-auf-im-Duschbad"
	when
		Item Fenster_OG_Duschbad changed from CLOSED to OPEN
	then
		logInfo("myown.rules", "Fenster-auf-im-Duschbad!")
		Duschbad_LastTemp=FRITZ_DECT_301_Duschbad:actual_temp
		FRITZ_DECT_301_Duschbad:set_temp.postupdate(7)
		createTimer(now.plusMinutes(15)) 
			[
			FRITZ_DECT_301_Duschbad:set_temp.postUpdate(Duschbad_LastTemp)
			]
	end

rule "Fenster-auf-im-Duschbad"
	when
		Item Fenster_OG_Duschbad changed from OPEN to CLOSED
	then
		logInfo("myown.rules", "Fenster-zu-im-Duschbad!")
			[
			]
	end
Bisher habe ich die Regel bewusst recht simpel gehalten; nach der "Fenster-offen"-Meldung genügt zunächst ein Timer, der nach 15 Minuten wieder den ursprünglichen Zustand wiederherstellt. Später werde ich das Ganze etwas komplexer gestalten; aber zunächst muss es erstmal grundsätzlich funktionieren. :-)

Wie bereits erwähnt, scheitere ich an der Syntax, wie ich den FRITZ!Dect-Thermostaten beeinflussen kann. Das Item wird korrekt ausgelesen und die Rule feuert; allerdings bekomme ich den Channel nicht richtig angesprochen. Trotz einer bereits umfangreichen Suche habe ich hierfür bisher keine Lösung gefunden. Kann mir jemand - der vielleicht bereits FRITZ!-Komponenten ansteuert - weiterhelfen?

Grüße und vielen Dank im Voraus.

Benutzeravatar
udo1toni
Beiträge: 15244
Answers: 242
Registriert: 11. Apr 2018 18:05
Wohnort: Darmstadt

Re: Temperatur eines FRITZDect 301 per Rule setzen

Beitrag von udo1toni »

Wie sind denn die Items definiert? Doppelpunkte in Itemnamen sind meines Wissens nicht erlaubt. Eventuell hast Du hier einfach die Channel eingesetzt?
Die Channel müssen zunächst mit einem Item verlinkt werden, diese Items kann man dann in Rules verwenden.
Nehmen wir an, die Items heißen FRITZ_DECT_301_Duschbad_SetTemp und FRITZ_DECT_301_Duschbad_ActualTemp und sind vom Typ Number, dann lautet die passende Rule dazu:

Code: Alles auswählen

// globale Variablen werden zu Beginn der Datei definiert, vor der ersten Rule
var Duschbad_LastTemp
var Timer tDuschbad = null

rule "Fenster Duschbad"
when
    Item Fenster_OG_Duschbad changed
then
    if(Fenster_OG_Duschbad.state == OPEN) {
        logInfo("myown.rules", "Fenster-auf-im-Duschbad!")
        Duschbad_LastTemp=FRITZ_DECT_301_Duschbad_ActualTemp.state as Number
        FRITZ_DECT_301_Duschbad_SetTemp.sendCommand(7)
        tDuschbad = createTimer(now.plusMinutes(15), [
            FRITZ_DECT_301_Duschbad_SetTemp.sendCommand(Duschbad_LastTemp)
        ])
    } else {
        logInfo("myown.rules", "Fenster-zu-im-Duschbad!")
        tDuschbad?.cancel
        FRITZ_DECT_301_Duschbad_SetTemp.sendCommand(Duschbad_LastTemp)
    }
end
Wichtig ist auch, sendCommand zu verwenden, denn Du willst ein Kommando an das Gerät senden. postUpdate hingegen verändert nur den Status innerhalb openHAB.

Ach so: Logging: der erste String innerhalb des log Befehls ist der Logger. Da es sich um einen Log-Befehl aus den Rule handelt, ist der vollständige Name zusammengesetzt aus dem String und einen parent-Pfad, dieser ist abhängig von der verwendeten Version, bei OH2.4 lautet er org.eclipse.smarthome.model.script, bei einer aktuellen 2.5 Version org.openhab.model.script.
Der String wird dann, mit Punkt getrennt, hinten angehängt. Das .rules kann und sollte man sich also sparen, stattdessen kann man kurze Begriffe für die entsprechnde Rule verwenden, gerne auch für einen bestimmten Bereich (in diesem Fall z.B. contact oder window). Über die Karaf Konsole kann man das Logging dann in verschiedenen Stufen ein- und ausschalten, und zwar während openHAB läuft, ohne die .rules Datei zu verändern (und damit ohne die Datei neu einzulesen)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2758
Answers: 30
Registriert: 28. Nov 2018 12:03
Wohnort: Schwäbisch Gmünd

Re: Temperatur eines FRITZDect 301 per Rule setzen

Beitrag von peter-pan »

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).
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

fmarkus
Beiträge: 5
Answers: 0
Registriert: 1. Dez 2019 19:29

Re: Temperatur eines FRITZDect 301 per Rule setzen

Beitrag von fmarkus »

Vielen Dank für die Antworten, die mich schon mal weitergebracht haben.
Anbei meine aktuelle avm.things:

Code: Alles auswählen

String  FRITZ_DECT_301_Duschbad_Mode		"DECT Duschbad - Mode [%s]"										(gAVM3)	{ channel="avmfritz:FRITZ_DECT_301:fritzbox:099950142640:mode" }
String  FRITZ_DECT_301_Duschbad_RadMode		"DECT Duschbad - Radiator Mode [%s]"			<heating>		(gAVM3)	{ channel="avmfritz:FRITZ_DECT_301:fritzbox:099950142640:radiator_mode" }
Number  FRITZ_DECT_301_Duschbad_CurrTemp	"DECT Duschbad - Temperature [%.1f °C]"			<temperature>	(gAVM3)	{ channel="avmfritz:FRITZ_DECT_301:fritzbox:099950142640:temperature" }
Number  FRITZ_DECT_301_Duschbad_ActTemp		"DECT Duschbad - Temperatur (Act) [%.1f °C]"	<temperature>	(gAVM3)	{ channel="avmfritz:FRITZ_DECT_301:fritzbox:099950142640:actual_temp" }
Number  FRITZ_DECT_301_Duschbad_EcoTemp		"DECT Duschbad - Temperatur (Eco) [%.1f °C]"	<temperature>	(gAVM3)	{ channel="avmfritz:FRITZ_DECT_301:fritzbox:099950142640:eco_temp" }
Number  FRITZ_DECT_301_Duschbad_ComTemp		"DECT Duschbad - Temperatur (Com) [%.1f °C]"	<temperature>	(gAVM3)	{ channel="avmfritz:FRITZ_DECT_301:fritzbox:099950142640:comfort_temp" }
Number  FRITZ_DECT_301_Duschbad_SetTemp		"DECT Duschbad - Temperatur (Set) [%.1f °C]"	<temperature>	(gAVM3)	{ channel="avmfritz:FRITZ_DECT_301:fritzbox:099950142640:set_temp" }
Und hier meine aktuelle myown.rules:

Code: Alles auswählen

/***********************************************************/
/*	Variablen
/***********************************************************/
var Duschbad_LastMode
var Duschbad_LastTemp 

/***********************************************************/
/*	Fenster_OG_Duschbad
/***********************************************************/

rule "Fenster-auf-im-Duschbad"
	when
		Item Fenster_OG_Duschbad changed from CLOSED to OPEN or Item Fenster_OG_Buero_DFF changed from CLOSED to OPEN
	then
		if ((Fenster_OG_Duschbad.state == OPEN) || (Fenster_OG_Buero_DFF.state == OPEN)) {
			logInfo("myown.rules", "Fenster-auf-im-Duschbad!")
			Duschbad_LastMode.postUpdate(FRITZ_DECT_301_Duschbad_Mode.state)
			Duschbad_LastTemp.postUpdate(FRITZ_DECT_301_Duschbad_ActTemp.state)
			FRITZ_DECT_301_Duschbad_Mode.sendCommand("OFF")
			}
	end

rule "Fenster-zu-im-Duschbad"
	when
		Item Fenster_OG_Duschbad changed from OPEN to CLOSED or Item Fenster_OG_Buero_DFF changed from OPEN to CLOSED
	then
		if ((Fenster_OG_Duschbad.state == CLOSED) || (Fenster_OG_Buero_DFF.state == CLOSED)) {
			logInfo("myown.rules", "Fenster-zu-im-Duschbad!")
			if ((Duschbad_LastMode.state == "ECO") || (Duschbad_LastMode.state == "COMFORT") || (Duschbad_LastMode.state == "OFF")) {
				FRITZ_DECT_301_Duschbad_Mode.sendCommand(Duschbad_LastMode.state.toString)
				FRITZ_DECT_301_Duschbad_ActTemp.sendCommand(Duschbad_LastTemp.state as Number)
			}
			if (Duschbad_LastMode.state == "ON") {
			}
		}
	end
Bitte nicht verwirren lassen: Ich habe das Dachflächenfenster im Büro zum Testen mit eingebaut!
Was klappt, ist, dass ich das Thermostat beim Öffnen des Fensters ansprechen kann; was nicht klappt, ist, dass erstens die Änderung dauerhaft ist und zweitens beim Schließen der Zustand wieder zurückgesetzt wird. Anbei die Ausgabe des Logs (gekürzt):

Code: Alles auswählen

...
2019-12-02 18:20:06.287 [vent.ItemStateChangedEvent] - Fenster_OG_Buero_DFF changed from CLOSED to OPEN
2019-12-02 18:20:06.477 [vent.ItemStateChangedEvent] - Fenster_Alle changed from ON to OFF
2019-12-02 18:20:08.392 [INFO ] [e.smarthome.model.script.myown.rules] - Fenster-auf-im-Duschbad!
2019-12-02 18:20:08.405 [ome.event.ItemCommandEvent] - Item 'FRITZ_DECT_301_Duschbad_Mode' received command OFF
2019-12-02 18:20:08.420 [nt.ItemStatePredictedEvent] - FRITZ_DECT_301_Duschbad_Mode predicted to become OFF
2019-12-02 18:20:08.428 [vent.ItemStateChangedEvent] - FRITZ_DECT_301_Duschbad_Mode changed from AUTOMATIC to OFF
2019-12-02 18:20:21.700 [vent.ItemStateChangedEvent] - FRITZ_DECT_301_Duschbad_Mode changed from OFF to AUTOMATIC
...
2019-12-02 18:20:36.942 [vent.ItemStateChangedEvent] - Fenster_OG_Buero_DFF changed from OPEN to CLOSED
2019-12-02 18:20:36.953 [INFO ] [e.smarthome.model.script.myown.rules] - Fenster-zu-im-Duschbad!
2019-12-02 18:20:36.957 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Fenster-zu-im-Duschbad': 'state' is not a member of 'null'; line 29, column 9, length 23
...
Auch der Editor von Visual Studio Code wirft bereits die Meldung aus: 'state' is not a member of 'null'. Obwohl ich m.E. den Code so übernommen und dann abgewandelt habe, wie von euch vorgeschlagen, funktioniert dies bei mir nicht. Was habe ich übersehen?

fmarkus
Beiträge: 5
Answers: 0
Registriert: 1. Dez 2019 19:29

Re: Temperatur eines FRITZDect 301 per Rule setzen

Beitrag von fmarkus »

Den ersten Fehler habe ich schon gefunden. In der avm.items habe ich 2 Zeilen ergänzt und in der myown.rules die entsprechenden Variablen entfernt:

Code: Alles auswählen

String  Duschbad_LastMode					"DECT Duschbad - Mode vorher [%s]" 
Number  Duschbad_LastTemp					"DECT Duschbad - Temp vorher [%.1f %unit%]"     <temperature>	(gAVM3)
Was bleibt, ist, dass das Setting nicht dauerhaft ist und das Thermostat auf "Automatic" zurückstellt.

Benutzeravatar
peter-pan
Beiträge: 2758
Answers: 30
Registriert: 28. Nov 2018 12:03
Wohnort: Schwäbisch Gmünd

Re: Temperatur eines FRITZDect 301 per Rule setzen

Beitrag von peter-pan »

Das passt auch, wollte dir gerade dazu etwas schreiben(Unterschied Variable und Items=Objekte, oder so ähnlich :P ).

Den Ansatz mit der Fritz-Automatik, habe ich auch noch nicht abschliessend getestet, da ich nur morgens und abends jeweils eine Umschaltzeitpunkt in der Fritzbox für die betreffenden Räume(WC, Bad, Kinderzimmer, Arbeitszimmer) festgelegt habe (pro Thermostat, ). Der grösste Teil der Wohnung ist aber mit Fussbodenheizung und einer entsprechenden Steuerung ausgerüstet und da lasse ich auch die Finger davon.

Man kann natürlich die automatische Steuerung der Thermostate aus der Fritzbox herausnehmen und nur noch "manuell" über OH und entsprechende Rules machen.

Die meisten der Items sind (leider) nur read-only, so dass sich diese aus OH nicht ohne weiteres verändern lassen.

Hast du schon einmal versucht, das Thermostat "per Rule" auf "OFF" zu schalten, nachdem es über die Fritz-Automatik auf "Comfort" bzw. "ECO" gesetzt wurde? Das ist bestimmt eine Herausforderung.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

fmarkus
Beiträge: 5
Answers: 0
Registriert: 1. Dez 2019 19:29

Re: Temperatur eines FRITZDect 301 per Rule setzen

Beitrag von fmarkus »

So, den zweiten Fehler konnte ich nun auch beheben; in der ersten Regel mussten folgende Zeilen

Code: Alles auswählen

			Duschbad_LastMode.postUpdate(FRITZ_DECT_301_Duschbad_RadMode.state)
			Duschbad_LastTemp.postUpdate(FRITZ_DECT_301_Duschbad_SetTemp.state)
und in der zweiten Regel diese Zeilen

Code: Alles auswählen

			FRITZ_DECT_301_Duschbad_RadMode.sendCommand(Duschbad_LastMode.state.toString)
			FRITZ_DECT_301_Duschbad_SetTemp.sendCommand(Duschbad_LastTemp.state as Number)
geändert werden. D.h. vom FRITZ!Dect 301 Thermostat muss der Channel "radiator_mode" bzw. das entsprechende Item geschaltet werden; im Anschluss setzt das Thermostat automatisch den Wert für den Channel/Item "set_temp". Beim Zurückstellen kann dann beides gesetzt werden - wahrscheinlich je nach Belieben; sonst wird der letzte Wert gesetzt.

Vielen Dank für eure Hilfe!

Benutzeravatar
peter-pan
Beiträge: 2758
Answers: 30
Registriert: 28. Nov 2018 12:03
Wohnort: Schwäbisch Gmünd

Re: Temperatur eines FRITZDect 301 per Rule setzen

Beitrag von peter-pan »

Das freut mich, dass es bei dir jetzt klappt. Die Differenzierung, ob der Modus oder die Temperatur gesetzt werden soll ist eigentlich ganz einfach und wird von der Fritzbox erledigt.

Wenn du den Modus (ECO,COMFORT,...) änderst, wird die Fritzbox den passenden Temperaturwert (in der Fritzbox hinterlegt) dazu über das Binding an OH senden.

Wenn du als Modus "ON" an die Fritzbox sendest, wirst du feststellen, dass ein Temperaturwert von 30 Grad eingestellt wird. Wo dieser Wert herkommt weiss ich leider nicht. Also in der Fritzbox konnte ich keine ähnlich Temperaturzuordnung finden. Ich vermute deshalb, dass dieser Temperaturwert durch das AVM-Binding gesetzt wird. Deshalb speichert die Regel beide Werte (Modus und Temp.). Beim Zurückspeichern des Modus (COMFORT, ECO) wird dann der Temperaturwert von der Fritzbox gesetzt und beim Zurückspeichen der Temperatur wird der Modus auf "ON" gesetzt.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

renek74
Beiträge: 66
Answers: 0
Registriert: 26. Nov 2020 08:00

Re: Temperatur eines FRITZDect 301 per Rule setzen

Beitrag von renek74 »

Hallo ich versuche das gerade auch, aber nur mit der Kontrolle ob ein Handy eingeloggt ist. Kannst du bitte nochma deine komplette Rule posten.
Die beiden Items mit lastMode und last Temp bekomme ich ein Fehler angezeigt bei Postupdate. Auch sind beide Werte in den Items NULL.
Vielen Dankfür die Hilfe.

fmarkus
Beiträge: 5
Answers: 0
Registriert: 1. Dez 2019 19:29

Re: Temperatur eines FRITZDect 301 per Rule setzen

Beitrag von fmarkus »

Hallo,

aber klar doch:

Code: Alles auswählen

/***********************************************************/
/*	Fenster_OG_Bad
/***********************************************************/
rule "Fenster-auf-im-Bad"
	when
		Item Fenster_OG_Bad changed from CLOSED to OPEN
	then
		if ((Fenster_OG_Bad.state == OPEN)) {
			logInfo("myown.rules", "Fenster-auf-im-Duschbad!")
			Bad_LastMode.postUpdate(FRITZ_DECT_301_Bad_RadMode.state)
			Bad_LastTemp.postUpdate(FRITZ_DECT_301_Bad_SetTemp.state)
			FRITZ_DECT_301_Bad_RadMode.sendCommand("OFF")
			}
	end

rule "Fenster-zu-im-Bad"
	when
		Item Fenster_OG_Bad changed from OPEN to CLOSED
	then
		if ((Fenster_OG_Bad.state == CLOSED)) {
			logInfo("myown.rules", "Fenster-zu-im-Duschbad!")
			if ((Bad_LastMode.state == "OFF") || (Bad_LastMode.state == "ECO") || (Bad_LastMode.state == "COMFORT") || (Bad_LastMode.state == "BOOST")) {
				FRITZ_DECT_301_Bad_RadMode.sendCommand(Bad_LastMode.state.toString)
				}
			if ((Bad_LastMode.state == "ON")) {
				FRITZ_DECT_301_Bad_SetTemp.sendCommand(Bad_LastTemp.state as Number)
				}
			}
	end
Gruß

Antworten