lumapu / ahoy

Various tools, examples, and documentation for communicating with Hoymiles microinverters
https://ahoydtu.de
Other
952 stars 224 forks source link

[Bug] 0.7.7 MQTT sendet 0 bei YieldDay und YieldTotal ähnlich #927 #1016

Closed MiniOh closed 1 year ago

MiniOh commented 1 year ago

Hardware

5x HM-1500 + 2x HMS-2000 NRF + CMT

In Bezug auf #927:

Bei der 0.6.10 war es bei mir (5xHM + 2xHMS) so, dass Tagsüber immer alles richtig übermittelt wurde, sowohl in der GUI, als auch per MQTT. Lediglich abends gab es das "Problem", dass beim Offline gehen der HMS, die YieldDay kleiner wurde, also um die Werte des einen oder beider HMS. Allerdings nicht jeden Abend. Bewölkung kann ich eigentlich ausschließen.

Bei der 0.7.7 sehen bei mir die Werte tagsüber aber deutlich schlechter aus. Hier werden hin und wieder Zeros per MQTT übertragen. Gestern sehr viele, heute bisher nur einer. Dennoch kam das bei der 0.6.10 nie vor.

Anbei die AC Total Werte mit der 0.7.7:

Gestern: grafik

Heute: grafik

knickohr commented 1 year ago

Nur die HMS machen das ? Sendest Du PowerLimits ?

MiniOh commented 1 year ago

Das Verhalten mit der 0.6.10 hatte ich nur bei den HMS beobachtet, ja. Nein, keine Powerlimits.

Die 0.7.8 sendet bei mir noch mehr Zeros, soagr alle paar Sekunden. Alle 7 Inverter sind in der GUI online, alle 7 produzieren. In der GUI sehen auch die AC und Total Werte korrekt aus.

Per MQTT werden aber Zeros übertragen:

grafik

MiniOh commented 1 year ago

OK, ich glaube ich kann es noch etwas näher einschränken. Ich denke, immer wenn ein Inverter den Status ändert, wird eine 0 perMQTT gesendet.

Also z.B. nach dem Reboot der DTU sind alle Inverter auf "is not yet available" In dem Zustand werden nur 0 Werte übermittelt (Was auch nicht so schön ist, so sieht man jeden Reboot in den aufgezeichneten Werten)

Wechselt dann ein Inverter auf "is available but no data was received until now" dann sieht man schon mal den Wert des einen Inverters, kommt ein weiterer online, wird wieder eine 0 gesendet. Dies scheint auch zu passieren, wenn sich der Status von "is available but no data was received until now" zu "is available and is producing" ändert. Und offenbar auch von "is available and is not producing" zu "is available and is producing"

So sieht bei mir ein DTU Reboot bzgl. den MQTT Werten aus:

grafik

lumapu commented 1 year ago

danke für das analysieren, ich habe genau an dieser Stelle für die 0.7.7 ein paar Zeilen auskommentieren müssen. Ich habe gehofft, dass das eine alte 'Leiche' aus Urzeiten war, dem scheint nicht so. Evtl. muss ich für jeden Inverter zusätzliche Stati einführen, um zu wissen aus welcher 'Richtung' er kommt, von 'aus' oder vom Zustand 'an'.

lumapu commented 1 year ago

habe heute mal meine Datenbank durchgeschaut, kann aber genau dieses Problem nicht feststellen. Bei mir gibt es keine 0-Werte tagsüber.

MiniOh commented 1 year ago

@lumapu Danke für deine Rückmeldung. Ich nehme an, du hattest aber auch keine Statuswechsel der Inverter Tagsüber, oder?

Wie sehen denn bei dir die per MQTT übermittelten Werte bei einem DTU Neustart aus? Hier gibts es ja auf jeden Fall Status Wechsel.

Olli

lumapu commented 1 year ago

probiere ich aus und berichte. Korrekt ich hatte keine Statuswechsel.

lumapu commented 1 year ago

hab's jetzt durch einen DTU Neustart auch provozieren können

grafik

lumapu commented 1 year ago

@MiniOh könntest du folgende Firmware testen? Falls sie besteht würde ich sie in dev übernehmen 😀

pre_fix-1016_0.7.12.zip

knickohr commented 1 year ago

0.7.12 😅

MiniOh commented 1 year ago

Hallo,

vielen Dank. Auf den ersten Blick sieht das super aus.

So sieht der Reboot bei der 0.7.12 aus.

grafik

Was ich mal noch weiter beobachte ist der Yield Day Wert abends beim offline gehn der Inverter. Mal sehen wie sich das verhält. Da waren aber ja bisher nur die HMS betroffen.

MiniOh commented 1 year ago

Guten Morgen,

wenn ich es richtig sehe, passt jetzt die "Yield Day" nicht mehr beim Offline gehn. Der MQTT Wert, der übermittelt wird nimmt bei jedem Inverter der Offline geht, ab. Am Ende steht eine 0 in der Tabelle, wenn alle Inverter Offline sind.

Olli

MiniOh commented 1 year ago

Hier der Chart dazu:

grafik

knickohr commented 1 year ago

Ja, das hatten wir schon. Offenbar betrifft es jetzt nur noch die HMS, bei HM macht er es richtig.

Workaround : den Max. Wert im MQTT halten.

MiniOh commented 1 year ago

Ich habe 2 HMS und 5 HM im Einsatz. Der Total Wert fällt aber nicht nur beim offline gehen der HMS sondern auch bei den HM.

Auch hier muss sich etwas in den 0.7er Versionen geändert haben?

knickohr commented 1 year ago

Sooo, hab’s extra eben mitlaufen lassen. Da wird nix weniger, zählt sauber hoch bis alle aus sind und dabei bleibst auch. Zumindest in der 0.7.11

IMG_0992

Das Problem war seit mind. 0.6.12 vorhanden und wurde mit 0.7.8 mit Issue #929 gefixed (für HM-Serie).

MiniOh commented 1 year ago

Danke Dir. Kann es sein, dass es durch die Änderungen in 0.7.12 wieder auftritt? Ich hatte heute Abend auch alles mit laufen lassen. Sowohl YieldDay als auch YieldTotal werden kleiner mit jeden Inverter der offline geht.

knickohr commented 1 year ago

Das kann natürlich sein. Ich hoffe aber nicht ! 😲 Hab die 12 nicht drauf, gibt’s ja noch nicht. Und bringt mir auch nix. Ja, ich weiß, ich kann das zip hier holen.

MiniOh commented 1 year ago

Hallo nochmal,

ich habe das Verhalten nun mal einige Tage beobachachtet. Mit der "pre 0.7.12" ist es auf jeden Falls abends so, dass mit jedem Inverter der offline geht, sowohl YieldDay als auch YieldTotal kleiner werden. Somit wird um 23 Uhr eine 0 in die Datenbank geschrieben.

Das Verhalten ist nicht (wie bei einigen anderen Versionen) sporadisch, sondern, jeden Abend gleich.

Des weiteren ist es im Tagesverlauf so, dass z.B. YieldDay auch dann "kleiner" wird, wenn einmal keine Rückmeldung von einem Inverter kommt.

YieldDay sieht dann wie folgt aus. Im Tagesverlauf gibt es kleinere Peaks nach unten, abends das beschriebene Verhalten. grafik

MiniOh commented 1 year ago

Hallo @lumapu Vielen Dank für die Anpassung. Ich habe nun die 0.7.13, diese sendet immer noch niedrigere YieldDay im Tagesverlauf, wenn ein Inverter den Status wechselt.

Die GUI stimmt nach wie vor, die MQTT Daten aber noch nicht.

MiniOh commented 1 year ago

Hier nochmal ein Sreenshot.

Wenn die Inverter den Status Abends wechseln von Producing zu not Producing, dann bleibt YieldDay in der GUI gleich, die Werte via MQTT werden aber um die Werte der nicht aktiven Inverter kleiner.

Hier ganz gut ersichtlich.

grafik

MiniOh commented 1 year ago

Hallo @lumapu

Vielen Dank für die vielen Tests und Versuche das Verhalten zu verbessern.

Ich habe heute die 0.7.14 und 0.7.15 getestet. Leider beim YieldDay noch das gleiche Verhalten. Geht ein Inverter auf einen anderen Status als "Producing" stimmt der YieldDay Wert nicht mehr. GUI passt nach wie vor. MQTT nicht.

Kann ich weitere Daten liefern die evtl. helfen? Bzw. blöde Frage, ... was hat in der 0.6.10 noch anders funktioniert? Ab 0.6.12? gibts die Zero Probleme bzw. die verringerten YieldDay und YieldTotal Werte.

Wie machst du es, dass die GUI das richtig anzeigt? Ist dies nicht auf den MQTT Versand anwendbar?

Beste Grüße

lumapu commented 1 year ago

Ja gerne - irgendwann werden wir dem Fehler schon auf die Schliche kommen. Interessant wäre es in welchem Zustand die nicht vorhandenen Inverter sind. Sind die not producing oder sind die not available?

Das ganze kam rein, da wir genau an diesem Punkt versucht haben uns zu verbessern - früher wurde einfach alles rausgeballert was man wusste - jetzt wird versucht abhängig vom Inverterstatus das richtige zu tun.

Die Inverter durchlaufen eine State-Machine mit diesen Zuständen:

OFF
STARTING
PRODUCING
WAS_PRODUCING
WAS_ON

von OFF auf STARTING geht es, wenn ein Inverter auf irgendwas antwortet. Von STARTING auf PRODUCING geht der Status, wenn Livedaten vom Inverter empfangen werden. Wurden für 5 Minuten keine neuen Daten empfangen, geht der Status von PRODUCING auf WAS_PRODUCING. Analog dazu geht der Inverter von WAS_ON auf OFF, wenn für eine Stunde keine neuen Daten mehr empfangen wurden. Zusätzlich kann der Inverter noch auf WAS_ON wechseln, aber nur wenn er vorher nicht OFF war. Hintergrund: Es sind noch Livedaten vom Inverter aus einer vorherigen Kommunikation vorhanden.

Und hier nochmal die Stellen im Code: https://github.com/lumapu/ahoy/blob/984e344f05e44226f784d0fb35e7f80285dd0407/src/hm/hmInverter.h#L392-L414 https://github.com/lumapu/ahoy/blob/984e344f05e44226f784d0fb35e7f80285dd0407/src/hm/hmInverter.h#L416-L429

MiniOh commented 1 year ago

Guten Morgen,

vielen Dank für die ausführliche Erklärung. Im gesamten habe ich 3 Situationen (bis zu 0.7.15) in denen das Verhalten vorkommt. Eigentlich ist aber nur das abendliche Verhalten relevant.

Abends: Der Status wechselt von "Producing" zu "not Producing". Das ist oben in den Screenshot ganz gut zu sehen.

Tagsüber: Die Kommunikation via CMT mit den HMS scheint nicht ganz so stabil oder "schnell" zu funktionieren wie es bei den HM Invertern der Fall ist. Somit kommt es vor, dass in der Übersicht steht, dass die letzte Komminiktion zum Zeitpunkt x stattgefunden hat. Die genaue Meldung kann ich beim nächsten mal mitteilen.

Ebenfalls Tagsüber: Ein Inverter (sowohl HMS als auch HM) löst wegen hoher Netzspannung (Ja, der Netzversorger ist bereits involviert) den NA Schutz aus. Dieser ist dann erreichbar, "darf" aber nicht mehr produzieren. Auf DTU Seite ist das ein Wechsel von "Producing" zu "not Producing". Also wie Abends, wenn die Inverter aufgrund der Dunkelheit aufhören zu produzieren.

Beste Grüße

knickohr commented 1 year ago

Das ist interessant !

OFF STARTING PRODUCING WAS_PRODUCING WAS_ON

Ausgegeben wird aber :

0 | not available and not producing 1 | available but not producing 2 | available and producing 1 0

Wenn wir bei der State-Machine bleiben. Warum geben wir nicht

0 1 2 3 available and was producing 4 was online, now offline 0

aus ?

Damit könnte man auch per MQTT auf so Offlines unter Tags (Gewitter, dicke Wolken, kurzzeitige Kommunikationsausfälle … ) besser reagieren, zumal erst in den letzten Status nach einer Stunde gewechselt wird.

MiniOh commented 1 year ago

Hey,

auch in der 0.7.16 das gleiche Verhalten.

Ein HM-600 geht als erstes von "Producing" zu "not Producing. YieldDay wird ab dem Statuswechsel kleiner.

grafik

grafik

knickohr commented 1 year ago

@lumapu

Kann es sein das mit den Stati irgendwas noch nicht stimmt ?

0 | off: not available and not producing 1 | available but not producing 2 | available and producing 3 | available and was producing 4 | was available

Meine 13 Inverter kommen alle mit Status 4 😲

IMG_1028

Oder ist der Status 4 (der höchste Wert) jetzt für available und producing vorgesehen ?

Nichts ändern, erst mal reden, vielleicht ist das so auch nicht verkehrt 😉 Oder ist es weil ich den Update unter Tags so zwischendrin gemacht habe ?

Hmmm, irgendwie paßt das alles nicht mehr hier her. Soll ich einen neuen Issue aufmachen ?

MiniOh commented 1 year ago

Bei mir ähnlich. Bis zur 0.7.16 war der "normale" Status "available and producing" = 2. In der 0.7.17 ist es die 4.

knickohr commented 1 year ago

Ja, die Frage ist halt ob das jetzt so gewollt ist oder ob sich da was neues eingeschlichen hat. Ich bin ja an den 2 weiteren Stati schuld 🫣

Kann mit beidem leben, aber was ist dann Status 2 ? 🤔

Edit : Genau betrachtet fände ich es sogar super, wenn der Status 4 jetzt available and producing ist, dann brauche ich meine Flows nicht zu ändern 😅😎

Was macht Dein Yield-Gehopse ?

MiniOh commented 1 year ago

Bisher sieht das im tagesverlauf besser aus. Bis dahein keine Sprünge nach unten.

@lumapu Kann es sein, dass in der 0.7.17 an den Zeitpunkten, an denen ein Inverter einen anderen Status als "available and producing" gar kein YieldDay übertragen wird, bis wieder alle den Status "available and producing" haben?

knickohr commented 1 year ago

Ich wundere mich halt immer noch das ich mir reinen HM damit keine Probleme habe. Strange !

knickohr commented 1 year ago

Das mit den neuen Stati war/ist noch nix 😞

Er kennt nur noch 0, 1, 4 und zurück zu 0. In dieser Reihenfolge. Dazwischen gibt es nichts, Abends springt er direkt von 4 nach 0 😲

Laß uns erst mal das Problem mit dem Yield fixen, bevor wir eine neue Baustelle anpacken 😉 Ich gehe mal zurück auf 0.7.11.

lumapu commented 1 year ago

gleiches habe ich auch beobachtet. 0 - 1 - 4 für den einen Inverter, der andere hat 0 - 1 -4 - 0 - 4 gewechselt. Yield Day Total sieht stabil über den Tag aus, aber abends halbiert es sich zuerst und dann geht es ganz auf 0 - echt sehr komisch

knickohr commented 1 year ago

Den Wechsel 4 - 0 - 4 habe ich unter Tags immer mal wieder gehabt. Das waren aber Kommunikationsprobleme einzelner Inverter. Einige sind halt doch zu weit weg ☹️

Was auch aufgefallen ist, die MQTT-Pakete kamen nicht mehr inverterweise rein, also für jeden Inverter ein komplettes Paket über alle seine Werte, sondern es kam in 2 oder gar 3 Teilpaketen mit kurzer Pause (ca. 1s) dazwischen.

lumapu commented 1 year ago

der eine Wechselrichter hat sogar das YieldDay auf 0 habe ich gesehen, während sein YieldTotal da ist - das heißt der hat sich am Abend abgeschaltet und ist nochmal kurz erwacht.

grafik

lumapu commented 1 year ago

habe grade nochmal die Zustände überdacht und überarbeitet, in kürze gibts eine 0.7.18, ich bin zuversichtlich, dass die State-Machine dann korrekt läuft. Mal sehen wie sich das auf unsere Total Werte auswirkt - wir kommen voran 😀

MiniOh commented 1 year ago

habe grade nochmal die Zustände überdacht und überarbeitet, in kürze gibts eine 0.7.18, ich bin zuversichtlich, dass die State-Machine dann korrekt läuft. Mal sehen wie sich das auf unsere Total Werte auswirkt - wir kommen voran 😀

Hallo,

ich habe seit heute morgen die 0.7.18 installiert. Nun ist der Status 2 wieder korrekt.

Allerdings war bei mir ein Inverter kurz nicht erreichbar, hat also in den Status 4 | was available gewechselt.

Zu dem Zeitpunkt wurde wieder eine verringerte YieldDay übertragen. :(

grafik

knickohr commented 1 year ago

Das ist wirklich spannend ! Warum macht es das bei mir nicht ? Bei mir geht der „6er“ immer wieder wegen Empfangsproblemen weg, aber das Yield bleibt.

ich hätte allerdings erwartet das er von 2 auf 3 wechselt und später dann auf 4 🤔

IMG_1029

Aber er macht immer 2-4-2-4-2 . Klar, von 4 auf 2 ist korrekt, aber von 2 hätte ich 2-3-4-2 erwartet.

MiniOh commented 1 year ago

Ich denke 2 und 4 ist schon korrekt. Nur weil er nicht erreichbar war, heist das ja nicht, dass er nicht produziert hat. Also die 3 würde ich da eigentlich nicht erwarten.

Warum es bei dir anders ist, kann ich lieder auch nicht sagen. Evtl. weil bei mir auch HMS mit dabei sind?

Zu HM Zeiten hatte ich keines dieser Probleme, die wir hier besprechen.

knickohr commented 1 year ago

Alles zurück, ich habe das YieldDay Problem jetzt auch (wieder). Ich müßte lügen, aber ich würde behaupten, das es mit der 0.7.11 nicht war 😱

Ja, genau genommen ist Status 3 beim Wegbrechen nicht korrekt, er ist ja nicht acüvailable. Wir werden heute Abend sehen in er die State-Machine sauber durchläuft 😉

MiniOh commented 1 year ago

State-Machine scheint zu passen. Nach 2-4-2-4-2 tagsüber, kommt abends dann 3.

YieldDay leider alles beim Alten ...

grafik

MiniOh commented 1 year ago

der eine Wechselrichter hat sogar das YieldDay auf 0 habe ich gesehen, während sein YieldTotal da ist - das heißt der hat sich am Abend abgeschaltet und ist nochmal kurz erwacht.

grafik

Meinst du das liegt wirklich am Inverter? Das hatte ich vorher nie. War bei mir heute Abend auch so (0.7.18). Ohne besondere Bewölkung oder so.

grafik

lumapu commented 1 year ago

die Statemachine läuft jetzt korrekt 😅 grafik

@MiniOh ich weiß es noch nicht genau, interssant ist, dass alle anderen Werte da sind - daher gehe ich jetzt auch eher von einem Fehler in Ahoy aus. Welche Haken der "Resets" sind bei dir aktiv?

knickohr commented 1 year ago

Ja, State-Machine paßt 👍

0-1-2-(4-2-….-2)-3-4-0

Was mich etwas stört ist das der Status 4 sehr lange steht, auch noch weit nachdem die DTU offline meldet. Erst dann kommt der Status 0, 1 Stunde ist schon lange.

Was nimmt die DTU eigentlich bei /total/(offline) als Kriterium ? Wenn alle Inverter weg sind ?

Edit : Das YieldDay spielt jetzt definitiv auch wieder bei mir verrückt. Und nein, ich habe nirgends so einen Null-Haken sitzen, nicht mal mehr den um Mitternacht. Mache das jetzt selbst im Node-Red! Die Flows habe ich heute auf die 5 Stati umgepfriemelt und sogar noch vereinfacht 😅

knickohr commented 1 year ago

Was auch noch auffällt : Die „Schwuppdizität“ der WebGui ist seitdem wieder unter aller Sau (Sorry). Selbst jetzt Nachts dauert es manchmal 10s bis sich was tut. Aber das ist jetzt erst mal nicht das Thema, schließen wir erst andere Baustellen.

lumapu commented 1 year ago

@MiniOh nochmal nachgedacht - doch kein Fehler von Ahoy - bei dir sind alle Werte bis auf YieldDay da. Das heißt doch eindeutig, dass der Wechselrichter aus war und YieldDay vergessen hat. Alle anderen Werte kann er sofort wieder messen und mitteilen. Wir brauchen also hier noch eine Bedingung, die uns verhindert, das bei einem Inverterneustart (am Abend) ein YieldDay von 0 überträgt.

YieldDay Total war bei mir kontinuierlich - meine Statemachine ja auch. Allerdings wie gestern reduziert es sich pro offline gehendem Inverter.

@knickohr eine Stunde war jetzt einfach mal so gedacht - wir können es gerne reduzieren, was schlägst du vor? 15min? Mit total/(offline) meinst du wahrscheinlich /status? Dieser hat 3 Zustände, kein Inverter verfügbar, mindestens einer verfügbar (entspricht Status 2 unserer neuen State-Machine) oder alle verfügbar (entspricht auch Status 2 der neuen SM)

lumapu commented 1 year ago

Hier sieht man genau, dass der Übergang in Status 3 der Übeltäter ist:

grafik

Edit: Die Zeiten sind UTC, es müssen also noch 2 Stunden addiert werden (ändert aber nichts an der Sache)

lumapu commented 1 year ago

ich denke den Yield Fehler endlich entdeckt zu zugleich auch behoben zu haben:

https://github.com/lumapu/ahoy/commit/6e901a656c2701fc01f0aeee6b888ed520ecb3f5

Da war noch was aus Urzeiten drin, durch diese Bedingung wurde ein Flag nicht gesetzt was verhindert, dass partielle Totalwerte rausgeschickt werden - wieder knapp 24h warten ob sich das bestätigt.

@knickohr: wegen der WebUI: kannst du dafür einen gesonderten Issue aufmachen? Fragen die ich habe: von welcher Seite zu welcher, oder immer gleich, Inverter aktiv oder inaktiv, Intervalle und Free-Heap. Danke

lumapu commented 1 year ago

@knickohr eine Idee noch bzgl. Stabilität: versuche doch bitte mal nach dem Update nochmal einen Neustart zu machen. Der ESP32 zeigt ja leider keine Heap-Fragmentation an, beim ESP8266 sieht man die Auswirkung des Updates sehr deutlich: heap-frag: 26, nach dem Neustart dann 2. Evtl. meinst du auch sonst, dass die älteren Versionen stabiler waren, da man doch ab und zu ohne Update neu gestartet hat.

Edit: Gerade bei einem ESP32 beobachtet: nach dem Update auf 0.7.19 war Free-Heap auf 1699xx jetzt nach dem Neustart ist der Wert bei 170048, aber das ist ja nur der Free-Heap

MiniOh commented 1 year ago

die Statemachine läuft jetzt korrekt 😅 grafik

@MiniOh ich weiß es noch nicht genau, interssant ist, dass alle anderen Werte da sind - daher gehe ich jetzt auch eher von einem Fehler in Ahoy aus. Welche Haken der "Resets" sind bei dir aktiv?

HEy,

bei mir sind gar keine Reset Häkchen aktiv.