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]]); }
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden