-
DuerOS开放平台
-
技能开放平台
-
自定义技能
- 自定义技能简介
- 自定义技能创建
-
有屏技能
-
技能交互模型
-
自定义技能协议
- 处理DuerOS发送的请求
-
技能部署
-
技能开发样例
- 账户关联
-
技能测试
-
技能发布
-
技能付费
-
个性化服务
-
内容播报技能
-
小技能
-
平台能力扩展
-
SDK
-
预览版功能
- 全双工(Preview)
-
APP技能(Preview)
-
-
智能家居开放平台
- 品牌使用规范
-
开发者服务条款
- 新设备开箱通电,默认自动进入配网状态;
- 人工重置设备,例如长按复位键5s;
- 从小度App删除设备,触发设备重置自动进入配网状态;
-
配网状态持续时间建议为30分钟
- 注册的model id为: 0x1000(Generic OnOff Server)和0x0002011C(Data Trans Server Model)
- id为0x1000的model用来设置设备的分组,在音箱给设备发送config model subscribe命令时设置设备的分组
- 用于支持『打开窗帘』、『反转窗帘』、『窗帘打开百分之五十』等操作
- 订阅『窗帘』品类默认位置地址:0xc046
- 用于将设备加入到默认的位置,该位置用户可以在小度App中动态修改为『卧室』、『餐厅』等,每个位置会有一个对应的分组地址(参考基础规范)
- 开关: Data Trans Client Model(Opcode = 0xFD1C01, AttributeType = 0x0547)
- 打开到某个百分比的位置: Data Trans Client Model(Opcode = 0xFD1C01, AttributeType = 0x0548)
- 停止: Data Trans Client Model(Opcode = 0xFD1C01, AttributeType = 0x0547)
- 调整模式: Data Trans Client Model(Opcode = 0xFD1C01, AttributeType = 0xF004)
窗帘每次收到0xFD控制消息后,均需要回复0xFF消息进行接收确认
- 电量百分比: Data Trans Client Model(Opcode = 0xF81C01, AttributeType = 0x0104)
- 开关: Data Trans Client Model(Opcode = 0xF81C01, AttributeType = 0x0547)
- 打开百分比: Data Trans Client Model(Opcode = 0xF81C01, AttributeType = 0x0548)
- 电量状态: Data Trans Client Model(Opcode = 0xF81C01, AttributeType = 0x0549)
- 工作状态: Data Trans Client Model(Opcode = 0xF81C01, AttributeType = 0xF001)
- 调整模式: Data Trans Client Model(Opcode = 0xF81C01, AttributeType = 0xF004)
AttributeType | AttributeValue | Direction | Description |
---|---|---|---|
0x0104 | uint8 电量百分比 | mesh设备发往音箱 | 表示设备的电量 |
0x0547 | uint8 控制参数 | 音箱发往mesh设备 或 mesh设备发往音箱 | 0:关闭窗帘、1:打开窗帘、2:停止窗帘 |
0x0548 | uint8 窗帘打开的位置 | 音箱发往mesh设备 或 mesh设备发往音箱 | 最大:100 最小:0 步长:1 默认值:0 |
0x054A | uint8 电机运动方向 | 音箱发往mesh设备 或 mesh设备发往音箱 | 左转:3 右转:4 |
0xF001 | uint8 工作状态 | mesh设备发往音箱 | 停止:0 开始(继续): 1 错误:26 WiFi设置:27 关机:28 工作:29 上电:36 |
0xF004 | uint16 窗帘模式 | 音箱发往mesh设备 或 mesh设备发往音箱 | 反转模式:351、校准模式:352、正常模式:353、反向模式(开或关):358 |
- 将窗帘设置为校准模式的指令 AttributeType为0xF004、控制参数为校准模式对应的值352,即十六进制表示为0160,假设此时TID的值为1,那么完整的Message部分为0x01F0040160。 由于音箱发给窗帘数据的大小端序为小端序,因此窗帘收到的指令Message部分为0x0104F06001。 窗帘收到的整体的Mesh消息的Opcode部分为0xFD1C01,因此窗帘收到的整体数据部分为0xFD1C010104F06001。 窗帘收到以后,需要回复Opcode为Set State Status的消息给音箱,以使得音箱确认消息发送成功(参考基础规范)。
- 将窗帘的开关状态上报 窗帘开关上报是在窗帘的状态有发生变化时,同步给音箱。使用Opcode = 0xF81C01的消息上报,音箱不需要回复。 以窗帘开关打开的状态为例,假设此时TID的值为10,那么完整的Message部分为0x0A054701。 由于窗帘发送音箱的数据大小端序为小端序,因此音箱收到的Message数据部分为0x0A470501,整体消息为0xF81C010A470501。
- 窗帘发生以下行为时,按照下表进行状态上报
- 为减少消息交互次数,厂商在收到音箱控制指令后,尽量减少额外的状态上报
- 当窗帘无法获取当前行程时,位置信息0x0548的属性值设置为FF
- 窗帘的状态只发送给0xF000地址
- F8状态上报收到预期的FA之后停止发送,若一直没有收到FA消息,发送完预定次数之后停止发送
操作行为 | 上报行为 | AttributeType | AttributeValue |
---|---|---|---|
上电/开机 | 位置、模式 | 0x0548、0xF004 | |
配网 | 位置、模式 | 0x0548、0xF004 | |
开始运动 | 开关状态 | 0x0547 | 目标方向:打开-01、关闭-00 |
运动中 | 不需要上报状态 | ||
运动结束 | 开关状态、位置 | 0x0547、0x0548 | 0x0547为02 |
反转/正常模式发生变化 | 位置、模式 | 0x0548、0xF004 |
Opcode | tid | Attribute Type | Attribute Value | |||
---|---|---|---|---|---|---|
F8 | 1C | 01 | 01 | 47 | 05 | 02 |
0xF8 | 0x011C | 0x01 | 0x0547 | 0x02 |
其中tid作用:用于小度云端去重,15秒内相同上报tid,云端不会重复处理
- 控制回复消息TTL设置为10
- 状态上报TTL设置为10
- 设备端要支持Config Heartbeat Publication Set命令设置心跳参数
- 如果音箱没有通过Config Heartbeat Publication Set命令设置设备心跳间隔,则默认心跳发送间隔16s,每次间隔10~20ms,广播360ms
- 使用标准Heartbeat心跳信息进行心跳上报
- 被动更新
- 收到网络中广播的secure network beacon消息,检查自身iv index信息,并完成update或者recovery过程;
- 风扇重新上电后收到的第一个secure network beacon的iv index等于当前iv index + 1,且iv update flag处于normal状态,要求直接更新,忽略规范里面的时间限制;
- 主动更新
- sequence number达到0xB0E500的时候开始进行iv index update流程;
窗帘收到校准模式的控制指令时,需要依次执行以下操作
- 清除窗帘当前行程
- 自动完成一次行程校准(向当前打开方向运行至尽头、向当前关闭方向运行至尽头)
- 将窗帘运动至全开位置
窗帘收到正常模式或反转模式的控制指令时,需要依次执行以下操作
- 将电机反转
- 清除窗帘当前行程
- 自动完成一次行程校准(向当前打开方向运行至尽头、向当前关闭方向运行至尽头)
- 将窗帘运动至全开位置
反向模式在产品定义中为“开或关”,当窗帘收到反向模式的控制指令时,需要根据窗帘当前状态按照如下逻辑执行对应操作
收到指令时的窗帘状态 | 执行操作 |
---|---|
静止,处于完全闭合状态 | 打开,相当于收到0x0547 01 |
静止,处于非完全闭合状态 | 关闭,相当于收到0x0547 00 |
运行中 | 暂停,相当于收到0x0547 02 |
- 窗帘需要支持蓝牙Mesh规范里面定义的Relay和Proxy特性
- Prxoy连接时需要清除seq_number,避免app卸载重装或清空数据导致无法控制
- 窗帘不仅需要支持蓝牙Mesh规范里面的PB-ADV配网方式,还要支持PB-GATT配网方式
- 涉及分包上报场景,建议走单播上报,目标单播地址建议取上一次控制命令的单播地址
- 设备在不同场景的发包参数会因为音箱扫描参数不同而存在差异
- ack回复消息,包含标准status消息和0xFF消息,建议adv interval/adv period = 10ms/270ms
- 状态上报消息,包含0xF8和0xF9消息,建议adv interval/adv period = 10ms/540ms