NEWS
setState schreibt Wert nicht
-
Hallo.
Ich hab mir ein einfaches Skript gefriemelt. Es ist nicht mein erstes mal JS. Mit den IObroker spezifischen schon.
Es geht um einen einfachen Mittelwert.var target = 'Temperaturen.InnenMittelwert'; // list all remperatures Insides here var inside_t =[ "ble.0.58:2d:34:3b:66:e3.temperature", // Wohnzimmer "ble.0.58:2d:34:3b:72:9f.temperature", // Schlafzimmer "ble.0.58:2d:34:3b:75:5c.temperature" // Küche ] on({id: inside_t, change: "any"}, function (obj) { var sum = 0 inside_t.forEach(function(item, index, array) { sum = sum + getState(item).val }); var result = sum / (inside_t.length) result = Math.round(result*100)/100 if ( !existsState(target )) { createState(target, result,{name: "Durchschnittstemperatur.", type: 'number', role: 'value'}, function () {}); } else { setState(target, result, true); } console.log(result) });
Beim Anlegen des Objekts wird der Wert korrekt geschrieben in "javascript.0.Temperaturen.InnenMittelwert".
Nur überschreibt setState den wert nicht. Wo habe ich einen Fehler gemacht ?Grüße
Stephan -
@stephan-4
Und wieder note to myself:einfach immer schreiben. das else hat es iwie kaputt gemacht
nicht kopieren fehler drin:
var target = 'Temperaturen.InnenMittelwert'; // list all remperatures Insides here var inside_t =[ "ble.0.58:2d:34:3b:66:e3.temperature", // Wohnzimmer "ble.0.58:2d:34:3b:72:9f.temperature", // Schlafzimmer "ble.0.58:2d:34:3b:75:5c.temperature" // Küche ] on({id: inside_t, change: "any"}, function (obj) { var sum = 0 inside_t.forEach(function(item, index, array) { sum = sum + getState(item).val }); var result = sum / (inside_t.length) result = Math.round(result*100)/100 if ( !existsState(target)) { createState(target, result,{name: "Durchschnittstemperatur.", type: 'number', role: 'value'}, function () {}); } setState(target, result, true); //console.log(result) });
Falls die Selbstgespräche nerven, bitte anschreien!
Küsschen
Stephan -
@stephan-4 ergänze mal target um
javascript.0.
und schaue auch mal unter 0_userdata.0 nach -
@stephan-4 sagte: Wo habe ich einen Fehler gemacht ?
existsState(id) benötigt die vollständige ID "javascript.0.Temperaturen.InnenMittelwert".
-
@paul53 said in setState schreibt Wert nicht:
javascript.0.Temperaturen.InnenMittelwert
Vielen Dank, so ist es.
var target = 'javascript.0.Temperaturen.InnenMittelwert'; // list all remperatures Insides here var inside_t =[ "ble.0.58:2d:34:3b:66:e3.temperature", // Wohnzimmer "ble.0.58:2d:34:3b:72:9f.temperature", // Schlafzimmer "ble.0.58:2d:34:3b:75:5c.temperature" // Küche ] on({id: inside_t, change: "any"}, function (obj) { var sum = 0 inside_t.forEach(function(item, index, array) { sum = sum + getState(item).val }); var result = sum / (inside_t.length) result = Math.round(result*100)/100 if ( !existsState(target)) { createState(target, result,{name: "Durchschnittstemperatur.", type: 'number', role: 'value'}, function () {}); } else { setState(target, result, true); } });