Найти в Дзене
DigitalComfort

Изучаем историю данных в БД Home Assistant с помощью phpMyAdmin

В общем случае вопрос базы данных Home Assistant пользователя волновать не должен. Это "недра" системы, и вмешательство в её структуру не является частью предусмотренного пользовательского взаимодействия. Однако Home Assistant, как любой другой программный продукт, не идеален. Да и кейсы его использования могут иногда немного не совпадать с тем, что предполагали разработчики системы. Например, по умолчанию Home Assistant хранит историю данных с датчиков всего в течение 10 дней. Есть, конечно, ещё и понятие долгосрочной статистики, которая хранится в БД без ограничений по времени, но это уже не точные исходные данные, а некое усреднение по времени, отражающее лишь общую картину. Мне десяти дней оказалось совсем мало, и я вначале увеличил время хранения до одного года. Через какое-то время Home Assistant начал подтормаживать и постепенно стал работать всё медленнее и медленнее. Я снизил время хранения сначала до полугода, а потом и до трёх месяцев. Это помогло лишь отчасти, и прежней ско
Оглавление

В общем случае вопрос базы данных Home Assistant пользователя волновать не должен. Это "недра" системы, и вмешательство в её структуру не является частью предусмотренного пользовательского взаимодействия.

Однако Home Assistant, как любой другой программный продукт, не идеален. Да и кейсы его использования могут иногда немного не совпадать с тем, что предполагали разработчики системы.

Например, по умолчанию Home Assistant хранит историю данных с датчиков всего в течение 10 дней. Есть, конечно, ещё и понятие долгосрочной статистики, которая хранится в БД без ограничений по времени, но это уже не точные исходные данные, а некое усреднение по времени, отражающее лишь общую картину.

Мне десяти дней оказалось совсем мало, и я вначале увеличил время хранения до одного года. Через какое-то время Home Assistant начал подтормаживать и постепенно стал работать всё медленнее и медленнее. Я снизил время хранения сначала до полугода, а потом и до трёх месяцев. Это помогло лишь отчасти, и прежней скорости работы я так и не достиг.

Тогда я принял решение о переходе на MariaDB, и это решило проблему медленной работы системы. О том, как я осуществлял этот переход, я рассказывал здесь:

Установка MariaDB, которая является MySQL-совместимой СУБД, позволила использовать популярный инструмент администрирования баз данных phpMyAdmin. Не могу сказать, что phpMyAdmin - это большая необходимость для Home Assistant, но иногда он бывает полезен. Конечно же, я не занимаюсь тем, чтобы постоянно контролировать БД Home Assistant и что-то там править. Просто под рукой есть инструмент, к которому можно прибегнуть в случае необходимости. И такие необходимости изредка, но возникают.

Установка phpMyAdmin

Аддон phpMyAdmin устанавливается как и любое другое дополнение. В меню "Настройки" -> "Дополнения" -> "Магазин дополнений" находим его и выбираем:

-2

Нажимаем "Установить":

-3

У меня загрузка и установка на Raspberry Pi3 заняла около полутора минут. Далее я обычно всегда включаю вотчдог и автозагрузку, но в данном случае это делать не обязательно, если вы не планируете постоянно админить БД. Запускать это дополнение можно вручную только тогда, когда в нём есть необходимость. Показ на боковой панели - это просто удобный доступ к интерфейсу, я его обычно тоже всегда включаю:

-4

Через несколько секунд дополнение запустится:

-5

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

-6

Через пару минут можно повторить попытку открытия веб-интерфейса, и если на этот раз ошибка 502 уже не отображается, и вы просто видите белое поле, то нужно ещё немного подождать - интерфейс загружается не быстро. Через несколько секунд он должен отобразиться:

-7

Всё, дополнение установлено и работает. Можно управлять базой данных.

Структура базы данных Home Assistant

Слева в меню phpMyAdmin отображается дерево структуры БД. Нас здесь интересует база данных homeassistant. При нажатии на эту ветку раскроется список таблиц нашей БД. Иногда бывает ошибка интерфейса, и дерево не раскрывается. Обычно для исправления этой проблемы достаточно обновить страницу браузера, и ветка раскроется.

Первая таблица, которая нам будет интересна, это states_meta:

-8

В этой таблице хранятся имена всех сущностей Home Assistant - автоматизаций, скриптов, сенсоров, кнопок, устройств, геозон и тому подобного. Каждой сущности в колонке metadata_id присвоен уникальный идентификатор, на который будут ссылаться записи в других таблицах.

Если нас интересуют данные с какого-то конкретного датчика, то сначала нужно узнать его идентификатор metadata_id. Поначалу таблица states_meta небольшая и можно просто пролистать несколько страниц и найти имя датчика глазами. Но со временем эта таблица разрастается, и поиск становится возможен только через SQL-запрос.

Для начала в интерфейсе Home Assistant выясним имя сущности датчика, зайдя в его настройки:

-9

Копируем имя идентификатора объекта в буфер обмена, в моём случае это "sensor.sensor_temp_pushok_1_temperature".

Теперь возвращаемся в phpMyAdmin и открываем таблицу states_meta. Переходим на вкладку SQL, там уже будет введён шаблон SQL-запроса, который нам нужно будет немного отредактировать:

-10

Справа от поля редактирования запроса есть список полей (колонок) текущей таблицы (выделенной в дереве структуры БД). Двойной щелчок по имени поля вводит это имя в текст запроса, это удобно, не ошибёшься в имени. Редактируем запрос, заменив единичку в шаблоне на имя поля "entity_id" и приписав после этого = "sensor.sensor_temp_pushok_1_temperature" (можно использовать двойные или одинарные кавычки):

-11

После этого нажимаем кнопку "Вперёд":

-12

И получаем результат выполнения запроса:

-13

Идентификатор нашего датчика (metadata_id) в базе данных равен 2420. Теперь можно получить историю изменений данных с этого датчика. Эта информация сохраняется в самую большую таблицу БД - states. Открыв её в дереве структуры БД, перейдём на вкладку SQL и сформируем вот такой запрос:

-14

Нажав кнопку "Вперёд", получим выборку данных только для этого датчика:

-15

Значения хранятся в поле state. Кнопками "Изменить", "Копировать" и "Удалить" можно редактировать записи БД без SQL-запросов. Таким образом из истории можно, например, удалить ошибочные данные, которые портят статистику, или скорректировать какие-то значения. Ну будьте внимательны, кнопки "Отмена" или "Назад" нет, все действия необратимы.

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