Imágenes de satélite - Imágenes del tiempo - Actualización 1

Hola a todos,

En mi publicación « Batería de cámara - Cámara de observación de vida silvestre - QNAP - Reolink - Integración de Immich » os mostré mi variante de cómo podéis mostrar imágenes de una cámara de batería en Gladys.
Al hacerlo, me di cuenta de que la integración « Immich Slide Show » os muestra dos cámaras, por lo que podéis mostrar dos álbumes del servidor Immich.

De ahí se me ocurrió la idea de acceder a los satélites meteorológicos actuales. Es decir, obtener datos meteorológicos actuales para toda Europa.

Bueno, algo así existe y además es gratis y sin registro.

Aquí tenéis un enlace:

Eumetsat

Si abris el enlace, deberías obtener lo siguiente:

Muestra los rayos y tormentas sobre Europa…

Variante 1:

Podéis insertar las imágenes directamente en Gladys, es decir, a través del widget Photo.

Problema: Los archivos se generan todos en tiempo de ejecución y son grandes. Por lo tanto, si abris Gladys y vais al panel de control, estas imágenes se generarán y descargarán de nuevo cada vez.

Variante 2:

Crear un Docker, descargar allí las imágenes deseadas cada 2 horas, luego crear un álbum en el servidor Immich, vincular el directorio de descarga del Docker como biblioteca externa, supervisar esto y, finalmente, vincular la segunda cámara del álbum a través de la integración de Gladys… Listo

Paso 1:

Estructura de directorios:

Es decir:

Un directorio image-downloader con los subdirectorios images y scripts. En scripts ya hay un script para la descarga automática.

Paso 2:

YAML para la ejecución automatizada de scripts:

version: "3.8"

services:
image-downloader:
image: alpine:latest
container_name: image-downloader
restart: unless-stopped
volumes:
- /share/Container/image-downloader/images:/data/images:rw
- /share/Container/image-downloader/scripts:/scripts:ro
- /etc/localtime:/etc/localtime:ro
environment:
- TZ=Europe/Berlin
command: >
sh -c "
apk add --no-cache curl tzdata &&
echo '0 \*/2 \* \* \* /bin/sh /scripts/download.sh >> /proc/1/fd/1 2>&1' > /etc/folders_cron &&
crontab /etc/folders_cron &&
exec crond -f -l 2
"

La YAML está configurada para que el script download.sh se ejecute cada dos horas.

Aquí está el script download.sh:

#!/bin/sh

#Establecer zona horaria para la hora correcta
export TZ="Europe/Berlin"
echo "\[$(date '+%Y-%m-%d %H:%M:%S')\] --- Tarea de descarga iniciada ---"

#URLs para las imágenes de EUMETSAT

URL1="https://view.eumetsat.int/geoserver/wms?service=WMS&version=1.3.0&request=GetMap&layers=backgrounds:ne_gray,mtg_fd:li_afa,backgrounds:ne_10m_coastline,backgrounds:ne_boundary_lines_land&bbox=-1000000,3800000,1500000,5400000&width=3600&height=2160&srs=AUTO:97004,9001,0,0&styles=&format=image/png&bgcolor=0x000000"
URL2="https://view.eumetsat.int/geoserver/wms?service=WMS&version=1.3.0&request=GetMap&layers=backgrounds:ne_gray,mtg_fd:rgb_geocolour,backgrounds:ne_10m_coastline,backgrounds:ne_boundary_lines_land&bbox=-1000000,3800000,1500000,5400000&width=3600&height=2304&srs=AUTO:97004,9001,0,0&styles=&format=image/png&bgcolor=0x000000"

#Directorio de destino (DENTRO del contenedor!)

OUTPUT_DIR="/data/images"
TIMESTAMP=$(date +%Y%m%d\_%H%M%S)

#Descarga mediante curl
echo "\[$(date '+%Y-%m-%d %H:%M:%S')\] Descargando imagen 1..."
curl -sSL -o "${OUTPUT_DIR}/${TIMESTAMP}\_bild1.png" "$URL1"
echo "\[$(date '+%Y-%m-%d %H:%M:%S')\] Descargando imagen 2..."
curl -sSL -o "${OUTPUT_DIR}/${TIMESTAMP}\_bild2.png" "$URL2"

#--- NUEVO: Limpieza (Elimina imágenes con más de 3 días de antigüedad) ---

#echo "\[$(date '+%Y-%m-%d %H:%M:%S')\] Limpieza de imágenes antiguas..."

#find "${OUTPUT_DIR}" -type f -name "\*.png" -mtime +3 -delete
echo "\[$(date '+%Y-%m-%d %H:%M:%S')\] --- Tarea de descarga finalizada con éxito ---"

#Adicional: Si el script download.sh se edita en Windows, entonces se pierden los finales de línea

#La solución es el siguiente comando SSH

#Solo está aquí como recordatorio, no ejecutar el script

#sed -i 's/\\r$//' /share/Container/image-downloader/scripts/download.sh

Atención: El script ya incluye dos ampliaciones, por un lado la eliminación de todas las imágenes que tienen más de tres días de antigüedad y luego el problema si se crea el script con Windows, ya que a veces se pierden los finales de línea. Luego, simplemente ir al servidor mediante SSH y ejecutar el comando sed.

Estado intermedio:

El resultado se verá así:

Tenéis así dos imágenes de satélite en vuestro ordenador, una con datos de rayos y tormentas, la otra con nubes.

Ahora las variantes:

Si os fijáis en la URL, allí pone algo de

layers=backgrounds:ne_gray,mtg_fd:li_afa,backgrounds:ne_10m_coastline,backgrounds:ne_boundary_lines_land

Aquí podéis cambiar la visualización, por ejemplo con fronteras, sin fronteras, nubes, rayos, etc.

La siguiente posibilidad es la selección del recorte:

bbox=-1000000,3800000,1500000,5400000&width=3600&height=2160

muestra, por ejemplo, desde Portugal hasta Polonia y desde Noruega hasta el norte de Italia.

Aquí también podéis ajustarlo, lo importante es solo un ajuste de la relación entre width y height, de lo contrario se producen errores.

¿Qué sigue?

Como se describe en mi publicación anterior. Las imágenes están ahí. Vincular el directorio en la YAML del servidor Immich. Luego, configurar la biblioteca externa en el servidor Immich. Crear un álbum a partir de esto. Activar las supervisiones del servidor Immich, generar un flujo de trabajo y, finalmente, simplemente suscribirse a este álbum en la « Immich Slide Show » ya instalada y mostrarlo en la segunda cámara.

Muchas gracias por vuestra atención y si tenéis ideas / mejoras / sugerencias, etc., ¡adelante, me alegro!

tom

Gracias por este tutorial, me he permitido poner tus archivos yaml y script en texto preformateado para que sea más legible.

@mutmut… aún debo aprenderlo, muchas gracias por el apoyo.

De antemano, el resultado:

  • Las imágenes satelitales se descargan automáticamente desde Docker (actualmente cada 2 horas, dos vistas diferentes)
  • En el servidor Immich hay un álbum, que se llena a través de una biblioteca externa
  • El llenado de nuevas imágenes es monitoreado automáticamente por el servidor Immich y actualiza el álbum
  • En Gladys, luego la integración de Immich se encarga de la visualización y pone el álbum a disposición a través de una cámara virtual:

Actualización de actualización

El tamaño de las imágenes de los satélites (a veces más de 10 MB) ya me molestaba al descargar.
Al mismo tiempo, nunca supe qué imagen se mostraba.

Por lo tanto, paso 1:
A través del YAML del descargador de imágenes instalamos un pequeño programa:

version: "3.8"

services:
  image-downloader:
    image: alpine:latest
    container_name: image-downloader
    restart: unless-stopped
    volumes:
      - /share/Container/image-downloader/images:/data/images:rw
      - /share/Container/image-downloader/scripts:/scripts:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      - TZ=Europe/Berlin
    command: >
      sh -c "
      apk add --no-cache curl tzdata imagemagick font-noto &&
      echo '0 */2 * * * /bin/sh /scripts/download.sh >> /proc/1/fd/1 2>&1' > /etc/folders_cron &&
      crontab /etc/folders_cron &&
      exec crond -f -l 2
      "

Se trata de imagemagick y en el script de descarga utilizamos este Imagemagick para grabar un timestamp en los datos de la imagen:

#!/bin/sh

# Establecer zona horaria para la hora correcta
export TZ="Europe/Berlin"

echo "[$(date '+%Y-%m-%d %H:%M:%S')] --- Tarea de descarga iniciada ---"

# URLs para las imágenes de EUMETSAT

# GeoColour RGB Meteosat 3.Generación
URL1="https://view.eumetsat.int/geoserver/wms?service=WMS&version=1.3.0&request=GetMap&layers=backgrounds:ne_gray,mtg_fd:rgb_geocolour,backgrounds:ne_10m_coastline,backgrounds:ne_boundary_lines_land&bbox=46.26,4.24,56.04,16.68&width=1844&height=2304&srs=EPSG:4326&styles=&format=image/png&bgcolor=0x000000"

# Tasa de precipitación Meteosat 3.Generación
URL2="https://view.eumetsat.int/geoserver/wms?service=WMS&version=1.3.0&request=GetMap&layers=backgrounds:ne_gray,mtg_fd:h40b,backgrounds:ne_10m_coastline,backgrounds:ne_boundary_lines_land&bbox=46.26,4.24,56.04,16.68&width=1844&height=2304&srs=EPSG:4326&styles=&format=image/png&bgcolor=0x000000"

# Imagen térmica de noche Meteosat 3.Generación
URL3="https://view.eumetsat.int/geoserver/wms?service=WMS&version=1.3.0&request=GetMap&layers=backgrounds:ne_gray,mtg_fd:ir105_hrfi,backgrounds:ne_10m_coastline,backgrounds:ne_boundary_lines_land&bbox=46.26,4.24,56.04,16.68&width=1844&height=2304&srs=EPSG:4326&styles=&format=image/png&bgcolor=0x000000"

# Imagen térmica de día Meteosat 3.Generación
URL4="https://view.eumetsat.int/geoserver/wms?service=WMS&version=1.3.0&request=GetMap&layers=backgrounds:ne_gray,mtg_fd:vis06_hrfi,backgrounds:ne_10m_coastline,backgrounds:ne_boundary_lines_land&bbox=46.26,4.24,56.04,16.68&width=1844&height=2304&srs=EPSG:4326&styles=&format=image/png&bgcolor=0x000000"

# Directorio de destino (DENTRO del contenedor!)
OUTPUT_DIR="/data/images"
mkdir -p "${OUTPUT_DIR}"

# Timestamps: uno para los nombres de archivo, otro para la visualización en la imagen
TIMESTAMP=$(date '+%Y%m%d_%H%M')
TIMESTAMP_DISPLAY=$(date '+%d.%m.%Y %H:%M')

# Obtener la hora actual en formato de 24 horas (00 - 23)
CURRENT_HOUR=$(date +%H)

# Función de ayuda: descarga + verificación de errores + grabar timestamp
download() {
    URL="$1"
    NAME="$2"
    LABEL="$3"
    FILE="${OUTPUT_DIR}/${NAME}_${TIMESTAMP}.png"

    echo "[$(date '+%Y-%m-%d %H:%M:%S')] Descargando ${NAME}..."
    if curl -sSfL -o "$FILE" "$URL"; then
        if command -v magick >/dev/null 2>&1; then
            magick "$FILE" -gravity southeast \
                -pointsize 48 -fill white -undercolor 'rgba(0,0,0,0.55)' \
                -annotate +20+20 "${LABEL} ${TIMESTAMP_DISPLAY}" "$FILE" 2>/dev/null \
                || echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR al grabar en ${NAME}!"
        else
            echo "[$(date '+%Y-%m-%d %H:%M:%S')] ${NAME}: Faltan ImageMagick - ¡sin timestamp en la imagen!"
        fi
    else
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: Descarga de ${NAME} no exitosa!"
        rm -f "$FILE"
    fi
}

# 1. Descarga: GeoColour
download "$URL1" "GeoColour" "GeoColour"

# 2. Descarga: Tasa de precipitación
download "$URL2" "TasaPrecipitacion" "Precipitación"

# 3. Descarga programada para imágenes térmicas (cambio entre día y noche)
if [ "$CURRENT_HOUR" -ge 8 ] && [ "$CURRENT_HOUR" -lt 18 ]; then
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] Operación diurna ($CURRENT_HOUR:00)."
    download "$URL4" "TermicoDia" "Imagen térmica día"
else
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] Operación nocturna ($CURRENT_HOUR:00)."
    download "$URL3" "TermicoNoche" "Imagen térmica noche"
fi

# --- Limpieza (Elimina imágenes más antiguas de 24 horas) ---
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Limpieza de imágenes antiguas (más de 24 horas)..."
find "${OUTPUT_DIR}" -type f -name "*.png" -mmin +1440 -delete

echo "[$(date '+%Y-%m-%d %H:%M:%S')] --- Tarea de descarga finalizada ---"

# Adicional: Si la download.sh se edita a través de Windows, entonces es posible que se pierdan los saltos de línea
# Esto se puede solucionar con el siguiente comando SSH
# Solo está aquí como recordatorio, no ejecutar a través del script
# sed -i 's/\r$//' /share/Container/image-downloader/scripts/download.sh

# Iniciar el script para fines de prueba mediante SSH:
# docker exec image-downloader sh /scripts/download.sh

Al final, simplemente tomé uno de los enlaces, lo puse en Mistral y le dije: Por favor, delimita la caja a Alemania más 100 km de margen.

Hecho:

La imagen original

Aquí pueden ver claramente cómo se muestra el tipo de imagen y el timestamp en la esquina inferior derecha.

Las imágenes ahora solo tienen unos 1,2 MB de tamaño y en Gladys se ven así:

Saludos a todos
Toma