NEWS
Test Adapter Zendure Solarflow
-
@nograx
Ich hab die Adapterversion 5.1.0.
solarflow 800Pro2 ist über zenSDK verbunden.
Mir viel auf das bestimmte Werte in packData nicht aktualisiert werden z.B. batcur oder power.
Ein Fehler sind auf jeden Fall 0-Werte, durch z.B. "if (x.batcur)" werden diese gefiltert.
Kannst Du das umändern das auch 0-Werte gespeichert werden?Code Ausschnitt "ZenSdkIobDevice.js":
if (x.batcur) { await ((_b = this.adapter) == null ? void 0 : _b.extendObject(`${key}.batcur`, { type: "state", common: { name: "batcur", type: "number", desc: "batcur", role: "value", read: true, write: false, unit: "A" -
@maxclaudi sagte:
...
Dort findet sich für die Auslesung der Batteriespannung (BatVolt) folgendes mathematisches Konstrukt:"BatVolt": ( "template", "{{ value / 100 if (value | int) < 32768 else (value | bitwise_xor(0x8000 | int) - 0x8000 | int) / 100 }}", "V", "voltage", ),Diese Formel ist mathematisch und logisch leider völlig fehlerhaft:
- Zweierkomplement-Verwechslung: Die Entwickler wollten hier offenbar einen vorzeichenbehafteten 16-Bit-Integer verarbeiten. Wenn der Wert über 32767 steigt, wird er als negativ interpretiert. Das macht bei Strömen (A) Sinn, die rein- oder rausfließen.
- Physikalisch unmöglich: Eine Batteriespannung (
BatVolt) kann niemals negativ sein. Die Abfrageif < 32768ergibt bei einer reinen Spannungsauslesung keinen Sinn. - Mathematischer Fehler: Selbst wenn man ein Zweierkomplement berechnen wollte, zieht die Operation im
else-Zweig durch dasbitwise_xor(0x8000)und das anschließende Subtrahieren von0x8000den Wert quasi doppelt ab. Das Ergebnis wäre eine völlig falsche, tief negative Spannung statt der korrekten Zweierkomplement-Formel (die schlichtvalue - 65536lauten müsste).
Zu 2:
Ich gebe Dir recht das Akku Spannungen immer positiv angegeben werden.
Allerdings kann eine Spannung auch negativ sein da dies ja vom Bezugssystem abhängt und ist damit nicht physikalisch unmöglich.Ich könnte mir z.B. vorstellen das Hersteller das machen um festzustellen ob ein Akku falsch angeschlossen wurde in einer Reihenschaltung.Vielleicht weiß Fireson von HA da mehr und hat das deswegen mit aufgenommen.Hast Du Ihn mal gefragt ?Zu 3:
Dazu habe ich mal die KI claude befragt weil ich es auch nicht genau wußte.
Die meinte in kurzform folgendes.Zitat:
Kurz gesagt: Die Kritik ist mathematisch nicht korrekt – der Ausdruck rechnet trotz des ungewöhnlichen Aufbaus exakt das Richtige. Der Grund liegt in der Operator-Präzedenz von Jinja2, die hier leicht zu übersehen ist.Wie Jinja das tatsächlich parst
In Jinja binden Filter (|) stärker als arithmetische Operatoren (+, -, *, /). Das heißt, der Ausdruck
value | bitwise_xor(0x8000 | int) - 0x8000 | int
wird nicht als "wende int auf das gesamte Ergebnis der Subtraktion an" gelesen, sondern so geklammert:
( value | bitwise_xor(0x8000|int) ) - ( 0x8000 | int )
Der zweite | int-Filter hängt sich also nur an die Konstante 0x8000 (also ein reiner No-Op), nicht an das gesamte Zwischenergebnis. Es gibt also gar keine "doppelte" Anwendung von irgendetwas auf den kompletten Ausdruck.
Zitat: Ende
Allerdings kann eine Spannung auch negativ sein da dies ja vom Bezugssystem abhängt und ist damit nicht physikalisch unmöglich.Ich könnte mir z.B. vorstellen das Hersteller das machen um festzustellen ob ein Akku falsch angeschlossen wurde in einer Reihenschaltung.
Das ist Unsinn.
dazu verweise ich nochmals auf meinen POST
Hatte nicht mehr daran gedacht und dieses 2te mal die Syntax fehlinterpretiert. Es bleibt dabei:Elektrotechnik, Elektronik und Programmierung sind nicht nur ein Hobby von mir.
Lass uns das mal ganz nüchtern physikalisch und softwareseitig betrachten:Ein Akku in diesem proprietären, verpolungssicheren Zendure-Stecksystem kann niemals eine negative Spannung erzeugen oder übertragen!
Selbst wenn man Akkus im Werk intern in Reihe schaltet – das BMS (Battery Management System) misst die Einzelspannungen der Zellen und die Gesamtspannung des Packs.
Wenn ein Pack physikalisch falsch herum auf die Platine gelötet würde, läge die Gesamtspannung bei 0V oder das System würde durch die Schutzdioden kurzschließen und/oder, rauchen und abschalten.
Es wird von der Firmware niemals eine "gesunde, aber negative Arbeitsspannung" über MQTT an die Cloud übertragen (können).Das bedeutet glasklar:
Die von deiner KI analysierte Formel (Zweierkomplement) ist perfekt und mathematisch absolut korrekt für Ströme (Ampere) – dort macht sie Sinn, da Strom rein- oder rausfließen kann (Laden/Entladen).Die Maintainer von Zendure-HA haben diese Formel mit sehr hoher Wahrscheinlichkeit per Copy-Paste einfach stumpf kopiert – und für (
BatVolt) angeglichen.
Und weil die Spannung im Normalbetrieb (42V bis 58V) als Rohwert immer im Bereich von 4200 bis 5800 liegt (also weit unter der Grenze von 32768), wird derelse-Zweig bei der Spannung in der Praxis schlicht niemals betreten.Der Fehler fällt beim Testen einfach nicht auf, weil der Code bei Spannungen immer im
if-Zweig bleibt. Es ist m. M. n. eine klassische Copy-Paste-Altlast. -
@maxclaudi ich denke immer noch das du damit genau das Gegenteil bewirkst. inputLimit / outputLimit hat den gleichen Effekt als wenn du den Regler in der App bedienst, da würde ich eher Flash Probleme erwarten. DeviceAutomationInOutLimit sendet die selben Befehle ans Gerät die auch das HEMS von Zendure verwendet. Dann hätte der Hyper die gleiche Flash Problematik wenn das HEMS von Zendure verwendet wird.
@maxclaudi ich denke immer noch das du damit genau das Gegenteil bewirkst. inputLimit / outputLimit hat den gleichen Effekt als wenn du den Regler in der App bedienst, da würde ich eher Flash Probleme erwarten. DeviceAutomationInOutLimit sendet die selben Befehle ans Gerät die auch das HEMS von Zendure verwendet. Dann hätte der Hyper die gleiche Flash Problematik wenn das HEMS von Zendure verwendet wird.
@nograx Die Behauptung, dein Adapter mache exakt dasselbe wie das herstellereigene Zendure-HEMS, ist durch einen direkten Blick in deinen Quellcode (Hyper2000.ts) und den realen MQTT-Datenstrom der originalen Zendure-App widerlegt.
Schauen wir uns die unzensierten JSON-Protokolle an:
Das originale MQTT-Live-Log der Zendure-App bei aktivem HEMS (bei 40W):
Topic:iot/gDa3tb/xxxxxxx/function/invoke{"function":"hemsEP","arguments":{"outputPower":40,"chargePower":0,"freq":0,"mode":x}}Dein Adapter-Code (Hyper2000.ts ab Zeile 49 bei 40W):
Topic:iot/gDa3tb/xxxxxxx/function/invoke{"function":"deviceAutomation","arguments":[{"autoModelProgram":2,"autoModelValue":{"chargingType":0,"chargingPower":0,"freq":0,"outPower":40},"msgType":1,"autoModel":8}]}Fakt ist: Zendure schickt hier für die Regelung ein völlig anderes Paket mit einem anderen Funktionsaufruf ("hemsEP" mit mode: 11) als dein Adapter, der starr die "deviceAutomation" (autoModel: 8) übermittelt.
Ob der Hyper nun bei der originalen HEMS-Funktion im Hintergrund ebenfalls in den Flash-Speicher schreibt oder nicht, kann keiner von uns ohne Einblick in den Firmware-Quellcode beweisen – das bleibt Spekulation.
Fakt ist aber durch meine Tests: Die über deinen Adapter gesendete "deviceAutomation" (autoModel: 8) simuliert im Gerät einen permanenten Plan, und dieser Zustand bleibt nachweislich auch nach einem kompletten, minutenlangen Netzentzug im Gerät erhalten.
Dein Adapter nutzt bei der Regelung schlicht nicht denselben Weg wie das herstellereigene HEMS. Wie oft und in welchem Intervall man diese Datenpunkte nun ansteuert und welches Risiko man seiner Hardware damit zumutet, bleibt am Ende jedem User selbst überlassen. Für mich ist das Thema damit nun auch fachlich komplett durch.
Schönen Abend noch!
edit/PS Quelle Adaper Hyper2000.ts
und deviceID entfernt. -
@maxclaudi ich denke immer noch das du damit genau das Gegenteil bewirkst. inputLimit / outputLimit hat den gleichen Effekt als wenn du den Regler in der App bedienst, da würde ich eher Flash Probleme erwarten. DeviceAutomationInOutLimit sendet die selben Befehle ans Gerät die auch das HEMS von Zendure verwendet. Dann hätte der Hyper die gleiche Flash Problematik wenn das HEMS von Zendure verwendet wird.
@nograx Die Behauptung, dein Adapter mache exakt dasselbe wie das herstellereigene Zendure-HEMS, ist durch einen direkten Blick in deinen Quellcode (Hyper2000.ts) und den realen MQTT-Datenstrom der originalen Zendure-App widerlegt.
Schauen wir uns die unzensierten JSON-Protokolle an:
Das originale MQTT-Live-Log der Zendure-App bei aktivem HEMS (bei 40W):
Topic:iot/gDa3tb/xxxxxxx/function/invoke{"function":"hemsEP","arguments":{"outputPower":40,"chargePower":0,"freq":0,"mode":x}}Dein Adapter-Code (Hyper2000.ts ab Zeile 49 bei 40W):
Topic:iot/gDa3tb/xxxxxxx/function/invoke{"function":"deviceAutomation","arguments":[{"autoModelProgram":2,"autoModelValue":{"chargingType":0,"chargingPower":0,"freq":0,"outPower":40},"msgType":1,"autoModel":8}]}Fakt ist: Zendure schickt hier für die Regelung ein völlig anderes Paket mit einem anderen Funktionsaufruf ("hemsEP" mit mode: 11) als dein Adapter, der starr die "deviceAutomation" (autoModel: 8) übermittelt.
Ob der Hyper nun bei der originalen HEMS-Funktion im Hintergrund ebenfalls in den Flash-Speicher schreibt oder nicht, kann keiner von uns ohne Einblick in den Firmware-Quellcode beweisen – das bleibt Spekulation.
Fakt ist aber durch meine Tests: Die über deinen Adapter gesendete "deviceAutomation" (autoModel: 8) simuliert im Gerät einen permanenten Plan, und dieser Zustand bleibt nachweislich auch nach einem kompletten, minutenlangen Netzentzug im Gerät erhalten.
Dein Adapter nutzt bei der Regelung schlicht nicht denselben Weg wie das herstellereigene HEMS. Wie oft und in welchem Intervall man diese Datenpunkte nun ansteuert und welches Risiko man seiner Hardware damit zumutet, bleibt am Ende jedem User selbst überlassen. Für mich ist das Thema damit nun auch fachlich komplett durch.
Schönen Abend noch!
edit/PS Quelle Adaper Hyper2000.ts
und deviceID entfernt.@maxclaudi sagte:
Das originale MQTT-Live-Log der Zendure-App bei aktivem HEMS (bei 40W):
Topic:iot/gDa3tb/xxxxxxx/function/invoke{"function":"hemsEP","arguments":{"outputPower":40,"chargePower":0,"freq":0,"mode":11}}Ich habe das mal mit meinem Hyper ausprobiert. Auf das oben genannte Paket reagiert er aber nicht. "function":"hemsEP" gilt eigentlich auch nur für die neue Generation von Geräten, beim SF2400Pro funktioniert das so. Hast du das mal lokal bei dir ausprobiert?
-
@nograx
Ich hab die Adapterversion 5.1.0.
solarflow 800Pro2 ist über zenSDK verbunden.
Mir viel auf das bestimmte Werte in packData nicht aktualisiert werden z.B. batcur oder power.
Ein Fehler sind auf jeden Fall 0-Werte, durch z.B. "if (x.batcur)" werden diese gefiltert.
Kannst Du das umändern das auch 0-Werte gespeichert werden?Code Ausschnitt "ZenSdkIobDevice.js":
if (x.batcur) { await ((_b = this.adapter) == null ? void 0 : _b.extendObject(`${key}.batcur`, { type: "state", common: { name: "batcur", type: "number", desc: "batcur", role: "value", read: true, write: false, unit: "A" -
Allerdings kann eine Spannung auch negativ sein da dies ja vom Bezugssystem abhängt und ist damit nicht physikalisch unmöglich.Ich könnte mir z.B. vorstellen das Hersteller das machen um festzustellen ob ein Akku falsch angeschlossen wurde in einer Reihenschaltung.
Das ist Unsinn.
dazu verweise ich nochmals auf meinen POST
Hatte nicht mehr daran gedacht und dieses 2te mal die Syntax fehlinterpretiert. Es bleibt dabei:Elektrotechnik, Elektronik und Programmierung sind nicht nur ein Hobby von mir.
Lass uns das mal ganz nüchtern physikalisch und softwareseitig betrachten:Ein Akku in diesem proprietären, verpolungssicheren Zendure-Stecksystem kann niemals eine negative Spannung erzeugen oder übertragen!
Selbst wenn man Akkus im Werk intern in Reihe schaltet – das BMS (Battery Management System) misst die Einzelspannungen der Zellen und die Gesamtspannung des Packs.
Wenn ein Pack physikalisch falsch herum auf die Platine gelötet würde, läge die Gesamtspannung bei 0V oder das System würde durch die Schutzdioden kurzschließen und/oder, rauchen und abschalten.
Es wird von der Firmware niemals eine "gesunde, aber negative Arbeitsspannung" über MQTT an die Cloud übertragen (können).Das bedeutet glasklar:
Die von deiner KI analysierte Formel (Zweierkomplement) ist perfekt und mathematisch absolut korrekt für Ströme (Ampere) – dort macht sie Sinn, da Strom rein- oder rausfließen kann (Laden/Entladen).Die Maintainer von Zendure-HA haben diese Formel mit sehr hoher Wahrscheinlichkeit per Copy-Paste einfach stumpf kopiert – und für (
BatVolt) angeglichen.
Und weil die Spannung im Normalbetrieb (42V bis 58V) als Rohwert immer im Bereich von 4200 bis 5800 liegt (also weit unter der Grenze von 32768), wird derelse-Zweig bei der Spannung in der Praxis schlicht niemals betreten.Der Fehler fällt beim Testen einfach nicht auf, weil der Code bei Spannungen immer im
if-Zweig bleibt. Es ist m. M. n. eine klassische Copy-Paste-Altlast.Allerdings kann eine Spannung auch negativ sein da dies ja vom Bezugssystem abhängt und ist damit nicht physikalisch unmöglich.Ich könnte mir z.B. vorstellen das Hersteller das machen um festzustellen ob ein Akku falsch angeschlossen wurde in einer Reihenschaltung.
Das ist Unsinn.
................@maxclaudi
Elektronik, Elektrotechnik und Programmierung ist auch bei mir nicht nur ein Hobby.
Du hast "physikalisch Unmöglich" geschrieben und das habe ich korrigiert.
Nicht mehr und nicht weniger. -
Allerdings kann eine Spannung auch negativ sein da dies ja vom Bezugssystem abhängt und ist damit nicht physikalisch unmöglich.Ich könnte mir z.B. vorstellen das Hersteller das machen um festzustellen ob ein Akku falsch angeschlossen wurde in einer Reihenschaltung.
Das ist Unsinn.
................@maxclaudi
Elektronik, Elektrotechnik und Programmierung ist auch bei mir nicht nur ein Hobby.
Du hast "physikalisch Unmöglich" geschrieben und das habe ich korrigiert.
Nicht mehr und nicht weniger.Du hast "physikalisch Unmöglich" geschrieben und das habe ich korrigiert.
Nicht mehr und nicht weniger.@Bernd1967 Wer die Hardware kennt, weiß, dass man die Akkus aufgrund der mechanischen Codierung der Stecker physisch überhaupt nicht falsch herum in Reihe schalten kann.
Deine Vorstellung, das BMS würde hier eine negative Spannung messen, um einen Verpolungsfehler festzustellen, ist elektrotechnischer Unsinn.Bei einer echten internen Zell-Umpolung (Tiefenentladung) schaltet das BMS das System zum Schutz sofort komplett ab, anstatt eine negative Spannung per MQTT zu senden.
Und gerade weil wir hier NUR von Zendure-Systemen reden und nicht von irgendeinem akademischen "Bezugssystem", ist es hier schlicht physikalisch unmöglich.
Bitte verwirre die Community nicht mit herbeigezogenen Annahmen und Wortklaubereien.
Denn hier ist das, was du dir vorstellen kannst, tatsächlich "physikalisch unmöglich".
@maxclaudi sagte:
Das originale MQTT-Live-Log der Zendure-App bei aktivem HEMS (bei 40W):
Topic:iot/gDa3tb/xxxxxxx/function/invoke{"function":"hemsEP","arguments":{"outputPower":40,"chargePower":0,"freq":0,"mode":11}}Ich habe das mal mit meinem Hyper ausprobiert. Auf das oben genannte Paket reagiert er aber nicht. "function":"hemsEP" gilt eigentlich auch nur für die neue Generation von Geräten, beim SF2400Pro funktioniert das so. Hast du das mal lokal bei dir ausprobiert?
@nograx Ja, ich habe es an meinem Hyper 2000 getestet (productId gDa3tb mit neuer TLS-Firmware) und mein Gerät reagiert im Live-Betrieb (also nicht total isoliert) absolut fehlerfrei darauf.
Ich bin an einem Reverse Engineering mit einer völlig anderen Zielsetzung dran und versuche nicht, das Zendure-HEMS zu imitieren. Daher beschäftige ich mich auch nicht intensiv mit HEMS. Komplett lokal/isoliert kann und möchte ich das Ganze nicht weiter testen.
Was ich dir aber als unzensierten Protokoll-Fakt aus den Live-MQTT-Logs beim Ein- und Ausschalten über die App mitgeben kann: Wenn ich per originaler App das HEMS aktiviere, wird bei jedem dieser Geräte – das wurde beim Hyper 2000, 1600AC+ und 2400 AC Pro identisch aufgezeichnet – als allererstes ein Paket mit
"outputPower":0,"chargePower":0published.Ob das zwingend nötig ist oder eine entscheidende Initialisierung darstellt, weiß ich nicht. Ich meine mich zu erinnern, dass erst danach
hemsState:1gesetzt wurde, kann mich aber auch täuschen.
Jedoch sendet das Zendure-Gerät beim Start von HEMS als direkte Reaktion mindestens zwei unterschiedliche Antworten bzw. Statusmeldungen zurück an den Broker: Einmal die direkte Funktionsbestätigung des Geräts aufinvoke/replyund direkt folgend den aktualisierten Eigenschaftsbericht aufproperties/report, in dem das Gerät dannhemsState:1zusammen mit den geänderten Gerätedaten an den Broker überträgt.Wie bereits geschrieben, verfolge ich schon sehr lange eine ganz andere Zielsetzung: Ich möchte HEMS weder verwenden noch imitieren, sondern die gesamte Zendure-MQTT-Struktur mit all ihren Topics und Parametern außerhalb von HEMS exakt interpretieren und verstehen können. Und ich denke, da bin ich inzwischen sehr weit fortgeschritten.
Zudem bin ich aktuell wieder nicht vor Ort und einfach nur dankbar, dass ich an diesem Standort wenigstens einen Hyper 2000 für den Man-in-the-Middle-Logger zur Verfügung habe, um diese realen Datenströme überhaupt sichtbar zu machen. Damit bin ich bei dem Thema nun auch wirklich raus. Einen guten Start in die Woche!
-
Du hast "physikalisch Unmöglich" geschrieben und das habe ich korrigiert.
Nicht mehr und nicht weniger.@Bernd1967 Wer die Hardware kennt, weiß, dass man die Akkus aufgrund der mechanischen Codierung der Stecker physisch überhaupt nicht falsch herum in Reihe schalten kann.
Deine Vorstellung, das BMS würde hier eine negative Spannung messen, um einen Verpolungsfehler festzustellen, ist elektrotechnischer Unsinn.Bei einer echten internen Zell-Umpolung (Tiefenentladung) schaltet das BMS das System zum Schutz sofort komplett ab, anstatt eine negative Spannung per MQTT zu senden.
Und gerade weil wir hier NUR von Zendure-Systemen reden und nicht von irgendeinem akademischen "Bezugssystem", ist es hier schlicht physikalisch unmöglich.
Bitte verwirre die Community nicht mit herbeigezogenen Annahmen und Wortklaubereien.
Denn hier ist das, was du dir vorstellen kannst, tatsächlich "physikalisch unmöglich".
@maxclaudi sagte:
Das originale MQTT-Live-Log der Zendure-App bei aktivem HEMS (bei 40W):
Topic:iot/gDa3tb/xxxxxxx/function/invoke{"function":"hemsEP","arguments":{"outputPower":40,"chargePower":0,"freq":0,"mode":11}}Ich habe das mal mit meinem Hyper ausprobiert. Auf das oben genannte Paket reagiert er aber nicht. "function":"hemsEP" gilt eigentlich auch nur für die neue Generation von Geräten, beim SF2400Pro funktioniert das so. Hast du das mal lokal bei dir ausprobiert?
@nograx Ja, ich habe es an meinem Hyper 2000 getestet (productId gDa3tb mit neuer TLS-Firmware) und mein Gerät reagiert im Live-Betrieb (also nicht total isoliert) absolut fehlerfrei darauf.
Ich bin an einem Reverse Engineering mit einer völlig anderen Zielsetzung dran und versuche nicht, das Zendure-HEMS zu imitieren. Daher beschäftige ich mich auch nicht intensiv mit HEMS. Komplett lokal/isoliert kann und möchte ich das Ganze nicht weiter testen.
Was ich dir aber als unzensierten Protokoll-Fakt aus den Live-MQTT-Logs beim Ein- und Ausschalten über die App mitgeben kann: Wenn ich per originaler App das HEMS aktiviere, wird bei jedem dieser Geräte – das wurde beim Hyper 2000, 1600AC+ und 2400 AC Pro identisch aufgezeichnet – als allererstes ein Paket mit
"outputPower":0,"chargePower":0published.Ob das zwingend nötig ist oder eine entscheidende Initialisierung darstellt, weiß ich nicht. Ich meine mich zu erinnern, dass erst danach
hemsState:1gesetzt wurde, kann mich aber auch täuschen.
Jedoch sendet das Zendure-Gerät beim Start von HEMS als direkte Reaktion mindestens zwei unterschiedliche Antworten bzw. Statusmeldungen zurück an den Broker: Einmal die direkte Funktionsbestätigung des Geräts aufinvoke/replyund direkt folgend den aktualisierten Eigenschaftsbericht aufproperties/report, in dem das Gerät dannhemsState:1zusammen mit den geänderten Gerätedaten an den Broker überträgt.Wie bereits geschrieben, verfolge ich schon sehr lange eine ganz andere Zielsetzung: Ich möchte HEMS weder verwenden noch imitieren, sondern die gesamte Zendure-MQTT-Struktur mit all ihren Topics und Parametern außerhalb von HEMS exakt interpretieren und verstehen können. Und ich denke, da bin ich inzwischen sehr weit fortgeschritten.
Zudem bin ich aktuell wieder nicht vor Ort und einfach nur dankbar, dass ich an diesem Standort wenigstens einen Hyper 2000 für den Man-in-the-Middle-Logger zur Verfügung habe, um diese realen Datenströme überhaupt sichtbar zu machen. Damit bin ich bei dem Thema nun auch wirklich raus. Einen guten Start in die Woche!
@maxclaudi @Bernd1967 Als erstes zu der BatVol Geschichte. Hier kann man zu 99% davon ausgehen das hier ein Copy&Paste Fehler im HA Integration Code vorliegt, der aber zu 100% unproblematisch ist und nichts mit dem ioBroker Adapter zu tun hat. Da möchte ich jetzt mal gerne einen Abschluss haben
Bzgl. der Flash-Problematik: Ich fasse mal zusammen das wir außer einem Haufen Text und Mutmaßungen hier keine weiteren belastbaren und brauchbaren Informationen haben.
Da du ja offensichtlich HEMS auf deinem Hyper jetzt gerade erst laufen hattest, wäre es hilfreich wenn du mir das vollständige MQTT Protokoll einmal zur Verfügung stellen kannst damit ich das einmal nachvollziehen kann. Ich kann mein Hyper 2000 Setup hier gerade nicht ohne viel Aufwand auf Cloud und HEMS umstellen.
-
@maxclaudi @Bernd1967 Als erstes zu der BatVol Geschichte. Hier kann man zu 99% davon ausgehen das hier ein Copy&Paste Fehler im HA Integration Code vorliegt, der aber zu 100% unproblematisch ist und nichts mit dem ioBroker Adapter zu tun hat. Da möchte ich jetzt mal gerne einen Abschluss haben
Bzgl. der Flash-Problematik: Ich fasse mal zusammen das wir außer einem Haufen Text und Mutmaßungen hier keine weiteren belastbaren und brauchbaren Informationen haben.
Da du ja offensichtlich HEMS auf deinem Hyper jetzt gerade erst laufen hattest, wäre es hilfreich wenn du mir das vollständige MQTT Protokoll einmal zur Verfügung stellen kannst damit ich das einmal nachvollziehen kann. Ich kann mein Hyper 2000 Setup hier gerade nicht ohne viel Aufwand auf Cloud und HEMS umstellen.
@maxclaudi @Bernd1967 Als erstes zu der BatVol Geschichte. Hier kann man zu 99% davon ausgehen das hier ein Copy&Paste Fehler im HA Integration Code vorliegt, der aber zu 100% unproblematisch ist und nichts mit dem ioBroker Adapter zu tun hat. Da möchte ich jetzt mal gerne einen Abschluss haben
Bzgl. der Flash-Problematik: Ich fasse mal zusammen das wir außer einem Haufen Text und Mutmaßungen hier keine weiteren belastbaren und brauchbaren Informationen haben.
Da du ja offensichtlich HEMS auf deinem Hyper jetzt gerade erst laufen hattest, wäre es hilfreich wenn du mir das vollständige MQTT Protokoll einmal zur Verfügung stellen kannst damit ich das einmal nachvollziehen kann. Ich kann mein Hyper 2000 Setup hier gerade nicht ohne viel Aufwand auf Cloud und HEMS umstellen.
@nograx Meine dokumentierte Testreihe als "Haufen Text und Mutmaßungen" abzutun, aber im selben Satz nach meinen vollständigen Protokoll-Daten zu fragen, passt nicht zusammen.
Belastbar und per Hardware-Tests bewiesen sind hier drei Dinge, die jeder User bei sich zu Hause im laufenden Betrieb verifizieren kann:
- Meine Kaltstart-Tests unter Volllast (ohne Auszuschalten) haben lückenlos belegt, dass die über deinen Adapter gesendete "deviceAutomation" (autoModel: 8) permanent im Speicher bleibt.
- Im Code der ZenSdkIobDevice.js läuft bei jeder Null-Regelung ein unentprelltes 4-Sekunden-Timeout ab, das den smartMode: 0 und damit den Schreibvorgang unaufhaltsam erzwingt – der Timer wird bei dynamischer Regelung im Hintergrund nie gelöscht.
- Der direkte JSON-Protokoll-Vergleich beweist schwarz auf weiß, dass der Adapter eben NICHT dieselben Befehle wie das originale HEMS nutzt.
Mit deiner Aussage bestätigst du letztlich nur, was ich im ersten Post analysiert habe: Die Behauptungen in der Readme des Adapters basieren nicht auf verifizierten Hersteller-Spezifikationen, sondern sind und waren gutgläubige Annahmen.
Da ich aktuell nicht vor Ort bin, werde ich mein unzensiertes Log-Material oder die MQTT-Struktur nicht teilen. Mein Ziel war es nie, die HEMS-Entwicklung für diesen Adapter voranzutreiben, sondern das reale Verhalten der Hardware aufzuzeigen.
Mindestens eine Bridge zur Analyse einzurichten wird für dich wohl kein Problem darstellen.
Edit / PS 24.08.2026 12:24h - letztes Statement
zur Praxis mit
setDeviceAutomationInOutLimit:
Wer diesen Datenpunkt benutzt und wissen möchte, ob das 4-Sekunden-Szenario für das eigene Setup relevant ist, kann dies für sein spezifisches Steuerungs-Skript und seine Umgebung leicht selbst feststellen.
Ich ermuntere jedensetDeviceAutomationInOutLimit-User dazu, den Datenpunkt einfach mal für mindestens eine Woche über ein kleines Skript lückenlos in eine Textdatei (TXT) zu loggen.Wer am Ende der Woche sieht, wie oft bei wechselndem Wetter, Wolkenfeldern oder dem Takten von Haushaltsgeräten die "0" im Log auftaucht, kann völlig selbstständig und faktenbasiert entscheiden:
Möchte ich mein Regel-Skript so anpassen, dass der Nulldurchgang abgefangen/entprellt wird, oder verzichte ich zum Schutz meiner Hardware lieber komplett auf diesen Datenpunkt?
Oder ist für mich alles gut, weil im Protokoll keine "0" auftaucht? Die Daten im eigenen Log lügen nicht.Nachtrag zu den Kaltstart-Tests beim Hyper:
Tests mit hartem, schnellem Stromtrennen im laufenden Betrieb sind nicht geräteschonend und können eventuell Schäden an der Hardware produzieren (Nachahmung auf eigene Gefahr).
Aber ein schnelles Schreiben von Konfigurationen und ein sauberer Abschluss des Flash-Vorgangs sind in genau diesem Moment physikalisch unmöglich.Es fanden bei mir verschiedene Testreihen statt (mit PV, Hyper und Batterie, aber auch Hyper rein im PV-Betrieb ohne Batterie).
Bei letzterem wurde unter ausreichender PV-Leistung zuerst die AC-Verbindung getrennt, dann der MQTT-Befehl gesendet und unmittelbar danach sofort die PV-Leistung gekappt.
Es bleibt im System schlicht keine Pufferenergie übrig, um in diesem Sekundenbruchteil noch einen persistenten Flash-Schreibvorgang abzuschließen.
Die Werte landen im normalen Betrieb direkt im Speicher.
Für mich ist das Thema hier nun endgültig beendet. Eine schöne Woche noch!
-
@maxclaudi @Bernd1967 Als erstes zu der BatVol Geschichte. Hier kann man zu 99% davon ausgehen das hier ein Copy&Paste Fehler im HA Integration Code vorliegt, der aber zu 100% unproblematisch ist und nichts mit dem ioBroker Adapter zu tun hat. Da möchte ich jetzt mal gerne einen Abschluss haben
Bzgl. der Flash-Problematik: Ich fasse mal zusammen das wir außer einem Haufen Text und Mutmaßungen hier keine weiteren belastbaren und brauchbaren Informationen haben.
Da du ja offensichtlich HEMS auf deinem Hyper jetzt gerade erst laufen hattest, wäre es hilfreich wenn du mir das vollständige MQTT Protokoll einmal zur Verfügung stellen kannst damit ich das einmal nachvollziehen kann. Ich kann mein Hyper 2000 Setup hier gerade nicht ohne viel Aufwand auf Cloud und HEMS umstellen.
@nograx Meine dokumentierte Testreihe als "Haufen Text und Mutmaßungen" abzutun, aber im selben Satz nach meinen vollständigen Protokoll-Daten zu fragen, passt nicht zusammen.
Belastbar und per Hardware-Tests bewiesen sind hier drei Dinge, die jeder User bei sich zu Hause im laufenden Betrieb verifizieren kann:
- Meine Kaltstart-Tests unter Volllast (ohne Auszuschalten) haben lückenlos belegt, dass die über deinen Adapter gesendete "deviceAutomation" (autoModel: 8) permanent im Speicher bleibt.
- Im Code der ZenSdkIobDevice.js läuft bei jeder Null-Regelung ein unentprelltes 4-Sekunden-Timeout ab, das den smartMode: 0 und damit den Schreibvorgang unaufhaltsam erzwingt – der Timer wird bei dynamischer Regelung im Hintergrund nie gelöscht.
- Der direkte JSON-Protokoll-Vergleich beweist schwarz auf weiß, dass der Adapter eben NICHT dieselben Befehle wie das originale HEMS nutzt.
Mit deiner Aussage bestätigst du letztlich nur, was ich im ersten Post analysiert habe: Die Behauptungen in der Readme des Adapters basieren nicht auf verifizierten Hersteller-Spezifikationen, sondern sind und waren gutgläubige Annahmen.
Da ich aktuell nicht vor Ort bin, werde ich mein unzensiertes Log-Material oder die MQTT-Struktur nicht teilen. Mein Ziel war es nie, die HEMS-Entwicklung für diesen Adapter voranzutreiben, sondern das reale Verhalten der Hardware aufzuzeigen.
Mindestens eine Bridge zur Analyse einzurichten wird für dich wohl kein Problem darstellen.
Edit / PS 24.08.2026 12:24h - letztes Statement
zur Praxis mit
setDeviceAutomationInOutLimit:
Wer diesen Datenpunkt benutzt und wissen möchte, ob das 4-Sekunden-Szenario für das eigene Setup relevant ist, kann dies für sein spezifisches Steuerungs-Skript und seine Umgebung leicht selbst feststellen.
Ich ermuntere jedensetDeviceAutomationInOutLimit-User dazu, den Datenpunkt einfach mal für mindestens eine Woche über ein kleines Skript lückenlos in eine Textdatei (TXT) zu loggen.Wer am Ende der Woche sieht, wie oft bei wechselndem Wetter, Wolkenfeldern oder dem Takten von Haushaltsgeräten die "0" im Log auftaucht, kann völlig selbstständig und faktenbasiert entscheiden:
Möchte ich mein Regel-Skript so anpassen, dass der Nulldurchgang abgefangen/entprellt wird, oder verzichte ich zum Schutz meiner Hardware lieber komplett auf diesen Datenpunkt?
Oder ist für mich alles gut, weil im Protokoll keine "0" auftaucht? Die Daten im eigenen Log lügen nicht.Nachtrag zu den Kaltstart-Tests beim Hyper:
Tests mit hartem, schnellem Stromtrennen im laufenden Betrieb sind nicht geräteschonend und können eventuell Schäden an der Hardware produzieren (Nachahmung auf eigene Gefahr).
Aber ein schnelles Schreiben von Konfigurationen und ein sauberer Abschluss des Flash-Vorgangs sind in genau diesem Moment physikalisch unmöglich.Es fanden bei mir verschiedene Testreihen statt (mit PV, Hyper und Batterie, aber auch Hyper rein im PV-Betrieb ohne Batterie).
Bei letzterem wurde unter ausreichender PV-Leistung zuerst die AC-Verbindung getrennt, dann der MQTT-Befehl gesendet und unmittelbar danach sofort die PV-Leistung gekappt.
Es bleibt im System schlicht keine Pufferenergie übrig, um in diesem Sekundenbruchteil noch einen persistenten Flash-Schreibvorgang abzuschließen.
Die Werte landen im normalen Betrieb direkt im Speicher.
Für mich ist das Thema hier nun endgültig beendet. Eine schöne Woche noch!
- Für mich ist das kein Beweis, denn selbst bei einer harten Trennung weiß man nicht was das Gerät exakt macht. Denkbar ist immer noch sowas wie "verliere gerade jede Energiequelle" -> "schreib alles in den Flash" passiert.
- Ja verstehe ich, passe ich gerne an. In der Praxis wird das aber vermutlich nie passieren, jedenfalls konntest du mir immer noch kein Szenario nennen wo das relevant wäre. Bei mir wird der state nur auf 0 gesetzt, wenn ich wirklich will das das Gerät nichts macht.
- Dein Log Material zu teilen sollte doch kein Problem darstellen (eine Device ID ist schnell durch Suchen & Ersetzen ausgetauscht), geht ja nur um die Momente in denen die Befehle geschickt werden damit ich das nachvollziehen kann. Dein JSON-Protokoll-Vergleich ist unvollständig und somit auch nicht zu 100% nachzuvollziehen.
Eine Bridge einzurichten ist halt für mich doch ein Problem. Mein Shelly und auch die Hyper laufen komplett ohne Cloud. Das ist für mich aktuell zu aufwendig alles zu ändern.
Ich habe aufgrund der Thematik mich jetzt noch mal intensiv mit FireSon ausgetauscht. Von ihm kam die Aussage das bis vor ca. 6 Monaten mit einer älteren Firmware tatsächlich in den Flash geschrieben wurde, seit Firmware X (genaue Nummer wusste er gerade nicht) aber nicht mehr. Vom Zendure R&D kriege ich in Kürze noch eine Info.
-
@maxclaudi Ich habe die nötigen Infos mittlerweile von FireSon bekommen, da sie für HA ebenfalls schon versucht das haben umzusetzen. Damit ist das dann möglich die HEMS Variante der Hyper-Steuerung zu nutzen - ich werde dazu heute eine Prerelease Version des Adapters bereitstellen. Die Aussage steht aber weiterhin das die aktuelle Variante nicht in den Flash Speicher schreibt.
-
Teste gerade mit Adapter v5.2.0-alpha.0 und Hyper2000
Laden funktioniert, aber entladen keine Reaktion bei mir.
Unter "mqtt.0.iot.gDa3tb.xxxxxxxx.function.invoke" wird folgendes gesendet bei Entladen mit 100W über setDeviceAutomationInOutLimit:{"arguments":{"outputPower":100,"chargePower":0,"freq":0,"mode":9,"minSoc":100},"function":"hemsEP","messageId":56,"deviceKey":"xxxxxxxx.","timestamp":123456789} -
Teste gerade mit Adapter v5.2.0-alpha.0 und Hyper2000
Laden funktioniert, aber entladen keine Reaktion bei mir.
Unter "mqtt.0.iot.gDa3tb.xxxxxxxx.function.invoke" wird folgendes gesendet bei Entladen mit 100W über setDeviceAutomationInOutLimit:{"arguments":{"outputPower":100,"chargePower":0,"freq":0,"mode":9,"minSoc":100},"function":"hemsEP","messageId":56,"deviceKey":"xxxxxxxx.","timestamp":123456789}@Bernd1967 Kannst du mal deinen inverterMaxLimit checken? Den hats bei mir resettet und dann ging es erst nicht mehr. Wir vermuten aktuell das zumindest der initiale Befehl einige Standard-Werte benötigt -> daher auch das minSoc 100 (was eigentlich 10% sind).
Bei mir lief es heute Nacht auf allen 4 Hypern stabil durch.
-
Ich habe jetzt auch mal die v5.2.0-alpha.0 installiert. Entladen klappt, bei mir geht aber hemsState immer wieder auf 1 auch wenn ich ihn auf 0 setzte. In der App steht er auf "aus"
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden
