The last couple of weeks I have been trying to get my Opentherm DIYLESS module to start the boiler in the morning. I have a Daalderop Combifort 24/50+ boiler and the module works oke during daytime. But it won’t start in the morning.
In the logfiles I can see that the output stays 0 even when I set the taget temperature higher. I use a heartbeat of 5 seconds so the module stays active.
The workaround I use now is reloading the yaml code and than the boiler is starting fine.
NFO Successful handshake with ot-thermostaat @ 192.168.2.167 in 0.218s
[07:56:49.503][I][app:185]: ESPHome version 2025.10.3 compiled on Oct 27 2025, 06:55:44
[07:56:58.662][I][climate:221]: Mode=HEAT, Target=19.0, Current=18.3, Output=0.0
[07:56:58.669][I][main:243]: climate mode=HEAT, target=19.0, current=18.3, output=0.0
[07:56:58.669][I][interval:258]: Update - Temp=18.3, Target=19.0, CH=0, Flame=0
This is the Climate part of the code.
# Use PID Climate component for automatic boiler setpoint calculation
climate:
- platform: pid
id: ch_climate
name: "Heating Climate"
heat_output: ch_setpoint
default_target_temperature: 19.0
sensor: wnk_temperature_plankje
visual:
min_temperature: 10
max_temperature: 26
temperature_step:
target_temperature: 0.5
current_temperature: 0.1
control_parameters:
kp: 0.5
ki: 0.001
kd: 0 # Derivative term reacts too much to small changes in temperature, effectively turning off the boiler while target temperature is still far
output_averaging_samples: 5
min_integral: -50.0
max_integral: 50.0
deadband_parameters:
threshold_high: 0.3
threshold_low: -0.3
kp_multiplier: 0
ki_multiplier: 0.5
kd_multiplier: 0.0
deadband_output_averaging_samples: 10
on_state:
- lambda: |-
ESP_LOGI("climate", "Mode=%s, Target=%.1f, Current=%.1f, Output=%.1f",
climate_mode_to_string(x.mode),
x.target_temperature,
id(wnk_temperature_plankje).state,
id(ch_setpoint).state);
- if:
condition:
lambda: 'return x.mode == CLIMATE_MODE_HEAT;'
then:
- if:
condition:
lambda: 'return id(wnk_temperature_plankje).state < x.target_temperature;'
then:
- switch.turn_on: ch_enable
else:
- switch.turn_off: ch_enable
else:
- switch.turn_off: ch_enable
- logger.log:
format: "climate mode=%s, target=%.1f, current=%.1f, output=%.1f"
args: ['std::string(LOG_STR_ARG(climate_mode_to_string(x.mode))).c_str()', 'x.target_temperature', 'id(wnk_temperature_plankje).state', 'id(ch_setpoint).state']
level: INFO
I am out of options and don’t know how to solve this anymore.