智慧家居 篇十二:第十章 自建HomeAssistant定時任務——Google都沒做到的事

作者:GeekOn

導讀:

智慧音箱可以設定鬧鐘,但卻不可以定時執行任務,今天就來搞定它。

續著上一篇IFTTT繼續

不知道是不想做還是不肯做還是不願做還是擠牙膏,總之目前的智慧音箱都是隻能設定鬧鐘,卻不能夠在設定的時間執行特定的操作任務。之前實現的時候有個方案,藉助日曆(比如

Google日曆

),例如“hi,Google,設定18:00開啟電視”,那麼就會在Google日曆的18:00設定一條日曆,並在日曆提醒時執行開啟電視的任務。執行後發現因為Node-RED和Google日曆執行時有延遲,總是不能夠很準確的在設定的時間執行任務(多數會延遲3-10分鐘),強迫症自然是不能忍。所以就執行第二套方案,在自己的伺服器上面做計時器定時,寫到頭麻到不想寫的時候,突然找到一個部件,可以協助實現,開心!

還是以Google home為例,可以實現語音設定“hi,Google,設定1730開啟空調”,並且使用Notify通知設定結果,支援單個刪除,全部刪除,修改等功能。實現這個功能用到幾個好東西,除Node-RED外,重磅推出

IFTTT

Line

即時通訊。

IFTTT

智慧家居 篇十二:第十章 自建HomeAssistant定時任務——Google都沒做到的事

IFTTT是一個第三方平臺,可以很方便的聯動很多網路服務,可以和Google Assistant進行互動,用來自定義語音指令,個性化定製Google home可以說是非常方便,神器!

LINE

LINE就是一個即時通訊軟體,類似於wechat、whatsapp,只不過它可以直接接入IFTTT,用來接收推送通知方便快捷,且無推送資訊條數限制,強烈建議安裝使用。(wechat也可以,不過需要用企業微信,個人微信暫不支援。)

準備工作

1、Node-RED

需要新增一個元件,在Node-RED的選單中選擇

設定

安裝

,搜尋corn-plus,並安裝它。

智慧家居 篇十二:第十章 自建HomeAssistant定時任務——Google都沒做到的事

2、IFTTT

首先要建立帳號,可以連結Google 或Facebook 帳號登入,也可以用Email 創一個新的。搜尋

webhook

,並連線,有一串api key需要記錄下來,並放入configuration。yaml。api key就是顯示的一串網址https://maker。ifttt。com/use/後面的部分。

記得重啟HA。

並連線你的Google Assistant賬號,Line賬號,具體在右上角點選頭像,選擇

My services

。還有其他許多服務都可以接入,這裡我們只先說這兩個。

回到HA,在配置中新增IFTTT整合,跟著說明走就好了。

開始設定

老規矩先說邏輯

Google指令傳入HANode-RED處理執行

Node-RED處理包括命令解析,時間設定,任務安排,以及修改、刪除,檢查當前設定等。1、先設定Google指令,透過IFTTT,上一篇已敘,不再贅述。

如果跟足上篇,正好就到了Google傳送事件至HA的環節。

2、HA收到事件的處理。

HA本身可以接收webhook發來的事件,上一篇也同樣有敘述,透過將有關資訊傳送到一串網路地址,該資訊就會被HA所接收,並作為一個

“事件”

,從而可以用來觸發一系列動作,並將其所攜帶的資訊作為處理資料。

在Node-RED中使用

events:all

模組來監測事件情況,配置如下:

智慧家居 篇十二:第十章 自建HomeAssistant定時任務——Google都沒做到的事

IFTTT發來的

事件在HA

中使用ifttt_webhook_received來定義。

插播Debug

插播一下Node-RED中debug的使用,透過debug可以及時瞭解收到的資訊內容,json格式,以及產生錯誤的可能原因。

配置

智慧家居 篇十二:第十章 自建HomeAssistant定時任務——Google都沒做到的事

通常我會選擇完整諮訊。將他連線到你希望瞭解輸出資訊的介面上,就可以了,他的存在不會影響你的其他流程,只會多出一個分支來收集所有的輸出資訊,並顯示在右側邊欄的debug欄。

智慧家居 篇十二:第十章 自建HomeAssistant定時任務——Google都沒做到的事

圖示1、2、3開啟右側邊欄i是infomation視窗,中間的瓢蟲就是debug,後面的是dashboard。

智慧家居 篇十二:第十章 自建HomeAssistant定時任務——Google都沒做到的事

看到

payload

沒,他就是對應msg。payload的,同理event_type對應的就是msg。event_type。而再下一級的用法是msg。payload。time,以此類推。

我本身使用了很多IFTTT的事件觸發,所以先要用switch模組來分流。

智慧家居 篇十二:第十章 自建HomeAssistant定時任務——Google都沒做到的事

分流之後的第一個輸出口就是現在要用到的定時任務,

智慧家居 篇十二:第十章 自建HomeAssistant定時任務——Google都沒做到的事

這是我們在IFTTT中設定的事件所攜帶的資訊,第一個event對應了剛才的分流設定,entity_id對應Google中的文字部分,time對應數字部分,

command是為了方便新增刪除等功能的附加欄位,state這裡為on表示這是設定讓裝置開啟的命令,同理在IFTTT中設定off的命令,並把對應的state改為off,就完成了新增turn off的定時功能。

由於這個Noede-RED的流程可以說是相當複雜,所以大家需要的話關注評論留言吧。

有任何疑問或者交流討論,歡迎隨時留言評論