小米設備token獲取&HomeAssistant安裝部署

近兩年,物聯網及其相關技術迅猛發展,各樣的智能設備漸漸的走進了我們的生活,隨之使用者們也變的越來越嚮往智能化的生活。但目前的智能家居市場產品分散,單一廠商很難完全滿足用戶需求,並且多個廠商產品不能原生聯動,這可能也是家居智能化面臨的問題。本文主要介紹小米設備拿token以及局域網控制,以及一款開源的智能家居平臺HomeAssistant部署與使用,讓家庭中的多種智能設備聯動變成一種可能。

小米智能設備token獲取

爲了消除對專有軟件(米家app)的依賴,米家設備提供一種在局域網控制的方式。在使用這個局域網控制協議之前需要獲取到設備token,接下來介紹小米設備獲取token的一些方法。

miIO-discovery獲取token與控制

設備和米家app在同一局域網下使用的加密專有網絡協議,這個被稱之爲miIO協議。該協議基於UDP,使用54321端口進行通信。具體功能見github地址https://github.com/rytilahti/python-miio,這個庫的目的是支持所有miIO兼容的設備,將設備類型和控制方法進行了分類,以簡化與它們的交互。該庫需要安裝在Python3.5以上版本,首先搭建Python環境:

  • 安裝Python3.5依賴(本機存在的會忽略)
sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev libssl-dev openssl libgdbm-dev liblzma-dev libreadline-dev libncursesw5-dev
  • 編譯安裝Python3.5
wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
tar zxvf Python-3.5.2.tgz
cd ./Python-3.5.2
./configure --prefix=/usr/bin/python3.5
make
make
sudo make install

編譯後運行一下python3.5,結果如下證明安裝成功
在這裏插入圖片描述

  • 安裝miIO庫,下載庫代碼到本地
git clone https://github.com/rytilahti/python-miio

下面就以小米智能插座爲例,獲取該設備token。進入python-miio/miio目錄discovery.py文件主要是來獲取設備token的方法。爲了直觀將插座的主要實現代碼提取出來,在python-miio/miio目錄編寫如下腳本miio_test.py(向設備ip的54321端口發送固定字符串,返回值即爲token)

#-*-coding:utf8-*-
import codecs
import socket
from protocol import Message

helobytes = bytes.fromhex('21310020ffffffffffffffffffffffffffffffffffffffffffffffffffffffff')
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto(helobytes, ('192.168.42.17', 54321))#插座ip,端口54321
data, addr = s.recvfrom(1024)
m = Message.parse(data)
tok = codecs.encode(m.checksum, 'hex')
print(‘token:,tok)
  • 運行python3.5 miio_test.py,獲取小米Wi-Fi插座token
    在這裏插入圖片描述
  • 執行控制腳本,輸入插座的ip和token兩個參數就可以看到現在插座的狀態,在這兩個參數的基礎上添加on/off就可以對該設備進行控制
    在這裏插入圖片描述
    支持這種方式拿token的還有小米的空氣淨化器、淨水器、掃地機器人、智能插座插線板等。具體列表見https://github.com/rytilahti/python-miio

app直接token獲取

能用上述的miIO探測方法獲取還是比較便捷的,但目前只有部分小米設備支持。接下來還有一種方法可以直接從app獲取token。以小米綠米網關爲例,首先下載米家app,將綠米網關配置入網後,點擊網關設備。接下來步驟如下組圖,最後的密碼即爲網關的token。
在這裏插入圖片描述
在這裏插入圖片描述
目前綠米的這種設計模式是最方便用戶的,而且設備的所有者還可以選擇是否開放局域網控制以及刷新控制token的有效性,個人還是很希望小米的其他設備同樣開放app側獲取設備token,因爲畢竟獲取需要搭建複雜的環境以及調試代碼,大部分使用者應該不能接受的。

DB獲取token

 第1步,獲取一部安卓手機的root權限
 第2步,安裝米家app並登錄賬號
 第3步,進入/data/data/com.xiaomi.smarthome/databases/
 第4步,拷貝miio2.db,下載到電腦
 第5步,前往網站(http://miio2.yinhh.com/),上傳miio2.db,點擊提交,即可獲得token。
沒有具體測試這種方式獲取token,可以參考這個鏈接(https://homekit.loli.ren/docs/show/12)

開源智能家居平臺HomeAssistant安裝部署

上文給大家介紹了獲取小米設備獲取token方法和插座的簡單控制,如果想自動化或者實現多設備聯動的話還需要寫代碼,不會被所有的用戶所接受,接下來給大家介紹下一款開源智能家居平臺——HomeAssistan,只要幾步部署,就可以輕鬆實現多廠商設備的聯動。

HomeAssistant簡介

HomeAssistant爲開源的智能家居平臺,可以識別和直接連接的外部設備有將近千項。其中有各種商業化的智能產品(如小米系列產品、Philips智能燈系列、亞馬遜的音響、蘋果的Siri、Google Assistant、BroadLink的產品、特斯拉汽車等)、有互聯網上的各種實時信息(股票、匯率、交通、天氣等)、有開源或開放的各種智能軟件(人臉識別、車牌識別文字識別、文字轉語音、語音轉文字等)、有各種聯動機制(短信、Email等)
在這裏插入圖片描述

安裝部署HomeAssistant

  • 安裝HomeAssistant
pip3 install HomeAssistant
  • 啓動HomeAssistant
hass

第一次啓動HomeAssistant,因爲要安裝相關依賴,大概要等上10幾分鐘,通過瀏覽器訪問樹莓派的8123端口,如果看到如下頁面,證明安裝啓動成功。

將小米設備配置到HomeAssistant

進入.HomeAssistant目錄,編輯configuration.yaml,添加小米網關和Wi-Fi插座的配置參數,token爲按照上文你獲取到的字符串:

switch:                                     #小米插座配置參數
  - platform: xiaomi_miio
    name: Xiaomi Mi Smart Power Strip #設備名稱
    host: 192.168.42.17                  #設備IP
token: YOUR_TOKEN                    #設備密鑰
xiaomi_aqara:                             #小米網關配置參數
  gateways:
    - mac: DEVICE_MAC                     #設備mac
      key: YOUR_TOKEN                     #設備密鑰

配置文件修改完成後重啓hass,再次訪問HomeAssistant主頁看到新增Xiaomi Mi Smart Power Strip(配置文件裏面的name字段)和GatewayLight設備,這就證明配置完成,點擊對應的控制按鈕就可以控制該設備了。
在這裏插入圖片描述

HomeAssistant可連接設備

HomeAssistant支持數以千計的設備,這裏只舉一些列子,比如支持控制小米的設備,BroadLink設備,自己開發的MQTT設備。還可以通過插件支持一些智能語音輸入控制,比如安裝HAbridge可以使用亞馬遜echo音箱、京東音箱和天貓精靈控制HomeAssistant支持的設備,安裝HomeBridge和homekit就可以讓IOS的Siri控制設備。這裏就不一一羅列,具體的詳細支持見官網列表
HomeAssistant支持數以千計的設備,這裏只舉一些列子,比如支持控制小米的設備,BroadLink設備,自己開發的MQTT設備。還可以通過插件支持一些智能語音輸入控制,比如安裝HAbridge可以使用亞馬遜echo音箱、京東音箱和天貓精靈控制HomeAssistant支持的設備,安裝HomeBridge和homekit就可以讓IOS的Siri控制設備。這裏就不一一羅列,具體的詳細支持見官網列表
在這裏插入圖片描述

總結

從小米、京東微聯、博聯等智能家居設備體驗來看,智能的並不盡人意。首先,雖然都可以生成若干場景,但大多是自己玩自己的,不同廠商之間無法實現聯動;其次場景略顯單一,假如用戶想實現每次出門之前提醒天氣,如果今天是霧霾/雨天提醒用戶帶口罩/雨具,類似這樣的場景是實現不了的。因爲缺乏與互聯網信息聯動的接口,並且大多數廠商的智能音箱與其他設備交互僅僅是語音控制。可能就是考慮到用戶的個性化需求,就有了類似HomeAssistant這樣的智能家居平臺,將各式的資源整合到一起,使得家居距離智能更近了一步。當然,從目前的智能家居市場來看,單獨一個智能設備廠商不太可能讓所有用戶僅使用自己的設備,所以給用戶一些控制的“自由”,對廠商來說應該是個不壞的選擇。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章