Графики умного дома Яндекса в 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:
- Если вы используете Home Assistant OS, перейдите в Магазин дополнений (Add-on Store), найдите InfluxDB и нажмите Установить.
- Запустите дополнение и откройте его веб-интерфейс (порт
8086). - Пройдите процедуру первичной инициализации: укажите имя организации (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 к базе данных
Теперь настроим систему визуализации:
- Установите аддон Grafana через магазин дополнений Home Assistant (или запустите Docker-контейнер
grafana/grafana). - Откройте интерфейс Grafana, перейдите в раздел Connections -> Data Sources и нажмите Add data source.
- Выберите тип базы данных InfluxDB.
- В поле запросов укажите язык Flux (современный язык запросов для InfluxDB v2).
- В поле URL укажите адрес базы данных:
http://192.168.1.15:8086. - Заполните параметры авторизации: Organization, Token и Default Bucket. Нажмите Save & test. Grafana должна подтвердить успешное подключение к базе.
Шаг 4. Построение дашбордов и графиков
Создадим первую визуализацию температуры в комнатах:
- Перейдите в раздел Dashboards -> New Dashboard -> Add visualization.
- В редакторе запросов на языке 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")
- На правой панели настроек выберите тип графика (Time series), задайте цвета, интерполяцию линий (Smooth) и единицы измерения температуры (
Celsius). - Нажмите Apply для добавления панели на ваш рабочий дашборд.
Оптимизация хранения данных (Retention Policy)
Базы данных временных рядов могут накапливать огромные архивы. Для оптимизации используйте правила очистки (Retention Policies). В настройках ведра (Bucket) в InfluxDB установите срок хранения данных в 30 дней или 90 дней. Это автоматически удалит старые подробные записи, предотвращая переполнение системного диска вашего сервера.
TIP
Для долгосрочного хранения (годы) настройте в InfluxDB задачу сбора статистики (Downsampling), которая будет усреднять ежеминутные показатели датчиков до среднечасовых и записывать их в отдельное ведро с бесконечным сроком хранения.
Инструкция по настройке
Развертывание СУБД InfluxDB
Установите базу данных InfluxDB через магазин дополнений Home Assistant Supervisor или в виде отдельного Docker-контейнера.
Конфигурация экспорта в YAML
Настройте интеграцию influxdb в файле configuration.yaml, указав адрес сервера, токен авторизации и список экспортируемых датчиков.
Подключение Grafana
Установите веб-панель Grafana, добавьте InfluxDB в качестве источника данных и протестируйте корректность соединения по протоколу Flux.
Создание графиков и панелей
Создайте новый дашборд в Grafana, напишите Flux-запросы к базе данных и настройте визуализацию климатических показателей.