Set tado offset using other temperature sensor
Temperature difference
Tado valves often measure a temperature that is off by a few degrees. This is because it’s measuring the temp real close to the radiator.
If you have another temperature sensor located in that room you’d like to use that as source.
Tado offset
Luckily Tado has an offset you can set per device, which allows you to tell the Tado that the room temp is off by a few degrees.
This blueprint will set the offset (temperature difference) on a Tado device, using another temperature sensor as source.
When either sensor changes, the automation is triggered.
Note:
Unfortunately Tado has the annoying habit of opening and closing the valve when you change the offset. Especially at night this can be something you’d rather not hear.
This blueprint does not handle this case (I really like simplicity), but there are some that do.
Logs
As it sucks to not see what’s going on, this blueprint will log:
- info message that it has set an offset.
- debug message with all the values
You can set the debuglevel in your configuration.yaml
like so:
logger:
default: error
logs:
blueprints.tado.offset: debug
Devices needed
You’ll need a Tado (obviously) and a separate temperature sensor.
Changelog
2021-07-08 Checking if source sensor is not null, as this could mean that it is offline.
Code
blueprint:
name: Tado temperature offset
description: Ensure the Tado smart valve has the temp of a separate sensor
domain: automation
input:
source_temp_sensor:
name: Source Temperature sensor
description: This sensor will be used as the source.
selector:
entity:
domain: sensor
device_class: temperature
target_tado:
name: Tado
description: The Tado to set the offset on.
selector:
entity:
domain: climate
variables:
target_tado: !input target_tado
source_temp_sensor: !input source_temp_sensor
tado_temp: "{{ state_attr(target_tado, 'current_temperature') | float }}"
current_offset: "{{ state_attr(target_tado, 'offset_celsius') }}"
actual_temp: "{{ states(source_temp_sensor) | float }}"
offset: "{{ ( actual_temp - tado_temp ) | round }}"
calculated_offset: "{{ ( ( actual_temp - tado_temp ) + current_offset ) | round }}"
trigger:
- platform: state
entity_id: !input target_tado
attribute: current_temperature
- platform: state
entity_id: !input source_temp_sensor
condition:
- condition: template
value_template: "{{ offset != 0 }}"
- condition: template
value_template: "{{ actual_temp != 0 }}"
action:
- service: system_log.write
data:
message: >
{{ target_tado }} has temp difference of {{ offset }}. Setting offset to {{ calculated_offset }}
level: info
logger: blueprints.tado.offset
- service: system_log.write
data:
message: >
target: {{ target_tado }}
source: {{ source_temp_sensor }}
temp difference: {{ offset }}
actual_temp: {{ actual_temp }}
tado_temp: {{ tado_temp }}
current_offset: {{ current_offset }}
calculated_offset: {{ calculated_offset }}
level: debug
logger: blueprints.tado.offset
- service: tado.set_climate_temperature_offset
data:
offset: "{{ calculated_offset }}"
entity_id: "{{ target_tado }}"
mode: single