Home Assistant detectar fallo en base de datos y reiniciar docker

Buenas hoy os explico como resolví un problema que se presentaba esporádicamente una vez cada seis meses mas o menos , Home Assistant se quedaba sin conexión con mysql y por lo tanto no funcionaba toda la parte del recorder hasta que no se reiniciaba HA , para ello lo primero es crear un sensor que lea el fichero home-assistant.log y cuente las veces que encuentra la cadena ‘Lost connection to MySQL server’

  - platform: command_line
    name: errores_conexion
    command: "grep -c 'Lost connection to MySQL server' home-assistant.log"

Le daremos los valores en el customize.yaml

sensor.errores_conexion_db:
  friendly_name: Errores de conexión a la dB
  icon: mdi:database-alert

A partir de ahí crearemos la automatizaciones que gestionaran esta parte

- id: alerta fallo conexion base de datos
  initial_state: 'on'
  alias: alerta fallo conexion base de datos
  trigger:
    - platform: state
      entity_id: sensor.errores_conexion_db
  condition:      
    - condition: numeric_state
      entity_id: sensor.errores_conexion_db
      above: 1      
      below: 10
  action:
    - service: notify.notif_telegram_bot
      data_template:
        message: "\U0001f648\U0001f648 Error conexión base de datos , total :  *{{ states.sensor.errores_conexion_db.state }}*  \U0001f648\U0001f648"


- id: alerta fallo conexion base de datos y reinicio dockers
  initial_state: 'on'
  alias: alerta fallo conexion base de datos y reinicio dockers
  trigger:
    - platform: state
      entity_id: sensor.errores_conexion_db
  condition:      
    - condition: numeric_state
      entity_id: sensor.errores_conexion_db
      above: 10      
      below: 25
  action:
    - service: notify.notif_telegram_bot
      data_template:
        message: "\U0001f648\U0001f648 Error conexión base de datos , total :  *{{ states.sensor.errores_conexion_db.state }}* , reinicio dockers inicio \U0001f648\U0001f648"
      
    - service: switch.turn_off
      entity_id: switch.lamp_sensores   
    - service: switch.turn_off
      entity_id: switch.wordpress_1   
    - service: switch.turn_off
      entity_id: switch.traccar   

    - delay: 00:00:03

    - service: switch.turn_on
      entity_id: switch.lamp_sensores   

    - delay: 00:00:07

    - service: switch.turn_on
      entity_id: switch.wordpress_1   
    - service: switch.turn_on
      entity_id: switch.traccar   

    - service: notify.notif_telegram_bot
      data_template:
        message: "\U0001f648\U0001f648 Error conexión base de datos , total :  *{{ states.sensor.errores_conexion_db.state }}* , reinicio dockers fin \U0001f648\U0001f648"


- id: alerta fallo conexion base de datos y reinicio HA
  initial_state: 'on'
  alias: alerta fallo conexion base de datos y reinicio HA
  trigger:
    - platform: state
      entity_id: sensor.errores_conexion_db
  condition:      
    - condition: numeric_state
      entity_id: sensor.errores_conexion_db
      above: 25      
  action:
    - service: notify.notif_telegram_bot
      data_template:
        message: "\U0001f648\U0001f648 Error conexión base de datos , total :  *{{ states.sensor.errores_conexion_db.state }}* , reinicio HA inicio \U0001f648\U0001f648"
      
    - service: switch.turn_off
      entity_id: switch.lamp_sensores   
    - service: switch.turn_off
      entity_id: switch.wordpress_1   
    - service: switch.turn_off
      entity_id: switch.traccar   

    - delay: 00:00:03

    - service: switch.turn_on
      entity_id: switch.lamp_sensores   

    - delay: 00:00:07

    - service: switch.turn_on
      entity_id: switch.wordpress_1   
    - service: switch.turn_on
      entity_id: switch.traccar   

    - service: notify.notif_telegram_bot
      data_template:
        message: "\U0001f648\U0001f648 Error conexión base de datos , total :  *{{ states.sensor.errores_conexion_db.state }}* , reinicio HA fin \U0001f648\U0001f648"

    - service: homeassistant.restart

Al arrancar siempre da un error de conexión por lo que este inicial no lo tendremos en cuenta

Básicamente las automatizaciones se dividen en función del numero de errores :

>1 a 10 errores dan un aviso por telegram , de > 10 a 25 errores para los dockers que están afectados por el base de datos como puede ser traccar y wordpress , para mysql , arranca mysql dejando un tiempo de margen para que arranque y arranca entonces traccar y wordpress , > 25 errores hace lo mismo que en el anterior pero al acabar el proceso reinicia home assistant , lo he probado forzando eliminando el docker de lamp y funciona perfectamente

Deja un comentario