# Zendure SmartFlow MQTT

**URL:** <https://community.symcon.de/t/zendure-smartflow-mqtt/134538>\
**Category:** Bastel-Ecke\
**Created:** [17. September 2023 um 11:26 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538 "2023-09-17T11:26:47Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![ralf](https://community.symcon.de/user_avatar/community.symcon.de/ralf/32/93_2.png) [@ralf](https://community.symcon.de/u/ralf)\
**Post date:** [17. September 2023 um 11:26 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/1 "2023-09-17T11:26:47Z")

</div>

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).

```auto
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](https://community.symcon.de/uploads/default/original/3X/2/7/2754bbf8ff2e2d8699f2fc89d9dc31d9db31f7a0.png)

die configs sind sehr hilfreich, da sie Einheit und einiges mehr liefern:  
 ![grafik](https://community.symcon.de/uploads/default/original/3X/0/d/0d077a31cbf086be950f78ef9bfe13eceadcd954.png)

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](https://community.symcon.de/uploads/default/original/3X/f/5/f56b1ba27d4f7415121ef037a6d30da00033a14f.png)

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“ 😃 .

---

<div class="post-metadata">

**Author:** ![ralf](https://community.symcon.de/user_avatar/community.symcon.de/ralf/32/93_2.png) [@ralf](https://community.symcon.de/u/ralf)\
**Post date:** [20. Oktober 2023 um 15:50 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/3 "2023-10-20T15:50:15Z")

</div>

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

> **[GitHub - reinhard-brandstaedter/solarflow-bt-manager: A tool to connect to...](https://github.com/reinhard-brandstaedter/solarflow-bt-manager)**
>
> A tool to connect to Zendure's Solarflow hub to retrieve telemetry data - GitHub - reinhard-brandstaedter/solarflow-bt-manager: A tool to connect to Zendure's Solarflow hub to retrieve tele...

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 🙂 .

Mein Bastel-Beispiel zur Zeit:

 ![grafik](https://community.symcon.de/uploads/default/original/3X/9/5/95a4fd2e2cf416267c95714dff8a795a42642048.png)

---

<div class="post-metadata">

**Author:** ![jnicke](https://community.symcon.de/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@jnicke](https://community.symcon.de/u/jnicke)\
**Post date:** [23. Oktober 2023 um 14:21 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/4 "2023-10-23T14:21:40Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![ralf](https://community.symcon.de/user_avatar/community.symcon.de/ralf/32/93_2.png) [@ralf](https://community.symcon.de/u/ralf)\
**Post date:** [23. Oktober 2023 um 16:04 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/5 "2023-10-23T16:04:05Z")

</div>

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

> **[GitHub - bluerhinos/phpMQTT: a simple php class to connect/publish/subscribe...](https://github.com/bluerhinos/phpMQTT)**
>
> a simple php class to connect/publish/subscribe to a MQTT broker - GitHub - bluerhinos/phpMQTT: a simple php class to connect/publish/subscribe to a MQTT broker

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.

```auto
<?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:

 ![grafik](https://community.symcon.de/uploads/default/original/3X/1/0/10297b34ed98f1ba477364ae16ad040cbdc198aa.png)

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.

---

<div class="post-metadata">

**Author:** ![jnicke](https://community.symcon.de/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@jnicke](https://community.symcon.de/u/jnicke)\
**Post date:** [23. Oktober 2023 um 17:01 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/6 "2023-10-23T17:01:44Z")

</div>

Ah Super. Werde das dann gleich mal testen.

Vielen Dank erstmal

---

<div class="post-metadata">

**Author:** ![jnicke](https://community.symcon.de/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@jnicke](https://community.symcon.de/u/jnicke)\
**Post date:** [24. Oktober 2023 um 09:58 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/7 "2023-10-24T09:58:36Z")

</div>

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](https://community.symcon.de/uploads/default/original/3X/6/2/6286d092afd77d3bd42683bc75e8b4c922afc402.png)

---

<div class="post-metadata">

**Author:** ![ralf](https://community.symcon.de/user_avatar/community.symcon.de/ralf/32/93_2.png) [@ralf](https://community.symcon.de/u/ralf)\
**Post date:** [24. Oktober 2023 um 11:59 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/8 "2023-10-24T11:59:25Z")

</div>

```auto
    $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](https://community.symcon.de/uploads/default/original/3X/6/0/60fd99ec6106121d2f134840b34c338a933c2430.png)

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.

---

<div class="post-metadata">

**Author:** ![jnicke](https://community.symcon.de/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@jnicke](https://community.symcon.de/u/jnicke)\
**Post date:** [24. Oktober 2023 um 12:41 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/9 "2023-10-24T12:41:29Z")

</div>

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:

```auto
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:

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

```

Ausgabe ist dann:

```auto
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:

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

```

kommen Daten.  
Diese Ansicht bekomme ich nicht  
 ![grafik](https://community.symcon.de/uploads/default/original/3X/6/0/60fd99ec6106121d2f134840b34c338a933c2430.png)

---

<div class="post-metadata">

**Author:** ![ralf](https://community.symcon.de/user_avatar/community.symcon.de/ralf/32/93_2.png) [@ralf](https://community.symcon.de/u/ralf)\
**Post date:** [24. Oktober 2023 um 12:52 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/10 "2023-10-24T12:52:44Z")

</div>

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

```auto
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.

---

<div class="post-metadata">

**Author:** ![jnicke](https://community.symcon.de/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@jnicke](https://community.symcon.de/u/jnicke)\
**Post date:** [24. Oktober 2023 um 14:59 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/11 "2023-10-24T14:59:55Z")

</div>

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

 ![image](https://community.symcon.de/uploads/default/original/3X/0/2/0205a83d40f95aa5a2af568f998f12cd3ea647ca.png)

Im MQTT Explorer sieht es jetzt so aus:  
 ![image](https://community.symcon.de/uploads/default/original/3X/5/0/50447f16071002f2359aa2a0227b0439a022045f.png)

---

<div class="post-metadata">

**Author:** ![jnicke](https://community.symcon.de/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@jnicke](https://community.symcon.de/u/jnicke)\
**Post date:** [25. Oktober 2023 um 07:34 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/12 "2023-10-25T07:34:31Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![ralf](https://community.symcon.de/user_avatar/community.symcon.de/ralf/32/93_2.png) [@ralf](https://community.symcon.de/u/ralf)\
**Post date:** [25. Oktober 2023 um 11:11 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/13 "2023-10-25T11:11:03Z")

</div>

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](https://community.symcon.de/uploads/default/original/3X/d/4/d4f8d477fbbe00848c6e56188d62e7efa44fc6ad.png)

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

 ![grafik](https://community.symcon.de/uploads/default/original/3X/1/1/11abf0094f637afa752c0e076b342e98e1dc01d2.png)

und dort in …/properties

 ![grafik](https://community.symcon.de/uploads/default/original/3X/4/6/466294b94d2eec5138c149b1d7545ac74b8faaa1.png)

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.

---

<div class="post-metadata">

**Author:** ![jnicke](https://community.symcon.de/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@jnicke](https://community.symcon.de/u/jnicke)\
**Post date:** [25. Oktober 2023 um 11:18 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/14 "2023-10-25T11:18:42Z")

</div>

Na dann erstmal gute Besserung.

Und das:

> [@jnicke](#):
>
> Aufgefallen ist mir mit dem py-Skript das da zwei Variablen verdreht sind:  
> „outputPackPower“ scheint Laden zu sein und „packInputPower“ scheint Entladen zu sein

Ist das bei Dir auch so?

---

<div class="post-metadata">

**Author:** ![ralf](https://community.symcon.de/user_avatar/community.symcon.de/ralf/32/93_2.png) [@ralf](https://community.symcon.de/u/ralf)\
**Post date:** [25. Oktober 2023 um 11:27 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/15 "2023-10-25T11:27:17Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![jnicke](https://community.symcon.de/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@jnicke](https://community.symcon.de/u/jnicke)\
**Post date:** [27. Oktober 2023 um 13:18 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/16 "2023-10-27T13:18:05Z")

</div>

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 ☹

---

<div class="post-metadata">

**Author:** ![ralf](https://community.symcon.de/user_avatar/community.symcon.de/ralf/32/93_2.png) [@ralf](https://community.symcon.de/u/ralf)\
**Post date:** [27. Oktober 2023 um 14:58 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/17 "2023-10-27T14:58:04Z")

</div>

Die aktuelle Wetterlage hilft nicht wirklich beim analysieren.

---

<div class="post-metadata">

**Author:** ![jnicke](https://community.symcon.de/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@jnicke](https://community.symcon.de/u/jnicke)\
**Post date:** [26. November 2023 um 14:02 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/18 "2023-11-26T14:02:33Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![ralf](https://community.symcon.de/user_avatar/community.symcon.de/ralf/32/93_2.png) [@ralf](https://community.symcon.de/u/ralf)\
**Post date:** [26. November 2023 um 14:06 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/19 "2023-11-26T14:06:04Z")

</div>

Da haben wir beide heute das gleiche getan 🙂 .

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.

---

<div class="post-metadata">

**Author:** ![jnicke](https://community.symcon.de/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@jnicke](https://community.symcon.de/u/jnicke)\
**Post date:** [26. November 2023 um 14:15 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/20 "2023-11-26T14:15:03Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![ralf](https://community.symcon.de/user_avatar/community.symcon.de/ralf/32/93_2.png) [@ralf](https://community.symcon.de/u/ralf)\
**Post date:** [26. November 2023 um 14:32 UTC](https://community.symcon.de/t/zendure-smartflow-mqtt/134538/21 "2023-11-26T14:32:50Z")

</div>

Ja, aber wenig los dort.

> **[Tritt dem Zendure Austauschgruppe-Discord-Server bei!](https://discord.com/invite/wYBUfX2d)**
>
> Sieh dir die Zendure Austauschgruppe-Community auf Discord an – häng mit 128 anderen Mitgliedern ab und freu dich über kostenlose Sprach- und Textchats.

[Nächste Seite](https://community.symcon.de/t/zendure-smartflow-mqtt/134538.md?page=2)
