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…

Android Gerät mit VPN Server verbinden

Wenn man von unterwegs auf sein Heimnetzwerk zugreifen möchte, bietet es sich an, dazu einen VPN Server in Kombination mit einem dynamischen DNS Service einzurichten. Das habe ich hier und hier beschrieben.

Wie verbinde ich nun einen Client, in diesem Fall ein Android Mobiltelefon mit dem VPN Server?

Bei der Wahl des verwendeten Protokolls für das VPN habe ich mich für IP-Sec entschieden, weil es sicherer sein soll, als das PTP-Tunneling Protokoll und bei die gängingen Android Versionen beides out of the box beherrschen, ohne dass die Installation zusätzlicher Apps erforderlich ist.

Die Einrichtung geschieht über Einstellungen > Mehr > VPN

Android VPN-Client

Android VPN-Client

Über das  + Symbol wird einfach ein neuer Eintrag hinzugefügt:

Android VPN-Client

Android VPN-Client

Hier wird ein Eintrag L2TP/IPSec PSK angelegt, weil wir uns bei der Konfiguration des Synology VPN-Servers für einen preshared Key (PSK) entschieden und den dort vergeben haben. Für die Konfiguration müssen ein beliebiger Name (hier: Home) für den Eintrag, sowie die DDNS Adresse eingegeben werden, unter der das Heimnetz nach außen erreichbar ist.

Der im VPN-Server vergebene Schlüssel wird in das Feld „vorinstallierter IPSec-Schlüssel“ eingetragen, das wars.

Android VPN-Client

Android VPN-Client

Durch einen Klick auf den gerade angelegten Eintrag wird versucht, die Verbindung zum VPN-Server herzustellen, dazu werden die Benutzerdaten des Synology Benutzers abgefragt, fertig:

Android VPN-Client

Android VPN-Client

Ob die Verbindung funktioniert, ist zum einen durch das Schlüsselsymbol im Telefondisplay zu erkenn, zum anderen sollte es jetzt mögklcih sein, von außerhalb eures Heimnetzwerkes (WLANs) über die UMTS Verbindung des Geräts die internen 192.xxx Adressen aufzurufen.

Besonderheit: Der erstmalige Aufruf von „Einstellungen > Mehr > VPN“ auf manchen Androidgeräten der aktuelleren Versionen führt zu einer PIN Abfrage für einen „Anmeldeinformationsspeicher„. Ich konnte mich allerdings nicht entsinnen, so etwas jemals eingerichtet zu haben. Des Rätsels Lösung liegt in der Displaysperre des Geräts. Ich habe dort kurzzeitig eine PIN zum Entsperren des Displays statt eines Musters eingerichtet und mit der gleichen PIN ist es dann möglich auf das VPN Menü zuzugreifen und wie oben beschrieben Einträge anzulegen.

Synology Diskstation als VPN-Server verwenden

In einem anderen Beitrag habe ich beschrieben, wie man mithilfe des all-inkl.com DDNS Services und dem DDNS Client der Synology dafür sorgen kann, dass die Dienste der Synology von außen erreichbar sind.

Um nun nicht jeden einzelnen Dienst über eine Portweiterleitung am Router zu öffnen und damit angreifbar zu machen, bietet es sich an, für die eigenen Zugriffe ein VPN einzurichten. Auch hierbei hilft die Synology Diskstation weiter.

Zunächst muss über das Paketzentrum das Paket „VPN Server“ installiert werden, das werde ich hier aufgrund seiner Einfachheit nicht weiter beschreiben.

Läuft der Dienst, muss der Server noch konfiguriert werden, das ist in wenigen Schritten erledigt:

1.Unter „Allgemeine Einstellungen“ kann das Interface konfiguriert werden, falls die Diskstation über mehr als eins verfügt, Außerdem kann dort eingestellt werden, ob die lokal auf der Diskstation vorhandenen Benutzer das VPN verwenden dürfen und ob die Berechtigung dazu automatisch mit der Neuanlage von Benutzern erfolgen soll. Unter dem Punkt „Privileg“ kann man das pro Protokoll für alle Benutzer ändern.

Synology VPN Server Konfiguration

Synology VPN Server Konfiguration

2. das zu verwendende Protokoll wählen und einrichten. Ich habe mich für das IPSec Protokoll entschieden:

Synology VPN Server Konfiguration

Synology VPN Server Konfiguration

Neben der Anzahl an zulässigen Verbindungen, die ich reduziert habe, muss nur der Schlüssel (preshared key) eingetragen werden, den man sich ausdenkt. Mit dem Speichern wird eine Meldung angezeigt, dass am Router noch die Portweiterleitung für die 3 UDP Ports 1701, 500 und 4500 auf die IP der Synology eingetragen werden muss. Damit ist die Konfiguration des Servers erledigt und die Verbindung von Clients möglich.

all-inkl.com DDNS auf der Synology Diskstation einrichten

Wer seine Synology Diskstation aus dem Internet erreichbar machen möchte und all-inkl.com Kunde ist, hat, zumindest in meinem Tarifpaket, die Möglichkeit, das über einen entsprechenden Service zu tun, ohne auf Drittanbieter zurückgreifen zu müssen.

Das Angenehme daran ist, dass man eine Subdomain zur bei all-inkl. registrierten Domain wählen kann, über die der dynamische DNS-Dienst auf die eigene Synology verweist. Eingerichtet wird das Ganze im KAS Administrationswerkzeug in der Rubrik „Tools“. Mit den dort hinterlegten Konfigurationsparametern muss dann nur noch der entsprechende Dienst auf der Synology eingerichtet werden.

Dies geschieht über Systemsteuerung > Externer Zugriff:

Synology DDNS Konfiguration

Synology DDNS Konfiguration

Da im Standardumfang zwar alle möglichen DDNS Dienste hinterlegt sind, der Dienst von all-inkl.com aber noch nicht, muss das zunächst über den Punkt „Anpassen“ eingetragen werden:

Synology DDNS Provider ergänzen

Synology DDNS Provider ergänzen

Der Name für den neuen Eintrag kann frei vergeben werden, für die Query URL muss Folgendes eingetragen werden: „dyndns.kasserver.com/?myip=__MYIP__“.

Nach dem Speichern kann dann über „Hinzufügen“ der neue Eintrag ausgewählt werden:

Synology neuer DDNS Eintrag

Synology neuer DDNS Eintrag

Die übrigen Parameter sind dem KAS Eintrag zu entnehmen, nach einem kurzen Test der Verbindung sollte nun ein Normal angezeigt werden.

Beachtet bitte, dass damit nur sichergestellt ist, dass die Verbindung zwischen der im KAS eingerichteten Subdomain und der aktuellen WAN-IP eures Heimnetzes funktioniert. Damit auch Zugriffe in das Netz auf die dort angebotenen Dienste der Synology bestehen, müssen die entsprechenden Portweiterleitungen in eurem Router eingetragen werden.

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