Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. ESPHome ESP32-S3 mit MQTT verliert Verbindung

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    ESPHome ESP32-S3 mit MQTT verliert Verbindung

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      MCU @wibear last edited by

      @wibear sagte in ESPHome ESP32-S3 mit MQTT verliert Verbindung:

      Ersetze mqtt_subscribe probeweise durch on_message
      und anschließendes LOG

      Das ist eine sehr gute Nachricht: Dein ESP32-S3 funktioniert jetzt stabil mit den mqtt_subscribe-Textsensoren, nachdem du den ESPHome-Code erfolgreich neu kompiliert und geflasht hast. Du musst on_message offenbar nicht als Workaround einsetzen – die ursprüngliche mqtt_subscribe:-Konfiguration läuft jetzt fehlerfrei.

      🔎 Was ist passiert?
      Dein aktueller Log zeigt:

      Verbindung bleibt stabil

      Alle text_sensor vom Typ mqtt_subscribe empfangen korrekt ihre Werte

      Keine Abbrüche oder MQTT-Fehler

      Sogar die boot loop counter-Logik wurde erfolgreich zurückgesetzt → kein Crash oder Absturz mehr

      🧠 Vermutliche Ursache vorher
      Basierend auf deinem vorherigen Problemverlauf war wahrscheinlich einer dieser Punkte ausschlaggebend:

      Falsche oder beschädigte MQTT-Nachricht (z. B. nicht lesbarer Header bei retained topics)

      Framework oder ESPHome-Version war nicht 100 % kompatibel

      Früherer mqtt_subscribe-Sensor war nicht korrekt definiert (z. B. Tippfehler oder ungültige Zeichen)

      ✅ Empfehlung
      Da es jetzt läuft:

      Lass mqtt_subscribe aktiv – du brauchst on_message nicht.

      Falls du einzelne Topics manuell steuerst (z. B. aus ioBroker), achte immer darauf, nur gültige Textwerte (Strings) zu veröffentlichen.

      🔧 Bonus: Retained-Messages prüfen
      Wenn du wieder auf Probleme stößt: Nutze MQTT Explorer oder einen MQTT-Client, um retained Topics zu prüfen und bei Bedarf zu löschen – ungültige Daten bleiben sonst dauerhaft im Broker.

      1 Reply Last reply Reply Quote 0
      • W
        wibear @MCU last edited by

        @mcu sagte in ESPHome ESP32-S3 mit MQTT verliert Verbindung:

        Bitte als Code </> senden

        esphome:
          name: displaytft
          friendly_name: DisplayTFT
        
        esp32:
          board: esp32-s3-devkitc-1
          framework:
            type: esp-idf
        
        # Enable logging
        logger:
        
        # Enable Home Assistant API
        api:
          encryption:
            key: "oLqhzrUCfhqRKZXIH6+wajtLeBwaVt03e/YAfM8woSU="
        
        ota:
          - platform: esphome
            password: "0cb05a749c68876ca294cc4b645222ca"
        
        wifi:
          ssid: !secret wifi_ssid
          password: !secret wifi_password
        
        # Enable fallback hotspot (captive portal) in case wifi connection fails
          ap:
            ssid: "Displaytft Fallback Hotspot"
            password: "O4s50tPm0qCc"
        
        captive_portal:
            
        
        # Enable MQTT
        mqtt:
            discovery: true
            broker: 192.168.178.10
            port: 1883
            username: !secret mqtt_username
            password: !secret mqtt_password
            client_id: DisplayTFT
            topic_prefix: esphome
           
        
        # Subscribe data
        sensor:  
         - platform: mqtt
           name: Solar_Einspeisung_Jetzt
           state_topic: esphome/DisplayTFT/Solar/Einspeisung_Jetzt
        
        
        1 Reply Last reply Reply Quote 0
        • W
          wibear @MCU last edited by

          @mcu
          In meinem vorherigen Post habe ich die topics überprüft: sie scheinen alle die Daten zu liefern.
          Debug in MQTT habe ich jetzt aktiviert.

          @mcu sagte in ESPHome ESP32-S3 mit MQTT verliert Verbindung:

          Arduino verwendet eine robustere MQTT-Client-Bibliothek für einfache Fälle.

          Da war doch ursprünglich Arduino. Ich habe auf Deinen Vorschlag hin, das mit ESP-IDF versucht: keine Änderung.

          M 1 Reply Last reply Reply Quote 0
          • W
            wibear @Homoran last edited by

            @homoran sagte in ESPHome ESP32-S3 mit MQTT verliert Verbindung:

            eht es um ESP Home = offTopic - microcontroller oder um den ESP-Home Adapter?

            Klar, es geht um ESP-Home Adapter...

            1 Reply Last reply Reply Quote 0
            • M
              MCU @wibear last edited by MCU

              @wibear Es sind Antworten von ChatGPT, da kann man nur probieren.

              Du nutzt in deinem aktuellen ESPHome YAML folgenden Block:

              sensor:  
               - platform: mqtt
                 name: Solar_Einspeisung_Jetzt
                 state_topic: esphome/DisplayTFT/Solar/Einspeisung_Jetzt
              

              Das sieht fast korrekt aus – aber ein wichtiger Hinweis:

              ⚠️ mqtt als sensor-Plattform wird von ESPHome nicht unterstützt
              ESPHome unterstützt keine direkte Verwendung von:

              platform: mqtt
              

              für einen Sensor. Das ist ein Feature von Home Assistant, nicht ESPHome.

              ✅ Was stattdessen funktioniert in ESPHome
              Du musst den mqtt_subscribe-Ansatz nutzen:

              📌 Beispiel für einen mqtt_subscribe Sensor als text_sensor:

              text_sensor:
                - platform: mqtt_subscribe
                  id: solar_einspeisung_jetzt
                  name: "Solar Einspeisung Jetzt"
                  topic: esphome/DisplayTFT/Solar/Einspeisung_Jetzt
              

              Falls du numerische Werte brauchst, kannst du zusätzlich einen internen Sensor anlegen, der den Text in eine Zahl wandelt (z. B. über einen Lambda-Ausdruck).

              🧠 Alternativen (nur in Sonderfällen nötig)
              Wenn du wirklich aus ESPHome heraus jede beliebige MQTT-Nachricht abfangen und verarbeiten willst, kannst du on_message mit mqtt.on_message verwenden (fortgeschritten):

              mqtt:
                on_message:
                  - topic: esphome/DisplayTFT/Solar/Einspeisung_Jetzt
                    then:
                      - lambda: |-
                          ESP_LOGD("mqtt", "Nachricht: %s", x.c_str());
              

              Aber: Damit kannst du nicht direkt einen Sensor erzeugen, sondern musst die Werte selbst puffern/verarbeiten.

              ✅ Empfehlung für dich
              Wenn du die Daten wie üblich über MQTT übergibst und im Display zeigen willst:

              Nutze mqtt_subscribe (wie oben)

              Bleibe bei text_sensor, es sei denn, du brauchst einen sensor mit float-Werten (dann: Lambda wandeln)

              Lass framework: esp-idf aktiv, wenn jetzt alles stabil läuft


              Komplettbeispiel von ChatGPT

              esphome:
                name: displaytft
                friendly_name: DisplayTFT
              
              esp32:
                board: esp32-s3-devkitc-1
                framework:
                  type: esp-idf
              
              # Enable logging
              logger:
              
              # Enable Home Assistant API
              api:
                encryption:
                  key: "oLqhzrUCfhqRKZXIH6+wajtLeBwaVt03e/YAfM8woSU="
              
              ota:
                password: "0cb05a749c68876ca294cc4b645222ca"
              
              wifi:
                ssid: !secret wifi_ssid
                password: !secret wifi_password
                ap:
                  ssid: "Displaytft Fallback Hotspot"
                  password: "O4s50tPm0qCc"
              
              captive_portal:
              
              mqtt:
                discovery: true
                broker: 192.168.178.10
                port: 1883
                username: !secret mqtt_username
                password: !secret mqtt_password
                client_id: DisplayTFT
                topic_prefix: esphome
              
              # 🔹 Schritt 1: Text-Sensor, empfängt MQTT-String
              text_sensor:
                - platform: mqtt_subscribe
                  id: solar_einspeisung_jetzt_text
                  topic: esphome/DisplayTFT/Solar/Einspeisung_Jetzt
                  internal: true
                  on_value:
                    then:
                      - lambda: |-
                          // 🔹 Schritt 2: Text in float umwandeln und setzen
                          float val = atof(x.c_str());
                          id(solar_einspeisung_jetzt_sensor).publish_state(val);
              
              # 🔹 Schritt 3: Eigener float-Sensor, der aus Text gespeist wird
              sensor:
                - platform: template
                  id: solar_einspeisung_jetzt_sensor
                  name: "Solar Einspeisung Jetzt"
                  unit_of_measurement: "W"
                  accuracy_decimals: 1
              
              

              Vielleicht kann @ticaki oder @Dutchman helfen?

              W 2 Replies Last reply Reply Quote 0
              • W
                wibear @MCU last edited by

                @mcu sagte in ESPHome ESP32-S3 mit MQTT verliert Verbindung:

                Lass framework: esp-idf aktiv, wenn jetzt alles stabil läuft

                Das Problem ist, dass es eine kurze Weile läuft und danach nicht mehr mit unzähligen Warnmeldungen:

                retries.jpg

                Ich überlege es mir, eine 2. MQTT Instanz extra dafür zu benutzen?

                Auf jeden Fall vielen Dank für Deine Unterstützung und einen schönen Sonnabend.

                M 1 Reply Last reply Reply Quote 0
                • M
                  MCU @wibear last edited by

                  @wibear sagte in ESPHome ESP32-S3 mit MQTT verliert Verbindung:

                  Das Problem ist, dass es eine kurze Weile läuft und danach nicht mehr mit unzähligen Warnmeldungen:

                  Danke für den Hinweis – wenn der ESP nach kurzer Laufzeit unzählige Warnungen ausgibt und die MQTT-Verarbeitung stoppt, liegt sehr wahrscheinlich ein Speicher- oder Ressourcenproblem vor, vor allem bei vielen mqtt_subscribe-Topics und gleichzeitiger Verarbeitung über Lambda-Funktionen.

                  🧠 Mögliche Ursachen für dein Problem:

                  1. Zu viele MQTT-Subscriptions
                    ESPHome (besonders auf dem ESP32-S3 mit esp-idf) ist bei vielen mqtt_subscribe-Textsensoren empfindlich, insbesondere wenn:

                  Jeder Sensor in kurzer Zeit aktualisiert wird

                  Viele Topics gleichzeitig abonniert sind

                  Jede Nachricht per lambda ausgewertet wird (wie bei der Float-Umwandlung)

                  → Das kann den Task-Speicher oder den MQTT-Handler überlasten.

                  1. Fehlende Speicherfreigabe / Buffer-Überlauf
                    Der on_value:-Lambda legt ggf. bei jeder MQTT-Nachricht einen Float-Wert an, ohne Pufferung oder Zeitabstand → das kann zu einer Flut von Speicheroperationen führen, besonders bei vielen Topics mit hoher Update-Rate.

                  ✅ Lösungsvorschläge (step-by-step)
                  ✅ 1. Begrenze Anzahl gleichzeitig aktiver mqtt_subscribe-Sensoren
                  Teste probeweise nur mit 2 oder 3 Topics, z. B.:

                  text_sensor:
                    - platform: mqtt_subscribe
                      id: test_1
                      topic: esphome/DisplayTFT/Test1
                      on_value:
                        then:
                          - lambda: |-
                              id(sensor_test_1).publish_state(atof(x.c_str()));
                  

                  ✅ 2. Füge Logging bei jedem Empfang hinzu (nur Debugzwecke)

                  logger:
                    level: DEBUG
                  

                  Oder in der Lambda:

                  cpp

                  ESP_LOGD("mqtt", "MQTT-Wert empfangen: %s", x.c_str());
                  

                  Damit siehst du, ob Nachrichten zu oft oder zu schnell kommen.

                  ✅ 3. Füge einen Filter hinzu, um nur Werte zu publizieren, wenn sie sich wirklich ändern

                  on_value:
                    then:
                      - lambda: |-
                          float val = atof(x.c_str());
                          if (fabs(val - id(sensor_test_1).state) > 0.1) {
                            id(sensor_test_1).publish_state(val);
                          }
                  

                  Das reduziert die Anzahl der publish_state()-Aufrufe und entlastet die CPU.

                  ✅ 4. Nutze dedizierte text_sensor nur für Strings, und fasse Daten ggf. zusammen
                  Wenn du z. B. mehrere Werte gleichzeitig senden kannst (z. B. JSON wie {"solar": 82.5, "netz": 71.2}), kannst du:

                  einen einzigen mqtt_subscribe verwenden

                  und die Werte intern verteilen

                  💡 Alternativ (stabilster Weg): on_message: zentral verwenden
                  Anstelle von 15× mqtt_subscribe, kannst du mit mqtt.on_message: alle Nachrichten zentral verarbeiten:

                  mqtt:
                    on_message:
                      - topic: esphome/DisplayTFT/Solar/Einspeisung_Jetzt
                        then:
                          - lambda: |-
                              float val = atof(x.c_str());
                              id(sensor_solar).publish_state(val);
                  
                  sensor:
                    - platform: template
                      id: sensor_solar
                      name: "Solar Einspeisung Jetzt"
                  

                  → Spart massiv Ressourcen und ist deutlich robuster.

                  📌 Fazit
                  Wenn du viele MQTT-Werte brauchst und es stabil bleiben soll:

                  Verwende lieber mqtt.on_message zentral statt viele mqtt_subscribe.

                  Begrenze Aktualisierungsfrequenz und publish_state-Events.

                  Optional: aggregiere Daten in JSON-Form.

                  W 1 Reply Last reply Reply Quote 0
                  • W
                    wibear @MCU last edited by

                    @ticaki @Dutchman ESPHome ESP32-S3 mit MQTT verliert Verbindung:

                    Vielleicht kann @ticaki oder @Dutchman helfen?

                    Hallo zusammen, könnet Ihr vielleicht Euren Senf dazugeben?
                    Danke und Grüße

                    1 Reply Last reply Reply Quote 0
                    • W
                      wibear @MCU last edited by

                      @mcu sagte in ESPHome ESP32-S3 mit MQTT verliert Verbindung:

                      Teste probeweise nur mit 2 oder 3 Topics, z. B.:

                      Das habe ich schon auch ausprobiert: immer dasselbe...

                      @mcu sagte in ESPHome ESP32-S3 mit MQTT verliert Verbindung:

                      Zu viele MQTT-Subscriptions

                      Deswegen musste ich extra ESP32-S3 mit PSRAM nehmen.

                      @mcu sagte in ESPHome ESP32-S3 mit MQTT verliert Verbindung:

                      Füge Logging bei jedem Empfang hinzu (nur Debugzwecke)

                      Gute Idee, mache ich.

                      @mcu sagte in ESPHome ESP32-S3 mit MQTT verliert Verbindung:

                      Füge einen Filter hinzu, um nur Werte zu publizieren, wenn sie sich wirklich ändern

                      Sehr gute Sache, mache ich auch.

                      @mcu sagte in ESPHome ESP32-S3 mit MQTT verliert Verbindung:

                      Verwende lieber mqtt.on_message zentral statt viele mqtt_subscribe.

                      Muss ich erstmal rausbekommen, wie das geht...

                      M 1 Reply Last reply Reply Quote 0
                      • M
                        MCU @wibear last edited by

                        @wibear sagte in ESPHome ESP32-S3 mit MQTT verliert Verbindung:

                        Muss ich erstmal rausbekommen, wie das geht...

                        Super Entscheidung – die zentrale Nutzung von mqtt.on_message: ist deutlich effizienter und stabiler, vor allem bei vielen Topics. Ich zeige dir jetzt, wie du das sauber aufbaust:

                        ✅ Zentrales MQTT-Handling mit mqtt.on_message
                        Statt für jeden Wert einen eigenen mqtt_subscribe zu verwenden, fängst du alle Nachrichten in einem zentralen Block ab – und entscheidest dann per topic, was damit passiert.

                        🔧 Beispiel: Zwei MQTT-Werte zentral empfangen und verarbeiten

                        esphome:
                          name: displaytft
                          friendly_name: DisplayTFT
                        
                        esp32:
                          board: esp32-s3-devkitc-1
                          framework:
                            type: esp-idf
                        
                        logger:
                        
                        api:
                          encryption:
                            key: "DEIN_KEY"
                        
                        ota:
                          password: "DEIN_PASSWORT"
                        
                        wifi:
                          ssid: !secret wifi_ssid
                          password: !secret wifi_password
                          ap:
                            ssid: "Displaytft Fallback Hotspot"
                            password: "O4s50tPm0qCc"
                        
                        captive_portal:
                        
                        mqtt:
                          broker: 192.168.178.10
                          username: !secret mqtt_username
                          password: !secret mqtt_password
                          client_id: DisplayTFT
                          topic_prefix: esphome
                        
                          on_message:
                            - topic: esphome/DisplayTFT/Solar/Einspeisung_Jetzt
                              then:
                                - lambda: |-
                                    float val = atof(x.c_str());
                                    id(sensor_solar_einspeisung).publish_state(val);
                        
                            - topic: esphome/DisplayTFT/Netz/Verbrauch_Jetzt
                              then:
                                - lambda: |-
                                    float val = atof(x.c_str());
                                    id(sensor_netz_verbrauch).publish_state(val);
                        
                        sensor:
                          - platform: template
                            id: sensor_solar_einspeisung
                            name: "Solar Einspeisung Jetzt"
                            unit_of_measurement: "W"
                            accuracy_decimals: 1
                        
                          - platform: template
                            id: sensor_netz_verbrauch
                            name: "Netz Verbrauch Jetzt"
                            unit_of_measurement: "W"
                            accuracy_decimals: 1
                        `` 
                        💡 Erklärung
                        Abschnitt	Bedeutung
                        mqtt.on_message:	Fängt MQTT-Nachrichten für bestimmte Topics ab
                        lambda:	Verarbeitet den empfangenen Wert (x)
                        atof(x.c_str())	Wandelt den Text in eine Zahl um
                        template sensor	Hält den aktuellen Float-Wert, damit du ihn anzeigen oder weiterverwenden kannst
                        
                        🔁 Vorteile gegenüber mqtt_subscribe
                        ✅ Kein RAM-Leak bei vielen Topics
                        ✅ Bessere Performance
                        ✅ Saubere zentrale Logik
                        ✅ Keine 20× text_sensor, sondern alles an einem Ort
                        W 1 Reply Last reply Reply Quote 0
                        • W
                          wibear @MCU last edited by

                          @mcu
                          Danke, danke, werde ich morgen umsetzen…

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate
                          FAQ Cloud / IOT
                          HowTo: Node.js-Update
                          HowTo: Backup/Restore
                          Downloads
                          BLOG

                          952
                          Online

                          31.9k
                          Users

                          80.1k
                          Topics

                          1.3m
                          Posts

                          3
                          18
                          368
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo