NEWS
Werte auslesen und addieren / wie dann anzeigen
-
Ganz ehrlich .... das verstehe ich "noch" nicht... da fehlt mir das Hintergrundwissen zu .
Habe bei den Beispielen einen JS Sript gesehen.. der ist zumindest für mich logischer..
Das man wie in VBA einen Recordset der Werte macht und dann einfach zusammen zählt.
Wobei bei IOBorker man das dann in einen Datenpunkt schreiben muss ... glaube ich...
-
Hallo ! Als blutiger Anfänger benötige ich mal euer Wissen um den Anfang beim erstellen von Scripten zu schaffen. Bei den Beispielen hier im Forum fehlt mir das nötige Knowhow das dann umzusetzen.
Ausgangslage : Ich habe hier im Haus 6 sonoff POW2 Adapter am laufen. Jetzt möchte ich in einem Script die Täglichen kWh Werte z.b. "sonoff.0.AUDIO.ENERGY_Total" und sonoff.0.EDV.ENERGY_Total zusammen addieren und dann anzeigen lassen im VIS.
Bitte bei euren Erklärungen Schritt für Schritt aufzeigen was wann warum zu tun ist. Wahrscheinlich zuerst die Werte auslesen und dann addieren.. aber wie ?
Vielen dank für eure Mühe schon mal im Voraus !
@GTV Vorschlag als Javascript:
const idAudio = 'sonoff.0.AUDIO.ENERGY_Total'; const idEdv = 'sonoff.0.EDV.ENERGY_Total'; const idSumme = 'ENERGY_Total.Summe'; // Variablen für zu addierende Werte deklarieren und für Skriptstart initialisieren var audio = getState(idAudio).val; var edv = getState(idEdv).val; // Datenpunkt für Summe erzeugen createState(idSumme, 0, {type: 'number', unit: 'kWh'}); function summe() { setState(idSumme, audio + edv, true); // Summe in Datenpunkt schreiben } setTimeout(summe, 200); // Skriptstart // Reaktion bei Wertänderung on(idAudio, function(dp) { audio = dp.state.val; summe(); }); on(idEdv, function(dp) { edv = dp.state.val; summe(); }); -
Ja sowas verstehe ich schon ehr : ) Blöde Frage den code als Common oder Global anlegen ? Und wie stelle ich das Ergebniss dann im VIS da ?
-
const idAudio = 'sonoff.0.AUDIO.ENERGY_Total'; const idEdv = 'sonoff.0.EDV.ENERGY_Total'; const idHZ = 'sonoff.0.HZ.ENERGY_Total'; const idSumme = 'ENERGY_Total.Summe'; // Variablen für zu addierende Werte deklarieren und für Skriptstart initialisieren var audio = getState(idAudio).val; var edv = getState(idEdv).val; var hz = getState(idHZ).val; // Datenpunkt für Summe erzeugen createState(idSumme, 0, {type: 'number', unit: 'kWh'}); function summe() { setState(idSumme, audio + edv + hz, true); // Summe in Datenpunkt schreiben } summe(); // Skriptstart // Reaktion bei Wertänderung on(idAudio, function(dp) { audio = dp.state.val; summe(); }); on(idEdv, function(dp) { edv = dp.state.val; summe(); });Soweit habe ich das jetzt ... In Zeile 25 habe ich nach True eine ) gesetzt. beim starten bekomme ich noch
18:36:25.109 error javascript.0 script.js.common.KWH1 compile failed: at script.js.common.KWH1:25Kannst du da bitte noch mal rauf schauen...
-
Sorry zeile 25 ) an falscher Stelle gesetzt.
Jetzt kommt noch eine Meldung
18:44:17.263 error javascript.0 script.js.common.KWH1 compile failed: at script.js.common.KWH1:22Da steht ja aber gar nichts drin..
-
@GTV Habe Dein Skript getestet: Compiler-Fehler kommen bei mir nicht. Lösche mal die überflüssigen Leerzeilen.
@paul53 Habe jetzt mal alles rausgeworfen.. es kommen zwar immer noch Error Meldungen aber der Code läuft..
const idAudio = 'sonoff.0.AUDIO.ENERGY_Total'; const idEdv = 'sonoff.0.EDV.ENERGY_Total'; const idHz = 'sonoff.0.HZ.ENERGY_Total'; const idKh = 'sonoff.0.Kuehlschrank.ENERGY_Total'; const idSumme = 'ENERGY_Total.Summe'; var audio = getState(idAudio).val; var edv = getState(idEdv).val; var hz = getState(idHz).val; var kh = getState(idKh).val; createState(idSumme, 0, {type: 'number', unit: 'kWh'}); var sum = audio + edv + hz + kh function summe() {setState(idSumme, sum,true);} setTimeout(summe, 200); on(idAudio, function(dp) { audio = dp.state.val; summe(); }); on(idEdv, function(dp) { edv = dp.state.val; summe(); }); on(idHz, function(dp) { hz = dp.state.val; summe(); }); on(idKh, function(dp) { kh = dp.state.val; summe(); });Vielen Dank für deine Hilfe !!!
-
@paul53 Habe jetzt mal alles rausgeworfen.. es kommen zwar immer noch Error Meldungen aber der Code läuft..
const idAudio = 'sonoff.0.AUDIO.ENERGY_Total'; const idEdv = 'sonoff.0.EDV.ENERGY_Total'; const idHz = 'sonoff.0.HZ.ENERGY_Total'; const idKh = 'sonoff.0.Kuehlschrank.ENERGY_Total'; const idSumme = 'ENERGY_Total.Summe'; var audio = getState(idAudio).val; var edv = getState(idEdv).val; var hz = getState(idHz).val; var kh = getState(idKh).val; createState(idSumme, 0, {type: 'number', unit: 'kWh'}); var sum = audio + edv + hz + kh function summe() {setState(idSumme, sum,true);} setTimeout(summe, 200); on(idAudio, function(dp) { audio = dp.state.val; summe(); }); on(idEdv, function(dp) { edv = dp.state.val; summe(); }); on(idHz, function(dp) { hz = dp.state.val; summe(); }); on(idKh, function(dp) { kh = dp.state.val; summe(); });Vielen Dank für deine Hilfe !!!
-
@GTV Die Summenbildung funktioniert so nur einmal bei Skriptstart. Richtig:
function summe() { var sum = audio + edv + hz + kh; setState(idSumme, sum, true); }