FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: bmwfan am 19 Januar 2023, 11:26:59

Titel: [gelöst]Heizungssteuerung: DOIF mit Anzahl geöffneter Thermostate schaltet nicht
Beitrag von: bmwfan am 19 Januar 2023, 11:26:59
Hallo,
ich bekomme das DOIF, mit dem ich meine Heizungssteuerung optimieren möchte, nicht zum Laufen.

Warum das DOIF?
Meine Heizung (Fussbodenheizung und 1 Handtuchheizkörper im Bad) läuft mit einer Rücklauftemperaturregelung und ist Außentemperaturgesteuert. In jedem Wohnraum ist ein HmIP-BWTH, im Bad ein HmIP-eTRV-2 verbaut. In Nebenräumen noch klassische Thermostate ohne Anbindung an FHEM. Ich habe auch noch Messtechnik installiert, an der ich z.B. die Durchflußmenge im Heizkreis sehe. Mir ist jetzt aufgefallen, dass es Phasen gibt in denen alle Heizkreise geschlossen sind (Durchflussmengenmesser im Heizkreis zeigt 0 m³/Std. an) aber die Heizkreispumpe läuft, da die Rücklauftemperatur ohne tatsächlichen Rücklauf zu niedrig ist. Das hat natürlich mehrere negative Auswirkungen (Pumpe arbeitet gegen geschlossenen Kreis, Heizung läuft bis zur Übertemperaturabschaltung...).

Abstellen wollte ich das dadurch, dass ich den Thermostaten des Handtuchheizkörpers öffne, wenn alle anderen Heizkreise länger als 30 Sek. geschlossen sind und wieder schließe, wenn mind. 1 Fussbodenheizkreis länger als 30 Sek. geöffnet ist.

Leider funktioniert meine Abfrage, dass mind. 1 Thermostat HmIP-BWTH geöffnet ist, nicht und ich finde den Fehler nicht.

(["^HmIP_BWTH_:off"]) (set Heiz_BadOG_Handtuch_HmIP datapoint SET_POINT_TEMPERATURE 30.0) ## Wenn alle Thermostate geschlossen sind, Handtuchheizkörper öffnen damit Heizungspumpe nicht blockiert ist
DOELSEIF ([#"^HmIP_BWTH_:on"] > 0) (set Heiz_BadOG_Handtuch_HmIP datapoint SET_POINT_TEMPERATURE [Heiz_BadOG_Handtuch_HmIP:Solltemp_akt]) ## Anzahl der Thermostate, deren Ventil offen ist abfragen. Wenn 1 Thermostat offen, am Handtuchheizkörper wieder die ursprüngliche Temperatur einstellen

attr do always
attr wait 30:30


Schalten auf Solltemp. 30°C geht, nicht aber das Zurückstellen auf die vorher eingestellte Solltemperatur (mit userreading erstelltes Reading Solltemp_akt des Handtuchheizkörpers). Das Rautezeichen "#", das die Anzahl der geöffneten Heizkreise zählen soll, scheint innerhalb des DOIF nicht zu gehen.

Wie kann ich meine Abfrage so modifizieren, dass ich mind. 1 offenen Heizkreis erkennen kann und damit das Event auslöse?

Grüße Jürgen

Titel: Antw:Heizungssteuerung: DOIF mit Anzahl geöffneter Thermostate schaltet nicht
Beitrag von: Damian am 19 Januar 2023, 12:16:09
Grundsätzlich funktioniert die Syntax im DOIF an allen Stellen - auch in der Bedingung.

Du hast nach dem Trigger vergessen zu definieren welches Reading mit welchem Inhalt gezählt werden soll, siehe: https://fhem.de/commandref_DE.html#DOIF_aggregation
Titel: Antw:Heizungssteuerung: DOIF mit Anzahl geöffneter Thermostate schaltet nicht
Beitrag von: bmwfan am 19 Januar 2023, 12:54:24
Hatte zum Test folgendes DOIF erstellt, um zu prüfen, wenn welche Thermostate offen sind.

(["^HmIP_BWTH_:off"]) (set PushoverJuergen msg 'Alle Thermostate geschlossen' '' 0 '') ## Wenn alle Thermostate geschlossen sind, Handtuchheizkörper öffnen damit Heizungspumpe nicht blockiert ist
DOELSEIF (["^HmIP_BWTH_:on"]) (set PushoverJuergen msg 'Es sind folgende Thermostate offen: [di_Test:state]' '[Heiz_BadOG_Handtuch_HmIP:LEVEL]' 0 '') ## Anzahl der Thermostate, deren Ventil offen ist abfragen. Wenn 1 Thermostat offen, am Handtuchheizkörper wieder die ursprüngliche Temperatur einstellen


Da das problemlos funktioniert hat, dachte ich die Erweiterung um '#' reicht aus.

Versuche es jetzt mit:

([#"^HmIP_BWTH_":state:"on"] >0)

Grüße Jürgen
Titel: Antw:Heizungssteuerung: DOIF mit Anzahl geöffneter Thermostate schaltet nicht
Beitrag von: bmwfan am 20 Januar 2023, 12:53:27
Mit dieser Abfrage werden die Events jetzt richtig ausgewertet:

([#"^HmIP_BWTH_":10.STATE:$_ eq "on"] == 0) (set PushoverJuergen msg 'di_Test: Alle Thermostate geschlossen: [di_Test:state]' '[Heiz_BadOG_Handtuch_HmIP:LEVEL]' '' 0 '') ## Wenn alle Thermostate geschlossen sind und Vorlauftemperatur > 40°C, Handtuchheizkörper öffnen damit Heizungspumpe nicht blockiert ist
DOELSEIF ([#"^HmIP_BWTH_":10.STATE:$_ eq "on"] >= 1) (set PushoverJuergen msg 'Es sind folgende Thermostate offen: [di_Test:state]' '[Heiz_BadOG_Handtuch_HmIP:LEVEL]' 0 '') ## Anzahl der Thermostate, deren Ventil offen ist abfragen. Wenn 1 Thermostat offen, am Handtuchheizkörper wieder die ursprüngliche Temperatur einstellen


Etwas irritierend ist allerdings, dass im DEF-Editor die Zeilen mit einem vorangestelltem Zeichen # ausgegraut werden. Das DOIF arbeitet aber trotzdem.
Titel: Antw:Heizungssteuerung: DOIF mit Anzahl geöffneter Thermostate schaltet nicht
Beitrag von: Damian am 20 Januar 2023, 12:54:51
Zitat von: bmwfan am 20 Januar 2023, 12:53:27
Mit dieser Abfrage werden die Events jetzt richtig ausgewertet:

([#"^HmIP_BWTH_":10.STATE:$_ eq "on"] == 0) (set PushoverJuergen msg 'di_Test: Alle Thermostate geschlossen: [di_Test:state]' '[Heiz_BadOG_Handtuch_HmIP:LEVEL]' '' 0 '') ## Wenn alle Thermostate geschlossen sind und Vorlauftemperatur > 40°C, Handtuchheizkörper öffnen damit Heizungspumpe nicht blockiert ist
DOELSEIF ([#"^HmIP_BWTH_":10.STATE:$_ eq "on"] >= 1) (set PushoverJuergen msg 'Es sind folgende Thermostate offen: [di_Test:state]' '[Heiz_BadOG_Handtuch_HmIP:LEVEL]' 0 '') ## Anzahl der Thermostate, deren Ventil offen ist abfragen. Wenn 1 Thermostat offen, am Handtuchheizkörper wieder die ursprüngliche Temperatur einstellen


Etwas irritierend ist allerdings, dass im DEF-Editor die Zeilen mit einem vorangestelltem Zeichen # ausgegraut werden. Das DOIF arbeitet aber trotzdem.

Der Editor kennt nicht unbedingt die DOIF-Syntax ;)