# 设备发现 （Discovery Messages ）

这些消息类型用于发现该技能适配器可用的设备和功能。   

- DiscoverAppliancesRequest
- DiscoverAppliancesResponse



## DiscoverAppliancesRequest

**示例语句**：   
“小微，发现我的智能家居设备”  
**目的**：发现与最终用户的设备云账户相关的设备。 *DiscoverAppliancesRequest*从Smart Home Skill API发送到技能适配器，目的是发现与客户的设备云账户相关的设备。如果没有设备可以发现，或者您的设备云遇到错误，则技能适配器应返回一个**空的DiscoverAppliancesResponse**，而不是错误消息。  

**Header**

| 属性      | 值                        |
| --------- | ------------------------- |
| name      | DiscoverAppliancesRequest |
| namespace | SmartHome.Discovery       |

**Payload**

| 属性        | 描述                             | 是否必需 |
| ----------- | -------------------------------- | -------- |
| accessToken | 与客户的设备云账户相关的访问令牌 | 是       |
| openUid | 被授权的小微账号开放ID，与设备云账号一一对应。设备云端需要将该字段与用户账号一一对应起来存储，其它协议中如果需要携带openUid字段时，则需要返回用户账号对应的openUid值。 | 是       |

*DiscoverAppliancesRequest*示例：

```
{
    "header": {
        "messageId": "9422676d-2356-4aa7-aa88-c642f12bfcd6",
        "name": "DiscoverAppliancesRequest",
        "namespace": "SmartHome.Discovery",
        "payloadVersion": "2"
    },
    "payload": {
        "accessToken": "*OAuth Token here*"
    }
}
```





## DiscoverAppliancesResponse

**小微响应示例**：参考下方的DiscoverAppliancesResponse示例。   
**目的**：返回与最终用户的设备云账户相关联的所有设备。技能适配器对*DiscoverAppliancesRequest*的Smart Home Skill API的预期响应。如果没有要发现的设备或者您的设备云遇到错误，请返回一个空的discoveryAppliances数组。

**Header**

| 属性      | 值                         |
| --------- | -------------------------- |
| name      | DiscoverAppliancesResponse |
| namespace | SmartHome.Discovery        |

**Payload**

| 属性                                              | 描述                                                         | 是否必需             |
| ------------------------------------------------- | ------------------------------------------------------------ | -------------------- |
| discoveredAppliances                              | 代表与客户的设备云账户相关联的可发现设备的结构数组。 如果没有与客户账户关联的设备，此属性应包含一个空数组。 如果发生错误，该属性可以为null。 数值的最大个数为300.列表中的每个项目的属性如下所示。 | 是                   |
| discoveredAppliance.applianceId                   | 设备标识符。 标识符在技能适配器的域内的所有设备上必须是唯一的(不同用户的不同设备也不能重复)。 此外，标识符需要在同一设备的多个发现请求之间保持一致。 标识符可以包含任何字母或数字和以下特殊字符：_ - = # ; : ? @ &。 标识符不能超过256个字符。 | 是                   |
| discoveredAppliance.manufacturerName              | 设备制造商的名称。 此值不能超过128个字符。                   | 是                   |
| discoveredAppliance.modelName                     | 设备型号名称。 此值不能超过128个字符。                       | 是                   |
| discoveredAppliance.version                       | 供应商提供的设备版本。 此值不能超过128个字符。               | 是                   |
| discoveredAppliance.applianceType                 | 供应商提供的设备类型 例如"light",取值范围见下面的《4.设备类型》定义。 | 是                   |
| discoveredAppliance.friendlyName                  | 客户用来识别设备的名称。 此值不能超过128个字符，不应包含特殊字符或标点符号。 | 是                   |
| discoveredAppliance.friendlyDescription           | 设备的可读描述。 此值不能超过128个字符。 描述应包含设备连接方式的描述。 例如，“通过Wink连接的WiFi温控器”。 | 是                   |
| discoveredAppliance.status 对象                   | 设备的状态。                                                 | 否                   |
| discoveredAppliance.status.deviceTemperature      | 设备的温度状态。                                             | 否                   |
| discoveredAppliance.status.deviceColorHue         | 设备的色调,范围0.0~360.0。                                   | 否                   |
| discoveredAppliance.status.deviceColorSaturation  | 设备的饱和度,范围0.0000~1.0000。                             | 否                   |
| discoveredAppliance.status.deviceColorTemperature | 设备的色温，有效范围为1000 ~10000(含)。                      | 否                   |
| discoveredAppliance.status.deviceColorBrightness  | 设备的颜色亮度0.0000-1.0000。                                | 否                   |
| discoveredAppliance.status.deviceSwitch           | 开关状态：flase:关闭， true:打开。                           | 否                   |
| discoveredAppliance.status.devicePercent          | 设置设备(亮度等)的百分比：精度为两位小数。                   | 否                   |
| discoveredAppliance.status.deviceVolumeMin        | 设备的音量最小值。                                           | 否                   |
| discoveredAppliance.status.deviceVolumeMax        | 设备的音量最大值。                                           | 否                   |
| discoveredAppliance.status.deviceVolume           | 设备的音量, 范围(dev_att_volume_min-dev_att_volume_max)。    | 否                   |
| discoveredAppliance.status.deviceMute             | 设备的静音状态：flase:未静音， true:静音。                   | 否                   |
| discoveredAppliance.status.deviceWindSpeedMin     | 设备的风速最小值。                                           | 否                   |
| discoveredAppliance.status.deviceWindSpeedMax     | 设备的风速最大值。                                           | 否                   |
| discoveredAppliance.status.deviceWindSpeed        | 设备的风速, 范围(dev_att_wind_speed_min,dev_att_wind_speed_max)含。 | 否                   |
| discoveredAppliance.status.deviceModeRange        | 设备支持的模式，格式为[{"modeId":"模式id",modeName:"制冷模式"}]。 | 否                   |
| discoveredAppliance.status.deviceMode             | 设备当前模式，格式为[{"modeId":"模式id",modeName:"制冷模式"}]。 | 否                   |
| discoveredAppliance.status.deviceIsOnline         | 设备是否在线 ：true：在线， false：不在线。                  | 是                   |
| discoveredAppliance.status.deviceIsAuthorize      | 设备是否授权 ：true：已授权， false：未授权。                | 是                   |
| discoveredAppliance.actions                       | 此设备支持的一系列操作。 此指令的有效操作包括：
TurnOff：打开
TurnOn：关闭 
SetPercentage：设置百分比
IncrementPercentage：增加百分比
DecrementPercentage：减少百分比
SetBrightness：设置亮度
IncrementBrightness：增加亮度
DecrementBrightness：减少亮度
SetTargetTemperature：设置温度
IncrementTargetTemperature：增加温度
DecrementTargetTemperature：减少温度
GetTargetTemperature：读取设置目标温度
GetTemperatureReading：读取传感器温度
SetColor：设置颜色
SetColorTemperature：设置色温
IncrementColorTemperature：提升色温（冷）
DecrementColorTemperature：降低色温（暖）
SetVolume：设置音量
IncrementVolume：增加音量
DecrementVolume：降低音量
Mute：静音
Unmute：取消静音
SetFanSpeed：设置风速
IncrementFanSpeed：增加风速
DecrementFanSpeed：降低风速
SelectChannel：切换电视频道
SetMode：设置模式
 | 是                   |
| discoveredAppliance.additionalApplianceDetails    | 提供关于技能适配器使用的设备的附加信息的字符串名称/值对。 该属性的内容不能超过5000字节。 而且，Smart Home Skill API既不理解也不使用这些数据。 | 是，但列表可以为空。 |
| discoveredAppliance.icon                          | 对应设备展示的图标。                                         | 是                   |
| supportScenes | 客户自定义的场景列表。如果用户没有自定义场景，此属性应包含一个空数组。 | 是，但列表可以为空。|
| supportScene.sceneId | 场景标识符。标识符在技能适配器的域内的所有场景上必须是唯一的(不同用户的不同场景也不能重复)。 此外，标识符需要在同一场景的多个发现请求之间保持一致。 标识符可以包含任何字母或数字和以下特殊字符：_ - = # ; : ? @ &。 标识符不能超过256个字符。| 是 |
| supportScene.sceneName | 场景名称 | 场景名称，规范再八个字之内；sceneName请勿加上"模式"两字，如回家模式对应sceneName=回家 |
| supportScene.actions | 场景支持的操作。此指令的有效操作包括：
ActivationScene
DeactivateScene | 是 |
| supportScene.icon | 对应场景展示的图标。| 是 |
*DiscoverAppliancesResponse*示例:

```
 {
    "header": {
        "messageId": "9ed9747d-caee-429e-b7ce-9104c82550ea",
        "name": "DiscoverAppliancesResponse",
        "namespace": "SmartHome.Discovery",
        "payloadVersion": "2"
    },
    "payload": {
        "discoveredAppliances": [
            {
                "actions": [
                    "IncrementTargetTemperature",
                    "DecrementTargetTemperature",
                    "GetTargetTemperature",
                    "SetTargetTemperature"
                ],
                "status":{
                    "deviceTemperature": 25.90,
                    "deviceColorHue": 100.0,
                    "deviceColorSaturation": 0.2000,
                    "deviceColorTemperature": 4000,
                    "deviceColorBrightness": 0.2000,
                    "deviceSwitch": true,
                    "devicePercent": 30.23,
                    "deviceVolumeMin": 0,
                    "deviceVolumeMax": 100,
                    "deviceVolume": 50,
                    "deviceMute": false,
                    "deviceWindSpeedMin": 0,
                    "deviceWindSpeedMax": 5,
                    "deviceWindSpeed": 3,
                    "deviceModeRange": [{"modeId":"模式id",modeName:"制冷模式"}],
                    "deviceMode": [{"modeId":"模式id",modeName:"制冷模式"}],
                    "deviceIsOnline": true,
                    "deviceIsAuthorize": true
                },
                    "additionalApplianceDetails": {
                    "extraDetail1": "optionalDetailForSkillAdapterToReferenceThisDevice",
                    "extraDetail2": "There can be multiple entries",
                    "extraDetail3": "but they should only be used for reference purposes.",
                    "extraDetail4": "This is not a suitable place to maintain current device state"
                },
                "applianceId": "uniqueThermostatDeviceId",
                "friendlyDescription": "descriptionThatIsShownToCustomer",
                "friendlyName": " Bedroom Thermostat",
                "manufacturerName": "yourManufacturerName",
                "modelName": "fancyThermostat",
                "version": "your software version number here."
            },
            {
                "actions": [
                    "IncrementPercentage",
                    "DecrementPercentage",
                    "IncrementColorTemperature",
                    "DecrementColorTemperature",
                    "IncrementBrightness",
                    "DecrementBrightness",
                    "SetPercentage",
                    "SetColor",
                    "SetColorTemperature",
                    "SetBrightness",
                    "TurnOn",
                    "TurnOff"
                ],
                "status":{
                    "deviceTemperature": 25.90,
                    "deviceColorHue": 100.0,
                    "deviceColorSaturation": 0.2000,
                    "deviceColorTemperature": 4000,
                    "deviceColorBrightness": 0.2000,
                    "deviceSwitch": true,
                    "devicePercent": 30.23,
                    "deviceVolumeMin": 0,
                    "deviceVolumeMax": 100,
                    "deviceVolume": 50,
                    "deviceMute": false,
                    "deviceWindSpeedMin": 0,
                    "deviceWindSpeedMax": 5,
                    "deviceWindSpeed": 3,
                    "deviceModeRange": ["auto","heat","cool","dry","energy","sleep"],
                    "deviceMode": "auto",
                    "deviceIsOnline": true,
                    "deviceIsAuthorize": true
                },
                "additionalApplianceDetails": {},
                "applianceId": "uniqueLightDeviceId",
                "friendlyDescription": "descriptionThatIsShownToCustomer",
                "friendlyName": "Living Room",
                "manufacturerName": "yourManufacturerName",
                "modelName": "fancyLight",
                "version": "your software version number here."                
            }
        ],
         "supportScenes": [
             {
                 "actions": [
                     "ActivationScene"
                 ],
                 "sceneId": "uniqueSceneId",
                 "sceneName": "回家", 
                 "icon": "iconUrl"
             },
             {
                 "actions": [
                     "ActivationScene",
                     "DeactivateScene"
                 ],
                 "sceneId": "uniqueSceneId",
                 "sceneName": "吃饭", 
                 "icon": "iconUrl"
             }
         ]
    }
}
```
