Hallo beisammen,
ich bekomme es einfach nicht hin - bitte hiermit um Hilfe!
Ich bekomme auf einer internen Webseite einen String mit allen Daten aus einem Logger zur Verfügung gestellt. Es sind jeweils mehrere Messwerte von etwa 20 Messstellen enthalten. Hier mal ein Beispiel (Auszug, davor und dahinter stehen noch paar Sachen):
{"sensorId":"002","valueSum":"6316821","timestamp":"1622607075"},{"sensorId":"003","valueSum":"18818997","timestamp":"1622607394"},{"sensorId":"004","value":"11.4","valueSum":"26724286","timestamp":"1622624690"}
Ich hab mit dem HTTPMOD Modul rumprobiert und kann den String komplett einlesen - mit "showBody" sehe ich den String bei Internals. Danach sind meine Fähigkeiten aber nicht mehr ausreichend. Vor allem die Tatsache, dass ein Sensor, der gerade nix meldet, keinen "value" mehr anzeigt, macht mich fertig.
Kann mir bitte jemand auf die Sprünge helfen, wie ich die Daten jeweils für einen Sensor auslesen und als Reading darstellen kann? Am liebsten wäre mir ein Reading-Satz pro Sensor, das den "value" auf "0" setzt, wenn der Wert fehlt ....
So würde ich es mir vorstellen:
reading01Name 002
reading01Value: 0
reading01ValueSum 6316821
reading01Timestamp 1622607075
Vielen Dank im Voraus!
Stephan
lässt sich mit JsonMod komfortabel realisieren. Gibt viele Beispiel zur Vorgehensweise im forum.
Hallo Herrmann,
vielen Dank für den Hinweis. Ich werd mir das mal anschauen. Falls ich weiterhin Hilfe brauch, melde ich mich nochmal.
Viele Grüße
Stephan
Jetzt brauch ich doch nochmal Hilfe bitte:
In "Internals" steht bei "API__LAST_MSG" die korrekte URL, danach folgt aber ein "empty answer received". Stimmt die URL nicht oder fehlen einfach noch die Readings, weshalb er nix abfragt?
Beim Erstellen des attr "readingList" stelle ich mich auch blöd an. Ich könnte wirklich nochmal einen Schubser in die richtige Richtung brauchen ... :-[
Kann mir bitte jemand anhand der Daten aus dem Eingangspost eine Hilfestellung geben?
Vielen Dank im Voraus!
Stephan
Versuche doch für den Anfang einfach mal
complete();
als readingList
Zitatcomplete();
Automatically creates readings for the entire JSON source. The readings are named after their JSON path.
Eine weitere Möglichkeit wäre json2reading zu verwenden um die gewünschten Readings zu erhalten, vorausgesetzt in der Datei der "internen Webseite" steht nur der korrekt (oben ist ja nur ein Ausschnitt zu sehen) aufgebaute JSON.
"interne Webseite" lässt mich vermuten du kannst direkt auf die Datei zugreifen (entsprechend passende Rechte vorausgesetzt), dann wäre bspw. eine zyklische Abfrage der Daten mit einer AT-Definition auch relativ kurz, im Vergleich zu HTTPMOD oder JsonMod <- hab ich mich aber ehrlicherweise noch nicht mit beschäftigt, mein ich zumindest:
defmod Test at +*00:00:30 {json2reading($defs{Test},`cat <Pfad zur HTML-Datei>`,undef,undef,undef,'sensorId|valueSum|timestamp')}
attr Test room Test
Wenn ich mich täusche und kein direkter Zugriff auf die Datei möglich ist, dann wirds etwas länger und du müsstest den Inhalt der Datei mit HttpUtils_NonblockingGet() zuvor ermitteln und diesen dann im 2. Parameter von j2r statt dem `cat <Pfad zur HTML-Datei>` angeben.
Das AT soll nur ein Beispiel sein, wenn ich das bei mir umsetzen müsste, denke ich, würde ich nicht zyklisch abfragen sondern eine inotify-Definition "dazwischenschalten" und mit einem notify immer bei Änderung an der Datei reagieren.
Gruß
Thomas
Wenn der te schreibt url dann wird es wohl eine sein. Die angegebene Fehlermeldung sagt ziemlich offensichtlich dass die Quelle keine Daten geliefert hat.
Bitte vollständige Angaben liefern. Welcher Dienst/welche url?, komplettes list, logauszug, relevante Kontextinformationen. Kein Roman, Fakten
Hallo beisammen,
es handelt sich um eine URL im lokalen Netz, auf die Datei hab ich keinen Zugriff.
Hier die Anzeige im Browser, der Quelltext sieht genau so aus:
{"perSensorStats":[{"sensorId":"001","value":"8.94","valueSum":"24810092849","timeStamp":"1622799079"},{"sensorId":"002","valueSum":"6538603390","timeStamp":"1622779728"},{"sensorId":"003","valueSum":"19432479689","timeStamp":"1622780462"},{"sensorId":"004","value":"8.64","valueSum":"28204653653","timeStamp":"1622799015"},{"sensorId":"005","valueSum":"14773740591","timeStamp":"1622780238"},{"sensorId":"006","value":"4.39","valueSum":"22651828668","timeStamp":"1622799100"},{"sensorId":"007","valueSum":"15758090154","timeStamp":"1622779461"},{"sensorId":"008","value":"6.39","valueSum":"23383150073","timeStamp":"1622799045"}]}
Hier der Logfile-Eintrag bei "reread":
2021.06.04 13:38:17 2 : [jsonmod1] http request error: https://192.168.139.14:8008: empty answer received
Das Modul HTTPMOD holt die Daten korrekt ab.
Danke für Eure Hilfe.
Viele Grüße
Stephan
Liebe Leute,
vielen Dank für Eure Hilfe, Gedanken und Zeit. Ich habs mit HTTPMOD nun doch hinbekommen - ich musste mich durch die Regex-Befehle kämpfen, aber "regex101.com" ist da sehr hilfreich. Ich habe nun die Werte, die mich interessieren, als Reading in FHEM. Funktioniert super 8)
Viele Grüße und schönes Wochenende!
Stephan