MQTT in Home Assistant
Das universelle IoT-Protokoll verstehen, einrichten und mit Sensoren, Tasmota und Zigbee2MQTT nutzen.
Was ist MQTT?
MQTT (Message Queuing Telemetry Transport) ist ein leichtgewichtiges Nachrichtenprotokoll, das speziell für IoT-Geräte entwickelt wurde. Es arbeitet nach dem Publish/Subscribe-Prinzip: Geräte senden (publish) Nachrichten an ein Topic, und andere Geräte empfangen (subscribe) diese Nachrichten über einen zentralen Broker.
Anders als HTTP braucht MQTT nur minimale Bandbreite und funktioniert auch bei instabilen Verbindungen zuverlässig. Deshalb ist es der De-facto-Standard für Smart-Home-Kommunikation.
- Sensor (Publisher)
- Broker (Mosquitto)
- HA (Subscriber)
- Automation
Warum MQTT für Smart Home?
- Extrem schnell — Nachrichten werden in unter 10ms zugestellt — ideal für Echtzeit-Steuerung
- Energiesparend — Minimaler Overhead, perfekt für batteriebetriebene Sensoren
- Universell — Funktioniert mit Tasmota, ESPHome, Zigbee2MQTT, Node-RED und tausenden Geräten
- Entkoppelt — Sender und Empfänger müssen sich nicht kennen — maximale Flexibilität
- Retained Messages — Der Broker speichert die letzte Nachricht — neue Subscriber erhalten sofort den aktuellen Wert
- Sicher — Unterstützt TLS-Verschlüsselung und Benutzer-Authentifizierung
MQTT-Konzepte verstehen
Topics — Die Adresse deiner Nachrichten
Topics sind hierarchische Pfade, die Nachrichten organisieren. Sie funktionieren wie Ordnerpfade:
1# Topic-Beispiele
2# Grundstruktur: bereich/raum/gerät/eigenschaft
3haus/wohnzimmer/temperatur # Temperaturwert
4haus/kueche/licht/status # Lichtstatus (on/off)
5haus/garten/bewaesserung/command # Steuerbefehl
6
7# Wildcards:
8haus/+/temperatur # + = ein Level (alle Räume)
9haus/# # # = alle darunter (alles im Haus)
10
11# Spezielle Topics:
12homeassistant/sensor/... # MQTT Auto-Discovery
13zigbee2mqtt/... # Zigbee2MQTT GeräteQoS — Quality of Service
| QoS Level | Bezeichnung | Zustellung | Anwendung |
|---|---|---|---|
| QoS 0 | At most once | Maximal 1x, kann verloren gehen | Sensor-Werte (häufige Updates) |
| QoS 1 | At least once | Mindestens 1x (evtl. doppelt) | Standard für die meisten Fälle |
| QoS 2 | Exactly once | Genau 1x (langsamer) | Kritische Steuerbefehle |
Retain und Last Will
Hinweis: Wenn eine Nachricht mit dem Retain-Flag gesendet wird, speichert der Broker sie. Jeder neue Subscriber erhält sofort den letzten Wert — perfekt für Statusanzeigen wie Temperatur oder Schaltzustand.
Hinweis: Ein Gerät kann beim Verbinden eine LWT-Nachricht hinterlegen. Bricht die Verbindung ab, sendet der Broker diese automatisch. So erkennt Home Assistant, wenn ein Gerät offline geht.
Mosquitto Broker installieren
- Add-on installieren — Einstellungen, Add-ons, Add-on Store, nach Mosquitto broker suchen
- Benutzer erstellen — Einstellungen, Personen, neuen Benutzer für MQTT erstellen (z.B. mqtt_user)
- Add-on konfigurieren — Mosquitto Add-on, Konfiguration Tab, Standard-Einstellungen reichen meist
- Add-on starten — Starten klicken, Watchdog und Autostart aktivieren
- Integration hinzufügen — Einstellungen, Geräte & Dienste, MQTT Integration wird automatisch erkannt
Mosquitto Konfiguration (erweitert)
1# Mosquitto Add-on Config (fortgeschritten)
2# Standard-Konfiguration (Add-on Konfiguration Tab)
3logins: [] # Leer = HA-Benutzer verwenden
4require_certificate: false
5certfile: fullchain.pem
6keyfile: privkey.pem
7customize:
8 active: true
9 folder: mosquitto
10
11# Für TLS-Verschlüsselung (mit Let's Encrypt):
12# certfile und keyfile auf deine Zertifikate zeigen lassen
13# Port 8883 wird automatisch aktiviert1# mosquitto/accesscontrollist (ACL)
2# Datei: /share/mosquitto/accesscontrollist
3# Zugriffsrechte pro Benutzer definieren
4
5# Standard-Benutzer: Lesen und Schreiben auf eigene Topics
6user mqtt_sensor
7topic readwrite sensor/#
8
9# Home Assistant: Vollzugriff
10user mqtt_ha
11topic readwrite #
12
13# Nur-Lesen für Monitoring
14user mqtt_monitor
15topic read #MQTT in Home Assistant konfigurieren
Automatische Discovery
Die meisten MQTT-Geräte (Tasmota, Zigbee2MQTT, ESPHome) unterstuetzen MQTT Auto-Discovery. Dabei sendet das Gerät seine Konfiguration an ein spezielles Topic, und Home Assistant erstellt automatisch die passenden Entities.
1# MQTT Discovery Payload (Beispiel: Temperatursensor)
2
3 "name": "Wohnzimmer Temperatur",
4 "unique_id": "sensor_wz_temp_01",
5 "device_class": "temperature",
6 "state_topic": "haus/wohnzimmer/sensor/temperatur",
7 "unit_of_measurement": "°C",
8 "value_template": "{{ value_json.temperature }}",
9 "device": {
10"identifiers": ["sensor_wz_01"],
11"name": "Wohnzimmer Multisensor",
12"manufacturer": "DIY",
13"model": "ESP32-DHT22"
14
15Manuelle MQTT-Sensoren in configuration.yaml
1# MQTT Sensoren manuell definieren
2mqtt:
3 # Temperatursensor
4 sensor:
5- name: "Aussentemperatur"
6 state_topic: "haus/aussen/temperatur"
7 unit_of_measurement: "°C"
8 device_class: temperature
9 value_template: "{{ value_json.temperature | round(1) }}"
10 json_attributes_topic: "haus/aussen/temperatur"
11 json_attributes_template: >
12 {{ {'humidity': value_json.humidity,
13 'battery': value_json.battery} | tojson }}
14
15- name: "Regenmenge Heute"
16 state_topic: "haus/aussen/regen"
17 unit_of_measurement: "mm"
18 icon: "mdi:weather-rainy"
19 value_template: "{{ value_json.rain_mm }}"
20
21 # Binaer-Sensoren (An/Aus)
22 binary_sensor:
23- name: "Haustuer"
24 state_topic: "haus/eingang/tuer"
25 device_class: door
26 payload_on: "open"
27 payload_off: "closed"
28
29- name: "Bewegung Flur"
30 state_topic: "haus/flur/pir"
31 device_class: motion
32 payload_on: "1"
33 payload_off: "0"
34 off_delay: 120 # Nach 120s automatisch auf "off"
35
36 # Schalter (steuerbar)
37 switch:
38- name: "Gartenpumpe"
39 state_topic: "haus/garten/pumpe/status"
40 command_topic: "haus/garten/pumpe/set"
41 payload_on: "ON"
42 payload_off: "OFF"
43 retain: true
44
45 # Licht (dimmbar)
46 light:
47- name: "Schreibtischlampe"
48 state_topic: "haus/buero/lampe/status"
49 command_topic: "haus/buero/lampe/set"
50 brightness_state_topic: "haus/buero/lampe/brightness"
51 brightness_command_topic: "haus/buero/lampe/brightness/set"
52 brightness_scale: 255Tasmota-Geräte über MQTT
Tasmota ist eine beliebte Open-Source-Firmware für ESP8266/ESP32-basierte Geräte (Sonoff, Tuya, usw.). Nach dem Flashen kommunizieren sie über MQTT mit Home Assistant.
- Gerät mit Tasmota flashen — Über USB mit tasmota.github.io/install oder Tuya-Convert (OTA)
- WLAN konfigurieren — Mit dem Tasmota-Hotspot verbinden, WLAN-Daten eingeben
- MQTT konfigurieren — Web-UI, Configuration, MQTT: Broker-IP, Benutzer und Passwort eingeben
- Auto-Discovery aktivieren — Tasmota Console: SetOption19 0 (neues Discovery Format)
- In HA erkannt — Das Gerät erscheint automatisch unter Geräte & Dienste
1# Tasmota MQTT-Einstellungen (Web-UI)
2# Tasmota Configuration > MQTT:
3Host: 192.168.1.100 # IP deines HA-Servers
4Port: 1883
5Client: tasmota_steckdose
6User: mqtt_user
7Password: dein_passwort
8Topic: steckdose_buero
9
10# Wichtige Console-Befehle:
11# SetOption19 0 -> Neues HA Discovery Format
12# SetOption30 1 -> HA Discovery aktivieren
13# TelePeriod 30 -> Telemetrie alle 30 SekundenTasmota Energiemessung in HA
1# Tasmota Energiedaten auswerten
2# Tasmota sendet automatisch Energiedaten:
3# Topic: tele/steckdose_buero/SENSOR
4# Payload:
5# {
6# "ENERGY": {
7# "Power": 45,
8# "Voltage": 230,
9# "Current": 0.196,
10# "Today": 1.234,
11# "Total": 567.89
12# }
13# }
14
15# In HA als Template-Sensor:
16template:
17 - sensor:
18 - name: "Buero Steckdose Kosten Heute"
19 state: >
20 {{ (states('sensor.steckdose_buero_energy_today') | float * 0.35) | round(2) }}
21 unit_of_measurement: "EUR"
22 icon: "mdi:currency-eur"MQTT mit Zigbee2MQTT
Zigbee2MQTT verbindet Zigbee-Geräte über MQTT mit Home Assistant. Es ist die beliebteste Alternative zur ZHA-Integration und bietet mehr Kontrolle und Geräteunterstuetzung.
Vorteile:
- 3.000+ unterstützte Geräte
- Eigene Web-UI für Geräteverwaltung
- OTA-Firmware-Updates
- Gerätegruppen und Binding
- Aktive Community mit schnellem Support
Nachteile:
- Braucht Mosquitto MQTT als Voraussetzung
- Etwas komplexerer Setup als ZHA
- Separates Add-on neben HA
1# Zigbee2MQTT Konfiguration
2# /config/zigbee2mqtt/configuration.yaml
3homeassistant: true
4permit_join: false # Nur zum Pairen temporär auf true
5
6mqtt:
7 base_topic: zigbee2mqtt
8 server: mqtt://localhost:1883
9 user: mqtt_user
10 password: !secret mqtt_password
11
12serial:
13 port: /dev/ttyUSB0 # Dein Zigbee-Koordinator
14
15advanced:
16 network_key: GENERATE
17 pan_id: GENERATE
18 channel: 15 # Kanal mit wenig WLAN-Störung
19
20frontend:
21 port: 8080 # Web-UI auf Port 8080
22
23devices:
24 # Geräte werden automatisch hinzugefügt
25 '0x00158d0001234567':
26friendly_name: 'wohnzimmer_sensor'
27
28groups:
29 '1':
30friendly_name: 'alle_lichter_wohnzimmer'
31devices:
32 - '0x00158d0001234568'
33 - '0x00158d0001234569'MQTT testen und debuggen
MQTT Explorer
MQTT Explorer ist ein kostenloses Desktop-Tool zum Visualisieren aller MQTT-Topics und Nachrichten. Unverzichtbar beim Debuggen.
HA-interne MQTT-Tools
1# MQTT-Nachrichten in HA testen
2# Entwicklerwerkzeuge > MQTT > Nachricht abhören:
3# Topic: haus/#
4# -> Zeigt alle eingehenden Nachrichten
5
6# Entwicklerwerkzeuge > MQTT > Nachricht senden:
7# Topic: haus/garten/pumpe/set
8# Payload: ON
9# -> Schaltet die Gartenpumpe ein
10
11# Automation zum MQTT-Debugging:
12automation:
13 - alias: "MQTT Debug Logger"
14trigger:
15 - platform: mqtt
16 topic: "haus/#"
17action:
18 - service: system_log.write
19 data:
20 message: >
21 MQTT: {{ trigger.topic }} = {{ trigger.payload }}
22 level: infoHäufige MQTT-Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| Gerät verbindet nicht | Falsche Broker-Adresse oder Zugangsdaten | IP, Port, User und Passwort prüfen |
| Nachrichten kommen nicht an | Falsches Topic oder Firewall | MQTT Explorer nutzen, Topics prüfen |
| Gerät zeigt offline | LWT-Nachricht ausgelöst | Gerät-Verbindung und WLAN prüfen |
| Doppelte Entities | Discovery sendet mehrfach | Alte Discovery-Topics loeschen |
| Werte veraltet | Kein Retain oder zu langes Intervall | Retain-Flag aktivieren, TelePeriod reduzieren |
Praxis-Beispiel: Kompletter MQTT-Sensor
Hier ein vollständiges Beispiel eines ESP32 mit DHT22 und MQTT, das Temperatur und Luftfeuchtigkeit an Home Assistant sendet:
1# ESPHome-Variante (empfohlen, statt Arduino)
2# ESPHome nutzt zwar nativ die API, kann aber auch MQTT:
3esphome:
4 name: aussen-sensor
5
6esp32:
7 board: esp32dev
8
9wifi:
10 ssid: !secret wifi_ssid
11 password: !secret wifi_password
12
13mqtt:
14 broker: 192.168.1.100
15 username: mqtt_user
16 password: !secret mqtt_password
17 topic_prefix: haus/aussen
18
19sensor:
20 - platform: dht
21pin: GPIO4
22model: DHT22
23temperature:
24 name: "Temperatur"
25humidity:
26 name: "Luftfeuchtigkeit"
27update_interval: 30s
28
29 - platform: adc
30pin: GPIO34
31name: "Batterie"
32unit_of_measurement: "%"
33filters:
34 - calibrate_linear:
35 - 1.0 -> 0
36 - 3.3 -> 100Hinweis: Für eigene ESP-Geräte empfehlen wir die native ESPHome-API statt MQTT — sie ist schneller, verschluesselt und braucht keinen Broker. Nutze MQTT nur, wenn du das Gerät auch mit anderen Systemen (Node-RED, Grafana) verbinden willst.
Hinweis: Teste das Publish/Subscribe-Prinzip live in unserem MQTT Nachrichten-Simulator →
Weiter: Erfahre mehr über Zigbee und Z-Wave Funkprotokolle im Detail: Zigbee & Z-Wave Guide
