Hace bastante tiempo, dentro de la comunidad #MakersArgentina y #RaspberryPiArg encontré un gran amigo Matías Sanchez (el cual me a tirado unos tips para ir aprendiendo cosas que no sabia y por lo cual estoy muy agradecido). Charlando en ese momento salió la idea de hacer un Bot para controlar algunas cosas sencillas desde telegram, asi que manos a la obra con este tutorial que denominamos Controlar nuestra raspberry con bot de telegram

Telegram – Botfather – Python

Vamos a necesitar tener telegram en nuestro celular y en este caso voy a utilizar mi #RaspberryPi para ejectuar comandos etc, aunque es totalmente funcional con #Ubuntu #Debian etc teniendo en cuenta que a veces hay cosas muy particulares de raspberry que no funcionaran en otras distribuciones (sobre todo la parte de gpio) sin embargo van a poder entender todo y hacerlo a su medida, asi que manos a la obra:

sudo apt install python3
python3
Instalando python3

Luego del mismo modo (asi que no voy a poner imagen) instalaremos pip:

sudo apt install python3-pip

Ahora a instalar paquetes dentro de pip:

sudo pip3 install pyTelegramBotAPI telebot
Instalando pyTelegramBotAPI con pip3

Ahora que ya tenemos instalado lo necesario y antes de crear nuestro archivo con python vamos crear nuestro bot. Para eso vamos a telegram y buscamos el ususario @botfather (padre de los bots).

botfather
buscamos @botfather

El padre de los bot se pone al servicio nuestro así que le hacemos clic y empezamos como quien va a chatear. Lo primero que le vamos a poner una barra hacia la derecha para ver que nos ofrece y luego pondremos la función de crear un nuevo bot:

Opciones de Botfather

Luego de poner /newbot vamos a seguir estos pasos:

es muy fácil!!! recordá guardar tu token por que lo vas a necesitar!

Ahora vamos a crear una carpeta en nuestro home que se llame bot (o el nombre que prefieran), nos meteremos en la carpeta y luego creamos el archivo botlaz.py //uds pongan el nombre que prefieran pero con la extensión py de paraguay// (lo de paraguay es chistonto)

mkdir bot
cd bot
nano botlaz.py

Adentro vamos a escribir lo siguiente:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# https://luiszambrana.com.ar
# Si te gusta comparti no tenemos publicidad!
import telebot
bot = telebot.TeleBot("aca pone tu token");

#import commands lo borramos por que a partir del python3 no va mas
import requests
import os
import time
import sys
import RPi.GPIO as gpio
import subprocess
from subprocess import Popen, PIPE

@bot.message_handler(func=lambda message: message.text.lower() == 'id')
def saludar(message):
   bot.send_message(message.chat.id, "Tu ID es: {}".format(message.chat.id))

bot.polling()
bot para sacar tu id
con este bot vamos a comprobar que ande y obtener nuestro id

Ahora si procedemos a ejecutar y si esta todo bien tendremos nuestro bot funcionando y obtendremos nuestro id:

python3 botlaz.py
obteniendo la id con bot

Obviamente no les voy a mostrar mi token menos mi id por si me super hackean jajajajajaj en fin. Espero que si llegaron hasta aca ya tienen un buen camino andando. Que hicimos? buscamos nuestro bot como si fuera un usuario más y le mandamos el mensaje id, nuestro codigo en python estara esperando para contestar lo necesario y asi obtener la id.

La empiojamos? vamos a editar el archivo y lo vamos a dejar de este modo:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# https://luiszambrana.com.ar
# Si te gusta comparti no tenemos publicidad!
import telebot
bot = telebot.TeleBot("aca pone tu token");

#import commands lo borramos por que a partir del python3 no va mas
import requests
import os
import time
import sys
import RPi.GPIO as gpio
import subprocess
from subprocess import Popen, PIPE

owner = tuid

##le mandas la palabra 18on   y enciende el pin 18
@bot.message_handler(func=lambda message: message.text.lower() == '18on' and message.chat.id == owner)
def prende_18(message):
    gpio.setwarnings(False)
    gpio.setmode(gpio.BCM)
    gpio.setup(18, gpio.OUT)
    gpio.output(18, True)
    bot.send_message(message.chat.id, "Pin 18 Encendido");

##le mandas la palabra 18off   y apaga el pin 18
@bot.message_handler(func=lambda message: message.text.lower() == '18off'and message.chat.id == owner)
def prende_18(message):
    gpio.setwarnings(False)
    gpio.setmode(gpio.BCM)
    gpio.setup(18, gpio.OUT)
    gpio.output(18, True)
    bot.send_message(message.chat.id, "Pin 18 Apagado");

##Mandas la palabra temperatura y te devuelve la temperatura de la raspberry
@bot.message_handler(func=lambda message: message.text.lower() == 'temperatura'and message.chat.id == owner)
def temperatura(message):
    temp    = round(int(open('/sys/class/thermal/thermal_zone0/temp').read()) / 1e3, 2)
    tempgpu = subprocess.getoutput('/opt/vc/bin/vcgencmd measure_temp').replace('temp=', '').replace("'C", '')
    bot.send_message(message.chat.id, "Temperatura:\nCPU: {} °C\nGPU: {} °C".format(temp, tempgpu));

##Mandas la palabra uptime y te devuelve el tiempo en que esta funcionando la rasp
@bot.message_handler(func=lambda message: message.text.lower() == 'uptime' and message.chat.id == owner)
def temperatura(message):
    uptime = subprocess.getoutput('uptime -p')
    bot.send_message(message.chat.id, "Uptime: {}".format(uptime));

#Mandas la palabra ip y te devuelve la ip publica en donde se encuentra tu raspberry
@bot.message_handler(func=lambda message: message.text.lower() == 'ip'and message.chat.id == owner)
def miip(message):
    ip = requests.get("http://ipinfo.io/ip")
    bot.send_message(message.chat.id, "IP: {}".format(ip.text));

#bot.send_message(message.chat.id, "Bot iniciado");

bot.polling()

A tener en cuenta:

Token: Lo sacas de la creacion de botfather

Id: Tenes que hacer un archivito sencillo como el que esta al inicio.

Owner: es una variable que guarda tu id. Sino la usas el problema es que cualquier puede tener acceso a tu bot. Si es un bot publico que contesta “cosas publicas” no hay problema… si es un servidor no quisieras tener problemas!!

Cada pedacito del código esta comentado asi que espero lo lean y cualquier duda me avisan!!!

Así iniciamos nuestro camino esta entrada que denominamos Controlar nuestra raspberry con bot de telegram

Print Friendly, PDF & Email
Share:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *