nach langer Zeit wollte ich mich mal wieder der Hausautomation widmen und einen ESP32 Devkit mit MQTT an Openhab 3 anbinden.
In OH nutze ich das HomeAssistant MQTT Component thing. Funktioniert auch soweit und sogar mit auto discovery.
Mir ist dabei aufgefallen das OH nicht merkt wenn das Gerät Offline geht. Zu dem Thema bin ich dann auf das Last will topic gestoßen.
Hier ist jetzt mein Problem...irgendwie steh ich hier aufm Schlauch. Wie verwende ich das jetzt? Wie ich das verstanden habe muss ich doch eigentlich nur auf einen Topic (z.B. home/sensor/status) ein "online" schicken. Dieser wird dann beim disconnecten vom broker wieder auf "offline" gesetzt, richtig?
Für das Last will topic gibt es keine Eingabe möglichkeit im HomeAssistant MQTT thing, im generic mqtt thing geht das aber. Geht das überhaupt da?
Evtl. hat ja schon einer das gleiche Problem gehabt.
Hier noch Codeschnipsel aus dem ESP32 zur übersicht:
PubSubClient wird für MQTT genutzt
Code: Alles auswählen
#include <PubSubClient.h>
String stateTopic = "home/plants/1/state";
Code: Alles auswählen
DynamicJsonDocument doc(1024);
char buffer[256];
doc["humidity"] = humidity;
doc["temperature"] = temperature;
size_t n = serializeJson(doc, buffer);
bool published = client.publish(stateTopic.c_str(), buffer, n);
Code: Alles auswählen
void sendMQTTTemperatureDiscoveryMsg() {
int sensorNumber = 1;
String stateTopic = "home/plants/" + String(sensorNumber) + "/state";
String discoveryTopic = "homeassistant/sensor/plant_sensor_" + String(sensorNumber) + "/temperature/config";
DynamicJsonDocument doc(1024);
char buffer[256];
doc["name"] = "Gewächshaus Temperatur 1";
doc["stat_t"] = stateTopic;
doc["unit_of_meas"] = "°C";
doc["dev_cla"] = "temperature";
doc["frc_upd"] = true;
doc["val_tpl"] = "{{ value_json.temperature|default(0) }}";
size_t n = serializeJson(doc, buffer);
client.publish(discoveryTopic.c_str(), buffer, n);
}