Ich erklär es nochmal kurz:
Code: Alles auswählen
!Leistungsdaten des SMA Wechselrichters AC/DC
string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/modbus/sma.tcl 192.168.178.32 30775 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA AC Leistung");
SMAValue.State(lGetOut.StrValueByIndex(" ", 1));
system.Exec("tclsh /usr/local/addons/modbus/sma.tcl 192.168.178.32 30773 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA DC Leistung");
SMAValue.State(lGetOut.StrValueByIndex(" ", 1));
!WriteLine(lGetErr.StrValueByIndex(" ", 1));
!Leistungsdaten des SMA Wechselrichters Gesamtertrag
string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/modbus/sma.tcl 192.168.178.32 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);
!WriteLine(lGetErr.StrValueByIndex(" ", 1));
!Leistungsdaten des SMA Wechselrichters Ertrag heute
string lGetOut = "";
string lGetErr = "";
system.Exec("tclsh /usr/local/addons/modbus/sma.tcl 192.168.178.32 30535 2",&lGetOut,&lGetErr);
var SMAValue=dom.GetObject("SMA Ertrag heute");
SMAValue.State((lGetOut.StrValueByIndex(" ", 1)).ToFloat()/1000);
!WriteLine(lGetErr.StrValueByIndex(" ", 1));
!Leistungsdaten des SMA Wechselrichters Zeit
var t = system.Date("%H:%M:%S");
dom.GetObject("SMA Zeit").State(t);
ist mein Script und ich lasse es jede Minute laufen per Zeitmodul. Das Phänomen ist jetzt folgendes: Manchmal bekomme ich alle Daten angezeigt in den Systemvariablen, machmal fehlt SMA AC Leistung, manchmal sind alle auf 0, manchmal fehlt der Tagesertrag oder es sind "zufällig" auch mal alle Daten übertragen worden. Ich finde nicht heraus warum nicht zuverlässig jede Minute die 4 Register übertragen werden. Selbst wenn ich nur AC und DC abrufe fehlt unreproduzierbar mal der eine oder andere Wert aus dem Register.
Grüße