mover sql de sd a servidor externo

Comprime tu base de datos de Home Assistant Leave a comment

Comprime tu base de datos

Seguro que has visto como la base de datos de Home Assistant que se encuentra en el directorio Hassio / config crece constantemente porque contiene el estado de todos los sensores, interruptores, luces, automatizaciones, etc. de nuestro Home Assistant.
Con el tiempo, la base de datos si no se realizan configuraciones ad hoc, puede volverse muy engorroso con tamaños de archivo de gigabytes y ralentizar todo Home Assistant.
Para remediar esta situación es necesario trabajar estas dos opciones:

  • a través de un » fine tuning » de la configuración del componente » recorder «
  • a través de una automatización que realiza el » repack » de la Db, que es una optimización del espacio ocupado.

Vamos a ver cómo funciona la copia de seguridad de datos en Home Assistant.
El motor de la base de datos de HA predeterminado es SQLite, que no requiere configuración. La base de datos se almacena en el directorio de configuración de Home Assistant ( .homeassistant o / config ) y se llama home-assistant_v2.db .
Para cambiar los valores predeterminados para el componente » recorder «, agregue lo siguiente al archivo configuration.yaml .

############################################################################
#https://home-assistant.io/components/recorder/
recorder:
  purge_interval: 1
  purge_keep_days: 3
  include:
    domains:
    - sensor
    - climate
    - binary_sensor
    - light
  exclude:
    entities:
    - sensor.last_boot
    - sensor.date
    - sensor.time
    - sensor.workday
    - sun.sun
    - sensor.moon
    - sensor.fase_lunar
    - sensor.estacion
    - sensor.season
############################################################################
Además del ajuste de los datos que se guardarán en la base de datos, la otra estrategia es volver a empaquetar la base de datos para optimizar el espacio ocupado.
El paquete se basa en el servicio » recorder.purge » y se puede personalizar con el tiempo para » repack » y el número de días que se mantendrán en la base de datos.

Ahora llegamos al paquete y al detalle de sus componentes:

input_boolean.repack_db: Si está activo, el paquete comienza todos los días a la hora indicada.

input_datetime.repack_time: hora en que comienza el paquete de DB

input_number.day_to_keep: Número de días con estados a mantener.

input_text.repack_status: indica el estado de repack

input_text.previous_dimension_db: Indica el tamaño de la base de datos al inicio de la automatización.

sensor.home_assistant_v2_db: tamaño de la base de datos HA

script.repack_db: Script que hace el Repack.

Y ahora algunas advertencias:

  • Algunos componentes tienen un estado inicial preestablecido. Si desea cambiarlo debe actuar bajo su responsabilidad, ya que el paquete cambiará cuando sea de su interés o como alternativa, eliminará el estado inicial.
  • El » sensor.time» sensor es obligatorio para iniciar la automatización.
  • El servicio de notificación de telegram debe cambiarse a voluntad. 
  • Para que el sensor monitorice el tamaño de la base de datos HA debe agregarse en el archivo configuration.yaml . debajo de la seccion  whitelist_external_dirs la carpeta/config
#################################################################
#                                                               #
#                      Packages/Repack DB                       #
#                                                               #
#################################################################

#################################################################
#                                                               #
#                          Customize                            #
#                                                               #
#################################################################
homeassistant:
  customize:
    ################################################
    ## Node Anchors
    ################################################

    package.node_anchors:
      customize: &customize
        package: 'repack_db'

      expose: &expose
        <<: *customize
        haaska_hidden: false
        homebridge_hidden: false
    
    ################################################
    ## input
    ################################################
    input_boolean.repack_db:
      <<: *customize
      friendly_name: "Repack DB HA"
      icon: mdi:database

    input_datetime.repack_time:
      <<: *customize
      icon: mdi:clock-outline
    
    input_text.repack_status:
      <<: *customize
      icon: mdi:database-check

    input_text.previous_dimension_db:
      <<: *customize
      icon: mdi:database-check
      friendly_name: "Dim. previa HA DB"

    ################################################
    ## script / sensor
    ################################################
    script.repack_db:
      <<: *customize
      friendly_name: Repack DB
    
    sensor.home_assistant_v2_db:
      <<: *customize
      friendly_name: "Dimension HA DB"
      icon: mdi:database

#########################################################
#                                                       #
#                       GROUP                           #
#                                                       #
#########################################################
group:
  repackdb_package:
    name: Repack DB Package
    entities:
      - input_boolean.repack_db
      - input_datetime.repack_time
      - input_number.day_to_keep
      - input_text.repack_status
      - input_text.previous_dimension_db
      - script.repack_db
      - sensor.home_assistant_v2_db

#########################################################
#                                                       #
#                       SENSOR                          #
#                                                       #
#########################################################
sensor:
#https://www.home-assistant.io/components/sensor.filesize/
  platform: filesize
  file_paths:
    - /config/home-assistant_v2.db
#########################################################
#                                                       #
#                       SCRIPT                          #
#                                                       #
#########################################################
script:
  repack_db:
    alias: Repack DB
    sequence:
    - service: recorder.purge
      data_template:
        keep_days: "{{ states('input_number.day_to_keep') | int }}"
        repack: true

#########################################################
#                                                       #
#                        INPUT                          #
#                                                       #
#########################################################
input_boolean:
  repack_db:
    name: "Repack DB HA"
    initial: 'on'
    icon: mdi:refresh

#########################################################
input_datetime:
  repack_time:
    name: "Horario Repack"
    has_date: false
    has_time: true
    initial: '01:32'
    icon: mdi:clock-outline

#########################################################
input_text:
  repack_status:
    name: "Estado Repack"
    initial: "-"
    icon: mdi:database-check

  previous_dimension_db:
    name: "Dim. previa HA DB"
    initial: "-"

#########################################################
input_number:
  day_to_keep:
    name: "Días a mantener"
    min: 1
    max: 15
    step: 1
    initial: 3
    mode: box
    icon: mdi:calendar-today

#########################################################
#                                                       #
#                     AUTOMATIZACION                    #
#                                                       #
#########################################################
automation:

  - alias: purge DB
    initial_state: true
    trigger:
      platform: template
      value_template: >-
        {{ states('sensor.time') == (states.input_datetime.repack_time.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}
    condition:
    - condition: state
      entity_id: input_boolean.repack_db
      state: 'on'
    action:
    - service: input_text.set_value
      data_template:
        entity_id: input_text.repack_status
        value: "Avviato repack su DB alle {{states('sensor.time')}}"
    - service: input_text.set_value
      data_template:
        entity_id: input_text.previous_dimension_db
        value: "{{ states('sensor.home_assistant_v2_db') }}"
    - service: script.turn_on
      entity_id: script.repack_db
    - wait_template: "{{ (states('sensor.home_assistant_v2_db') |float ) < (states('input_text.previous_dimension_db') |float) }}"
      timeout: '00:30:00'
      continue_on_timeout: 'false'
    - service: notify.telegram
      data_template:
        title: '*-- Repack DB Home Assistant --*'
        message: >
          Repack DB completato alle {{ states('sensor.time') }},
          dimensione precedente DB: {{ states('input_text.previous_dimension_db') }}, 
          dimensione attuale DB: {{ states('sensor.home_assistant_v2_db') }}
          Ridotto del {{ ((states('input_text.previous_dimension_db')|float / (states('sensor.home_assistant_v2_db')|float))*100 - 100) | round(2) }}%
    - service: input_text.set_value
      data_template:
        entity_id: input_text.repack_status
        value: DB reducido de {{ ((states('input_text.previous_dimension_db')|float / (states('sensor.home_assistant_v2_db')|float))*100 - 100) | round(2) }}%

#########################################################
#                                                       #
#                          END                          #
#                                                       #
#########################################################

Aquí está la configuración de Lovelace:

type: entities
  title: Repack DB
  show_header_toggle: false
  entities:
  - input_boolean.repack_db
  - input_number.day_to_keep
  - sensor.home_assistant_v2_db
  - input_text.previous_dimension_db
  - input_datetime.repack_time
  - input_text.repack_status
  - script.repack_db

Con estos pasos ya tienes todo lo necesario para realizar el trabajo, a que esperas y comprime tu base de datos.

Deja un comentario

A %d blogueros les gusta esto: