Anbindung von openHAB an mosquitto
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… :-)
Hintergrundbild: Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten