1. Ermitteln der Geräte-Nummern
Über den Web-Browser den Link http://IP-Miele@Home-Gateway/homebus die aktuell vorhandenen Geräte ermitteln:
[COLOR=#000000][FONT=monospace]<DEVICES>[/FONT][/COLOR] [COLOR=#000000][FONT=monospace] <device> <class>22020</class> <UID>-1609539861</UID> <type>W5000</type> <name>Waschautomat</name> <state>5</state> <additionalName>Waschmaschine</additionalName> <room id="null" level="null"/> <information> <key name="Gerätestatus" value="In Betrieb"/> <key name="Phase" value="Waschen Hygiene"/> <key name="Restzeit" value="0:41"/> </information> <actions> <action name="Details" URL="http://192.168.X.XX:80/homebus/device?language=de&type=[B][COLOR=#0000CD]WM_W38XX&id=[/COLOR][COLOR=#0000FF]WM_W2889.-XXX9539XXX[/COLOR][/B]"/> </actions> </device> <device> <class>22018</class> <UID>-1609541994</UID> <type>???????????????</type> <name>Wäschetrockner</name> <state>1</state> <additionalName>Tumbler</additionalName> <room id="null" level="null"/> <information> <key name="Gerätestatus" value="Aus"/> </information> <actions> <action name="Details" URL="http://192.168.X.XX:80/homebus/device?language=de&type=TD_T48XX&id=TD_T4898.-XXX9541XXX"/> </actions> </device> [/FONT][/COLOR]
2. Über den Apache-Server des RaspPi wird dann fofgendes Script getriggert (alle x Minuten):
<?php
// Auslesen des Miele(at)Home Bussystems
// Script-Teil für Auslesung Waschmaschine und Geschirrspüler für Leck-Wasserüberwachung Loxone
// Hier die Daten des Loxone Miniserver eintragen
$LoxIP = "XXX.XXX.X.X:80";
$LoxUser = "User";
$LoxPassword = "Passwort";
//XML Waschmaschine laden
$xml = simplexml_load_file(rawurlencode('http://192.168.X.X:80/homebus/device?language=de&type=WM_W38XX&id=WM_W2889.-XXX5398XX'));
//Status Waschmaschine auslesen/einstellen
$Status = $xml->information->key[1]->attributes()->value;
// print_r($Status);
if ($Status != 'Aus')
{
$WM_Power="1";
}
else
{
$WM_Power="0";
}
//XML Geschirrspueler laden
$xml = simplexml_load_file(rawurlencode('http://192.168.X.X:80/homebus/device?language=de&type=DW_G10XX&id=DW_G1000.-XXX95392XX'));
//Status Geschirrspueler auslesen/einstellen
$Status = $xml->information->key[1]->attributes()->value;
//print_r($Status);
if ($Status != 'Aus')
{
$DW_Power="1";
}
else
{
$DW_Power="0";
}
// Loxone MS Visu aktualisieren
// Waschmaschine WM_Power
$handle = file_get_contents("http://$LoxUser:$LoxPassword@$LoxIP/dev/sps/io/M_WM_Power/$WM_Power", "r");
// Geschirrueler DW_Power
$handle = file_get_contents("http://$LoxUser:$LoxPassword@$LoxIP/dev/sps/io/M_DW_Power/$DW_Power", "r");
//cleanup
$handle = null;
$xml = null;
?>
Das Script lädt die jeweilige Geräte XML-Datei und ermittelt die Zustände über die Nodes des XML. Diese werden im Script weiterverarbeitet um die Zustände Aus und Ein auszuwerten.
Die Code-Zeile
"$handle = file_get_contents("http://$LoxUser:$LoxPassword@$LoxIP/dev/sps/io/M_WM_Power/$WM_Power", "r");"
passt dabei am Ende des Scripts den Eingang des MS an. Der fett markierte Teil ist der Name des MS-Eingang. Selbstverständlich könnte dies auch über die UI des MS-Eingangs erfolgen.
Die Dokumentation der RESTfull API des MS ist hier zu finden: REST API
Für die Entwicklung kann das eingelesene XML der Geräte jederzeit über den entsprechenden WebLink (z.B. http://192.168.X.XX:80/homebus/device?language=de&type=WM_W38XX&id=WM_W2889.-XXX9539XXX) aufgerufen werden. Über die Anleitung zum simple-XML ist dann relativ einfach ersichtlich, wie die einzelnen Nodes ausgelesen werden können.
Wichtig: Man findet viele Scripts, welche den MS über einen fopen( ..... ) command aktualisieren. Dieser Stream muss über fclose(.....) wieder geschlossen werden. Ich musste jedoch feststellen, dass der MS diese Streams teilweise nicht schliesst und dann nach einer gewissen Zeit nicht mehr im Netzwerk erreichbar sind. Mit dem Command "file_get_contents" tauchen diese Probleme nicht auf.
In der erweiterten Umsetzung über Virtuelle Texteingänge und Abfrage aller Zustände ergibt das in der VISU folgende Ansicht:
Pio
Kommentar