Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Gawan
Beiträge: 488
Registriert: 11.12.2014, 23:40
Hat sich bedankt: 6 Mal
Danksagung erhalten: 2 Mal

Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Beitrag von Gawan » 07.10.2019, 21:18

Hallo,

ich hab hier eine Raspimatic und einen Solaredge Wechselrichter. Der WR kann angeblich über RS485 bzw. über Modbus TCP Daten ausgeben und ich könnte eigentlich in die Homematic einbinden, wenn ich nur den richtigen Zugang finden würde.

Hat dieses Setup schon jemand in Verwendung und kann mir ein paar Einsteiger-Tipps geben ?

lG
Gawan

Fonzo
Beiträge: 6722
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 479 Mal

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Beitrag von Fonzo » 07.10.2019, 21:38

Gawan hat geschrieben:
07.10.2019, 21:18
Hat dieses Setup schon jemand in Verwendung und kann mir ein paar Einsteiger-Tipps geben ?
Das hängt davon ab ob Du eine käufliche Lösung erwerben willst oder Dir selber etwas zusammenbasteln. Eine einfache käufliche Lösung wäre eine SymBox neo auf Hutschiene mit ModBus RTU Erweiterung, daran kannst Du den Wechselrichter über RS485 anschließen. Die Daten werden dann in IP-Symcon aufgezeichnet und Du kannst diese bei Bedarf in Excel auswerten. Abhängig von den Daten des Wechselrichters kannst Du dann Homematic Geräte schalten.

Gawan
Beiträge: 488
Registriert: 11.12.2014, 23:40
Hat sich bedankt: 6 Mal
Danksagung erhalten: 2 Mal

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Beitrag von Gawan » 07.10.2019, 21:43

Ich hätte am liebsten eine Lösung bei der ich definierte Werte (z.b. aktuelle Stromproduktion) auslesen und mittels HTTP POST an meine Homematic schicken kann. So übermittle ich auch von verschiedenen anderen Clients Daten an die HM.

Es scheint als gäbe es z.B. für den Raspberry Pi eine RS485-Schnittstelle mit der sich das irgendwie lösen ließe, aber mir fehlt da ein bisschen das Handwerkszeug um sowas einfach mal auf gut Glück zu kaufen und von Grund auf selbst zu bauen.

Im Ummodeln von bestehenden Lösungen bin ich allerdings relativ geschickt :D :D

Fonzo
Beiträge: 6722
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 479 Mal

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Beitrag von Fonzo » 07.10.2019, 21:51

Gawan hat geschrieben:
07.10.2019, 21:43
Ich hätte am liebsten eine Lösung bei der ich definierte Werte (z.b. aktuelle Stromproduktion) auslesen und mittels HTTP POST an meine Homematic schicken kann. So übermittle ich auch von verschiedenen anderen Clients Daten an die HM.
Modbus hat ja den Vorteil das Du die Daten in Echtzeit über RS485 bekommst, Du zeichnest also z.B. alle Daten des Wechselrichters in Echtzeit in IP-Symcon auf. Wenn Du ein Homematic Gerät abhängig von der Stromproduktion schalten willst, brauchst Du dazu lediglich ein Ereignis anlegen und den entsprechenden Homematic Aktor zu schalten. HTTP wird in dem Fall nicht benötigt, da IP-Symcon den Homematic Aktor direkt über die CCU schaltet.

Benutzeravatar
Black
Beiträge: 5472
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1071 Mal
Kontaktdaten:

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Beitrag von Black » 07.10.2019, 22:14

hier

https://github.com/rdmtc/RedMatic/wiki/ ... Modbus-TCP

hatte ein User aus dem Forum erfolgreich einen E3DC Wechselrichter , aber auch über Modbus mithilfe von RedMatic erfolgreich an eine CCU angebunden. hierbei allerdings beachten, Bei Modbus vorerst bei Redmatic 4.7.1 bleiben (s. a. hier: viewtopic.php?f=77&t=53258&p=533929&hil ... us#p533929)

alternativ als Alternative zu kostenpflichtigen Lösungen gibts Im Community Projet IObroker auch genug Besipiele erfolgreicher Einbundungen eines Solaredge üder RS485 Modbus. Für genauere Information gerne dorf mal im Forum nachfragen.

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Benutzeravatar
Indi55
Beiträge: 10
Registriert: 03.11.2016, 19:54
Wohnort: Köln
Danksagung erhalten: 5 Mal

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Beitrag von Indi55 » 25.12.2019, 14:33

Hallo,
bei mir läuft die CCU auf Yahm.
Ausserhalb des Containers läuft ein normales Linux.

Dort habe ich mehrere Scripte geschrieben, die ModPoll aufrufen.
Aufruf via CuXD mit Netzwerkbefehlen.
Damit habe ich die Solaranlage in Echtzeit ausgelesen.
Ausserdem steuere ich einen WallBePro Ladeadapter für meinen
Nissan Leaf. (Ladestrom, Ladezustand, Ladung Ein/Aus, Zeitschaltuhr)
Läuft sehr gut.
Ein Script in TCL, das auf der CCU laufen und den ModBus steuern sollte habe ich nicht zu laufen gebracht.
Vielleicht hat ja jemand eine Idee. Es reicht die Register auszulesen und zu beschreiben.
IOBrocker, RedMatic oder ähnliches ist mir für meine Zwecke einfach zu groß.

Grüße


Aktualisierung: Habe nun ein passendes ModBus Interface
viewtopic.php?f=31&t=55722&p=553720&hil ... us#p553720

Gruß
Zuletzt geändert von Indi55 am 04.01.2020, 17:43, insgesamt 1-mal geändert.
RaspberryPI 3B+ PivCCU3. LEDs und Taster an GPIO´s, Fenstersensoren, Rolladenaktoren, Sirene,HQ WebUI, CuxD, XML-API, E-Mail, USB Zählersensor am Raspberry, OpenWeatherMap.API, 1 Wire Temperatursensoren.
WallBe Pro Ladebox und Solaredge Solaranalage via ModBus Anbindung. CarWings/NissanEV anbindung.
SMA Sunny Boy Storage.

lxuser
Beiträge: 487
Registriert: 11.01.2015, 21:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 25 Mal
Danksagung erhalten: 28 Mal

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Beitrag von lxuser » 25.12.2019, 19:47

Nod-Red (Redmatic) ist zumindest im Vergleich zu IOBroker, Openhab... doch noch schön leichtgewichtig.

Gawan
Beiträge: 488
Registriert: 11.12.2014, 23:40
Hat sich bedankt: 6 Mal
Danksagung erhalten: 2 Mal

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Beitrag von Gawan » 26.12.2019, 14:16

Gibts da brauchbare Tips wie man den WR auslesen kann ?
Modbus TCP ist ja soweit ich weiß basierend auf irgendwelchen Registern und bestimmten Werten die man auslesen muss.
Ohne irgendwelche Grundlagen natürlich eher ... schwierig :)

Fonzo
Beiträge: 6722
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 479 Mal

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Beitrag von Fonzo » 26.12.2019, 15:35

Gawan hat geschrieben:
26.12.2019, 14:16
Gibts da brauchbare Tips wie man den WR auslesen kann ?
Modbus TCP ist ja soweit ich weiß basierend auf irgendwelchen Registern und bestimmten Werten die man auslesen muss.
Hier findest Du z.B. die Modbus Register von Solaredge beschrieben.

Benutzeravatar
Indi55
Beiträge: 10
Registriert: 03.11.2016, 19:54
Wohnort: Köln
Danksagung erhalten: 5 Mal

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Beitrag von Indi55 » 04.01.2020, 17:45

Habe Lösung:

viewtopic.php?f=31&t=55722&p=553720&hil ... us#p553720

Solaredge Wechselrichter auslesen Funktioniert.
Wallbe Ladesäule E-Auto steuern Funktioniert.

Anleitung Solaredge Wechselrichter:


Zuerst Modbus im Wechselrichter freigeben. Siehe Anleitung Solaredge. ( Geht erst ab bestimmten Softwarestand. Ggf. aktualisieren)
Dazu muss das Gerät geöffnet werten. Spannung abschalten, Gerät öffnen, Gerät einschalten.
Das Gerät steht jetzt unter Spannung!!!!! Am besten sollte dies nur ein Erfahrener Elektriker vornehmen.
Ansonsten besteht Lebensgefahr!!
Dann Menueeintrag ändern. Gerät aus, Abdeckung montieren und Gerät wieder einschalten.

Ethernet verbindung muss natürlich vorhanden sein.

Software aus Link installieren. (über ssh Zugang) Ausführungsrechte prüfen!
Geprüft mit Raspi Yahm und Raspimatic. Sollte aber auch CCU laufen.

Systemvariablen vom Typ String anlegen.
PV-Momentanleistung, PV-Gesammtleistung, PV-Status und PV-Fehlernummer
CUXD Gerät erstellen vom Typ System. 4 Tasterkanäle

Folgende Programme erstellen und xxx.xxx.xxx.xxx durch eigene IP-Adresse des Wechselrichters ersetzen.

Programm "PV Gesammtleistung" mit Script erstellen und einmal am Tag aufrufen:

Code: Alles auswählen

!" PV Auslesen

! Offset der Register =  -1
! High Byte
dom.GetObject("CUxD.CUX2801012:2.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl xxx.xxx.xxx.xxx 512 1 03 40093 1");
dom.GetObject("CUxD.CUX2801012:2.CMD_QUERY_RET").State(1);
var wert1 = dom.GetObject("CUxD.CUX2801012:2.CMD_RETS").State();
! Low Byte
dom.GetObject("CUxD.CUX2801012:2.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl xxx.xxx.xxx.xxx 512 1 03 40094 1");
dom.GetObject("CUxD.CUX2801012:2.CMD_QUERY_RET").State(1);
var wert2 = dom.GetObject("CUxD.CUX2801012:2.CMD_RETS").State();
! Skalierung
dom.GetObject("CUxD.CUX2801012:2.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl xxx.xxx.xxx.xxx 512 1 03 40095 1");
dom.GetObject("CUxD.CUX2801012:2.CMD_QUERY_RET").State(1);
var scale = dom.GetObject("CUxD.CUX2801012:2.CMD_RETS").State();

scale = scale.ToInteger();
wert1 = wert1.ToInteger();
wert2 = wert2.ToInteger();
scale = scale * (-1); ! oder scale.Abs()
! High + Low Byte
wert = ((wert1 * 65536) + wert2) /1000; ! oder  über wert.Exp10()
if (scale == 1)  { wert = wert / 10 ; }
if (scale == 2)  { wert = wert / 100; }
if (scale == 3) { wert = wert / 1000; }

dom.GetObject("PV Gesammtleistung").State(wert); 

Ergebnis in KW.

Programm "PV Momentanleistung" erstellen und alle paar Minuten aufrufen.

Code: Alles auswählen

!" PV Auslesen

! Offset der Register =  -1

dom.GetObject("CUxD.CUX2801012:1.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl xxx.xxx.xxx.xxx 512 1 03 40083 1");
dom.GetObject("CUxD.CUX2801012:1.CMD_QUERY_RET").State(1);
var wert = dom.GetObject("CUxD.CUX2801012:1.CMD_RETS").State();

dom.GetObject("CUxD.CUX2801012:1.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl xxx.xxx.xxx.xxx 512 1 03 40084 1");
dom.GetObject("CUxD.CUX2801012:1.CMD_QUERY_RET").State(1);
var scale = dom.GetObject("CUxD.CUX2801012:1.CMD_RETS").State();

scale = scale.ToInteger();
wert = wert.ToInteger();
scale = scale * (-1); ! oder scale = scale.Abs();

if (scale == 1)  { wert = wert / 10 ; }
if (scale == 2)  { wert = wert / 100; }
if (scale == 3) { wert = wert / 1000; }

dom.GetObject("PV Momentanleistung").State(wert); 

Programm "PV Status" erstellen und alle paar Minuten aufrufen.

Code: Alles auswählen

! PV Auslesen
! Status und Fehlermeldungen
!
! Status
dom.GetObject("CUxD.CUX2801012:3.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl xxx.xxx.xxx.xxx 512 1 03 40107 1");
dom.GetObject("CUxD.CUX2801012:3.CMD_QUERY_RET").State(1);
var wert = dom.GetObject("CUxD.CUX2801012:3.CMD_RETS").State();

if (wert == 1) { wert = "Aus";}
if (wert == 2) { wert = "Nachtmodus";}
if (wert == 3) { wert = "????";}    ! Prüfen was dies ist
if (wert == 4) { wert = "AN Energieeinspeisung";}

dom.GetObject("PV Betriebszustand").State(wert);

dom.GetObject("CUxD.CUX2801012:4.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl xxx.xxx.xxx.xxx 512 1 03 40108 1");
dom.GetObject("CUxD.CUX2801012:4.CMD_QUERY_RET").State(1);
var wert = dom.GetObject("CUxD.CUX2801012:4.CMD_RETS").State();

if (wert == 0) { wert = "Keine";}

dom.GetObject("PV Fehlernummer").State(wert);

Gruß
RaspberryPI 3B+ PivCCU3. LEDs und Taster an GPIO´s, Fenstersensoren, Rolladenaktoren, Sirene,HQ WebUI, CuxD, XML-API, E-Mail, USB Zählersensor am Raspberry, OpenWeatherMap.API, 1 Wire Temperatursensoren.
WallBe Pro Ladebox und Solaredge Solaranalage via ModBus Anbindung. CarWings/NissanEV anbindung.
SMA Sunny Boy Storage.

Antworten

Zurück zu „HomeMatic allgemein“