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]]); }
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login