# 右转开放平台简介

## 概述

右转开放平台主要面向企业级用户，提供**主机语音识别控制三方厂商智能设备**的服务，以及**三方厂商设备控制右转主机**的服务

## [智能设备接入](/dev-link-host)

主要用于右转主机控制智能设备，目前平台主要提供2种接入方式

对于没有自己云服务的智能设备厂商我们提供Android SDK的方式进行接入，但是主机可控制的设备只能为该厂商

客户拥有自己的云服务平台，可以通过云端接入的方式使用主机来控制智能设备，使用这种接入方式，主机可控制平台已接入的所有厂商设备

## [控制右转主机](/ctrl-host)

客户需要控制右转主机的一些功能请参考这一栏


# 智能设备接入主机


# 智能家居协议

右转智能家居通信协议详细介绍

## 简介

智能家居协议是右转智能主机与智能家居设备之间的通讯协议。通过这些协议您可以通过语音，主机上的图形界面控制家里的智能设备，与设备进行交互。智能家居协议使用HTTPS传输，协议采用JSON消息格式。

## 协议说明

### 身份认证

智能家居协议遵循OAuth2.0规范。 从右转智能主机发送到智能设备的每个请求都包含OAuth的access token。

### 组成说明

智能家居协议由Header和Payload两部分组成。

**Header信息**

Header包含消息标识符、指令名称、命令空间和payload版本信息。

```yaml
{
    "header": {        
        "namespace": "YouZhuan.ConnectedHome.Discovery",
        "name": "DiscoverAppliancesRequest",
        "messageId": "xxxxx-xxxx-xxxx-xxx",
        "payloadVersion": "1"
    }
}
```

**Header属性说明**

Header包含的属性及属性说明。

| 属性             | 属性说明                                                                                                                            | 是否必须 |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------- | ---- |
| namespace      | <p>指令的类别。</p><p>目前支持的类别有：</p><p>1: YouZhuan.ConnectedHome.Discovery：发现设备指令。</p><p>2: YouZhuan.ConnectedHome.Control：控制设备指令。</p> | 是    |
| name           | 指令的名称。                                                                                                                          | 是    |
| messageId      | <p>消息的唯一标识符，messageId仅用于标识消息</p><p>无其他使用。建议使用随机生成的UUID作为messageId。</p>                                                          | 是    |
| payloadVersion | payload的版本号。                                                                                                                    | 是    |

#### Payload信息

Payload的内容与Header中的name值相关，不同类型的指令，Payload内容也不相同。


# 发现设备

发现设备协议说明

发现设备消息用于查找用户可用的智能设备、可以使用的场景，有DiscoverAppliancesRequest和DiscoverAppliancesResponse两个指令。DiscoverAppliancesRequest指令是发出查找设备请求，DiscoverAppliancesResponse指令回复查找到的设备。\
如果客户平台的用户设备信息变更时,可以通过右转提供的异步接口发送通知，触发更新用户设备信息同步到右转主机。

## DiscoverAppliancesRequest

当用户查找设备时，右转主机会将该消息发送给智能家居服务商。另外，用户每次在右转主机刷新或其他情况下获取设备时，此消息会触发一次。

### Header信息

| **属性**    | **取值**                           |
| --------- | -------------------------------- |
| name      | DiscoverAppliancesRequest        |
| namespace | YouZhuan.ConnectedHome.Discovery |

### Payload信息

| **属性**      | **描述**                                                                                     | **是否必须** |
| ----------- | ------------------------------------------------------------------------------------------ | -------- |
| accessToken | 设备云端获取的access token。                                                                       | 是        |
| openUid     | <p>被授权的开放ID，设备云端需要将该字段与用户账号一一对应起来存储，</p><p>其它协议中如果需要携带openUid字段时，则需要返回用户账号对应的openUid值，</p> | 是        |

### 请求消息示例

```markup
{
    "header": {
        "namespace": "YouZhuan.ConnectedHome.Discovery",
        "name": "DiscoverAppliancesRequest",
        "messageId": "6d6d6e14-8aee-473e-8c24-0d31ff9c17a2",
        "payloadVersion": "1"
    },
    "payload": {
        "accessToken": "[OAuth Token here]",
        "openUid": "account_YouZhuan_company"
    }
}
```

## DiscoverAppliancesResponse

当用户请求智能家居服务查找可用设备或可用场景时，智能家居服务需要返回DiscoverAppliancesResponse消息。 如果查找到设备时，会返回设备的相关信息，包括actions、applianceTypes、additionalApplianceDetails、applianceId、friendlyDescription、friendlyName等属性信息。如果没有找到设备时，会返回空数组。

### Header信息

| **属性**    | **取值**                           |
| --------- | -------------------------------- |
| name      | DiscoverAppliancesResponse       |
| namespace | YouZhuan.ConnectedHome.Discovery |

### Payload信息

设备信息

| **属性**                                                  | **描述**                                                                                                                                                                                                                                                  | **是否必须** |
| ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| discoveredAppliances                                    | <p>以对象数组返回客户关联设备云帐户的设备、场景。</p><p>如客户关联帐户没有设备、场景则返回空数组。</p><p>如果在发现过程中出现错误，字段值设置为null,</p>                                                                                                                                                               | 是        |
| discoveredAppliance.applianceTypes                      | [支持的设备](/dev-link-host/zhi-neng-jia-ju-xie-yi/mu-qian-zhi-chi-de-she-bei)、场景类型。                                                                                                                                                                         | 是        |
| discoveredAppliance.applianceId                         | 设备标识符。标识符在用户拥有的所有设备上必须是唯一的。此外，标识符需要在同一设备的多个发现请求之间保持一致。                                                                                                                                                                                                  | 是        |
| discoveredAppliance.modelName                           | 设备型号名称                                                                                                                                                                                                                                                  | 是        |
| discoveredAppliance.version                             | 供应商提供的设备版本                                                                                                                                                                                                                                              | 是        |
| discoveredAppliance.friendlyName                        | 用户用来识别设备的名称                                                                                                                                                                                                                                             | 是        |
| discoveredAppliance.friendlyDescription                 | 设备相关的描述                                                                                                                                                                                                                                                 | 是        |
| discoveredAppliance.isReachable                         | 设备当前是否能够到达true表示设备当前可以到达，false表示当前设备不能到达。                                                                                                                                                                                                               | 是        |
| discoveredAppliance.actions                             | 设备支持的操作类型数组。详细情况请参见[ 设备操作类型](/dev-link-host/zhi-neng-jia-ju-xie-yi/zhi-chi-de-cao-zuo-lei-xing)。                                                                                                                                                        | 是        |
| discoveredAppliance.additionalApplianceDetails          | 提供给设备云使用，存放设备或场景相关的附加信息，是键值对。                                                                                                                                                                                                                           | 是        |
| discoveredAppliance.manufacturerName                    | 设备厂商的名字                                                                                                                                                                                                                                                 | 是        |
| discoveredAppliance.attributes                          | 设备的属性信息。当设备没有属性信息时，协议中不需要传入该字段。详细信息请参考[设备属性](https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/attributes.md)及[设备属性上报](https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/attributes-report.md)。 | 是        |
| discoveredAppliance.attribute.name                      | 属性名称                                                                                                                                                                                                                                                    | 是        |
| discoveredAppliance.attribute.value                     | 属性值                                                                                                                                                                                                                                                     | 是        |
| discoveredAppliance.attribute.scale                     | 属性值的单位名称，支持数字、字母和下划线                                                                                                                                                                                                                                    | 是        |
| discoveredAppliance.attribute.timestampOfSample         | 属性值取样的时间戳，单位是秒                                                                                                                                                                                                                                          | 是        |
| discoveredAppliance.attribute.uncertaintyInMilliseconds | 属性值取样的时间误差，单位是ms。如果设备使用的是轮询时间间隔的取样方式，那么uncertaintyInMilliseconds就等于时间间隔。如温度传感器每1秒取样1次，那么uncertaintyInMilliseconds的值就是1000。                                                                                                                              | 是        |


# 控制设备

控制设备协议说明

控制消息是对智能家居设备进行控制的消息。目前支持以下设备控制消息。

* [TurnOnRequest](/dev-link-host/zhi-neng-jia-ju-xie-yi/kong-zhi-she-bei#turnonrequest)    打开设备
* [TurnOnConfirmation](/dev-link-host/zhi-neng-jia-ju-xie-yi/kong-zhi-she-bei#turnonconfirmation)    打开设备返回信息
* [TurnOffRequest](/dev-link-host/zhi-neng-jia-ju-xie-yi/kong-zhi-she-bei#turnoffrequest)   关闭设备
* [TurnOffConfirmation  ](/dev-link-host/zhi-neng-jia-ju-xie-yi/kong-zhi-she-bei#turnoffconfirmation)关闭设备返回信息
* [PauseRequest](/dev-link-host/zhi-neng-jia-ju-xie-yi/kong-zhi-she-bei#pauserequest)      暂停设备
* [PauseConfirmation     ](/dev-link-host/zhi-neng-jia-ju-xie-yi/kong-zhi-she-bei#pauseconfirmation)暂停设备返回信息
* [SetTemperatureRequest   ](/dev-link-host/zhi-neng-jia-ju-xie-yi/kong-zhi-she-bei#settemperaturerequest)设置温度
* [SetTemperatureConfirmation   ](/dev-link-host/zhi-neng-jia-ju-xie-yi/kong-zhi-she-bei#settemperatureconfirmation)设置温度返回信息
* [SetFanSpeedRequest ](/dev-link-host/zhi-neng-jia-ju-xie-yi/kong-zhi-she-bei#setfanspeedrequest)        设置风速
* [SetFanSpeedConfirmation](/dev-link-host/zhi-neng-jia-ju-xie-yi/kong-zhi-she-bei#setfanspeedconfirmation)
* [SetModeRequest](/dev-link-host/zhi-neng-jia-ju-xie-yi/kong-zhi-she-bei#setmoderequest)            设置模式
* [SetModeConfirmation   ](/dev-link-host/zhi-neng-jia-ju-xie-yi/kong-zhi-she-bei#setmodeconfirmation)
* [SetColorRequest ](/dev-link-host/zhi-neng-jia-ju-xie-yi/kong-zhi-she-bei#setcolorrequest)           设置颜色相关（亮度,饱和度，色相）
* [SetColorConfirmation](/dev-link-host/zhi-neng-jia-ju-xie-yi/kong-zhi-she-bei#setcolorconfirmation)

## TurnOnRequest

当用户想打开指定设备时，右转主机会将该消息发送给智能家居服务。

**Header信息**

| 属性        | 取值                             |
| --------- | ------------------------------ |
| name      | TurnOnRequest                  |
| namespace | YouZhuan.ConnectedHome.Control |

**Payload信息**

| 属性                                   | 描述说明                                                                                                          | 是否必须     |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------- | -------- |
| accessToken                          | 设备云端获取的access token。                                                                                          | 是        |
| appliance                            | 设备操作的具体对象，包括applianceId和additionalApplianceDetails。                                                           | 是        |
| appliance.applianceId                | 设备标识符。标识符在用户拥有的所有设备上必须是唯一的。此外，标识符需要在同一设备的多个发现请求之间保持一致。标识符可以包含任何字母或数字和以下特殊字符：\_ - = # ; : ? @ &。标识符不能超过256个字符。 | 是        |
| appliance.additionalApplianceDetails | 提供给设备云使用，存放设备或场景相关的附加信息，是键值对。                                                                                 | 是，内容可以为空 |

**应用举例**

当用户在右转主机操作打开设备时向智能家居服务发送TurnOnRequest消息，消息示例如下。

```
{
    "header": {
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "TurnOnRequest",
        "messageId": "01ebf625-0b89-4c4d-b3aa-32340e894688",
        "payloadVersion": "1"
    },
    "payload": {
        "accessToken": "[OAuth token here]",
        "appliance": {
            "additionalApplianceDetails": {},
            "applianceId": "[Device ID for Light]"
        }
    }
}
```

## TurnOnConfirmation

当请求的设备成功打开时，智能家居服务需要返回该消息给右转主机。

**Header信息**

| 属性        | 取值                             |
| --------- | ------------------------------ |
| name      | TurnOnConfirmation             |
| namespace | YouZhuan.ConnectedHome.Control |

**Payload信息**

| 属性         | 取值                                                                                                                                        | 是否必须                                 |
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| attributes | 设备属性信息，支持上报一个或多个属性信息。请查看[属性信息](https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/attributes.md)，了解设备的属性和上报方式。 | 否，当设备属性信息发生变化时，建议将属性变更信息上报给YouZhuan。 |

**应用举例**

当电视成功打开时，技能向YouZhuan发送TurnOnConfirmation消息，示例如下。

```
{
    "header": {
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "TurnOnConfirmation",
        "messageId": "26fa11a8-accb-4f66-a272-8b1ff7abd722",
        "payloadVersion": "1"
    },
    "payload": {
        "attributes": []
    }
}
```

## TurnOffRequest

当用户想关闭设备时，右转主机会发送该消息给智能家居服务，通知智能家居服务关闭该设备。

**Header信息**

| 属性        | 取值                             |
| --------- | ------------------------------ |
| name      | TurnOffRequest                 |
| namespace | YouZhuan.ConnectedHome.Control |

**Payload信息**

| 属性                                   | 描述说明                                                                                                          | 是否必须     |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------- | -------- |
| accessToken                          | 设备云端获取的access token。                                                                                          | 是        |
| appliance                            | 设备操作的具体对象，包括applianceId和additionalApplianceDetails。                                                           | 是        |
| appliance.applianceId                | 设备标识符。标识符在用户拥有的所有设备上必须是唯一的。此外，标识符需要在同一设备的多个发现请求之间保持一致。标识符可以包含任何字母或数字和以下特殊字符：\_ - = # ; : ? @ &。标识符不能超过256个字符。 | 是        |
| appliance.additionalApplianceDetails | 提供给设备云使用，存放设备或场景相关的附加信息，是键值对。YouZhuan不解析或使用这些数据。该属性的内容不能超过5000字节。                                             | 是，内容可以为空 |

**应用举例**

当用户说（或触发主机的关闭事件）“小右小右，帮我关闭灯光”，右转主机理解用户意图后，会向智能家居服务发送TurnOffRequest消息，示例如下。

```
{
    "header": {
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "TurnOffRequest",
        "messageId": "01ebf625-0b89-4c4d-b3aa-32340e894688",
        "payloadVersion": "1"
    },
    "payload": {
        "accessToken": "[OAuth token here]",
        "appliance": {
            "additionalApplianceDetails": {},
            "applianceId": "[Device ID]"
        }
    }
}
```

## TurnOffConfirmation

当请求的设备成功关闭时，智能家居服务会向右转主机发送该消息。

**Header信息**

| 属性        | 取值                             |
| --------- | ------------------------------ |
| name      | TurnOffConfirmation            |
| namespace | YouZhuan.ConnectedHome.Control |

**Payload信息**

| 属性         | 描述说明                                                                                                                                      | 是否必须                                 |
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| attributes | 设备属性信息，支持上报一个或多个属性信息。请查看[属性信息](https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/attributes.md)，了解设备的属性和上报方式。 | 否，当设备属性信息发生变化时，建议将属性变更信息上报给YouZhuan。 |

**应用举例**

当灯光成功关闭时，智能家居服务会向右转主机发送TurnOffConfirmation消息，示例如下。

```
{
    "header": {
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "TurnOffConfirmation",
        "messageId": "26fa11a8-accb-4f66-a272-8b1ff7abd722",
        "payloadVersion": "1"
    },
    "payload": {
        "attributes": []
    }
}
```

## PauseRequest

当用户想暂停设备时，右转主机会发送该消息给智能家居服务。

**Header信息**

| 属性        | 取值                             |
| --------- | ------------------------------ |
| name      | PauseRequest                   |
| namespace | YouZhuan.ConnectedHome.Control |

**Payload信息**

| 属性                                   | 描述说明                                                                                                          | 是否必须     |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------- | -------- |
| accessToken                          | 设备云端获取的access token。                                                                                          | 是        |
| appliance                            | 设备操作的具体对象，包括applianceId和additionalApplianceDetails。                                                           | 是        |
| appliance.applianceId                | 设备标识符。标识符在用户拥有的所有设备上必须是唯一的。此外，标识符需要在同一设备的多个发现请求之间保持一致。标识符可以包含任何字母或数字和以下特殊字符：\_ - = # ; : ? @ &。标识符不能超过256个字符。 | 是        |
| appliance.additionalApplianceDetails | 提供给设备云使用，存放设备或场景相关的附加信息，是键值对。                                                                                 | 是，内容可以为空 |

**应用举例**

用户说“小右，暂停窗帘”时，右转主机了解用户意图后，会发送PauseRequest消息给智能家居服务。消息示例如下。

```
{
    "header": {    
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "PauseRequest",
        "messageId": "01ebf625-0b89-4c4d-b3aa-32340e894688",
        "payloadVersion": "1"
    },
    "payload": {
        "accessToken": "[OAuth token here]",
        "appliance": {
            "additionalApplianceDetails": {},
            "applianceId": "[Device ID]"
        }
    }
}
```

## PauseConfirmation

设备成功暂停时，智能家居服务需要返回该消息。

**Header信息**

| 属性        | 取值                             |
| --------- | ------------------------------ |
| name      | PauseConfirmation              |
| namespace | YouZhuan.ConnectedHome.Control |

**Payload信息**

| 属性         | 描述说明                                                                                                                                      | 是否必须                                 |
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| attributes | 设备属性信息，支持上报一个或多个属性信息。请查看[属性信息](https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/attributes.md)，了解设备的属性和上报方式。 | 否，当设备属性信息发生变化时，建议将属性变更信息上报给YouZhuan。 |

**应用举例**

当窗帘暂停后，智能家居服务需要返回PauseConfirmation消息，示例如下。

```
{
    "header": {        
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "PauseConfirmation",
        "messageId": "26fa11a8-accb-4f66-a272-8b1ff7abd722",
        "payloadVersion": "1"
    },
    "payload": {
        "attributes": []
    }
}
```

## SetTemperatureRequest

当用户需要设置设备温度时，智能主机向智能家居服务发送该消息，通知设备调整温度。

**Header信息**

| 属性        | 取值                             |
| --------- | ------------------------------ |
| name      | SetTemperatureRequest          |
| namespace | YouZhuan.ConnectedHome.Control |

**Payload信息**

| 属性                                   | 描述说明                                                                                                          | 是否必须     |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------- | -------- |
| accessToken                          | 设备云端获取的access token。                                                                                          | 是        |
| appliance                            | 设备操作的具体对象，包括applianceId和additionalApplianceDetails。                                                           | 是        |
| appliance.applianceId                | 设备标识符。标识符在用户拥有的所有设备上必须是唯一的。此外，标识符需要在同一设备的多个发现请求之间保持一致。标识符可以包含任何字母或数字和以下特殊字符：\_ - = # ; : ? @ &。标识符不能超过256个字符。 | 是        |
| appliance.additionalApplianceDetails | 提供给设备云使用，存放设备或场景相关的附加信息，是键值对。YouZhuan不解析或使用这些数据。该属性的内容不能超过5000字节。                                             | 是，内容可以为空 |
| targetTemperature                    | 设备设定的目标温度。                                                                                                    | 是        |
| targetTemperature.value              | 设备设定的目标温度值。                                                                                                   | 是        |
| targetTemperature.scale              | 温度计量单位。有CELSIUS(摄氏温度)和FAHRENHEIT(华氏温度)两种计量单位，默认使用CELSIUS。                                                     | 是        |

**应用举例**

用户说“小右小右，把客厅温度设置为23度”，主机了解用户意图，向智能家居服务发送SetTemperatureRequest消息，消息示例如下。

```
{
    "header": {
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "SetTemperatureRequest",
        "messageId": "01ebf625-0b89-4c4d-b3aa-32340e894688",
        "payloadVersion": "1"
    },
    "payload": {
        "targetTemperature": {
            "value": 23,
            "scale": "CELSIUS"
        },
        "accessToken": "[OAuth token here]",
        "appliance": {
            "additionalApplianceDetails": {},
            "applianceId": "[Device ID]"
        }
    }
}
```

## SetTemperatureConfirmation

当设备温度设置成功时，智能家居服务需要返回该消息。

**Header信息**

| 属性        | 取值                             |
| --------- | ------------------------------ |
| name      | SetTemperatureConfirmation     |
| namespace | YouZhuan.ConnectedHome.Control |

**Payload信息**

| 属性                        | 描述说明                                                                                                                                      | 是否必须                                 |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| mode                      | 温度设置成功后的设备模式。                                                                                                                             | 否                                    |
| temperature               | 温度设置成功后设备的温度，是double类型。                                                                                                                   | 是                                    |
| previousState object      | 温度设定之前的设备状态。                                                                                                                              | 是                                    |
| previousState.mode        | 温度设定之前的设备模式。                                                                                                                              | 否                                    |
| previousState.temperature | 温度设定之前设备的温度，是double类型。                                                                                                                    | 是                                    |
| attributes                | 设备属性信息，支持上报一个或多个属性信息。请查看[属性信息](https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/attributes.md)，了解设备的属性和上报方式。 | 否，当设备属性信息发生变化时，建议将属性变更信息上报给YouZhuan。 |

**应用举例**

当设备温度成功设置成23度时，智能家居服务需要返回SetTemperatureConfirmation消息，消息示例如下。

```
{
    "header": {
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "SetTemperatureConfirmation",
        "messageId": "780013dd-99d0-4c69-9e35-db0457f9f2a7",
        "payloadVersion": "1"
    },
    "payload": {
        "previousState": {
            "mode": {
                "value": "AUTO"
            },
            "temperature": {
                "value": 25.0
            }
        },
        "temperature": {
            "value": 23.0
        },
        "mode": {
            "value": "AUTO"
        },
        "attributes": []
    }
}
```

## SetFanSpeedRequest

当用户需要设置设备的风速时，主机会向智能家居服务发送该消息。

**Header信息**

| 属性        | 取值                             |
| --------- | ------------------------------ |
| name      | SetFanSpeedRequest             |
| namespace | YouZhuan.ConnectedHome.Control |

**Payload信息**

| 属性                                   | 描述说明                                                                                                          | 是否必须     |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------- | -------- |
| accessToken                          | 设备云端获取的access token。                                                                                          | 是        |
| appliance                            | 设备操作的具体对象，包括applianceId和additionalApplianceDetails。                                                           | 是        |
| appliance.applianceId                | 设备标识符。标识符在用户拥有的所有设备上必须是唯一的。此外，标识符需要在同一设备的多个发现请求之间保持一致。标识符可以包含任何字母或数字和以下特殊字符：\_ - = # ; : ? @ &。标识符不能超过256个字符。 | 是        |
| appliance.additionalApplianceDetails | 提供给设备云使用，存放设备或场景相关的附加信息，是键值对。                                                                                 | 是，内容可以为空 |
| fanSpeed                             | 设备的风速对象，包含一个属性值value或者一个属性值level，取决于用户自然表达。                                                                   | 是        |
| fanSpeed.value                       | 设备的风速值，是int类型，取值范围是1～10。用户表达具体风速值时，会出该字段。                                                                     | 否        |
| fanSpeed.level                       | 设备的风速档位级别，是string类型，取值范围是(min、low、middle、high、max、auto))。用户表达风速级别时，会出该字段。                                     | 否        |

**应用举例**

用户说“小右小右，把空调的风速设为2档”，YouZhuan接收用户意图后，向技能发送SetFanSpeedRequest消息，消息示例如下。

```
{
    "header": {
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "SetFanSpeedRequest",
        "messageId": "01ebf625-0b89-4c4d-b3aa-32340e894688",
        "payloadVersion": "1"
    },
    "payload": {
        "fanSpeed": {
            "value": 2
        },
        "accessToken": "[OAuth token here]",
        "appliance": {
            "additionalApplianceDetails": {},
            "applianceId": "[Device ID]"
        }
    }
}
```

用户说“小右小右，把空调的风速设为高速风”，YouZhuan接收用户意图后，向技能发送SetFanSpeedRequest消息，消息示例如下。

```
{
    "header": {
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "SetFanSpeedRequest",
        "messageId": "01ebf625-0b89-4c4d-b3aa-32340e894688",
        "payloadVersion": "1"
    },
    "payload": {
        "fanSpeed": {
            "level": "high"
        },
        "accessToken": "[OAuth token here]",
        "appliance": {
            "additionalApplianceDetails": {},
            "applianceId": "[Device ID]"
        }
    }
}
```

## SetFanSpeedConfirmation

设备风速设定成功时，智能家居服务会需要返回SetFanSpeedConfirmation消息。

**Header信息**

| 属性        | 取值                             |
| --------- | ------------------------------ |
| name      | SetFanSpeedConfirmation        |
| namespace | YouZhuan.ConnectedHome.Control |

**Payload信息**

| 属性                           | 描述说明                                                                                                                                      | 是否必须                                 |
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| fanSpeed                     | 设备的风速对象，包含一个属性值value。                                                                                                                     | 是                                    |
| fanSpeedvalue                | 设备的风速值，是int类型，取值范围是1～10。                                                                                                                  | 是                                    |
| previousState                | 设备风速变化前的设备状态。                                                                                                                             | 是                                    |
| previousState.fanSpeed       | 设备风速变化前的风速。                                                                                                                               | 是                                    |
| previousState.fanSpeed.value | 设备风速变化前的风速值。                                                                                                                              | 是                                    |
| attributes                   | 设备属性信息，支持上报一个或多个属性信息。请查看[属性信息](https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/attributes.md)，了解设备的属性和上报方式。 | 否，当设备属性信息发生变化时，建议将属性变更信息上报给YouZhuan。 |

**应用举例**

当空调风速设定为2档成功时，智能家居服务需要返回SetFanSpeedConfirmation消息，消息示例如下。

```
{
    "header": {
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "SetFanSpeedConfirmation",
        "messageId": "780013dd-99d0-4c69-9e35-db0457f9f2a7",
        "payloadVersion": "1"
    },
    "payload": {
        "previousState": {
            "fanSpeed": {
                "value": 1
            }
        },
        "fanSpeed": {
            "value": 2
        },
        "attributes": []
    }
}
```

## SetModeRequest

当用户需要设置设备的模式时，主机会向智能家居服务发送该消息。

**Header信息**

| 属性        | 取值                             |
| --------- | ------------------------------ |
| name      | SetModeRequest                 |
| namespace | YouZhuan.ConnectedHome.Control |

**Payload信息**

| 属性                                   | 描述说明                                                                                                                                                                                                                      | 是否必须     |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| accessToken                          | 设备云端获取的access token。                                                                                                                                                                                                      | 是        |
| appliance                            | 设备操作的具体对象，包括applianceId和additionalApplianceDetails。                                                                                                                                                                       | 是        |
| appliance.applianceId                | 设备标识符。标识符在用户拥有的所有设备上必须是唯一的。此外，标识符需要在同一设备的多个发现请求之间保持一致。标识符可以包含任何字母或数字和以下特殊字符：\_ - = # ; : ? @ &。标识符不能超过256个字符。                                                                                                             | 是        |
| appliance.additionalApplianceDetails | 提供给设备云使用，存放设备或场景相关的附加信息，是键值对。                                                                                                                                                                                             | 是，内容可以为空 |
| mode                                 | 设备的模式信息。                                                                                                                                                                                                                  | 是        |
| mode.deviceType                      | 设备类型，详细信息请参见[设备类型表](https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/control-message_markdown#%E8%AE%BE%E5%A4%87%E7%B1%BB%E5%9E%8B%E4%B8%8E%E6%A8%A1%E5%BC%8F%E8%A1%A8)。                     | 是        |
| mode.value                           | 设备模式，与设备类型相关，不同设备类型的模式不同，详细信息请参见[设备模式表](https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/control-message_markdown#%E8%AE%BE%E5%A4%87%E7%B1%BB%E5%9E%8B%E4%B8%8E%E6%A8%A1%E5%BC%8F%E8%A1%A8)。 | 是        |

**应用举例**

用户说“小右小右，把空调调成制冷模式”，主机理解用户意图后，向智能家居服务发送SetModeRequest消息，消息示例如下。

```
{
    "header": {
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "SetModeRequest",
        "messageId": "01ebf625-0b89-4c4d-b3aa-32340e894688",
        "payloadVersion": "1"
    },
    "payload": {
        "mode": {
            "deviceType": "AIR_CONDITION",
            "value": "COOL"
        },
        "accessToken": "[OAuth token here]",
        "appliance": {
            "additionalApplianceDetails": {},
            "applianceId": "[Device ID]"
        }
    }
}
```

## SetModeConfirmation

当设备的模式设置成功时，智能家居服务返回该消息。

**Header信息**

| 属性        | 取值                             |
| --------- | ------------------------------ |
| name      | SetModeConfirmation            |
| namespace | YouZhuan.ConnectedHome.Control |

**Payload信息**

| 属性                       | 描述说明                                                                                                                                                                                                      | 是否必须                                 |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| previousState            | 设置前的设备状态信息。                                                                                                                                                                                               | 是                                    |
| previousState.mode       | 设置前的设备模式。                                                                                                                                                                                                 | 是                                    |
| previousState.mode.value | 设置前的设备模式，详细信息请参见[设备模式表](https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/control-message_markdown#%E8%AE%BE%E5%A4%87%E7%B1%BB%E5%9E%8B%E4%B8%8E%E6%A8%A1%E5%BC%8F%E8%A1%A8)。 | 是                                    |
| mode                     | 设置后的设备模式。                                                                                                                                                                                                 | 是                                    |
| mode.deviceType          | 设备类型，详细信息请参见[设备类型表](https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/control-message_markdown#%E8%AE%BE%E5%A4%87%E7%B1%BB%E5%9E%8B%E4%B8%8E%E6%A8%A1%E5%BC%8F%E8%A1%A8)。     | 是                                    |
| mode.value               | 设置后的设备模式，详细信息请参见[设备模式表](https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/control-message_markdown#%E8%AE%BE%E5%A4%87%E7%B1%BB%E5%9E%8B%E4%B8%8E%E6%A8%A1%E5%BC%8F%E8%A1%A8)。 | 是                                    |
| attributes               | 设备属性信息，支持上报一个或多个属性信息。请查看[属性信息](https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/attributes.md)，了解设备的属性和上报方式。                                                                 | 否，当设备属性信息发生变化时，建议将属性变更信息上报给YouZhuan。 |

**应用举例**

设备模式设置成功时，智能家居服务返回SetModeConfirmation消息，消息示例如下。

```
{
    "header": {
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "SetModeConfirmation",
        "messageId": "780013dd-99d0-4c69-9e35-db0457f9f2a7",
        "payloadVersion": "1"
    },
    "payload": {
        "previousState": {
            "mode": {
                "value": "AUTO"
            }
        },
        "mode": {
            "deviceType": "AIR_CONDITION",
            "value": "COOL"
        },
        "attributes": []
    }
}
```

## SetColorRequest

用户需要设置灯光颜色时，主机会向智能家居服务发送该消息，通知技能调整灯光颜色。

**Header信息**

| 属性        | 取值                           |
| --------- | ---------------------------- |
| name      | SetColorRequest              |
| namespace | DuerOS.ConnectedHome.Control |

**Payload信息**

| 属性                                   | 描述说明                                                                                                          | 是否必须     |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------- | -------- |
| accessToken                          | 设备云端获取的access token。                                                                                          | 是        |
| appliance                            | 设备操作的具体对象，包括applianceId和additionalApplianceDetails。                                                           | 是        |
| appliance.applianceId                | 设备标识符。标识符在用户拥有的所有设备上必须是唯一的。此外，标识符需要在同一设备的多个发现请求之间保持一致。标识符可以包含任何字母或数字和以下特殊字符：\_ - = # ; : ? @ &。标识符不能超过256个字符。 | 是        |
| appliance.additionalApplianceDetails | 提供给设备云使用，存放设备或场景相关的附加信息，是键值对。DuerOS不解析或使用这些数据。该属性的内容不能超过5000字节。                                               | 是，内容可以为空 |
| color                                | 灯设置的颜色。包括[色相、饱和度、亮度（HSB）颜色模型](https://en.wikipedia.org/wiki/HSL_and_HSV)。                                     | 是        |
| color.hue                            | 灯光设置的色相，是double类型，取值范围为0.00〜360.00。                                                                           | 是        |
| color.saturation                     | 灯光设置饱和度，是double类型，取值范围为0.0000〜1.0000。                                                                         | 是        |
| color.brightness                     | 灯光设置的亮度，是double类型，取值范围为0.0000〜1.0000。                                                                         | 是        |

**应用举例**

用户说：“小右小右（或者面板操作），把卧室的灯设置为红色”，主机了解到该意图时，会向智能家居服务发送SetColorRequest消息，消息示例如下。

```
{
    "header": {
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "SetColorRequest",
        "messageId": "01ebf625-0b89-4c4d-b3aa-32340e894688",
        "payloadVersion": "1"
    },
    "payload": {
        "accessToken": "[OAuth token here]",
        "appliance": {
            "additionalApplianceDetails": {},
            "applianceId": "[Device ID]"
        },
        "color": {
            "hue": 0.0,
            "saturation": 1.0000,
            "brightness": 1.0000
        }
    }
}
```

## SetColorConfirmation

当灯光颜色成功设定时，智能家居服务需要返回该消息。

**Header信息**

| 属性        | 取值                           |
| --------- | ---------------------------- |
| name      | SetColorConfirmation         |
| namespace | DuerOS.ConnectedHome.Control |

**Payload信息**

| 属性                         | 描述说明                                                                                                                                      | 是否必须                               |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- |
| achievedState              | 颜色更改后设备的状态，该对象是必需的，当无法查询设备的状态或者避免查询引起的额外延迟，则可以返回SetColorRequest中发送的值。                                                                     | 是                                  |
| achievedState.color object | 颜色变化后设备的颜色。                                                                                                                               | 是                                  |
| color.hue                  | 灯光设置的色相，是double类型，取值范围为0.00〜360.00。                                                                                                       | 是                                  |
| color.saturation           | 灯光设置饱和度，是double类型，取值范围为0.0000〜1.0000。                                                                                                     | 是                                  |
| color.brightness           | 灯光设置的亮度，是double类型，取值范围为0.0000〜1.0000。                                                                                                     | 是                                  |
| attributes                 | 设备属性信息，支持上报一个或多个属性信息。请查看[属性信息](https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/attributes.md)，了解设备的属性和上报方式。 | 否，当设备属性信息发生变化时，建议将属性变更信息上报给DuerOS。 |

**应用举例**

当卧室灯光成功调成红色时，智能家居服务返回SetColorConfirmation消息，消息示例如下。

```
{
    "header": {
        "namespace": "YouZhuan.ConnectedHome.Control",
        "name": "SetColorConfirmation",
        "messageId": "780013dd-99d0-4c69-9e35-db0457f9f2a7",
        "payloadVersion": "1"
    },
    "payload": {
        "achievedState": {
            "color": {
                "hue": 0.0,
                "saturation": 1.0000,
                "brightness": 1.0000
            }
        },
        "attributes": []
    }
}
```


# 查询消息

查询消息主要是通过智能家居设备查询空气质量、查询空气湿度、查询设备温度、查询设备状态等信息。目前支持以下查询消息。


# 通知消息

当用户设备信息发生变化时，服务主动通过接口上报的消息


# 目前支持的设备

支持的设备

{% hint style="success" %}
&#x20;目前支持的设备类型
{% endhint %}

| 类型标识           | 类型描述                           |
| -------------- | ------------------------------ |
| SCENE\_TRIGGER | 描述特定设备的组合场景，设备之间没有相互关联，无特定操作顺序 |
| LIGHT          | 电灯类设备                          |
| LIGHT\_RGB     | 彩灯                             |
| LIGHT\_CT      | 色温灯                            |
| SWITCH         | 开关类设备                          |
| SOCKET         | 插座类设备                          |
| CURTAIN        | 窗帘类设备                          |
| AIR\_CONDITION | 空调类设备                          |


# 支持的操作类型

目前支持的操作类型

智能家居设备支持以下操作类型。

* turnOn： 打开
* timingTurnOn： 定时打开
* turnOff： 关闭
* timingTurnOff： 定时关闭
* pause： 暂停
* continue： 继续
* setBrightnessPercentage： 设置灯光亮度
* incrementBrightnessPercentage： 调亮灯光
* decrementBrightnessPercentage： 调暗灯光
* incrementColorTemperature： 增高灯光色温
* decrementColorTemperature： 降低灯光色温
* setColorTemperature： 设置灯光色温
* incrementTemperature： 升高温度
* decrementTemperature： 降低温度
* setTemperature： 设置温度
* incrementVolume： 调高音量
* decrementVolume： 调低音量
* setVolume： 设置音量
* setVolumeMute： 设置设备静音状态
* incrementFanSpeed： 增加风速
* decrementFanSpeed： 减小风速
* setFanSpeed： 设置风速
* setMode： 设置模式
* unSetMode： 取消设置的模式
* setColor： 设置颜色


# 云端接入

客户具有云云对接能力的对接方式


# 流程简介

云端接入流程简介

{% hint style="warning" %}
云云接入需要厂商具有OAuth2.0服务
{% endhint %}

接入流程简介

![](/files/-LwQiuRZEYki3osjQJOK)


# 服务接入流程

云端服务接入流程

## 1.注册厂商云

下载文件，将里面的内容对应填写，发送给右转的开发人员进行信息注册

{% file src="/files/-LwRCzebDn0UaJzJTgcT" %}

## 2.授权方式

参照OAuth2.0标准协议进行授权 可参考[AliGenie文档](https://www.aligenie.com/doc/357554/chhley)

## 3.流程时序图

![](/files/-LwQjx0-NOaJALmVyKVS)

## 4.[智能家居协议](/dev-link-host/zhi-neng-jia-ju-xie-yi)


# Android端SDK接入

通过使用SDK开发一个服务App安装至智能主机上进行控制设备

用户不具备云端对接能力,或者想直连智能主机，可使用SDK接入

SDK接入需要集成右转公司的智能家居开发包,需要客户将自己的网关协议及SDK协议集成至一个Service App中，将协议转换为对为SDK开发包中的对象

### SDK接入交互图

智能主机通过AIDL的方式,将控制的信息发送到集成了SmartHomeSDK的App再发送数据到智能家居的平台来达到控制设备的目的

![](/files/-LsegEhh5GFkEHMrkkzu)


# 接入指南

Android SDK接入指南

### 1.开发环境

由于最终集成SDK的软件需要安装至智能主机上\
因此开发方式为原生App开发因此需要具有Android开发环境,推荐使用Android Studio开发工具\
请开发者优先配置好Android的开发环境后进行开发

### 2.对接Demo下载

{% embed url="<https://github.com/youzhuan2019/SmartHomeAppDemo>" %}

使用 Android Studio 导入此Demo编译运行到智能主机上即可实现通信

### 3.智能主机如何导入设备

1.选择添加方式为 智能家居服务发现  &#x20;

![](/files/-MEMojalIgCbLxjBSgMX)

2.登录智能家居平台

![](/files/-MEQDpl_V-taY_UrEpIz)

3.登录成功后进入设备添加界面

选中设备后点击确认添加即可将设备导入到智能主机中进行控制

![](/files/-MEQGQvbzEXCxOrpgPdw)

### 4.获取智能家居开发包

链接: <https://pan.baidu.com/s/1X_2uclN3VDJ7BW2V10t9wA> 提取码: 6aaz

### 5.项目配置

5.1在AndroidStudio Module级别下配置build.gradle

```
repositories {
    flatDir {
        dirs 'libs'
    }
}
dependencies {
    implementation name: 'yz_iot_v0.1',ext:"aar"
    implementation 'com.github.zhaokaiqiang.klog:library:1.6.0'
    implementation 'com.alibaba:fastjson:1.1.71.android'
}
```

5.2创建类并继承自YzIotService实现父类方法并配置AndroidManifest.xml

```
public class CustomService extends YzIotService {
    ..........
}
```

配置AndroidManifest.xml并注册该服务类

```
<service android:name=".CustomService">
    <intent-filter>
        <action android:name="com.youzhuan.iotserver"/>
    </intent-filter>
</service>
```


# 初始化配置,登录

### 运行流程图

![](/files/-MERO4rZEX__vr9_cxA-)

### 初始化

```java
@Override
public void init(Context context) {
    //初始化代码块
}
```

### 获取服务配置信息

```java
@Override
public SdkInfoConfig getSdkConfig() {
    KLog.e("获取配置 getSdkConfig");
    return config;
}
```

```java
public class SdkInfoConfig {
    private boolean supportLogin;  //是否支持登录
    private String manufacturerName;  //厂商的名称
}
```

### 支持登录

需要将SdkInfoConfig对象的supportLogin配置为true,智能主机获得配置信息后判断如果为需要登录将会进入登录界面,否则直接进入搜索设备界面

当设备已经登录过后,重新开机上电,将会静默登录服务

```java
@Override
public void login(String user, String pwd) {
   JSONObject result = new JSONObject();
        if("admin".equals(user) && "123456".equals(pwd)){
            result.put("isSuccess",true);
            result.put("info","登录成功");
        }else{
            result.put("isSuccess",false);
            result.put("info","登录失败");
        }
   notifyHost(SdkAction.SDK_LOGIN,result.toJSONString()); 
}
```

登录成功后调用notifyHost方法通知智能主机登录成功\
action为[SDK\_LOGIN](/dev-link-host/android-link-sdk/action-shi-jian#sdk_login)

返回数据格式

```java
{
    "isSuccess":true/false
    "info":"失败或成功信息"
}
```


# 设备发现

### 运行流程图

![](/files/-MEVoHZw-npM4IJsqaGq)

### 调用方法（discoverAppliance）

智能主机需要获取设备信息时,将会触发discoverAppliance方法

```java
@Override
public void discoverAppliance(String param) {
    //实例化一个设备对象
    Appliance appliance = new Appliance();
    //设置设备的唯一Id值
    appliance.setApplianceIdByInt(1);
    //设置设备名称
    appliance.setDeviceName(1+"灯");
    //设置设备类型
    appliance.setApplianceTypes(YzDevType.LIGHT);
    //设置支持的操作
    appliance.setActions(YzDevAction.turnOn,YzDevAction.turnOff);
    //添加到集合中
    virtualDevice.add(appliance);
    //获取设备完成后调用notifyHost 通知Action为 GET_DEVICE_SUCCESS,返回设备信息
    notifyHost(SdkAction.GET_DEVICE_SUCCESS, JSON.toJSONString(virtualDevice));
}
```

### Appliance设备对象

Appliance是设备对象,用于描述设备的信息,需要将不同的三方设备对象转换为此对象后再通过notifyHost通知主机更新数据

```java
public class Appliance  {
    //设备ID
    /**设备唯一ID*/
    private String applianceId;
    //设备具有的操作类型
    /**设备具有的操作类型*/
    private String[] actions;
    //设备的类型
    /**设备的类型*/
    private String[] applianceTypes;
    //设备名
    /**设备名*/
    private String deviceName;
    //厂商名
    /**厂商名*/
    private String manufacturerName;
    //如果具有自己的图标的话用该字段（可选,无值默认使用对应类型的本地图标）
    //图片URL链接
    /**如果具有自己的图标的话用该字段（可选,无值默认使用对应类型的本地图标）
     图片URL链接*/
    private String icon;
    //设备型号
    /**设备型号*/
    private String model;
    //设备型号名称
    /**设备型号名称*/
    private String modelName;
    //设备区域名称例如 （客厅,厨房）,如果此字段为空则可能赋予默认的值
    /**设备区域名称例如 （客厅,厨房）,如果此字段为空则可能赋予默认的值*/
    private String zone = "客厅";
    //设备楼层名称例如 （1楼,2楼）,如果此字段为空则可能赋予默认的值
    /**设备楼层名称例如 （1楼,2楼）,如果此字段为空则可能赋予默认的值*/
    private String floor = "1楼";
    //设备属性K - V
    /**设备属性K - V*/
    private JSONObject attributes;
    //补充字段
    /**补充字段*/
    private JSONObject additionalApplianceDetails;
    }
```

### 获取设备成功

由于设备加载时的时间长短不一,因此需要开发者在设备搜索完成后,自行发送通知获取设备成功的消息

SdkAction.[GET\_DEVICE\_SUCCESS ](/dev-link-host/android-link-sdk/action-shi-jian#get_device_success)\
获取成功

SdkAction.[GET\_DEVICE\_FAIL](/dev-link-host/android-link-sdk/action-shi-jian#get_device_fail)\
获取失败

数据：数组类型Appliance

```java
 notifyHost(SdkAction.GET_DEVICE_SUCCESS, JSON.toJSONString(virtualDevice));
```


# 设备控制

### 运行流程图

![](/files/-MEWGS_zehYMdJR-Gj3y)

## 调用方法（applianceControl）

用户控制设备时会调用此方法applianceControl方法，携带参数ControlRequest,客户需要根据ControlRequest在此方法内实现自己的控制逻辑

```java
@Override
public void applianceControl(String controlRequest) {
    
}
```

## ControlRequest

携带设备被控制的设备对象[Appliance](/dev-link-host/android-link-sdk/she-bei-fa-xian#appliance-she-bei-dui-xiang)

当前的请求类型，可使用YzRequestCode类

values携带改变的参数值

如果是通过语音控制的,则可以通过values对象获取“voiceStr”的值

具体请参考[请求类型与数据参照](/dev-link-host/android-link-sdk/controlrequest-dui-zhao)

```java
    /**设备对象*/
    private Appliance appliance;
    /**请求类型*/
    @YzRequestCode
    private String type;
    /**请求携带的属性值*/
    private JSONObject values;
```

## 控制结果返回

由于设备控制结果可能不为同步,需要使用notifyHost方法通知智能主机更新数据

SdkAction.[CONTROLLER\_SUCCESS](/dev-link-host/android-link-sdk/action-shi-jian#controller_success)

控制成功时传递此Action

SdkAction.[CONTROLLER\_FAIL](/dev-link-host/android-link-sdk/action-shi-jian#controller_fail)

控制失败时传递此Action

SdkAction.[NOTIFY\_APPLIANCE\_CHANGE](/dev-link-host/android-link-sdk/action-shi-jian#notify_appliance_change)

设备状态改变时传递此Action

返回数据

```java
{
    "applianceId":"设备Id"
    "attributes":{
       
    }
}
```


# SdkAction

YzAction

### &#x20;SDK\_INIT\_IOT\_SERVER

初始化IOT服务

### SDK\_GET\_LOGIN\_STATE

获取登录状态

### SDK\_LOGIN

登录

### SDK\_LOGOUT

登出

### SDK\_CONTROL

设备控制

### NOTIFY\_APPLIANCE\_CHANGE

主动上报设备信息

### GET\_DEVICE\_SUCCESS

获取设备成功

### GET\_DEVICE\_FAIL

获取设备失败

### CONTROLLER\_SUCCESS

控制设备成功

### CONTROLLER\_FAIL

控制设备失败

##


# 请求类型与数据参照

主机端请求标识码

| type/action            | values/data                                                                                                                                                                            |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| TurnOnRequest          |                                                                                                                                                                                        |
| TurnOffRequest         |                                                                                                                                                                                        |
| PauseRequest           |                                                                                                                                                                                        |
| SetTemperatureRequest  | <p>{</p><p>  “temperature”:int</p><p>}</p>                                                                                                                                             |
| SetFanSpeedRequest     | <p>{</p><p>  “fanSpeedValue”:int</p><p>  或者</p><p> “fanSpeedLevel”:String</p><p>}</p>                                                                                                  |
| SetModeRequest         | <p>{</p><p>  "mode":String</p><p>}</p>                                                                                                                                                 |
| UnsetModeRequest       | <p>{</p><p>  "mode":String</p><p>}</p>                                                                                                                                                 |
| SetFanDirectionRequest | <p>{</p><p>  "fanDirection":String</p><p>}</p>                                                                                                                                         |
| SetColorRequest        | <p>{</p><p>  //color值为HSV模式</p><p>//需要RGB值需要转换</p><p>  "color":{</p><p>       "hue":double</p><p>        "saturation":double</p><p>        "brightness":double</p><p>    }</p><p>}</p> |


# TCP\&UDP协议

## 简介

通过TCP\&UDP自定义协议，与网关设备交互获取设备信息及控制智能家居设备

## 接入说明

使用TCP\&UDP协议接入需要网关作为服务端，使用UDP监听背景音乐主机发送过来的连接广播数据，TCP服务端用来接收协议数据

监听UDP端口：5555&#x20;

回复UDP端口：5554

## 协议格式

|  **包头**  |      **数据长度**      |   JSON数据   |                 **校验和**                 |
| :------: | :----------------: | :--------: | :-------------------------------------: |
| FF494F54 | 为JSON数据所占字节数（16进制） | DATA，字符串数据 | <p>异或校验，数据长度+数据</p><p>的字节进行异或（16进制）</p> |

### 异或算法代码

```java
public static int xorSum(byte[] datas) {
    int temp = datas[1];              // 此处首位取1是因为本协议中第一个数据不参数异或校验，转为int防止结果出现溢出变成负数
    for (int i = 2; i < datas.length; i++) {
        int preTemp = temp;
        int iData;
        if (datas[i] < 0) {
            iData = datas[i] & 0xff;      // 变为正数计算
        } else {
            iData = datas[i];
        }
        if (temp < 0) {
            temp = temp & 0xff;          // 变为正数
        }
        temp ^= iData;
    }
    return temp;
}
```

## 建立TCP连接

背景音乐主机发送隔5秒发送一次UDP广播包，网关设备收到后，回复自身TCP服务的IP地址和端口号

当背景音乐主机收到UDP广播回复后会连接网关的TCP服务

### 交互图

![](/files/-MEkdiwDZZX_IpwmbzrP)

### 请求JSON格式

```java
{
    "type":"REQUEST_LINK_HOST"
}
```

### 响应JSON格式

```java
{
    "type":"RESPONSE_LINK_HOST",
    "data":{
        "ip":"",
        "port":
    }
}
```

## 获取设备

获取智能家居设备信息

### 请求JSON格式

```java
{
    "type":"REQUEST_FIND_DEVICES"
}
```

### 响应JSON格式

```java
{
    "type":"RESPONSE_FIND_DEVICES",
    "data":{
        "appliances":[
        {
            //设备支持的操作,可不填写
            "actions": [
                "turnOn",
                "turnOff",
                "incrementBrightnessPercentage",
                "decrementBrightnessPercentage"
            ],
            //补充字段
            "additionalApplianceDetails": {},
            //设备唯一ID
            "applianceId": "设备唯一ID",
            //设备类型
            "applianceTypes": [
                "LIGHT"
            ],
            //设备属性
            "attributes": [
                {
                    "name": "name",
                    "scale": "",
                    "timestampOfSample": 1496741861,
                    "uncertaintyInMilliseconds": 10,
                    "value": "卧室的灯"
                }
            ],
            //设备友好描述
            "friendlyDescription": "展现给用户的详细介绍",
            //设备名
            "friendlyName": "卧室的灯",
            //厂商名称
            "manufacturerName": "设备制造商的名称",
            //型号名
            "modelName": "fancyLight",
            //软件版本
            "version": "your software version number here."
        }
    ]
    }
}
```

## 控制设备

设备控制时发送的数据

data的携带参数会因为aciton的不同而改变，可参考[请求类型与数据](/dev-link-host/android-link-sdk/controlrequest-dui-zhao)

### 请求JSON格式

```java
{
    //代表协议指令类型
    "type":"REQUEST_DEVICE_CONTROLLER",
    //控制请求的类型
    "action":"TurnOnRequest",
    "voiceStr":"语音原句",
    //控制可能携带的数据
    "data":{
        "applianceId":"设备ID",
        "values":{
            "temperature":2,
            "fanSpeedValue":2,
            "fanSpeedLevel":2,
            "mode":"",
            "fanDirection":"fanDirection",
            "color":{
                "hue":double
                "saturation":double
                "brightness":double
            },
            "isMute":2,
            "volume":2,
            "channel":2,
        }
    }
}
```

### 响应JSON格式

```java
{
    "type":"RESPONSE_DEVICE_CONTROLLER",
    "success":true/false,
    "msg":"返回的信息",
    "voiceStr":"控制完成后需要播报的语句",
    "data":{
        "applianceId":"设备ID",
        "values":{
            //控制后的数据状态上报
            "turnOnState":"ON/OFF"
            "temperature":2,
            "fanSpeedValue":2,
            "fanSpeedLevel":"",
            "mode":"",
            "fanDirection":"fanDirection",
            "color":{
                "hue":double
                "saturation":double
                "brightness":double
            },
            "isMute":2,
            "volume":2,
            "channel":2, 
        }
    }
}
```


# 控制右转主机

三方设备需要控制右转主机系列的文档说明


# 外网接入

通过云端控制背景音乐主机

![控制流程图](/files/-LxKlGbEF0UvUc_02mHh)

##

###


# 接入指南

介绍

![开发流程图](/files/-LwBir1LUcVY35JRKW9c)


# 添加SDK

把SDK添加到开发工程

## 添加aar包

1. 拿到我们名为mqttClient.aar的文件
2. 添加到开发工程中
3. 根据文档继续开发


# 账号体系

常用的发送验证码，登录，注册，修改密码等功能的介绍

## CloudUrlRequest

### 介绍

> &#x20;   云端API发送请求类，包含账户体系的所有请求

### 获取对象

```
CloudUrlRequest cloudUrlRequest = CloudUrlRequest.getInstance();
```

## 发送效验码

### 介绍

需要发送验证码的，通过此方法发送验证码

### 方法原型

```
/**
* 获取效验码
*
* @param phoneNumber 账号
* @param listener    验证码发送结果监听
*/
public void requestIdentifyingCode(@NonNull String phoneNumber, @NonNull final CloudUrlRequestListener listener);
```

### 调用

> &#x20;  使用CloudUrlRequest对象调用

### 参数介绍

* phoneNumber：需要发送验证码的手机号码
* listener：一个CloudUrlRequestListener对象，验证码发送结果监听

{% hint style="success" %}
请求成功调用CloudUrlRequestListener对象的onResponse(T response);方法，参数是一个IdentifyingCodeBean的Java bean对象，含有部分的请求返回数据。
{% endhint %}

{% hint style="warning" %}
请求失败调用CloudUrlRequestListener对象的onFailure(int errType);方法，参数请求错误的错误码，详情请参考错误码
{% endhint %}

## 账号注册

### 介绍

此方法用于注册账号

### 方法原型

```
/**
* 注册账号
*
* @param phoneNumber     账号
* @param password        密码
* @param password2       验证密码
* @param identifyingCode 验证码
* @param listener        注册结果监听
*/
public void requestRegister(@NonNull String phoneNumber, @NonNull String password, String password2, @NonNull int identifyingCode, @NonNull final CloudUrlRequestListener listener);
```

### 调用

* 使用CloudUrlRequest对象调用，此方法需要验证效验码，调用方法前需要调用发送验证码，详情请参考发送验证码

### 参数介绍

* phoneNumber:注册的手机号码
* password：输入注册账号的密码
* password2：重新确认密码
* identifyingCode：用户输入的验证码
* listener：一个CloudUrlRequestListener对象，注册账号结果监听

{% hint style="success" %}
请求成功调用CloudUrlRequestListener对象的onResponse(T response);方法，参数是一个RegisterBean的Java bean对象，含有注册的数据。
{% endhint %}

{% hint style="warning" %}
请求失败调用CloudUrlRequestListener对象的onFailure(int errType);方法，参数请求错误的错误码，详情请参考错误码
{% endhint %}

## 重置密码

### 介绍

此方法用于重置密码，需要验证码，密码是系统随机生成，并通过短信告知用户

### 方法原型

```
/**
* 重置密码
*
* @param phoneNumber     账号 
* @param identifyingCode 验证码
* @param listener        注册结果监听
*/
public void registerBackPassword(@NonNull String phoneNumber, @NonNull int identifyingCode, final @NonNull CloudUrlRequestListener listener)
```

### 调用

* 使用CloudUrlRequest对象调用，此方法需要验证效验码，调用方法前需要调用发送验证码，详情请参考发送验证码

### 参数介绍

* phoneNumber：账号
* identifyingCode：用户输入的验证码验证码
* listener：一个CloudUrlRequestListener对象，重置密码请求结果监听

{% hint style="success" %}
请求成功调用CloudUrlRequestListener对象的onResponse(T response);方法，参数是一个BackPasswordBean的Java bean对象。
{% endhint %}

{% hint style="warning" %}
请求失败调用CloudUrlRequestListener对象的onFailure(int errType);方法，参数请求错误的错误码，详情请参考错误码
{% endhint %}

## 找回密码

### 介绍

通过验证码重新设置密码，需要验证码

### 方法原型

```
/**
* 通过验证码修改账户密码
*
* @param phoneNumber     账号
* @param identifyingCode 验证码
* @param newPassword1    新密码
* @param newPassword2    确认密码
* @param listener        注册结果监听
*/
public void registerBackPassword(@NonNull String phoneNumber, @NonNull int identifyingCode, @NonNull String newPassword1, @NonNull String newPassword2, final CloudUrlRequestListener listener);
```

### 调用

* 使用CloudUrlRequest对象调用，此方法需要验证效验码，调用方法前需要调用发送验证码，详情请参考发送验证码

### 参数介绍

* phoneNumber：用户输入账号
* identifyingCode：用户输入的效验码
* newPassword1：用户输入的新密码
* newPassword2：用户确认输入的新密码
* listener：一个CloudUrlRequestListener对象，找回密码请求结果监听

{% hint style="success" %}
请求成功调用CloudUrlRequestListener对象的onResponse(T response);方法，参数是一个AlterPasswordBean的Java bean对象。
{% endhint %}

{% hint style="warning" %}
请求失败调用CloudUrlRequestListener对象的onFailure(int errType);方法，参数请求错误的错误码，详情请参考错误码
{% endhint %}

## 修改密码

### 介绍

可以使用这个方法用原密码修改当前账户的密码

### 方法原型

```
/**
* 修改账户密码
*
* @param phoneNumber  需要修改密码的账号
* @param oldPassword  旧密码
* @param newPassword1 新密码
* @param newPassword2 确认新密码
* @param listener     修改密码结果监听
*/
public void requestAlterPassword(@NonNull String phoneNumber, @NonNull String oldPassword, @NonNull String newPassword1, @NonNull String newPassword2, final CloudUrlRequestListener listener)
```

### 调用

使用CloudUrlRequest对象调用

### 参数介绍

* phoneNumber：需要修改密码的
* oldPassword：用户输入的原密码
* newPassword1：用户输入的新密码
* newPassword2：用户确认输入的新密码
* listener：一个CloudUrlRequestListener对象，找回密码请求结果监听

{% hint style="success" %}
功调用CloudUrlRequestListener对象的onResponse(T response);方法，参数是一个AlterPasswordBean的Java bean对象。
{% endhint %}

{% hint style="warning" %}
请求失败调用CloudUrlRequestListener对象的onFailure(int errType);方法，参数请求错误的错误码，详情请参考错误码
{% endhint %}

## 登录

### 介绍

用于账号和密码登录

### 方法原型

```
/**
* 登录账号
*
* @param phoneNumber 账号
* @param password    密码
* @param listener    注册结果监听
*/
public synchronized void requestLogging(@NonNull String phoneNumber, @NonNull String password, @NonNull final CloudUrlRequestListener listener);
```

### 调用

* 使用CloudUrlRequest对象调用

### 参数介绍

* phoneNumber：用户输入账号
* password：用户输入的密码
* listener：一个CloudUrlRequestListener对象，登录请求结果监听

{% hint style="success" %}
请求成功调用CloudUrlRequestListener对象的onResponse(T response);方法，参数是一个LoginBean的Java bean对象。
{% endhint %}

{% hint style="warning" %}
请求失败调用CloudUrlRequestListener对象的onFailure(int errType);方法，参数请求错误的错误码，详情请参考错误码
{% endhint %}


# 设备管理

登录成功后，可以获取账号下的所有设备，操作设备等功能

## 获取所有设备

### 介绍

登录成功后可以获取登录账号下面的所有设备

### 方法原型

```
/**
* 获取所有的设备
*
* @param phoneNumber 账号
* @param listener    注册结果监听
*/
public void requestAllDevice(@NonNull String phoneNumber, @NonNull final CloudUrlRequestListener listener)
```

### 调用

使用CloudUrlRequest对象调用

### 参数介绍

* phoneNumber：当前登录的账号
* listener：一个CloudUrlRequestListener对象

{% hint style="success" %}
请求成功调用CloudUrlRequestListener对象的onResponse(T response);方法，参数是一个List\<com.youzhuan.mqttclient.device.bean.Device>,包含账号下面所有的音乐主机
{% endhint %}

{% hint style="warning" %}
请求失败调用CloudUrlRequestListener对象的onFailure(int errType);方法，参数请求错误的错误码，详情请参考错误码
{% endhint %}

## com.youzhuan.mqttclient.device.bean.Device

### 源码

使用get方法获取内容

```
    private String deviceName;//设备名称
    private String deviceType;//设备类型
    private String deviceId;//设备ID
    private String callbackUrl;//设备callbackUrl
    private String topicUrl;//设备topicUrl
    private String sendTopic;//接收消息的Topic
    private String subscribeTopic;//发送消息的Topic
```

## 初始化SDK

### 获取MqttControlFactory对象

使用MqttControlFactory的静态方法getInstance()直接获取

```
public static MqttControlFactory getInstance(Context context);
```

### 初始化SDK

**获*****取所有设备成功后***，使用MqttControlFactory对象调用init();方法，初始化成功返回true

```
public boolean init();
```

### 获取MqttControl对象

可以通过该类直接控制设备

#### 获取对象

初始化SKD后可以直接获取该对象，由于机器可能连接在不同的服务器，需要音乐主机连接服务器的地址topicUrl，所以只能在获取到音乐主机对象（Device）后才能获取MqttControl对象

```
MqttContorl mqttContorl = MqttControlFactory.getInstance().getMqttContorl(device.getTopicUrl());
```

## 分享设备

### 介绍

通过此方法把一个设备分享给另外一个设备

### 方法原型

```
/**
* 分享设备
*
* @param phoneNumber 需要分享的账号
* @param listener    注册结果监听
*/
public void requestShareDevice(@NonNull String phoneNumber, final @NonNull CloudUrlRequestListener listener)
```

### 调用

使用CloudUrlRequest对象调用

### 参数介绍

* **phoneNumber：需要分享的账号**
* **listener：**&#x4E00;个CloudUrlRequestListener对象

{% hint style="success" %}
分享成功调用CloudUrlRequestListener对象的onResponse(T response);方法，参数是一个ShareDeviceBean的Java Bean对象
{% endhint %}

{% hint style="warning" %}
请求失败调用CloudUrlRequestListener对象的onFailure(int errType);方法，参数请求错误的错误码，详情请参考错误码
{% endhint %}

## 删除设备

### 介绍

通过这个方法可以把已经绑定的设备，取消绑定当前账号，让其他账号绑定

### 方法原型

```
 /**
 * 删除设备
 *
 * @param phoneNumber 登录的账号
 * @param sid         分享的分享id
 * @param deviceId    设备的ID
 * @param listener    监听事件
 */
public void requestRemoveDevice(@NonNull String phoneNumber, @NonNull String sid, @NonNull String deviceId, @NonNull final CloudUrlRequestListener listener)
```

### 调用

使用CloudUrlRequest对象调用

### 参数介绍

* **phoneNumber：当前登录的账号**
* **sid：分享设备的ID**
* **deviceId：音乐主机的设备ID**
* **listener：一个实现**CloudUrlRequestListener的对象，**监听删除账号是否成功**

{% hint style="success" %}
分享成功调用CloudUrlRequestListener对象的onResponse(T response);方法，参数是一个RemoveDeviceBean的Java Bean对象
{% endhint %}

{% hint style="warning" %}
请求失败调用CloudUrlRequestListener对象的onFailure(int errType);方法，参数请求错误的错误码，详情请参考错误码
{% endhint %}

## 绑定设备

### 介绍

通过此方法可以把，一台没有绑定的机器绑定到账号，需要扫描机器段二维码的信息

### 方法原型

```
/**
* 绑定设备
* @param scanDeviceBean   机器端二维码的信息
* @param bindDeviceStatus 绑定设备状态监听器
*/
public void bindDevice(@NonNull final ScanDeviceBean scanDeviceBean,@NonNull final BindDeviceStatus bindDeviceStatus)
```

### 调用

使用ScanDeviceBean中的topicUrl地址获取MqttControl对象，通过MqttControl对象调用bindDevice方法

### 参数介绍

* scanDeviceBean：机器端二维码信息的Java bean对象，扫描二维码后使用该对象解析
* bindDeviceStatus：一个实现BindDeviceStatus的对象，作为回调对象

{% hint style="success" %}
绑定成功后会回调bindDeviceStatus对象的bindSuccess();方法
{% endhint %}

{% hint style="warning" %}
绑定失败后会回调bindDeviceStatus对象的bindFailure();方法
{% endhint %}


# 设备控制

操作账号下面的音乐主机

## 发送消息

### 介绍

发送指令消息给音乐主机，消息的内容是通过CreateMessage创建，消息创建请参考该类的文档

### 方法原型

```
/**
 * 发送消息给机器端
 *
 * @param topic        地址
 * @param phoneMessage 消息
 */
public void sendMessage(String topic, PhoneMessage phoneMessage)
```

### 调用

使用MqttContorl对象调用

### 参数介绍

* topic：Deivie中的sendTopic
* phoneMessage：消息的Java bean 对象，通过CreateMessage创建，请参考CreateMessage的介绍

## 使用CreateMessage创建消息

### 介绍

创建操作设备的消息PhoneMessage的java bean，然后通过MqttControl对象把消息发送出去

### 获取对象

通过该类的静态方法直接获取

```
public static CreateMessage getInstance() {
        ...
 }
```

### 音乐下一曲

创建播放下一首的消息，控制的是当前房间

#### 方法原型

```
/**
*
* 创建播放下一首的消息
*
* @return 下一曲的CreateMessage
*/
public PhoneMessage musicNext();
```

### 音乐播放暂停

创建控制音乐播放暂停的消息，控制的是当前房间

### 方法原型

```
/**
* 创建播放暂停的消息
*
* @return 播放暂停的CreateMessage
*/
public PhoneMessage musicPlayOrPause();
```

### 音乐播放

创建控制音乐播放的消息，控制的是当前房间

#### 方法原型

```
/**
* 创建播放的消息
*
* @return 播放的CreateMessage
*/
public PhoneMessage musicPlay();
```

### 音乐暂停

创建控制音乐暂停的消息，控制的是当前房间

#### 方法原型

```
/**
* 创建暂停的消息
*
* @return 暂停的CreateMessage
*/
public PhoneMessage musicPause()
```

### 音乐上一首

创建控制音乐上一首的消息，控制的是当前房间

#### 方法原型

```
/**
 * 创建播放上一首的消息
 *
 * @return 上一曲的CreateMessage
 */
public PhoneMessage musicPre();
```

### 设置房间

设置当前控制的房间，此方法只有双分区的才有用

#### 方法原型

```
/**
 * 设置房间
 *
 * @param area 设置的房间   11:房间一   12:房间二    13:同步
 * @return 设置的CreateMessage
 */
public PhoneMessage musicArea(int area);
```

#### 参数介绍

* area：设置的房间号,CreateMEssage的常量

| 房间  | 参数名       | 参数值 |
| --- | --------- | --- |
| 区域一 | AREA1     | 11  |
| 区域二 | AREA2     | 12  |
| 同步  | AREA\_SYN | 13  |

### 设置意图音源

设置意图音源，可以用来控制音乐主机的页面，控制的是当前房间

#### 方法原型

```
/**
 * 设置意图音源
 *
 * @param flag 意图音源
 * @return 设置意图音源的CreateMessage
 */
public PhoneMessage musicFlag(int flag)
```

#### 参数介绍

* flag：需要设置的意图音源，参数如下

```
public static final int AREA_SYN = 13;//一键同步
public static final int FLG_LOCAL_MUSIC = 0;//本地
public static final int FLG_LOCAL_SD = 1;//tf
public static final int FLG_LOCAL_USB = 2;//usb
public static final int FLG_LOCAL_AUX1 = 3;//aux
public static final int FLG_local_dlna = 4;//dlna
public static final int FLG_LOCAL_BT = 5;//bt
public static final int FLG_LOCAL_FAVORITE = 6;//我的收藏
public static final int FLG_Local_XMLY = 7;//喜马拉雅
public static final int FLG_Local_All_MUSIC = 8;//所有音乐
public static final int FLG_Local_HISTORY = 9;//播放历史
public static final int FLG_Local_SEARCH = 10;//音乐搜索
public static final int FLG_LOCAL_SCENE = 11;//场景音乐
public static final int FLG_RTSP = 12;//声音共享
public static final int FLG_LOCAL_FM = 13;//收音机
public static final int FLG_NO_SOURCE = 14;//无音源
public static final int FLG_CLOUD_MUSIC = 15;//云音乐
public static final int FLG_AIRPLAY = 16;//AirPlay
public static final int FLG_NET_CHILD=17;//儿童
```

### 声音减少

把音乐主机的音量减少1，控制的是当前房间

#### 方法原型

```
/**
 * 声音减少
 *
 * @return 声音减少的CreateMessage
 */
public PhoneMessage volumeMinus();
```

### 声音增加

把音乐主机的音量增加1，控制的是当前房间

#### 方法原型

```
/**
 * 声音增加
 *
 * @return 声音增加的CreateMessage
 */
public PhoneMessage volumeAdd()
```

### 使用位置播放歌曲

播放主机当前列表的position首歌曲，控制的是当前房间

#### 方法原型

```
/**
 * 使用位置播放歌曲
 *
 * @param position 歌曲的位置
 * @return 使用位置播放歌曲的CreateMessage
 */
public PhoneMessage playMusicPosition(int position)
```

#### 参数介绍

* position：需要播放歌曲的位置

### 使用音乐ID播放歌曲

使用音乐的ID，播放当前列表的歌曲，控制的是当前房间

#### 方法原型

```
/**
 * 使用ID播放歌曲
 *
 * @param id 歌曲的ID
 * @return 使用ID播放歌曲的CreateMessage
 */
public PhoneMessage playMusicID(int id):
```

#### 参数介绍

* id：需要播放歌曲的音乐ID

### EQ模式

创建设置播放器EQ模式的CreateMessage，控制的是当前房间

#### 方法原型

```
/**
 * 设置EQ模式
 *
 * @param eqMode EQ模式
 * @return 设置EQ模式的CreateMessage
 */
public PhoneMessage musicEqMode(int eqMode)
```

#### 参数介绍

eqMode：需要设置的EQ模式

| 模式 | 值（int） |
| -- | ------ |
| 普通 | 0      |
| 经典 | 1      |
| 爵士 | 2      |
| 摇滚 | 3      |
| 流行 | 4      |

### 播放模式

创建设置播放模式的CreateMessage，控制的是当前房间

#### 方法原型

```
/**
 * 设置播放模式
 *
 * @param playMode 播放模式
 * @return 设置播放模式的CreateMessage
 */
public PhoneMessage musicPlayMode(int playMode);
```

#### 参数介绍

* playMode：设置的播放模式

| 播放模式 | 值（int） |
| ---- | ------ |
| 顺序播放 | 0      |
| 随机播放 | 1      |
| 单曲循环 | 2      |
| 循环播放 | 3      |

### 收藏音乐

创建收藏当前播放音乐的CreateMessage，收藏的是当前房间的音乐

#### 方法原型

```
/**
 * 收藏音乐
 *
 * @return 收藏的CreateMessage
 */
public PhoneMessage musicFavorite();
```

### 下载歌曲

创建下载当前播放音乐的CreateMessage，下载的是当前房间的音乐

#### 方法原型

```
/**
 * 下载歌曲
 *
 * @return 下载消息的CreateMessage
 */
public PhoneMessage musicDownload();
```

### 设置播放进度

创建设置播放进度的CreateMessage，设置的是当前房间的音乐

#### 方法原型

```
/**
 * 设置播放进度
 *
 * @param seek 播放进度
 * @return 设置播放进度的CreateMessage
 */
public PhoneMessage musicSeek(int seek)
```

#### 参数介绍

* seek：设置播放进度的时间，毫秒

### 设置设备名

设置机器的名称，同时也是区域一的名称

#### 方法原型

```
/**
 * 设置设备名
 *
 * @param deviceName 设备名
 * @return 设置设备名的CreateMessage
 */
public PhoneMessage deviceName(String deviceName);
```

#### 参数介绍

* deviceName：需要设置的设备名

### 设置房间名

创建设置房间名的消息，设置房间二的名称需要双分区才会有作用

#### 方法原型

```
/**
 * 设置房间名
 *
 * @param room     需要设置的房间
 * @param roomName 设置的房间名
 * @return 设置房间名的CreateMessage
 */
public PhoneMessage roomName(int room, String roomName);
```

#### 参数介绍

* room：需要修改的房间名的房间

| 房间  | 参数名   | 参数值 |
| --- | ----- | --- |
| 区域一 | AREA1 | 11  |
| 区域二 | AREA2 | 12  |

* roomName：修改的房间名

### 修改蓝牙名和密码

创建修改蓝牙名称和密码的消息，蓝牙名和密码，可以一个为空，不可两个都为空

#### 方法原型

```
/**
 * 修改蓝牙名和密码
 *
 * @param btName 蓝牙名称，可以为空，为空表示不修改
 * @param btPwd  蓝牙密码，可以为空，为空表示不修改
 * @return 设置蓝牙名称和密码的CreateMessage
 */
public PhoneMessage btNameAndPwd(String btName, String btPwd);
```

#### 参数介绍

* btName：新的蓝牙名，可以为空，为空表示不修改
* btPwd：新的蓝牙密码，可以为空，为空表示不修改

### 连接WiFi

创建控制音乐主机连接WiFi的消息

#### 方法原型

```
/**
 * 连接WiFi
 *
 * @param wifiName WiFi名
 * @param wifiPwd WiFi密码
 * @return 连接WiFi的CreateMessage
 */
public PhoneMessage connWiFiInfo(@NonNull String wifiName, String wifiPwd);
```

#### 参数介绍

* wifiName：需要连接WiFi的名称，不可为空
* wifiPwd：需要连接WiFi的密码，无密码的可以直接为空

### 设置机器休眠时间

创建设置机器休眠时间的消息

#### 方法原型

```
/**
 * 设置机器休眠时间
 *
 * @param time 时间
 * @return 设置机器休眠时间的CreateMessage
 */
public PhoneMessage deviceSleepTime(int time);
```

#### 参数介绍

* time：机器休眠的时间，毫秒值，设置0为不休眠

### 控制设备开关机

创建控制设备开关机的消息，可以关机也可以开机

#### 方法原型

```
/**
 * 控制设备开关机
 *
 * @param isPower 开关机的状态   0 : 关机   1 : 开机
 * @return 控制设备开关机的CreateMessage
 */
public PhoneMessage devivePower(@NonNull int isPower);
```

#### 参数介绍

* isPower：控制开机还是关机

| 指令 | isPower（int） |
| -- | ------------ |
| 关机 | 0            |
| 开机 | 1            |

### 设置BASS音量

创建控制主机BASS音量的消息

#### 方法原型

```
/**
 * 设置BASS音量
 *
 * @param bassVolume BASS的音量
 * @return 设置BASS音量的CreateMessage
 */
public PhoneMessage musicBass(@NonNull int bassVolume);
```

#### 参数介绍

* bassVolume：设置BASS的音量，音量值为0\~15

### 设置TREBLE音量

创建控制主机TREBLE音量的消息

#### 方法原型

```
/**
 * 设置TREBLE音量
 *
 * @param trebleVolume TREBLE的音量
 * @return 设置TREBLE音量的CreateMessage
 */
public PhoneMessage musicTreble(@NonNull int trebleVolume);
```

#### 参数介绍

* trebleVolume：设置TREBLE的音量，音量值为0\~15

### 更新设备

当发现机器段有更新的时候可以通过这个方法更新音乐主机

#### 方法原型

```
/**
 * 更新设备
 *
 * @return 更新设备的CreateMessage
 */
public PhoneMessage deviceUpdate();
```

### 更新播放信息

通知播放器更新播放信息，机器段会发送消息到手机端来

#### 方法原型

```
/**
 * 更新播放信息
 *
 * @return 更新播放信息的CreateMessage
 */
public PhoneMessage updatePlayInfo()
```


# 设备消息

接收音乐主机发送过来的消息，所有消息通过DeviceListener接口内方法回调

## DeviceListener接口

机器端消息的回调接口，是[com.youzhuan.mqttclient.device.bean.Device](/ctrl-host/yun-dui-jie/chang-yong-shu-ju-lei-jie-shao/device)的一个内部接口

### DeviceListener的原型

```
public interface DeviceListener {
    /**
     * 播放信息改变
     * 
     * @param deviceId 设备ID
     * @param cloudStatusUpdateBean 状态信息的Java bean
     */
     void playInfoChanger(String deviceId, CloudStatusUpdateBean cloudStatusUpdateBean);

     /**
     * 播放列表改变
     * 
     * @param deviceId 设备ID
     * @param musicMap 音乐列表
     */
     void musicListChanger(String deviceId, Map<String, List<CloudMusic>> musicMap);
}
```

### 设置监听

使用[com.youzhuan.mqttclient.device.bean.Device](/ctrl-host/yun-dui-jie/chang-yong-shu-ju-lei-jie-shao/device)中的方法设置

#### 方法原型

```
/**
 * 设置设备得监听
 * @param deviceListener
 */
public void addDeviceListener(DeviceListener deviceListener);

/**
 * 删除设备的监听
 * @param listener
 */
 public void removeDevieceListener(DeviceListener listener);
```

## DeviceListener接口方法介绍

介绍DeviceListener接口里面的所有方法和参数，可以在拿到消息后做处理

### 播放信息(playInfoChanger)

音乐主机更新重要信息的监听，包含播放信息和一些其他主机信息

#### 方法原型

```
/**
* 播放信息改变
* 
* @param deviceId 设备ID
* @param cloudStatusUpdateBean 状态信息的Java bean
*/
void playInfoChanger(String deviceId, CloudStatusUpdateBean cloudStatusUpdateBean);
```

#### 参数介绍

* deviceId：发送该消息的机器ID，可以用来判断是哪个机器发送该消息
* cloudStatesUpdateBean：一个CloudStatesUpdateBean对象，是机器段发送的所有数据，会保存在com.youzhuan.mqttclient.device.bean.Device中，数据介绍请参考CloudStatesUpdateBean类介绍

### 播放列表(musicListChanger)

音乐主机发送内部歌曲的列表到手机端

#### 方法原型

```
/**
* 播放列表改变
* 
* @param deviceId 设备ID
* @param musicMap 音乐列表
*/
void musicListChanger(String deviceId, Map<String, List<Music>> musicMap);
```

#### 参数介绍

* deviceId：发送该消息的机器ID，可以用来判断是哪个机器发送该消息
* musicMap：包含音乐主机发送过来的所有音乐，Map的key值为下

| 音乐类型 | 值（String）       |
| ---- | --------------- |
| 本地音乐 | LOCAL\_MUSIC    |
| SD音乐 | SD\_MUSIC       |
| 收藏音乐 | FAVORITE\_MUSIC |


# 常用数据类介绍

介绍常用的JavaBean对象和一些保存数据的类

1. [**LoginSuccessOption**](/ctrl-host/yun-dui-jie/chang-yong-shu-ju-lei-jie-shao/loginsuccessoption)
2. [**Device**](/ctrl-host/yun-dui-jie/chang-yong-shu-ju-lei-jie-shao/device)
3. [**DeviceData**](/ctrl-host/yun-dui-jie/chang-yong-shu-ju-lei-jie-shao/devicedata)
4. [**Music**](/ctrl-host/yun-dui-jie/chang-yong-shu-ju-lei-jie-shao/music)
5. [**CloudStatusUpdateBean**](/ctrl-host/yun-dui-jie/chang-yong-shu-ju-lei-jie-shao/cloudstatusupdatebean)


# LoginSuccessOption

登录成功后，登录的数据将会保存在这个对象

### 路径

com.youzhuan.mqttclient.login.LoginSuccessOption

### 获取对象

此类是一个单例类，通过一个如下静态方法获取

#### 方法原型

```
public static LoginSuccessOption getInstance(){
    ...
    return loginSuccessOption;
}
```

### 数据介绍

|     变量名     |    类型   |           作用          |       获取方法       |
| :---------: | :-----: | :-------------------: | :--------------: |
|  isLogging  | boolean |   记录当前是否登录，登录成功为true  |   getLogging()   |
|   groupId   |   int   | 账号的Group ID登录成功后服务器返回 |   getGroupId()   |
| phoneNumber |  String |         登录的账号         | getPhoneNumber() |
|    passwd   |  String |         登录的密码         |    getPaddwd()   |
|     data    |  String |         预留的数据         |     getData()    |


# Device

账号下面的每一个设备都会有一个Device对象，里面有设备的信息和一些状态改变等消息，是一个JavaBean对象，不可创建由SDK提供，请求设备后可以获取到账号下面所有的Device对象

### 路径

[com.youzhuan.mqttclient.device.bean.Device](/ctrl-host/yun-dui-jie/chang-yong-shu-ju-lei-jie-shao/device)

### 数据介绍

|          变量名          |                                                  类型                                                  |        作用       |            获取方法            |
| :-------------------: | :--------------------------------------------------------------------------------------------------: | :-------------: | :------------------------: |
|       deviceName      |                                                String                                                |       设备名称      |       getDeviceName()      |
|       deviceType      |                                                String                                                |       设备类型      |       getDeviceType()      |
|        deviceId       |                                                String                                                |       设备ID      |        getDeivceId()       |
|      callbackUrl      |                                                String                                                |  设备callbackUrl  |      getCallbackUrl()      |
|        topicUrl       |                                                String                                                |     设备服务器的地址    |        getTopicUrl()       |
|       sendTopic       |                                                String                                                |    发送消息的Topic   |       getSendTopic()       |
|     subscribeTopic    |                                                String                                                |    监听消息的Topic   |     getSubscribeTopic()    |
| cloudStatesUpdateBean | [CloudStatesUpdateBean](/ctrl-host/yun-dui-jie/chang-yong-shu-ju-lei-jie-shao/cloudstatusupdatebean) | 音乐主机的状态信息,为null | getCloudStatesUpdateBean() |
|        musicMap       |                                       Map\<String,List\<Music>>                                      |     音乐主机的音乐     |        getMusicMap()       |


# DeviceData

获取账号下的设备成功后，将会把设备保存在这个类中，保存的是Device对象

### 路径

com.youzhuan.mqttclient.device.DeviceData

### 获取对象

此类是一个单例类，通过一个如下静态方法获取

#### 方法原型

```
public static DeviceData getInstance(){
    ...
    return deviceData;
}
```

### 数据介绍

| 变量名       | 类型                         | 作用           | 获取方法           |
| --------- | -------------------------- | ------------ | -------------- |
| devices   | List\<Device>              | 所有的设备        | getDevices()   |
| deviceMap | Map\<String,List\<Device>> | 按服务器分类后所有的设备 | getDeviceMap() |


# Music

机器端发送过来的音乐数据

### 路径

com.youzhuan.mqttclient.device.bean.Music

### 数据介绍

| 变量名         | 类型     | 作用   | 获取方法           |
| ----------- | ------ | ---- | -------------- |
| music\_name | String | 音乐名  | getMusic\_name |
| music\_id   | int    | 音乐ID | getMusic\_id   |
| artist      | String | 音乐歌手 | artist         |


# CloudStatusUpdateBean

机器端发送过来机器的状态等信息，这个是一个JavaBean，由Device提供

### 路径

com.youzhuan.mqttclient.device.bean.CloudStatusUpdateBean

### 数据介绍

|      变量名      |    类型   |     作用    |        获取方法        |
| :-----------: | :-----: | :-------: | :----------------: |
|   musicName   |  String |    歌曲名    |   getMusicName()   |
|     artist    |  String |     歌手    |     getArtist()    |
|    musicId    |   int   |    歌曲ID   |    getMusicId()    |
|    playing    | boolean |    是否播放   |    getPlaying()    |
|      flag     |   int   |  当前页面的音源  |      getFlag()     |
|    favorite   | boolean |  播放音乐是否收藏 |    getFavorite()   |
|   ex\_EQMode  |   int   |    EQ模式   |   getEx\_EQMode()  |
|  ex\_PlayMode |   int   |    播放模式   |  getEx\_PlayMode() |
| ex\_VolumeMax |   int   | 当前房间的最大声音 | getEx\_VolumeMax() |
| ex\_VolumeCur |   int   |  当前房间的声音  |  getx\_VolumeCur() |
|    ex\_Mute   | boolean |    静音状态   |    getEx\_Mute()   |
|      room     |   int   |  当前所在的房间  |      getRoom()     |
|   room1Name   |  String |   区域一的名称  |   getRoom1Name()   |
|   room2Name   |  String |   区域二的名称  |   getRoom2Name()   |
|    coverUrl   |  String |  专辑图片的地址  |    getCoverUrl()   |


# 错误码

介绍某些方法请求出错时，返回的错误码

### CloudAPIRequestErrCode类

该类为一些错误码的静态常量

### 数据介绍

#### 登录相关

|  错误码  |            常量名           |      作用      |
| :---: | :----------------------: | :----------: |
| 10000 |     PHONENUMBER\_ERR     | 账号错误，请检查登录账号 |
| 10001 |       PASSWORD\_ERR      | 密码错误，请检查登录密码 |
| 10002 |   LOGGING\_REQUEST\_ERR  |   请求登录链接出错   |
| 10003 | REGISTER\_PASSWORD\_ERR1 |    两次密码不匹配   |
| 10004 | REGISTER\_REGISTER\_ERR2 |    注册请求出错    |
| 10005 |    BACK\_PASSWORD\_ERR   |    重置密码出错    |
| 10006 |     NOT\_LOGGING\_ERR    | 没有登录，此操作需要登录 |
| 10007 |      SID\_NULL\_ERR      |     SID为空    |
| 10008 |      DID\_NULL\_ERR      |    设备ID为空    |
| 10009 |   ALTER\_PASSWORD\_ERR   |    修改密码错误    |

#### 效验码相关

|  错误码  |             常量名             |    作用   |
| :---: | :-------------------------: | :-----: |
| 10100 | IDENTIFYING\_CODE\_GET\_ERR | 效验码获取错误 |
| 10101 |    IDENTIFYING\_CODE\_ERR   |  效验码不匹配 |

#### Device相关的操作

|  错误码  |            常量名            |     作用    |
| :---: | :-----------------------: | :-------: |
| 20000 | REQUEST\_ALL\_DEVICE\_ERR | 获取所有的设备错误 |
| 20001 |     SHARE\_DEVICE\_ERR    |   分享设备错误  |
| 20002 |    REMOVE\_DEVICE\_ERR    |   删除设备错误  |

#### JSON错误

|  错误码  |    常量名    |    作用    |
| :---: | :-------: | :------: |
| 11000 | JSON\_ERR | JSON解析出错 |


# 云云对接


# 直连接入


# RS-485协议接入

右转背景音乐系统设备（Server）与控制终端（Client，可以是PC、中控设备、智能家居设备等）之间的串行通信协议，通过严格实现此协议，右转背景音乐系统可受控制终端的控制。

![485流程图](/files/-Lx5-nfJxcfw5-sd4Mhe)

## 通讯方式

* 波特率：9600bps（默认）
* 奇偶校验位：无
* 数据位：8bits
* 停止位：1bits

### 协议格式

DATA1 DATA2 DATA3 DATA4 DATA5 DATA6 DATA7

* DATA1:通讯数据头（0xFF 0x25) 回复（0xFF 0x2A）
* DATA2:指令长度（包括起止符、长度、组ID、设备ID、功能码、数据和检验和）
* DATA3:组地址（0x01\~0xFF)，00为广播地址，广播地址不应答
* DATA4:设备地址（0x01\~0xFF)， 00为广播地址，设备地址默认见主机内485
* DATA5:功能码 见协议
* DATA6:数据 见协议
* DATA7:校验码(算法见效验码算法)

{% hint style="warning" %}
上面全部为16进制
{% endhint %}

### 效验码算法

0XFF-(DATA1+DATA2+DATA3+DATA4+DATA5+DATA6)%0X100=DATA7

#### 发送指令

完成指令 ： FF 25 08 00 01 10 0F B3

#### 算法

0XFF-(0XFF+0X25+0X08+0X00+0X01+0X10+*0X0F*)%0X100=B3

{% hint style="warning" %}
上面都是2位相加，例如DATA1为“FF 25”，我们是把“0XFF+0X25”加过后然后与其他数据相加
{% endhint %}

## 协议

所有协议都会在下列解释，请注意以下的协议不是每个机型都有，请结合机型使用

{% hint style="warning" %}
下列没有列出适合哪些机型的协议代表适合所有机型
{% endhint %}

### 关机

关闭音乐主机，真关机

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 100F                   |                       |           B3           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 100F                   |                       |           AE           |

### 开机

真关机的开机

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 10F0                   |                       |           D2           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 10F0                   |                       |           CD           |

### 开关机

假开关机一条指令

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 100A                   |                       |           B8           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 100A                   |                       |           B3           |

### 打开音乐播放器

打开内置的主播放器

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 2012                   |                       |           A0           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 2012                   |                       |           9B           |

### 打开SD音乐

打开内置的主播放器的SD音乐

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 2013                   |                       |           9F           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 2013                   |                       |           9A           |

### 打开蓝牙

打开设备的蓝牙

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 2015                   |                       |           9D           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 2015                   |                       |           98           |

### 带区域打开蓝牙

带房间打开蓝牙

{% hint style="warning" %}
此协议只有双分区的机型支持，非双分区机型无作用
{% endhint %}

#### 协议

|   类别  | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :---: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  同步发送 |           FF 25          |            09           |           00           |            01           | 2015                   |           00          |           9C           |
|   回复  |           FF 2A          |            09           |           00           |            01           | 2015                   |           00          |           97           |
| 区域一发送 |           FF 25          |            09           |           00           |            01           | 2015                   |           01          |           9B           |
|   回复  |           FF 2A          |            09           |           00           |            01           | 2015                   |           01          |           96           |
| 区域二发送 |           FF 25          |            09           |           00           |            01           | 2015                   |           02          |           9A           |
|   回复  |           FF 2A          |            09           |           00           |            01           | 2015                   |           02          |           95           |

### 关闭蓝牙

关闭当前的蓝牙

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 2017                   |                       |           9B           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 2017                   |                       |           96           |

### 打开本地音乐

打开内置的主播放器的本地音乐界面

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 2018                   |                       |           9A           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 2018                   |                       |           95           |

### 打开AUX

打开音乐主机的AUX

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 2030                   |                       |           82           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 2030                   |                       |           7D           |

### 带区域打开AUX

带区域打开音乐主机的AUX

{% hint style="warning" %}
此协议只有双分区的机型支持，非双分区机型无作用
{% endhint %}

#### 协议

|   类别  | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :---: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  同步发送 |           FF 25          |            09           |           00           |            01           | 2030                   |           00          |           81           |
|   回复  |           FF 2A          |            09           |           00           |            01           | 2030                   |           00          |           7C           |
| 区域一发送 |           FF 25          |            09           |           00           |            01           | 2030                   |           01          |           80           |
|   回复  |           FF 2A          |            09           |           00           |            01           | 2030                   |           01          |           7B           |
| 区域二发送 |           FF 25          |            09           |           00           |            01           | 2030                   |           02          |           7F           |
|   回复  |           FF 2A          |            09           |           00           |            01           | 2030                   |           02          |           7A           |

### 关闭AUX

关闭音乐主机的AUX

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 2032                   |                       |           80           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 2032                   |                       |           7B           |

### 播放

控制内置播放器播放

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 50A0                   |                       |           E2           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 50A0                   |                       |           DD           |

### 暂停

控制内置播放器暂停

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 500A                   |                       |           78           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 500A                   |                       |           73           |

### 播放/暂停

控制内置播放播放或暂停，在暂停的状态会播放，在播放的状态会暂停

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 600A                   |                       |           68           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 600A                   |                       |           63           |

### 上一曲

控制内置播放器上一曲

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 500B                   |                       |           77           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 500B                   |                       |           72           |

### 下一曲

控制内置播放器下一曲

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 50B0                   |                       |           D2           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 50B0                   |                       |           CD           |

### 音量加

控制音乐主机音量加1

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 60F0                   |                       |           82           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 60F0                   |                       |           7D           |

### 音量减

控制音乐主机音量减1

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 600F                   |                       |           63           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 600F                   |                       |           5E           |

### 静音

控制音乐主机静音

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 6000                   |                       |           72           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 6000                   |                       |           6D           |

### 取消静音

控制音乐主机取消静音

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 60FA                   |                       |           78           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 60FA                   |                       |           73           |

### 静音/取消静音

控制音乐主机静音/取消静音，在静音状态，发送此协议会取消静音，反之则静音

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组 </p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :-------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00          |            01           | 600B                   |                       |           67           |
|  回复 |           FF 2A          |            08           |           00          |            01           | 600B                   |                       |           62           |

### 音量设定

设置音乐主机的音量

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            09           |           00           |            01           | 6001                   |           09          |           67           |
|  回复 |           FF 2A          |            09           |           00           |            01           | 6001                   |           09          |           6B           |

#### 数值（DATA6）介绍

* DATA6的取值范围为:0\~30
* 不同的值效验码不同，请按照

### 获取当前播放的歌曲

获取内置主播放器当前播放的歌曲

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 8001                   |                       |           51           |
|  回复 |           FF 2A          |            /            |           00           |            01           | 8001                   |    歌曲名（UTF-8转换）+AE    |            /           |

### 播放状态查询

查询音乐主机主播放器的播放状态

#### 协议

|  类别  | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :--: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送  |           FF 25          |            08           |           00           |            01           | 8003                   |                       |           4F           |
| 停用回复 |           FF 2A          |            09           |           00           |            01           | 8003                   |           01          |           48           |
| 暂停回复 |           FF 2A          |            09           |           00           |            01           | 8003                   |           02          |           47           |
| 播放回复 |           FF 2A          |            09           |           00           |            01           | 8003                   |           03          |           46           |

### 静音状态查询

查询音乐主机主播放器的静音状态

#### 协议

|   类别  | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :---: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|   发送  |           FF 25          |            08           |           00           |            01           | 8004                   |                       |           4E           |
|  静音回复 |           FF 2A          |            09           |           00           |            01           | 8004                   |           01          |           47           |
| 非静音回复 |           FF 2A          |            09           |           00           |            01           | 8004                   |           02          |           46           |

### 当前音量查询

查询音乐主机当前的音量

#### 协议

|  类别  | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :--: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送  |           FF 25          |            08           |           00           |            01           | 8005                   |                       |           4D           |
| 静音回复 |           FF 2A          |            09           |           00           |            01           | 8005                   |        00-30音量值       |            /           |

### 查询所有音乐场景列表

获取内置主播放器当所有音乐场景列表

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 8005                   |                       |           4C           |
|  回复 |           FF 2A          |            /            |           00           |            01           | 8005                   |     场景音乐名(UTF-8转换)    |            /           |

### 当前所有状态查询

查询音乐主机主播放器的播放状态、静音状态、音量值、音源，EQ模式、开关机状态

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 8009                   |                       |           49           |
|  回复 |           FF 2A          |            0E           |           00           |            01           | 8009                   |          状态值          |            /           |

#### 数值(DATA6)介绍

* 第1字节：播放状态查询（值：01.停止、02.暂停、03.播放）
* 第2字节：静音状态查询（值：01.静音、02.非静音）
* 第3字节：当前音量值查询（值：00-30音量值,16进制）
* 第4字节：音源模式查询（值：00.本地、01.SD卡、03.AUX、04.DLNA、05.蓝牙、06.我的收藏、07.喜马拉雅、08.所有音乐、09.播放历史音乐、0A.搜索到的网络音乐.11场景音乐.OC、RTSP音源共享、OF.云音乐）
* 第5字节：EQ模式模式查询（值：00.普通、01.古典、02.爵士、03.摇滚、04.流行）
* 第6字节：开关机状态查询（值：01:开机 00:关机）

#### 例

FF 2A 0E 00 01 80 09 01 02 1A 03 01 01 1C

* 播放状态查询：01
* 静音状态查询：02
* 当前音量值查询：1A
* 音源模式查询：03
* EQ模式模式查询：01
* 开关机状态查询：01
* 效验码：1C

### 音源查询

查询音乐主机主播放器的音源

#### 协议

|    类别    | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :------: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|    发送    |           FF 25          |            08           |           00           |            01           | 8008                   |                       |           4A           |
|  本地音源回复  |           FF 2A          |            09           |           00           |            01           | 8008                   |           00          |           44           |
|  SD音源回复  |           FF 2A          |            09           |           00           |            01           | 8008                   |           01          |           43           |
|  AUX音源回复 |           FF 2A          |            09           |           00           |            01           | 8008                   |           03          |           41           |
| DLNA音源回复 |           FF 2A          |            09           |           00           |            01           | 8008                   |           04          |           40           |
|  蓝牙音源回复  |           FF 2A          |            09           |           00           |            01           | 8008                   |           05          |           3F           |
|  我的收藏回复  |           FF 2A          |            09           |           00           |            01           | 8008                   |           06          |           3E           |
|  喜马拉雅回复  |           FF 2A          |            09           |           00           |            01           | 8008                   |           07          |           3D           |
|  所有音乐回复  |           FF 2A          |            09           |           00           |            01           | 8008                   |           08          |           3C           |
|  播放历史回复  |           FF 2A          |            09           |           00           |            01           | 8008                   |           09          |           3B           |
|  搜索音源回复  |           FF 2A          |            09           |           00           |            01           | 8008                   |           0A          |           3A           |
|  场景音源回复  |           FF 2A          |            09           |           00           |            01           | 8008                   |           0B          |           39           |
| RTSP音源回复 |           FF 2A          |            09           |           00           |            01           | 8008                   |           0C          |           38           |
|   云音乐回复  |           FF 2A          |            09           |           00           |            01           | 8008                   |           0F          |           35           |

### 使用位置播放歌曲

使用位置播放当前音源的歌曲

#### 协议

|  类别  | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :--: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送  |           FF 25          |            0A           |           00           |            01           | 9001                   |         例：0009        |           36           |
| 静音回复 |           FF 2A          |            0A           |           00           |            01           | 9001                   |          0009         |           31           |

#### 数值(DATA6)介绍

歌曲的位置，协议中的0009，代表播放当前音源第9首歌曲，这个值为16进制的值

### 获取当前受控的区域

获取当前受控的区域

{% hint style="warning" %}
此协议只有双分区的机型支持，非双分区机型无作用
{% endhint %}

#### 协议

|   类别  | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :---: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|   发送  |           FF 25          |            08           |           00           |            01           | 9002                   |                       |           40           |
|  同步回复 |           FF 2A          |            09           |           00           |            01           | 9002                   |           00          |           3A           |
| 区域一回复 |           FF 2A          |            09           |           00           |            01           | 9002                   |           01          |           39           |
| 区域二回复 |           FF 2A          |            09           |           00           |            01           | 9002                   |           02          |           38           |

### 切换当前控制的区域

切换当前控制的区域

{% hint style="warning" %}
此协议只有双分区的机型支持，非双分区机型无作用
{% endhint %}

#### 协议

|   类别  | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :---: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  同步发送 |           FF 25          |            09           |           00           |            01           | 9003                   |           00          |           3A           |
| 区域一发送 |           FF 25          |            09           |           00           |            01           | 9003                   |           01          |           39           |
| 区域二发送 |           FF 25          |            09           |           00           |            01           | 9003                   |           02          |           38           |
|   回复  |           FF 2A          |            08           |           00           |            01           | 9003                   |                       |           3A           |

### EQ模式模式查询

音乐主机的EQ模式模式查询

#### 协议

|  类别  | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :--: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送  |           FF 25          |            08           |           00           |            01           | 8007                   |                       |           4B           |
| 普通回复 |           FF 2A          |            09           |           00           |            01           | 8007                   |           00          |           45           |
| 古典回复 |           FF 2A          |            09           |           00           |            01           | 8007                   |           01          |           44           |
| 爵士回复 |           FF 2A          |            09           |           00           |            01           | 8007                   |           02          |           43           |
| 摇滚回复 |           FF 2A          |            09           |           00           |            01           | 8007                   |           03          |           42           |
| 流行回复 |           FF 2A          |            09           |           00           |            01           | 8007                   |           04          |           41           |

### 单曲循环

设置内置主播放器的播放模式为单曲循环

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 5031                   |                       |           51           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 5031                   |                       |           4C           |

### 循环播放

设置内置主播放器的播放模式为循环播放

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 5032                   |                       |           50           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 5032                   |                       |            4           |

### 顺序播放

设置内置主播放器的播放模式为顺序播放

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 5033                   |                       |           4F           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 5033                   |                       |           4A           |

### 随机播放

设置内置主播放器的播放模式为随机播放

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 5034                   |                       |           4E           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 5034                   |                       |           49           |

### 普通

设置内置主播放器的EQ模式为普通

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 5035                   |                       |           4D           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 5035                   |                       |           48           |

### 流行

设置内置主播放器的EQ模式为流行

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 5036                   |                       |           4C           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 5036                   |                       |           47           |

### 古典

设置内置主播放器的EQ模式为古典

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 5037                   |                       |           4B           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 5037                   |                       |           46           |

### 爵士

设置内置主播放器的EQ模式为爵士

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 5038                   |                       |           4A           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 5038                   |                       |           45           |

### 摇滚

设置内置主播放器的EQ模式为摇滚

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 5039                   |                       |           49           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 5039                   |                       |           44           |

### 侦测ID地址

侦测音乐主机的ID地址，组ID和设备ID

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | E5F5                   |                       |           F9           |
|  回复 |           FF 2A          |            0A           |           00           |            01           | E5F5                   |        例：00 01        |           F0           |

#### 数值（DATA6）介绍

回复中的DATA6中分别代表组ID和设备ID

* 00：表示组ID
* 01：表示设备ID

### 设置ID地址

设置音乐主机的ID地址，组ID和设备ID

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            0A           |           00           |            01           | F005                   |        例：00 01        |           DA           |
|  回复 |           FF 2A          |            08           |           00           |            01           | F005                   |                       |           D8           |

#### 数值（DATA6）介绍

发送中的DATA6中分别代表组ID和设备ID

* 00：表示组ID
* 01：表示设备ID

### 侦测设备型号

侦测音乐主机设备信号

#### 协议

|   类别   | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :----: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|   发送   |           FF 25          |            08           |           00           |            01           | 10E1                   |                       |           E1           |
|  300回复 |           FF 2A          |            09           |           00           |            01           | 10E1                   |           01          |           D8           |
| 200B回复 |           FF 2A          |            09           |           00           |            01           | 10E1                   |           02          |           DA           |
|  150回复 |           FF 2A          |            09           |           00           |            01           | 10E1                   |           03          |           D9           |
|  60T回复 |           FF 2A          |            09           |           00           |            01           | 10E1                   |           04          |           D8           |
| 300全回复 |           FF 2A          |            09           |           00           |            01           | 10E1                   |           05          |           D7           |
|  52回复  |           FF 2A          |            09           |           00           |            01           | 10E1                   |           08          |           D6           |
|  85回复  |           FF 2A          |            09           |           00           |            01           | 10E1                   |           09          |           D5           |
|  70回复  |           FF 2A          |            09           |           00           |            01           | 10E1                   |           0A          |           D4           |
|  62回复  |           FF 2A          |            09           |           00           |            01           | 10E1                   |           0B          |           D3           |

### 查询场景音乐列表歌曲名

查询场景音乐列表歌曲名

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            0A           |           00           |            01           | 8010                   |        例：01 01        |           3E           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 8010                   |      5首歌曲名(UTF-8)     |            /           |

#### 数值（DATA6）介绍

发送中的DATA6中分别代表场景ID和音乐页码

* 01：场景的ID
* 01：音乐的页码，每页为5首歌曲

回复中的DATA6是场景音乐的UTF-8格式的5歌的歌曲名，以0D 0A分隔

### 打开场景音乐界面

打开音乐播放器的场景音乐界面

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            08           |           00           |            01           | 2026                   |                       |           8C           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 2026                   |                       |           87           |

### 打开场景音乐列表界面

打开音乐播放器的场景音乐的音乐列表界面

#### 协议

|  类别 | <p>数据通讯头</p><p>DATA1</p> | <p>指令长度</p><p>DATA2</p> | <p>组地址</p><p>DATA3</p> | <p>设备地址</p><p>DATA4</p> | <p>操作码</p><p>DATA5</p> | <p>数值</p><p>DATA6</p> | <p>检验码</p><p>DATA7</p> |
| :-: | :----------------------: | :---------------------: | :--------------------: | :---------------------: | ---------------------- | :-------------------: | :--------------------: |
|  发送 |           FF 25          |            09           |           00           |            01           | 2027                   |           01          |           89           |
|  回复 |           FF 2A          |            08           |           00           |            01           | 2027                   |                       |           86           |


# TCP/IP-UDP协议接入

通过局域网络，使用TCP/IP-UDP控制音乐主机

{% hint style="warning" %}
此功能暂未开放，如需使用请联系商务
{% endhint %}


# FAQ

常见问题解答

## 示例1

示例1示例1示例1示例1示例1示例1

## 示例2

示例2示例2示例2示例2示例2示例2


