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.


jueves, febrero 02, 2017

Ejercicio 14 en C

Ejercicios de matrices


 1.-Sumar los elementos de una matriz que están en la diagonal.

#include <stdio.h>
#include <stdlib.h>

miércoles, enero 11, 2017

SQL_Oracle_tema_9

Práctica 9-1: Manipulación de Datos

El departamento de recursos humanos desea que cree sentencias SQL para insertar, actualizar y suprimir datos de los empleados. Como prototipo, utilizará la tabla MY_EMPLOYEE , antes de proporcionar las sentencias al departamento.
Nota: para todas las sentencias DML, utilice el icono Run Script (o pulse [F5]) para ejecutar la consulta. De esta forma, ve los mensajes de comentarios en la página con separadores Script Output. Para consultas SELECT , siga utilizando el icono Execute Statement o pulse [F9] para obtener la salida con formato en la página con separadores Results.
Inserte los datos en la tabla MY_EMPLOYEE .

miércoles, diciembre 28, 2016

Debian desactivar ipv6

En debian 8 3.16.0-4-amd64

Comprobamos lsof

lsof -i6