Я не так давно пользуюсь Home Assistant. Наше знакомство состоялось где-то год назад. К тому времени, как я дошёл до регулярных снэпшотов (snapshots) средствами Home Assistant, обнаружил, что размер базы данных близок к 1 Гб. У меня зародились подозрения, что это не совсем нормально и я потихоньку начал изучать вопрос.
Тогда я использовал стандартный тип базы данных Home Assistant — sqlite (файл home-assistant_v2.db). Использую его и сейчас. За сохранение информации в базе данных Home Assistant отвечает интеграция Recorder. У неё есть разные настройки, которые можно указать в configuration.yaml
. Мои настройки приведены ниже. Названия некоторых персональных сущностей (entities) изменены.
Я руководствовался следующим принципом: если мне не нужна информация о чём-либо в базе данных, я не включаю запись этой информации.
ВНИМАНИЕ! Вышеуказанный принцип применялся без фанатизма. :-)
recorder:
auto_purge: false
purge_keep_days: 10
commit_interval: 15
exclude:
domains:
- sun
- device_tracker
event_types:
- call_service
entity_globs:
- binary_sensor.*_battery_low
- binary_sensor.*_tamper
- sensor.*_battery
- sensor.*_linkquality
- sensor.*_consumption
- sensor.*_energy
- sensor.*_pressure
- sensor.*_illuminance
- sensor.*_voltage
- sensor.*_current
- sensor.*_zigbee
- sensor.*_ble
- sensor.*_gateway
entities:
- binary_sensor.updater
- sensor.hacs
- sensor.relay1_power
- sensor.relay2_power
include:
entities:
- sensor.air_pressure
- device_tracker.homekit_myiphone
- device_tracker.router_myiphone
Честно говоря, так и не смог понять, зачем разработчики Home Assistant установили настройку commit_interval
по умолчанию в 1 секунду. Если в этом и есть смысл, то он ускользнул от меня. Я у себя сделал 15 секунд.
Сейчас на вспомню, почему отключил автоматическую очистку базы данных в конфиге: auto_purge: false
. Вместо неё я создал автоматизацию, которая запускается каждую ночь ровно в 3:21. Как видно из кода автоматизации, в базе данных хранится информация за последние 10 суток.
alias: Recorder Purge
description: ''
trigger:
- platform: time
at: '03:21:00'
condition: []
action:
- service: recorder.purge
data:
keep_days: 10
repack: true
mode: single
Какое-то время назад я перестал использовать Zigbee2MQTT. Может это тоже сказалось положительно на размере базы данных. По умолчанию, Zigbee2MQTT создаёт в Home Assistant сущности с кучей атрибутов (attributes) и эти атрибуты дублируются во всех сущностях устройства (device). Таким образом, изменение хотя бы одного атрибута приводит к записи в базу данных информации об изменениях всех сущностей устройства. В версии 1.20.0 у Zigbee2MQTT появилась настройка, позволяющая отключить атрибуты в сущностях. Думаю, они уже стали лишними в Home Assistant.
…
advanced:
homeassistant_legacy_entity_attributes: false
…
Тем, кто использует add-on Zigbee2MQTT в Home Assistant, эта настройка доступна начиная с версии 1.21.0-4.
Ну и какой же результат? Размер моей базы данных колеблется от 70 до 80 Мб. При этом, в Home Assistant сейчас порядка 400 сущностей.
Осознаю, что можно сделать ещё оптимальнее. Никого ни к чему не призываю, ничего не навязываю. Просто делюсь тем, как реализовал у себя. Если есть желание поделиться своими решениями или появились вопросы, заходите обсудить.
Vladimir Turekhanov ・ July 18, 2021