Vielen Dank für die schnellen Antworten.
Ich habe mich im ersten Schritt für die Lösung von Tyfys entschieden. Mit den Daten im Script festgeschrieben funktioniert es auch. Mit den Daten des Energiespeichers kommen komische Werte raus:
Das jetzige Script lautet:
!string xml_daten= '<root Timestamp="1639926741" id="130202543" ChargerCount="1" Description="VARTA"><inverter id="K16706"><var name="P" value="0"/><var name="SOC" value="0"/><var name="Capacity" value="5867"/><var name="State" value="4"/><var name="OG" value="2500"/><var name="UG" value="-2500"/></inverter></root>';
var url = "
http://192.168.178.9/cgi/ems_data.xml";
!hier ist die Abfrage mit CUxD
dom.GetObject("CUxD.CUX2801001:4.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:4.CMD_QUERY_RET").State(1);
string xml_daten = dom.GetObject("CUxD.CUX2801001:4.CMD_RETS").State();
WriteLine(xml_daten);
xml_daten = xml_daten.ToLatin();
xml_daten = xml_daten.Replace("\n", ""); ! Zeilenumbrüche entfernen
xml_daten = xml_daten.Replace("\r", ""); ! da sonst auch im VariablenName bzw VariablenWert
string such1 = '<var name="';
string such2 = '" value="';
string suche ;
string index;
string wert;
string sysvar;
var sv_value ;
! saucharr = "1.xml_variable{HM-SysVar[VariablenTyp;2.xml_variable{HM-SysVar[VariablenTyp; usw...
string sucharr = "P[VARTA_NEO_LEISTUNG[n;SOC[VARTA_NEO_SOC[n;Capacity[VARTA_NEO_KAPAZITÄT[n;State[VARTA_NEO_STATUS[n";
foreach(index, sucharr.Split(";"))
{
var suche = such1 # index.StrValueByIndex("[", 0) #such2;
wert = xml_daten.Substr(xml_daten.Find(suche) + suche.Length()).Substr(0, (xml_daten.Substr(xml_daten.Find(such1) + suche.Length()).Find(such2)));
wert = wert.Substr(0 ,wert.Find('"/>') );
if ( index.StrValueByIndex("[", 2) =="b" )
{
sv_value = "false;true".StrValueByIndex(";",wert.ToInteger());
}
elseif ( index.StrValueByIndex("[", 2) =="n" )
{
sv_value = wert.ToFloat();
}
sysvar = index.StrValueByIndex("[", 1);
object svdp = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvar);
if (svdp)
{
svdp.State(sv_value);
WriteLine("Variable: " # sysvar # " gespeichert mit Wert " # sv_value);
}
else
{
WriteLine("Variable: " # sysvar # " nicht angelegt für Wert " # sv_value);
}
}
folgende Antwort kommt beim ausführen des Scriptes:
root Timestamp='1639945036' id='130202380' ChargerCount='1' Description='VARTA'
inverter id='K126106'
var name='P' value='0'/
var name='SOC' value='0'/
var name='Capacity' value='5867'/
var name='State' value='4'/
var name='OG' value='2500'/
var name='UG' value='-2500'/
/inverter
/root
Variable: VARTA_NEO_LEISTUNG gespeichert mit Wert 9945036.000000
Variable: VARTA_NEO_SOC gespeichert mit Wert 45036.000000
Variable: VARTA_NEO_KAPAZITÄT gespeichert mit Wert 0.000000
Variable: VARTA_NEO_STATUS gespeichert mit Wert 36.000000
Ich bin ein wenig ratlos!