小米温湿度传感器协议分析
小米温湿度传感器协议分析
临峰不畏 发表于6个月前
小米温湿度传感器协议分析
  • 发表于 6个月前
  • 阅读 944
  • 收藏 25
  • 点赞 3
  • 评论 3

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 家里部署了简单的智能家居系统,买了个小米的温湿度传感器,尝试将其接入到自己&...

博主喜欢玩智能家居的东西,智能家居确实能给家里带了不少的方便。
天气热了,博主想做一个:当屋子有人,并温度高于33度时,开空调。博主已有了一套自家的智能家居系统,有网关、人体红外传感器、红外转发器,就差一个温度传感器了。于是博主在小米的官网上物色了绿米联创的温湿度传感器。如下:

硬件拆解:http://www.geekifix.com/wp/archives/390.html

原理上温湿度传感器使用是Zigbee通信协议,我现在使用的网关本身也是Zigbee协议的,所以分析一下抓包数据就可以知道其与网关的通信过程了。

博主拿到温湿度之后,按照说明,主机通过手机客户端打开设备入网许可。通过分析主机日志观察温湿入网过程。过程大概如下:
1. 温湿度发出 Beacon Request,请求入网
2. 主机回复 Beacon,告知可以入网
3. 温湿度请求关联,主机关联回复,Transport Key传送密钥
4. 完成入网
5. 温湿度上报 ZDO数据包Device Announce,入网报告
6. 温湿度主动主报ZCL数据包:

  1. cls_id:0x0000, attr_id:0x0005, dt:0x42, “lumi.sensor_ht”  ,我是"绿米.传感器温湿度"
  2. cls_id:0x0000, attr_id:0x0001, dt:0x20, 2,我的应用固件版是2

从上面两条,其本上就能识别出它是温湿度传感器。
这个做法没有遵循Zigbee标准。Zigbee标准入网流程的做法比较麻烦,小米直接摈弃之。它的设备一入门就直接自报门:我是什么什么设备。好吧,很直接。没关系自家的网关也能支持这种方式的。
接下来小米温湿度上报了私有的属性报告:
cls_id:0x0000, attr_id:0xff01, dt:0x42, [1f 01 21 ef 08 04 21 a8 01 05 21 18 00 06 24 01 00 00 00 00 64 29 33 0c 65 21 cd 19 0a 21 00 00]
上面两条还是HA1.2标准的属性报告,但这条属性是私有的。
博主在想,小米为什么要上报这个?是需要主机回复对应的数据,以确认是小米的网关,对自家的网关开后门?先甭管这个,看看设备上报的温湿度内容:
cls_id:0x0402, attr_id:0x0000, dt:0x29, [bb, 0b],温度上报 0x0bbb,十进制:3003,除100就是30.03摄氏度
cls_id:0x0405, attr_id:0x0000, dt:0x21, [04, 1e],湿度上报 0x1e04,十进制:7684,除100就是76.84%

博主通过修改主机的配置,将小米温湿度传感器加到了智家365的系统里来。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

但看起来,其工作不太稳定。
博主分析数据,发现它有很长一段时间没有上报温湿度值,没有心跳,也没有电量上报。只是时不时地就会上报 cls_id:0x0000, attr_id: 0xff01 的属性报告,每次还有微妙差异:

[1f 01 21 ef 08 04 21 a8 01 05 21 18 00 06 24 01 00 00 00 00 64 29 33 0c 65 21 cd 19 0a 21 00 00]
[1f 01 21 bd 0b 04 21 a8 13 05 21 2a 00 06 24 00 00 00 00 00 64 29 27 0b 65 21 26 26 0a 21 00 00]
[1f 01 21 bd 0b 04 21 a8 13 05 21 2a 00 06 24 00 00 00 00 00 64 29 ef 0a 65 21 e4 20 0a 21 00 00]

博主估计,这一定是小米做的后门。如果不是小米的网关,则不稳定工作,时有时没有。如果是,则妥妥地工作。看来小米留了一手。

改天博主再买个小米的网关,配合着用,看小米网关在收到0xff01时到底回复了什么。

共有 人打赏支持
粉丝 206
博文 183
码字总数 96576
评论 (3)
临峰不畏
博主翻了一遍小米App用户的使用文章,没有看到有电量显示相关的内容,也没有离线提示。
难道它本身就没有电量、离线提示功能?
rz
楼主,厉害了,我现在自己在用arduino玩这些,还没到楼主这个程度
dingdayu

引用来自“dush”的评论

楼主,厉害了,我现在自己在用arduino玩这些,还没到楼主这个程度

早期我也是用arduino,不过后来转树莓派了。
×
临峰不畏
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: