[Xiaomi]: Hút bụi theo vùng

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:

  1. 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à.
  2. 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 đồ.

  1. 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_templatezone 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 ZoneBarrier 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 TabsNo-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.

Comments Off on [Xiaomi]: Hút bụi theo vùng

Filed under Software

Comments are closed.