MQTT - eine zentrale Instanz zum Austausch von Nachrichten
Um die verschiedensten Geräte miteinander kommunizieren lassen zu können wurde MQTT entwickelt. Es handelt sich um ein textbasiertes Protokoll bei dem durch kurze Nachrichten Befehle oder Statusmeldungen ausgetauscht werden. Das Programm welche die Kommunikation steuert wird "Broker" genannt.
Diese Nachrichten sehen etwa so aus: "/Schalter/Bad/Licht/Status" könnte die Meldung enthalten welchen Zustand der Lichtschalter im Bad hat. Die Lampe im Bad könnte diese Nachricht empfangen und,wenn der Status auf "AN" steht sich einschalten. Dadurch wird die physische Verbindung zwischen Schalter und Lampe getrennt und durch diese logische Verknüpfung ersetzt. Der Vorteil ist dass dann andere Teilnehmer einfach auch nur diese Nachricht schicken müssen und damit die Lampe im Bad ein- und ausschalten können.
Meist senden die Teilnehmer erheblich mehr Informationen als man benötigt, hier ist eine Nachricht eines Schalters:
20:19:51 MQT: tele/sonoff210/STATE = {"Time":"2018-04-10T20:19:51", "Uptime":1, "Vcc":3.238, "POWER":"OFF", "Wifi":{"AP":2, "SSId":"ByteBox", "RSSI":86, "APMac":"C8:0E:14:AA:EE:50"}}
Home Asssistant kann daraus die notwendingen Informationen ziehen indem es eine Art Parser darauf anwendet, in diesen habe ich mich aber noch nicht genug eingearbeitet.
Einrichtung des Brokers
Die Installation erfolgt über den Add-On-Schirm gemäß der Anleitung und verursachte bei mir keine Probleme. Eine Rückmeldung der Form "Ok, alles ist eingerichtet" wäre schön gewesen, aber offenbar reicht das Ausbleiben von Fehlern als "alles ist gut" aus.
Die Konfiguration kann im Schirm angepasst werden, dazu dient ein YAML-Segment:
{
"plain": true,
"ssl": false,
"anonymous": true,
"logins": [
{"username": "YOUR_USERNAME", "password": "YOUR_PASSWORD"}
],
"customize": {
"active": false,
"folder": "mosquitto"
},
"certfile": "fullchain.pem",
"keyfile": "privkey.pem"
}
Für den Anfang kann man das so übernehmen, ich habe allerdings anonyme Logins gleich abgeschaltet und ein Passwort vergeben.
Um per Home Assistant auf diese Komponente zuzugreifen müssen diese Einträge in die configuration.yaml:
mqtt:
broker: core-mosquitto
username: YOUR_USERNAME
password: YOUR_PASSWORD
Einrichtung eines Schalters
Um einen Schalter zu definieren trägt man in der configuration.yaml in der Sektion "switch:" einen solchen Block ein. In meinem Fall handelt es sich um einen Sonoff-Schalter mit aufgespielter Tasmota-Firmware.
- platform: mqtt
name: "Sonoff 210"
state_topic: "stat/sonoff210/POWER"
command_topic: "cmnd/sonoff210/POWER"
availability_topic: "tele/sonoff210/LWT"
payload_on: "ON"
payload_off: "OFF"
payload_available: "Online"
payload_not_available: "Offline"
retain: true
Der Name ist Freitext und wird so angezeigt.
Im state_topic und command_topic werden die Begriffe eingegeben die man im Schalter konfiguriert hat. So habe ich bei einem meiner Schalter zum Testen die IP mit integriert so dass er nun "sonoff210" heißt und auch überträgt.
Die Payload-Einträge sind die Werte die vom Schalter gesendet werden.
"retain" gibt an ob der letzte Wert nach einem Neustart gleich wieder gesetzt werden soll oder ob der Schalter als "undefiniert" geführt wird.
Was bei mir nicht zu funktionieren scheint ist der "state_topic". Ich hatte gehofft dass man mit diesem den Zustand des Schalters abfragen kann, habe das aber bisher noch nicht geschafft.