Recentemente tivemos o Intel IoT RoadShow 2015 em São Paulo, onde participei juntamente com os membros Igor Borges, Pedro Bertoleti e Fabio Souza no projeto MonitorAKI. Neste projeto utilizamos conceitos de Visão Computacional, Internet das Coisas com ThingSpeak, comunicação com Twitter e até mesmo envio de mensagens via… WhatsApp!
Este último detalhe chamou bastante a atenção, e muitos me pediram para logo publicar o passo-a-passo de tal façanha. Assim, resolvi fazer este tutorial orientando os procedimentos necessários para instalar a aplicação Yowsup, escrita em Python e responsável por comunicar a Intel Edison com WhatsApp.
Observem que todo este guia se baseia em uma Intel Edison com ambiente Linux Yocto, o “tradicional”, por assim dizer.
Como eu fiz bastante coisa, resolvi recomeçar do zero, ou seja, regravei o firmware da minha Intel Edison, correspondente à versão Yocto 2.1 desenvolvida pela Intel, e que pode ser baixada no link em destaque.
Para ver detalhes e demais informações sobre como proceder com a gravação do sistema, siga os passos mostrados nesta página de suporte da Intel (informações em inglês).
Intel Edison pronta? Imagem Yocto gravada? Drivers carregados no Windows?
Criação do ambiente na Intel Edison com WhatsApp
O principal detalhe de todos é colocar a Intel Edison na rede Wi-Fi, o que pode ser feito com o seguinte comando no console, com atenção para as instruções destacadas pelo guia de configuração do comando:
1 |
# configure_edison --wifi |
Depois, é preciso fazer a atualização dos pacotes e atualização geral do sistema por meio dos seguintes comandos:
1 2 |
# opkg update # opkg upgrade |
Pronto? Ainda não. Como vamos precisar de alguns pacotes extras, contamos com a boa sorte de termos repositórios adicionais, os quais possuem uma grande quantidade de pacotes em sua base.
Para isso, acessamos o arquivo /etc/opkg/base-feeds.conf para inserir os repositórios adicionais por meio do seguinte comando:
1 |
vi /etc/opkg/base-feeds.conf |
Ao ter o arquivo aberto em sua tela de console, adicione as seguintes linhas, que correspondem aos repositórios adicionais:
1 2 3 |
src/gz all https://repo.opkg.net/edison/repo/all src/gz edison https://repo.opkg.net/edison/repo/edison src/gz core2-32 https://repo.opkg.net/edison/repo/core2-32 |
Usando o editor vi, lembre-se que para sair do modo de edição é preciso pressionar a tecla ESC e depois o comando :wq para salvar o arquivo e sair.
Feito isso, novamente faça a atualização da listagem de pacotes por meio do comando:
1 |
# opkg update |
É possível instalar o Yowsup de 2 formas:
1) Fazer download dos fontes por meio do repositório GitHub e instalar o programa com suas dependências e estrutura por meio do seguinte comando, realizado no diretório do repositório baixado:
1 |
python setup.py install |
2) Instalar o utilitário Python pip e realizar o download do yowsup.
Eu realizei no Intel IoT Roadshow 2015 a opção 1, mas ao tirar um tempo para refazer os passos necessários, vi que o Yowsup já está devidamente alocado na base de pacotes do Python pip. Dessa forma, recomendo fortemente que você, leitor, vá pelo caminho da opção 2.
Se você quiser se aventurar pela opção 1, certamente irá se deparar com problemas de dependências, pacotes faltando, e uma infinidade de surpresas mais 🙂
Afinal de contas, o que é esse tal de pip? Ele é um sistema de administração/gestão de pacotes Python! Sua usabilidade e funcionalidade é bem semelhante ao que você tem quando usa apt-get em sistemas Debian, ou o opkg no Linux da Intel Edison.
Falei, falei, falei. Vamos instalar o pip? Isso é possível por meio do seguinte comando:
1 |
# opkg install python-pip |
Intel Edison configurada, pacotes atualizados, pip instalado. Só falta uma coisa então para começar a diversão: Yowsup. Este pacote Python pode ser instalado pelo seguinte comando, usando agora o recém-instalado pip:
1 |
# pip install yowsup2 |
Este comando agora demora. O pip irá baixar todas as dependências, construir os pacotes necessários, dentre outras muitas coisas mais. Tenha uma boa dose de paciência, vá tomar um café, ver uns vídeos engraçados no Youtube 😉
Finalizado o processo de download, instalação e configuração (automática – ainda bem), precisamos entender alguns conceitos para usar o WhatsApp.
O sistema do WhatsApp é todo via WebServices, ou seja, não faz uso de ligações ou mensagens SMS (a princípio…), usa pura e simplesmente a Internet. Mas a título de criar uma chave de registro única e vinculada a um número de telefone celular válido, o sistema do WhatsApp envia uma mensagem com um código de cadastro para o número de telefone a ser utilizado no serviço.
E para entender essa numeração, vamos lidar com os seguintes conceitos:
- CC – Country Code: Código da nação, ou seja, código usado para discar para Brasil, Estados Unidos, etc…;
- MCC – Mobile Country Code: Código de 3 dígitos que referencia a nação;
- MNC – Mobile Network Code: Código usado pela operadora de telefonia no país, ou seja, é um código associado à Claro, Vivo, TIM, etc.
Para ver mais detalhes sobre esses conceitos, além de ver a listagem do Brasil e das operadoras presentes no Brasil (inclusive a que você certamente está usando), veja esta página na Wikipedia. Desta página eu tirei os códigos usados neste exemplo. E funcionaram 🙂
De modo a usar bem o Yowsup2, é bom criar um arquivo de configuração com os dados de códigos, chaves, etc. No meu caso eu criei um arquivo chamado whatsapp.config por meio do seguinte comando, usando o editor vi:
1 |
vi whatsapp.config |
Com o editor aberto, coloque o seguinte conteúdo no arquivo, tendo por base e referência códigos de telefonia para o seu número de celular. No exemplo eu usei meus dados, e mascarei meu número pessoal de celular.
1 2 3 4 5 6 |
cc=55 #Brasil coloca 55 (é, deixa isso, 55 para Brasil. mcc=724 # Mobile Country Code do Brasil mnc=05 # Mobile Network Code da Claro no Brasil phone=551699xxxxxxx #Codigo país + DDD + Numero de telefone id=0000000000 #Deixa assim, sem problema. password= #Deixa assim por enquanto. Vamos preencher esse password logo. |
Salve o arquivo pressionando a tecla ESC e digitando :wq para salvar e sair do vi.
Observação importante: No próximo passo iremos requisitar aos serviços do WhatsApp um código de verificação. É necessário que você esteja usando um aparelho celular para poder receber este código. Todavia, se o WhatsApp estiver em execução no aparelho, o mesmo poderá pegar o código automaticamente.
Assim, desative os recursos de Wi-Fi e 3G/4G do celular que você estiver usando com o número a ser trabalhado!
Vamos requisitar um código de verificiação aos serviços do WhatsApp, de modo a fazer com que o WhatsApp ache que a nossa Intel Edison é um celular:
1 |
# yowsup-cli registration -c whatsapp.config --requestcode sms |
No comando passado acima, usamos o yowsup-cli, que é um utilitário em linha de comando da aplicação yowsup. Neste utilitário, temos algumas funções bem interessantes, tais como a registration, que dispara as chamadas necessárias para requisitar o código. Juntamente com essa função, é preciso passar o arquivo de configuração, por meio dos parâmetros -c whatsapp.config e depois dizer que queremos um código via SMS com os parâmetros –requestcode sms. Dê ENTER para disparar o comando. Veja na Figura 1 o resultado do processo na Intel Edison utilizada.
Dado o comando, logo seu celular irá receber um SMS com código, tal como mostrado na Figura 2.
Recebido o código, é hora de fazer o registro com o sistema. Com base no código que eu recebi, procedi com o seguinte comando:
1 |
# yowsup-cli registration -R 267-032 -c whatsapp.config |
Feito isso… O WhatsApp agora enxerga a sua Intel Edison como correspondente ao número de celular utilizado! Caso você tenha WhastApp no celular “cobaia”, você bem provavelmente irá receber uma mensagem do WhatsApp indicando que o serviço foi desabilitado. Não o reabilite, caso contrário você terá que proceder novamente com o processo de autenticação na Edison!
Após você ter dado o comando citado para registrar o sistema com o código enviado por SMS, aparecerá uma mensagem em sua tela de console bem parecida com a que é mostrada na Figura 3. Apenas escondi o meu número de celular, e destaquei o campo que deve ser copiado nesta mensagem de resposta.
Nesta resposta, copie o código indicado pelo campo pw, que corresponde à sua chave de acesso ao sistema, e cole no arquivo whatsapp.config que criamos previamente, em sequência ao campo “password=“, de tal modo que agora o seu arquivo whatsapp.config fique da seguinte forma, com base no meu:
1 2 3 4 5 6 |
cc=55 #Brasil coloca 55 (é, deixa isso, 55 para Brasil. mcc=724 # Mobile Country Code do Brasil mnc=05 # Mobile Network Code da Claro no Brasil phone=551699xxxxxxx #Codigo país + DDD + Numero de telefone id=0000000000 #Deixa assim, sem problema. password=L4bj+ct5OcUYXomyzfvJyd9DmzQ= #Password obtido com o registro no sistema WhastApp |
Curiosamente, seu login é seu número de celular, no formato 551699xxxxxxx, indicado no campo phone, como por exemplo para um número no Brasil (55), do Interior de São Paulo (DDD 16).
Muito trabalho até agora. Vamos mandar uma mensagem? Veja o comando usado para enviar mensagem abaixo, e como ficou a operação do programa no console na Figura 4.
1 |
# yowsup-cli demos -s 551699xxxxxxx "Intel Edison mandando mensagem via WhatsApp no Embarcados" -c whatsapp.config |
Pronto! Agora sua Intel Edison é capaz de enviar mensagems via WhatsApp. Veja o resultado na Figura 5!
Por enquanto, ainda não há bem um mecanismo para receber mensagens usando o yowsup-cli, que é esse utilitário em linha de comando que foi usado. Mas o Yowsup fornece toda uma API para ter acesso a envio e recebimento de mensagens, enviar conteúdo multimídia, dentre outras coisas mais.
Todavia, é possível você utilizar o yowsup-cli dentro de uma aplicação Python, por exemplo. Veja o seguinte trecho de código Python para ter uma noção:
1 2 |
import os os.system("yowsup-cli demos -s 551699xxxxxxx \"Intel Edison mandando mensagem via WhatsApp no Embarcados\" -c whatsapp.config") |
Ficou interessado sobre como chamar comandos de console em Python? Dê uma lida na documentação e exemplos da biblioteca Subprocess!
Assim sendo, temos infinitas possibilidades para se trabalhar com um sistema embarcado integrado à internet e com comunicação via WhatsApp, tais como:
- Alarmes;
- Monitoramento de Sensores;
- Notificação de Eventos;
- Dentre outros!
Amigo, e sobre a questão do bloqueio? Vi pela net, que se usar qualquer tipo de script, o Whatsapp bloqueia o numero… é verdade?
I tried the above steps but after receiving the sms , i try to send a msg on whatapp using command : yowsup-cli demos -s 551699xxxxxxx “Intel Edison mandando mensagem via WhatsApp no Embarcados” -c whatsapp.config
But it says :
ImportError: No module named axolotl_curve25519
Kindly tell what is the problem ..even tried downloading this package using:
pip install axolotl_curve25519
but it says :
root@edison81:~# pip install axolotl_curve25519Downloading/unpacking axolotl-curve25519
Could not find any downloads that satisfy the requirement axolotl-curve25519
No distributions at all found for axolotl-curve25519
Olá André, estou tentando implementar este mesmo tutorial em um ambiente linux rodando Ubuntu 14.04 server, porem não consigo registrar meu numero, quando executo o o comando: “yowsup-cli registration -c whats.config –requestcode sms” recebo a seguinte mensagem: “INFO:yowsup.common.http.warequest:{“status”:”fail”,”reason”:”old_version”}
“.
andei procurando na internet uma possível solução mas não encontrei nada que ajudasse, voce consegue me da uma luz sobre este problema?
abraço
Show de Bola André!
Preciso de uma Edison para brincar também.
Ótimo meu doutor!
Olá André, sobre o erro de old_version tem alguma solução? mudei a versão no arquivo env_s40 o erro da versão é corrigido porem dá um erro de bad_token, Obrigado!
Estou com o mesmo problema!