謝作如 邱奕盛




涉及學科:信息技術、科學、藝術
智能家居在我們的生活中已經隨處可見,買一個智能家居設備,輕點手機屏幕,就能完成設備的連接與控制,甚至可以設定一系列的自動化功能。例如,房間的燈泡可以根據人體紅外傳感器檢測房間的空閑狀態,來自動決定開關,或者設定每天晚上7點準時開燈,又或者通過語音口令來實現智能控制。總之,智能家居的普及極大地便利了我們的居家生活。
然而,盡管“米家”“天貓精靈”等平臺提供了一定的智能化管理方式,但只能使用其提供的APP進行控制。想實現自己寫一段Python代碼控制設備,或者把開源硬件改造為智能家居設備控制器,都有些困難。于是,筆者把目光投向了一款智能家居的管理平臺——Home Assistant(簡稱HASS),這是一個能夠將不同品牌智能家居設備管理起來的開源物聯網網關軟件。
● HASS的工作原理分析
手機APP之所以能夠遠程控制智能家居設備,是依賴于與設備相連的企業網關或者服務器。以智能燈泡為例,首先是智能燈泡和網關相連,手機APP發送命令到網關,網關再發送命令到智能燈泡,從而實現控制。但是,絕大多數的智能家居網關并沒有開放編程接口,用戶無法對網關進行編程。HASS相當于是一個額外搭建的智能家居網關,因為其開放了API接口,那么我們就可以編程來控制局域網內的智能家居設備,達到個性化控制的目的。
如圖1所示,HASS和原來的企業網關并行工作,智能燈泡既能接受企業網關的控制,也可以接受HASS的控制,這樣就能確保原來的智能家居系統也能正常工作,不受破壞。
● 基于HASS的智能家居系統實現
HASS是一個開源項目,可以運行在很多硬件上。筆者選擇用樹莓派4來運行HASS平臺,并且用來管理學校人工智能實驗室中的智能設備。
1.HASS的安裝
HASS提供了好多種安裝方案,經過比較,采用Docker方案安裝最為方便。
(1)給樹莓派安裝Docker
樹莓派連上Wi-Fi后,在樹莓派操作系統內使用命令行安裝Docker。筆者強烈建議先安裝Docker圖形化工具portainer,然后通過瀏覽器來安裝HASS。
(2)在Docker安裝HASS
在命令行輸入代碼完成安裝。
2.HASS平臺的設置
啟動Docker容器后,在瀏覽器輸入{樹莓派的IP}:8123(默認端口號),即可訪問HASS前端頁面,第一次進入需要等待一會兒以完成聯網更新,然后完成用戶初始設定即可。
進入系統后,需要申請一個長期訪問令牌,用來做編程連接的身份認證。在網頁左側側邊欄選擇最下面一欄的用戶,然后點擊右側頁面最下方的創建令牌,創建完成之后請務必保存好令牌的內容。由于令牌內容各不相同,下文以**your token**代替。
3.智能家居設備的設置
HASS支持的智能家居設備種類廣泛,兼容各大平臺,如小米、天貓精靈等。這里以Yeelight智能燈泡和米家智能插座Wi-Fi基礎版為例,來說明設備的接入和設置。這兩個設備都可以在“米家APP”進行管理。
4.智能設備接入HASS
在瀏覽器輸入{樹莓派的IP}:8123訪問HASS平臺,點擊左側側邊欄上的“配置”,然后在右側頁面選擇“設備與服務”,在跳轉的頁面點擊右下角的添加集成,來完成設備的接入。
(1)Yeelight智能燈泡接入
點擊添加“集成”后,在搜索框輸入Yeelight,選擇該集成后會自動在局域網內查找符合條件的設備,并且自動完成接入。
(2)米家智能插座接入
插座的接入要稍微麻煩一點,在搜索框輸入Xiaomi Miio,選擇該集成后還需要在網頁上登錄米家賬號,然后選擇智能插座設備,HASS平臺會自動在局域網內查找選擇的智能插座設備,并且自動完成接入(如圖2)。
(3)在HASS頁面控制
點擊左側側邊欄的“概覽”,可以看到剛才添加的設備已經顯示在右側頁面中了。這時就可以通過網頁上的開關進行控制設備了,如圖3所示。
5.控制程序的編寫和測試
HASS提供了WebAPI,通過網絡即可實現對設備的控制。筆者選擇了Python為編程語言,結合requests庫進行編程測試。
(1)IDLE連接情況測試
輸入下頁圖4所示的代碼。
屏幕會打印出在HASS中的所有設備的狀態。返回的內容是json格式,由于內容太多,IDLE會壓縮內容,僅輸出response=Squeezed text(218 lines),可以雙擊展開,也可以將輸出結果復制到json格式化解析網站上做格式化,以便更好地查看返回結果。
在輸出的結果中搜索yeelight,可以找到智能燈泡的信息,留意其中的entity_id這一項。
(2)設備信息查詢測試
將url修改為下面的形式,其中{entity_id}是剛才查詢的結果,如圖5所示。
這樣,返回結果就是智能燈泡的狀態信息了。可以看到,“state”的值是“on”。類似地,也可以查看智能插座的狀態信息。
(3)使用Web API控制智能燈泡
輸入如圖6所示的代碼,代碼中調用了HASS的service服務中的toggle,它的功能是切換燈的開關狀態。service中還有更多可用的服務,如turn_on(打開)、turn_off(關閉)等,可以自行探索。
如果想對燈點亮后的亮度、色彩進行進一步設置,可以在payload中添加相應信息,如圖7所示,這樣,可以設置燈的亮度為100,顏色為黃色。
● 基于HASS的個性化控制想法
一旦實現了智能家居設備的可編程控制,各種個性化的創意就涌現出來。
創意1:能夠“吹”的燈泡。
用Python代碼定時獲取當前的天氣預報,然后顯示不同的燈泡色彩,這樣的創意筆者已經做過,不夠好玩。但是,如果在聲音傳感器上吹口氣,就吹出燈光搖曳的效果呢?
創意2:魔棒控制燈光。
在哈利波特的魔法世界里,揮動魔棒就可以實現意念控制,進而可以利用加速度傳感器感知魔棒的運動方向,讓燈光呈現魔幻的效果。
創意3:根據主人情緒改變燈光。
可以通過攝像頭捕捉人臉,經過算法分析人臉表情,根據情緒的高漲與低落,將燈光氛圍與情緒匹配。
常見的創客作品往往局限于LED、舵機、直流電機之類的電子模塊,我們一直希望創客作品能夠直接和家用電器形成交互。現在有了HASS的支持,學校的人工智能實驗就變成了一個新的研究智能家居和物聯網技術的實踐場,下一步筆者還會通過人工智能技術,用各種有趣的方式控制燈光、開關、窗簾,還有門鎖等。
3962501908278