edit 21.3.: Link auf Detailbeschreibung eingefügt
Smart Meter, Wechselrichter oder Batterie-Managementsysteme, die in der Solaranzeige nicht als Regler vorgesehen sind, können über eigene PHP-Programmierung eingebunden werden. Ich beschreibe hier meine Lösung als Beispiel und Vorlage für Benutzer, die selber etwas Ähnliches machen wollen.
Wir nehmen an, dass bereits ein Multi-Regler-System eingerichtet wurde (Gerät 1 ist bei mir eine Hoymiles DTU und Gerät 2 ist eine AhoyDTU). An diese sind (experimentell) zwei Einspeise-Wechselrichter angeschlossen. Der Raspi hängt via WLAN im lokalen Netz.
Es sollen ein Smart-Meter DTSU666-H https://solar.huawei.com/-/media/Solar/ ... sor_DT.pdf

sowie ein Daly-Batterie-Managementsystem https://www.dalybms.com/smart-lifepo4-bms/

via WLAN angebunden werden. Für letzteres gibt es zwar in der Solaranzeige eine Standard-Anbindung, aber nicht via WLAN sondern nur über RS485 Kabel nach USB.
Mein Ziel ist es, eine smarte Einspeise-Begrenzung zu implementieren indem ich bei PV-Überschuss die Leistung der Wechselrichter so regele, dass sie nicht oder nicht zu viel Strom einspeisen und/oder optionale Verbraucher zugeschaltet werden.
Im Sinne einer „Gewaltenteilung“ wird Letzteres von einer Hausautomation erledigt, die dafür von der Solaranzeige mit den nötigen Daten bzw. Entscheidungsgrundlagen versorgt wird.
Hinweis: Danke an Ulrich und alle die zur Solaranzeige Beiträge leisten! Ohne Eure Vorarbeit, hätte ich diese Lösung wahrscheinlich nie geschafft. Jedenfalls nicht in dieser Zeit. Wie Vieles im Leben kann auch diese Lösung verbessert werden. Daher freue ich mich über Kommentare und Verbesserungsvorschläge dazu!
Hinweis 2: Ich gehe davon aus, dass der Leser weiß, wie er Dateien am Raspi anlegt und bearbeitet, er PHP-Code zumindest lesen kann und wie er auf die Kommandozeile des Raspbian Betriebssystems zugreift.
Hardware
Der 3-Phasen Stromzähler Huawei/CHint DTSU666-H verfügt über eine Modbus RTU Schnittstelle, die über eine RS485 Verbindung angesprochen werden kann. Damit der Stromzähler WLAN-fähig wird schalten wir einen Elfin EW11 http://www.hi-flying.com/elfin-ew10-elfin-ew11 Protokoll-Wandler dazwischen.

Das Gerät macht aus der Modbus RTU Schnittstelle des Stromzählers eine Modbus TCP Schnittstelle. Es hat eine komfortable Web-Oberfläche,

verbindet sich mit dem WLAN und kann so von der Solaranzeige einfach erreicht werden.
Zum Daly Smart-BMS kann man einen Bluetooth-Dongle kaufen, der über ein kurzes proprietäres Kabel angeschlossen wird. Im Github Projekt Daly-BMS-to-MQTT https://github.com/softwarecrash/DALY-BMS-to-MQTT wurde vom user "softwarecrash" eine Lösung entwickelt, wie man den Bluetooth-Dongle durch ein WLAN-Interface ersetzt (herzlichen Dank auch an diese Richtung!). Das WLAN-Interface besteht aus einem Wemos D1 mini Mikroprozessor https://www.makershop.de/plattformen/d1 ... s-d1-mini/ und einer angelöteten USB Buchse um das Kabel zum Daly-BMS anzuschließen https://github.com/softwarecrash/DALY-B ... onnections (Abschnitt: Connection via USB cable from BT dongle).

"Optional Wake" und "Optional Relay" habe ich nicht benötigt.
Alles ist für ein paar wenige Euros zu haben. Allerdings muss man wissen wie ein Lötkolben funktioniert


kann die Daten des BMS via WLAN und MQTT an den Mosquitto.Server der Solaranzeige senden und er bietet aber auch eine JSON-Schnittstelle an, die wir hier verwenden werden.
Information zur Installation der Hardware findet sich auch bei Youtube z.B. https://youtu.be/9N4bXswc-vE (bis Minute 3:50; aber das ist eine Arbeit für Elektriker) , https://youtu.be/-Pu_RVT9eLA?t=405 oder https://youtu.be/gUoFhgqzK7k .
Firmware
Die Firmware für den Wemos D1 mini kann ganz einfach vom PC aus mit einem USB Kabel auf den Wemos übertragen/geflashed werden. Das ist auf der Github-Seite genau beschrieben. Der Elfin EW11 kommt bereits mit der richtigen Firmware.
Software
User.config
Wir erweitern unsere Solaranzeige-Installation zunächst um eine weitere Config Datei z.B.
Code: Alles auswählen
3.user.config.php
Code: Alles auswählen
$Regler = "1001";
Code: Alles auswählen
$GeraeteNummer = "3";
$WR_IP = "10.0.0.2";
$WR_Port = "502";
$WR_Adresse = "38";
Code: Alles auswählen
$InfluxDB_local = true;
$InfluxDBLokal = "DTSU666H";
Code: Alles auswählen
$Wiederholungen = 1;
$InfluxDB_remote = false;
$InfluxPort = 8086;
Influx Datenbanken anlegen
Standardmäßig hat die Solaranzeige eine Influx-Datenbank mit dem Namen „Solaranzeige“ . Es hat aber Sinn nicht alle Daten in die gleiche Datenbank zu speichern. Auf der Kommandozeile starten wir mit
Code: Alles auswählen
influx
Code: Alles auswählen
create database DTSU666H
create database DalyBMS
Code: Alles auswählen
quit
Implementierung der Anbindung
Die Anbindung wird in der Datei user_device.php implementiert. Diese muss unter /var/www/html abgespeichert sein und wird in die Solaranzeige inkludiert, wenn ein nicht existierender Regler (bei uns 1001) in der user.config angegeben ist.
Die Implementierung umfasst folgende Abschnitte, die im Quellcode auch als Kommentare ersichtlich sind.
// 1. Einstellungen
// 1.1 Allgemeine Einstellungen
// 1.2 Smart Meter
// 1.3 BMS
// 1.4 (Null)Einspeisung durch Drosselung des Wechselrichters
// 1.5 Hausautomation
// 2. Smart Meter DTSU666-H via Modbus TCP auslesen (siehe Detailbeschreibung)
// 2.1 Aktuellen Energieverbrauch vom Netz ermitteln
// 2.2 Zählerstand auslesen
// 2.3 Spannung auslesen
// 2.4 Strom, Ampere auslesen
// 2.5 Blindleistung auslesen
// 2.6 Frequenz auslesen
// 2.7 4-Quadrantenzählung
// 2.8 abgeleitete Daten berechnen
// 2.9 Query für das Schreiben in die influxDB zusammenstellen
// 2.10 optionale Nachbearbeitung der Smart-Meter Daten
// 2.11 Smart-Meter Daten optional an den hauseigenen MQTT Broker übergeben
// 2.12 Zeitpunkte definieren
// 2.13 Smart-Meter Daten in influxDB ablegen
// 3. Daly BMS via WLAN auslesen (siehe Detailbeschreibung)
// 3.1 JSON Daten auslesen
// 3.2 Query für das Schreiben in die influxDB zusammenstellen
// 3.3 optionale Nachbearbeitung der BMS Daten
// 3.4 Optional BMS Daten an den hauseigenen MQTT Broker übergeben
// 3.5 Zeitpunkte definieren
// 3.6 BMS Daten in influxDB ablegen
// 3.7 Wiederholungen des Auslesens steuern
// 4. Smarte (Null)Einspeisung durch Drosselung des Wechselrichters
// 4.1 Mittelwert PV AC Leistung aus InfluxDb lesen (und für 5. bereitstellen)
// 4.2 Mittelwert Netz-Bezug / Netz-Einspeisung aus InfluxDb lesen (und für 5. bereitstellen)
// 4.3 bisherige Drossel aus influxDB lesen (und für 5. bereitstellen)
// 4.4 Einspeiselimit (Drossel) alle $MinutenAbstand Minuten prüfen
// 4.4.1 Neue Drossel berechnen
// 4.4.2 Drossel in Wechselrichtern einstellen
// 4.4.3 neue Drossel in influxDB Measurement Einspeisung speichern
// 5. gleitende 7 Minuten-Mittelwerte für PV AC_Leistung (in Watt), Ladezustand der PV-Batterie (in %) und die vom öffentlichen Netz bezogene Leistung (in Watt) zur Hausautomation übertragen (siehe Detailbeschreibung)
// 6. Optional weitere Daten an HomeMatic senden
// 7. Optional Nachrichten an Messenger senden
Hier ein Ausschnitt aus Solaranzeige.log:
Code: Alles auswählen
20.03. 13:42:34 12277 -Verarbeitung von: '3.user.config.php' Regler: 1001 /var/www/html/multi_regler_auslesen.php
20.03. 13:42:34 12277 -Datei 'user_device.php' gefunden. /var/www/html/multi_regler_auslesen.php
20.03. 13:42:34 12277|---------------- Start user_device.php DTSU666-H, Daly BMS -------------------------- /var/www/html/multi_regler_auslesen.php
20.03. 13:42:47 12277 -Bezug_W: 47.1 /var/www/html/multi_regler_auslesen.php
20.03. 13:42:47 12277 -Einspeisung_W: 0 /var/www/html/multi_regler_auslesen.php
20.03. 13:42:47 12277 -MQTT Daten zum [ localhost ] senden. /var/www/html/multi_regler_auslesen.php
20.03. 13:42:47 12277 -Ende Abschnitt 2 - Smart Meter /var/www/html/multi_regler_auslesen.php
20.03. 13:42:47 12277 -SOC: 61.9% /var/www/html/multi_regler_auslesen.php
20.03. 13:42:47 12277 -Cell_Temp: 17°C /var/www/html/multi_regler_auslesen.php
20.03. 13:42:47 12277 -Ende Abschnitt 3 - BMS /var/www/html/multi_regler_auslesen.php
20.03. 13:42:47 12277 -Minute 42: Drossel neu berechnen und ggf neu setzen. /var/www/html/multi_regler_auslesen.php
20.03. 13:42:47 12277 -Neue Drossel berechnet: 1 /var/www/html/multi_regler_auslesen.php
20.03. 13:42:47 12277 -Ende Abschnitt 4 - Drossel /var/www/html/multi_regler_auslesen.php
20.03. 13:42:48 12277 -Ende Abschnitt 5 - Hausautomation /var/www/html/multi_regler_auslesen.php
20.03. 13:42:48 12277|---------------- Stop user_device.php -------------------------- /var/www/html/multi_regler_auslesen.php
Code: Alles auswählen
$SM_Detaildaten=0; // 0: nur W und KWh werden ausgelesen (schneller)
Die Daten können natürlich auch in Dashboards visualisiert werden.