[gelöst] Template - Befehl "excecuted" aber nichts passiert

Begonnen von cbl, 29 August 2022, 16:58:34

Vorheriges Thema - Nächstes Thema

cbl

Hallo,

die DOIF-Templates sind eine feine Sache und ich habe gerade mein zweites umfangreiches DOIF "templatifiziert". Im ersten Template verschicke ich mit Signalbot-Nachrichten zu bestimmten Ereignissen meiner Zigbee-Geräte. Das funktioniert super.

Mit dem zweiten Template möchte ich mein großes DOIF zur Benachrichtigung für geöffnete Fenster beim Verlassen des Hauses ablösen. Das funktioniert nur leider noch nicht so recht und ich finde das Problem nicht.

DEF TPL_fenster ({if ([bewohner] eq "abwesend" and [?structure.fenster.keller:state] eq "$3" and [?structure.fenster.eg:state] eq "$4" and [?structure.fenster.og:state] eq "$5" and [?structure.fenster.dg:state] eq "$6") {fhem("msg audio \@sonos.arbeitszimmer 20 |$1|$2");; }})
TPL_fenster (gong.mp3,Alle Fenster sind geschlossen,geschlossen,geschlossen,geschlossen,geschlossen)
TPL_fenster (gong.mp3,Es ist noch mindestens ein Fenster im Keller geoeffnet,offen,geschlossen,geschlossen,geschlossen)


Beim Zusammenbau hier habe ich aber einen Fehler versteckt. DOIF sagt mir beim Ausführen der beiden Blöcke "executed". Eine Ansage kommt dennoch nicht. Wenn ich nur den MSG-Befehl alleine ausführe, kommt jedoch eine Ansage.

Was übersehe ich hier?

Gruß
Christian

Damian

Execute bedeutet nur, dass deine if-Abfrage aufgeführt wurde, ob sie wahr war steht auf einem anderen Blatt.

Mit list kannst du überprüfen, ob die beiden generierten Blöcke so sind, wie du es wolltest.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cbl

#2
Hallo,

das List sieht so aus wie erwartet:

     0          if (::InternalDoIf($hash,'bewohner','STATE') eq "abwesend" and ::ReadingValDoIf($hash,'structure.fenster.keller','state') eq "geschlossen" and ::ReadingValDoIf($hash,'structure.fenster.eg','state') eq "geschlossen" and ::ReadingValDoIf($hash,'structure.fenster.og','state') eq "geschlossen" and ::ReadingValDoIf($hash,'structure.fenster.dg','state') eq "geschlossen") {fhem("msg audio \@sonos.arbeitszimmer 20 |gong.mp3|Alle Fenster sind geschlossen");; }
     1          if (::InternalDoIf($hash,'bewohner','STATE') eq "abwesend" and ::ReadingValDoIf($hash,'structure.fenster.keller','state') eq "offen" and ::ReadingValDoIf($hash,'structure.fenster.eg','state') eq "geschlossen" and ::ReadingValDoIf($hash,'structure.fenster.og','state') eq "geschlossen" and ::ReadingValDoIf($hash,'structure.fenster.dg','state') eq "geschlossen") {fhem("msg audio \@sonos.arbeitszimmer 20 |gong.mp3|Es ist noch mindestens ein Fenster im Keller geoeffnet");; }


Wenn ich
{fhem("msg audio \@sonos.arbeitszimmer 20 |gong.mp3|Es ist noch mindestens ein Fenster im Keller geoeffnet");; }

in die Befehlszeile kopiere und ausführe, ertönt die gewünschte Ansage. Wenn ich block_01 im DOIF ausführe, passiert nichts (außer "executed" in den Readings).

Damian

Zitat von: cbl am 29 August 2022, 17:26:00
Wenn ich
{fhem("msg audio \@sonos.arbeitszimmer 20 |gong.mp3|Es ist noch mindestens ein Fenster im Keller geoeffnet");; }

in die Befehlszeile kopiere und ausführe, ertönt die gewünschte Ansage. Wenn ich block_01 im DOIF ausführe, passiert nichts (außer "executed" in den Readings).

Dann definiere dein Tamplate ohne if nur mit {fhem... und führe es per set block aus. Wenn das funktioniert, dann weißt du, dass deine Bedingung des if-Befehls nicht greift.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cbl

Danke für die Hinweise. Es funktioniert nun. Ursache unklar. Vielleicht war es ein temporäres SONOS-Problem. Mit DOIF hat es wohl nichts zu tun.