Semana del 20 al 26 de abril de 2026

Semana del 20 al 26 de abril de 2026

Resumen: Una semana de ingeniería intensa: estrené un watchdog que repara solo las rutinas caídas, monté alertas automáticas con Shorts de YouTube cuando AEMET activa avisos naranjas o rojos, y rescaté seis scripts de Copernicus que dejaron de funcionar de golpe porque el servicio CAMS cambió de servidor sin previo aviso.

🤖 El watchdog ya diagnostica y repara solo

Lo que empezó como un monitor que solo mostraba el estado de cada rutina ha dado un salto grande esta semana. He construido un nuevo sistema de watchdog (vigilante automático) con cuatro fases: detecta el fallo, clasifica el tipo de error entre once patrones conocidos, aplica la reparación adecuada y verifica que la rutina ha vuelto a funcionar. Si el error no encaja en ningún patrón conocido, consulta a Qwen 2.5 —un modelo de lenguaje que tengo instalado en local con Ollama— para obtener un diagnóstico en lenguaje natural antes de reintentar.

El sistema tiene cooldown de 30 minutos por script y un máximo de tres reintentos al día para no entrar en bucles. Desde el panel del monitor, ahora aparece un botón «▶ Reparar» en cada fila con estado FAIL, y hay una vista nueva con el historial de los últimos cien eventos del watchdog. También he integrado OpenClaw, un gateway de mensajería que tengo en local, para que me lleguen avisos por WhatsApp cuando una rutina falla, se recupera o agota reintentos sin éxito.

🚨 Shorts automáticos cuando saltan las alertas de AEMET

Esta semana he conectado el sistema de alertas meteorológicas con el pipeline de YouTube Shorts. Cuando AEMET activa un aviso naranja o rojo, el nuevo script alertas_short.py genera automáticamente un vídeo vertical de 58 segundos: fondo con degradado, triángulo de alerta, pastilla de color según el nivel y texto del aviso. Luego lo sube directamente a YouTube vía la API.

Para que esto funcione bien, también he mejorado alertas.py: antes solo distinguía «hay alerta» o «no hay alerta» (un booleano), y ahora distingue el color real: nulo, naranja o roja. Esto permite detectar transiciones directas naranja↔roja y disparar los comandos correctos en cada caso sin confundir la lógica de aparición y desaparición de alertas. El script es compatible con el formato antiguo de estado, así que no ha roto nada de lo que ya funcionaba.

🌡️ Crisis CAMS: seis scripts de calidad del aire rotos de golpe

El martes me encontré con que los datos de calidad del aire de Copernicus (CAMS, el Servicio de Monitorización Atmosférica de Copernicus) dejaban de descargarse para todos los contaminantes: ozono, monóxido de carbono, dióxido de azufre, dióxido de nitrógeno y partículas PM2.5. La causa era que el conjunto de datos cams-europe-air-quality-forecasts había dejado de estar disponible en el servidor CDS (Climate Data Store) y se había trasladado de forma exclusiva al servidor ADS (Atmosphere Data Store). El cambio no vino con ningún aviso previo.

Los scripts de polvo y pólenes ya tenían el fix porque habían pasado por esto antes; el resto no. Solución: añadir la constante ADS_URL a los seis scripts afectados y cambiar la inicialización del cliente para que apunte al nuevo servidor. Verificado con una descarga de prueba en todos ellos antes de darlo por cerrado.

🎥 Puliendo los Shorts diarios: cuatro bugs en cuatro días

El pipeline de YouTube Shorts ha recibido varias correcciones esta semana:

  • Texto desbordado en Shorts de ciencia: cuando una frase superaba unos 30 caracteres, el texto salía por los lados del vídeo. El problema era que el tamaño de fuente mínimo forzaba el texto a salirse del lienzo. Lo he resuelto con un nuevo sistema de distribución en líneas que prueba distintos tamaños y layouts hasta encontrar uno que encaje dentro del margen.
  • Fecha equivocada en el Short de previsión: el vídeo se sube a las 18:00 y habla del tiempo de mañana, pero el título y el banner usaban la fecha de hoy. Corregido para que use siempre la fecha de mañana en lo que se muestra en pantalla.
  • Short cortado antes del CTA: la tarea programada pasaba --duration 12 fijo al generador de vídeo. Cuando la previsión era larga y el texto ocupaba más de doce segundos, ffmpeg (la herramienta de procesado de vídeo) truncaba el clip antes de llegar a la pantalla de llamada a la acción. Quitado el parámetro fijo para que el maker calcule siempre la duración automáticamente.
  • Reinicio del banner que mataba OBS: el script reiniciar_textbanner.ps1 mataba todos los procesos Python del sistema, incluido el intérprete que usa OBS para el streaming, lo que cerraba la emisión en directo. Ahora filtra por línea de comandos para matar solo el proceso del banner de texto.

🧪 Lo que ha quedado en el tintero

A principios de semana quedó anotado que la tarea programada de los Shorts diarios no podía ejecutarse desde el entorno de Cowork (sandbox Linux sin acceso a Windows). Esto se resolvió el mismo día migrando la tarea al Programador de Tareas de Windows, que es quien tiene acceso al entorno Python correcto. Esa migración está funcionando. No quedan pendientes activos esta semana.


📆 Próxima entrada: semana del 27 de abril al 3 de mayo de 2026.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio