Một vùng đơn giản là một hình chữ nhật, xác định bằng tọa độ góc dưới bên trái và góc cao bên phải, hay có thể phức tạp hơn bao gồm nhiều hình chữ nhật. Các tọa độ được xác định tương đối với tọa độ gốc là tọa độ của robot khi bắt đầu lau dọn/home/dock. Toa độ gốc của robot mặc định là (25500, 25500) cho dù robot được đặt ở đâu trên mặt sàn. Tọa độ điểm bất kỳ được tính tăng giảm từ gốc theo hệ trục (x,y) như thông thường.
- Theo qui ước trên, vị trí ban đầu của robot ảnh hưởng đến tất cả các vùng. Giả sử đã xác định vùng lau dọn cho một tầng lầu, sang tầng khác đặt robot ở vị trí khác thì các tọa độ đều sai lệch.
- Hiện nay, cách xác định vùng như trên không dùng được các vùng cấm (No-go Zone) hay các vạch cấm (Barrier Tabs).
Chuẩn bị
Thiết kế sau đây dùng HASS để điều khiển lau dọn theo vùng nên trước hết cần thêm robot Xiaomi vacuum vào HASS, bằng cách:
- Lấy token của robot Xiaomi vacuum mi_vacuum_token và ip của robot mi_vacuum_ip
- Khai báo ở configuration.yaml các dòng tương tự như sau, sau đó khởi động lại HASS
vacuum:
- platform: xiaomi_miio
host: mi_vacuum_ip
token: mi_vacuum_token
Dùng Flolevac để xác định tọa độ vùng
Flolevac, chạy trên Android, là ứng dụng điều khiển robot lau nhà Xiaomi, tương tự Mi Home, có ít tính năng hơn nhưng ưu việt hơn là tính được tọa độ vùng. Sau đây là các bước dùng Flolevac để có tọa độ vùng:
- Xác định vị trí gốc: Chọn vị trí thuận tiện đặt robot hay đặt dock, thí dụ là góc nhà.
- Tạo bản đồ: Có thể dùng chức năng GO để dắt robot đi dọc nhà theo vài bước ngắn để nó vẽ bản đồ nhà. Tuy nhiên để có tọa độ chính xác hơn, nên cho robot hút bụi toàn mặt sàn để có bản đồ.
- Tạo vùng: Dùng chức năng Zoned cleaning, bấm Add để tạo các hình chữ nhật xác định các vùng lau dọn và bỏ đi các vùng không muốn robot vào. Sau đó, bấm và giữ nút Cleanup vài giây để copy các tọa độ vùng vào clipboard.
Các tọa độ này có dạng
[[20365,24222,24415,25472,1],[20530,23420,23330,24220,1],[24387,24038,25987,25938,1]]
Thành phần thứ 5 trong list trên là số lần lau dọn vùng đó. Tùy lệnh mà tham số này được dùng cho từng vùng nhỏ hay được dùng chung.
Sử dụng lệnh lau dọn vùng
Có 2 service/lệnh có thể dùng cho lau dọn vùng/phòng, cú pháp khác nhau:
Tạo script lau dọn
Các dịch vụ trên dễ dàng đưa vào script, thí dụ với lệnh vacuum.send_command
vacuum_kitchen: alias: Vacuum Kitchen sequence: - service: vacuum.send_command data: entity_id: vacuum.xiaomi_vacuum_cleaner command: app_zoned_clean params: [[20365,24222,24415,25472,1],[24387,24038,25987,25938,1],[16662,21944,20162,26344,1]]
Nếu có nhiều vùng/phòng lau dọn, tạo những đoạn script tương ứng và đặt tên/alias để phân biệt.
Trên giao diện HASS, có thể tạo danh sách để chọn vùng/phòng lau dọn:
## configuration.yaml (1) ## Tạo danh sách để chọn vùng lau dọn input_select: area_to_clean: options: - Choose Area - Office - Kitchen
## automation.yaml (2a) ## Tự động hút bụi khi phòng được chọn - id: input_vacuum_area trigger: platform: state entity_id: input_select.area_to_clean condition: condition: template value_template: "{% if not is_state('input_select.area_to_clean','Choose Area') %}true{% endif %}" action: service_template: script.vacuum_{{ states('input_select.area_to_clean')|lower|replace(' ','_') }}
Cho đến phiên bản HASS 0.93.2, service vacuum.xiaomi_clean_zone có lỗi khi phân tích data_template và zone luôn luôn không đúng định dạng list. Chí có thể tránh lỗi này bằng cách không dùng data_template mà dùng service_template như thí dụ trên, mã lệnh lập lại dài hơn tuy nhiên zone là một list cố định.
## scripts.yaml (3) ## Lau dọn theo vùng ## vị trí dock cố định vacuum_office: sequence: - service: vacuum.xiaomi_clean_zone data: entity_id: vacuum.xiaomi_vacuum_cleaner zone: [[18598,22815,26248,27265]] repeats: 1 ## vị trí dock cố định vacuum_kitchen: sequence: - service: vacuum.xiaomi_clean_zone data: entity_id: vacuum.xiaomi_vacuum_cleaner repeats: 1 zone: [[9166,23200,12716,27150]]
Ra lệnh lau dọn bằng giọng nói
Nếu đã liên kết Google Assistant với HASS thì dùng GA để điều khiển.
Ngoài ra có thể dùng IFTTT, khi đó tạo thêm một automation để nhận vùng/phòng từ IFTTT và đặt phòng bằng input_select.area_to_clean:
## automation.yaml (2b) ## nhận từ khóa room từ ifttt - id: ifttt_vacuum_area trigger: platform: event event_type: ifttt_webhook_received action: service: input_select.select_option data_template: entity_id: input_select.area_to_clean option: > {% set room = "{{ trigger.event.data.room|replace('the ','')}}" %} {% if room in ['office','kitchen'] %} {{ room|capitalize }} {% else %} Choose Area {% endif %}
IFTTT chỉ cần phân tích câu để trả về từ khóa room, như hình
Toàn bộ mã lệnh cần thiết để lau dọn theo vùng bằng lệnh vacuum.xiaomi_clean_zone gồm (1), (2a), (2b) và (3), tất nhiên với các tọa độ thích hợp.
Chú thích
Cách khác không cần lập trình là dùng No-go Zone và Barrier Tabs để bỏ bớt các vùng không cần lau dọn.
1. Đầu tiên phải active Map saving mode để Mi Home không phải vẽ lại mỗi lần lau dọn vì sẽ ghi đè lên bản đồ đã sọan thảo.
Chạm dấu … ở góc trên bên phải của ứng dụng Mi Home -> Chọn Vacuum Settings -> Map saving mode (Beta) -> gạt nút active .
2. Ngoài ra cũng phải nhở nguyên tắc là đặt robot đúng vị trí như khi lập bản đồ để các tọa độ vẫn còn đúng.
- Nạp một bản đồ cần đặt vùng cấm, bấm nút Edit ở góc cao bên phải, dưới dấu …
- Đặt Barrier Tabs và No-go Zones. Xong thì bấm Save
Hạn chế của phương pháp này là chỉ tạo được một bản đồ, tuy nhiên không cần HASS, thiết lập dễ dàng.