Интеграция с Home Assistant — оповещения умного дома

Подключите Home Assistant к Echobell и получайте мгновенные оповещения умного дома: события охраны, движения, температуры и автоматизаций в виде push-уведомлений или звонков.


Home Assistant — мощная платформа домашней автоматизации с открытым исходным кодом, в которой на первом месте локальное управление и приватность. Подключив Echobell к Home Assistant, вы будете получать мгновенные уведомления и даже звонки, когда в умном доме происходит что-то важное: сработала охрана, температура вышла за порог или запустился триггер автоматизации.

Это руководство описывает, как настроить Echobell на приём уведомлений от автоматизаций Home Assistant через вебхуки или сервис RESTful Notify.

Предварительные требования

Перед началом убедитесь, что у вас есть:

  • Приложение Echobell / Google Play, установленное на мобильном устройстве
  • Активный канал Echobell (создайте его в приложении, если ещё не создали)
  • Запущенный экземпляр Home Assistant (рекомендуется версия 2023.1 или новее)
  • Доступ к конфигурации Home Assistant

Способ 1: вебхук-триггеры (рекомендуется)

Вебхук — самый гибкий вариант: он позволяет передавать произвольные данные и использовать переменные шаблонов в уведомлениях.

Получите URL вебхука Echobell

  1. Откройте приложение Echobell и перейдите к своему каналу
  2. Нажмите на канал, чтобы открыть сведения
  3. Найдите URL вебхука в разделе Triggers
  4. Скопируйте URL — он выглядит так: https://hook.echobell.one/t/<channel-token>

Создайте автоматизацию в Home Assistant

В Home Assistant уведомления Echobell можно отправлять через сервис rest_command. Сначала добавьте REST-команду в 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 }}"}'

Замените YOUR_TOKEN на ваш реальный токен вебхука Echobell.

После этого перезапустите Home Assistant, чтобы загрузить новую конфигурацию.

Использование в автоматизациях

Теперь этот сервис можно вызвать из любой автоматизации. Пример уведомления об открытии двери:

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

Настройте шаблоны уведомлений

В настройках канала Echobell задайте шаблоны уведомлений, чтобы выводить данные из вебхука:

  • Шаблон заголовка: {{title}}
  • Шаблон текста: {{message}}

Теперь при срабатывании автоматизации вы получите уведомление с заданными заголовком и текстом.

Способ 2: платформа RESTful Notify

Для более тесной интеграции можно подключить Echobell как сервис уведомлений (notify) в Home Assistant.

Конфигурация

Добавьте в configuration.yaml следующее:

notify:
  - name: echobell
    platform: rest
    resource: https://hook.echobell.one/t/<channel-token>
    method: POST_JSON
    data:
      title: "{{ title }}"
      message: "{{ message }}"

Замените YOUR_TOKEN на токен вебхука Echobell и перезапустите Home Assistant.

Использование сервиса notify

Теперь Echobell можно использовать как любой другой сервис уведомлений:

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

Продвинутые сценарии

Мониторинг температуры с критическими оповещениями

Используйте типы уведомлений, чтобы отправлять критические оповещения о температуре звонком:

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"}'

В канале Echobell установите тип уведомления «Звонок» и используйте такой шаблон:

  • Заголовок: Critical Temperature Alert
  • Текст: {{location}} temperature is {{temperature}}°C - Immediate attention required!

Интеграция с системой охраны

Настройте полноценный охранный мониторинг:

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() }}"

Уведомления от бытовой техники

Следите за циклами работы техники и узнавайте об их завершении:

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"

Мониторинг среды

Отслеживайте качество воздуха, влажность и другие параметры окружающей среды:

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

Умная фильтрация через условия

С помощью условий Echobell можно фильтровать уведомления по нужным критериям — например, уведомлять только в определённое время суток или когда значения превышают порог:

Задайте условие в канале Echobell:

severity == "critical" || (hour >= 22 || hour <= 7)

Уведомление отправится, только если severity равен critical ИЛИ сейчас ночь (с 22:00 до 7:00).

В автоматизации Home Assistant передайте нужные данные:

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 }}"

Передача данных с датчиков

В уведомления Echobell можно передавать любые данные датчиков Home Assistant:

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 }}"
      }

Работа с HTTP-заголовками

Echobell читает HTTP-заголовки запросов вебхука. Это удобно для аутентификации или трассировки:

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 }}"}'

В шаблоне Echobell обращайтесь к заголовкам так:

{{header["x-home-assistant-instance"]}}

Отладка и тестирование

Проверьте вебхук

Проверьте конфигурацию через Developer Tools → Services в Home Assistant:

  1. Выберите rest_command.echobell_notify
  2. Введите тестовые данные:
title: "Test Notification"
message: "This is a test from Home Assistant"
  1. Нажмите «Call Service»
  2. Проверьте, пришло ли уведомление в приложение Echobell

Проверьте логи Home Assistant

Если уведомления не приходят, посмотрите логи Home Assistant:

# In Home Assistant, go to:
Settings System Logs

# Or check the log file:
config/home-assistant.log

Ищите ошибки, связанные с rest_command или HTTP-запросами к hook.echobell.one.

Проверьте URL вебхука

Убедитесь, что URL вебхука указан верно:

  • Он должен начинаться с https://hook.echobell.one/t/
  • Токен должен быть на месте
  • Без лишних пробелов и символов

Что учитывать по производительности

Ограничение частоты

Для вебхуков Echobell действуют ограничения по частоте запросов — это защита от злоупотреблений. Для датчиков с частыми обновлениями:

  • Не отправляйте уведомление при каждом обновлении датчика
  • Используйте for в триггерах, чтобы подавить дребезг:
trigger:
  - platform: numeric_state
    entity_id: sensor.temperature
    above: 30
    for:
      minutes: 5 # Only trigger after 5 minutes above threshold

Объединение обновлений

Несколько связанных событий имеет смысл объединить в одно уведомление:

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 }}

Рекомендации по безопасности

Защитите URL вебхука

  • Никогда не публикуйте URL вебхуков в открытых репозиториях
  • Храните чувствительные данные в secrets Home Assistant
  • Периодически меняйте токены вебхуков

Использование secrets в 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 }}"}'

Ограничьте объём чувствительных данных

Следите за тем, какие данные попадают в уведомления:

# Good - General information
message: "Motion detected in living room"

# Avoid - Sensitive details
message: "Security code: 1234, camera feed: http://..."

Решение типичных проблем

Уведомления не приходят

  1. Проверьте сеть: у экземпляра Home Assistant должен быть доступ в интернет
  2. Проверьте URL вебхука: скопируйте его целиком, вместе с токеном
  3. Проверьте приложение Echobell: убедитесь, что вы подписаны на канал
  4. Просмотрите логи Home Assistant: ищите ошибки HTTP или таймауты

Ошибки в шаблонах

Если шаблоны подставляются неверно:

  1. Проверьте шаблоны в Developer Tools → Template
  2. Убедитесь, что имена переменных совпадают в Home Assistant и Echobell
  3. Проверьте синтаксис на опечатки: {{variable}}, а не {{ variable}}

Автоматизация не срабатывает

  1. Проверьте условия триггера в Home Assistant
  2. Запустите автоматизацию вручную из Developer Tools
  3. Убедитесь, что состояния сущностей соответствуют настройкам триггера
  4. Изучите трассировки автоматизации

Пример: полная настройка охранной системы

Развёрнутый пример с несколькими охранными датчиками:

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

В Echobell задайте шаблоны:

  • Заголовок: Security Alert: {{event_type | upper}}
  • Текст: {{location}} activated at {{timestamp}} (Alarm: {{alarm_state}})

Дальнейшие шаги

Теперь, когда Echobell подключён к Home Assistant:

Полезные ресурсы