Heimautomation mittels Home Assistant

Auf dem Markt der Heimautomation gibt es eine Reihe von Standards und viele unterschiedliche Softwarelösungen. Viele dieser Lösungen sind proprietär; einige sind freie Software wie z.B. openHAB oder Calaos. Aus der Kategorie der freien Software sticht Home Assistant hervor. Die in Python 3 geschriebene Software versteht sich als eine umfassende Lösung zur Heimautomation. So wird eine Vielzahl von Standards wie Z-Wave oder das IKEA-Beleuchtungssystemen Tradfri unterstützt.

home-assistant.io

Mittlerweile existieren knapp eintausend Komponenten, welche auf der Webseite des Projektes eingesehen werden können. Diese Komponenten decken eine Vielzahl von Sensoren und Anwendungsmöglichkeiten ab. Dies fängt bei Alarmsensoren an, geht weiter über die Integration von Kalendern, die Steuerungen von Aktoren (wie Thermostaten), die Einbeziehung von Wetter, Luftqualität und anderen Daten und Dingen wie der Steuerung von Media-Playern (z.B. PLEX). Mit jeder neuen Version von Home Assistant finden neue Komponenten ihren Weg in das Projekt.

Die Home Assistant Demo-Seite

Installiert werden kann Home Assistant auf einer Vielzahl von Systemen, von verschiedenen Linux-Distributionen über Windows und macOS. Empfohlen wird allerdings die Installation eines vom Projekt erstellten Raspberry Pi-Images. Dieses hört auf den, für deutsche Ohren gewöhnungsbedürftigen, Titel Hass.io und ist für den Betrieb auf einem Raspberry Pi 3 (Modell B) vorgesehen. In diesem Image sind die Funktionalitäten für den Betrieb von Home Assistant kombiniert. Über eine Weboberfläche kann dieses System konfiguriert werden. So können z.B. SSH- oder Samba-Server aktiviert werden um auf die Konfigurationen von Home Assistant zuzugreifen. Technisch basiert Hass.io auf resinOS und nutzt Docker-Container für die Isolierung der einzelnen Serverkomponenten. Der Quelltext des Home Assistant-Projektes ist auf GitHub zu finden. Lizenziert ist das Projekt unter der Apache-Lizenz in der Version 2.

Swagger – REST API goes Framework

Ein REST-API von Hand entwickelt, benötigt eine Dokumentation, ein entsprechenden Server und eventuell einige Clients als Referenz. Einfacher wird es mit einem Framework wie Swagger. Unter Zuhilfenahme der Beschreibungssprache YAML können mit Hilfe des Frameworks REST-APIs, Dokumentation, Server und Clients generiert werden.

Der Swagger Editor

Der Swagger Editor

Doch Swagger versteht sich nicht nur als Framework, sondern auch als Spezifikation. Begonnen wurde mit der Entwicklung bereits im 2010; die Swagger Specification trägt seit Anfang Januar 2012 offiziell den Namen OpenAPI Specification und beschreibt eine maschinenlesbare Interfacedefinitionen einer REST-API. Ähnliches wurde unter anderem schon mit WSDL und WADL versucht – alles Konzepte bzw. Beschreibungsprachen welche an ihren eigenen Limitationen gescheitert sind und wenn überhaupt nur noch sporadisch genutzt werden.

Betreut und weiterentwickelt wird die Spezifikation nun von der Open API Initiative, zu der namenhafte Firmen wie Google, PayPal, IBM, Atlassian und Microsoft gehören. Die Spezifikation als solche ist freie Software und auf GitHub zu finden. Sie ist unter der Apache Lizenz lizenziert. Aktuell ist die Spezifikation in der Version 2.0 veröffentlicht.

Auf der offiziellen Webseite von Swagger findet sich ein Editor, mit welchem APIs definiert werden können und anschließend exportiert werden können. Der Editor kann dabei Server unter anderem in den Sprachen bzw. für die Framworks Haskel, Jax-RS, Node.js, Python, Rails und PHP erzeugen. Bei den Clients ist die Auswahl noch größer. Diese können in C#, HTML, Dart, Go, Groovy, Java, Javascript, Objective C, Perl, PHP, Ruby, Scala, Swift und vielen weiteren Sprachen erzeugt werden.

Neben dem Editor kann für die Erzeugung von Clients auch der Swagger Codegen genutzt werden. Dabei handelt es sich um eine Java-Anwendung um die Clients lokal auf dem eigenen Rechner zu erzeugen. Der Editor und viele weitere Tools rund um Swagger sind ebenfalls auf GitHub zu finden. – auch diese sind freie Software, welche unter der Apache Lizenz stehen.

maybe

Das Terminal ist geöffnet und ein Befehl wie:

rm -rf img*

soll abgesetzt werden. Nun stellt sich die Frage ob man diesen Befehl wirklich so ausführen möchte. Natürlich könnte es sein, das der Befehl zu weit greift, was dazu führt das man mehr löscht als einem lieb ist. Einen Ausweg aus dieser Misere bietet das in Python geschriebene Tool maybe. Installiert werden kann dieses auf der Konsole mittels:

pip install maybe

Führt man nun ein Skript mittels maybe aus:

maybe test.sh

so ermittelt maybe, welche Operationen das Skript vornehmen möchte und zeigt diese an. Nach einer Bestätigung kann der Befehl anschließend ausgeführt werden. Technisch funktioniert das ganze dabei indem der Prozess unter der Kontrolle von ptrace ausgeführt wird. Hierbei werden allerdings nur einige Systemaufrufe blockiert, so das man maybe nur mit Skripten nutzen sollte, welchen man vertraut. Der Quelltext von maybe ist auf GitHub zu finden. Lizenziert ist das Tool unter der GPL in Version 3 und damit freie Software.

Alle Python-Pakete mit pip aktualisieren

Auf einem System auf welchem Python installiert ist, ist meist auch der Paketmanager pip installiert. Über diesen können neue Python-Pakete installiert werden:

pip install jinja2

Möchte man nun mittels pip alle Python-Pakete aktualisieren, so kann man sich mit folgender Befehlskette behelfen:

pip freeze --local | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip install -U

Der entsprechende Artikel mit weiteren Hinweisen zu dieser Befehlskette befindet sich auf Stack Overflow.

Build fehlgeschlagen: Planeten falsch ausgerichtet

Kreativität treibt manchmal seltsamem Blüten – wie sonst würde man auf die Idee kommen ein Skript zu schreiben, welches Buildvorgänge nur dann erlaubt, wenn Planeten im Sonnensystem nicht in einer Reihe stehen.

INFO [dfe36319] Running /usr/bin/env python astro_build.py as lhartikk@188.166.5.240
DEBUG [dfe36319] Command: python astro_build.py
DEBUG [dfe36319]BUILD FAILED
DEBUG [dfe36319]PLANETS ALIGNED: ['Mercury', 'Jupiter']
DEBUG [dfe36319]ALIGNMENT: 149 degrees
(Backtrace restricted to imported tasks)
cap aborted!

Genau für diesen Zweck wurde das Python-Skript AstroBuild geschrieben, welches auf GitHub zu finden ist. Lizenziert ist es unter der Apache Lizenz und damit freie Software.