FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: olwaldi am 02 August 2021, 15:13:24

Titel: notify mit sleep und qx
Beitrag von: olwaldi am 02 August 2021, 15:13:24
Hallo!

Ich habe schon viel gegoogelt und in der Doku gelesen, aber mir gelingt es nicht, auf ein Event hin nach 7s Wartezeit zwei curl Kommandos abzusetzen. Hier mein nicht funktionierender Versuch:
defmod HarmonySAT notify HarmonyHub:currentActivity:.SAT sleep 7;; {\
  qx(curl --silent --output /dev/null http://osmio4kplus/web/remotecontrol?command=139);;\
  qx(curl --silent --output /dev/null http://osmio4kplus/web/remotecontrol?command=139)\
}

Beim Probieren hat sich letzendlich sogar mein fhem aufgehängt, daher meine Frage hier.

Das Problem wird wohl durch das zweite qx Kommando ausgelöst. Mit einem qx klappts. Mit zweien gibts Syntax Error
Unknown command qx(curl, try help.
2021.08.02 14:07:02 2: After sleep: Unknown command {
, try help.



Grüßle, Michael
Titel: Antw:notify mit sleep und qx
Beitrag von: Jamo am 02 August 2021, 15:24:56
Ich glaube Du musst 2 semikolon zwischen den beiden qx aufrufen haben, im Raw format sollten dann 4 zu sehen sein.
Titel: Antw:notify mit sleep und qx
Beitrag von: yersinia am 02 August 2021, 15:34:06
Nach dem zweiten qx fehlen erstmal zwei ; (bzw eins im Editorfenster):
defmod HarmonySAT notify HarmonyHub:currentActivity:.SAT sleep 7;; {\
  qx(curl --silent --output /dev/null http://osmio4kplus/web/remotecontrol?command=139);;\
  qx(curl --silent --output /dev/null http://osmio4kplus/web/remotecontrol?command=139);; ##<--- HIER ##\
}
Titel: Antw:notify mit sleep und qx
Beitrag von: betateilchen am 02 August 2021, 16:34:45
qx(curl --silent --output /dev/null http://osmio4kplus/web/remotecontrol?command=139)

warum macht man sowas eigentlich mit Aufrufen ins Betriebssystem und nicht mit FHEM Bordmitteln, z.B. mit GetFileFromURL()
Titel: Antw:notify mit sleep und qx
Beitrag von: olwaldi am 02 August 2021, 16:35:23
Danke für eure Tips. Es funktioniert mit 2x je 4 Semikolons:
defmod HarmonySAT notify HarmonyHub:currentActivity:.SAT sleep 7;; {\
  qx(curl --silent --output /dev/null http://osmio4kplus/web/remotecontrol?command=139);;;;\
  qx(curl --silent --output /dev/null http://osmio4kplus/web/remotecontrol?command=139);;;;\
}


Grüßle, Michael
Titel: Antw:notify mit sleep und qx
Beitrag von: olwaldi am 02 August 2021, 16:46:21
Zitat von: betateilchen am 02 August 2021, 16:34:45
qx(curl --silent --output /dev/null http://osmio4kplus/web/remotecontrol?command=139)

warum macht man sowas eigentlich mit Aufrufen ins Betriebssystem und nicht mit FHEM Bordmitteln, z.B. mit GetFileFromURL()

Die von Dir vorgeschlagene Alternative kannte ich nicht. Ich will allerdings nix holen, sondern nur zwei Befehle an meinen neuen SAT-Receiver schicken (als workaround für einen Bug im Receiver).

Ich habe auch mal ENIGMA2 in fhem ausprobiert. Funktioniert prima, belastet aber m. M. n. mit all seinen readings/events meinen Raspi unnötig - schließlich nutze ich fhem genau für diese zwei Befehle (mit curl). ENIGMA2 wäre eine super Lösung, wenn es das Einschalten des Receivers sofort per event melden würde, das dauert aber wegen pollens bis zu 45s.


Grüßle, Michael
Titel: Antw:notify mit sleep und qx
Beitrag von: betateilchen am 02 August 2021, 16:52:14
Zitat von: olwaldi am 02 August 2021, 16:46:21
Ich will allerdings nix holen, sondern nur zwei Befehle an meinen neuen SAT-Receiver schicken

Genaugenommen willst Du beides nicht.

Die Aufgabe ist: Du willst irgendeine URL aufrufen.
Dass Dein Receiver daraufhin einen Befehl ausführt, ist lediglich die Folge des URL-Aufrufs.

Und das Aufrufen einer URL geht in FHEM am einfachsten mit den Funktionen aus HttpUtils.pm.

Also anstatt
qx(curl ...)

einfach
GetFileFromURL('http://osmio4kplus/web/remotecontrol?command=139')

verwenden. Dass Du keinen Rückgabewert aus dem Aufruf benötigst, spielt dabei keine Rolle.
Titel: Antw:notify mit sleep und qx
Beitrag von: olwaldi am 03 August 2021, 09:00:43
Danke für die Info. Hab's umgestellt. Allerdings gibt es ungewollt Einträge im Log mit den Rückgabewerten:
2021.08.03 08:48:14 2: After sleep: <?xml version="1.0" encoding="UTF-8"?>
<e2remotecontrol>
<e2result>True</e2result>
<e2resulttext>RC command '139' has been issued</e2resulttext>
</e2remotecontrol>

2021.08.03 08:48:15 2: After sleep: <?xml version="1.0" encoding="UTF-8"?>
<e2remotecontrol>
<e2result>True</e2result>
<e2resulttext>RC command '139' has been issued</e2resulttext>
</e2remotecontrol>

2021.08.03 08:48:15 2: After sleep: <?xml version="1.0" encoding="UTF-8"?>
<e2remotecontrol>
<e2result>True</e2result>
<e2resulttext>RC command '139' has been issued</e2resulttext>
</e2remotecontrol>

Wundern tut mich obendrein, warum ich die Rückgabewerte 3x sehe, obwohl das Kommando nur 2x geschickt wird. Sicherheitshalber habe ich das Log-File vor dem Testen gelöscht. Ich habe erfolglos versucht, die Rückgabe in einem lokalen String zu speichern. Und verbose für das notify steht auf 0.
defmod HarmonySAT notify HarmonyHub:currentActivity:.SAT sleep 7;; {\
  my $response = "" ;;;;\
  $response = GetFileFromURL('http://osmio4kplus/web/remotecontrol?command=139');;;;\
  $response = GetFileFromURL('http://osmio4kplus/web/remotecontrol?command=139');;;;\
}


Aus Sicht des Receivers scheint das Kommando wie beabsichtigt 2x geschickt zu werden.

Korrektur: Ich triggere jetzt auf den Event activity anstelle von currentActivity. Scheinbar wird currentActivity 3x getriggert, wohingegen activity nur 1x getriggert wird. Bleibt die Frage, warum dann ein ungewollter Eintrag im Log auftaucht, unabhängig davon, ob ich das GetFileFromURL 1x oder 2x sende. Die response-Variable habe ich wieder entfernt.


Grüßle, Michael
Titel: Antw:notify mit sleep und qx
Beitrag von: betateilchen am 03 August 2021, 09:27:33
Die Meldungen "After sleep: ..." kommen nicht aus Deinem notify, sondern direkt aus fhem.pl. Genauer gesagt aus dem Abschnitt, den fhem.pl NACH dem sleep (also nach den 7 Sekunden) ausführt. Die Zuweisung an eine Variable hat dabei keine Auswirkungen.

Probier mal, ob mit sleep '7 quiet' die Meldungen verschwinden.

Warum der URL Aufruf drei Mal ausgeführt wird - keine Ahnung. Das war vermutlich vorher auch schon so, nur wurde es da nicht protokolliert.


---
Titel: Antw:notify mit sleep und qx
Beitrag von: olwaldi am 03 August 2021, 09:35:22
Danke, mit quiet ist Ruhe:-)

Und auch die falsche Anzahl von Ausführungen ist mir mittlerweile klar (vgl. auch meine Korrektur des vorigen posts) - der Event, auf den ich ursprünglich getriggert habe, kommt 3x.


Grüßle, Michael