Home Assistant

Hass – Custom Component: tích hợp các cảm biến Xiaomi BLE

Thêm cảm biến Bluetooth Xiaomi vào Home Assistant

Thêm các cảm biến nhiệt độ, độ ẩm Xiaomi (Mijia) BLE trực tiếp vào Hass mà không cần hub

Photo: Magalex2x14, Ernst79
14 phút để đọc hết nội dung

Xiaomi vốn nổi tiếng với các thiết bị giá rẻ nhưng chất lượng và thiết kế không tệ, nếu không muốn nói là khá đẹp. Nếu bạn đang có các cảm biến Xiaomi, bạn có thể thêm rất nhiều trong số chúng trực tiếp vào Hass mà không cần phải thông qua hay mua thêm các Hub của họ. Ở bài viết này ta sẽ thêm các cảm biến bluetooth sử dụng chuẩn BLE của Xiaomi như ảnh trên vào Hass.

Các cảm biến sử dụng kết nối chuẩn Zigbee cũng có thể thêm vào Hass thông qua các hub zigbee tích hợp trực tiếp vào Hass, ví dụ như Thêm cảm biến Mở cửa Xiaomi vào Home Assistant.

Các cảm biến nhiệt độ, độ ẩm Xiaomi Bluetooth

Ảnh trên, từ trái sang và từ trên xuống:

LYWSDCGQ màn hình LCD từng đoạn, lấy được nhiệt độ, độ ẩm và pin, 20 lần/phút.

LYWSD02 màn hình E-Ink, lấy được nhiệt độ, độ ẩm, 20 lần/phút. Không có thông tin pin.

CGG1 màn hình E-Ink, lấy được nhiệt độ, độ ẩm và pin, 20 lần/phút.

HHCCJCY01 Mi-Flora, lấy được nhiệt độ, độ ẩm đất, độ sáng, dẫn suất của đất, 1 lần/phút. Không có thông tin pin ở firmware v3.2.1.

GCLS002 còn gọi là VegTrug Grow Care Garden, tương tự Mi-Flora ở trên.

HHCCPOT002 lấy được độ ẩm đất và dẫn suất đất, không có thông tin pin với firmware v1.2.6. 2 lần/phút.

LYWSD03MMC màn hình LCD từng đoạn, lấy được nhiệt độ và độ ẩm 1 lần mỗi 10 phút, thông tin pin một lần mỗi giờ. Thông tin có mã hoá, cần lấy khoá giải mã (xem ở cuối bài).

CGD1 đồng hồ báo thức, màn hình LCD từng đoạn. Lấy được nhiệt độ, độ ẩm (1 lần mỗi 3 phút?) và thông tin pin. Thông tin có mã hoá và các lấy khoá giả mã tương tự LYWSD03MMC.

JQJCY01YM cảm biến Formaldehyde Xiaomi Honeywell, màn hình OLED. Lấy được nhiệt độ, độ ẩm, nồng độ formaldehyde (mg/m³) và thông tin pin 50 lần mỗi phút.

WX08ZM máy đuổi muỗi, lấy được trạng thái bật/tắt, tình trạng miếng hoá chất đuổi muỗi và mức pin khoảng 50 lần mỗi phút.

Tích hợp cảm biến Xiaomi Ble vào Home Assistant

! Yêu cầu tối thiểu/khuyến nghị
  • Máy chủ Hass phải có adapter Bluetooth chuẩn 4.0 trở lên và Hass phải truy cập được adapter này. Nếu bạn đang chạy máy chủ Hass trên Pi3, Pi3B+ hay Pi4 thì gần như không phải làm thêm gì nữa. Trên một thiết bị khác chạy Linux, bạn có thể thử:
    – Cài đặt thư viện bluepy và btlewrap qua pip. Nhớ cài đặt đúng môi trường của Hass nếu bạn chạy virtualenv.
    hoặc cài đặt các thư viện btlewrap (qua pip) và gatttool qua công cụ quản lý của hệ điều hành (apt-get/yummy). Tuỳ theo phiên bản Linux mà tên gói này có thể là bluezbluetooth hay bluez-deprecated.
  • Sử dụng cùng lúc nhiều ứng dụng trên cùng 1 kết nối Bluetooth có thể gây xung đột, kém ổn định. Nếu bạn gặp phải, có thể phải bổ sung thêm thiết bị bluetooth gắn ngoài.
  • Các cảm biến này phải nằm trong phạm vi bán kính khoảng 10m quanh máy chủ Hass. Thử nghiệm cho thấy cảm biến Mijia LYWSD03MMC đặt trong phòng bên hoặc dưới một tầng vẫn truyền dữ liệu ổn định khi cách máy chủ Hass Pi3B+ (sử dụng case nhựa, WiFi ac 5GHz) 6-7m qua một bức tường, cửa đóng kín.
Dữ liệu từ cảm biến Xiaomi LYWSD03MMC trong thử nghiệm của chúng tôi

Cài đặt custom component

Ở đây ta sẽ sử dụng custom_component có tên là Xiaomi passive BLE monitor sensor platform của tác giả Magalex2x14,Ernst79. Bạn có thể cài đặt trực tiếp trên Hass qua HACS hoặc tải về thủ công từ github repository.

Lưu ý: nếu bạn chỉ cần sử dụng cảm biến Mijia LYWSDCGQ hay Flora, Hass có sẵn platform mitemp_bt tại đây.

Nếu bạn chỉ sử dụng Home Assistant Core, có thể bạn sẽ cần thêm lệnh sau để cấp quyền:

sudo setcap 'cap_net_raw,cap_net_admin+eip' `readlink -f \`which python3\``

Cấu hình component Xiaomi passive BLE monitor sensor platform

Sau khi cài đặt custom_component trên, bạn hãy khởi động lại Home Assistant.
Sau khi khởi động lại thêm cấu hình bên dưới vào Home Assistant.

update red icon Cho component phiên bản 0.7.x trở về trước (08/11/2020)

Trong các phiên bản sớm này, component Xiaomi passive BLE là một platform thuộc domain sensor, do vậy, cấu hình được thể hiện như bên dưới. Từ phiên bản 0.8.0 trở về sau, component được đổi tên thành BLE monitor để nhắm đến nhiều hãng khác nhau, không riêng thiết bị Xiaomi, và là một tích hợp chứ không còn là platform nữa.

sensor:
  - platform: mitemp_bt
    rounding: True
    decimals: 1
    period: 60
    use_median: False
    log_spikes: False
    active_scan: False
    hci_interface: 0
    report_unknown: False
    batt_entities: False
#    encryptors:
#               'A4:C1:38:2F:86:6C': '217C568CF5D22808DA20181502D84C1B'

ble_monitor:
  rounding: True
  decimals: 1
  period: 60
  log_spikes: False
  use_median: False
  active_scan: False
  hci_interface: 0
  batt_entities: False
  discovery: True
  restore_state: True 
  report_unknown: False
  devices:
    - mac: 'A4:C1:38:2F:86:6C'
      name: 'Livingroom'
      encryption_key: '217C568CF5D22808DA20181502D84C1B'
      temperature_unit: C

Ý nghĩa của cấu hình:
rounding: làm tròn giá trị đọc được từ cảm biến, đi cùng với tuỳ chọn decimals.
decimals: làm tròn tới 1 số sau dấu thập phân, đủ trong hầu hết trường hợp.
period: số giây chờ lấy mẫu, trong thời gian này Hass sẽ lấy các mẫu dữ liệu nhận được rồi tính trung bình (mean).
use_median: sử dụng median (giá trị xuất hiện nhiều nhất trong khoảng thời gian lấy mẫu) làm giá trị cảm biến thay vì mean (trung bình).
log_spikes: ghi những giá trị bất thường vào log của Hass.
active_scan: chủ động gửi yêu cầu đến cảm biến.
hci_interfaces: thứ tự giao tiếp – interface bluetooth sẽ sử dụng trên Hass.
batt_entities: tạo thêm một cảm biến – sensor chứa giá trị pin (thay vì kèm trong attributes của cảm biến chính).
restore_state: phục hồi trạng thái của các sensor ngay sau khi Hass khởi động lại, sử dụng trạng thái đã lưu trước đó
report_unknown: chỉ sử dụng nếu bạn muốn tìm hiểu dữ liệu gửi đi của các mẫu cảm biến Xiaomi Ble khác chưa được hỗ trợ bởi component này
mac: địa chỉ mac của cảm biến
name: tên do bạn đặt để nhận dạng các cảm biến, với ví dụ mẫu, thực thể – entity thể hiện độ ẩm, khi tạo ra, sẽ có entity_id dạng sensor.ble_temperature_livingroom
encryption_key: một số cảm biến BLE, ở đây là mẫu Mijia LYWSD03MMC và CGD1 sử dụng khoá để mã hoá dữ liệu truyền đi qua ble. Khoá này chỉ có khi kết nối – pair cảm biến này vào tài khoản Xiaomi (thông qua app Mi Home trên iOS/Android). Bạn cần lấy khoá này để giải mã thông tin trạng thái cảm biến. Bạn xem cách lấy ở cuối bài viết.
temperature_unit: cảm biến nhiệt độ của bạn là loại thể hiện độ C hay F

Sau khi hoàn tất các bước trên, bạn có thể kiểm tra cấu hình và khởi động lại Home Assistant.

Sau 1, 2 phút, các cảm biến Xiaomi phát hiện được sẽ được tự động thêm dần vào Home Assistant. Bạn có thể kiểm tra các cảm biến này ở bảng State trong tab Developer Tools.

Lúc này bạn có thể thêm chúng vào giao diện Lovelace hoặc sử dụng cho các mục đích khác, như sử dụng trong Automation.

Lấy khoá giải mã cảm biến LYWSD03MMC

LYWSD03MMC là cảm biến rất đẹp với màn hình thể hiện nhiệt độ, độ ẩm môi trường. Cảm biến này thích hợp để đặt trên bàn làm việc, dán tường tại các vị trí dễ quan sát.
Bạn có thể mua cảm biến này với giá chỉ quanh 100 nghìn VND.

Để lấy khoá giải mã dữ liệu của cảm biến này, bạn cần một thiết bị Android có hỗ trợ Bluetooth như điện thoại thông minh, TV box và làm theo các bước sau:

  1. Tải về phiên bản Mi Home đã được sửa lại bởi tác giả vevsvevs tại liên kết gốc hoặc bản chúng tôi (FShare) đã tải về sẵn.
  2. Cài đặt bản Mi Home này. Có thể bạn phải xoá phiên bản Mi Home đang được cài đặt sẵn trước khi cài bản này.
    Lưu ý: chúng tôi không thể đảm bảo tính an toàn của phiên bản này mặc dù tác giả cam kết nó hoàn toàn an toàn. Vì vậy, chúng tôi khuyến cáo bạn: tự chịu trách nhiệm; cài đặt nó trên một thiết bị ít quan trọng/không chứa dữ liệu cá nhân như TV Box; nếu được hãy tạo một tài khoản Xiaomi mới trên app này hoặc nếu dùng tài khoản hiện có, hãy đổi mật khẩu sau khi làm xong; xoá app Mi Home này và cài lại bản chính thức sau khi hoàn tất.
  3. Trên bộ nhớ trong của thiết bị cài đặt Mi Home (thường chứa thư mục Android), tạo thư mục có tên là vevs, bên trong vevs, tạo thêm thư mục logs (tức là /vevs/logs).
  4. Mở kết nối Bluetooth và kết nối mạng trên thiết bị, đăng nhập vào app Mi Home ở trên và thêm mới cảm biến LYWSD03MMC vào tài khoản (bằng cách thủ công hoặc chờ một lúc, Mi Home sẽ tự đề nghị thêm khi phát hiện thấy cảm biến mới). Có thể bạn phải chọn vùng/quốc gia là China thì mới thêm được cảm biến.
  5. Sau khi thêm cảm biến thành công, hãy chờ vài phút. Sau đó mở thư mục vevs/logs vừa tạo ở trên và tìm file có tên pairings.txt. Trong nội dung file này, bạn sẽ thấy địa chỉ mac và khóa giải mã – bindkey của cảm biến. Dùng hai thông tin này để thêm vào Hass. Bạn nhớ bỏ kí tự # trước 2 dòng cuối của cấu hình mẫu.
  6. Bạn quay lại lưu ý ở bước 2. Một lưu ý nữa là nếu Pair cảm biến lần nữa với một tài khoản Xiaomi khác, bạn phải làm lại việc lấy khoá giải mã.

Khóa giải mã – Bindkey và địa chỉ Mac của cảm biến LYWSD03MMC.

Một số hình ảnh khác của cảm biến LYWSD03MMC

previous arrow
next arrow
Slider

Về Bài viết

Bài viết chưa đầy đủ hoặc bạn còn có ý kiến khác? Bạn có thắc mắc và cần thêm thông tin. Vui lòng đăng ý kiến vào mục bình luận để tác giả và Team có thêm thông tin cải thiện chất lượng bài viết. Chúng tôi sẽ giải đáp các thắc mắc ngay trong mục bình luận để giúp được nhiều đọc giả với cùng vấn đề hơn hoặc chúng tôi sẽ trả lời trong một bài viết riêng. Trân trọng cảm ơn bạ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).