Automação residencial com Alexa e NodeMCU: Emulando um dispositivo WeMo

Alguns meses atrás, explorei como usar a Alexa, um assistente pessoal inteligente, popularizado pelo Amazon Echo e Echo-Dot,em projetos de automação residencial:

Quando o IoT encontra a Inteligência Artificial: Automação residenc...

Alexa é capaz de interação de voz, reprodução de música, fazer listas de tarefas, configurar alarmes, podcasts de transmissão, reproduzir audiobooks e fornecer informações meteorológicas, de tráfego e outras informações em tempo real.

A Alexa também pode controlar vários dispositivos inteligentes funcionando como um hub de automação residencial. Usaremos neste projeto, o “Echo-Dot”, que permite aos usuários ativar o dispositivo usando uma palavra de despertar, como “Alexa” ou “Computer”, como em “Star Trek !

No espaço da automação residencial, a Alexa pode interagir com vários dispositivos diferentes como Philips Hue, Belkin Wemo, SmartThings, etc. Em nosso caso, vamos emular o WeMo, usando a biblioteca fauxmoESP.

Esta é a principal diferença entre este tutorial e o anterior. A biblioteca fauxmoESP simplifica extremamente o código necessário para o desenvolvimento de projetos de automação residencial envolvendo a Alexa e o NodeMCU.

WeMo é uma série de produtos da Belkin International, Inc. que permite aos usuários controlar eletrodomésticos desde qualquer lugar. O conjunto de produtos inclui um interruptor, sensor de movimento, interruptor de luz, câmera e aplicativo.

WeMo Switch (nosso caso aqui) pode ser conectado a qualquer tomada doméstica, a qual pode ser controlada a partir de um smartphone iOS ou Android o qual executará o aplicativo WeMo, via rede doméstica WiFi ou rede celular. Nós emularemos este dispositivo, mas seu controle será obtido por voz via o Echo-Dot.

O diagrama de blocos abaixo mostra o que será desenvolvido em nosso projeto:

O vídeo abaixo mostra como o projeto ficará no final:

https://youtu.be/sZY1pHhq4AA

 



1: Lista de materiais

(Valores em US$ apenas para referência)

  1. NodeMCU ESP8266-12E ($8.79)
  2. Echo Dot (2nd Generation) – Black ($49.99)
  3. 2 X Mini BreadBoard ($1.00)
  4. 4-Channel Relay Module ($8.49)
  5. Male-Female Dupont Cables ($1.00)
  6. Fonte externa de 5V ou bateria


2: Emulação do WeMo – a biblioteca FauxmoESP

WeMo Emulationhttps://mjrobot.files.wordpress.com/2017/08/wemo-emulation.png?w=1160 1160w, https://mjrobot.files.wordpress.com/2017/08/wemo-emulation.png?w=150 150w, https://mjrobot.files.wordpress.com/2017/08/wemo-emulation.png?w=300 300w, https://mjrobot.files.wordpress.com/2017/08/wemo-emulation.png?w=768 768w, https://mjrobot.files.wordpress.com/2017/08/wemo-emulation.png?w=1024 1024w" sizes="(max-width: 580px) 100vw, 580px" />

Este tutorial baseia-se na excelente biblioteca e exemplo de código aberto desenvolvido por Xosé Perez (Tinkerman). Veja a sua publicação original aqui: Emulate a WeMo device with ESP8266. Tinkerman por sua vez, baseou-se no código Python desenvolvido por Maker Musings.

fauxmoESP é uma biblioteca para dispositivos baseados em ESP8266 que emula um dispositivo Belkin WeMo, permitindo assim que você os controle usando um protocolo, especialmente desenvolvido para dispositivos, como o Amazon Echo ou o Echo-Dot.

A biblioteca pode ser encontrada no website BitBucket de Xose Perez: fauxmoESP

1. fauxmoESP Library ZIP

Para que a fauxmoESP funcione, você também precisará de mais 2 bibliotecas, desenvolvidas por Hristo Gochkov:

2. ESPAsyncTCP

3. ESPAsyncWebServer

Então, vá até o IDE do Arduino e instale as 3 bibliotecas acima no diretório Arduino/Libraries.

Informações técnicas adicionais (e opcionais):

Se você está interessado em entender mais profundamente o que está acontecendo, leia o artigo: HOW TO MAKE AMAZON ECHO CONTROL FAKE WEMO DEVICES, escrito por Rick Osgut, onde poderá aprender um pouco mais sobre a emulação do WeMo.

Vai aqui um pequeno resumo:

WeMo Emulation - the FauxmoESP Library

Os dispositivos WeMo utilizam UPnP para executar certas funções através da rede. A função de detecção do dispositivo começa com o Echo ou Echo-Dot (em nosso caso aqui) à procura de dispositivos WeMo utilizando UPnP. O dispositivo então responde ao Echo-Dot com seu URL utilizando HTTP sobre UDP. OEcho-Dot então solicita a descrição do dispositivo utilizando esse URL HTTP. A descrição é então retornada como uma resposta HTTP. Neste ponto, o Echo-Dot já “descobriu” o dispositivo.

O Echo-Dot simplesmente se conectará ao WeMo através da interface HTTP e emitirá um comando do tipo “SetBinaryState”. O WeMo então “obedecerá”, retornando uma confirmação via HTTP. O diagrama  acima resume a comunicação entre o Echo-Dote o WeMo Switch. O diagrama acima, resume o protocolo.



3: Criando dispositivos WeMo com a ajuda do NodeMCU

Creating Our WeMo Devices With NodeMCU

Vamos conectar um módulo relé de 4 canais onde controlaremos por exemplo,  2 lâmpadas e 2 tomadas genéricas (“outlets”), conforme mostra o diagrama acima.

Criaremos 4 “dispositivos inteligentes únicos”:

  • Light1 ==> Relay 1 ==> NodeMCU D5
  • Light2 ==> Relay 3 ==> NodeMCU D7
  • Outlet1 ==> Relay 2 ==> NodeMCU D6
  • Outlet2 ==> Relay 4 ==> NodeMCU D8

e 3 grupos de dispositivos integrados:

  • All Devices    ==> Light1, Light2, Outlet1 e Outlet2
  • Living Room ==> Light1 e Outlet1
  • Bed Room      ==> Light2 e Outlet2

Baixe e abra o código: NODEMCU_ALEXA_WeMos_4X_Fauxmo_EXT.ino desde meu GitHub e altere as credenciais “dummy” pelas de sua rede WiFi:

/* Network credentials */

#define WIFI_SSID "YOUR SSID HERE"

#define WIFI_PASS "YOUR PASSWORD HERE"

defina os pinos do NodeMCU que serão utilizados para acionar os dispositivos individuais

/* Set Relay Pins */

#define RELAY_1 D5

#define RELAY_2 D6

#define RELAY_3 D7

#define RELAY_4 D8


Agora, escolha com que nomes (entre aspas) com que a Alexa identificará os dispositivos:

// Device Names for Simulated Wemo switches

fauxmo.addDevice("Light One");

fauxmo.addDevice("Light Two");

fauxmo.addDevice("Outlet One");

fauxmo.addDevice("Outlet Two");

fauxmo.addDevice("Bed Room");

fauxmo.addDevice("Living Room");

fauxmo.addDevice("All Devices");


Na função setup(), defina qual será a função que responderá aos comandos por voz (aqui a função se chama “callback”):

fauxmo.onMessage(callback);

Na função setup(), também se deverá chamar a função de setup e conexão com a internet:

//setup and wifi connection

wifiSetup();


Observe o setup e as condições iniciais para os pinos do NodeMCU:

//Set relay pins to outputs

pinMode(RELAY_1, OUTPUT);

pinMode(RELAY_2, OUTPUT);

pinMode(RELAY_3, OUTPUT);

pinMode(RELAY_4, OUTPUT);

//Set each relay pin to HIGH

digitalWrite(RELAY_1, HIGH); delay(500);

digitalWrite(RELAY_2, HIGH); delay(500);

digitalWrite(RELAY_3, HIGH); delay(500);

digitalWrite(RELAY_4, HIGH); delay(500);

Note que os relés funcionam com “lógica reversa”. HIGH para desligar!

A função loop() será simplesmente:

void loop() { fauxmo.handle(); }

A função callback deverá ter o formato como o exemplo abaixo. Aqui só está incluído a porção correspondente ao controle do dispositivo Light1:

/* ---------------------------------------------------------------- Device Callback -------------------------------------------------------------------*/ void callback(uint8_t device_id, const char* device_name, bool state)

{

  Serial.print("Device ");

  Serial.print(device_name);

  Serial.print(" state: ");

  if (state)

  {

    Serial.println("ON");

  }

  else

  {

    Serial.println("OFF");

  }

//Switching action on detection of device name

  if ( (strcmp(device_name, "Light One") == 0) )

  {

    if (!state)

    {

       digitalWrite(RELAY_1, HIGH);

    }

    else

    {

       digitalWrite(RELAY_1, LOW);

     }

  }

    ....

}

Observe que usei “! State” dentro da “declaração if”, porque os relés de 4 canais usam “lógica reversa” para ativação (LOW para ativar).

On the Serial monitor you can see the messages exchanged:

[WIFI] Connecting to ROVAI TIMECAP

............................. ==> CONNECTED!

[WIFI] STATION Mode, SSID: ROVAI TIMECAP, IP address: 10.0.1.36

Agora, necessitamos que a Alexa encontre seu dispositivo. Existem dois métodos para isso:
  • Utilizando o aplicativo Alexa no smartphone como mostrado nas fotos abaixo. Neste exemplo (não é o nosso aqui), a Alexa encontrará “1 Smart Home device”:  lights WeMo Switch.

Alexa apphttps://mjrobot.files.wordpress.com/2017/03/alexa-app.png?w=1160 1160w, https://mjrobot.files.wordpress.com/2017/03/alexa-app.png?w=150 150w, https://mjrobot.files.wordpress.com/2017/03/alexa-app.png?w=300 300w, https://mjrobot.files.wordpress.com/2017/03/alexa-app.png?w=768 768w, https://mjrobot.files.wordpress.com/2017/03/alexa-app.png?w=1024 1024w" sizes="(max-width: 580px) 100vw, 580px" />

  • Ou pedindo diretamente à Alexa através de um comando de voz, como por exemplo: “Alexa, Find connected devices”, ou “Computer, discovery devices“, como é o nosso caso, mostrado no vídeo abaixo:

https://youtu.be/1ePFDn0hMJ8

Uma vez que os dispositivos inteligentes forem descobertos (basta uma única vez), você poderá comandar o Echo-Dot para acioná-los, como mostra o vídeo abaixo:

https://youtu.be/sZY1pHhq4AA

O screenshot abaixo, mostra para referencia um screenshot to Monitor serial no caso de minha rede e setup:

Serial Monitor.png



4: Conclusão

Como sempre, espero que este projecto possa ajudar outros a encontrarem o seu caminho no emocionante mundo da electrónica, robótica e do IoT!

Verifique meu depositário no GitHub para obter os arquivos atualizados:

Home-Automation-with-Alexa-and-NodeMCU/tree/master/Version_FauxmoESP

E não deixe de visitar e seguir meu blog https://MJRoBot.org e minha página: MJRoBot.org no Facebook

Saludos desde el sur del mundo!

Até o próximo tutorial!

Obrigado

Marcelo


Exibições: 158

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2017   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço