BMW ist einer der ersten Autohersteller, der eine Integration mit dem Automatisierungsdienst ifttt bereit gestellt hat. Der Dienst der BMW Labs befindet sich noch in einer Betaphase funktioniert aber schon sehr gut. Als ich neulich gelesen habe, dass man seinen BMW nun als sogenannten Channel innerhalb ifttt nutzen kann habe ich natürlich direkt überlegt, wie ich dieses Feature in die eigene Haussteuerung integrieren kann.
BMW ifttt Channel
Schauen wir uns dazu zunächst einmal an, welche Möglichkeiten der BMW Labs Channel aktuell zur Verfügung stellt. Es gibt im Moment 7 Trigger und eine Aktion. Mit der Aktion kann man eine Nachricht von bis zu 120 Zeichen an den BMW senden. Die jeweils letzte Nachricht wird dann im Display angezeigt.
Mit den Triggern lassen sich diverse Aktionen des Autos auswerten und mittels verschiedener Variablen können dann andere Channels informiert werden. Folgende Trigger sind aktuell definiert:
- Arriving soon
Der Trigger feuert, sobald man X Minuten von dem eingestellten Navigationsziel entfernt ist. - Enter an Area
Der Trigger feuert, sobald man eine definierte Region betritt. - Exit an Area
Der Trigger feuert, sobald man eine definierte Region verlässt. - Speeding
Der Trigger feuert, sobald man eine definierte Geschwindigkeit überschreitet. - Driving started
Der Trigger feuert, sobald die Gangschaltung in einen anderen Gang als „P“ geschaltet wird – also sobald man losfahren will. - Car is parked
Der Trigger feuert, sobald die Gangschaltung in den Zustand „P“ gelangt – also das Auto geparkt wird. - Travel range below
Der Trigger feuert, sobald die Entfernung vom Reiseziel unter einem definierten Wert liegt.
Für den BMW Channel gibt es auch schon zahlreiche Rezepte, die man für die eigenen Zwecke nutzen oder anpassen kann. So kann man z.B. eine SMS an die Kinder schicken, wenn man 5 Minuten von der Schule entfernt ist und die Kinder sich abholbereit machen sollen.
Für die Haussteuerung sind natürlich die Trigger „Enter an Area“ und „Exit an Area“ sehr gut für eine Anwesenheitserkennung nutzbar. Für diesen Zweck nutze ich selbst zwar aktuell die Geofancy App EgiGeozone auf meinem Android Smartphone, aber ich könnte mir vorstellen die BMW Trigger dort auch noch zu integrieren.
BMW für die Nutzung von ifttt vorbereiten
Damit der BMW mit ifttt zusammen arbeitet, müssen zunächst ein paar Einstellungen vorgenommen werden. Voraussetzung ist natürlich, dass man über ein Connected Drive Support und einen entsprechenden Zugang verfügt. Im BMW selbst muss man dann ein Online Widget installieren und dieses über den Splitscreen anzeigen. Nur dann werden die entsprechenden Trigger auch ausgeführt.
Ich hoffe, dass dies in Zukunft auch ohne die Anzeige des Widgets möglich ist, denn eigentlich nutze ich den Splitscreen aktuell für andere Infos, die mir nun fehlen. Die genaue Anleitung zur Einstellung des Online Widgets findet man bei BMW Labs.
Für meine ersten Tests habe ich dann den Trigger „Driving startet“ in Verbindung mit meinem Google Drive Laufwerk genutzt. Hier gibt es entsprechend vorbereitete Rezepte. Mit dem Rezept lässt sich quasi eine Art Fahrtenbuch realisieren. Für jede Fahrt wird in einer Google Tabelle eine neue Zeile angelegt und u.a. mit Anfangskilometerstand und einem Link zum Ort auf Google Maps versehen.
FHEM für externen Zugriff vorbereiten
Nachdem die ersten Tests erfolgreich verliefen galt es nun die Frage zu klären, wie ich ifttt mit meiner FHEM-Umbegung verknüpfe. Im FHEM-Forum gibt es zwar erste Ansätze, aber irgendwie waren die mir für den ersten Schritt zum kompliziert. Glücklicherweise gibt es bei ifttt seit einiger Zeit den Maker-Channel. Dieser Channel dient dazu eigene Funktionen mit ifttt zu verknüpfen. Mann kann den Maker-Channel mittels einer definierten URL antriggern oder per URL eine Aktion auslösen.
Also benötige ich „nur“ eine URL mit der ich irgend etwas in meinem FHEM ansteuern kann. Damit das funktioniert, benötigt man also einen externen Zugriff auf die FHEM-Umgebung. Zunächst dachte ich, dass ich für diesen Zweck einfach den gleichen Zugriff verwende, den ich für die Geofancy App eingerichtet habe. Hierbei greife ich mittels „myfritz.net“ auf die FHEM Umgebung zu. Der entsprechende Link sieht dann in etwa wie folgt aus:
https://<user>:<passwort>@<persönlicherFritzCode>.myfritz.net:8088/<fhem Kommando>
Nachdem ich die URL zunächst in meiner lokalen Umgebung getestet habe, habe ich den Link in den Maker-Channel eingebaut. Leider hat sich dabei heraus gestellt, dass ifttt aktuell nicht mit eigen erstellten Zertifikaten umgehen kann und beim Aufruf einen Fehler erzeugt hat.
Nun musste ich mich erstmal schlau machen, was es mit den Zertifikaten für https-Aufrufe auf sich hat. Hier habe ich nicht wirklich viel Erfahrung. Ergebnis ist, dass man für myfritz.net kein Zertifikat erstellen kann, welches von einer offiziellen Zertifizierungsstelle kommt. Daher fiel also der Zugriff über myfritz komplett weg.
Für den Zugriff auf FHEM von außen muß man aber eine feste IP-Adresse haben. Ein normaler DSL-Zugang wechselt mindestens einmal täglich die IP-Adresse. Also muss irgendein Dienst für die Umwandlung der dynamischen IP in eine statische IP Adresse genutzt werden. Hierzu benötigt man dann auch eine eigene Domain. Wie man so etwas einrichtet, sollte man sich besser im Netz informieren, da ich hier sonst wahrscheinlich nur irgendwelche fehlerhaften Infos geben kann.
Ich hatte Glück und habe u.a. ein Webhosting Paket bei Strato. Hier gibt es die Möglichkeit eine Domain bzw. eine Supdomain für eine dynamische DNS Nutzung einzurichten. Also habe ich mir eine entsprechende Subdomain fhem.<meine-domain.de> für diesen Zweck eingerichtet. In meiner Fritzbox habe ich dann die entsprechende Einstellung für DynDNS vorgenommen.
Damit eine Weiterleitung auf die FHEM-Umgebung funktioniert muss auch noch eine Portumleitung innerhalb der Fritzbox eingerichtet werden. Dies sieht dann wie folgt aus:
Innerhalb FHEM muss nun nur noch ein entsprechendes FHEMWEB Device definiert werden.
define webBMW FHEMWEB 8089 global
Idealerweise versteckt man alle Räume und Funktionen, die in der FHEM Webumgebung in der linken Seitenleiste angezeigt werden und vergibt noch einen Web-Namen:
attr webBMW webname webBMW attr webBMW hiddenroom input,detail,save,Unsorted,Everything,Bad,Schlafzimmer,<weitere eigene Räume>
Zur weiteren Absicherung sollte man den Zugang noch mittels Passwort schützen und auch die ausführbaren Funktionen auf „set“ und „get“ beschränken. Dies geschieht mittels „allowed“ wie folgt:
define allowed_webBMW allowed webBMW attr allowed_webBMW basicAuth { "$user:$password" eq "<eigener_benutzername>:<eigenes_Passwort>" } attr allowe_webBMW allowedCommands set,get
Um den Zugang jetzt noch sicherer zu machen, müsste man wieder den https-Zugang aktivieren. Wie oben erwähnt muß man sich dann aber wieder um ein entsprechendes Zertifikat bemühen. Für mich reicht die Absicherung aber zunächst einmal aus, auf die Verschlüsselung kann ich daher erst einmal verzichten.
BMW ruft Funktion in FHEM auf
Für den ersten Integrationstest habe ich nun zunächst ein Dummy Device mit „define duMeinBMW dummy“ erstellt. Über entsprechende set-Befehle will ich zunächst einmal die grundsätzliche Funktion testen. Demnächst mache ich mir dann weitere Gedanken, welche Funktionen am besten in meine FHEM Umgebung zu integrieren sind.
Für die erste Test-Aktion habe ich mir den Trigger „Car is parked“ ausgesucht. Diese Funktion lässt sich direkt vor Ort ganz gut testen, ohne dass man mit dem Auto umherfahren muß.
In ifttt habe ich also nun ein entsprechendes Rezept angelegt und dabei in der URL-Definition folgenden Code eingegeben:
http://<mein_Benutzername>:<mein_Passwort>@fhem.<meine_domain>.de:8089/webBMW?cmd.duMeinBMW=set%20duMeinBMW%20Geparkt:long:{{Longitude}},lat:{{Latitude}}
Bei dem verwendeten set-Befehl habe ich noch die Länge und Breite aus dem BMW-Channel übergeben, die als Variablen mittels zwei geschweifter Klammern eingeschlossen werden. Als Methode für den web-Aufruf habe ich „GET“ angegeben.
Das Ergebnis in FHEM sieht dann wie folgt aus. Die übertragene Info sollte man im STATE wieder finden.
Die ersten Tests verliefen also erfolgreich und die grundsätzliche Verbindung zwischen ifttt und FHEM funktioniert. Ich mache mir jetzt mal ein paar Gedanken, wie ich die Anbindung konkret in meiner FHEM Umgebung nutzen kann und werde dann sicherlich später nochmals darüber berichten.
Hallo Jürgen,
vielen Dank. Ich habe es endlich durch deinen Artikel geschaft, das mein Amazon Echo zeitnah Befehle über IFTTT an fhem sendet. Hast du es mittlerweile geschaft das mit den Zertifikaten für einen https Zugriff zu installieren ? Für eine Anleitung wäre ich sehr danknbar.
Immer weiter So. Danke für deine Mühe !
LG
Sven
Mit https bin ich leider auch noch nicht weiter gekommen. Sobald ich hier eine Umsetzung habe, werde ich das sicherlich in einem Artikel darstellen.
Sehr schönes Tutorial! Bin darüber gestolpert, als ich mich gerade mit IFTTT und FHEM beschäftigt habe. Ich habe heute ein Tutorial veröffentlicht, welches ein signiertes Zertifikat auf einer eigenen Domain mit ReverseProxy nutzt. Damit wäre also dein „Problem“ aus dem Beitrag behoben 🙂
Toller Blog, landest auf jeden Fall im Feed-Reader!
Vielen Dank Matthias. Schau ich mir auf jeden Fall mal an.