In diesem Beitrag habe ich beschrieben wie eine MQTT-Infrastruktur mit openHAB 2.4 aussehen kann. Jetzt sind Sonoff S20 Steckdosen als Geräte vorhanden und wurden mit Tasmota MQTT-fähig gemacht.
Jetzt müssen natürlich die Steckdosen vorbereitend für Weihnachten 2019 auch in openHAB integriert werden 🙂
Weiterführende Informationen
Ein Beispiel für die Anbindung an MQTT mit openHAB 2.4 findet man im Tasmota-Wiki. Dort wird der alte Weg und die neue Variante mit openHAB 2.4 grob beschrieben.
Die generelle MQTT-Architektur in openHAB 1 / 2 könnt Ihr hier nachlesen. Damit hat man schon einmal etwas Basiswissen über die Systemarchitektur.
Ein kleines Beispiel für die Integration von Sonoff S20 mit Tasmota-Firmware habe ich im openHAB-Forum gefunden. Recht ähnlich habe ich dann meine Konfiguration aufgebaut.
Genereller Aufbau
Da ich bereits openHAB 2.4 verwende, benutze ich MQTT v2 als “Binding”. Ich gehe nicht mehr auf die Unterschiede der beiden Versionen ein.
Jedes physikalische vorhandene Sonoff-Gerät wird als ein Thing definiert. Am Thing wird auch die Verbindung zum MQTT-Broker hinterelegt. Außerdem werden am Thing die notwendigen Channels z.B. POWER zum schalten parametriert.
Anschließend wird am Item definiert das auf den Channel zugreift. Am Schluss wird alle in der Sitemap visualisiert und optional in Regeln automatisiert.
things-Datei
In der Things-Datei wird nun die Bridge zum MQTT-Broker und die Things incl. Channels wie folgt definiert:
Bridge mqtt:broker:myMQTTBroker [
host="xxx.xxx.xxx.xxx",
secure=false,
username="xxx",
password="xxx" ,
clientID="myMQTTClient"
]
{
Thing topic Sonoff_xxx_xxx "Sonoff - xxx-5778" @ "MQTT" {
Channels:
Type switch : PowerSwitch "Power Switch 01" [ stateTopic="stat/sonoff-xxx/POWER", commandTopic="cmnd/sonoff-xxx/POWER", on="ON", off="OFF" ]
Type switch : PowerSwitchRes "Switch State 01" [ stateTopic="stat/sonoff-xxx/RESULT", transformationPattern="JSONPATH:$.POWER",on="ON",off="OFF"]
Type string : Version "Version 01" [ stateTopic="tele/sonoff-xxx/INFO1", transformationPattern="JSONPATH:$.Version"]
Type string : fallback "fallback topic" [ stateTopic="tele/sonoff-xxx/INFO1", transformationPattern="JSONPATH:$.FallbackTopic"]
Type string : hostname "hostname " [ stateTopic="tele/sonoff-xxx/INFO2", transformationPattern="JSONPATH:$.Hostname"]
Type string : IP "IP " [ stateTopic="tele/sonoff-xxx/INFO2", transformationPattern="JSONPATH:$.IPAddress"]
Type string : time "Time" [ stateTopic="tele/sonoff-xxx/STATE", transformationPattern="JSONPATH:$.Time" ]
Type string : uptime "Uptime" [ stateTopic="tele/sonoff-xxx/STATE", transformationPattern="JSONPATH:$.Uptime" ]
Type number : vcc "VCC" [ stateTopic="tele/sonoff-xxx/STATE", transformationPattern="JSONPATH:$.Vcc" ]
Type string : wifi-ap "Wifi AP" [ stateTopic="tele/sonoff-xxx/STATE", transformationPattern="JSONPATH:$.Wifi.AP" ]
Type string : wifi-ssid "Wifi SSID" [ stateTopic="tele/sonoff-xxx/STATE", transformationPattern="JSONPATH:$.Wifi.SSId" ]
Type string : wifi-channel "Wifi Channel" [ stateTopic="tele/sonoff-xxx/STATE", transformationPattern="JSONPATH:$.Wifi.Channel" ]
Type string : wifi-rssi "Wifi RSSI" [ stateTopic="tele/sonoff-xxx/STATE", transformationPattern="JSONPATH:$.Wifi.RSSI" ]
Type string : devicestate "Device State" [ stateTopic="tele/sonoff-xxx/LWT" ]
}
items-Datei
Die Items werden wie folgt aufgebaut:
/************************************************** Gruppen ********************************************/
Group gSonoffSw1 "Sonoff S20 01"
Group gSonoffSw1Info "Info 01"
Group gSonoffSw2 "Sonoff S20 02"
Group gSonoffSw2Info "Info 02"
/************************************************** Items ********************************************/
/*
Sonoff_xxx_xxx
*/
Switch SonoffPs01Switch_Switch "Switch 01" (gSonoffSw1) { channel="mqtt:topic:myMQTTBroker:Sonoff_xxx_xxx:PowerSwitch" }
Switch SonoffPs01Switch_State "State 01" (gSonoffSw1) { channel="mqtt:topic:myMQTTBroker:Sonoff_xxx_xxx:PowerSwitchRes"}
Number SonoffPs01Switch_Vcc "VCC [%s]" (gSonoffSw1Info) { channel="mqtt:topic:myMQTTBroker:Sonoff_xxx_xxx:vcc" }
String SonoffPs01Switch_WifiAp "Wifi AP [%s]" (gSonoffSw1Info) { channel="mqtt:topic:myMQTTBroker:Sonoff_xxx_xxx:wifi-ap" }
String SonoffPs01Switch_WifiSsid "Wifi SSID [%s]" (gSonoffSw1Info) { channel="mqtt:topic:myMQTTBroker:Sonoff_xxx_xxx:wifi-ssid" }
String SonoffPs01Switch_WifiChannel "Wifi Channel [%s]" (gSonoffSw1Info) { channel="mqtt:topic:myMQTTBroker:Sonoff_xxx_xxx:wifi-channel" }
String SonoffPs01Switch_WifiRssi "Wifi RSSI [%s]" (gSonoffSw1Info) { channel="mqtt:topic:myMQTTBroker:Sonoff_xxx_xxx:wifi-rssi" }
String SonoffPs01Switch_Uptime "Uptime" (gSonoffSw1Info) { channel="mqtt:topic:myMQTTBroker:Sonoff_xxx_xxx:uptime" }
String SonoffPs01Switch_Time "Time" (gSonoffSw1Info) { channel="mqtt:topic:myMQTTBroker:Sonoff_xxx_xxx:time" }
String SonoffPs01Switch_Version "Version [%s]" (gSonoffSw1Info) { channel="mqtt:topic:myMQTTBroker:Sonoff_xxx_xxx:Version" }
String SonoffPs01Switch_Hostname "Hostname [%s]" (gSonoffSw1Info) { channel="mqtt:topic:myMQTTBroker:Sonoff_xxx_xxx:hostname" }
String SonoffPs01Switch_IP "IP [%s]" (gSonoffSw1Info) { channel="mqtt:topic:myMQTTBroker:Sonoff_xxx_xxx:IP" }
String SonoffPs01Switch_DeviceState "Device State" (gSonoffSw1Info) { channel="mqtt:topic:myMQTTBroker:Sonoff_xxx_xxx:devicestate" }
Falls gewünscht kann das Tag [“Lighting”] für die Alexa-Anbindung noch entsprechend integriert werden.
Nach der Änderung der Things und Items einmal die openHAB-Dienste neu starten.
Test der Konfiguration
Den Test der Konfiguration habe ich mit mqtt-spy vorgenommen.
Ich habe folgende Topics verwenden:
Damit sehe ich alle Nachrichten zu dem Gerät. Es können folgende Wildcards verwendet werden:
- + = Single Level
- # = Multi Level
rules-Datei
Im nächsten Schritt möchte ich das Schalten der Steckdosen per Regel automatisieren:
rule "MQTT_TEST"
when
Time cron "0 */1 * ? * *" //every 1 Minute
then
logInfo("INFO","MQTT.rules - MQTT Test every minute")
val actions = getActions("mqtt","mqtt:systemBroker:embedded-mqtt-broker")
actions.publishMQTT("cmnd/sonoff-xxx/POWER","OFF")
end
Mit dieser Regel wird jede Minuten das Sonoff-Gerät ausgeschalten. Für einen einfachen Test ist das ausreichen.d
sitemap-Datei
Im letzten Schritt wird noch die Visualisierung in der Sitemap für die Web-Oberfläche und die App vorgenommen:
Text label="Tasmota" icon="movecontrol" {
Frame label="Sonoff S20 (B0B692 - 5778)" {
Switch item=SonoffPs01Switch_Switch
Switch item=SonoffPs01Switch_State
Group item=gSonoffSw1Info
}
}
Fazit und nächste Schritte
Mit den oben genannten Dokumentationen und Beispielen ist ein sehr einfacher Einstieg in MQTT, den Sonoff-Endgeräte und der Tasmota-Firmware möglich. Ich muss mir jetzt noch eine bessere Struktur für meine Topics und Messages erstellen. Im ersten Test habe ich die hinterlegten Nachrichten genommen, ich erst einmal die Funktionsfähigkeit testen wollte.
Nun kann ich auch die restlichen “Tasmoten” bestellen und damit die Weihnachtsbeleuchtung 2019 vorbereiten 🙂
Wie sind eure Erfahrungen allgemein mit MQTT und mit der Integration in openHAB? Welche Szenarien lassen sich damit noch abbilden?