Not all sensor values are updated automatically in HA. Wrong configuration?

Hi all!

I am new to ESPHome and successfully implemented some test programs. My current test program is the following:

# Hardware:
# NRF52840 Board "SuperMini"
# 1x Reset button between pin "RST" and "GND"
# 2x buttons, 1x between pin "0.06" and GND and 1x between pin "0.08" and GND
# 1x external LED between pin "0.31" and GND
# 1x VEML7700 light sensor board: SDA to P1.00 and SCL to P0.11, 3V3 to VIN of the sensor
# 1x potentiometer between 3V3 and GND and wiper contact to P0.02

esphome:
  name: test
  # Red LED lights up briefly at boot
  on_boot:
    priority: -10
    then:
      - switch.turn_on: led1
      - delay: 500ms
      - switch.turn_off: led1

# Define the board
nrf52:
  board: adafruit_itsybitsy_nrf52840

# Enable logger
logger:

# I2C configuration
i2c:
  sda: P1.00
  scl: P0.11
  scan: true

# Enables the Zigbee stack
zigbee:
  id: rollershader_test

sensor:
  # Light sensor
  - platform: veml7700
    ambient_light:
      name: "Helligkeit"
      id: lux_sensor
      accuracy_decimals: 2
    update_interval: 10s

  # ADC (potentiometer)
  - platform: adc
    pin: AIN0
    name: "Poti Spannung"
    unit_of_measurement: "V"
    accuracy_decimals: 2
    update_interval: 10s

# Onboard LED (red)
switch:
  - platform: gpio
    pin: P0.15
    id: led1
    name: "LED Intern"

# External LED
  - platform: gpio
    pin: P0.31
    id: led2
    name: "LED Extern"

# Button configuration
binary_sensor:
  - platform: gpio
    pin:
      number: P0.06
      mode:
        input: true
        pullup: true
      inverted: true
    icon: "mdi:toggle-switch-off-outline"
    name: "Taster 1"
    id: button1
#    on_press:
#      - switch.turn_on: led2
#    on_release:
#      - switch.turn_off: led2

  - platform: gpio
    pin:
      number: P0.08
      mode:
        input: true
        pullup: true
      inverted: true
    name: "Taster 2"
    id: button2
#    on_press:
#      - switch.turn_on: led1
#    on_release:
#      - switch.turn_off: led1

At the console output after flashing this program every thin works as expected: brightness, button and potentiometer values are reported as expected.

But I have the following issue:
The VEML7700 Lux sensor reports its value automatically and flawlessly to Home Assistant. However, the potentiometer (ADC voltage sensor) completely refuses to update on its own, even though the ESPHome console logs prove that the hardware, wiring, and code are processing the changes perfectly in real time. Only when updating the "AnalogInput" value "present_value" in the cluster setting manually via "Read attribute", the value is updated without problems.
Same for the pushbuttons -> no update on its on. Once it worked after multiple re-coupling, but overnight it failed again to update...
The sensor is connected using ZHA into Home Assistant. Of course I tried deleting the sensor (with zha.remove) and re-coupled it multiple times.

I don't know if this is a HomeAssistant or ESPHome issue, but the other sensors (non-DIY) are working flawlessly, therefore I posted my issue here.

I would be glad for any help!

This is a fixable config thing, not a HA-vs-ESPHome mystery.

Why illuminance works but the ADC and buttons don't: the VEML7700's illuminance maps to a standard Zigbee measurement cluster, and ZHA automatically binds and configures reporting for those, so the device pushes updates on its own. Your ADC and buttons map to the generic Analog Input (0x000C) and Binary Input clusters, which do not auto-report unless reporting is explicitly enabled. That's exactly why you can Read present_value manually (the value is sitting in the attribute) but nothing ever gets pushed to HA.

The fix (ESPHome side, the main one): turn on reporting for those entities with the zigbee_esphome component's report: option:

  • report: true for the ADC (periodic / on-change).
  • report: force for the buttons, so a press is pushed immediately instead of waiting for an interval.

Keep a unit/type on the analog (you already have unit_of_measurement: "V", good), because ZHA ignores Analog Input clusters with no unit/type. After adding report:, re-flash and re-pair so ZHA re-interviews and sets up reporting. The exact YAML placement depends on the component version, so check the docs/repo below for the current syntax.

ZHA side (complement / fallback): open the device, go to the cluster (Analog Input / Binary Input), and Configure Reporting on present_value (min/max interval + reportable change), binding it to the coordinator first if needed. Note ZHA caps the minimum reporting interval around 30 s for many sensors, so even with reporting on, the ADC may update at most every ~30 s unless it's change-driven, another reason report: force is better for the buttons.

Why it "worked once then died overnight": that's the signature of reporting not being set up persistently (the binding/report config didn't stick across a re-pair or sleep cycle). Enabling report: in firmware makes the device responsible for sending reports, which is far more reliable than hoping ZHA configured it.

This is a known rough edge with the very new ESPHome Zigbee stack and the generic input clusters, so if report: doesn't fully sort it, it's worth an issue on the component's GitHub.

Refs: