Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:

THEMA: Amazon Alexa Wemos D1, ESP8266 und SonOff (Itead)

Amazon Alexa Wemos D1, ESP8266 und SonOff (Itead) 20 Mär 2017 00:24 #147

  • Helmut
  • Helmuts Avatar
  • Offline
  • New Member
  • Beiträge: 2
  • Dank erhalten: 2
  • Karma: 0
Nach dem Flashen Alexa Geräte suchen lassen.
Die Worte "Stehlampe" sind die Alexa Aufrufe, also mit "Alexa schalte Stehlampe EIN " sollte die Stehlampe EIN gehen
Wemos D1 als Belkin Gerät zum Schalten mit Amazon Echo mit serielle Ausgabe:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiUdp.h>
#include <functional>
#include "switch.h"
#include "UpnpBroadcastResponder.h"
#include "CallbackFunction.h"

// prototypes
boolean connectWifi();

//on/off callbacks 
//- Wintergarten
//- Essen
//- Küche
//- Wohnen
//- Schlafen
//- Wandleuchten
//- Anrichte


void WintergartenLightsOn();
void WintergartenLightsOff();

void EssenLightsOn();
void EssenLightsOff();

void KuecheLightsOn();
void KuecheLightsOff();

void WohnenLightsOn();
void WohnenLightsOff();

void SchlafenOn();
void SchlafenOff();

void WandleuchtenLightsOn();
void WandleuchtenLightsOff();

void AnrichteOn();
void AnrichteOff();
// Change this before you flash
const char* ssid = "SSID";
const char* password = "passwort";

boolean wifiConnected = false;

UpnpBroadcastResponder upnpBroadcastResponder;

Switch *Wintergarten = NULL;
Switch *Essen = NULL;
Switch *Kueche = NULL;
Switch *Wohnen = NULL;
Switch *Schlafen = NULL;
Switch *Wandleuchten = NULL;
Switch *Anrichte = NULL;

void setup()
{
  Serial.begin(115200);
   
  // Initialise wifi connection
  wifiConnected = connectWifi();
  
  if(wifiConnected){
    upnpBroadcastResponder.beginUdpMulticast();
    
    // Define your switches here. Max 14
    // Format: Alexa invocation name, local port no, on callback, off callback
    Wintergarten = new Switch("Wintergarten Licht", 80, WintergartenLightsOn, WintergartenLightsOff);
    Essen = new Switch("Essen Licht", 81, EssenLightsOn, EssenLightsOff);
    Kueche = new Switch("Kueche Licht", 82, KuecheLightsOn, KuecheLightsOff);
    Wohnen = new Switch("Wohnen Licht", 83, WohnenLightsOn, WohnenLightsOff);
    Schlafen = new Switch("Schlafen Licht", 84, SchlafenLightsOn, SchlafenLightsOff);
    Wandleuchten = new Switch("Wandleuchten Licht", 85, WandleuchtenLightsOn, WandleuchtenLightsOff);
    Anrichte = new Switch("Anrichte Licht", 86, AnrichteLightsOn, AnrichteLightsOff);
    //Wohnen = new Switch("Wohnen Licht", 87, WohnenLightsOn, WohnenLightsOff); 
            
    Serial.println("Adding switches upnp broadcast responder");
    upnpBroadcastResponder.addDevice(*Wintergarten);
    upnpBroadcastResponder.addDevice(*Essen);
    upnpBroadcastResponder.addDevice(*Kueche);
    upnpBroadcastResponder.addDevice(*Wohnen);
    upnpBroadcastResponder.addDevice(*Schlafen);  
    upnpBroadcastResponder.addDevice(*Wandleuchten);
    upnpBroadcastResponder.addDevice(*Anrichte);  
  }
}
 
void loop()
{
	 if(wifiConnected){
      upnpBroadcastResponder.serverLoop();      
      Essen->serverLoop();
      Wintergarten->serverLoop();
      Kueche->serverLoop();
      Wohnen->serverLoop();      
      Schlafen->serverLoop();
      Wandleuchten->serverLoop();      
      Anrichte->serverLoop();      
	 }
}

void WintergartenLightsOn() {
    Serial.print("Wintergarten Licht geht EIN ...");
}

void WintergartenLightsOff() {
    Serial.print("Wintergarten Licht geht AUS ...");
}

void EssenLightsOn() {
    Serial.print("Essen Licht geht EIN ...");
}

void EssenLightsOff() {
  Serial.print("Essen Licht geht AUS ...");
}
void KuecheLightsOn() {
    Serial.print("Kuechen Licht geht EIN ...");
}

void KuecheLightsOff() {
    Serial.print("Kuechen Licht geht AUS ...");
}

void WohnenLightsOn() {
    Serial.print("Wohnen Licht geht EIN ...");
}

void WohnenLightsOff() {
  Serial.print("Wohnen Licht geht AUS ...");
}

void SchlafenLightsOn() {
    Serial.print("Schlafen Licht geht EIN ...");
}

void SchlafenLightsOff() {
  Serial.print("Schlafen Licht geht AUS ...");
}
void WandleuchtenLightsOn() {
    Serial.print("Wandleuchten Licht geht EIN ...");
}

void WandleuchtenLightsOff() {
  Serial.print("Wandleuchten Licht geht AUS ...");
}

void AnrichteLightsOn() {
    Serial.print("Anrichte Licht geht EIN ...");
}

void AnrichteLightsOff() {
  Serial.print("Anrichte Licht geht AUS ...");
}

// connect to wifi – returns true if successful or false if not
boolean connectWifi(){
  boolean state = true;
  int i = 0;
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");
  Serial.println("Connecting to WiFi");

  // Wait for connection
  Serial.print("Connecting ...");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    if (i > 10){
      state = false;
      break;
    }
    i++;
  }
  
  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;
}

Ein ähnliches Programm für das Itead SonOff WiFiRelais, so kann man mit ca 7 Euro schon Alexa als Smarthome Gerät einsetzen, Taster auch in Funktion, LED leuchtet noch beim Starten, müßte man noch ändern, wieder nach dem Flashen Alexa Geräte suchen lassen:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiUdp.h>
#include <functional>
#include "switch.h"
#include "UpnpBroadcastResponder.h"
#include "CallbackFunction.h"

// prototypes
boolean connectWifi();

//on/off callbacks 

//- Stehlampe


void StehlampeLightsOn();
void StehlampeLightsOff();


// Change this before you flash
const char* ssid = "SSID";
const char* password = "passwort";
// Wemos blaue LED ist auf GPIO 2
// im SonOff ist LED auf GPIO13
// im SonOff ist Relais auf GPIO 12
// im SonOff ist LED auf GPIO 0
const int ledPin = 13;
const int Relais = 12;
const int Taster = 0;
boolean wifiConnected = false;
boolean val = 0;        // SchaltZustand
UpnpBroadcastResponder upnpBroadcastResponder;

Switch *Stehlampe = NULL;

void setup()
{
  Serial.begin(115200);
  // initialize the digital pin as an output.
  pinMode(ledPin, OUTPUT);   
  pinMode(Relais, OUTPUT); 
  pinMode(Taster, INPUT_PULLUP);
  // Initialise wifi connection
  wifiConnected = connectWifi();
  
  if(wifiConnected){
    upnpBroadcastResponder.beginUdpMulticast();
    
    // Define your switches here. Max 14
    // Format: Alexa invocation name, local port no, on callback, off callback

    Stehlampe = new Switch("Stehlampe", 81, StehlampeLightsOn, StehlampeLightsOff);

    Serial.println("Adding switches upnp broadcast responder");

    upnpBroadcastResponder.addDevice(*Stehlampe);
          
  }
}
 
void loop()
 // --------------------------------- Taster ---------------------------------------------------------- 
{
  if (!digitalRead(Taster)) // Wenn Taster betätigt
  {
    delay(50);              // Entprellung 
    if (!digitalRead(Taster))  //immer noch betätigt? Noch mal prüfen
    {
      val = !val;           // Umschalten
      digitalWrite(Relais, val);
      digitalWrite(ledPin, !val);     
     
      while (!digitalRead(Taster)); // Warten bis der Taster losgelassen wird
    }
  }

// ---------------------------------WLAN-------------------------------------------------------

	 if(wifiConnected){
      upnpBroadcastResponder.serverLoop();      
      Stehlampe->serverLoop();
         
	 }
}


void StehlampeLightsOn() {
   Serial.print("Stehlampe geht EIN ...");
   digitalWrite(ledPin, LOW); 
   digitalWrite(Relais, HIGH);  
}

void StehlampeLightsOff() {
  Serial.print("Stehlampe geht AUS ...");
  digitalWrite(ledPin, HIGH);
  digitalWrite(Relais, LOW);  
}


// connect to wifi – returns true if successful or false if not
boolean connectWifi(){
  boolean state = true;
  int i = 0;
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");
  Serial.println("Connecting to WiFi");

  // Wait for connection
  Serial.print("Connecting ...");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    if (i > 10){
      state = false;
      break;
    }
    i++;
  }
  
  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;
}
Gruß Helmut
Letzte Änderung: 20 Mär 2017 00:26 von Helmut.
Der Administrator hat öffentliche Schreibrechte deaktiviert.