Eae pessoal hoje tive um problema que caiu a luz e quebrou minha instalação do HA no Raspberry (Uso SSD), com isso tive que resturar meu backup mas infelizmente meu backup tinha mais de 1GB e com isso não conseguia restaurar devido limitações do HA para upar esse arquivo, então tive que iniciar o HA normalmente e criar um acesso via SAMBA para poder transferir esse arquivo e subir esse backup, você pode consultar mais detalhes aqui.
Então, após restaurar tudo fui verificar porque estava tão grande esse backups, como sabemos o HA vai salvando informações de histórico e logs no banco de dados sqlite ou em algum banco que você configurou (No meu caso Maria DB) e com isso meu banco já tinha vários GB mas com a compressão ficava somente 1.2 GB o backup.
Investigando um pouco consegui achar como configurar essa informações que são gravadas, deixo abaixo uma breve configuração que deu uma boa limpeza por aqui.
Dentro de seu configuration.yaml crie:
purge_keep_days: Quantidade de dias que você quer deixar salva.
db_url: URL do seu banco de dados que pode estar rodando em algum outro local ou até mesmo no próprio HA
exclude: Se trata de uma configuração que você pode fazer para poder remover entidades, dominios e eventos para não salvar no histórico.
Dessa forma será uma quantidade informação muito menor em seu banco de dados. (Necessário reiniciar o HA para aplicar.)
Após ter feito isso tive mais um problema, como diminuir o estado atual do banco de dados e fazer uma limpeza geral?
Eis a solução, chamar o serviço de purge que basicamente faz a limpeza do banco de dados, vá em Ferramentas de Programação / Serviços e posteriomente você insere as informações abaixo:
Logo após a isso pensei, poxa poderia ser feito essa limpeza de forma automática, né?
Abaixo deixei um fluxo do node-red para poder a cada 12 horas verificar o tamanho do banco de dados, caso o tamanho seja maior que 1024 Mb (1Gb) ele chama o serviço de limpeza de forma automática. Vou deixar em anexo o flow do node-red.
Flow do node-red:
[{"id":"153e8be3a2bcb296","type":"inject","z":"4f166ce7.070214","name":"12 horas","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"43200","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":120,"y":460,"wires":[["fab1ce6a7c0c3287"]]},{"id":"fab1ce6a7c0c3287","type":"ha-entity","z":"4f166ce7.070214","name":"Limpeza do Banco de Dados","server":"e72b364c.88bdc8","version":1,"debugenabled":false,"outputs":2,"entityType":"switch","config":[{"property":"name","value":"Limpeza do Banco de Dados"},{"property":"device_class","value":""},{"property":"icon","value":"mdi:database"},{"property":"unit_of_measurement","value":""}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":true,"outputPayload":"$entity().state ? \"on\": \"off\"","outputPayloadType":"jsonata","x":340,"y":460,"wires":[["9c54c21acc9cd5f3"],[]]},{"id":"9c54c21acc9cd5f3","type":"api-current-state","z":"4f166ce7.070214","name":"Tamanho do DB","server":"e72b364c.88bdc8","version":2,"outputs":2,"halt_if":"1024","halt_if_type":"num","halt_if_compare":"gt","entity_id":"sensor.db_size","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":600,"y":460,"wires":[["5d1ee163085a3200"],[]]},{"id":"3a05aec4fd84511e","type":"comment","z":"4f166ce7.070214","name":"Faz a limpeza do banco de dados caso ultrapasse o tamanho de 1024 Mb","info":"","x":380,"y":380,"wires":[]},{"id":"5d1ee163085a3200","type":"api-call-service","z":"4f166ce7.070214","name":"Limpa o Banco de Dados","server":"e72b364c.88bdc8","version":3,"debugenabled":false,"service_domain":"recorder","service":"purge","entityId":"","data":"{\"keep_days\":\"1\",\"repack\":\"true\"}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":870,"y":460,"wires":[[]]},{"id":"e72b364c.88bdc8","type":"server","name":"Home Assistant","version":1,"legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]
Em resumo, consegui diminuir meu backup de 1Gb para exatamente 118.4 Mb, dessa forma caso aconteça algo até para restaurar será mais rápido. Com essas limpeza que fiz meu banco caiu de quase 5 GB para 320.3 Mb.
Com a utilização do nó de entidade do node-red companion criei um switch para poder desligar essa limpeza a qualquer momento que queira, e no lovelace você pode criar algo do tipo.
Tudo sobre o recorder você pode encontrar aqui.
Obs.: Caso você utilize bastante o histórico de entidades na documentação é possível incluir uma entidade ou dominio especifico para que nunca seja apagado, dessa forma a limpeza não irá excluir as informações que você quer manter por um período maior.