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
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?
Im FHEM-Mode lösen nur Auslöserangaben im Bedingungsteil aus.
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.
Warum mischst du DOIF und Perl? Pack doch alles "oben" rein!