Sistema de copias de seguridad para Homeassistant

Tarjeta Backup HA en Homeassistant

Vamos a configurar un sistema de copias de seguridad para Homeassistant, para ello vamos a hacer uso de los comandos mediante SSH y que está perfectamente explicado en esta entrada http://domology.es/scripts-y-comandos-ssh-en-home-assistant/, para poder comunicarnos entre Homeassistant y el sistema donde está instalado.

Esta guía la he realizado con Homeassistant en Docker, pero funciona exactamente igual sin él solo cambiando las rutas por las de vuestro sistema.

Requisitos previos:

Lo primero que tenemos que hacer si no lo tenemos es instalar el paquete zip para poder comprimir los “backup” y que ocupen menos espacio, pero antes actualizamos como siempre el sistema:

sudo apt-get update

y después instalamos el paquete zip:

sudo apt-get install zip

Estrategia:

Seguidamente tenemos que pensar como vamos a hacer las copias de seguridad, lo ideal es hacerlo en un sitio fuera de la misma microsd (o hdd) donde esté el sistema, para que ante un fallo de la misma no comprometamos también las copias de seguridad, cuando lo tengamos nos guardamos la ruta ya que nos hará falta para mas adelante, en mi caso:

/media/backup_ha/

Script BASH:

Vamos a empezar a crear el archivo llamado backup_ha.sh para que ejecute la copia de seguridad con el siguiente código:

#!/bin/bash
cd /media/backup_ha/ && zip -r "HA-backup-$(date +"%Y-%m-%d_%H-%M").zip" /media/docker/homeassistant/ -x "*.log" -x "/*tts/*" -x "*.db" -x "*.db-shm" -x "*.db-wal" -x "*.mp3" -x "/*deps/*" -x "/*www/camera_shots/*" -x "/*.git/*" -x "/*shell/gif_maker/venv/*"

La primera ruta que en mi caso es /media/backup_ha/ es donde se van a guardar los archivos .zip con la copia de seguridad, esto teneis que cambiarlo por la ruta donde van vuestras copias de seguridad asegurandose siempre de tener permisos de escritura en dicha carpeta.

La segunda ruta que en mi caso es /media/docker/homeassistant/ es la ruta donde teneis vuestra instalación de Homeassistant, si teneis Homeassistant en una Raspberrypi seguramente la ruta seria algo así: /home/homeassistant/.homeassistant/

Toda la parte del final del comando son las rutas y archivos que se excluyen de la copia de seguridad: -x "*.db" esto excluiría cualquier archivo con extensión .db, podeis modificarlo para incluir o excluir los archivos que querais, pero tener cuidado de no copiar archivos en uso como la base de datos, que además no tiene sentido guardarlos.

El archivo backup_ha.sh lo dejamos en la carpeta /config de Homeassistant.

Ahora hay que crear una serie de códigos para cada uno de los elementos del sistema de copia de seguridad para Homeassistant como son sensores, grupo, automation, shell_command, script y customize. Cada uno se hace en su correspondiente sitio en función de como tengáis los include del sistema, aqui https://www.home-assistant.io/docs/configuration/splitting_configuration/ podeis encontrar mas información.


script:

Copiamos y pegamos el siguiente código en la parte de script de tu sistema:

script:
  backup_ha:
    alias: Backup HA
    sequence:
      - service: shell_command.backup_ha

shell_command:

El siguiente código en la parte de shell_command:
shell_command:
  backup_ha: "ssh root@192.168.1.7 bash /media/docker/homeassistant/config/backup_ha.sh"
En este comando hay que cambiar la ip por la de vuestro sistema, y la ruta por la vuestra donde habeis guardado el archivo backup_ha.sh

sensor:

Sensor último backup

Ahora vamos a crear los sensores para que nos muestre una serie de datos interesantes para nuestro sistema de copias de seguridad. Este sensor nos muestra en pantalla el nombre del fichero de la última copia de seguridad, modificar la ruta por la vuestra donde vais a guardar las copias de seguridad y el usuario e ip por vuestro sistema:
- platform: command_line
  name: last backup ha
  command: "ssh root@192.168.1.7 ls /media/backup_ha -Art | tail -n -1 | grep '.zip'"

Sensor tamaño total

Este sensor nos muestra en pantalla el tamaño total de la carpeta donde se guardan las copias de seguridad, si en ella guardais mas cosas habría que hacer un filtro para que seleccione solo los archivos que queramos, si no dará un dato erróneo para nosotros. Igualmente hay que cambiar la ruta por la vuestra:
- platform: command_line
  name: backup size total
  command: "ssh root@192.168.1.7 du -sh /media/backup_ha | awk '{print $1}'"
  scan_interval: 60

Sensor numero de backup

Este nos muestra en pantalla el numero total de archivos dentro de la carpeta donde se guardan las copias de seguridad, también teneis que cambiar la ruta por la vuestra e igualmente si hay en esa carpeta otros archivos os va a dar un dato que no es fiable:
- platform: command_line
  name: backup count
  command: "ssh root@192.168.1.7 ls /media/backup_ha | wc -l"
  scan_interval: 60

group:

En esta parte pondremos los diferentes elementos en un grupo para visualizarlos, si quereis personalizarlo podeis leeros la guía de grupos http://domology.es/grupos-pestanas-paneles-ha/
group:
  backupha:
    name: Backup HA
    control: hidden
    entities:
    - script.backup_ha
    - sensor.last_backup_ha
    - sensor.backup_size_total
    - sensor.backup_count
    - automation.backup_diario

automation:

Vamos a crear ademas un automation para que nos ejecute una copia a diario, en este caso se haría todos los días a las 00:00h:
automation:
  - alias: Backup diario
    trigger:
      platform: time
      at: '00:00:00'
    action:
      - service: shell_command.backup_ha

customize:

Aqui vamos a dejar un poco bonita la tarjeta donde van todos los elementos, podeis modificar los iconos y los nombres a vuestro gusto personal:
customize:
  script.backup_ha:
    friendly_name: Backup
    icon: mdi:content-save
  sensor.last_backup_ha:
    friendly_name: Ultimo backup
    icon: mdi:file-document
  sensor.backup_size_total:
    friendly_name: Tamaño total backup
    icon: mdi:archive
  sensor.backup_count:
    friendly_name: Total backup
    icon: mdi:format-list-numbers
  automation.backup_diario:
    icon: mdi:calendar-clock

Los archivos de copia de seguridad se van guardando en la carpeta elegida en el comando backup_ha.sh:
Archivos de copia de seguridad

Si tienes dudas o cualquier consulta puedes encontrarnos en el grupo de Telegram

Adiós amigos!!!

También te podría gustar...

Deja un comentario