Skip to content

Auto TPI behaviour investigation #1708

Description

@eflye-veepeetech

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
Image

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.

Image

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    ExperimentalRelative to an experimental feature

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions