Skip to content

Zone on/off via TadoLocal is not persistent because TadoLocal commands are handled as overlays #43

@Bekkie

Description

@Bekkie

I was puzzled for a while about why zone switching on and off was not behaving as expected.

What I found is that TadoLocal commands appear to be handled by Tado as overlays. Because of that, switching a zone off is not permanent: depending on the Tado manual-mode setting, the zone returns to the SMART schedule when the next time block starts, when a timer expires, or according to the app’s manual control configuration.

This is a problem for my use case, where I use TadoLocal for per-user geofencing. For example:

  • if one of my kids is away, I switch off heating in that specific room
  • if everyone is away, I also switch off the living room

Since my kids are often away for a full day or longer, their rooms should stay off for that whole period.

There is a second related issue: switching a room on again via TadoLocal does not restore the SMART schedule. Instead, it seems to restore the latest temperature target (set by schedule or manual). Then, depending on the Tado app’s manual timer setting, SMART schedule resumes after the configured timeout, at the next timer block, or never.

Expected behavior

  • Switching a zone off should optionally support a persistent off mode
  • Switching a zone on/auto should optionally support returning directly to SMART schedule

Current behavior

  • Zone off is implemented as an overlay, so it is temporary
  • Zone on restores the previous manual target rather than returning to SMART schedule

Proposal

It would be very useful and quite straightforward to implement persistent off and back to auto/SMART schedule functionality via the Tado Cloud API.

Cloud API examples

Switch off permanently for one zone
PUT https://my.tado.com/api/v2/homes/{home_id}/zones/{zone_id}/overlay?ngsw-bypass=true

Payload:

{
  "termination": { "typeSkillBasedApp": "MANUAL" },
  "setting": {
    "type": "HEATING",
    "power": "OFF",
    "temperature": null
  }
}

Switch off permanently for all zones
PUT https://my.tado.com/api/v2/homes/{home_id}/overlay?ngsw-bypass=true

Payload:

{
  "overlays": [
    {
      "overlay": {
        "setting": { "power": "OFF", "type": "HEATING" },
        "termination": { "typeSkillBasedApp": "MANUAL" }
      },
      "room": 1
    },
    {
      "overlay": {
        "setting": { "power": "OFF", "type": "HEATING" },
        "termination": { "typeSkillBasedApp": "MANUAL" }
      },
      "room": 2
    },
    {
      "overlay": {
        "setting": { "power": "OFF", "type": "HEATING" },
        "termination": { "typeSkillBasedApp": "MANUAL" }
      },
      "room": 3
    },
    {
      "overlay": {
        "setting": { "power": "OFF", "type": "HEATING" },
        "termination": { "typeSkillBasedApp": "MANUAL" }
      },
      "room": 4
    }
  ]
}

Return one room to SMART schedule
DELETE https://my.tado.com/api/v2/homes/{home_id}/zones/{zone_id}/overlay?ngsw-bypass=true

Return all rooms to SMART schedule
DELETE https://my.tado.com/api/v2/homes/{home_id}/overlay?rooms=1,2,3,4&ngsw-bypass=true

note: not sure what "?ngsw-bypass=true" does

Possible API design options

Option 1: add dedicated routes

PUT /zones/schedule/off
PUT /zones/schedule/auto
PUT /zones/{zone_id}/schedule/off
PUT /zones/{zone_id}/schedule/auto

Option 2: extend existing zone switching with a cloud parameter

Examples:

/zones/3/set?temperature=-1&cloudcall=true   -> send to cloud instead of HomeKit
/zones/3/set?temperature=0&cloudcall=true    -> send to cloud instead of HomeKit
/zones/3/set?temperature=12&cloudcall=true   -> cloud call ignored

I understand this would require a cloud API call, so it may not fit the original local-only design. Still, for geofencing and longer absences, persistent off / return-to-auto behavior would be very useful.

Any thoughts on this topic?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions