小米溫濕度感測器協議分析
博主喜歡玩智能家居的東西,智能家居確實能給家裡帶了不少的方便。
天氣熱了,博主想做一個:當屋子有人,並溫度高於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數據包:
- cls_id:0x0000, attr_id:0x0005, dt:0x42, 「lumi.sensor_ht」 ,我是"綠米.感測器溫濕度"
- 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]
博主估計,這一定是小米做的後門。如果不是小米的網關,則不穩定工作,時有時沒有。如果是,則妥妥地工作。看來小米留了一手。
於是博主借了一台小米的網關,重新入網,抓其入網過程:
從上面過程可見,溫濕度入網,與入我們自己的網關過程是一樣的。綠米網關也沒有回什麼。所以,也沒有做什麼特殊的處理。
既然沒有做處理,那麼在小米自己的網關里,溫濕度表現如何呢?博主將抓包器開了一晚上,抓到的結果如下:
也都那樣,時而有數,時而沒有數據上報。其中從1:00到6:30一直都沒有真實的數據上來。
查看小米的App,上面也沒有顯示出比較直觀的數據(抱歉,我忘了截屏)。倒是顯示出的小紋波,可能是造的數據。
或許,該溫度值是設備了,只有當變化時才上報(Zigbee協議中有這個屬性配置項)。那麼博主倒杯熱水進行測試。結果:
這證實了我的推測。
長期觀查,在智家365里的顯示效果:
斷斷續續的溫度值上報,導致曲線圖大部分為虛線。
結論是:
- 小米的溫濕度感測器只會有溫濕度值有較大的跳變時才有屬性上報,平時不會有。
- 每小時會有1個私有的屬性報告作為心跳。
- 它沒有電量管理(至少我沒有看到有電量相關的數據包,也沒有在其官方App里找到相關的電量顯示)
推薦閱讀:
※掃盡塵埃,解放雙手:ILIFE智意天目X660掃地機器人體驗測評
※收割公寓智能鎖6成市場,一把鎖能否敲開智能家居的大門?
※你怎麼看把Lisp作為開發語言的物聯網平台?
※智能燈泡的商業前景怎麼樣?
※讓你的腦袋真正「冷靜」,一夜好眠