Flopy.es

Tutoriales, noticias y soluciones informáticas

Crea un bot de Telegram para tu Raspberry. Ordénale cosas y habla con ella a distancia.

Seguro que si tienes una Raspberry o un servidor linux encendido todo el día realizando alguna tarea has pensado alguna vez que estaría bien que ese mismo equipo te enviara reportes de lo que está haciendo. O posiblemente en algún momento ha pasado que necesitabas hacerle algún cambio o realizar alguna comprobación pero te has encontrado alejado de dónde está instalada.

Hola. Pues a mi me ha pasado una vez. Tuve que acabar mandándole un mensaje a mi hermana que estaba en casa para que me la reiniciase y...

Bienvenido, usuario anónimo. Tal vez tu hermana pudiera ayudarte en ese momento, pero no siempre vas a tener la suerte de tener a alguien que pueda reiniciar tu equipo o hacer la modificación que necesitas en el momento preciso. En muchos entornos empresariales hay Raspberrys «solas ante el peligro» sin nadie que pueda atenderlas. Una solución que estaría muy muy bien sería poder «hablar» con tu raspberry por medio de algún programa de mensajería, como WhatsApp o Telegram. Podríamos enviarle un mensaje con lo que queremos y la Raspberry nos obedecería. Y también podría avisarnos por mensajería de reinicios inesperados o de cuándo va a realizar alguna tarea concreta. Una comunicación en las dos direcciones en toda regla. En este tutorial vamos a aprender a hacerlo.

¡Eh! ¡Eh! ¡Para el carro! ¿Te crees que vivimos en Matrix o en Minority Report? Hacer esas cosas no está a disposición del común de los mortales hoy en día. Nadie puede hablar con un aparato por una aplicación de mensajería. 

Estás muy equivocado. Hoy en día podemos hacerlo sin problemas gracias a los bots. Telegram en el 2015 puso a disposición de sus usuarios una «API» (Interfaz de programación de aplicaciones) que nos permite crear aplicaciones informáticas para que manden mensajes por Telegram a quien queramos. Esta API se puede usar con un bot de Telegram. Un bot es una cuenta especial que podemos crear en telegram, que no necesita asociarse a ningún teléfono en concreto y que permite enviar y recibir mensajes desde y hacia otras cuentas. Como todo esto es gratuito, podemos plantearnos algo así de forma muy sencilla y asequible a cualquiera.

¡Oye! ¡Pues esto pinta bien! Pero mira... Mejor ¿Por qué no nos explicas cómo hacer todo esto con WhatsApp en lugar de con Telegram? Es que WhatsApp es la aplicación de mensajería que usa todo el mundo. Yo no uso Telegram y...

Como ya te dije en el tutorial que hice acerca de cómo gestionar contraseñas, por un lado WhatsApp es una aplicación insegura, en la que sabes a ciencia cierta (o al menos deberías ser consciente de ello) que todo lo que escribes puede puede ser visto por los trabajadores de WhatsApp (recordad que pertenece a Facebook), sus subcontratas o cualquier gobierno que se lo pida. Telegram por el momento ha mostrado más decencia con los datos de sus usuarios. Debería empezar a entrarnos en la cabeza que usar WhatsApp es un verdadero despropósito y un riesgo para nuestros datos, privacidad y seguridad. No… no me sirve la excusa de «todo el mundo lo usa». Por norma general, si alguien me escribe por WhatsApp, le respondo por Telegram.

Además aunque quisiéramos, por el momento, salvo que seas una empresa y pongas pasta de por medio este tipo de cosas no se pueden hacer de forma sencilla por WhatsApp. Por no decir que los bots de WhatsApp necesitan identificarse con un número de teléfono distinto al tuyo (vamos… que necesitas una línea de teléfono a mayores sólo para esto). WhatsApp no es una opción para hacer lo que estamos planteando.

Veeeenga... aceptamos barco. ¿Vamos al lío?

Venga, pues vamos a ver cómo hacer todo esto paso a paso, de forma que sea imposible perderse. Por cierto… aunque me voy a centrar en una Raspberry, porque es el equipo que tengo más a mano ahora mismo, esto se puede aplicar sin ningún problema a cualquier equipo que ejecute cualquier distribución de Linux basada en Debian.

1- Cómo crear un bot en Telegram.

En primer lugar debéis tener Telegram instalado con una cuenta habilitada. Para ilustrar el tutorial voy a usar la mayor parte del tiempo la versión «desktop» de Telegram (La que nos permite instalarlo en nuestro ordenador personal), y de hecho es la versión que os aconsejo usar para seguir con el tutorial de forma cómoda.

En primer lugar vamos a irnos a los contactos de Telegram y vamos a buscar uno que se llama de la siguiente forma:

@BotFather

Haciendo esa búsqueda, a mi me sale esto:

Os pongo todos los resultados que me salen en la búsqueda para que no haya duda ninguna acerca de qué bot se trata, ya que hay algunos con nombres e imágenes similares. En mi lista aparece el primero de todos, en «contactos y chats» porque ya lo usé con mi usuario. En todo caso fijaos en el nick que hay debajo de los nombres y que empiezan por «@» para no equivocaros. Para más indicaciones, la imagen de su usuario es esta.

Si hacemos doble click para hablar con este «usuario» tan especial, nos aparecerá en Telegram algo similar a esto.

Pulsamos en el botón «iniciar» que hay debajo del mensaje y lo que nos aparecerá a continuación serán unas breves instrucciones de cómo manejar el bot. Podemos ver una lista de comandos que podemos usar para crear nuestro bot particular.

¿Y dónde vamos a tener que poner esos comandos? Pues en el campo inferior dónde normalmente escribiríamos a cualquier «humano», dónde pone «escriba un mensaje». Así que en ese recuadro empezaremos escribiendo «/newbot» para comenzar la creación de nuestro bot. Lo primero que nos preguntará es el nombre que le vamos a poner al bot. Yo le voy a poner al mío «flopybot», pero podéis poner el que queráis. Simplemente escribidlo como si estuvierais hablando con otra persona.

Ahora os pedirá ponerle al bot un nombre de usuario, y os obligará a que ese nombre de usuario termine en «bot». En un alarde de originalidad, voy a ponerle el mismo nombre de usuario que el nombre del bot, así que pongo de nuevo «flopybot». De nuevo poned vosotros el nombre que os apetezca, pero terminado en «bot».

Si os fijáis, en el mensaje que os pone una vez creado el bot, se os da un «Token» para la API que os comentaba al principio del artículo. Ese token va a ser importante, así que copiadlo porque lo usaremos varias veces.

Antes de empezar a trabajar con el bot vamos a hacerle una cosa interesante, que es ponerle una imagen de perfil. Así va a ser más sencillo localizarlo entre todos tus contactos. Algo útil es sacarle una foto a tu Raspberry y ponerla como foto de perfil, pero tened en cuenta que la imagen ha de estar en formato «.jpg» y ha de ser pequeña (si es demasiado grande, BotFather se va a quejar). Una vez que tenemos la foto, debemos escribir a «BotFather» el comando «/setuserpic», y obtendremos una pantalla como ésta.

Escogemos el bot al que queremos cambiarle la foto de perfil en la zona inferior y nos saldrá lo siguiente en pantalla.

Ahora debemos coger la foto de nuestra Raspberry y arrastrarla al bot, y nos pondrá este mensaje.

¡¡Perfecto!! Ya tenemos el bot listo para empezar a trabajar con él.

2- Un bot sencillito para empezar con buen pie. Enviar mensajes al iniciarse acciones en Cron.

Vamos a empezar creando un sistema muy básico para que nuestra raspberry nos vaya diciendo lo que está haciendo (digamos… que es el primer nivel de dificultad), y luego ya nos atreveremos a hacer algo más complicado.

Vamos a conectarnos a nuestra Raspberry por SSH (Mediante Putty si accedemos a ella desde Windows o con el comando ssh si accedemos a ella mediante Linux o Mac OS). Os remito al punto 5 del tutorial que realizamos sobre cómo instalar Raspbian Server si no sabéis cómo realizar esta conexión.

Vamos a necesitar tener una carpeta dentro del «home» de nuestro usuario (la llamaremos aplicaciones) en la que guardar lo que vayamos creando. En caso de que hayáis realizado el tutorial en el que explico cómo medir las temperaturas de la raspberry ya la tendréis creada. De hecho os recomiendo encarecidamente que realicéis todo lo que se pone en él porque luego lo usaremos precisamente para preguntarle a la raspberry por su temperatura por Telegram. En caso contrario, simplemente desde nuestro terminal, situándonos en la carpeta home del usuario»pi» tecleamos lo siguiente:

mkdir aplicaciones

Nos situamos dentro de la carpeta tecleando lo siguiente:

cd aplicaciones

Ahora vamos a crear un script muy muy sencillo que sólo nos avisará por Telegram cuando la Raspberry haya sufrido un reinicio.

Para ello crearemos un archivo de texto al que vamos a llamar reinicio.sh, tecleando lo siguiente.

sudo nano reinicio.sh

Ahora copiad el siguiente código y ponedlo dentro del editor.

#!/bin/bash

TOKEN="aquí-va-el-token-de-tu-bot-de-telegram"
ID="aquí-va-el-id-del-usuario-de-destino-del-mensaje"
MENSAJE="La raspberry PI-Hole, PiVPN y Amule server se acaba de encender."
URL="https://api.telegram.org/bot$TOKEN/sendMessage"

curl -s -X POST $URL -d chat_id=$ID -d text="$MENSAJE"

Como os podéis imaginar, necesitáis cambiar tres líneas de ese archivo.

En la línea número 3, entre las comillas debéis poner el token del bot de Telegram que habéis creado. ¿Os acordáis que os dije más arriba que lo tuviérais a mano? Pues aquí lo tendréis que poner (y más adelante también).

En la línea número 4 hay que poner el id del usuario al que va destinado ese mensaje (que normalmente es tu usuario de telegram). Pero OJO: este id tenéis que averiguarlo. Hay que preguntarle a Telegram cuál es vuestro ID. Para ello nos vamos de nuevo a Telegram y buscamos al usuario «@userinfobot».

De nuevo cuidado con el usuario que escogéis. Fijaos que en la captura que os puse hay usuarios con un nombre parecido (@userinf y cosas así). Por tanto aseguraos de buscar el usuario con su nombre completo. Pulsamos sobre ese usuario y le enviamos el mensaje «/start». Nos devolverá directamente el id de nuestro usuario en la línea que empieza por «Id».

Una vez que tengamos el id de usuario, lo ponemos en la línea número 4 del archivo que estábamos creando en «nano», de forma que el archivo nos debería quedar similar a esto.

Y que no se me olvide: En la línea 5 podemos poner el mensaje que nos venga en gana.

Muy bien. Ahora que tenemos el script hecho, lo guardamos pulsando «Control»+»o» y salimos de nano con «Control»+»x». A estas alturas el archivo ya está creado, pero necesitamos hacer ese archivo ejecutable, cosa para nada complicada. Simplemente tecleamos lo siguiente en nuestro terminal.

chmod +x reinicio.sh

Y por supuesto, ahora vamos a probar lo que hemos hecho tecleando la siguiente línea:

./reinicio.sh

De inmediato, en nuestro Telegram debería saltar un mensaje que nos ha mandado nuestro bot. Algo similar a esto:

Oye tío. Eres un hacha... ya sé cómo mandarme un mensaje a mi mismo anunciando algo que ni siquiera ha sucedido. ¿Para qué %&$@# me sirve esto?

Tranquilo, mi anónimo amigo. Una de las cosas que podemos hacer con este método es añadirlo a las tareas del Cron de Linux. Cron es en Linux algo similar al programador de tareas de Windows. Es un sitio en el que podemos añadir tareas para que se ejecuten cuando nos venga en gana. Por ejemplo, podríamos poner una tarea en el Cron para que cada vez que la raspberry se encienda, nos mande un mensaje a nuestro telegram. De esta forma si hay un reinicio inesperado nos enteraremos al momento. Particularmente, además de esta tarea tengo añadida otra al cron para que la raspberry busque actualizaciones cada tres días y después de aplicarlas se reinicie. Por la noche, cada tres días se ejecuta esta tarea, pero antes del reinicio el cron me envía un mensaje con este método, y en cuanto la raspberry se ha iniciado me envía otro idéntico al del ejemplo que os estoy poniendo para saber que el reinicio se completó con normalidad. Si un día amanezco sólo con uno de los dos mensajes, entonces ya sé que algo ha ido mal.

Ah, pues suena útil. ¿Y eso cómo se hace?

Muy sencillo. Debemos escribir el siguiente comando en el terminal.

sudo crontab -e

y nos debería aparecer algo similar a esto:

Nos iremos a la parte inferior de ese archivo y añadiremos la siguiente línea:

@reboot ( sleep 30 ; sh /home/pi/aplicaciones/reinicio.sh ) >/dev/null 2>&1

Os explico lo que le estamos diciendo a Cron.

  • @reboot: Le decimos que ejecute que viene a continuación cada vez que se reinicie el equipo.
  • Los paréntesis: Entre ellos va lo que se va a ejecutar
  • Sleep 30: Decimos que espere 30 segundos para ejecutar el comando. Así le damos tiempo al sistema operativo a cargar todo lo necesario para que el comando se ejecute bien.
  • sh /home/pi/aplicaciones/reinicio.sh: Es el comando que ejecuta el script.
  • >/dev/null 2>&1: Esta parte significa que aunque esta línea genere algún mensaje en pantalla, no se nos muestre.

Al igual que antes, guardamos los cambios con «Control»+»o» y salimos con «Control»+»x». Si queremos, podemos reiniciar el equipo escribiendo en el terminal lo siguiente:

sudo shutdown -r now

En cuanto el sistema se reinicie, a los 30 segundos aproximadamente deberíais recibir el mensaje de Telegram.

Y por supuesto… esto podéis usarlo con cualquier tarea automatizada mediante Cron (y sin necesidad de retrasar la tarea).

3- Hagamos que la Raspberry nos envíe un mensaje de telegram cada vez que alguien se conecte por SSH.

Tener SSH activado en un equipo Linux se podría considerar un pequeño riesgo de seguridad. Si alguien averigua nuestra contraseña de SSH y tenemos el puerto mapeado hacia nuestra Raspberry, podrían hacer lo que quisieran con el equipo. Así que vamos a usar el bot para aumentar la seguridad de nuestro equipo. Cada vez que nos conectemos por SSH (nosotros u otra persona cualquiera), nuestra Raspberry nos enviará un mensaje por telegram indicando que alguien se ha conectado, indicándonos incluso la dirección IP de la conexión.

Esta tarea no se iniciará mediante Cron (ya que no es una tarea programada). Cada vez que se inicia una sesión en el terminal, el sistema lee y ejecuta el archivo llamado «.bashrc» (El punto del principio indica que es un archivo oculto). Así que vamos a editar este archivo. Nos vamos a la carpeta «home» del usuario «pi» y editamos ese archivo.

cd /home/pi
sudo nano .bashrc

El archivo está lleno de cosas. No vamos a tocar nada y nos desplazamos directamente al final y añadimos una línea nueva, que será tal que así.

curl -s -X POST https://api.telegram.org/bot"token_del_bot_del_telegram"/sendMessage -d chat_id="ID_de_vuestro_usuario_de_telegram" -d text="Alguien se acaba de conectar a la Raspberry que tiene el PiVPN, Pi-Hole y Amule server por ssh con la IP $(echo $SSH_CLIENT | awk '{ print $1}'). ¿Serás tú?">/dev/null 2>&1

Evidentemente sustituimos «token_del_bot_de_telegram» por el token de nuestro bot (Conservando las comillas), «ID_de_vuestro_usuario_de_telegram» por nuestro ID de Telegram (también conservando las comillas) y el texto del mensaje por el texto que queramos.

Ahora, cada vez que nos conectemos por SSH, Telegram nos mandará un mensaje similar a éste.

4) El bot definitivo: Mantener una «conversación» con nuestra Raspberry.

Vamos ahora a hacer el «más difícil todavía» y crear un bot que nos permitirá enviarle órdenes a nuestra raspberry directamente desde Telegram. Antes de comenzar os diré que el bot que vamos a instalar, entre otros incluye un comando para poder monitorizar la temperatura y otros parámetros de nuestro equipo. Para que funcione este comando en particular debéis haber realizado previamente lo que se dice en nuestro anterior tutorial acerca de la monitorización de las temperaturas en una Raspberry. Si no os interesa el monitoreo de las temperaturas, podéis seguir sin realizar el tutorial que os acabo de indicar (a sabiendas de que esa característica en particular no funcionará).

Otra cosa que quiero advertiros es que no he tenido buenas experiencias con cuentas de télegram en cuyo nombre hay acentos o caracteres no anglosajones. Si tenéis acentos en el nombre de vuestra cuenta de Telegram, poned vuestro nombre en mayúsculas y quitad los acentos. Si no lo hacéis, hay muchas posibilidades de que esto no funcione. Ya que estamos… si alguien sabe cómo solucionar este problema (me juego el tipo a que es algo sencillo que se me escapa) que me deje un comentario en el artículo, por favor.

Para empezar vamos a necesitar una librería específica escrita en «Python», que se trata de un conocido lenguaje de programación. Primero vamos a instalar todo lo necesario para que funcione.

Antes de nada instalaremos GIT con este comando.

sudo apt-get install git

Ahora nos vamos a la carpeta de aplicaciones que teníamos creada

cd /pi/aplicaciones

… y dentro de ella realizamos la descarga de la librería que vamos a usar con este comando:

git clone https://github.com/eternnoir/pyTelegramBotAPI

Se debería haber creado dentro de esa carpeta otra más llamada «pyTelegramBotAPI». Entramos en ella tecleando

cd pyTelegramBotAPI

Ahora tenemos un problema. Necesitamos instalar un añadido a Python para poder realizar la instalación de esta librería, así que tecleamos esto en el terminal.

sudo apt-get install python-setuptools

Ok. Ya estamos preparados para instalar la librería. Tecleamos lo siguiente dentro de la carpeta «pyTelegramBotAPI».

sudo python setup.py install

Perfecto. Ya tenemos instalado todo lo necesario. Dentro de la carpeta tenemos varios ejemplos que podemos usar, pero voy a daros todo ya hecho. Crearemos un archivo al que llamaremos «bot_pihole.py» mediante el siguiente comando:

sudo nano bot_pihole.py

dentro de ese archivo pegaremos el siguiente código (Agarraos los machos, que es largo).

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
This is a detailed example using almost every command of the API
"""
 
import telebot
from telebot import types
import time
import os

TOKEN = 'el_token_de_vuestro_bot'
 
knownUsers = [número_de_usuario_telegram] # todo: save these in a file,
userStep = {} # so they won't reset every time the bot restarts
 
commands = { # command description used in the "help" command
             'start': 'Get used to the bot',
             'ayuda': 'Da informacion sobre los comandos disponibles',
             'exec': 'Ejecuta un comando',
             'temp': 'Comprueba la temperatura de la raspberry',
             'reboot': 'Reinicia el servidor'
}
 
hideBoard = types.ReplyKeyboardRemove() # if sent as reply_markup, will hide the keyboard
 
# error handling if user isn't known yet
# (obsolete once known users are saved to file, because all users
# had to use the /start command and are therefore known to the bot)
def get_user_step(uid):
    if uid in userStep:
        return userStep[uid]
    else:
        knownUsers.append(uid)
        userStep[uid] = 0
        print "New user detected, who hasn't used \"/start\" yet"
        return 0
 
# only used for console output now
def listener(messages):
    """
    When new messages arrive TeleBot will call this function.
    """
    for m in messages:
        if m.content_type == 'text':
            # print the sent message to the console
            print str(m.chat.first_name) + " [" + str(m.chat.id) + "]: " + m.text
 
 
bot = telebot.TeleBot(TOKEN)
bot.set_update_listener(listener) # register listener
 
# handle the "/start" command
@bot.message_handler(commands=['start'])
def command_start(m):
    cid = m.chat.id
    if cid not in knownUsers:
        knownUsers.append(cid) 
        userStep[cid] = 0
#        command_help(m) # show the new user the help page
 
# help page
@bot.message_handler(commands=['ayuda'])
def command_help(m):
    cid = m.chat.id
    help_text = "Estos son los comandos disponibles: \n"
    for key in commands:
        help_text += "/" + key + ": "
        help_text += commands[key] + "\n"
    bot.send_message(cid, help_text)
 
# Reinicia servidor
@bot.message_handler(commands=['reboot'])
def command_long_text(m):
    cid = m.chat.id
    bot.send_message(cid, "Voy a reiniciar el servidor...")
    bot.send_chat_action(cid, 'typing')
    time.sleep(3)
    bot.send_message(cid, ".")
    os.system("sudo shutdown -r now")
 
# Mira temperaturas
@bot.message_handler(commands=['temp'])
def command_long_text(m):
    cid = m.chat.id
    bot.send_message(cid, "Vamos a comprobar si has puesto caliente a tu equipo...")
    bot.send_chat_action(cid, 'typing') # show the bot "typing" (max. 5 secs)
    time.sleep(2)
    f = os.popen("temperaturas")
    result = f.read()
    bot.send_message(cid, ""+result)
 
# Ejecuta un comando
@bot.message_handler(commands=['exec'])
def command_long_text(m):
    cid = m.chat.id
    bot.send_message(cid, "Ejecutando: "+m.text[len("/exec"):])
    bot.send_chat_action(cid, 'typing') # show the bot "typing" (max. 5 secs)
    time.sleep(2)
    f = os.popen(m.text[len("/exec"):])
    result = f.read()
    bot.send_message(cid, "Resultado: "+result)
 
 
# filter on a specific message
@bot.message_handler(func=lambda message: message.text == "Hola")
def command_text_hi(m):
    bot.send_message(m.chat.id, "Muy buenas")
@bot.message_handler(func=lambda message: message.text == "Hijoputa")
def command_text_hi(m):
    bot.send_message(m.chat.id, "Bocachancla")
@bot.message_handler(func=lambda message: message.text == "Hijo de puta")
def command_text_hi(m):
    bot.send_message(m.chat.id, "Chupacables")
@bot.message_handler(func=lambda message: message.text == "Capullo")
def command_text_hi(m):
    bot.send_message(m.chat.id, "Pagafantas")
    # default handler for every other text
 
 
@bot.message_handler(func=lambda message: True, content_types=['text'])
def command_default(m):
    # this is the standard reply to a normal message
    bot.send_message(m.chat.id, "No te entiendo, prueba con /ayuda")
 
bot.polling()

Como en los puntos anteriores, tendremos que cambiar el token (línea 13) por el del bot que hemos creado y el botuser (línea 15) por el id de vuestro usuario de telegram (el bot sólo va a responderle a los usuarios que estén en esa línea, que si no podría ser un despiporre si alguien averigua el nombre de nuestro bot). Voy a explicaros muy brevemente lo que hacen algunas líneas del código por si vosotros queréis hacer modificaciones en él.

De la línea 19 a la 23 tenemos los comandos con los que vamos a comunicarnos con nuestro bot. Tal como os dije al principio de esta sección, en el caso de que no os interese monitorizar las temperaturas, podemos eliminar la línea 22 (El comando «Temp»). En ese caso os interesaría también eliminar las líneas de la 83 a la 92 en las que se habilita el comando «/temp» para ver las temperaturas de nuestra máquina. Este intervalo de líneas es muy interesante, porque si tenemos la suficente soltura en programación, podemos hacer un copiar – pegar de ese bloque y crear comandos abreviados para sentencias de terminal extensas.

No quiero aburrir con este tema, así que vamos a guardar el código con «Control»+»o» y saldremos de «nano» con «Control»+»x». en esta ocasión no tendremos por qué convertir este código en ejecutable, puesto que es un archivo que necesita pyton para funcionar. Para probar si funciona el código tendremos que teclear lo siguiente en el terminal.

python bot_pihole.py

Y ahora sucederá algo extraño. El sistema operativo se pone como a la espera y la línea en la que se nos invita a poner más comandos ha desaparecido. Parece como si el sistema estuviera haciendo algo por detrás. Y efectivamente: está esperando a que le digamos algo por Telegram. Así que vamos a coger nuestro telegram (el del ordenador o el móvil) y vamos a escribirle algo a nuestro bot. Seamos educados y digámosle «Hola».

Como podéis observar, nuestro bot reconoce ese comando y nos saluda afectuosamente (Eso sí… la «H» debe estar en mayúsculas y el resto en minúsculas).

Vamos a probar a decirle algo más etéreo, como «reinicia la raspberry».

Vale… parece que no nos ha entendido, pero nos está dando un comando que a lo mejor nos aclara algo. Vamos a escribirle «/ayuda» a nuestro bot a través de Telegram.

Ahora sí que se empiezan a poner las cosas interesantes. Tenemos la lista de cosas que podemos hacer con este bot. Una de las más interesantes es el comando «/exec», con el que podremos teclear comandos de terminal.

Así que vamos a ponerle las cosas complicadas. Hay un comando para saber el espacio ocupado en disco, que es «df -h». Vamos a pedirle a nuestro bot que lo ejecute tecleándole «/exec df -h».

Si queremos reiniciar la raspberry desde el Telegram, podemos hacerlo con el comando «/reboot» o con el método anterior tecleando «/exec sudo shutdown -r now».

Para conocer las temperaturas de nuestra Raspberry, si hemos seguido el tutorial anterior, podemos hacerlo mediante el comando «/temp», que nos ofrecerá un resultado similar a este.

Vamos… que podemos sacarle mucho partido al Bot. Pero recordad que tenemos el terminal medio «colgado». Eso es porque el bot está ejecutándose. Tendremos que teclear «Control»+»C» para que nos vuelva a responder, pero eso terminará el programa y el bot dejará de funcionar. Si intentamos invocar este programa desde el Cron no nos funcionará, porque la ejecución se parará nada más iniciarse ¿Cómo podemos arrancar entonces este script al inicio del sistema sin que se pare?

La forma más sencilla es colocar el comando de arranque de este programa en el archivo «rc.local». Cualquier script que escribamos al final de «rc.local» va a ser ejecutado en cuanto el sistema operativo se haya cargado por completo. Además mantendrá el programa ejecutándose sin problemas. Por tanto vamos a escribir los siguientes comandos en nuestro terminal.

cd /etc
sudo nano rc.local

Una vez que hayamos entrado en el editor de textos, nos vamos al final del archivo y añadimos la siguiente línea justo antes de la que pone «exit 0»:

sudo python /home/pi/aplicaciones/pyTelegramBotAPI/bot_pihole.py &

Reiniciamos nuestro equipo con el comando…

sudo shutdown -r now

Y listo. A partir de ahora, nada más iniciarse la Raspberry, tendremos nuestro bot disponible para ejecutar nuestras órdenes desde Telegram.

Share

1 Comentario

  1. ¿Y cómo podría configurarse un script para que se ejecute cuando se conecta un cliente al servidor VPN y te envíe un mensaje por telegram con el nombre de usuario que se ha conectado y su IP, por ejemplo?

Deja un comentario

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

(cc) 2019 Flopy.es

Tema por Anders NorenArriba ↑

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies