FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: crispinus am 08 September 2015, 18:00:22

Titel: Problem mit DOIF und komplizierterer Lüftungsschaltung
Beitrag von: crispinus am 08 September 2015, 18:00:22
Hallo zusammen,

folgende Situation: in einem Badezimmer gibt es ein motorbetriebenes Kippfenster (EG.BZ.Fenster), welches mittels Tasterdruck für eine automatisch begrenzte Lüftung bzw. eine Dauerlüftung geöffnet werden soll.
Für die automatische Begrenzung sollen folgende Rahmenbedingungen gelten:
[li]außerdem kann das Fenster jederzeit über einen erneuten Tasterdruck geschlossen werden
[/li][/list]

Als Taster kommt ein ft55 von Eltako zum Einsatz, mit kurzem Tastendruck wird die automatische Lüftung angefordert, mit langem Tastendruck die Dauerlüftung (bei Tasterdruck wird eine entsprechende Dummy-Variable "EG.BZ.FensterAufZeit" oder "EG.BZ.FensterDauerhaft" gesetzt).
Die Lüftungssteuerung selbst wird durch folgendes DOIF-Kommando übernommen:

([EG.BZ.FensterAufZeit] eq "on" or [EG.BZ.FensterDauerhaft] eq "on") (set EG.BZ.Fenster opens) DOELSEIF
  ([?EG.BZ.FensterAufZeit] eq "on" and [EG.BZ.FensterAufZeit:state:sec] > 900 and ([CUL_HM_HM_TC_IT_WM_W_EU_31C240_Weather:humidity] < 70 or [AussenWetter:dewpoint] >= [CUL_HM_HM_TC_IT_WM_W_EU_31C240_Weather:dewpoint])) (set EG.BZ.FensterAufZeit off) DOELSEIF
  ([EG.BZ.FensterAufZeit] eq "off" and [EG.BZ.FensterDauerhaft] eq "off") (set EG.BZ.Fenster closes) DOELSEIF
  ([?EG.BZ.FensterAufZeit] eq "on" and [EG.BZ.FensterAufZeit:state:sec] > 3600) (set EG.BZ.FensterAufZeit off)


Dabei funktioniert sowohl die grundsätzliche Reaktion auf das Setzen der Dummy-Variablen wie auch die Mindestöffnungszeit und die Abhängigkeit von der Luftfeuchtigkeit. Was nicht funktioniert, ist der Punkt mit der maximalen Öffnungszeit (hier über das letzte DOELSEIF-Statement realisiert). Bleibt die Luftfeuchtigkeit z.B. aufgrund der klimatischen Bedingungen (sehr hohe Außentemperaturen) oberhalb von 70%, schließt das Fenster auch nach mehr als 60 Minuten nicht. Ich dachte eigentlich, dass die Nutzung der letzten Änderungszeit des States der Dummy-Variable hierzu taugen müsste.
Hat jemand eine Ahnung, was hier das Problem sein könnte oder wie ich dem Problem weiter auf die Spur kommen könnte?

Vielen Dank!
crispinus
Titel: Antw:Problem mit DOIF und komplizierterer Lüftungsschaltung
Beitrag von: dieda am 08 September 2015, 18:32:31
Die Dummies brauchst du eigentlich nicht und auch die Zeitangabe kann man anders lösen.

Hast du dir schon einmal off-for-timer angeschaut?

Titel: Antw:Problem mit DOIF und komplizierterer Lüftungsschaltung
Beitrag von: Ellert am 08 September 2015, 18:57:00
Es wäre hilfreich wenn Du ein Listing von dem DOIF angibst, bei dem der Fall cmd_4 hätte eintreten sollen.
Ohne weiter Angaben würde ich tippen, dass der Ausdruck  ([CUL_HM_HM_TC_IT_WM_W_EU_31C240_Weather:humidity] < 70 or [AussenWetter:dewpoint] >= [CUL_HM_HM_TC_IT_WM_W_EU_31C240_Weather:dewpoint]) nicht "Falsch" ist, wenn die Zeit > 3600 ist.
Titel: Antw:Problem mit DOIF und komplizierterer Lüftungsschaltung
Beitrag von: crispinus am 08 September 2015, 19:19:46
Zitat von: Ellert am 08 September 2015, 18:57:00
Es wäre hilfreich wenn Du ein Listing von dem DOIF angibst, bei dem der Fall cmd_4 hätte eintreten sollen.
Ohne weiter Angaben würde ich tippen, dass der Ausdruck  ([CUL_HM_HM_TC_IT_WM_W_EU_31C240_Weather:humidity] < 70 or [AussenWetter:dewpoint] >= [CUL_HM_HM_TC_IT_WM_W_EU_31C240_Weather:dewpoint]) nicht "Falsch" ist, wenn die Zeit > 3600 ist.

Das mit dem Listing wird schwierig, da im Moment die Luftfeuchtigkeit zuverlässig in weniger als einer Stunde auf den angestrebten Wert absinkt, ich könnte höchstens die Luftfeuchtigkeit reduzieren, dann bekomme ich vielleicht so ein Listing.
Wenn dieser Ausdruck nicht falsch wäre, dann müsste aufgrund der angegebenen Bedingung das Fenster aber auch schließen, oder nicht? Zumindest, sofern die 15 Minuten Mindestöffnungszeit überschritten sind:
([?EG.BZ.FensterAufZeit] eq "on" and [EG.BZ.FensterAufZeit:state:sec] > 900 and ([CUL_HM_HM_TC_IT_WM_W_EU_31C240_Weather:humidity] < 70 or [AussenWetter:dewpoint] >= [CUL_HM_HM_TC_IT_WM_W_EU_31C240_Weather:dewpoint])) (set EG.BZ.FensterAufZeit off)

Titel: Antw:Problem mit DOIF und komplizierterer Lüftungsschaltung
Beitrag von: Ellert am 08 September 2015, 19:50:55
ZitatWenn dieser Ausdruck nicht falsch wäre, dann müsste aufgrund der angegebenen Bedingung das Fenster aber auch schließen, oder nicht? Zumindest, sofern die 15 Minuten Mindestöffnungszeit überschritten sind

Das hast Du doch schon im ersten Beitrag selbst beantwortet:
ZitatWas nicht funktioniert, ist der Punkt mit der maximalen Öffnungszeit

Es werden immer die Komandos der ersten "wahren" Bedingung ausgeführt. Bei t=3601, ist t > 900 "wahr" und t > 3600 "wahr".

Aus der Commandref:
Zitat
Kommt ein Device in mehreren Bedingungen vor, so wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist.
Titel: Antw:Problem mit DOIF und komplizierterer Lüftungsschaltung
Beitrag von: crispinus am 08 September 2015, 22:06:11
Ah ok, den Passus hatte ich irgendwie immer anders verstanden, aber das erklärt es natürlich. In dem Fall habe ich dann wohl keine andere Wahl, als das Schließen nach maximaler Öffnungszeit in ein weiteres DOIF auszulagern.

Vielen Dank!
Titel: Antw:Problem mit DOIF und komplizierterer Lüftungsschaltung
Beitrag von: Ellert am 09 September 2015, 05:36:24
Oder Du schränkst die Bedingung ein.
...[EG.BZ.FensterAufZeit:state:sec] > 900 and [EG.BZ.FensterAufZeit:state:sec] < 3600 ...