Raspberry controlado con Bot de Telegram

Compartí con amigos:

Dentro de la comunidad #MakersArgentina se encuentra el compañero Matías Sanchez, oriundo de cordoba pero como se dice en el campo, un tipo muy viajado 😉

Charlando un poco 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 «Raspberry controlado con Bot de Telegram»

botfather de telegram

  • Vamos a necesitar obviamente que tengas TELEGRAM instalado en tu teléfono por que la idea es hacer el control desde ahi asi que recuerda que lo puedes bajar desde el playstore (de paso unete a #MakersArgentina)
  • Obviamente vas a tener que tener tu Raspeberry disponible para poder trabajar tranquilo
  • Python 2.7 o superior (sudo apt-get install python)
  • Paciencia, tiempo y unos matesitos!

Vamos a crear el bot. Para eso vamos a hacer como que estamos buscando un contacto nuevo y ponemos @botfather

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:

funciones botfather

ahora pondremos la función de crear un nuevo bot:

/newbot

al ponerlo nos va ir pidiendo un nombre de como llamarlo, y todo sera en tres pasos como se ve en la siguiente imagen:

nuevo bot botfather

Lo que siempre van a tener que resguardar son los nombres y el token. En lo posible guardenselo en algun lado donde no lo pierdan!!

Ahora vamos a conectarnos a la #raspberry para darle vida al bot ya que por si solo no hace nada.

Debemos usar la terminal de la raspberry por lo que podes conectarte por ssh, vnc o lo que sea. Si no sabes como, aca te dejo un link donde podras ver como conectarte de manera remota a la raspberry.

Una vez dentro de la raspberry vamos a instalar python (aunque seguro ya lo tienes) y una herramienta de python que se llama pip

sudo apt install python python-pip

Luego vamos a instalar el proyecto telegram Api bot

sudo pip install pyTelegramBotAPI

En este paso les cuento que me di cuenta que yo tenia instalado python 2.7 y 3.5 entonces pip instala para uno y no para el otro por lo cual el codigo da error. La solucion es sudo pip2 install pyTelegramBotAPI

Luis Zambrana

A continuación crearemos la carpeta donde se encontrará el bot, y el archivo principal:

mkdir ~/telegram_bot
cd ~/telegram_bot

Dentro vamos a crear un archivo con extensión .py de python obviamente.

nano bot.py

#MakersArgentina te comparte el código que tenes que poner dentro del archivo nano o bien bajarlo desde nuestro github:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# www.makersargentina.com.ar
# deja tu huellamaker!
#Este es un bot que utiliza la api de telegram 
import telebot
bot = telebot.TeleBot("aca pone tu token");

import commands
import requests
import os
import time
import sys
import RPi.GPIO as gpio
import subprocess

ownner == tuid

@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");

@bot.message_handler(func=lambda message: message.text.lower() == '18off'and message.chat.id == owner)
def apaga_18(message):
    gpio.setwarnings(False)
    gpio.setmode(gpio.BCM)
    gpio.setup(18, gpio.OUT)
    gpio.output(18, False)
    bot.send_message(message.chat.id, "Pin 18 Apagado");

@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 = commands.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));

@bot.message_handler(func=lambda message: message.text.lower() == 'uptime' and message.chat.id == owner)
def temperatura(message):
    uptime = commands.getoutput('uptime -p')
    bot.send_message(message.chat.id, "Uptime: {}".format(uptime));

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

Nuestro GitHub esta en:

https://github.com/LuisAZambrana/TutorialesMakersArgentina

Luego guardamos los cambios con ctrl+x y cuando pregunte si queres guardar confirma con S.

Una de las funciones mas importantes para que funcione el  resto es la del id.

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

Podemos dejar solo esa y las otras comentarlas para saber cual es nuestro id ya que la forma de asegurar es que responda solo si preguntamos nosotros.

En el repositorio de GitHub de pyTelegramBotAPI podremos encontrar toda la documentación y ejemplos que nos ayudará a ampliar las funcionalidades de nuestro bot en nuestra Raspberry Pi.

Es importante que entendamos que el bot creado tiene funcionalidades generales y que pueden ser útiles no solo para lograr el cometido sino para aprender, por eso todo lo que no necesites lo comentas con # al principio y listo.

python bot.py

Una vez que ejecutamos el bot ya podemos hacer pruebas como:

pruebas con bot

Si tuvieras una cámara como lo es la de raspberry podrias poner una función que saque una foto y te la envie al teléfono.

Seguramente van a surgir dudas, pregunta y entre todos vamos a encontrarte la solución!

Bienvenidos a #MakersArgentina y gracias por dejar tu #HuellaMakers

 

 

Compartí con amigos:

Deja un comentario

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