menu

viernes, julio 11, 2025

Home assistant automatizar certificados ASUS TUF GAMING AX4200

 

Documentaci贸n Completa: Automatizaci贸n de Certificados en Home Assistant

馃搶 Prop贸sito

Automatizar la renovaci贸n y gesti贸n de certificados SSL del router ASUS TUF GAMING AX4200 en Home Assistant, incluyendo:

  • Verificaci贸n de fecha de expiraci贸n

  • Reinicio de home assistant

馃敡 Configuraci贸n Requerida

1. Entidades Necesarias

yaml

input_datetime:
  data_certpem:
    name: "Fecha Expiraci贸n Certificado"
    has_date: true
    has_time: true
    icon: mdi:certificate
En integraciones se tuvo que instalar unas integraciones. Una es Advanced SSH & Web Terminal que se puede instalar directamente desde modulos. En hacs SSH esta fue por motivos que no fui capaz de conectarme mediante shell_command por ssh con el router. Aqui despues hay que a帽adir integraci贸n a帽adiendo la conexi贸n por ssh, para despu茅s poder mandar comandos, y tambien a帽adimos aqu铆 la integraci贸n fecha y hora para poder tener en donde comparar la fecha que obtengamos del certificado del router.

2. Shell Commands (configuration.yaml)

yaml

shell_command:
  guardar_privkey: /bin/bash /config/scripts/update_key.sh "{{ contenido }}"
  guardar_cert: /bin/bash /config/scripts/update_cert.sh "{{ contenid }}"

3. Scripts (/config/scripts/)

update_key.sh:

bash

#!/bin/bash
echo -e "$1" > /config/ssl/privkey.pem

update_cert.sh:

bash

#!/bin/bash
echo -e "$1" > /config/ssl/fullchain.pem

⚙️ Automatizaci贸n Completa

yaml

alias: Actualizaci贸n Inteligente de Certificados
description: Solo actualiza si el router tiene certificados m谩s recientes
triggers:
  - trigger: time_pattern
    hours: /1
conditions:
  - condition: template
    value_template: |-
      {% set cert_str = states('input_datetime.data_certpem') %}
      {% set cert_dt = strptime(cert_str, '%Y-%m-%d %H:%M:%S') %}
      {% set cert_ts = as_timestamp(cert_dt) %}
      {% set now_ts = as_timestamp(now()) %}
      {{ cert_ts < now_ts }}
actions:
  - sequence:
      - action: ssh.execute_command
        metadata: {}
        data:
          command: openssl x509 -in /etc/cert.pem -noout -enddate
        target:
          device_id: tudispositivo
        response_variable: clave
        enabled: true
      - variables:
          fecha_raw: "{{ clave.results[0].stdout[0].split('=')[1] }}"
          fecha_iso: >-
            {{ strptime(fecha_raw, "%b %d %H:%M:%S %Y
            %Z").strftime('%Y-%m-%dT%H:%M:%S') }}
        enabled: true
      - data:
          entity_id: input_datetime.data_certpem
          datetime: "{{ fecha_iso }}"
        action: input_datetime.set_datetime
        enabled: true
      - action: ssh.execute_command
        metadata: {}
        data:
          command: cat /etc/key.pem
        target:
          device_id: tudispositivo
        response_variable: key
        enabled: true
      - action: shell_command.guardar_privkey
        metadata: {}
        data:
          contenido: "{{ key.results[0].stdout | join('  ') }}"
        enabled: true
      - action: ssh.execute_command
        metadata: {}
        data:
          command: cat /etc/cert.pem
        target:
          device_id: tudispositivo
        response_variable: cert
        enabled: true
      - action: shell_command.guardar_cert
        metadata: {}
        data:
          contenid: |-
            {{ cert.results[0].stdout | join(' 
            ') }}
        enabled: true
      - data:
          title: Certificados actualizados
          message: Los certificados del router ASUS han sido guardados correctamente.
        action: persistent_notification.create
        enabled: true
      - action: homeassistant.restart
        data: {}
        enabled: true
    enabled: true
mode: single

馃攳 Flujo de Trabajo

  1. Verificaci贸n Horaria: Comprueba cada hora si el certificado expira

  2. Condici贸n para que se ejecute: Aqu铆 es donde se compara el input_data creado con ya la fecha incluida del certificado con el sensor que hemos a帽adido de fecha y hora (para saber la fecha y hora real) y solo cumplir谩 la condici贸n cuando el input_data haya expirado.

  3. Extracci贸n Segura: Usa OpenSSL para obtener la fecha real de expiraci贸n, y introducimos la nueva fecha en el input_ data creado

  4. Copia : Sobre escribe los ficheros de la carpeta SSL

  5. Notificaci贸n: Notificaci贸n persistente como que se haejecutado el script

  6. Reinicio: reinicia el sistema

⚠️ Requisitos Previos

  1. Integraci贸n SSH: Configurada y funcionando

  2. Permisos:

    bash

  • chmod +x /config/scripts/update_*.sh
chown homeassistant /config/ssl/*
  • Estructura de Directorios:

text

  1. /config/
    ├── scripts/
    │   ├── update_key.sh
    │   └── update_cert.sh
    └── ssl/
        ├── privkey.pem
        └── fullchain.pem

馃搮 Programaci贸n Recomendada

Frecuencia

Uso T铆pico

Patr贸n

Cada 1 hora

Entornos cr铆ticos

hours: "/1"

Cada 6 horas

Balanceado

hours: "/6"

Cada 24 horas

Bajo riesgo

hours: "3" (3 AM)

馃洜 Soluci贸n de Problemas

  1. Error en SSH:

    bash

  • journalctl -u homeassistant | grep "SSH"
  • Verificar Certificados:

bash

  • openssl x509 -in /config/ssl/fullchain.pem -noout -text
  • Logs de Automatizaci贸n:

bash

  1. grep "Gesti贸n Autom谩tica" /config/home-assistant.log

馃攧 Actualizaciones Futuras

  1. Notificaciones Push: A帽adir notificaciones m贸viles

  2. Backup Autom谩tico: Copia de seguridad de certificados antiguos

  3. Integraci贸n con Let's Encrypt: Renovaci贸n autom谩tica completa

Esta documentaci贸n cubre todos los aspectos de tu automatizaci贸n de certificados. Gu谩rdala como referencia en tus archivos de configuraci贸n.


No hay comentarios:

Publicar un comentario