[erledigt] hilfegesuch für httmod mit json (nur abfragen)

Begonnen von the ratman, 31 August 2020, 20:07:45

Vorheriges Thema - Nächstes Thema

the ratman

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!
→do↑p!dnʇs↓shit←

betateilchen

Falls Du Deinen Drucker mit octoprint ansteuern würdest, käme MQTT out-of-the-box mit...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

amenomade

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


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

yersinia

Für das reine, regelmässige Abfragen eines JSON-Strings, kannst du auch JsonMod mit complete() nutzen. In etwa so wie bei der Extraktion der Daten von der PiHole-API.
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

the ratman

#4
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?
→do↑p!dnʇs↓shit←

amenomade

Wie hast Du genau das attr Befehl eingesetzt?
Bei mir geht z.B. "attr <name> resquestData GETPRINTERSTATUS"
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

the ratman

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*
→do↑p!dnʇs↓shit←

amenomade

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.

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

the ratman

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!
→do↑p!dnʇs↓shit←

the ratman

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.
→do↑p!dnʇs↓shit←

amenomade

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?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

the ratman

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.
→do↑p!dnʇs↓shit←

amenomade

#12
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.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

the ratman

#13
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.
→do↑p!dnʇs↓shit←

the ratman

#14
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.
→do↑p!dnʇs↓shit←