邱奕盛 謝作如
涉及學(xué)科:物理、技術(shù)、藝術(shù)
為了讓學(xué)生體會新技術(shù)的發(fā)展,筆者在溫州中學(xué)人工智能實驗中配置了一系列的智能家居設(shè)備,如智能燈泡、智能窗簾、智能插座和智能開關(guān)等。通過一個智能音箱設(shè)備,即可使用語音管理所有智能設(shè)備的工作狀態(tài)。但是,用語音控制雖然看起來很方便,在某些特定的場合并不適合,如有噪音,識別效果并不好,再如上課時喊一聲“小愛同學(xué)”,也有點尷尬。
在本欄目上一期的文章中,筆者用開源物聯(lián)網(wǎng)網(wǎng)關(guān)Home Assistant(簡稱 HASS)實現(xiàn)了個性化控制各種設(shè)備,于是繼續(xù)在HASS的幫助下,準備將開源硬件改造為智能家居的控制器。而自帶屏幕的掌控板,肯定成為最佳選擇之一。
● 掌控板做智能家居控制器的原理分析
Home Assitant有很多擴展插件,除了可以方便地連接各品牌智能設(shè)備,使得各品牌智能家居設(shè)備可以統(tǒng)一管理和控制外,還支持MQTT協(xié)議。掌控板等開源硬件雖然不能直接接入HASS,但是經(jīng)過MQTT服務(wù)器做中轉(zhuǎn)后,即可實現(xiàn)對智能設(shè)備的控制,也就是說利用掌控板能夠制作一個與眾不同的智能家居控制器。其工作原理如圖1所示。
從圖1中還可以看出,只要將掌控板與MQTT服務(wù)器連接,消息傳遞就不再受限于局域網(wǎng),可以在任何有網(wǎng)絡(luò)的地方實現(xiàn)控制實驗室的智能設(shè)備。
● 準備工作:基礎(chǔ)環(huán)境的搭建和設(shè)置
1.搭建MQTT服務(wù)器
MQTT服務(wù)器很多,HASS也支持絕大多數(shù)的服務(wù)器。SIoT是一款適合中小學(xué)教師和學(xué)生學(xué)習(xí)的跨平臺MQTT軟件,下面以它為例介紹MQTT服務(wù)器的搭建。
在gitee.com/vvlink/SIoT上可以下載對應(yīng)版本的SIoT軟件。軟件不用安裝注冊,直接運行即可。用戶名為siot,密碼為dfrobot。
SIoT服務(wù)運行在1883端口,Web管理端口為8080,可以通過瀏覽器查看(如圖2)。
如果希望實現(xiàn)因特網(wǎng)的遠程控制,那么可以將SIoT搭建在公網(wǎng)服務(wù)器上,或者直接注冊企業(yè)的MQTT服務(wù),如EasyIoT、OneNet等。
2.HASS的安裝與設(shè)置
上一期文章已經(jīng)介紹了如何搭建HASS并接入智能家電設(shè)備。接下來,就需要配置MQTT平臺地址。
首先,通過瀏覽器訪問HASS的網(wǎng)頁管理界面,地址是{HASS的IP}:8123。點擊配置—設(shè)備與服務(wù)—添加集成—輸入“MQTT”搜索。其次,如圖3所示,填入MQTT服務(wù)器相關(guān)信息,其中服務(wù)器這一欄填寫MQTT的服務(wù)域名或IP。如果使用的是企業(yè)MQTT服務(wù),一般還需要SSL/CA身份認證,具體操作可以參考www.home-assistant.io/docs/mqtt/certificate/。
● 用掌控板控制智能插座
以SIoT控制智能插座的開關(guān)為例,需要配置一個“場景自動化”的腳本,具體操作如下:
打開HASS的網(wǎng)頁管理界面,點擊配置—場景自動化—添加自動化—從空的自動化開始,進入自動化配置。
在觸發(fā)條件中選擇觸發(fā)條件類型為“MQTT”(如圖4),主題填寫chazuo/kaiguan,這樣,HASS會監(jiān)聽這個主題收到的MQTT消息,一旦收到,就會觸發(fā)“動作”(如圖5)。在動作中,選擇動作類型為“調(diào)用服務(wù)”,服務(wù)選擇“開關(guān):Toggle”表示切換開關(guān)狀態(tài)。目標(biāo)選擇設(shè)備為智能插座。點擊保存。
接著,添加一個自動化,實現(xiàn)設(shè)備狀態(tài)的查詢,這一功能屬于高級功能,需要通過YAML語言編寫,具體流程如下:
在觸發(fā)條件中選擇觸發(fā)條件類型為“MQTT”,主題填寫chazuo/chaxun。在動作中,選擇動作類型為“調(diào)用服務(wù)”,服務(wù)選擇“MQTT: Publish”表示發(fā)送MQTT消息,Topic填寫chazuo/zhuangtai,然后點擊這個模塊的三個點,切換到Y(jié)AML編輯模式,添加一行payload_template: '{{ states("switch.cha_zuo_1") }}',這里的states()代表獲取實體switch.cha_zuo_1的狀態(tài),花括號表示是變量的引用。最后的效果如圖6所示。
保存配置后,接下來就可以通過mPython給掌控板編程了。預(yù)設(shè)的功能是:按A鍵切換智能插座的開關(guān),B鍵查詢智能插座的狀態(tài)。模塊化編程代碼如下頁圖7所示,運行效果如下頁圖8所示。
● 用掌控板調(diào)節(jié)智能燈泡的色彩
智能家電的控制不只有開和關(guān)的工作狀態(tài),還有很多其他的功能可以被控制,如窗簾的幅度、燈光的色彩等。我們可以通過以json格式的MQTT消息發(fā)送復(fù)雜指令控制家電,這里介紹最常見的智能燈的色彩調(diào)節(jié)。
先創(chuàng)建一個“自動化”腳本,在觸發(fā)條件中選擇觸發(fā)條件類型為“MQTT”,主題填寫deng/secai。在動作中,選擇動作類型為“調(diào)用服務(wù)”,服務(wù)選擇“燈光: Turn on”表示開燈,目標(biāo)選擇已經(jīng)添加過的設(shè)備,如Yeelight彩燈,勾選“Brightness”并設(shè)置一個數(shù)值,然后切換至以YAML編輯,在data中添加rgb_color: '{{ trigger.payload_json.rgb }}',表示燈光顏色設(shè)置根據(jù)觸發(fā)條件中接收到的數(shù)據(jù)。效果如圖9所示。
接著,通過mPython給掌控板編程,模塊化編程代碼如圖10所示,運行效果如圖11所示。
● 小結(jié)
借助HASS和MQTT,筆者成功地實現(xiàn)了用掌控板來控制智能家居設(shè)備。實際上,除了掌控板,任何一款支持MQTT的軟硬件都能控制智能家居設(shè)備,如行空板、虛谷號、樹莓派等。MQTT的編程門檻很低,小學(xué)生用Mind+和mPython,也能設(shè)計一個與眾不同的控制面板。只要創(chuàng)意無限,用戶和智能家居的交互方式就會越來越靈活有趣。