Failing to connect ESP-H2 via Thread

Ha, you saved me, thank you!

Yeah, I couldn’t get any output, so thought it’s wrong, but adding:

mqtt:
  broker: 192.168.0.202
  username: z2m
  password: myzpwd
  topic_prefix: null
  log_topic: h2test

made it possible to see some logs:

mosquitto_sub -h 192.168.0.202 -u z2m -P myzpwd -t "h2test" --pretty -F "%t>%p"

like this:

h2test>[D][main:224]: Heartbeat - ESP32-h2-delta is alive!
h2test>[D][main:224]: Heartbeat - ESP32-h2-delta is alive!
h2test>[W][component:307]: mqtt cleared Warning flag
h2test>[I][mqtt:310]: Connected
h2test>[W][component:307]: mqtt cleared Warning flag
h2test>[I][mqtt:310]: Connected
h2test>[D][main:224]: Heartbeat - ESP32-h2-delta is alive!
h2test>[D][main:224]: Heartbeat - ESP32-h2-delta is alive!
h2test>[D][api:146]: Accept FD49:E5FC:83AF::3E5
h2test>[W][component:307]: api cleared Warning flag
h2test>[D][api.connection:1466]: Home Assistant 2025.8.0 (FD49:E5FC:83AF::3E5) connected
h2test>[D][main:224]: Heartbeat - ESP32-h2-delta is alive!

Anyway, with this config:

esphome:
  name: h2delta
  friendly_name: h2delta

esp32:
  board: esp32-h2-devkitm-1 
  variant: ESP32H2
  framework:
    type: esp-idf

# Enable logging
logger:
  level: DEBUG

mqtt:
  broker: 192.168.0.202
  username: z2m
  password: myzpwd
  topic_prefix: null
  log_topic: h2test

api:

ota:
  - platform: esphome


network:
  enable_ipv6: true

interval:
  - interval: 2s
    then:
      - logger.log: "Heartbeat - ESP32-h2-delta is alive!"

openthread:
  tlv: 0e08000000000001000000030...7f8
  force_dataset: true

text_sensor:
  - platform: openthread_info
    ip_address:
      name: "Off-mesh routable IP Address"
    channel:
      name: "Channel"
    role:
      name: "Device Role"
    rloc16:
      name: "RLOC16"
    ext_addr:
      name: "Extended Address"
    eui64:
      name: "EUI64 Interface ID"
    network_name:
      name: "Network Name"
    network_key:
      name: "Network Key"
    pan_id:
      name: "PAN ID"
    ext_pan_id:
      name: "Extended PAN ID"

and applying via esphome run h2gamma.yaml, I was able to see the device being autodiscovered by the ESPHome in homeassistant and I could one-click add it:

Gotchas

A note for my futureself. thread/esphome doesn’t like changing names. I had three boards that I was frantically switching and they got the same hostname - the problem is that the hostname is probably partly cached on the border router level, so when I flashed boardA with h2alpha name and it connected (but I did not add it), and then I flashed boardB with the same config and therefore same h2alpha hostname, esphome gets confused and will show “Unable to add/connect” because the name is associated with the old ipv6 address (I think). Similarly, I couldn’t change hostname if I wanted to change it. The solution I found out (with a minor heartattack as I thought I factory-reset my border router) I could go to Reset Router:

It disappears for a second, then appears under “Other networks”, but you can click again on “Add to preferred network” - the network settings are the same, fortunately.

After this procedure, I was able to “reregister” new hostnames fine.

However, one particularly stuborn device was still showing with wrong name, and I couldn’t add it. I flashed the device again with a new name, used http://esp-ot-br.local/topology to figure out it’s IP address, click on “Add device”, and manually changed the IPV6 address as the one there was wrong with my new from /topology and tada it worked (it even fetched the correct name after adding it)

And to get the network status on http://esp-ot-br.local/index.html#Status, you need to click on “OverView” → it then fetches the data and you see the details instead of just “Unknown”