Ein Smarthome das twittert

Nachrichten bekommen, wenn zu Hause etwas passiert und in einer Timeline nach verfolgen können, was wann passiert ist. Mit openHAB und Twitter ist das einfach möglich. In diesem Artikel beschreibe ich wie das geht.

Die Idee

openhab-twitterDie Idee war, Push Notifications auf das Handy zu bekommen, sobald zu Hause besondere Ereignisse auftreten. Und zusätzlich eine Art Audit Trail zu haben in dem ich sehen kann, wann welches Ereignis eingetreten ist.
Ich hatte mir alles mögliche und komplizierte überlegt, bis ich auf die Idee kam, einfach Dienste zu nutzen, die es schon gibt und es mir einfach zu machen.

Ich hatte bisher Twitter nicht genutzt, aber es schien genau die richtige Lösung zu sein. Das Haus schreibt Tweets mit den aufgetretenen Ereignissen, über die Twitter App bekomme ich diese gleich auf das Handy gepusht und auf dem Twitter Account sehe ich in der Timeline wann welcher Tweet geschrieben wurde. Das ganze auch noch gesichert, so dass nur berechtigte Personen diese Tweets sehen können. Weitere Follower können den Tweets vom Haus nach Genehmigung folgen ohne zusätzlichen Programmieraufwand.
Es braucht also einen Twitter Account für einen selbst und einen für das Haus.

Also habe ich mir erst mal einen Twitter Account für mich selbst eingerichtet (@MarcoMichel72). Diesen kann ich künftig nutzen um meine Blog-Posts zu twittern, aber das ist ein anderes Projekt.

Folgende drei Schritte, die ich in den folgenden Abschnitten Schritt für Schritt erkläre, sind notwendig um das eigene Haus twittern zu lassen:

  1. Twitter Account einrichten
  2. Twitter in openHAB einrichten
  3. Regeln in openHAB erstellen

Twitter Account einrichten

Wer noch keinen eigenen Twitter Account hat, sollte jetzt einen Account für sich selbst einrichten. Das Haus bekommt einen eigenen Twitter Account. Die Registrierung bei Twitter ist selbsterklärend, die Beschreibung spare ich mir an dieser Stelle.

Sicherheit und Datenschutz
Sicherheit und Datenschutz

Nicht jeder wird wollen, dass die ganze Welt mitbekommt, was zu Hause passiert. Es besteht die Möglichkeit die Tweets des Hauses zu schützen. Damit können nur Follower des Hauses die Tweets sehen, öffentlich sind sie nicht mehr sichtbar. Wenn jemand den Tweets folgen will, erhält man eine Anfrage, erst nach expliziter Freigabe, kann dieser die Tweets sehen.
Das machen wir für das Haus-Twitter-Konto. Dazu in die Einstellungen des Twitter Accounts vom Haus gehen und „Sicherheit und Datenschutz“ wählen. Unter Privatsphäre bei Tweet-Sicherheit den Hacken „Meine Tweets schützen“ setzen. Das war es schon. Der Screenshot zeigt die Einstellung, weitere Infos können auf der Twitter-Support Seite nachgelesen werden.

Spätestens jetzt sollte man in den eigenen Twitter Account gehen und dem Twitter Account des Hauses folgen. Jetzt muss man noch mal in den Account des Hauses und die Anfrage freigeben. Erst jetzt tauchen die Tweets des Hauses auf der Timeline des eigenen Accounts auf. Die Freigabe kann man sich sparen, wenn man dem Haus Account folgt, bevor man dessen Tweets schützt.

Jetzt sollte noch, falls nicht schon vorhanden, die Twitter App auf dem Smartphone installiert werden. Anmeldung auf dem Smartphone mit dem eigenen Twitter Account.

Zeit für einen Test. Im Haus-Account einen Tweet schreiben und schauen, ob er in der eigenen Timeline ankommt.

Twitter in openHAB einrichten

Im nächsten Schritt muss openHAB berechtigt werden Tweets zu schreiben. openHAB bringt bereits eine Funktion mit um Tweets zu schreiben, die Doku und Einrichtung kann auf GitHub nachgelesen werden.

Trotzdem hier noch eine kleine Schritt für Schritt Anleitung mit openHAB 1.8.1, da man doch über das ein oder andere stolpern kann.

Das Twitter Addon bereit stellen
Das jar-File org.openhab.action.twitter-1.8.1.jar muss im Verzeichnis <openhab-home>/addons sein. Wenn man das nicht hat, können die Addons auf der openHAB Download Seite herunter geladen werden.

In der Config Twitter aktivieren
Unter <openhab-home>/configurations/openhab.cfg muss der Wert twitter:enabled=true aktiv sein. Er steht schon drin, man muss nur den Kommentar entfernen und den Wert true eintragen.

openHAB im Twitter Account berechtigen
Die folgenden Aktionen müssen innerhalb von 5 Minuten erfolgen. Wenn das nicht klappt, muss man openHAB stoppen und neu starten. Dann ab hier alles noch mal.
Die Berechtigung erfolgt über zwei Schritte. openHAB erzeugt beim Start ein einmal Token. Mit diesem wird Twitter aufgerufen um openHAB zu berechtigen. Dabei erhält man von Twitter einen PIN, den man openHAB bekannt machen muss. Damit holt sich openHAB automatisch einen dauerhaften Security Token von Twitter.

Aber jetzt Schritt für Schritt. Zuerst openHAB starten.

Im Log-File unter <openhab-home>/logs/openhab.log stehen Einträge mit dem Hinweis Twitter-Integration.

08:46:10.013 INFO o.openhab.io.net.actions.Tweet[:136] - ################################################################################################
08:46:10.014 INFO o.openhab.io.net.actions.Tweet[:137] - # Twitter-Integration: U S E R I N T E R A C T I O N R E Q U I R E D !!
08:46:10.014 INFO o.openhab.io.net.actions.Tweet[:138] - # 1. Open URL 'http://api.twitter.com/oauth/authorize?oauth_token=hP9gKIQ4wfMrzpmzqp4NcTJjAxXdwLo9fFEcndkks'
08:46:10.014 INFO o.openhab.io.net.actions.Tweet[:139] - # 2. Grant openHAB access to your Twitter account
08:46:10.014 INFO o.openhab.io.net.actions.Tweet[:140] - # 3. Create an empty file 'twitter.pin' in your openHAB install path
08:46:10.015 INFO o.openhab.io.net.actions.Tweet[:141] - # 4. Add the line 'pin=' to the twitter.pin file
08:46:10.015 INFO o.openhab.io.net.actions.Tweet[:142] - # 5. openHAB will automatically detect the file and complete the authentication process
08:46:10.015 INFO o.openhab.io.net.actions.Tweet[:143] - # NOTE: You will only have 5 mins before openHAB gives up waiting for the pin!!!
08:46:10.015 INFO o.openhab.io.net.actions.Tweet[:144] - ################################################################################################

Die URL aus dem Log-File kopieren. Achtung, das letzte Hochkomma nicht mitkopieren. Im Internet-Browser muss man im Haus-Twitter-Account angemeldet sein. Die URL in die Adresszeile des Browser kopieren und aufrufen. Man kommt auf eine Seite, auf der man openHAB als Applikation berechtigen muss. Man erhält eine PIN die man kopieren muss.
Einen Editor öffnen und den Eintrag pin=<authpin> eintragen. <authpin> ist der PIN den man von der Twitter Seite kopiert hat. Das File unter <openhab-home>/twitter.pin speichern.

Erst jetzt geht der Startup-Prozess von openHAB weiter. openHAB erkennt das File twitter.pin und führt eine Authentifizierung bei Twitter durch. Im Log-File von openHAB sieht man eine Erfolgsmeldung, dass die Authentifizierung geklappt hat.

TwitterAction has been successfully authenticated &amp;gt; awaiting your Tweets!

Es sollte jetzt folgendes File vorhanden sein <openhab-home>/etc/twitter.token. Das zuvor angelegte File twitter.pin kann gelöscht werden.

Damit ist openHAB bereit Tweets zu posten.

Regeln in openHAB erstellen

Um einen Tweet, an den zuvor eingerichteten Twitter Account, zu senden gibt es in openHAB den Befehl sendTweet(String). Dieser kann in Regeln verwendet werden. Folgendes Beispiel schreibt einen Tweet wenn openHAB gestartet wurde.

rule "System start"
when
	System started
then
	sendTweet("openHAB wurde gestartet.")
end

Problem mit Twitter ist, dass dieser Tweet nur einmal geschrieben wird. Twitter lehnt es ab einen identischen Tweet zweimal zu posten. Man bekommt einen Fehler mit dem Status Code 187. Zwei Tweets mit dem gleichen Text geht also nicht. Die Lösung ist einfach, einen Timestamp dem Text hinzufügen. Ich habe mir dazu folgende zentrale Funktion, im File mit den Regeln erstellt, die ich aus allen Regeln aufrufen kann:

// zentrale Funktion um eine Twitter Nachricht zu versenden
val org.eclipse.xtext.xbase.lib.Functions$Function1 sendToTwitter = [
	String msg |
	var SimpleDateFormat df = new SimpleDateFormat( "YYYY-MM-dd HH:mm:ss" )
	var String ts = df.format( new Date() )
	sendTweet(msg + "\n["+ts+"]")		
]

Folgende Regel verwendet die Funktion, um eine Twitter Nachricht zu senden, wenn der Bewegungsmelder auf der Terrasse eine Bewegung erkennt und die Terrassentür geschlossen ist.

// Aktion wenn Terrassentür geschlossen und Bewegung auf der Terrasse
rule "Bewegung Terrasse"
when
	Item Motion_GF_Terrace changed to ON
then
	if (Window_GF_Living_L.state == CLOSED) {
		sendToTwitter.apply("Bewegung auf der Terrasse.")
	}
end

Mehr ist nicht zu tun um aus openHAB Tweets zu senden.

Wenn man Notifications auf dem Handy haben möchte, muss man in der Twitter App auf dem Handy noch den Account vom Haus als Favorit markieren. Dazu in der Twitter App auf das Profil des Haus-Accounts gehen (Bild des Haus-Accounts bei einem Tweet anklicken). Auf dem Profil das Symbol mit dem Stern anklicken. Es wird kurz folgende Meldung angezeigt: „Du erhälst nun Mitteilungen wenn … twittert“.

Fazit

Mit einfachen Standardmitteln und mit wenig Aufwand ist es möglich Nachrichten vom Haus auf das Handy zu bekommen. Man muss nur die richtige Balance bei den Regeln finden, damit man nicht mit Notifications überflutet wird.

One Reply to “Ein Smarthome das twittert”

  1. Pingback: Anwesenheit-Status mit openHAB | discoveration

Schreibe einen Kommentar

Anmelden um einen Kommentar abzugeben.

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*