FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: cocojambo am 09 August 2022, 14:21:35

Titel: DOIF mit if Befehlen und dem Attribut wait, geht irgendwie nicht
Beitrag von: cocojambo am 09 August 2022, 14:21:35
Ich steuere die gesamt Unterhaltungselektronic mit DOIF und den Abfragen mit if um den Zustand der einzelnen Geräte festzustellen um dann entsprechend verschiedene Optionen zu schalten ( z.B. TV sehen, BluRay sehen, Radio hören, etc.) Zwischen den einzelnen Schaltoptionen sollen aber immer 5 Sekunden Pause sein.
Wenn dann die gesamte Anlage ausgeschaltet wird, soll die Beleuchtung noch 30 Sekunden an sein.

........DOELSEIF([HarmonyHub:currentActivity] eq "PowerOff") (set AV_Receiver off) (set Kodi_Sw_04 on-for-timer 30)
(IF ([Subwoofer_Sw_06:state] eq "on") (set Subwoofer_Sw_06 Aus))
(IF ([Dreambox_Sw_08_dummy:state] eq "on") (set Dreambox_Sw_08_dummy Stby))
(IF ([Television_Sw_01:state] eq "on") (set Television_Sw_01 Aus))
(IF ([Ambilight_Sw_05:state] eq "on") (set Ambilight_Sw_05 Aus))
(IF ([Blu_Ray_Player_Sw_03:state] eq "on") (set Blu_Ray_Player_Sw_03 Aus))
(IF ([Laptop_Sw_02:state] eq "on") (set Laptop_Sw_02 Aus))
(IF ([Phono_Sw_07:state] eq "on") (set Phono_Sw_07 Aus)) (set hueBridge1_HUEGroup0 off)

DOELSE


Die Wartezeit für jedes einzelne Gerät steuere ich mit dem Attribut wait.

wait .....:0,5,5,5,5,5,5,5,5,30

Aber der Befehl wait wird nicht verarbeitet. Die einzelnen set-Befehle werden ohne jegliche Wartezeit erledigt und auch der wait Befehl für die "HUE-Beleuchtung" findet keine Beachtung, schaltet einfach alles durch ohne Wartezeit.
Woran liegt das und gibt es dafür eine Lösung?
oder habe ich einen Denkfehler gemacht?

Gruß aus Köln
Norbert
Titel: Antw:DOIF mit if Befehlen und dem Attribut wait, geht irgendwie nicht
Beitrag von: Damian am 09 August 2022, 18:57:02
Bei mir funktioniert deine Definition. Im Reading wait_timer kann man sehen, wie die Befehl in zeitlicher Abfolge nacheinander ausgeführt werden.
Titel: Antw:DOIF mit if Befehlen und dem Attribut wait, geht irgendwie nicht
Beitrag von: Per am 09 August 2022, 23:51:46
Statt IF nimm lieber FILTER!
Titel: Antw:DOIF mit if Befehlen und dem Attribut wait, geht irgendwie nicht
Beitrag von: Gisbert am 13 August 2022, 17:56:49
FILTER! ist so viel übersichtlicher als IF-Abfragen. Nachdem ich mal kapiert hatte, wie es funktioniert, hatte ich all die IF-Konstrukte rausgeschmissen.

Beispiele sehen so aus:
set <dein Device>:FILTER=cmd!=Aus Aus
oder
set <dein Device>:FILTER=cmd=An Aus

Das Ausrufezeichen im 1. Beispiel ist eine Verneinung.

Es geht auch sowas, d.h. man kann auch mehrere Zustände filtern, hier dann auch in der verneinten Form:
set <dein Device>:FILTER=cmd!=Aus|Zu Aus

Viele Grüße Gisbert
Titel: Antw:DOIF mit if Befehlen und dem Attribut wait, geht irgendwie nicht
Beitrag von: cocojambo am 14 August 2022, 15:08:35
@ Damian
Du hast recht, in wait_timer kann man die zeitige Abfolge sehen. Ich hatte nur in "wait" zu wenige DOELSEIF mit dem Doppelpunkt berücksichtigt. Bei mir wird 6x hintereinander mit DOELSEIF abgefragt. Ich hatte aber nur 5 berücksichtigt.

@Per
FILTER kenne ich überhaupt nicht, auch mit den Ausführungen im Board hätte ich das auch nie kapiert, wenn Gisbert hier kein Beispiel gepostet hätte.

@Gisbert
Deine Beispiele verstehe ich, aber was ist der Vorteil wenn man statt "if" "FILTER" außer der Übersichtlichkeit, verwendet?
Ich finde die Idee das so zu machen, schon besser und werde es auf jeden Fall mal vorsichtig testen.

Vielen Dank an Euch
Gruß aus "Kölle"
Nobbi
Titel: Antw:DOIF mit if Befehlen und dem Attribut wait, geht irgendwie nicht
Beitrag von: Gisbert am 14 August 2022, 18:00:48
Zitat@Gisbert
Deine Beispiele verstehe ich, aber was ist der Vorteil wenn man statt "if" "FILTER" außer der Übersichtlichkeit, verwendet?
Ich finde die Idee das so zu machen, schon besser und werde es auf jeden Fall mal vorsichtig testen.

Vielen Dank an Euch
Gruß aus "Kölle"
Nobbi

Das Hauptargument für mich ist die deutlich bessere Lesbarkeit. Wie das ganze dann im Maschinenraum von Perl und Linux umgesetzt wird, und ob es Performance-Unterschiede gibt, kann ich nicht sagen. Ich kann mir aber kaum vorstellen, dass es da einen Unterschied gibt.

Da du "Kölle" erwähnt hast:
https://forum.fhem.de/index.php/topic,128747.0.html (https://forum.fhem.de/index.php/topic,128747.0.html)

Viele​ Grüße​ Gisbert​