Could you paste this into the template editor, edit your thermostat in the first row and post the result here? ![]()
{% set valves_calibration_common = ['climate.YOUR_THERMOSTAT'] %}
{% set input_calibration_key_word = 'external' %}
{% set value_temperature_sensor = 19 %}
{% set is_native_calibration_trigger = true %}
{% set is_calibration_enabled = true %}
{% set input_calibration_delta = 0.1 %}
{% set is_calibration_trigger = true %}
{% set keep_alive_manufactures = [] %}
{% set is_aggressive_mode_calibration = false %}
{% set n = namespace(dict=[]) %}
{% if is_native_calibration_trigger and is_calibration_enabled %}
{% for valve in valves_calibration_common %}
{% set calibration_entity = device_entities(device_id(valve)) |
expand | selectattr('domain','in','number') |
selectattr('entity_id', 'search', input_calibration_key_word) |
map(attribute='entity_id') | list | first | default(none) %}
{% if calibration_entity is not none %}
{% set calibration_entity_min = state_attr(calibration_entity,'min') | float %}
{% set calibration_entity_max = state_attr(calibration_entity,'max') | float %}
{% set calibration_entity_value_old = states(calibration_entity) | float %}
{% set local_temperature = value_temperature_sensor | float %}
{% set calibration_entity_value_new = local_temperature %}
{% set is_offset_entity = (calibration_entity_min + calibration_entity_max) == 0 and calibration_entity_max < 30 %}
{% set calibration_select = none %}
{% if is_offset_entity %}
{% set thermostat_temperature = state_attr(valve, 'current_temperature') | float %}
{% set calibration_entity_value_new = (-(thermostat_temperature - local_temperature) + calibration_entity_value_old) %}
{% else %}
{% set calibration_select = device_entities(device_id(valve))
| expand
| selectattr('domain','in','select')
| selectattr('attributes.options', 'contains', 'external')
| map(attribute='entity_id') | list | first | default(none) %}
{% endif %}
{% set calibration_entities = device_entities(device_id(valve)) |
expand | selectattr('domain','in','number') |
selectattr('entity_id', 'search', input_calibration_key_word) |
map(attribute='entity_id') | list %}
{% set step = state_attr(calibration_entity, 'step') | float(1) %}
{% if rounding_mode == 'manual' %}
{% set step = input_calibration_step_size | float(1) %}
{% endif %}
{% if is_aggressive_mode_calibration %}
{% set temp_diff = state_attr(valve,'temperature') | float(target_temperature) - local_temperature %}
{% if temp_diff * factor < input_aggressive_mode_range * -1 %}
{% set calibration_entity_value_new = calibration_entity_value_new + input_aggressive_mode_offset * factor %}
{% elif temp_diff * factor > input_aggressive_mode_range %}
{% set calibration_entity_value_new = calibration_entity_value_new - input_aggressive_mode_offset * factor %}
{% endif %}
{% endif %}
{% if step <= 1 and calibration_entity_max | float < 1000 %}
{% set round_size = iif('.' in (step | string), (step | string).split('.')[1] | length, 0) %}
{% set calibration_entity_value_new = ((calibration_entity_value_new | float(0) / step) | round(0) * step) | round(round_size) | float %}
{% else %}
{% set calibration_entity_value_new = calibration_entity_value_new * 100 | int %}
{% endif %}
{% set calibration_entity_value_new = iif(calibration_entity_value_new > calibration_entity_max, calibration_entity_max, calibration_entity_value_new) %}
{% set calibration_entity_value_new = iif(calibration_entity_value_new < calibration_entity_min, calibration_entity_min, calibration_entity_value_new) %}
{% set is_min_difference = (float(calibration_entity_value_old) - float(calibration_entity_value_new)) | abs >= float(input_calibration_delta) %}
{% set keep_alive = false %}
{% if is_calibration_trigger and not is_min_difference and device_attr(valve,'manufacturer') in keep_alive_manufactures %}
{% set last_updated = [calibration_entity] | expand | map(attribute='last_updated') | first %}
{% set keep_alive = as_datetime(current_time_stamp) - timedelta(minutes=20) >= last_updated %}
{% endif %}
Entity: {{ calibration_entity }}
State: {{ states(calibration_entity) }}
New State: {{ calibration_entity_value_new }}
Old State: {{ calibration_entity_value_old }}
Min: {{ calibration_entity_min }}
Max: {{ calibration_entity_max }}
Is Offset Entity: {{ is_offset_entity }}
Select: {{ calibration_select }}
{% if calibration_select is not none %}Select Value: {{ states(calibration_select) }}{% endif %}
{% if is_min_difference or keep_alive %}
{% set n.dict = n.dict + [(valve, [{ 'calibration_entity': calibration_entity,
'value': calibration_entity_value_new,
'select':calibration_select,
'value_old':calibration_entity_value_old }])] %}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{{ dict.from_keys(n.dict) }}
Could you use share the trace log for example here? Just share the link here.




