FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: arokh12 am 05 März 2020, 11:48:13

Titel: Notify verzögert ausführen
Beitrag von: arokh12 am 05 März 2020, 11:48:13
Hallo,
gibt es eine Möglichkeit ein Notify verzögert auszuführen? Also ich meine jetzt nicht mittels eines AT Befehls.

Also entweder mittels attr (wozu ich allerdings nicht gefunden habe) oder mittels Sleep.

Wie mache ich das mit Sleep am besten, wenn das notify einen Perl Befehl beinhaltet?
Wenn ich das Notify so aufbaue, dann erhalte ich folgende Fehlermeldung:

define notify_Test Notify Test:.* sleep 60; { Code }

After sleep: Unknown command {
if, try help.
Unknown command }}, try help.


Danke,
arokh12
Titel: Antw:Notify verzögert ausführen
Beitrag von: Otto123 am 05 März 2020, 11:56:50
Hi,

https://fhem.de/commandref_DE.html#command

im define immer doppelt ;;
define notify_Test Notify Test:.* sleep 60;; {}

Du willst ja das es bleibt und nicht den Befehl vom nächsten trennt.
FHEM Kommandozeile
befehl1;befehl2 beide Befehle werden sofort ausgeführt.

Gruß Otto
Titel: Antw:Notify verzögert ausführen
Beitrag von: arokh12 am 05 März 2020, 11:58:44
Zitat von: Otto123 am 05 März 2020, 11:56:50
Hi,

https://fhem.de/commandref_DE.html#command

im define immer doppelt ;;
define notify_Test Notify Test:.* sleep 60;; { Code }

Du willst ja das es bleibt und nicht den Befehl vom nächsten trennt.

Gruß Otto
Hi,
stimmt, da hast du recht aber ich bearbeite das Notify mittels DEF.  Da brauche ich das doch dann nur 1x, oder nicht?
Titel: Antw:Notify verzögert ausführen
Beitrag von: Otto123 am 05 März 2020, 12:00:07
so ist es, da sieht es dann so aus:
Test:.* sleep 60; { }
Titel: Antw:Notify verzögert ausführen
Beitrag von: frank am 05 März 2020, 12:02:45
nicht fhem befehle und perl "mischen".
sleep in den perl-code einarbeiten. aber richtig, da perl-sleep fhem blockiert.
Titel: Antw:Notify verzögert ausführen
Beitrag von: Otto123 am 05 März 2020, 12:06:03
warum nicht mischen? sowas geht prinzipiell (FHEM Kommandozeile)
sleep 5;{fhem("set LichtWzL_Dim on")}
ist am Ende gleich mit
define namenlos at +00:00:05 set LichtWzL_Dim off

Ob das schön ist die andere Frage. Aber ich finde so ein Konstrukt simpler als ein define at bla mitten im Code. Das Ergebnis ist das Gleiche :)
Titel: Antw:Notify verzögert ausführen
Beitrag von: frank am 05 März 2020, 12:21:46
was in der eingabezeile funktioniert, muss aber nicht automatisch im define eines notify funktionieren.
ich muss mal in cref schauen.

"vergleichbar" wäre aber eher:
{fhem("sleep 5; set LichtWzL_Dim on")}
Titel: Antw:Notify verzögert ausführen
Beitrag von: MadMax-FHEM am 05 März 2020, 12:26:55
Zitat von: frank am 05 März 2020, 12:02:45
nicht fhem befehle und perl "mischen".
sleep in den perl-code einarbeiten. aber richtig, da perl-sleep fhem blockiert.

Habe ich versucht bzw. eigentlich schon vielfach laufen...
...aber "neuerdings" Probleme: https://forum.fhem.de/index.php/topic,108970.msg1029272.html#msg1029272

Was läuft da verkehrt!?

Danke!
Und sorry für's "Zwischengrätschen"! ;)

Gruß, Joachim
Titel: Antw:Notify verzögert ausführen
Beitrag von: arokh12 am 05 März 2020, 12:30:05
Zitat von: Otto123 am 05 März 2020, 12:00:07
so ist es, da sieht es dann so aus:
Test:.* sleep 60; { }
Hm, das habe ich auch so. Trotzdem kommt die Fehlermeldung. Ich habe mal ein List angehangen.

Siehst du den Fehler?
Internals:
   CFGFN      /opt/fhem/FHEM/sonstiges.cfg
   DEF        Test:.* sleep 10; {
if ($EVENT eq "on") {
fhem("set Push msg title='PV-Anlage' message='Verbraucher1 eingeschaltet'")
}
elsif ($EVENT eq "off") {
fhem("set Push msg title='PV-Anlage' message='Verbraucher1 ausgeschaltet'");
}}
   FUUID      5c45098a-f33f-60f9-da2e-247997d6c8d2935b
   NAME       Test_notify
   NOTIFYDEV  Test
   NR         105
   NTFY_ORDER 50-Test_notify
   REGEXP     Test:.*
   STATE      2020-03-05 10:49:31
   TRIGGERTIME 1583401771.0105
   TYPE       notify
   READINGS:
     2020-03-05 10:21:02   state           active
Attributes:



Gesendet von iPhone mit Tapatalk
Titel: Antw:Notify verzögert ausführen
Beitrag von: frank am 05 März 2020, 12:31:50
aus meiner lokalen cref:

define <name> notify <pattern> <command>

Execute a command when received an event for the definition <pattern>. If <command> is enclosed in {}, then it is a perl expression, if it is enclosed in "", then it is a shell command, else it is a "plain" fhem.pl command (chain). See the trigger command for testing it. Examples:


danach sollte meine interpretation stimmen.
Titel: Antw:Notify verzögert ausführen
Beitrag von: MadMax-FHEM am 05 März 2020, 12:41:20
Eventuell hat es doch etwas mit dem von mir verlinkten Problem zu tun...

Dachte auch immer, dass "sowas" geht/gehen sollte...
...aber "neuerdings" bekomme ich auch den Fehler "unknown command..." wenn ich "Dinge" eingebe von denen ich ausging es geht/ging schon mal...

EDIT: sleep 5;{fhem("set LichtWzL_Dim on")} geht.
Allerdings {fhem("sleep 5;set LichtWzL_Dim on")} geht nicht... Fehler: "unknown command..."

Gruß, Joachim
Titel: Antw:Notify verzögert ausführen
Beitrag von: frank am 05 März 2020, 12:56:45
Zitat von: MadMax-FHEM am 05 März 2020, 12:41:20
Eventuell hat es doch etwas mit dem von mir verlinkten Problem zu tun...

Dachte auch immer, dass "sowas" geht/gehen sollte...
...aber "neuerdings" bekomme ich auch den Fehler "unknown command..." wenn ich "Dinge" eingebe von denen ich ausging es geht/ging schon mal...

EDIT: sleep 5;{fhem("set LichtWzL_Dim on")} geht.
Allerdings {fhem("sleep 5;set LichtWzL_Dim on")} geht nicht... Fehler: "unknown command..."

Gruß, Joachim
probiere mal ohne leerzeichen nach dem semicolon.
so nutze ich das immer im perlcode.
Titel: Antw:Notify verzögert ausführen
Beitrag von: Otto123 am 05 März 2020, 12:57:02
@Joachim: Habe ich im anderen Thread schon beantwortet: Hier dann doppelt: in fhem("sleep 4;;command")

Frank ich weiß, aber es funktioniert, getestet :)
defmod MyNotifyTestMix notify led:an sleep 5;;{fhem("set LichtWzL_Dim toggle")}
attr MyNotifyTestMix room Test

Und ich würde das auch als "es ist so beschrieben" werten:
else it is a "plain" fhem.pl command (chain)
Es gibt ja auch dokumentiert drei Kommandotypen: https://commandref.fhem.de/#command

Gruß Otto
Titel: Antw:Notify verzögert ausführen
Beitrag von: MadMax-FHEM am 05 März 2020, 13:03:25
Zitat von: frank am 05 März 2020, 12:56:45
probiere mal ohne leerzeichen nach dem semicolon.
so nutze ich das immer im perlcode.

Hab ich auch schon (bin ich mir sicher)...
...ändert nix...

Aber ich schaue mir mal noch mal "alles" an und "spiele" noch ein wenig rum...

Wie geschrieben: was mich wundert, ich war der festen Überzeugung, dass das "so" schon mal ging und ich hab es ja auch "so" im Einsatz...

Aber: ich will "hier" nicht noch mehr "durcheinander" bringen... ;)

Gruß und danke, Joachim
Titel: Antw:Notify verzögert ausführen
Beitrag von: Otto123 am 05 März 2020, 13:12:35
@arokh12 Habe es auch so probiert - funktioniert  ;)
defmod MyNotifyTestMix notify led:an sleep 5;;{\
if ($EVENT eq "an") {fhem("set LichtWzL_Dim toggle")}\
}
Titel: Antw:Notify verzögert ausführen
Beitrag von: frank am 05 März 2020, 13:18:11
ZitatFrank ich weiß, aber es funktioniert, getestet :)
na gut.

ich bleibe aber bei meiner interpretation der cref.
"mischungen" habe ich deshalb wohl nie probiert.

und dieses construct (mit noch mehr perl drumherum) nutze ich vielfach erfolgreich in notify und at:
{fhem("sleep 5;set LichtWzL_Dim on")}
Titel: Antw:Notify verzögert ausführen
Beitrag von: arokh12 am 05 März 2020, 13:24:51
Zitat von: Otto123 am 05 März 2020, 13:12:35
@arokh12 Habe es auch so probiert - funktioniert  ;)
defmod MyNotifyTestMix notify led:an sleep 5;;{\
if ($EVENT eq "an") {fhem("set LichtWzL_Dim toggle")}\
}

Das ist jetzt merkwürdig, ich habe es ja genauso, aber es kommt halt immer die oben genannte Fehlermeldung.

Hier ist jetzt nochmal das Notify aus der CFG. ich sehe da ja jetzt keinen Unterschied zu deinem define Test_notify notify Test:on sleep 10;;{\
if ($EVENT eq "on") {\
fhem("set Push msg title='PV-Anlage' message='Verbraucher1 eingeschaltet'")\
}\
elsif ($EVENT eq "off") {\
fhem("set Push msg title='PV-Anlage' message='Verbraucher1 ausgeschaltet'");;\
}}
Titel: Antw:Notify verzögert ausführen
Beitrag von: Otto123 am 05 März 2020, 13:28:11
Das Problem liegt hier:
fhem("set Push msg title='PV-Anlage' message='Verbraucher1 ausgeschaltet'");;\
}}
Eigentlich nur unnötig, hier aber offenbar von "irgendwem/irgendwas" nicht toleriert ;)
Titel: Antw:Notify verzögert ausführen
Beitrag von: justme1968 am 05 März 2020, 13:31:28
problematisch ist das vermischen in einem einzigen set weil der parser nicht gut damit klar kommt.

in diesem speziellen fall ist das aber keine vermischung von fhem und perl code. alles was nach dem sleep kommt wird nur gemerkt und später ausgeführt. d.h. es gibt drei schritte:
- fhem ebene: sleep mit zwei parametern
- der erste parameter wird genommen und so lange geschlafen
- der zweite parameter wird ausgeführt als ob er eingegeben wurde

zur anzahl der ;
- ; trennt ein kommando vom nächsten.
- wenn das ; nicht zwei kommandos trennen soll muss man es verdoppeln
- wenn man in fhemweb editiert wird das verdoppeln automatisch gemacht
Titel: Antw:Notify verzögert ausführen
Beitrag von: Otto123 am 05 März 2020, 13:36:59
Jetzt bekommt Frank "Aufwind" :D
So wird das ;; am Ende des fhem() vor der Klammer des if toleriert:
defmod MyNotifyTestMix notify led:.* {\
if ($EVENT eq "an") {fhem("sleep 5;;set LichtWzL_Dim toggle");;\
}}


Ich denke: Wenn als einziger FHEM Befehl eine "Perl Klammer" steht {} wird der Inhalt an Perl gegeben und FHEM ist mit der Analyse fertig. Stehen mehrere FHEM Kommandos da: kommando1;{Perl}; set magic {perl};kommando2 usw. Muss die ganze Zeile analysiert werden, dabei kann es auch mal zu "Besonderheiten" kommen.

Daher kommt sicher auch die schon oft gemachte Empfehlung: Wenn Perl dabei ist, dann komplett in Perl ;)
Titel: Antw:Notify verzögert ausführen
Beitrag von: Otto123 am 05 März 2020, 14:19:21
Und der Chef bestätigt (https://forum.fhem.de/index.php/topic,108970.msg1029531.html#msg1029531) Franks Aussage
ZitatDas Mischen von FHEM-, perl- und Shell Befehlen in einer Befehlskette ist nicht zugesichert.
Dass es manchmal funktioniert, beweist noch nicht das Gegenteil.
Ich merk mir das für die Zukunft :)
Titel: Antw:Notify verzögert ausführen
Beitrag von: arokh12 am 05 März 2020, 16:29:00
Zitat von: Otto123 am 05 März 2020, 13:28:11
Das Problem liegt hier:
fhem("set Push msg title='PV-Anlage' message='Verbraucher1 ausgeschaltet'");;\
}}
Eigentlich nur unnötig, hier aber offenbar von "irgendwem/irgendwas" nicht toleriert ;)
Stimmt, du hast recht. Jetzt funktioniert es ohne Probleme [emoji106]

Danke für eure Hilfe [emoji120]