Beste Freunde waren Charly und XML noch nie. Weil es dem Linux-Magazin-Kolumnisten aber um Lebenswichtiges ging, das prima Klima hinterm Duschvorhang seines Badezimmer nämlich, nahm er sich neben dem Handtuch auch ein Herz und sprach beim XML Starlet vor.
Einige Smart-Home-Komponenten des Homematic-Systems sind Dauergäste in meinem Badezimmer, sie sollen die Temperatur im Raum steuern: Ein Heizkörperthermostat und drei Sensoren erkennen, ob Tür oder Fenster geöffnet sind. Welches Klima ich wann und in welchem Fall wünsche, stelle ich in der Zentraleinheit ein, die CCU2 heißt. Deren Webinterface prüft meine Geduld arg. Benenne ich dort beispielsweise einen Fensterkontakt statt mit »NEQ1651969« – denn so heißt er – mit »Bad_Fenster_Nord«, kann ich mich nicht darauf verlassen, dass die Weboberfläche den neuen Namen in allen Ansichten benutzt (Abbildung 1).
Das Thema Sicherheit bildet ein weiteres Lowlight: Per Default ist die Bedienoberfläche nicht durch ein Passwort gesichert. Ich dürfte zwar eines setzen, da CCU2 aber kein HTTPS spricht, fiele es eh dem nächsten Sniffer sofort in die Hände. Gänzlich ungesichert zeigt auch der Zugang zur so genannten Script Engine auf Port 8181. Immerhin ist deren Nutzwert hoch, denn sie erlaubt es mir, durch HTTP-Anfragen den Status von Homematic-Komponenten auszulesen und sogar Werte zu setzen.
Spätestens nach dieser Erkenntnis sollte aber klar sein, dass niemand die CCU2 einfach per Portforwarding ins Internet hängen darf, der nicht zugleich alle Hacker einladen will, Poltergeist in der eigenen Wohnung zu spielen. Wer von Jamaika aus auf die Heim-Heizung blicken möchte, braucht ein gutes VPN.
Abbildung 1: Fenster mit schlechter Aussicht: CCU2 kann sich den Namen von Öffnungssensoren nicht merken.
XML statt GUI
Ich habe also ein Werkzeug in der Hand, um die CCU2 ohne ihr Webinterface zu bedienen. Um den Status eines Fensterkontakts zu erhalten, tippe ich in die Konsole:
wget http://10.0.0.231:/x.exe?Antwort=dom.GetObject(%27BidCos-RF.NEQ1651559:1.STATE%27).Value()
Die CCU2 antwortet wirklich angenehm flott mit – brr! – XML:
<xml>
<exec>/x.exe</exec>
<sessionId/>
<httpUserAgent>
User-Agent: wget
</httpUserAgent>
<Antwort>true</Antwort>
</xml>
Ich unterdrücke meine XML-Aversion, um Maschinen zu helfen mit anderen Maschinen zu sprechen – denn genau dafür ist XML gemacht. Das »true« zwischen den »Antwort«-Tags bedeutet, dass das Fenster geschlossen ist. Auch den Thermostat darf ich mit ähnlichen Kommandos abfragen und auch neue Temperaturwerte einstellen. Ich kann mir also mit ein paar Bash-Skripten meine eigene CCU2-GUI-lose Steuerung bauen. Nun fehlt mir noch ein XML-Parser für die Kommandozeile – und damit angle ich mir endlich das XML Starlet [1].
Die Ausgabe des Wget-Kommandos oben habe ich zuvor in die Datei »badfenster.xml« schreiben lassen. Aus ihr fischt mir
xmlstarlet sel -T -t -m xml -v Antwort $WDIR/badfenster.xml
nun den Wert heraus, der zwischen den »Antwort«-Tags steht. Lust auf einen Ritt durch die Parameterhölle? Die Lektüre des auf [2] verlinkten 17-seitigen(!) PDF-Dokuments macht’s möglich.
Infos
-
XML Starlet: http://xmlstar.sourceforge.net
-
Dokumentation: http://xmlstar.sourceforge.net/docs.php






