Jetzt fällt es mir wie Schuppen von den Augen.
Danke!!
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