NEWS
Script zum hochrechnen des Stromverbrauchs
-
Ich habe mir vorgestellt das ich meinen voraussichtlichen Jahresverbrauch hochrechnen und den dann in einen Datenpunkt schreiben möchte.
Also nach dem aktuellen Zählerstand bzw. bisherigen Verbrauch möchte ich den simpel auf das volle Jahr hochrechnen. Das allerdings möglichst Taggenau.
Mir ist klar dass das nie ein genaues Ergebnis ergeben wird, weil ja im Herbst und Winter länger Licht usw. an ist und deshalb das nur ein grober Schätzwert werden wird.
Dazu suche ich jetzt also nach einer Formel bzw. einem Skript mit dem ich das umsetzen kann.
So in etwa:
Aktueller Verbrauch / Tage bisher * 365
Hat jemand eine Idee wie man das in ein Skript packen kann? Vor allem die Abfrage "Tage bisher" bereitet mir da Kopfzerbrechen.
-
Kann sowas funktionieren oder ist da ein Denkfehler drin?
schedule('{"time":{"exactTime":true,"start":"00:01"},"period":{"days":1}}', async function () { setState("0_userdata.0.Strom.Hochrechnung"/*Hochrechnung*/, (parseFloat((parseFloat(getState("0_userdata.0.Stromverbrauch.Verbrauch_Abrechnungsjahr").val) / formatDate(new Date(), "j"))) * 365)); });
Soweit ich das gelesen habe müsste ich mit dem Befehl
date +%j
ja den aktuellen Tag des Jahres ausggeben bekommen. Aber ich habe keine Ahnung ob das unter Javascript so umsetzbar ist. -
-
@arteck
Danke für den Link. Den habe ich gestern gesehen und ausprobiert.
Mit der Konsolenausgabe kam irgendwie nichts und wenn ich es versucht habe in einen Datenpunkt zu schreiben kam eine Fehlermeldung:javascript.0 2022-06-27 08:38:00.048 error at processTimers (node:internal/timers:502:7) javascript.0 2022-06-27 08:38:00.048 error at listOnTimeout (node:internal/timers:559:17) javascript.0 2022-06-27 08:38:00.048 error at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7) javascript.0 2022-06-27 08:38:00.047 error at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28 javascript.0 2022-06-27 08:38:00.047 error at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15) javascript.0 2022-06-27 08:38:00.046 error at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1408:34) javascript.0 2022-06-27 08:38:00.046 error at Object.<anonymous> (script.js.Strom.TagDesJahres:9:58) javascript.0 2022-06-27 08:38:00.040 error Error in callback: TypeError: tag is not a function
schedule("* * * * *", function () { // Tag des Jahres var jetzt = new Date(); var Jahr = jetzt.getFullYear(); var heutestart = new Date(jetzt.setHours(0,0,0,0)); var neujahr = new Date(Jahr,0,1); var difftage = (heutestart - neujahr) / (24*60*60*1000) + 1; var tag = Math.ceil(difftage); setState("0_userdata.0.TagDesJahres"/*TagDesJahres*/, tag(tag)); });
-
Gelöscht
-
@chaot sagte in Script zum hochrechnen des Stromverbrauchs:
setState("0_userdata.0.TagDesJahres"/TagDesJahres/, tag(tag));
mach doch nicht so kopliziert
hier ist der Fehler, so muss es sein
setState("0_userdata.0.TagDesJahres"/*TagDesJahres*/, tag);
aber schau erst obs geht.. ohne den schedule geraffel
// Tag des Jahres var jetzt = new Date(); var Jahr = jetzt.getFullYear(); var heutestart = new Date(jetzt.setHours(0,0,0,0)); var neujahr = new Date(Jahr,0,1); var difftage = (heutestart - neujahr) / (24*60*60*1000) + 1; var tag = Math.ceil(difftage); log.console("tag ----------> " + tag);
-
@arteck sagte in Script zum hochrechnen des Stromverbrauchs:
log.console("tag ----------> " + tag);
Mag mich nicht
Ich hatte noch eine Fehlermeldung in der Rechenzeile (6) die ich mit.getTime
wegbekommen habe.
log.console gibt eine Fehlermeldung und unter console.log kommt keine Ausgabe.// Tag des Jahres var jetzt = new Date(); var Jahr = jetzt.getFullYear(); var heutestart = new Date(jetzt.setHours(0,0,0,0)).getTime(); var neujahr = new Date(Jahr,0,1).getTime(); var difftage = (heutestart - neujahr) / (24*60*60*1000) + 1; var tag = Math.ceil(difftage); console.log("tag ----------> " + tag);
-
@chaot dann andersrum.. verwechsel ich immrt
log.console("tag ----------> " + tag);
-
@arteck
Kommt zwar auch nichts in der Konsole, aber das Teil läuft!!!!!!// Hochrechnung var jetzt = new Date(); var Jahr = jetzt.getFullYear(); var heutestart = new Date(jetzt.setHours(0,0,0,0)).getTime(); var neujahr = new Date(Jahr,0,1).getTime(); var difftage = (heutestart - neujahr) / (24*60*60*1000) + 1; var tag = Math.ceil(difftage); setState("0_userdata.0.Strom.Hochrechnung"/*Hochrechnung*/, ((getState("0_userdata.0.Stromverbrauch.Verbrauch_Abrechnungsjahr").val) / tag) * 365);
-
@chaot
Jetzt noch die Kommastellen wegbekommen und ich bin zufrieden -
Das Script funktioniert so wie ich das will.
Danke @arteck für die Tips und Hinweise in die richtige Richtung.// Hochrechnung Jahresverbrauch schedule("0,1 0 * * *", async function () { var jetzt = new Date(); var Jahr = jetzt.getFullYear(); var heutestart = new Date(jetzt.setHours(0,0,0,0)).getTime(); var neujahr = new Date(Jahr,0,1).getTime(); var difftage = (heutestart - neujahr) / (24*60*60*1000) + 1; var tag = Math.ceil(difftage); setState("0_userdata.0.Strom.Hochrechnung"/*Hochrechnung*/, (((getState("0_userdata.0.Stromverbrauch.Verbrauch_Abrechnungsjahr").val) / tag) * 365).toFixed(0)); });