Hauptmenü

notify mit sleep und qx

Begonnen von olwaldi, 02 August 2021, 15:13:24

Vorheriges Thema - Nächstes Thema

olwaldi

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

Jamo

Ich glaube Du musst 2 semikolon zwischen den beiden qx aufrufen haben, im Raw format sollten dann 4 zu sehen sein.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

yersinia

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 ##\
}
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

betateilchen

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()
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

olwaldi

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

olwaldi

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

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

olwaldi

#7
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

betateilchen

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.


---
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

olwaldi

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