Zendure Solarflow in Fhem via MQTT einbinden

Begonnen von Reinhart, 15 Februar 2024, 17:29:53

Vorheriges Thema - Nächstes Thema

RalfP

Hallo blofield,

sofern Shadow's Tipp nicht hilft, ist es für mich irgendwie wieder ein Zeichen, dass das Publishing auf den EU Server nicht funktioniert. Habe ich leider nie testen können.

Verstehen würde ich es aber nicht, da die App auch nur über MQTT sendet. Die funktioniert ja, oder?

Sofern du deine App auf einem Mac installiert hättest (geht bei macOS  :D ) und gleichzeitig Wireshark mit Filter mqtt lauschen lässt, müsstest du die Kommunikation theoretisch sehen können, wenn du in der App den Output veränderst. Wäre interessant, was da übermittelt wird.

Du darfst diesen Dateianhang nicht ansehen.

Grüße Ralf

RalfP

Hallo blofield,

noch etwas:

Ich nehme an, du hast einen MQTT2_CLIENT in Fhem mit meinem Vorschlag konfiguriert (76_Zendure.pm), wie auch ein Login und damit den AccessToken generiert. Bekommst du Daten in deine Readings geschrieben?

In der App darfst du den zweiten Zendure Account, welchen du auch nun in Fhem benutzt, nicht wieder anmelden! Der Token in Fhem wird damit ungültig. Sollte dies passieren, musst du einen neuen Token erzeugen, bzw. im MQTT2_Client mit connectFn Konfiguration (ZendureUtils.pm) einmal disconnecten und, nach 10s Warten, wieder connecten. Ein Token wird dann neu erzeugt.

Ich hatte festgestellt, das wenn man nach dem Login und connect des MQTT2_Client, die App wieder (mit gleichem Account) startet. Der MQTT2_Client zwar immer noch Daten empfängt, aber das Publish nicht funktioniert.

Andersherum ist es ganz cool, beobachte mit dem automatisch konfigurierten MQTT2_Client über connectFn, dass nach erfolgreichem Connect der Nutzer in der App abgemeldet wird.


Übrigens: Wenn du mit deinem Hauptaccount in der Zendure App den Output veränderst, sollte dies auch in den iot Topics sichtbar werden. So ungefähr:

Du darfst diesen Dateianhang nicht ansehen.

Ich gehe mal davon aus, das beim Hyper2000 der Wert sich auch 'outputLimit' nennt.

Grüße Ralf

blofield

Hallo Shadow3561 & RalfP,

erstmal vielen Dank für die schnelle Unterstützung!
Es lag an dem von Shadow3561 angesprochenen, eingstellten Modi in der App.
Ich habe in der App alle Modi ausgeschaltet, dann hat es sofort funktioniert, auch über den EU Server.

Den Hyper 2000 kann ich jetzt über inputLimit & outputLimit steuern, ich ergänze jeweils mit dem passenden acMode 1 || 2.

Hatte gestern leider Probleme mit meinem Hostsystem, nach dem Neustart hat aber leider nichts mehr funktioniert.
Ich musste mir einen neuen Access-Token erstellen, damit es wieder steuerbar war.
Meine Vermutung war allerdings, dass der Token ja noch Gültigkeit haben müsste, da ich mich nicht in der APP angemeldet hatte.
@RalfP ist das Setup rebootfähig?

Grüße
blofield

RalfP

Hallo blofield,

ja, ich selbst habe mir einen Token für meine Mosquitto Bridge config vor langer Zeit erzeugt und er funktioniert immer noch. Auch nach mehrerem Neustarts von Mosquitto.

Auch wenn du einen eigenen MQTT2_CLIENT angelegt hast, klappte es.

Wenn du mit connectFn (ZentureUtils.pm) im MQTT2_ClIENT arbeitest, wird mit jedem Connect ein neuer Token erzeugt. Da währest du auf der sicheren Seite.

Grüße Ralf

Reinhart

Danke das hier so ein tolles und funktionales Modul entwickelt wurde!
Ich habe das jetzt alles so nachgebaut und es funktioniert alles genauso wie beschrieben. Ich bin notgedrungen am EU Server und auch da klappt alles, speziell die Befehlsausgabe und somit das MQTT Write. EU Server ist deshalb für mich so wichtig, weil ich einen ACE1500 mit dynamischen Stromtarif nutze. Hier ist es zwingend notwendig in der App im Profil das Land exakt einzustellen, sonst werden falsche Börsenpreise geladen. Jedes Land hat seine eigenen Börsentarife wegen der unterschiedlichen Anteile von Nachfrage, Wind, PV und Wasser!
Da ich zur Zeit alles mit dem nachgeschaltenen Hoymiles Wechselrichter steuere habe ich zur Zeit kein Einsatzgebiet für diesen MQTT Write Zugang des Zendure Solarflow, aber wer weiß was mir noch alles einfällt.

Im Augenblick habe ich meine Anlage so verschaltet mit zusätzlicher Möglichkeit über ein externes Netzteil den Akku zu laden. Letzteres kann jetzt fast wegen dem ACE 1500 entfallen weil der das auch kann.
Mit diesem Modul ergeben sich natürlich völlig neue Möglichkeiten, vor allem weil die dynamischen Börsendaten nicht immer deckungsgleich von meinem Anbieter aWATTar sind. Da der ACE 1500 jedoch noch keine MQTT Daten liefert muss man wohl noch etwas auf eine Zendure Unterstützung warten.
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

RalfP

@Reinhard: Das ist mal eine echt umfangreiche Installation  :)

Habe mal noch eine Frage an die Nutzer, die einen Energieplan eingestellt haben: Steht bei euch etwas in den Werten "smartMode" und "smartPower". Verändert sich "smartPower" und wenn, wie und in welcher Abhängigkeit (wenn erkennbar)?

Vielen Dank
Ralf

Shadow3561

Moin,
ich versuche nun schon das ganze Wochenende die Energiepläne übers Modul zu setzen, bekomme es aber nicht hin.
Eigentlich sollte es über "autoModel" funktionieren.

autoModel:7,9,10 iot/<productKey>/<deviceKey>/properties/write {"properties":{"autoModel":$EVTPART1}}vielleicht mag es mal jemand probieren der ein anderes Zendure Gerät hat.

Beim rumprobieren habe ich noch hinbekommen die Entladegrenze zu setzen. Hier ist ganz interessant, dass man den minSoc bis 99% sehen kann.

min_Soc:990,900,800,700,600,500,400,300,200 iot/<productKey>/<deviceKey>/properties/write {"properties":{"minSoc":$EVTPART1}}
Mit freundlichen Grüßen

RalfP

Hallo,

leider hab ich dies nie probiert. Hab ein produktives System mit eigener Regelung. Ich könnte mir vorstellen, das es etwas mit der Abfrage "Speichern?" zu tun hat. Versuche doch mal verbose 5 im MQTT2 Client und schneide den kompletten Traffic mal mit, während du in der Zendure App den Energieplan änderst und speicherst. Vielleicht ist etwas zu sehen.

Grüße
Ralf

rabehd

Hallo,
ich habe Hyper 2000 (aktuell ein Speicher, 2. Speicherist im Zulauf). Ich habe zum Test beide Wege zur Integration in FHEM ausprobiert.

Zum einen wie in Eingangspost beschrieben. Im MQTT2_DEVICE vermisse ich Werte wie bisher erzeugte Energie und im Akku befindliche Energie. Werden diese Werte nicht übermittelt.

Zum anderen per 76_Zendure.pm. Im MQTT2_DEVICE gibt es eine Menge Readings, die aber alle nicht mit mir sprechen. Gibt es hier eine Liste als Beschreibung? Was kann ich mit den Set-Befehlen tun?

Danke


Auch funktionierende Lösungen kann man hinterfragen.

RalfP

ZendureUtils

Die Werte betreffs erzeugter Energie und Akku werden leider nicht per MQTT übermittelt. Die werden über https:// per POST abgefragt, natürlich nur mit den entsprechenden Credenciales. Als Antwort kommt ein riesiges JSON, mit den ganzen Tagesdaten. Leider hatte ich bisher keine Zeit das einzubinden.

76_Zendure

Dient nur zur Erzeugung des Accesstokens und einiger Login Daten für einen eigenen MQTT Client oder für eine Bridge Konfiguration in Mosquitto o.ä. Über GET ConfigProposal bekommst du entsprechende Beispiele angezeigt.

PS: Der Token ist immer nur ca. 30 Tage gültig.

Grüße
Ralf

rabehd

Selbstverständlich habe ich einen eigenen MQTT Client und ein MQTT2_DEVICE.
Deshalb ja ich meine Frage zu den vielen Readungs, die für mich nicht selbsterklärends sind.

Zitat von: rabehd am 13 April 2025, 17:16:44Gibt es hier eine Liste als Beschreibung? Was kann ich mit den Set-Befehlen tun?
Auch funktionierende Lösungen kann man hinterfragen.

RalfP

Ich nehme an, du sprichst über die Daten, die das MQTT Device liefert. Bitte schau unter https://github.com/RP-Develop/Zendure in die Quellenangaben. Unter https://github.com/Zendure/developer-device-data-report wird man bei Zendure fündig. Die Erläuterungen beziehen sich zwar auf die Zendure Developer API, trifft aber zu großen Teilen auch auf die Daten zu, die über den MQTT Zugang, wie hier genutzt, kommen. Mit dem Zugangsdaten im Fhem Modul wird ein App Zugang simuliert. Deshalb ist es auch möglich Einstellungen zu schreiben, was mit dem Zendure Developer MQTT (derzeit) nicht möglich ist.

Zu den SET's (definiert in setList):
Output: Setzt den Wert der Ausgangsleistung. In der App unter Netzein- & Ausgangseinstellungen. 
Update: Aktualisiert alle Daten.
Bypass: 0,1,2 setzt die Bypasseinstellung. 0 = Auto. Wert in passMode zu lesen.
autoRecover: 0,1 ist der Schalter, um den Bypass am nächsten Tag wieder auf Auto zu schalten.
Buzzer: 0,1 schaltet "Sounds" ein/aus
minSoc: Akkueinstellung, lässt sich im Bereich von 10% (=100) bis 50% (=500) einstellen.

Erläuterungen sind jetzt auch in der Wiki unter https://github.com/RP-Develop/Zendure

Grüße
Ralf

rabehd

Danke für die Erklärungen.
Das bedeutet, dass 76_Zendure.pm die "bessere" Lösung ist.

Zitat von: RalfP am 13 April 2025, 18:35:52Als Antwort kommt ein riesiges JSON, mit den ganzen Tagesdaten. Leider hatte ich bisher keine Zeit das einzubinden.
Das verfügbar zu haben wäre toll. Kann ich da unterstützen?
Auch funktionierende Lösungen kann man hinterfragen.

RalfP

Nun ja, das 76_Zendure.pm hatte ich ursprünglich als Erstes fertig, da ich in meinen Mosquitto eine Bridge konfiguriert hatte und ich nur den Token benötigte. Mir war es aber leid, jeden Monat den Token dort händisch zu ersetzen. Darum habe ich dann den Zusatz für das MQTT2_CLIENT Modul geschrieben. Rudi gab mir den Tipp mit connectFn. Mit SET connect, wird automatisch immer ein neuer Token erzeugt und als MQTT ClientID eingesetzt.

Derzeit lasse ich immer Montags mit einem at eine neue Verbindung aufbauen:
*05:00:00 { if ($wday == 1) { fhem ("set Zendure.MQTT disconnect; sleep 40; set Zendure.MQTT connect") } }

Grüße
Ralf

Shadow3561

Zitat von: RalfP am 14 April 2025, 15:08:16Die Werte betreffs erzeugter Energie und Akku werden leider nicht per MQTT übermittelt. Die werden über https:// per POST abgefragt, natürlich nur mit den entsprechenden Credenciales. Als Antwort kommt ein riesiges JSON, mit den ganzen Tagesdaten. Leider hatte ich bisher keine Zeit das einzubinden.

Mich würde auch interessieren wie man an die Daten kommt.
Das ist das einzige was mir noch fehlt.
hast du evtl. einen Hinweis oder sogar ein Beispiel?

Mit freundlichen Grüßen