Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus
Verfasst: 24.12.2018, 18:36
Hallo,
ich habe eine Solaranlage mit einem SMA Sunny Boy Wechselrichter und mit einem SMA Home Manager 2. Die Werte des Systems (Netzeinspeisung/Verbrauch und die derzeitige PV Leistung) können recht leicht in Variablen der Homematic CCU3 eingelesen werden. Dann kann man sich Skripte programmieren um diese Energie zu verbrauchen.
Wie dies geht beschreibe ich nun:
Voraussetzung:
1) SMA Sunnyboy Wechselrichter unterstützt das Modbus Protokoll und dies ist auch eingeschaltet im Wechselrichter.
2) Falls vorhanden: Ein Energy Meter oder ein SMA Homemanager zur Leistungsmessung ist angeschlossen und im Wechselrichter konfiguriert. (Im Wechselrichter kann man den aktuellen Verbrauch im Web Menu sehen).
3) SMA Sunnyboy und die Homematic CCU3 befinden sich im gleichen Netzwerk.
CCU3 Setup:
1) In der CCU diese Systemvariablen anlegen vom Typ Number, „SMA AC Leistung“, „SMA DC Leistung“, „SMA Netzbezug“, „SMA Netzeinspeisung“. Einheit: Watt
2) In der CCU diese Systemvariable anlegen vom Typ Character string. „SMA Zeitstempel”, Einheit: Uhr
3) Nun SSH in der CCU aktivieren und mit FTP (FileZilla) ein Verzeichnis im CCU3 Dateisystem anlegen: /usr/local/addons/modbus, also das Verzeichnis modbus in Verzeichnis /usr/local/addons anlegen. Dateiattribute des modbus Verzeichnisses setzen auf: 701
4) Mit FTP oder FileZilla die beiden Dateien modbus.tcl und sma.tcl in das Verzeichnis modbus kopieren. Dateiattribute beider Dateien setzen auf: 755. 5) Nun dieses Script auf der CCU3 einrichten und z.B. jede Minute laufen lassen: Achtung: 192.168.178.35 im folgenden Skript ersetzen durch die IP Adresse des SMA Sunny Boy Wechselrichters.
string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/modbus/sma.tcl 192.168.178.35 30865 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA Netzbezug");
SMAValue.State(lGetOut.StrValueByIndex(" ", 1));
string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/modbus/sma.tcl 192.168.178.35 30867 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA Netzeinspeisung");
SMAValue.State(lGetOut.StrValueByIndex(" ", 1));
string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/modbus/sma.tcl 192.168.178.35 30773 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA DC Leistung");
SMAValue.State(lGetOut.StrValueByIndex(" ", 1));
string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/modbus/sma.tcl 192.168.178.35 30775 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA AC Leistung");
SMAValue.State(lGetOut.StrValueByIndex(" ", 1));
var t = system.Date("%H:%M:%S");
dom.GetObject("SMA Zeitstempel").State(t);
#WriteLine(lGetErr.StrValueByIndex(" ", 1));
Das Program liest nacheinander mehrere ModBus Register des Wechselrichters aus. Man kann natürlich auch noch andere Register auslesen. Dazu gibt es auf der SMA Webseite eine Liste aller verfügbaren ModBus Register.
Nun kann man die Werte in Scripten verwenden und abhängig von den PV Werten seine Verbraucher steuern und auch das laden seines E-Autos.
Achtung: Wenn die Dateien modbus.tcl oder sma.tcl editiert werden, dann einen Editor verwenden der keine CRLF einfügt. (Z.B. NotePad++).
Ich hoffe das meine Anleitung nützlich ist.
Frohe Weihnachten, M. Schneider
Noch ein Hinweis: Fall der Wechselrichter mehrere Strings hat, dann wird in "SMA DC Leistung" nur die Leistung vom String A angezeigt. Ich habe noch keine ModBus Register für die weiteren Strings gefunden. Bitte melden wenn jemand Infos hierzu hat.
ich habe eine Solaranlage mit einem SMA Sunny Boy Wechselrichter und mit einem SMA Home Manager 2. Die Werte des Systems (Netzeinspeisung/Verbrauch und die derzeitige PV Leistung) können recht leicht in Variablen der Homematic CCU3 eingelesen werden. Dann kann man sich Skripte programmieren um diese Energie zu verbrauchen.
Wie dies geht beschreibe ich nun:
Voraussetzung:
1) SMA Sunnyboy Wechselrichter unterstützt das Modbus Protokoll und dies ist auch eingeschaltet im Wechselrichter.
2) Falls vorhanden: Ein Energy Meter oder ein SMA Homemanager zur Leistungsmessung ist angeschlossen und im Wechselrichter konfiguriert. (Im Wechselrichter kann man den aktuellen Verbrauch im Web Menu sehen).
3) SMA Sunnyboy und die Homematic CCU3 befinden sich im gleichen Netzwerk.
CCU3 Setup:
1) In der CCU diese Systemvariablen anlegen vom Typ Number, „SMA AC Leistung“, „SMA DC Leistung“, „SMA Netzbezug“, „SMA Netzeinspeisung“. Einheit: Watt
2) In der CCU diese Systemvariable anlegen vom Typ Character string. „SMA Zeitstempel”, Einheit: Uhr
3) Nun SSH in der CCU aktivieren und mit FTP (FileZilla) ein Verzeichnis im CCU3 Dateisystem anlegen: /usr/local/addons/modbus, also das Verzeichnis modbus in Verzeichnis /usr/local/addons anlegen. Dateiattribute des modbus Verzeichnisses setzen auf: 701
4) Mit FTP oder FileZilla die beiden Dateien modbus.tcl und sma.tcl in das Verzeichnis modbus kopieren. Dateiattribute beider Dateien setzen auf: 755. 5) Nun dieses Script auf der CCU3 einrichten und z.B. jede Minute laufen lassen: Achtung: 192.168.178.35 im folgenden Skript ersetzen durch die IP Adresse des SMA Sunny Boy Wechselrichters.
string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/modbus/sma.tcl 192.168.178.35 30865 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA Netzbezug");
SMAValue.State(lGetOut.StrValueByIndex(" ", 1));
string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/modbus/sma.tcl 192.168.178.35 30867 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA Netzeinspeisung");
SMAValue.State(lGetOut.StrValueByIndex(" ", 1));
string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/modbus/sma.tcl 192.168.178.35 30773 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA DC Leistung");
SMAValue.State(lGetOut.StrValueByIndex(" ", 1));
string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/modbus/sma.tcl 192.168.178.35 30775 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA AC Leistung");
SMAValue.State(lGetOut.StrValueByIndex(" ", 1));
var t = system.Date("%H:%M:%S");
dom.GetObject("SMA Zeitstempel").State(t);
#WriteLine(lGetErr.StrValueByIndex(" ", 1));
Das Program liest nacheinander mehrere ModBus Register des Wechselrichters aus. Man kann natürlich auch noch andere Register auslesen. Dazu gibt es auf der SMA Webseite eine Liste aller verfügbaren ModBus Register.
Nun kann man die Werte in Scripten verwenden und abhängig von den PV Werten seine Verbraucher steuern und auch das laden seines E-Autos.
Achtung: Wenn die Dateien modbus.tcl oder sma.tcl editiert werden, dann einen Editor verwenden der keine CRLF einfügt. (Z.B. NotePad++).
Ich hoffe das meine Anleitung nützlich ist.
Frohe Weihnachten, M. Schneider
Noch ein Hinweis: Fall der Wechselrichter mehrere Strings hat, dann wird in "SMA DC Leistung" nur die Leistung vom String A angezeigt. Ich habe noch keine ModBus Register für die weiteren Strings gefunden. Bitte melden wenn jemand Infos hierzu hat.