@homebridge-plugins/homebridge-tado
Version:
Homebridge plugin for controlling tado° devices.
889 lines • 36.3 kB
JSON
{
"pluginAlias": "TadoPlatform",
"pluginType": "platform",
"singular": true,
"customUi": true,
"footerDisplay": "For documentation please see [GitHub repository](https://github.com/homebridge-plugins/homebridge-tado)",
"schema": {
"type": "object",
"properties": {
"name": {
"title": "Name",
"type": "string",
"default": "TadoPlatform",
"description": "Name for the log."
},
"debug": {
"title": "Debug",
"type": "boolean",
"description": "Enables additional output in the log."
},
"homes": {
"title": " ",
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"title": "Home ID",
"description": "The id of your Home. Has to be the exact same id as in the web app of tado.",
"type": "integer"
},
"name": {
"title": "Home Name",
"description": "The name of your Home. Has to be the exact same name as in the web app of tado.",
"type": "string",
"required": true
},
"username": {
"title": "Username",
"type": "string",
"description": "The user name that you use for the app and the web app of tado.",
"required": true
},
"tadoApiUrl": {
"title": "tado API URL",
"type": "string",
"description": "Optional: Use a custom tado API url (e.g. http://localhost:8080)."
},
"skipAuth": {
"title": "Skip Authentication",
"type": "boolean",
"description": "Optional: Skip authentication for tado API."
},
"polling": {
"title": "Polling",
"description": "The polling interval in seconds (recommended value: 300).",
"type": "integer",
"default": 300,
"minimum": 30
},
"temperatureUnit": {
"title": "Temperature Unit",
"description": "Temperature Unit for accessories in Apple Home exposed by this plugin.",
"type": "string",
"default": "CELSIUS",
"oneOf": [
{
"title": "Celsius",
"enum": [
"CELSIUS"
]
},
{
"title": "Fahrenheit",
"enum": [
"FAHRENHEIT"
]
}
]
},
"geolocation": {
"title": "Location",
"type": "object",
"properties": {
"longitude": {
"title": "Longitude",
"type": "string",
"description": "Longitude coordinate of your home."
},
"latitude": {
"title": "Latitude",
"type": "string",
"description": "Latitude coordinate of your home."
}
}
},
"presence": {
"title": "Presence",
"type": "object",
"properties": {
"anyone": {
"title": "Anyone Sensor",
"type": "boolean",
"description": "Exposes Anyone Sensor to Apple Home."
},
"accTypeAnyone": {
"title": "Anyone Accessory Type",
"type": "string",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].presence.anyone } catch(e){ return false }"
},
"oneOf": [
{
"title": "Occupancy",
"enum": [
"OCCUPANCY"
]
},
{
"title": "Motion",
"enum": [
"MOTION"
]
}
],
"description": "The accessory type for 'anyone' sensor."
},
"user": {
"title": "User",
"type": "array",
"items": {
"type": "object",
"properties": {
"active": {
"title": "Active",
"type": "boolean",
"description": "If enabled, a new motion/occupancy sensor for this user will be exposed to Apple Home."
},
"name": {
"title": "Name",
"type": "string",
"description": "Name of the user for the motion/occupancy sensor.",
"required": true
},
"accType": {
"title": "Accessory Type",
"type": "string",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].presence.user[arrayIndices[1]].active } catch(e){ return false }"
},
"oneOf": [
{
"title": "Occupancy",
"enum": [
"OCCUPANCY"
]
},
{
"title": "Motion",
"enum": [
"MOTION"
]
}
],
"description": "The accessory type of the device."
}
}
}
}
}
},
"weather": {
"title": "Weather",
"type": "object",
"properties": {
"temperatureSensor": {
"title": "Temperature Sensor",
"type": "boolean",
"description": "If enabled, a temperature sensor for the weather will be exposed to Apple Home."
},
"solarIntensity": {
"title": "Solar Intensity",
"type": "boolean",
"description": "If enabled, a lightbulb accessory for the solar intensity will be exposed to Apple Home."
},
"accTypeSolarIntensity": {
"title": "Solar Intensity Accessory Type",
"type": "string",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].weather.solarIntensity } catch(e){ return false }"
},
"oneOf": [
{
"title": "Lightbulb",
"enum": [
"LIGHTBULB"
]
},
{
"title": "Sensor",
"enum": [
"SENSOR"
]
}
],
"description": "The accessory type of the device."
}
}
},
"extras": {
"title": "Extras",
"type": "object",
"properties": {
"centralSwitch": {
"title": "Central Switch",
"type": "boolean",
"description": "If enabled, a switch will be exposed to Apple Home to enable/disable all thermostats/boiler at once."
},
"runningInformation": {
"title": "Heat Running Information",
"type": "boolean",
"description": "If enabled, the central switch will get custom characteristics to show a summary of the heat running in hours.",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].extras.centralSwitch } catch(e){ return false }"
}
},
"presenceLock": {
"title": "Presence Lock",
"type": "boolean",
"description": "If enabled, a Home/Away switch will be exposed to Apple Home."
},
"accTypePresenceLock": {
"title": "Presence Lock Accessory Type",
"type": "string",
"oneOf": [
{
"title": "Security System",
"enum": [
"ALARM"
]
},
{
"title": "Switch",
"enum": [
"SWITCH"
]
}
],
"description": "The accessory type of the presence lock."
},
"boostSwitch": {
"title": "Boost Switch",
"type": "boolean",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].extras.centralSwitch } catch(e){ return false }"
},
"description": "If enabled, a boost heat switch will be added to the central switch."
},
"sheduleSwitch": {
"title": "Shedule Switch",
"type": "boolean",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].extras.centralSwitch } catch(e){ return false }"
},
"description": "If enabled, a shedule heat switch will be added to the central switch."
},
"turnoffSwitch": {
"title": "Turn Off Switch",
"type": "boolean",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].extras.centralSwitch } catch(e){ return false }"
},
"description": "If enabled, a turn off heat switch will be added to the central switch."
},
"dummySwitch": {
"title": "Dummy Switch",
"type": "boolean",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].extras.centralSwitch } catch(e){ return false }"
},
"description": "If enabled, a dummy switch (for eg automation purposes) will be added to the central switch."
},
"childLockSwitches": {
"title": "Child Lock Switches",
"type": "array",
"items": {
"type": "object",
"properties": {
"active": {
"title": "Active",
"type": "boolean",
"description": "If enabled, a child lock switch for this device will be exposed to Apple Home."
},
"name": {
"title": "Name",
"type": "string",
"description": "Name for the Child Lock Switch.",
"required": true
},
"serialNumber": {
"title": "Device Serial Number",
"type": "string",
"description": "Enter the serial number of the device from which you want to display a 'Child Lock Switch' in Apple Home. (only for devices with child lock support)",
"required": true,
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].extras.childLockSwitches[arrayIndices[1]].active } catch(e){ return false }"
}
}
}
}
}
}
},
"zones": {
"title": "Zones",
"type": "array",
"items": {
"type": "object",
"properties": {
"active": {
"title": "Active",
"type": "boolean",
"description": "If enabled, a new thermostat/boiler switch will be exposed to Apple Home."
},
"id": {
"title": "ID",
"type": "integer",
"description": "Zone ID. Has to be the exact same id as in the web app of tado.",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].zones[arrayIndices[1]].active } catch(e){ return false }"
}
},
"name": {
"title": "Name",
"type": "string",
"description": "Zone Name. Has to be the exact same name as in the web app of tado.",
"required": true
},
"delaySwitch": {
"title": "Delay Switch Chracteristic",
"type": "boolean",
"description": "If enabled, additional delay switch characteristic for each zone will be within the accessory. If the delay switch is turned on, the thermostat/boiler will not change state until delay is turned off (timer adjustable within accessory). "
},
"autoOffDelay": {
"title": "Auto Off",
"type": "boolean",
"description": "If enabled, the delay switch will not affect the thermostats and it automatically turns off after the period has expired."
},
"openWindowSensor": {
"title": "Open Window Sensor",
"type": "boolean",
"description": "If enabled, additional window contact accessory for each zone will be exposed to Apple Home which triggers if tado detects an open window."
},
"openWindowSwitch": {
"title": "Open Window Switch",
"type": "boolean",
"description": "If enabled, additional window switch accessory for each zone will be exposed to Apple Home to trigger and enable/disable open window."
},
"separateTemperature": {
"title": "Separate Temperature Sensors",
"type": "boolean",
"description": "If enabled, the temperature sensor will be shown as extra accessory."
},
"separateHumidity": {
"title": "Separate Humidity Sensors",
"type": "boolean",
"description": "If enabled, the humidity sensor will be shown as extra accessory.",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].zones[arrayIndices[1]].type === 'HEATING' } catch(e){ return false }"
}
},
"minStep": {
"title": "Temperature Step",
"type": "number",
"description": "Minimum step for temperature adjustment. (Default: 0.5, must be between 0 - 1)"
},
"minValue": {
"title": "Minimum Temperature",
"type": "integer",
"description": "Minimum adjustable temperature value (in celsius/fahrenheit). HEATING devices also this plugin, supports a minValue of 5° Celsius / 41° Fahrenheit by default. HOT WATER devices, also this plugin, supports a minValue of of 30° Celsius / 86° Fahrenheit by default. If your device has a different minValue, you can set it up here. (Incorrect minValue may cause problems!)"
},
"maxValue": {
"title": "Maximum Temperature",
"type": "integer",
"description": "Maximum adjustable temperature value (in celsius/fahrenheit). HEATING devices also this plugin, supports a maxValue of 25° Celsius / 77° Fahrenheit by default. HOT WATER devices, also this plugin, supports a maxValue of of 65° Celsius / 149° Fahrenheit by default. If your device has a different maxValue, you can set it up here. (Incorrect maxValue may cause problems!)"
},
"mode": {
"title": "Termination Mode",
"type": "string",
"required": true,
"oneOf": [
{
"title": "Auto",
"enum": [
"AUTO"
]
},
{
"title": "Manual",
"enum": [
"MANUAL"
]
},
{
"title": "Timer",
"enum": [
"TIMER"
]
},
{
"title": "Custom",
"enum": [
"CUSTOM"
]
}
],
"description": "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, 'TIMER' for manual control until timer ends or 'CUSTOM' for a mixed use of MANUAL (off) and AUTO (on). (CUSTOM is only for HEATING types with easyMode enabled and HOT_WATER types with temperature support)."
},
"modeTimer": {
"title": "Timer",
"description": "Timer for the manual mode in minutes.",
"type": "integer",
"minimum": 1,
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].zones[arrayIndices[1]].mode === 'TIMER' } catch(e){ return false }"
}
},
"easyMode": {
"title": "Simple Target Mode",
"type": "boolean",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].zones[arrayIndices[1]].type === 'HEATING' } catch(e){ return false }"
},
"description": "If enabled, only 'ON | OFF' target modes are visible for the thermostat."
},
"noBattery": {
"title": "No Battery",
"type": "boolean",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].zones[arrayIndices[1]].type === 'HEATING' } catch(e){ return false }"
},
"description": "If enabled, the battery indicator will be removed from Apple Home."
},
"type": {
"title": "Type",
"type": "string",
"required": true,
"oneOf": [
{
"title": "Heating",
"enum": [
"HEATING"
]
},
{
"title": "Hot Water",
"enum": [
"HOT_WATER"
]
},
{
"title": "Air Conditioning",
"enum": [
"AIR_CONDITIONING"
]
}
],
"description": "Zone Heating type."
},
"boilerTempSupport": {
"title": "Boiler (Hot Water) with temperature adjustment",
"type": "boolean",
"description": "Enable this if your can also adjust the temperature from your hot water."
},
"accTypeBoiler": {
"title": "Boiler (Hot Water) Accessory Type",
"type": "string",
"oneOf": [
{
"title": "Faucet",
"enum": [
"FAUCET"
]
},
{
"title": "Switch",
"enum": [
"SWITCH"
]
}
],
"description": "Boiler accessory type."
}
}
}
},
"telegram": {
"titel": "Telegram",
"type": "object",
"properties": {
"active": {
"title": "Active",
"description": "Activates Telegram.",
"type": "boolean",
"required": true,
"default": false
},
"token": {
"title": "Token",
"type": "string",
"description": "Telegram Bot Token.",
"required": true
},
"chatID": {
"title": "Chat ID",
"type": "string",
"description": "Telegram Chat ID.",
"required": true
},
"messages": {
"title": "Messages",
"type": "object",
"properties": {
"presence": {
"title": "Presence",
"type": "object",
"properties": {
"user_in": {
"title": "User Detected",
"type": "string",
"description": "Message if user detected. (Hint: @ will be replaced with accessory name)"
},
"user_out": {
"title": "User Not Detected",
"type": "string",
"description": "Message if user not detected anymore. (Hint: @ will be replaced with accessory name)"
},
"anyone_in": {
"title": "Anyone Detected",
"type": "string",
"description": "Message if anyone detected."
},
"anyone_out": {
"title": "Anyone Not Detected",
"type": "string",
"description": "Message if nobody detected."
}
}
},
"openWindow": {
"title": "Open Window",
"type": "object",
"properties": {
"opened": {
"title": "Window Opened",
"type": "string",
"description": "Message if window is opened. (Hint: @ will be replaced with accessory name)"
},
"closed": {
"title": "Window Closed",
"type": "string",
"description": "Message if window is closed. (Hint: @ will be replaced with accessory name)"
}
}
}
}
}
}
}
}
}
},
"disableHistoryService": {
"title": "Disable History Service",
"type": "boolean",
"description": "Optional: Skip creation of history service."
},
"preferSiriTemperature": {
"title": "Prefer Siri Temperature Changes",
"type": "boolean",
"description": "Prefer temperature changes when the state auto is sent simultaneously with a temperature change. Default: false."
}
}
},
"layout": [
"name",
"debug",
"disableHistoryService",
"preferSiriTemperature",
{
"key": "homes",
"type": "array",
"orderable": false,
"buttonText": "Add Home",
"items": [
"homes[].name",
"homes[].polling",
"homes[].temperatureUnit",
{
"key": "homes[]",
"title": "Authentication",
"type": "section",
"expandable": true,
"expanded": false,
"orderable": false,
"items": [
"homes[].id",
"homes[].tadoApiUrl",
"homes[].skipAuth",
"homes[].username"
]
},
{
"key": "homes[].zones",
"type": "section",
"title": "Zones",
"expandable": true,
"expanded": false,
"orderable": false,
"buttonText": "Add Zone",
"items": [
{
"key": "homes[].zones[]",
"items": [
{
"title": "Zone",
"orderable": false,
"items": [
"homes[].zones[].active",
"homes[].zones[].name",
"homes[].zones[].type",
"homes[].zones[].mode",
"homes[].zones[].modeTimer"
]
},
{
"title": "Options",
"expandable": true,
"expanded": false,
"orderable": false,
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].zones[arrayIndices[1]].active } catch(e) { return false };"
},
"items": [
"homes[].zones[].id",
"homes[].zones[].easyMode",
"homes[].zones[].noBattery",
{
"title": "Temperature",
"orderable": false,
"expandable": true,
"expanded": false,
"type": "section",
"items": [
"homes[].zones[].minValue",
"homes[].zones[].maxValue",
"homes[].zones[].minStep"
]
},
{
"title": "Hot Water",
"orderable": false,
"expandable": true,
"expanded": false,
"type": "section",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].zones[arrayIndices[1]].type === 'HOT_WATER' } catch(e){ return false }"
},
"items": [
"homes[].zones[].boilerTempSupport",
"homes[].zones[].accTypeBoiler"
]
},
{
"title": "Open Window",
"orderable": false,
"expandable": true,
"expanded": false,
"type": "section",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].zones[arrayIndices[1]].type === 'HEATING' } catch(e){ return false }"
},
"items": [
"homes[].zones[].openWindowSensor",
"homes[].zones[].openWindowSwitch"
]
},
{
"title": "Sensors",
"orderable": false,
"expandable": true,
"expanded": false,
"type": "section",
"items": [
"homes[].zones[].separateTemperature",
"homes[].zones[].separateHumidity"
]
},
{
"title": "Delay",
"orderable": false,
"expandable": true,
"expanded": false,
"type": "section",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].zones[arrayIndices[1]].type === 'HEATING' } catch(e){ return false }"
},
"items": [
"homes[].zones[].delaySwitch",
"homes[].zones[].autoOffDelay"
]
}
]
}
]
}
]
},
{
"key": "homes[]",
"type": "section",
"title": "Presence",
"expandable": true,
"expanded": false,
"orderable": false,
"items": [
{
"title": "Anyone",
"orderable": false,
"items": [
"homes[].presence.anyone",
"homes[].presence.accTypeAnyone"
]
},
{
"key": "homes[].presence.user",
"title": "User",
"expandable": true,
"expanded": false,
"orderable": false,
"buttonText": "Add User",
"items": [
{
"key": "homes[].presence.user[]",
"items": [
"homes[].presence.user[].active",
"homes[].presence.user[].name",
"homes[].presence.user[].accType"
]
}
]
}
]
},
{
"key": "homes[]",
"type": "section",
"title": "Weather",
"expandable": true,
"expanded": false,
"orderable": false,
"items": [
"homes[].weather.temperatureSensor",
"homes[].weather.solarIntensity",
"homes[].weather.accTypeSolarIntensity",
{
"title": "Location",
"condition": {
"functionBody": "return false;"
},
"orderable": false,
"items": [
"homes[].geolocation.longitude",
"homes[].geolocation.latitude"
]
}
]
},
{
"key": "homes[]",
"type": "section",
"title": "Extras",
"expandable": true,
"expanded": false,
"orderable": false,
"items": [
{
"title": "Central Switch",
"type": "section",
"expandable": true,
"expanded": false,
"orderable": false,
"items": [
"homes[].extras.centralSwitch",
"homes[].extras.runningInformation",
"homes[].extras.boostSwitch",
"homes[].extras.sheduleSwitch",
"homes[].extras.turnoffSwitch",
"homes[].extras.dummySwitch"
]
},
{
"title": "Presence Lock",
"type": "section",
"expandable": true,
"expanded": false,
"orderable": false,
"items": [
"homes[].extras.presenceLock",
"homes[].extras.accTypePresenceLock"
]
},
{
"key": "homes[].extras.childLockSwitches",
"title": "Child Lock",
"buttonText": "Add Switch",
"type": "section",
"expandable": true,
"expanded": false,
"orderable": false,
"items": [
"homes[].extras.childLockSwitches[].active",
"homes[].extras.childLockSwitches[].name",
"homes[].extras.childLockSwitches[].serialNumber"
]
}
]
},
{
"key": "homes[]",
"title": "Telegram",
"type": "section",
"orderable": false,
"expandable": true,
"expanded": false,
"items": [
"homes[].telegram.active",
{
"title": "Credentials",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].telegram.active } catch(e) { return false };"
},
"orderable": false,
"items": [
"homes[].telegram.token",
"homes[].telegram.chatID"
]
},
{
"title": "Messages",
"condition": {
"functionBody": "try { return model.homes[arrayIndices[0]].telegram.active } catch(e) { return false };"
},
"orderable": false,
"items": [
{
"key": "homes[].telegram",
"type": "section",
"title": "Presence",
"expandable": true,
"expanded": false,
"orderable": false,
"items": [
"homes[].telegram.messages.presence.user_in",
"homes[].telegram.messages.presence.user_out",
"homes[].telegram.messages.presence.anyone_in",
"homes[].telegram.messages.presence.anyone_out"
]
},
{
"key": "homes[].telegram",
"type": "section",
"title": "Open Window",
"expandable": true,
"expanded": false,
"orderable": false,
"items": [
"homes[].telegram.messages.openWindow.opened",
"homes[].telegram.messages.openWindow.closed"
]
}
]
}
]
}
]
}
]
}