• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

Очистка (удаление) данных показаний датчиков в Home Assistant.

21 апреля, 2022

 

Сервер Home Assistant работает на orange pi zero2: http://alii.pub/68uelr

Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.

 

Проблема заключается в следующем. Иногда например когда я занимался отладкой показаний датчика TVOC, мне было не очень удобно это делать. Так-как например он показывал в среднем 10-20 ppb и график строился довольно интересно. Но как только я поднес к нему спирт, то показания зашкалили до уровня 99999 ppb и следовательно график весь мой очень сильно уменьшил свою амплитуду. Так как сначала он строился на по шкале 20ppb и отклонения в 10 ppb были явно выражены и динамика прослеживалась хорошо. Но как только график стал с самой высокой точкой в 99999 ppb. Заметить глазом разницу 20-10 ppb между собой практически перестало быть возможным. Вот пример большого разброса:

А вот показания какие хотелось бы видеть, пример:

 

Вот из-за этой проблемы я и стал думать, как можно обнулить все значения, чтоб график снова был удобочитаемый.

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

Для этого сначала для удобства надо скачать addon под названием SQLite Web. Он находится в магазине стандартных addonов. Просто находим его, устанавливаем и запускаем.

Далее, после запуска аддона в нем же появится кнопка “ВЭБ интерфейс” жмякаем ее и попадаем в новое окно.

 

 

В открывшемся окне выбираем “events”

Далее выбираем вкладку “Query”

 

Ну и здесь уже непосредственно идут запросы для БД.

Например мы хотим удалить значения у датчика “sensor.sgp30_tvoc”. То делаем такой запрос:

SELECT *
FROM “states”
where entity_id=’sensor.sgp30_tvoc’

Ну и после написания запроса нажимаем кнопочку “Execute” и нам должно выдать Results. Собственно мы там видим табличку со значениями.

Эта команда просто выводит значения таблицы с датчика sensor.sgp30_tvoc.

Это нам нужно для того, чтоб убедиться, что данные действительно имеются в таблице и мы все делаем правильно.

 

Только теперь так не работает. Сейчас в таблице states  в столбце entity_id пусто.  Так как сейчас entity_id находятся в таблице states_meta

Следовательно, чтоб найти сейчас данные по entity_id нужно сделать запрос вот такой:

SELECT *
FROM “states”
where entity_id=’sensor.sgp30_tvoc’

Здесь можем увидеть, что у entity_id столбец metadata_id с значением 1077. Вот 1077 у нас и будет цифра по которой мы будем в таблице states искать и удалять данные.

 

Ну а теперь приступаем к удалению. Чтоб удалить, нужно ввести следующую команду:

DELETE
FROM “states”
where metadata_id=’1077′

 

Видим, что удалилось 27536 данных.

Я оставил старую картинку, так как удалять этот сенсор сейчас не хочу. но принцип тот же как на скрине, только по другому полю удаляется.

Ну и собственно вот результат, так было:

А так, стало:

Ну и если подождать минут 10, данные снова начнут заполняться потихонечку.

Только смотрите, с базой данных работать нужно аккуратно, и не удалять там все подряд. Иначе можете вообще все поломать.

 

Добавлю ещё пару команд.

Команда, которая выводит размер таблиц в Базе данных Home Assistant.

 

SELECT SUM(pgsize) bytes, name FROM dbstat GROUP BY name ORDER BY bytes DESC;

 

 

 

Так-же есть полезная команда, которая показывает какие entity_id сколько занимают места в Базе данных Home Assistant.  Эта команда весьма полезна, чтоб определить, какой датчик больше всего “забивает базу данными”. И с него можно начать в чистке.

Запрос выглядит так:

 

SELECT
COUNT(*) AS cnt,
COUNT(*) * 100 / (SELECT COUNT(*) FROM states) AS cnt_pct,
states_meta.entity_id
FROM states
INNER JOIN states_meta ON states.metadata_id=states_meta.metadata_id
GROUP BY states_meta.entity_id
ORDER BY cnt ASC;

Тут смотрим на поле cnt. Чем оно выше, тем датчик больше места занимает. По этому нужно листать в самый низ и на последнюю страницу, чтоб понять какой датчик больше места занимает.

 

Ну а после того, как Вы определили, какие датчики нужно почистить, так как они много места занимают. Можно использовать вот эту команду, в которой через запятую указываются entity_id, которые удалятся одним запросом. Запрос выглядит следующим образом:

 

DELETE FROM states
WHERE metadata_id IN (
SELECT metadata_id
FROM states_meta
WHERE entity_id IN (‘switch.otoplenie_relay_board_l1’, ‘switch.otoplenie_relay_board_l2’)
);

 

Где ‘switch.otoplenie_relay_board_l1’, ‘switch.otoplenie_relay_board_l2’ в ковычках перечисляются entity_id.

 

Вот мой запрос на удаление самых больших entity_id выглядит так:

DELETE FROM states
WHERE metadata_id IN (
SELECT metadata_id
FROM states_meta
WHERE entity_id IN (‘sensor.co2_effekta_temperature_1’, ‘sensor.co2_effekta_temperature_2’, ‘switch.0x00124b00256605bf_auto_brightness’, ‘switch.0x00124b00256605bf_factory_reset_co2’, ‘switch.0x00124b00256605bf_forced_recalibration’, ‘switch.0x00124b00256605bf_long_chart_period’, ‘switch.co2_effekta_automatic_scal’, ‘switch.co2_effekta_enable_gas’, ‘switch.co2_effekta_invert_logic_gas’, ‘switch.co2_effekta_onoff_brightness’, ‘number.0x00124b00272c81e3_high_pm25’, ‘number.0x00124b00272c81e3_humidity_offset’, ‘number.0x00124b00272c81e3_low_pm25’, ‘number.0x00124b00272c81e3_reading_interval’, ‘number.0x00124b00272c81e3_set_altitude’, ‘number.0x00124b00272c81e3_temperature_offset’, ‘sensor.0x00124b00272c81e3_co2’, ‘sensor.0x00124b00272c81e3_humidity’, ‘sensor.0x00124b00272c81e3_pm1’, ‘sensor.0x00124b00272c81e3_pm10’, ‘sensor.0x00124b00272c81e3_pm25’, ‘sensor.0x00124b00272c81e3_temperature’, ‘sensor.0x00124b00272c81e3_voc_index’, ‘sensor.0x00124b00272c81e3_voc_raw_data’, ‘switch.0x00124b00272c81e3_automatic_scal’, ‘switch.0x00124b00272c81e3_enable_pm25’, ‘switch.0x00124b00272c81e3_factory_reset_co2’, ‘switch.0x00124b00272c81e3_forced_recalibration’, ‘switch.0x00124b00272c81e3_invert_logic_pm25’, ‘sensor.energomonitor_ac_frequency’, ‘sensor.energomonitor_current’, ‘sensor.energomonitor_energy’, ‘sensor.energomonitor_power’, ‘sensor.energomonitor_power_factor’, ‘sensor.energomonitor_produced_energy’, ‘sensor.energomonitor_voltage’)
);

 

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

По этому есть команда VACUUM, которая высвободит свободное место.

Команда выглядит очень просто:

 

VACUUM;

 

После чего нужно немного подождать пока процесс закончится. И идём проверять место.

Было до ввода команды VACUUM:

 

6.7 ГБ. БЫло, я очистил:

 

Помимо освобождения места (Вам может показаться что это не много). Но представьте, ведь одна строчка практически ничего не весит с данными, а чтоб гигабайты данных очистить, там строчек будет миллион. По этому после очистки Home Assistsant прям стал гораздо легче себя чувствовать.

 

Но так-же существует Кнопка, которая делает “Зашибись” при нажатии на неё БД чистится. Об этом можно почитать тут:

Очистка места в Home Assistant путём удаления данных из Базы данных.

P.S. С сайта команды копируются как-то не правильно. По этому пишите эти строчки от руки. Тогда все заработает.

 

Primary Sidebar

Поиск

Новые записи

  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)
  • Интеграция для локального управления (без интернета) ик пультом Tuya работающим по wifi из Home Assistant
  • Транслируем показания с Уличного Bluetooth Датчика температуры по BTHome на дисплей датчика температуры XIaomi LYWSD03MMC
  • Заставляем Bluetooth датчики температуры tuya и xiaomi отправлять данные по Zigbee в Home Assistant.

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·