Ro-BOT – Assistente Pessoal utilizando o Telegram & Arduino. [2.0]

Olá sedentos por conhecimento!

Hoje vou explicar um pouco sobre como criar e como utilizar um bot no Telegram. Pra vocês que ainda não conhecem, Telegram é um aplicativo similar ao Whats app (melhor…cof cof) porém com pequenas, e significativas, diferenças. Telegram é código aberto e foi criado com um foco muito forte em segurança e privacidade permitindo ao usuário mandar mensagens criptografadas e criar conversas autodestrutivas, também sendo possível enviar documentos em qualquer formato (O que utilizo bastante para mandar arquivos como .pdf e .gif).

A ideia inicial para criar o bot me apareceu porque eu queria poder conversar com minha casa (Acende a luz!, A porta está fechada?, Como está a temperatura no meu quarto hoje?, DEFCON4 Double take!).  É comum encontrar na internet projetos similares usando arduino com shield wifi ou ethernet mas porque não fazer isso mais comodo e fácil para os usuarios? E é ai que entra o bot! Toda essa conversa de bots e bots…mas afinal o que é um bot? Um bot não é nada mais que uma conta de usuario controlada por um software. Então que tal ter o nosso proprio bot?

Vamos começar!

Começando pelo basico. Você precisa criar uma conta no Telegram. Pra isso basta instalar o aplicativo no seu dispositivo (Playstore/Itunes/TelegramDesktop).
Esse primeiro passo é bem fácil, basta cadastrar o seu numero de telefone, esperar o sms com o numero de confirmação e já podemos ir para o proximo passo.

Uma vez que sua conta esteja pronta devemos falar com BotFather. Pra isso basta acessar esse https://telegram.me/botfather ou buscar por “botfather” nos contatos que ele estará lá disponivel para conversar com você. Quando a primeira conversa for aberta com o BotFather lá em baixo terá um botão “/start”

botfather

Ao clicar no botão BotFather vai enviar as instruções e comandos disponíveis para conversar com ele. Como queremos criar um bot vamos enviar para BotFather

“/newbot”

Após isso basta informar como o bot (1)será chamado e qual o (2)nome de usuário do bot que estamos criando.

newbot

E pronto! Já temos um bot que podemos usar para enviar e receber mensagens.

Agora podemos começar a programar nosso bot. Para esse post vamos utilizar Python e antes de qualquer coisa deveremos instalar as ferramentas necessárias para programar o bot.

Lista de ferramentas necessárias:

$ sudo apt-get install python3
$ sudo apt-get install python3-pip
$ sudo pip3 install telepot
$ sudo pip3 install telepot –upgrade # UPGRADE

Após todas as ferramentas instaladas, mãos a obra. Iremos utilizar telepot ,um framework em python para acessar Telegram Bot API. Para mais detalhes sobre telepot você pode acessar a pagina do github onde será possivel encontrar mais detalhes sobre o framework, documentação e alguns códigos.

Vamos começar com um simples bot que responde “Olá, como você está hoje?” quando recebe um Olá.

Salve com o nome de assistente.py.Rode o código utilizando

$ python3 assistente.py

Enquanto o código estiver rodando você é possivel testar o assistente pessoal mandando uma mensagem para o bot que acabamos de criar.

 

Screenshot from 2016-02-03 23:00:47

Nosso bot foi capaz de receber mensagens e responder mensagens pré definidas de acordo com nosso código. Onde na verdade o que aconteceu é que o código em python executou essas tarefas.  O código para gerar o bot é bastante simples e fácil de entender.

Agora que temos nosso pequeno código funcionando, que tal extender as capacidades dele? Utilizando um arudino e um relê eu resolvi testar se meu bot seria capaz de controlar uma lâmpada remotamente na minha casa, e aqui o resultado. Para isso o seguinte esquemático foi utilizado para conectar o arduino o módulo relê e uma lâmpada (negra).

Untitled Sketch 2_bb

O código para o arduino é bastante simples.

 

Nesse código utilizamos a porta serial para receber informações que irão controlar a lâmpada. Caso o arduino receba pela porta serial o caractere “Y” ele define o nível lógico da porta conectada no relê como alto acendendo a lâmpada, caso receba “N” ele desliga o relê desligando também a lâmpada.

Uma vez que o arduino está devidamente conectado vamos atualizar o código que vamos utilizar em nosso bot.

Importando a biblioteca Serial podemos comunicar o código em python com nosso arduino dando o controle sobre lampada para nosso bot. É importante notar que na linha #3 é especificada a porta serial que o arduino está conectado, o código deve ser editado de acordo com a necessidade.
Salve o código e execute novamente e estaremos prontos para testar!

Por o Telegram dar suporte a desenvolvedores, há algumas dezenas de bots internet a fora e com o codigo disponivel para que vocês possam se divertir.
Vou deixar linkado aqui por onde começar!

Gostou? Que funcionalidades você adicionaria a um bot? Crie o seu e compartilhe suas experiencias com a equipe do dragão!

Conhecimento vale ouro!

EDIT: Devido a atualização da API para trabalhar com bots, o código do dragão sem chama teve de ser atualizado. O código já está funcional novamente :D

4 thoughts to “Ro-BOT – Assistente Pessoal utilizando o Telegram & Arduino. [2.0]”

  1. Boa noite, parabéns pelo post muito bom porem ao tentar executar o seu código assitente.py ocorreu isso aqui e não estou conseguindo corrigir, lembrando que instalei conforme orientação:

    Traceback (most recent call last):
    File “assistente.py”, line 18, in
    bot.notifyOnMessage(handle)
    AttributeError: ‘Bot’ object has no attribute ‘notifyOnMessage’

    1. Bom dia Rudrigo Lima,

      A API de BOTs foi atualizada desde o post do dragão sem chama, isso pode ter gerado alguma incompatibilidade com o código do dragão. Atualmente estou bastante ocupado com as atividades na universidade, mas logo logo vou atualizar o post por aqui.

      As mudanças para esse código serão as seguintes:
      1) a função glace2() que é utilizada na linha 9 agora é apenas glace()

      2) o método notifyOnMessage() agora é chamado de message_loop()

      Por enquanto, para seu código funcionar basta substituir pelo seguinte código:

      #!/usr/bin/python
      import telepot, time

      def handle(msg):

      userName = msg[‘from’][‘first_name’]+” “+msg[‘from’][‘last_name’]

      content_type, chat_type, chat_id = telepot.glance(msg)

      if (content_type == ‘text’):
      command = msg[‘text’]
      print (‘Got command: %s’ % command)

      if ‘/hello’ in command:
      bot.sendMessage(chat_id, “Ola “+userName+”, como voce esta?”)

      if ‘/lamp_on’ in command:
      ser.write(b’Y’)
      bot.sendMessage(chat_id, “A lampada esta ligada”)

      if ‘/lamp_off’ in command:
      ser.write(b’N’)
      bot.sendMessage(chat_id, “A lampada esta desligada”)

      # Cria um bot com a API key disponibilizada pelo BotFather
      bot = telepot.Bot(‘*******TOKEN*******’)

      # Adiciona a função hanldle para ser chamada sempre que uma nova mensagem for recebida
      bot.message_loop(handle)

      # Aguarda por novas mensagens
      while 1:
      time.sleep(20)

Leave a Reply

Your email address will not be published. Required fields are marked *