Gestionar una Raspberry con Telegram. Rev 9/16

Raspberry con Telegram

Raspberry con Telegram

Raspberry con Telegram

Mí último proyecto ha sido precisamente este, el poder interactuar con mi Raspberry  desde mi teléfono móvil,  gracias a la aplicación Telegram, una herramienta que os permitirá enviar ordenes a vuestra RPI y recibir información de ella, aunque esta esté dentro de una red doméstica, y aun encontrándose por detrás de un Firewall.

Para lograrlo lo primero que tenemos que hacer es actualizar el software, descargar e instalar la API de Telegram ejecutando las siguientes ordenes:

sudo apt-get install python-setuptools
sudo apt-get install python-pip
sudo pip install telepot
git clone https://github.com/eternnoir/pyTelegramBotAPI.git
cd pyTelegramBotAPI

python setup.py install

 

Una vez concluidos los pasos anteriores, lo siguiente es configurar lo que Telegram llama Bot, que no es otra cosa que dar de alta nuestro dispositivo (RPI) de manera que sea identificable dentro de la red Telegram.

Para hacerlo necesitamos entrar en Telegram y crear una conversación con @botfather.

bothfather

Al hacerlo nos aparecerá un mensaje de bienvenida, y otro de presentación en el que se nos resumirán los comandos que @botfather permite para gestionar nuestros Bots.

Nuestro siguiente paso en la creación del Bot, continuando la conversación, ha de ser:

/newbot      telebot

Tras lo que se nos solicitará el nombre que queremos darle a nuestro Bot, que para que os hagáis una idea será el que aparecerá en nuestras conversaciones futuras con él:

Podemos llamarte RPI

Seguidamente se nos pedirá un nombre de usuario (telegram) para nuestro Bot, que para que lo entendáis y no preste a confusión no es otra cosa que el nombre público de vuestro Bot en la base de datos de Telegram. Es importante que el nombre elegido acabe con las letras bot 

Es posible que el nombre elegido ya exista, ante lo que se os volverá a solicitar, os recomiendo buscar un nombre singular y a la vez fácil de recordar por vosotros ya que será el que Telegram (@botfather) os pida en el futuro para su gestión.

En este ejemplo raspberrypi2alteabot

Si el nombre asignado no existe, se nos confirmará el alta en el momento y se nos indicará una referencia que ellos llaman Token compuesta de letras y números, que necesitaremos utilizar en cualquier programa que desarrollemos en el futuro para identificar a nuestra Raspberry previamente al envío de cualquier mensaje.

Continuando con la configuración, desde la conversación con @botfather podemos asignar una imagen a nuestro Bot con la orden

/setuserpic

O cambiar su nombre (el que aparece en la conversación) por otro con:

/setname

Una vez acabada la configuración llega la parte más divertida, la empezar de interactuar con nuestro Raspi-bot, para ello crearemos una conversación (siguiendo el ejemplo) con @raspberrypi2alteabot 

tele-mov

Para haceros el trabajo más sencillo a continuación os adjunto un sencillo script que he hecho en python consistente en darnos la fecha y la hora de ese preciso instante con tan solo enviar la orden  /time

 

Os sorprenderá ver la rapidez de la respuesta.

__________________________

 

import time
import datetime
import telepot
import commands

def handle(msg):
  print msg
chat_id = msg[‘from’][‘id’]
command = msg[‘text’]
  if command == ‘/time’:
bot.sendMessage(chat_id, str(datetime.datetime.now()))
bot = telepot.Bot(‘AQUI INFORMAMOS NUESTRO TOKEN’)
bot.message_loop(handle)

while 1:

time.sleep(3)

__________________________

Si ejecutáis el programa, hacéis una prueba enviando el comando /time , y revisáis lo que aparece en la pantalla de vuestra Raspberry, veréis una secuencia de datos entre los que  aparecerá una cadena numérica antecedida de u’id’:

Esa cadena, normalmente de 8 dígitos, es el identificativo (usuario en Telegram) de la persona que ha enviado la orden, un dato muy útil si por ejemplo queremos restringir el envío de respuestas a un usuario/s concreto/s, con tan solo sustituir chat_id por ese dato (entre comillas) en el comando de envío del mensaje.

Así, para por ejemplo enviar la respuesta tan solo al usuario 12345678 lo haríamos de la siguiente manera:

bot.sendMessage(‘12345678’, str(datetime.datetime.now()))