FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Benwish am 25 Dezember 2017, 08:45:30

Titel: Wget hält System auf
Beitrag von: Benwish am 25 Dezember 2017, 08:45:30
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
Titel: Antw:Wget hält System auf
Beitrag von: Benwish am 25 Dezember 2017, 09:46:41
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?  :-[
Titel: Antw:Wget hält System auf
Beitrag von: justme1968 am 25 Dezember 2017, 09:59:49
nimm HttpUtils und dort HttpUtils_NonblockingGet statt wget. Blocking.pm ist unnötiger overhead. 
Titel: Antw:Wget hält System auf
Beitrag von: betateilchen am 25 Dezember 2017, 11:09:58
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...
Titel: Antw:Wget hält System auf
Beitrag von: CoolTux am 25 Dezember 2017, 15:18:16
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.
Titel: Antw:Wget hält System auf
Beitrag von: herrmannj am 25 Dezember 2017, 18:33:59
Full ack. Lwp, wget, blocking call... was für ein Murks. HTTP non blocking get! Nix anderes!