Da Zenudure es leider noch nicht geschafft hat, eine Möglichkeit anzubieten den Speicher direkt mit dem Shelly zu verbinden hab ich mich selber mal hingesetzt und ein Skript geschrieben welches dies tut. Alle Infos dazu sind auch hier auf Github.
Getestet habe ich das ganze mit dem SolarFlow 800 Pro.
Vorgesehener Einstellung des Herstellers
Um beide Geräte miteinander zu verbinden, muss sich ein Account bei Zendure und bei Shelly angelegt werden. Danach kann sich in der Zendure-App mit dem Shelly account eingelegt werden und beide Geräte Tauschen alle Einstellungen über das Internet aus. Danach funktioniert die Kommunikation über das Lokale Netzwerk. (Unter der Voraussetzung das beide Geräte im Selben Netzwerk sind und einander erreichen können.) Ist dies nicht möglich funktioniert die Kommunikation immer über die Cloud.
Funktion des Skriptes ohne Cloud
Um diese beiden Accounts nicht zu benötigen und auch eine Funktion ohne Cloud zu realisieren ist es möglich den Shelly so zu programmieren, dass er die Steuerung des Speichers übernimmt.
Das eigentliche Setup sieht so aus das der Speicher die aktuellen Zählerdaten vom Shelly aufruft und seine eigene Leistung anpasst. Alternativ ist es dank der Rest Schnittstelle der Zendure Geräte möglich das Ganze umzudrehen und die aktuellen Werte des Zählers an den Speicher zu übermitteln.
Funktion des Skripts
Das Skript besteht aus verschiedenen Teilen bzw. gibt es mehrere Versionen des Skripts.
Hauptfunktion
Die Hauptfunktion des Skripts fragt die aktuelle Leistung des Speichers ab, vergleicht diesen mit dem aktuellen Zählerwerten und passt die Differenz an und übermittelt diesen neuen Wert an den Speicher.
Erweitertes Verhalten
Um den Speicher im Netzwerk zu finden, gibt es drei Versionen des Skriptes. Bei dem ersten wird die IP-Adresse oder Hostname manuell eingestellt. In dem zweiten wird die Mac-Adresse des Speichers angegeben (dies Funktioniert, nur wenn der Speicher mit dem Access-Point des Shelly verbunden ist und dieser im Repeater Mode ist). Das dritte Skript sucht anhand der Seriennummer selbständig dem Speicher in allen verfügbaren Netzwerken.
Suche des Speichers im Netzwerk
In dem Skript mit der Suche nach dem Speicher werden alle möglichen IP-Adressen in allen verfügbaren Netzwerk via Http-Rest-Call aufgerufen bis der Speicher gefunden wurde. Die gefundene IP-Adresse wird danach im Lokalen Speicher des Skripts gespeichert, um dies beim Nächsten Start sofort wieder zur Verfügung zu haben. Sollte der Speicher über einen längeren Zeitraum nicht erreichbar sein wird dieser erneut automatisch gesucht. Somit ist eine dauerhafte Funktion des Skrips gewährleistet, auch wenn der Speicher eine neue IP-Adresse erhält oder ein neues WLAN-Netzwerk eingerichtet wird.
Einrichtung des Skripts
Um das Skript einzurichten wird auf dem Shelly die Skriptseite http://192.168.33.1/#/scripts aufgefunden und ein neues Skript erstellt. Danach wird der Quellcode des gewünschten Skriptes eingefügt. Anschließend können die benötigten Variablen gesetzt werden.
Die genaue Beschreibung aller Variablen kann auch hier nachgelesen werden.
Benötigte Variablen
Die Folgen Variablen müssen eingestellt werden
- SERIAL: Die Seriennummer des Speichers
- HOST: (Nur im IP-Skript) IP-Adresse oder Hostname des Speichers im Netzwerk
- MAC: (Nur im Mac-Script) Die Mac Adresse des Speichers
Optionale Variablen
Mit den folgenden Variablen lässt sich das Verhalt des Skripts anpassen. Die Standardparameter sind im Normalfall allerdings passend.
- REVERSE: Einstellung ob der Speicher vom Netz laden soll, wenn der verbrauch Negativ ist. Dies kann hilfreich sein, wenn ein zweiter Wechselrichter parallel zum Speicher betrieben wird. Der überschüssige Strom kann dann auch in den Speicher fließen. Ist dies nicht der Fall, kann der Wert auf „false“ gelassen werden.
- MAX_POWER: Maximal abzugebender Strom vom Speicher an das Stromnetz
- MAX_POWER_REVERSE: Maximaler Strom den der Speicher vom Stromnetz bezieht.
- STARTUP_POWER: Stromverbrauch ab welchem der Speicher anfängt Storm in Netz abzugeben. Geringe Mengen werden vom Speicher ignoriert.
- STOP_POWER: Stromverbrauch Obergrenze, ab welchem der Speicher abschaltet und in den Standby-Modus wechselt.
- REVERSE_STARTUP_POWER: Überschussstrom ab welchem der Speicher anfängt Storm in Netz abzugeben. Geringe Mengen werden vom Speicher ignoriert.
- REVERSE_STOP_POWER: Überschussstrom Untergrenze, ab welchem der Speicher abschaltet und in den Standby-Modus wechselt.
- DEBUG: Aktiviert erweitertes Logging zum Bessern Verständnis des Skriptes oder zur Fehlersuche.
Erweiterte Variablen
Die folgenden Parameter können angepasst werden, sind allerdings schon gut gewählt. Es kann sein das bei Falschen werten eine Funktion oder zumindest eine gute Funktion des Skripts nicht mehr gewährleistet ist.
- INTERVAL_RUN_MAIN_SCRIPT: Zeitintervall in Sekunden in welchem die Leistungssteuerung ausgeführt wird.
- INTERVAL_RESOLVE_MAC: (Nur im Mac-Skript) Zeitintervall in Sekunden in dem versucht wird die Mac-Adresse zur IP-Adresse aufzulösen.
- INTERVAL_SCAN_NETWORK: (Nur im Find-Skript) Zeitintervall in Sekunden in dem versucht wird das Gerät zu finden (wenn es nicht erreichbar ist).
- INTERVAL_DEVICE_OFFLINE: (nur im Find-Skript) Zeitintervall, in welchem der Speicher als nicht erreichbar angesehen wird und ein erneuter Scan ausgeführt wird.
- CHECK_WIFI_AP, CHECK_WIFI_STA, CHECK_ETH: Mit diesen Variablen wird angegeben welche Netzwerke nach dem Speicher gescannt werden sollen. Das Abschalten der nicht verwendeten beschleunigt den Scan.
Nach dem Einrichten der Variablen muss das Skript nur noch gestartet werden und der Autostart des Skript eingestellt werden.
Erweiterungen
Verbesserung des Skripts um Fehlverhalten des Speichers auszugleichen.
Nach einiger Laufzeit des Skripts sind mir einige Probleme aufgefallen, welche zwar eher auf ein nicht ganz optimales Verhalten des Speicher zurückzuführen sind weniger auf einen Fehler im Skript. Nichtsdestoweniger könnten dies verbessert werden. Das Verhalten des Speichers kann hier begutachtet werden. Dies ist ein Testaufbau mit eingerichtetem Skript.
Speicher leer bei hoher Leistung
Näher sich der Speicher dem Ende seiner Kapazität und sinkt die Batteriespannung unter einen bestimmten Wert, wird die Batterie nachträglich wieder vom Netz geladen, da die aktuelle Ermittlung der Restkapazität wohl falsch war.
Hier könnte es von Vorteil sein die Leistung etwas zu Drosseln, wenn sich der Kapazität dem Ende neigt.
Stromabgabe bei geringer Solarleistung
Wird der Speicher Morgens wieder geladen und es könnte bereits wieder Strom abgegeben werden. Toggelt der Speicher immer wieder zwischen dem Zustand einspeisen mit voller Leistung und abschalten da er gelehrt ist. Hier könnte es hilfreich sein die geforderte Leistung geringer als wirklich einzustellen, um dies zu vermeiden. Allerdings sollte der Speicher hier auch wieder in den Bypass Modus wechseln was aber nicht immer der Fall ist…
Überwachung und Neustart des Skripts
Da es nicht ausgeschlossen ist dass, das Skript mal abstürzt, wegen eines Fehlers, kann hier ein zweites Skript installiert werden, welches den Zustand des ersten Skripts überwacht und bei einem Absturz neu startet.
Online Monitoring
Da der Speicher leider keine Statistiken anbietet, müssen diese zusätzlich ermittelt und berechnet werden. Dies kann gut mit Homassistant oder einem anderen Tool gemacht werden. Wer dies allerdings nicht hat oder aufsetzten möchte, kann mit dieser externen online Monitoring Seite (Github hier) und diesem Skript, welches die Daten ermittelt dies realisieren.
Verbindung des Speichers mit dem Heim-WLAN
Ach ja das noch. Um den Speicher mit dem Heim-WLAN zu verbinden, sollte eigentlich die Hersteller App verwendet werden. Dies ist allerdings auch mit diesem Skript oder dieser App möglich. Somit muss auch hierfür kein Account erstellt werden.