FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Muckiknack am 03 Oktober 2018, 23:30:52

Titel: DOIF wird nicht richtig ausgeführt und auch nur 1x ausgeführt
Beitrag von: Muckiknack am 03 Oktober 2018, 23:30:52
Hallo,

gerade tue ich mich schwer mit der DOIF Funktion.

Aktuell wird sie nur 1x ausgeführt obwohl ich do always nutze.

Zudem wird die IF Anweisung nicht ausgeführt. Hier bin ich mir aber nicht sicher ob ich das mit reading und event -Änderungen richtig verstanden habe.

Zu meinem Problem. Ich möchte gerne mehrere Fensterkontakte mit Anwesenheitsstatus und Überwachung_AN abfragen.

Meine DOIF soll abfragen ob die Anwesenheit auf "schlafen" steht, ob die Überwachung überhaupt aktiv sein soll und ob dann alle Fenster geschlossen sind.

Wenn nur 1 Fenster oder alle offen sind, soll ein Alarm geschaltet werden.

Aktuell sieht so mein Code aus:


####Alarm

define ueberwachungstatus dummy
attr ueberwachungstatus room Alarmanlage
attr ueberwachungstatus setList state:anwesend,abwesend,schlafen
attr ueberwachungstatus webCmd state

define Haustuer_Ueberwachung dummy
attr Haustuer_Ueberwachung icon 10px-kreis-gruen
attr Haustuer_Ueberwachung room Alarmanlage
attr Haustuer_Ueberwachung setList state:on,off
attr Haustuer_Ueberwachung webCmd state

define tuer_dummy dummy
attr tuer_dummy room Alarmanlage
attr tuer_dummy setList state:open,closed
attr tuer_dummy webCmd state

define lampe_alarm dummy
attr lampe_alarm room Alarmanlage
attr lampe_alarm webCmd on:off

define di_alarm_schalfen DOIF ([Haustuer_Ueberwachung] eq "on" and [ueberwachungstatus] eq "schlafen")\
{if ( Value("ueberwachungstatus") eq "schlafen" && Value("Haustuer_Ueberwachung") eq "on" && Value("tuer_dummy") eq "open") {fhem("set lampe_alarm on")} else {fhem("set lampe_alarm off")}}
attr di_alarm_schalfen room Alarmanlage
attr di_alarm_schalfen wait 2,2
attr di_alarm_schalfen do always


tuer_dummy steht aktuell als Ersatz für die späteren Fensterkontakte.

Möchte gerne erstmal diesen kleinen Code verstehen und ihn dann nach und nach erweitern.

Was mache ich falsch das die DOIF nur einmal ausgeführt wird. Muss danach die DOIF wieder auf "initialize" setzen.
Die If  Anweisung wird aktuell gar nicht ausgeführt.

Frage ich hier richtig den Status ab? (Stichwort Event abfrage?)

Gruß,

Mucki
Titel: Antw:DOIF wird nicht richtig ausgeführt und auch nur 1x ausgeführt
Beitrag von: Muckiknack am 04 Oktober 2018, 00:03:04
Die obige Funktion funktioniert soweit das sich der Status wieder ändert wenn ich ueberwachungstatus oder Haustuer_Ueberwachung ändere.

Dann reagiert die DOIF. Ändere ich aber nur den tuer_dummy ändert sich der Alarmwert nicht.

Aber ich möchte ja das die Funktion auf eine Änderung des tuer_dummy reagiert.

Wie bringe ich das der DOIF bei?
Titel: Antw:DOIF wird nicht richtig ausgeführt und auch nur 1x ausgeführt
Beitrag von: Ellert am 04 Oktober 2018, 09:28:09
Im FHEM-Mode lösen nur Auslöserangaben im Bedingungsteil aus.
Titel: Antw:DOIF wird nicht richtig ausgeführt und auch nur 1x ausgeführt
Beitrag von: FHEm2005 am 04 Oktober 2018, 09:56:24
Hallo Muckiknack,

Deine Funktion heißt DOIF! Zu Deutsch "Tue wenn".  ;)
In der Definition kommt zuerst der "Wenn"-Teil (runde Klammer) und danach der "Tue"-Teil (geschweifte Klammer). Solange sich im "Wenn"-Teil nichts ändert, wird sich auch im "Tue"-Teil nichts "tun".
ZitatDie obige Funktion funktioniert soweit das sich der Status wieder ändert wenn ich ueberwachungstatus oder Haustuer_Ueberwachung ändere.
Das ist klar, weil beide Statusmeldungen sich im "Wenn"-Teil befinden.
ZitatMöchte gerne erstmal diesen kleinen Code verstehen und ihn dann nach und nach erweitern.
Zum Verstehen ist die Commandref und ein vorhandenes Wiki bestens geeignet. Ein unbedingtes Muss ist das Dokument "Fhem für Anfänger". Gönne Dir die Zeit zum Lesen. Es gibt nichts Schöneres als eigene Erfolgserlebnisse.

Viele Grüße
Eberhard

Edit: Ellert war 'schnellert'.  :D Trotzdem habe ich es eingestellt, sagt aber das Gleiche  aus.
Titel: Antw:DOIF wird nicht richtig ausgeführt und auch nur 1x ausgeführt
Beitrag von: Per am 04 Oktober 2018, 14:44:28
Warum mischst du DOIF und Perl? Pack doch alles "oben" rein!