FHEM Forum

FHEM => Sonstiges => Thema gestartet von: jailbreaker07 am 05 März 2018, 11:55:38

Titel: Code mit HTTP-Request auf non-blocking umstellen
Beitrag von: jailbreaker07 am 05 März 2018, 11:55:38
Hallo,
Mit den unten stehenden Code schaltet ich bei drei Tablets per HTTP Request auf Kameraansicht um. Bei einen Tab geht das noch ganz gut, bei dreien jedoch wird fhem für einige Sekunden komplett blockiert....
Wie stelle ich den unten stehen Code auf non-blocking um?

([Kamera_Ost] eq "on" or [Kamera_West] eq "on") 
{GetFileFromURL("http://192.168.1.169:8080/automagic/Kamera")}
{GetFileFromURL("http://192.168.1.139:8080/automagic/Kamera")}
{GetFileFromURL("http://192.168.1.136:8080/automagic/Kamera")}
DOELSEIF
([Kamera_Ost] eq "off" and [Kamera_West] eq "off") 
{GetFileFromURL("http://192.168.1.169:8080/automagic/Wetter")}
{GetFileFromURL("http://192.168.1.139:8080/automagic/Wetter")}
{GetFileFromURL("http://192.168.1.136:8080/automagic/Wetter")}


Vielen Dank für die Hilfe

Gruß

Thorsten


Gesendet von iPhone mit Tapatalk
Titel: Antw:Code mit HTTP-Request auf non-blocking umstellen
Beitrag von: Otto123 am 05 März 2018, 12:41:23
Hi Thorsten,

im Forum gefunden: statt GetHttpFile besser HttpUtils_NonblockingGet
https://wiki.fhem.de/wiki/HttpUtils

Vielleicht kommst Du so weiter.

Gruß Otto
Titel: Antw:Code mit HTTP-Request auf non-blocking umstellen
Beitrag von: jailbreaker07 am 05 März 2018, 13:48:01
Hallo,
Das habe ich auch schon gefunden.... nur weis ich nicht wie ich das anwenden
muss..... So geht es schonmal nicht....:
([Kamera_Ost] eq "on" or [Kamera_West] eq "on") 
{HttpUtils_NonblockingGet("http://192.168.1.169:8080/automagic/Kamera")}



Gesendet von iPhone mit Tapatalk
Titel: Antw:Code mit HTTP-Request auf non-blocking umstellen
Beitrag von: Otto123 am 05 März 2018, 13:52:26
Kann ich Dir leider auch nicht exakt sagen, aber in meinem Link ist sogar BeispielCode - ja, der ist viel aufwendiger. Aber einmal gemacht und gut, schreibst Du einfach in die 99_myUtils.pm

Oder Du nimmst wie viele einfach curl oder wget und einen Systemaufruf in "", der ist non blocking.
("curl http://192.168.1.169:8080/automagic/Kamera")

Ich bin etwas unsicher wegen dem Syntax im DOIF, aber probieren ...

Gruß Otto
Titel: Antw:Code mit HTTP-Request auf non-blocking umstellen
Beitrag von: CoolTux am 05 März 2018, 14:13:30

HttpUtils_NonblockingGet({url => "http://192.168.1.169:8080/automagic/Kamera",timeout => 15, callback => sub($$$){ ... })


Versuche das mal. Die Frage ist ja was passiert dann mit den Daten. Im Moment wird die url aufgerufen und das war es. callback ist die Funktion in der drin steht was mit den Daten passieren soll. Hier muss also wohl noch was gemacht werden.
Titel: Antw:Code mit HTTP-Request auf non-blocking umstellen
Beitrag von: jailbreaker07 am 05 März 2018, 14:15:10
Mit dem Aufruf löse ich in Automagic einen Flow aus....


Gesendet von iPhone mit Tapatalk
Titel: Antw:Code mit HTTP-Request auf non-blocking umstellen
Beitrag von: marvin78 am 05 März 2018, 14:16:26
Die Frage zielte darauf ab, ob du dann auch Daten zurück bekommst, die du verarbeiten musst/kannst (sowas, wie ein 'ok'). Das würde im Callback geschehen.
Titel: Antw:Code mit HTTP-Request auf non-blocking umstellen
Beitrag von: jailbreaker07 am 05 März 2018, 14:18:55
Die Daten die zurückkommen werden nicht verarbeitet...  Ein Ok als Feedback währe aber nicht verkehrt....


Gesendet von iPhone mit Tapatalk
Titel: Antw:Code mit HTTP-Request auf non-blocking umstellen
Beitrag von: CoolTux am 05 März 2018, 14:24:41
Und AMAD möchtest Du dafür nicht nutzen? Das aktuelle AMAD kann Fotos über die Kamera machen. Darum geht es ja anscheinend oder?
Titel: Antw:Code mit HTTP-Request auf non-blocking umstellen
Beitrag von: jailbreaker07 am 05 März 2018, 14:31:24
Im Tablett wir ein Live Bild der Kameras eingeblendet die viewer App dafür wird dann halt über automagic gestartet...  brauche halt nur einen Aufruf der non-blockin ist... die nächste Baustelle wird dann Pushover und Pushbullet sein.... die blockieren  ja auch ziemlich...


Gesendet von iPhone mit Tapatalk
Titel: Antw:Code mit HTTP-Request auf non-blocking umstellen
Beitrag von: CoolTux am 05 März 2018, 14:33:58
Ach so, na dann so

HttpUtils_NonblockingGet({url => "http://192.168.1.169:8080/automagic/Kamera",timeout => 5, callback => sub($$$){ ... })

      $          $      $
$param, $err, $data
Titel: Antw:Code mit HTTP-Request auf non-blocking umstellen
Beitrag von: jailbreaker07 am 05 März 2018, 16:54:09
Zitat von: Otto123 am 05 März 2018, 13:52:26
Kann ich Dir leider auch nicht exakt sagen, aber in meinem Link ist sogar BeispielCode - ja, der ist viel aufwendiger. Aber einmal gemacht und gut, schreibst Du einfach in die 99_myUtils.pm

Oder Du nimmst wie viele einfach curl oder wget und einen Systemaufruf in "", der ist non blocking.
("curl http://192.168.1.169:8080/automagic/Kamera")

Ich bin etwas unsicher wegen dem Syntax im DOIF, aber probieren ...

Gruß Otto

So funktioniert das ganze ohne blocking, jedoch kommt bei jeden Aufruf folgendes im Logfile:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0


Verbose habe ich im ausführenden DOIF auf 0 gestellt, aber die Meldung kommt immer noch....

Gruß

Thorsten
Titel: Antw:Code mit HTTP-Request auf non-blocking umstellen
Beitrag von: CoolTux am 05 März 2018, 16:58:47
Du musst curl mit Optionen aufrufen das er solche Meldungen nicht bringt. Musst mal bisschen schauen.
Titel: Antw:Code mit HTTP-Request auf non-blocking umstellen
Beitrag von: CoolTux am 05 März 2018, 17:03:06
-s für Silent dürfte passen.
Titel: Antw:Code mit HTTP-Request auf non-blocking umstellen GELÖST
Beitrag von: jailbreaker07 am 05 März 2018, 17:14:31
Ich habe jetzt die wget variante genommen...

([Kamera_Ost] eq "on" or [Kamera_West] eq "on") 
("wget -q http://192.168.1.139:8080/automagic/Kamera")


So bleibt das Logfile schön leer.... und kein blocking.... vielen dank für die Unterstüzung