NEWS
E3DC Hauskraftwerk steuern
-
@arnod
Hast Recht, der SOC war bereits bei 80%. Ich hab ihn jetzt auf 99% gestellt. -
Tibber Skript,
Version: 1.3.1 auf Github hochgeladen.Änderungen:
- kleinere Optimierungen bei der automatischen Preisanpassung.
-
Tibber Skript,
Version: 1.3.2 auf Github hochgeladen.Änderungen:
- kleinere Fehler behoben und code aufgeräumt
-
@arnod : Hallo Arno...
Ich bekomme leider mehrmals am Tag diese Fehlermeldungen en masse (jeweils einmal pro Minute im Doppelpack):javascript.0 20:10:53.850 error script.js.E3DC-Control.Tibber-1_3_2: Fehler in Funktion bestLoadTime: Cannot read properties of undefined (reading 'total')
javascript.0 20:10:53.852 error script.js.E3DC-Control.Tibber-1_3_2: Fehler in Funktion tibberSteuerungHauskraftwerk: Cannot read properties of undefined (reading 'getTime')Der zweite scheint ein "Folgefehler" zu sein, aber der erste sieht komisch aus...
Ich glaube es liegt an der Zeile
blockPreis += entry.total;
denn dort ist der einzige Abruf von .total in der Funktion...Vielleicht in index-Fehler?
Ich konnte den Fehler quick&dirty mit
if (entry != null) blockPreis += entry.total
also einer Prüfung auf Definiertheit von entry unterdrücken und siehe da, auch der Folgefehler ist weg. Das ist aber nur Rumdoktern an den Symptomen, die Ursache für den Fehler habe ich nicht finden können, muss aber irgendwie am Preis-Array liegen... -
@modulo-n
Ja, den Fehler habe ich schon bemerkt, nur die Ursache noch nicht gefunden.
Habe bei mir bereits ein zusätzliches debug LOG eingefügt, um den Fehler einzugrenzen, aber seit dem ist er bei mir nicht mehr aufgetreten. -
@arnod
Ich hatte den Fehler gerade wieder und habe mir mal die Werte i und j sowie das Array ausgeben lassen. Das Array (siehe Anhang) hatte nur 24 Einträge (0 - 23) und somit gab es bei i=22 und j=2 erwartungsgemäß einen Indexfehler...
Die 24 Einträge sind die Einträge von heute, die von morgen fehlen (noch). Vielleicht hilft dir das bei der Fehlersuche.Gruß
Michael
Array -
Ich denke, diese Zeile ist problematisch:
for (let i = 0; i < datenTibberLink48h.length; i++) {
Da in der Prozedur ja noch j addiert wird und j nach oben durch ladezeit_h beschränkt wird, kommt es da zu Indexfehlern, wenn sich i dem Ende des Arrays nähert.
Eine Anpassung in
for (let i = 0; i < datenTibberLink48h.length - ladezeit_h; i++) {
könnte das verhindern. Und da du ohnehin nach einem Block der Länge ladezeit_h suchst, wirst du in den dann verbleibenden letzten Einträgen des Arrays ohnehin nicht mehr fündig werden...
-
@modulo-n
Absolut richtig und deine Lösung ist auch richtig, Danke.
Bis zur Version 1.3.1 war das auch so, da hatte ich aber einen anderen Fehler drin und bei der Korrektur dann anscheinend zu viel gelöscht.Vielen Dank für die Fehlersuche
-
Tibber Skript,
Version: 1.3.3 auf Github hochgeladen.Änderungen:
- Fehler in der Funktion bestLoadTime() behoben, danke an Modulo-N
- Fehler bei der Entladesperre behoben.
- kleinere Optimierungen
-
@arnod
Jetzt gibt es einen neuen Fehler beiconst diffBesteReichweiteLadezeit_h = (dateBesteReichweiteLadezeit_alt.getTime()-dateBesteReichweiteLadezeit.getTime())/ (1000 * 60 * 60) dateBesteReichweiteLadezeit_alt = dateBesteReichweiteLadezeit;
in tibberSteuerungHauskraftwerk
dataBesteReichweiteLadezeit_alt ist wohl in der ersten Zeile noch undefiniert und damit kann .getTime nicht ausgeführt werden...
Die Initiierung erfolgt in
let hoherSchwellwert = 0, niedrigerSchwellwert = 0, peakSchwellwert = 0,dateBesteReichweiteLadezeit_alt = null;
und sollte ggf. mit einem Dummy vorbelegt werden... ich kenne die Logik nicht genau, aber ich habe mal den Wert mit dem aktuellen Datum belegt und der Fehler ist weg...
let hoherSchwellwert = 0, niedrigerSchwellwert = 0, peakSchwellwert = 0 let dateBesteReichweiteLadezeit_alt = new Date();
-
@modulo-n
Du hast meinen Fehler richtig korrigiert und ich werde es so übernehmen.
Habe aber gerade noch einen Fehler in der Funktion bestLoadTime() wo ich erst die Ursache finden muss und danach lade ich eine neue Version auf Github hoch. -
Tibber Skript,
Version: 1.3.4 auf Github hochgeladen.Änderungen:
- Fehler das die Variable "dataBesteReichweiteLadezeit_alt" bei der Deklaration falsch initialisiert wurde, danke an Modulo-N.
- Async bei der Funktion bestLoadTime() entfernt.
-
Tibber Skript,
Version: 1.3.5 auf Github hochgeladen.Änderungen:
- Fehler das sich die Entladesperre immer aus und einschaltet behoben.
- Berechnung Batteriepreis optimiert.
-
@arnod
Hi Arno... macht richtig Spaß, beim Debuggen zu helfen.if (billigsteZeit) { return new Date(billigsteZeit); } else { log(`function bestLoadTime: Kein Eintrag innerhalb des angegebenen Zeitraums gefunden`, 'error'); }
Hier verbirgt sich auch noch eine kleine Falle, die mir heute Nacht das Log zugemüllt hat... Wenn keine billigsteZeit gefunden wurde, gibt die Funktion nix zurück und das erzeugt beim Aufrufer ein Problem, wenn dann <object>.getTime aufgerufen wird.
Mir fehlt allerdings eine Idee, was in diesem Fall ein sinnvoller Rückgabewert wäre, denn im gesamten Skript jeweils eine Überprüfung nachzuziehen, ob bestLoadTime() ein Date-Objekt geliefert hat, erscheint mir mühselig.
Die aktuelle Zeit zurückzugeben scheidet zumindest mal aus, weil dann das Skript ja sofort mit dem Laden beginnt.Idee (nun also doch): Vielleicht sollte man einfach ein Datum-Objekt "aus der Zukunft" liefern, also z.B. now+48h. Das hätte den Charme, dass a) ein gültiges Objekt zurückkommt, mit dem das Skript arbeiten kann ( => Lade ich halt in 48h, es sei denn, es kommt dann vielleicht zwischenzeitlich was Günstigeres...) und b) das Laden tatsächlich unterbleibt, bis bestLoadTime() dann wirklich was Passendes in den "neuen" Tibberdaten findet.
Mein Vorschlag:
if (billigsteZeit) { return new Date(billigsteZeit); } else { log(`function bestLoadTime: Kein Eintrag innerhalb des angegebenen Zeitraums gefunden`, 'error'); return new Date(new Date().getTime() + 48 * 60 * 60 * 1000); }
-
@modulo-n
Das ist merkwürdig, eigentlich müsste immer ein "billigsteZeit" gefunden werden, außer es gibt keine Tibber Preisdaten.
Hast du die neuste Version ohne async-Funktion bestLoadTime() ?
Diesen Fehler hatte ich gestern auch und konnte aber nicht herausfinden warum.
Wenn ich eine LOG Zeile vor "if (billigsteZeit)" einfüge, dann enthält die Variable "billigsteZeit" = null
Wenn ich dann aber in der for-Schleife die Variable "billigsteZeit" über einen log Eintrag zusätzlich abfrage, enthält diese ein Datum und alles funktioniert.Das muss ich mir heute wenn ich daheim bin noch einmal ansehen.
-
@arnod
Ich kann es mir auch nur so erklären, dass entweder keine Tibberdaten da waren... oder kein Block gefunden wurde.
Da der billigste Blockpreis ja auf infinity gesetzt ist rutscht das Skript ja automatisch in die Zuweisung einer billigsten Zeit, sobald überhaupt ein Blockpreis ermittelt werden konnte, denn egal wie hoch dieser ist, er ist < infinity und damit wird auch billigsteZeit vorbesetzt.
Komisch das Ganze... -
Tibber Skript,
Version: 1.3.6 auf Github hochgeladen.Änderungen:
- Neue Hysterese-Schwelle Reichweite_h von ±30 Minuten, damit geringen Schwankungen der Batterie Reichweite, nicht zu einem häufigen Wechsel zwischen Ladefreigabe true und false führen.
- Funktion bestLoadTime() Überprüfung array datenTibberLink48h und neue Log Ausgabe um eventuell den Fehler weiter einzugrenzen.
@modulo-n
Ich habe jetzt mehrere Versuche durchgeführt und kann den Fehler bei mir nicht mehr reproduzieren.
Kannst du mal die neue Version bei dir testen. -
@arnod
Ich bekomme gleich beim Start den Fehler:function pruefePVLeistung(): reichweiteStunden ist keine gültige Zahl
Jetzt etwas später erhalte ich folgendes:
javascript.0 00:03:00.062 error script.js.E3DC_ChargeControl.Tibber: function pruefePVLeistung(): reichweiteStunden ist keine gültige Zahl javascript.0 00:03:00.149 error script.js.E3DC_ChargeControl.Tibber: Fehler in Funktion bestLoadTime: Cannot read properties of undefined (reading 'startsAt') javascript.0 00:03:00.150 error script.js.E3DC_ChargeControl.Tibber: Fehler in Funktion tibberSteuerungHauskraftwerk: Cannot read properties of undefined (reading 'getTime') javascript.0 00:04:00.103 error script.js.E3DC_ChargeControl.Tibber: function pruefePVLeistung(): reichweiteStunden ist keine gültige Zahl javascript.0 00:04:00.107 error script.js.E3DC_ChargeControl.Tibber: Fehler in Funktion bestLoadTime: Cannot read properties of undefined (reading 'startsAt') javascript.0 00:04:00.108 error script.js.E3DC_ChargeControl.Tibber: Fehler in Funktion tibberSteuerungHauskraftwerk: Cannot read properties of undefined (reading 'getTime')
Ich geh erst einmal wieder auf die letzte Version.
Nachtrag -> Mit der alten Version erhalte ich den Fehler auch.
-
@psrelax
Was für ein Wert ist bei0_userdata.0.Charge_Control.Allgemein.Autonomiezeit
eingetragen? -
@arnod
Jetzt ist natürlich wieder alles in Ordnung
Hier die Log zum Zeitpunkt des Fehlers:2024-11-26 00:01:00.160 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ******************* Debug LOG Tibber Skript Version 1.3.6 ******************* 2024-11-26 00:02:00.145 - [31merror[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: function pruefePVLeistung(): reichweiteStunden ist keine gültige Zahl 2024-11-26 00:02:00.237 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ************************************************************************************ 2024-11-26 00:02:00.237 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** timerIds = 2024-11-26 00:02:00.237 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** timerTarget = [] 2024-11-26 00:02:00.237 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** timerState = [] 2024-11-26 00:02:00.237 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** timerObjektID = [] 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** minStrompreis_48h = 0.1839 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** batterieKapazitaet_kWh = 15 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** Batterie_SOC = 11 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** Power_Bat_W = 0 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** Power_Grid = 2111 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** prognoseLadezeitBatterie = 2 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** reichweiteBatterie = 0:10 h / 0:10 h 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** batteriepreisAktiv = true 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** strompreisBatterie = 0.244 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** bruttoPreisBatterie = 0.2773 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** Aktueller Preis Tibber = null 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** naechstePhasen[1].endLocale = undefined 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** naechstePhasen[1].startLocale = undefined 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** naechstePhasen[1].Type = undefined 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** naechstePhasen[0].endLocale = undefined 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** naechstePhasen[0].startLocale = undefined 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** naechstePhasen[0].Type = undefined 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** aktivePhase.endLocale = 27.11.2024, 00:00:00 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** aktivePhase.startLocale = 25.11.2024, 14:00:00 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** aktivePhase.Type = peak 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** Schwellwert Spitzenstrompreis = 0.2614 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** Schwellwert hoher Strompreis = 0.23 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** Schwellwert niedriger Strompreis = 0.1057 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** schneeBedeckt = false 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** Prognose PV-Leistung heute = 14.111999999999998 kWh 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** Prognose PV-Leistung morgen = 13.4505 kWh 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** pvLeistungAusreichend = false 2024-11-26 00:02:00.238 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** eAutoLaden = false 2024-11-26 00:02:00.239 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** BatterieEntladenSperren = true 2024-11-26 00:02:00.239 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** battSperrePrio = false 2024-11-26 00:02:00.239 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** BatterieLaden = false 2024-11-26 00:02:00.239 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** Status = Aktuell Strompreis zu hoch, es wird nicht geladen (aktive Phase: peak) 2024-11-26 00:02:00.239 - [33mwarn[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ** ProgrammAblauf = 27,1,18,19,22,32,19,10,30, 2024-11-26 00:02:00.239 - [32minfo[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: ******************* Debug LOG Tibber Skript Version 1.3.6 ******************* 2024-11-26 00:02:18.814 - [33mwarn[39m: javascript.0 (250) script.js.Tibber.Preis_Alexa_Abfrage_Erzeugung: ladescript2 2024-11-26 00:03:00.062 - [31merror[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: function pruefePVLeistung(): reichweiteStunden ist keine gültige Zahl 2024-11-26 00:03:00.106 - [33mwarn[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Charge_Control: -==== Tibber output signal BatterieEntladesperre wurde in false geändert ====- 2024-11-26 00:03:00.149 - [31merror[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: Fehler in Funktion bestLoadTime: Cannot read properties of undefined (reading 'startsAt') 2024-11-26 00:03:00.150 - [31merror[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: Fehler in Funktion tibberSteuerungHauskraftwerk: Cannot read properties of undefined (reading 'getTime') 2024-11-26 00:04:00.103 - [31merror[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: function pruefePVLeistung(): reichweiteStunden ist keine gültige Zahl 2024-11-26 00:04:00.107 - [31merror[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: Fehler in Funktion bestLoadTime: Cannot read properties of undefined (reading 'startsAt') 2024-11-26 00:04:00.108 - [31merror[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: Fehler in Funktion tibberSteuerungHauskraftwerk: Cannot read properties of undefined (reading 'getTime') 2024-11-26 00:05:00.105 - [31merror[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: function pruefePVLeistung(): reichweiteStunden ist keine gültige Zahl 2024-11-26 00:05:00.148 - [31merror[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: Fehler in Funktion bestLoadTime: Cannot read properties of undefined (reading 'startsAt') 2024-11-26 00:05:00.149 - [31merror[39m: javascript.0 (250) script.js.E3DC_ChargeControl.Tibber: Fehler in Funktion tibberSteuerungHauskraftwerk: Cannot read properties of undefined (reading 'getTime') 2024-11-26 00:05:39.232 - [32minfo[39m: javascript.0 (250) Stopping script script.js.E3DC_ChargeControl.Tibber
Das müsste das selbe sein, wie "reichweiteBatterie" und da ist etwas eingetragen.
Unter "Autonomiezeit" ist jetzt natürlich auch etwas eingetragen.Ich könnte es heute Nacht um 00:00 Uhr noch einmal prüfen, wie letzte Nacht auch.