ESP8266 WiFi Amazon Alexa Voice control Loxone

Sprachsteuerung über Amazon


Funktionsbeschreibung:

  • Amazon Alexa Dot und NodeMCU arbeiten in einem LAN-Netzwerk, in dem sie "sehen" können.
  • Die NodeMCU enthält einen Keep-Alive-Server an verschiedenen virtuellen UDP-Ports, bei denen jede Ausgabesteuerung funktioniert. Sie können 4 Ein / Aus-Rückrufe verwenden (4 für EIN, 4 für AUS).
  • Ein Port verfügt über einen Ausgang, der durch Ein- und Ausschalten gesteuert werden kann.
  • Amazon Alexa Dot kann im Netzwerk nach UDP-Ports suchen und Befehle ausgeben, die auf Befehl eines Benutzers in Englisch mit dem entsprechenden Parameter gesteuert werden
  • Um Geräte zu finden, müssen Sie Folgendes sagen: "Alexa, Find devices"
  • Alexa antwortet nach einer Weile: "The Discovery is complete, I found one smart device." - Hiermit wird überprüft, ob die NodeMCU (ESP8266) im LAN sichtbar ist.
  • Verwenden Sie zur Steuerung eines Relais einen der folgenden Demo-Befehle: "Alexa, Turn relay one on", "Alexa, Turn relay one off" und in ähnlicher Weise für andere Ausgänge
  • Verwendete Hardware:

  • Amazon Alexa Dot (Versionen 1 und 2 sind kompatibel) Amazon Alexa Dot
  • ESP8266 / NodeMCU (v1/v2/v3) ESP8266
  • 1+ elektromagnetisches / SSR-Kanalrelais Elmg. relé
  • Ausbeutung:

  • Steuern Sie die Lichter und Ausgänge direkt vom Rückruf aus
  • Steuerung anderer Systeme (Loxone und andere, die HTTP-Authentifizierung und GET / POST-Anforderung unterstützen)
  • Antrag auf Webservice
  • Projektbibliotheken: Github
  • Beispiel-DEMO-Programme für den ESP8266 können einen Ausgang gemäß dem obigen Sprachbefehl steuern.
  • 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;
    }