Trong Home Assistant, các loại rèm tự động, cửa tự động, mái che tự động, cửa sổ tự động v.v.. đều được đặt chung dưới cùng một domain: cover. Domain này có 3 đặc điểm chính: open (mở), close (đóng) và position (vị trí – % đóng/mở). Các đặc điểm này chỉ mang tính tương đối và phụ thuộc vào loại thiết bị thực tế, ví dụ với cửa cuốn thì open – mở cũng được gọi là up – lên, và close – đóng tương đương với down – xuống.
Position – vị trí là tính năng quan trọng khi cho phép người dùng biết được cửa đã hoàn toàn đóng hay hoàn toàn mở và mức độ cửa mở. Dựa trên postition, trong Home Assistant, ta cũng dễ dàng thiết lập các automation mở/đóng cover đến một vị trí nhất định theo thời gian, độ sáng v.v.. mà không bị hạn chế phải đóng hết hoặc mở hết.
Các thiết bị cover được hỗ trợ sẵn
Khá nhiều các loại cover (tức bao gồm rèm cửa, cửa gara, tấm che gió, cửa sổ v.v..) thông minh được hỗ trợ sẵn trong Home Assistant như:
- Aqara thông qua Xiaomi gateway (Aqara)
- KNX thông qua KNX integration
- IKEA Tradfri thông qua gateway
- Fibaro thông qua Fibaro hub
- Các công tắc rèm từ SonOFF, Tuya v.v.. thông qua firmware Tasmota
- và nhiều nữa
Hỗ trợ sẵn có nghĩa là một khi liên kết thành công vào Home Assistant, ít nhất các chức năng open/close và set_position (đóng/mở đến một vị trí) phải hoạt động. Các thiết bị này cũng thông báo vị trí đóng/mở mà không cần thao tác đặc biệt gì trên Home Assistant.
Các thiết bị cover không được hỗ trợ sẵn
Các cover dạng này trong Home Assistant
Các thiết bị này có thể đang được liên kết vào Home Assistant ở hai dạng:
- Dưới cùng domain cover nhưng không có thông tin position và không hỗ trợ dịch vụ đưa cover đến vị trí nhất định như cover hỗ trợ bởi Tuya integration.
- Chỉ là các switch – công tắc để thao tác với cover, không thể xác định vị trí và không thể đóng/mở đến vị trí chính xác mà không thao tác và quan sát thủ công.
Nếu bạn sử dụng công tắc rèm/cửa cuốn từ Tuya, SonOFF được flash Tasmota để liên kết vào Home Assistant nhưng không được cấu hình đúng thì sẽ rơi vào trường hợp này.
Các thiết bị rèm/cửa cuốn điều khiển bằng sóng RF/IR (thông qua Broadlink/Tuya/Xiaomi Universal Remote v.v..) cũng thuộc nhóm này.
Cách xác định và điều khiển vị trí của cover loại này
Nếu không sử dụng các thiết bị phụ trợ (như cảm biến khoảng cách, cảm biến tiệm cận, cảm biến encoder, cảm biến đo góc .v..) thì vị trí của cover chỉ có thể được xác định gián tiếp, do vậy chỉ tương đối chứ không hoàn toàn chính xác. Còn nếu đã sử dụng thiết bị phụ trợ thì có lẽ sử dụng luôn các cover được hỗ trợ chính thức sẽ nhanh, đẹp và rẻ hơn.
Để tránh bối rối thì ở đây, vị trí:
- 0 là Đóng hoàn toàn
- 100 là Mở hoàn toàn
Điều kiện cần và đủ
Để xác định được vị trí của cover dạng này trong Home Assistant thì thiết bị vật lý (rèm, cửa cuốn v.v..) phải đạt mấy yêu cầu sau:
- Có thời gian đóng hoàn toàn (0) từ vị trí mở hoàn toàn (100) tương đối ổn định
- Có thời gian mở hoàn toàn (100) từ vị trí đóng hoàn toàn (0) tương đối ổn định
Để đặt được vị trí cho cover (thông qua dịch vụ cover.set_cover_position
) thì thiết bị bắt buộc phải hỗ trợ thao tác Dừng – Stop và phải điều khiển được thao tác này trong Home Assistant.
Tích hợp đầy đủ cover dạng này vào Home Assistant
Tích hợp đầy đủ nghĩa là thiết bị sẽ được thể hiện dưới domain cover với đầy đủ vị trí và hỗ trợ dịch vụ cài đặt vị trí.
Các hướng dẫn bên dưới giả định rằng bạn đã điều khiển được các thao tác open/close/stop từ Home Assistant.
Cài đặt custom component
Để thêm cover dạng này vào Home Assistant, ta sẽ sử dụng custom_component Cover Time Based RF (trigger script) của tác giả nagyrobi. Bạn có thể cài đặt component này qua HACS hoặc tải về thủ công tại github repo của nó.
Về custom component và custom card
Là các component hay Lovelace card/module được phát triển bởi cộng đồng nhưng không/chưa được thông qua chính thức bởi nhóm phát triển Home Assistant. Việc cập nhật hay hỗ trợ hoàn toàn phụ thuộc vào tác giả và cộng đồng người dùng.
Bạn cũng sẽ phải tự chịu trách nhiệm và tự quản lý các custom component/custom card này.
Chúng tôi khuyến nghị bạn chỉ cài đặt những component hay card thực sự cần thiết để tránh lỗi, giảm nguy cơ bảo mật và đảm bảo hiệu suất máy chủ Hass. Trên một số thiết bị hay trình duyệt, các custom card có thể gây lỗi hoặc làm chậm đáng kể hiệu suất tải giao diện.
Hãy thận trọng khi cài đặt một custom mới trên máy chủ Hass chính của bạn vì có thể gây ra lỗi nghiêm trọng làm gián đoạn hoạt động bình thường của máy chủ và các thiết bị khác.
Cấu hình component
Cấu hình mẫu của component này như bên dưới, bạn thay đổi tên cover và các thông số khác cho phù hợp. Cấu hình mẫu này có thể được thêm vào file cấu hình chính /config/configuration.yaml
của Home Assistant hoặc vào một file riêng nếu bạn có nhiều cover và muốn giữ file configuration.yaml gọn gàng.
cover: - platform: cover_rf_time_based devices: office_cover_time_based: name: Office Cover travelling_time_up: 96 travelling_time_down: 69 close_script_entity_id: script.office_cover_close open_script_entity_id: script.office_cover_open stop_script_entity_id: script.office_cover_stop send_stop_at_ends: false
Giải thích cấu hình trên
Các cấu hình bắt buộc:
platform: cover_rf_time_based
không thay đổioffice_cover_time_based
bắt đầu cấu hình của một cover dạng rf_time_based, lưu ý rằng khác với một số component khác, lựa chọn này sẽ không được sử dụng làm entity_idname:
tên của cover, nên đặt tên gợi nhớ và ngắn gọn, đây cũng sẽ là nội dung được chọn làm entity_id trừ phi cấu hìnhalias:
travelling_time_up:
thời gian cover open – mở hoàn toàn (0 -> 100), tính bằng giây (xem ở dưới: cân chỉnh cover)travelling_time_down:
thời gian cover close – đóng hoàn toàn (100 -> 0), tính bằng giây (xem ở dưới: cân chỉnh cover)close/open/stop_script_entity_id:
entity_id của các script dùng cho các chức năng tương ứng
Mặc dù cả tên component và cấu hình đều dùng script, bạn có thể dùng switch thay thế
Cấu hình tuỳ chọn:
send_stop_at_ends:
có kích hoạt lệnh stop (stop_script_entity_id:
) khi rèm đạt position 0 hoặc 100 hay không?
Một số cover/switch như Tasmota, Tuya sẽ giữ nguyên trạng thái relay sau khi kích hoạt mà không ngắt (nhờ tính năng an toàn, động cơ sẽ tự ngắt ở điểm đầu/cuối) khi đã hoàn tất dẫn đến trạng thái switch bị sai trên Home Assistant (switch luôn ‘on’). Tuỳ chọn true sẽ kích hoạt lệnh stop và do vậy trả về trạng thái đúng của các switch còn lại
Tuy nhiên, gửi lệnh Stop ở cuối có thể khiến khả năng cân chỉnh “tự động” của cover bị vô hiệu hoá (xem ở dưới: cân chỉnh cover)aliases:
sử dụng tuỳ chọn này làm entity_id thay vì tạo ra từname:
Tạo các script
Trong cấu hình component trên yêu cầu sử dụng các script để đóng, mở và dừng cover. Nếu bạn đang có các script hay switch này trong Home Assistant thì có thể dùng ngay mà không cần bước này.
Ở đây ta ví dụ một số cấu hình tạo script thường thấy.
Script mẫu gửi lệnh IR/RF từ Broadlink:
office_cover_open: alias: Open Office Cover sequence: - service: broadlink.send_command data: host: 192.168.1.100 packet: 'sgBKAgsZGAwYDBcNCxkMGBgMDBkLGQsZFw0XDQsZFw0LGQsZGAwMGBgMDBgMGQsYDB'
Script mẫu gửi lệnh đến thiết bị qua giao thức MQTT:
basement_cover_close: alias: Close Basement Roller Shutter sequence: - service: mqtt.publish data: topic: 'cmnd/basement_shutter/POWER1' payload: 'OFF'
Cân chỉnh cover
Cân chỉnh trước khi hoàn tất cấu hình
Trước khi hoàn tất cấu hình, cần đo thời gian open/close hoàn toàn của cover. Bạn có thể sử dụng đồng hồ bấm giờ hoặc ứng dụng bấm giờ trên điện thoại để đo:
- Thời gian cần để cover từ mở hoàn toàn (động cơ dừng) đến lúc đóng hoàn toàn (động cơ dừng)
- Thời gian cần để cover từ đóng hoàn toàn đến khi mở hoàn toàn
Lưu ý rằng thời gian này tính từ khi ấn nút/gọi script điều khiển trên Home Assistant đến khi động cơ dừng hoàn toàn. Với nhiều loại cover, thời gian đóng và mở sẽ khác nhau (thường thời gian thả xuống sẽ ngắn hơn kéo lên).
Cân chỉnh trong quá trình hoạt động
Trong quá trình hoạt động có thể vị trí ước lượng của cover sẽ bị sai khác với thực tế do cover được thao tác thủ công (gọi script/switch thay vì cover, ấn nút thủ công, kéo thủ công), do đo đạc và do biến động của động cơ (nhanh hơn/chậm hơn do điện áp). Thông thường vị trí này sẽ được cân chỉnh lại khi cover đóng hoặc mở hoàn toàn (vị trí 0 & 100) bởi Home Assistant nếu tuỳ chọn send_stop_at_ends: false
không được mở.
Nếu bạn mở tuỳ chọn trên, cần gọi thủ công script/switch đóng hoặc mở cover và để cover hoàn toàn đóng/mở, sau đó đặt vị trí tương ứng của cover tạo ở trên bằng giao diện hoặc dịch vụ cover.set_cover_position
. Xem phần automation cân chỉnh cover ở dưới.
Về vị trí cover
Lưu ý rằng vị trí này chỉ được ước lượng qua thời gian nên có thể có sai số và sẽ kém chính xác trong một số trường hợp như:
- Một số cửa cần có thời gian để khởi động motor sau khi bấm nút
- Với loại cửa cuốn & rèm cuốn, khi mới xuống ít thì tốc độ sẽ nhanh hơn khi gần hết (do chu vi của roller) do vậy vị trí trong Home Assistant so với thực tế sẽ sai lệch
Tasmota Shutter
Nếu bạn đang sử dụng Tasmota firmware trên thiết bị điều khiển cửa cuốn/rèm có tích hợp vào Home Assistant, có thể cấu hình Tasmota để sử dụng shutter có sẵn thay vì sử dụng component trên.
Ưu điểm của shutter trong Tasmota:
- Kiểm soát an toàn trực tiếp trên thiết bị (công tắc điều khiển)
- Có nhiều điểm mốc để nội suy vị trí hơn thay vì chỉ có 2 điểm 0 & 100 do vậy vị trí sẽ chính xác hơn
- Không bị sai lệch vị trí khi gọi switch/script trên Home Assistant mà không qua cover
Không dùng custom component
Nếu bạn không thể cài đặt component ở bước trên hoặc không muốn dùng, bạn có thể sử dụng một bộ các thành phần bao gồm: template_cover, input_number, timer và automation để ước lượng và điều khiển cover mà không cần phụ thuộc component bên ngoài.
Đây là bộ cấu hình yaml được phát triển bởi chúng tôi trước khi có component trên. Ưu điểm là hoàn toàn sử dụng các thành phần trong Home Assistant, dễ dàng cải tiến & và phát triển thêm, không bị sai lệch vị trí do thao tác không qua cover trên Home Assistant, là ví dụ khá hay về automation trong Home Assistant. Nhược điểm là khá khó để cấu hình và nhân rộng.
Bạn có thể xem và tải về từ đây: github.com/konnectedvn
Thao tác với cover
Hiển thị trên Lovelace
Cover có thể được hiển thị trên Lovelace nhờ entities
card. Khi đó bạn có thể biết trạng thái đóng mở và thao tác với cover bằng cách ấn vào biểu tượng trên card.
Nếu thích “màu mè” (với nghĩa tốt), bạn có thể sử dụng shutter-card để thể hiện cover. Shutter card có thể được cài đặt qua HACS hoặc tải về thủ công từ github.
Cả 2 card này hiển thị trong Lovelace như ảnh dưới, bên trên là entities card, dưới là shutter-card.
Để hiển thị thanh vị trí, bạn có thể sử dụng input_number
và automation
hoặc sử dụng slider-entity-row
(cài đặt qua HACS) như bên dưới.
type: entities entities: - entity: cover.office_cover - type: 'custom:slider-entity-row' entity: cover.office_cover full_row: true
Một số automation với cover
Đóng cover khi mặt trời lên cao
Automation sau sẽ đóng cover đến 80% (tức mở 20%) khi mặt trời lên quá độ cao 15° (còn gọi là elevation – góc thiên đỉnh). Ngoài ra còn có góc phương vị – azimuth xác định hướng chiếu của mặt trời so với phương Bắc la bàn. Kết hợp giữa 2 góc này sẽ tạo ra nhiều automation rất thú vị.
- id: '15932505423430863' alias: Office close cover when sun high description: Đóng rèm 80% khi mặt trời lên cao quá 15 độ trigger: - platform: template value_template: '{{ state_attr(''sun.sun'',''elevation'')|int > 15 }}' condition: - condition: template value_template: '{{ state_attr(''cover.office_cover'',''current_position'')|int > 20 }}' action: - data: position: 20 entity_id: cover.office_cover service: cover.set_cover_position
Tương tự thì bạn có thể áp dụng cho cảm biến ánh sáng thay vì mặt trời.
Cân chỉnh rèm mỗi đêm
Để cân chỉnh rèm mỗi đêm (hoặc ngày tuỳ bạn), ta sẽ cho Home Assistant tự đóng rèm (cover) lại dù có đang đóng hay không rồi gọi thủ công script/switch đóng rèm tương ứng để đảm bảo là rèm thật sự đóng lại hoàn toàn.
Bạn có thể đổi ngược lại cân chỉnh khi mở và thời gian khác tuỳ ý.
- id: '1593251237854' alias: Office cover calibrate at 2300 description: Tự cân chỉnh rèm (đóng) vào lúc 23g trigger: - at: '23:00:00' platform: time condition: [] action: - data: position: 0 entity_id: cover.office_cover service: cover.set_cover_position - timeout: 00:05:00 wait_template: '{{ is_state(''cover.office_cover'',''close'') }}' - data: {} service: script.office_cover_close
Cảm ơn bạn đã xem bài viết này!
konnectED Team.