Diesmal habe ich beim Skript darauf geachtet, dass mal alles ganz oben einstellen kann und nicht mehr im Code rum suchen muss.
Code: Alles auswählen
!-----------------------------------------------------------------------------
! Hier alle was man verändern kann/muss
! Voraussetzung: CUxD und Fronius Wechselrichter
!-----------------------------------------------------------------------------
var froniusIP = "192.168.0.148"; !IP des Fronius Wechselrichters
var deviceID = "1"; !Device ID (wird meistens stimmen, wenn nicht ausprobieren)
var CUxD_Device = "CUxD.CUX2801001:4"; !CUxD Virtuelles Gerät
string variable_verbrauch = "PV_Verbrauch"; !Name der Variabel für den Verbrauch
string variable_erzeugung = "PV_Erzeugung"; !Name der Variabel für die Erzeugung
string variable_differenz = "PV_Differenz"; !Name der Variabel für die Differenz
!-----------------------------------------------------------------------------
! Ab hier muss man nichts mehr beachten
!-----------------------------------------------------------------------------
string pos1;
string pos2 = ",";
string pos3 = ":";
real wertVerbrauch;
real wertErzeugung = 0;
real wertDifferenz;
integer wert_pos;
var stdout;
string url = "http://" + froniusIP + "/solar_api/v1/";
string verbrauchParam = "GetMeterRealtimeData.cgi?Scope=System";
string erzeugungParam="GetInverterRealtimeData.cgi?Scope=Device&DeviceId=" + deviceID + "&DataCollection=CommonInverterData";
!-----------------------------------------------------------------------------
! Aktueller Verbrauch in [W]
!-----------------------------------------------------------------------------
dom.GetObject(CUxD_Device + ".CMD_SETS").State("wget -q -O - " + url + verbrauchParam);
dom.GetObject(CUxD_Device + ".CMD_QUERY_RET").State(1);
stdout = dom.GetObject(CUxD_Device + ".CMD_RETS").State();
pos1 = "\"PowerReal_P_Sum\" :";
wert_pos = stdout.Find(pos1) + pos1.Length();
wertVerbrauch = stdout.Substr(wert_pos,20).StrValueByIndex(pos2,0);
dom.GetObject(variable_verbrauch).Variable(wertVerbrauch.ToInteger() * -1);
!-----------------------------------------------------------------------------
! Aktuell wird erzeugt in [W] (Natürlich nicht Nachts)
!-----------------------------------------------------------------------------
real zeit = (0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger();
real tagesbeginn = (0.01 * system.SunriseTime("%M").ToInteger()) + system.SunriseTime("%H").ToInteger();
real tagesende = (0.01 * system.SunsetTime("%M").ToInteger()) + system.SunsetTime("%H").ToInteger();
if (zeit > tagesbeginn - 1 && zeit < tagesende + 1) {
dom.GetObject(CUxD_Device + ".CMD_SETS").State("wget -q -O - '" + url + erzeugungParam + "'");
dom.GetObject(CUxD_Device + ".CMD_QUERY_RET").State(1);
stdout = dom.GetObject(CUxD_Device + ".CMD_RETS").State();
pos1 = "\"PAC\" : {";
wert_pos = stdout.Find(pos1) + pos1.Length();
wertErzeugung = stdout.Substr(wert_pos,20).StrValueByIndex(pos2,0).StrValueByIndex(pos3,1);
dom.GetObject(variable_erzeugung).Variable(wertErzeugung.ToInteger());
}
!-----------------------------------------------------------------------------------------------
! Differenz in [W] (Wenn es < 0 wird, verbraucht man mehr als erzeugt wird)
!-----------------------------------------------------------------------------------------------
wertDifferenz = wertErzeugung.ToInteger() + wertVerbrauch.ToInteger();
dom.GetObject(variable_differenz).Variable(wertDifferenz.ToInteger());