Hello everyone,
I applied AutoTPI on all my Vhterm when the feature was deployed, probably a bit mad but this is a very valuable feature in my opinion.
i would to share here one behaviour that i have difficulty to understand
First of all find below current Vtherm and auto_tpi conf for this room:
sensor.salon_vthermostat_auto_tpi_learning_state:
coeff_int_cycles: 17
coeff_ext_cycles: 155
heating_cycles_count: 608
thermal_time_constant_hours: 13.3
model_confidence: 0.67
last_learning_status: learned_indoor_heat
learning_start_dt: "2026-01-27T14:14:30.617839+01:00"
allow_kint_boost_on_stagnation: true
allow_kext_compensation_on_overshoot: true
bootstrap_failure_count: 0
max_capacity_heat: 0.8640281457246608
capacity_heat_status: learned
capacity_heat_value: 0.8640281457246608
capacity_heat_count: 5
calculated_coef_int: 0.07520694540809986
calculated_coef_ext: 0.006098097985924204
icon: mdi:brain
friendly_name: Salon - Vthermostat Auto TPI Learning State
climate.salon_vthermostat:
hvac_modes:
- heat
- sleep
- "off"
min_temp: 7
max_temp: 35
target_temp_step: 0.1
preset_modes:
- none
- frost
- eco
- comfort
- boost
current_temperature: 18.6
temperature: 20
hvac_action: heating
preset_mode: none
hvac_mode: heat
ema_temp: 18.53
specific_states:
is_on: true
last_central_mode: Auto
last_update_datetime: "2026-01-29T17:07:08.672470+01:00"
ext_current_temperature: 4.3
last_temperature_datetime: "2026-01-29T16:54:03.543565+01:00"
last_ext_temperature_datetime: "2026-01-29T16:18:15.883818+01:00"
is_device_active: true
device_actives:
- number.salon_radiateur_cour_valve_opening_degree
- number.salon_radiateur_baie_vitree_valve_opening_degree
- number.salon_radiateur_fenetre_sente_valve_opening_degree
nb_device_actives: 3
ema_temp: 18.53
temperature_slope: 0.08
hvac_off_reason: null
total_energy: 110429.99
last_change_time_from_vtherm: "2026-01-29T17:07:08.672109+01:00"
messages: []
is_sleeping: false
is_locked: false
is_recalculate_scheduled: false
auto_tpi_state: "on"
auto_tpi_learning:
coeff_indoor_heat: 0.07520694540809986
coeff_outdoor_heat: 0.006098097985924204
coeff_indoor_autolearn: 18
coeff_outdoor_autolearn: 155
max_capacity_heat: 0.8640281457246608
offset: 0
last_power: 0.2
last_order: 20.000000000000014
last_temp_in: 18.63
last_temp_out: 4.3
last_state: heat
previous_state: heat
last_on_temp_in: 18.63
last_update_date: "2026-01-29T17:03:07.947790+01:00"
last_heater_stop_time: "2026-01-29T17:03:07.942064+01:00"
cycle_start_date: "2026-01-29T17:03:07.947790+01:00"
cycle_active: true
current_cycle_cold_factor: 0.000004771666666666667
current_cycle_params:
on_time_sec: 59
off_time_sec: 240
on_percent: 0.2
hvac_mode: heat
consecutive_failures: 0
autolearn_enabled: true
last_learning_status: gap_too_large_for_outdoor(gap=1.37 > 1.0)
total_cycles: 609
consecutive_boosts: 0
regime_change_detected: false
learning_start_date: "2026-01-27T14:14:30.617839+01:00"
capacity_heat_learn_count: 5
bootstrap_failure_count: 0
allow_kint_boost: true
allow_kext_overshoot: true
configuration:
ac_mode: false
type: over_climate_valve
is_controlled_by_central_mode: true
target_temperature_step: 0.1
timezone: Europe/Paris
temperature_unit: °C
is_used_by_central_boiler: true
max_on_percent: null
have_valve_regulation: true
cycle_min: 5
minimal_activation_delay_sec: 10
minimal_deactivation_delay_sec: 0
preset_temperatures:
frost_temp: 7
eco_temp: 17
boost_temp: 21
comfort_temp: 19
frost_away_temp: 0
eco_away_temp: 0
boost_away_temp: 0
comfort_away_temp: 0
current_state:
hvac_mode: heat
target_temperature: 20.000000000000014
preset: none
requested_state:
hvac_mode: heat
target_temperature: 20.000000000000014
preset: none
is_presence_configured: false
is_power_configured: false
power_manager:
device_power: 8784
mean_cycle_power: 1756.8
is_motion_configured: false
is_window_configured: true
is_window_auto_configured: false
window_manager:
window_state: "off"
window_auto_state: unavailable
window_action: window_turn_off
is_window_bypass: false
window_sensor_entity_id: binary_sensor.salon_baie_vitree_contact
window_delay_sec: 30
window_off_delay_sec: 30
window_auto_open_threshold: 3
window_auto_close_threshold: 0
window_auto_max_duration: 30
is_safety_configured: true
safety_manager:
safety_state: "off"
safety_delay_min: 60
safety_min_on_percent: 0
safety_default_on_percent: 0
is_lock_configured: true
lock_manager:
is_locked: false
lock_users: true
lock_automations: true
lock_code: false
timed_preset_manager:
is_active: false
preset: null
end_time: null
remaining_time_min: 0
is_heating_failure_detection_configured: true
heating_failure_detection_manager:
heating_failure_state: "off"
cooling_failure_state: "off"
heating_failure_threshold: 0.9
cooling_failure_threshold: 0
detection_delay_min: 15
temperature_change_tolerance: 0.5
failure_detection_enable_template: null
is_detection_enabled_by_template: true
heating_tracking:
is_tracking: false
initial_temperature: null
current_temperature: null
remaining_time_min: null
elapsed_time_min: null
cooling_tracking:
is_tracking: false
initial_temperature: null
current_temperature: null
remaining_time_min: null
elapsed_time_min: null
is_auto_start_stop_configured: false
fan_mode: null
fan_modes: []
is_over_climate: true
regulation_accumulated_error: 0
regulated_target_temperature: null
vtherm_over_climate:
start_hvac_action_date: "2026-01-29T17:02:08.673392+01:00"
last_mean_power_cycle: 1756.8
underlying_entities:
- climate.salon_radiateur_cour
- climate.salon_radiateur_baie_vitree
- climate.salon_radiateur_fenetre_sente
is_regulated: true
auto_fan_mode: auto_fan_none
current_auto_fan_mode: auto_fan_none
auto_activated_fan_mode: null
auto_deactivated_fan_mode: null
follow_underlying_temp_change: false
auto_regulation_use_device_temp: false
regulation:
regulated_target_temperature: null
auto_regulation_mode: auto_regulation_valve
regulation_accumulated_error: 0
temp_synchronisation:
sync_entity_ids:
- number.salon_radiateur_cour_external_temperature_input
- number.salon_radiateur_baie_vitree_external_temperature_input
- number.salon_radiateur_fenetre_sente_external_temperature_input
sync_with_calibration: false
sync_attributes:
number.salon_radiateur_cour_external_temperature_input:
value: 18.6
min_sync_entity: 0
max_sync_entity: 99.9
step_sync_entity: 0.1
number.salon_radiateur_baie_vitree_external_temperature_input:
value: 18.6
min_sync_entity: 0
max_sync_entity: 99.9
step_sync_entity: 0.1
number.salon_radiateur_fenetre_sente_external_temperature_input:
value: 18.6
min_sync_entity: 0
max_sync_entity: 99.9
step_sync_entity: 0.1
valve_open_percent: 18
power_percent: 20
on_percent: 0.2
vtherm_over_climate_valve:
have_valve_regulation: true
valve_regulation:
underlyings_valve_regulation:
- - number.salon_radiateur_cour_valve_opening_degree
- number.salon_radiateur_cour_valve_closing_degree
- - number.salon_radiateur_baie_vitree_valve_opening_degree
- number.salon_radiateur_baie_vitree_valve_closing_degree
- - number.salon_radiateur_fenetre_sente_valve_opening_degree
- number.salon_radiateur_fenetre_sente_valve_closing_degree
on_percent: 0.2
power_percent: 20
function: tpi
tpi_coef_int: 0.07520694540809986
tpi_coef_ext: 0.006098097985924204
tpi_threshold_low: 0
tpi_threshold_high: 0
minimal_activation_delay: 10
minimal_deactivation_delay: 0
min_opening_degrees: ""
opening_threshold_degree: 5
max_closing_degree: 100
max_opening_degrees: ""
valve_open_percent: 18
auto_regulation_dpercent: 5
auto_regulation_period_min: 5
last_calculation_timestamp: "2026-01-29T13:29:42.627833+01:00"
underlying_valves:
number.salon_radiateur_cour_valve_opening_degree:
hvac_action: heating
percent_open: 18
last_sent_opening_value: 14
min_opening_degree: 0
max_opening_degree: 100
number.salon_radiateur_baie_vitree_valve_opening_degree:
hvac_action: heating
percent_open: 18
last_sent_opening_value: 14
min_opening_degree: 0
max_opening_degree: 100
number.salon_radiateur_fenetre_sente_valve_opening_degree:
hvac_action: heating
percent_open: 18
last_sent_opening_value: 14
min_opening_degree: 0
max_opening_degree: 100
friendly_name: Salon - Vthermostat
supported_features: 401
#version
Versatile version 8.6.2
Versatile Thermostat Auto-TPI Learning Card 1.0.9
You will find below AutoTPI graph

As you may see, my graph started after VTherm last update, I did a TPI reset before starting back auto TPI. TPint was at 0.5 initialy and TPext at 0.05.
I don't understand why TPI fall very agressive on boot and after is very very slow to increase back, creating a situation of having hours of being below temperature setpoint because opening is very very small.
Do i miss something regarding config ? I'm very open to test any change on my config :)
Précision: overheat period here is because of a wood stove within the living room.
EDIT: Jan 29th at 16:00, notif received:
Auto TPI has reached the maximum consecutive Kint boost limit (5). The temperature is not rising despite increased power demand. This may indicate undersized heating or abnormal heat loss. Learning will continue normally, but Kint boosting is paused until external temperature rises.
Etienne
Hello everyone,
I applied AutoTPI on all my Vhterm when the feature was deployed, probably a bit mad but this is a very valuable feature in my opinion.
i would to share here one behaviour that i have difficulty to understand
First of all find below current Vtherm and auto_tpi conf for this room:
sensor.salon_vthermostat_auto_tpi_learning_state:
climate.salon_vthermostat:
#version
You will find below AutoTPI graph

As you may see, my graph started after VTherm last update, I did a TPI reset before starting back auto TPI. TPint was at 0.5 initialy and TPext at 0.05.
I don't understand why TPI fall very agressive on boot and after is very very slow to increase back, creating a situation of having hours of being below temperature setpoint because opening is very very small.
Do i miss something regarding config ? I'm very open to test any change on my config :)
Précision: overheat period here is because of a wood stove within the living room.
EDIT: Jan 29th at 16:00, notif received:
Etienne