hilfe für httpmod gesucht

Begonnen von the ratman, 06 März 2024, 09:57:07

Vorheriges Thema - Nächstes Thema

the ratman

(zur vereinfachung erstes posting gelöscht)

worum geht's?
ich hatte einen alten 3d-drucker, den ich per http-mod in die hausautomatisation bringen konnte. der neue kann das wohl auch, ich habe (dank fremder hilfe) auch schon den curl-aufruf funktionierend bereit, aber bei httpmod versag ich wieder mal total ...


PS C:\Users\xxx> curl.exe --http0.9 --location --request POST 'http://192.168.178.9:8899/command' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode '~M105'
CMD M105 Received.
T0:21.8/0.0 T1:0.0/0.0 B:21.9/0.0
ok

jetzt fehlt eigentlich nur noch eine info, wie ich das in httpmod einzupflegen hätte?

derzeit schaut das modul so aus, und leider tut sich gar nix:
define adv5mpro HTTPMOD http://192.168.178.9:8899/command 5
attr adv5mpro alias die fabrik - daten
attr adv5mpro disable 0
attr adv5mpro group 3d druck
attr adv5mpro httpVersion 0.9
attr adv5mpro icon 3d_printer
attr adv5mpro requestData ~M105
attr adv5mpro room computer
attr adv5mpro stateFormat status

setstate adv5mpro status

hilfe sehr erbeten!
→do↑p!dnʇs↓shit←

the ratman

ich hab's jetzt auch noch mal mit 'nem userattr probiert

requestHeader     Content-Type: application/x-www-form-urlencoded
bringt leider auch nichts. was mach' ich nur falsch?
→do↑p!dnʇs↓shit←

Aurel_B

Was kommt denn überhaupt zurück auf deine Anfrage (attr adv5mpro showBody 1)?

the ratman

#3
sollte das bei den internals dann stehen?
weil da hab ich mit "showBody 1" dann ein neues und leeres feld "httpbody"


ich hab jetzt zur sicherheit nochmal direkt vom debian linux, auf dem fhem rennt abgefragt:
ratman@ratOhaus:~$ curl --http0.9 --location --request POST 'http://192.168.178.9:8899/command' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode '~M105'
CMD M105 Received.
T0:58.4/0.0 T1:0.0/0.0 B:50.5/0.0
ok
→do↑p!dnʇs↓shit←

Aurel_B

#4
Hmmm, und was passiert bei "attr showError 1"? Ein leeres Internal "httpbody" zeigt schonmal, das keine - verwertbare - Antwort vom Server kommt. Die Fehlermeldung sollte dann im Reading "LAST_ERROR" stehen.

Edit: bin deine Def durchgegangen, so auf die Schnelle sieht sie deckungsgleich mit deiner curl Definition aus...

the ratman

#5
jetzt wirds gespenstisch *g*

LAST_ERROR
   
read from http://192.168.178.9:8899 timed out
   
2024-03-10 20:28:53

ganz dumme frage - also bitte nicht lachen: müsste nicht, wenn ich
{curl --http0.9 --location --request POST 'http://192.168.178.9:8899/command'; --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode '~M105'} in die befehlszeile von fhem eingebe, das ganze auch gehen?
da kommt nämlich:
Unknown command {curl, try help.
Unknown command --header, try help.

gut, nächster versuch - ein doif


([$SELF:an] eq "ja")

( "curl --http0.9 --location --request POST 'http://192.168.178.9:8899/command'; --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode '~M105'" )
( setreading $SELF an nein )

DOELSE

fehler im eventmonitor:
2024-03-10 21:00:49 DOIF doif_ffadv5mpro cmd_event: doif_ffadv5mpro
2024-03-10 21:00:49 DOIF doif_ffadv5mpro error:  "curl --http0.9 --location --request POST 'http://192.168.178.9:8899/command'; --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode '~M105'" : Unknown command "curl, try help. Unknown command --header, try help.
→do↑p!dnʇs↓shit←

betateilchen

#6
Zitat von: the ratman am 06 März 2024, 09:57:07derzeit schaut das modul so aus,

  • Ist das kein modul, sondern ein device.
  • Verstehe ich nicht, warum Du eine "5" schickst, wenn der Befehl doch "~105" heißt? sorry - Denkfehler von mir
  • Für mich passt http 0.9 und ein POST request nicht zusammen, weil 0.9 keine POST requests kennt und auch keine http Header unterstützt. HTTP 0.9 ist Stand von 1991 - ich glaube nicht, dass ein 3D-Drucker im Jahr 2024 wirklich damit arbeitet.

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

the ratman

#7
ich weiß es nicht - aber ohne http 0.9 geht nirgends irgendwas. mit 0.9 kommt zumindest in der powershell und im telnet von linux was zurück ... sogar das richtige *g*
falls du da ideen hast ... ich probier alles, was meinen neuen drucker nicht sprengt.

und ja, flashforge kann damit arbeiten.
als anderes beispiel, was die können ... hier mal der streamserver für die webcam:

MJPG-Streamer Demo Pages
a resource-friendly streaming application

Control
Version info:

v0.1 (Okt 22, 2007)
du musst rechnen: der drucker ist jetzt schon ein paar wochen auf n markt ... *totlach*


aber es geht auf jeden fall - das sind die 4 m-befehle mit antworten, die mir bisher bekannt sind:

PS C:\Users\xxx> curl.exe --http0.9 --location --request POST 'http://192.168.178.9:8899/command'; --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode '~M105'
CMD M105 Received.
T0:78.7/0.0 T1:0.0/0.0 B:73.1/80.0
ok

PS C:\Users\xxx> curl.exe --http0.9 --location --request POST 'http://192.168.178.9:8899/command'; --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode '~M601 S1'
CMD M601 Received.
Control Success V2.1.
ok

PS C:\Users\xxx> curl.exe --http0.9 --location --request POST 'http://192.168.178.9:8899/command'; --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode '~M27'
CMD M27 Received.
SD printing byte 1/100 Layer: 3/18
ok

PS C:\Users\xxx> curl.exe --http0.9 --location --request POST 'http://192.168.178.9:8899/command'; --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode '~M119\r\n'
CMD M119 Received.
Endstop: X-max: 110 Y-max: 110 Z-min: 0
MachineStatus: BUILDING_FROM_SD
MoveMode: MOVING
Status: S:1 L:0 J:0 F:0 LED: 1
CurrentFile: test_TPU_29m44s.gcode
ok
→do↑p!dnʇs↓shit←

Aurel_B

curl hat ein viel längeres Timeout, wie lange dauert es denn (geschätzt), bis in etwa die Antwort von deinem Drucker zurückkommt? Eventuell den timeout Parameter von httpmod hochsetzen? Und "{curl etc etc.}" wird so nicht funktionieren, wenn du curl direkt aus FHEM aufrufen möchtest, so kannst du z.B. "{system("curl ....")}" verwenden. Würde ich nicht -> FHEM blockiert dann!

Aurel_B

#9
Ah und vielleicht klappt es mit --http-version0.9 deshalb weil gemäss Manpage von curl damit die Header optional sind (und dein Drucker keine Header sendet) (siehe https://everything.curl.dev/http/versions/http09)?

Was wird denn so an Header rumgesandt? Was sagt ein "curl" mit "-v" ?

Edit: HTTPMOD verwendet HttpUtils im Hintergrund (wenn ich das richtig verstanden habe), keine Ahnung, ob "HTTP/0.9" unterstützt wird oder ob ein gültiger Header verlangt wird.

the ratman

#10
gefühlt dauert 'ne antwort unter 1 sekunde. mehr als 3 sekunden dauert's aber auf keinen fall.
habs timeout jetzt mal auf 5 sek. gesetzt.

Zitatkannst du z.B. "{system("curl ....")}"
shit, ich wusste, dass das anders ging.
und du hast recht: wenn, dann nonblocking. ich dachte halt: zum testen wirds schon passen.


ZitatAh und vielleicht klappt es mit --http-version0.9 deshalb weil gemäss Manpage von curl damit die Header optional sind (und dein Drucker keine Header sendet) (siehe https://everything.curl.dev/http/versions/http09)?
uije ...
kann ich irgendwie rauskriegen, welche http-version auf dem drucker läuft? hab aber keinen zugang zum drucker, der über curl raus geht.


nachtrag:
timemout mit 5 und 10 probiert, mit httpversion 0.9, 1, 1.1, 2 und 3 - gab jedes mal nen timeout
fehlt also nur mehr: "http2-prior-knowledge" aber darf ich das auch eintragen?
→do↑p!dnʇs↓shit←

betateilchen

Zitat von: Aurel_B am 10 März 2024, 21:51:56Edit: HTTPMOD verwendet HttpUtils im Hintergrund (wenn ich das richtig verstanden habe)

Korrekt.

Zitat von: Aurel_B am 10 März 2024, 21:51:56keine Ahnung, ob "HTTP/0.9" unterstützt wird oder ob ein gültiger Header verlangt wird.

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

the ratman

ach, ganz übersehen
mit -v krieg' ich 'ne fehlermeldung von curl, die wohl weniger mit dem drucker zu tun hat, oder?

PS C:\Users\the-r>  curl.exe -v --location --request POST 'http://192.168.178.9:8899/command'; --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode '~M105'
In Zeile:1 Zeichen:79
+ ... cation --request POST 'http://192.168.178.9:8899/command'; --header ' ...
+                                                                  ~
Ausdruck fehlt nach dem unären Operator "--".
In Zeile:1 Zeichen:79
+ ...  --request POST 'http://192.168.178.9:8899/command'; --header 'Conten ...
+                                                            ~~~~~~
Unerwartetes Token "header" in Ausdruck oder Anweisung.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingExpressionAfterOperator
→do↑p!dnʇs↓shit←

Aurel_B

#13
Da ist ein ";" zuviel in deinem curl Aufruf....

Und dann das übliche: was passiert in deinem Log bei verbose 5 in deinem httpmod? Meine Interpretation: FHEM resp. httpmod kann deinen Drucker erreichen und bekommt auch eine Antwort, die ist aber nicht so wie httpmod das erwartet und die ganze Geschichte läuft in einen Timeout rein?

the ratman

#14
so, und reden wir mal tacheles:

1) der curl-befehl bringt korrekte antworten, sogar auf dem fhem-debian. es müsste also alles am server vorhanden sein, was benötigt wird, oder?
2) httpmod verweigert mit einem timeout. wo ist also der unterschied zum curl in der console?

3) und im notfall: wie kann ich die daten ohne httpmod in fhem reinkriegen? muss ja kein httmod sein. da gibts ja sicher wieder 1000 weitere wege, von denen ich wieder nix weiß und die ich eh wieder nicht kapieren werde *g*?


ZitatDa ist ein ";" zuviel in deinem curl Aufruf....
o.k. - ich wieder ...

PS C:\Users\xxx> curl.exe -v --http0.9 --location --request POST 'http://192.168.178.9:8899/command' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode '~M105'
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 192.168.178.9:8899...
* Connected to 192.168.178.9 (192.168.178.9) port 8899
> POST /command HTTP/1.1
> Host: 192.168.178.9:8899
> User-Agent: curl/8.4.0
> Accept: */*
> Content-Type: application/x-www-form-urlencoded
> Content-Length: 5
>
CMD M105 Received.
T0:23.3/0.0 T1:0.0/0.0 B:22.8/0.0
ok
so, nu weiß ichs auch gleich: 1.1 is es *g*

* the ratman geht jetzt mal ins bettchen und wünscht 'ne gute nacht.
und vielen dank mal für die hilfe von euch 2!
→do↑p!dnʇs↓shit←