Download OpenAPI specification:Download
The REST API for Turn is split into two domains; public and private. The private API is used to set the page configuration and other device settings such as network configuration, sleep timeout etc. The public API exposes all the control aspects of turn and is the focus of this document.
The public API is served at http://{host}:55555/api/v1.0/ on each Turn device and returns responses in JSON format. Each controllable page on Turn (e.g. lighting scenes, temperature etc) contains one or more channels exposed on the control/channels endpoint. Conceptually, a channel is a communication pathway for a single piece of data, e.g. selected scene, brightness percentage value or setpoint temperature. Pages have an ID of the format {pageType}/{pageNumber} e.g. light/1 and the channels associated with that page have an ID made up of {channelType}/{pageNumber}/{channelNumber} e.g. light/1/1.
Page Type | Section | Number of Pages | Channels per page | Channel IDs |
---|---|---|---|---|
Light | Lights | 0-5 | 1 | LIGHT/x/1 |
Light Scenes | Lights | 0-1 | 1 | LIGHT_SCENES/1/1 |
Shade | Shades | 0-5 | 1 | SHADE/x/1 |
Shade Scenes | Shades | 0-1 | 1 | SHADE_SCENES/1/1 |
Temperature | Climate | 0-1 | 2 | TEMPERATURE/1/1-2 |
Humidity | Climate | 0-1 | 2 | HUMIDITY/1/1-2 |
Modes | Climate | 0-1 | 1 | MODES/1/1 |
Fans | Climate | 0-1 | 1 | FAN/1/1 |
Air Quality | Climate | 0-1 | 1 | INFO/1/1 |
Air Pressure | Climate | 0-1 | 1 | INFO/2/1 |
Sources | Media | 0-1 | 10 | MEDIA/1/1-6, SOURCE/1/1-4 |
Table 1 - Page and Channel Configuration
There are limits on the maximum number of pages of each type, although every page is optional and may therefore be omitted if that page is not required. The channel configuration for a given page type is generally fixed. Table 1 shows the maximum number of pages that are allowed in the configuration and outlines some details on the channel configuration for each page type.
The Turn configuration describes the details of each how each page is set up and can be obtained from the REST API. The properties that may appear in the page configuration are given in Table 2.
Property | Description | Permitted Values |
---|---|---|
id | The page id. This is unique and takes the format of pageType/pageNumber e.g. light/1 is the first light page. | light/<1-5>, shade/<1-5>, light_scenes/1, shade_scenes/1, fan/1, temperature/1, info/<1-2>, modes/1, humidity/1, source/1 |
name | The name of the page. This is for reference and does not appear on screen. | Unrestricted |
icon | The name of the icon that appears on the page. | air_pressure, air_quality, window_treatments, blackout_blinds, blinds, curtains, down_lights, fans, lighting_scenes, main_lights, modes, underfloor_heating, water_drop, table_lights, pendant, wall_lights, floor_lights, venetian, volume |
pageType | The page type as described above in id. | See all valid ids |
dialChannel | The channel that is associated with the hardware dial. | Any channel id |
channels | A list of the control channels for that page. | See channels table |
properties | Properties that govern the appearance or behaviour of the page. | Not used |
sources | Specific to the sources page. The list of selectable sources. | See sources table |
Table 2 - Page Properties
Each page may have one or more channels as shown in the channels property list. A channel has several properties such as ID, data type and write permissions. These are detailed in Table 3 and can be retrieved for all channels or for an individual channel using the REST API. A channel also contains a state object which maps out the last values sent to that channel. A channel state can be retrieved with a GET request and modified with a PUT request (assuming it has the write permission) or a POST action. The REST API also exposes SSE feeds for subscribing to each channel, as well as feeds for groups of channels such as channels of a given channel_type, or all channels.
Property | Description | Permitted Values |
---|---|---|
id | The channel id. This is unique and takes the format pageType/pageNumber/channelNumber. | See tables 1 & 2 |
description | A description of the channel. By default this matches the id. | Unrestricted |
channelType | The channel type determines which data types can be sent along the channel and aids how the data is interpreted. e.g. setpoint_temperature and current_temperature are different channel types which share the same data type of temperature. | light, shade, light_scenes, shade_scenes, fan, modes, current_temperature, setpoint_temperature, current_humidity, setpoint_humidity, info, media_volume, media_transport_play_pause, media_transport_play_stop, media_transport_pause_unpause, media_transport_skip, media_mute, media_source_select, media_artwork, media_metadata, generic_string, generic_number, generic_switch |
dataType | The data type determines what data can be sent on the channel. Some data types have intrinsic limits such as percentage (0-100), preset (1-max_preset) | percentage (0-100), temperature (0-212), preset (0-8), number, string, switch (true/false), action (string payload), image (string url) |
channel_permission | This is the read/write permission as viewed by the Turn device i.e. a channel which can be modified by the dial is "write". A channel which only displays incoming data is "read" | read, write or read_write |
properties | A list of properties specific to that channel e.g. min, max, units, isSwitched | |
state | A mapping of a control endpoint to a value | value, on |
Table 3 - Channel Properties
It should be noted that each channel on a page is usually configured with a specific id and type using the options from Table 3. The specific configuration for each channel is given in Table 4.
Channel ID | Channel Type | Data Type |
---|---|---|
LIGHT/1/1 | light | percent |
SHADE/1/1 | shade | percent |
LIGHT_SCENES/1/1 | light_scenes | preset |
SHADE_SCENES/1/1 | shade_scenes | preset |
FAN/1/1 | fan | preset |
MODES/1/1 | modes | preset |
INFO/1/1 | generic_string | string |
INFO/1/1 | generic_string | string |
TEMPERATURE/1/1 | setpoint_temperature | temperature |
TEMPERATURE/1/2 | current_temperature | temperature |
HUMIDITY/1/1 | setpoint_humidity | percent |
HUMIDITY/1/2 | current_humidity | percent |
MEDIA/1/1 | media_volume | percent |
MEDIA/1/2 | media_transport_play_pause | switch |
MEDIA/1/3 | media_transport_play_stop | switch |
MEDIA/1/4 | media_transport_pause_unpause | switch |
MEDIA/1/5 | media_transport_skip | action |
MEDIA/1/6 | media_mute | switch |
SOURCE/1/1 | media_source_select | preset |
SOURCE/1/2 | media_artwork | image (URL) |
SOURCE/1/3 | media_metadata | string (Artist) |
SOURCE/1/4 | media_metadata | string (Track) |
Table 4 - Specific Channel Configurations
Although a channel conceptually transfers a single piece of data, the REST API may expose multiple equivalent states for any given channel as well as some actions. These multiple interpretations of the channel data are known as control endpoints (See Tables 5 and 6). For example, the light/1/1 channel transfers a percentage data type which is exposed as a state called ‘value’. It also exposes an ‘on’ state, and may be modified with an ‘increment_decrement’ action. These states and actions are synchronised with each other so that a change to one will automatically update the others, maintaining a consistent view of the channel data. For example, setting the ‘value’ from 0 to 20 will also change the ‘on’ state to true.
Endpoint | Type | Payload |
---|---|---|
value | state | determined by channel data_type |
on | state | true or false |
increment_decrement | action | 0 for decrement, 1 for increment |
play_action | action | 1 |
pause_action | action | 1 |
ppm_string | state | string |
pa_string | state | string |
Table 5 - Endpoint details
The ppm_string and pa_string endpoints receive a value as a string, integer or float, round it to an integer using half-up rounding and convert it to a string appended with “ppm” or "Pa" respectively. Making a GET request on these control endpoints will return the converted string value rather than the raw string, integer or float.
Channel | value | on | inc_dec | other |
---|---|---|---|---|
light/x/1 | Y | Y | Y | - |
shade/x/1 | Y | Y | Y | - |
light_scenes/1/1 | Y | Y | Y | - |
shade_scenes/1/1 | Y | Y | Y | - |
temperature/1/1 (setpoint) | Y | N | Y | - |
temperature/1/2 (current) | Y | N | N | - |
humidity/1/1 (setpoint) | Y | N | Y | - |
humidity/1/2 (current) | Y | N | N | - |
fan/1/1 | Y | Y | Y | - |
modes/1/1 | Y | Y | Y | - |
info/1/1 (air quality) | Y | N | N | ppm_string |
info/2/1 (air pressure) | Y | N | N | pa_string |
media/1/1 | Y | N | Y | - |
media/1/2 (play/pause) | Y | N | N | play_action, pause_action |
media/1/3 (play/stop) | Y | N | N | - |
media/1/4 (pause/unpause) | Y | N | N | - |
media/1/5 (next/prev) | Y | N | N | - |
media/1/6 (mute) | Y | N | N | - |
source/1/1 (select) | Y | N | N | - |
source/1/2 (artwork) | Y | N | N | - |
source/1/3 (metadata 1) | Y | N | N | - |
source/1/4 (metadata 2) | Y | N | N | - |
Table 6 - Endpoints for each channel.
When the source page is configured, the page includes an additional 'sources' property listing up to 8 selectable sources. For each source the following properties are given:
Property | Description | Permitted Values |
---|---|---|
name | Source name | Unrestricted |
power | Whether the source has a power button | true/false |
transport | Whether the source has transport controls | true/false |
controlType | How the source is controlled | main_bus or sonos |
Table 7 - Source configuration
When the source page is configured with sources that take transport controls, there are three different methods of handling play and pause. It is recommended to select one of these methods to control play/pause state (usually option 1), however all methods keep in sync and will maintain a consistent state for play/pause.
Channel media/1/2 has a ‘value’ state of true for play and false for pause. This channel may be used on its own to control play and pause using the standard GET and PUT requests for channel state as well as the SSE feed for subscribing to events.
Channel media/1/2 also exposes two outgoing action control endpoints which publish a single event for play_action and a single event for pause_action, both have a payload of “1” and will be received by subscribing to the SSE feed for media/1/2. They can be used to control a Turn device by sending a POST request to http://{host}:55555/api/v1.0/control/channels/media/1/2/action with body {“play_action”:”1”} for example.
The final method is to use media/1/3 (play/stop) and media/1/4 (pause/unpause) in tandem. In order to be in the playing state, media/1/3 must have a ‘value’ of true and media/1/4 must have a ‘value’ of false. All other combinations are considered to be paused. These channels can be used with the standard GET and PUT requests for channel state as well as the SSE feed for subscribing to events.
Information and configuration specific to Turn integrations will be served at http://{host}:55555/api/v1.0/integrations. Currently, the only integration available is Sonos which exposes an endpoint for receiving the enabled status of next/previous transport controls in line with the Sonos control API policy. See API examples below for further detail.
All http requests on the public API require the header to contain a key of “Sender-Id” with an identifier as the value. This key-value pair is included in the SSE events to identify to source of the event. The identifier can be any non-empty string. This enables users of the public API to ignore SSE events containing a Sender-Id that matches their own identifier and thus avoids creation of feedback loops.
All SSE endpoints emit a heartbeat event every 30 seconds. this takes the format of an SSE comment (: heartbeat
). This can either be ignored or used to monitor the health of a connection.
Get all the channels
Accept | string Example: application/json |
Sender-id | string Example: TybaHome Any non-empty string to identify the request sender. |
[- {
- "id": "light/1/1",
- "description": "LIGHT/1/1",
- "channelType": "light",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Main"
}, - "state": {
- "value": 0,
- "on": "false"
}
}, - {
- "id": "light/2/1",
- "description": "LIGHT/2/1",
- "channelType": "light",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Floor"
}, - "state": {
- "value": 0,
- "on": "false"
}
}, - "...",
- {
- "id": "modes/1/1",
- "description": "MODES/1/1",
- "channelType": "modes",
- "channelPermission": "read_write",
- "dataType": "preset",
- "properties": {
- "count": "5",
- "names": "Off,Heat,Cool,Away,Home"
}, - "state": {
- "value": 0,
- "on": "false"
}
}
]
Get all the channels for a given page type
channelType required | string The channel type |
Accept | string Example: application/json |
Sender-id | string Example: TybaHome Any non-empty string to identify the request sender. |
[- {
- "id": "light/1/1",
- "description": "LIGHT/1/1",
- "channelType": "light",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Main"
}, - "state": {
- "value": 0,
- "on": "false"
}
}, - {
- "id": "light/2/1",
- "description": "LIGHT/2/1",
- "channelType": "light",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Floor"
}, - "state": {
- "value": 0,
- "on": "false"
}
}, - {
- "id": "light/3/1",
- "description": "LIGHT/3/1",
- "channelType": "light",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Table"
}, - "state": {
- "value": 0,
- "on": "false"
}
}, - {
- "id": "light/4/1",
- "description": "LIGHT/4/1",
- "channelType": "light",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Downlights"
}, - "state": {
- "value": 0,
- "on": "false"
}
}, - {
- "id": "light/5/1",
- "description": "LIGHT/5/1",
- "channelType": "light",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Wall"
}, - "state": {
- "value": 0,
- "on": "false"
}
}
]
pageId required | string |
Accept | string Example: application/json |
Sender-Id | string Example: TybaHome Any non-empty string to identify the request sender. |
[- {
- "id": "light/1/1",
- "description": "LIGHT/1/1",
- "channelType": "light",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Main"
}, - "state": {
- "value": 0,
- "on": "false"
}
}
]
Get the channel matching the supplied id
channelId required | string The channel to get. |
Accept | string Example: application/json |
Sender-id | string Example: TybaHome Any non-empty string to identify the request sender. |
[- {
- "id": "light/1/1",
- "description": "LIGHT/1/1",
- "channelType": "light",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Main"
}, - "state": {
- "value": 0,
- "on": "false"
}
}
]
Get the states of all endpoints on a channel
channelId required | string The channel to get. |
Accept | string Example: application/json |
Sender-id | string Example: TybaHome Any non-empty string to identify the request sender. |
{- "value": 0,
- "on": "false"
}
Modify the state of a particular channel. Can either send either 'value':{int} or 'on':{bool} to modify the state of a channel
channelId required | string The channel to modify. |
Content-Type | string Example: application/json |
Sender-Id | string Example: TybaHome Any non-empty string to identify the request sender. |
{- "value": 50,
- "on": true
}
Gets the available actions on a channel (if any)
channelId required | string The channel to get. |
Content-Type | string Example: application/x-www-form-urlencoded |
Sender-Id | string Example: TybaHome Any non-empty string to identify the request sender. |
[- "increment_decrement"
]
POSTs an action on a channel with the given payload. Payloads are either 0 or 1.
channelId required | string The channel to modify. |
Content-Type | string Example: application/json |
Sender-Id | string Example: TybaHome Any non-empty string to identify the request sender. |
{- "increment_decrement": 0
}
Posts a global action.
action required | string The action to complete. |
Content-Type | string Example: application/x-www-form-urlencoded |
Sender-Id | string Example: TybaHome Any non-empty string to identify the request sender. |
Get the page configuration.
Sender-id | string Example: TybaHome Any non-empty string to identify the request sender. |
{- "pages": [
- {
- "id": "light/1",
- "name": "Main dimmer",
- "icon": "pendant",
- "pageType": "light",
- "dialChannel": "light/1/1",
- "channels": [
- {
- "id": "light/1/1",
- "description": "LIGHT/1/1",
- "channelType": "light",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Main",
- "isSwitched": false
}
}
], - "properties": { }
}, - {
- "id": "light/2",
- "name": "Floor Lamp",
- "icon": "floor_lights",
- "pageType": "light",
- "dialChannel": "light/2/1",
- "channels": [
- {
- "id": "light/2/1",
- "description": "LIGHT/2/1",
- "channelType": "light",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Floor",
- "isSwitched": true
}
}
], - "properties": { }
}, - {
- "id": "light/3",
- "name": "Table Lamp",
- "icon": "table_lights",
- "pageType": "light",
- "dialChannel": "light/3/1",
- "channels": [
- {
- "id": "light/3/1",
- "description": "LIGHT/3/1",
- "channelType": "light",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Table",
- "isSwitched": false
}
}
], - "properties": { }
}, - {
- "id": "light/4",
- "name": "Downlights",
- "icon": "down_lights",
- "pageType": "light",
- "dialChannel": "light/4/1",
- "channels": [
- {
- "id": "light/4/1",
- "description": "LIGHT/4/1",
- "channelType": "light",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Downlights",
- "isSwitched": false
}
}
], - "properties": { }
}, - {
- "id": "light/5",
- "name": "Table Lamp",
- "icon": "wall_lights",
- "pageType": "light",
- "dialChannel": "light/5/1",
- "channels": [
- {
- "id": "light/5/1",
- "description": "LIGHT/5/1",
- "channelType": "light",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Wall",
- "isSwitched": false
}
}
], - "properties": { }
}, - {
- "id": "shade/1",
- "name": "All",
- "icon": "window_treatments",
- "pageType": "shade",
- "dialChannel": "shade/1/1",
- "channels": [
- {
- "id": "shade/1/1",
- "description": "SHADE/1/1",
- "channelType": "shade",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "All",
- "isSwitched": false
}
}
], - "properties": { }
}, - {
- "id": "shade/2",
- "name": "Blinds",
- "icon": "blinds",
- "pageType": "shade",
- "dialChannel": "shade/2/1",
- "channels": [
- {
- "id": "shade/2/1",
- "description": "SHADE/2/1",
- "channelType": "shade",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Blinds",
- "isSwitched": true
}
}
], - "properties": { }
}, - {
- "id": "shade/3",
- "name": "Curtains",
- "icon": "curtains",
- "pageType": "shade",
- "dialChannel": "shade/3/1",
- "channels": [
- {
- "id": "shade/3/1",
- "description": "SHADE/3/1",
- "channelType": "shade",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "displayName": "Curtains",
- "isSwitched": false
}
}
], - "properties": { }
}, - {
- "id": "light_scenes/1",
- "name": "Main dimmer",
- "icon": "lighting_scenes",
- "pageType": "light_scenes",
- "dialChannel": "light_scenes/1/1",
- "channels": [
- {
- "id": "light_scenes/1/1",
- "description": "LIGHT_SCENES/1/1",
- "channelType": "light_scenes",
- "channelPermission": "read_write",
- "dataType": "preset",
- "properties": {
- "count": "7",
- "allow_none": "true",
- "names": "Off,Night,Evening,Entertaining,Dining,Daytime,All On"
}
}
], - "properties": { }
}, - {
- "id": "fan/1",
- "name": "Main dimmer",
- "icon": "fans",
- "pageType": "fan",
- "dialChannel": "fan/1/1",
- "channels": [
- {
- "id": "fan/1/1",
- "description": "FAN/1/1",
- "channelType": "fan",
- "channelPermission": "read_write",
- "dataType": "preset",
- "properties": {
- "count": "5",
- "names": "Off,,,,auto"
}
}
], - "properties": { }
}, - {
- "id": "temperature/1",
- "name": "HVAC",
- "icon": null,
- "pageType": "temperature",
- "dialChannel": "temperature/1/1",
- "channels": [
- {
- "id": "temperature/1/1",
- "description": "TEMPERATURE/1/1",
- "channelType": "setpoint_temperature",
- "channelPermission": "read_write",
- "dataType": "temperature",
- "properties": {
- "increment": "0.5",
- "unit": "°C",
- "min": "15",
- "max": "32"
}
}, - {
- "id": "temperature/1/2",
- "description": "TEMPERATURE/1/2",
- "channelType": "current_temperature",
- "channelPermission": "read_write",
- "dataType": "temperature",
- "properties": {
- "temperature_mode": "external",
- "increment": "0.5",
- "internalTemperatureOffset": "1.1",
- "unit": "°C"
}
}
], - "properties": { }
}, - {
- "id": "info/1",
- "name": "Info 1",
- "icon": "air_quality",
- "pageType": "info",
- "dialChannel": null,
- "channels": [
- {
- "id": "info/1/1",
- "description": "INFO/1/1",
- "channelType": "generic_string",
- "channelPermission": "read",
- "dataType": "string",
- "properties": {
- "displayName": "Air Quality"
}
}
], - "properties": { }
}, - {
- "id": "info/2",
- "name": "Info 2",
- "icon": "air_pressure",
- "pageType": "info",
- "dialChannel": null,
- "channels": [
- {
- "id": "info/2/1",
- "description": "INFO/2/1",
- "channelType": "generic_string",
- "channelPermission": "read",
- "dataType": "string",
- "properties": {
- "displayName": "Air Pressure"
}
}
], - "properties": { }
}, - {
- "id": "humidity/1",
- "name": "HVAC",
- "icon": null,
- "pageType": "humidity",
- "dialChannel": "humidity/1/1",
- "channels": [
- {
- "id": "humidity/1/1",
- "description": "HUMIDITY/1/1",
- "channelType": "setpoint_humidity",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "increment": "0.5",
- "unit": "%",
- "min": "15",
- "max": "32"
}
}, - {
- "id": "humidity/1/2",
- "description": "HUMIDITY/1/2",
- "channelType": "current_humidity",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": {
- "increment": "0.5",
- "unit": "%"
}
}
], - "properties": { }
}, - {
- "id": "modes/1",
- "name": "Modes",
- "icon": "modes",
- "pageType": "modes",
- "dialChannel": "modes/1/1",
- "channels": [
- {
- "id": "modes/1/1",
- "description": "MODES/1/1",
- "channelType": "modes",
- "channelPermission": "read_write",
- "dataType": "preset",
- "properties": {
- "count": "5",
- "names": "Off,Heat,Cool,Away,Home"
}
}
], - "properties": { }
}, - {
- "id": "source/1",
- "name": "Source select",
- "icon": null,
- "pageType": "source",
- "dialChannel": "media/1/1",
- "channels": [
- {
- "id": "media/1/1",
- "description": "MEDIA/1/1",
- "channelType": "media_volume",
- "channelPermission": "read_write",
- "dataType": "percentage",
- "properties": { }
}, - {
- "id": "media/1/2",
- "description": "MEDIA/1/2",
- "channelType": "media_transport_play_pause",
- "channelPermission": "read_write",
- "dataType": "play_pause",
- "properties": { }
}, - {
- "id": "media/1/3",
- "description": "MEDIA/1/3",
- "channelType": "media_transport_play_stop",
- "channelPermission": "read_write",
- "dataType": "switch",
- "properties": { }
}, - {
- "id": "media/1/4",
- "description": "MEDIA/1/4",
- "channelType": "media_transport_pause_unpause",
- "channelPermission": "read_write",
- "dataType": "switch",
- "properties": { }
}, - {
- "id": "media/1/5",
- "description": "MEDIA/1/5",
- "channelType": "media_transport_skip",
- "channelPermission": "read_write",
- "dataType": "action",
- "properties": { }
}, - {
- "id": "media/1/6",
- "description": "MEDIA/1/6",
- "channelType": "media_mute",
- "channelPermission": "read_write",
- "dataType": "switch",
- "properties": { }
}, - {
- "id": "source/1/1",
- "description": "Source select",
- "channelType": "media_source_select",
- "channelPermission": "read_write",
- "dataType": "preset",
- "properties": {
- "count": "8",
- "allow_none": "true",
- "names": ""
}
}, - {
- "id": "source/1/2",
- "description": "Artwork",
- "channelType": "media_artwork",
- "channelPermission": "read",
- "dataType": "image",
- "properties": { }
}, - {
- "id": "source/1/3",
- "description": "Metadata line 1",
- "channelType": "media_metadata",
- "channelPermission": "read",
- "dataType": "string",
- "properties": { }
}, - {
- "id": "source/1/4",
- "description": "Metadata line 2",
- "channelType": "media_metadata",
- "channelPermission": "read",
- "dataType": "string",
- "properties": { }
}
], - "properties": { },
- "sources": [
- {
- "name": "Sky TV",
- "power": true,
- "transport": false,
- "controlType": "main_bus"
}, - {
- "name": "Muse",
- "power": true,
- "transport": true,
- "controlType": "main_bus"
}, - {
- "name": "AirPlay",
- "power": true,
- "transport": false,
- "controlType": "main_bus"
}, - {
- "name": "Cast Audio",
- "power": true,
- "transport": true,
- "controlType": "main_bus"
}, - {
- "name": "Sonos",
- "power": true,
- "transport": true,
- "controlType": "sonos"
}, - {
- "name": "Source 6",
- "power": true,
- "transport": true,
- "controlType": "main_bus"
}, - {
- "name": "Source 7",
- "power": true,
- "transport": false,
- "controlType": "main_bus"
}, - {
- "name": "Source 8",
- "power": true,
- "transport": true,
- "controlType": "main_bus"
}
]
}
], - "layout": {
- "columns": [
- [
- "light_scenes/1",
- "light/1",
- "light/2",
- "light/3",
- "light/4",
- "light/5"
], - [
- "source/1"
], - [
- "shade/1",
- "shade/2",
- "shade/3"
], - [
- "temperature/1",
- "humidity/1",
- "fan/1",
- "modes/1",
- "info/1",
- "info/2"
]
], - "horizontalWrap": true
}, - "startPageId": "light_scenes/1"
}
Get the config version. The version number indicates which features (page and channel types) are available in the config and corresponds to the API documentation version number.
Sender-id | string Example: TybaHome Any non-empty string to identify the request sender. |
"2.0.0"
Contains a collection of requests and workflows for Turn 2 external integrations (Sonos, Hue etc.).
Turn 2 integration with Sonos allows users to control their Sonos speakers directly from the Turn 2 device.
event: transportControls data: {"previousEnabled":true,"nextEnabled":false} event: transportControls data: {"previousEnabled":false,"nextEnabled":false} event: transportControls data: {"previousEnabled":false,"nextEnabled":true} event: transportControls data: {"previousEnabled":true,"nextEnabled":true}