Home Assistant

Home Assistant: gửi thông báo đến điện thoại, máy tính

Notification on iOS

Cấu hình và tạo automation gửi thông báo đến điện thoại, máy tính từ Hass

Photo: spaceotechnologies.com
21 phút để đọc hết nội dung

Home Assistant cho phép người dùng quản lý gần như mọi thứ qua giao diện Web tuy nhiên cũng hỗ trợ bạn gửi các thông tin ngắn gọn – notification đến các thiết bị cá nhân như smartphone hay máy tính cá nhân. Các thông tin được gửi đi có thể bao gồm:

  • Thông báo bằng chữ, có thể là trạng thái của một thiết bị hoặc một sự kiện mới xảy ra
  • Video, âm thanh và hình ảnh, có thể là từ các cảm biến hoặc camera được tích hợp
  • Thông tin vị trí của máy chủ Hass hay của một thiết bị khác
  • Các dạng file khác như file .log

Các thông tin này thông thường được gửi đi qua các platform hỗ trợ notification bằng cách gọi các servicedịch vụ được kích hoạt trong các automation hoặc script.

Các platform thường được sử dụng để gửi thông báo đến điện thoại và máy tính bao gồm:

  • mobile_app, sử dụng ứng dụng chính thức Home Assistant trên iOSAndroid
  • telegram, sử dụng ứng dụng Telegram Messenger trên iOS, Android, Web, hay Telegram Desktop trên MacOS/Windows/Linux
  • html5, hỗ trợ gửi thông báo đến trình duyệt Chrome và Firefox, kể cả trên điện thoại (ngoại trừ trên iOS)
  • Facebook, hỗ trợ gửi thông báo đến ứng dụng Facebook Messenger.

Ở bài viết này chúng ta sẽ sử dụng 1 trong 2 platform đầu tiên bao gồm cấu hình platform và một số cách gửi notification cơ bản. Riêng platform Facebook đòi hỏi phải tạo tài khoản nhà phát triển tương đối phức tạp và không cần thiết cho lắm.
Bản thân mình cũng không ưu tiên sử dụng Facebook Messenger do các vấn đề về hiệu năng và đảm bảo quyền riêng tư.

! Yêu cầu tối thiểu/khuyến nghị

Yêu cầu đầu tiên là bạn đã cài đặt ứng dụng tương ứng trên điện thoại, máy tính. Riêng platform Telegram đòi hỏi bạn có tài khoản Telegram.

Hass phải có kết nối đến Internet và đang hoạt động bình thường.

Platform mobile_app

Cấu hình và đăng ký ứng dụng

Để sử dụng notification trên nền tảng này, ngoài việc cài đặt ứng dụng Home Assistant trên điện thoại Android/iOS, bạn còn cần phải khai báo kích hoạt integration mobile_app trên Hass (mặc định được kích hoạt với tích hợp default_config:).

Lưu ý, Hass của bạn cũng cần phải truy cập được từ internet qua domain với chứng chỉ hợp lệ (mà thường được sử dụng nhất là dịch vụ duckdns.org và Letsencrypt với người dùng Hass). Đặc biệt quan trọng đối với ứng dụng trên iOS.

Kích hoạt mobile_app thủ công với cấu hình trong /config/configuration.yaml.
Cấu hình này (và cả việc khởi động lại Hass) chỉ cần thiết nếu bạn đã xoá bỏ dòng cấu hình default_config: trong cùng file trên, qua đó huỷ bỏ kích hoạt mặc định mobile_app.

mobile_app:

Sau khi khởi động lại Hass để kích hoạt integration mobile_app, bạn mở ứng dụng Home Assistant trên điện thoại để đăng nhập và cấp phép gửi thông báo cho ứng dụng.

Home Assistant iOS App First Screen

Trong lần đầu tiên mở ứng dụng, bạn sẽ được yêu cầu đăng nhập vào Hass bằng tài khoản và mật khẩu đã tạo trên Hass. (xem Home Assistant: thiết lập cơ bản)

Nếu tích hợp discovery được mở và hoạt động bình thường cũng như điện thoại và máy chủ Hass đang ở cùng một mạng nội bộ, máy chủ Hass sẽ tự động được tìm thấy với địa chỉ cấu hình bởi base_url trong http:. Tuy nhiên bạn có thể nhập địa chỉ này thủ công, dạng: https://domain:port (ví dụ: https://konnected.duckdns.org:8123).

Sau khi kết nối được vào máy chủ Hass trên ứng dụng, bạn đăng nhập với tài khoản thông thường của mình rồi chọn Lưu lại đăng nhập. Mặc định ứng dụng sẽ được cấp quyền gửi thông báo, bạn có thể chọn cấp các quyền Location – vị trí nếu muốn theo dõi vị trí thiết bị này trên Hass hoặc Pedometer – hoạt động di chuyển nếu muốn theo dõi các thông số sức khoẻ (như số bước).

Home Assistant App Setup
Màn hình thông báo kích hoạt các dịch vụ thành công

Trên ứng dụng iOS, có thể bạn sẽ được yêu cầu tải các cấu hình phụ từ máy chủ Hass. Bạn có thể tải nếu đã thiết lập các cấu hình này.

Dịch vụ gửi thông báo

Sau khi đăng nhập thành công, Hass sẽ tạo ra một thiết bị mới tương ứng với thiết bị đang chạy ứng dụng này để hiển thị thông tin về thiết bị như dung lượng pin, vị trí. Hass cũng tạo ra các entity tương ứng với mỗi platform hỗ trợ thiết bị như device_tracker. Bạn có thể quản lý các thiết bị này trong mục Cấu hình > Các bộ tích hợp > Ứng dụng di động hoặc Thiết bị.

Tuy nhiên, để có thể gửi thông báo đến ứng dụng này trên điện thoại, bạn sẽ cần khởi động lại Hass lần nữa để khởi tạo lại tích hợp notify. Sau khi khởi động lại Hass, một dịch vụ – service mới sẽ được tạo ra, có tên là notify.mobile_app_<tên điện thoại>, bạn có thể tìm thấy dịch vụ này trong Công cụ Nhà phát triển > Dịch vụ. Ta sẽ sử dụng service này để gửi thông báo đến điện thoại.

Các dạng thông báo có thể gửi đến ứng dụng Home Assistant trên điện thoại:

  • Các thông báo chuẩn bao gồm title – tiêu đề, message – nội dung thông báo và target – thiết bị nhận thông báo.
    Thông báo gửi đi bắt buộc phải có message.
  • Các thông báo chứa nút chọn để người dùng có thể phản hồi ngay trên thông báo, gọi là Actionable Notification. Về các thông báo dạng này và cách cấu hình automation để đáp ứng, chúng tôi sẽ nói đến trong một bài viết khác.
  • Các thông báo tuỳ chỉnh theo nền tảng iOS hay Android, bao gồm thông báo tuỳ chọn âm báo, tuỳ chọn cách hiển thị, thay thế thông báo trước đó v.v..

Cấu hình mẫu dưới đây được sử dụng để gửi thông báo dạng cơ bản đến app Home Assistant trên điện thoại. Bạn thay thế dịch vụ notify.mobile_app_konnectedvn với tên dịch vụ tương ứng và sử dụng data_template thay cho data: nếu muốn áp dụng templating cho nội dung tin nhắn.

service: notify.mobile_app_konnectedvn
data_template:
  title: "Home Assistant: Tin nhắn kiểm tra"
  message: "Thông báo gửi thành công đến điện thoại."
Hass iOS Test Notification Preview
Xem trước của tin nhắn hiển thị trên điện thoại

Bạn có thể tìm thấy một số automation gửi thông báo theo ngữ cảnh tại mục 3 của bài viết này và tại đây: Home Assistant – bài viết chứa thẻ Thông Báo.

! Lưu ý về giới hạn số lượng tin nhắn

Mặc định, ứng dụng Home Assistant trên điện thoại giới hạn 150 thông báo mỗi ngày. Giới hạn này được reset – khởi tạo lại vào 0 giờ UTC, tức 17g giờ Việt Nam.

Gửi thông báo đến nhiều thiết bị

Nếu máy chủ Hass của bạn được truy cập đến bởi nhiều thiết bị sử dụng ứng dụng Home Assistant, sẽ có nhiều dịch vụ dạng service.mobile_app_<thiết bị 1>, service.mobile_app_<thiết bị 2> v.v.. được tạo ra. Bạn có thể gửi thông báo đến tất cả các thiết bị này bằng cách liệt kê chúng trong cấu hình service như
service: notify.mobile_app_konnectedvn_1, notify.mobile_app_konnectedvn_2.

hoặc cấu hình một dịch vụ notify riêng bao gồm tất cả như bên dưới.
Thậm chí bạn có thể thêm bất cứ dịch vụ thông báo nào bắt đầu bằng notify (thuộc tích hợp notify).

notify:
  - name: mobile_app_all_devices
    platform: group
    services:
      - service: mobile_app_konnectedvn_1
      - service: mobile_app_konnectedvn_2
#       ...
#     - service: mobile_app_konnectedvn_n

Platform Telegram

Để gửi thông báo đến ứng dụng Telegram trên điện thoại và máy tính, ta sẽ sử dụng integration telegram. Cấu hình và sử dụng telegram đòi hỏi bạn phải tạo ra một Telegram Bot (máy trả lời tự động) trước.

Cá nhân mình thích gửi thông báo đến Telegram vì nó rất nhanh và ổn định, ngoài tin nhắn văn bản thông thường thì có thể gửi cả ảnh, video hay file.

Tạo Telegram Bot

Telegram BotFather

Để tạo ra một Bot mới, bạn sử dụng ứng dụng Telegram trên điện thoại, máy tính, chuyển đến mục Tin nhắn Telegram Message iConrồi tìm botfather. Đây cũng là một bot, bạn bấm vào kết quả tìm được (có dấu tick xanh) để bắt đầu chat.

Telegram Create New Bot

Ta nhập /newbot rồi gửi tin nhắn để tạo bot mới.
Tiếp theo nhập tên cho bot này, ví dụ Home Assistant rồi gửi để đặt tên.

Cuối cùng là tạo tên người dùng – username cho bot, lưu ý tên phải không được trùng và phải kết thúc bằng bot hay Bot. Ở đây mình nhập một dãy số ngẫu nhiên để chắc chắn tên không trùng.

Nếu bạn làm sai và muốn làm lại, nhập /cancel để huỷ bỏ việc tạo bot.

Sau khi hoàn tất, bạn hãy copy API Token là phần chữ màu đỏ để sử dụng trong các bước sau.

Telegram Chat With Bot

Tiếp theo quay lại mục Tin nhắn và tìm kiếm bot vừa tạo bằng username đã nhập ở bước trước. Nếu quên, bạn quay lại tin nhắn với BotFather để copy.

Chỉ cần bấm Start hoặc gửi tin nhắn /start để bắt đầu chat với bot đã tạo. Bạn hãy gửi thêm một tin nhắn bất kì vào box chat này.
Từ giờ các thông báo đến từ bot vừa tạo sẽ xuất hiện ở đây.

Tiếp theo, ta cần lấy định danh – chatID của tin nhắn giữa bạn và bot đã tạo.
Truy cập địa chỉ sau trên trình duyệt, thay thế API_TOKEN bằng token đã copy ở các bước trước.

https://api.telegram.org/botAPI_TOKEN/getUpdates

Trình duyệt sẽ trả về kết quả như bên cạnh, bạn copy và giữ giá trị của khóa “id” trong khoá “chat“. Lưu ý có rất nhiều id, cần chọn cái chính xác như mô tả.

{“ok”:true,”result”:[{“update_id”:2104325657, “message”:{“message_id”:2,”from”:{“id”:445789876,”is_bot”:false,”first_name”:”Duy”,”last_name”:”Truong”,”username”:”dtqwej”,”language_code”:”en”},”chat“:{“id”:3324353079,”first_name”:”Duy”,”last_name”:”Truong”,”username”:”dtqwej”,”type”:”private”},”date”:1589171465,”text”:”Hi!”}}]}

update Retina Cập nhật ngày 24/07/2020 – Lấy chatid
Cập nhật cách lấy chatid

Nếu địa chỉ trên không cho ra chatid, bạn hãy thử dùng địa chỉ này:

https://api.telegram.org/botAPI_TOKEN/getMe

chatid cần tìm sẽ là giá trị của khoá id trong kết quả trả về.

Có thể bạn sẽ phải xoá hết các tin nhắn đã nhắn với bot rồi bắt đầu nhắn lại 1, 2 tin trước khi lấy được chatid.

Bạn cũng có thể lấy chatID bằng cách tìm và chat với bot @getidsbot, sử dụng câu lệnh /all.

Cấu hình telegram_bot trong Hass

Ta sẽ sử dụng API TokenchatID đã lấy ở bước trên trong cấu hình Telegram dưới đây. Mặc dù ở đây ta cấu hình trực tiếp trong file configuration.yaml, bạn có thể tách ra các file khác tuỳ cách quản lý của mình.
Mục platform: broadcast có thể được thay bằng platform: polling nếu muốn Hass nhận tin nhắn phản hồi từ Telegram. Ở đây ta chỉ gửi thông báo một chiều với platform: broadcast.

telegram_bot:
  - platform: broadcast
    api_key: API_TOKEN
    allowed_chat_ids:
      - CHAT_ID_1
 #     - CHAT_ID_2
 #     - CHAT_ID_3
Dịch vụ gửi thông báo Telegram

Sau khi khởi động lại Hass để khởi tạo integration telegram_bot, Hass sẽ tạo ra một loạt service bắt đầu bằng telegram_bot như trong ảnh.

Hass List Of Telegram Bot Services

Mỗi dịch vụ này chịu trách nhiệm gửi một loại nội dung hoặc thực hiện một tính năng khác nhau. Ví dụ với dịch send_message:

service: telegram_bot.send_message
data:
  title: "Home Assistant: Tin nhắn kiểm tra"
  message: "Thông báo gửi thành công đến Telegram."
  target: 3324353079
  parse_mode: html

Trong đó:

  • target: [chatID1,chatID2], để gửi thông báo đến nhiều chatID khác nhau. Nếu bỏ trống, thông báo sẽ được gửi đến CHAT_ID_1 trong cấu hình.
  • parse_mode: html (hoặc markdown), tuỳ chọn hiển thị kiểu html như sử dụng thẻ <b>nội dung</b> để in đậm, <i> và </i> để in nghiêng v.v.. Bạn xem thêm các thẻ html ở đây
  • disable_notification: true, tuỳ chọn gửi tin nhắn nhưng không hiện thông báo nếu bạn muốn gửi các tin nhắn không quan trọng hay tránh làm phiền

Với các service send_photo, send_videosend_document sẽ có thêm một số tuỳ chọn:

  • url: https://domain/image để gửi một ảnh, video hay file từ web, có địa chỉ https://domain/image (địa chỉ này cũng có thể từ Hass)
  • file: /local/file để gửi một ảnh, video hay file từ nơi lưu trữ trên máy chủ Hass
    /local/ mặc định dành cho các file nằm trong /config/www, nếu bạn gửi từ các thư mục khác thì cần thay đổi cho phù hợp, đôi khi cần thêm các thư mục này vào danh sách whitelist_external_dirs: để cho phép các thành phần trong Hass truy cập
  • và nhiều tuỳ chọn khác nhưng không quan trọng lắm

Nếu bạn muốn thuận tiện hơn khi gọi service thông báo Telegram, có thể cấu hình notify như sau:

notify:
  - name: Telegram_to_User
    platform: telegram
    chat_id: CHAT_ID_2

với name: tuỳ chọn. Sau đó bạn có thể gọi service: notify.Telegram_to_User để gửi thông báo Telegram đến CHAT_ID_2.

! Lưu ý về giới hạn số lượng thông báo

Tránh gửi nhiều hơn 1 tin nhắn/1 giây cho cho một chatID.
Nếu gửi cho nhiều chatID cùng lúc, giới hạn là khoảng 30 tin nhắn mỗi giây.
Khi gửi cho một group chat, giới hạn là 20 tin nhắn mỗi phút.

Một số automation mẫu sử dụng thông báo

Trong các bài viết trên konnectED.vn/home-assistant, mình thường sử dụng thông báo đến điện thoại qua Telegram, bạn có thể xem các automation đó trong các bài viết từ kết quả tìm kiếm cụm “thông báo” và “notify” tại đây.

Bên dưới là một số automation khác sử dụng cả thông báo đến ứng dụng Home Assistant và Telegram. Nếu sử dụng, bạn thay thế các tên service và data cho phù hợp với mình và xoá bỏ bớt action nếu chỉ sử dụng một platform.

Thông báo Hass khởi động xong

- id: '15590432423526184'
  alias: Hass Notify At Startup
  description: 'Thông báo sau khi Hass khởi động xong'
  trigger:
  - event: start
    platform: homeassistant
  condition: []
  action:
  - service: notify.mobile_app_konnectedvn
    data_template:
      title: 'Home Assistant: Khởi động xong'
      message: 'HASS has just started since {{now()}}'
  - service: telegram_bot.send_message
    data_template:
      message: 'HASS has just started since {{now()}}'
Hass Notification At Boot
Thông báo khi Hass hoàn tất khởi động

Thông báo khi xuất hiện lỗi

#điều chỉnh system_log
system_log:
  fire_event: true
- id: '15888152543'
  alias: Hass Notify When Error Log Occured
  description: Gửi thông báo khi có lỗi xảy ra
  trigger:
  - event_data:
      level: ERROR
    event_type: system_log_event
    platform: event
  condition: []
  action:
  #Send to Telegram or any notify platform
  - data_template:
      message: '{{trigger.event.data.name}} {{ ''\n'' -}} {{trigger.event.data.message}}'
      parse_mode: html
      title: '😱<b>Home Assistant</b>: Lỗi!'
    service: telegram_bot.send_message
  - data_template:
      message: '{{trigger.event.data.name}} {{ ''\n'' -}} {{trigger.event.data.message}}'
      title: '😱<b>Home Assistant</b>: Lỗi!'
    service: notify.mobile_app_konnected
Hass Telegram Message At Error
Thông báo bằng tin nhắn trên Telegram

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).