FHEM Forum

FHEM => Frontends => Thema gestartet von: setstate am 26 Februar 2016, 08:53:59

Titel: Bitte Longpoll inform um ein generisches JSON Format erweitern
Beitrag von: setstate am 26 Februar 2016, 08:53:59
Mit dem Aufruf

http://fhemserver:8083/fhem?XHR=1&inform=type=status;filter=.*;fmt=JSON

bekommt man leider nur ein Format, das für FHEMWEB optimiert ist ->
- erstes Item des Arrays entspricht dem Attr "informid"
- Timestamp und Device-Reading getrennte Zeilen
- doppelte Items (zweimal Datum, zweimal Value)


["CUL_HM_HM_CC_RT_DN_22A1DB_Weather","18.3","<div id=\"CUL_HM_HM_CC_RT_DN_22A1DB_Weather\"  class=\"col2\">18.3</div>"]
["CUL_HM_HM_CC_RT_DN_22A1DB_Weather-measured-temp","18.3","18.3"]
["CUL_HM_HM_CC_RT_DN_22A1DB_Weather-measured-temp-ts","2016-02-26 08:13:23","2016-02-26 08:13:23"]
["CUL_HM_HM_CC_RT_DN_22A1DB_Weather-state","18.3","18.3"]
["CUL_HM_HM_CC_RT_DN_22A1DB_Weather-state-ts","2016-02-26 08:13:23","2016-02-26 08:13:23"]


Das lässt sich leider ganz schlecht für andere Anwendungen nutzen.
Mein Wunsch: Dass der entsprechende Entwickler ein fmt=JsonGeneric hinzufügt, welches mir folgendes Format ausspuckt (oder zumindest im auch nicht so ganz tollen jsonlist2 Format)


{
    "Dummy1": { "state": { "Value":"active", "Time":"2016-02-25 21:23:54" }    }
  }


Vielen Dank
Titel: Antw:Bitte Longpoll inform um ein generisches JSON Format erweitern
Beitrag von: rudolfkoenig am 26 Februar 2016, 12:18:40
Mein Wunsch: Statt Wuenschen Patches zu kriegen. Ist in diesem Fall aber unnnoetig:
Zitathttp://localhost:8083/fhem?cmd=jsonlist2&XHR=1
Siehe auch die Dokumentation zu jsonlist2
Titel: Antw:Bitte Longpoll inform um ein generisches JSON Format erweitern
Beitrag von: setstate am 26 Februar 2016, 13:17:02
Zitat von: rudolfkoenig am 26 Februar 2016, 12:18:40
Mein Wunsch: Statt Wuenschen Patches zu kriegen.

Geht mir genauso ... ;) Aber, hat auch Vorteile, wenn man's selber macht ...

'cmd=jsonlist2' ist aber für shortpoll, für die einmalige/wiederholte Abfrage.

Mir ging es aber um die Longpoll-Abfrage, die dauerhaft geöffnet bleibt und sofort jede Änderung verschickt. Das sieht man schön mit 'curl'

curl "http://localhost:8083/fhem?XHR=1&inform=type=status;filter=.*;fmt=JSON"
Titel: Antw:Bitte Longpoll inform um ein generisches JSON Format erweitern
Beitrag von: setstate am 28 Februar 2016, 11:13:24
Da ich von Perl Null Ahnung habe, ist nur dieser Quick&Dirty Patch rausgekommen:

Titel: Antw:Bitte Longpoll inform um ein generisches JSON Format erweitern
Beitrag von: rudolfkoenig am 28 Februar 2016, 11:49:28
Das von FHEMWEB verwendete Format enthaelt eine Zeile mit drei Werten: HTML-Id (GeraeteName, GeraeteName-ReadingName oder GeraeteName-ReadingName-ts), Status oder Wert dieser Id und vorgeschlagene HTML-Representation. Dein Patch tauscht die dritte Spalte durch den aktuellen Zeitstempel auf dem Server aus, und vermeidet die Zeilen mit -ts.
Ich erkenne noch nicht den Mehrwert dieser Aenderung.
Titel: Antw:Bitte Longpoll inform um ein generisches JSON Format erweitern
Beitrag von: setstate am 28 Februar 2016, 13:03:49
Der Output ist ein eindeutiges Array mit allen notwendigen Daten drin, was mit guter Fehlervermeidung im FHEM TabelUI benutzt werden kann.

Device Reading Wert  Datum

["BadHeizung","batteryLevel","2.5","2016-02-28 12:53:57"]

Beim aktuellen JSON Format müssen umständlich Zugehörigkeiten zwischen mehreren Zeilen gesucht werden (1. Zeile: Device + Reading + Wert <-> 2. Zeile: Device + Reading + Datum) und man muss mit uneindeutigen String-Separatoren arbeiten, um Device und Reading wieder rauszuparsen. "-" kann auch im Devicenamen oder Readingnamen vorkommen.

["KinderzimmerHeizung2_Weather-state","19.8","19.8"]
["KinderzimmerHeizung2_Weather-state-ts","2016-02-28 12:56:14","2016-02-28 12:56:14"]


Oder das INTERNAL "STATE" muss man sich denken:

["hmlan-loadLvl","low","low"]
["hmlan-loadLvl-ts","2016-02-28 13:01:40","2016-02-28 13:01:40"]


Titel: Antw:Bitte Longpoll inform um ein generisches JSON Format erweitern
Beitrag von: setstate am 02 März 2016, 13:29:02
Hat sich erledigt!
Ich verwende jetzt eine Mappingliste für Device und Reading, um das krude JSON Format nutzen zu können.