NEWS
Iobroker Blockly Probleme Subtraktion
-
Moin,
ich errechne derzeit die Werte meines Regensensors via Blockly.
Hier habe ich das folgende Verhalten. Ich setze zeitgesteuert Startwerte. Bei Änderung des Regensensors führe ich Berechnungen aus und schreibe das Ergebnis wieder in entsprechende Datenpunkte.
Als Beispiel hier:
Datenpunkt RegenTagesbeginn wurde um 00:00Uhr auf 63.9 gesetzt -> soweit o.K.
Berechnung jetzt, sobald sich Wert Regensensor ändert, aktualisiere RegenHeute mit Wert Sensor_Total - RegenTagesbeginn
In meinem Beispiel: 64.8-63.9
Ich würde als Ergebnis 0.9 erwarten. Tatsächlich steht aber im Datenpunkt der Wert 0.8999999999999986
Was wird denn da Intern gerechnet? Man kann hier sicherlich mit Runden nachhelfen, aber warum ist das so?
Das eigentliche Problem, was ich habe. Ich übertrage die Wetterdaten Richtung WU, habe mir hier ein Scriptbeispiel aus dem Forum angepasst. Da die Werte in Inch übertragen werden vermute ich hier Rundungsfehler o. Ä, die Werte auf WU weichen leicht von den eigentlichen Werten ab.
Beispiel für Heute: der Wert Regen / Stunde war zwischen 03:00 und 04:00 0.6mm. WU zeigt 0.5mm. Der Regen Total heute ist eigentlich 0.9mm. WU zeigt 1.02mm,
https://www.wunderground.com/personal-w … 14#history
Gruß
Matze
Gruß
Matze
-
Keiner eine Idee?
Das witzige ist, es kommen nicht immer krumme Werte dabei raus. :roll:
!
schedule("*/15 * * * *", function () { if (getState("Datenpunkte.0.RegenAktuell").val == getState("Datenpunkte.0.RegenStunde").val) { setState("Datenpunkte.0.RegenAktuell"/*RegenAktuell*/, 0, true); } }); schedule("0 * * * *", function () { setState("Datenpunkte.0.RegenStundenbeginn"/*RegenStundenbeginn*/, getState("rflink.1.channels.DKW2012_1.RAIN").val, true); setState("Datenpunkte.0.RegenStunde"/*RegenStunde*/, 0, true); }); schedule("0 0 * * *", function () { setState("Datenpunkte.0.RegenTagesbeginn"/*RegenTagesbeginn*/, getState("rflink.1.channels.DKW2012_1.RAIN").val, true); setState("Datenpunkte.0.RegenGestern"/*RegenGestern*/, getState("Datenpunkte.0.RegenHeute").val, true); setState("Datenpunkte.0.RegenHeute"/*RegenHeute*/, 0, true); }); schedule("0 0 * * 0", function () { setState("Datenpunkte.0.RegenWochenbeginn"/*RegenWochenbeginn*/, getState("rflink.1.channels.DKW2012_1.RAIN").val, true); setState("Datenpunkte.0.Regen_Woche"/*Regen_Woche*/, 0, true); }); schedule("1 0 1 * *", function () { setState("Datenpunkte.0.RegenMonatsbeginn"/*RegenMonatsbeginn*/, getState("rflink.1.channels.DKW2012_1.RAIN").val, true); setState("Datenpunkte.0.Regen_Monat"/*Regen_Monat*/, 0, true); }); on({id: "rflink.1.channels.DKW2012_1.RAIN"/*DKW2012_ 1 Total rain level*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState("Datenpunkte.0.RegenAktuell"/*RegenAktuell*/, (getState("rflink.1.channels.DKW2012_1.RAIN").val - getState("Datenpunkte.0.RegenStundenbeginn").val), true); setState("Datenpunkte.0.RegenStunde"/*RegenStunde*/, (getState("rflink.1.channels.DKW2012_1.RAIN").val - getState("Datenpunkte.0.RegenStundenbeginn").val), true); setState("Datenpunkte.0.RegenHeute"/*RegenHeute*/, (getState("rflink.1.channels.DKW2012_1.RAIN").val - getState("Datenpunkte.0.RegenTagesbeginn").val), true); setState("Datenpunkte.0.Regen_Woche"/*Regen_Woche*/, (getState("rflink.1.channels.DKW2012_1.RAIN").val - getState("Datenpunkte.0.RegenWochenbeginn").val), true); setState("Datenpunkte.0.Regen_Monat"/*Regen_Monat*/, (getState("rflink.1.channels.DKW2012_1.RAIN").val - getState("Datenpunkte.0.RegenMonatsbeginn").val), true); }); !
3514_datenpunkte.png
3514_blockly.png -
-
Danke für die Antwort. Das macht einiges klar.
Gruß
Matze