Syntaxfrage GetHttpFile

Begonnen von DieterL, 14 Juli 2015, 08:19:10

Vorheriges Thema - Nächstes Thema

DieterL

guten morgen allerseits.....
ich habe dies im Einsatz:
define HeizungKuechewSprache notify Heiz_Kue:on  {GetHttpFile("182.178.15.77", "/Heiz_Kueche_an.php") }
dies blockiert FHEM bis das Script abgearbeitet ist.

wie müsste ich dies denn anpassen das dies nicht der fall ist !?
Vielen Dank für jeglichen Input ;)
Raspi 2, Cul868, CUL433, Jeelink,HM-USB,4 *ITM100, 6* FHT8V, 6*CMR500, x-FS20 Komp., X- FS20 ST-4, 6* FS20 DI22-4 , YWT-8500, 4* Sonos Play:1, 2* Sonos Pl5, div selbstgestrickte Sensoren, 5* S555TH,9 * LaCrosse TX 29-IT, Philips Hue, 4* Piri-2,HomeMatic 4-Kanal-Schalter, 2*Velux,Bluetooth Stick

rudolfkoenig

"wget -q -O /dev/null http://182.178.15.77/Heiz_Kueche_an.php"
oder
{ HttpUtils_NonblockingGet( { url=>"http://182.178.15.77/Heiz_Kueche_an.php", callback=>sub() { } }) }

Falls man an Ergebnis/Fehler interessiert ist, dann sollte man sub(){} z.Bsp. durch folgendes ersetzen:
sub($$$) { my ($hash, $err, $data) = @_;; Log 1, "$err/$data" }
Natuerlich kann man hier eine "echte" Funktion mit Namen angeben.

DieterL

Rudolf, recht herzlichen Dank......werd´ es heute abend ausprobieren
Raspi 2, Cul868, CUL433, Jeelink,HM-USB,4 *ITM100, 6* FHT8V, 6*CMR500, x-FS20 Komp., X- FS20 ST-4, 6* FS20 DI22-4 , YWT-8500, 4* Sonos Play:1, 2* Sonos Pl5, div selbstgestrickte Sensoren, 5* S555TH,9 * LaCrosse TX 29-IT, Philips Hue, 4* Piri-2,HomeMatic 4-Kanal-Schalter, 2*Velux,Bluetooth Stick

FranzB94

Hi!

Ich tippe mal, das unter http://182.178.15.77 keiner antworten wird!

DieterL

#4
Zitat von: FranzB94 am 14 Juli 2015, 13:45:33
Ich tippe mal, das unter http://182.178.15.77 keiner antworten wird!
oh, entschuldige...ich werde beim nächsten post meine IP Adresse hier hinterlegen 8)
Raspi 2, Cul868, CUL433, Jeelink,HM-USB,4 *ITM100, 6* FHT8V, 6*CMR500, x-FS20 Komp., X- FS20 ST-4, 6* FS20 DI22-4 , YWT-8500, 4* Sonos Play:1, 2* Sonos Pl5, div selbstgestrickte Sensoren, 5* S555TH,9 * LaCrosse TX 29-IT, Philips Hue, 4* Piri-2,HomeMatic 4-Kanal-Schalter, 2*Velux,Bluetooth Stick

Hollo

Auch der System-Aufruf von wget kann scheinbar im Fehlerfall FHEM blockieren.
Hilfreich könnte daher im Aufruf ein zusätzliches "-T 10" (Timeout/Abbruch nach 10 Sekunden) sein.
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

rudolfkoenig

ZitatAuch der System-Aufruf von wget kann scheinbar im Fehlerfall FHEM blockieren.

Was genau heisst scheinbar?
Das "" startet die Befehle im Hintergrund, und sollte deswegen nicht blockieren.

DieterL

super Rudolf....hab es umgesetzt funktioniert natürlich !!!!
Vielen, vielen Dank
Raspi 2, Cul868, CUL433, Jeelink,HM-USB,4 *ITM100, 6* FHT8V, 6*CMR500, x-FS20 Komp., X- FS20 ST-4, 6* FS20 DI22-4 , YWT-8500, 4* Sonos Play:1, 2* Sonos Pl5, div selbstgestrickte Sensoren, 5* S555TH,9 * LaCrosse TX 29-IT, Philips Hue, 4* Piri-2,HomeMatic 4-Kanal-Schalter, 2*Velux,Bluetooth Stick

karl0123

Ich möchte dafür keinen neuen Thread eröffnen. Kann mit jemand ein Beispiel geben, wie ich mit HttpUtils_NonblockingGet ein Bild (z.B. von einer Kamera - JPG) holen und abspeichern kann? Wenn ich das bspw. so mache:

my $param = {
  url        => $camURI,
  timeout    => 5,
  callback   => sub() { },
};
                         
my($err,$data)  = HttpUtils_NonblockingGet($param);


enthält $data kein Bild, dass ich abspeichern könnte. Ich habe den Eindruck, ich stehe hier auf dem Schlauch.

rudolfkoenig


...
HttpUtils_NonblockingGet({url=>$camURI, timeout=>5, callback=>\&StoreFile});
...

sub
StoreFile($$$)
{
  my ($hash, $err, $data) = @_;
  open(FH, ">File.jpg");
  print FH $data;
  close(FH);
}


StoreFile wird _asynchron_, irgendwannmal ausgefuehrt. Auf HttpUtils_NonblockingGet
zu warten ist sinnlos, sonst waere es blocking.

Fehlerabfrage nicht vergessen, das habe ich ausgelassen, um das Beispiel verstaendlich zu halten.

karl0123

Vielen Dank. Das werde ich probieren.

karl0123

Eine Frage habe ich noch dazu: Kann man an die Callback-Funktion weitere Parameter übergeben?

Hollo

Zitat von: rudolfkoenig am 14 Juli 2015, 18:19:49
Was genau heisst scheinbar?
Das "" startet die Befehle im Hintergrund, und sollte deswegen nicht blockieren.
Ich nutze wget für API-Befehle an meine alte dBox.
Wenn die mal zickt, habe ich mehrfach Probleme gehabt, dass die weitere Abarbeitung von FHEM stockte.
Da ich das noch nicht genau verifizieren konnte, habe ich "scheinbar" geschrieben.
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

rudolfkoenig

@karl0123: Dafuer ist $hash da. Das ist das Argument zu HttpUtils_NonblockingGet, und kann beliebig viele Eintraege haben. Man kann es auch umdrehen, und man nimmt z.Bsp. den device hash ($defs{MeinGeraet}, und packt die vom HttpUtils_NonblockingGet benoetigten Eintraege dazu.

@Hollo: wenn man wget mit `` oder system() startet, ohne es ins Hintergrund zu schicken, dann ist das klar, wget kann auch nicht zaubern.

kalle322

#14
Hallo,

ich versuche den Alarm einer instar Kamera zu aktivieren. Leider ohne Erfolg.

Wget Command funktioniert im Terminal jedoch nicht wenn ich den Schalter auf On stelle. Script wird aufgerufen.


KameraAlarm:on { "wget -q -O '/dev/null' 'http://admin:instar@192.168.155.41:80/cgi-bin/hi3510/param.cgi?cmd=setmdattr&-enable=0&-name=1'" }


ohne die ' ' bringt wget im Terminal einen Fehler.

habe auch über HttpUtils_NonblockingGet veruscht, auch ohne Erfolg


KameraAlarm:on { HttpUtils_NonblockingGet( { url=>"http://admin:instar@192.168.155.41:80/cgi-bin/hi3510/param.cgi?cmd=setmdattr&-enable=1&-name=1", callback=>sub() { } })


Der Link funktioneirt auch wenn ich den im Browser eingebe.

Kann mir jemand sagen, wo der Fehler liegt ?

Vielen Dank schon mal im voraus.

rudolfkoenig

Bei beiden Varianten muss man das @ schuetzen, ich wuerde " und ' vertauschen.
Und falls HttpUtils_NonblockingGet immer noch nicht klappt, dann ein "attr global verbose 5" Mitschnitt hier anhaengen.

kalle322

Hat geklappt nachdem ich das @ maskiert habe. Vielen Dank