Varta Engion XML auslesen

Ich möchte einen Varta Engion Batteriespeicher mittels xml auslesen, komme jedoch nicht zurecht. Eine Suche in diesem und anderen Foren brachte mich nicht weiter, die Rückgabe/Format des XML´s passt auch nicht zu verschiedenen Angaben mit Start und Ende Tags.
Ich habe mal das Protokoll etc. angefügt.
Vielleicht kann mir ja jemand einen Tipp geben.

<?

$xml = simplexml_load_file('http://192.168.1.232/cgi/ems_data.xml');
//$xml = file("http://192.168.1.232/cgi/ems_data.xml");
//$xml = file_get_contents('http://192.168.1.232/cgi/ems_data.xml');
//echo $Anlagendaten ;
echo $xml;
print_r($xml);

$wert=$xml->name[0];
echo $wert;
$name = $wert->SOC;
echo"Werte abgefragt:";
echo $name;
echo "End";
//echo $Anlagendaten;


?>

Ausgabe als Text:



SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [Timestamp] => 1414698891
            [id] => 100001285
            [ChargerCount] => 12
            [Description] => Schaefer
        )

    [inverter] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [id] => M041844
                )

            [var] => Array
                (
                    [0] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [name] => P
                                    [value] => 1513
                                )

                        )

                    [1] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [name] => SOC
                                    [value] => 75
                                )

                        )

                    [2] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [name] => Capacity
                                    [value] => 5529
                                )

                        )

                    [3] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [name] => State
                                    [value] => 2
                                )

                        )

                )

        )

)

Notice:  Trying to get property of non-object in [Wohnhaus\Energieversorgung\Engion\Datenauslesen] on line 12
Werte abgefragt:End

140822_Datenschnittstelle.pdf (171 KB)

Ausgabe_Internet_Expl.jpg

Name ist kein Tag sondern ein Attribut von var.
Lies dir die Beispiele vom simplexmlelement auf PHP.net durch.
http://de2.php.net/manual/de/simplexml.examples-basic.php
Bei dir müsste das so gehen
$xml->inverter->var[0][‚name‘]
Und mit var_dump statt print_r ist dass vielleicht noch besser lesbar.
Am sinnvollsten ist du nutzt foreach auf $xml->inverter->var as $var.
Und in der Schleife dann mit $var[‚name‘] den Ident für deine IPS-Variable holen und den Wert aus $var[‚value‘] in diese IPS Variable schreiben.
Michael

Funktioniert !
habe ich jetzt folgendermaßen gelöst:

<?

$xml = simplexml_load_file('http://192.168.1.232/cgi/ems_data.xml');



// aktuelle Leistung
$a = $xml->inverter->var[0]['value'];
echo $a,"
";
setValueFloat(45775 /*[Wohnhaus\Energieversorgung\Engion\Wechselrichterleistung]*/,floatval($a));

//Ladezustand
$b = $xml->inverter->var[1]['value'];
echo $b,"
";
setValue(22437 /*[Wohnhaus\Energieversorgung\Engion\Ladezustand SOC]*/,floatval($b));

//Kapazität
$c = $xml->inverter->var[2]['value'];
echo $c,"
";
setValue(25984 /*[Wohnhaus\Energieversorgung\Engion\Bruttokapazität]*/,floatval($c));

//Status
$d = $xml->inverter->var[3]['value'];
echo $d,"
";
setValue(43908 /*[Wohnhaus\Energieversorgung\Engion\Status]*/,floatval($d));

?>

Bin nun stolzer Besitzer eines Varta Speichers. Dein Auslesescript funktioniert prima. Danke!

Gruß Markus

Hallo,

auch bei mir steht jetzt ein Varta Speicher Typ Element6. Script funktioniert tadellos.
Ich habe noch die URL in eine separate Variable gepackt. Das hilft bei einer etwaigen Änderung im Router bspw.

Grüße
Ansgar

<?

//Script zum auslesen der XML-Schnittstelle des Varta Stromspeichers. Original von Schoipi
 
$IPAdresse = GetValue(14765 /*[System\IP Adressen\Varta Speicher]*/);

$url = "http://".$IPAdresse."/cgi/ems_data.xml";

$xml = simplexml_load_file($url);


// aktuelle Leistung
$a = $xml->inverter->var[0]['value'];
echo $a,"
";
setValueFloat(55889 /*[Haustechnik\Varta element 6 Stromspeicher\Wechselrichterleistung]*/,floatval($a));

//Ladezustand
$b = $xml->inverter->var[1]['value'];
echo $b,"
";
setValue(32887 /*[Haustechnik\Varta element 6 Stromspeicher\Ladezustand]*/,floatval($b));

//Kapazität
$c = $xml->inverter->var[2]['value'];
echo $c,"
";
setValue(12767 /*[Haustechnik\Varta element 6 Stromspeicher\Bruttokapazität]*/,floatval($c));

//Status
$d = $xml->inverter->var[3]['value'];
echo $d,"
";
setValue(17053 /*[Haustechnik\Varta element 6 Stromspeicher\Status]*/,floatval($d));



?>