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,

