externe Datei *.json auswerten

Begonnen von curt, 17 November 2018, 06:12:46

Vorheriges Thema - Nächstes Thema

curt

Hallo allerseits,

externer WebServer liefert auf Port 80 bzw. 443 (und ausschließlich das, das folgende ist die komplette Datei):


{
  "timestamp": "2018-11-17T05:45:00+01:00",
  "value": 106.0,
  "trend": 1,
  "stateMnwMhw": "low",
  "stateNswHsw": "unknown"
}


Ich weiß was ich will - aber nicht, wie man das macht. Also RegEx ist klar (und für mich anstrengend: Das Alter, Genossen!). Aber vielleicht gibt es etwas viel schlaueres: Wie kann man diese fünf Objekteigenschaften eines Objekts elegant in FHEM importieren? 
RPI 4 - Jeelink HomeMatic Z-Wave

CoolTux

Wieso Regex? Ich würde da encode_json nehmen.
use JSON;
Nicht vergessen. Wie Holst Du denn die Daten? Wieso Datei wenn ein Webserver ausliefert?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

OdfFhem

Ich nutze für Webserver-Abfragen:https://wiki.fhem.de/wiki/HTTPMOD.

Unter Parsing JSON mit extractAllJSON (bzw. JSON Lists) solltest Du was Passendes finden ...

Folgendes (ungetestet) könnte/sollte ausreichen

defmod <devicename> HTTPMOD <webserver-adresse> 86400
attr <devicename> extractAllJSON 1

dev0

Eine andere Möglichkeit wäre den Befehl getURL von hier zu benutzen:
geturl http://foobar.de [dev:json] --define --json

Danach hast Du einen Dummy mit dem Namen dev incl. der Readings aus dem JSON String.

rudolfkoenig

Alternative ohne die externe JSON Bibliothek: json2reading($defs{devicename}, $json)

curt

#5
Guten Morgen allerseits.

To much input :(
Ich bin doch bei solchen Punkten ein alter Mann.

Wenn ich auf Port 80 bzw 443 die URL anfrage, kommt *exakt* die oben genannte Antwort plaintext.

Klar kann ich eure Suchbegriffe durchhecheln. Schaffe ich. Aber dann ist Weihnachten.
Mir würde wirklich ein Beispielcode helfen - wie ich diese fünf Objektparameter in die Objekteigenschaften schubse.

Das Objekt selbst bestimmt sich über die URL. Alternativ über mich, dann ist die URL eine Objekteigenschaft. Letzteres wäre die bessere Variante.


RPI 4 - Jeelink HomeMatic Z-Wave

curt

Zitat von: rudolfkoenig am 17 November 2018, 07:09:28
Alternative ohne die externe JSON Bibliothek: json2reading($defs{devicename}, $json)

"Ohne" klingt grundsätzlich genial.

Wo kann ich weiterlesen?

Und wo finde ich ein grundsätzlich ähnliches Beispiel für FHEM?

RPI 4 - Jeelink HomeMatic Z-Wave

CoolTux

Zitat von: OdfFhem am 17 November 2018, 06:59:21
Ich nutze für Webserver-Abfragen:https://wiki.fhem.de/wiki/HTTPMOD.

Unter Parsing JSON mit extractAllJSON (bzw. JSON Lists) solltest Du was Passendes finden ...

Folgendes (ungetestet) könnte/sollte ausreichen

defmod <devicename> HTTPMOD <webserver-adresse> 86400
attr <devicename> extractAllJSON 1


Das hier ist Beispielcode und kannst Du ganz einfach testen. Ich würde das empfehlen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Erklärt es doch mal einem Anfänger!

Also... es gibt in FHEM ein Modul, das genau das tun kann, was Du letztendlich haben möchtest. Das Modul heißt HTTPMOD.

Was tut HTTPMOD? Es liest das Ergebnis einer Webserverabfrage und verarbeitet die zurückgelieferten Daten.

Was brauchst Du, um das zu nutzen? Du definierst Dir in FHEM einfach ein device vom Typ HTTPMOD und verwendest die URL Deines Webservers als Parameter

define myDevice HTTPMOD <hier kommt die URL Deines Webservers hin> 3600

Danach musst Du dem neu angelegten device sagen, dass alles, was als JSON im Ergebnis ankommt, auch als JSON ausgewertet werden soll.

attr myDevice extractAllJSON 1

und speicherst das Ganze ab.

save

Die drei genannten Code-Blöcke gibst Du alle in der FHEM Befehlszeile ganz oben im Frontend ein.

Was bedeutet die 3600 am Ende des define? Das ist der Abstand in Sekunden (Intervall) in dem die Abfragen auf dem Webserver erfolgen sollen, um die Daten zu aktualisieren.

Was ist das Ergebnis? Du hast ein FHEM device mit dem Namen myDevice, bei dem die JSON Werte alle in einzelnen readings stehen. Das device kannst Du natürlich auch anders benennen, "myDevice" ist nur ein Beispielname.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Ich bin dafür die Erklärung ins Wiki zu schreiben  ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Letztendlich musst Du aber noch wissen, ob die Daten als HTML Antwort kommen oder ob dabei eine Datei vom Server heruntergeladen wird. Wenn es sich um eine Datei handelt, ist die Vorgehensweise ein bisschen anders. Aber das geht aus der Fragestellung noch nicht eindeutig hervor.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: CoolTux am 17 November 2018, 12:45:24
Ich bin dafür die Erklärung ins Wiki zu schreiben  ;D

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

CoolTux

Zitat von: betateilchen am 17 November 2018, 12:46:45
Suchst Du Streit?

Nein. Aber kann es sein das Du unentspannt bist lieber Udo?
Ich finde die Erklärung OK. Bin nur gespannt ob die die Musse hast es den nächsten 6 Leuten auch zu erklären. Denn HTTPMODE ist ein schwieriges Thema wie ich finde.
Oder man schreibt es nieder was Du gut geschrieben hast.
Mir egal, mach wie Du willst, alter Grummelbär.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Zitat von: CoolTux am 17 November 2018, 12:59:23
Nein. Aber kann es sein das Du unentspannt bist

Überhaupt nicht. Aber meine Meinung zum Wiki sollte hinlänglich bekannt sein.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Naja hat ja keiner gesagt das Du das machen sollst. Aber gerade HTTPMODE ist so eine unendliche Geschichte was die Bedienbarkeit an geht.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net