Hallo Timo,
erstmal für alle Mitleser die Grundlagen für den Abruf des XML:
1.) Die XML-API-Erweiterung muss unter System/Zusatzsoftware installiert sein - siehe:
https://www.homematic-inside.de/software/xml-api bzw.
https://github.com/homematic-community/XML-API/releases
2.) Mit http://<ip der homematic-zentrale>/config/xmlapi/devicelist.cgi gibt es eine Liste aller Geräte in der HM-Infrastruktur
Wenn man eine Wetterstation in Betrieb hat, dann lautet einer der Abschnitte:
Code: Alles auswählen
<device name="Wetterstation" address="LEQ1320211" ise_id="6069" interface="BidCos-RF" device_type="HM-WDS100-C6-O" ready_config="true">
<channel name="Wetterstation sub" type="22" address="LEQ1320211:1" ise_id="6097" direction="SENDER" parent_device="6069" index="1" group_partner="" aes_available="false" transmission_mode="DEFAULT" visible="true" ready_config="true" operate="true"/>
</device>
3.) Mit http://<ip der homematic-zentrale>/config/xmlapi/state.cgi?device_id=6069 (<== die ise_id hinter dem device-name)
Daraufhin liefert die Zentrale dann ein XML mit den Daten des Geräts zurück:
Code: Alles auswählen
<state>
<device name="Wetterstation" ise_id="6069" unreach="false" sticky_unreach="false" config_pending="false">
<channel name="Wetterstation:0" ise_id="6070">
<datapoint name="BidCos-RF.LEQ1320211:0.UNREACH" type="UNREACH" ise_id="6089" value="false" valuetype="2" valueunit="" timestamp="1617975971"/>
<datapoint name="BidCos-RF.LEQ1320211:0.STICKY_UNREACH" type="STICKY_UNREACH" ise_id="6085" value="false" valuetype="2" valueunit="" timestamp="1617975971"/>
<datapoint name="BidCos-RF.LEQ1320211:0.CONFIG_PENDING" type="CONFIG_PENDING" ise_id="6071" value="false" valuetype="2" valueunit="" timestamp="1617975971"/>
<datapoint name="BidCos-RF.LEQ1320211:0.LOWBAT" type="LOWBAT" ise_id="6079" value="true" valuetype="2" valueunit="" timestamp="1617975900"/>
<datapoint name="BidCos-RF.LEQ1320211:0.RSSI_DEVICE" type="RSSI_DEVICE" ise_id="6083" value="1" valuetype="8" valueunit="" timestamp="1617975971"/>
<datapoint name="BidCos-RF.LEQ1320211:0.RSSI_PEER" type="RSSI_PEER" ise_id="6084" value="204" valuetype="8" valueunit="" timestamp="1617975971"/>
<datapoint name="BidCos-RF.LEQ1320211:0.DEVICE_IN_BOOTLOADER" type="DEVICE_IN_BOOTLOADER" ise_id="6075" value="false" valuetype="2" valueunit="" timestamp="1617975971"/>
<datapoint name="BidCos-RF.LEQ1320211:0.UPDATE_PENDING" type="UPDATE_PENDING" ise_id="6093" value="false" valuetype="2" valueunit="" timestamp="1617975971"/>
</channel>
<channel name="Wetterstation sub" ise_id="6097">
<datapoint name="BidCos-RF.LEQ1320211:1.TEMPERATURE" type="TEMPERATURE" ise_id="6103" value="17.700000" valuetype="4" valueunit="°C" timestamp="1617975900"/>
<datapoint name="BidCos-RF.LEQ1320211:1.HUMIDITY" type="HUMIDITY" ise_id="6099" value="31" valuetype="16" valueunit="%" timestamp="1617975900"/>
<datapoint name="BidCos-RF.LEQ1320211:1.RAINING" type="RAINING" ise_id="6100" value="false" valuetype="2" valueunit="" timestamp="1617975900"/>
<datapoint name="BidCos-RF.LEQ1320211:1.RAIN_COUNTER" type="RAIN_COUNTER" ise_id="6101" value="1610.994999" valuetype="4" valueunit="mm" timestamp="1617975900"/>
<datapoint name="BidCos-RF.LEQ1320211:1.WIND_SPEED" type="WIND_SPEED" ise_id="6106" value="8.200000" valuetype="4" valueunit="km/h" timestamp="1617975900"/>
<datapoint name="BidCos-RF.LEQ1320211:1.WIND_DIRECTION" type="WIND_DIRECTION" ise_id="6104" value="205" valuetype="16" valueunit="degree" timestamp="1617975900"/>
<datapoint name="BidCos-RF.LEQ1320211:1.WIND_DIRECTION_RANGE" type="WIND_DIRECTION_RANGE" ise_id="6105" value="45" valuetype="16" valueunit="degree" timestamp="1617975900"/>
<datapoint name="BidCos-RF.LEQ1320211:1.SUNSHINEDURATION" type="SUNSHINEDURATION" ise_id="6102" value="17" valuetype="16" valueunit="" timestamp="1617975900"/>
<datapoint name="BidCos-RF.LEQ1320211:1.BRIGHTNESS" type="BRIGHTNESS" ise_id="6098" value="77" valuetype="16" valueunit="" timestamp="1617975900"/>
<datapoint name="Regen heute" type="" ise_id="6107" value="0.000000" valuetype="4" valueunit="mm" timestamp="1617975900"/>
<datapoint name="Regen gestern" type="" ise_id="6108" value="0.000000" valuetype="4" valueunit="mm" timestamp="1617965130"/>
</channel>
</device>
</state>
Mit ein paar Zeilen PHP kann man daraus ein etwas handlicheres Array machen:
(diese Datei ist darauf ausgelegt mit php hm_wetter.php auf der console gestartet zu werden - im Browser sieht's nicht so hübsch aus...):
Code: Alles auswählen
#!/usr/bin/php
<?php
echo "Es folgt der Wetterbericht...\n";
$hmw_ip = "192.168.0.247";
$hmw_id = 6069;
// wir laden die XML-Datei von der Homematic-Zentrale
$xml = simplexml_load_file("http://" . $hmw_ip . "/config/xmlapi/state.cgi?device_id=$hmw_id");
// auswerten der XML-Datei - machen wir als erstes ein Array daraus:
$json = json_encode($xml);
$wa = json_decode($json,TRUE);
// Beispiele für Ausgaben direkt aus dem Array
echo "Devicename: " . $xml->{"device"}["name"] ."\n";
echo "ise_id: " . $wa["device"]["channel"][1]["datapoint"][0]["@attributes"]["ise_id"] . "\n";
echo "Temperatur: " . $wa["device"]["channel"][1]["datapoint"][0]["@attributes"]["value"] . " " . $wa["device"]["channel"][1]["datapoint"][0]["@attributes"]["valueunit"] . "\n";
// Schreiben der Key-Value-Paare in ein handliches Array (referenziert über die ise_id):
foreach( $wa["device"]["channel"][1]["datapoint"] as $dp){
echo "-----------------------------------------\n";
$ise_id = $dp["@attributes"]["ise_id"];
echo ">>>>>>Type: $ise_id \n";
foreach( $dp["@attributes"] as $key => $value){
$erg[$ise_id][$key] = $value;
echo "Key: $key - Value: $value \n";
}
}
echo "================================================\n";
echo "Temperatur: " . number_format($erg["6103"]["value"],1);
echo $erg["6103"]["valueunit"];
echo "\n";
echo "================================================\n";
?>
Das Ergebnis des Scripts sieht dann so aus:
Code: Alles auswählen
root@solaranzeige:/var/www/html# php hm_wetter.php
Es folgt der Wetterbericht...
Devicename: Wetterstation
ise_id: 6103
Temperatur: 17.600000 °C
-----------------------------------------
>>>>>>Type: 6103
Key: name - Value: BidCos-RF.LEQ1320211:1.TEMPERATURE
Key: type - Value: TEMPERATURE
Key: ise_id - Value: 6103
Key: value - Value: 17.600000
Key: valuetype - Value: 4
Key: valueunit - Value: °C
Key: timestamp - Value: 1617977140
-----------------------------------------
>>>>>>Type: 6099
Key: name - Value: BidCos-RF.LEQ1320211:1.HUMIDITY
Key: type - Value: HUMIDITY
Key: ise_id - Value: 6099
Key: value - Value: 29
Key: valuetype - Value: 16
Key: valueunit - Value: %
Key: timestamp - Value: 1617977140
-----------------------------------------
>>>>>>Type: 6100
Key: name - Value: BidCos-RF.LEQ1320211:1.RAINING
Key: type - Value: RAINING
Key: ise_id - Value: 6100
Key: value - Value: false
Key: valuetype - Value: 2
Key: valueunit - Value:
Key: timestamp - Value: 1617977140
-----------------------------------------
>>>>>>Type: 6101
Key: name - Value: BidCos-RF.LEQ1320211:1.RAIN_COUNTER
Key: type - Value: RAIN_COUNTER
Key: ise_id - Value: 6101
Key: value - Value: 1610.994999
Key: valuetype - Value: 4
Key: valueunit - Value: mm
Key: timestamp - Value: 1617977140
-----------------------------------------
>>>>>>Type: 6106
Key: name - Value: BidCos-RF.LEQ1320211:1.WIND_SPEED
Key: type - Value: WIND_SPEED
Key: ise_id - Value: 6106
Key: value - Value: 8.800000
Key: valuetype - Value: 4
Key: valueunit - Value: km/h
Key: timestamp - Value: 1617977140
-----------------------------------------
>>>>>>Type: 6104
Key: name - Value: BidCos-RF.LEQ1320211:1.WIND_DIRECTION
Key: type - Value: WIND_DIRECTION
Key: ise_id - Value: 6104
Key: value - Value: 210
Key: valuetype - Value: 16
Key: valueunit - Value: degree
Key: timestamp - Value: 1617977140
-----------------------------------------
>>>>>>Type: 6105
Key: name - Value: BidCos-RF.LEQ1320211:1.WIND_DIRECTION_RANGE
Key: type - Value: WIND_DIRECTION_RANGE
Key: ise_id - Value: 6105
Key: value - Value: 45
Key: valuetype - Value: 16
Key: valueunit - Value: degree
Key: timestamp - Value: 1617977140
-----------------------------------------
>>>>>>Type: 6102
Key: name - Value: BidCos-RF.LEQ1320211:1.SUNSHINEDURATION
Key: type - Value: SUNSHINEDURATION
Key: ise_id - Value: 6102
Key: value - Value: 38
Key: valuetype - Value: 16
Key: valueunit - Value:
Key: timestamp - Value: 1617977140
-----------------------------------------
>>>>>>Type: 6098
Key: name - Value: BidCos-RF.LEQ1320211:1.BRIGHTNESS
Key: type - Value: BRIGHTNESS
Key: ise_id - Value: 6098
Key: value - Value: 75
Key: valuetype - Value: 16
Key: valueunit - Value:
Key: timestamp - Value: 1617977140
-----------------------------------------
>>>>>>Type: 6107
Key: name - Value: Regen heute
Key: type - Value:
Key: ise_id - Value: 6107
Key: value - Value: 0.000000
Key: valuetype - Value: 4
Key: valueunit - Value: mm
Key: timestamp - Value: 1617977140
-----------------------------------------
>>>>>>Type: 6108
Key: name - Value: Regen gestern
Key: type - Value:
Key: ise_id - Value: 6108
Key: value - Value: 0.000000
Key: valuetype - Value: 4
Key: valueunit - Value: mm
Key: timestamp - Value: 1617965130
================================================
Temperatur: 17.6°C
================================================
Die weiteren Details können wir gerne wieder via Mail diskutieren und erst das fertige Ergebnis dann hier wieder einstellen...
1000(s) Grüße
Thomas