openhab2 und MQTT verbinden

Ich habe meine openhab2 Installation , die ein paar ZWave Sensoren und Schalter steuert mit mqtt verbunden. Warum? Weil ich mich mit dem Regeldeditor von Habmin und der Regelumsetzung in openhab nicht wirklich anfreunden kann. Auf lange Sicht möchte ich auf nodered setzen, um Regeln grafisch zu editieren und dazu ist es nötig, die Daten und Zustände von Sensoren und Schaltern für die Verwendung in nodered zu publizieren.

Dafür ist für mich ein auf dem gleichen Raspberry Pi , auf dem openhab2 läuft, installierter mosquitto Server das Mittel der Wahl. Inatalliert aus den Paketquellen der Raspian Distribution, kann man mit mqttlens sehr schnell schauen, ob der Server läuft und man eine Verbindung herstellen kann…

Die Konfiguration in openhab2 ist relativ simpel:

  • über das Paper-UI unter „Addons“ das mqtt-binding aktivieren
  • die Konfiguration für den mosquitto-Server eintragen

Mit Installation des Plugins werden im ~openhab2/services Verzeichnis die folgenden beiden Dateien angelegt:

  • mqtt.cfg die eigentliche Config-Datei für die Verbindung zum Server, dort die folgende Zeile einkommentieren und den Eintrag editieren, um einen Server auf localhost anzusprechen:

# URL to the MQTT broker, e.g. tcp://localhost:1883 or ssl://localhost:8883
raspipi.url=tcp://localhost:1883

  • mqtt-eventbus.cfg hier wird eingetragen, welche Dinge aus dem openhab2 Eventbus in Richtung mqtt Server publiziert werden.

# Name of the broker as it is defined in the openhab.cfg. If this property is not available, no event bus MQTT binding will be created.
broker=raspipi das spricht den Server an, den wir zuvor eingetragen haben

# When available, all status updates which occur on the openHAB event bus are published to the provided topic. The message content will
# be the status. The variable ${item} will be replaced during publishing with the item name for which the state was received.
statePublishTopic=openhab-status/${item}/status Statusänderungen werden als Topic openhab-status publiziert

# When available, all commands which occur on the openHAB event bus are published to the provided topic. The message content will be the
# command. The variable ${item} will be replaced during publishing with the item name for which the command was received.
commandPublishTopic=openhab-command /${item}/command Kommandos werden als Topic openhab-command publiziert

Das ist eigentlich schon alles. Nach einem Neustart von openhab2 kann man im Log sehen, dass die Verbindung zum mqtt-Server hergestellt wird. Abonniert man mit mqttlens die beiden zuvor konfigurierten Topics kann man bei Betätigung eines Schalters in openhab2 auch die entsprechend publizierten Nachrichten sehen.

Sprachsteuerung für Domoticz mit Google Now

Bei Siio bin ich auf einen tollen Beitrag und Videos gestossen, wie man die Beleuchtung im SmartHome mit Google Now, Tasker und ein paar Plugins vom Handy aus steuern kann.

Das Ganze geht natürlich auch mit Domoticz. Wesentlicher Unterschied ist nur das verwendete Kommando und an welche Serveradresse es geschickt werden soll. Um herauszufinden, welche API Kommandos Domoticz anbietet, sollte man sich das hier ansehen.

Ein einfacher Befehl, den das Handy an eure Domoticz-Installation schicken muss, um z.B. eine Lampe einzuschalten, lautet:

http://$DOMO_IP:$DOMO_PORT/json.htm?type=command&param=switchlight&idx=$LAMPE_IDX&switchcmd=On

Wie die Variablen mit der Domoticz IP und dem Port, auf dem es bei euch läuft ersetzt werden müssen und dass auch die idx der jeweiligen Lampe eingetragen werden muss, ist glaube ich selbsterklärend.

Damit es funktioniert, ist es wichtig zu wissen, dass das Ganze case-sensitiv ist, das Kommando On oder Off muss also tatsächlich am Anfang groß geschrieben werden, das ist ein häufiger Fehler.

Zum verwendeten AutoVoice Plugin gibt es noch zu sagen, dass die kostenlose Variante in der Erkennung der Wörter auf 4 Zeichen begrenzt ist, das war mir zu Beginn nicht aufgefallen und hatte deswegen dafür gesorgt, dass meine vergebenen Kommandos nicht erkannt wurde. Beschränkt man sich allerdings auf 4 Zeichen funktioniert es auch so.

Mosquitto mqtt Message Broker auf der Synology

Nicht immer stehen für alle Geräte und Dienste, die man in seiner Homeautomatisierung verwenden möchte, die passenden Möglichkeiten bereit, alles unmittelbar in die Steuerungszentrale einzubinden.

Eine Möglichkeit dennoch Daten aus nicht direkt verbundenen Quellen in einer Steuerungssoftware wie Domoticz o.Ä. zu verwenden ist ein Message Broker. Im Umfeld der Gerätevernetzung hat sich dazu beispielsweise das leichtgewichtige Telemetrieprotokoll mqtt etabliert, das nach dem publish-subscribe Ansatz funktioniert. Verbundene Geräte können also Zustandsdaten, Ortsangaben usw. an den Message Broker übermitteln, ein Beispiel dafür wäre owntracks.

Für die Protokollimplementierg gibt es eine Reihe von verfügbarer kommerzieller, aber auch OpenSource Software. Ich habe mich für Mosquitto entschieden, weil es dazu ein Synology Package der Synocommunity gibt.

Nach der Installation läuft der Dienst zunächst ohne Authentifizierung und ohne TLS am Port 1883. Um die Funktionalität zu testen, brauch es einen Client. Ich verwende die Chrome Erweiterung MQTTLens. Wie man damit umgeht, ist hier so gut beschrieben, dass ich dazu selber nichts schreiben muss.

Authentifizierung in Mosquitto mit Username / Passwort:

Dafür bringt mosquitto ein Kommandozeilenwerkzeug zur Erzeugung eines Passwortfiles mit dem Namen mosquitto_passwd mit, zu finden im Ordner bin der Mosquitto Installation. Um ein Passwortfile mit dem Namen mqpass im aktuellen Verzeichnis für den Benutzer test zu erzeugen reicht:

./mosquitto_passwd -c ./mqpass test
dann wird eine entsprechende Datei angelegt. Jetzt muss man Mosquitto noch beibringen, diese zu verwenden. Hierzu müssen in der mosquitto.conf Datei im Verzeichnis var der Mosquitto Installation die folgenden beiden Einträge verändert werden:

allow_anonymous false    # war vorher True

password_file Pfad/zu/mqpass # Pfad zu mqpass muss eingeben werden

Nach einem Neustart des Dienstes stellt man fest, dass man sich wie bisher nicht mehr verbinden kann und das erst wieder möglich ist, nachdem Benutzernamen und Passwort eingegeben wurden…

Ein paar Links zum Thema:

MQTT und Owntracks – Livetracking

DIY Latitude

Caschis Blog

Mosquitto und Websockets

 

Synology Diskstation Status per SNMP auslesen

Synology DSM unterstützt das SNMProtokoll, so lassen sich relativ leicht Informationen über den Zustand der Synology Diskstation auslesen und in Skripten, 3rd Party Software und Ähnlichem verwenden. Dafür ist folgendes erforderlich:

SNMP auf der Diskstation aktivieren: Systemsteuerung > Terminal und SNMP > Reiter SNMP:

synology snmp

synology snmp

Für einen Einstieg reicht es, die Häkchen wie im Screenshot gezeigt zu setzen, wer mehr über die Unterschiede zwischen den Protokollen und die Authentifizierung erfahren möchte, schaut in den weiter oben verlinkten Wikipedia Artikel, oder bemüht das Internet.

Nun ist die Synology Diskstation vorbereitet. Im unteren Bereich des Fensters wird ein Link auf die Synology Inc. Webseite angegeben, von dem die Informationen zu den Synology MiB-Files enthalten sind.

Wie das im Detail funktioniert würde hier zu weit führen und ist in den angegebenen Quellen ausführlich beschrieben, ich beschränke mich auf ein paar Hinweise und ein Beispiel.

Wie das Synology Inc. Dokument zeigt, bietet die Synology Diskstation folgende spezifische MIB Kategorien an:

synology-mib

synology-mib

Die OIDs sind der Einstieg in den jeweiligen Bereich und können für ein snmpget, bzw snmpwalk verwendet werden um entweder ganze Blöcke an Informationen, oder einzelne Informationen auszulesen. Letzteres in dem man die Kette der OID auf den jeweiligen Wert herunterbricht, wie im Dokument von Synology beschrieben.

Beispiel für die Verwendung in einem Bash-Skript:

# Getting the diskStation system info:
            ModelName=`snmpwalk -v 2c  -c public -O qv $NASIP 1.3.6.1.4.1.6574.1.5.1`
            DSMVersion=`snmpwalk -v 2c  -c public -O qv $NASIP 1.3.6.1.4.1.6574.1.5.3`

$ NASIP ist die Adresse der Synology Diskstation, $ModelName enthält dann z.B. „DS215“ und $DSMVersion die aktuell installierte DSM Version, die gewählten Parameter ( -O qv) sorgen dafür, dass nur der jeweilige Wert des Knotens und nicht die zugehörige OID mit ausgegeben werden.

Da auch Festplattenzustand, Temperatur und Ähnliches auf diese Weise ausgelesen werden kann, eignet sich das hervorragend für die Einbindung in eine Überwachungs- oder Homeautomatisierungslösung wie domoticz.

Aldi IP Kamera in Domoticz einbinden

Inzwischen bin ich meinen Versuchen der Home Automatisierung dann doch bei domoticz gelandet. Ich will hier kurz beschreiben, wie die Einbindung der Maginon IP-WLAN Kamera in domoticz funktioniert. Dabei gehe ich davon aus, dass die Kamera bereits funktionsfähig und in das Netzwerk eingebunden ist.

Hinzugefügt wird die Kamera über: Einrichtung > weitere Optionen > Kameras und dann den Button oben rechts um einen neuen Eintrag hinzuzufügen.

domoticz ip-cam

domoticz ip-cam

Benutzer und Passwort ist jeweils das, was bei der Einrichtung der Kamera vergeben wurde. Wichtig ist der letzte Eintrag für die Bild URL, hier muss Folgendes eingetragen werden:

/videostream.cgi?user=#USERNAME&pwd=#PASSWORD&resolution=64&rate=0

#USERNAME und #PASSWORD sind domoticz Variablen, die sich auf die beiden Felder weiter oben beziehen und mit den jeweilgen Werten automatisch ersetzt werden, Benutzer und Passwort müssen also hier nicht im Klartext eingetragen werden.

Verbindung testen, wenn alles funktioniert, die Kamera über ADD hinzufügen, fertig.

 

Domoticz JSON API testen

Zugegeben eine relativ spärliche Überschrift, die daher rührt, dass ich Domoticz als Homeautomatisierungslösung verwende. Domoticz bietet eine JSON Api an, über die sich die konfigurierten Geräte auslesen, bzw. steuern lassen indem man ein Statusupdate oder Ähnliches auf die Schnittstelle schickt. Das benutze ich z.B. um Statusinformationen meiner Synology Diskstation per snmp Cronjob auszulesen und in Domoticz zu aktualisieren.

Zu Testzwecken war ich auf der Suche nach einem Browserplugin, oder etwas ähnlich Unkompliziertem, um die schnell und ohne großen Aufwand mit der Domoticz API zu spielen. Es gibt verschiedene Lösungen für verschiedene Browserolattformen, ich habe mich ohne großes Ausprobieren für REST-Easy entschieden, das erfüllt meine Anforderungen.

Am Beispiel, Lichtschalter aus der domoticz-Installation abzurufen, (http://192.168.102.102:8888/json.htm?type=command&param=getlightswitches) sieht das dann so aus, die Beispielinstallation verwendet keine Authentifizierung:

json-api-client

json-api-client

uns zeigt im Reiter „Rohdaten“ folgendes Ergebnis:

{
   "result" : [
      {
         "IsDimmer" : true,
         "Name" : "RGBW-Controller-1 ",
         "SubType" : "RGBW",
         "Type" : "Lighting Limitless/Applamp",
         "idx" : "2"
      }
   ],
   "status" : "OK",
   "title" : "GetLightSwitches"
}

Home Assistant Presence Detection einrichten

Festzustellen, ob eine Person zu Hause ist, ist eine wesentliche Informationsquelle für das Aufstellen von Regeln für die Heimautomatisierung. Home Assistant bietet dafür unterschiedliche Möglichkeiten an:

  • Benutzung von NMap und Scannen des Netzwerkes
  • Zugriffe auf unterstützte Router via Telnet
  • Zugriff auf einen MQTT Server mit Telemetriedaten

Die zum Ausprobieren einfachste Variante ist NMap, dazu ist lediglich folgender Eintrag in der configuration.yaml notwendig:

device_tracker:

platform: nmap_tracker

hosts: 192.168.1.1/24

home_intervall: 10

Hosts bitte auf die jeweiligen Gegebenheiten im eigenen Netzwerk anpassen. Der letzte Eintrag ist die Zeit in Minuten, bis die Geräte erneut abgefragt werden.

Alle gefundenen Geräte werden in einer Datei known_devices.yaml abgelegt und folgen dieser Notation:

 

192168140:
#name: 192.168.1.40
name: marko
mac: 50:B7:3k:B2:B6:3E
picture:
track: yes
hide_if_away: no

Der kommentierte Eintrag zeigt, wie Namen für die Anzeige im UI angepasst werden können. Per Default sind die IP Adressen die Namen.

Sollen bekannte Geräte nicht weiter auf Anwesenheit getrackt werden, den Eintrag auf no setzen, bzw, die letzte Zeile auf yes, wenn nur anwesende Geräte im UI dargestellt werden sollen.

Tip für die configuration.yaml: Die Doku sagt zwar aus, dass mehrere Trackingmethoden gleichzeitig verwendet werden können, aber denkt daran, dass die tracker Einträge dann durchnummeriert werden müssen, sonst greift jeweils nur der letzte…

Hausautomatisierung – Zentrale mit Home Assistant

Eine der Softwarelösungen für die Zentrale, die ich ausprobiere ist Home Assistent. Die Installation auf der Synology ist schnell gemacht, es gibt ein Paket der Synocommunity.

Wie die Installation von 3rd Party Paketen auf der Synology funktioniert, ist auf der Homepage der Synocommunity beschrieben.

Wenn das Paket installiert und der Dienst gestartet ist, erreicht man die Weboberfläche über den Port 8123. Dort gibt es zunächst nicht viel zu sehen, ausser einer Oberfläche in der noch nichts konfiguriert ist, die aber mit Links auf die entsprechenden Dokuseiten verweist.

Einträge für Komponenten usw. kann man schnell hinzufügen, indem man die entsprechenden Passage der Datei configuration.yaml hinzufügt. Für jede Änderung muss der Dienst neu gestartet werden.

Auf der Synology liegt Home-Assistant im Verzeichnis des /Volumes/@appstore/

Was YAML ist, kann man hier nachlesen, wer auf Probleme mit seiner Konfiguration stößt, oder eingetragene Änderungen im Frontend nicht auftauchen, findet auf der Homepage von Home-Assistant viele Beispiele und sollte auch einen Blick in die Logdatei werfen, das hat mich letztlich auf die richtige Spur gebracht.

Zwischenfazit nach einigen Versuchen, Konfigurationseinstellungen für einen online Wetterdienst, die vorhandene Fritzbox, oder die Amazon Fire TV Box vorzunehmen:

Es ist mir nicht gelungen. Es fehlen Python Module in der Synology-Home-Assistant Installation, Konfigurationseinstellungen sind deprecated und und und… Eine sinnvolle Installation auf der Synology ist meiner Meinung nach nicht ohne weiteres möglich, viel zu buggy und kaum verfügbare Hinweise im Netz, die sich tatsächlich auf die Synology Installation beziehen. Verglichen mit der Demo Webseite scheint es auch ein alter Softwarestand zu sein.

Da mir die Software und der dokumentierte Funktionsumfang dennoch gut gefallen, habe ich mich kurzerhand entschlossen, einen Raspberry Pi aufzusetzen und damit einen neuen Versuch zu machen.

Die Installationsanweisungen sind hier beschrieben. Mit wenigen Einträge für einen Online Wetterdienst wie Forecast.io oder Ähnliches sieht das dann schnell so aus:

raspberry home-assistant

raspberry home-assistant

 

Hausautomatisierung – Was soll erreicht werden

Die wohl wichtigste Frage für meine Hausautomatisierungsspielereien lautet: Was soll eigentlich erreicht werden? Aufgekommen ist das Thema durch Überlegungen, die Beleuchtung in Teilen der Wohnung zu ändern und dabei ein paar ungünstig platzierte Schalter durch Funkschalter zu ersetzen / zu erweitern.

Per Funk fernbedienbare Elektronikkomponenten gibt es wie Sand am Meer und in so ziemlich jedem Laden mit einem Elektroniksortiment bis hin zu den bekannten Discountern. Vieles davon sind aber proprietäte Lösungen, die schlecht oder gar nicht erweiterbar sind. Erweiterbar sollte es aber sein, außerdem so, dass man nicht gleich Unsummen investieren muss, vielleicht sogar vorhandene Dinge nutzen kann, bzw. auf frei verfügbare Komponenten, speziell bei der Software und den verwendeten Standards aufsetzen kann.

Bei der vielen Recherche blieb zunächst das übrig:

  • vorhandene Synology Diskstation oder Raspberry Pi als Zentrale verwenden
  • frei verfügbare Softwarelösungen für die Zentrale ausprobieren
  • zunächst vorhandene Komponenten (Mobiltelefon, Netzwerkgeräte) integrieren
  • Presence Detection
  • Integration von Beleuchtung und Funkschaltungen
  • nicht nur fernbedienen sondern regelbasiert steuern

Hausautomatisierung Informationsquellen

In diesem Thread sollen im Laufe der Zeit die Informationsquellen zusammenkommen, die mir bei meiner Beschäftigung mit dem Thema nützlich erschienen sind. Vielleicht helfen sie dem ein oder anderen beim Einstieg in das Thema oder bei der Umsetzung einzelner Aspekte.

Eine generellen Überblick kann man wie so oft durch einen Wikipedia Artikel bekommen. Wichtig ist vielleicht zu erwähnen, dass es bei der Automatisierung nicht nur um die Fernbedienbarkeit von Komponenten geht, sondern auch um die Integration und die Interaktion der verwendeten Komponenten untereinander. Siehe auch hier.

Das PC-Magazin hat einen Überblick über die Funkstandards. Smarthomewelt bietet einen Überblick über verschiedene Systeme.

Viele nützliche Informationen speziell in Sachen Z-Wave und Fibaro habe ich bei siio gefunden.

Eine gute Quelle ist auch hackster.io z.B. mit einem Artikel über Home Assistant.