Bot de Telegram

Foto de Raspberry Pi a Telegram

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.

Tomar foto con Raspberry Pi y enviarla a Telegram

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.

Enviando foto con Bot de Telegram usando 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.

Script para subir foto a Telegram

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.

Tomar foto periódicamente

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:

Fotos de cámara de Raspberry Pi 4 enviadas a canal de Telegram

Ventajas de usar Raspberry Pi y Telegram como cámara

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.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

5 días hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.