NEWS
Probleme beim Addieren (aber erst seit kurzem - ging schon)
-
Anbei ein simples Rechenskript welches ich schon einige Zeit im Einsatz habe.
createState('Strom.Summe_Nachzahlung_Erstattung'); function Differenz(obj) { // var Strom = getState("hm-rega.0.2169").val; if (Strom > 0) { log("---> Ersattung Strom: " + Strom + " EURO", "info"); } else { log("---> Nachzahlung Strom: " + Strom + " EURO", "info"); } var Wasser = getState("javascript.0.Wasser.Differenz"/*Wasser.Differenz*/).val; if (Wasser > 0) { log("---> Ersattung Wasser: " + Wasser + " EURO", "info"); } else { log("---> Nachzahlung Wasser: " + Wasser + " EURO", "info"); } var Solar = getState("hm-rega.0.7362"/*Strom_1.8.2_Über-Unterdeckung Verkauf*/).val; if (Solar > 0) { log("---> Ersattung Solar: " + Solar + " EURO", "info"); } else { log("---> Nachzahlung Solar: " + Solar + " EURO", "info"); } var Summe = Strom.val + Solar.val; setState('Strom.Summe_Nachzahlung_Erstattung', Summe); if (Summe > 0) { log("---> Ersattung: " + Summe + " EURO", "info"); } else { log("---> Nachzahlung: " + Summe + " EURO", "info"); } } on("javascript.0.Wasser.Differenz"/*Wasser.Differenz*/, function() { log("===>Ausgelöst durch Änderung Wasser!"); Differenz(); }); on("hm-rega.0.7362"/*Strom_1.8.2_Über-Unterdeckung Verkauf*/, function() { log("===>Ausgelöst durch Änderung Strom!"); Differenz(); }); schedule("*/10 * * * *", function () { //oder!! soll entweder ausgelöst werden alle 10 Minuten log("===>Will be triggered every 10 minutes!"); Differenz(); });
Hat auch wochenlang gut funktioniert, doch jetzt bekomme ich folgenden Fehler
javascript-0 2015-06-14 20:20:01 info script.js.Summe_Solar_-_Wasser_-_PV: ---> Nachzahlung: NaN EURO javascript-0 2015-06-14 20:20:00 info script.js.Summe_Solar_-_Wasser_-_PV: ---> Ersattung Solar: 127.88 EURO javascript-0 2015-06-14 20:20:00 info script.js.Summe_Solar_-_Wasser_-_PV: ---> Nachzahlung Wasser: NaN EURO javascript-0 2015-06-14 20:20:00 info script.js.Summe_Solar_-_Wasser_-_PV: ---> Nachzahlung Strom: -279.05 EURO
Summe wird grad ohne Wasser gemacht, also aus -279.05 + 127.88. Bekomme aber NaN EURO.
Hat einer ne Idee? Oder kann sich es mal jemand ansehen ob da doch ein Fehler drin ist? Weis auch nicht ob sich was am System geändert hat. Fehkt hier ein Update? Habe heute Javaskript auf 0.4.5 aber gleicher Fehler
-
Anbei ein simples Rechenskript welches ich schon einige Zeit im Einsatz habe.
Hat auch wochenlang gut funktioniert, doch jetzt bekomme ich folgenden Fehler
javascript-0 2015-06-14 20:20:01 info script.js.Summe_Solar_-_Wasser_-_PV: ---> Nachzahlung: NaN EURO javascript-0 2015-06-14 20:20:00 info script.js.Summe_Solar_-_Wasser_-_PV: ---> Ersattung Solar: 127.88 EURO javascript-0 2015-06-14 20:20:00 info script.js.Summe_Solar_-_Wasser_-_PV: ---> Nachzahlung Wasser: NaN EURO javascript-0 2015-06-14 20:20:00 info script.js.Summe_Solar_-_Wasser_-_PV: ---> Nachzahlung Strom: -279.05 EURO
Summe wird grad ohne Wasser gemacht, also aus -279.05 + 127.88. Bekomme aber NaN EURO.
Hat einer ne Idee? Oder kann sich es mal jemand ansehen ob da doch ein Fehler drin ist? Weis auch nicht ob sich was am System geändert hat. Fehkt hier ein Update? Habe heute Javaskript auf 0.4.5 aber gleicher Fehler `
Momentan Wasser hat kein Wert und bei der Berechnung der Summe ".val" ist überflüssig.
Was gibt bei dir "log(JSON.stringify(getState("javascript.0.Wasser.Differenz"/Wasser.Differenz/)));" aus?
createState('Strom.Summe_Nachzahlung_Erstattung'); function Differenz(obj) { // var Strom = getState("hm-rega.0.2169").val; if (Strom > 0) { log("---> Ersattung Strom: " + Strom + " EURO", "info"); } else { log("---> Nachzahlung Strom: " + Strom + " EURO", "info"); } var Wasser = getState("javascript.0.Wasser.Differenz"/*Wasser.Differenz*/).val; log(JSON.stringify(getState("javascript.0.Wasser.Differenz"/*Wasser.Differenz*/))); if (Wasser > 0) { log("---> Ersattung Wasser: " + Wasser + " EURO", "info"); } else { log("---> Nachzahlung Wasser: " + Wasser + " EURO", "info"); } var Solar = getState("hm-rega.0.7362"/*Strom_1.8.2_Über-Unterdeckung Verkauf*/).val; if (Solar > 0) { log("---> Ersattung Solar: " + Solar + " EURO", "info"); } else { log("---> Nachzahlung Solar: " + Solar + " EURO", "info"); } var Summe = Strom + Solar; setState('Strom.Summe_Nachzahlung_Erstattung', Summe); if (Summe > 0) { log("---> Ersattung: " + Summe + " EURO", "info"); } else { log("---> Nachzahlung: " + Summe + " EURO", "info"); } } on("javascript.0.Wasser.Differenz"/*Wasser.Differenz*/, function() { log("===>Ausgelöst durch Änderung Wasser!"); Differenz(); }); on("hm-rega.0.7362"/*Strom_1.8.2_Über-Unterdeckung Verkauf*/, function() { log("===>Ausgelöst durch Änderung Strom!"); Differenz(); }); schedule("*/10 * * * *", function () { //oder!! soll entweder ausgelöst werden alle 10 Minuten log("===>Will be triggered every 10 minutes!"); Differenz(); });
-
Im Log stehen folgende Meldungen.
javascript-0 2015-06-15 18:04:00 info script.js.Script1: ---> Nachzahlung: -148.76 EURO javascript-0 2015-06-15 18:04:00 info script.js.Script1: ---> Ersattung Solar: 126.88 EURO javascript-0 2015-06-15 18:04:00 info script.js.Script1: ---> Nachzahlung Wasser: NaN EURO javascript-0 2015-06-15 18:04:00 info script.js.Script1: {"val":"NaN","ack":false,"ts":1434312489,"from":"system.adapter.javascript.0","lc":1434312483} javascript-0 2015-06-15 18:04:00 info script.js.Script1: ---> Nachzahlung Strom: -275.64 EURO javascript-0 2015-06-15 18:04:00 info script.js.Script1: ===>Will be triggered every 1 minutes! javascript-0 2015-06-15 18:03:45 info script.js.Script1: registered 2 subscriptions and 1 schedule
-
Wie ich vermutet habe, dein "javascript.0.Wasser.Differenz" ist NaN (Not a number).
Wie berechnest du das?
-
Unter das was in Objecte unter javaskript.o steht. Auch hier habe ich bei Differenz eine NaN
Abwasser state Wasser.Abwasser state javascript 211.56 Differenz state Wasser.Differenz state javascript NaN Frischwasser state Wasser.Frischwasser state javascript 206.19 Grundgebühr state Wasser.Grundgebühr state javascript 2.08 Niederschlagswasser state Wasser.Niederschlagswasser state javascript 46.24 Total state Wasser.Total state javascript 466.07 Vorrauszahlung state Wasser.Vorrauszahlung state javascript 541.18
Unten das Skript wo Diff Wasser berechnet wird
createState('Wasser.Frischwasser', 0); createState('Wasser.Abwasser', 0); createState('Wasser.Differenz', 0); createState('Wasser.Niederschlagswasser', 0); createState('Wasser.Vorrauszahlung', 0); createState('Wasser.Grundgebühr', 0); createState('Wasser.Total', 0); function Wasser(obj) { log("===> Berechnung Kosten Wasser","info"); var Verbrauch = getState("hm-rega.0.5360"/*Wasser_Wasseruhr_aktuelle*/).val - 799; var Frischwasser = Verbrauch * 2.35 *1.07; var Frischwasserg = Frischwasser.toFixed(2); var Tage = getState("hm-rega.0.5361"/*Tage_Wasser*/).val; log("===> Frischwasser " + Frischwasserg,"info"); var Total = Frischwasserg.val; log("===> Zwischensummer " + Frischwasserg,"info"); var Grundgebuehr = (Tage / 30 * 0.33 * 1.07); var Grundgebuehrg = Grundgebuehr.toFixed(2); log("===> Grundgebühr " + Grundgebuehrg,"info"); var Niederschlag = (209 * 0.45 / 360 * Tage); var Niederschlagg = Niederschlag.toFixed(2); log("===> Niederschlaggebühr " + Niederschlagg,"info"); var Abwasser = (Verbrauch * 2.58); var Abwasserg = Abwasser.toFixed(2); log("===> Abwasser " + Abwasserg,"info"); var Summe = (Verbrauch * 2.35 *1.07) + (Tage / 30 * 0.33 * 1.07) + (209 * 0.45 / 360 * Tage) + (Verbrauch * 2.58); var Totalg = Summe.toFixed(2); log("===> Kosten total " + Totalg,"info"); var Vorrausz = (279 * 4 / 365 * Tage); var Vorrauszg = Vorrausz.toFixed(2); log("===> Vorrauszahlung " + Vorrauszg,"info"); var Diff = (279 * 4 / 365 * Tage).val - ((Verbrauch * 2.35 *1.07).val + (Tage / 30 * 0.33 * 1.07).val + (209 * 0.45 / 360 * Tage).val + (Verbrauch * 2.58)).val ; var Diffg = Diff.toFixed(2); log("===> Differenz " + Diffg,"info"); setState("javascript.0.Wasser.Frischwasser"/*Wasser.Frischwasser*/, Frischwasserg); setState("javascript.0.Wasser.Grundgebühr"/*Wasser.Grundgebühr*/, Grundgebuehrg); setState("javascript.0.Wasser.Niederschlagswasser"/*Wasser.Niederschlagswasser*/, Niederschlagg); setState("javascript.0.Wasser.Abwasser"/*Wasser.Abwasser*/, Abwasserg); setState("javascript.0.Wasser.Vorrauszahlung"/*Wasser.Vorrauszahlung*/,Vorrauszg) ; setState("javascript.0.Wasser.Total"/*Wasser.Total*/,Totalg); setState("javascript.0.Wasser.Differenz"/*Wasser.Differenz*/,Diffg); } on("hm-rega.0.5360"/*Wasser_Wasseruhr_aktuelle*/, function(obj) { //oder!! soll entweder ausgelöst werden beihm-rpc.0.KEQ0040908.1.TEMPERATURE log("===>Ausgelöst durch Eingabe neuer Wert Wasseruhr!"); Wasser(obj); }); schedule("*/1* * * *", function () { //oder!! soll entweder ausgelöst werden alle 10 Minuten log("===>Will be triggered every 60 minutes - Wasser!"); Wasser(); });
-
Mindestens ein Problem ist hier:
var Diff = (279 * 4 / 365 * Tage).val - ((Verbrauch * 2.35 *1.07).val + (Tage / 30 * 0.33 * 1.07).val + (209 * 0.45 / 360 * Tage).val + (Verbrauch * 2.58)).val ;
Ändere bitte auf:
var Diff = (279 * 4 / 365 * Tage) - ((Verbrauch * 2.35 *1.07) + (Tage / 30 * 0.33 * 1.07) + (209 * 0.45 / 360 * Tage) + (Verbrauch * 2.58));
".val" brauchst du um Wert aus dem ioBroker-Zustands-Objekt raus lesen. (279 * 4 / 365 * Tage) ist kein Objekt sondern nur "number" und man kann nichts aus dem "number" lesen. Nur "number" selbst.
-
hab nun iobroker neu aufgesetzt und es geht wieder.