Home Automation mit Home Assistant

Ich bin vor wenigen Wochen nach Nürnberg umgezogen, um mir die tägliche Zugfahrt von Ansbach her sparen zu können. Aber anstatt wie jeder andere vernünftige Mensch darauf zu schauen, dass Möbel in der Wohnung stehen, habe ich erstmal ein komplettes Wochenende damit verbracht, die Technik meines neuen Zuhauses soweit wie möglich zu automatisieren.

Seitdem mir ein Kollege (hallo Bernd!) schon vor einer ganzen Weile Home Assistant ans Herz gelegt hat, wollte ich dies ausprobieren, habe allerdings nie wirklich Zeit dafür gefunden. Beim Scrollen über 500 unterschiedliche Esszimmertische auf Amazon ändern sich aber die persönlichen Prioritäten ganz schlagartig und ich brauchte eine Abwechslung. Als Erstes habe ich mir in meinem persönlichen Datacenter (andere würden es als Abstellkammer bezeichnen) einen Linux-Container eingerichtet:

Als Hardware habe ich mir für das Projekt folgende Komponenten ausgesucht:

  • Philips Hue Color (E27, dimmbar, bunt, toll)
  • Philips Motion Detector (um die Lampen im Flur und Bad ansteuern zu können)
  • Sonos PLAY:3 (in der Küche und auf meinem Schreibtisch), PLAY:5 (im Wohnzimmer)
  • eQ-3 S 300 TH (Temperatur- und Feuchtigkeitssensor; inzwischen nicht mehr erhältlich, aber hatte ich zufälligerweise aus einem anderen Projekt übrig)
  • iPhone (dient zur Erkennung, ob ich zu Hause bin)
  • GAMMA-SCOUT Geigerzähler (braucht man unbedingt)

Und so sieht das ganze dann aus (inkl. strukturierter Verkabelung):

Ich werde hier niemanden mit der Config-Datei von Home Assistant langweilen, deswegen müsst ihr mir einfach glauben, wenn ich behaupte, dass es ein Kinderspiel ist, die einzelnen Hardware-Bausteine so darin zu integrieren, dass es ein sinnvolles Ganzes ergibt.

Besonders cool sind bei Home Assistant die Möglichkeiten, auf Events zu reagieren. So kann man beispielsweise abhängig vom Sonnenstand die Beleuchtung aktivieren bzw. deaktivieren. Meine Wohnung ist nun so eingestellt, dass automatisch alle Geräte ausgeschaltet werden, sobald ich das Haus verlasse. Wenn ich mich auf dem Weg nach Hause befinde, werden sie wieder eingeschaltet – kurz bevor ich tatsächlich an der Wohnungstür stehe. Dies funktioniert dadurch, dass Home Assistant über “Find my iPhone” weiß, wo ich mich gerade befinde.

Natürlich gibt es dazu auch ein tolles Webinterface, über das man diese Aktionen steuern kann:

Zusätzliche habe ich mir von Happy Bubbles Bluetooth-Beacon-Detektoren bestellt, die hoffentlich im Laufe der nächsten Tage hier eintreffen werden. Danach sollte Home Assistant in der Lage sein, zu erkennen, in welchem Zimmer ich mich aktuell befinde.

Fazit: Nichts zu Essen im Haus – außer Joylent, aber die Beleuchtung lässt sich bis ins letzte Detail steuern. 🙂

Übrigens haben wir in unserem Shop auch Hardware, die sich in eigene Home Automation-Projekte integrieren ließe.

Gunnar Beutner

Autor: Gunnar Beutner

Vor seinem Eintritt bei NETWAYS arbeitete Gunnar bei einem großen deutschen Hostingprovider, wo er bereits viel Erfahrung in der Softwareentwicklung für das Servermanagement sammeln konnte. Bei uns kümmert er sich vor allem um verschiedene Kundenprojekte, aber auch eigene Tools wie inGraph oder Icinga2.

Icinga 2.6-Preview


Nächste Woche am Dienstag planen wir Icinga 2.6 zu releasen, quasi als vorgezogenes Weihnachtsgeschenk. Im Gegensatz zu den vorhergehenden “großen” 2.x-Releases haben wir den Fokus diesmal nicht auf neue Features, sondern auf Bugfixes gesetzt.

Insbesondere haben wir etliche Bugs gefixt, die Notifications und den Cluster betreffen. So gibt es beispielsweise bis einschließlich Icinga 2.5.4 Bugs, die dafür sorgen, dass unter bestimmten Umständen Notifications fälschlicherweise versendet werden oder beim Synchronisieren des Clusters Objekte nicht richtig angelegt werden. Außerdem haben wir eine Reihe von Crashes gefixt, die wir mit Unterstützung unserer Kunden analysieren konnten.

Des Weiteren verwenden wir nun auch ausgewählte C++11-Features, um langfristig die Wartbarkeit des Projekts zu erhöhen. So sind in Icinga 2 nun z.B. range-based for loops “erlaubt”, die wir anstatt von BOOST_FOREACH verwenden. An ausgewählten Stellen verwenden wir auch das neue “auto”-Keyword, um Variablendeklarationen zu vereinfachen.

Zusätzlich haben wir das im Installer integrierte NSClient++-Paket auf die aktuelle Version (0.5.0) erneuert und für den Windows-Installer eingebaut, dass der Benutzer konfiguriert werden kann, mit dem Icinga gestartet wird.

NSClient++ bietet seit Version 0.5.0 eine eigene REST-API, die wir zwar in der 2.6 noch nicht verwenden, aber bereits zum Ausprobieren von Commands sehr hilfreich ist:

Die Dokumentation ist nun an einigen Stellen deutlich ausführlicher und einfacher zu lesen: So wurde beispielsweise die Liste der globalen Funktionen in ein eigenes Kapitel umgewandelt.

Dank der Icinga-Community haben wir etliche Patches für die ITL integrieren können, die entweder neue CheckCommand-Definitionen liefern oder bereits vorhandene Commands erweitern. Für Kundenprojekte haben wir zudem selbst auch einige ITL-Erweiterungen eingebaut.

Um in absehbarer Zeit SELinux vollständig unterstützen zu können, verwendet Icinga 2.6 nun einen separaten Prozess, um Plugin-Checks zu starten. Dies ist notwendig, um genau steuern zu können, welche File-Deskriptoren an den Child-Prozess weitergegeben werden.

Gunnar Beutner

Autor: Gunnar Beutner

Vor seinem Eintritt bei NETWAYS arbeitete Gunnar bei einem großen deutschen Hostingprovider, wo er bereits viel Erfahrung in der Softwareentwicklung für das Servermanagement sammeln konnte. Bei uns kümmert er sich vor allem um verschiedene Kundenprojekte, aber auch eigene Tools wie inGraph oder Icinga2.

Spracherkennung als Sicherheitsrisiko

Was vor fünf Jahren noch undenkbar war, findet sich heutzutage in fast jedem Mobiltelefon: Spracherkennung. Die Einstiegshürde ist inzwischen dank Fortschritten bei der Erkennungsgenauigkeit sehr niedrig. Im Gegensatz zu Spracherkennungssoftware der ersten Generation ist auch das Training mit Mustertexten nicht notwendig.

Allgemein scheint der Trend in die Richtung zu gehen, Spracherkennung auf möglichst vielen Plattformen anzubieten. So hat Apple beispielsweise kürzlich Siri in macOS Sierra integriert und Microsoft bietet Cortana für Windows 10 an. Zusätzlich verkaufen sowohl Google als auch Amazon auf dem Gebiet der Home Automation Lautsprecher mit integriertem Mikrofon, die auf Spracheingabe reagieren.

Viele dieser Systeme “hören” permanent mit und reagieren auf bestimmte Schlüsselwörter: z.B. “Ok, Google”, “Hey Alexa”, “Hey Siri” und “Xbox”. Dabei findet in der Regel keine Unterscheidung zwischen verschiedenen Stimmen statt, weswegen auch andere Personen als der Besitzer des Geräts Befehle ausführen können, sofern sie sich in der Nähe befinden.

Bei Systemen wie Amazon Echo können Besucher beispielsweise kostenpflichtige Bestellungen aufgeben. Die meisten Mobiltelefone erlauben es, Kontakte anzurufen oder ihnen Nachrichten zu senden.

Andererseits kann auch der rechtmäßige Besitzer dazu veranlasst werden, ungewollt Befehle auszuführen, wie dieses YouTube-Video am Beispiel der Xbox One zeigt.

Da die meisten Mobiltelefone gar nicht die notwendige Rechenleistung aufbringen können, um die Spracherkennung selbst durchzuführen, senden sie eine Aufnahme der gesprochenen Worte an ihren Hersteller. Was dieser im Detail damit macht, wird zwar in den Datenschutzrichtlinien dargelegt – jedoch werden bestimmte externe Partner (NSA, Bundesnachrichtendienst, Verfassungsschutz, u.ä.) dort nicht erwähnt.

Ich für meinen Teil verzichte auf meinen persönlichen Teleschirm und habe daher auf allen meinen Geräten Siri, Cortana und co. deaktiviert. Nicht nur zur Wahrung meiner Privatsphäre, sondern auch, weil ich mir ziemlich komisch vorkommen würde, in der Öffentlichkeit mit meinem Handy zu sprechen – aber vielleicht bin ich auch einfach zu alt für solch neumodischen Kram.

Gunnar Beutner

Autor: Gunnar Beutner

Vor seinem Eintritt bei NETWAYS arbeitete Gunnar bei einem großen deutschen Hostingprovider, wo er bereits viel Erfahrung in der Softwareentwicklung für das Servermanagement sammeln konnte. Bei uns kümmert er sich vor allem um verschiedene Kundenprojekte, aber auch eigene Tools wie inGraph oder Icinga2.

Speicherverbrauch analysieren mit Heaptrack

Um den Speicherverbrauch von Icinga 2 besser verstehen zu können, habe ich mir einen Docker-Container für heaptrack (gbeutner/heaptrack) gebaut. Heaptrack ist ähnlich wie Massif ein Tool, das dabei hilft, herauszufinden, wie Anwendungen Speicher verwenden:

heaptrack

In diesem Fall sieht man sehr schön, dass Strings zahlenmäßig anderen Objekt-Typen in Icinga 2 deutlich überlegen sind. Die Anzahl der geleakten Objekte ist in diesem Fall falsch, da ich den Icinga-Prozess mit Strg-C abgebrochen habe.

Der Speicherverbrauch ist eine der Stellen, an denen ich aktuell fleißig am optimieren bin, um sowohl den insgesamt benötigten Speicher allgemein zu verringern, aber auch um die Anzahl der temporär angelegten Objekte so klein wie möglich zu halten – was sich positiv auf die benötigte CPU-Zeit auswirkt. Zwischen der Version 2.4.10 und dem aktuellen Git-Master (“2.6.0”) habe ich den Config-Validator so z.B. bereits um fast 50% schneller gemacht (71 Sekunden mit 2.4.10 und nun aktuell 37 Sekunden)

Gunnar Beutner

Autor: Gunnar Beutner

Vor seinem Eintritt bei NETWAYS arbeitete Gunnar bei einem großen deutschen Hostingprovider, wo er bereits viel Erfahrung in der Softwareentwicklung für das Servermanagement sammeln konnte. Bei uns kümmert er sich vor allem um verschiedene Kundenprojekte, aber auch eigene Tools wie inGraph oder Icinga2.

Updates für den NETWAYS-Mittagsshop

Der NETWAYS-Mittagsshop ist eine von uns intern genutzte Anwendung, um z.B. Pizzabestellungen gesammelt ausführen zu können. Seit Kurzem unterstützt er nun einige neue Features:

1. Bestellstatistiken

Der Shop bietet nun eine Statistikfunktion, mit der z.B. die Bestellanzahl ausgewertet werden kann.

Bestellstatistik

2. Bearbeiten von Bestellungen

Benutzer können nun nachträglich ihre eigenen Bestellungen bearbeiten, ohne diese vorher löschen zu müssen. Außerdem können Händler für andere Benutzer Bestellungen einstellen bzw. auch ändern, wem eine Bestellung gehört.

3. Der Jabberbot ist nun im Git-Repository.

Der Sourcecode des Jabberbots befindet sich im Verzeichnis “jabber”. Der Bot unterstützt Befehle, um Bestellungen aufzugeben und den aktuellen Bestellstatus abzufragen.

4. Rabatte/Liefergebühren werden nun richtig berechnet

An sich ist das natürlich kein Feature, aber der Shop rundet Rabatte und Liefergebühren nun korrekt, auch wenn z.B. der Rabattsatz geändert wird, nachdem bereits Bestellungen aufgegeben wurden.

Für die Rabattfunktion kann nun zusätzlich auch ein Benutzer angegeben werden, dem die gewährten Rabatte per interner Lastschrift berechnet werden.

5. Die Menüs der Läden sind nun bearbeitbar.

Ursprünglich mussten Speisekarten mühsam mit SQL-Kommandos manuell in die Datenbank eingefügt werden. Dabei hat der durchschnittliche Laden ca. 500 Menüeinträge (verschiedene Pizzas mit Varianten: klein, groß, u.ä.). Inzwischen gibt es nun eine textbasierte Beschreibungssprache, die sogar Templates unterstützt. Somit können z.B. Preise per Git-Commit einfacher angepasst werden.

Gunnar Beutner

Autor: Gunnar Beutner

Vor seinem Eintritt bei NETWAYS arbeitete Gunnar bei einem großen deutschen Hostingprovider, wo er bereits viel Erfahrung in der Softwareentwicklung für das Servermanagement sammeln konnte. Bei uns kümmert er sich vor allem um verschiedene Kundenprojekte, aber auch eigene Tools wie inGraph oder Icinga2.