Bitte Longpoll inform um ein generisches JSON Format erweitern

Begonnen von setstate, 26 Februar 2016, 08:53:59

Vorheriges Thema - Nächstes Thema

setstate

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

rudolfkoenig

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

setstate

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"

setstate

Da ich von Perl Null Ahnung habe, ist nur dieser Quick&Dirty Patch rausgekommen:


rudolfkoenig

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.

setstate

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"]



setstate

Hat sich erledigt!
Ich verwende jetzt eine Mappingliste für Device und Reading, um das krude JSON Format nutzen zu können.