Zendure SmartFlow MQTT

Seit gestern läuft mein Balkonkraftwerk, die beiden Platten hängen an einem SmartFlow, aktuell mit einem Akku, der dann in einen Hoymiles 2250 einspeist.

Mit etwas gefummel habe ich es geschafft mich mit dem MQTT Server von Zendure zu verbinden. Dafür muss man sich per JSON request registrieren und bekommt dann Zugangsdaten (appkey, appsecret).

address mqtt.zen-iot.com:1883
topic appkey/# both 2
remote_username "appkey"
remote_password "appsecret"
clientid = "appkey"

Also flux einen MQTT CLient angelegt, weiter rumprobiert und mit dem korrekten topic kommen tatsächlich Daten, leider nur im Debug des MQTT Client Sockets und der MQTT Client Instanz.

Es wird nie die Value-Variable geschrieben bzw. Werte angelegt, egal ob String, JSON oder Binär. Zumindest bei Binär oder String würde ich erwarten, das, egal welcher „Müll“ kommt, er auch reingeschrieben wird, damit ich ihn selber aufbereiten kann.

Letzte Idee, im MQTT Configurator geschaut, dort kann ich den Client einstellen und siehe da, es sind ganz schön viele Daten:
grafik

die configs sind sehr hilfreich, da sie Einheit und einiges mehr liefern:
grafik

Die Werte kommen jede Minute, eine Menge unnötige Infos, die sich eigentlich nicht mehr ändern.

Immerhin kommten auch die relevanten Werte, teilweise alle paar Sekunden, mehr oder weniger wie in der App.

grafik

Dann kann ich jetzt mal Werte aufzeichen und mein IPSview erweitern. Und wenn ich alle Werte verstanden habe, dann ist Brownson vielleicht soweit und es gibt im IPSview auch eine „Energiefluss-Kachel“ :smiley: .

Falls jemand von euch auch einen SmartFlow anbinden möchte, kann ich gern helfen.

Ich habe heute auf eine direkte Anbindung umgestellt. Dafür benötigt man am einfachsten einen PIzeroW und kann dann mit

auf einen lokalen MQTT Server (hier Symcon) umstellen. Das passiert einmalig, danach sendet der SF direkt und ohne Cloud-Anbindung. Dadurch ist die App natürlich nur noch über BT und eingeschränkt nutzbar.

Aber dafür kann man selber steuern, hat einen deutlich besseren Einfluss und die Reaktionszeit ist sehr gut. Dann hoffe ich mal auf morgen, da soll es wieder Sonne geben, um die überschüssige Leistung vernünftig einzuspeisen.

Es ist alles etwas tricky, da u.a. das Topic am Anfang ein Sonderzeichen hat. Außerdem muss man den SF einmal lieb bitten, aber danach ist er auskunftsfreudig :slight_smile: .

Mein Bastel-Beispiel zur Zeit:

Hallo @ralf ,
die Umstellung auf BT hat super funktioniert. Nur wie steuerst Du jetzt den SolarFlow?
Ich wollte z.B. das outputLimit setzen, bekomms aber einfach nicht hin.

Gruß

Jürgen

Ich nutze folgendes externe Script, abgelegt als phpMQTT.php im Scripte-Ordner:

Und dann habe ich mir ein eigenes Script angelegt, dass den gewünschten Wert aus einer Variablen liest, die ich im IPSview verändern kann. An der „Vollautomatisierung“ arbeite ich noch. Scheinbar wird auch der minSoc Wert nicht selbständig berücksichtig, zumindest hatte ich jetzt drei Tage 0% als verbliebene Ladung.

<?php
require('phpMQTT.php');

$server = 'localhost';     // change if necessary
$port = 1883;                     // change if necessary
$username = '';                   // set your username
$password = '';                   // set your password
$client_id = 'phpMQTT-publisher'; // make sure this is unique for connecting to server - you could use uniqid()

$outputLimit = GetValue(25146); // Variable mit dem Sollwert

$topic = 'iot/73bkTV/<SF_DEVICE_ID>/properties/write';
$value = '{"properties": { "outputLimit": '.$outputLimit.' }}';

$mqtt = new Bluerhinos\phpMQTT($server, $port, $client_id);

$debug = true;               

if ($value) {
    if ($mqtt->connect(true, NULL, $username, $password)) {
        if ($debug)
            IPS_LogMessage(IPS_GetName($_IPS['SELF']), "MQTT connect, topic " . $topic . ", value " . $value);
        $mqtt->publish($topic, $value, 0, false);
        $mqtt->close();
    }
}

Das sieht aktuell im IPSview erstmal so aus:

außerdem zeichne ich nahezu alle Werte auf, um beurteilen zu können, was der SF überhaupt macht.

Gelernt habe ich von Reinhard noch, dass die Wechselrichter auch an ihrem EIngang begrenzen. Ich habe mich immer gewundert, warum nur 200 W eingespeist wurden. Ich hatte den WR auf 600 W stehen, da es ein HMT-2250 ist, drei Eingänge, alo geteilt durch 3 macht 200 W.

Mit deutlich höheren Werten ging es heute schon mal besser.

Update:
SF inputLimit nimmt der SF nicht an.

Und wenn der Bypass anspringt, also der Akku voll (hier 98%) ist, dann ist ihm auf das outputLimit egal und die dann eigehende Leistung von den Modulen geht direkt an den WR.

Ich hatte den WR vorhin auf 1.200 W stehen, dann geht die Leistung je Eingang voll durch.

Morgen kommt wahrscheinlich der Zweirichtungszähler, mein vorhandender kann nur Verbrauch. Dann werde ich wohl noch etwas mehr in Richtung Nulleinspeisung versuchen.

Ah Super. Werde das dann gleich mal testen.

Vielen Dank erstmal

So. Auskunftsfreudig ist der SF ja. Aber ich kann keine Werte setzen. Von der Cloud hab ich ihn getrennt. Im heimischen WLAN ist er aber noch.
Hast Du eine Idee?

image

    $topic = 'iot/73bkTV/<SF_DEVICE_ID>/properties/write';
    $value = '{"properties": { "outputLimit": '.$variable.' }}';

in $variable steht der Wert, also wie oben im Script-Beispiel.

Genau das geht auch im MQTTexplorer, aber vorsicht, die gesendeten Werte haben noch ein Sonderzeichen vorne, da kannst du nicht hin senden.

Ist das Bild wirklich der komplette Baum oder ist da noch ein Pfeil drüber?

grafik

Das Script von Reinhard musst du dann nicht mehr laufen lassen, das erzeugt die solarflow-hub Struktur. Über den MQTT Konfigurator im Symcon kannst du die gewünschten Instanzen anlegen.

Jetzt versteh ich gar nichts mehr. Muss ich in solarflow-bt-manager.py was anpassen?
Da ich es unter Windows läuft habe ich dies im Skript angepasst:

WIFI_PWD = os.environ.get('WIFI_PWD',"abcdef")
WIFI_SSID = os.environ.get('WIFI_SSID',"WLAN abcd")
SF_DEVICE_ID = os.environ.get('SF_DEVICE_ID',"meine ID")

Dann starte ich:

python solarflow-bt-manager.py -d -w "WLAN abcd" -b 192.168.1.18:1888

Ausgabe ist dann:

Disconnecting Solarflow Hub from Zendure Cloud
2023-10-24 14:34:56,896:INFO: Found device: 94:C9:xx:42:xx:xx: ZenP1_52
2023-10-24 14:35:10,475:INFO: Services:
2023-10-24 14:35:10,475:INFO: 00001801-0000-1000-8000-00805f9b34fb (Handle: 1): Generic Attribute Profile
2023-10-24 14:35:10,476:INFO: 00001800-0000-1000-8000-00805f9b34fb (Handle: 5): Generic Access Profile
2023-10-24 14:35:10,476:INFO: 0000a002-0000-1000-8000-00805f9b34fb (Handle: 12): Vendor specific
2023-10-24 14:35:10,477:INFO: 00112233-4455-6677-8899-aabbccddeeff (Handle: 18): Unknown
2023-10-24 14:35:10,486:INFO: {"iotUrl": "192.168.1.18", "messageId": "1002", "method": "token", "password": "password", "ssid": "WLAN abcd", "timeZone": "GMT+02:00", "token": "abcdefgh"}
2023-10-24 14:35:10,608:INFO: Setting IoTURL connection parameters - disconneect

Im MQTT Explorer tut sich garnichts
Wenn ich dann das Skript starte:

python solarflow-bt-manager.py -i -b 192.168.1.18:1888

kommen Daten.
Diese Ansicht bekomme ich nicht
grafik

versuch es mit 1883, ist doof, war bei mir auch schon belegt, aber der SF kann das scheinbar nicht, obwohl Reinhards Script es suggeriert.

Und das

python solarflow-bt-manager.py -i...

brauchst du nicht mehr. SF sendet selber an den MQTT Server, das dauert manchmal etwas.

Argh … moment

du musst einmal senden an (Updated):

iot/73bkTV/{sf_device_id}/properties/read
{„properties“: [„getAll“]}

danach sendet er regelmäßig selbstständig.

So. Musste erstmal viele Instanzen umbiegen. Er sendet. Aber nur:

Im MQTT Explorer sieht es jetzt so aus:
image

1 „Gefällt mir“

Hallo Ralf,

nach und nach kamen einige Werte. Aber bei weitem nicht so viele wie mit dem py-Skript.
Muss mal abwarten wenn die Sonne mal scheint.
Aufgefallen ist mir mit dem py-Skript das da zwei Variablen verdreht sind:
„outputPackPower“ scheint Laden zu sein und „packInputPower“ scheint Entladen zu sein

Vielen Dank

Das Script nutze ich nur noch zum umschalten auf die Cloud, falls es Updates gibt. Wobei ich da vorsichtig sein werde und abwarte, ob im Discord jemand das Update macht. Wenn hinterher ein lokaler MQTT-Server nicht mehr möglich ist bzw. die Art der Konfiguration geändert wird, dann wäre es doof.

Ich habe gerade einen zweiten Akku angesteckt und auch die Daten kamen sofort und automatisch.

Bei mir gibt es inzwischen
grafik

die habe ich aber alle über den MQTT-Konfigurator im Symcon angelegt, da vor dem ersten / noch ein Sonderzeichen ist, das ich nicht eingeben konnte.

Die wichtigsten Daten kommen über …/report

und dort in …/properties

Und das ist deutlich mehr, wie über das Script von Reinhard.

Bei mir scheint sehr ordentlich die Sonne, also das richtige Wetter zum Werte prüfen, aber leider bin ich nicht fit und kann nicht wirklich viel machen.

Na dann erstmal gute Besserung.

Und das:

Ist das bei Dir auch so?

Ich würde es aus Sicht des SF betrachten und dann ist es korrekt, output zur Ladung der Akkus und input zum Einspeisen in den SF und der dann in den WR.

Kurze Zwischeninfo

Die vielen Datenpunkte kamen erst nach einem Symcon Neustart.
Dachte ich bin besonders Schlau und nehme den HMS-800W. Der ist aber noch nicht openDTU kompatibel. Hab ihn gestern gegen ohne W getauscht und jetzt gibts bei uns kein Sonne :frowning:

Die aktuelle Wetterlage hilft nicht wirklich beim analysieren.

Hallo Ralf,
hab mich heute mal zum Update des Zendure getraut.
Gab einige Akku Optimierungen und vom Solarflow werden jetzt beide Solareingänge getrennt angezeigt. MQTT funktioniert noch!!!

Gruß
Jürgen

Da haben wir beide heute das gleiche getan :slight_smile: .

Ich hatte vorher im Discord gefragt und die Aussage war, geht noch, aber alles wieder aktivieren. Das hat auch geklappt.

Aber hier war so wenig Sonne, dass ich nicht sinnvoll prüfen kann.

Gibt es im Discord einen extra Kanal für Zendure?

Ja, aber wenig los dort.