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:

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.

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.

Para crear un bot nuevo escribirmos:

Y nos responde lo siguiente:

Y escribimos un nombre para nuestro bot:

Y nos responde lo siguiente:

Y le respondemos:

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. Este código lo he cogido y modificado de la web de mi compañero NeositeLinux donde explica con muchos detalles como crear un Bot para Telegram.

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:

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

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:

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:

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

En cambio, cuando pongo esto:

El resultado es muy distinto:

¿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í:

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

El contenido de esta entrada está bajo licencia Creative Commons

Zagur

Técnico Superior de Administración de Sistemas. Estudiando actualmente Desarrollo de aplicaciones web. #GNU #Linux #CSS #HTML #Python #SoftwareLibre #OpenSource

20 comentarios “Raspberry Pi: Notifica cualquier cosa por Telegram”

  1. NeoRanger

    Navega con Firefox 43.0 Firefox 43.0 en Windows 8.1 x64 Edition Windows 8.1 x64 Edition

    Wow!!! Excelente! Con esto se abre un abanico de posibilidades increibles!! No sabia lo de esas 2 librerias, yo tambien recien estoy empezando en Python.
    Gracias por la mencion. Saludos!!

    Responder
  2. sli

    Navega con Google Chrome 48.0.2564.82 Google Chrome 48.0.2564.82 en GNU/Linux x64 GNU/Linux x64

    Una pasada lo del bot. Una pasada. Esta vez si que esta re bien, en mi caso tarda un poco en responder el bot pero ahí esta. Muchas gracias por la info es una pasada. Solo tengo una duda, y es el acceso externo de otra gente al bot, si alguien lo encuentra y le hace cosas raras que?
    Muchas gracias por la info esta genial

    Responder
    • Zagur

      Navega con Firefox 44.0 Firefox 44.0 en Ubuntu x64 Ubuntu x64

      Eso lo veremos en una futura entrada 😛 Estoy mirando de hacer algo divertido con el bot y que solo seamos nosotros quien lo pueda controlar. Que ya te digo, es bastante fácil, se solucionad con un IF. Miraré de hacerlo este fin de semana o el siguiente.

      Saludos,
      Zagur.

      Responder
  3. sli

    Navega con Google Chrome 48.0.2564.82 Google Chrome 48.0.2564.82 en GNU/Linux x64 GNU/Linux x64

    Funciona genial. He hecho algún cambio y he agregado algunos comandos útiles que no suponen peligro alguno para la PI, excepto el WHO por el cual alguien podría sacar la ip en caso de que te conectes vía ssh fuera de la red local, pero no tiene mucha importancia. Ademas puse todo en español para evitar que sea fácil adivinar los comando, un /help lo pone todo el mundo pero como lo tengo yo es mas difícil por si alguien se topa con el bot 🙂

    https://bitbucket.org/TheDarkestFuture/rpi-bot-telegram/src/08f8affd6aaee0c3b1b149e1b8d7cdb749315d92/Bot.py?at=master&fileviewer=file-view-default
    Por cierto esto de git soy muy nuevo y no se si lo tengo bien configurado
    Saludos y gracias por el genial post

    Responder
    • NeoRanger

      Navega con Firefox 43.0 Firefox 43.0 en Windows 8.1 x64 Edition Windows 8.1 x64 Edition

      Geniales los comandos que pusiste. Hoy mismo me voy a poner a terminar mi bot para poder correrlo desde mi RPi. Te cuento que usar Git es super facilisimo, con decirte que como no tengo acceso a ssh en mi trabajo levanto una virtual con Archbang, modifico mi bot ahi, pusheo a git y desde mi telefono celular me conecto al VPS donde tengo el master del repositorio, hago un pull y tengo lo que modifique en la virtual ya asi puedo ejecutar el bot (ya que me conecto por afuera de la red de mi trabajo). Lo hago mas que nada para poder usar un teclado al modificar el codigo ya que desde el celular se hace algo dificil.

      Responder
  4. Fabian

    Navega con Google Chrome 49.0.2623.75 Google Chrome 49.0.2623.75 en GNU/Linux x64 GNU/Linux x64

    al archivo que he creado le puse 2d_bot_ear.py y cuando ejecuto el comando que pusiste “2d_bot_ear.py &” me devuelve “-bash: 2d_bot_ear.py: command not found”

    Responder
    • Zagur

      Navega con Firefox 44.0 Firefox 44.0 en Ubuntu x64 Ubuntu x64

      Ui, error mío, disculpa. Para ejecutar el fichero Python se debe hacer así:

      # python nombrefichero.py

      Y lo dejamos segundo plano con:

      # python nombrefichero.py &

      Lo acabo de corregir, gracias.
      Zagur.

      Responder
  5. Nidea

    Navega con Google Chrome 49.0.2623.87 Google Chrome 49.0.2623.87 en Windows 7 x64 Edition Windows 7 x64 Edition

    Hay alguna forma para que emita el aviso de la temperatura al llegar a cierta temperatura por ejemplo cuando llege a 60º que envíe la notificación? (una alerta vaya…)
    Saludos muchas gracias un tutorial muy bueno

    Responder
    • Zagur

      Navega con Firefox 45.0 Firefox 45.0 en Ubuntu x64 Ubuntu x64

      Es algo que tengo pendiente para hacer. Pero imagino, que podrás guardar en una variable en python el resultado de un comando del sistema (este comando será el de la temperatura) y pasar esta variable por un if… else. Si la temperatura supera un número, se envía aviso, si no, no se envía nada. Otra opción es tener un script en crond.

      Saludos,
      Zagur.

      Responder
  6. Juan Sebastian Alvarez

    Navega con Google Chrome 50.0.2661.94 Google Chrome 50.0.2661.94 en Windows 7 x64 Edition Windows 7 x64 Edition

    Hola, saludos desde Bogota – Colombia.
    Muchísimas gracias !!!
    He estado todo el día probando probando probando y probando … y al fin encontré este que si funciona, muchas gracias.

    Responder
      • Andres Belisario

        Navega con Google Chrome 54.0.2840.71 Google Chrome 54.0.2840.71 en Windows 7 x64 Edition Windows 7 x64 Edition

        Hola, no se si todavia estara vigente este tema pero segui todas la instrucciones y me dio este error: pi@raspberrypi:~/pyTelegramBotAPI $ sudo python andres.py
        File “andres.py”, line 32
        cid = m.chat.id
        ^
        IndentationError: expected an indented block

        Responder
        • Zagur

          Navega con Firefox 49.0 Firefox 49.0 en Ubuntu x64 Ubuntu x64

          Necesitaría ver el código completo para ayudarte. Pero debes de tener algún error en la línea 32 (o por arriba o por abajo hay algo que falla).

          Saludos,
          Zagur,

          Responder
  7. Julio

    Navega con Firefox 50.0 Firefox 50.0 en Mac OS X  10.12 Mac OS X 10.12

    Hola, lo estoy probando el Cloud9 (y ayer lo probé en mi Rasp) y me ha tirado el mismo error constantemente:

    Traceback (most recent call last):
    File “/home/ubuntu/workspace/bot.py”, line 4, in
    from telebot import types # Tipos para la API del bot.
    ImportError: cannot import name types

    Soy usuario básico, recién introduciéndome.

    Responder
    • Zagur

      Navega con Firefox 50.0 Firefox 50.0 en Ubuntu x64 Ubuntu x64

      Has instalado la API de Telegram? Te da error en importar las librerías. Si no fuese eso, necesitaría ver el código.

      Saludos,
      Zagur.

      Responder
  8. Anónimo

    Navega con Google Chrome 56.0.2924.28 Google Chrome 56.0.2924.28 en Windows 10 x64 Edition Windows 10 x64 Edition

    Hola amigo,

    Gracias por el bot. En mi casa se nos va la luz algunas veces y salta el diferencial. Alguna vez que hemos estado fuera unos días se nos ha echado a perder la comida por culpa de esto. Gracias al bot, ahora le saludaré cuando esté de viaje, y si no responde ya sé que tengo que pedir al vecino que levante el fusible 😀 😀

    Una preguntilla, cómo se le puede dotar de más seguridad al código? es decir no quiero que alguien le inyecte código a mi bot y me hackeen 😀

    Responder

Trackbacks/Pingbacks

Deja un comentario

Tu dirección de correo electrónico no será publicada.

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.