NEWS
E3DC Hauskraftwerk steuern
-
Ich habe hier ein Denkfehler. Die Situation, dass es noch keinen gespeicherten Durchschnittsverbrauch gibt (beim ersten Start vom Skript für die erste Woche) und dass auch keine Entladeleistung vorhanden ist (z.B. weil die Batterie gerade geladen wird) kann natürlich öfter vorkommen. Das darf dann nicht in einem Fehler enden. Ich muss mir, das genauer anschauen, was es für Auswirkungen hätte, wenn dann die Reichweite der Batterie 0 h beträgt. Eventuell nehme ich in so einer Situation einen festen Wert "Basisverbrauch", der in den User_Anpassungen eingetragen werden kann.
-
Könnt ihr bitte diese Änderung mal testen. Die Zeile "await calculateBatteryRange(0);" beim listener[18] ab Zeile 2653 im Code mit //auskommentieren. Eine Aktualisierung der Reichweite bei SOC Änderung mit 0W macht da keinen Sinn und ich denke das daher der Fehler auch kommt.
Der Abschnitt sollte dann so aussehen:// Batterie Kapazität in kWh berechnen wenn sich der SOC in % ändert listeners[18] = on({id: sID_Batterie_SOC, change: "ne"}, async function (obj) { let BatSoc = obj.state.val; await setStateAsync(sID_BatSoc_kWh,Math.round((Speichergroesse_kWh*(Systemwirkungsgrad_Pro/100) * BatSoc))/100,true); //await calculateBatteryRange(0); }); -
@ArnoD
Korrektur zu meiner vorherigen Aussage.
Die Fehlermeldung hat heute wieder begonnen.
Ich habe allerdings die eine von dir genannte Zeile auskommentiert gelassen aber anscheinend ohne Erfolg.@psrelax
Wenn die Zeile auskommentiert ist, dann wird die Funktion nur noch aufgerufen, wenn die Objekt IDe3dc-rscp.0.EMS.POWER_BATsich ändert und der Wert <0 ist, also negativ und somit, nur wenn die Batterie entladen wird.Mir fehlt gerade die Fantasie, wie dieser Fehler dann noch auftreten kann.
Kannst du bei dir zum Testen mal diese beiden LOG Zeilen in der Funktion calculateBatteryRange() Zeile 2131 einfügen:
log(currentConsumptionW1 = ${currentConsumptionW},'warn')
log(currentConsumptionW2 = ${currentConsumptionW},'warn')Das würde dann so aussehen:
// Funktion zur Berechnung der Reichweite basierend auf dem aktuellen Verbrauch oder dem Durchschnittsverbrauch async function calculateBatteryRange(currentConsumptionW) { // Setze currentConsumptionW auf 0, wenn es null, undefined oder kleiner als 0 is log(`currentConsumptionW1 = ${currentConsumptionW}`,'warn') currentConsumptionW = (currentConsumptionW == null || currentConsumptionW >= 0) ? 0 : currentConsumptionW; log(`currentConsumptionW2 = ${currentConsumptionW}`,'warn') const akt_Autonomiezeit = (await getState(sID_Autonomiezeit)).val if (!homeAverage) { console.error('Keine Daten im homeAverage vorhanden.'); return; }Eigentlich kann es nur noch passieren, wenn der Wert
e3dc-rscp.0.EMS.POWER_BATnull oder undefined ist. -
@ArnoD
currentConsumptionW1 und currentConsumptionW2 gibt es nicht. Muss die Variable nicht vorher definiert werden?
Wird auf jeden Fall nicht kompiliert.Edit1: Es ist oben bei dir falsch drin gestanden. jetzt funktioniert es.
Edit2: Hier das Ergebnis der Ausgabe:

-
@ArnoD
currentConsumptionW1 und currentConsumptionW2 gibt es nicht. Muss die Variable nicht vorher definiert werden?
Wird auf jeden Fall nicht kompiliert.Edit1: Es ist oben bei dir falsch drin gestanden. jetzt funktioniert es.
Edit2: Hier das Ergebnis der Ausgabe:

@psrelax
Hätte jetzt was anderes erwartet.
Kannst du bitte noch weiter unten ab Zeile 2175 diesen LOG Eintrag "log(`consumption = ${JSON.stringify(consumption)}`,'warn');" hinzufügen:
Bitte die LOG Zeile aus dem Codefeld kopieren und bei dir einfügen.const consumption = { currentDayNightW: homeAverage[currentDay]?.['night'] ?? currentConsumptionW ?? 0, nextDayDayW: homeAverage[nextDayString]?.['day'] ?? currentConsumptionW ?? 0, nextDayNightW: homeAverage[nextDayString]?.['night'] ?? currentConsumptionW ?? 0, currentDayDayW: homeAverage[currentDay]?.['day'] ?? currentConsumptionW ?? 0, lastDayNightW: homeAverage[lastDayString]?.['night'] ?? currentConsumptionW ?? 0 }; log(`consumption = ${JSON.stringify(consumption)}`,'warn'); // Prüfen, ob einer der Werte 0 ist und die Funktion beenden if (Object.values(consumption).some(value => value === 0)) { console.error('Verbrauchswert ist 0. Die Reichweite kann nicht berechnet werden.'); return; }Welche Javascript und Node.js Version hast du ?
-
Hier bitte die Ausgabe (mehr Fehler wurden nicht produziert):

Ich habe..
Nodejs 20.19.1
Javascript Controller 7.0.7
Javascript Adapter 8.9.2 -
Hier bitte die Ausgabe (mehr Fehler wurden nicht produziert):

Ich habe..
Nodejs 20.19.1
Javascript Controller 7.0.7
Javascript Adapter 8.9.2@psrelax
Ich muss mir das später noch mal genauer ansehen.Kannst du mal diesen Teil:
const consumption = { currentDayNightW: homeAverage[currentDay]?.['night'] ?? currentConsumptionW ?? 0, nextDayDayW: homeAverage[nextDayString]?.['day'] ?? currentConsumptionW ?? 0, nextDayNightW: homeAverage[nextDayString]?.['night'] ?? currentConsumptionW ?? 0, currentDayDayW: homeAverage[currentDay]?.['day'] ?? currentConsumptionW ?? 0, lastDayNightW: homeAverage[lastDayString]?.['night'] ?? currentConsumptionW ?? 0 };Durch diesen Code ersetzen:
const consumption = { currentDayNightW: (homeAverage[currentDay]?.['night'] === 0 || homeAverage[currentDay]?.['night'] == null) ? currentConsumptionW ?? 0 : homeAverage[currentDay]?.['night'], nextDayDayW: (homeAverage[nextDayString]?.['day'] === 0 || homeAverage[nextDayString]?.['day'] == null) ? currentConsumptionW ?? 0 : homeAverage[nextDayString]?.['day'], nextDayNightW: (homeAverage[nextDayString]?.['night'] === 0 || homeAverage[nextDayString]?.['night'] == null) ? currentConsumptionW ?? 0 : homeAverage[nextDayString]?.['night'], currentDayDayW: (homeAverage[currentDay]?.['day'] === 0 || homeAverage[currentDay]?.['day'] == null) ? currentConsumptionW ?? 0 : homeAverage[currentDay]?.['day'], lastDayNightW: (homeAverage[lastDayString]?.['night'] === 0 || homeAverage[lastDayString]?.['night'] == null) ? currentConsumptionW ?? 0 : homeAverage[lastDayString]?.['night'] };damit sollte es dann funktionieren.
-
@Thomas-Braun sagte in E3DC Hauskraftwerk steuern:
Losgelöst vom Problem:
Updaten.Danke für den Tipp.
Sollte aber ohne ein Update auch funktionieren, meine ich. -
@Thomas-Braun sagte in E3DC Hauskraftwerk steuern:
Losgelöst vom Problem:
Updaten.Danke für den Tipp.
Sollte aber ohne ein Update auch funktionieren, meine ich.@psrelax sagte in E3DC Hauskraftwerk steuern:
Sollte aber ohne ein Update auch funktionieren, meine ich.
nodejs 20 ist auf der Palliativ-Station. Update es jetzt, solange das noch gepflegt wird.
Warum scheut ihr eigentlich immer wie der Teufel das Weihwasser updates auf die aktuell vorgesehene, empfohlene und noch halbwegs gepflegte Version? -
Man tut sich hald nicht so leicht sich zu entscheiden, ein Update durchzuführen, wenn man nur ein Produktivsystem besitzt :-)
Ich habe jetzt die neueste IOBroker Version V11 inkl. NodeJS
@ArnoD
Ich habe die Änderungen wieder rückgängig gemacht und beobachte, ob die Fehlermeldung noch auftritt. -
Man tut sich hald nicht so leicht sich zu entscheiden, ein Update durchzuführen, wenn man nur ein Produktivsystem besitzt :-)
Ich habe jetzt die neueste IOBroker Version V11 inkl. NodeJS
@ArnoD
Ich habe die Änderungen wieder rückgängig gemacht und beobachte, ob die Fehlermeldung noch auftritt.@psrelax sagte in E3DC Hauskraftwerk steuern:
Man tut sich hald nicht so leicht sich zu entscheiden, ein Update durchzuführen, wenn man nur ein Produktivsystem besitzt :-)
Naja, andersherum: GERADE das einzige System musste ja dann auch am leben halten. Per Updates...
IOBroker Version V11
??? Was soll das sein?
-
@psrelax sagte in E3DC Hauskraftwerk steuern:
Man tut sich hald nicht so leicht sich zu entscheiden, ein Update durchzuführen, wenn man nur ein Produktivsystem besitzt :-)
Naja, andersherum: GERADE das einzige System musste ja dann auch am leben halten. Per Updates...
IOBroker Version V11
??? Was soll das sein?
@Thomas-Braun sagte in E3DC Hauskraftwerk steuern:
??? Was soll das sein?
Das Docker Image
buanet/iobroker:latest-v11 -
@Thomas-Braun sagte in E3DC Hauskraftwerk steuern:
??? Was soll das sein?
Das Docker Image
buanet/iobroker:latest-v11Okay, das ist die Version des Containers, nicht vom ioBroker.
Da sind wir bei js-controller 7.x.y
