通過本篇教程夭委,你將完成對 Home Assistant 的進(jìn)一步配置,個性化設(shè)置與管理你的智能家居設(shè)備。
題外話
關(guān)于智能家居,我與很多人一樣律罢,因新房裝修而開始關(guān)注牵啦,2014 年智能家居市場方興未艾辈讶,還是傳統(tǒng)智能家居廠商的天下巫湘,同年 Apple 在 WWDC 上發(fā)布了 HomeKit 智能家居平臺,到了 2015 年才在 iOS 9 中內(nèi)置了“家庭” App厕倍。而在這一年寡壮,國內(nèi)也誕生了小米智能家庭、阿里智能讹弯、京東微聯(lián)等平臺况既,可以說,智能家居領(lǐng)域我們是和世界同步的组民。
2016 年接觸了 Homebridge 棒仍、 HomeKit、Home Assistant 等內(nèi)容臭胜,我就嘗試著自己也整一套試試莫其。用戶規(guī)模決定了相關(guān)領(lǐng)域的繁榮癞尚,網(wǎng)上關(guān)于智能家居的文章汗牛充棟,我自認(rèn)為還是有些軟硬件基礎(chǔ)榜配,期間卻也走過不少彎路否纬。如今跟大家分享這一點(diǎn)個人愛好,也不免拾人牙慧蛋褥,因?yàn)楣俜轿臋n就在那里,你不可能跳出這個框架之外睛驳。書寫這個系列文章的初衷烙心,就是想讓更多人能夠加入進(jìn)來,哪怕是零基礎(chǔ)的小白乏沸。所以我會選擇一個我認(rèn)為最筆直的路給你淫茵,我會添加很多的引用,還會提到一些我認(rèn)為容易錯的點(diǎn)蹬跃,并且盡量不涉及代碼與命令行匙瘪,與其說是原創(chuàng)教程,不如說是一個中文版本的注釋或詮釋更為恰當(dāng)蝶缀。
有人跟我說丹喻,還是太復(fù)雜,99%的有智能化需求的客戶不會花時間去整這些翁都。
那么碍论,這就是為了那1%不滿足現(xiàn)有平臺和 App 的用戶而生的,足矣柄慰。
一鳍悠、檢查配置
有不少人反饋,在安裝和配置中遇到了問題坐搔,或是 Home Assistant 界面直接無法顯示藏研,又或是某一個組件沒有正常顯示,通常后者還能在系統(tǒng)首頁看到相關(guān)提示概行。
每當(dāng)組件或配置選項導(dǎo)致警告時蠢挡,相關(guān)信息將存儲在配置目錄下的
home-assistant.log
文件中。此文件在 Home Assistant 開始時重置占锯。
Home Assistant 大多數(shù)異常情況都是因?yàn)?configuration.yaml
文件錯誤而導(dǎo)致的袒哥,而新手通常在不同地方取得這些配置,不同論壇消略、網(wǎng)站對于代碼的顯示效果是不同的堡称,非常容易導(dǎo)致 YAML 文件語法錯誤,在修改 configuration.yaml
配置文件后艺演,可在側(cè)面板 Configuration > General > Configuration Validation
處檢查却紧,通過后再重啟服務(wù)桐臊。
還是推薦使用支持 YAML 語法的 Sublime 或者 Atom 對
configuration.yaml
進(jìn)行修改,能夠?qū)崟r發(fā)現(xiàn)錯誤晓殊。
復(fù)習(xí)一下 YAML 基本語法規(guī)則:
- 大小寫敏感
- 使用縮進(jìn)表示層級關(guān)系
- 縮進(jìn)時不允許使用Tab鍵断凶,只允許使用空格。
- 縮進(jìn)的空格數(shù)目不重要巫俺,只要相同層級的元素左側(cè)對齊即可
對于同一種類的組件认烁,如果有多個,或者多個不同平臺的設(shè)備介汹,按以下格式填寫:
sensor: # 組件名却嗡,在配置文件中不能重復(fù)
- platform: forecast
...
- platform: bitcoin
...
二、自定義設(shè)備
一般設(shè)備接入后嘹承,顯示的名稱是一長串信息窗价,如下圖左邊第一行設(shè)備所示,而自定義后叹卷,如下圖右邊所示撼港。
獲取設(shè)備 ID
所有設(shè)備在 Home Assistant 中進(jìn)行配置,都有一個唯一的 ID骤竹,這個 ID 在側(cè)面板 Developer Tools 中的 “<>”States 中獲得帝牡。
別問我怎么區(qū)分同一類的不同設(shè)備,名字那么像瘤载,在首頁操作哪個否灾,哪個有反應(yīng),就是哪個鸣奔。
配置文件
在 configuration.yaml
文件中墨技,添加 customize:
,示例如下:
homeassistant:
name: Home
unit_system: metric
# 示例
customize: # 注意縮進(jìn) customize 屬于 homeassistant 下級挎狸,與 name 同級
sensor.living_room_motion: # 設(shè)備 ID
friendly_name: 客廳動作傳感器 # 昵稱 即你想要的設(shè)備名
icon: mdi:run # 圖標(biāo) 即設(shè)備左側(cè)顯示扣汪,詳情見下方引用
hidden: true # 是否在 Home Assistant 中隱藏
homebridge_name: 動作傳感器 #在 iOS 家庭 App 中的名稱
homebridge_hidden: false #是否在 iOS 家庭 App 中隱藏
thermostat.family_room:
entity_picture: https://example.com/images/nest.jpg #顯示圖片,與圖標(biāo)二選一
friendly_name: Nest
switch.wemo_switch_1:
friendly_name: Toaster
entity_picture: /local/toaster.jpg
switch.wemo_switch_2:
friendly_name: Kitchen kettle
icon: mdi:kettle
保存后锨匆,可在側(cè)面板找到 Configuration > General > Configuration Reloading > RELOAD CORE
崭别,重載相關(guān)配置,而無需重啟 Home Assistant 服務(wù)恐锣。
更多自定義內(nèi)容見官方文檔茅主。
icon
圖標(biāo)設(shè)置,采用 Material Design Icons 網(wǎng)站內(nèi)的圖標(biāo)土榴,在icon: mdi:
后輸入想要的圖標(biāo)名稱诀姚。圖標(biāo)名
三、分組分頁
設(shè)備顯示
設(shè)備添加后默認(rèn)都是獨(dú)立的玷禽,一部分可控制的以卡片(Card)形式顯示赫段,還有一部分僅顯示信息的以徽章(Badge)形式顯示呀打。有些同類設(shè)備也會有默認(rèn)分組(Light、Switch 等)糯笙。設(shè)備數(shù)量增多后就會顯得十分不便贬丛。
而下圖中,玄關(guān)给涕、客廳豺憔、餐廳等等,雖然同處于一個頁面內(nèi)稠炬,每一個又包含了多個設(shè)備焕阿,但是明確的分類與組合,使得使用效率與體驗(yàn)大大提升首启。Home Assistant 采用組(Group)的概念來組合設(shè)備,玄關(guān)撤摸、客廳等毅桃,每個都是一個組(Group),你可以根據(jù)自身需求准夷,任意設(shè)置不同的“組”钥飞,同一設(shè)備可加入多個“組”,甚至“組”也能嵌套“組”衫嵌。
設(shè)備分組
繼續(xù)圖中房間分類為例读宙,要實(shí)現(xiàn)這樣的效果,需要在 configuration.yaml
文件中楔绞,添加 group:
结闸,示例如下:
homeassistant:
name: Home
unit_system: metric
# 示例
group: # 注意縮進(jìn) group 與 homeassistant 同級
rooms_view: # 這是整個 ROOMS 頁的設(shè)置 下節(jié)會講解分頁
name: ROOMS # 顯示名稱
view: yes #是否分頁 即在頁頭顯示
entities: # ROOM 分頁下的組
- group.Entrance # 玄關(guān)
- group.LivingRoom
- group.DinnerRoom
- group.CookRoom
- group.BedRoom1
- group.BedRoom2
Entrance: # 一個典型的 group,這一行名字自定義
name: 玄關(guān) # 顯示名稱
view: no # 不分頁酒朵,
icon: mdi:home-variant # 組作為一個整體時的圖標(biāo)
entities: # 組下包含設(shè)備
- binary_sensor.door_window_sensor_xxxxxx # 玄關(guān)入戶門 ID
- binary_sensor.motion_sensor_xxxxxxxxxx # 玄關(guān)人體傳感器 ID
- switch.plug_158d0000fa791f # 玄關(guān)入戶燈 ID
LivingRoom:
name: 客廳
view: no
icon: mdi:sofa
entities:
- sensor.temperature_xxxxxxxxxx
- sensor.humidity_xxxxxxxxxx
- binary_sensor.motion_sensor_xxxxxxxxxx
- switch.wall_switch_right_xxxxxxxxxx
- switch.wall_switch_right_xxxxxxxxxx
- switch.plug_xxxxxxxxxx
- media_player.marantz_nr1504
DinnerRoom:
name: 餐廳
view: no
icon: mdi:glass-tulip
entities:
- switch.wall_switch_left_xxxxxxxxxx
- switch.wall_switch_left_xxxxxxxxxx
- switch.plug_xxxxxxxxxx
CookRoom:
name: 廚房
view: no
icon: mdi:pot
entities:
- binary_sensor.motion_sensor_xxxxxxxxxx
- switch.wall_switch_xxxxxxxxxx
- switch.plug_xxxxxxxxxx
BedRoom1:
name: 主臥
view: no
icon: mdi:hotel
entities:
- sensor.temperature_xxxxxxxxxx
- sensor.humidity_xxxxxxxxxx
- switch.wall_switch_xxxxxxxxxx
- switch.plug_xxxxxxxxxx
- switch.plug_xxxxxxxxxx
- switch.plug_xxxxxxxxxx
- switch.plug_xxxxxxxxxx
BedRoom2:
name: 次臥
view: no
icon: mdi:hotel
entities:
- sensor.temperature_1xxxxxxxxxx
- sensor.humidity_1xxxxxxxxxx
- switch.wall_switch_1xxxxxxxxxx
- switch.plug_1xxxxxxxxxx
保存后桦锄,可在側(cè)面板找到 Configuration > General > Configuration Reloading > RELOAD GROUP
,重載相關(guān)配置蔫耽,而無需重啟 Home Assistant 服務(wù)结耀。
設(shè)備分頁
當(dāng)設(shè)備進(jìn)一步增多后,可以設(shè)置分頁匙铡,來更好地顯示設(shè)備图甜。如下圖中,我分了“HOME”鳖眼、“ROOMS”黑毅、“DEVICES”、“WEATHER”四個頁面具帮。
繼續(xù)在 group:
中修改配置博肋,結(jié)合上節(jié)內(nèi)容低斋,示例如下:
homeassistant:
name: Home
unit_system: metric
# 示例
group: # 注意縮進(jìn) group 與 homeassistant 同級
default_view: # 默認(rèn)首頁 即 HOME 頁
view: yes # 是否分頁 即在頁頭顯示
entities: # 第一個分頁下的設(shè)備與組
- sun.sun
- sensor.now_weather
- sensor.now_tmp
- group.Today
- group.SystemMonitor
- group.Rooms
rooms_view: # 這是整個 ROOMS 頁的設(shè)置
name: ROOMS # 顯示名稱
view: yes # 是否分頁 即在頁頭顯示
entities: # ROOM 分頁下的組
- group.Entrance # 玄關(guān)
- group.LivingRoom
- group.DinnerRoom
- group.CookRoom
- group.BedRoom1
- group.BedRoom2
devices_view: # 這是整個 DEVICES 頁的設(shè)置
name: DEVICES # 顯示名稱
view: yes # 是否分頁 即在頁頭顯示
entities:
- group.Lights
- media_player.marantz_nr1504
- group.Battery
weather_view: # 這是整個 WEATHER 頁的設(shè)置
name: WEATHER # 顯示名稱
view: yes # 是否分頁 即在頁頭顯示
entities:
- group.WeatherNow
- group.WeatherToday
- group.WeatherTomorrow
- group.AQI
保存后,可在側(cè)面板找到 Configuration > General > Configuration Reloading > RELOAD GROUP
匪凡,重載相關(guān)配置膊畴,而無需重啟 Home Assistant 服務(wù)。
更多自定義內(nèi)容見官方文檔病游。
如果你足夠細(xì)心唇跨,你會發(fā)現(xiàn),在 Developer Tools 中的 “<>”States 中衬衬,所有的“組”也有自己的 ID买猖。
四、拓展配置
拆分配置
所有的配置信息都集成在 configuration.yaml
中滋尉,可以想象玉控,當(dāng)設(shè)備配置信息增多時,configuration.yaml
將變得十分臃腫狮惜,在沒有更好的可視化配置方法之前高诺,我們可以對 configuration.yaml
進(jìn)行拆分,以提高可讀性碾篡。
以上文自定義設(shè)備為例虱而,在配置文件夾內(nèi)新建 customize.yaml
文件獨(dú)立存放設(shè)備的自定義信息,其中內(nèi)容如下开泽。
sensor.living_room_motion: #設(shè)備 ID 通常會配置以下內(nèi)容
friendly_name: 客廳動作傳感器 #昵稱 即你想要的設(shè)備名
icon: mdi:run #圖標(biāo) 即設(shè)備左側(cè)顯示牡拇,詳情見下方引用
hidden: true #是否在 Home Assistant 中隱藏
homebridge_name: 動作傳感器 #在 iOS 家庭 App 中的名稱
homebridge_hidden: false #是否在 iOS 家庭 App 中隱藏
再修改 configuration.yaml
文件,以 !include
引用獨(dú)立出來的配置信息穆律,如下所示惠呼。
homeassistant:
name: Home
unit_system: metric
# 示例
customize: !include customize.yaml
group: !include group.yaml # group 同理
請注意,
homeassistant:
之后每一行縮進(jìn)兩個空格众旗。由于Home Assistant中的配置文件是基于YAML語言的罢杉,因此縮進(jìn)和間距很重要。還要注意贡歧,customize:
是homeassistant:
的子級滩租,而group:
與homeassistant:
同級。
打包配置
Home Assistant 還提供了一個方法利朵,可以將多個組件律想、個性化設(shè)置、自動化信息捆綁在一起绍弟,一同管理技即。
比如,我有一個“燈+開關(guān)”的組合樟遣,我對其進(jìn)行了自定義而叼,并設(shè)置了自動化身笤,我可以建立一個名為 my_light_switch_package.yaml
之類名字的文件,來存放這一組合的所有信息葵陵,其內(nèi)容如下:
homeassistant:
customize:
switch.xxxxxx.xxxxx:
friendly_name: XXX
homebridge_name: XXX
...
switch:
- platform: rest
...
light:
- platform: rpi
...
group:
light&switch:
name: XXX
view: no
icon: mdi:light
entities:
- switch.xxxxxx.xxxxx
在這個文件中液荸,不但對接入了組件,還對其進(jìn)行了自定義脱篙,并建立了分組娇钱。
接下來在 Home Assistant 配置目錄中創(chuàng)建一個名為“packages”的文件夾,將 my_light_switch_package.yaml
放入其中绊困,在 configuration.yaml
中添加 packages
信息文搂,。
homeassistant:
packages: !include_dir_named packages # 此語句表示會自動調(diào)用 packages 文件夾下的文件秤朗。注意層級煤蹭。
五、自定義前端顯示
自定義側(cè)面板
我使用 Home Assistant 其中的一個目的就是只用打開一個 App(Web)就可以控制所有設(shè)備取视,利用 Panel iFrame
組件疯兼,我們可以將一些常用的 Web 頁面集成到側(cè)面板。比如路由器管理頁面贫途、個人博客頁面、媒體服務(wù)器等等待侵。
以路由器為例添加如下內(nèi)容到 configuration.yaml
文件中:
panel_iframe:
netgear: #面板名稱
title: Netgear #標(biāo)題(必填),在側(cè)面板中顯示丢早。
icon: mdi:router-wireless #圖標(biāo)(可選)
url: http://192.168.2.1/start.htm #要打開的URL(必填)。
自定義主題
主題(Themes)提供了字體秧倾、顏色等的自定義怨酝,而主題的設(shè)置,涉及前端相關(guān)知識那先,這里不做過多講解(主要在官網(wǎng)也沒找到幾個好看的……)农猬,僅提供一個主題配置供大家參考。
在 configuration.yaml
文件中的 frontend:
下進(jìn)行配置:
frontend:
themes:
midnight:
# 主體
primary-color: '#5294E2'
accent-color: '#E45E65'
dark-primary-color: 'var(--accent-color)'
light-primary-color: 'var(--accent-color)'
# 文字
primary-text-color: '#FFFFFF'
text-primary-color: 'var(--primary-text-color)'
secondary-text-color: '#5294E2'
disabled-text-color: '#7F848E'
label-badge-border-color: 'green'
# 背景
primary-background-color: '#383C45'
secondary-background-color: '#383C45'
divider-color: 'rgba(0, 0, 0, .12)'
# 表格
table-row-background-color: '#353840'
table-row-alternative-background-color: '#3E424B'
# 導(dǎo)航菜單
paper-listbox-color: 'var(--primary-color)'
paper-listbox-background-color: '#2E333A'
paper-grey-50: 'var(--primary-text-color)'
paper-grey-200: '#414A59'
# 卡片
paper-card-header-color: 'var(--accent-color)'
paper-card-background-color: '#434954'
paper-dialog-background-color: '#434954'
paper-item-icon-color: 'var(--primary-text-color)'
paper-item-icon-active-color: '#F9C536'
paper-item-icon_-_color: 'green'
paper-item-selected_-_background-color: '#434954'
paper-tabs-selection-bar-color: 'green'
# 標(biāo)簽
label-badge-red: 'var(--accent-color)'
label-badge-text-color: 'var(--primary-text-color)'
label-badge-background-color: '#2E333A'
# 開關(guān)
paper-toggle-button-checked-button-color: 'var(--accent-color)'
paper-toggle-button-checked-bar-color: 'var(--accent-color)'
paper-toggle-button-checked-ink-color: 'var(--accent-color)'
paper-toggle-button-unchecked-button-color: 'var(--disabled-text-color)'
paper-toggle-button-unchecked-bar-color: 'var(--disabled-text-color)'
paper-toggle-button-unchecked-ink-color: 'var(--disabled-text-color)'
# 滑塊
paper-slider-knob-color: 'var(--accent-color)'
paper-slider-knob-start-color: 'var(--accent-color)'
paper-slider-pin-color: 'var(--accent-color)'
paper-slider-active-color: 'var(--accent-color)'
paper-slider-container-color: 'linear-gradient(var(--primary-background-color), var(--secondary-background-color)) no-repeat'
paper-slider-secondary-color: 'var(--secondary-background-color)'
paper-slider-disabled-active-color: 'var(--disabled-text-color)'
paper-slider-disabled-secondary-color: 'var(--disabled-text-color)'
# Google
google-red-500: '#E45E65'
google-green-500: '#39E949'
重啟 Home Assistant 服務(wù)之后售淡,我們可以在側(cè)邊欄 Configuration > General > Set a theme
選擇相關(guān)主題斤葱。
六揖闸、下節(jié)預(yù)告
經(jīng)過前期所有的設(shè)置揍堕,我們已經(jīng)可以在 Home Assistant 中較好地使用所有接入設(shè)備。但這個“智能”家居還是顯得一點(diǎn)都不智能汤纸,并沒有達(dá)到理想中的樣子衩茸。而我們將在下節(jié)開始涉及整個智能家居系統(tǒng)的靈魂——自動化(Automation)。
- Home Assistant 自動化