NEWS
[Gelöst] Ölvorrat Enddatum berechnen
-
Hallo,
Ich habe mir die Datenpunkte entsprechend meinen Vorgaben angepasst.
Leider bekomme jedoch bei der Liste einen Fehler welchen ich nicht zuordnen kann.javascript.0 2022-10-08 00:00:00.346 error at processImmediate (node:internal/timers:466:21) javascript.0 2022-10-08 00:00:00.346 error at Immediate.<anonymous> (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5909:56) javascript.0 2022-10-08 00:00:00.345 error at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:596:29) javascript.0 2022-10-08 00:00:00.345 error at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1214:38) javascript.0 2022-10-08 00:00:00.344 error at Object.<anonymous> (script.js.common.Heizung.Öl-Verbrauch:31:9) javascript.0 2022-10-08 00:00:00.340 error script.js.common.Heizung.Öl-Verbrauch: TypeError: Liste.push is not a function
TypeError: Liste.push is not a function sagt mir überhaupt nichts...
Den vorherigen Tagesverbrauch erhalte ich um 0.00 von Sourceanalytics.
"type": "state", "common": { "name": "01_previousDay", "type": "number", "role": "value", "read": true, "write": false, "unit": "l", "def": 0
Sollte doch eigentlich so funktionieren, oder wo hat sich hier etwas eingeschlichen?
-
@bloop zeig mal die Einstellungen vom Datenpunkt der Liste
-
{ "common": { "name": "Durchschnittsvortagsverbräuche", "desc": "Manuell erzeugt", "role": "state", "type": "string", "read": true, "write": true, "def": 0 },
Sollte eigentlich auch passen
-
@bloop
Mit "rolle" und "type" wie bei dir funktionierts. Allerdings erhalte ich immer noch die Warnung das der Datenpunkt eine Nummer möchte und String erhält. -
@bloop Ändere es mal so:
{ "common": { "name": "Durchschnittsvortagesverbräuche", "desc": "Manuell erzeugt", "role": "list", "type": "array", "read": true, "write": true },
Und dann in diesen Datenpunkt eine „0“ eintragen und dann das Skript starten.
-
@bloop sagte: Warnung das der Datenpunkt eine Nummer möchte und String erhält.
Du meinst umgekehrt? Du schreibst eine Zahl in "Datum_Ölstand_leer". Richtig:
-
@paul53 nein war schon richtig
Aktuell funktioniert das gesamte Skript wieder nicht. Ich teste gerade an was es liegen könnte.
Es scheint so als würde die Listenfunktion nicht ordnungsgemäß funktioniert...14:50:07.932 error javascript.0 (59155) script.js.common.Heizung.Öl-Verbrauch1: TypeError: Liste.shift is not a function 14:50:07.932 error javascript.0 (59155) at Object.<anonymous> (script.js.common.Heizung.Öl-Verbrauch1:32:9)
on({id: "0_userdata.0.test"/*test*/, change: "any"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; Liste[Liste.length - 1] = getState("0_userdata.0.test").val; Liste.shift(); setState("0_userdata.0.Heizung.Öl_Heizung.Durchschnittsvortagsverbräuche"/*Durchschnittsvortagsverbräuche*/, Liste, true); Resttage = parseFloat(getState("0_userdata.0.Heizung.Füllstand_Öltank").val) / mathMean(Liste); Enddatum = parseFloat((new Date().getTime())) + parseFloat(86400000) * Resttage; setState("0_userdata.0.Heizung.Öl_Heizung.Datum_Ölstand_leer"/*Datum_Ölstand_leer*/, formatDate(getDateObject(Enddatum), "DD.MM.YYYY"), true); });
-
@bloop
"setze für Letzte ein" ist falsch. Dann wird die Liste immer kürzer. Man muss an die Liste anfügen "füge als Letzte ein". -
@paul53
Klappt leider auch nichtjavascript.0 (59155) script.js.common.Heizung.Öl-Verbrauch: TypeError: Liste.push is not a function
// Berechnung Resttage if (getState("0_userdata.0.Heizung.Öl_Heizung.Durchschnittsvortagsverbräuche").val) { Liste = getState("0_userdata.0.Heizung.Öl_Heizung.Durchschnittsvortagsverbräuche").val; } else { Liste = listsRepeat(getState("0_userdata.0.test").val, 14); } on({id: "0_userdata.0.test"/*test*/, change: "any"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; Liste.push(getState("0_userdata.0.test").val); Liste.shift(); setState("0_userdata.0.Heizung.Öl_Heizung.Durchschnittsvortagsverbräuche"/*Durchschnittsvortagsverbräuche*/, Liste, true); Resttage = parseFloat(getState("0_userdata.0.Heizung.Füllstand_Öltank").val) / mathMean(Liste); Enddatum = parseFloat((new Date().getTime())) + parseFloat(86400000) * Resttage; setState("0_userdata.0.Heizung.Öl_Heizung.Datum_Ölstand_leer"/*Datum_Ölstand_leer*/, formatDate(getDateObject(Enddatum), "DD.MM.YYYY"), true); });
-
@bloop sagte in [Gelöst] Ölvorrat Enddatum berechnen:
Klappt leider auch nicht
Wenn sich die Liste im Datenpunkt schon verkürzt hat, muss neu initialisiert werden: Stoppe das Skript, trage 0 in den Datenpunkt "0_userdata.0.Heizung.Öl_Heizung.Durchschnittsvortagsverbräuche" ein und starte das Skript.
-
@paul53
Hat geklappt indem ich einen neuen Datenpunkt für die Durchschnittsverbräuche angelegt habe!Herzlichen Dank!