šŸ”„ šŸŒ”ļøTado Offset adjustment (Zigbee thermometers, Start/End times, Switch for only when HEAT)

Blueprint: Update Entity Offset with Switch Control

Tado/Zigbee/Working Hours/ON-OFF Switch

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

This blueprint allows you to dynamically update the temperature offset of a Tado climate entity (or another climate device) based on a Zigbee sensorā€™s readings, while providing control to enable or disable the automation based on the climate entityā€™s operating mode (specifically, when in HEAT mode).

Use Case:

You may want to adjust the temperature offset on your climate entity based on a more accurate or strategically placed sensor. This blueprint enables you to automate that adjustment within a specified time range and only when the heating system is on.

How It Works:

  • Sensor Monitoring: You specify a Zigbee temperature sensor whose state will be monitored.
  • Entity Update: You choose a climate entity (like Tado) whose temperature offset will be adjusted.
  • Threshold Control: You can set a maximum allowed temperature difference between the monitored sensor and the climate entity before triggering an update.
  • Time Range: You can define start and stop times for when the automation should be active.
  • Heat Mode Control: Thereā€™s an optional toggle to enable or disable this automation based on whether the climate entity is in HEAT mode. If the toggle is off, the automation will run regardless of the heating mode.

Inputs:

  • Zigbee Sensor to Monitor: The temperature sensor whose readings will determine the temperature offset.
  • Tado Entity to Update: The climate entity (Tado or similar) whose offset will be updated.
  • Threshold: The temperature difference required to trigger an update.
  • Start Time: Time when the automation starts.
  • End Time: Time when the automation ends.
  • Enable Automation Only When Heating: Boolean to control whether the automation only runs when the climate entity is in HEAT mode.

Example:

You have a Zigbee sensor in your living room and want to adjust the offset on your Tado thermostat based on the difference between the Tadoā€™s temperature reading and the more accurate one from the Zigbee sensor. This automation allows you to apply this adjustment automatically, but only during specific times (e.g., 6 AM to 10 PM) and only when the Tado is heating.

Trigger & Condition:

The automation triggers every N minutes (user defines via selector) and checks the time of day and the heating mode condition (if enabled). If the difference between the monitored sensor and the Tadoā€™s temperature exceeds the threshold, the Tadoā€™s offset is updated.

Action:

The action recalculates and updates the offset value based on the temperature difference between the selected Zigbee sensor and the climate entity.


:mag:Changelog:

V1.0: Sep 30, 2024 - Uploaded initial blueprint.
V2.0: Oct 22, 2024 - Added condition and switch to let in run only when heating + added more traces.
V2.0.1: Nov 7, 2024 - Name changed
V2.1: Nov 14, 2024 - Fixed the ā€œonly when heatingā€ condition
V3.0: Dec 6, 2024 - Added condition and switch to let it run based on userā€™s preferred frequency

Hi DLLFPP, thanks for this blueprint. I will check it out. Did you just update this blueprint? Do you use this blueprint in combination with better thermostat or the advanced heating control blueprint?

Hi!
Iā€™ve been using this blueprint since last cold season but only now I had the idea of sharing it because I thought it was worth it.
I personally use Tado app for scheduling so thatā€™s why I needed an external offset.

Thanks!
Got it to work!

1 Like

Great blueprint. Saves me a lot of templating/testing.
But there is one remark I want to make. The switch was not working in my setup (Tado). After some investigation I found out that the blueprint is checking the state to be ā€˜heatā€™. But as I use the tado app to set up the time schedules, the state of my climate entity stays on ā€˜autoā€™. So the switch in the template does never get triggered.
Therefor I changed the blueprint to check the attribute ā€˜hvac_actionā€™ to be ā€˜heatingā€™.

- condition: template
  value_template: '{{ enable_switch == false }}'
- condition: and
  conditions:
  - condition: template
    value_template: '{{ enable_switch == true }}'
  - condition: state
    entity_id: !input entity_to_update
    attribute: hvac_action
    state: heating
1 Like

Thanks, awesome example of how the community helps and supports each other members.
Iā€™ve updated my GitHub code (see details), you can just re-add the blueprint and overwrite it.
I suggest the same to all of those who downloaded the bp to proceed and update it again.
Thanks!

This automation blueprint is exactly what Iā€™ve been looking for / trying to create. So thank you for sharing.

I do have an issue I canā€™t solve though, if anyone can help.

I have set the automation for my Tado system, when ever I run the trace, I get True/True and a offset figureā€¦ but then the offset of the tado never updates and the temps in the tado app donā€™t match my Zigbee 2ā€™s

I being trying to solve this for a while now, but Iā€™m not getting anywhere. Can anyone help me please.

Thanks.

1 Like

Have you ever tried to run the offset update action manually with a static value, just to see if your Tado integration works correctly? Iā€™m not having this issue honestly.

Iā€™ve recently updated the BP so, just in case, try and add it again so if you have an older version you get the latest code.
Let me know!

Iā€™m running into the same problem as David.buck.
I tried the action in de developers tools as you suggested, that works fine. It looks like the BP doesnā€™t execute the set offset action somehow.

I copied the last part of your code on your Github en replaced it for the code in the BP I downloaded, now it is working as expected.

Code Github:
action:

  • if:
    • condition: numeric_state
      entity_id:
      • !input sensor_to_monitor
      • !input entity_to_update
        value_template: ā€œ{{ (states(sensor_to_monitor)|float - state_attr(entity_to_update, ā€˜current_temperatureā€™)|float)|abs }}ā€
        above: !input threshold
        then:
    • service: tado.set_climate_temperature_offset
      data:
      offset: ā€œ{{( state_attr(entity_to_update, ā€˜offset_celsiusā€™)|float if state_attr(entity_to_update, ā€˜offset_celsiusā€™) is not none else 0 ) + ((states(sensor_to_monitor)|float - state_attr(entity_to_update, ā€˜current_temperatureā€™)|float) if states(sensor_to_monitor) is not none and state_attr(entity_to_update, ā€˜current_temperatureā€™) is not none else 0 ) | round(1)}}ā€
      target:
      entity_id: !input entity_to_update

trace:
stored_traces: 96

Code BP:
action:

  • if:
    • condition: numeric_state
      entity_id:
      • !input sensor_to_monitor
      • !input entity_to_update
        value_template: ā€œ{{ (states(sensor_to_monitor)|float - state_attr(entity_to_update, ā€˜current_temperatureā€™)|float)|abs }}ā€
        above: !input threshold
        then:
    • service: tado.set_climate_temperature_offset
      data:
      offset: ā€œ{{( state_attr(entity_to_update, ā€˜offset_celsiusā€™)|float if state_attr(entity_to_update, ā€˜offset_celsiusā€™) is not none else 0 ) + ((states(sensor_to_monitor)|float - state_attr(entity_to_update, ā€˜current_temperatureā€™)|float) if states(sensor_to_monitor) is not none and state_attr(entity_to_update, ā€˜current_temperatureā€™) is not none else 0 ) | round(1)}}ā€
      target:
      entity_id: !input entity_to_update

trace:
stored_traces: 96

Thatā€™s crazy because itā€™s the very same codeā€¦

Thanks both of you. Iā€™m glad itā€™s not just me doing something wrong.

I would like to try this and copy the code as suggested. Where would I do this, Iā€™m not a coder and do everything via the GUI.

Should I update the BP code or the automation code? Also would you mind telling me how.

Thanks again.

Iā€™ve actually just got it to work, I had added the radiator thermostat entity to the automation, and after some trial and error in the Dev tool area, I found I needed to add the room climate entity. All
5 rooms now work perfectly and have updated offsets. First time theyā€™ve ever read the right temp on the Tado app. :wink:

Thanks for your help and a great Blueprint.

1 Like

Thanks for the blueprint, thatā€™s exactly what I was looking for to avoid using Better Thermostat.
Iā€™ll see how well the blueprint works as it is, but for now Iā€™ve converted it to customise it myself.
What would be desirable is to be able to customise the 15min trigger in the blueprint.
I myself want it to trigger every 60 minutes.

One question:
What are the checks enable_switch == false and enable_switch == true for?

The switch makes the automation run based on the condition:

attribute:hvac_action
state: heating

If turned on, the automation will run only when the heating is active (this to save unnecessary offset calibration when radiator is off). When off, automation will run even when hvac is on off/auto, always still within time ranges defined in the blueprint.

Fot what concerns timing, I tried to let users specify but couldnā€™t get through it. Since it was done a long time ago, Iā€™ll have a look soon.

:rocket: UPDATE: 3.0

Bug fixes:
None

New features:
- Added the possibility to change the frequency of the offset to be calibrated for each automation (before 15 minutes was hardcoded).

Thanks @TDCroPower for the suggestion (here):

Donā€™t forget to re-download this blueprint to update your local file!

1 Like

My bad, I copied the same code twiceā€¦
But anyway, I donā€™t know why my imported blueprint had a different code for action, but I doesnā€™t matter. I re-downloaded your newest version and it works perfect! Thanks so much!!

1 Like

Thanks for the blueprint! Iā€™m playing around with it now but canā€™t seem to get the offset to update (Presume I should be able to see the offset change within the tado app?)

Seems like everything is being fired so not sure where Iā€™m gone wrong, any ideas?

P.s Iā€™m on the new Tado X system.

if
Executed: 21 December 2024 at 15:26:20
Result:
result: true
if/condition/0
[If Outdoor temperature and Loft Smart Radiator Thermostat X are above 1]
Executed: 21 December 2024 at 15:26:20
Result:
result: true
if/condition/0/entity_id/0
[Unknown condition]
Executed: 21 December 2024 at 15:26:20
Result:
result: true
state: 4.210000000000001
if/condition/0/entity_id/1
[Unknown condition]
Executed: 21 December 2024 at 15:26:20
Result:
result: true
state: 4.210000000000001

Huhā€¦I suppose thatā€™s the problem here.
Most likely the system is speaking a different language than mine, but unfortunately I donā€™t have therefore I cannot test/fix anything on this, Iā€™m sorryā€¦