Folgendes DOIF funktioniert gut (der Dummy vorne ist eigentlich meine Haustür... die Inhalte noch zu Testzwecken etwas komisch)
([testdummy:"2"] and [haus_Status:state] < 3 and [structure_fensterstatus_eg] eq "offen" and [ttsMsg_an_aus] eq "an")
(set eg_wz_Tablet10Zoll volume 10)
(set eg_wz_Tablet10Zoll ttsMsg Es sind noch Fenster offen)
(set eg_wz_Tablet10Zoll screenMsg Es sind noch Fenster offen)
DOELSEIF
([testdummy:"2"] and [haus_Status:state] < 3 and [structure_fensterstatus_eg] eq "alle_geschlossen" and [ttsMsg_an_aus] eq "an")
(set eg_wz_Tablet10Zoll screenMsg OK: Alle Fenster geschlossen)
Der Dummy ttsMsg_an_aus schaltet Audioansagen auf dem Tablet an und aus.
Allerdings möchte ich das nur für die Zeile
(set eg_wz_Tablet10Zoll ttsMsg Es sind noch Fenster offen)
ausführen. Kann ich das ohne zusätzliches DOELSEIF machen?
Ich habe es nun so gelöst:
([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "offen" and [ttsMsg_an_aus] eq "an")
(set eg_wz_Tablet10Zoll volume 10)
(set eg_wz_Tablet10Zoll ttsMsg Es sind noch Fenster offen)
(set eg_wz_Tablet10Zoll screenMsg Es sind noch Fenster offen)
DOELSEIF
([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "offen")
(set eg_wz_Tablet10Zoll screenMsg Es sind noch Fenster offen)
DOELSEIF
([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "alle_geschlossen" and [ttsMsg_an_aus] eq "an")
(set eg_wz_Tablet10Zoll volume 10)
(set eg_wz_Tablet10Zoll ttsMsg OK)
(set eg_wz_Tablet10Zoll screenMsg OK: Alle Fenster geschlossen)
DOELSEIF
([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "alle_geschlossen")
(set eg_wz_Tablet10Zoll screenMsg OK: Alle Fenster geschlossen)
Hast du das wait-Attribut benutzt?
ja, so:
define doif_fensterstatus_pruefen_haustuer DOIF ([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "offen" and [ttsMsg_an_aus] eq "an") \
(set eg_fl_Tablet10Zoll volume 10)\
(set eg_fl_Tablet10Zoll ttsMsg Es sind noch Fenster offen)\
(set eg_fl_Tablet10Zoll screenMsg Es sind noch Fenster offen)\
DOELSEIF\
([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "offen") \
(set eg_fl_Tablet10Zoll screenMsg Es sind noch Fenster offen)\
DOELSEIF\
([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "alle_geschlossen" and [ttsMsg_an_aus] eq "an") \
(set eg_fl_Tablet10Zoll volume 10)\
(set eg_fl_Tablet10Zoll ttsMsg OK)\
(set eg_fl_Tablet10Zoll screenMsg OK: Alle Fenster geschlossen)\
DOELSEIF\
([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "alle_geschlossen") \
(set eg_fl_Tablet10Zoll screenMsg OK: Alle Fenster geschlossen)
attr doif_fensterstatus_pruefen_haustuer do always
attr doif_fensterstatus_pruefen_haustuer room G_Fensterkontakte,Logik
attr doif_fensterstatus_pruefen_haustuer wait 0,0.7,2:0:0,0.7,2:0
Trotzdem wäre nochmal interessant, ob ich eine Chance hätte in einen einzelnen Befehl eine Bedingung einzubauen.
Das hätte den Charme nicht ein riesiges DOIF aufzubauen, indem man durch jeweils einen Dummy Benachrichtigunen aktivieren und deaktivieren kann, z. B. mit
- Screenausgabe
- Audioausgabe
- Mail
- Push
- ...
Vielleicht gibt es ja etwas (per Perl?)
OK. Dann macht die Aufteilung der set-Befehle Sinn.
Wenn du Perl genauer studierst, kannst du alles machen, was du willst. DOIF hilft dir dabei auf Ereignisse und Timer zu reagieren, der Rest liegt in deiner Hand bzw. hängt deinen Fähigkeiten ab.
Ich fuchse mich gerade erstmal in die tollen FHEM Werkzeuge rein. Macht Mega-Spaß.
Perl wird noch etwas dauern.
Magst Du mir für mein Beispiel zeigen, wie ich mit Perl
die Zeilen
ttsMsg
nur bei
[ttsMsg_an_aus] eq "an"
ausführe?
Zitat von: Gunther am 29 Oktober 2017, 22:13:09
Ich fuchse mich gerade erstmal in die tollen FHEM Werkzeuge rein. Macht Mega-Spaß.
Perl wird noch etwas dauern.
Magst Du mir für mein Beispiel zeigen, wie ich mit Perl
die Zeilen
ttsMsg
nur bei
[ttsMsg_an_aus] eq "an"
ausführe?
{if (Value("ttsMsg_an_aus") eq "an") {fhem"set ... ttsMsg...";}}
da du aber einen FHEM-Befehl ausführen willst, kannst du es auch gleich mit FHEM-Mitteln machen:
IF ([ttsMsg_an_aus] eq "an") (set ... ttsMsg....)
das dürfte für die einfache Anforderung kürzer und damit einfacher sein.
Danke Dir. Das kann ich dann wie folgt einbauen?:
define doif_fensterstatus_pruefen_haustuer DOIF ([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "offen" \
[b]IF ([ttsMsg_an_aus] eq "an")[/b](set eg_fl_Tablet10Zoll volume 10)\
[b]IF ([ttsMsg_an_aus] eq "an")[/b](set eg_fl_Tablet10Zoll ttsMsg Es sind noch Fenster offen)\
(set eg_fl_Tablet10Zoll screenMsg Es sind noch Fenster offen)\
DOELSEIF\
([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "offen") \
(set eg_fl_Tablet10Zoll screenMsg Es sind noch Fenster offen)\
DOELSEIF\
([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "alle_geschlossen" \
[b]IF ([ttsMsg_an_aus] eq "an")[/b](set eg_fl_Tablet10Zoll volume 10)\
[b]IF ([ttsMsg_an_aus] eq "an")[/b](set eg_fl_Tablet10Zoll ttsMsg OK)\
(set eg_fl_Tablet10Zoll screenMsg OK: Alle Fenster geschlossen)
Zitat von: Gunther am 29 Oktober 2017, 22:35:31
Danke Dir. Das kann ich dann wie folgt einbauen?:
define doif_fensterstatus_pruefen_haustuer DOIF ([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "offen" \
[b]IF ([ttsMsg_an_aus] eq "an")[/b](set eg_fl_Tablet10Zoll volume 10)\
[b]IF ([ttsMsg_an_aus] eq "an")[/b](set eg_fl_Tablet10Zoll ttsMsg Es sind noch Fenster offen)\
(set eg_fl_Tablet10Zoll screenMsg Es sind noch Fenster offen)\
DOELSEIF\
([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "offen") \
(set eg_fl_Tablet10Zoll screenMsg Es sind noch Fenster offen)\
DOELSEIF\
([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "alle_geschlossen" \
[b]IF ([ttsMsg_an_aus] eq "an")[/b](set eg_fl_Tablet10Zoll volume 10)\
[b]IF ([ttsMsg_an_aus] eq "an")[/b](set eg_fl_Tablet10Zoll ttsMsg OK)\
(set eg_fl_Tablet10Zoll screenMsg OK: Alle Fenster geschlossen)
Die IF-Anweisungen gehören in den Ausführungsbereich, nicht in die Bedingung des DOIF-Moduls, daher
DOIF ([eg_fl_tuer:"open"] and [haus_Status:state] > 2 and [structure_fensterstatus_eg] eq "offen")
(IF ([ttsMsg_an_aus] eq "an")(set eg_fl_Tablet10Zoll volume 10))
(IF ([ttsMsg_an_aus] eq "an")(set eg_fl_Tablet10Zoll ttsMsg Es sind noch Fenster offen))
(set eg_fl_Tablet10Zoll screenMsg Es sind noch Fenster offen)
...
verstanden. Das hilft mir ein paar Schalter einfacher einzubauen! Danke!