Esp32 s3 lite stack after update 2026.3

until version 2026.1 the esp32 s3 lite worked great. after the update it froze and didn’t work again, it’s dead. if I do a factory reset with esp web tool it works again until I pass the build I had. then the same thing again

Welcome to forum.
That’ s how it goes, strong development has some cons. But to get help here you likely need to post your code and esphome logs.

There are no log files since it’s a stack, as for the code I use GitHub - altrnate32/esp-lg-control · GitHub with no errors.

Maybe you should use the latest version on codeberg, not the superseded one in GitHub, and contact the author over there for support if their code is not working.

Yes, it’s ESPHome code, yes, it has yaml code, yes debug can be enabled, and yes, there should be entries in your compile error log that can be posted here.
You forgot to mention what device you were controlling and connected to.

To TRUTHFULLY quote somebody, THANKS FOR YOUR TIME AND ATTENTION TO THIS MATTER.

I use the latest version on codeberg, the device is the esp32-s3 lite and I have it on an lg heat pump. It has been working perfectly for two years. Whatever yaml I write, the esp does the same thing. It hangs
stopped working after version 2026.3 as well as in 2026.3.1

Like @Karosm pleaded with you, you have to share a little more, otherwise how do you expect us to find the problem?
There have been changes to the compilers, discussed in the ESPHome change logs. Maybe the code has broken these changes. The author of your code will know, over at codeberg.
[Please post any code and logs with </> forum formatting for readability]

Ok, it validates. Does it compile? Post the compile log, including a little of it connecting and running.
The actual yaml code too would be relevant.
Screenshots are hard to read.

And you gave precise instructions how to post code and logs…

@vgouden are you expecting someone solves your problem like “press 3 times quickly rst and long press boot button” ?

esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf

Enable Home Assistant API

api:
encryption:
key: “m3ngHmZ0ulm2IchPjTsjUZyShE/fZTrQfYLEVjm1kcQ=”

ota:

  • platform: esphome
    password: “6f93453b69898b5950a445c1bdf7402b”

wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password

Enable fallback hotspot (captive portal) in case wifi connection fails

ap:
ssid: “Lg Fallback Hotspot”
password: “67wPdbWU8DSD”

captive_portal:

web_server:
port: 80

substitutions:
device_name: esp-wp-control

packages:
#config_values: !include lg-heatpump-control/config/config.yaml
lg_modbus: !include lg-heatpump-control/sensors/lg-heatpump-modbus.yaml #include file with modbus sensors
#lg_dallas_temp: !include lg-heatpump-control/sensors/lg-dallas-temp.yaml #optional file with dallas temp probes (disable if not used)

#Choose correct version of below two files. Always enable (by uncommenting) only one of the two
#*****
with_external_thermostat: !include lg-heatpump-control/sensors/lg-with-external-thermostat.yaml #use external thermostat connected to GPIO pin
#without_external_thermostat: !include lg-heatpump-control/sensors/lg-without-external-thermostat.yaml #Replace external thermostat by an on/off switch
#*****

#Again Choose correct version of below two files. Always enable (by uncommenting) only one of the two
#*****
#with_external_relays: !include lg-heatpump-control/sensors/lg-with-external-relays.yaml #use external thermostat connected to GPIO pin
without_external_relays: !include lg-heatpump-control/sensors/lg-without-external-relays.yaml #Replace external thermostat by an on/off switch
#*****

#Again enable correct version to include HA Feelslike sensor
#*****
#with_ha_feelslike: !include lg-heatpump-control/sensors/lg-with-ha-feelslike-sensor.yaml
without_ha_feelslike: !include lg-heatpump-control/sensors/lg-without-ha-feelslike-sensor.yaml
#*****

esphome:
name: lg
friendly_name: lg
includes:
- lg-heatpump-control/lg-heatpump-state-machine.h
on_boot:
priority: 200
then:
lambda: !lambda |-
//instant on (in case of controller restart during run)
id(relay_backup_heat).turn_off();
if(id(thermostat_signal).state) {
id(relay_pump).turn_on();
id(relay_heat).turn_on();
} else {
id(relay_pump).turn_off();
id(relay_heat).turn_off();
}
id(controller_state).publish_state(“Init”);
id(controller_info).publish_state(“Initializing”);

Enable logging. Disable modbus controller debug messages

logger:
logs:
modbus_controller.sensor: WARN
modbus_controller.output: WARN
modbus.number: WARN
esp32.preferences: WARN
sensor: WARN
text_sensor: WARN
dallas.temp.sensor: WARN #disable if dallas is not used
number: WARN

number:

  • platform: template
    name: “Stooklijn offset”
    id: wp_stooklijn_offset
    min_value: -10
    max_value: 10
    initial_value: 0
    step: 1
    restore_value: yes
    unit_of_measurement: “°C”
    optimistic: true
    icon: mdi:plus-minus-variant
    set_action:
    then:
    lambda: !lambda |-
    fsm.update_stooklijn();
  • platform: template
    id: stooklijn_curve
    name: “Stooklijn Curve”
    min_value: -6
    max_value: 6
    step: 0.5
    restore_value: yes
    initial_value: 0
    optimistic: true
    icon: mdi:chart-bell-curve-cumulative
    set_action:
    then:
    lambda: !lambda |-
    fsm.update_stooklijn();
  • platform: template
    id: stooklijn_min_oat
    name: “Stooklijn Minimum Outside-temp”
    min_value: -25
    max_value: 0
    step: 1
    restore_value: yes
    initial_value: -6
    unit_of_measurement: “°C”
    optimistic: true
    icon: mdi:download-circle-outline
    set_action:
    then:
    lambda: !lambda |-
    fsm.update_stooklijn();
  • platform: template
    id: stooklijn_max_wtemp
    name: “Stooklijn Maximum Water-temp”
    min_value: 20
    max_value: 60
    step: 1
    restore_value: yes
    initial_value: 46
    unit_of_measurement: “°C”
    optimistic: true
    icon: mdi:waves-arrow-right
    set_action:
    then:
    lambda: !lambda |-
    fsm.update_stooklijn();
  • platform: template
    id: stooklijn_min_wtemp
    name: “Stooklijn Minimum Water-temp”
    min_value: 20
    max_value: 40
    step: 1
    restore_value: yes
    initial_value: 27
    unit_of_measurement: “°C”
    optimistic: true
    icon: mdi:waves-arrow-left
    set_action:
    then:
    lambda: !lambda |-
    fsm.update_stooklijn();
  • platform: template
    id: stooklijn_max_oat
    name: “Stooklijn Start Outside-temp”
    min_value: 0
    max_value: 20
    step: 1
    restore_value: yes
    initial_value: 12
    unit_of_measurement: “°C”
    optimistic: true
    icon: mdi:waves-arrow-left
    set_action:
    then:
    lambda: !lambda |-
    fsm.update_stooklijn();
  • platform: template
    id: minimum_run_time
    name: “Minimale run tijd”
    min_value: 0
    max_value: 60
    step: 1
    restore_value: yes
    initial_value: 30
    unit_of_measurement: “min”
    optimistic: true
    icon: mdi:timer-sync-outline
  • platform: template
    id: external_pump_runover
    name: “External pump overrun”
    min_value: 0
    max_value: 60
    step: 1
    restore_value: yes
    initial_value: 20
    unit_of_measurement: “min”
    optimistic: true
    icon: mdi:timer-cog-outline
  • platform: template
    id: oat_silent_always_off
    name: “Outside-temp silent always off”
    min_value: -20
    max_value: 10
    step: 1
    restore_value: yes
    initial_value: 2
    unit_of_measurement: “°C”
    optimistic: true
    icon: mdi:volume-plus
  • platform: template
    id: oat_silent_always_on
    name: “Outside-temp silent always on”
    min_value: -20
    max_value: 20
    step: 1
    restore_value: yes
    initial_value: 5
    unit_of_measurement: “°C”
    optimistic: true
    icon: mdi:volume-off
  • platform: template
    id: thermostat_off_delay
    name: “Thermostat off delay”
    min_value: 0
    max_value: 10
    step: 1
    restore_value: yes
    initial_value: 1
    unit_of_measurement: “min”
    optimistic: true
    icon: mdi:timer-off-outline
  • platform: template
    id: thermostat_on_delay
    name: “Thermostat on delay”
    min_value: 0
    max_value: 10
    step: 1
    restore_value: yes
    initial_value: 0
    unit_of_measurement: “min”
    optimistic: true
    icon: mdi:timer
  • platform: template
    id: boost_time
    name: “Boost duration”
    min_value: 0
    max_value: 180
    step: 1
    restore_value: yes
    initial_value: 60
    unit_of_measurement: “min”
    optimistic: true
    icon: mdi:timer-plus-outline
  • platform: template
    id: backup_heater_active_temp
    name: “Outside-temp backup heater active”
    min_value: -30
    max_value: 20
    step: 1
    restore_value: yes
    initial_value: 2
    optimistic: true
    icon: mdi:gas-burner
  • platform: template
    id: backup_heater_always_on_temp
    name: “Outside-temp backup heater always on”
    min_value: -30
    max_value: 20
    step: 1
    restore_value: yes
    initial_value: -6
    optimistic: true
    icon: mdi:gas-burner

select:

  • platform: template
    name: “Automatic Boost”
    id: automatic_boost
    options:
    • “OFF”
    • “After Defrost”
    • “After DHW”
    • “After Defrost/DHW”
      restore_value: true
      optimistic: true
      on_value:
      then:
      lambda: !lambda |-
      fsm.process_selects();
  • platform: template
    name: “Backup Heat Auto On”
    id: backup_heat_mode
    options:
    • “OFF”
    • “During Defrost”
    • “During DHW”
    • “During Low Temperature”
    • “During Stall”
    • “During DHW/Defrost”
    • “During Stall/Low Temperature”
    • “During All Above Cases”
      restore_value: true
      optimistic: true
      on_value:
      then:
      lambda: !lambda |-
      fsm.process_selects();
  • platform: template
    name: “Backup Heat: Disable HP”
    id: backup_heat_only_mode
    options:
    • “Do not disable HP”
    • “Disable HP during Low Temp when Backup Heat runs”
    • “Disable HP now and run Backup Heat”
      restore_value: true
      optimistic: true
      on_value:
      then:
      lambda: !lambda |-
      fsm.process_selects();
      switch:
  • platform: template
    name: “Enable Silent After Defrost”
    id: silent_after_defrost
    restore_mode: RESTORE_DEFAULT_OFF
    optimistic: true
    icon: mdi:snowflake-melt
  • platform: template
    name: “Change Target during Stall”
    id: change_target_stall
    restore_mode: RESTORE_DEFAULT_OFF
    optimistic: true
    icon: mdi:target-variant
  • platform: restart
    name: “ESP WP Control Restart”
  • platform: template
    name: “Temperature Boost”
    id: boost_switch
    optimistic: true
    icon: mdi:thermometer-plus
    #if this switch is enabled target changes are not sent to HP
  • platform: template
    name: “Disable Target Setting”
    id: disable_switch
    restore_mode: RESTORE_DEFAULT_OFF
    optimistic: true
    icon: mdi:power

interval:

  • interval: 30s
    id: state_machine
    then: !include { file: lg-heatpump-control/lg-heatpump-state-machine.yaml }

sensor:

  • platform: template
    name: “Stooklijn Watertemp Target”
    id: watertemp_target
    device_class: “temperature”
    unit_of_measurement: “°C”
    state_class: “measurement”
    update_interval: never
    icon: mdi:home-thermometer-outline
  • platform: template
    name: “Stooklijn Calculation Temperature”
    id: stooklijn_calc
    device_class: “temperature”
    unit_of_measurement: “°C”
    state_class: “measurement”
    update_interval: never
    icon: mdi:thermometer
  • platform: wifi_signal
    name: “${device_name} WiFi Signal”
    update_interval: 120s
    accuracy_decimals: 0
  • platform: uptime
    name: “${device_name} Uptime”
    unit_of_measurement: d
    device_class: “duration”
    update_interval: 3600s
    accuracy_decimals: 1
    filters:
    • multiply: 0.000011574
  • platform: template
    name: “Derivative”
    id: derivative_value
    accuracy_decimals: 1
    unit_of_measurement: “°C/h”
    update_interval: never
    icon: mdi:sigma
  • platform: template
    name: “Stooklijn Error degree minutes”
    id: wp_stooklijn_error_integral
    accuracy_decimals: 1
    unit_of_measurement: “degree minutes”
    update_interval: never
    icon: mdi:sigma
  • platform: template
    name: “Target Error degree minutes”
    id: wp_target_error_integral
    accuracy_decimals: 1
    unit_of_measurement: “degree minutes”
    update_interval: never
    icon: mdi:sigma

Sensors for ESP version and WIFI information

text_sensor:

  • platform: version
    name: “${device_name} ESPHome Version”
  • platform: wifi_info
    ip_address:
    name: “${device_name} ip”
    icon: mdi:ip-network
    ssid:
    name: “${device_name} ssid”
    icon: mdi:wifi-marker
  • platform: template
    name: “Controller state”
    id: controller_state
    update_interval: never
    icon: mdi:state-machine
  • platform: template
    name: “Controller info”
    id: controller_info
    update_interval: never
    icon: mdi:memory

INFO ESPHome 2026.3.1
INFO Reading configuration /config/esphome/lg.yaml…
INFO Starting log output from lg.local using esphome API
WARNING Can’t connect to ESPHome API for lg.local: Timeout while resolving IP address for [‘lg.local’] (ResolveTimeoutAPIError)
INFO Trying to connect to lg.local in the background

I said that after the build and the flash, the ESP32 does not respond.If I do a bootloader and flash with ESP Web Tools for first time work fine, but if I pass any yaml it crashes

So it appears you are having issues with the compile process, not the app.
Which part does it fail at?

and more closely

How is your ESP32 connected to your network and your computer you are initiating your compile from?

Okay please just do a manual download which runs a compile from in ESPHome. Do not try to OTA yet. There should be errors messages if it fails compiling. Post those error messages.

there are no error messages, it compiles normally

From what I understand, the problem is when I try to use the esp web tool to pass the bin, it crashes.

Have you cleared your ESPHome cache where you select the three dots in the ESPHome builder screen? Sometimes fragments of corrupted code linger after ESPHome updates, and clearing the cache enables you to download fresh code for your compiler to use. (Be aware the next time you do this after clearing the cache it will take a far longer time than normal to compile while it downloads, unpacks and compiles all the necessary libraries. After the first compile time after this happens, compile times will be far shorter, as it now has cached copies to use.)

I’ve done it countless times without success.
I also factory default the home assistant and it did the same thing.

How is your ESP32 connected to your network, your HomeAssistant server and your computer you are initiating your compile from?

with home assistant green cable

Can you turn debugging on to VERY VERBOSE in your yaml code for problem isolation purposes, and recompile and post a fresh compile log (yes, all of it).
Please use the forum </> formatting option to make it readable when you post. Not pictures - post the log (cut and paste inside the formatting prompt)

(Note for later: Don’t forget to turn debugging back off again when the problem is solved)

Yes I can,