FHEM Forum

FHEM => Sonstiges => Thema gestartet von: the ratman am 31 August 2020, 20:07:45

Titel: [erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: the ratman am 31 August 2020, 20:07:45
hiho,

ich krieg in den nächsten tagen nen neuen 3d-drucker und der könnte scheinbar ein paar daten an fhem abgeben. aber das "wie" entzieht sich wieder mal meinem anti-programmier-gehirn ...

die vorarbeit wurde schon mal auf github geleistet: https://github.com/genepool99/Dremel3D45Hacking
mir ginge es da primär um "GETPRINTERSTATUS" und die aufdröselung in readings.

mag mir da wer unter die arme greifen?
thx im voraus!
Titel: Antw:hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: betateilchen am 31 August 2020, 20:55:20
Falls Du Deinen Drucker mit octoprint ansteuern würdest, käme MQTT out-of-the-box mit...
Titel: Antw:hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: amenomade am 01 September 2020, 01:04:29
Falls Du es doch mit HTTPMOD machen willst, einfach:

define mit http://IP/command
attr requestData für GETPRINTERSTATUS=`(mir ist nicht klar, ob tatsächlich =` am Ende stehen muss)
attr extractAllJSON 1 oder 2 (siehe CommandRef), um die Readings zu kriegen.

Und ja, octoprint ist toll, das kann ich bestätigen.
Und octoprint hat auch eine REST API https://docs.octoprint.org/en/master/api/index.html
Und es gibt auch ein (beta) Modul: https://forum.fhem.de/index.php?topic=81929.0


Titel: Antw:hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: yersinia am 01 September 2020, 08:20:11
Für das reine, regelmässige Abfragen eines JSON-Strings, kannst du auch JsonMod (https://forum.fhem.de/index.php/topic,109398.0.html) mit complete() nutzen. In etwa so wie bei der Extraktion der Daten von der PiHole-API (https://forum.fhem.de/index.php/topic,111489.msg1074471.html#msg1074471).
Titel: Antw:hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: the ratman am 01 September 2020, 09:17:23
thx gleich für die flotten antworten.

o) ich will kein octoprint, da nur das getunte cura von dremel per (w)lan den drucker steuern kann. und konstrukte wie cura<-komisches_modul->octoprint will ich mir sparen. da ich nen win-server hier habe, is octoprint auch etwas schwer zu lösen. unter win gibt's versionskonflikte mit div. modulen von octoprint und eine eigene vm will ich einfach nicht dafür betreiben und in meine fhem-vm kommt nur fhem und wasser rein.

o) httpmod wäre mir am liebsten. denke, da bin ich für die zukunft am flexibelsten. vielleicht findet ja noch wer steuerbefehle raus. eine art not-aus in fhem wäre nämlich mein traum.

@amenomade
so wirds gemacht werden *g*
aber: requestData.* gibt nur dremel3d45: bad attribute name 'requestData.*' (allowed chars: A-Za-z/\d_\.-) egal, was ich dort eingbeb

ich hab übrigens noch ne 2. seite gefunden https://github.com/janitz/3d45 die lösen das mit curl - falls es damit irgendwie eleganter geht?
Titel: Antw:hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: amenomade am 01 September 2020, 12:14:18
Wie hast Du genau das attr Befehl eingesetzt?
Bei mir geht z.B. "attr <name> resquestData GETPRINTERSTATUS"
Titel: Antw:hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: the ratman am 01 September 2020, 12:34:00
wie du gesagt hast - ein modul httpmod erstellen mit derzeit noch falscher ip, weil der drucker morgen erst kommt.
dann hab ich nach dem attr "requestData" gesucht. in der attributliste des moduls hab ich dann "requestData.*" gefunden, weil ich ohne ".*" nix finde

ahhh!
geb ichs in der commandozeile mit "attr dremel3d45 requestData bla bla bla" ein, is es kein problem, merk ich grad.
warum gibts das attribut nicht in der attr-liste von haus aus? sobald ich das attr erstelle erscheints auch brav in der liste.
irgendwie verwirrend, aber verwirrt bin ich eh meistens *g*.

somit mal vielen dank für deine/eure ersthilfe!
ich schreib mal kein erledigt davor - trau mich wetten, da kommen dann morgen noch fragen auf *g*
Titel: Antw:hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: amenomade am 01 September 2020, 12:42:52
Zitat von: CommandRefRemarks regarding the automatically created userattr entries
    Fhemweb allows attributes to be edited by clicking on them. However this does not work for attributes that match to a wildcard attribute. To circumvent this restriction HTTPMOD automatically adds an entry for each instance of a defined wildcard attribute to the device userattr list. E.g. if you define a reading[0-9]Name attribute as reading01Name, HTTPMOD will add reading01Name to the device userattr list. These entries only have the purpose of making editing in Fhemweb easier.

Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: the ratman am 02 September 2020, 11:22:01
bin grad hin und weg ... funzt auf anhieb.

falls das mal wer anchmachen will: attr <name> resquestData GETPRINTERSTATUS ist richtig. also ohne " =' " am ende.

vielen dank nochmal!
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: the ratman am 04 September 2020, 10:37:34
darf ich mit einer kür nerven? wenn nicht, bin ich auch ned böse!

weil das mit httmod so super gefunzt hat, dacht ich mir, ich beschicke auch meinen rainmeter ( https://www.rainmeter.net/ ) mit den daten meiner druckfabrik. dazu hatte mal extra jemand ein plugin geschrieben ( https://github.com/e2e8/rainmeter-jsonparser ).
man kanns schon erahnen bei mir, ich kriegs natürlich nicht auf die reihe, den talken richtig zu machen. außer fehlermeldungen, daß der falsch ist, kommt da ned viel. das dumme ist halt: ich weiß nicht mal, ob dieses plugin (noch) funktioniert.

es gäbe beim rainmeter ja noch nen eingebauten webparser, aber da kommt dann nur ne seite retour mit "set get irgendwas" ohne irgendwelchen weiteren inhalt. https://docs.rainmeter.net/manual/measures/webparser/

also, falls dir grade langweilig ist - ich würd nix gegen ideen haben *g*
und falls du windows hast - der rainmeter is echt nett und kann zumindest bedingt für fhem werkeln. gibt nette desktop-übersichten.
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: amenomade am 04 September 2020, 21:30:28
Da habe ich leider gar keine Ahnung, weder von rainmeter, noch von was Du genau machen willst. Hat aber nix mit Fhem zu tun, oder?
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: the ratman am 04 September 2020, 22:25:17
naja, ich ruf damit halt auch fhem-infos ab und stell sie am desktop dar. teilweise schalt ich lampen damit über fhem. mehr fhem is da nicht wirklich. man könnt den rainmeter als oberfläche für fhem sehen.
wenn's dich interessiert. meine anfänge fhem und rainmeter -> https://forum.fhem.de/index.php?topic=48548.0

im speziellen fall geht's eher um das json-file, bei dem du mir hier geholfen hast und wie ich das im rainmeter abrufen kann. krieg mit den vorhandenen hilfen nix auf die reihe und dachte, du erkennst da was. vor allem, was die als token bezeichnen.
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: amenomade am 04 September 2020, 23:07:06
Mit token meinen die anscheinend u.a. einfach die JSONPath zu Einzelelemente. Was Du mit readingXXJSON in HTTPMOD mit "_" Zeichen machst, sollte aber hier mit Punkten gemacht werden.

[Drucker]
Measure=Plugin
Plugin=WebParser.dll
UpdateRate=600
Url=http://IP/command
...POST...?
RegExp=<die richtige Regex, um nur das JSON String zu holen>

[PlateTargetTemp]
Measure=Plugin
Plugin=JsonParser.dll
Source=[Drucker]
Query="buildPlate_target_temperature"


Ich weiss nicht, wie man die "Source" eintragen muss (dafür musst Du schon finden, wie man ein "POST" machen kann), aber das sollte z.B. die Zieltemperatur der Druckerplatte ergeben. So zumindest verstehe ich die Doku.
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: the ratman am 04 September 2020, 23:29:45
dank für dein gehirnschmalz. muß ich morgen weiter probieren. mal schaun, was da geht.
am post häng ich eben, die regex is mir derzeit mal egal (.*) um mal mehr als nix zu kriegen.
ich hab nur immer mehr die angst, daß die jasonparser.dll gar nimma geht und bei der webparser, fehlt wohl der header.

immerhin hab i schon gelernt, abfragen nicht pro ms zu machen *g* da stellts gleich mal den drucker auf.
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: the ratman am 22 September 2020, 15:12:33
hiho,

vielleicht hat ja wer ne idee ... ich hab seit gestern das problem, dass meine httmod-readings nicht mehr gefüllt werden. allerdings nur in fhem. auf meinen windosen erhalte ich readings*, bei entsprechender abfrage.
zugreifen kann ich übrigens noch - z.b. der cam-server auf dem drucker sendet immer noch brav nen stream, auch an fhem.

verbose 5 ergibt:2020.09.22 15:04:40 1:  logfile wurde gelöscht
2020.09.22 15:07:35 4:  dremel3d45: GetUpdate called (update)
2020.09.22 15:07:35 4:  dremel3d45: UpdateTimer called from HTTPMOD::GetUpdate with cmd next sets timer to call update function in 30.0 sec at 2020-09-22 15:08:05, interval 30
2020.09.22 15:07:35 5:  dremel3d45: AddToQueue adds type update to URL http://192.168.178.9/command, data GETPRINTERSTATUS, no headers, retry 0, initial queue len: 0
2020.09.22 15:07:35 5:  dremel3d45: HandleSendQueue called from HTTPMOD::AddToSendQueue, qlen = 1
2020.09.22 15:07:35 4:  dremel3d45: HandleSendQueue sends update with timeout 2 to http://192.168.178.9/command,
data: GETPRINTERSTATUS, No Header
2020.09.22 15:07:35 5:  HttpUtils url=http://192.168.178.9/command
2020.09.22 15:07:35 4:  IP: 192.168.178.9 -> 192.168.178.9
2020.09.22 15:07:35 5:  HttpUtils request header:
POST /command HTTP/1.0
Host: 192.168.178.9
User-Agent: fhem
Accept-Encoding: gzip,deflate
Content-Length: 16
Content-Type: application/x-www-form-urlencoded

2020.09.22 15:07:35 3:  dremel3d45: Read callback: Error: http://192.168.178.9/command: empty answer received
2020.09.22 15:07:35 4:  dremel3d45: Read callback: request type was update retry 0, no headers, no body
2020.09.22 15:07:35 5:  dremel3d45: Read callback: body empty
2020.09.22 15:07:35 4:  dremel3d45: Read found no charset header (bodyDecode was set to auto)
2020.09.22 15:07:35 5:  dremel3d45: GetCookies is looking for Cookies
2020.09.22 15:07:35 5:  dremel3d45: ExtractSid called, context reading, num 0
2020.09.22 15:07:35 4:  dremel3d45: no header to look for redirects
2020.09.22 15:07:35 5:  dremel3d45: Read callback sets LAST_REQUEST to update
2020.09.22 15:07:35 5:  dremel3d45: CheckAuth decided no authentication required

kann mir geholfen werden?

gaaanz dumme idee noch dazu: könnte das mit dem https://forum.fhem.de/index.php/topic,114425.msg1086857.html#msg1086857 zusammenhängen? keine ahnung hab, aber das würde zumindest zeitlich so halbwegs passen.



*)curl 192.168.178.9/command -X POST -H "Content-Type: application/x-form-urlencoded" -d "GETPRINTERSTATUS" > %USERPROFILE%\Desktop\3d45_status.json
@echo. >> %USERPROFILE%\Desktop\3d45_status.json
ergibt unter win ein wunderschönes file mit allen daten, wie ich sie gerne hätte.
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: amenomade am 22 September 2020, 18:25:00
Hast Du ein update gemacht? Bei Fhem, oder beim Drucker?
Wir hatten mal auch den Fall, dass curl standardmässig HTTP 1.1 nutzt, wenn HTTPMOD 1.0 einsetzt. Vielleicht hilft das Attribut httpVersion
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: the ratman am 22 September 2020, 18:57:44
thx für deine hilfe - steh tatsächlich voll am schlauch ...

ich hab nur (wie jeden tag) fhem upgedatet. wenn, wars aber ein update kurz nach 2020-09-21 21:05:48 - bis dahin hat noch alles gefunzt.
alles andere beteiligte hat nix neues bekommen.

hab mal httpversion auf 1.1 und 1.0 gesetzt - ist in beiden fällen kein erfolg sichtbar.

ich krieg aber eindeutig genau beim abruf dann folgende meldungen, wobei ich grad gar ned am handy bin, dort würd aber ne readingsgroup mit dem httpmod werkeln:2020.09.22 18:53:22 1:  ERROR: addToWritebuffer for handyWEB_192.168.178.51_10183 without FD
2020.09.22 18:53:22 1:  probably caused at  TcpServer_Close:352 TcpServer_WriteBlocking:394 FW_Read:3816 CallFn:763
2020.09.22 18:53:50 1:  ERROR: addToWritebuffer for handyWEB_192.168.178.51_10187 without FD
2020.09.22 18:53:50 1:  probably caused at  TcpServer_Close:352 TcpServer_WriteBlocking:394 FW_Read:3816 CallFn:763
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: amenomade am 22 September 2020, 21:59:21
Zeig mal bitte ein verbose Output von deinem curl Befehl (option -v oder so, ich weiss nicht mehr)
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: the ratman am 23 September 2020, 08:42:22
ich hoff, ich hab's richtig gemacht:PS C:\Users\Ratman> @echo. >> %USERPROFILE%\Desktop\3d45_status.jsoncurl 192.168.178.9/command -X POST -H -v "Content-Type: application/x-form-urlencoded" -d "GETPRINTERSTATUS" > %USERPROFILE%\Desktop\3d45_status.json
In Zeile:1 Zeichen:7
+ @echo. >> %USERPROFILE%\Desktop\3d45_status.jsoncurl 192.168.178.9/co ...
+       ~
Eigenschaftsname fehlt nach dem Verweisoperator.
In Zeile:1 Zeichen:54
+ ... ERPROFILE%\Desktop\3d45_status.jsoncurl 192.168.178.9/command -X POST ...
+                                             ~~~~~~~~~~~~~~~~~~~~~
Unerwartetes Token "192.168.178.9/command" in Ausdruck oder Anweisung.
In Zeile:1 Zeichen:68
+ ...  >> %USERPROFILE%\Desktop\3d45_status.jsoncurl 192.168.178.9/command  ...
+                                                                  ~
Sie müssen nach dem Operator "/" einen Wertausdruck bereitstellen.
In Zeile:1 Zeichen:68
+ ... ERPROFILE%\Desktop\3d45_status.jsoncurl 192.168.178.9/command -X POST ...
+                                                           ~~~~~~~
Unerwartetes Token "command" in Ausdruck oder Anweisung.
In Zeile:1 Zeichen:1
+ @echo. >> %USERPROFILE%\Desktop\3d45_status.jsoncurl 192.168.178.9/co ...
+ ~~~~~
Der Splat-Operator "@" kann nicht dazu verwendet werden, auf Variablen in einem Ausdruck zu verweisen. "@echo" kann nur als Argument für einen Befehl verwendet werden. Wenn Sie auf Variablen in einem
Ausdruck verweisen möchten, verwenden Sie "$echo".
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingPropertyName
trotz der meldungen füllt er das file richtig
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: amenomade am 23 September 2020, 19:13:51
Hmm. Da fehlt aber das output von curl...
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: the ratman am 23 September 2020, 19:27:46
mußt du mir näher erklären ich tippe auch auf curl-seite nur ab *g*

hab einfach die .bat genommen, in ne powershell kopiert und dein -v an verschiedenen stellen ausprobiert. nachdem immer das selbe gekommen ist, dacht ich, das paßt schon.

die bat-datei:curl 192.168.178.9/command -X POST -H "Content-Type: application/x-form-urlencoded" -d "GETPRINTERSTATUS" > %USERPROFILE%\Desktop\3d45_status.json -v
@echo. >> %USERPROFILE%\Desktop\3d45_status.json

oder meinst du den output, den er generiert? da kommt mit und ohne -v:{"buildPlate_target_temperature":70,"chamber_temperature":32,"door_open":0,"elaspedtime":534,"error_code":200,"extruder_target_temperature":250,"fanSpeed":0,"filament_type ":"PETG","firmware_version":"v3.0_R02.09.04","jobname":"test.gcode","jobstatus":"building","layer":0,"message":"success","networkBuild":1,"platform_temperature":69,"progress":6.7000000000000002,"remaining":2588,"status":"busy","temperature":250,"totalTime":2774}
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: amenomade am 23 September 2020, 20:02:58
Ich meine das:
curl -v -X POST -H "Content-Type: application/x-form-urlencoded" -d "GETPRINTERSTATUS" https://www.google.de
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 172.217.22.67...
* TCP_NODELAY set
* Expire in 149995 ms for 3 (transfer 0x1f45880)
* Expire in 200 ms for 4 (transfer 0x1f45880)
* Connected to www.google.de (172.217.22.67) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: C=US; ST=California; L=Mountain View; O=Google LLC; CN=www.google.de
*  start date: Aug 26 08:13:17 2020 GMT
*  expire date: Nov 18 08:13:17 2020 GMT
*  subjectAltName: host "www.google.de" matched cert's "www.google.de"
*  issuer: C=US; O=Google Trust Services; CN=GTS CA 1O1
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x1f45880)
> POST / HTTP/2
> Host: www.google.de
> User-Agent: curl/7.64.0
> Accept: */*
> Content-Type: application/x-form-urlencoded
> Content-Length: 16
>
* We are completely uploaded and fine
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 405
< allow: GET, HEAD
< date: Wed, 23 Sep 2020 18:00:00 GMT
< content-type: text/html; charset=UTF-8
< server: gws
< content-length: 1589
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< alt-svc: h3-Q050=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-27=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
<
<!DOCTYPE html>
<html lang=en>
  <meta charset=utf-8>
  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
(... und hier die zurückgelieferte Seite ...)

* Connection #0 to host www.google.de left intact
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: the ratman am 23 September 2020, 20:19:54
sorry, da kommt ned mehr - ich bin übrigens auf windows, nur, falls es da falsche eindrücke geben sollte ...

hab einfach mal deine zeile eingegeben:PS C:\Users\Ratman> curl -v -X POST -H "Content-Type: application/x-form-urlencoded" -d "GETPRINTERSTATUS" https://www.google.de
Invoke-WebRequest : Der Parameter "Headers" kann nicht gebunden werden. Der Wert "Content-Type: application/x-form-urlencoded" vom Typ "System.String" kann nicht in den Typ "System.Collections.IDictionary"
konvertiert werden.
In Zeile:1 Zeichen:20
+ ... l -v -X POST -H "Content-Type: application/x-form-urlencoded" -d "GET ...
+                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

PS C:\Users\Ratman>
wird auch ned mehr ...
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: amenomade am 23 September 2020, 21:25:22
OK, curl unter Powershell ist aber kein curl sondern ein Alias von Invoke-WebRequest. (genauso für wget übrigens)

Dann musst Du die Parameter von Invoke-WebRequest benutzen !

EDIT: Leider hat aber Invoke-WebRequest kein verbose Parameter. Invoke-RestMethod hat einen, aber sehr sparsam (und nicht mit curl vergleichbar)
Invoke-RestMethod -Verbose -Uri "192.168.178.9/command" -Method "Post"  -Body "GETPRINTERSTATUS"

Eigentlich wollte ich versuchen zu verstehen, warum Du ein "empty answer received" bekommts. Aber Du bist anscheinend nicht der einzige: https://forum.fhem.de/index.php/topic,45176.msg1087151.html#msg1087151

Versuch mal auf der alten Version von HTTPMOD zurück zu kommen.
Titel: Antw:[erledigt] hilfegesuch für httmod mit json (nur abfragen)
Beitrag von: the ratman am 24 September 2020, 09:12:48
servus,
das is es - mit der version vom 22. rennts wie ein glöckerl.