# Alex Skill Controller
## [Alexa.ModeController](https://developer.amazon.com/de-DE/docs/alexa/device-apis/alexa-modecontroller.html)
* Alexa 技能中實現Alexa.ModeController界面,用戶可以控制設備的模式設置。
* 使用該Alexa.ModeController界面對設備的屬性進行建模,用戶可以將其設置為一系列值,例如洗衣機的洗滌循環模式。
* 值列表可以有順序,但這不是必需的。該Alexa.ModeController接口是一個通用控制器接口。
### Properties
**Mode 屬性**
* ```Alexa.ModeController```接口使用該mode屬性作為主要屬性。
* 屬性值是字符串。該Mode對象定義模式的可接受值。
* 一個端點可以支持多種模式。
* 要區分模式,必須始終包含該instance屬性。
### SetMode 指令
```json
{
"directive": {
"header": {
"namespace": "Alexa.ModeController",
"instance": "Washer.WashCycle",
"name": "SetMode",
"messageId": "Unique version 4 UUID",
"correlationToken": "Opaque correlation token",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0 bearer token"
},
"endpointId": "Endpoint ID",
"cookie": {}
},
"payload": {
"mode": "WashCycle.Normal"
}
}
}
```
### 回應
```json
{
"event": {
"header": {
"namespace": "Alexa",
"name": "Response",
"messageId": "Unique identifier, preferably a version 4 UUID",
"correlationToken": "Opaque correlation token that matches the request",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0 bearer token"
},
"endpointId": "Endpoint ID"
},
"payload": {}
},
"context": {
"properties": [
{
"namespace": "Alexa.ModeController",
"instance": "Washer.WashCycle",
"name": "mode",
"value": "WashCycle.Normal",
"timeOfSample": "2017-02-03T16:20:50Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
```
## [Alexa.PowerController](https://developer.amazon.com/de-DE/docs/alexa/device-apis/alexa-powercontroller.html)
### Properties
**powerState 屬性**
* ```Alexa.PowerController```使用 powerState 屬性作為主要屬性。
* 有效值為 ON 或 OFF。
### TurnOn 指令
```json
{
"directive": {
"header": {
"namespace": "Alexa.PowerController",
"name": "TurnOn",
"messageId": "Unique version 4 UUID",
"correlationToken": "Opaque correlation token",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0 bearer token"
},
"endpointId": "Endpoint ID",
"cookie": {}
},
"payload": {}
}
}
```
### TurnOn回應
```json
{
"event": {
"header": {
"namespace": "Alexa",
"name": "Response",
"messageId": "Unique identifier, preferably a version 4 UUID",
"correlationToken": "Opaque correlation token that matches the request",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0 bearer token"
},
"endpointId": "Endpoint ID"
},
"payload": {}
},
"context": {
"properties": [
{
"namespace": "Alexa.PowerController",
"name": "powerState",
"value": "ON",
"timeOfSample": "2017-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 500
}
]
}
}
```
## [Alexa.PowerLevelController](https://developer.amazon.com/de-DE/docs/alexa/device-apis/alexa-powerlevelcontroller.html)
### Properties
**powerLevel 屬性**
* ```Alexa.PowerLevelController```使用該powerLevel屬性作為主要屬性。
* 該屬性表示設備的功率級別,以介於 0 和 100 之間的整數百分比表示。
* 如果該powerLevel屬性用於表示更改,則有效值為 -100 到 100(含)。
### SetPowerLevel 指令
```json
{
"directive": {
"header": {
"namespace": "Alexa.PowerLevelController",
"name": "SetPowerLevel",
"messageId": "Unique version 4 UUID",
"correlationToken": "Opaque correlation token",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0 bearer token"
},
"endpointId": "Endpoint ID",
"cookie": {}
},
"payload": {
"powerLevel": 40
}
}
}
```
### SetPowerLevel回應
```json
{
"event": {
"header": {
"namespace": "Alexa",
"name": "Response",
"messageId": "Unique identifier, preferably a version 4 UUID",
"correlationToken": "Opaque correlation token that matches the request",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0 bearer token"
},
"endpointId": "Endpoint ID"
},
"payload": {}
},
"context": {
"properties": [
{
"namespace": "Alexa.PowerLevelController",
"name": "powerLevel",
"value": 40,
"timeOfSample": "2017-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 500
}
]
}
}
```
## [Alexa.SceneController](https://developer.amazon.com/en-US/docs/alexa/device-apis/alexa-scenecontroller.html)
* Alexa 技能中實現該```Alexa.SceneController```界面,以便用戶可以激活或停用組合成一個場景的多個智能家居設備。
* 場景將設備組合設置為每個設備的特定狀態。根據狀態變化的發生方式對場景進行分類:
* **活動觸發** - 狀態更改必須以特定順序發生。例如,對於名為「觀看 Netflix」的場景,您可以先打開電視電源,然後將輸入設置為 HDMI1。
* **場景觸發** — 狀態變化可以以任何順序發生。例如,對於名為“就寢時間”的場景,您可以按任意順序關閉燈光並降低恆溫器。
* 通常,用戶使用與 Alexa 兼容的集線器或通過設備製造商的應用程序編輯和創建場景。您還可以創建提供場景的 Alexa 技能。
### 支援的裝置種類
* You can support the following device types in your skill for a scene:
1. Fans
2. Light bulbs
3. Speakers
4. Switched electrical outlets
5. Thermostats
6. TVs
7. Window blinds
* You can't support the following device types in your skill for a scene:
1. Cameras
1. Cooking appliances
1. Door locks
1. Garage doors
1. Security sensors
1. Security systems
### Discover response example
在您的發現響應中,您必須為支持的端點配置端點信息,Alexa.SceneController如下所示:
* 使用`endpointId`來識別場景而**不是**物理設備。
* 在該`description`字段中,包括`scene`一詞並描述場景如何連接。例如,按供應商名稱連接的派對場景。
* 包括該friendlyName字段。用戶使用友好名稱與您的場景進行交互。請遵循以下準則來定義friendlyName字段:
* 僅包括場景名稱。此名稱為用戶與場景交互提供了最簡單、最自然的方式。
* 如果您在不同的房間提供類似的場景,可以選擇包含房間名稱。
* (可選) 包括`scene`一詞。
* (可選) 在場景名稱和房間名稱之間包含單詞`in`。
* **不要**包含特殊字符或標點符號。
* **不要**超過 128 個字符。
* 設置`displayCategories`為`ACTIVITY_TRIGGER`或`SCENE_TRIGGER`。有關顯示類別的完整列表,請參閱顯示[類別](https://developer.amazon.com/en-US/docs/alexa/device-apis/alexa-discovery.html#display-categories)。
以下示例顯示了`Discover.Response`支持該`Alexa.SceneController`接口的設備的消息。
```json
{
"event": {
"header": {
"namespace": "Alexa.Discovery",
"name": "Discover.Response",
"payloadVersion": "3",
"messageId": "Unique identifier, preferably a version 4 UUID"
},
"payload": {
"endpoints": [{
"endpointId": "unique ID of the scene",
"manufacturerName": "Sample Vendor",
"description": "Party scene by Sample Vendor",
"friendlyName": "Living Room Party",
"displayCategories": ["SCENE_TRIGGER"],
"cookie": {},
"capabilities": [{
"type": "AlexaInterface",
"interface": "Alexa.SceneController",
"version": "3",
"supportsDeactivation": false
},
{
"type": "AlexaInterface",
"interface": "Alexa",
"version": "3"
}
]
}]
}
}
}
```
### Activate directive指令
```json
{
"directive": {
"header": {
"namespace": "Alexa.SceneController",
"name": "Activate",
"messageId": "Unique version 4 UUID",
"correlationToken": "Opaque correlation token",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0 bearer token"
},
"endpointId": "endpoint id"
},
"payload": {}
}
}
```
### ActivationStarted event 回應
```json
{
"event": {
"header": {
"namespace": "Alexa.SceneController",
"name": "ActivationStarted",
"messageId": "Unique identifier, preferably a version 4 UUID",
"correlationToken": "Opaque correlation token that matches the request",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0 bearer token"
},
"endpointId": "endpoint id"
},
"payload": {
"cause": {
"type": "VOICE_INTERACTION"
},
"timestamp": "2017-02-03T16:20:50Z"
}
},
"context": {}
}
```
## [Alexa.RangeController](https://developer.amazon.com/en-US/docs/alexa/device-apis/alexa-rangecontroller.html)
* 在 Alexa 技能中實現該```Alexa.RangeController```界面,以便用戶可以在最小和最大範圍內控制由數字表示的設備設置。
* 使用該```Alexa.RangeController```界面對設備的屬性進行建模,用戶可以將其設置為一系列值之一,例如攪拌機或風扇的速度設置。
### Properties
**RangeValue 屬性**
* 該```Alexa.RangeController```接口使用該```rangeValue```屬性作為主要屬性。
* 屬性值是數字,您可以在發現響應中指定最小值、最大值和精度。
* 如果您使用該rangeValue屬性來表示更改,則有效值包括負數。
### SetRangeValue 指令
```json
{
"directive": {
"header": {
"namespace": "Alexa.RangeController",
"instance": "Fan.Speed",
"name": "SetRangeValue",
"messageId": "Unique version 4 UUID",
"correlationToken": "Opaque correlation token",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0 bearer token"
},
"endpointId": "Endpoint ID",
"cookie": {}
},
"payload": {
"rangeValue": 7
}
}
}
```
### SetRangeValue 回應
```json
{
"event": {
"header": {
"namespace": "Alexa",
"name": "Response",
"messageId": "Unique identifier, preferably a version 4 UUID",
"correlationToken": "Opaque correlation token that matches the request",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0 bearer token"
},
"endpointId": "Endpoint ID"
},
"payload": {}
},
"context": {
"properties": [
{
"namespace": "Alexa.RangeController",
"instance": "Fan.Speed",
"name": "rangeValue",
"value": 7,
"timeOfSample": "2017-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 500
}
]
}
}
```
## 文件
[Alexa.RangeController](https://developer.amazon.com/en-US/docs/alexa/alexa-voice-service/alexa-rangecontroller.html)
[Alexa.ModeController](https://developer.amazon.com/en-US/docs/alexa/alexa-voice-service/alexa-modecontroller.html)
###### tags: `Alexa`