Проблема

SprutHub — отличный контроллер умного дома. Поддерживает кучу протоколов, интегрируется с HomeKit, работает стабильно. Но есть одна вещь, которой мне всегда не хватало — нормальных графиков.

Относительно не давно появились встроенные графики. Но они примерно на бесконечность проигрывают возможносостями grafana

SprutHub не даёт возможности нативно отправлять данные в какую-то БД. Никакой интеграции с Grafana из коробки. И это понятно — контроллер занимается автоматизацией, а не аналитикой. Но хотелось бы иметь и то, и другое.

Почему это важно

Я разработчик, и по работе постоянно имею дело с мониторингом. Prometheus, VictoriaMetrics, Grafana — это мои повседневные инструменты. И когда настраиваешь алерты для продакшн-систем, странно не иметь такого же контроля над собственным домом.

Grafana — это стандарт индустрии для визуализации метрик. Гибкие дашборды, мощные запросы, красивые графики. Почему бы не применить профессиональный подход к домашней автоматизации?

Собственно, этим я и занялся.

Решение

Идея простая: забирать данные из SprutHub и складывать их в базу данных для метрик. А потом визуализировать в Grafana.

Архитектура получилась такая:

SprutHub → Скрипты → InfluxDB/VictoriaMetrics → Grafana

Почему две базы данных? У каждой своя роль:

  • InfluxDB — хранит детальные данные за последний месяц. Высокая точность, быстрые запросы для недавних событий
  • VictoriaMetrics — долгосрочный архив на 5 лет. Агрегированные данные для трендов и сравнения год к году

Можно обойтись и одной базой, но такой подход даёт баланс между детализацией и объёмом хранения.

Преимущества

Что даёт такой подход:

  • Всё локально — данные никуда не уходят, нет зависимости от облачных сервисов
  • Работает офлайн — интернет не нужен, всё крутится на домашнем сервере
  • Нет лимитов — хранишь столько, сколько позволяет диск
  • Полный контроль — любые запросы, любые визуализации, любые алерты
  • Нет задержек — данные сразу попадают в базу, без внешних API
  • Любая визуализация - можно построить любой график на который вам хватит фантазии и скилов

Для запуска достаточно любого мини-ПК или даже Raspberry Pi.

Что можно мониторить

Практически любой датчик

  • Температура по комнатам
  • Влажность
  • Уровень CO2
  • Мгновенное энергопотребление (ватты)
  • Накопительное потребление (кВт·ч)
  • Освещённость
  • Качество воздуха (VOC)

И так далее — если датчик есть в SprutHub, его можно мониторить.

Пример запроса

Вот как выглядит запрос средней температуры по комнатам в InfluxDB:

SELECT mean("value") FROM "sensors"
WHERE ("type"::tag = 'TemperatureSensor') AND $timeFilter
GROUP BY time($__interval), "room"::tag

А в VictoriaMetrics на PromQL:

max by(room) (sensors_value{type="TemperatureSensor"})

Варианты того, что можно посчитать\посмотреть имея свою grafana

  • Средная температура по свех дачтиков
  • Можно построить график в котором будет сравниваться текущие показатели и за прошлый год. Это, кстати, одна из моих мотивации - прозводить как-то манипулации со своим домом и потом смотреть как это отражается на графиках. То есть не только ориентриовать на свои ощущения (не самый точный источник, но важный, конечно), но и на цифры

Так же с помощью графиков, а я находил какие-то странные аномалии и это в итоге оказывалась место для улучшения.

Полная документация с примерами запросов для разных типов датчиков — в репозитории.

Итоги

Профессиональный мониторинг умного дома — это вполне реально. Не нужно ждать, пока производитель добавит нужную функцию. Можно взять инструменты, которые уже работают в индустрии, и применить их дома.

Всё решение я выложил в открытый доступ:

Там есть готовые скрипты для SprutHub, Docker Compose файлы для быстрого запуска баз данных и Grafana, примеры дашбордов.

Если у вас SprutHub и вы хотите видеть историю своих датчиков — попробуйте. Настраивается за вечер.