Skip to content

homebridge-plugins/homebridge-tado

Repository files navigation

homebridge-tado

npm npm GitHub last commit verified-by-homebridge Donate

Info

This plugin has originally been created by Seydx. Donate to him: Donate. It is currently maintained by smart7324.

Homebridge tado is possibly the biggest homebridge plugin for tado devices.

Multiple home Support

The plugin even offers support for multiple houses. So it is finally possible to create multiple houses and control them together.

Full Apple Home Support

Most features that tado offers are fully supported and can be displayed through this plugin in Apple Home. The thermostat buttons themselves have custom characteristics. Full hot water support, weather temperature, solar intensity, weather, tado quick actions, child lock, presence lock, Air Conditioning and much more awaits you with this plugin!

Installation

After Homebridge has been installed:

sudo npm install -g @homebridge-plugins/homebridge-tado@latest

Documentation

Config UI

Unlike other plugins, this plugin allows you to manually enable/disable each zone, thermostat, user and everything you see in Apple Home via config.json.

The config.json offers a lot of configuration options. And if, as recommended, you use Config UI X, the plugin will be all the better.

It supports the full potential of Config UI X and makes configuring the plugin much easier. With it, you can create a "home" in no time and control everything through Config UI X. From logging in to creating config.json works fully automatically with Config UI X!

CustomUI

(In the section below you can find more information about the functions.)

Non Config Ui X User?

The plugin can also work without config ui x or a custom ui. If you want the config.json auto-fill feature, you have to put the following part in your config.json. This will generate a ready to use config.json with all options disabled except thermostats. After the first start, thhis user will get "reconfigure": false. If you want to refresh a home, just enable "reconfigure" for the user and restart homebridge. If you want to add an another home, add the user credentials (username) to the array. The Plugin can handle multiple accounts.

Note:

If you on HOOBS, you need to reboot the HOOBS server to get your first start config changes instead of restarting Homebridge/HOOBS service.

{
  "bridge": {
    ...
  },
  "accessories": [
    ...
  ],
  "platforms": [
    {
      "name": "TadoPlatform",
      "platform": "TadoPlatform",
      "debug": false,
      "user": [
        {
          "username": "mail@example.com"
        }
      ]
    }
  ]
}

See Example Config for more details

Configuration

Authentication

This plugin implements the tado-supported authentication using the Device Code Grant Flow.

During the initial setup, the plugin will prompt you to open a specific URL in your web browser. You will then be asked to log in with your tado account and grant access to the new device. Once this process has been completed successfully, the plugin automatically handles all subsequent authentication tasks, including secure token storage, token refresh, and renewal. This ensures continuous access to the tado API v2 without further user interaction.

Custom API Configuration

For advanced use cases, the plugin allows overriding the default tado API endpoint by specifying a custom API URL through the tadoApiUrl parameter within each home configuration.

Additionally, it is possible to disable the built-in authentication flow entirely by setting the skipAuth parameter to true. When enabled, all API requests will be sent without an authentication token.

Important: Use skipAuth only if you are certain that your setup does not require token-based authentication. Improper use may result in limited or failed communication with the tado API.

For further details and configuration examples, refer to the related discussion:
homebridge-tado issue #176 – Authentication Options

Thermostat

Each zone in the config.json with "type": "HEATING" and "easyMode": false is exposed to Apple Home as a thermostat accessory with the following features:

  • Current Mode: OFF | COOLING | HEATING | AUTO
  • Target Mode: OFF | HEATING | AUTO
  • Curent Temperature
  • Target Temperature
  • Built-in humidity sensor
  • Separate Humidity (if "separateHumidity": true)
  • Separate Temperature Sensor (if "separateTemperature": true)
  • Battery state (if noBattery: false)
  • Delay Switch characteristic with timer (if "delaySwitch": true)
  • Elgato EVE history feature (FakeGato)

Delay Switch The Delay Switch (characteristic) can be used for eg. if you have an automation with Open Window => Thermostat Off / Close Window => Thermostat On and you want avoid multiple state changes, u can set "delaySwitch": truein your config and change the timer (in seconds) via a third party app. If setted correctly, the thermostat will wait eg 60 seconds before switching to ON. It can also be used for own automations if you need a switch that turns off automatically after the given perioswithout affecting your thermostats ("autoOffDelay": true)

Mode / Mode Timer mode for the commands to be sent with. can be 'MANUAL' for manual control until ended by the user, 'AUTO' for manual control until next schedule change in tado° app OR 'TIMER' for manual control until timer ends. modeTimer for the MANUAL mode in minutes.

Each zone in the config.json with type: HEATING and easyMode: true is exposed to Apple Home as a HeaterCooler accessory with the features as above and some minor changes:

  • Active: ON | OFF
  • Target Mode: HEATING
  • NO Elgato EVE history feature (FakeGato)

You can also adjust the minimum temperature step "minStep", minimum temperature value "minValue" or maximum temperature value "maxValue" via config.json.

  • minValue: By default, HEATING devices, also this plugin, supports a minValue of 5° Celsius / 41° Fahrenheit. If your device has a different minValue, you can set it up here. (Incorrect minValue may cause problems!)
  • maxValue: By default, HEATING devices, also this plugin, supports a maxValue of 25° Celsius / 77° Fahrenheit by default. If your device has a different minValue, you can set it up here. (Incorrect maxValue may cause problems!)
  • minStep: Minimum step for temperature adjustment. (Default: 1, must be between 0 - 1)
"homes": [
  {
    "zones": [
      {
        "active": true,
        "id": 32,
        "name": "Living Room",
        "type": "HEATING",
        "mode": "MANUAL",
        "modeTimer": 30,
        "delaySwitch": true,
        "autoOffDelay": false,
        "openWindowSensor": true,
        "openWindowSwitch": false,
        "separateTemperature": false,
        "separateHumidity": true,
        "mode": "MANUAL",
        "modeTimer": 30,
        "minValue": 5,
        "maxValue": 25,
        "minStep": "0.5",
        "easyMode": false,
        "noBattery": false
      }
      ...
    ]
  }
  ...
]

Open Window:

Each zone with "type": "HEATING" also has the possibility to display "OpenWindow" contact sensors or switches in Apple Home with the following features:

  • Switch to enable disable open window for the zone or trigger the open window state of the zone
  • Contact sensor to show the open window state
"homes": [
  {
    "zones": [
      {
        "active": true,
        "name": "Living Room",
        "type": "HEATING",
        "mode": "AUTO"
        "openWindowSensor": true,
        "openWindowSwitch": true
        ...
      }
      ...
    ]
  }
  ...
]

Air Conditioning

Each zone in the config.json with "type": "AIR_CONDITIONING" is exposed to Apple Home as a HeaterCooler accessory with the following features:

  • Current Mode: OFF | IDLE | HEATING | COOLING
  • Target Mode: OFF | HEATING | COOLING | AUTO
  • Current Temperature
  • Target Temperature (Heating/Cooling with CoolingThresholdTemperature support)
  • Built-in humidity sensor
  • Separate Humidity (if "separateHumidity": true)
  • Separate Temperature Sensor (if "separateTemperature": true)
  • Battery state (if "noBattery": false)
  • Delay Switch characteristic with timer (if "delaySwitch": true)
  • Elgato EVE history feature (FakeGato)

AC-Specific Features Air conditioning zones support both heating and cooling modes with dedicated cooling threshold temperature control. Fan speed and swing controls are handled through the tado app, while Apple Home integration focuses on temperature and mode control for optimal compatibility. Note that the RotationSpeed characteristic is not supported for AC units.

Mode / Mode Timer mode for the commands to be sent with. can be 'MANUAL' for manual control until ended by the user, 'AUTO' for manual control until next schedule change in tado° app OR 'TIMER' for manual control until timer ends. modeTimer for the MANUAL mode in minutes.

You can also adjust the minimum temperature step "minStep", minimum temperature value "minValue" or maximum temperature value "maxValue" via config.json if needed.

  • minStep: Minimum step for temperature adjustment. (Default: 1, must be between 0 - 1)
"homes": [
  {
    "zones": [
      {
        "active": true,
        "id": 45,
        "name": "Living Room AC",
        "type": "AIR_CONDITIONING",
        "mode": "MANUAL",
        "modeTimer": 30,
        "delaySwitch": true,
        "autoOffDelay": false,
        "separateTemperature": false,
        "separateHumidity": true,
        "minStep": "1",
        "noBattery": false
      }
      ...
    ]
  }
  ...
]

Hot Water

Each zone in the config.json with "type": HOT_WATER and "boilerTempSupport": false is exposed to Apple Home as a switch ("accTypeBoiler: "SWITCH") or faucet ("accTypeBoiler: "FAUCET") accessory with the following features:

  • Active: ON | OFF

Each zone in the config.json with type: HOT_WATER and boilerTempSupport: true is exposed to Apple Home as a HeaterCooler accessory with the following features:

  • Current Mode: OFF | ON
  • Target Mode: OFF | ON
  • Curent Temperature
  • Target Temperature
  • Separate Temperature Sensor (if separateTemperature: true)

You can also adjust the minimum temperature step "minStep", minimum temperature value "minValue" or maximum temperature value "maxValue" via config.json.

  • minValue: By default, HOT WATER devices, also this plugin, supports a minValue of 30° Celsius / 86° Fahrenheit. If your device has a different minValue, you can set it up here. (Incorrect minValue may cause problems!)
  • maxValue: By default, HOT WATER devices, also this plugin, supports a maxValue of 65° Celsius / 149° Fahrenheit by default. If your device has a different minValue, you can set it up here. (Incorrect maxValue may cause problems!)
  • minStep: Minimum step for temperature adjustment. (Default: 1, must be between 0 - 1)
"homes": [
  {
    "zones": [
      {
        "active": true,
        "id": 1,
        "name": "Bathroom",
        "type": "HOT_WATER",
        "mode": "MANUAL",
        "modeTimer": 30,
        "minValue": 30,
        "maxValue": 65,
        "minStep": "1",
        "separateTemperature": true,
        "boilerTempSupport": false,
        "accTypeBoiler": "SWITCH"
      }
      ...
    ]
  }
  ...
]

Presence

Each user or anyone sensor in the config.json is exposed to Apple Home as a occupancy ("accType: "OCCUPANCY") or motion ("accType: "MOTION") accessory.

"homes": [
  {
    "zones": [ ... ],
    "extras": { ... },
    "presence": {
      "anyone": true,
      "accTypeAnyone": "MOTION",
      "user": [
        {
          "active": true,
          "name": "Buddy 1",
          "accType": "MOTION"
        },
        {
          "active": true,
          "name": "Buddy 2",
          "accType": "OCCUPANCY"
        }
      ]
    }
    ...
  }
]

Weather

Weather settings allow you to display a sensor for temperature, a light bulb ("accTypeSolarIntensity": "LIGHTBULB") or light sensor ("accTypeSolarIntensity": "SENSOR") for sun intensity in Apple Home.

"homes": [
  {
    "zones": [ ... ],
    "extras": { ... },
    "presence": { ... },
    "weather": {
      "temperatureSensor": true,
      "solarIntensity": true,
      "accTypeSolarIntensity": "LIGHTBULB"
    }
    ...
  }
  ...
]
"homes": [
  {
    "geolocation": {
      "longitude": "10.1234567",
      "latitude": "23.4567890"
    },
    "zones": [ ... ],
    "extras": { ... },
    "presence": { ... },
    "weather": { ... }
    ...
  }
  ...
]

Special Settings

Prefer Siri Temperature

The preferSiriTemperature parameter controls how the plugin interprets combined state + temperature updates received from Apple Home. It was introduced in version v8.6.0 to address inconsistent behavior between Siri commands and Apple Home scenes.

Background

Apple Home and Siri both send temperature and state changes simultaneously — especially if a thermostat is currently turned off. Prior to this improvement, the plugin always switched thermostats to AUTO mode when a state update to AUTO and a temperature update was received simultaneously, which occasionally led to conflicts and unexpected behaviour. With preferSiriTemperature, users can fine-tune how these combined updates are handled, allowing a more predictable and user-friendly experience depending on whether they primarily use Siri voice control or Apple Home scenes.

Configuration

To enable this behavior, add the parameter to your configuration:

"preferSiriTemperature": true

This option changes how combined state + temperature updates are interpreted:

Situation Apple Home sends Default behavior With preferSiriTemperature: true
Siri: “Set to 7 °C” (while off) AUTO + 7 °C Switches to Auto Only sets temperature to 7 °C
Scene: “Auto 21 °C” AUTO + 21 °C Switches to Auto Only sets temperature to 21 °C
Scene: “Auto 5 °C” AUTO + 5 °C Switches to Auto Switches to Auto (fallback)
  • By default, the plugin behaves as it did prior to v8.4.0, maintaining full compatibility with existing automations and Apple Home scenes.
  • If you frequently control your thermostats via Siri, enabling preferSiriTemperature may provide a smoother and more natural experience.
  • If your setup relies heavily on scenes or automations, leaving this option disabled is recommended to preserve predictable mode transitions.

Extras

Central Switch

Shows a switch accessory with additional switches in Apple Home which mimics the "Boost" and "Turnoff" switch from tado. It also shows the Heater Running information as a custom characteristic for the month (in hours) and it shows also how many thermostats are in auto, manual or off mode. Its also possible to show a dummy switch withiun the central switch for eg. automation purposes.

"homes": [
  {
    "zones": [ ... ],
    "extras": { ... },
    "presence": { ... },
    "weather": { ... },
    "extras": {
      "centralSwitch": true,
      "runningInformation": true
    }
    ...
  }
  ...
]

Boost Switch

Shows a switch accessory in Apple Home (added to central switch) which mimics the "Boost" switch from tado and switches all heaters to max temperature. Note: Central Switch needs to be truned on.

"homes": [
  {
    "zones": [ ... ],
    "extras": { ... },
    "presence": { ... },
    "weather": { ... },
    "extras": {
      "centralSwitch": true,
      "boostSwitch": true
    }
    ...
  }
  ...
]

Shedule Switch

Shows a switch accessory in Apple Home (added to central switch) which mimics the "Shedule" switch from tado and switches all heaters to their default shedule Note: Central Switch needs to be truned on.

"homes": [
  {
    "zones": [ ... ],
    "extras": { ... },
    "presence": { ... },
    "weather": { ... },
    "extras": {
      "centralSwitch": true,
      "sheduleSwitch": true
    }
    ...
  }
  ...
]

Turnoff Switch

Shows a switch accessory in Apple Home (added to central switch) which mimics the "Turn Off" switch from tado and switches all heaters off Note: Central Switch needs to be truned on.

"homes": [
  {
    "zones": [ ... ],
    "extras": { ... },
    "presence": { ... },
    "weather": { ... },
    "extras": {
      "centralSwitch": true,
      "turnoffSwitch": true
    }
    ...
  }
  ...
]

Dummy Switch

Shows a dummy switch accessory in Apple Home (added to central switch) without any functions. Can be used for eg automation purposes. Note: Central Switch needs to be truned on.

"homes": [
  {
    "zones": [ ... ],
    "extras": { ... },
    "presence": { ... },
    "weather": { ... },
    "extras": {
      "centralSwitch": true,
      "dummySwitch": true
    }
    ...
  }
  ...
]

Presence Lock

Shows a switch with to sub switchs within the main accessory ("accTypePresenceLock": "SWITCH") or security ("accTypePresenceLock": "ALARM") accessory in Apple Home with following features: HOME | AWAY | DISABLED

"homes": [
  {
    "zones": [ ... ],
    "extras": { ... },
    "presence": { ... },
    "weather": { ... },
    "extras": {
      "presenceLock": true,
      "accTypePresenceLock": "SWITCH"
    }
    ...
  }
  ...
]

Child Lock

Each device with "type": "HEATING" and child lock support can be exposed to Apple Home as a "sub" switch to the main switch accessory which can show you if child lock is enabled or you can also enable/disable child lock.

"homes": [
  {
    "zones": [ ... ],
    "extras": { ... },
    "presence": { ... },
    "weather": { ... },
    "extras": {
      "childLockSwitches": [
        {
        "active": true,
        "name": "Living Room Heater",
        "serialNumber": "VA1234567890"
        },
        {
        "active": true,
        "name": "Sleeping Room Heater",
        "serialNumber": "VA1234567890"
        }
      ]
    }
    ...
  }
  ...
]

History Service

Every temperature sensor, humidity sensor, contact sensor, motion sensor, and thermostat provides a history service compatible with the Elgato EVE app. This allows you to view historical data directly within the EVE interface.

During each polling cycle, all history-enabled accessories are updated with the latest sensor values.
These updates are persisted to the local file storage, ensuring that the history remains accurate and consistent even across restarts.

disableHistoryService

For users who do not require historical tracking, the history feature can be completely disabled by setting the following parameter:

"disableHistoryService": true

When this option is enabled, no history entries will be recorded or stored, reducing file I/O and memory usage.

Telegram

You can set up the notifier to get a Telegram notification with customized messages and markdown capability when user arrives/leaves or open window detection triggers. Before you can use the "Telegram Notification" functionality, you need to set up a bot. Here you can find more information: Setup Telegram Bot

Hint: To better customize the messages, special characters can be set so that the plugin replaces them.

@ character will be replaced by the Accessory name

% character will be replaced by the house name

"homes": [
  {
    "zones": [ ... ],
    "extras": { ... },
    "presence": { ... },
    "weather": { ... },
    "telegram": {
      "active": true,
      "token": "136373846:HKAHEVbsuwxl0uCSIi8kdFJsheköjezz72525",
      "chatID": "-123456789",
      "messages": {
        "presence": {
          "user_in": "%: Welcome @",
          "user_out": "%: Bye Bye @",
          "anyone_in": "%: Anyone at home.",
          "anyone_out": "%: Nobody at home."
        },
        "openWindow": {
          "opened": "%: Open Window activated from @!",
          "closed": "%: Open Window deactivated from @!"
        }
      }
    }
  }
  ...
]

Supported clients

This plugin has been verified to work with the latest versions of:

  • Apple Home (Apple HomeKit)
  • 3rd party apps like Elgato Eve
  • Homebridge

tado X Compatibility

tado X devices are not supported.

The new generation of tado X devices uses a completely different API endpoint (https://hops.tado.com) and communication methods that are not compatible with the existing tado API (https://my.tado.com/api/v2) used by this plugin.

Supporting tado X devices would require a full integration of the new API, which is currently not planned due to the significant development effort involved.

For more technical details about the tado X API, see:

If you are using tado X devices, please note that this plugin will not be able to control or display those devices at the moment.

Contributing

You can contribute to this homebridge plugin in following ways:

  • Report issues and help verify fixes as they are checked in.
  • Review the source code changes.
  • Contribute bug fixes.
  • Contribute changes to extend the capabilities

Pull requests are accepted.

Troubleshooting

If you have any issues with the plugin, you can enable the debug mode, which will provide some additional information. This might be useful for debugging issues. Open your config.json and set "debug": true

Disclaimer

All product and company names are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.

About

Homebridge plugin for controlling Tado devices

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published