ESP8266 WiFi Amazon Alexa Voice control Loxone

Голосовое управление через Amazon


Функциональное описание:

  • Amazon Alexa Dot и NodeMCU работают в одной локальной сети, где они могут "видеть".
  • NodeMCU содержит сервер keep-alive на различных виртуальных портах UDP, где работает каждый выходной элемент управления. Вы можете использовать 4 вкл / выкл обратного вызова (4 для ВКЛ, 4 для ВЫКЛ).
  • Один порт обрабатывает один выход, которым можно управлять при включении / выключении питания.
  • Amazon Alexa Dot может выполнять поиск UDP-портов в сети, а также может выдавать команды для управления ими на основе команды пользователя на английском языке с соответствующим параметром
  • Чтобы найти устройства, нужно сказать: "Alexa, Find devices"
  • Алекса отвечает через некоторое время: "The Discovery is complete, I found one smart device." - это проверит, виден ли NodeMCU (ESP8266) в локальной сети.
  • Для управления реле используйте одну из следующих демонстрационных команд: "Alexa, Turn relay one on", "Alexa, Turn relay one off" и аналогично для других выходов
  • Используемое оборудование:

  • Amazon Alexa Dot (версии 1 и 2 совместимы) Amazon Alexa Dot
  • ESP8266 / NodeMCU (v1/v2/v3) ESP8266
  • 1+ канальное электромагнитное / SSR реле Elmg. relé
  • эксплуатация:

  • Управляйте светом и выходами прямо из обратного вызова
  • Контролируйте другие системы (Loxone и другие, которые поддерживают HTTP-аутентификацию и запрос GET / POST)
  • Запрос на веб-сервис
  • Библиотеки проекта: Github
          
  • Примеры программ DEMO ESP8266 могут управлять одним выходом в соответствии с голосовой командой, приведенной выше.
  • ESP8266 sketch - NodeMCU + Loxone HTTP request - ON/OFF

    #include <ESP8266WiFi.h>
    #include <ESP8266WebServer.h>
    #include <WiFiUdp.h>
    #include <functional>
    #include "Switch.h"
    #include "UpnpBroadcastResponder.h"
    #include "CallbackFunction.h"
    #include <ESP8266HTTPClient.h>
    const char *ssid =  "meno_wifi";
    const char *password =  "heslo_wifi";
    boolean connectWifi();
    void Relay1On();
    void Relay1Off();
    boolean wifiConnected = false;
    int httpCode = 0;
    UpnpBroadcastResponder upnpBroadcastResponder;
    Switch *relay1 = NULL;
    HTTPClient http;
    void setup()
    {
      Serial.begin(9600);
      wifiConnected = connectWifi();
      if (wifiConnected) {
        upnpBroadcastResponder.beginUdpMulticast();
        relay1 = new Switch("Relay 1", 80, Relay1On, Relay1Off);
        Serial.println("Adding switches upnp broadcast responder");
        upnpBroadcastResponder.addDevice(*relay1);
      }
    }
    void loop()
    {
      if (wifiConnected) {
        upnpBroadcastResponder.serverLoop();
        relay1->serverLoop();
      }
    }
    
    void Relay1On() {
      Serial.println("Zapinam switch 1 na povel od Alexa Dot");
      String url = "http://192.168.1.13:83/dev/sps/io/0f7d5586-039c-3ba2-fffffe345eb0bf31/on";
      http.begin(url);
      http.setAuthorization("admin", "0285");
      httpCode = http.GET();
      if (httpCode == HTTP_CODE_OK) {
    
      }
      http.end();
    }
    
    void Relay1Off() {
      Serial.println("Vypinam switch 1 na povel od Alexa Dot");
      String url = "http://192.168.1.13:83/dev/sps/io/0f7d5586-039c-3ba2-fffffe345eb0bf31/off";
      http.begin(url);
      http.setAuthorization("admin", "0285");
      httpCode = http.GET();
      if (httpCode == HTTP_CODE_OK) {
    
      }
      http.end();
    }
    
    boolean connectWifi() {
      boolean state = true;
      WiFi.mode(WIFI_STA);
      WiFi.begin(ssid, password);
      Serial.println("");
      Serial.println("Pripajanie na wifi");
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      if (state) {
        Serial.println("");
        Serial.print("Connected to ");
        Serial.println(ssid);
        Serial.print("IP address: ");
        Serial.println(WiFi.localIP());
      }
      else {
        Serial.println("");
        Serial.println("Connection failed.");
      }
      return state;
    }
          

    ESP8266 sketch - NodeMCU + Web HTTP request - ON/OFF

    #include <ESP8266WiFi.h>
    #include <ESP8266WebServer.h>
    #include <WiFiUdp.h>
    #include <functional>
    #include "Switch.h"
    #include "UpnpBroadcastResponder.h"
    #include "CallbackFunction.h"
    #include <ESP8266HTTPClient.h>
    const char *ssid =  "meno_wifi";
    const char *password =  "heslo_wifi";
    boolean connectWifi();
    void Relay1On();
    void Relay1Off();
    boolean wifiConnected = false;
    int httpCode = 0;
    UpnpBroadcastResponder upnpBroadcastResponder;
    Switch *relay1 = NULL;
    HTTPClient http;
    void setup()
    {
      Serial.begin(9600);
      wifiConnected = connectWifi();
      if (wifiConnected) {
        upnpBroadcastResponder.beginUdpMulticast();
        relay1 = new Switch("Relay 1", 80, Relay1On, Relay1Off);
        Serial.println("Adding switches upnp broadcast responder");
        upnpBroadcastResponder.addDevice(*relay1);
      }
    }
    void loop()
    {
      if (wifiConnected) {
        upnpBroadcastResponder.serverLoop();
        relay1->serverLoop();
      }
    }
    
    void Relay1On() {
      Serial.println("Zapinam switch 1 na povel od Alexa Dot");
      String url = "http:/web.sk/zapnirele.php";
      http.begin(url);
      httpCode = http.GET();
      if (httpCode == HTTP_CODE_OK) {
    
      }
      http.end();
    }
    
    void Relay1Off() {
      Serial.println("Vypinam switch 1 na povel od Alexa Dot");
      String url = "http:/web.sk/vypnirele.php";
      http.begin(url);
      httpCode = http.GET();
      if (httpCode == HTTP_CODE_OK) {
    
      }
      http.end();
    }
    
    boolean connectWifi() {
      boolean state = true;
      WiFi.mode(WIFI_STA);
      WiFi.begin(ssid, password);
      Serial.println("");
      Serial.println("Pripajanie na wifi");
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      if (state) {
        Serial.println("");
        Serial.print("Connected to ");
        Serial.println(ssid);
        Serial.print("IP address: ");
        Serial.println(WiFi.localIP());
      }
      else {
        Serial.println("");
        Serial.println("Connection failed.");
      }
      return state;
    }