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/ (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
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? :-[
nimm HttpUtils und dort HttpUtils_NonblockingGet statt wget. Blocking.pm ist unnötiger overhead.
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...
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.
Full ack. Lwp, wget, blocking call... was für ein Murks. HTTP non blocking get! Nix anderes!