RWE Smarthome PHP API Wrapper

So können Sie mit PHP Daten Ihres RWE Smarthome abfragen und einige Geräte steuern.

Auch wenn RWE bereits im Jahr 2013 angekündigt hat, so gibt es aber bis zum heutigen Tage (Ende 2014) keine offizielle API für das RWE Smarthome System – zumindest nicht öffentlich. Auf der Suche nach irgendeiner Dokumentation bin ich auf einen Wrapper für Java gestoßen. Mit dem Java-Wrapper kann man schon einige Dinge tun.

Da Java nicht die Sprache meiner Wahl ist, habe ich mich dazu entschieden, den Java-Wrapper zu nutzen um eine PHP-Implementierung zu schreiben. Das ist die entsprechende Dokumentation dazu.

Installation

Für die Installation benötigt man die entsprechenden Dateien aus GitHub.

GitHub Repository: https://github.com/tobias-redmann/RWE-Smarthome-PHP-API

Damit die Requests auch an die Zentrale gesendet werden können, benötigen wir einen HTTP-Client. Ich habe mich für Httpful entschieden. Er kann einfach per Composer hinzugefügt werden. Die entsprechende Konfiguration ist bereits vorhanden. Es genügt also einfach die Installation:

composer install

Neben den einzelnen Software-Komponenten benötigen Sie noch die IP Ihrer Smarthome-Zentrale. Üblicherweise können Sie diese über Ihren Router ermitteln.

Konfiguration

Im Git-Repository ist eine config-sample.php enthalten. Nennen Sie diese einfach in config.php um und tragen dort die entsprechenden Daten ein. Das sind Ihr Nutzername, Ihr Password und die IP der Smarthome-Zentrale:

define('HOST',      'xxx.xxx.xxx.xxx');
define('USERNAME',  'username');
define('PASSWORD',  'password');

Danach ist die Konfiguration eigentlich bereits abgeschlossen.

Verbindung herstellen

Nachdem die Konfiguration abgeschlossen ist, können wir die Verbindung zur Smarthome-Zentrale herstellen. Das funktioniert folgendermaßen:

$home = new SmartHome(HOST);

$home->logon(USERNAME, PASSWORD);

Sollte beim Ausführen des Codes kein Fehler aufgetreten sein, sollte die Verbindung geklappt haben. Derzeit ist das Fehlerhandling weniger gut.

Räume ermitteln

Nachdem die Verbindung hergestellt wurde, kann man etwas rumspielen. Die vorhandene Räume auszulesen, ist ein möglicher Schritt.

$rooms = $home->getRooms();

Die Variable $rooms ist dann ein assoziatives Array mit die GUIDs der Räume als Key und Room-Objekten als Values.

foreach ($rooms as $guid => $room) {

    echo 'GUID: '. $room->getId(); /* oder $guid */
    echo 'Name: '. $room->getName();
    echo 'Type: '. $room->getType();

}