[gelöst] bei mehreren Befehlen für einen davon eine Ausnahme setzen

Begonnen von Gunther, 29 Oktober 2017, 21:16:49

Vorheriges Thema - Nächstes Thema

Gunther

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?
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Gunther

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)
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Gunther

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?)
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Gunther

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?
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Gunther

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)
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Damian

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)
...




Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Gunther

verstanden. Das hilft mir ein paar Schalter einfacher einzubauen! Danke!
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden