[gelöst]Heizungssteuerung: DOIF mit Anzahl geöffneter Thermostate schaltet nicht

Begonnen von bmwfan, 19 Januar 2023, 11:26:59

Vorheriges Thema - Nächstes Thema

bmwfan

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

Synology DS720+ mit Docker-Container und Haupt-FHEM, HW-LAN, Jalousienaktoren; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bmwfan

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
Synology DS720+ mit Docker-Container und Haupt-FHEM, HW-LAN, Jalousienaktoren; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

bmwfan

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.
Synology DS720+ mit Docker-Container und Haupt-FHEM, HW-LAN, Jalousienaktoren; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Damian

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 ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF