Automação residencial baseada em WhatsApp

Automação residencial baseada em WhatsApp

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

Figura 1 Automação residencial baseada no WhatsApp

  • 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

Figura 2 LED conectado ao Arduino Uno

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.
  1. Baixe este arquivo –py
  2. Baixar WhatsApp – apk
  3. Coloque-os em uma pasta e digite o seguinte comando
    python dexMD5.py WhatsApp.apk
  1. Você verá a seguinte saída
    Versão: 2.17.344
    ClassesDex: OxVSHnBDYNBZmsgagatF9+A==
  1. Agora escreva os valores Version e ClassessDex em um arquivo dentro do local da API
    yowsup/env/env_android.py
  1. 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.

  1. Entendendo a arquitetura da API
  2. Chamando a API
  3. 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.

Torna al blog

Lascia un commento

Si prega di notare che, prima di essere pubblicati, i commenti devono essere approvati.