Anbindung von openHAB an mosquitto

Diesen Beitrag schrieb ich 9 Jahre und 7 Monate zuvor; die nachfolgenden Ausführungen müssen heute weder genau so nach wie vor funktionieren, noch meiner heutigen Meinung entsprechen. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 1 Minute

Nun kommt – endlich! – openHAB ins Spiel.

Den entsprechenden User haben wir in unserem mosquitto ja schon angelegt – doch auch auf der openHAB-Maschine muss unsere CA erst bekannt gemacht werden, sonst ist eine Verbindung nicht möglich und es kommt zu SSLHandshakeException & Co. Um dem Java-TrustedStore das Zertifikat hinzuzufügen ging ich folgendermaßen vor:

$ openssl s_client -connect spiller.me:8883 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/public.crt

Unter Ubuntu-14.04 liegt der TrustedStore unter /usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/jre/lib/security/cacerts, und da hinein importiere ich nun public.crt:

$ keytool -import -alias spiller.me -keystore /usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/jre/lib/security/cacerts -file /tmp/public.crt
Enter keystore password:

Das Default-Passwort des TrustedKeystore ist changeit!

Owner: EMAILADDRESS=blog@spiller.me, CN=spiller.me, O=spiller.me, ST=Saarland, C=DE
Issuer: EMAILADDRESS=blog@spiller.me, CN=spiller.me, O=spiller.me, L=Saarbruecken, ST=Saarland, C=DE
Serial number: 1
Valid from: Thu Jan 29 19:59:42 CET 2015 until: Sun Jan 26 19:59:42 CET 2025
Certificate fingerprints:
	 MD5:  0C:72:3B:07:9F:90:4A:FE:E8:1D:3B:62:A6:C2:18:F5
	 SHA1: 7A:BB:51:CA:D9:1A:71:FF:76:C5:B2:21:CD:6A:73:74:2A:57:85:64
	 SHA256: 43:E7:94:85:11:86:36:3F:BE:54:7F:74:45:B2:CF:2E:72:60:E3:20:EC:B4:6A:7C:E0:D7:2F:22:A6:2F:E8:25
	 Signature algorithm name: SHA256withRSA
	 Version: 3
[...]
Trust this certificate? [no]:  yes
Certificate was added to keystore

Um openHAB nun an mosquitto ‘ranzuknüppeln müssen zwei Files nach $OPENHAB_HOME/addons kopiert werden:

  • org.openhab.binding.mqtt-$YOUR_VERSION.jar und
  • org.openhab.binding.mqttitude-$YOUR_VERSION.jar

Dann muss die openHAB-Konfiguration erweitert werden:

#### $OPENHAB_HOME/configuration/openhab.cfg
############################# MQTT Transport ##################################
mqtt:mosquitto.url=ssl://$YOUR_TLD:8883
mqtt:mosquitto.user=$YOUR_USER
mqtt:mosquitto.pwd=$YOUR_PASSWORD
mqtt:mosquitto.qos=1
mqtt:mosquitto.retain=false
mqtt:mosquitto.async=true
mqtt-eventbus:broker=mosquitto
mqtt-eventbus:stateSubscribeTopic=owntracks/+/+
 
############################# Mqttitude Binding ###############################
mqttitude:home.lat=49.xxxxxx
mqttitude:home.lon=7.xxxxxx
mqttitude:geofence=100

home.lat und home.lon bezeichnen die Koordinaten von „zu Hause“ auf 100m (geofence) genau; ermitteln lassen sich diese ganz einfach zum Beispiel hier.

Bei einem start_debug.sh äußerte sich die geänderte Konfig so:

19:18:22.105 [DEBUG] [.io.transport.mqtt.MqttService:123  ] - Starting MQTT Service...
19:18:22.609 [INFO ] [o.o.i.s.i.DiscoveryServiceImpl:53   ] - Service Discovery initialization completed.
19:18:22.721 [INFO ] [.io.transport.mqtt.MqttService:108  ] - MQTT Service initialization completed.
19:18:22.727 [INFO ] [o.i.t.m.i.MqttBrokerConnection:114  ] - Starting MQTT broker connection 'mosquitto'
19:18:22.950 [DEBUG] [o.i.t.m.i.MqttBrokerConnection:294  ] - Creating new client for 'ssl://spiller.me:8883' using id 'pi.1423073902891' and file store '/tmp/mosquitto'

Nun sind wir bereit und können ein Item für den User mane bauen:

// $OPENHAB_HOME/configurations/items/default.items
[...]
// Wer ist gerade zu Hause?
Group   Anwesenheit   <cellular>
Switch mane
  "Marianne via Geodaten"
  (Anwesenheit)
  { mqttitude="mosquitto:owntracks/mane/iphone" }
[...]

Und dieses Item kann ich dann in die Sitemap einbinden:

// $OPENHAB_HOME/configurations/sitemaps/default.sitemap
Group item=Anwesenheit {
  Switch item=mane
}

Dann in Owntracks am besten mal oben auf den Pfeil gehen und “Publish Now” auswählen – und mit etwas Glück klappt nun alles:

12:59:24.926 [INFO ] [runtime.busevents             :26   ] - mane state updated to {"cog":-1,"batt":"67","lon":"7.xxxxxx","acc":"165","vel":-1,"vac":10,"lat":"49.xxxxxx","t":"u","tst":"1422964768","alt":225,"_type":"location","tid":"NE"}
12:59:24.934 [DEBUG] [ore.internal.items.ItemUpdater:73   ] - Received update of a not accepted type (StringType) for item mane
12:59:25.039 [DEBUG] [b.m.internal.MqttitudeConsumer:147  ] - mane is inside the 'home' geofence (27.329884386758767m)
12:59:25.043 [INFO ] [runtime.busevents             :26   ] - mane state updated to ON

In dieser Konfiguration überprüft unser Switch die Anwesenheit genau dort, was als home.lat/home.lon/geofence in der openhab.cfg angegeben wurde. Alternativ könnt ihr auch Wegpunkte in Owntracks anlegen, beispielsweise „work“. Den würdet ihr in der Item-Konfiguration dann per mosquitto:owntracks/mane/iphone:work ansprechen. (Analog kann man sich die Angabe in der openhab.cfg schenken, stattdessen in Owntracks einen Punkt „home“ anlegen und diesen dann ansprechen; alles Geschmackssache und hängt vom Einsatzziel ab…) Und darauf aufbauend lassen sich nun natürlich Regeln definieren – doch dazu später mehr… :-)

Alle Bilder dieser Seite: © Marianne Spiller – Alle Rechte vorbehalten
Hintergrundbild: Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten

Eure Gedanken zu „Anbindung von openHAB an mosquitto“

Ich freue mich über jeden Kommentar, es sei denn, er ist blöd. Deshalb behalte ich mir auch vor, die richtig blöden kurzerhand wieder zu löschen. Die Kommentarfunktion ist über GitHub realisiert, weshalb ihr euch zunächst dort einloggen und „utterances“ bestätigen müsst. Die Kommentare selbst werden im Issue-Tracker und mit dem Label „✨💬✨ comment“ erfasst – jeder Blogartikel ist ein eigenes Issue. Über GitHub könnt ihr eure Kommentare somit jederzeit bearbeiten oder löschen.