Revista 100% Verde

Bot de Telegram con Raspberry Pi

Por Soloelectronicos @soloelectronico

Telegram Messenger como todos sabemos es una famosa aplicación de mensajería y VoIP desarrollada por los hermanos Nikolái y Pável Dúrov con altas capacidades de alojamiento de contenido (con historial de las conversaciones y mensajes guardados),6​7​ archivos (hasta 1.5 GB, incluyendo documentos, multimedia y animaciones gráficas), búsqueda global de usuarios, sincronización de contactos, llamadas, canales de difusión, supergrupos, entre otros.

Inicialmente en 2013 fue empleado en smartphones pero al poco tiempo en 2014 comenzo a ser multi-plataforma para más de 10 sistemas operativos: Android, iOS, macOS, Windows, GNU/Linux, Firefox OS, navegadores web, entre otros y actualmente rivaliza con Whatsapp al que poco a poco esta intentando arrebatando usuarios.

Además de las características citadas Telegram , ofrece la plataforma de bots que además de hacer conversaciones inteligentes y pueden realizar otros servicios y complementar la experiencia en las conversaciones.

En este post precisamente nos vamos a centraros en el uso del bot Botfather para interactuar desde Telegram con nuestra Raspberry Pi

En primer lugar,para empezar buscaremos BotFather seleccionando la opción "Bot"

Bot de Telegram con Raspberry Pi

Enseguida nos pedirá un nombre , como por ejemplo "soloelectronicos_bot"

ademas tenemos qeuñadir un usuario para nuestro bot ,La regla es que debe terminar en bot , como por ejemplo soloelectronicosbot

Configurar nuestra Raspberry Pi

En primer lugar necesitamos , obtener la dirección IP de la Raspberry Pi

Para conocer la dirección IP del Raspberry Pi, tendrá que conectar la Raspberry Pi a la alimentación y deberá tener conexión a Internet .

Ahora desde un terminal ejecutar el comando La salida desde una Raspberry Pi 3 sera similar a esta:

[email protected]:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.64 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::625:6aec:6f57:df7c prefixlen 64 scopeid 0x20<link>
ether b8:27:eb:67:0c:6f txqueuelen 1000 (Ethernet)
RX packets 661 bytes 45810 (44.7 KiB)
RX errors 0 dropped 1 overruns 0 frame 0
TX packets 585 bytes 202270 (197.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 17 bytes 1004 (1004.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17 bytes 1004 (1004.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether b8:27:eb:32:59:3a txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[email protected]:~ $

Observe que en negrita casi al principio de la salida del comando donde nos indica la dirección IP para podernos conectarnos de forma remota, asi que recomendamos que la anote aparte.

Bot de Telegram con Raspberry Pi

Una vez que tenemos la ip si antes no se ha conectado de forma remota asegúrese de que esta habilitado la conexión tanto por SSH como por VNC , para lo cual nos iremos a Preferencias--> Configuración de la Raspberry Pi y seleccionaremos la pestaña Interfaces.

Es esta pantalla , debemos seleccionar SSH y VNC . Finalmente pulsaremos aceptar pero para que se apliquen los cambios tendremos que reiniciar la Raspberry Pi

Bot de Telegram con Raspberry Pi

Por cierto, si no recuerda la clave que escribió en la primera configuración debería ir a Preferencias->Configuración de la Raspberry Pi y en la pestaña Sistema pulsar cambiar clave, pues sera esta la que tendrá que escribir casa vez que intente conectarse a la Raspberry Pi

Bot de Telegram con Raspberry Pi

Ahora nos conectaremos con el vnc ingresando la dirección ip de l aRaspeberry Pi obtenida, anteriormente , el nombre de usuario ( suele ser pi ) y la password

Ahora por si estamos en una version antigu de Python ( la version ultima ya lo incluye ) deberiamos instalar el indice de paquetes Python

sudo apt-get install python-pip 
 sudo pip install telepot 

Ejecutar el código de Python

Ahora ya tenemos todos los ingredientes faltándonos tan solo el script en python que nos permitirá transcribir la información enviada por Telegram si corresponde con nuestro Token , hacia ordenes qeu pueden ser procesada por la Raspberry Py

El script en Python escrito por Salman Faris es bastante sencillo pues tras importar los modulos necesarios , define el pin 11 con dos estados (on y off) y en funcion de las ordenes que reciba del Telegram pondrá o no a nivel alto dicho pin

Este el código completo del script escrito por Salman:

#coder :- Salman Faris # para numerar en la placa Raspberry Pi por el numero de los pines GPIO.setmode(GPIO.BOARD) # configurar el canal de salida del GPIO GPIO.setup(11, GPIO.OUT) print 'Got command: %s' % command

if command == 'on':
bot.sendMessage(chat_id, on(11))
elif command =='off':
bot.sendMessage(chat_id, off(11))

bot = telepot.Bot('Bot Token')
bot.message_loop(handle)
print 'I am listening...'

Podemos sencillamente clonar el script anterior desde el respositorio git de Salman mediante el siguiente camando git clone:

git clone https://github.com/salmanfarisvp/TelegramBot.git

[email protected]:~ $ git clone https://github.com/salmanfarisvp/TelegramBot.git
Cloning into 'TelegramBot'...
remote: Enumerating objects: 25, done.
remote: Total 25 (delta 0), reused 0 (delta 0), pack-reused 25
Unpacking objects: 100% (25/25), done.
[email protected]:~ $

Ahora tenemos que asignar el Token obtenido en pasos anteriores al script por lo tendremos que editar desde el editor de texto de Python y escribir ahí su valor

Salvaremos los cambios y ejecutaremos el código bien con F5 desde el entorno de programacion de Python o bien desde shell mediante la siguiente orden:

python telegrambot.py 

Ahora si conectamos un led entre el pin 11 y masa podremos activarlo o desactivarlo desde Telegram enviando al bot las frases "on" y "off": inmediatamente, estemos donde estemos deberiamos poder encender el LED o apagarlo cuando envíamos "on" y "off" a nuestro bot desde Telegram.

Obviamente puede modificar el script base de Salman para activar mas cargas ( de hecho hasta 26) que obviamente pueden ser mas complejas que un sencillo led , como puede ser un rele , motor , etc mediante el driver adecuado y a traves de ordenes desde Telegram ( por ejemplo on1, off1, on2, etc)

Volver a la Portada de Logo Paperblog