Auf MQTT Daten zugreifen / auslesen

Hallo liebes Forum,
ich habe hier wohl ein (zu?) großes Projekt gestartet.
Ich möchte über einen ESP32-C6 mit angeschlossenem Lagesensor die X- und Y- Position an HomeAssistant übertragen. Nach meinem Verständnis soll das am einfachsten über MQTT gehen. Also habe ich das versucht, erhalte aber überhaupt keine Daten über MQTT bzw. weiß ich es nicht und sehe keine Werte. Ich habe hierzu unterschiedliche Lösungsansätze versucht.

  1. Die im ESP zur Verfügung gestellten Werte versucht im HomeAssistant über den MQTT Broker einzubinden. → Hier sehe ich keine erwarteten Daten.
  2. Über Node-Red einen MQTT Broker eingerichet. Hier wird “verbunden” angezeigt, sehe aber auch hier nicht die erwarteten Daten.
  3. Ich habe einen ESP32 basierten Stromzähler (Tasmota - hierzu gibt es ein fertiges Plug-In), der auch funktioniert innerhalb HomeAssistant. Hier schaffe ich es auch nicht über Node-Red über den MQTT-Broker Daten zu lesen.

Ich weiß leider nicht, an welcher Stelle es wirklich hakt und habe auch keine Idee wie ich da ran gehen soll, weswegen ich hier im Forum schreibe und Euch um Eure HIlfe bitte.
Vielen Dank vorab!

Moin

So ganz genau verstehe ich nicht was Du da jetzt wie versucht hast, oder was Du genau vor hast, oder wo jetzt genau das Problem liegt.

Vorab: Ich selber habe von Note-Red keine Ahnung, aber was heißt unter Punkt 2 das Du “über” Note-Red einen MQTT Broker eingerichtet hast? :thinking: Unter einem MQTT Broker versteht man üblicherweise einen MQTT Server der irgendwo läuft. Z.B. unter HA. Was ja bei Dir - lt. Punkt 1 - wohl auch der Fall ist.

Bei Punkt 3 schreibst Du dann das Du über Note-Red Daten von dem MQTT Broker lesen willst und das wohl von einem Tasmota IR Lesekopf.

Daher vielleicht mal eher allgemein und ohne das Thema Note Red: Wenn man einen MQTT Broker (Server) laufen hat und HA Daten von diesem empfangen soll, nutzt man unter HA dafür eigentlich die HA MQTT Integration.

Damit die Daten dann passend bei dem MQTT Broker und der HA MQTT Integration ankommen und per MQTT discovery erkannt werden, muss das bei dem jeweiligen Gerät passend eingerichtet werden.

Weil Du ja einen Tasmota Lesekopf erwähnt hast: Bei dem hättest Du zwei unterschiedliche Möglichkeiten wie und wo dieser von HA erkannt wird. Entweder per HA MQTT Integration oder direkt per HA Tasmota Integration. Dazu gibt es bei Tasmota die SetOption19 Option:

SetOption19 Tasmota discovery protocol used in Home Assistant Tasmota integration
0 = enable Tasmota discovery (default)
1 = use deprecated MQTT discovery (only with #define USE_HOME_ASSISTANT, does not exist in release binaries)

Ob überhaupt und welche Daten bei einem MQTT Broker (Server) ankommen, kann man sich z.B. mit dem MQTT Explorer anzeigen lassen.

Soweit eher allgemein. Wenn/Falls es Dir jetzt darum geht mit Note-Red irgendwelche MQTT Daten zu verwenden und Deine Fragen in die Richtung gehen, bin ich kompl. raus. :slightly_smiling_face:

VG Jim

Hallo Jim,
erstmal vielen Dank für Deine Antwort.
Ich habe mich bestimmt unverständlich ausgedrückt. Eigentlich möchte ich die Daten von einem ESP32 Controller auslesen, aber das klappt nicht.
Dann habe ich den Tasmota, der wie Du richtig geschrieben hast, über eine eigenständige Integration auch super läuft. Da der Tasmota aber AUCH MQTT unterstützt wollte ich damit erstmal prüfen//ausprobieren ob ich von dem Stromzähler über MQTT die Daten empfangen kann (für mich einfachste Lösung). Auf der Konfig. Seite des Tasmota wird nämlich auch aller Status über MQTT zur Verfügung gestellt. Soweit warum ich den Tasmota ins Spiel bringe.
Zu MQTT: Ich habe wie Du ebenfalls geschrieben hast die Integration “Mosquitto MQTT” Broker installiert und “versucht” zu konfigurieren. Die Dokumentation was Zeilen in der configuration.yaml betrifft widersprüchlich. Angeblich soll die gar nicht notwendig sein sonder nur die Konfiguration des Brokers. Hier sind meiner Meinung nach aber nur wenige Einstellungen möglich. Und wenn ich die des Tasmota eingebe, sehe ich eben keinerlei Prozessdaten des Tasmotas.
Deswegen habe ich es zusätzlich über Node-Red versucht. Hier kommt zumindest eine Meldung “verbunden”, sehe aber eben auch keine Prozessdaten.
Ich verstehe, dass ich von dem Gerät von dem ich Daten empfangen soll IP, Port, User, PW und ein Topic eingeben muss. Wie genau ist das aber mit dem Entitätenname?
Ich werde jetzt mal den MQTT Exlorer installieren…

Den Punkt würde ich direkt ohne MQTT oder node-red abfrühstücken, vorausgesetzt ESPHome unterstützt deinen Lagesensor.
Musst mal auf der esphome.io website schauen, falls unterstützt sollte dort auch zumindest mal rudimentärer Code stehen wie der Sensor in ESPhome eingebunden wird, der Rest ist ja mehr oder weniger ein Selbstgänger.
Und dann hast du auch die Entitäten in Home Assistant ohne Zwischenschritt.

MQTT würde ich nur nutzen wenn du die Daten vom Lagesensor auch noch anderweitig benötigst also abseits von HA. Dann ist das klar die bessere Lösung. Denn sonst müsste du die von ESPhome gelieferten Entitäten ja doch wieder mittels MQTT publishen.

Falls Du damit das WebGUI von Tasmota meinen solltest. Ja dort kann und muss man die Daten des MQTT Brokers eintragen. Bsp.


Bei mir ist der MQTT Broker direkt unter HA installiert und zwar mit dem HA MQTT Broker Addon und die IP von dem HA Host ist halt die 192.168.1.61. Der Port ist - sofern man den nicht geändert haben sollte - immer der Port 1883. Bei User und Password muss dann der Username und dessen Passwort eingetragen werden den man unter HA für den MQTT Broker eingerichtet hat.

Über die bereits genannte SetOption19 Option kann man dann bei Tasmota noch einrichten ob Tasmota das Tasmota discovery (HA Tasmota Integration) oder das MQTT discovery (HA MQTT Integration) nutzen soll.

Du musst vorher natürlich noch das MQTT Broker Addon unter HA installieren, sofern Du nicht irgendwo anders bereits einem MQTT Broker (Server) laufen haben solltest.


Wie man das macht bzw. einrichtet ist in der Doku ja beschrieben.

Ich weiß zwar nicht welche Doku Du meinst, aber für den MQTT Broker braucht es bei einer Standardinstallation keinerlei Einträge in der HA configuration.yaml. Das war nur früher einmal notwendig.

Was dann irgendwelche Dinge bzgl. Node-Red betrifft bin ich halt raus. :slightly_smiling_face:

VG Jim

Also was die Configuration des Tasmota angeht, läuft es denke ich. Ich habe zumindest schon mal einen Teilerfolg, ich sehe Prozessdaten in dem MQTT Explorer Tool:


Wie ich nun die Prozessdaten wiederum in eine Entität bekomme, wäre der nächste Schritt.
Ich habe eine Entität “Strom” angelegt, die sehe ich aber noch nicht in dem MQTT-Explorer. Innerhalb HA ist diese auch “unbekannt”. Habe diese als “Sensor” hinzugefügt.

Wo hast Du eine Entität Strom angelegt? :thinking: Bei Tasmota gibt es keine “Entitäten” und bei MQTT gibt es Topics. Also entweder hast Du ein grundsätzliches Verständnisproblem von dem Ablauf, sprich von wo nach wo MQTT Daten laufen, oder ich verstehe nicht was Du meinst. :laughing:

Edit: Falls Du bei Tasmota per Command Mode die SetOption19 1 Option gesetzt hast, damit Tasmota die MQTT Daten an die HA MQTT Integration sendet (siehe meinen Text oben), dann sollten die MQTT Daten dort auch als Sensoren und somit Entitäten auftauchen.

VG Jim

Ja, laut dem Link sollte mein Espressif ESP32 unterstützt sein. Was muss ich in meinem Arduino IDE Programm an Code hinzufügen, dass das sich Add-On mit dem ESP “verbindet”?

Dann liegt das “Problem” bei mir!
Ich habe den Broker als MQTT Gerät sowie den Tasmota. Ja, der liefert die Prozessdaten als Topic. In dem MQTT Explorer Screenshot sieht man, dass er die Prozessdaten als ein String überträgt. Ich möchte aber ja die Prozessdaten einzeln betrachten. Wie bekomme ich die “aufgedröselt”? Und in dem MQTT Broker innerhalb HA legt er dafür Entitäten an.

Ich nehme mal an das es immer noch um den Tasmota IR Lesekopf geht. Diesen lasse ich nicht per HA MQTT discovery und somit per HA MQTT Integration erkennen, sondern per HA Tasmota discovery und somit per HA Tasmota Integration. Das “aufdröseln” erfolgt dann ganz automatisch.

Mein Tasmota IR Lesekopf für einen Iskra Stromzähler:


und das wird dann unter der HA Tasmota Integration für config und sensors so dargestellt.

Oder noch ein anderes Beispiel mit einer Tasmota Steckdose.


Ich denke nicht das die HA MQTT Integration da etwas anders macht, sprich falls über Tasmota Sensoren Daten an den MQTT Broker senden, die dann von dort wieder per HA MQTT Integration abgerufen werden, sollten für diese Sensoren dann auch die entsprechenden Entitäten bei der HA MQTT Integration auftauchen.

Anm.: Ich selber habe aber das letzte Mal vor Jahren mal ein Tasmota Gerät per SetOption19 1 Option genutzt, daher weiß ich nicht wie das aktuell aussieht.

Mehr kann ich Dir dazu dann leider auch nicht sagen.

Edit: Noch ein Nachtrag. :slightly_smiling_face: Das

sehe ich eigentlich auch so.

Du musst erst einmal das “Grundgerüst” für ESPHome auf den ESP32 flashen, was Du online per WebGUI machen kannst: https://web.esphome.io/
Anschließend musst Du Dir dann per ESPHome Addon unter HA einen für Deinen Lagesensor passenden YAML-Code erstellen - in der Art von

esphome:
  name: esphome-test
esp32:
  board: esp32dev
  framework:
    type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
  encryption:
    key: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
ota:
  password: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Test Fallback Hotspot"
    password: "XXXXXXXXXXXXXXXX"
Usw.

und diesen dann darüber auf den ESP32 flashen.

Ein paar ESPHome Grundlagen:

Anm.: Der Artikel ist ja schon älter. Kann gut sein das darin die ein oder andere Info ggf. nicht mehr passt, da sich bei ESPHome eine ganze Menge getan hat. Aber in I-Net werden sich sicherlich auch aktuellere Infos zu dem Thema finden lassen.

VG Jim

So, Video ist angesehen.
Kann ich mit diesem ESP-Home trotzdem auch komplexe Programme im ESP ausführen? Am ESP ist ein MPU6050 angeschlossen. Damit ich nutzbare Werte des Sensors auslesen kann, muss bspw. ein Offset berechnet werden sowie ein Nullabgleich durchgeführt werden. Auch soll auf dem Display was grafisch angezeigt werden. Und es soll im ESP laufen, um auch ohne HA autark laufen zu können.

wird also unterstützt
wenn du dir das durchliest sieht es knapp aus was den Code angeht, logisch, ist halt ESPhome und nicht Arduwürgo :slight_smile: Ok ein Spass, nutz ich auch noch teilweise.

Wichtig ist bei ESPhome auf der Seite immer folgender Satz

" All options from Sensor."
Womit die Frage was du alles machen kannst beantwortet sein sollte.

Display musst du ebenfalls schauen welche Displays von esphome.io unterstützt werden.

Ich habe mittlerweile alle Dinge die ich früher auf ESPs in ArdunoIDE umgesetzt hatte auf ESPhome umgestellt, wenn man sich aufgrund von HA ohnehin mit YAML beschäftigt ist das sehr einfach.

Und du kannst wie in HA bei YAML üblich auch auf der ESPhome Seite sehr viel mit “includes” arbeiten.
Hast du also 3 ESPs mit Lagesensoren dann schreibst du die Codezeilen dafür natürlich nicht 3 mal sondern machst dir eine kleine YAML mit den entsprechenden Zeilen und lädst die sozusagen dazu, wobei es dann halt auch egal ist ob es immer ein ESP32 c6 ist oder vielleicht ein ESP8266, denn die Sensor Implementierung wird deshalb ja nicht anders.

Und ja ein ESP läuft immer komplett autark … er sendet was, und HA kann es empfangen wenn es den ESP erkannt hat. Es stört den ESP aber schlicht gar nicht wenn das HA gerade verurlaubt ist.

EDIT:

Wenn du in HA mit YAML umgehen kannst ist ESPhome ein Selbstgänger und genauso umgekehrt. Sprich auch in ESPhome kannst du Codeteile für eine Mehrfachverwendung auslagern und über includes wieder einbinden wie in HA auch. Sprich einmal mit YAML auseinandergesetzt und schon für 2 Lösungen (ESPHome und HA) was gelernt.

Einen Vorteil von Arduino kenne ich aber: :slightly_smiling_face: Man wird nicht jeden Monat und dann teils auch noch mehrfach damit “genervt” das man ein Update installieren sollte/könnte. :rofl:

Muss man natürlich dann nicht unbedingt machen :laughing:



aber falls man es macht muss man sich halt jedes Mal - wie auch bei HA Core Updates - damit befassen welche Änderungen es gab und ob diese ggf. irgendwelche Auswirkungen auf die genutzen ESP-Geräte haben.

VG Jim

Deshalb nutze ich ESPhome seit über 2 Jahre per commandline. Diese Updatemanie war ein Grund, der andere das ich nicht gerne in der limitierten Oberfläche von HA anfange an Code zu schrauben. Das mach ich dann doch lieber auf einem erwachsenen Rechner. Dazu kommt noch das ich für ein initiales flashen eines ESP über USB ja mit dem ESP zum HA Rechner laufen müsste denn der steht natürlich nicht in meinem Büro.

ich find esphome per commandline wesentlich sinnvoller, denn wenn man an code bastelt nutzt man ohnehin die Tastatur und nicht die Maus.

Und ob ich ein pip install – upgrade esphome mache entscheide ich halt, meistens so 2x pro Jahr oder halt wenn ein Sensor unterstützt wird den ich dringend benötige.

Stimmt deshalb arbeitet man auch in ESPhome mit sehr sehr vielen includes, damit man die Anpassungen für 20 ESPs nicht 20x machen muss sondern 1x :slight_smile: Sonst hat man auch unsäglich viel redundanten Code.

Ein passendes Wort. :laughing: Wie man bei dem zweiten Screenshot ja sieht läuft bei mir auf einem ESP noch eine Firmware aus 2023.3. und jeden Monat gibt es halt die Hinweise das es für ESPHome und den ESP eine neue Version gibt. Selbst wenn man dann diese Updates per “Überspringen” übergeht kann es sein das nach dem nächsten Host-Reboot der Hinweis trotzdem erneut kommt.

Bei den betreffenden ESP handelt es sich halt um einen Dongle der nicht einfach per WLAN geflasht werden kann, sondern der vorher erst per Brücke in den Flash-Mode versetzt werden müsste. D.h. seit März 2023 hätte ich diese Prozedur dann schon geschätzt 20 x durchführen müssen. :rofl: Nein danke - so lange das Teil mit der alten ESPHome Version 2024.5.5 und der Firmware 2023.3.0 funktioniert werde ich den Teufel tun und daran auch nichts ändern. :slightly_smiling_face:

Grundsätzlich ist ESPHome schon eine feine Sache und der Vorteil ist der, was Du ja auch schon erwähnt hast, das man halt YAML eh bei HA nutzt. Aber diese “Updatemanie” nervt mich schon ein wenig. Aber ok, auch bei HA selber finde ich die monatlichen Updates nicht gut und ich würde mir einen anderen Update-Prozess wünschen, aber mit dieser Meinung stehe ich halt ziemlich alleine da :laughing: und auch damit kann ich leben. :slightly_smiling_face:

VG Jim

Moin,
so, ich habe mich mit dem ESP-Home ETWAS auseinander gesetzt. Wenn ich das richtig verstehe, dann schreibe ich den Code in eine “ESP” Oberfläche, die generiert eine für den ESP verständliche “Firmware inklusive Programm/Script”?
Ich möchte einen MPU6050 nutzen, der als solches auch von ESP-Home unterstützt wird. Jetzt habe ich gesehen, dass man den Sensor auch voll nutzen kann. Dazu sind irgendwelche .cpp Dateien verfügbar. Ich dachte, das ESP-Home wird über .yaml programmiert. Ich bin trotz mehrfachem Anlauf gerade verwirrt…
Was ich möchte:
1 x ESP32-C6 mit integriertem Display mit einem MPU6050 Lagesensor über I2C anschließen. Zusätzlich soll es einen Hard- und Software- Taster geben, der die aktuelle Position “0” um ihn flexibel einsetzen zu können.
X- und Y-Position soll zum einen auf dem integrierten Display angezeigt werden und in Home Assistant irgendwie dargestellt werden können.
0-Abgleich soll über einen Button im Display oder HA oder einen Hardwaretaster an einem GPIO gesetzt werden können. D.h. das Programm im ESP32 soll dies im Programm machen. Eigentlich keine schwere Aufgabe und der Code ist in Arduino IDE geschrieben. Mein Problem ist halt, die Daten ins HA zu bekommen bzw. das integrierte Display überhaupt initialisiert zu bekommen.
(
.jaml kann angeblich keine Rechenoperationen, weswegen ich mich frage, wie das über ESP-Home realisiert werden kann)

ESPHome und der ESP32 C6 ist eine - wie soll ich sagen - schwierige Geschichte. Ich hatte mir mal zwei zum Herumspielen besorgt, aber sie anfangs über ESPHome überhaupt nicht ans Laufen bekommen. Mittlerweile geht’s (nach vielen Umwegen, die mehr schlecht als recht funktionierten) unter ESPHome 2025.5.1 mit meinem N8 Modell so:

esphome:
  name: c6-test
  friendly_name: C6 Test


esp32:
  board: esp32-c6-devkitc-1
  flash_size: 8MB
  framework:
    type: esp-idf
    version: "5.4.0"
    platform_version: espressif32 @ 6.10.0

Er läuft (im Moment) auch nur als Bluetooth Proxy, funktioniert aber wenigstens.

Inwieweit sich meiner von deinem Modell mit Display unterscheidet, weiß ich nciht. Du musst auf jeden Fall die Flash-Größe anpassen, wenn du eine andere hast.

Wenn du in Sachen Arduino IDE fit bist und ohnehin fertigen Code für diese Kombination C6 mit Display + MPU6050 hast …

Dann würde ich eher dort MQTT einbauen und die relevanten Werte auf nen MQTT Broker publishen.
Von dem kannst du dann auch gleich den Zustand einen Buttons in HA abholen.

Garantiert einfacher wenn du dich mit der ArduinoIDE und dem cpp Code den man dort benutzt auskennst.

Moin

Das ist ja sein ursprüngliches Problem, sprich das das bei ihm nicht funktioniert, bzw. er es scheinbar nicht hinbekommt. Warum auch immer. :slightly_smiling_face:

Ich selber kann zu dieser Kombination

leider gar nichts sagen und falls das zutreffen sollte

dann würde ich auch diesen Weg

wählen, eben weil das dann vermutlich leichter wäre als sich jetzt noch in ESPHome einzuarbeiten.

Was das Thema MQTT betrifft habe ich weiter oben ja schon versucht den grundsätzlichen Ablauf dabei zu klären und mehr kann ich dazu dann auch nicht beitragen. Bei den paar ESP32 und ESP8266 die ich hier in den letzten Jahren mal mit Arduno IDE genutzt habe gab es mit MQTT eigentlich keine Probleme, sprich die MQTT Daten sind dann auch bei HA angekommen.

VG Jim

1 „Gefällt mir“