Hauptmenü

Wget hält System auf

Begonnen von Benwish, 25 Dezember 2017, 08:45:30

Vorheriges Thema - Nächstes Thema

Benwish

Hallo zusammen,

ich habe mir von MeinTechBlog eine Anleitung gezogen, wie man FHEM mit Prowl benutzt (http://www.meintechblog.de/2013/11/howto-mit-fhem-push-nachrichten-aufs-iphone-schicken/). Hierfür wird wget benutzt, um über http auf die Prowl-Api zuzugreifen:

sub prowl
{
my $subject = $_[0];
my $event = $_[1];
my $priority = $_[2];
my $ret = "";
$ret .=  system("wget -q -O /dev/null 'http://api.prowlapp.com/publicapi/add?apikey=xxxxxxxxxxx&application=xxxxxxxxx&event=$event&priority=$priority&description=$subject'");
$ret =~ s,[r
]*,,g;
Log 1, "prowl returned: $ret";
}


Problem ist, dass wget (anscheinend) mein komplettes System erstmal blockiert, bis der wget-Befehl abgeschlossen ist. Wenn ich z.B. eine Nachricht verschicken und mehrere Lampen schalten möchte, dann verzögert sich das Schalten der Lampen um 2-3 Sekunden, bis die Push-Message abgeschickt wurde.

Ich habe nun auch schon mal versucht, mit dem Modul "Blocking.pm" zu arbeiten. Wenn ich aber BlockingCall() aufrufe, sagt er mir immer, dass es eine undefinierte SubRoutine ist. Muss ich Blocking.pm noch irgendwie in FHEM einbinden? im /opt/fhem/FHEM/ Ordner ist sie drin...

Vielleicht kann mir jemand weiterhelfen? :)
Gruß,
BenWish

Benwish

So, das importieren von Blocking.pm habe ich jetzt hinbekommen.
Leider funktioniert mein Aufruf noch nicht richtig, weil er die Argumente für die folgende Prozedur nicht richtig übergibt...

Laut der Wiki-Seite sollten die in einem String stehen, getrennt mit "|":
BlockingCall($blockingFn, $arg, $finishFn, $timeout, $abortFn, $abortArg);
Beispiel für $arg: "DeviceName|Argument1|Argument2"

Wenn ich das in meinen Aufruf einbaue, habe ich am Ende nur Datenmüll..
BlockingCall("prowl","Test|$subject|$event|$priority|$url");

Weiß jemand Rat?  :-[

justme1968

nimm HttpUtils und dort HttpUtils_NonblockingGet statt wget. Blocking.pm ist unnötiger overhead. 
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

Zitat von: Benwish am 25 Dezember 2017, 08:45:30
ich habe mir von MeinTechBlog eine Anleitung gezogen

oder frag einfach dort nach einer Lösung, wo Du den Unfug auch her hast...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Statt auf fast 5 Jahre alte Blogbeiträge zu vertrauen könnte man hier im Forum suchen.

https://forum.fhem.de/index.php/topic,58192.0.html

Auch nicht gerade tau frisch aber dafür mit besseren Support, da bin ich mir sicher.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

herrmannj

Full ack. Lwp, wget, blocking call... was für ein Murks. HTTP non blocking get! Nix anderes!