Problem mit DOIF und komplizierterer Lüftungsschaltung

Begonnen von crispinus, 08 September 2015, 18:00:22

Vorheriges Thema - Nächstes Thema

crispinus

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:

  • Öffnung für mindestens 15 Minuten
  • Fenster nicht schließen, wenn die Luftfeuchtigkeit im Raum 70% oder mehr beträgt (außer, der Taupunkt innen ist niedriger als außen)
  • das Fenster soll in jedem Fall nach Ablauf von 60 Minuten schließen (auch dann, wenn die Luftfeuchtigkeit noch zu hoch ist)
[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

dieda

Die Dummies brauchst du eigentlich nicht und auch die Zeitangabe kann man anders lösen.

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

Komponenten:
Sensoren und Aktoren: FS20, Max!, Zigbee, Zwave
IODev:  Cul1101, MaxLan, ZWAVE, Deconz
Router: KD-Fritte (6360)
Sonstiges: Raspberries,  1x LMS,1 FHEM, 1 x zum Testen,  Logitech-Clients,  Onkyo, SamsungTV, Squeezebox, TabletUIs

Ellert

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.

crispinus

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)


Ellert

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.

crispinus

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!

Ellert

Oder Du schränkst die Bedingung ein.
...[EG.BZ.FensterAufZeit:state:sec] > 900 and [EG.BZ.FensterAufZeit:state:sec] < 3600 ...