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
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
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"
Da ich von Perl Null Ahnung habe, ist nur dieser Quick&Dirty Patch rausgekommen:
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.
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"]
Hat sich erledigt!
Ich verwende jetzt eine Mappingliste für Device und Reading, um das krude JSON Format nutzen zu können.