[gelöst] GetHttpFile für einen befehl nutzen

Begonnen von matze1999, 13 Januar 2024, 12:07:34

Vorheriges Thema - Nächstes Thema

matze1999

Hallo,

folgendes funktioniert im browser ohne Probleme (PTZ einer IP Cam):

http://user:pass@192.168.2.10:9080/decoder_control.cgi?command=39
Jetzt wollte ich das in fhem nutzen:

{ GetHttpFile("http://user:pass@192.168.2.10:9080","/decoder_control.cgi?command=39") }
aber da passiert nichts, nicht mal im log taucht etwas auf.

Hat jemand einen Tipp?

matze1999

MadMax-FHEM

#1
Was du machst/machen willst ist doch eher GetFileFromURL?

https://wiki.fhem.de/wiki/HttpUtils#GetFileFromURL

EDIT: oder gleich IPCAM...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

betateilchen

#2
Zitat von: MadMax-FHEM am 13 Januar 2024, 12:15:52Was du machst/machen willst ist doch eher GetFileFromURL?

Das ist eigentlich egal, GetHttpFile() setzt einfach den host und den Pfad zusammen, setzt http:// davor und ruft dann GetFileFromURL() auf.

{ GetHttpFile("http://user:pass@192.168.2.10:9080","/decoder_control.cgi?command=39") }
Genau in dem oben rot markierten Textteil liegt der Fehler:

Der Teil "http://" darf bei GetHttpFile() nicht angegeben werden, sonst wird automatisch http://http://user:pass@192.168.2.10:9080 draus, was natürlich nicht funktioniert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

matze1999

So



{ GetHttpFile("user:pass@192.168.2.10:9080","/decoder_control.cgi?command=35") }
passiert auch nichts, nicht mal im Log. Wenn ich das im Browser mache (mit http.. )kommt ein

.ok
zurück

matze199

matze1999

ich hab mal ein

reload HttpUtils.pm
gemacht, da kommt folgendes:

Undefined subroutine &main::HttpUtils_Initialize called at fhem.pl line 2784.
matze1999

betateilchen

#5
Zitat von: matze1999 am 13 Januar 2024, 12:31:51passiert auch nichts, nicht mal im Log.

Glaube ich nicht. Bei mir im Log steht:

2024.01.13 12:36:21 5: Cmd: >{ GetHttpFile("user:pass@192.168.2.10:9080","/decoder_control.cgi?command=35") }<
2024.01.13 12:36:21 4: CustomGetFileFromURL http://user:pass.168.2.10:9080/decoder_control.cgi?command=35: malformed or unsupported URL

Du siehst also, dass die Authentisierung nicht funktioniert, das @192 verschwindet einfach.

Zusatzfrage: Heißt der Befehl, den Du aufrufen willst, eigentlich 35 oder 39?

Und was im Browser kommt, ist grundsätzlich keine Basis für einen Vergleich mit einem Funktionsaufruf in den HttpUtils.pm.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

matze1999

#6
Natürlich kommt was im log, wenn man das loglevel hoch setzt  :-[


2024.01.13 12:54:41 5: Cmd: >{ GetHttpFile("user:pass8@192.168.2.10:9080","/decoder_control.cgi?command=35") }<
2024.01.13 12:54:41 4: CustomGetFileFromURL http://user:pass8.168.2.10:9080/decoder_control.cgi?command=35: malformed or unsupported URL

pass8 - das Passwort hat eine "8" als letztes Zeichen

Das geht natürlich nicht, kommt der mit dem "@" nicht zurecht?

http://user:pass8.168.2.10


Ist egal ob 35, 39, es gibt 6 Positionen (33-39)

matze1999

matze1999

#7
kann das was mit urlEncode zu tun haben?

passwort hat keine sonderzeichen nur buchstaben und Zahlen

matze1999

betateilchen

Lustig, GetFileFromURL() geht auch nicht.

2024.01.13 13:00:35 5: Cmd: >{ GetFileFromURL("http://user:pass@192.168.2.10:9080/decoder_control.cgi?command=35") }<
2024.01.13 13:00:35 4: CustomGetFileFromURL http://user:pass.168.2.10:9080/decoder_control.cgi?command=35: malformed or unsupported URL

Aber

{ GetFileFromURL("http://user:pass"."@"."192.168.2.10:9080/decoder_control.cgi?command=35") }

funktioniert:

Cmd: >{ GetFileFromURL("http://user:pass"."@"."192.168.2.10:9080/decoder_control.cgi?command=35") }<
2024.01.13 13:02:03 5: HttpUtils url=http://user:pass@192.168.2.10:9080/decoder_control.cgi?command=35 Blocking via http
2024.01.13 13:02:07 4: HttpUtils: http://user:pass@192.168.2.10:9080/decoder_control.cgi?command=35: Can't connect(1) to http://192.168.2.10:9080: IO::Socket::INET: connect: timeout
2024.01.13 13:02:07 4: CustomGetFileFromURL http://user:pass@192.168.2.10:9080/decoder_control.cgi?command=35: Can't connect(1) to http://192.168.2.10:9080: IO::Socket::INET: connect: timeout

Zitat von: matze1999 am 13 Januar 2024, 13:00:35kann das was mit urlEncode zu tun haben?

Nein.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

JudgeDredd

Wie wäre es denn hiermit ?:
{ GetHttpFile( 'user:pass@192.168.12.10:9080', '/decoder_control.cgi?command=39' ) }
Mit Singlequotes funktioniert es hier auch.
Router: Eigenbau (pfSense)
FHEM: Proxmox (DELL R720) | Debian 12 (VM)

betateilchen

#10
Ja, da bin ich nach meinem letzten (funktionierenden) Beitrag auch grade draufgekommen. Das Problem ist das @, weil perl versucht, da ein Array in den String zu basteln. Manchmal ist es so einfach...

Einfach das @ escapen, dann klappt es sogar mit GetHttpFile()

{ GetHttpFile("user:pass\@192.168.2.10:9080","/decoder_control.cgi?command=39") }
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

matze1999

Zitat von: betateilchen am 13 Januar 2024, 13:11:34Einfach das @ escapen, dann klappt es sogar mit GetHttpFile()

{ GetHttpFile("user:pass\@192.168.2.10:9080","/decoder_control.cgi?command=39") }

das ist es, Danke!

matze1999