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.

Conteúdo Relacionado

A Infineon Technologies AG apresenta os novos MOSFETs CoolSiC...
Uma rede de sensores é incorporada em todos os...
O controlador do motor é um dos componentes mais...
ESP32-CAM é um módulo de câmera compacto que combina...
A evolução dos padrões USB foi fundamental para moldar...
A SCHURTER anuncia um aprimoramento para sua conhecida série...
A Sealevel Systems anuncia o lançamento da Interface Serial...
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
Determinar uma localização precisa é necessário em várias indústrias...
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
O mercado embarcado tem uma necessidade de soluções de...
Quando você explora a área de Controle V/F dos...
Você provavelmente já se deparou com o termo 'arrastar'...
Você provavelmente tem um Isolador de suporte Se você...
Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.