Anbindung von openHAB an mosquitto

Diesen Beitrag schrieb ich 8 Jahre und 4 Monate zuvor; die nachfolgenden Ausführungen müssen heute nicht unbedingt noch genau so funktionieren. 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… :-)