[Help] Generic thermostat shutting off before reaching setpoint

Hi everyone,

I’m currently migrating from Jeedom to Home Assistant and I’m experiencing a strange behavior with one of my generic thermostats. I’m new to Home Assistant and I don’t know how to extract more detailed logs to help diagnose the issue — if you can point me in the right direction, I’d really appreciate it.

Versions:

  • Home Assistant OS 17.1
  • Core 2026.3.2

My setup:

  • 4 generic thermostats (ground floor + 3 bedrooms)
  • Valves controlled via virtual switches
  • Boiler controlled by a dry contact
  • Automation managing boiler on/off based on thermostat states

The problem: The “Chambre Thomas” thermostat switches off and on several times during heating while the target temperature has not been reached, then stops definitively below the setpoint. The room takes a long time to heat up (end of the heating loop), which makes these premature shutdowns even more problematic: once the heating stops, the temperature stops rising entirely.

The “Chambre Nathan” thermostat works perfectly with a strictly identical config: heating stays on continuously until the setpoint is reached.

Hardware:

  • Temperature sensors: Sonoff SNZB-02D (Zigbee)
  • Thermostatic valves: Eurotronic Spirit Z-Wave
  • Boiler: Fibaro Relay Switch FGS212 (Z-Wave)

YAML config (identical for both thermostats, only entity IDs differ):

yaml

  - platform: generic_thermostat
    name: "Chambre Thomas"
    unique_id: thermostat_chambre_thomas
    heater: "switch.switch_vanne_thomas"
    target_sensor: "sensor.temperature_chambre_thomas_temperature"
    min_temp: 13
    max_temp: 25
    target_temp_step: 0.5
    initial_hvac_mode: "heat"
    precision: 0.1
    away_temp: 15
    comfort_temp: 19
    eco_temp: 18
    cold_tolerance: 0.3
    hot_tolerance: 0.3
    keep_alive:
      minutes: 5

  - platform: generic_thermostat
    name: "Chambre Nathan"
    unique_id: thermostat_chambre_nathan
    heater: "switch.switch_vanne_nathan"
    target_sensor: "sensor.temperature_chambre_nathan_temperature"
    min_temp: 13
    max_temp: 25
    target_temp_step: 0.5
    initial_hvac_mode: "heat"
    precision: 0.1
    away_temp: 15
    comfort_temp: 19
    eco_temp: 18
    cold_tolerance: 0.3
    hot_tolerance: 0.3
    keep_alive:
      minutes: 5

What I’ve ruled out:

  • Erratic sensor values: readings seem consistent
  • Sensor issue: I swapped the sensors between the two rooms, the problem stays on the same room
  • HA environment: tested on a fresh HA instance with only the bare minimum needed for the test, same behavior
  • Switch bouncing: the switch stays on off after shutdown
  • Thermostat component: the same behavior occurs with VTherm

My questions:

  • Have you ever encountered this behavior?
  • What should I look at first to diagnose the root cause?
  • How can I enable more detailed logs for the generic thermostat?

This issue is blocking my migration from Jeedom — if I can’t find a solution, I’ll unfortunately have to roll it back. Thanks in advance for your help!

Remove the hot_tolerance and it will shut off at the target temp

Thanks for the suggestion, I tried removing both hot_tolerance and keep_alive but it doesn’t change anything — the thermostat still switches to “idle” instead of maintaining heating, while the target temperature hasn’t been reached yet.

Try setting up the thermostats via the UI instead:

Also make sure nothing else is turning off switch.switch_vanne_thomas. Have a look at the history for that entity: you should be able to see what’s turning it off:

Problem solved!

The issue was coming from the Eurotronic Spirit valve itself. My switch template was using the valve’s currentValue to determine its state, so every time the valve reported an incorrect position, the switch turned off — which made the generic thermostat think the heating had stopped and switch to idle.

I finally had to fully re-include the valve in Z-Wave to solve the problem.

Combined with removing the state: from the switch templates, everything is now working correctly.

Thanks again for your help!