Screenshot eines Control Panels, welches auf die Philips Hue API zugreift. Mit Wetter- und Lampen-Widgets

Ich habe schon lange von einer vollständigen Hausautomation geträumt. In so einer Mietwohnung ist man aber an diverse Einschränkungen gebunden. Daher habe ich mich bisher nur an ein paar Philips Hue Lampen und über WLAN gesteuerte Steckdosen getraut. Diese sind via Alexa Befehl zwar ziemlich einfach und praktikabel zu bedienen, allerdings gab es kleinere Use-Cases, wo mir das einfach nicht ausgereicht hat, weshalb ich die App Home-it entwickelt habe.

  1. Freundin ist auf dem Sofa eingeschlafen und ein Sprachbefehl würde sie vermutlich aufwecken und den Dackel und den Hund aus der Nachbarschaft, der bei jedem Schütteln Meldung gibt.
  2. Alle Lampen mit Alexa ausgemacht, Wohnzimmer verlassen, doch noch etwas vergessen. Also wieder ins Wohnzimmer. „Alexa, Wohnzimmer an“ – „Ich konnte kein Gerät finden mit Lohnzimmer“….

Deswegen war die einzig logische Erklärung eine kleine Dashboard Anwendung zu entwickeln (oder überall Schalter und Fernbedienungen rumliegen zu haben), die sich sowohl schick im Wohnzimmer auf einem Tablet macht, als auch praktikabel ist und funktioniert. Und ja, das tut sie.

Was kann Home-it?

Die Steuerung der Lampen sprach ich ja bereits an. Zusätzlich dazu, habe ich noch Widgets für Uhrzeit + Datum, sowie aktuelle Wetterangaben hinzugefügt. Diese können dynamisch hinzugefügt und entfernt werden. Sollte ich also umziehen oder mich das Wetter in Paris interessieren, muss ich nur die Widgets neu anlegen.

Außerdem gibt es eine Seite für alle IP-Kameras in der Wohnung. Aktuell bespitzel ich damit nur den Dackel, aber es wird die Zeit kommen, wo ich eine Kamera vor meiner eigenen Haustür oder gar in einem Kinderzimmer installieren werde. Über die Kamers Schnittstelle und einen ffmpeg Stream, erfasse ich so alle 60 Sekunden einen Screenshot der Kamera und kann das Gerät an- und ausschalten.

Aber nochmal zurück zur Lampensteuerung: Philips Hue stellt eine toll dokumentierte und praktische API zur Verfügung, um seine Geräte im eigenen Interface zu bedienen.

Probleme mit dem Hue Zertifikat?

Dabei bin ich allerdings auf ein Problem gestoßen: Die Philips Hue API kann zwar via HTTPS aufgerufen werden, allerdings vertraut der Browser dem Zertifikat nicht. Das führt zu Problemen, wenn man sich einzig auf clientseitiges Javascript verlässt.

Damit ich nicht immer wieder Zugriff auf die Seite gewähren muss, habe ich daher ein PHP Skript geschrieben, welches das Problem umgeht. Mit cURL muss nämlich nicht zwingend das Zertifikat geprüft werden. Die VueJS Anwendung ruft also das PHP Skript auf, statt die Hue API direkt anzusprechen. Dadurch unterscheiden sich die Aufrufe geringfügig.

VORHER: https://xxx.xxx.x.xxx/api/{userId}/lights
NACHHER: https://link.zum.php.script?endpoint=/lights

Dieses PHP Skript habe ich auf Github als Gist zur Verfügung gestellt. Vielleicht kann ja noch jemand anders damit etwas anfangen.

Ich habe im Nachhinein allerdings einen anderen Ansatz für Home-it verfolgt. Da die Anwendung doch komplexer und dynamischer wurde, als anfangs von mir geplant, habe ich sie mit einer schmalen Symfony API verbunden. Das Symfony Projekt dazu verzichtet auf unnötige Komponenten (Doctrine, Twig, etc.) und nimmt so weniger Speicherplatz ein.

Wo liegt das Zeug?

Sowohl die VueJS Anwendung, als auch die Symfony API liegen auf einem kleinen Raspberry Zero und können aus dem gesamten lokalen Netz aufgerufen werden. Wenn Freundin oder Dackel also mal auf mir einschlafen, kann ich auch einfach das Handy zücken und das Dashboard vom Sofa aus steuern.

Rund um ein tolles, spannendes und interessantes Projekt.