Buenas,
Tras un par de cambios de proveedor de servicios de internet y la inestabilidad de los antiguos servicios de webcam de Wunderground hemos buscado un método alternativo que no requiera de hosting, VPS ni montar un servidor local visible desde internet, el cual implica utilizar Google Drive para el almacenamiento de las imágenes y Rclone para el envío y la sincronización. Queremos compartirlo para la gente que se encuentra en una situación similar a la nuestra y no puede tomar ninguna de las dos alternativas previas para enviar imágenes de webcams a Meteoclimatic.
Actualmente lo hemos probado con una de nuestras estaciones. Funciona sin problema y de manera mucho más fiable que con la infraestructura que usábamos previamente, lo iremos desplegando poco a poco para las estaciones restantes.
Tradicionalmente para subir fotos a Meteoclimatic se requería un hosting que almacenase las fotos generadas por las webcam o montar un servidor propio en local, ambos tienen las siguientes desventajas:
> Hosting / VPS:
- Por lo general, contratar un hosting o una VPS conlleva un coste mensual.
- Algunos proveedores baratos no ofrecen asistentes de configuración y el usuario debe desplpegar su propio servidor web / FTP.
> Hosting local:
- Requiere de una ip pública. Con determinados proveedores o en estaciones que usan la red de telefonía para enviar datos esto no es posible por los CGNAT.
- Requiere desplegar los servicios previamente mencionados.
- Requiere ip fija o DDNS en su defecto.
En nuestro caso, una de las estaciones se encuentra detrás de un CGNAT y en otra tenemos problemas a la hora de configurar el router, por lo que nuestra situación no admite el hosting local ni una VPS.
PrerequisitosPara poder usar este método es necesario tener:
1. Una cuenta de Google.
2. Un ordenador normal o un SBC tipo Raspberry Pi. Puede tener Linux o Windows y puede ser el mismo que envía los datos a Meteoclimatic.
3. Una cámara que guarde las imágenes en el ordenador.
4. Si el ordenador que se va a usar para enviar las imágenes no tiene interfaz gráfica, otro ordenador "auxiliar" que si la tenga para iniciar sesión con Rclone.
Es importante tener configurada previamente la cámara para que tome capturas periódicamente y las guarde en el disco duro del ordenador.
DespliegueEsta guia es para Linux, concretamente Debian en una Orange Pi Zero 2, pero también es válida para Raspberry Pi OS y cualquier otro Linux en un SBC o ordenador normal. Es posible usar Windows, ya que existe una versión de Rclone compatible, pero esta guia por el momento no lo cubre (Muchos pasos deberían ser iguales).
1. Instalar RcloneRclone es un programa que permite interactuar con múltiples servicios de almacenamiento en la nube desde la linea de comandos y sin necesidad de utilizar una aplicación propietaria o navegador web. Nos va a servir para subir imágenes a Google Drive (Ojo, no a Google Photos) de manera periódica.
Para instalarlo es necesario descargarlo desde
https://rclone.org/downloads/ y no desde los repositorios de Debian, ya que tienen una versión antigua que no soporta el método de autenticación actual de Google Drive.
En nuestro caso, se descarga el .deb para ARMv7 con:
wget
https://downloads.rclone.org/v1.68.2/rclone-v1.68.2-linux-arm-v7.debY se instala con:
sudo dpkg -i "rclone-v1.68.2-linux-arm-v7.deb"
*Si la descarga da error es posible que se haya actualizado el programa y el enlace ya no este disponible, debe irse a la página de descargas y copiar el enlace nuevo correspondiente al sistema en el que se vaya a instalar.
**Si la instalación falla, es posible que sea necesario descargar alguna dependencia o que la versión de Rclone descargada no sea compatible con la arquitectura de procesador / Sistema operativo, y sea necesario descargar otro instalador.
2. Sincronizar Rclone con Google Drive
Para poder enviar imágenes es necesario que Rclone se sincronice con Google Drive, similar a iniciar sesión en un ordenador nuevo. La página oficial de Rclone tiene un artículo sobre como realizar una sincronización y uso básico (
https://rclone.org/drive/), pero lo detallaremos algo más aquí.
Para configurar Rclone se lanza:
sudo rclone config
Este paso configurará Rclone y guardará las claves para root. En nuestro caso lo hacemos así porque cron se ejecuta como root. Para usar el usuario actual bastaría con quitar sudo.
Una vez se lanza el asistente, se introduce "n" para crear un nuevo remote (Una conexión con un servicio web). Se le asigna un nombre (En nuestro caso "drive") y cuando se solicita el tipo de almacenamiento a configurar, simplemente se escribe drive.
(1 / 1a)
Si se solicita crear una Google Application Client Id o Secret, puede dejarse en blanco por defecto. No configurarlo implica que la transferencia o el acceso son más lentos, pero funciona igual de bien y no suele ser necesario. En nuestro caso usamos una cuenta exclusivamente para las imágenes, por lo que configuramos la scope a 1.
(2)
Las service account credentials pueden dejarse en blanco también y podemos proseguir sin editar la configuración avanzada.
(3)
A continuación se va a realizar la sincronización. En este caso, como se trata de un ordenador sin entorno de escritorio ni interfaz gráfica en la que pueda lanzarse un navegador, seleccionamos que no. Para autenticar esta máquina, necesitamos otro ordenador con entorno de escritorio o interfaz gráfica y Rclone instalado. En la máquina alternativa debe ejecutarse la orden "rclone autorize" que se ha generado.
(4)
En la máquina alternativa, tras abrir una terminal y pegar el comando se debería abrir el navegador por defecto y solicitar acceso a la cuenta de Google Drive. Si no se ha iniciado sesión con ninguna cuenta, se solicitará iniciar sesión previamente.
(5)
Cuando se haya autorizado el acceso, en la máquina alternativa aparecerá una clave que se debe copiar y pegar en la máquina original.
(6 / 7)
No lo configuramos como un shared drive y lo mantenemos como remoto. Después de esto, Rclone estará listo y podremos salir del asistente con q (Quit config)
(8 )
3. Enviar la imagen a Google Drive
Para probar Rclone enviaremos la imagen a Google Drive. En nuestro caso, la imagen que se toma de la webcam está almacenada en /var/www/html/photo.jpg y se almacenará en una carpeta de Drive llamada sm, por lo que el comando que se ejecutará en la máquina será:
sudo rclone copy /var/www/html/photo.jpg drive:sm
Si el remote o la carpeta de Drive se llamasen de otra forma, drive:sm pasaría a ser el NombreDelRemote:NombreDeLaCarpeta.
Posteriormente compartimos la imagen haciendo click en los 3 puntos de la derecha y compartir (share). Cambiamos el acceso a "Cualquiera que tenga el enlace puede verlo".
(9 / 10)
4. Obtener la URL de la imagen para Meteoclimatic
Una vez que un archivo es subido a Google Drive, se le asigna una ID que no cambia si el archivo es reemplazado. Vamos a aprovechar este comportamiento para crear un enlace a este archivo y que al actualizarlo, el enlace no cambie (Por este motivo es por el que otros servicios como Mega o Google Photos no pueden usarse).
Desde el menú de compartición de la foto en Drive, copiamos el enlace a la foto, el cual tendrá el siguiente aspecto:
https://drive.google.com/file/d/1Zma4...N1aE/view?usp=sharingEl texto contenido entre /d/ y /view?usp=sharing es el ID de nuestra imagen. Lo copiamos y lo pegamos en el siguiente enlace, substituyendo FileID por el texto:
https://drive.usercontent.google.com/download?id=FileIDEn nuestro caso particular, por ejemplo, tendrá el siguiente aspecto:
https://drive.usercontent.google.com/download?id=1Zma4...N1aESi se pega este enlace en el navegador, debería llevar a una página que únicamente tiene la foto, sin ningún tipo de interfaz de Drive. Esto es importante porque de lo contrario, el scraper de Meteoclimatic no será capaz de extraer la imagen y no funcionará. Esta es la URL que se pegará en Meteoclimatic más adelante.
5. Programar actualizaciones periodicas
En nuestro caso, utilizamos cron para ejecutar un script que extrae y procesa la imagen de la camara cada 5 minutos. Podemos aprovechar cron para también que envié la imagen después de un determinado tiempo con el mismo comando que usamos previamente para subirla.
La forma de enviar las imágenes automáticamente depende del sistema que siga cada estación. Cron es una buena alternativa para Linux, en Windows puede usarse el Programador de Tareas.
Después de un par de envíos el enlace debería mostrar la imagen actualizada y en Drive, la imagen debería tener el permiso de compartir para todos todavía presente.
(11)
*Si esto no funciona o el enlace de compartición cambia, hay que editar el archivo de configuración de Rclone (/root/.config/rclone/rclone.conf para root) y añadir "metadata_owner = off" al final del archivo.
6. Configurar Meteoclimatic
Accedemos al panel de configuración de la estación y pegamos la URL que modificamos previamente. La imagen debería mostrarse durante los próximos 30 minutos en la página de la estación.
--------------------------
Esperamos que esta guia sea de utilidad y que permita enviar imágenes a usuarios que previamente no podían por dificultades de la red.
Un saludo,
Los Vados