Die Raw Definition nutze ich dank der Änderung von Rudi (https://forum.fhem.de/index.php/topic,111734.msg1059955.html#msg1059955) immer häufiger wie eine Art FHEM Script Umgebung. Also ein paar Zeilen FHEM Code einfach als Block reinkopieren und starten.
Das ist teilweise tricky: wenn ein Programm mit PopUp endet wird das "Script" jäh beendet. Aber mit einem sleep davor kann man es in den Hintergrund schicken und der Rest läuft weiter.
Wenn eine der Zeilen im Script nach der Ausführung einen Event erzeugt, würde ich gern einmalig darauf reagieren.
Beispiel:
set ... attrTemplate fragt einen Parameter ab.
Wenn das fertig ist (Eingabe erfolgt) wird durch setzen eines Attributes ein Event gefeuert (global:ATTR.SonosBridge.stateFormat.connected)
Auf den will ich reagieren und das Script abschließen. In dem Fall geht "sleep x; Befehl" schlecht weil die Zeit sehr unbestimmt ist.
Hier könnte man ein einmaliges notify gebrauchen. Ich behelfe mir jetzt mit einem notifý welches sich selbst wieder löscht:
define global_notify_1 notify global:ATTR.SonosBridge.stateFormat.connected "pm2 -s start sonos2mqtt";;delete $SELF
Ich habe zum Thema $SELF diese Diskussion (https://forum.fhem.de/index.php?topic=74133.0)gefunden.
Fragen:
- Ist es legitim sich ein notify selbst löschen zu lassen? Vielleicht schlagen ja bei meiner Idee die "alten FHEM Hasen" die Hände über dem Kopf zusammen.
- Wäre das nicht eine Idee so ein einmaliges notify zu implementieren. In der Art sleep regExp;Befehl
- Oder gibt es eine Lösung die ich nicht gefunden habe?
Gruß Otto
Antworten:
1. Wenn es funktioniert, habe ich kein Problem damit. Ist aber mAn nicht wirklich elegant.
2. Zitat https://fhem.de/commandref_modular.html#sleep:
Zitatsleep <sec|timespec|regex> [<id>] [quiet]
...
or as a regex (devicename or devicename:event)
3. Da ich das Problem (vmtl. mangels Beispiel) nicht verstanden habe, kann ich nichts dazu sagen.
Hallo Rudi,
oh wie peinlich - gibts schon :)
Das es zu sleep gehören könnte war mein Gedanke beim letzten Satz im Schreiben. Hätte ich mal doch genauer in die Doku schauen sollen ;D :-[
Danke!
Gruß Otto
Ich will mal noch ein Beispiel liefern:
Einmalige Reaktion auf einen Event.
Aus meinem uneleganten Konstrukt
define global_notify_1 notify global:ATTR.SonosBridge.stateFormat.connected "pm2 -s start sonos2mqtt";;delete $SELF
Wird dieses:
sleep global:ATTR.SonosBridge.stateFormat.connected;"pm2 -s start sonos2mqtt"