Rollos Automatisieren mit DOIF

Begonnen von muechris, 26 Juni 2021, 14:56:20

Vorheriges Thema - Nächstes Thema

muechris

Hallo,

ich hänge seit Tagen an meinem ersten DOIF zur Schlafzimmer Rollo Steuerung es soll auf gehen "wenn es hell wird" (dieser erste Zweig funtkioniert)!
Es gibt einen dummy Helligkeit der zwischen "hell" und "dunkel" wechselt und ein Fenster Sensor der "auf" und "zu" erkennt.
Jetzt soll der Rollo runter fahren wenn es "dunkel" wird und das Fenster "zu" ist. War das Fenster noch "auf" soll nichts passieren, wird das Fenster später geschlossen soll der Rollo dann runter fahren.
Ist es noch dunkel und der Rollo ist unten soll der Rollo auf auf eine Position zum Lüften fahren wenn das Fenster geöffnet wird.

Das habe ich so gelöst:
([Helligkeit:"hell"]) (set DUOFERN_492A6D up)
DOELSEIF ([Helligkeit:"dunkel"] and [Schlafzimmerfenster:"zu"]) (set DUOFERN_492A6D down)
DOELSEIF ([Schlafzimmerfenster:"auf"] and [Helligkeit:"dunkel"] and [DUOFERN_492A6D:"closed"]) (set DUOFERN_492A6D position 70)


Was mache ich falsch?
DOELSEIF ([Helligkeit:"dunkel"]) (set DUOFERN_492A6D down) funktioniert
([Schlafzimmerfenster:"zu"]) (set DUOFERN_492A6D down) funktioniert
packe ich das "and" dazwischen klappt es nicht.  :'(



Raw definition:
defmod Schlafzimmer_Rollo_Automatik DOIF ([Helligkeit:"hell"]) (set DUOFERN_492A6D up)\
DOELSEIF ([Helligkeit:"dunkel"] and [Schlafzimmerfenster:"zu"]) (set DUOFERN_492A6D down)\
DOELSEIF ([Schlafzimmerfenster:"auf"] and [Helligkeit:"dunkel"] and [DUOFERN_492A6D:"closed"]) (set DUOFERN_492A6D position 70)
attr Schlafzimmer_Rollo_Automatik do always

setstate Schlafzimmer_Rollo_Automatik initialized
setstate Schlafzimmer_Rollo_Automatik 2021-06-26 14:43:40 cmd 0
setstate Schlafzimmer_Rollo_Automatik 2021-06-26 14:43:40 mode enabled
setstate Schlafzimmer_Rollo_Automatik 2021-06-26 14:43:40 state initialized
Komm auf die dunkle Seite! Wir haben Kekse!

Damian

Zitat aus der Commandref zu DOIF: https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events

ZitatIn diesem Beispiel wird nach dem Vorkommen von "on" innerhalb des Events gesucht. Falls "on" gefunden wird, wird der Ausdruck wahr und der if-Fall wird ausgeführt, ansonsten wird der else-if-Fall entsprechend ausgewertet. Die Auswertung von reinen Ereignissen bietet sich dann an, wenn ein Modul keinen Status oder Readings benutzt, die man abfragen kann, wie z. B. beim Modul "sequence". Die Angabe von regulären Ausdrücken kann recht komplex werden und würde die Aufzählung aller Möglichkeiten an dieser Stelle den Rahmen sprengen. Weitere Informationen zu regulären Ausdrücken sollten in der Perl-Dokumentation nachgeschlagen werden. Die logische Verknüpfung "and" mehrerer Ereignisse ist nicht sinnvoll, da zu einem Zeitpunkt immer nur ein Ereignis zutreffen kann.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

muechris

#2
Vielen Dank Damian, manchmal braucht man nur einen Schubs in die richtige Richtung. ([event] and [event]) war der Denkfehler habe es auf ([event] and [state]) geändert jetzt scheint es zu funktionieren. ;D

Vielleicht hilft das mal jemandem:
([Helligkeit:"hell"]) (set DUOFERN_492A6D up)
DOELSEIF (([Helligkeit:"dunkel"] and [Schlafzimmerfenster:state] eq "zu") or ([Schlafzimmerfenster:"zu"] and [Helligkeit:state] eq "dunkel")) (set DUOFERN_492A6D down)
DOELSEIF ([Schlafzimmerfenster:"auf"] and [Helligkeit:state] eq "dunkel" and [DUOFERN_492A6D:state] eq "closed") (set DUOFERN_492A6D position 70)
Komm auf die dunkle Seite! Wir haben Kekse!