取暖器

设备复位方法

  • 新设备开箱通电,默认自动进入配网状态;
  • 人工重置设备,例如长按复位键5s;
  • 配网状态保持时间建议为30分钟,配网成功后退出配网状态;
  • 从小度App删除设备,触发设备重置自动进入配网状态;

    config约定

  • 入网流程中的configuration阶段,音箱只会对取暖器主Element中的Generic OnOff Server Model(Model Id为0x1000(Big Endian))进行设置,取暖器需要将这些设置自动绑定到其他Model;
  • 外设默认品类分组为0xC0F4(Big Endian),外设需要自行绑定这个分组,用于控制所有取暖器的场景;
    • 用于将设备加入到默认的位置,该位置用户可以在小度App中动态修改为『卧室』、『餐厅』等,每个位置会有一个对应的分组地址(参考基础规范)
  • 外设修改分组的时候,音箱向外设发送Config Model Subscription Overwrite消息,Overwrite消息会将默与认分组给覆盖掉,需要外设自行将0xC0F4绑定回来,不然无法控制所有取暖器的场景;

控制命令

具体采用的控制model和model中的所有参数字段枚举(AttributeType为大端序)

  • 开关: Generic OnOff Client Model
  • 控制指令具体格式参考SIG Mesh规范;
  • 目标温度: Data Trans Client Model(Opcode = 0xFD1C01, AttributeType = 0x010C)
  • 加湿开关: Data Trans Client Model(Opcode = 0xFD1C01, AttributeType = 0xF004)
  • 屏显: Data Trans Client Model(Opcode = 0xFD1C01, AttributeType = 0x050D)
  • 童锁: Data Trans Client Model(Opcode = 0xFD1C01, AttributeType = 0x050C)

状态同步

取暖器上电启动或设备状态被其他设备(如有,例如手机App、墙面开关等)改变后通知音箱

  • 开关: Data Trans Client Model(Opcode = 0xF81C01, AttributeType = 0x0100)
  • 温度: Data Trans Client Model(Opcode = 0xF81C01, AttributeType = 0x010D)
  • 目标温度: Data Trans Client Model(Opcode = 0xF81C01, AttributeType = 0x010C)
  • 加湿开关: Data Trans Client Model(Opcode = 0xF81C01, AttributeType = 0xF004)
  • 屏显: Data Trans Client Model(Opcode = 0xF81C01, AttributeType = 0x050D)
  • 童锁: Data Trans Client Model(Opcode = 0xF81C01, AttributeType = 0x050C)
  • 缺水: Data Trans Client Model(Opcode = 0xF81C01, AttributeType = 0x0414)

Data Trans Model有关取暖器的参数说明

AttributeType AttributeValue Direction Description
0x0100 bool 取暖器开关 mesh设备发往音箱 表示设备的开关
0xF004 bool 加湿开关 音箱发往mesh设备 或 mesh设备发往音箱 关闭加湿=0x0027、打开加湿=0x00C9
0x010C uint16 目标温度 音箱发往mesh设备 或 mesh设备发往音箱 开氏温度 乘以 100
0x050C bool 童锁开关 音箱发往mesh设备 或 mesh设备发往音箱 关闭=0x00、打开=0x01
0x010D uint16 温度 mesh设备发往音箱 开氏温度 乘以 100
0x050D bool 屏显 音箱发往mesh设备、或 mesh设备发往音箱 关闭=0x00、打开=0x0
0x0414 bool 缺水 mesh设备发往音箱 不缺水=0x00 、缺水状态=0x01

参数数据示例

  • 将取暖器设置到目标温度的指令 AttributeType为0x010C、控制参数为目标温度27摄氏度度,开尔文温度300.15度,AttributeValue为30015,即十六进制表示为753F,假设此时TID的值为1,那么完整的Message部分为0x010C01753F。 由于音箱发给取暖器数据的大小端序为小端序,因此取暖器收到的指令Message部分为0x01010C3F75。 取暖器收到的整体的Mesh消息的Opcode部分为0xFD1C01,因此取暖器收到的整体数据部分为0xFD1C01010C013F75。 取暖器收到以后,需要回复Opcode为Set State Status的消息给音箱,以使得音箱确认消息发送成功(参考基础规范)。
  • 将取暖器的加湿开关状态上报 取暖器的加湿开关上报是在取暖器的加湿开关的状态有发生变化时,同步给音箱。使用Opcode = 0xF81C01的消息上报,音箱不需要回复。 以取暖器的加湿开关打开的状态为例,假设此时TID的值为10,那么完整的Message部分为0x0AF00400C9。 由于取暖器发往音箱的数据大小端序为小端序,因此音箱收到的Message数据部分为0x0A04F0C900,整体消息为0xF81C010A04F0C900。

取暖器的状态上报规范

  • 取暖器在上电、开机、配网后,上报当前取暖器的状态。
  • 取暖器的开关状态、温度、目标温度、加湿开关,屏显打开状态、童锁开关状态有变化时,上报开关状态变化。
  • 取暖器的状态只发送给0xF000地址,云端会去重多网关上报场景
  • F8状态上报收到预期的FA之后停止发送,若一直没有收到FA消息,发送完预定次数之后停止发送

tid去重

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

TTL

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

心跳

  • 设备端要支持Config Heartbeat Publication Set命令设置心跳参数
  • 如果音箱没有通过Config Heartbeat Publication Set命令设置设备心跳间隔,则默认心跳发送间隔16s,每次间隔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流程;

其它规范

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