Microwechselrichter Bosswerk MI 300 und Huayu HY-800 an Fhem anbinden

Begonnen von Decki, 18 Oktober 2021, 21:28:27

Vorheriges Thema - Nächstes Thema

Decki

Hallo zusammen,

ich habe diese 2 Microwechselrichter inzwischen in Betrieb. Ich kann sagen, dass beide baugleich sind (außer dem 2. DC-Anschluss) und die selbe Software installiert haben.
Hierfür kann eine Cloudanwendung konfiguriert werden, was ich aber nicht will.
Optional gibt es in beiden die Option über TCP oder UDP Daten an eine IP Adresse zu senden.

Hat jemand hierfür eine Idee oder selbst schon was entwickelt. Leider gibt es keine weitere Infos von beiden Herstellern.
Raspi 2 im Schaltschrank, USB IR Lesekopf am EHz21, Gaszähler mit Reedkontakt, Jeelink,  16 FS20 Aktoren,  3 Ufos für LED, 11 FS20 Rolladenaktore, AMAD 4.0 mit Sprachausgabe, Esp12 mit EspEasy

schraubi

Die Bosswerk WR's sind vermutlich vom Hersteller Marke DEYE.  ;D
Eventuell findest oder bekommst du über den Original Hersteller mehr Infos zu dem Thema als wie vom Bosswerk.
Die Bosswerks Produkte vermute ich den Artikel: DEYE SUN300G3-EU-230 und DEYE  SUN600G3-EU-230.
Warum ich das vermute? Bosswerk schreibt zwar von deutscher Produktion. Aber das Aussehen und die Cloud zum Einrichten ist China Cloud wie die ganzen anderen Chinesen WRs.
Habe 2 WRs von Bosswerk auch im Einsatz.
Und will die auch noch aus der Cloudlösung raus haben, hatte aber noch nicht die Zeit das Thema anzugehen.


MrLarodos

Hi zusammen,

ich habe meinen "Deye SUN600G3-EU-230" zwar noch nicht in FHEM eingebunden, aber habe gerade kurz ein Script in Python geschrieben, womit ich die aktuellen Daten aus der Weboberfläche auslese, um Sie in einer SQL-DB abzulegen. Das proaktive Senden der Daten an meinen Raspberry Pi vom Wechselrichter habe ich nicht einrichten können. Kam halt nie was auf dem im Deye definierten Port am Raspi an, daher wollte ich damit keine weitere Zeit verschwenden. Und ins Internet werde ich den garantiert nicht lassen ;D

Das Script antwortet dann mit folgenden Daten:
Zitat
watt_now: 518 Watt
watt_today: 1.30 kWh
watt_overall: 1.3 kWh

Hier das Script:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

#Getestet auf einem Deye SUN600G3-EU-230 mit Weboberflächenversion "Web Ver:1.0.24" und Firmware "MW3_15U_5406_1.47"

import requests

url = 'http://192.168.100.22/status.html' #IP / URL vom Wechselrichter im Heimnetz einsetzen
user = 'admin' #Username für das htaccess der Weboberfläche
password = 'admin' #Passwort für das htaccess der Weboberfläche

data = requests.get(url, verify=False, auth=(user, password))

for zeile in data.text.split('\n'):

if 'var webdata_now_p' in zeile:
watt_now=zeile
left_texter = watt_now.find('"', 0, len(watt_now)) + 1
right_texter = watt_now.find('"', left_texter, len(watt_now) )
watt_now=watt_now[left_texter:right_texter]

elif 'var webdata_today_e' in zeile:
watt_today=zeile
left_texter = watt_today.find('"', 0, len(watt_today)) + 1
right_texter = watt_today.find('"', left_texter, len(watt_today) )
watt_today=watt_today[left_texter:right_texter]

elif 'var webdata_total_e' in zeile:
watt_overall=zeile
left_texter = watt_overall.find('"', 0, len(watt_overall)) + 1
right_texter = watt_overall.find('"', left_texter, len(watt_overall) )
watt_overall=watt_overall[left_texter:right_texter]

print("watt_now: "+watt_now+" Watt")
print("watt_today: "+watt_today+" kWh")
print("watt_overall: "+watt_overall+" kWh")


Vielleicht könnt Ihr damit ja was anfangen.

LG "MrSolarodos"  ;)
Mein SmartHome: https://youtu.be/RIro54MMyN4

Raspberry 3B+, RFXtrx433XL, VELUX KLF200, ALLNET Touch Display Tablet, Deye SUN600G3-EU-230 und so weiter :-)

MogRuith

Hallo MrSolarodos,
ich bin seit kurzem stolzer Besitzer eines "Bosswerk mi600". Er läuft noch nicht (muss noch auf den/einen Elektriker warten...), aber bist du inzwischen weiter mit der Einbindung des Wechselrichters in fhem? Wie und wie häufig rufst du das script auf und wie greift fhem dann auf die Daten zu? Könnte man aus deiner Lösung ein fhem-modul basteln (gibt bestimmt vieler Interessenten :) )?

Dank & Gruß

snx

habe den mi600 seit gestern ebenfalls im Einsatz. die App und Chinacloud will und werde ich auch nicht nutzen, daher Versuche ich die Tage den Zugriff auf mein WLAN und Gleichtiger Blockade der China Server einzurichten. die IPS findet man ja auf der Hidden config Seite..
hat schon Mal jemand Versuch die Kommunikation zu Sniffen um evt einen simplen/kompatiblen Endpunkt zu bauen?
die Abfrage übers web-ui ist doch etwas hakelig :-/

MogRuith

Ich habe den Bosswerk MI600 seit gestern am Laufen. Erstmal ins lokale Netzwerk eingebunden, user, password,... geändert, dann den AP deaktiviert. Nachdem hier niemand (...) geantwortet hat, habe ich mir dann folgendes gebastelt:


define Solar HTTPMOD http://user:password@xxx.xxx.xxx.xxx/status.html 300
attr Solar reading01Name current_power
attr Solar reading01Regex var webdata_now_p = "([+-]?(?=\.\d|\d)(?:\d+)?(?:\.?\d*))(?:[eE]([+-]?\d+))?"
attr Solar reading02Name yield_today
attr Solar reading02Regex var webdata_today_e = "([+-]?(?=\.\d|\d)(?:\d+)?(?:\.?\d*))(?:[eE]([+-]?\d+))?"
attr Solar reading03Name total_yield
attr Solar reading03Regex var webdata_total_e = "([+-]?(?=\.\d|\d)(?:\d+)?(?:\.?\d*))(?:[eE]([+-]?\d+))?"
attr Solar stateFormat Aktuelle Leistung: current_power W;; Tagesproduktion: yield_today kWh;; Gesamtproduktion: total_yield kWh
attr Solar room Garten
attr Solar icon sani_solar


RegEx-Freaks können das wahrscheinlich noch eleganter lösen, aber so funktioniert es erstmal. Bis jetzt sollen 2.3 kWh "geerntet" worden sein. Zur grafischen Auswertung müsste dann noch ein log definiert werden...

Schau dir mal den Seitenquellcode von ./status.html an, da lässt sich eine Menge auslesen, wenn man es braucht.

Lieben Gruß
Mog

Hauswart

Müsste man nicht mit HTTPMOD etwas hinbekommen? Kann mir jemand mal den Quelltext der Statusseite zusenden?

Ich bekomme die Tage auch einen Deye WR :)


Edit: :D  während dem Schreiben antwortet MogRuith.
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

snx

ich habe es ebenfalls mit dem HTTPMOD, wie von MogRuith beschreiben, umgesetzt.
@Hauswart: Ich habe dir die status.html mal angehangen

Dabei stören mich allerdings 2 Dinge:

  • Die Statusseite liefert nicht immer Werte, in einigen Fällen (bei mir mind. jeder 3. Aufruf) sind die Daten leer.
  • Außer der aktuellen Wattangabe ist eigentlich nichts zu gebrauchen, selbst die Daily und Total
    kWh-Werte sind fraglich, zumal sie immer identisch sind (auch am 2. Tag)

Daher versuche ich nun die Komunikation zum Server zu nutzen, allerdings ohne viel Erfolg.
Ich möchte meinen Versuch einmal schildern, evt. hat jemand eine Idee:

  • Ich habe einen simplen node-tcp-Server aufgesetzt, der auf Verbindung wartet und die erhaltenen Daten in der Konsole auspuckt
  • Im Web-UI des MI600 habe ich unter "Advanced > Remote Server" meinen Server als Server B eingetragen -> keine Verbindung zu meinem Server
  • Auf der versteckten Config-Seite des MI600 http://<mi600>/config_hide.html habe ich dann die beiden China-Server (Server A Setting + Optional Server Setting) durch meinen lokalen Server ersetzt -> Es wird eine Verbindung aufgebaut
  • Ich habe beide Server ersetzt, da mir beim Packet-Capture via Fritz-Box aufgefallen ist, dass die IP des optionalen Servers versucht wurde anzupingen...
  • Wenn eine Verbindung hergestellt wurde, sendet der MI600 folgende Daten an meinen Server, worin die Firmware-Version und die IP des MI600 neben einige kryptischen Infos zu erkennen sind. Hier einfach mal ein Auszug aus der Konsole. Ich kann mir nich vorstellen, dass sich hier schon Daten hinter verbergen. Gehe eher davon aus, dass es sich um eine Art "Anmeldeversuch" handelt, aber so tief stecke ich nicht in der Materie...
listening: localhost:10000
connected: IPv6|::ffff:192.168.XX.XX|22510 -> ::ffff:192.168.XX.YY|10000
data received: ��►A☺����☻�`☻Y♣<x☺=☺MW3_15U_5406_1.47(�n$#8192.168.XX.XX�☺♠T�V1.1.00.0F�u§
data received: ��►A☻����☻�`☻�♣<x☺@☺MW3_15U_5406_1.47(�n$#8192.168.XX.XX�☺♠T�V1.1.00.0F��§
data received: ��►A♥����☻a☻�♣<x☺6☺MW3_15U_5406_1.47(�n$#8192.168.XX.XX�☺♠T�V1.1.00.0F�↨§
disconnected
connected: IPv6|::ffff:192.168.XX.XX|22511 -> ::ffff:192.168.XX.YY|10000
connected: IPv6|::ffff:192.168.XX.XX|16375 -> ::ffff:192.168.XX.YY|10000
data received: ��►A☺����☻�]☻W♣<x☺;☺MW3_15U_5406_1.47(�n$#8192.168.XX.XX�☺♠T�V1.1.00.0F��§
data received: ��►A☻����☻�]☻�♣<x☺=☺MW3_15U_5406_1.47(�n$#8192.168.XX.XX�☺♠T�V1.1.00.0F��§
data received: ��►A♥����☻'^☻�♣<x☺;☺MW3_15U_5406_1.47(�n$#8192.168.XX.XX�☺♠T�V1.1.00.0F�1§
disconnected
......

MogRuith

Ich weiß nicht recht, ob das den Aufwand wirklich wert ist. Die Daten, die unter ./status.html stehen, sind ja genau die, die in cloud geladen werden... Ich bin soweit zufrieden, zumal sich die Werte mit Elektrikers Messwerten decken.

Überprüfe mal dein log, ob es vielleicht zu Verbindungsabbrüchen per WLAN kommt (...timeout...). "daily_yield" müsste eigentlich immer wieder bei Null beginnen, "total_yield" stetig hochzählen. Ich lasse alle 5min abfragen und werde ab August auf 10min verlängern. Wenn ich ./status.html... sekündlich abfrage, bekomme ich auch mal eine Seite ohne Werte.

Lieben Gruß

MrLarodos

Hi MogRuith!

Sorry, hatte die Benachrichtigungen ausgeschaltet und habe es im Urlaub nicht mitbekommen, dass es hier weiterging.

Zitat von: MogRuith am 03 Juli 2022, 17:04:01bist du inzwischen weiter mit der Einbindung des Wechselrichters in fhem?

  • Nein, ich habe mich mit der Einbdindung in FHEM nicht weiter beschäftigt, da ich FHEM lediglich als Zwischenhändler zur Ansteuerung von Geräten durch Python benutze. Die zeitliche bzw. vor allem ereignisgetriebene Steuerung habe ich also im Eigenbau in Python und eigener mySQL-DB / Weboberfläche umgesetzt. FHEM ist bei mir also wirklich nur ein Vermittler zu den Geräten.
  • Das Balkonkraftwerk ist dann ein Gerät, von dem ich Informationen (aktuelle Wattzahl etc.) beziehe und damit dann via Python an FHEM den Befehl gebe, bestimmte Geräte zu aktivieren, oder zu deaktivieren.
Zitat von: MogRuith am 03 Juli 2022, 17:04:01Wie und wie häufig rufst du das script auf und wie greift fhem dann auf die Daten zu? Könnte man aus deiner Lösung ein fhem-modul basteln (gibt bestimmt vieler Interessenten?

  • Das Python-Script von oben in (erweiteter Form) lasse ich aktuell alle 5 Minuten über crontab aufrufen.
  • Da die Werte nicht immer zuverlässig in der Status-HTML enthalten sind, lasse ich bei nicht vorhandenen Werten nach 5 Sekunden erneut checken, ob Werte da sind. Wenn nach dem 6. Durchlauf keine Werte als Antwort kamen, wird ausnahmsweise dieser 5-Minuten-Logpunkt übersprungen.
  • Neben der aktuellen Wattangabe speichere ich auch "webdata_total_e" und "webdata_today_e". Mir ist natürlich dann aufgefallen, dass diese meist identisch sind, also kann man den Today-Wert ab Tag 2 vergessen, wenn man den aktuellen Tag wissen möchte. Zusätzlich ist es dazu gekommen, dass der Today-Wert untertägig wieder auf 0 gesetzt wurde.
  • In Summe habe ich dann am Ende ein SQL-Script geschrieben, was ausschließlich auf webdata_total_e basiert, um den Anlagen-Gesamtwert und den von heute* zu ermitteln. *Sinngemäß: "Aktueller Wert (webdata_total_e) minus letzter Wert (webdata_total_e) von gestern = aktueller Wert von heute". So kann ich natürlich auch die Werte für alle vergangenen Tage berechnen, in dem ich lediglich mit den Differenzen von Tag zu Tag arbeite und dann daraus sogar Wochen- oder Monatssummen bilden kann.
  • Zusammen mit einem Preis von 0,29€ pro kWh bei mir und den gespeicherten Watts alle 5 Minuten, habe ich mir die kleine Seite im Intranet abgelegt, die in der Anlage von diesem Forumseintrag zu sehen ist.
LG MrLarodos
Mein SmartHome: https://youtu.be/RIro54MMyN4

Raspberry 3B+, RFXtrx433XL, VELUX KLF200, ALLNET Touch Display Tablet, Deye SUN600G3-EU-230 und so weiter :-)

FHEMbeta

@MrLarodos: Wenn sich der Wert webdata_today_e bei dir nicht täglich auf 0 zurücksetzt, hat dein Deye bzw. dessen Firmware ein Problem. Ich habe auch einen SUN600G3 und der nullt sich zum neuen Tag zuverlässig.

Ich nutze seit 2 Monaten dieses Projekt, um die Werte jede Minute abzufragen: https://github.com/dr-ni/mi600

Das Skript wird via cronjob angesteuert und die Werte dann via GET request an FHEM übertragen. Sporadisch sind die Werte im Deye nicht abrufbar (meines Erachtens ein Bug in der Firmware), spätestens aber dann bei nächsten/übernächsten Abruf wieder verfügbar.

Die Werte werden von FHEM in einer MariaDB gespeichert und via grafana schön visualisiert.

snx

@FHEMbeta:
Das Projetz geht ja den gleichen Weg und fragt die Status.html ab. Kann natürlich sein, dass die Probleme an der Firmware liegt, evt. aber auch an der fehlenden Kommunikation mit China ;)

@MrLarodos:
Ich kann die von dir genannten Probleme komlett bestätigen. Der MI600 verhält sich genau so "unzuverlässig" wie von dir geschildert. Hast du dich jemals über die App registriert und hast deinen Wechselrichter mit der China-Cloud telefonieren lassen? Ich habe noch so die Befürchtung, dass er ohne Kommunikationspartner nicht weiß welcher Tag es ist und in welcher Zeitzone er sich befindet. Da man es auf der Web-UI nicht einstellen kann, woher soll er also auch wissen wann ein Tag zuende ist :-(

@MogRuith:
Die Aufwandsfrage ist natürlich berechtigt ;) Nachdem was ich von der App gesehen habe (in diversen Youtube Videos) werden doch wesentlich mehr Infos in die Cloud gepusht, wie z.B. die aktuelle Leistung jedes angeschlossenen Moduls, was mich durchaus interessiert, da ich die Module unterschidlich ausgerichtet habe.
Ich bin schonmal froh, dass die Werte mit gemessenen nahezu übereinstimmen. Ich werde es die Tage erst mit einem Meßgerät validieren können, habe gerade keins zur Hand.

MrLarodos

@FHEMbeta: Ah, cool! Danke für den Link auf Github. Das schaue ich mir die Tage mal näher an. Klingt ja schwer danach, als wäre es genau das, was MogRuith haben möchte.

Zitat von: FHEMbeta am 19 Juli 2022, 19:52:02...hat dein Deye bzw. dessen Firmware ein Problem
Da bin ich mir absolut sicher :) Die ist in gewohnter China-Qualität umgesetzt worden. Ähnlich wie bei manchen IP-Cams...

@snx: Ja, das liegt wahrscheinlich mit daran, dass meiner nie mit China telen durfte. Er hat keinen Plan, welches Datum oder welche Uhrzeit ist. Insofern kann ich aber mit meiner Vorgehensweise dennoch alles damit ausrechnen, was ich brauche und er bleibt absolut ahnungslos und darf nicht raus ins Netz. Wollte auch kein Update der Firmware (aktuell = MW3_15U_5406_1.47) durchführen, da die UI und Firmware so unterirdisch sind, dass ich die Sorge hatte, dass danach noch das Solarmodul ausfällt. Also kein Risiko eingehen und never ein running system changen :P
Mein SmartHome: https://youtu.be/RIro54MMyN4

Raspberry 3B+, RFXtrx433XL, VELUX KLF200, ALLNET Touch Display Tablet, Deye SUN600G3-EU-230 und so weiter :-)

snx

Zitat von: MrLarodos am 19 Juli 2022, 20:54:30
Wollte auch kein Update der Firmware (aktuell = MW3_15U_5406_1.47) durchführen, da die UI und Firmware so unterirdisch sind, dass ich die Sorge hatte, dass danach noch das Solarmodul ausfällt.
Genau mein Gedanke, ich speichere auch jede Nacht einmal den Gesamtverbrauch und ermittel damit auch kurz den Tageswert ;) Umständlich, aber wie du schon sagst, sicher ist sicher :p

FHEMbeta

Es kann schon gut sein, dass der Wechselrichter aufgrund von nicht vorhandenem NTP Server das aktuelle Datum nicht kennt und somit den Tageswert nicht zurücksetzt. Vermutlich wird das nicht automatisch über die Netzwerkkonfiguration gezogen.

Ich finde die Firmware auch sehr schlecht umgesetzt. Man kann unter anderem den Modus Access Point nicht abstellen (auch nicht über das Hidden Menu), WLAN Passwort nicht ändern und so weiter.

Dennoch habe ich aktuell die Anbindung an die Deye Cloud aktiv. Dort sieht man noch viele weitere Werte wie Spannung, Strom der einzelnen Moduleingänge. Was soll der Chinese groß mit meinen PV Daten machen? Angst, dass er die Anlage via Remote abschaltet habe ich aktuell nicht. Falls sich die Situation mit China zuspitzt, kann ich die Kommunikation noch immer unterbinden. Aber das betrifft doch auch gleichermaßen unter anderem die Saugroboter.