RaspberryPi / febrero 1, 2016

Raspberry Pi: Notifica cualquier cosa por Telegram

Hace cosa de dos años publiqué una entrada que tuvo muy buen resultado y creo que es la entrada con más comentarios que tengo. Se trata de esa que explicaba como recibir notificaciones de la temperatura de Raspberry Pi vía Whatsapp. ¡Que tiempos aquellos! Hace un año y medio que uso Telegram y que he dejado de usar Whatsapp y ahora toca hacer la entrada tan prometida por mi en Telegram.

La gente de Telegram nos ha solucionado la vida de una manera exagerada. Gracias a los bots de Telegram podemos hacer mil cosas con ellos, enviar fotografías, enviar stickers, emoticonos, ejecutar comandos bash, y un largo etcétera. En esta entrada vamos a hacer exactamente lo mismo que en la anterior entrada: recibir una notificación con la temperatura de la Raspberry Pi. ¡Al lío!

Instalación API de Telegram

Nos conectamos por SSH a la Raspberry Pi y nos descargamos la API de Telegram y la instalamos:

A traves del repositorio de Github:

# git clone https://github.com/eternnoir/pyTelegramBotAPI.git
# cd pyTelegramBotAPI
# python setup.py install

Durante la instalación a mi me dio un error debido a que me faltaba un paquete de python llamado python-setuptools, así que esto se soluciona instalando el paquete correspondiente y listo.

# apt-get install python-setuptools

Creación del bot

Ahora desde nuestro Telegram creamos una nueva conversación con BotFather (@botfather) y le enviamos un mensaje cualquiera para que nos muestre todas las opciones.

/newbot - create a new bot
/token - generate authorization token
/revoke - revoke bot access token
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setinline - change inline settings
/setinlinefeedback - change inline feedback settings
/setcommands - change bot commands list
/setjoingroups - can your bot be added to groups?
/setprivacy - what messages does your bot see in groups?
/deletebot - delete a bot
/cancel - cancel the current operation

Para crear un bot nuevo escribirmos:

 /newbot

Y nos responde lo siguiente:

Alright, a new bot. How are we going to call it? Please choose a name for your bot.

Y escribimos un nombre para nuestro bot:

falsobot

Y nos responde lo siguiente:

Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.

Y le respondemos:

falsobot_bot

Una vez enviado eso, nos responderá con nuestro token que usaremos más tarde. (Donde pone falsobot, pon el nombre del bot que quieras, he puesto esto para no descubrir el nombre de mi bot y que podáis ejecutar cosas en mi Raspberry Pi xD).

Creación del fichero en Python

El siguiente paso es crear un fichero en Python donde estará «escuchando» la conversación con el bot que hemos creado y si hay alguna palabra clave ejecutar algo si así lo hemos dicho.

Mi código completo lo podéis encontrar en mi GitLab, aquí y os dejo las modificaciones que tenéis que hacer:

En primer lugar copiar vuestro token donde dice:

TOKEN = 'vuestroToken' #Nuestro token del bot

A diferencia del código original de NeositeLinux, yo he importado dos librerías más:

import os
import commands

Estas permiten ejecutar comandos bash desde Python. Luego en el apartado de funciones es donde más tenéis que tocar porque siempre se repite la misma estructura:

@bot.message_handler(commands=['temp'])
def command_temp(m):
	cid = m.chat.id
	temp = commands.getoutput('sudo /opt/vc/bin/vcgencmd measure_temp')	
	bot.send_message(cid, temp)

La variable temp guarda el resultado del comando que hay entre comillas simples y que luego se envía. Con la otra librería, os, pasa que se ejecuta y se guarda en la variable si se ha ejecutado correctamente o no. Por lo que usaremos commands.getoutput(‘comando’) para guardar el resultado de un comando y usaremos os.system(‘comando’) para ejecutar un comando en el servidor y el bot nos responderá 0 para decirnos que se ejecutó correctamente y diferente a 0 para mostrarnos algún error.

Por ejemplo:

test = os.system('aptitude update')

El comando con os.system nuestra lo siguiente en Telegram:

0

En cambio, cuando pongo esto:

test = commands.getoutput('aptitude update')

El resultado es muy distinto:

Hit http://raspberrypi.collabora.com wheezy Release.gpg
Hit http://mirrordirector.raspbian.org wheezy Release.gpg
Hit http://archive.raspberrypi.org wheezy Release.gpg
Hit http://raspberrypi.collabora.com wheezy Release
Hit http://mirrordirector.raspbian.org wheezy Release
Hit http://archive.raspberrypi.org wheezy Release
Hit http://raspberrypi.collabora.com wheezy/rpi armhf Packages
Hit http://mirrordirector.raspbian.org wheezy/main armhf Packages
Hit http://mirrordirector.raspbian.org wheezy/contrib armhf Packages
Hit http://archive.raspberrypi.org wheezy/main armhf Packages
Hit http://mirrordirector.raspbian.org wheezy/non-free armhf Packages
Hit http://mirrordirector.raspbian.org wheezy/rpi armhf Packages
Ign http://raspberrypi.collabora.com wheezy/rpi Translation-en_GB
Ign http://raspberrypi.collabora.com wheezy/rpi Translation-en
Ign http://archive.raspberrypi.org wheezy/main Translation-en_GB
Ign http://archive.raspberrypi.org wheezy/main Translation-en
Ign http://mirrordirector.raspbian.org wheezy/contrib Translation-en_GB
Ign http://mirrordirector.raspbian.org wheezy/contrib Translation-en
Ign http://mirrordirector.raspbian.org wheezy/main Translation-en_GB
Ign http://mirrordirector.raspbian.org wheezy/main Translation-en
Ign http://mirrordirector.raspbian.org wheezy/non-free Translation-en_GB
Ign http://mirrordirector.raspbian.org wheezy/non-free Translation-en
Ign http://mirrordirector.raspbian.org wheezy/rpi Translation-en_GB
Ign http://mirrordirector.raspbian.org wheezy/rpi Translation-en
Reading package lists..

¿Notáis la diferencia? (yo es que no soy un experto en Python y lo único que hago es suponer cosas de lo que se de programación xD). Además si os fijáis se pueden ejecutar scripts en bash como habéis visto en la parte del comando /saludo.  Imaginad todas las virguerias que nos podemos montar con los bots de Telegram.

Ejecutar programa en Python

Bien, cuando tenemos nuestro programa en Python escrito y preparado para funcionar lo podemos dejar ejecutado en segundo plano así:

# python nombredenuestrobot.py &

Y ya tenemos nuestro bot siempre activo. Como siempre podemos crear un script para que ejecute nuestro bot al iniciar nuestra Raspberry Pi (ese proceso lo encontraréis aquí).

Os dejo aquí un vídeo que he grabado para que veáis como funciona:

Fuente: Neositelinux

Ningún comentario “Raspberry Pi: Notifica cualquier cosa por Telegram”

avatar
500
  Suscribirte  
Notificarme

Utilizamos cookies propias y de terceros para mejorar nuestros servicios. Si continúa navegando, consideramos que acepta su uso. Doble clic sobre aquí para cerrar.