En el tutorial de hoy te voy a enseñar a consumir la API de Bots de Telegram desde una Raspberry Pi 4. Vamos a monitorear una cámara conectada a la Raspberry y enviar una foto periódicamente a Telegram, sirviendo como una cámara de vigilancia.
La ventaja de tener una cámara de seguridad con Telegram y Raspberry Pi es que el almacenamiento es ilimitado y seguro, ya que no hay límite de las fotos enviadas y nadie más que el receptor puede ver las fotos tomadas con la cámara.
Veamos cómo tomar fotos con el módulo de la cámara de la Pi y enviarlas en nombre de un Bot de Telegram a un canal, grupo o usuario usando un Bot de Telegram desde la línea de comandos con cURL.
En tutoriales anteriores ya te enseñé a enviar una foto desde la CLI.
Ahora vamos a hacer exactamente lo mismo, pero la foto será tomada en tiempo real, además de que vamos a colocarle la fecha y hora actual a la descripción.
Te recomiendo revisar el tutorial previamente citado, pues ahí te explico cómo obtener tu Token de Bot y el id del chat al que serán enviadas las fotos.
A continuación te muestro el código del script que toma una foto con el módulo de la cámara y la envía en nombre de un Bot de Telegram a través de cURL. Queda así:
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/parzibyte"
cd /home/parzibyte
token_bot="Aquí va el token de tu bot"
id_chat="Aquí va el id del canal, usuario, grupo, etcétera"
printf -v FECHA_ACTUAL "%(%F_%H:%M:%S)T"
url_bot="https://api.telegram.org/bot${token_bot}/sendPhoto?chat_id=$id_chat&caption=$FECHA_ACTUAL"
nombre_foto="$FECHA_ACTUAL.jpg"
timeout 10 rpicam-jpeg -n -t 2000 --gain 1.5 -o "$nombre_foto"
curl -F photo=@"$nombre_foto" "$url_bot"
rm "$nombre_foto"
En primer lugar estoy especificando la variable PATH
para que el script pueda ser invocado con Cron o desde un servicio. En el mismo script navego con cd al lugar donde serán colocadas las fotos de manera temporal.
Obtengo la fecha actual en la variable FECHA_ACTUAL
para colocarlo como caption
de la foto tomada con la cámara, luego defino la URL de invocación que estará conformada por el token y los parámetros del id del chat y el caption.
Para tomar una foto con la Raspberry Pi se puede ejecutar: rpicam-jpeg -n -t 2000 --gain 1.5 -o foto.jpg
Pero en mi caso pude notar que a veces el programa se quedaba esperando infinitamente por algún error, así que mejor lo ejecuté a través de timeout
, de modo que el proceso será terminado si no se cumple en 10 segundos.
Finalmente envío la foto con curl
pasándole el nombre del archivo y la URL; después estoy eliminando la foto que fue tomada con la cámara.
Una vez que hayas configurado tu script que toma fotos con la cámara de la Pi y las envía a Telegram vas a poder ejecutarlo en cualquier momento y, cada vez que sea ejecutado, se enviará una nueva foto tomada en ese momento.
Si quieres puedes ejecutar un ciclo infinito en el script, así se van a tomar fotos infinita y periódicamente.
También puedes ejecutarlo con Cron o en un servicio. Yo elegí este último y mi servicio quedó así:
[Unit]
Description=Camara
After=network-online.target
[Service]
Type=simple
Restart=always
RestartSec=1
User=parzibyte
ExecStart=/home/parzibyte/enviar.sh
[Install]
WantedBy=multi-user.target
La creación y configuración del servicio quedan fuera del alcance de este tutorial; basta con especificar que el servicio va a ejecutar el script que envía la foto a Telegram infinitamente, mismo que es especificado con ExecStart
.
Otra cosa interesante es el After
configurado en network-online.target
; esto es para comenzar a subir las fotos a Telegram tan pronto la red está disponible.
De este modo, siempre que la Raspberry Pi 4 encienda se va a estar tomando una foto y enviándose a Telegram de manera infinita. Yo he probado y al momento de escribir este post había enviado hasta 38244 fotos:
Si usas una Raspberry Pi 4 para enviar fotos periódicas puedes compartir dichas fotos con un grupo de personas o en tu chat individual teniendo la certeza de que las fotos se van a quedar ahí por siempre.
Nunca te vas a quedar sin almacenamiento en tu Pi, y vas a poder monitorear una cámara en tiempo real usando la API segura de Telegram.
Recuerda que esto solo es un ejemplo; tú puedes reducir el tiempo de la toma de la foto, hacer una cola para subir las fotos con cierto retraso, reducir la calidad, etcétera.
A mí me viene perfecto para tomar fotos periódicamente con mi cámara, si bien no son vídeos me permiten vigilar el entorno en tiempo real. Con algunas optimizaciones y mejoras se puede reducir la latencia para incluso enviar vídeos.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.