Home Assistant

Home Assistant: Device tracker – theo dõi thiết bị

Home Assistant Device Tracker

Cách Home Assistant theo dõi vị trí và trạng thái của các thiết bị

22 phút để đọc hết nội dung

Device Tracker – Theo dõi thiết bị trong Home Assistant thường được sử dụng để:

  • Ghi nhận vị trí hiện tại và lưu giữ lịch sử vị trí của một thiết bị
  • Kiểm tra xem một thiết bị có online – kết nối hay không hoặc có đang nằm trong một khu vực địa lý hay không

Vị trí/tình trạng online của thiết bị sau đó có thể được sử dụng để kích hoạt các automation như bật đèn, mở cổng, mở hệ thống điều hoà không khí, báo động khi thiết bị quan trọng mất kết nối, thông báo khi một thiết bị di động đi ra khỏi bán kính cho phép v.v..

Xác định vị trí trong Device Tracker

Device tracker trong Home Assistant (Hass) được xác định vị trí bởi 2 nhóm thiết bị/phương pháp chính:

Nhóm cố định

Vị trí của một thiết bị (di động/cố định) sẽ được xác định thông qua các kết nối tầm gần như Bluetooth/Bluetooth LE/WiFi/RF/Zigbee/Z-Wave/RFID. Các trạm (station) tracker sẽ làm nhiệm vụ kiểm tra xem một thiết bị có ở quanh (hoặc có kết nối đến) trạm hay không. Hass đồng thời sẽ liên kết vào các trạm này để xác định một thiết bị online (kết nối) hay offline (không kết nối). Thiết bị online sẽ được xem như thuộc về cùng một vùng – zone (vị trí) với trạm.

Các station – trạm này thường là:

  • Wifi Router, Zigbee Coordinator(1), Z-Wave Controller
  • Bluetooth, BLE Scanner, RFID – các máy quét Bluetooth, RFID
  • Máy chủ Hass

Lưu ý rằng mặc dù thiết bị phải ở quanh trạm, các trạm này hoàn toàn có thể ở cách xa hoặc rất xa máy chủ Hass, miễn là chúng có thể kết nối với nhau. (2)

(1) Mỗi mạng Zigbee chỉ có thể có 1 Coordinator – thiết bị điều phối, đóng vai trò định hình toàn bộ mạng và điều phối các gói tin.
Một mạng Zigbee có thể bao gồm nhiều Router – thiết bị định tuyến để tăng phạm vi/độ phủ của mạng và giảm tải cho coordinator. Tính năng router thông thường sẽ được tích hợp trong các thiết bị Zigbee không sử dụng pin như công tắc, ổ cắm, động cơ rèm, đèn.
Khái niệm này không giống như trong mạng WiFi, cần tránh nhầm lẫn.
(https://konnected.vn/diy/diy-flash-zigbee-cc2531-de-them-vao-hass-2020-04-13)

(2) Các platform có sẵn hầu hết chưa hỗ trợ gán vị trí – zone khác nhau cho các station này, bạn sẽ phải sử dụng một vài “thủ thuật” để phân biệt thiết bị kết nối vào station nào, từ đó xác định vị trí

Nhóm di động

Nhóm này xác định vị trí chủ yếu dựa vào kết nối GPS hoặc WiFi, thường các thiết bị này sẽ là điện thoại thông minh, máy tính bảng, đồng hồ thông minh, laptop, thiết bị định vị GPS (như trên ô tô). Các thiết bị này cũng sẽ chủ động cập nhật thông tin vị trí lên Hass từ vị trí do chúng xác định được, do vậy, ngoài GPS, chúng phải có kết nối Internet (trong đa số trường hợp).

Trên điện thoại, các ứng dụng chủ yếu dùng cập nhật vị trí với Hass bao gồm:

  • Ứng dụng “chính chủ” Home Assistant trên iOS/Android, thông qua Home Assistant Companion app
  • Các ứng dụng nhật ký & chia sẻ vị trí (location-based social network) như Google Maps (nay là một mạng xã hội), Life360 hay OwnTracks.
Home Assistant track vị trí
Ứng dụng Life360 và Owntracks trên Appstore
! Lưu ý về Quyền riêng tư và Bảo mật

Vị trí và hành trình của một người có thể được xem là thông tin riêng tư và nhạy cảm. Bạn cần được sự cho phép của họ khi sử dụng thông tin này, kể cả với vợ/chồng, con cái.

Khi sử dụng các ứng dụng thu thập vị trí, cần xem kĩ các thoả thuận sử dụng (tos) của ứng dụng đó. Tránh chia sẻ thông tin vị trí hoặc cho phép các ứng dụng không tin tưởng quyền truy cập thông tin vị trí.

Liên kết Device Tracker vào Hass

Các thiết bị có thể được liên kết vào Home Assistant qua 2 cách:

  • Tự động liên kết và track khi được thêm vào qua một tích hợp – integration khác. Ví dụ, khi sử dụng ứng dụng Home Assistant trên điện thoại, mỗi điện thoại sẽ được tự động liên kết vào Hass như một thiết bị device_tracker mà không cần thêm thao tác phụ.
    Các integration phổ biến bao gồm: Apple iCloud, AsusWrt, BMW Connected Drive, Life360, OwnTracks, Ubiquiti UniFi, Tesla.
  • Khai báo thủ công dưới integration device_tracker

Qua WiFi Router

Sử dụng kết nối trực tiếp

Home Assistant có sẵn platform hỗ trợ khá nhiều router dân dụng phổ biến hiện nay. Hầu hết đều đòi hỏi thông tin tài khoản quản trị của router đang sử dụng.

Home Assistant sẽ sử dụng tài khoản này để đăng nhập vào router thông qua http (web) hoặc ssh/telnet (xem thêm Kết nối SSH) sau đó lấy danh sách các thiết bị đang kết nối lưu giữ trên router.

Cấu hình device_tracker dạng này thường như bên dưới:

device_tracker:
  - platform: aruba
    host: 192.168.1.1
    username: ADMIN/ROOT Username
    password: password
#  - platform: xiaomi
#    host: 192.168.1.10
#    password: password

Trong đó:

  • 2 platform: tên của platform, thường là tên của router. Các platform phổ biến:
    aruba, cisco_ios, cisco_mobility_express, ddwrt, linksys_smart, Mikrotik, meraki, netgear, luci, ubus, synology_srm, tomato, unifi_direct, xiaomi
  • 3 host: địa chỉ IP của router
  • 4 & 5 tên tài khoản quản trị (thường mặc định là admin hoặc root) và mật khẩu của tài khoản quản trị

Sử dụng SNMP

Với một số router có hỗ trợ SNMP (Simple Network Management Protocol – Giao thức quản trị mạng đơn giản), bạn có thể cấu hình sử dụng platform SNMP để lấy danh sách thiết bị:

device_tracker:
  - platform: snmp
    host: 192.168.1.1
    community: public
    baseoid: 1.3.6.1.4.1.14988.1.1.1.2.1.1

Lưu ý

Có một số lưu ý sau với việc track – theo dõi thiết bị sử dụng WiFi router:

  1. Cấu hình của mỗi platform có thể thay đổi đôi chút so với cấu hình mẫu, đôi khi cần tuỳ chỉnh trên router để platform hoạt động được. Chi tiết tất cả platform thuộc device_tracker và cấu hình chi tiết bạn có thể xem ở trang web Home Assistant.
  2. Tuỳ theo router, một thiết bị có thể bị đánh dấu là rời mạng sau vài phút mất kết nối nhưng cũng có thể là sau vài giờ. Riêng trạng thái kết nối – online sẽ được nhận biết với độ trễ thấp hơn.
    Bạn phải chú ý đến điều này nếu muốn sử dụng trạng thái của device_tracker cho automation & scripts.
  3. Nhiều platform sử dụng kết nối kém bảo mật đến router, vì vậy, tốt nhất bạn nên sử dụng với các router cùng mạng nội bộ hoặc nếu router ở xa, hãy sử dụng VPN/SSH Tunnel để mã hoá kết nối.
  4. Một số router giới hạn số phiên kết nối/đăng nhập, do vậy có thể device_tracker sẽ không hoạt động được nếu bạn đang đồng thời đăng nhập vào trang quản trị của router.

Bluetooth/BLE

Các thiết bị bluetooth và bluetooth low-energy (BLE) có thể được nhận biết sử dụng kết nối bluetooth trên chính máy chủ Hass hoặc thông qua các trạm (scanner) khác.

Nhược điểm nhưng cũng là ưu điểm của Bluetooth/BLE là khoảng cách kết nối chỉ dưới 10m. Khi thông qua nhiều trạm có thể xác định chính xác vị trí của một thiết bị ở phạm vi một tầng hay một phòng.

Bluetooth Mesh
Bluetooth sử dụng trong Indoor Navigation (ảnh bluetooth.com)

Nếu bạn đang tìm một giải pháp tracking gọn nhẹ dễ mang theo, ít tốn pin thì Bluetooth/BLE khá phù hợp. Các thiết bị sử dụng được có thể bao gồm điện thoại thông minh, ble beacon, các loại vòng đeo tay hay thiết bị theo dõi sức khoẻ v.v..

! Bluetooth và Bảo mật, Riêng tư

Giữ thiết bị bluetooth/BLE luôn broadcast (quảng bá) chính nó bên cạnh có nguy cơ bảo mật và nguy cơ bị lạm dụng để vi phạm quyền riêng tư. Đơn cử với BLE beacon, bất cứ ai cũng có thể “thu gom” danh sách các thiết bị trong một khu vực, từ đó xác định người dùng cũng như thói quen của họ.

Dùng máy chủ Hass

Đây là giải pháp thay thế cho việc tracking qua Router ở trên. Cụ thể ta sẽ sử dụng máy chủ Hass như một trạm – station, thông qua mạng nội bộ để tìm kiếm xem một thiết bị hoặc nhóm thiết bị có trên mạng hay không.

Sử dụng platform Ping

Khi được cấu hình, máy chủ Hass sẽ định kỳ ping – gửi gói tin (ICMP) đến địa chỉ IP đã được cấu hình. Nếu nhận được gói tin phản hồi, Hass sẽ xác định thiết bị có trên mạng (online).

Cấu hình mẫu của platform ping như sau:

device_tracker:
  - platform: ping
    hosts:
      main_hass: 192.168.2.10
      second_router: 192.168.10.2
    count: 2

Trong đó:

  • 4 main_hass: 192.168.2.10 tên gợi nhớ(3) của thiết bị và địa chỉ IP của thiết bị này
  • 5 tương tự như 4, là tên và IP của các thiết bị bạn muốn track – theo dõi
  • 6 count số gói tin gửi đi mỗi lần thực hiện ping, count càng lớn càng tránh được việc phát hiện sai nhưng đồng thời cũng khiến cho việc thực hiện ping bị chậm lại trên tất cả các thiết bị không trả lời ping (offline/firewalled v.v..)

Một số lưu ý:

  • ping có thể thực hiện được để xác định thiết bị thuộc các lớp mạng khác nhau, thậm chí ping đến một thiết bị bên ngoài (như 8.8.8.8)
  • thiết bị được ping phải có IP tĩnh
  • do cấu hình mạng hoặc cấu hình một số thiết bị, có thể thiết bị online nhưng không trả lời gói tin ping hoặc gói tin bị chặn, khi đó thiết bị sẽ bị xác định là offline (xác định sai)

Platform ping phù hợp khi bạn muốn track một số lượng thiết bị hạn chế, được gán IP tĩnh. Nếu bạn muốn track trong phạm vi rộng hơn (toàn mạng, toàn bộ dải IP) và xác định cả các thiết bị không cố định IP, chưa gia nhập, sẽ gia nhập mạng trong tương lai thì có thể sử dụng platform nmap ở dưới.

(3) Tên gợi nhớ này sẽ được sử dụng làm một phần của entity_id và phải tuân theo nguyên tắc chỉ bao gồm chữ thường, chữ số và dấu ‘_’

Sử dụng platform NMAP

nmap là một công cụ nguồn mở, viết tắt của Network Mapper, thường được sử dụng cho mục đích khám phá mạng và kiểm tra bảo mật. nmap được dùng để tìm hiểu xem một thiết bị (host) có khả dụng trên mạng hay không và các dịch vụ nào đang được thiết bị cung cấp.

Máy chủ Home Assistant cũng mặc định đi kèm tiện ích nmap.

Cấu hình mẫu cho device_tracker sử dụng platform nmap:

device_tracker:
  - platform: nmap_tracker
    hosts:
      - 192.168.1.0/24
      - 10.8.0.0/24
    home_interval: 300
    exclude:
      - 192.168.1.10
    scan_options: '-f --host-timeout 2s'

Trong đó:

  • 3 hosts: danh sách các dải địa chỉ IP mà nmap sẽ thực hiện scan
  • 4 dải IP đầu tiên, 192.168.1.0/24 tương đương với dải 192.168.1.1-192.168.1.254 (nmap không chấp nhận dải IP viết dạng này)
  • 6 home_interval: 300 sau 300 giây kể từ lần xác định online cuối cùng, thiết bị sẽ được đánh dấu offline
  • 7 exclude: danh sách các địa chỉ IP sẽ bị bỏ qua, ở đây ta sẽ bỏ qua IP nội bộ của máy chủ Hass để tránh phát sinh lỗi trên các dịch vụ mạng
  • 9 scan_options: thông số đầu vào khi thực hiện lệnh nmap, ở đây ta cấu hình thời gian chờ tối đa ở mỗi IP (host) là 2s để đẩy nhanh quá trình scan(4)

Mặc dù trông có vẻ phức tạp, bạn chỉ cần nhớ mấy điểm:

  • exclude IP của máy chủ Hass và router
  • scan đúng dải IP cần thiết và bỏ qua càng nhiều IP càng tốt vì nmap sẽ rất tốn thời gian (nếu bạn dùng mạng có IP kiểu 192.168.0.x chẳng hạn thì dải IP sẽ là 192.168.0.0/24)
  • nếu trạng thái của thiết bị báo sai quá nhiều (online/offline liên tục) thì cần tăng thêm home_interval

(4) Bạn có thể xem các thông số đầu vào của nmap liên quan đến hiệu năng ở đây

Sử dụng nhiều platform

Đầu tiên, vị trí của cùng một thiết bị có thể được xác định đồng thời bởi nhiều platform. Vị trí hiện tại sẽ là vị trí được báo cáo bởi platform gần nhất. Bạn phải cẩn thận với điều này vì sự mâu thuẫn giữa các platform có thể dẫn đến kết quả xác định sai hoặc thay đổi liên tục.

Thứ hai, cùng một thiết bị có thể được xác định bởi nhiều platform không đồng thời. Lúc này, một thiết bị (ví dụ: điện thoại của bạn) sẽ được đại diện bởi nhiều entity khác nhau trong cùng domain device_tracker.

Cuối cùng, mặc dù cấu hình của các platform có thể khác nhau, có 2 tuỳ chọn áp dụng được cho mọi platform như dưới đây:

  • interval_seconds: 12 là khoảng thời gian (giây) giữa hai lần quét (scan/refresh) của cùng một platform, chỉ áp dụng cho platform thuộc nhóm cố định
  • consider_home: 180 là khoảng thời gian (giây) một device_tracker bị đánh dấu là 'not_home‘ (xem ở dưới) kể từ lần được báo cáo trạng thái ‘home‘ hoặc ‘<zone>’ cuối cùng.

Lưu ý: 2 tuỳ chọn trên dù có thể được khai báo trong mọi platform nhưng chỉ có tác dụng tại lần đầu tiên được khai báo (từ trên xuống).

Trạng thái device_tracker trong Hass

Các thiết bị được track trong Home Assistant sẽ có entity_id dạng device_tracker.zzz với zzz thường là tên thiết bị (với Mobile App, WiFi router), địa chỉ MAC (Bluetooth/BLE/nmap) hoặc địa chỉ IP (ping).

Bạn sẽ phải xác định entity_id này thuộc về thiết bị nào trong mỗi trường hợp cụ thể. Bạn chỉ cần xác định các entity mà mình muốn dùng, không cần và không nên định danh toàn bộ vì số lượng entity tạo ra bởi một số platform device_tracker sẽ rất lớn.

Các entity tạo ra tự động bởi các integration – tích hợp sẽ có thể được quản lý, đổi tên, đổi entity_id bằng trang quản lý của tích hợp đó (Cấu hình > Các bộ tích hợp > Tích hợp tương ứng).

Các entity còn lại, đa phần sẽ được tự động tạo ra bên trong file cấu hình tại /config/known_devices.yaml.

Tuỳ chỉnh thiết bị trong known_devices.yaml

Nộ dung của một file known_devices.yaml dạng như sau (lưu ý là nội dung do Hass tự tạo ra):

esp_ed6f15:
  icon:
  mac: F0:B4:29:ED:6F:15
  name: ESP_AE6F15
  picture:
  track: true

qca8902:
  icon:
  mac: 00:51:ED:F7:C5:25
  name: QCA8902
  picture:
  track: false

Bạn có thể thay đổi nội dung để điều chỉnh tên (name), icon (biểu tượng), ảnh đại diện thay cho icon (picture) và tuỳ chọn có tiếp tục theo dõi trạng thái của thiết bị này hay không (track).

Ngoại trừ track, các điều chỉnh còn lại cũng có thể được thực hiện bằng công cụ Customizations hoặc file customize.yaml.

Trạng thái entity device_tracker

Sau khi bạn đã thêm các thiết bị cần track vào Hass và tuỳ chỉnh chúng, đây là phần quan trọng nếu muốn sử dụng các thiết bị device_tracker này một cách hữu dụng.

Ngoại trừ các trạng thái ‘unavailable’ (không khả dụng), ‘unknown’ (không biết) xảy ra do lỗi, các entity thuộc device_tracker có 3 loại trạng thái – state chính. Lưu ý rằng state dưới đây là dạng thực sự có thể dùng cho scripts & automation, có thể không giống với state thể hiện trên giao diện.

Trạng thái: home

Khi một thiết bị được xác định online (với nhóm cố định) hoặc có toạ độ GPS nằm trong vùng toạ độ của máy chủ Hass (sai số mặc định 100m, xem thêm Home Assistant: thiết lập cơ bản), entity tương ứng sẽ có state: ‘home‘.

Trạng thái: <zone>

Khi một thiết bị có toạ độ GPS(5) thuộc vào một zone thì thiết bị này sẽ có trạng thái chính là friendly_name của zone đó. Bản thân home cũng là một zone, được mặc định tạo ra ở bước thiết lập Home Assistant ban đầu.

Hass Device Zone
State của device nằm trong một Zone

Trạng thái: not_home

Khi một thiết bị (device_tracker) không thuộc vào 2 trường hợp trên, nó sẽ có trạng thái là ‘not_home‘. Lưu ý, trạng thái là not_home, không phải away như thường được thể hiện trên giao diện.

Attributes: source_type và scanner

Một entity device_tracker thường sẽ có một trong hai hoặc cả hai attributes này. source_type thường thấy sẽ là gps hoặc router, scanner thường sẽ là tên của platform thuộc nhóm cố định. Dựa trên hai attributes này có thể xác định thực ra device đang kết nối vào station/scanner nào.

(5) Một số platform như MQTT cũng có khả năng cài đặt vị trí này. Hoặc bạn cũng có thể cài đặt thủ công vị trí/zone cho một thiết bị bằng dịch vụ – service device_tracker.see.

Tiếp theo

Sau khi đã tạo được các entity – thực thể để theo dõi trạng thái/vị trí của các thiết bị, bạn có thể sử dụng state – trạng thái và attributes của các entity này để thực hiện automation & scripts. Phần này sẽ được trình bày riêng trong bài viết kế tiếp Home Assistant: phát hiện sự hiện diện.

Cảm ơn bạn đã xem bài viết này!

konnectED Team.

Lên Đầu
  • Đăng ký
Bạn quên mất mật khẩu? Vui lòng nhập tên đăng nhập và địa chỉ email đã đăng ký. Bạn sẽ nhận được liên kết tạo mật khẩu mới qua email (bạn nhớ kiểm tra hộp spam trong trường hợp email đi lạc).