Lib zum einbinden von Geräten via MQTT an Home Assistant mit nur 3 Zeilen Code
- Vereinfacht die Anbindung von ESP32/ESP8266-Geräten an Home Assistant per MQTT.
- Alle Home Assistant-Typen (Sensoren, Schalter, Licht, Zahleneingaben, Buttons, Auswahlfelder, uvm.) lassen sich mit wenigen Funktionsaufrufen „automatisch“ einbinden.
- Discovery und MQTT-Handling laufen vollautomatisch im Hintergrund, auch bei Verbindungsabbrüchen oder Reconnect.
Bibliothek einbinden und ein MQTT4HA-Objekt mit Gerätenamen und Broker-Adresse anlegen.
WLAN wird wie gewohnt im Sketch hergestellt (die Bibliothek übernimmt das nicht).
Mit den Zugangsdaten den MQTT-Client starten (über die begin-Funktion).
Für jede Entität (Sensor, Switch, etc.) wird einmal eine „announce...“-Funktion aufgerufen. → Die Bibliothek merkt sich das und kümmert sich selbstständig um das Senden der nötigen Home Assistant-Konfiguration.
Sensoren und Zustände sendest du mit den passenden „send...“-Funktionen. Schalt- oder Steuerbefehle aus Home Assistant werden über Callbacks (onSwitchCommand, onButtonPress usw.) abgefangen.
Mit einem einzigen Funktionsaufruf im Loop bleibt die MQTT-Verbindung aktiv und alle Nachrichten werden verarbeitet.
Über einen Schalter kannst du alle Debug-Ausgaben jederzeit an- oder ausschalten.
Meldet eine neue Entität (Sensor, Switch, Light, Number, Button, Select, Cover, etc.) bei Home Assistant an.
Sendet aktuelle Werte oder Zustände einer Entität (Sensorwert, Switch-Zustand, Lichtfarbe, usw.) an Home Assistant.
Verknüpft einen Callback (Funktion), die ausgeführt wird, wenn Home Assistant einen Befehl (z.B. Schalten, Auswahl, Button-Press) sendet.
Schaltet alle Debug-Ausgaben an oder aus.
Startet die MQTT-Verbindung (nachdem WLAN steht).
Hält die MQTT-Verbindung und verarbeitet eingehende Befehle.
-
Die Bibliothek merkt sich jede angemeldete Entität.
-
Discovery wird immer dann gesendet, wenn die MQTT-Verbindung besteht – auch nach Reconnect.
-
Du musst nie auf das richtige Timing achten:
-
Egal, wann du eine announce...-Funktion rufst, die Lib sorgt dafür, dass Home Assistant alles korrekt sieht.
-
Bei Verbindungsabbrüchen werden alle Entities automatisch wieder im Broker/Home Assistant eingetragen.
-
Wie ist der typische Ablauf für eigene Projekte?
-
WLAN verbinden
-
ha.begin(...) aufrufen
-
ha.announce... für alle gewünschten Entities aufrufen
-
Callbacks mit ha.on...Command(...) registrieren (optional, z.B. für Switch)
-
ha.loop() im Loop aufrufen
-
ha.send... für aktuelle Werte/Zustände verwenden
| Funktion | Beschreibung |
|---|---|
begin() |
Startet die MQTT-Verbindung (nach WLAN-Verbindung) |
setDebug(bool) |
Debug-Ausgaben an/aus schalten |
loop() |
Hält die MQTT-Verbindung aktiv und verarbeitet Befehle |
announceSensor(...) |
Meldet einen Sensor an Home Assistant an |
sendSensor(...) |
Sendet einen Sensorwert |
announceBinarySensor(...) |
Meldet einen Binary Sensor (z.B. Tür auf/zu) an |
sendBinarySensor(...) |
Sendet den Status des Binary Sensors (ON/OFF) |
announceSwitch(...) |
Meldet einen Switch (Schalter) an |
sendSwitchState(...) |
Sendet den aktuellen Zustand des Schalters (ON/OFF) |
onSwitchCommand(...) |
Callback für empfangene Schaltbefehle aus Home Assistant |
announceLight(...) |
Meldet ein Licht (auch RGB/Dimmbar) an |
sendLightState(...) |
Sendet Licht-Zustand, Helligkeit und Farbe |
onLightCommand(...) |
Callback für Steuerbefehle aus Home Assistant |
announceNumber(...) |
Meldet eine Zahl-Eingabe an (z.B. Sollwert) |
sendNumberState(...) |
Sendet aktuellen Zahlenwert |
onNumberCommand(...) |
Callback für Werteingaben aus Home Assistant |
announceButton(...) |
Meldet einen Button (Taster) an |
onButtonPress(...) |
Callback für Button-Events aus Home Assistant |
announceSelect(...) |
Meldet ein Auswahlfeld (Dropdown) an |
sendSelectState(...) |
Sendet den aktuellen Auswahlwert |
onSelectCommand(...) |
Callback für Auswahlbefehle aus Home Assistant |
announceCover(...) |
Meldet ein Cover (Rollladen/Garagentor) an |
sendCoverState(...) |
Sendet die aktuelle Position/zustand des Covers |
onCoverCommand(...) |
Callback für Steuerbefehle aus Home Assistant |
| Befehl | Beschreibung | Beispiel |
|---|---|---|
| MQTT4HA(const char* name, const char* broker, [debug]) | Konstruktor: Objekt anlegen mit Gerätename, Broker, Debug | MQTT4HA ha("esp32_demo", "192.168.1.10", true); |
| begin([user], [pass], [port]) | Startet MQTT-Client (nachdem WLAN verbunden wurde!) | ha.begin("mqttuser", "mqttpass", 1883); |
| setDebug(bool) | Debug-Ausgaben an/aus schalten | ha.setDebug(true); |
| loop() | Muss regelmäßig in loop() laufen, hält MQTT-Verbindung | ha.loop(); |
| announceSensor(name, einheit, [device_class]) | Sensor für Home Assistant Discovery anmelden | ha.announceSensor("temp", "°C", "temperature"); |
| sendSensor(name, value) | Sensorwert veröffentlichen | ha.sendSensor("temp", 22.5); |
| announceBinarySensor(name, [device_class]) | Binary Sensor (z.B. Türkontakt) anmelden | ha.announceBinarySensor("door", "door"); |
| sendBinarySensor(name, state) | Binary Sensor-Zustand (ON/OFF) senden | ha.sendBinarySensor("door", true); |
| announceSwitch(name, [icon]) | Schalter (Switch) per Discovery anmelden | ha.announceSwitch("led", "mdi:lightbulb"); |
| sendSwitchState(name, on) | Schalter-Zustand an HA melden (ON/OFF) | ha.sendSwitchState("led", true); |
| onSwitchCommand(name, callback) | Callback für Schalter-Befehle aus Home Assistant registrieren | ha.onSwitchCommand("led", ledCallback); |
| announceLight(name, [dimmbar], [rgb]) | Licht (auch RGB/Dimmbar) anmelden | ha.announceLight("lampe", true, true); |
| sendLightState(name, on, brightness, r, g, b) | Licht steuern (Status, Helligkeit, Farbe) | ha.sendLightState("lampe", true, 128, 255, 0, 0); |
| onLightCommand(name, callback) | Callback für Licht-Befehle aus Home Assistant | ha.onLightCommand("lampe", lightCallback); |
| announceNumber(name, min, max, step, [einheit]) | Zahleneingabe (Number) anmelden | ha.announceNumber("solltemp", 10, 40, 0.5, "°C"); |
| sendNumberState(name, value) | Zahlenwert an HA senden | ha.sendNumberState("solltemp", 22.0); |
| onNumberCommand(name, callback) | Callback für Zahleneingaben | ha.onNumberCommand("solltemp", numberCallback); |
| announceButton(name, [icon]) | Button (Taster) anmelden | ha.announceButton("restart", "mdi:restart"); |
| onButtonPress(name, callback) | Callback für Button-Events | ha.onButtonPress("restart", restartCallback); |
| announceSelect(name, options) | Auswahlfeld (Dropdown) anmelden | ha.announceSelect("mode", {"Auto", "Eco"}); |
| sendSelectState(name, value) | Auswahlwert an HA senden | ha.sendSelectState("mode", "Auto"); |
| onSelectCommand(name, callback) | Callback für Auswahlbefehle | ha.onSelectCommand("mode", modeCallback); |
| announceCover(name) | Rollladen/Tor (Cover) anmelden | ha.announceCover("garage"); |
| sendCoverState(name, position, [state]) | Cover-Status an HA senden | ha.sendCoverState("garage", "open"); |
| onCoverCommand(name, callback) | Callback für Cover-Befehle | ha.onCoverCommand("garage", coverCallback); |
| Anwendung | Schritt | Code-Snippet | Kommentar |
|---|---|---|---|
| Gerät bei Home Assistant anmelden | Objekt anlegen | MQTT4HA ha("esp32_demo", "192.168.1.10"); |
Name + Broker-IP |
| WLAN verbinden | WiFi.begin("SSID", "PASS"); while(WiFi.status()!=WL_CONNECTED) delay(100); |
Wie gewohnt im Sketch | |
| MQTT starten | ha.begin("user", "pass"); |
Port optional | |
| Entität anmelden | ha.announceSensor("temp", "°C", "temperature"); |
Automatisch in HA sichtbar | |
| Wert senden | ha.sendSensor("temp", 22.5); |
Wert an HA schicken | |
| loop() aufrufen | ha.loop(); |
Verbindung & Kommandos halten |
| Nur MQTT-Nachricht (ohne Home Assistant) | Schritt | Code-Snippet | Kommentar |
|---|---|---|---|
| Objekt anlegen | MQTT4HA ha("demo", "192.168.1.10"); |
Name und Broker | |
| WLAN verbinden | WiFi.begin("SSID", "PASS"); ... |
||
| MQTT starten | ha.begin("user", "pass"); |
||
| Beliebige Nachricht senden | ha.client.publish("mein/topic", "Dein Text!"); |
Direkt mit client-Objekt, beliebiges Topic | |
| loop() aufrufen | ha.loop(); |
Verbindung halten |
MQTT4HA ha("esp32_demo", "192.168.1.10");
WiFi.begin("SSID", "PASS");
while (WiFi.status() != WL_CONNECTED) delay(500);
ha.begin("user", "pass");
ha.announceSensor("temp", "°C", "temperature");
ha.sendSensor("temp", 22.5);
ha.loop();MQTT4HA ha("demo", "192.168.1.10");
WiFi.begin("SSID", "PASS");
while (WiFi.status() != WL_CONNECTED) delay(500);
ha.begin("user", "pass");
ha.client.publish("mein/thema", "Nur MQTT – kein Home Assistant");
ha.loop();