加湿器

设备复位场景举例

  • 开箱通电之后,用户不需要任何操作,加湿器即可进入配网状态;
  • 在手动操作的场景中,需要长按开关键3秒,听到滴的一声,即可进入配网状态;
  • 在小度app上删除加湿器,音箱会发送Config Node Reset消息,加湿器收到Reset消息后,需要自动进入配网状态;
  • 配网广播时间为10分钟,超过10分钟没有配网,开启静默广播;

config约定

  • 入网流程参考基础规范
  • 入网流程中的configuration阶段,音箱只会对加湿器主Element中的Generic OnOff Server Model(Model Id为0x1000)进行设置,加湿器需要将这些设置自动绑定到其他Model;
  • 加湿器品类的默认分组「地址」为0xC091,这个地址需要记录在加湿器固件中,分组用于支持按照设备类型控制多个设备,例如「打开所有加湿器」,「打开客厅的加湿器」;
  • 在小度app上修改加湿器分组的场景中,音箱会向加湿器发送Config Model Subscription Overwrite消息,加湿器收到OverWrite消息后,会把Model中的分组「地址」 更新为消息中携带的分组「地址」;由于使用的是Overwrite消息,加湿器会把品类默认分组「地址」0xC091覆盖掉,所以需要加湿器自行将默认分组「地址」恢复回来;

必须Model及其作用

Element 属性名称 Model Id 属性type定义 属性value定义
加湿器 (Primary Element) 开关 Generic OnOff Server Model 0x1000 N/A N/A
开关 Data Trans Server Model 0x011C0002 0x0100 1字节开关状态,0x00代表关闭;0x01代表打开;
目标湿度 0x010E 1字节目标湿度,云端将上报的十六进制转十进制存储;
雾量 0x0176 1字节雾量,云端将上报的十六进制转十进制存储,0x01代表1档,0x02代表2档,0x03代表3档;
屏显开关 0x050D 1字节状态,0x00代表关闭;0x01代表打开;
模式 0xF004 2字节状态,0x0161代表正常模式;0x0162代表恒湿模式;0x0163代表代表睡眠模式;

加湿器支持控制语句

  • 发现设备 | 发现智能加湿器 | 连接智能加湿器 | 连接加湿器
  • 打开加湿器 | 关闭加湿器 | 一小时后打开加湿器 | 每天下午六点钟关闭加湿器
  • 加湿器一挡 | 加湿器档位调高 | 加湿器档位调低
  • 加湿器关了吗 | 加湿器几挡风

加湿器控制命令

  • 开关使用蓝牙Mesh SIG Model,即Generic OnOff Model;
  • 目标湿度 | 模式 | 屏显等功能使用Vendor Model,即Data Trans Model;

加湿器状态上报举例

  • 加湿器配网之后,在状态发生改变的时候,有如下上报场景: (1) 手动控制加湿器,需要上报状态,例如手动切换风速,需要将切换后的风速上报给音箱端 (2) app控制或者语音控制加湿器,需要上报状态,例如语音或者app控制摆风,需要将摆风状态上报给音箱端 (3) 加湿器再次上电,需要将当前的状态全部同步给音箱端 (4) 加湿器配网之后,需要按照小度配置参数上报心跳,用于app上显示加湿器的在线状态,超过6分钟没有收到心跳,音箱即认为加湿器已经处于离线状态
  • 状态上报格式以及开关状态上报示例数据(小端序)
Opcode tid Attribute Type Attribute Value
F8 1C 01 01 00 01 01
0xF8 0x011C 0x01 0x0100 0x01

其中tid作用:用于小度云端去重,10秒内相同上报tid,云端不会重复处理;

  • 加湿器状态只发送给0xF000地址
  • F8状态上报收到预期的FA之后停止发送,若一直没有收到FA消息,发送完预定次数之后停止发送

tid去重

  • 上行去重,即外设状态上报0xF8或0xF9消息

    • 外设状态上报到小度云端,10秒内收到相同的tid,不会重复处理
    • tid只检查与上次上报是否一致,不区分大小
  • 下行去重,即小度网关发送的0xFD或0xFE控制消息
    • 10秒内收到重复tid,不做业务处理,需要回复ack的场景,只回复0xFF ack即可
    • 外设判断重复tid,需要tid + attribute type 一起判断,不然会出现一些bad case

TTL

  • 控制回复消息的TTL设置为10
  • 状态上报消息的TTL设置为10

心跳

  • 设备端需要支持Config Heartbeat Publication Set消息设置心跳参数
  • 小度下发心跳发送间隔默认为16s,加湿器向外广播心跳建议发包参数adv interval/adv period = 10ms/360ms

iv index更新

  • 被动更新
    • 收到网络中广播的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流程;

其他约定

  • 加湿器需要支持蓝牙Mesh规范里面定义的Relay和Proxy特性;
  • 加湿器检测到proxy连接之后,主动清除本地缓存的sequence number信息,避免app卸载重装或清空数据无法控制的问题;
  • 加湿器不仅需要支持蓝牙Mesh规范里面的PB-ADV配网方式,还要支持PB-GATT配网方式;
  • 加湿器入网的最后一步是设置订阅地址,要求在成功设置订阅地址之后,延迟1s~2s再上报状态;
  • 涉及分包上报场景,建议走单播上报,目标单播地址建议取上一次控制命令的单播地址;
  • 需要支持最少32个分组订阅,小度这边会存在多楼层、场景、设备组等组播场景需求;
  • 需要支持开关状态的查询,以Generic OnOff Get/Generic OnOff Status方式交互;
  • 设备在不同场景的发包参数会因为音箱扫描参数不同而存在差异
    • ack回复消息,包含标准status消息和0xFF消息,建议adv interval/adv period = 10ms/270ms;
    • 状态上报消息,包含0xF8和0xF9消息,建议adv interval/adv period = 10ms/540ms