NEWS
JSON als Datenpunkt/mqtt
-
Hallo Leute,
habe mir den "Air Quality Monitor" SPS208 zugelegt.
Dieser sendet mir per mqtt folgende Json:
{"ts":"2019-02-18T22:21:00Z","rco2 (ppm)":857.1,"rtemp":-45,"rhumid":0,"km102.rtvoc (ppb)":125.3,"km102.rhumid":43.82,"km102.rtemp":21.63,"km100.rgt25":0,"km100.rpm25":1.13,"km100.rpm25c":1.349,"km100.rgt03":507.9,"km100.rpm10":1.174,"km100.rpm10c":1.4,"rbtrytemp":30,"rbtryvoltage_now":3544000,"rbtryvoltage_max":4100000,"rbtrycurrent_now":-441000,"rbrdtemp":30}
mit folgendem java script (aus einem anderen Beitrag kopiert )kann ich auch gewisse Datenpunkte auslesen:
//MQTT Json to Objekt // var setzen // Create States createState('javascript.0.jsonconverter.sonoff.Watt', 0,{type: 'nummer',name: 'Aktuelle Watt Zahl', read: true,write: true,role: 'value.watt'}) createState('javascript.0.jsonconverter.sonoff.Volt', 0,{type: 'nummer',name: 'Aktuelle Volt Zahl', read: true,write: true,role: 'value.voltage'}) createState('javascript.0.jsonconverter.sonoff.Ampere', 0,{type: 'nummer',name: 'Aktuelle Ampere Zahl', read: true,write: true,role: 'value.ampere'}) // Script beginning on({id: "sonoff.0.Büro.POWER"/*Büro POWER*/, change: "any"}, function (obj) { //variabele erstellen fuer meine 3 beispiel objecte var volt; var watt; var ampere; //der try ist wichtig das der adapter nicht abschmiert bei einem fehler, hiermit pasen wird die json in ein object try {obj = JSON.parse(getState("mqtt.0.device.pro.history.42a2b53b-2db4-4c44-81d4-feb55209f1f8"/*device/pro/history/42a2b53b-2db4-4c44-81d4-feb55209f1f8*/).val); } catch (e) { console.error('Cannot parse: ' + getState("mqtt.0.device.pro.history.42a2b53b-2db4-4c44-81d4-feb55209f1f8"/*device/pro/history/42a2b53b-2db4-4c44-81d4-feb55209f1f8*/).val); return; } //hier schreien wir die daten des json strings in die variabelen, links die variable und rechts der name im json. obj bedeuten halt lese den wert nach : // bei dir waere das z.b. obj.time / obj.yesterday usw volt = obj.ts; watt = obj.rhumid; ampere = obj.rtemp; // setState('javascript.0.jsonconverter.sonoff.Watt', (watt)); setState('javascript.0.jsonconverter.sonoff.Volt', (volt)); setState('javascript.0.jsonconverter.sonoff.Ampere', (ampere)); //jetzt lass uns mal im log zeigen was wir bekommen haben log(volt); log(watt); log(ampere); });
Nur leider kann ich keine Datenpunkte mit einem Leerzeichen (zB volt =obj.rco2 (ppm);) oder mit einem Punkt (zB. volt= obj.km102.rhumid;) auslesen, es kommt immer ein error.
Wie kann ich diese Datenpunkte auslesen?
Das Script werde ich dann anpassen, wenn ich alle Daten auslesen kann.
Kann leider kein javascript. Habe bisher immer alles mit blockly gemacht, nur in diesem Fall komme ich leider damit auch nicht weiter.
Herzlichen Dank für Eure Hilfe!!!
lg
Chris -
so vielleicht:
var json = '{"ts":"2019-02-18T22:21:00Z","rco2 (ppm)":857.1,"rtemp":-45,"rhumid":0,"km102.rtvoc (ppb)":125.3,"km102.rhumid":43.82,"km102.rtemp":21.63,"km100.rgt25":0,"km100.rpm25":1.13,"km100.rpm25c":1.349,"km100.rgt03":507.9,"km100.rpm10":1.174,"km100.rpm10c":1.4,"rbtrytemp":30,"rbtryvoltage_now":3544000,"rbtryvoltage_max":4100000,"rbtrycurrent_now":-441000,"rbrdtemp":30}'; var obj = JSON.parse(json); for (i=0; i<Object.keys(obj).length; i++){ log(Object.keys(obj)[i] + ': ' + obj[Object.keys(obj)[i]]); }
-
Verwende einfach die sogenannte bracket notation um auf die Werte zuzugreifen..
Also so:co2 = obj['rco2 (ppm)'];
Gruß
-
Hi,
herzlichen Dank für die Lösungsvorschläge!
Werde ich heute nach der Arbeit ausprobieren!Lg
Chris -
So, der Hinweis von BuZZy konnte mein Problem lösen! Nochmals herzlichen Dank!
lg