MatzeTF Posted November 6, 2023 at 10:07 AM Share Posted November 6, 2023 at 10:07 AM On 11/5/2023 at 8:55 PM, mattsches said: Hast du dir dein Log mal angeschaut? Darin wimmelt es nur so vor Fehlern zu Wifi und MQTT. Und um 12:35:03,500 haut es die Kiste zusammen mit einer Exception. Kannst du die .elf-Datei von deinem Release auch bereitstellen? Dann kann man sich die Exception mal ansehen. On 11/5/2023 at 8:55 PM, mattsches said: MQTT: Recv buf is 2048 bytes. meter/all_values_update requires 1786. Maybe bump MQTT_RECV_BUFFER_SIZE? Das ist unproblematisch und bei WARP1-Firmware normal. Wegen zu wenig Speicher können wir MQTT nicht mehr als die knapp bemessenen 2k geben. On 11/5/2023 at 8:55 PM, mattsches said: Ich tippe eher auf einen Speicherengpass. 2023-11-05 12:34:00,581 JSON doc overflow while converting to string! Doc capacity is zero but needed 6784. Mit deiner Vermutung liegst du wahrscheinlich genau richtig. Die Fehlermeldung bedeutet, dass kein Speicher zur Verfügung steht, um eine Config-Struktur in einen String umzuwandeln. 6784 Bytes ist aber auch echt viel. Ich weiß spontan nicht, welcher unserer Configs so riesig sein soll. Hast du zufällig in einem deiner Module eine große Config angelegt? Möglicherweise mit einem ConfArray drin, dessen maximale Anzahl von Elementen sehr groß ist, selbst wenn die in der Praxis gar nicht alle genutzt werden? Quote Link to comment Share on other sites More sharing options...
ThomKa Posted November 6, 2023 at 11:18 AM Share Posted November 6, 2023 at 11:18 AM (edited) Vorgelagertes Skript zur Ladesteuerung: @deepflyer911 Anbei folgende Informationen zum Nachvollziehen: Beim Script WARP_Ladezentrale handelt es sich um das zentrale Script, hinter dem obigen Screenshot. Dieses erteilt/entzieht die Ladefreigabe und prüft dabei, ob ein BEV an-/abgestöpselt wurde oder ist, ob der gewünschte SoC_Ziel erreicht wurde, und ob sich zwischendurch Vorgabewerte geändert haben. Im Script läuft ein zentrales Intervall, welches die Prüfungen wiederkehrend ausführt. Für den Fall, dass kein BEV angestöpselt ist oder der SoC_Ziel erreicht ist, wird die Intervalldauer verlängert, um den RaspberryPI nicht unnötig zu belasten. Im Fall eines Ladevorgangs erfolgt die Überprüfung dann wieder mit kürzerer Intervalldauer. Das Script vergibt über den Datenpunkt 0_userdata.0.Warp.Ladevorgang.LV_Status die Ladefreigabe "LV_starten" oder entzieht diese "LV_stoppen". Der Datenpunkt wird von den nachgelagerten Scripts ausgelesen. Die eigentliche Ansteuerung der WARP übernehmen dann die nachfolgenden Skripte. Angefügt findest Du dann noch die dazugehörigen Datenpunkte, alle unter dem Pfad 0_userdata.0.Warp.... Kann sein, dass da auch ungenutzte DPs drin sind. Da habe ich noch nicht komplett aufgeräumt 😉 Im nächsten Post stelle ich Dir das Script zum "EPEX laden" und zum "adhoc laden" bereit. Diese starten dann nachranging und abhängig vom DP 0_userdata.0.Warp.Ladevorgang.LV_Status. PS: Zum Nachvollziehen des Ablaufs einfach mal die ganzen DEBUGs aktivieren. Dann zeigt sich Ablauf und Abhängigkeiten ganz schnell. 2023-11-06_WARP_Ladezentrale_Datenpunkte.json 2023-11-06_WARP_Ladezentrale.json Edited November 6, 2023 at 11:36 AM by ThomKa DEBUG-Hinweis und Überschrift ergänzt 1 Quote Link to comment Share on other sites More sharing options...
ThomKa Posted November 6, 2023 at 11:37 AM Share Posted November 6, 2023 at 11:37 AM Ladeskript für adhoc oder FAST laden: Damit Du die Einbindung/Abhängigkeit des vorgeschalteten Scripts "WARP Ladezentrale" mit den beiden Ladefreigaben "LV_starten" / "LV_stoppen" besser einschätzen kannst, findest Du angefügt das sehr kurze Skript zum "adhoc" oder "FAST" laden. Dieses und die anderen "nachgelagerten" Skripte steuern eigentlich nur die Höhe der verfügbaren Ladeleistung "available charging Power" (acP) zwischen "0" bis 0_userdata.0.Warp.BEV.BEV_cP_max. Die Überwachung/Festlegung des Lade-Beginns/Endes erfolgt vorgelagerten Script. 2023-11-06_WARP_adhoc_FAST_laden.json 1 Quote Link to comment Share on other sites More sharing options...
ThomKa Posted November 6, 2023 at 12:19 PM Share Posted November 6, 2023 at 12:19 PM Ladeskript für "EPEX laden": zuerst benötigst Du die EPEX Preisdaten von heute und morgen, die ich mir jeweils gegen 13:30 über TIBBER abhole. Diese liegen dann im Format vor, wie angefügt. Die Preise liegen bei mir in den DPs 0_userdata.0.Tibber.Stundenpreise_heute und 0_userdata.0.Tibber.Stundenpreise_morgen Danach arbeitet das Skript "EPEX Laden" wie folgt: es wird direkt auf Änderungen der Vorgabewerte geprüft/reagiert es wird direkt auf Änderungen der Ladefreigabe geprüft/reagiert mit jeder Änderung der Vorgabewerte oder Ladefreigabe erfolgt ein Abbruch eines laufenden Ladevorgangs, eine neue Kalkulation eines neuen Ladevorgangs und der Start eines neuen Ladevorgangs FKT2 ist die zentrale Funktion und ruft die weiteren FKTs 3-5 auf. Alle zusammen kalkulieren den Ladevorgang anhand der benötigten Energiemenge und der günstigsten EPEXpreise. FKT6 prüft, ob die aktuelle Stunde eine der günstigen EPEXstunden ist und übermittelt dann 0_userdata.0.Warp.BEV.BEV_cP_max an WARP. Ist es keine günstige Stunden wird "0" an WARP übergeben. Wenn es seitens des vorgelagerten Skripts "WARP_Ladezentrale" zum Ladestatus "LV_stoppen" kommt, wird auch im Skript "EPEX laden" alles gestoppt und das Skript belastet den Raspi nicht weiter. Eine ausführlichere Beschreibung der DPs findest Du im ioB-Forum unter https://forum.iobroker.net/topic/68266/bev-mit-epex-börsen-strom-laden. Aber bitte nur den Abschnitt "2. Datenpunkte" betrachten. Die anderen Ausführungen passen nicht mehr zu angefügten Skript. Damit hast Du alle Informationen und meinen aktuellen Stand. Die PV-Überschuss-Ansteuerung habe ich noch nicht auf das vorgelagerte Skript "WARP_Ladezentrale" umgeschrieben, also noch nicht drunter gehängt. Deshalb ist es hier nicht weiter erwähnt. Alles weitere wie immer gerne auf Rückfrage 🫡 2023-11-06_TIBBERpreise_today.json 2023-11-06_TIBBERpreise_tomorrow.json 2023-11-06_WARP_EPEX_laden.json 1 Quote Link to comment Share on other sites More sharing options...
deepflyer911 Posted November 6, 2023 at 06:46 PM Share Posted November 6, 2023 at 06:46 PM danke dir @ThomKa jetzt habe ich Lesestoff :D Quote Link to comment Share on other sites More sharing options...
mattsches Posted November 6, 2023 at 07:22 PM Author Share Posted November 6, 2023 at 07:22 PM Am 6.11.2023 um 11:07 schrieb MatzeTF: Kannst du die .elf-Datei von deinem Release auch bereitstellen? Dann kann man sich die Exception mal ansehen. @MatzeTF: Das .elf habe ich angehängt. Die Config-Daten von meinen Modulen sind m. E. unauffällig: phase_switcher, soc. Bei mir läuft die Firmware ohne Exception, allerdings auch ohne MQTT (ich nutze die HTTP API). ConfArrays nutze ich nicht. @deepflyer911: Hast du denn testweise mal die Version ohne SOC-Modul probiert? In meiner Firmware ist das Debug-Modul von TF aktiv. Wie schaut es denn dort mit dem freien DRAM-Speicher aus, vor allem dem größten freien Heap-Block? warp_firmware_2_1_5_6547f5d6.zip warp_firmware_2_1_5_6547f5d6_merged.bin Quote Link to comment Share on other sites More sharing options...
deepflyer911 Posted November 6, 2023 at 08:49 PM Share Posted November 6, 2023 at 08:49 PM @mattsches mit der originalen Version zeigt es mir rund 42k bis 44k freie Heap-Byte an. Größter Block 38-44k mit der Version ohne SOC rund 50 bis 52 freie Byte und 47-51 größter Block Quote Link to comment Share on other sites More sharing options...
mattsches Posted November 6, 2023 at 09:14 PM Author Share Posted November 6, 2023 at 09:14 PM Und kommt es mit der Version ohne SOC-Modul auch zu den Abbrüchen? Quote Link to comment Share on other sites More sharing options...
MatzeTF Posted November 7, 2023 at 10:11 AM Share Posted November 7, 2023 at 10:11 AM On 11/6/2023 at 8:22 PM, mattsches said: @MatzeTF: Das .elf habe ich angehängt. Danke, aber ich hätte die .elf-Datei von deinem Release hier gebraucht, also die Datei mit Timestamp 6545e427. Quote Link to comment Share on other sites More sharing options...
mattsches Posted November 7, 2023 at 07:56 PM Author Share Posted November 7, 2023 at 07:56 PM Am 7.11.2023 um 11:11 schrieb MatzeTF: Danke, aber ich hätte die .elf-Datei von deinem Release hier gebraucht, also die Datei mit Timestamp 6545e427. @MatzeTF Die .elf habe ich nicht mehr. Aber der Stand in meinem Post oben ist derselbe Commit, nur neu gebaut. Nach meinem Dafürhalten damit binär identisch zum Release auf github. Quote Link to comment Share on other sites More sharing options...
deepflyer911 Posted November 7, 2023 at 08:40 PM Share Posted November 7, 2023 at 08:40 PM Am 6.11.2023 um 22:14 schrieb mattsches: Und kommt es mit der Version ohne SOC-Modul auch zu den Abbrüchen? Bislang ohne Probleme. Quote Link to comment Share on other sites More sharing options...
MatzeTF Posted November 8, 2023 at 10:34 AM Share Posted November 8, 2023 at 10:34 AM @deepflyer911 Ich habe mir gerade dein Log von Sonntag angesehen und es sieht so aus, als wäre deine Box im SoC-Modul wegen zu wenig freiem Speicher abgestürzt. MQTT verbraucht recht viel Speicher, von daher wundert mich das nicht. Die gute Nachricht ist: Für neue Features für WARP2 und den WEM reduzieren wir gerade den Speicherverbrauch verschiedener Module. Davon wird auch die WARP1 profitieren und Abstürze wegen zu wenig freiem Speicher sollten dann seltener auftreten. Quote Link to comment Share on other sites More sharing options...
deepflyer911 Posted November 8, 2023 at 04:02 PM Share Posted November 8, 2023 at 04:02 PM Am 8.11.2023 um 11:34 schrieb MatzeTF: @deepflyer911 Ich habe mir gerade dein Log von Sonntag angesehen und es sieht so aus, als wäre deine Box im SoC-Modul wegen zu wenig freiem Speicher abgestürzt. MQTT verbraucht recht viel Speicher, von daher wundert mich das nicht. Die gute Nachricht ist: Für neue Features für WARP2 und den WEM reduzieren wir gerade den Speicherverbrauch verschiedener Module. Davon wird auch die WARP1 profitieren und Abstürze wegen zu wenig freiem Speicher sollten dann seltener auftreten. Dann ist die Variante von @mattsches ohne SOC Modul ja genau die richtige Option 😁 Quote Link to comment Share on other sites More sharing options...
mattsches Posted November 11, 2023 at 02:25 PM Author Share Posted November 11, 2023 at 02:25 PM Ich habe eine neue Version gebaut. Basis ist weiterhin das offizielle 2.1.5 Release. Wesentlicher Fix ist das Schnell-/Spontanladen, das nun auch wieder über den Drucktaster funktioniert. In der Version ist das SOC-Modul drin. Ich habe aber den Speicherverbrauch um ca. 8 kB reduzieren können, wenn die Ladestandsabfrage deaktiviert ist. Bzgl. größtem freien Heap-Block hat sich diese Version bei mir genauso verhalten wie ganz ohne SOC-Modul. @deepflyer911, probier' mal aus, ob die Version bei dir tut. Wenn weiterhin nicht, dann baue ich dir gerne wieder eine Variante ohne SOC-Modul. Zum Download geht es hier lang: https://github.com/mattsches1/esp32-firmware/releases/tag/phase_switcher-2.1.5.1 Quote Link to comment Share on other sites More sharing options...
deepflyer911 Posted November 11, 2023 at 03:33 PM Share Posted November 11, 2023 at 03:33 PM Hab die neuste Variante insatlliert. Zunächst mal ohne Probleme. Im Debug ist zu erkennen, dass sich die freien Bytes stabil über 50k bewegen. Der größte Block ist wieder bei 38-43k. Werde es weiter beobachten und berichten. Quote Link to comment Share on other sites More sharing options...
mattsches Posted November 11, 2023 at 09:41 PM Author Share Posted November 11, 2023 at 09:41 PM Ich hatte übrigens während meiner Versuche den Eindruck, dass ein weiterer Neustart nach dem Einspielen der Firmware eine Verbesserung bzgl. größtem freien Block brachte. Das kann aber auch Einbildung gewesen sein. Quote Link to comment Share on other sites More sharing options...
MatzeTF Posted November 13, 2023 at 12:15 PM Share Posted November 13, 2023 at 12:15 PM On 11/11/2023 at 10:41 PM, mattsches said: Ich hatte übrigens während meiner Versuche den Eindruck, dass ein weiterer Neustart nach dem Einspielen der Firmware eine Verbesserung bzgl. größtem freien Block brachte. Das kann aber auch Einbildung gewesen sein. Die Verteilung von belegten Blöcken im Speicher ist teilweise nichtdeterministisch. Es kann passieren, dass ein belegter Block weit „hinten“ liegt und dementsprechend der größte freie Block, der typischerweise am Ende des Speichers liegt, entsprechend kleiner ist. Du kannst beliebig oft neu starten, bis du zufällig eine gute Verteilung triffst. 😉 Üblicherweise ist der größte freie Speicherblock nicht so wichtig, da z.B. bei deepflyer911s letztem Crash viele Blöcke mittlerer Größe gleichzeitig für vsprintf angefordert wurden. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.