MQTT Discover auf ESP32 schlägt fehl / Deep Sleep Prevention

Ich möchte einen ESP32c3 mit Akku betreiben. dazu soll er lange im Tiefschaf bleiben.
Um dennoch updates machen zu können, möchte ich über MQTT dieses stoppen können (https://esphome.io/components/deep_sleep/#deep_sleepprevent-action)

das scheint aber nicht zu funktionieren:

INFO ESPHome 2025.12.5
INFO Reading configuration /config/esphome/dr-esph-lufttemperatur.yaml...
INFO Starting looking for IP in topic esphome/discover/dr-esph-lufttemperatur
INFO Connected to MQTT broker!
INFO Send discover via MQTT broker topic: esphome/ping/dr-esph-lufttemperatur
INFO Successfully reconnected to the MQTT server
INFO Connected to MQTT broker!
INFO Send discover via MQTT broker topic: esphome/ping/dr-esph-lufttemperatur
INFO Successfully reconnected to the MQTT server
INFO Connected to MQTT broker!
INFO Send discover via MQTT broker topic: esphome/ping/dr-esph-lufttemperatur
INFO Successfully reconnected to the MQTT server
INFO Connected to MQTT broker!
INFO Send discover via MQTT broker topic: esphome/ping/dr-esph-lufttemperatur
INFO Successfully reconnected to the MQTT server
INFO Connected to MQTT broker!
INFO Send discover via MQTT broker topic: esphome/ping/dr-esph-lufttemperatur
INFO Successfully reconnected to the MQTT server
WARNING MQTT IP discovery failed (Failed to find IP via MQTT), will try other devices if available
INFO Starting log output from 192.168.2.150 using esphome API
INFO Successfully resolved dr-esph-lufttemperatur @ 192.168.2.150 in 0.000s
INFO Successfully connected to dr-esph-lufttemperatur @ 192.168.2.150 in 0.061s
INFO Successful handshake with dr-esph-lufttemperatur @ 192.168.2.150 in 0.093s
[06:11:06.036][I][app:194]: ESPHome version 2025.12.5 compiled on Jan 11 2026, 20:35:38

weiterhin

[06:11:07.473][D][sensor:135]: 'Akku Spannung': Sending state 3.88800 V with 2 decimals of accuracy
[06:11:08.142][D][sensor:135]: 'Akkustand': Sending state 68.80000 % with 1 decimals of accuracy
[06:11:09.838][I][deep_sleep:061]: Beginning sleep
[06:11:09.841][I][deep_sleep:063]: Sleeping for 10000000us
[06:11:09.851][D][esp32.preferences:149]: Writing 1 items: 0 cached, 1 written, 0 failed
INFO Processing expected disconnect from ESPHome API for dr-esph-lufttemperatur @ 192.168.2.150
WARNING Disconnected from API
INFO Successfully resolved dr-esph-lufttemperatur @ 192.168.2.150 in 0.000s
INFO Successfully connected to dr-esph-lufttemperatur @ 192.168.2.150 in 19.393s
INFO Successful handshake with dr-esph-lufttemperatur @ 192.168.2.150 in 0.113s
[06:11:34.532][W][mqtt:238]: Couldn't resolve IP address for 'homeassistant.local'
[06:11:34.536][W][mqtt:360]: Disconnected: Unknown
[06:11:34.541][D][mqtt:218]: Resolving broker IP address
[06:11:34.555][D][mqtt:249]: Resolved broker IP address to 192.168.2.111
[06:11:34.559][I][mqtt:270]: Connecting
[06:11:34.584][E][mqtt.idf:167]: MQTT_EVENT_ERROR
[06:11:34.585][E][mqtt.idf:174]: Connection refused error: 0x5
[06:11:34.594][D][esp-idf:000][mqtt_task]: E (14753) mqtt_client: MQTT connect failed
[06:11:34.600][W][mqtt:360]: Disconnected: TCP disconnected
[06:11:35.533][D][sensor:135]: 'Akkustand': Sending state 72.39998 % with 1 decimals of accuracy
[06:11:36.334][D][sensor:135]: 'Akku Spannung': Sending state 3.94200 V with 2 decimals of accuracy

Das alles passiert im laufenden Betrieb ständig, noch ohne das eine Message gesendet wurde.

das ist die Konfiguration:

captive_portal:

i2c:
  - id: bus_a
    sda: GPIO06
    scl: GPIO07
    scan: true

sensor:
  - platform: bme280_i2c
    i2c_id: bus_a
    address: 0x76
    temperature:
      name: "Außen Temperatur"
    pressure:
      name: "Außen Luftdruck"
    humidity:
      name: "Außen Luftfeuchtigkeit"
    update_interval: 3s
    
  - platform: adc
    pin: GPIO00
    name: "Akku Spannung"
    id: akkuspannung
    filters:
      - multiply: 6
    update_interval: 3s
  - platform: template
    name: "Akkustand"
    unit_of_measurement: '%'
    update_interval: 3s
    lambda: |-
      return ((id(akkuspannung).state - 3.20) * 100.00);

deep_sleep:
  run_duration: 45s
  sleep_duration: 10s
  id: deep_sleep_1

mqtt:
  broker: homeassistant.local
  port: 1883
  on_message:
  - topic: home/draussen/ota_mode
    payload: "ON"
    then:
      - deep_sleep.prevent: deep_sleep_1
  - topic: home/draussen/deepsleep_mode
    payload: "ON"
    then:
      - deep_sleep.enter: deep_sleep_1

das ganze solange er am USB Port hängt.
Im Akkubetrieb sieht es dann so aus:

INFO ESPHome 2025.12.5
INFO Reading configuration /config/esphome/dr-esph-lufttemperatur.yaml...
INFO Starting looking for IP in topic esphome/discover/dr-esph-lufttemperatur
INFO Connected to MQTT broker!
INFO Send discover via MQTT broker topic: esphome/ping/dr-esph-lufttemperatur
INFO Successfully reconnected to the MQTT server
INFO Connected to MQTT broker!
INFO Send discover via MQTT broker topic: esphome/ping/dr-esph-lufttemperatur
INFO Successfully reconnected to the MQTT server
INFO Connected to MQTT broker!
INFO Send discover via MQTT broker topic: esphome/ping/dr-esph-lufttemperatur
INFO Successfully reconnected to the MQTT server
INFO Connected to MQTT broker!
INFO Send discover via MQTT broker topic: esphome/ping/dr-esph-lufttemperatur
INFO Successfully reconnected to the MQTT server
INFO Connected to MQTT broker!
INFO Send discover via MQTT broker topic: esphome/ping/dr-esph-lufttemperatur
INFO Successfully reconnected to the MQTT server
WARNING MQTT IP discovery failed (Failed to find IP via MQTT), will try other devices if available
INFO Starting log output from dr-esph-lufttemperatur.local using esphome API
WARNING Can't connect to ESPHome API for dr-esph-lufttemperatur.local: Timeout while resolving IP address for ['dr-esph-lufttemperatur.local'] (ResolveTimeoutAPIError)
INFO Trying to connect to dr-esph-lufttemperatur.local in the background

er sendet dann auch keine Daten mehr.

Solange der MQTT Block auskommentiert ist, funktioniert alles super.
Hat einer eine Idee, wo der fehler liegt ?

Warum soll der ESP per MQTT mit HA sprechen, wenn er es auch nativ kann? IIRC empfiehlt ESPHome das auch.

Weil esphome diese Lösung so vorschlägt, um den deepsleep ota zu unterbinden um Updates durchführen zu können.

Siehe auch den Link oben.

In der Zielkonfiguration ist das verhältnis 5 sek on und 15 min off. Da kommst du für ein update nicht rein und das Geräte jeden monat für updates auszubauen ist keine sinnvoll option um einen physichen deep sleep stop zu setzen.

OK, den Link hatte ich zugegebener Maßen nicht gelesen, sorry.

1 „Gefällt mir“