Gestionar una Raspberry con Telegram

rasp-teleg

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 hecho esto, tan solo nos quedará conocer nuestro Id de Telegram (el del móvil en el que queremos recibir las respuestas.

Para verlo es necesario ir a la dirección

https://api.telegram.org/bot**Vuestro Token**/getUpdates

Sustituyendo el texto en negrita por el Token obtenido en el proceso anterior.

El resultado será similar a lo siguiente:

{"ok":true,"result":[{"update_id":987654321,
"message":{"message_id":3,"from":{"id":12345678,"is_bot":false,"first_name":"Santiago","last_name":"Crespo","language_code":"es"},"chat":{"id":12345678,"first_name":"Santiago","last_name":"Crespo","type":"private"},"date":1618144771,"text":"Sss"}},{"update_id":987654321,

Tomando la información ficticia de este ejemplo nuestro Id es el 87654321.

Es decir, el Token identifica a nuestra Raspberry , y el id a nosotros. Lo volveremos a ver en un ejemplo que incluyo más adelante.

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.

__________________________

# -*- coding: utf-8 -*-

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('NUESTROTOKEN')
bot.message_loop(handle)

while 1:
 time.sleep(3)

__________________________

(Cuidado con las tabulaciones, y con las comillas, en este último caso en ocasiones al hacer pegar/paste el sistema las pega como acentos y al ejecutar el programa nos da error de sintaxis.

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()))

A continuación os incluyo un ejemplo de programa Python que nos envía un mensaje y una foto que hemos guardado como foto.jpg al usuario (ficticio) 12345678.

import time
import datetime
import commands
import subprocess
import telepot

fichfoto= 'foto.jpg'
token = 'Token generado con el @BotFather'
bot = telepot.Bot(token)
foto = open(fichfoto, 'rb')

bot.sendMessage('12345678', 'RPI3+ enviando Prueba')
bot.sendPhoto('12345678', foto)

Rev 04/2021

Anuncio publicitario
Esta entrada fue publicada en Raspberry Pi y etiquetada , , , , , , , , , . Guarda el enlace permanente.

5 respuestas a Gestionar una Raspberry con Telegram

  1. Álvaro dijo:

    Hola, he hecho todo tal cual comentas y no me funciona (no obtengo respuesta, y en el terminal se queda en espera constantemente). ¿Puedes ayudarme? Grcias!!

    Me gusta

    • elalbir28 dijo:

      Hola Alvaro, ¿puedes explicar con más detalle qué te ocurre exactamente? ¿No recibes el mensaje en el móvil o en la Raspberry Pi? ¿Has comprobado que el token se haya informado correctamente? Ya me cuentas.

      Me gusta

  2. edgar dijo:

    hola bro, una consulta, porque me sale este esrror al momento de hacer correr tu script

    File «edgar.py», line 10
    if command == ‘/time’:
    ^

    este es el código completo, me parece que la libreria commands no encuentra……. o nose que pueda ser, ayudaaaaaaaaaaaaaa jefe

    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(‘12345678’, str(datetime.datetime.now()))
    bot = telepot.Bot(‘602726791:AAHDgyZ_axSnhWv3mFq1nLNU71eBjRtp7-4’)
    bot.message_loop(handle)

    while 1:

    time.sleep(3)

    Me gusta

    • elalbir28 dijo:

      Hola Edgar, buenas tardes,

      Revisando tu mensaje se me ocurren dos errores posibles:

      -las tabulaciones: en python son fundamentales ya que es su forma de establecer orden y jerarquías en las definiciones y condiciones.

      -las comillas simples: si has copiado el código haciendo copiar/pegar muy probablemente se hayan pegado tildes/acentos en lugar de comillas simples, visualmente son casi iguales pero son distintos caracteres, por lo que el cambio de uno por otro te dará errores de ese tipo. Prueba a sustituir las comillas una por una y prueba.

      Ya me dices como ha ido.

      Saludos

      Santi

      Me gusta

  3. Pingback: Como hacer una alarma con una Raspberry Pi | Alteageek, tutoriales, raspberry pi y cisco, en español

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.