Semana del 25 al 31 de mayo de 2026
Resumen: Una semana de laboratorio: el prototipo de polvo 3D ha madurado mucho entre texturas nuevas, un mosaico ambicioso que no funcionó y varios bugs resueltos, mientras el sistema de monitorización ganaba músculo con nuevos reflejos automáticos y las colecciones de OBS quedaban bastante más ordenadas.
🌪️ El polvo 3D: avances, retrocesos y lecciones
El prototipo polvo_3d_camtest.py ha sido el protagonista de la semana. El miércoles añadí tiles de satélite de alta resolución (ESRI World Imagery, zoom 6, en caché) como textura base del mapa, e incorporé interpolación temporal entre pasos del modelo MONARCH para que la animación salga suave entre horas. También conecté el overlay estándar del proyecto, así que los timestamps ya aparecen en hora local peninsular real.
El jueves intenté algo más ambicioso: combinar los datos MONARCH (modelo Copernicus, dominio 0,1° sobre Europa y norte de África) con los de CAMS global (0,4°, cubre el Sahara por debajo del paralelo 30°N, que es el límite sur de MONARCH). La idea era interesante —blend suave con transformada de distancia entre las dos rejillas— pero se fue al traste por dos razones. Primero, los valores CAMS sobre España salían disparados y tapaban la Península completamente. Segundo, al ampliar el dominio hasta 35°S la fórmula de curvatura esférica que usaba para abombar el plano superaba el radio de la Tierra y las esquinas del mapa se hundían varios miles de kilómetros. Fin del experimento: revertido el viernes, vuelta a MONARCH solo y plano flat sin curvatura. El límite sur en 30°N sigue siendo un problema abierto.
El viernes también resolví un bug de 24 horas en el overlay de timestamp: la función que calculaba la fecha seguía usando la variable original en vez de la fecha corregida del NetCDF, así que cada frame mostraba una hora exactamente un día por delante de lo real. Además ajusté los parámetros de opacidad y el techo de la escala de polvo (VMAX_DUST 50→200, cap de opacidad a 0,84) para que el terreno no quede sepultado cuando hay polvo moderado.
El lunes y martes también trabajé en la versión anterior, polvo_3d.py, con una animación de globo esférico en cuatro partes. Funcionó parcialmente, pero el polvo no alineaba bien con el mapa base y la corrección era más costosa de lo que parecía. Quedó revertida también.
🌡️ Una mirada al pasado: temperaturas desde 1975
Nueva incorporación al catálogo de productos: temp_serie_historica.py, un script que descarga datos ERA5 de temperatura media mensual para España desde 1975 hasta el mes más reciente disponible. El gráfico resultante sigue el estilo del Climate Reanalyzer: líneas grises para cada año histórico, banda de referencia ±1σ del período 1991-2020, línea roja para el año actual y naranja para 2023 (que batió registros en toda Europa). La salida va a waitbox/temp_serie_historica.png y la idea es actualizarlo mensualmente. Es el tipo de imagen que da contexto a cualquier análisis de calor o frío anómalo.
🤖 ALOY aprende a no quedarse colgada
La semana trajo varios fixes importantes en el sistema de monitorización. El más urgente: ALOY llevaba horas bloqueada porque las llamadas a OBS WebSocket podían quedarse esperando indefinidamente sin timeout. La solución fue envolver todas las interacciones con OBS en un ThreadPoolExecutor con límite de tiempo, de forma que si OBS no responde en 30 segundos el proceso sigue adelante sin congelarse. Lo mismo se aplicó a reiniciar_stream_obs.py.
Además de corregir el bloqueo, ALOY tiene ahora un nivel L3 de reparación: tras resolver un fallo en un pipeline, si la tarea afecta a una fuente de OBS, el sistema lanza automáticamente un media reload sobre esa fuente para que la imagen aparezca sin que haya que tocar nada manualmente. Otro añadido: atlas_obs_log.py, un script nuevo que lee el log activo de OBS cada hora y detecta fuentes sin contenido (transiciones a tamaño {0,0}) o ficheros MP4 no encontrados. Antes esas situaciones pasaban desapercibidas hasta que Oscar miraba la pantalla; ahora ALOY recibe el aviso y puede actuar.
Por el lado de los fallos silenciosos: monitor.py capturaba SystemExit pero siempre guardaba el texto «SystemExit» como mensaje de error, perdiendo el motivo real. Ya se corrige correctamente, lo que permitió que varios fallos de token OAuth que aparecían como «unknown» se clasificasen bien como token_error y no se reintentasen en balde.
🎥 Colecciones OBS: orden en el caos
Las colecciones de mapas en streaming tenían varios problemas acumulados que resolví el martes. En Buclemaps_primavera y _primavera2 había más de veinte fuentes apuntando a rutas incorrectas (mezcla entre Bucket/ y Bucket2/). En Buclemaps3001, ocho fuentes históricas obsoletas con ficheros inexistentes se reemplazaron por seis nuevas del bloque HISTORIAL en waitbox/. Las posiciones de elementos fijos (reloj, banner, Source Switcher) se homogeneizaron en las cuatro colecciones.
En cuanto a productos nuevos: el mapa de CAPE (energía potencial convectiva disponible, índice clave para prever tormentas) se incorporó al pipeline ICON-EU, con descarga automática y renderizado en icon_cape_sp.mp4. Y copernic_olivo.py añade el polen de olivo (modelo SILAM de Copernicus) como nuevo producto de primavera, especialmente relevante en Andalucía y Extremadura. Ambos productos ya tienen su descriptor de panel JSON y están integrados en la colección primavera.
🧪 Lo que ha quedado en el tintero
- El render 3D con globo esférico (polvo_3d.py) sigue pendiente: el problema de alineación polvo/mapa no se resolvió y quedó revertido a modo solo-descarga. Es una pieza que vale la pena recuperar cuando haya tiempo.
- La integración de polvo_3d_camtest.py como pipeline diario automático todavía no está hecha — el prototipo funciona manualmente pero aún no tiene tarea programada.
- El límite sur de MONARCH en el paralelo 30°N sigue siendo un techo para la cobertura del polvo sahariano. La alternativa con CAMS global no ha funcionado por ahora.
- Una fuente en Buclemaps3001 sigue rota de antes: h52 apunta a mediterranean_av.mpg que no existe.
📆 Próxima entrada: semana del 1 al 7 de junio de 2026.