Automation – Tự động hoá được sử dụng rất nhiều trong Home Assistant (Hass) để khiến SmartHome trở nên “thông minh” bằng cách thực hiện các lịch trình cho trước hoặc đáp ứng lại các sự kiện và thay đổi khi chúng xảy ra.
Một trong các automation được sử dụng thường xuyên nhất chính là để thay đổi trạng thái của một hoặc một nhóm thiết bị – entity trong trường hợp:
- Đến giờ định trước
- Giá trị của cảm biến thay đổi: cảm biến chuyển động, cảm biến mở cửa, cảm biến độ sáng v.v..
Tuy nhiên, vấn đề muôn thuở của automation vẫn là:
làm sao phân biệt được lúc nào automation nên kích hoạt, lúc nào nên tôn trọng cài đặt của người dùng?
Nếu như trong bài viết Giải quyết xung đột giữa Automation và Người dùng, ta ưu tiên cho người dùng bằng cách vô hiệu hoá (override) tạm thời automation thì trong bài viết này ta sẽ:
vẫn thực hiện automation nhưng sau khi automation hoàn tất, trả lại trạng thái ban đầu của các thiết bị
Ứng dụng
Trả lại trạng thái ban đầu của các thiết bị – entity sau khi automation hoàn tất sẽ hữu ích với các automation:
- Thay đổi trạng thái của nhiều thiết bị chỉ trong một khoảng thời gian nào đó hoặc chỉ khi một điều kiện nào đó còn đúng. Ví dụ, tắt toàn bộ đèn vào giờ nghỉ trưa, thay đổi âm lượng của loa chỉ trong thời gian phát các thông báo quan trọng v.v..
- Thay đổi trạng thái của một thiết bị có nhiều hơn 2 trạng thái (không phải chỉ state) như đèn (bao gồm độ sáng, màu sắc, hiệu ứng), điều hoà không khí (cool, dry, temperature, fan_speed)
Với các dạng automation này, thông thường ta sẽ cần khôi phục lại trạng thái ban đầu của các thiết bị khi hết thời gian định trước hoặc khi điều kiện kích hoạt không còn đúng.
Sử dụng scene
Từ phiên bản Home Assistant 0.103.0, bạn đã có thể sử dụng dịch vụ scene.create
để tạo ra một scene – ngữ cảnh mới hoặc cập nhật một ngữ cảnh sẵn có ngay khi cần mà không cần cấu hình trước (YAML/UI). Bạn có thể sử dụng serive này để lưu tạm thời trạng thái của một hoặc nhiều thực thể để sử dụng sau đó.
Cách thực hiện sẽ theo các bước như sau:
Automation mẫu
Bật tắt đèn khi phát hiện chuyển động
Ở đây ta sẽ bật tất cả đèn trong một khu vực khi phát hiện chuyển động, sau 3 phút, trả lại trạng thái của các đèn này trước đó.

Cấu hình mẫu dạng YAML
- id: '21321312767' alias: 'Entrance lights on for 3mins after motion detected' description: 'Bật đèn cổng và vườn khi có chuyển động' mode: single trigger: - platform: state entity_id: binary_sensor.entrance_motion from: 'off' to: 'on' condition: [] action: - service: scene.create data: scene_id: entrance_light_motion snapshot_entities: - switch.entrance_light - switch.garden_reflector - switch.garden_led_panel - data: {} entity_id: - switch.entrance_light - switch.garden_reflector - switch.garden_led_panel service: homeassistant.turn_on - delay: 00:03:00 - scene: scene.light_motion_automation
Chú thích
4 mode: single
automation chạy ở chế độ single (yêu cầu Home Assistant 0.113 trở lên)
12 service: scene.create
tạo scene lưu giữ trạng thái các công tắc đèn
14 scene_id: entrance_light_motion
scene được tạo sẽ có entity_id là scene.entrance_light_motion
, bạn có thể gọi scene này ở bất cứ đâu miễn là nó đã được tạo trước đó
15 snapshot_entities:
danh sách các entity – thực thể sẽ được lưu giữ trạng thái
24 service: homeassistant.turn_on
mở các công tắc đèn
25 delay: 00:03:00
chờ 3 phút trước khi trả lại trạng thái đèn và ngừng automation, lưu ý chỉ nên sử dụng action này với Home Assistant 0.113 trở lên
26 scene: scene.light_motion_automation
kích hoạt scene đã tạo ở 14 để trả lại trạng thái đã lưu cho các công tắc
Phát các thông báo quan trọng
Automation này thực hiện:
- Điều chỉnh âm lượng loa lên mức gần cực đại trước khi phát thông báo
- Phát thông báo bằng giọng nói, sử dụng tts – chuyển văn bản thành lời nói
- Trả loa lại mức âm lượng/trạng thái trước khi thực hiện điều chỉnh
Cấu hình mẫu dạng YAML
- id: '21321312767' alias: 'Notify if back door is left open for more than 10 mins' description: 'Thông báo khi cửa phụ mở quá 10 phút' mode: single trigger: - platform: state entity_id: binary_sensor.backdoor_contact from: 'off' to: 'on' for: '00:10:00' condition: [] action: - data: scene_id: media_player_before_notification snapshot_entities: - media_player.livingroom_speaker service: scene.create - data: volume_level: 0.9 entity_id: media_player.livingroom_speaker service: media_player.volume_set - data: entity_id: media_player.livingroom_speaker language: 'vi' message: 'Cửa sau đang để mở suốt 10 phút qua. Vui lòng kiểm tra!' service: tts.google_say - delay: 00:00:02 - timeout: 00:02:00 wait_template: '{{is_state(''media_player.livingroom_speaker'',''idle'')}}' - scene: scene.media_player_before_notification mode: single
Chú thích
29 wait_template: ...
sau khi phát thông báo, chờ loa hoàn tất phát thông báo (trạng thái playing
chuyển sang idle
), thời gian tối đa 2 phút
27 delay: 00:00:02
giải pháp để wait_template
không bị vô hiệu hoá do khoảng trễ khi thực hiện tts và chuyển trạng thái của loa
Một số lưu ý
Sự tồn tại của scene
scene
được tạo theo cách trên sẽ bị xoá bỏ khi:
- Khởi động lại Hass
reload scene
(tải lại scene bằng giao diện UI hay servicescene.reload
)
scene
tạo theo cách trên sẽ:
- Bị ghi đè nếu đã được tạo
- Báo lỗi nếu đã được tạo bởi cấu hình YAML/UI trước đó
Trước khi áp dụng một scene
, bạn phải chắc chắn là nó đã được tạo ra trước rồi.
scene trong Home Assistant
Khi một scene
được áp dụng, Home Assistant (Hass) sẽ cố gắng xác định các dịch vụ cần thiết để đưa mỗi entity trong scene về trạng thái đã cài đặt. Quá trình này có thể thất bại với các entity có trạng thái phức tạp tuy xác suất xảy ra không cao.
Bạn cũng có thể sử dụng scene
để đưa một entity về trạng thái mong muốn một cách đơn giản và nhanh nhất thay vì sử dụng kết hợp thủ công nhiều service
khác nhau. Sử dụng service scene.apply
để thực hiện điều này mà không cần cấu hình scene trước đó.
Ví dụ về scene.apply
:
service: scene.apply data: entities: light.bedroom_ledstrip: state: "on" brightness: 100 color_name: blue climate.bedroom_ac: state: "on" hvac_mode: "cool" temperature: "23" fan_modes: "medium"
Cảm ơn bạn đã xem bài viết này!
konnectED Team.
