Home Assistant für Hausautomation

Wer auf der Suche nach Hausautomatisierungen-Software ist, wird auf viele verschiedene Projekte stossen. Im Moment ist das Thema “hip” und viele Entwickler arbeiten an Hausautomatisierungeprojekten. Viele Projekte legen den Hauptfokus auf die Visualisierung. Zwar ist eine gut aussehendes und gut bedienbare Benutzerschnittstelle wichtig, aber eigentlich sollte eine Hausautomatisierung die meisten Sachen automatisch tun.

Ein Projekt, welches im Bereich “Automatisierung” sehr flexibel ist ist Home Assistant. Die Systemarchitektur ist sehr klar und einfach. Es gibt eine saubere Trennung zwischen Visualisierung und Backend. Durch eine Webschnittstelle ist es einfach möglich, für die Visualisierung und die Steuerung ein eigenes GUI zu entwickeln und nutzen. Für mich persönlich ist es auch ein Vorteil, dass die Software in Python geschrieben ist, was die Erweiterung um zusätzliche Funktionalitäten vereinfacht.

Eine Home Assistent Architecture könnte wir folgt aussehen:

ha-architecture

KNX ist im Moment (Mitte Juni 2016) noch nicht unterstützt, aber ich arbeite gerade an einem Modul. Ich hoffe, dass dieses demnächst in Home Assistant integriert werden kann.

Wie sicher ist KNX?

Schaut man sich moderne Hausautomatisierungslösungen wie Z-Wave oder Zigbee an, tauchen auch immer wieder Sicherheitsprobleme auf. Einige davon wurden oder werden noch behoben, andere vielleicht nicht. Wenn schon diese modernen Technologien gewisse Probleme aufweisen, wie sieht es dann erst mit einem “Oldie” wie KNX aus?

Kurz gesagt: KNX ist das schlimmste, was man sich aus Sicherheitssicht vorstellen kann. Alle Geräte kommunizieren auf einem gemeinsamen Medium, es gibt weder Verschlüsselung noch Authentisierung oder Authorisierung. Wer Zugriff zum KNX-bus hat, kann praktisch alles tun.

Glücklicherweise gibt es aber einen positiven Punkt: Man braucht physischen Zugriff zum KNX-Bus. Zwar kann jemand, der Zugriff zur persönlichen KNX-Installation hat, alle möglichen bösartigen Dinge tun, allerdings ist diese Person dann schon in der Wohnung und könnte auch ohne Hausautomatisierung ziemlich fiese Sachen tun. Das Licht ein- oder auszuschalten dürfte da wohl das kleinste Problem sein. Das heisst, für Installationen in Wohnräumen, bei denen der KNX-Bus nicht mit anderen Netzen verbunden ist, ist KNX immer noch eine sichere Lösung. Allerdings: Welche Automatisierungslösung ist heute nicht mit anderen Netzen verbunden? Viele Intelligenz wird heute nicht direkt auf dem KNX-Bus abgebildet, sondern durch externe Geräte, die oft auch noch mit dem Internet verbunden sind.

Geht es trotzdem sicher? Im Prinzip schon, wenn man einige Dinge beachtet:

  1. Der KNX-Bus sollte nicht einfach direkt mit dem Heimnetz verbunden werden, besonders nicht, wenn evtl. noch ein WLAN-Gastzugang eingerichtet ist.
    KNX/IP Schnittstellen sind sinnvolle Geräte, man sollte aber überlegen, wie man den Zugriff darauf einschränken kann. Idealerweise setzt man ein Gateway ein, welches Benutzer authentifizieren kann und Zugriffsrechte verwalten kann.
  2. Benutzt man ein beliebiges kommerzielles Produkt mit Internetzugriff zum Zugriff auf KNX-Komponenten, sollte geprüft werden, ob der Hersteller regelmässige Sicherheitsupdates zur Verfügung stellt. Wenn der letzte Software-Release 18 Monate alt ist, ist das wohl kaum der Fall.
  3. Wer selbst ein Gateway oder eine Haussteuerung entwickelt, sollte von Anfang an überlegen, wie die Architektur aussehen muss, um eine möglichst hohe Sicherheit zu erreichen.

Bemerkung  1: Die physische Sicherheit kann ein Problem sein, wenn eine KNX-Installation z.B. ein gesamtes Haus mit mehreren Wohnungen steuert. Wenn die Wohnung also irgendeine “intelligente” Steuerung bietet, sollte man sich nochmals anschauen, was dort umgesetzt wurde und ob sich jemand Gedanken darüber gemacht hat, verschiedene Wohnungen voneinander zu trennen.

Bemerkung 2: Mit ETS 5.5 gibt es von der KNX Assoziation nun “Secure KNX”. Ich habe mir das noch nicht im Detail angeschaut. Warum? In erster Linie, weil die existierenden älteren Geräte, die bereits verbaut wurden, keine Security-Erweiterung unterstützen. Evtl. wird KNX Security in Zukunft an Bedeutung gewinnen, im Moment wird es von praktisch keinen Geräten unterstützt, die in bestehenden KNX-Installationen zu finden sind.

Interfacing a KNX bus with Python

If you are looking for frameworks that allow you to interface a KNX bus using an IP interface, you will find a lot of tools. Many people still use eibd. However, looking at the eibd page you will see that eibd is no longer maintained.

If you read the KNX specification, you will notice that KNX packets are quite small with a simple structure. No XML stuff with namespaces as often used in modern APIs. So why not implementing the communication in a small script? Unfortunately it is a bit more complicated than just sending a packet to the KNX/IP interface an wait for the answer.

While KNX itself is connectionless, the KNX/IP interface isn’t. This means you first have to initialise a control connection to the KNX/IP interface and use this for data transmissions. Also you have to acknowledge every packet, otherwise the KNX/IP interface will drop the connection. Does this seem complicated? It isn’t.

A simple version of a KNX/IP communications stack (with very limited functionality) can be implemented in less than 400 lines of code. This even implements caching. This means the daemon actively listens to the KNX bus and stored the state of every object internally. Just reading the value of an object than does not need any KNX communication when the value has been seen on the bus already.

Using this simple interface, it is very easy to exchange messages with KNX group addresses:

from knx.ip import KNXIPTunnel
import time
import logging

def main():
    logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)

    tunnel = KNXIPTunnel("192.168.1.128",3671)
    tunnel.connect()
    
    while (True):
        # Toggle the value of group address 0/0/1
        tunnel.group_toggle(1)
        
        # display the values of group addresses 0/0/1 to 0/0/5
        for i in range(1,6):
            v=tunnel.group_read(i)
            print("{} = {}".format(i,v))

        # delay
        time.sleep(12)
        
if __name__ == '__main__':
    main()

References:

Ein minimaler KNX Testaufbau

Als erfahrener Elektronikbastler ist es auch interessant, mit KNX zu experimentieren. Leider hat KNX den Ruf, teuer zu sein. Ganz so schlimm ist es nicht, denn für einen kleinen KNX-Aufbau muss man nicht Tausende Euro bezahlen. Das braucht man:

  • Eine 29V Spannungsversorgung, die mindestens 300mA Strom liefern kann.
    Hierfür sollten fast alle Labornetzteile gut funktionieren, ein extra KNX-Netzteil muss es für einen Testaufbau nicht sein.
  • Eine KNX-Drossel.
    Ohne eine Drossel zwischen Netzteil und KNX-Bus wird keine Kommunikation auf dem Bus möglich sein, denn die Drossel entkoppelt die geregelte Spannungsversorgung von den Datensignalen auf dem Bus. Eine Drossel bekommt man neu ab ca. 35 Euro. Einige Benutzer berichten, dass ein 47-Ohm Widerstand zwischen Stromversorgung und Bus den gleichen Zweck erfüllt. Da ein Widerstand nur ein paar Cent kostet, kann man durchaus ausprobieren, ob das funktioniert. Für einen Einsatz in einer echten Haussteuerung sollte man aber auf keinen Fall auf die Drossel verzichten, selbst wenn in der Laborumgebung ein Widerstand funktioniert.
  • Ein KNS Sensor
    Ein paar Schalter und Taster hat sicher jeder Elektronikbastler herumliegen. In diesem Fall ist die günstigste Variante, diese mit dem KNX-Bus zu verbinden ein KNX Busankoppler. Oft findet man ältere Geräte auf eBay für weniger als 30 Euro.
  • Ein KNX Aktor
    Manche KNX-Sensoren haben bereits eingebaute LEDs, die über KNX gesteuert werden können. In diesem Fall ist es nicht einmal erforderlich einen zusätzlichen Aktor zu beschaffen. Ein “richtiger” Aktor ist natürlich trotzdem ganz nett, denn damit kann man dan richtig schalten. Alte Unterputz-Aktoren bekommt man auf eBay auch häufig für weniger als 30€.
  • Ein USB oder Ethernet-Adapter für KNX
    USB Schnittstellen sind meist günstiger zu bekommen, speziell auf eBay, wo man gebrauchte USB-KNX-Interfaces für weniger als 80€ findet. Allerdings würde ich diese heute nicht mehr empfehlen. Günstiger KNX/IP-Interfaces mit Ethernet-Schnittstelle bekommt man für weniger als 150€. Mit einem solchen Interface ist man wesentlich flexibler, da der Rechner mit der Haussteuerung nicht direkt neben dem KNX-Interface stehen muss.

Alles in allem muss man schon mit einer Investition zwischen 200€ und 300€ rechnen. Allerdings ist die teuerste Komponente das KNX/IP-Interface. Wenn man nach einigen Experimenten doch  beschliessen sollte, nicht weiter mit KNX zu arbeiten, kann man die meisten Geräte auf eBay verkaufen und wird keinen grossen Wertverlust haben (speziell KNX/IP Schnittstellen sind gebraucht kaum günstiger als neu).

Eine Minimalinstallation könnte dann so aussehen:

Minimal KNX installation