Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Mrt001
Beiträge: 2
Registriert: 12.06.2021, 16:37
System: CCU und Access Point

Re: Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Beitrag von Mrt001 » 25.06.2021, 20:31

Mrt001 hat geschrieben:
12.06.2021, 16:49
Hallo mschneider

super Skript das du geschrieben hast. Das hat auf anhieb bei mir funktioniert. Nur habe ich zwei kleine Probleme und eine Frage:
  • 1. Ich lese das Register "30535 - Am laufenden Tag eingespeiste Energie auf allen Au enleitern (Tagesertrag), in Wh" aus. Das funktioniert soweit sehr gut. Jedoch wenn der ungefähr der Wert 32.000 erreicht wird springt die Zahl auf -32.000 Weißt du zufällig wo da das Problem im Skript liegt?
  • 2. Das Register "30529 - Total eingespeiste AC-Energie auf allen Aussenleitern (Gesamtertrag), in Wh" kann ich zwar auslesen, aber der Wert stimmt nicht mit dem aus meinem SMA überein. Der Wert ist ungefähr um 500 höher als die "aktuelle Leistung" was der SMA WR liefert.
  • 3. Das Register "30513 - Total eingespeiste AC-Energie auf allen Aussenleitern (Gesamtertrag), in Wh" kann ich nicht auslesen. Liegt es daran, dass es ein U64 Wert ist?
Ich habe ein Sunny Tripower 8.0 im Einsatz.

Vielen Dank im Voraus für eure Hilfe.
mschneider hat geschrieben:
16.03.2019, 10:26
Hallo rucksman007,

Modbus register können 32 bit lang sein oder auch nur 16 bit. Mein Skript gibt immer 32 bit Werte zurück in Form von 2 Integer zahlen die durch ein Leerzeichen getrennt sind. In deinem Fall: 85 und 11385. Um den 32 bit Wert zu erhalten müsstest du folgendes machen:

32bitwert = 85 * 256 * 256 + 11385.

Code: Alles auswählen

32bitwert = lGetOut.StrValueByIndex(" ", 0) * 256 * 256 + lGetOut.StrValueByIndex(" ", 1) 
Gruss, M. Schneider
Ich habe meinen Gedankenfehler gefunden. Wie bereits von mschneider erwähnt wird der 32Bit Wert einer Zahl in Form von 2 Integern zurückgegeben. Zusätzlich werden die Werte zwischen -32768 und 32768 (=2^16) ausgegeben. Dies muss bei der Berechnung beachtet werden. Beim Auslesebefehl muss man auf den Index (0 oder 1) aufpassen!

z.B. wenn man Register 30529 ausliest:
Wert 1 = lGetOut.StrValueByIndex(" ", 0).ToInteger()
Wert 2 = lGetOut.StrValueByIndex(" ", 1).ToInteger()
dann muss es entsprechend umgerechnet werden.

Code: Alles auswählen

32bitwert = lGetOut.StrValueByIndex(" ", 0) * 256 * 256 + lGetOut.StrValueByIndex(" ", 1) 
Ich hatte bisher immer nur den 2. Integerwert ausgelesen. Man muss jedoch beide Integerwerte auslesen und dann entsprechend Umrechnen. Dann erhält man auch richtige Werte.

Ich habe meinen Code wie folgt angepasst:

Code: Alles auswählen

string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/modbus/sma.tcl 192.168.178.100 30529 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA_Gesamtertrag");
var y = 0;
var x1 = 0;
var x2 = 0;
x1 = lGetOut.StrValueByIndex(" ", 0).ToInteger();
x2 = lGetOut.StrValueByIndex(" ", 1).ToInteger();
if (x2 < 0) {
y=1;
}
else {
y=0;
 }
string s1 = ((x1 * 256 * 256) + x2 + (65536 * y)).ToString();
SMAValue.State(s1.ToFloat()/ 1000);
 
Ich hoffe das hilft euch beim Auslesen weiterer Werte!

matze-pe
Beiträge: 757
Registriert: 11.02.2013, 08:38
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Beitrag von matze-pe » 20.08.2021, 14:16

Hallo,
so ich habe gestern die Anlage gekauft, wird in ca 4 Wochen angeschlossen sein.
Ich habe jetzt den SMA Wechselrichter Tripower 20.000 bestellt, der wird mit 5 Strings angeschlossen (3x11 und 2x 12).

Den SMA Sunny Home Manager 2.0 habe ich nicht mitbestellt, da die Homematic das federführende System sein soll.

Reicht der Wechselrichter aus, um die Werte auslesen zu können?


Viele Grüße
Matthias
CCU3 (80 Geräte, 105 Variablen, 50 Programme) * CCU.IO + DashUI + Apple HomeKit (Homebridge) auf Raspi2

wendy2702
Beiträge: 463
Registriert: 05.03.2014, 19:31
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Beitrag von wendy2702 » 20.08.2021, 14:57

Kommt wohl drauf an welche Werte du alles haben willst.

Einspeisung, Verbrauch und Bezug wirst du so nicht bekommen da der WR diese Werte nicht kennt.

Er liefert lediglich Informationen wie: Erzeugung, Tages Ertrag, Spannungen der Phasen, Strom der Phasen, Spannungen / Strom der Mpp Eingänge.
piVCCU3/iobroker mit einigen Aktoren, Sensoren, Empfängern und Sendern.

matze-pe
Beiträge: 757
Registriert: 11.02.2013, 08:38
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Beitrag von matze-pe » 20.08.2021, 15:02

Ja die Werte fand ich gerade wichtig, Einspeisung und Verbrauch.
D.h. Die Werte kriege ich nur mit dem SMA Home Manager 2.0?
CCU3 (80 Geräte, 105 Variablen, 50 Programme) * CCU.IO + DashUI + Apple HomeKit (Homebridge) auf Raspi2

wendy2702
Beiträge: 463
Registriert: 05.03.2014, 19:31
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Beitrag von wendy2702 » 20.08.2021, 15:16

Über den oder aber über einen anderen Zähler mit zum Beispiel Modbus Anbindung oder eventuell über dem Zweirichtungszähler den dein Versorger einbaut.
piVCCU3/iobroker mit einigen Aktoren, Sensoren, Empfängern und Sendern.

matze-pe
Beiträge: 757
Registriert: 11.02.2013, 08:38
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Beitrag von matze-pe » 20.08.2021, 15:32

Danke, der SMA Home Manager an sich ist aber nicht mit den HM Aktoren kompatibel?
Sonst schaue ich dann mal, und löse es über den neuen Stromzähler.
CCU3 (80 Geräte, 105 Variablen, 50 Programme) * CCU.IO + DashUI + Apple HomeKit (Homebridge) auf Raspi2

Benutzeravatar
shartelt
Beiträge: 7421
Registriert: 14.01.2015, 14:59
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 524 Mal
Danksagung erhalten: 752 Mal

Re: Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Beitrag von shartelt » 20.08.2021, 16:10

iobroker hat nen Adapter für den SMA EM, SHM und SHM 2.0

matze-pe
Beiträge: 757
Registriert: 11.02.2013, 08:38
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Beitrag von matze-pe » 20.08.2021, 17:51

Danke, dann werde ich mir anstatt des Home-Managers2 den SMA Energy Meter besorgen.
Damit kann ich dann auch ohne ioBroker, direkt aus der HM die Werte abfragen: viewtopic.php?f=31&t=48333
CCU3 (80 Geräte, 105 Variablen, 50 Programme) * CCU.IO + DashUI + Apple HomeKit (Homebridge) auf Raspi2

matze-pe
Beiträge: 757
Registriert: 11.02.2013, 08:38
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Beitrag von matze-pe » 26.09.2021, 14:08

mschneider hat geschrieben:
24.12.2018, 18:36

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.
Hallo,

meine Anlage (Tripower-20.000-30) mit SMA HomeManager 2.0 ist seit Freitag auch in Betrieb.
Das Skript läuft auch soweit, in der Sunny App sehe ich alle Daten (Bezug, Einspeisen, Verbrauch).

Anbei mein Skript, allerdings bleiben die Werte "SMA Netzbezug" und "SMA Netzeinspeisung" leer.
Bei Voraussetung, Punkt 2 steht. Der HomeManager muss im Wechselrichter konfiguriert werden.
Ich habe im SunnyExplorer ModBus aktiviert und Anlagepasswort gesetzt, um beide Geräte im SunnyPortal einzubinden.

Muss der HomeManager woanders im Wechselrichter noch aktiviert werden?=

Code: Alles auswählen

!https://homematic-forum.de/forum/viewtopic.php?f=31&t=47813
string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/sma/sma.tcl 192.168.1.131 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/sma/sma.tcl 192.168.1.131 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/sma/sma.tcl 192.168.1.131 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/sma/sma.tcl 192.168.1.131 30775 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA AC Leistung");
SMAValue.State(lGetOut.StrValueByIndex(" ", 1));


string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/sma/sma.tcl 192.168.1.131 30529 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA Gesamtertrag");
var y = 0;
var x1 = 0;
var x2 = 0;
x1 = lGetOut.StrValueByIndex(" ", 0).ToInteger();
x2 = lGetOut.StrValueByIndex(" ", 1).ToInteger();
if (x2 < 0) {
y=1;
}
else {
y=0;
 }
string s1 = ((x1 * 256 * 256) + x2 + (65536 * y)).ToString();
SMAValue.State(s1.ToFloat()/ 1000);

var t = system.Date("%H:%M:%S");
dom.GetObject("SMA Zeitstempel").State(t);

#WriteLine(lGetErr.StrValueByIndex(" ", 1));
Viele Grüße
Matthias
Dateianhänge
2021-09-26 14_05_51-Window.png
2021-09-26 14_05_51-Window.png (15.72 KiB) 1806 mal betrachtet
CCU3 (80 Geräte, 105 Variablen, 50 Programme) * CCU.IO + DashUI + Apple HomeKit (Homebridge) auf Raspi2

matze-pe
Beiträge: 757
Registriert: 11.02.2013, 08:38
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Beitrag von matze-pe » 26.09.2021, 17:47

Funktioniert jetzt, habe das Skript mit dem aus dem anderen Thread (viewtopic.php?f=31&t=48333) zusammen gefasst :)

Code: Alles auswählen

!https://homematic-forum.de/forum/viewtopic.php?f=31&t=47813

string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/sma/sma.tcl 192.168.1.131 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/sma/sma.tcl 192.168.1.131 30775 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA AC Leistung");
SMAValue.State(lGetOut.StrValueByIndex(" ", 1));

string lGetOut = "";
string lGetErr = "";
system.Exec("socat -x -u -T 2 -t 2 UDP4-RECV:9522,ip-add-membership=239.12.255.254:0.0.0.0 STDOUT & pid=$! ; sleep 1 && kill $pid",&lGetOut,&lGetErr);
string serial = lGetErr.StrValueByIndex(" ", 7+20) # lGetErr.StrValueByIndex(" ", 7+21) # lGetErr.StrValueByIndex(" ", 7+22) # lGetErr.StrValueByIndex(" ", 7+23);
system.Exec("printf '%d' 0x" # serial, &serial, &lGetErr);
string netzbezug = lGetErr.StrValueByIndex(" ", 39) # lGetErr.StrValueByIndex(" ", 40) # lGetErr.StrValueByIndex(" ", 41) # lGetErr.StrValueByIndex(" ", 42);
system.Exec("printf '%d' 0x" # netzbezug, &netzbezug, &lGetErr);
netzbezug = netzbezug.ToInteger() / 10;
string netzeinspeisung = lGetErr.StrValueByIndex(" ", 59) # lGetErr.StrValueByIndex(" ", 60) # lGetErr.StrValueByIndex(" ", 61) # lGetErr.StrValueByIndex(" ", 62);
system.Exec("printf '%d' 0x" # netzeinspeisung, &netzeinspeisung, &lGetErr);
netzeinspeisung = netzeinspeisung.ToInteger() / 10;
WriteLine(serial);
WriteLine(netzbezug);
WriteLine(netzeinspeisung);
dom.GetObject("SMA Netzbezug").State(netzbezug);
dom.GetObject("SMA Netzeinspeisung").State(netzeinspeisung);

string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/sma/sma.tcl 192.168.1.131 30529 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA Gesamtertrag");
var y = 0;
var x1 = 0;
var x2 = 0;
x1 = lGetOut.StrValueByIndex(" ", 0).ToInteger();
x2 = lGetOut.StrValueByIndex(" ", 1).ToInteger();
if (x2 < 0) {
y=1;
}
else {
y=0;
 }
string s1 = ((x1 * 256 * 256) + x2 + (65536 * y)).ToString();
SMAValue.State(s1.ToFloat()/ 1000);

var t = system.Date("%H:%M:%S");
dom.GetObject("SMA Zeitstempel").State(t);

#WriteLine(lGetErr.StrValueByIndex(" ", 1));
Dateianhänge
2021-09-26 17_47_11-Window.png
2021-09-26 17_47_11-Window.png (20.31 KiB) 1785 mal betrachtet
CCU3 (80 Geräte, 105 Variablen, 50 Programme) * CCU.IO + DashUI + Apple HomeKit (Homebridge) auf Raspi2

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“