Práctica 05:
Relé y Bot de Telegram

Componentes

  • 1 Relé
  • 1 LED
  • 1 Resistencia de 220Ω
  • Portapilas para dos pilas AA de 1.5V

RELÉ

Dispositivo electromagnético que, estimulado por una corriente eléctrica muy débil, abre o cierra un circuito

LED en circuito abierto

NO (Normal open) / NC (Normal close) / C (Common)

Acción de RELÉ con GPIO

Código Python


#!/usr/bin/env python3

from gpiozero import OutputDevice
from time import sleep

rele = OutputDevice(24) # Ver documentación de Relé para LOW o HIGH

while True:
    rele.on()
    sleep(1)
    rele.off()
    sleep(1)
	

Bots de Telegram

Son programas que podemos correr en un servidor y que permiten interactuar con Telegram

Botfather

Bot de Telegram que permite crear Bots

Comandos básicos

  • /start
  • /newbot
  • /mybots
  • /setcommands

Una vez creado el bot tendremos acceso al API TOKEN

python-telegram-bot

Para facilitar la interacción desde Python con bots de Telegram


sudo apt-get install virtualenv ipython
	

virtualenv NOMBRE_PROYECTO
	

source NOMBRE_PROYECTO/bin/activate
	

(NOMBRE_PROYECTO)$ pip --version
	

(NOMBRE_PROYECTO)$ pip install gpiozero python-telegram-bot
	

Código básico


#!/usr/bin/env python3

from telegram.ext import Updater, CommandHandler

updater = Updater(token='xxxxxxxxxxxxxxx')


def start(bot, update):
    """Mensaje de bienvenida"""

    bot.send_message(chat_id=update.message.chat_id,
                     text="Soy el bot del PyDay Galicia 2017, háblame!")


start_handler = CommandHandler('start', start)

dispatcher = updater.dispatcher
dispatcher.add_handler(start_handler)

updater.start_polling()
            

#!/usr/bin/env python3

from telegram.ext import Updater, CommandHandler
from gpiozero import OutputDevice

updater = Updater(token='xxxxxxxxxxxxxxx')  # Token de Telegram
rele = OutputDevice(24, False)

usuarios_permitidos = ['felixgomez']


def start(bot, update):
    """Comando start: Envía texto de bienvenida"""

    bot.send_message(chat_id=update.message.chat_id,
                     text="Soy el bot del PyDay Galicia 2017, háblame!")


def pompas(bot, update, args):
    """Función de activación del relé"""

    if (update.message.from_user.username in usuarios_permitidos):
        if "on" in args:
            rele.on()
            message = "Que empiece la fiesta! " + u'\U0001F389'
        elif "off" in args:
            rele.off()
            message = "A casa todo el mundo... " + u'\U0001F614'
        else:
            estado_rele = "ON" if rele.value else "OFF"
            message = "La fiesta está {} !".format(estado_rele)
    else:
        message = "Acceso no permitido"

    bot.send_message(chat_id=update.message.chat_id, text=message)


start_handler = CommandHandler('start', start)
pompas_handler = CommandHandler('pompas', pompas, pass_args=True)

dispatcher = updater.dispatcher
dispatcher.add_handler(start_handler)
dispatcher.add_handler(pompas_handler)

updater.start_polling()