Поиск по базе знаний

Графики умного дома Яндекса в Grafana через базу Home Assistant

Экосистема умного дома позволяет собирать колоссальные объемы телеметрии: показания датчиков температуры, влажности, уровня освещенности, углекислого газа и энергопотребления розеток. Home Assistant по умолчанию сохраняет всю эту историю в локальную реляционную базу данных SQLite. Однако эта база не оптимизирована для долгосрочного хранения миллионов точек временных рядов (time-series data). При росте объема данных интерфейс начинает тормозить, а файл базы данных home-assistant_v2.db разрастается до десятков гигабайт.

Для решения этой проблемы используется стек профессиональной аналитики: база данных временных рядов InfluxDB и аналитическая панель визуализации Grafana. В этой инструкции мы разберем, как экспортировать показания датчиков (включая устройства, проброшенные из Яндекса) из Home Assistant в InfluxDB и настроить информативные графики в Grafana для анализа работы вашего умного дома.

Архитектура сбора данных: HA, InfluxDB и Grafana

Когда датчик обновляет свое значение, Home Assistant перехватывает это событие через шину событий (Event Bus) и мгновенно отправляет HTTP-запрос с новыми данными на порт 8086 сервера InfluxDB.

[ Сенсор ] -> [ Home Assistant ] -> (HTTP POST /write) -> [ InfluxDB ] -> [ Grafana ]

Благодаря высокой оптимизации InfluxDB, запись миллиардов точек данных происходит с минимальной нагрузкой на процессор и жесткий диск. Grafana подключается к InfluxDB в качестве визуального фронтенда, позволяя строить графики с фильтрацией, группировкой по времени и интерполяцией пропущенных значений.

IMPORTANT

Для серверов, работающих на картах памяти MicroSD (например, Raspberry Pi), постоянная запись логов в SQLite является основной причиной быстрого износа и выхода флеш-карты из строя. Перенос истории в InfluxDB на внешний жесткий диск или сетевое хранилище (NAS) спасает систему от внезапного краха.

Шаг 1. Установка и первоначальная настройка InfluxDB

В зависимости от вашего типа установки Home Assistant (OS/Supervised или Core в Docker), разверните контейнер InfluxDB:

  1. Если вы используете Home Assistant OS, перейдите в Магазин дополнений (Add-on Store), найдите InfluxDB и нажмите Установить.
  2. Запустите дополнение и откройте его веб-интерфейс (порт 8086).
  3. Пройдите процедуру первичной инициализации: укажите имя организации (Organization), имя ведра для данных (Bucket, например, homeassistant) и скопируйте сгенерированный административный токен доступа (API Token). Этот токен понадобится для авторизации со стороны Home Assistant.

Шаг 2. Конфигурация экспорта данных в configuration.yaml

Чтобы связать Home Assistant с базой данных, настроим отправку метрик. Подробнее о сборе и синхронизации истории датчиков между экосистемами можно прочитать в статье об истории датчиков Яндекса.

Откройте ваш файл configuration.yaml и добавьте блок конфигурации интеграции InfluxDB:

influxdb:
  api_version: 2
  ssl: false
  host: 192.168.1.15
  port: 8086
  token: "ВАШ_СКОПИРОВАННЫЙ_ТОКЕН_ДОСТУПА_API"
  organization: "my-home"
  bucket: "homeassistant"
  tags:
    source: homeassistant
  include:
    domains:
      - sensor
      - binary_sensor

Мы ограничили экспорт только доменами sensor и binary_sensor, чтобы исключить отправку лишней информации о переключателях и плеерах. Сохраните конфигурацию и перезапустите Home Assistant.

WARNING

Не экспортируйте сущности с часто обновляемыми техническими атрибутами (например, время работы или системный пинг), так как это приведет к избыточному забиванию дискового пространства нерелевантными метриками.

Шаг 3. Установка и подключение Grafana к базе данных

Теперь настроим систему визуализации:

  1. Установите аддон Grafana через магазин дополнений Home Assistant (или запустите Docker-контейнер grafana/grafana).
  2. Откройте интерфейс Grafana, перейдите в раздел Connections -> Data Sources и нажмите Add data source.
  3. Выберите тип базы данных InfluxDB.
  4. В поле запросов укажите язык Flux (современный язык запросов для InfluxDB v2).
  5. В поле URL укажите адрес базы данных: http://192.168.1.15:8086.
  6. Заполните параметры авторизации: Organization, Token и Default Bucket. Нажмите Save & test. Grafana должна подтвердить успешное подключение к базе.

Шаг 4. Построение дашбордов и графиков

Создадим первую визуализацию температуры в комнатах:

  1. Перейдите в раздел Dashboards -> New Dashboard -> Add visualization.
  2. В редакторе запросов на языке Flux напишите простой запрос для извлечения температуры:
from(bucket: "homeassistant")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "°C")
  |> filter(fn: (r) => r["entity_id"] == "sensor.bedroom_temperature")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")
  1. На правой панели настроек выберите тип графика (Time series), задайте цвета, интерполяцию линий (Smooth) и единицы измерения температуры (Celsius).
  2. Нажмите Apply для добавления панели на ваш рабочий дашборд.

Оптимизация хранения данных (Retention Policy)

Базы данных временных рядов могут накапливать огромные архивы. Для оптимизации используйте правила очистки (Retention Policies). В настройках ведра (Bucket) в InfluxDB установите срок хранения данных в 30 дней или 90 дней. Это автоматически удалит старые подробные записи, предотвращая переполнение системного диска вашего сервера.

TIP

Для долгосрочного хранения (годы) настройте в InfluxDB задачу сбора статистики (Downsampling), которая будет усреднять ежеминутные показатели датчиков до среднечасовых и записывать их в отдельное ведро с бесконечным сроком хранения.

Инструкция по настройке

1

Развертывание СУБД InfluxDB

Установите базу данных InfluxDB через магазин дополнений Home Assistant Supervisor или в виде отдельного Docker-контейнера.

2

Конфигурация экспорта в YAML

Настройте интеграцию influxdb в файле configuration.yaml, указав адрес сервера, токен авторизации и список экспортируемых датчиков.

3

Подключение Grafana

Установите веб-панель Grafana, добавьте InfluxDB в качестве источника данных и протестируйте корректность соединения по протоколу Flux.

4

Создание графиков и панелей

Создайте новый дашборд в Grafana, напишите Flux-запросы к базе данных и настройте визуализацию климатических показателей.