XML Datei auslesen, brauche Hilfe

Hi ich will die XML Datei von der CCu1 auslesen die sieht so aus :

<deviceList>
<device name="4xRelais" address="IEQ0088073" ise_id="1447" interface="BidCos-RF" device_type="HM-LC-Sw4-DR" ready_config="true">
<channel name="Dachboden Licht" type="26" address="IEQ0088073:1" ise_id="1472" direction="RECEIVER" parent_device="1447" index="1" group_partner="" aes_available="true" transmission_mode="DEFAULT" visible="true" ready_config="true" operate="true"/>
<channel name="Hauptschalter Licht" type="26" address="IEQ0088073:2" ise_id="1478" direction="RECEIVER" parent_device="1447" index="2" group_partner="" aes_available="true" transmission_mode="DEFAULT" visible="true" ready_config="true" operate="true"/>
<channel name="Außenflurlicht" type="26" address="IEQ0088073:3" ise_id="1484" direction="RECEIVER" parent_device="1447" index="3" group_partner="" aes_available="true" transmission_mode="DEFAULT" visible="true" ready_config="true" operate="true"/>
<channel name="Hauptschalter Steckdosen" type="26" address="IEQ0088073:4" ise_id="1490" direction="RECEIVER" parent_device="1447" index="4" group_partner="" aes_available="true" transmission_mode="DEFAULT" visible="true" ready_config="true" operate="true"/>
</device>
<device name="Backofen" address="LEQ0537675" ise_id="5123" interface="BidCos-RF" device_type="HM-ES-PMSw1-Pl" ready_config="true">
<channel name="Backofen" type="26" address="LEQ0537675:1" ise_id="5152" direction="RECEIVER" parent_device="5123" index="1" group_partner="" aes_available="true" transmission_mode="DEFAULT" visible="true" ready_config="true" operate="true"/>
<channel name="Backofen 1" type="17" address="LEQ0537675:2" ise_id="5158" direction="UNKNOWN" parent_device="5123" index="2" group_partner="" aes_available="true" transmission_mode="DEFAULT" visible="true" ready_config="true" operate="true"/>
<channel name="Backofen 2" type="17" address="LEQ0537675:3" ise_id="5165" direction="SENDER" parent_device="5123" index="3" group_partner="" aes_available="true" transmission_mode="DEFAULT" visible="true" ready_config="true" operate="true"/>
<channel name="Backofen 3" type="17" address="LEQ0537675:4" ise_id="5167" direction="SENDER" parent_device="5123" index="4" group_partner="" aes_available="true" transmission_mode="DEFAULT" visible="true" ready_config="true" operate="true"/>
<channel name="Backofen 4" type="17" address="LEQ0537675:5" ise_id="5169" direction="SENDER" parent_device="5123" index="5" group_partner="" aes_available="true" transmission_mode="DEFAULT" visible="true" ready_config="true" operate="true"/>
<channel name="Backofen 5" type="17" address="LEQ0537675:6" ise_id="5171" direction="SENDER" parent_device="5123" index="6" group_partner="" aes_available="true" transmission_mode="DEFAULT" visible="true" ready_config="true" operate="true"/>
</device>

Den Devicename bekomme ich hiermit schon raus:

<?
// Variablen vorgeben
$ccu_ip = '192.168.0.19';  // IP der Homematic-CCU


$xml = simplexml_load_file('http://'.$ccu_ip.'/config/xmlapi/devicelist.cgi');
$xml = new simpleXMLElement($xml->asXML());

$i=0;

$var_name = $xml->device[$i]['name'];


Aber wie kann ich den channel name auslesen ?

So aus dem Kopf, da ich den XMLAPI nicht mehr auf der CCU habe…
Und die XML-Antworten bei Homematic-Script etwas anders sind.


//Schema: $xml->device[index]->channel[index]

foreach ($xml->device as $device)
{
	foreach ($device->channel as $channel)
	{
		echo $channel['name'].PHP_EOL;
	}
}

Michael

Danke schön, das klappt aber ich brächte es nur immer einzeln, das ich es in einer Schleife abarbeiten kann :wink:

Also Pro Zeile :slight_smile:

Ist es doch ?!

Da ein Device mehrere Kanäle hat, kommst du um zwei Schleifen doch nicht rum.

Oder du sagst was du eigentlich vorhast :wink:

Michael

Danke, ich will den Device Name und die Seriennummer auslesen und dann mit diesen Daten ein HM Device in IPS anlegen :wink:

Aber dann brauchst du zwei Schleifen, weil du ja HM-Kanäle in IPS-Instanzen anlegst und keine HM-Devices.
Das hatte ich auch noch mal geplant. Allerdings per HM-Script inkl. einsortieren nach Räume und Gewerk. Aber keine Zeit :wink:
Michael

Ja also ich würde gerne (egal wie viele Schleifen ich brauche) den Device name, die Seriennummer und den Raum auslesen…

Kann mir da jemand helfen ich bekomme es nicht hin :frowning:

Bau doch mal ein var_dump($channel) oben bei meinem Script ein. Die Variable hat doch schon alle Werte. Die Seriennummer ist z.b. $channel[‚address‘].
Michael

So jetzt habe ich es geschafft die Werte aus der XML auszulesen, aber wie kenn ich den eine HM Instanz anlegen und den Name und die Seriennummer zu übergeben ?

Wenn du bis morgen Warten kannst, habe ich was fertiges für dich.
Inkl Namen, Profile, Aktionen, einsortieren nach den in der CCU benannten Räumen etc…
War sogar schon fertig; war mir aber nicht plug & play genug.
Michael

Klar kann ich warten :slight_smile:

Aber du meinst nicht das zufälligerweise :

Alle HomeMatic Geräte automatisch in IPS erstellen inkl. Bezeichnung

:smiley:

Nö, meins kann mehr :wink:
Und läuft ohne den Patch.
HM-Script liefert deutlich mehr Daten.
Auf der Basis werden die Instanzen dann in IPS erstellt. Und in Räume einsortiert und nach Gewerken verlinkt.
Alle nicht benötigten Variablen werden ausgeblendet und die Variablenprofile sowie Standardaktionen angepasst.
Sonst sind ja Magnetkontakte schaltbar, oder bei Thermostaten fehlt das ‚Status emulieren‘…etc…
Das wird schon, oder wird noch alles unterstützt.
Sogar mehrere CCUs und das automatische erstellen vom HM-Socket sind unterstützt.
Michael

OH :eek::p:rolleyes::eek::loveips::loveips::loveips::loveips:

Darauf warte ich gerne !!! Das wäre mal der Megahammer !!!

Da bin ich ja mal gespannt!

Ich hoffe ich habe alle Käfer erschlagen :smiley:
Allerdings musste ich doch ein Mapping einführen, die CCU liefert zwar z.B. Einheiten wie ‚V‘, °C oder Wh, aber daraus
etwas zu bauen war mir dann doch zu blöd.

Ihr könnte gerne mal testen.
Vielleicht hat ihr noch Geräte wo mir Datenpunkte fehlen.
HomeMatic EasyInstall

Michael