---
title: "Tích hợp Home Assistant - Cảnh báo nhà thông minh"
sidebarTitle: Home Assistant
description: "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."
---

import { Step, Steps } from "fumadocs-ui/components/steps";

# Tích hợp Home Assistant

[Home Assistant](https://www.home-assistant.io/) 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](https://apps.apple.com/app/apple-store/id6743597198?pt=128151925&ct=docs-developer-home-assistant-vi&mt=8) / [Google Play](https://play.google.com/store/apps/details?id=one.echobell.echobellandroid) đã 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](/docs/template) cho thông báo của mình.

<Steps>
<Step>
### Lấy Webhook URL của Echobell

1. Mở ứng dụng Echobell và đi tới kênh của bạn
2. Chạm vào kênh để xem chi tiết
3. Tìm **Webhook URL** trong mục Triggers
4. Sao chép URL — nó sẽ có dạng: `https://hook.echobell.one/t/<channel-token>`
</Step>
<Step>

### 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`:

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

</Step>
<Step>
### 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ở:

```yaml
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') }}"
```

</Step>
<Step>
### 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.

</Step>
</Steps>

## 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`:

```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:

```yaml
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](/docs/notification) để gửi cảnh báo nhiệt độ nguy cấp dưới dạng cuộc gọi:

```yaml
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](/docs/notification) 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:

```yaml
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:

```yaml
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:

```yaml
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](/docs/conditions) để 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:

```yaml
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:

```yaml
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:

```yaml
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:

1. Chọn `rest_command.echobell_notify`
2. Nhập dữ liệu thử:

```yaml
title: "Test Notification"
message: "This is a test from Home Assistant"
```

3. Nhấn "Call Service"
4. 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:

```bash
# 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 `for` trong trigger để chống dội:

```yaml
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:

```yaml
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`:

```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:

```yaml
# 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

1. **Kiểm tra kết nối mạng**: Đảm bảo máy chủ Home Assistant của bạn ra được internet
2. **Kiểm tra lại webhook URL**: Sao chép và dán thật cẩn thận, gồm cả token
3. **Kiểm tra ứng dụng Echobell**: Đảm bảo bạn đã đăng ký kênh đó
4. **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:

1. Thử mẫu trong Developer Tools → Template
2. Đảm bảo tên biến khớp nhau giữa Home Assistant và Echobell
3. 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

1. Kiểm tra lại điều kiện kích hoạt trong Home Assistant
2. Chạy thử kịch bản tự động hóa thủ công từ Developer Tools
3. Kiểm tra trạng thái thực thể có khớp với cấu hình trigger không
4. 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:

```yaml
# 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](/docs/notification) cho những mức ưu tiên cảnh báo khác nhau
- Tìm hiểu về [điều kiện](/docs/conditions) để lọc thông báo một cách thông minh
- Xem [biến trong mẫu](/docs/template) để định dạng nội dung nâng cao
- Đọc [thực hành tốt nhất với webhook](/docs/webhook) để tích hợp tối ưu

## Tài nguyên liên quan

- [Tài liệu REST Command của Home Assistant](https://www.home-assistant.io/integrations/rest_command/)
- [Nền tảng RESTful Notify của Home Assistant](https://www.home-assistant.io/integrations/notify.rest/)
- [Tài liệu Webhook của Echobell](/docs/webhook)
- [Hệ thống mẫu của Echobell](/docs/template)
