:::

在Home Assistant設定的「全域變數」 / "Global Variables" in Home Assistant

2023-0420-112004.png

用寫程式來控制整個居家環境,真的很像是魔法呢。


條件越來越複雜 / Complex conditions

2023-0420-094917.png

在Home Assistant設定自動化的基本做法是取得感應器的資訊來做判斷。但實際開始使用之後,我發現我想要設定的條件越來越複雜,必須得要仰賴多個感應器、多種不同的數值狀況來做判斷。

溫度 / Temperatrue

舉例來說,我想要根據房間的溫度來判斷要不要開冷氣。但實際上房間的溫度可以分成 1. 房間空氣的溫度,以及 2. 瓷磚地板的溫度。瓷磚地板的溫度主要是受到外面室外氣溫的影響,而當地板溫度不高的時候,房間空氣溫度高一點,其實也不會覺得很熱。

因此我將「溫度」的等級條件設成由兩個條件判斷組成,必須同時滿足兩個條件達到30分鐘以上,我才認為足夠達到開啟冷氣送風的條件:

  • 房間溫度:25度以上。
  • 室外溫度:18度以上。

實際上我們可能還需要加上月份來做夏天與冬天的判斷,目前就先設定到這樣,之後再繼續調整。

在家與否 / Location

2023-0420-100014.png

這是另一個很重要的設定。

只要在手機上裝了Home Assistant,我們就可以用手機的位置定位來告知Home Assistant有誰在家。Home Assistant就可以用「進入區域」、「離開區域」等條件來自動開啟或關閉設備。

這聽起來很理想,但當有訪客來訪時,這種自動化設定必須完全關閉。不然就會發生尷尬的情況:請訪客在家裡坐著看一下電視,我去外面買晚餐回來吃。結果你離開家裡的區域,家裡的電視、電燈、冷氣就自動關閉了,訪客在摸黑的環境中不知所措。

為此,我們必須為Home Assistant加入一個虛擬的變數,以此表示「訪客來訪」的狀態。如果沒有訪客,那就用手機來判斷;如果有訪客,那就應該一律假設主人在家。

當你的條件越來越複雜之後,你要在Home Assistant裡面設定的項目就越來越多,而且越來越不好維護。作為一位具有「運算思維」的工程師,我們應該把問題抽象化,把類似的判斷跟條件分離出來獨立表示。


用虛擬裝置做為全域變數 / Using virtual devices as global variables

要如何將上面講的溫度與在家與否的複雜條件判斷抽離成全域變數呢?要完成這件事情需要進行兩個階段的設置:

  1. 在助手(Helper)新增虛擬裝置。
  2. 用自動化調整虛擬裝置的狀態。

讓我們一個一個來看。

助手 / Helper

2023-0420-101252.png

在「設定 > 裝置與服務 > 助手」這邊可以進入助手的頁面,右下角可開啟「新增助手」。

2023-0420-101344.png

新增助手可以看到很多不同類型的選項。這些選項我比較喜歡把它當做「虛擬裝置」。就像是其他Home Assistant的裝置一樣,我們透過助手新增了新的裝置。只是這個裝置只存在於Home Assistant系統本身,並不是存在於「實體」的裝置。然後其他的設定都跟實體的裝置差不多。

話說回來,助手類別這麼多,我們要選擇那個好呢?像我們現在的問題是要把複雜條件統一成單一個數值來表示的話,那有四種助手可以選擇:

  • 開關:只有「開啟」跟「關閉」兩種狀態。
  • 下拉選單:可設定多個選項。選項與選項之間沒有順序關係。
  • 數字:可設定最大值與最小值。
  • 文字:任意文字。

2023-0420-101837.png

最常用的助手應該是「下拉選單」。我們可以用它設定多個不同的選項,各選項之間又沒有順序區別,之後條件判斷的時候不會互相干擾。

自動化 / Automation

2023-0420-102051.png

用助手設定好虛擬裝置後,接下來就可以在「自動化」裡面加入規則,用這些規則來改變虛擬裝置的判斷。自動化是Home Assistant使用者都應該很熟悉的功能,而且通常是你的自動化複雜到一定程度後,才會想到要用這篇的做法來整理自動化的規則。至於自動化的設定,這邊我就不再細談了。

2023-0420-102755.png

自動化中需要注意的是,要修改虛擬裝置的時候,我們的動作要用以下方法操作:

  • 動作(action):執行服務
  • 服務:選擇框: Select
  • 目標:選擇實體:[你的虛擬裝置]
  • 選項(option):[你的狀態]

這樣就可以改變狀態了。

結合多個感應器狀態 / Multiple sensors

2023-0420-103049.png

附帶一提,助手裡面其實也有「結合多個感應器狀態」的虛擬裝置可以使用。如果你的條件只是單純地整理多個感應器,那也可以直接用「結合多個感應器狀態」來使用。不過它好像真的只能選擇實際使用的感應器,不太能進行自動化裡面那種複雜的條件判斷,所以我就沒用它了。


最後的提問是:你用過智慧家庭的自動化嗎?那種自動化讓你覺得很好用呢?

下面留言喔!