[Gelöst] HTTP Nachricht über 99_myUtils senden

Begonnen von Claus1985, 29 August 2020, 13:53:59

Vorheriges Thema - Nächstes Thema

Claus1985

Hi Zusammen,

ich habe eine Frage zum Thema Nachricht via HTTP senden.
Ich habe einen Text in einer Variable (z.B. Text "Docked" in Variable maehStatus).

Dieser soll in einer Nachricht in folgendem Format gesendet werden:
http://user@passwort@IP Miniserver:Port/dev/sps/io/VTI40/Status Text

Habe sowas in der Art schon in einem Notify verwendet:
"wget -q -O - 'http://user@passwort@IP Miniserver:Port/dev/sps/io/VI80/Off'"

Wie müsste ich das formulieren um das in einem Programm in 99_myUtils zu verwenden?
Bei UDP mache ich das so:
UDP_Msg("ip-Adresse" , "Port" , "$device: $status");

Für HTTP im o.g. Format habe ich dazu nichts gefunden. Hat jemand eine Idee?

> Lösung ist:
{GetHttpFile('Yoda:A!U85054699@192.116.122.16', '/dev/sps/io/VTI1/testWelt')}

Danke und Gruß,

Claus

amenomade

#1
https://wiki.fhem.de/wiki/HttpUtils
Aber curl oder wget geht auch

Die richtige Syntax ist übrigens user:password@url (und nicht user@password), und das funktioniert nur bei BasicAuth
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Claus1985

danke für den Tipp! httputils hatte ich schon gefunden bin aber an der Syntax gescheitert.
Probiert habe ich GetFileFromURL("http://user:password@server/dev/sps/io/VTI1/"."$variable");
Das hat allerdings nicht geklappt.

Mit wget komme ich über einen Syntaxerror nicht hinaus, das gleiche gilt für curl..
Wie müsste ich das formulieren, damit es funktioniert?

Danke und Gruß,

Claus

amenomade

Wie "nicht geklappt"? Welche Fehlermeldung?
Vielleicht deswegen:
Zitat von: WikiWICHTIG: Falls ein Username sowie Passwort übergeben werden, so müssen diese vorher jeweils mittels urlEncode() in URL-kompatible Form umgewandelt werden um Probleme mit evtl. enthaltenen Sonderzeichen zu vermeiden.
?

curl und wget sind mittels qx oder system als Perl Systembefehle , oder als fhem Systembefehle mit fhem(' "..." ') aufzurufen.

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Claus1985

Wenn ich den Befehl http://User:Kennwort@IP-Adresse/dev/sps/io/VTI1/hallo
direkt im Browser eingebe, zeigt mir Loxone das Ergebnis einwandfrei an. Daher gehe ich davon aus,
dass sowohl Kennwort als auch Username schon URL kompatibel sind?

Im 99_myUtils bekomme ich keinen Syntaxfehler. Es funktioniert schlicht nicht. Also es gibt ein Status-
Update beim mäher, die restlichen Nachrichten im Programm werden über UDP einwandfrei geschickt.
Aber die GetHttpFile Zeile wird entweder ignoriert oder es kommt zu einem Problem das ich nicht sehe.
Im Fhem LOG wird nichts angezeigt, hab es nebenherlaufen lassen.

Wenn ich den Code mit geschweiften Klammern direkt in der FHEM Eingabezeile eingebe bekomme ich
nur eine Fehlermeldung: Unknown command {GetHttpFile("http://...)}
Ich habe das nun auch nochmal mit wget probiert, da kommt keine Fehlermeldung nach eingabe in die FHEM
Eingabezeile, aber es passiert leider auch nichts. {qx(wget -q -O - "http://..."}
Hast Du eine Idee wie die Syntax aussehen muss, damit es funktioniert?

amenomade

Bitte die vollständige Befehle, die Du benutzt hast, und die vollständige Fehlermeldungen erwähnen
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Otto123

hier fehlt das schließende " {GetHttpFile("http://...)}
hier fehlt die schließende ) {qx(wget -q -O - "http://..."}
außerdem würde ich nicht mit -q arbeiten, dann könnte wget sagen was los ist :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

amenomade

Zitat von: Otto123 am 30 August 2020, 11:30:28
hier fehlt das schließende " {GetHttpFile("http://...)}
hier fehlt die schließende ) {qx(wget -q -O - "http://..."}

Deswegen
Zitat von: amenomade am 30 August 2020, 11:26:53
Bitte die vollständige Befehle, die Du benutzt hast, und die vollständige Fehlermeldungen erwähnen
;) (und ich will auch sehen, was ggf escaped oder urlencoded werden muss :)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Claus1985

#8
Hab das -q bei wget drinnen weil ich keine Ahnung habe was das bedeutet
und es in nem anderen funktionierenden wget Befehl auch drin steht  ;D

Also folgende Befehle hab ich gerade ausgeführt über die FHEM Eingabezeile:

{qx(wget -O - "http://Yoda:A!U85054699@192.116.122.16/dev/sps/io/VTI1/testWelt");}
{GetHttpFile("http://Yoda:A!U85054699@192.116.122.16/dev/sps/io/VTI1/testWelt");}

Bei der ersten Zeile zeigt er nichts an, es passiert aber auch nichts in Loxone. > Scheint also nicht ausgeführt zu werden..
Bei der zweiten Zeile erhalte ich folgenden Fehler:
Unknown command {GetHttpFile("http://Alex:A!U85054699@192.116.122.16/dev/sps/io/VTI1/testWelt"), try help.
Unknown command }, try help.
.

Wenn ich es direkt im Browser eingebe funktioniert es (siehe Bild im Anhang).

Otto123

#9
bei der Verwendung von " ... @ ..." muss das @ escaped werden! -> \@

und dann {GetHttpFile(urlEncode('hier steht die Url'))} Da ich hier ' einfache ' verwendet habe braucht das @ nicht escaped zu werden!
Edit: der Syntax von GetHttpFile ist allerdings anders! So in der Art.
{GetHttpFile ('raw.githubusercontent.com','/heinz-otto/raspberry/master/setupUartPi3.sh')}

Mit urlEncode bekomm ich das auf die Schnelle nicht hin? braucht GetHttpFile nicht?

und das ; am Ende ist unnütz!  ;)

und zum Schluss haben die meisten linux Befehle den Schalter -h oder --help :) das sieht man was -q bedeutet

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Claus1985

Danke für den Hinweis mit help, das hilft tatsächlich weiter  :)

Also ich habe meine Zeile mal angepasst:
{GetHttpFile(urlEncode('http://Yoda:A!U85054699@192.116.122.16/dev/sps/io/VTI1/testWelt'))}
Wenn ich das ausführe bekomme ich folgende Meldung:
Not enough arguments for main::GetHttpFile at (eval 15190) line 1, near "))"

Also habe ich es aufgeteilt (gemäß den Vorgaben in $Server, $File):
{GetHttpFile(urlEncode('http://Yoda:A!U85054699@192.116.122.16'), '/dev/sps/io/VTI1/testWelt')}
und auch so hab ichs probiert:
{GetHttpFile(urlEncode('http://Yoda:A!U85054699@192.116.122.16'), urlEncode('/dev/sps/io/VTI1/testWelt'))}
Beides Mal keine Fehlermeldung, beides Mal keine Wirkung.

Otto123

#11
Ich habe parallel auch noch probiert, GetHttpFile unterstützt eventuell user:password nicht?
{GetHttpFile('Yoda:A!U85054699@192.116.122.16', '/dev/sps/io/VTI1/testWelt')}
Schau mal besser hier für den kompletten Syntax! https://wiki.fhem.de/wiki/HttpUtils
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Claus1985

#12
Funktioniert! Genial, vielen Dank für Deine Hilfe!!  :)
Eine Frage noch am Schluss: Wenn ich statt dem Text eine Variable einfügen möchte, würde ich das nun so machen:
{GetHttpFile('Yoda:A!U85054699@192.116.122.16', '/dev/sps/io/VTI1/'.'$variable')}

Ist das richtig?