Limpeza no banco de dados

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:

image

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.

image

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.

image

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.

6 Likes

Show! Parabéns pela postagem!

1 Like

Top!
Compartilha o flow ai, vai ajudar quem não tem muito conhecimento…

Esqueci de anexar o flow, segue ai:

[{"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}]
1 Like

Edita e coloca 3 acentos em cima e 3 em baixo > `

[{"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}]
1 Like

Parabéns Wender! Muito massa isso! :clap:t2::clap:t2::clap:t2::clap:t2::clap:t2:

1 Like

Oi pessoal,

Já tiveram problemas com integração do Maria-DB no caso de queda de energia do servidor local e quando volta o Maria-DB não funciona mais?

Fiz esse teste recentemente e vi que todo o histórico some do hass, nem a aba lateral aparece mais, achei muito estranho. Postei o erro no github.

Mariadb historian not working after power outage on local server home assistant · Issue #2402 · home-assistant/addons · GitHub.

Estou usando:
Server: GK35 mini Beelink
Maria-DB: 2.4.0
Hass: versão 7.2

Caso alguém puder fazer esse teste pra ver se ocorre da mesma forma, agradeço. Se caso alguém já conseguiu resolver o problema tbm seria muito bom se pudesse compartilhar.

Obrigado.

Existe alguma maneira de Zerar o Banco de dados do maria DB, eu quero reiniciar com tudo zerado, mais não funciona o recoder.purge