MQTT JSON READINGS (WIFI-IOT)

Begonnen von accloginsell, 21 Februar 2017, 07:47:41

Vorheriges Thema - Nächstes Thema

accloginsell

Hallo Zusammen,

ich habe nun einige ESPs am laufen.
Läuft auch alles super. Leider musste ich bei zwei die Software von Wifi-Iot draufspielen.

Dieser schickt nun MQTTs im JSON Format:


{"system":{"hostname":"GARAGE","uptime":312648,"rssi":-80,"freemem":29560},"sensors":},"pwm":{0:0},"gpio":{"2":1,"14":1}}


Wie kann ich FHEM beibringen dies in Readings zu übersetzen?
Danke euch schonmal

Grüße
Nico

dev0

Zitat
{"system":{"hostname":"GARAGE","uptime":312648,"rssi":-80,"freemem":29560},"sensors":},"pwm":{0:0},"gpio":{"2":1,"14":1}}
Der gezeigte JSON string ist nicht gültig. Vertippt oder sendet Wifi-Iot wirklich so einen Mist?

accloginsell

#2
Das ist der "status" vom anderen ESP

   
{"system":{"hostname":"ESP0008C50C","uptime":1280749,"rssi":-76,"freemem":30248},"sensors":},"pwm":{0:255,1:255},"gpio":{"2":1}}

das schickt er so.. ist komplett copy paste


EDIT: auch in der Doku sieht es so aus:

https://wifi-iot.com/p/wiki/87/ru/

dev0

Der String ist kaputt, kannst Du zB. auch hier testen: http://jsonlint.com/

Wenn Du einen validen JSON String hast, dann kannst Du das expandJSON Modul nutzen: https://github.com/ddtlabs/expandJSON/

accloginsell

Ich versuche nachher mal einen "Sensor" anzulegen. Evtl löst dies das Problem

Danke für den ersten Lösungsansatz!

dev0

Mit dem Beispiel aus Deinem Link funktioniert es:


defmod d dummy
defmod ej expandJSON d:json:.{.*}
setreading d json {"system":{"hostname":"test","uptime":56858,"rssi":-59,"freemem":13264},"sensors":{"dsw1":28.9,"dsw2":28.8,"dsw3":28.1,"dsw4":25.5,"ping":1},"gpio":{"16":0},"pwm":{"0":120}}
list d
Internals:
...
   Readings:
     2017-02-21 09:24:45   gpio_16         0
     2017-02-21 09:24:45   json            {"system":{"hostname":"test","uptime":56858,"rssi":-59,"freemem":13264},"sensors":{"dsw1":28.9,"dsw2":28.8,"dsw3":28.1,"dsw4":25.5,"ping":1},"gpio":{"16":0},"pwm":{"0":120}}
     2017-02-21 09:24:45   pwm_0           120
     2017-02-21 09:24:45   sensors_dsw1    28.9
     2017-02-21 09:24:45   sensors_dsw2    28.8
     2017-02-21 09:24:45   sensors_dsw3    28.1
     2017-02-21 09:24:45   sensors_dsw4    25.5
     2017-02-21 09:24:45   sensors_ping    1
     2017-02-21 09:24:45   system_freemem  13264
     2017-02-21 09:24:45   system_hostname test
     2017-02-21 09:24:45   system_rssi     -59
     2017-02-21 09:24:45   system_uptime   56858


accloginsell

Habe den Fehler gefunden. Es ist mal ein Sensor angelegt gewesen. Dieser wurde gelöscht aber der MQTT sendet weiterhin. Hat aber keinen Sensor. Daher fehlt

:{"dsw1":28.9,"dsw2":28.8,"dsw3":28.1,"dsw4":25.5,"ping":1}

Dieses macht das ganze dann ungültig. Werde es mal an WIFI-IOT melden damit dies überarbeitet wird.

Danke für die Hilfe