小米溫濕度感測器協議分析

博主喜歡玩智能家居的東西,智能家居確實能給家裡帶了不少的方便。

天氣熱了,博主想做一個:當屋子有人,並溫度高於33度時,開空調。博主已有了一套自家的智能家居系統,有網關、人體紅外感測器、紅外轉發器,就差一個溫度感測器了。於是博主在小米的官網上物色了綠米聯創的溫濕度感測器。如下:

硬體拆解:geekifix.com/wp/archive

原理上溫濕度感測器使用是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]

博主估計,這一定是小米做的後門。如果不是小米的網關,則不穩定工作,時有時沒有。如果是,則妥妥地工作。看來小米留了一手。

於是博主借了一台小米的網關,重新入網,抓其入網過程:

從上面過程可見,溫濕度入網,與入我們自己的網關過程是一樣的。綠米網關也沒有回什麼。所以,也沒有做什麼特殊的處理。

既然沒有做處理,那麼在小米自己的網關里,溫濕度表現如何呢?博主將抓包器開了一晚上,抓到的結果如下:

也都那樣,時而有數,時而沒有數據上報。其中從1:00到6:30一直都沒有真實的數據上來。

查看小米的App,上面也沒有顯示出比較直觀的數據(抱歉,我忘了截屏)。倒是顯示出的小紋波,可能是造的數據。

或許,該溫度值是設備了,只有當變化時才上報(Zigbee協議中有這個屬性配置項)。那麼博主倒杯熱水進行測試。結果:

這證實了我的推測。

長期觀查,在智家365里的顯示效果:

斷斷續續的溫度值上報,導致曲線圖大部分為虛線。

結論是:

  • 小米的溫濕度感測器只會有溫濕度值有較大的跳變時才有屬性上報,平時不會有。
  • 每小時會有1個私有的屬性報告作為心跳。
  • 它沒有電量管理(至少我沒有看到有電量相關的數據包,也沒有在其官方App里找到相關的電量顯示)

推薦閱讀:

掃盡塵埃,解放雙手:ILIFE智意天目X660掃地機器人體驗測評
收割公寓智能鎖6成市場,一把鎖能否敲開智能家居的大門?
你怎麼看把Lisp作為開發語言的物聯網平台?
智能燈泡的商業前景怎麼樣?
讓你的腦袋真正「冷靜」,一夜好眠

TAG:智能家居 | 小米产品 |