Zendure SmartFlow MQTT

Hallo @habre ,

ja, ich verwende das auch so. Ich stehe jedoch noch ganz am Anfang und möchte meine eigene Lösung nutzen.

Ich habe nur testweise ein shell-script gebaut um das Entladen zu test, funktioniert auch soweit. Ist wie gesagt nur ein erster schneller Funktionstest…

#!/bin/bash

set_max=1500 # maximale gewünschte Abgabeleistung

mosquitto_pub -h 192.168.195.15 -t Zendure/select/E...1/acMode/set -m 'Output mode' # Modus auf Netzausgang
sleep 2
set=0 # initailisierung des Setzwertes

while true
do
    Z0=$(mosquitto_sub -h 192.168.195.15 -t sensor/el/Z0/P -C 1) # Hier steht die Leistung des Übergabezählers
    echo Z0: $Z0
    Z0=$((Z0 - 10)) # Ich möchte beim Entladen 10 Watt aus dem Netz nehmen
    echo Z0cor: $Z0
    set=$((set + $Z0))
    if [ $set -lt 50 ] # Zendure hat 50 Watt Minimalleistung, Werte < 50 werden von der Zendure aber auch ignoriert
    then
      set=0
    elif [ $set -gt $set_max ]
    then
      set=$set_max
    fi
    echo set: $set
    mosquitto_pub -h 192.168.195.15 -t Zendure/number/E...1/outputLimit/set -m $set  # Setzwert schreiben
    sleep 2 # Sonst wird es instabil
done

Ansonsten sind keine Apps installiert.

Viel Spaß und Erfolg

Ok, du hast quasi auf den HomeAssistant MQTT Server gepublished.
Mich würde ein lauffähiges Script in PHP innerhalb IPS und auf den IPS MQTT Server interessieren.

Das sollte doch mit meinen Script Beipielen und Bluerhinos funktionieren. Ich nutze es permanent

also z.B.

    $topic = 'iot/gDxxxb/7yyyyya/properties/write';
    $value = '{"properties": { "outputLimit": '.$variable.' }}';

setzt das Output Limit über den MQTT Server in Symcon.

Das siehst du dann auch im MQTT Explorer, verbunden mit dem MQTT Server

Die Rückmeldung kommt dann über report/write/reply

grafik

Ja, irgendwie klappt es bei mir anscheinend nicht so wie bei dir.
Die Meldung aus IPS_LogMessage()
19.08.2026, 17:57:59 | ActionScript inverseMaxPower | MQTT connect, topic Zendure/number/EEB4AEP4P1xxxxx/properties/write, value {„properties“:{„inverseMaxPower“:794}}

So schauts im MQTT-Explorer aus:

Da fehlt mir im Gegensatz zu dir das „reply“.

Möglicherweise gibt’s Unterschiede zum SF2400Pro.
Wär ja alles egal wenn sich die Änderung im echten Topic bemerkbar machen würde.

Schöne Grüße,
Hans

Ich glaube nicht, dass es Unterschiede gibt. Das, was du dort zeigst ist nur zum Empfangen.

Gesendet wird auf andere Topics, das kannst du auch im MQTT Explorer testen

Das reply kommt erst, wenn du korrekt gesendet hast.

Hallo zusammen,

ich glaube wir reden über unterschiedliche Systeme?

Ich habe eine Zendure SolarFlow 2400 pro. Dort wird zum setzten der Ausgangsleistung in den Topic
Zendure/number/EE…41/outputLimit/set
geschrieben (nicht in den Subtopic “write”). Es wir auch nur der Rohwerte und kein json-String geschrieben. Die Setzwerk-Rücklesung ist dann der Rohwert unter
Zendure/number/EE…41/outputLimit

Ich habe auch kein HomeAssist oder ähnliches. Bei mir läuft nur ein lokaler MQTT-Server. Schreiben von einem belieben Programm.

Die Beispiele mit den root-Topic “iot” und den json-Messages ist vermutlich ein ein anderes Gerät?

Grüße

Nein - auch ich habe ein Zendure SolarFlow SF2400Pro.

Du hast wohl recht. Es sind unterschiedliche Systeme. @ralf dürfte ein System mit einem Zendure Hub2000 im Einsatz haben.

Und Zendure hat anscheinend tatsächlich die bisherige Vorgehensweise über den Haufen geworfen.

Somit vielen Dank an alle welche sich bisher bemüht haben um mir weiter zu helfen!

Die Lösung für den SF2400Pro ist gänzlich anders als für die bisherigen Zendure Produkte und ich werde sie auch hier zeigen.

Speziell auch an @dth387 welcher auch keine Lösung gefunden hat und die Steuerung nun zweigleisig - also Lesen über MQTT und Schreiben mittels der REST-API.

Vorgehensweisen um beim Zendure Solarflow SF2400Pro Werte mittels MQTT zu setzen

Im Gegensatz zu anderen Zendure´s muss beim Publishen nicht an das Topic 'iot/gDxxxb/7yyyyya/properties/write' und einem Payload von z.B.
'{"properties": { "outputLimit": '.$variable.' }}' gesendet werden !

Wichtig ist es, bei der Instanz des jeweiligen MQTT Server Devices ein abweichendes Thema beim Senden einzustellen.
image
Beim „abweichenden Thema“ muss ein „/set“ hinten dran.


Das Topic selbst muss nicht angelegt werden.

Die Variablenaktion der dazugehörigen Statusvariable bleibt auf „Benutze Standardaktion“.

Nun ein paar Beispiele wie man dort hin senden kann.
Gesendet wird an das Thema als Topic, als Payload wird der reine Wert übergeben.


<?php
/*
  Das ist Skript ID 58301
*/

// =====================================================================================
// Publish mit externem Script, abgelegt als phpMQTT.php im Scripte-Ordner
// https://github.com/bluerhinos/phpMQTT
// Die Seriennummer ist in einer Variablen gespeichert
// =====================================================================================
require('phpMQTT.php');

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

$SerialNo = GetValueString($SerialNoID);
$topic = "Zendure/number/$SerialNo/inverseMaxPower/set";

$payload = 799;

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

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

<?php

/*

Das ist Skript ID 31718

*/

// ===================================================

// Publish mit Modul "simple MQTT sending Tool"

// Die Seriennummer ist in einer Variablen gespeichert

// ===================================================

// ==========================================

// KONFIGURATION

// ==========================================

$SerialNoID = 48550;

$smstID = 44315;

$SerialNo = GetValueString($SerialNoID);

$topic = "Zendure/number/$SerialNo/inverseMaxPower/set";

$payload = 798;

SMST_sendString($smstID, $topic, $payload);

?>

<?php

/*

Das ist Skript ID 46579

*/

// =========================================================================================================================================================

// Publish mit Request Action. Es wird ein RequestAction auf die Statusvariable durchgeführt.

// Die Variablenaktion der Statusvariable bleibt auf "benutze Standardaktion"

// Auf der darüberliegenden Instanz muss ein abweichendes SendeTopic konfiguriert sein.

// Falls das normale Topic in der Instanzkonfiguration zb. "Zendure/number/EEB4AEP4P1xxxxx/inverseMaxPower" lautet so muss das Sendetopic auf

// "Zendure/number/EEB4AEP4P1xxxxx/inverseMaxPower/set" geändert werden.

// ---

// Die Seriennummer ist in einer Variablen gespeichert

// =========================================================================================================================================================

// ==========================================

// KONFIGURATION

// ==========================================

$VariableID = 24259; //ID der Statusvariablen

RequestAction($VariableID,797);

?>

Achtung, wer die älteren Zendure hat und mit dem Tool von Reinhard oder vergleichbar auf einen lokalen MQTT Server umgestellt hat, NICHT updaten auf die Master Firmware V2.1.47.

Damit deaktiviert Zendure die Möglichkeit und hat bei mir über 2 Jahre Optimierung, Visualisierung und vollautomatisierte Steuerung vernichtet. Natürlich wurde die Alternative, wie sie in neuerer Hardware vorhanden ist, nicht eingebaut.

Ich bin auch ein wenig sauer auf Zendure. Mein Hyper 2000 hatte vor einigen Wochen ein Update bekommen und ich hoffte auf die offiziell angekündigte lokale Kontrolle aber Pustekuchen. Auch deren Cloud scheint öfter Probleme zu haben was bei 0 Einspeisung natürlich ein Problem ist.

Ralf

Meine Versuche mit TLS haben sich erledigt, die Umsetzung über den Weg scheint nicht zu funktionieren.

Ich nutze jetzt das Script von Reinhard mit umfangreichem Umbau als Bluetooth-Proxy.

Es läuft als Service auf einem PIzero bei den beiden Hyper 2000, empfängt die BT Meldungen und sendet sie an Symcon MQTT, somit läuft alles andere in Symcon wieder sauber.

Außerdem liest es die Sendebefehle und überträgt sie per BT, das scheint soweit stabil zu laufen, ich werde beobachten.

Es gibt nur Probleme, wenn die App sich auch per BT verbinden möchte.