Với loạt tính năng mới ra mắt trong phiên bản Home Assistant 0.113, automation trong Hass giờ trở nên mạnh mẽ hơn bao giờ hết. Trong bài này ta sẽ thử sử dụng tính năng mới repeat
của Hass để tạo một báo động, gần tương tự với báo động tạo bởi alert trước đây.
Yêu cầu: Home Assistant phiên bản 0.113 trở lên
Cách báo động này hoạt động
Ở đây ta sẽ dùng automation để liên tục gửi tin nhắn đến điện thoại di động, sử dụng thông báo của ứng dụng Home Assistant (iOS/Android) cho đến khi điều kiện được cho ban đầu không còn đúng. Bên cạnh gửi tin nhắn, ta cũng sẽ phát ra một đoạn âm thanh được ghi âm trước đến một loa (media_player) nào đó. Cụ thể các thành phần như trong mô tả bên dưới.
Kích hoạt – triggers
Báo động sẽ được kích hoạt khi một cửa nào đó được mở ra. Ở đây ta xác định trạng thái mở cửa bằng cảm biến mở cửa. Một trong các cảm biến mở cửa hay dùng là Xiaomi Mijia Door Sensor như loại trong bài viết này: Home Assistant: kết nối thiết bị Zigbee qua zigbee2mqtt.
Ngoài các cảm biến cửa thì bạn cũng có thể sử dụng trạng thái đóng/mở của cửa cuốn, cửa nâng (cover
) hay trạng thái của bất cứ entity nào khác trong Home Assistant.
Điều kiện kích hoạt – conditions
Chỉ kích hoạt báo động (automation) này khi cửa được mở ra vào khoảng thời gian từ 23g đêm hôm trước đến 5g sáng hôm sau.
Hành động – actions
Các hành động sẽ được Hass thực hiện khi báo động được kích hoạt và thoả mãn điều kiện trên:
- Lập tức gửi thông báo đến ứng dụng trên điện thoại và lặp lại sau mỗi 1 phút cho đến khi điều kiện kích hoạt không còn đúng (cửa đóng lại hoặc đã qua khỏi 5g)
- Mỗi 30 giây, phát một đoạn âm thanh có sẵn đến loa (thường là Google Home Mini)
Automation YAML
Do các tính năng automation mới, ngoại trừ running modes, hiện chưa thể chỉnh sửa qua UI (trình soạn thảo trực quan), bạn sẽ phải dùng trình soạn thảo YAML đơn thuần rồi reload automation trong Hass để áp dụng.
Để reload automation, bạn cần:
- Kích hoạt chế độ Nâng cao của người dùng hiện tại, kể cả là owner (xem owner: thiết lập cơ bản Home Assistant) bằng cách truy cập trang quản lý user hiện tại (dưới cùng thanh menu bên trái)
- Truy cập Cấu hình > Điều khiển máy chủ > Tải lại Tự động hoá
Mã ví dụ automation thực hiện báo động:
- id: '159553420903672729' alias: Door Open Alert description: Báo động nếu cửa mở giữa đêm trigger: - entity_id: binary_sensor.door platform: state from: 'off' to: 'on' condition: [] mode: single action: - repeat: while: - condition: template value_template: "{{is_state(trigger.to_state.entity_id,'on')}}" - after: '23:00:00' before: '05:00:00' condition: time sequence: - data: media_content_id: https://konnected.duckdns.org:8123/local/bell/door_bell.mp3 media_content_type: music entity_id: media_player.bedroom_speaker service: media_player.play_media - data_template: message: "⚠️ Door {{trigger.to_state.attributes.friendly_name}} is Open" service: notify.mobileapp_myphone - delay: minutes: 1
Chú thích:
- 5
entity_id: binary_sensor.door
cảm biến cửa - 10
mode: single
chế độ hoạt động đơn, khi đang chạy, bỏ qua tất cả các lần kích hoạt tương lai - 12
repeat:
sử dụng chế độ lặp lại - 13
while:
lặp lại chừng nào điều kiện bên dưới còn đúng - 14
(cập nhật 31/07/2020: do một lỗi trong Home Assistant 0.113.0 đã được khắc phục trong 0.113.2, condition trong while không sử dụng AND làm logic mặc định)condition: and
tất cả các điều kiện bên trong phải đúng
- 15
value_template:
trạng thái của entity kích hoạt automation (ở đây là binary_sensor.door) phải là ‘on’ (tham khảo: template trong Hass) - 16 điều kiện về thời gian như đã mô tả ở trên
- 19
sequence:
chuỗi hành động lặp lại khi điều kiện còn đúng - 21
media_content_id:
đường dẫn đến file âm thanh sẽ phát (1: xem ở dưới) - 23
entity_id: media_player.bedroom_speaker
(các) loa mà bạn sẽ phát ra âm thanh ở trên - 27
service: notify.mobileapp_myphone
dịch vụ gửi thông báo - 29
minutes: 1
tạm dừng 1 phút giữa mỗi lần thực hiện chuỗi hành động
Bạn sẽ phải thay đổi ít nhất ở các dòng số 5, 21, 23 và 27 để automation trên hoạt động được với cấu hình Hass của bạn.
(1) Bạn có thể sử dụng file trên internet hoặc file lưu trữ trên máy chủ Hass. Xem thêm cách lưu và phát các file này trong bài viết Home Assistant: phát file âm thanh ngẫu nhiên đến loa.
Automation với nhiều cảm biến kích hoạt
Automation trên được kích hoạt bởi 1 cảm biến duy nhất là binary_sensor.door
. Vậy nếu bạn muốn sử dụng với nhiều cảm biến thì sao?
Sử dụng group
Group là một integration – tích hợp có sẵn của Home Assistant, dùng để nhóm nhiều entity lại với nhau, dùng cho mục đích quản lý.
Trong bài này, ta sẽ nhóm tất cả các cảm biến mà mình muốn sử dụng để kích hoạt automation trên (ví dụ: tất cả các cảm biến cửa chính, cửa sổ v.v..) thành một nhóm, gọi là group.door
.
Cách này dựa trên nguyên lý bên dưới và bạn phải chú ý nguyên lý này:
Mặc định, trạng thái của một group sẽ là ‘on’ khi ít nhất 1 entity trong group có trạng thái ‘on’
Cấu hình group như sau:
door: icon: mdi:door entities: - binary_sensor.front_door - binary_sensor.front_window - binary_sensor.shutter
Lưu ý:
- Bạn có thể nhóm bao nhiêu entity tuỳ ý nhưng các entity này phải có trạng thái
state
và ý nghĩa của trạng thái tương đồng (ví dụ, với cảm biến cửa thìon
nghĩa là mở vàoff
nghĩa là đóng). Đây là yêu cầu bắt buộc khi dùng cho automation này, không phải yêu cầu của việc tạo group nói chung. - Bạn phải chỉnh sửa group này mỗi lần muốn thêm, bớt entity và phải reload group sau khi chỉnh sửa (tương tự cách reload automation).
Sau khi cấu hình và Tải lại Nhóm – Reload Group, một entity mới group.door
sẽ được tạo ra là bạn có thể thay thế entity này vào dòng số 5 của cấu hình automation mẫu bên trên.
Sử dụng template binary_sensor
Ưu điểm
So với cách dùng group bên trên thì cách này có ưu điểm:
- Không cần chỉnh sửa thủ công group mỗi khi bạn lắp thêm hay bỏ bớt cảm biến
- Có thể cấu hình tuỳ ý mà không bị ràng buộc bởi nguyên lý trạng thái của group
Nhược điểm
Nhược điểm của cách này:
- Cấu hình phức tạp, bạn phải biết chút ít về template (đừng lo, hãy đọc qua về template đủ để có khái niệm cơ bản đã)
- Bạn phải cấu hình các entity “chuẩn“, ví dụ: cảm biến cửa phải có
device_class
làdoor
trong khi cảm biến cửa sổ sẽ códevice_class
làwindows
Hầu hết các cảm biến liên kết qua Integration (như zigbee2mqtt) đều có các thông tin cơ bản này - Bạn phải nắm rõ các
state
và ý nghĩa củastate
của từng loại entity sẽ dùng
Cấu hình YAML
Bên dưới là cấu hình binary_sensor cho trạng thái ‘on
‘ khi một trong bất cứ entity nào thuộc một trong các device_class door, windows, garage_door có trạng thái là on
(lưu ý rằng ngoài on
và off
, các entity luôn có thể có trạng thái unknown
– không rõ và unavailable
– không khả dụng).
Nếu bạn muốn thực hiện báo động cả khi các entity có trạng thái unknown
và unavailable
, bạn sẽ phải chỉnh sửa cấu hình bên dưới.
Cập nhật trên Home Assistant 0.115
Tuỳ chọn entity_id
dưới đây đã bị loại bỏ trong Home Assistant 0.115. Bạn cần đưa nó vào bên trong template như sau nếu đang sử dụng phiên bản 0.115 trở lên:
value_template: >
{% set force_render = as_local(states.sensor.uptime.last_changed) %}
{% set open_bsensors = ...
binary_sensor: - platform: template sensors: open_door: friendly_name: 'Cửa mở' entity_id: sensor.uptime value_template: > {% set open_bsensors = states.binary_sensor|selectattr('state','eq','on')|list %} {% set open_door = open_bsensors|selectattr('attributes.device_class','eq','door')|list|count %} {% set open_door = open_door + open_bsensors|selectattr('attributes.device_class','eq','window')|list|count %} {% set open_door = open_door + open_bsensors|selectattr('attributes.device_class','eq','garage_door')|list|count %} {{ open_door > 0 }}
Bạn sẽ phải khởi động lại Home Assistant để khởi tạo binary_sensor trên. Sau khi được tạo ra, sensor này có entity_id là binary_sensor.open_door
và có thể được sử dụng thay cho binary_sensor.door
trong cấu hình automation mẫu.
Lưu ý Quan trọng
Cảm biến bên trên dựa vào sensor.uptime
(dòng 6) để cập nhật trạng thái, do vậy có khoảng trễ khi cập nhật trạng thái (khoảng vài chục giây). Có nghĩa là, nếu một cửa nào đó mở ra rồi đóng lại ngay trong vài giây, có thể cảm biến sẽ không kịp thay đổi. Nếu chưa có cảm biến sensor.uptime
, bạn tạo ra nó bằng cấu hình ở bên dưới.
sensor: - platform: uptime unit_of_measurement: minutes
Để cải thiện, bạn có thể thay sensor.uptime
bằng một entity khác có tần suất cập nhật cao hơn hoặc sử dụng automation mẫu ở dưới để cập nhật cảm biến này mỗi 3 giây.
- id: '159557276810' alias: Hass Update Door Open Sensor Every 3 Seconds description: Cập nhật cảm biến open_door mỗi 3 giây trigger: - platform: time_pattern seconds: '/3' condition: [] action: - data: {} entity_id: binary_sensor.open_door service: homeassistant.update_entity
Tóm tắt
Để tạo báo động kiểu này trong Hass, bạn sẽ cần:
- Home Assistant 0.113 trở lên
- Một hoặc nhiều cảm biến hay entity để kích hoạt báo động
- Một group hoặc binary sensor để kích hoạt trong trường hợp nhiều cảm biến
- Ít nhất một phương thức để nhận báo động như: điện thoại, loa, đèn, 🐶 (🤣 – j/k)
- Một automation để liên kết tất cả các thứ trên
- Thêm một automation nữa để cập nhật ‘cưỡng bức’ binary_sensor nếu muốn
Nguồn/Tham khảo:
- https://www.home-assistant.io/blog/2020/07/22/release-113
- https://www.home-assistant.io/integrations/group
- https://www.home-assistant.io/integrations/binary_sensor
- https://www.home-assistant.io/integrations/uptime
- https://konnected.vn/home-assistant/home-assistant-template-va-cac-filter-thuong-dung-2020-04-05
Cảm ơn bạn đã xem bài viết này!
konnectED Team.