В статье о том, как установить influxDB для хранения в ней данных из Home Assistant, я не раз употреблял о Retention Policy. Пришло время объяснить, что это такое и как это может позволить хранить необходимые данные продолжительное количество времени.
Если просто, то Retention Policy - это правила, определяющие длительность хранения данных в базе данных. Причем для одной базы данных таких правил может быть несколько. Какие-то данные мы храним неделю, какие-то месяц, а какие-то вообще годы. И все в одной базе данных.
Приступим
Для начала создадим необходимое количество таких правил и установим необходимые сроки хранения. Открываем вэб-интерфейс аддона InfluxDB, в левом меню выбираем InfluxDB Admin и на вкладке Databases подводим курсор к нашей Базе данных и появляется кнопка Add Retention Policy. Нажимаем ее и задаем длительность хранения данных и наименование политики.
Тут есть одна проблема, с которой я столкнулся, возможно, что-то не так понял или не нашел, но не могу задать длительность хранения 1 месяц или 1 год. Все потому что количество дней в месяце может быть разное, как и различие количества дней в високосном и невисокосном году, а все значения пересчитываются именно в дни. Я свыкся с этим, но кому-то это может оказаться критично.
Следующий шаг - создать необходимые Continuous Query
Continuous Query - это механизм автоматического создания запросов через указанные промежутки времени. При этом результаты такого запроса могут быть записаны в другой Retention Policy с другим временем хранения. Для чего это нужно? Например, можно создать запрос на показания датчика температуры за последний час и записываем его в новый Retention Policy с более длительным сроком хранения, например, месяц. Дневные данные с датчика можно хранить год, а недельные - вообще бесконечно. Тут вы сами должны решить, как именно и сколько хранить данные с определенных датчиков. Единственное, нужно понимать, что в БД они объединены по единицам измерения, поэтому если нужно конкретное правило для какого-то датчика, а не для всех датчиков температуры, то ему придется переписывать measurement, но это частный случай и мне такого делать не приходилось.
Как создать Continuous Query?
Я не знаю, возможно ли это сделать через вэб-интерфейс, вполне возможно, что да, но мне было удобнее сделать это через консоль. Для доступа к консоли InfluxDB необходимо подключиться к контейнеру с одноименным аддоном. Сделаем это через вэб-интерфейс Portainer.
Находим искомый контейнер и нажимаем >_Console
Нажимаем Connect
И вот мы попадаем в консоль нашего аддона. Теперь необходимо подключиться к influxDB для этого вводим:
influx
Далее необходимо авторизоваться:
auth
Имя пользователя и пароль вводите те, которые задавали ранее для пользователя через вэб-интерфейс.
Далее подключаемся к интересующей нас базе данных.
use homeassistant
Посмотрим, какие уже Continuous Query созданы на сервере
show continuous queries
Как видно на скриншоте, у меня уже создано достаточно большое количество таких запросов, на скриншоте поместились далеко не все, ну что ж, создадим новый запрос.
Создание запроса
Для примера возьмем значения потребления электричества c единицей измерения KWt. Значения счетчика будем хранить в течение одного года, группируя данные в течение одной минуты. Это всего лишь пример - вы можете выбрать другие критерии.
Тогда наш запрос будет выглядеть следующим образом:
CREATE CONTINUOUS QUERY cq_year_KWt ON homeassistant BEGIN SELECT mean(value) INTO homeassistant.year.KWt FROM homeassistant.autogen.KWt GROUP BY time(1m), entity_id fill(previous) END
где cq_year_KWt - наименование запроса;
homeassistant - база данных;
homeassistant.year и homeassistant.autogen - наименование Retention Policy.
При успехе вы сможете увидеть новый запрос по команде show continuous queries. Вот мой вывод этой команды, новый запрос отображается в самом низу.
Если в единицах измерения есть символы вроде /, * и так далее, то необходимо заключить всю единицу измерения в кавычки, например так:
CREATE CONTINUOUS QUERY cq_infinity_KWth ON homeassistant BEGIN SELECT mean(value) INTO homeassistant.infinite. "KWt*h" FROM homeassistant.autogen. "KWt*h" GROUP BY time(1d), entity_id fill(previous) END
Далее нужно немного подождать, чтобы успели накопиться данные, а потом уже можно смотреть что получилось в вэб-интерфейсе influxdb на вкладке explorer.
На скриншоте видно, что выбрана Retention Policy homeassistant.year, данные в которой хранятся год, и выбрана единица измерения KWt, что соответствует нашему запросу.
Немного фантазии и подобное можно сделать и с остальными важными данными, причем настроить можно довольно гибко.
В следующий раз я расскажу, как подключить Grafana к InfluxDB для отображения красивых графиков, в том числе в интерфейсе Home Assistant.
Подписывайтесь на мой канал, чтобы не пропустить обновления.
#умный дом #smart home #home assistant #influxdb #database #базы данных #метрики #интернет вещей #технологии