2019/02/26


最近這陣子, 萊恩大兵都泡在物聯網領域裡. 做了很多的嚐試, 學到不少的經驗. 有個好東西要介紹給大家~ Home Assistant.

在前一篇文章中, 萊恩大兵介紹了 HA 的系統安裝與簡單上手. 
在這篇文章中, 萊恩大兵要在 HA 添加一個小米開關, 並做條件式的自動控制.
問題來了..

[問] 為什麼選小米開關?
[答] 少部份原因是小米開關的外形與質感還不錯, 價錢也 okay, 是高 CP值的選擇. 主要原因是萊恩大兵先前的專案有買了幾顆, 不假外求, 就直接拿來做示範.

[問] HA 只能搭配小米開關嗎?
[答] 否. HA 的 Components 頁面, 列了一堆可支援的開關廠牌, 任君選用. 請參考: Components - Home Assistant.

[問] 小米開關有沒有什麼缺點?
[答] 小米開關的插頭為陸規, 得搭配美規 (A型) 轉接頭才能在台灣使用. 多了轉接頭, 整體感覺很擁腫.



接下來進入主題:

[在 HA 新增一組小米開關]

首先,

[1] 透過米家 App, 為小米開關做初始設定

開啟米家 App, 點按右上角 '+' 號.

點選 "電源開關", "Mi Smart Plug (WiFi) Basic" 的圖示.

接下來, 按住小米開關的按鈕數秒鐘, 直到它亮起橘燈後, 再點按米家 App 的 "下一步".

橘燈一閃一閃代表小米開關處於 AP 模式.

回到米家 App.
填入家庭 WiFi 的 SSID 與密鑰, 按 "下一步".

接下來, 跳離開米家 App, 開啟手機的設定頁面, 將手機的網路改連到小米開關發出的 WiFi 訊號. (SSID 為: chuangmi-plug-m1_xxx)


手機與小米開關連線成功後, 再開啟米家 App, 即會自動與小米開關做連線設定.

設定完成後, 小米開關會連上家庭 WiFi 並取得 IP 位址.
此刻小米開關的燈號為持續的藍燈.

建議: 在小米開關取得 IP 位址後, 最好是將它設定為固定 IP 位址, 以避免小米開關因動態 IP 位址改變後而失聯.

接下來..

[2] 取得小米開關的 IP 位址與 token 值

加入 HA 前, 必須取得該小米開關的 IP 位址與 token 值.

這邊要借助一個工具: miio, 使用 miio discover 這個指令來搜尋小米開關的詳細資訊.

安裝與使用說明, 請參考: Github - miIO Device Library 與 Github - miIO Device management.

miio discover 會找出所有正在運作的小米開關. 把欲加入至 HA 的小米開關的 IP 位址與 token 記起來.

再來,
[3] 在 HA 新增該組小米開關

請先參考: Home Assistant - Xiaomi Smart WiFi Socket and Smart Power Strip

需要做的事就是在 configuration.yaml 裡面, 新增 "platform: xiaomi_miio, host, token 與 model" 等資訊.

存檔, 並重啟 HA 服務.

待 HA 重啟完成, 在總覽 (Overview) 頁面會多一張 "開關" 卡片, 點按裡面的 switch_1 即可遙控小米開關.

同場加映:
[4] 在 HA 新增小米藍牙溫濕度計



請先參考: Xiaomi BLE Temperature and Humidity sensor

利用藍牙相關的工具, 查出小米藍牙溫度計的 MAC 位址. 並在 configuration.yaml 裡面, 新增 "platform: mitemp_bt, mac, name 與 monitored_conditions" 等資訊.

存檔, 並重啟 HA 服務. 
待 HA 重啟完成, 在總覽 (Overview) 畫面會多三顆感測器的圖示, 即為小米藍牙溫濕度計傳來的數據.

接下來, 就來設定條件式自動化.
[5] 設定條件式自動化

編寫自動化條件前, 請先參考: Automating Home Assistant.

自動化條件主要由 Trigger, Condition 與 Action 三項構成的. 

簡單的說, Trigger 為觸發條件, Condition 為執行條件 (非必要), 而 Action 則為欲執行的動作. 無論是狀態或數值的變化, 均能做為觸發或執行條件.

包括 Trigger, Condition 與 Action 更多的細節, 請參考:
Automation Trigger
Automation Conditions
Automation Actions


萊恩大兵實作示範: 

目標為每一分鐘一次, 當溫度高於 15 度, 就將小米開關打開十秒鐘後再關掉. 


1. 首先, 需要知道開關與溫度計在 HA 系統裡面的名字以及有哪些狀態可供存取?

在 HA 左邊選單, 點選最下面 "開發工具" 中左邊第 2 個圖示 (狀態), 可以看到目前 HA 系統裡面全部的開關/偵測器的名字 (entity_id) 與狀態.

小米開關的 entity_id 為 switch.switch_1
小米藍牙溫濕度計
- 溫度部份的 entity_id 為 sensor.bt_temp_humid_sensor_temperature
- 濕度部份的 entity_id 為 sensor.bt_temp_humid_sensor_humidity

2. 再來, 需要知道 HA 系統有提供哪些 service call 可供控制開關或其它動作? 

請參考 Service Calls, 裡面有針對 HA 的 service call 做詳細解釋. 根據說明, 可使用 homeassistant.turn_on 和 homeassistant.trun_off 來控制開關. 

知道 entity 與 service call 之後, 就可以在 HA 的設定檔編寫 automation 規則了.

3. 在 HA 的 configuration.yaml 編寫 automation 規則.

在 configuration.yaml 裡面, 找到 "automation: !include automations.yaml" 這一行, 已預設會去連結一個叫做 automations.yaml 的檔案.

開啟 automations.yaml, 依圖示加入 automation 規則:

存檔, 重啟 HA 服務.
等重啟完成, HA 即會每分鐘自動檢查溫度是否高於 15度, 並依結果開啟開關 (或不動作).

更多的 automation 規則範例, 請參考:
Automation Examples


今回就講到這邊, 下回來安裝 InfluxDB 與 Grafana.


(2019/8/16, 補充) 

Home Assistant 系列的其它文章:
Home Assistant, (5) 安裝 NodeRED 套件做更彈性的自動化

[萊恩大兵的其它文章]

自製大四軸

CC2540 Bluetooth Low Energy

OpenCV 學習路徑

小惡魔 無線溫度感測器



0 意見:

張貼留言