通過本篇教程,你將了解 Home Assistant 自動化概念,以及自動化的組成,并通過一些例子學(xué)習(xí)如何編寫自己的自動化配置稽亏。( 官方文檔與官方示例 )
提示:慎入!這是一篇非常無趣的基礎(chǔ)技術(shù)文缕题。
智能家居為人詬病的一點往往是它不夠“智能”截歉,而國內(nèi)的廠家又愛拿“智能”、“云”烟零、“物聯(lián)網(wǎng)+”之類高大上的詞語做噱頭瘪松,當(dāng)你將這些設(shè)備買回家后,你發(fā)現(xiàn)它沒有想象中的那么好用锨阿,難免就會失望宵睦。目前的智能家居系統(tǒng),與其強(qiáng)調(diào)“智能”(Smart)墅诡,我認(rèn)為不如 Home Assistant 中的描述的“自動化”(Automation)來的貼切状飞,事實上,在 HomeKit 以及 米家 App 中的都是以“自動化”來命名它們的书斜。
正是“自動化”的加入,使得 Home Assistant 不再呆板酵使,在特定情況下荐吉,你甚至可以不再使用那些操作界面,讓一切自動運轉(zhuǎn)口渔,真正的“智能”起來样屠。以我自己舉例,家中除了我,沒人搗鼓這些東西痪欲,都是靠“自動化”設(shè)置悦穿,實現(xiàn)燈光、新風(fēng)业踢、監(jiān)控栗柒、警戒、夜間空調(diào)等的日常使用知举。
一瞬沦、自動化基礎(chǔ)
HomeKit 新建自動化
為了讓大家對相關(guān)概念有一個更直觀的認(rèn)識,我先以 HomeKit 為例做一個展示雇锡。
如圖所示我新建了“星期日落日后就打開餐廳的落地?zé)簟边@樣一個自動化(僅作示例)逛钻,可見 iOS 的家庭 App 新建自動化非常直觀。
在這個自動化中锰提,我們的觸發(fā)條件是一個時間曙痘,即“落日”并且限制在“星期日”,當(dāng)?shù)竭_(dá)這一時間點時立肘,系統(tǒng)自動執(zhí)行“打開餐廳落地?zé)簟边@一動作边坤。這樣一個最簡單的自動化,由三個不同的部分組成:觸發(fā)(Trigger)赛不、條件(Condition)惩嘉、動作(Action)。
這里我們也可以看到一般為了簡化操作與保證設(shè)置的可行性踢故,如 HomeKit文黎、米家、阿里智能殿较,都僅提供了較少的觸發(fā)條件與可執(zhí)行項耸峭,這大大限制了我們發(fā)揮的余地。
自動化組成
觸發(fā):即觸發(fā)自動化規(guī)則淋纲,比如到達(dá)特定的時間點劳闹、到達(dá)某一地點、天氣變化洽瞬、系統(tǒng)變化本涕。
條件:條件是可選的,可以將自動化規(guī)則限制為僅在特定情況下執(zhí)行伙窃。如一周之中我們只在周日讓這個自動化起作用菩颖。
動作:當(dāng)規(guī)則被觸發(fā)并滿足所有條件,將被執(zhí)行为障,如開燈晦闰、調(diào)節(jié)溫度放祟、激活場景。
以官方一個簡單的 Home Assistant 自動化配置為例呻右,格式如下:
automation:
- alias: 'Rainy Day' #自動化名稱
trigger: #觸發(fā)
- platform: state
entity_id: sensor.precip_intensity
to: 'rain'
condition: #條件
- condition: state
entity_id: group.all_devices
state: 'home'
- condition: time
after: '14:00'
before: '23:00'
action: #動作
service: light.turn_on
entity_id: light.couch_lamp
對應(yīng)流程如下:
這個自動化表示跪妥,在下雨天,下午到晚上有人在家的話声滥,就打開燈眉撵。
自動化配置在
configuration.yaml
中,automation:
字段下醒串,也可以使用automation: !include automations.yaml
將所有自動化信息獨立出來执桌。
系統(tǒng)內(nèi)部參數(shù)
在上篇 Home Assistant 的進(jìn)階設(shè)置中我們講到過,Home Assistant 的每一個一個設(shè)備或服務(wù)芜赌,都是通過自身唯一的實例 ID(Entity ID)被系統(tǒng)調(diào)用的仰挣,而在自動化配置中,我們設(shè)置觸發(fā)缠沈、條件膘壶、動作的對象,也是如此洲愤。

在上圖所示界面颓芭,我們可以獲得一個設(shè)備或服務(wù)的ID(Entity ID)、狀態(tài)(State)及附加屬性(Attributes)柬赐。
▼設(shè)備參數(shù)
名稱 | 描述 | 示例 |
---|---|---|
Entity ID | 實例的唯一標(biāo)識符亡问。 | light.couch_lamp |
State | 設(shè)備的當(dāng)前狀態(tài) | on、off |
Attributes | 設(shè)備的的 | brightness |
這些實例狀態(tài)的變化肛宋,被用作觸發(fā)源州藕,而其實時狀態(tài)用作判斷能否執(zhí)行的條件。
在 Home Assistant 中酝陈,所有設(shè)備或服務(wù)床玻,包括燈、開關(guān)沉帮、人锈死,甚至太陽等等,都被視為一個實例(Entity)穆壕。
所有的動作(Action)都被稱作服務(wù)(Services)待牵,所有可執(zhí)行的服務(wù)都可以在下圖開發(fā)者工具(Developer Tools)中找到,包括自定義的設(shè)備與服務(wù)喇勋。比如上例中的 light.turn_on
能夠打開系統(tǒng)中的任何燈洲敢,只需要添加類似 entity_id: light.couch_lamp
的指定參數(shù)即可。
二茄蚯、自動化編輯器
0.45 版本之后压彭,Home Assistant 還提供了一個自動化編輯器,在側(cè)邊欄找到 Configuration > Automations
渗常。
繼續(xù)以上個自動化為例壮不,用圖像界面編輯器添加,如下圖所示:
自動化編輯器能夠使得相關(guān)配置工作簡化皱碘,它提供了觸發(fā)询一、條件和動作的類別選擇,但是你還需要在開發(fā)者工具(Developer Tools)中找到你需要的實例 ID(Entity ID)癌椿、狀態(tài)(State)和服務(wù)(Service)的詳細(xì)信息并手動填入編輯器健蕊。
注意:自動化編輯器 Data 參數(shù)采用 JSON 格式,與配置文件 YAML 語法有所不同踢俄,請按開發(fā)者工具(Developer Tools)中的示例編寫缩功。
因為自動化編輯器需要調(diào)用
automations.yaml
文件,需要采用automation: !include automations.yaml
將自動化信息獨立出來都办。
三嫡锌、自動化詳解
觸發(fā)(Trigger)
觸發(fā)是啟動自動化的規(guī)則,可以為同一規(guī)則設(shè)置多個觸發(fā)器琳钉。一旦觸發(fā)势木,Home Assistant 將驗證相關(guān)條件,并執(zhí)行動作歌懒。
事件觸發(fā)
automation:
trigger:
platform: event
event_type: MY_CUSTOM_EVENT
# 可選
event_data:
mood: happy
Home Assistant 觸發(fā)
由 Home Assistant 的啟動或停止來觸發(fā)啦桌。
automation:
trigger:
platform: homeassistant
event: start #或者是 'shutdown'
MQTT觸發(fā)
收到來自 topic 的消息后觸發(fā)。
automation:
trigger:
platform: mqtt
topic: living_room/switch/ac
payload: 'on' # 可選項
數(shù)值觸發(fā)
設(shè)備的狀態(tài)達(dá)到預(yù)設(shè)范圍時觸發(fā)及皂,如溫度低于xx度甫男。
automation:
trigger:
platform: numeric_state
entity_id: sensor.temperature
value_template: '{{ state.attributes.battery }}' # 可選 定義數(shù)據(jù)格式
# above below 至少有一個
above: 17
below: 25
狀態(tài)觸發(fā)
設(shè)備的狀態(tài)變化來觸發(fā)。
automation:
trigger:
platform: state
entity_id: device_tracker.paulus, device_tracker.anne_therese
# from to 可選一個或全部
from: 'not_home'
to: 'home'
# 可選項 狀態(tài)為1:10:05時觸發(fā)
for:
hours: 1
minutes: 10
seconds: 5
日升日落觸發(fā)
顧名思義躲庄,日升或日落時觸發(fā)查剖,可設(shè)置提前或推遲時間。
automation:
trigger:
platform: sun
event: sunset # sunset或sunrise
offset: '-00:45:00' # 可選項噪窘,此例為日落前 45 分鐘觸發(fā)
模板觸發(fā)
模板值為 True 時觸發(fā)笋庄。
automation:
trigger:
platform: template
value_template: "{% if is_state('device_tracker.paulus', 'home') %}true{% endif %}"
時間觸發(fā)
在某時刻觸發(fā)。
automation:
trigger:
platform: time
# 每小時的第5分鐘觸發(fā)
minutes: 5
seconds: 00
automation 2:
trigger:
platform: time
# 15:32:00 觸發(fā)
at: '15:32:00'
automation 3:
trigger:
platform: time
# 每 5分鐘 觸發(fā)一次
minutes: '/5'
seconds: 00
區(qū)域觸發(fā)
到達(dá)或離開某地時觸發(fā)倔监,目前僅支持 OwnTracks 平臺以及 iCloud 平臺直砂。
automation:
trigger:
platform: zone
entity_id: device_tracker.paulus # 此設(shè)備到達(dá) home 時觸發(fā)
zone: zone.home
# 到達(dá)或離開時觸發(fā)
event: enter # or "leave"
多個觸發(fā)
觸發(fā)其中一個,自動化就會被被執(zhí)行浩习。
automation:
trigger:
# 第一個
- platform: time
minutes: 5
seconds: 00
# 第二個
- platform: sun
event: sunset
條件(Condition)
條件是自動化規(guī)則的可選部分静暂,用來限制觸發(fā)后的執(zhí)行,防止誤操作谱秽。
邏輯關(guān)系
與(AND)
同時滿足所有條件才執(zhí)行洽蛀。
condition:
condition: and
conditions:
- condition: state
entity_id: 'device_tracker.paulus'
state: 'home'
- condition: numeric_state
entity_id: 'sensor.temperature'
below: '20'
或(OR)
只要滿足一個條件就執(zhí)行摹迷。
condition:
condition: or
conditions:
- condition: state
entity_id: 'device_tracker.paulus'
state: 'home'
- condition: numeric_state
entity_id: 'sensor.temperature'
below: '20'
混合 AND 和 OR
示例:下雨或者溫度低于20℃,同時有人在家時執(zhí)行郊供。
condition:
condition: and
conditions:
- condition: state
entity_id: 'device_tracker.paulus'
state: 'home'
- condition: or
conditions:
- condition: state
entity_id: sensor.weather_precip
state: 'rain'
- condition: numeric_state
entity_id: 'sensor.temperature'
below: '20'
條件類型
數(shù)值條件
condition:
condition: numeric_state
entity_id: sensor.temperature
above: 17
below: 25
# 可選
value_template: {{ float(state.state) + 2 }}
狀態(tài)條件
condition:
condition: state
entity_id: device_tracker.paulus
state: not_home
# 可選
for:
hours: 1
minutes: 10
seconds: 5
日升日落條件
condition:
condition: sun
after: sunset
# 可選
after_offset: "-1:00:00"
模板條件
condition:
condition: template
value_template: '{{ states.device_tracker.iphone.attributes.battery > 50 }}'
時間條件
condition:
condition: time
# 需要以下至少一項
after: '15:00:00'
before: '02:00:00'
weekday:
- mon
- wed
- fri
區(qū)域條件
condition:
condition: zone
entity_id: device_tracker.paulus
zone: zone.home
示例
condition:
- condition: numeric_state
entity_id: sun.sun
value_template: ''
below: 1
- condition: state
entity_id: light.living_room
state: 'off'
- condition: time
before: '23:00:00'
after: '14:00:00'
- condition: state
entity_id: script.light_turned_off_5min
state: 'off'
動作(Action)
動作通過服務(wù)或事件與其他內(nèi)容進(jìn)行交互峡碉。在服務(wù)中需要指定實例 ID(entity_id)和可選的參數(shù)(data)。
automation:
# 日落后將廚房與客廳的燈打開驮审,并調(diào)到 亮度150鲫寄,紅色。
trigger:
platform: sun
event: sunset
action:
service: light.turn_on
entity_id:
- light.kitchen
- light.living_room
data:
brightness: 150
rgb_color: [255, 0, 0]
automation 2:
# 推送消息
trigger:
platform: sun
event: sunset
offset: -00:30
action:
# 可以有多個service
- service: notify.notify
data:
message: Beautiful sunset!
- delay: 0:35
- service: notify.notify
data:
message: Oh wow you really missed something great.
四疯淫、后期預(yù)告
說實話地来,沒有想到大家有如此高的熱情,畢竟除開一些演示圖片熙掺,技術(shù)文當(dāng)真是枯燥又無趣未斑,而自動化這一篇更是其中的巔峰,還好到這里整個系列文章算是告一段落适掰。
每個人的情況不同颂碧、設(shè)備不同,由于篇幅有限类浪,基礎(chǔ)篇章中我沒有非常具體的講一些設(shè)備和組件载城,當(dāng)然我也不可能做到面面俱到,但是我希望通過之前的文章能夠引領(lǐng)大家入門费就,能夠讓大家少走些彎路诉瓦。除了官方文檔、官方論壇力细,大家還可以到中文論壇瀚思彼岸進(jìn)行 Home Assistant 相關(guān)討論睬澡,其中有很多具體的設(shè)備接入與插件配置。
這個系列不會結(jié)束眠蚂,但是應(yīng)該不會如此密集地發(fā)文了煞聪,后期或許會做一兩期個性化的內(nèi)容,比如 Floorplan 或是 HADashboard逝慧,有機(jī)會再做智能音箱接入的內(nèi)容昔脯。同時希望能與大家分享更多關(guān)于智能家居的內(nèi)容,用心打造我們每一個人自己的智能家居與生活笛臣。
效果展示:
▲Floorplan via Carlo
▲Floorplan via Carlo
PS:這種嵌入插座哪里能買得到……
當(dāng)然云稚,你也可以采用這樣的形式: