Tích hợp Home Assistant - Cảnh báo nhà thông minh
Kết nối Home Assistant với Echobell để nhận cảnh báo nhà thông minh tức thì: an ninh, chuyển động, nhiệt độ và sự kiện tự động hóa qua thông báo đẩy hoặc cuộc gọi.
Home Assistant là một nền tảng tự động hóa nhà ở mã nguồn mở mạnh mẽ, đặt việc điều khiển cục bộ và quyền riêng tư lên hàng đầu. Bằng cách tích hợp Echobell với Home Assistant, bạn có thể nhận thông báo tức thì và thậm chí là cuộc gọi khi có sự kiện quan trọng xảy ra trong ngôi nhà thông minh của mình — dù đó là cảnh báo an ninh, nhiệt độ vượt ngưỡng hay một kịch bản tự động hóa được kích hoạt.
Hướng dẫn này sẽ dẫn bạn qua các bước thiết lập Echobell để nhận thông báo từ những kịch bản tự động hóa trong Home Assistant, bằng webhook hoặc dịch vụ RESTful Notify.
Yêu cầu
Trước khi bắt đầu, hãy chắc chắn bạn có:
- Ứng dụng Echobell / Google Play đã cài trên thiết bị di động
- Một kênh Echobell đang hoạt động (hãy tạo một kênh trong ứng dụng nếu bạn chưa có)
- Một máy chủ Home Assistant đang chạy (khuyên dùng phiên bản 2023.1 trở lên)
- Quyền truy cập cấu hình Home Assistant của bạn
Cách 1: Dùng kích hoạt bằng Webhook (khuyên dùng)
Cách dùng webhook là linh hoạt nhất, cho phép bạn gửi dữ liệu tùy ý và dùng biến trong mẫu cho thông báo của mình.
Lấy Webhook URL của Echobell
- Mở ứng dụng Echobell và đi tới kênh của bạn
- Chạm vào kênh để xem chi tiết
- Tìm Webhook URL trong mục Triggers
- Sao chép URL — nó sẽ có dạng:
https://hook.echobell.one/t/<channel-token>
Tạo một kịch bản tự động hóa trong Home Assistant
Trong Home Assistant, bạn có thể kích hoạt thông báo Echobell bằng dịch vụ rest_command. Trước tiên, thêm lệnh REST vào tệp configuration.yaml:
rest_command:
echobell_notify:
url: "https://hook.echobell.one/t/<channel-token>"
method: POST
content_type: "application/json"
payload: '{"title": "{{ title }}", "message": "{{ message }}"}'Thay YOUR_TOKEN bằng token webhook Echobell thật của bạn.
Sau khi thêm xong, hãy khởi động lại Home Assistant để nạp cấu hình mới.
Dùng trong tự động hóa
Giờ bạn có thể gọi dịch vụ này từ bất kỳ kịch bản tự động hóa nào. Đây là ví dụ thông báo cho bạn khi cửa mở:
automation:
- alias: "Door Open Alert"
trigger:
- platform: state
entity_id: binary_sensor.front_door
to: "on"
action:
- service: rest_command.echobell_notify
data:
title: "Security Alert"
message: "Front door opened at {{ now().strftime('%H:%M') }}"Cấu hình mẫu thông báo
Trong phần cài đặt kênh Echobell, hãy cấu hình mẫu thông báo để hiển thị dữ liệu từ webhook:
- Mẫu tiêu đề:
{{title}} - Mẫu nội dung:
{{message}}
Từ giờ, mỗi khi kịch bản tự động hóa chạy, bạn sẽ nhận được thông báo với tiêu đề và nội dung tùy chỉnh.
Cách 2: Dùng nền tảng RESTful Notify
Nếu muốn một cách tích hợp gọn gàng hơn, bạn có thể thiết lập Echobell thành một dịch vụ notify trong Home Assistant.
Cấu hình
Thêm đoạn sau vào configuration.yaml:
notify:
- name: echobell
platform: rest
resource: https://hook.echobell.one/t/<channel-token>
method: POST_JSON
data:
title: "{{ title }}"
message: "{{ message }}"
Thay YOUR_TOKEN bằng token webhook Echobell của bạn, rồi khởi động lại Home Assistant.
Dùng dịch vụ notify
Giờ bạn có thể dùng Echobell như bất kỳ dịch vụ notify nào khác:
automation:
- alias: "Low Battery Alert"
trigger:
- platform: numeric_state
entity_id: sensor.phone_battery
below: 20
action:
- service: notify.echobell
data:
title: "Low Battery Warning"
message: "Phone battery is at {{ states('sensor.phone_battery') }}%"
Trường hợp sử dụng nâng cao
Giám sát nhiệt độ với cảnh báo nguy cấp
Dùng các kiểu thông báo để gửi cảnh báo nhiệt độ nguy cấp dưới dạng cuộc gọi:
rest_command:
echobell_critical:
url: "https://hook.echobell.one/t/<channel-token>"
method: POST
content_type: "application/json"
payload: '{"temperature": "{{ temperature }}", "location": "{{ location }}", "severity": "critical"}'
Trong kênh Echobell, hãy đặt kiểu thông báo là "Cuộc gọi" và dùng mẫu này:
- Tiêu đề:
Critical Temperature Alert - Nội dung:
{{location}} temperature is {{temperature}}°C - Immediate attention required!
Tích hợp hệ thống an ninh
Thiết lập giám sát an ninh toàn diện:
automation:
- alias: "Security Breach Detection"
trigger:
- platform: state
entity_id:
- binary_sensor.motion_detector_1
- binary_sensor.motion_detector_2
- binary_sensor.window_sensor
to: "on"
condition:
- condition: state
entity_id: alarm_control_panel.home_alarm
state: "armed_away"
action:
- service: rest_command.echobell_notify
data:
title: "🚨 Security Alert"
message: "{{ trigger.to_state.attributes.friendly_name }} detected activity while system armed"
sensor: "{{ trigger.entity_id }}"
timestamp: "{{ now().isoformat() }}"
Thông báo từ thiết bị gia dụng thông minh
Theo dõi chu trình của thiết bị và nhận thông báo khi chúng hoàn tất:
automation:
- alias: "Washing Machine Complete"
trigger:
- platform: state
entity_id: sensor.washing_machine_power
to: "0"
for:
minutes: 3
action:
- service: notify.echobell
data:
title: "Washing Machine Done"
message: "Your laundry is ready to be moved to the dryer"
Giám sát môi trường
Theo dõi chất lượng không khí, độ ẩm hoặc các yếu tố môi trường khác:
automation:
- alias: "High CO2 Alert"
trigger:
- platform: numeric_state
entity_id: sensor.living_room_co2
above: 1000
action:
- service: rest_command.echobell_notify
data:
title: "Air Quality Warning"
message: "CO2 level in living room is {{ states('sensor.living_room_co2') }} ppm. Consider ventilating."
Dùng điều kiện để lọc thông minh
Bạn có thể dùng điều kiện của Echobell để lọc thông báo theo tiêu chí cụ thể. Ví dụ, chỉ thông báo vào một số khung giờ nhất định hoặc khi giá trị vượt ngưỡng:
Đặt một điều kiện trong kênh Echobell:
severity == "critical" || (hour >= 22 || hour <= 7)
Điều kiện này chỉ gửi thông báo nếu mức nghiêm trọng là critical HOẶC nếu đang là ban đêm (22 giờ đến 7 giờ).
Trong kịch bản tự động hóa của Home Assistant, hãy gửi kèm dữ liệu tương ứng:
action:
- service: rest_command.echobell_notify
data:
title: "Temperature Alert"
message: "Freezer temperature: {{ states('sensor.freezer_temp') }}°C"
severity: "{% if states('sensor.freezer_temp') | float > -10 %}critical{% else %}normal{% endif %}"
hour: "{{ now().hour }}"
Gửi dữ liệu cảm biến
Bạn có thể truyền bất kỳ dữ liệu cảm biến nào của Home Assistant vào thông báo Echobell:
rest_command:
echobell_sensor_update:
url: "https://hook.echobell.one/t/<channel-token>"
method: POST
content_type: "application/json"
payload: >
{
"sensor_name": "{{ sensor_name }}",
"current_value": "{{ current_value }}",
"unit": "{{ unit }}",
"state": "{{ state }}",
"timestamp": "{{ timestamp }}"
}
Xử lý HTTP header
Echobell có thể truy cập các HTTP header từ request webhook. Điều này hữu ích cho việc xác thực hoặc theo dõi:
rest_command:
echobell_with_headers:
url: "https://hook.echobell.one/t/<channel-token>"
method: POST
headers:
X-Home-Assistant-Instance: "{{ instance_name }}"
X-Automation-ID: "{{ automation_id }}"
content_type: "application/json"
payload: '{"message": "{{ message }}"}'
Trong mẫu Echobell, hãy truy cập header bằng:
{{header["x-home-assistant-instance"]}}
Gỡ lỗi và kiểm thử
Thử webhook của bạn
Dùng Developer Tools → Services của Home Assistant để thử cấu hình:
- Chọn
rest_command.echobell_notify - Nhập dữ liệu thử:
title: "Test Notification"
message: "This is a test from Home Assistant"
- Nhấn "Call Service"
- Kiểm tra ứng dụng Echobell xem thông báo đã tới chưa
Kiểm tra log Home Assistant
Nếu thông báo không tới, hãy kiểm tra log của Home Assistant:
# Trong Home Assistant, vào:
Settings → System → Logs
# Hoặc xem tệp log:
config/home-assistant.log
Hãy tìm các lỗi liên quan tới rest_command hoặc các HTTP request tới hook.echobell.one.
Kiểm tra lại webhook URL
Hãy đảm bảo webhook URL của bạn chính xác:
- Nó phải bắt đầu bằng
https://hook.echobell.one/t/ - Phải có token trong URL
- Không có khoảng trắng hay ký tự thừa
Lưu ý về hiệu năng
Giới hạn tần suất
Webhook của Echobell có giới hạn tần suất để chống lạm dụng. Với những cảm biến cập nhật liên tục:
- Tránh kích hoạt ở mỗi lần cảm biến cập nhật
- Dùng
fortrong trigger để chống dội:
trigger:
- platform: numeric_state
entity_id: sensor.temperature
above: 30
for:
minutes: 5 # Chỉ kích hoạt sau 5 phút liên tục vượt ngưỡng
Gộp các cập nhật
Với nhiều sự kiện liên quan tới nhau, hãy cân nhắc gộp chúng vào một thông báo duy nhất:
automation:
- alias: "Daily Home Summary"
trigger:
- platform: time
at: "09:00:00"
action:
- service: rest_command.echobell_notify
data:
title: "Morning Home Summary"
message: >
Temperature: {{ states('sensor.temperature') }}°C
Humidity: {{ states('sensor.humidity') }}%
Energy today: {{ states('sensor.daily_energy') }} kWh
Windows open: {{ expand(states.binary_sensor) | selectattr('state', 'eq', 'on') | selectattr('attributes.device_class', 'eq', 'window') | list | count }}
Thực hành bảo mật tốt nhất
Bảo vệ webhook URL của bạn
- Không bao giờ đưa webhook URL lên kho mã nguồn công khai
- Dùng secrets của Home Assistant cho dữ liệu nhạy cảm
- Định kỳ đổi mới token webhook
Dùng secrets trong configuration.yaml:
# secrets.yaml
echobell_webhook: "https://hook.echobell.one/t/<channel-token>"
# configuration.yaml
rest_command:
echobell_notify:
url: !secret echobell_webhook
method: POST
content_type: "application/json"
payload: '{"title": "{{ title }}", "message": "{{ message }}"}'
Hạn chế thông tin nhạy cảm
Hãy cẩn trọng với dữ liệu bạn đưa vào thông báo:
# Nên - Thông tin chung chung
message: "Motion detected in living room"
# Tránh - Chi tiết nhạy cảm
message: "Security code: 1234, camera feed: http://..."
Xử lý các sự cố thường gặp
Không nhận được thông báo
- Kiểm tra kết nối mạng: Đảm bảo máy chủ Home Assistant của bạn ra được internet
- Kiểm tra lại webhook URL: Sao chép và dán thật cẩn thận, gồm cả token
- Kiểm tra ứng dụng Echobell: Đảm bảo bạn đã đăng ký kênh đó
- Xem lại log Home Assistant: Tìm các lỗi HTTP hoặc timeout
Lỗi mẫu
Nếu mẫu không hiển thị đúng:
- Thử mẫu trong Developer Tools → Template
- Đảm bảo tên biến khớp nhau giữa Home Assistant và Echobell
- Kiểm tra lỗi gõ trong cú pháp mẫu: phải là
{{variable}}chứ không phải{{ variable}}
Tự động hóa không chạy
- Kiểm tra lại điều kiện kích hoạt trong Home Assistant
- Chạy thử kịch bản tự động hóa thủ công từ Developer Tools
- Kiểm tra trạng thái thực thể có khớp với cấu hình trigger không
- Xem lại trace của tự động hóa để gỡ lỗi
Ví dụ: Thiết lập hệ thống an ninh hoàn chỉnh
Đây là một ví dụ đầy đủ tích hợp nhiều cảm biến an ninh:
# configuration.yaml
rest_command:
echobell_security:
url: !secret echobell_security_webhook
method: POST
content_type: "application/json"
payload: >
{
"event_type": "{{ event_type }}",
"location": "{{ location }}",
"sensor": "{{ sensor }}",
"timestamp": "{{ timestamp }}",
"alarm_state": "{{ alarm_state }}"
}
# automations.yaml
- alias: "Security Event Handler"
trigger:
- platform: state
entity_id:
- binary_sensor.front_door
- binary_sensor.back_door
- binary_sensor.garage_door
- binary_sensor.motion_hallway
- binary_sensor.motion_living_room
to: "on"
action:
- service: rest_command.echobell_security
data:
event_type: "{{ 'door' if 'door' in trigger.entity_id else 'motion' }}"
location: "{{ trigger.to_state.attributes.friendly_name }}"
sensor: "{{ trigger.entity_id }}"
timestamp: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
alarm_state: "{{ states('alarm_control_panel.home_alarm') }}"
Trong Echobell, hãy đặt mẫu như sau:
- Tiêu đề:
Security Alert: {{event_type | upper}} - Nội dung:
{{location}} activated at {{timestamp}} (Alarm: {{alarm_state}})
Bước tiếp theo
Giờ bạn đã tích hợp xong Echobell với Home Assistant:
- Khám phá các kiểu thông báo cho những mức ưu tiên cảnh báo khác nhau
- Tìm hiểu về điều kiện để lọc thông báo một cách thông minh
- Xem biến trong mẫu để định dạng nội dung nâng cao
- Đọc thực hành tốt nhất với webhook để tích hợp tối ưu