wall < "Anbindung von openHAB an mosquitto"

Broadcast message from spillerm@unixe.de (pts/1) (Fr Feb 06 14:18:49 2015):
4
Diesen Beitrag schrieb ich vor 4 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

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 folgendermassen 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=marianne@spiller.me, CN=spiller.me, O=spiller.me, ST=Saarland, C=DE
Issuer: EMAILADDRESS=marianne@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 äusserte 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:

// Konfiguration $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:

// Konfiguration $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

Via Geodaten 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 aufbauens lassen sich nun natürlich Regeln definieren — doch dazu später mehr… :-)

4
  1. 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.

Keine weitere Reaktionen mehr möglich.