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.jarund 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… :-)
2 Kommentare
Von: Kromonos
2015-02-11 14:34:01 +0100
Mich würde mal die .rules Datei interessieren. Zumindest der if Block, der zur Auslösung dient, wenn das Gerät in die "Homezone" rein kommt. Das will bei mir irgendwie nicht so klappen, wie ich es gerne hätte.
Von: Marianne M. Spiller
2015-02-21 12:10:21 +0100
Ich glaube, die funktioniert inzwischen, oder? ;)
Zu meinen rules mache ich noch einen eigenen Artikel, aber der ist noch in Arbeit...
Hinterlasse einen Kommentar
Ich freue mich über jeden Kommentar, es sei denn, er ist blöd.
Deshalb sind die Kommentare auf dieser Seite auch generell moderiert.