作者:GeekOn
導讀:話說對了才有用,沒用的叫囉嗦;事做對了才有用,不然叫磨洋工。
什麼叫有用實在是見仁見智,話說出來有人愛聽,事做出來有人開心,就夠了。
就說我吧,出門下樓,下雨了,沒帶傘;大太陽,沒戴帽子墨鏡,只好心裡一萬個不情願。所以第一個要做的就是出門提醒,尤其是下雨這件事情實在是。。。。
程式設計嘛,總是要有邏輯:
開門檢測天氣預報條件分流播放提醒
老規矩,先增加天氣預報的功能到Homeassistant中,系統自帶了現成的英文天氣預報,HA管理頁->
側邊欄
->
配置
->
整合
->“
+
”,
Meteorologisk institutt (Met.no)
跳出來的對話方塊中填好名字,和經緯度就可以了,預設的經緯度就是你當前的位置。如果需要選定地點的經緯度,1、你可以上網去找,2、
側邊欄
->
配置
->
地點
->“
+
” 在跳出的地圖上選擇你要的地方,就會有對應的經緯度顯示出來。
圖上是個有意思的地方,當然不是你的經緯度,如果是家裡的話,半徑小一點,100左右就可以了。
Met。no設定好之後,就可以到HA管理頁新增天氣預報卡片:
看起來還是蠻好看的。
既然說了是進階,那麼就要用上函式和變數,DIY的時候總得要有所追求,不然就沒得提高了不是。上Node-RED
今天用五個部件,三個新部件
current_state
在流程中檢測某個實體(entity_id)的當前狀態。
switch
是一個分流器,透過設定不同的關鍵字來選擇或者過濾輸出,每一個輸出點都對應一個條件。
函式
函式是個很有用的部件,在屬性頁裡可以寫很多東西,有點類似於語言程式設計了。進階嘛,總得有點小難度。
event:state
不多講,和之前一樣的設定方式,entity_id設定為Door(門),state設定為on,就是開門就輸出一條訊息。
call service
不多講,這裡設定為tts 到 google home。注意的是Data留空,用
函式
來控制。
current_state
如其名,就是檢測當前狀態,並傳遞到下一個部件。State留空,就是不管是什麼狀態都在同一個輸出節點。
switch
也不難,按照天氣狀態來新增分流條件。多個條件透過屬性頁左下的新增按鈕來增加。
函式
來了,屬性頁開啟基本啥都沒有,想起一句歌詞“空,空,空,空如也”。就像賺錢,越是啥都不幹的越賺錢。這東西也一樣,空,但很牛X。
msg。payload 負責告訴下一個接收部件訊息的來源;變數內容則是要傳到下一個部件的具體內容,這裡我們要傳遞到下一個流程的
Data
(在call service中留空了),所以變數名稱就是
"data":
,call service是TTS,所以data的格式按照tts的需求去寫,“message”、“Language”。
變數中語句多於一行,記得加“,”分割,最後一行不需要(初學之坑)。
按照上圖
部署
之後,當門開啟時,如果天氣預報下雨,HA就會透過Google home說話提醒帶傘。
既然switch設定了5個輸出口,那另外四個怎麼用呢,可以透過設定每個不同的tts home來對應,不過這樣的話還要函式幹甚呢,所以
函式
不是這樣用的。
函式的進階使用
Switch
的屬性也有一項msg。payload,也就是說switch的輸出訊息也是透過msg。payload來傳遞,那麼在
函式
中就可以引用啦。
初學的時候,可以把需要帶傘的,和只是需要報一下天氣的分開,這個時候
switch
就有用啦,如果再進階,函式中可以直接使用
if else
來判斷,那麼switch都不需要了。。。。
#附上程式碼:
var mesg = “”
var laug = “en-us”
if (msg。payload == “rainy”)
{
mesg = “take a umbrella。”
}
else
if (msg。payload == “tornad”)
{
mesg = “體重不夠,不要出門”,
laug = “zh-cn”
}
else
if (msg。payload == “hail”)
{
mesg = “請自帶鐵鍋。”,
laug = “zh-cn”
}
msg。payload =
{
“data”:
{
“message”: “outside is ” + msg。payload + mesg,
“language”: laug
}
}
return msg;
函式的使用同樣見仁見智,會成為HA程式設計中最有趣的部分,比起新增多個部件來達到同樣的效果,函式更能夠把流程精簡下來。
記得買輸出裝置