Neste artigo, aprenderemos como controlar nossos eletrodomésticos IoT usando o aplicativo de mensagens WhatsApp para nos comunicarmos de maneira fácil e eficaz com esses dispositivos.
Portanto, enviaremos mensagens do WhatsApp para vários “luzes acesas” e as luzes da nossa casa serão ACENDIDAS.
Componentes necessários
Ferramentas necessárias/bibliotecas necessárias:
- Biblioteca API do WhatsApp – Yowsup
- Biblioteca de comunicação serial baseada em Python – pyserial
- Máquina baseada em Linux
- IDE do Arduino
Informações Técnicas
Para controlar qualquer coisa da internet, precisaremos de um protocolo. O WhatsApp funciona em XMPP (Extensible Messaging and Presence Protocol). Estaremos usando sua API para enviar e receber mensagens. As mensagens recebidas funcionarão como comandos para uma tarefa específica, como ligar/desligar a luz.
Diagrama de bloco
- Os eletrodomésticos são conectados por meio de um relé a um microcontrolador que os controla quando um comando ON/OFF específico é recebido por meio de comunicação serial.
- O microcontrolador (placa Arduino UNO 3) é conectado a um sistema baseado em Linux por meio de comunicação serial.
- Uma API do WhatsApp (Yowsup) é instalada no sistema com um número de telefone. Que pode enviar e receber mensagens do WhatsApp.
Diagrama de circuito
Como funciona o sistema?
- Quando alguém envia uma mensagem para o número em que o WhatsApp está instalado no sistema Linux.
- A mensagem é recebida no sistema através de um script Python executando uma mensagem recebendo o script e analisada para comandos como “ligar/desligar luzes”.
- Quando qualquer comando corresponde aos comandos predefinidos, o script envia esse comando para o microcontrolador conectado à porta de comunicação serial.
- Se o comando “acender luzes” for recebido em uma mensagem, o script entende que é para acender a luz, então enviará o comando “ON” ao microcontrolador através de comunicação serial. O controlador acenderá a luz ligando o relé.
Os dispositivos IoT não suportam diretamente a API do WhatsApp, portanto os dados devem ser transferidos de um protocolo para outro. No próximo artigo, “Ponte de protocolo”, veremos como redirecionar mensagens enviadas do WhatsApp para o MQTT.
Instalando a API do WhatsApp no Linux
Passo 1 – Preparando o sistema
Esta API funciona em python, então precisamos primeiro configurar o ambiente para instalá-lo no sistema. Podemos fazer isso digitando o seguinte comando no terminal.
Sudo apt-get atualização
sudo apt-get install python-dateutil
sudo apt-get install python-setuptools
sudo apt-get install python-dev
sudo apt-get install libevent-dev
sudo apt-get install ncurses-dev
Passo 2 – Baixando a API
Digite o seguinte comando no terminal.
git clone git://github.com/tgalal/yowsup.git
Agora vá para a pasta youwsup e digite o seguinte para instalá-lo no sistema
sudo python setup.py instalar
agora que instalamos isso em nosso sistema é hora de cadastrar o número do WhatsApp.
Nota- Apenas um número por dispositivo é permitido no WhatsApp, então você precisa de um novo número para instalar o WhatsApp no Linux.
Passo 3 – Configurando a API
- A API Yowsup vem com um utilitário de linha de comando usado para registro.
- Para registrar o número de telefone, precisamos baixar o APK mais recente do WhatsApp e fazer algumas coisas a seguir.
- Precisamos baixar a versão mais recente do WhatsApp, calcular alguns hash MD5 e gravá-los em um arquivo na API do WhatsApp. Assim, o WhatsApp não trava e pede atualização.
- Para fazer isso, siga as etapas.
- Baixe este arquivo –py
- Baixar WhatsApp – apk
- Coloque-os em uma pasta e digite o seguinte comando
python dexMD5.py WhatsApp.apk
- Você verá a seguinte saída
Versão: 2.17.344
ClassesDex: OxVSHnBDYNBZmsgagatF9+A==
- Agora escreva os valores Version e ClassessDex em um arquivo dentro do local da API
yowsup/env/env_android.py
- Agora digite o seguinte comando para reinstalar a API
compilação python setup.py
instalação do python setup.py
Passo 4. – Cadastrando o usuário
4.1 – Obtendo o código de verificação
Agora vem o cadastro no servidor WhatsApp, que pode ser feito pelo utilitário de linha de comando “yowsup-cli”, utilizando o seguinte comando.
registro python yowsup-cli –requestcode sms –phone 91xxxxxxxxxx –cc 91 –mcc 222 –mnc 10 -E android
Digite seu número de telefone em 91XXXXXXXXX
Os códigos MCC e MNC podem ser encontrados neste link –
Após inserir o seguinte comando, você receberá uma mensagem com um código de verificação de 6 dígitos. Mantenha esse número armazenado. Ele será usado na próxima etapa.
4.2 – Obtendo senha para login
Para fazer login no WhatsApp, precisaremos de uma string de senha, uma string base64. Podemos obter isso substituindo xxx-xxx pelo número de seis dígitos.
registro python yowsup-cli –registrar xxx-xxx –telefone 91xxxxxxxxxx –cc 91 -E android
Depois disso, você verá uma saída como esta
estado: ok
tipo: grátis
pw: xxxxxxxxxxxxxxxxxx= #esta é a senha
preço: ₹ 55
preço_expiração: 1509040085
moeda: INR
custo: 55,00
validade: 4444444444,0
login: 91xxxxxxxxxx
tipo: novo
Com esta instalação, obtivemos duas coisas: um número de telefone no qual nossa API está instalada e uma senha para login. Mantenha-os armazenados.
Observação – O número de telefone deve ser usado com o código do país
Telefone – 91XXXXXXX
Senha – Gbuioa254ui25j2=XXXXX
Desenvolvendo o código fonte
Para desenvolver o código para automação, temos que ver como a API pode ser chamada. Além disso, precisamos escrever um pequeno script no Arduino para controlar o relé/led. Pode haver etapas a seguir para entender como o código-fonte funciona.
Código do sistema Linux
Deste lado iremos implementar esses recursos.
- Entendendo a arquitetura da API
- Chamando a API
- Controlando os aparelhos
Compreendendo a arquitetura da API
O aplicativo Yowsup python funciona em pilhas de camadas. Os dados podem ser transferidos de camada para camada.
Se quisermos enviar uma mensagem, enviaremos essa mensagem para a camada inferior.
self.toLower(outgoingMessageProtocolEntity)
Caso queira receber mensagens, elas serão acessadas a partir da camada superior, que será a camada atual da pilha.
Chamando a API
Para chamar a API estaremos fazendo dois scripts python. Uma será passar objetos como nome de usuário e senhas na pilha e iniciar o empilhamento. A segunda será nossa principal camada de recebimento de mensagens, na qual receberemos mensagens e realizaremos as tarefas.
Então, os dois arquivos serão run.py e camada.py
Compreendendo o arquivo Run.py
- Chamaremos nossas bibliotecas no topo do arquivo
de yowsup.stacks importar YowStackBuilder
de yowsup.layers.auth importar AuthError
de yowsup.layers importar YowLayerEvent
de yowsup.layers.network importar YowNetworkLayer
de yowsup.env importar YowsupEnv
- Também anexaremos o arquivo da camada no topo porque a classe principal “Ecocamada” existe dentro desse arquivo.
da importação de camada EchoLayer
- Podemos nomear qualquer arquivo de camada, mas temos que colocar o mesmo nome aqui.
- Dentro de py, declararemos nossa variável principal para senha e eventos que queremos que ocorram.
credenciais = (“91xxxxxxxxxx”, “HkhWVW5/Wnr493HXK8NKl/htpno=”)
- Agora passamos para a camada e construímos a pilha. Além disso, o loop que manterá a conexão ativa é chamado.
stack.setCredentials(credenciais) stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT)) #enviando o sinal de conexão
stack.loop #este é o programa mainloop
Compreendendo o arquivo layer.py
Este arquivo contém a classe que receberá todas as mensagens recebidas para este número, e que será uma entidade de retorno de chamada para que qualquer outro loop possa ser executado dentro do arquivo.
@ProtocolEntityCallback(“mensagem”)
def onMessage(self, messageProtocolEntity):
se for verdade:
Os dados da mensagem e o número de onde a mensagem chegou podem ser obtidos usando o seguinte.
incomming_message_data = mensagemProtocolEntity.getBody
Isso obterá o corpo da mensagem, que é a mensagem real. Ele será armazenado em uma variável string “incomming_message_data”
incomming_message_sender = mensagemProtocolEntity.getFrom
Esta linha armazenará o número de contato da mensagem recebida na variável string “incomming_message_sender”
Usando esses dois valores, podemos fazer qualquer coisa: receber uma mensagem específica ou de um número específico. Esta função sempre continuará recebendo os dados quando chegarem.
Abaixo está como iremos utilizá-los para fazer nosso projeto de automação residencial.
Controlando os aparelhos
Para controlar os eletrodomésticos, precisamos escrever um código que possa interagir com o código escrito no Arduino.
Usaremos esta abordagem simples na qual escreveremos um código no Arduino que pode controlar a saída de um pino quando tais comandos são recebidos.
Agora abrimos a porta serial para comunicaçãoAssim, no código importaremos nossa biblioteca “pyserial”.
importar série
ser = serial.Serial(porta, baud, tempo limite = 1)
Para ligar ou desligar qualquer pino no Arduino, precisamos enviar dados em série. Além disso, primeiro precisamos ler a mensagem recebida do WhatsApp.
elif(“luzes acesas” em incomming_msg):
ser.write(“on”.encode('ascii'))
Esta linha diz se há “luzes acesas” na string “incoming_msg” (que é a mensagem que recebemos), então envie a string “on” na porta serial.
O resto pode ser entendido dentro do código do Arduino.
Para enviar a mensagem de volta ao WhatsApp, utilizaremos esta linha,
outgoingMessageProtocolEntity = TextMessageProtocolEntity(mensagem_enviar,para = remetente_jid)
Código de Hardware (Arduino)
No Arduino, simplesmente escreveremos um código que escuta strings de entrada na porta serial e, se disser “ligado”, colocaremos um pino no qual o LED está conectado em ALTO, ou se disser “desligado”, ligaremos o pino. Pino LED BAIXO.
If(Serial.disponível ){
Dados de string = Serial.readString ;
if(dados == “ativado”){
digitalWrite(13,ALTO);
}
Caso contrário, if(dados == “desligado”){
digitalWrite(13,BAIXO);
}
}
É assim que nosso código de automação funciona. Para saber mais sobre o XMPP leia nossos artigos anteriores.
Observação:
- Não use a API do WhatsApp (Yowsup) com o sistema operacional Raspbian, ou seu número será proibido de usar o WhatsApp. Instale-o no Ubuntu ou em qualquer outra distribuição Linux.
- O WhatsApp de um número só pode ser instalado em um dispositivo por vez.
- A frequência de envio de mensagens não deve ser rápida, pois 30 mensagens por minuto é o limite que você pode ultrapassar, acima disso há chances de seu número ser bloqueado no WhatsApp.