Virtuelle Lampen/Dimmer für Alexa......

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Antworten
rr745
Beiträge: 305
Registriert: 19.01.2021, 14:53
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 34 Mal

Virtuelle Lampen/Dimmer für Alexa......

Beitrag von rr745 » 27.09.2022, 08:59

....um Lichter zu dimmen, oder Heizkörperthermostate (HM-CC-RT-DN) auf best. Temperatur via Alexa einzustellen.

Ich war immer auf der Suche um für Alexa virtuelle Devices erstellen zu können, um z. B dimmen zu können.
Zum Aus/Einschalten gab es ja den Wemo Emulator.
Zum Dimmen ext. Nodes (Redmatic/Node Red), z. B. Virtual Smart Home. Leider läuft ja unter Raspberrymatic node-red-contrib-alexa-local nicht.

Da ich kein Freund von externen Dingen wie eben Virtual Smart Home bin, welche auch noch einen aktivierten Skill benötigen und seit geraumer Zeit nun kostenpflichtig sind, habe ich mir gedacht......das muss anders gehen.

Heute hatte ich eine Bastel Nachtschicht eingelegt. In meiner Bastelkramschublade lagen noch zig Nodemcu, oder Wemos D1 mini.
Mein Ziel "Virtuelle dimmbare Lampen" über Alexasuche anlegen zu lassen und mit den gesprochenen Werten Lampen zu dimmen, oder Heizungen einzustellen.
Die Nacht ist vorbei und der erste Erfolg ist zu verzeichnen. Ich habe nun eine virtuelle Wohnzimmerheizung in Alexa und wenn ich sage "Alexa Wohnzimmerheizung auf 20 Grad" wird ein HM-CC-RT-DN Thermostat im Wohnzimmer auf 20 Grad eingestellt.
In dem Sketch für Wemos D1 können mehrere Alexa Devices hinterlegt werden- ich nenn es jetzt mal eine Alexa- Bridge für virtuelle Devices. Und dies für ganz kleines Geld. In Deutschland etwas teurer, beim netten Chinesen wesentlich günstiger. Hab direkt noch einmal welche geordert.

Jetzt geht es an die Feinheiten, Optimierungen, Tests.
:shock: :D

Wenn die Test´s erfolgreich sind und Interesse besteht kann ich ja mal den Sketch zur Verfügung stellen.
Wenn etwas schiefgehen kann, dann geht es schief (Murphy)

mule
Beiträge: 1168
Registriert: 06.07.2010, 00:24
Hat sich bedankt: 3 Mal
Danksagung erhalten: 35 Mal

Re: Virtuelle Lampen/Dimmer für Alexa......

Beitrag von mule » 27.09.2022, 12:01

Hallo rr745,

finde ich eine super Idee. Ich nutze bisher HA-Bridge und steuere darüber Homematic an. Da HA-Bridge aber nur eine Hue-Bridge emuliert und zudem kaum mehr weiterentwickelt wird, ist das Ganze ziemlich eingeschränkt und eigentlich nur für Lampen ausgelegt.
Daher suche ich nach einem Ersatz für HA-Bridge und da klingt Dein Projekt echt spannend. Einige Wemos&Co. habe ich auch noch rumliegen.
Bin daher schon sehr gespannt auf Deinen Sketch.
Aktuelle Projekte:
Direkter SMS-Versand und -Empfang über CCU2&Raspberrymatic ohne Cloud:
viewtopic.php?f=31&t=39483

Automower (G2) steuern über Homematic per WLAN:
viewtopic.php?f=31&t=7295

rr745
Beiträge: 305
Registriert: 19.01.2021, 14:53
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 34 Mal

Re: Virtuelle Lampen/Dimmer für Alexa......

Beitrag von rr745 » 27.09.2022, 16:33

mule hat geschrieben:
27.09.2022, 12:01
Hallo rr745,

finde ich eine super Idee. Ich nutze bisher HA-Bridge und steuere darüber Homematic an. Da HA-Bridge aber nur eine Hue-Bridge emuliert und zudem kaum mehr weiterentwickelt wird, ist das Ganze ziemlich eingeschränkt und eigentlich nur für Lampen ausgelegt.
Daher suche ich nach einem Ersatz für HA-Bridge und da klingt Dein Projekt echt spannend. Einige Wemos&Co. habe ich auch noch rumliegen.
Bin daher schon sehr gespannt auf Deinen Sketch.
Hallo,
dann bist du ja ein "gebranntes kind", was ha-bridge angeht. hatte ich auch länger benutzt, jedoch habe ich mich perm. darüber geärgert, das oft nach einem systemneustart alexa der meinung war die geräte seien offline, stünden nicht zur verfügung, oder sonst was.
hab heut noch ein wenig herumgespielt un bin begeistert. alle heizungen und dimmer funzen. hab gerade auch noch getestet ob der wemos nachdem der router neugestartet wurde einen reconnect macht, raspberrymatic, nebst redmatic neustart....und siehe da alles gut.

hab mal die benötigten dateien angehängt. mein sketch "zehn_alexa_devices.ino" befindet sich in \Espalexa-main\examples\EspalexaBasic
ich hab es mal so gebastelt für 10 Alexa Devices. Für mich erstmal ausreichend.

kannst du dir ja mal ansehen, dich durchwühlen und testen.
Zuletzt geändert von rr745 am 01.12.2022, 04:33, insgesamt 1-mal geändert.
Wenn etwas schiefgehen kann, dann geht es schief (Murphy)

mule
Beiträge: 1168
Registriert: 06.07.2010, 00:24
Hat sich bedankt: 3 Mal
Danksagung erhalten: 35 Mal

Re: Virtuelle Lampen/Dimmer für Alexa......

Beitrag von mule » 27.09.2022, 17:04

Danke! Habe gerade mal drüber geschaut: Ist ja recht einfach umzusetzen. ESPAlexa war mir bisher gar nicht bekannt. Mal näher anschauen.
Aktuelle Projekte:
Direkter SMS-Versand und -Empfang über CCU2&Raspberrymatic ohne Cloud:
viewtopic.php?f=31&t=39483

Automower (G2) steuern über Homematic per WLAN:
viewtopic.php?f=31&t=7295

rr745
Beiträge: 305
Registriert: 19.01.2021, 14:53
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 34 Mal

Re: Virtuelle Lampen/Dimmer für Alexa......

Beitrag von rr745 » 03.11.2022, 11:29

hab den sketch mal angepasst, da- wenn wlan mal weg war (neustart des routers z. b.) dies nicht richtig erkannt wurde. hab da mal was eingebaut
was permanent überprüft ob das wlan erreichbar, wenn nicht wird ein reboot durchgeführt um ein reconnect zu erzwingen. das teil rebootet solange
bis wlan wieder erreichbar ist.


Code: Alles auswählen

#ifdef ARDUINO_ARCH_ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include <Espalexa.h>

/////wird benötigt fur reconnect wenn wifi unterbrochen //////////
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
boolean connectioWasAlive = true;
////////////////////////////////////////////////////////////////

boolean connectWifi();

//callback functions
void firstLightChanged(uint8_t brightness);
void secondLightChanged(uint8_t brightness);
void thirdLightChanged(uint8_t brightness);
void fourthLightChanged(uint8_t brightness);
void fifthLightChanged(uint8_t brightness);
void sixthLightChanged(uint8_t brightness);
void seventhLightChanged(uint8_t brightness);
void eighthLightChanged(uint8_t brightness);
void ninthLightChanged(uint8_t brightness);
void tenthLightChanged(uint8_t brightness);


// Anpassen !!!!!!
const char* ssid = "SSID";
const char* password = "Password";

//////////  unten WIFI Hostnamen ändern z. B Esp8266_Alexa /////////////////
const char* CCU = "xxx.xxx.xxx.xxx";

boolean wifiConnected = false;

Espalexa espalexa;

EspalexaDevice* device3; //Optional

void setup()
{
  Serial.begin(115200);
  // Initialise wifi connection
  wifiConnected = connectWifi();
   
  if(wifiConnected){
    
    espalexa.addDevice("Badezimmerheizung", firstLightChanged, 255); //simplest definition, default state off
    espalexa.addDevice("Küchenheizung", secondLightChanged, 255); //third parameter is beginning state (here fully on)
    espalexa.addDevice("Schlafzimmerheizung", thirdLightChanged, 255); //third parameter is beginning state (here fully on)
    espalexa.addDevice("Wohnzimmerheizung", fourthLightChanged, 255); //simplest definition, default state off
    espalexa.addDevice("Markise",fifthLightChanged, 255); //third parameter is beginning state (here fully on)
    espalexa.addDevice("Stehlampe", sixthLightChanged, 255); //third parameter is beginning state (here fully on)
    espalexa.addDevice("Eta", seventhLightChanged, 255); //simplest definition, default state off
    espalexa.addDevice("Theta", eighthLightChanged, 255); //third parameter is beginning state (here fully on)
    espalexa.addDevice("Jota", ninthLightChanged, 255); //third parameter is beginning state (here fully on)
    espalexa.addDevice("Kappa", tenthLightChanged, 255); //third parameter is beginning state (here fully on) 

    espalexa.begin();
    
  } else
  {
    while (1) {
      Serial.println("Cannot connect to WiFi. Please check data and reset the ESP.");
      delay(2500);
/////wird benötigt fur reconnect wenn wifi unterbrochen //////////
      ESP.restart();
//////////////////////////////////////////////////////////////////
    }
  }
}

///// wird benötigt fur reconnect wenn wifi unterbrochen //////////
void monitorWiFi()
{
  if (wifiMulti.run() != WL_CONNECTED)
  {
    if (connectioWasAlive == true)
    {
      connectioWasAlive = false;
      Serial.print("Looking for WiFi ");
    }
    Serial.print(".");
    delay(500);
    ESP.restart();
  }
  else if (connectioWasAlive == false)
  {
    connectioWasAlive = true;
    Serial.printf(" connected to %s\n", WiFi.SSID().c_str());
  }
}
///////////////////////////////////////////////////////////////////
 
void loop()
{
   espalexa.loop();
/////wird benötigt fur reconnect wenn wifi unterbrochen //////////
    monitorWiFi();
//////////////////////////////////////////////////////////////////
   delay(1);
}

/////////////////hier beginnt der Block für das erste Device  ///////////////////////////

void firstLightChanged(uint8_t brightness) {
    Serial.print("Device 1 changed to ");    
    //Beispiel Badezimmergeizung für Alexa
    if (brightness) {
      Serial.print("ON, brightness ");
      Serial.println(brightness);
 WiFiClient client;
 const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
    if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");
    return;
  } 
    client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35302&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
   } 
    else  {
     WiFiClient client;
 const int httpPort_CCU = 80;
   if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");}
     client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35302&new_value=4.5")  + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
    }
}  
/////////////////hier endet der Block für das erste Device  ///////////////////////////


/////////////////hier beginnt der Block für das zweite Device  ///////////////////////////
void secondLightChanged(uint8_t brightness) {
    Serial.print("Device 2 changed to ");    
    //Beispiel Kuechenheizung für Alexa
    if (brightness) {
      Serial.print("ON, brightness ");
      Serial.println(brightness);
// ab hier eingetragen
WiFiClient client;
 const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
    if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");
    return;
  } 
    client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=37682&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
     
    } 
    else  {
     WiFiClient client;
 const int httpPort_CCU = 80;
   if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");}
     client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=37682&new_value=4.5")  + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
    }
} 
/////////////////hier endet der Block für das zweite Device  ///////////////////////////

/////////////////hier beginnt der Block für das dritte Device  ///////////////////////////
void thirdLightChanged(uint8_t brightness) {
    Serial.print("Device 3 changed to ");
    //Beispiel Schlafzimmerheizung für Alexa
    if (brightness) {
      Serial.print("ON, brightness ");
      Serial.println(brightness);
WiFiClient client;
 const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
    if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");
    return;
  } 
    client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35381&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
    } 
    else  {
     WiFiClient client;
 const int httpPort_CCU = 80;
   if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");}
     client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35381&new_value=4.5")  + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
      }
} 
/////////////////hier endet der Block für das dritte Device  ///////////////////////////

/////////////////hier beginnt der Block für das vierte Device  ///////////////////////////
void fourthLightChanged(uint8_t brightness) {
    Serial.print("Device 4 changed to ");
    //Beispiel Wohnzimmerheizung für Alexa
    if (brightness) {
      Serial.print("ON, brightness ");
      Serial.println(brightness);
WiFiClient client;
 const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
    if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");
    return;
  } 
    client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
    } 
    else  {
     WiFiClient client;
 const int httpPort_CCU = 80;
   if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");}
     client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=4.5")  + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
       
    }
} 

/////////////////hier endet der Block für das vierte Device  ///////////////////////////

/////////////////hier beginnt der Block für das fünfte Device  ///////////////////////////
void  fifthLightChanged (uint8_t brightness) {
    Serial.print("Device 5 changed to ");
    //Beispiel Markise für Alexa
    if (brightness) {
      Serial.print("ON, brightness ");
      Serial.println(brightness);
WiFiClient client;
 const int httpPort_CCU = 80;
float Helligkeitswert = (brightness) * 100 / 255 *0.01 ;
    if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");
    return;
  } 
  Serial.println(Helligkeitswert);
    client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=13889&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
    } 
    else  {
     WiFiClient client;
 const int httpPort_CCU = 80;
 float Helligkeitswert = (brightness) * 100 / 255 *0.01 ;
   if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");}
    Serial.println(Helligkeitswert);
    client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=13889&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
       
    }
} 

/////////////////hier endet der Block für das fünfte Device  ///////////////////////////

/////////////////hier beginnt der Block für das sechste Device  ///////////////////////////
void sixthLightChanged(uint8_t brightness) {
    Serial.print("Device 6 changed to ");
    //Beispiel Stehlampe für Alexa
    if (brightness) {
      Serial.print("ON, brightness ");
      Serial.println(brightness);
// ab hier eingetragen
WiFiClient client;
 const int httpPort_CCU = 80;
float Helligkeitswert = (brightness) * 100 / 255 *0.01 ;
    if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");
    return;
  } 
   Serial.println(Helligkeitswert);
   client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=37968&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
    } 
    else  {
     WiFiClient client;
 const int httpPort_CCU = 80;
float Helligkeitswert = (brightness) * 100 / 255 * 0.01 ;
    if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");}
     Serial.println(Helligkeitswert);
     client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=37968&new_value=")   + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
       
    }
} 
/////////////////hier endet der Block für das sechste Device  ///////////////////////////

/////////////////hier beginnt der Block für das siebte Device  ///////////////////////////
void seventhLightChanged(uint8_t brightness) {
    Serial.print("Device 7 changed to ");
    //Beispiel Wohnzimmergeizung für Alexa
    if (brightness) {
      Serial.print("ON, brightness ");
      Serial.println(brightness);
WiFiClient client;
 const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
    if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");
    return;
  } 
    client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
    } 
    else  {
     WiFiClient client;
 const int httpPort_CCU = 80;
   if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");}
     client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=4.5")  + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
    }
} 
/////////////////hier endet der Block für das siebte Device  ///////////////////////////

/////////////////hier beginnt der Block für das achte Device  ///////////////////////////
void eighthLightChanged(uint8_t brightness) {
    Serial.print("Device 8 changed to ");
    //Beispiel Wohnzimmergeizung für Alexa
    if (brightness) {
      Serial.print("ON, brightness ");
      Serial.println(brightness);
WiFiClient client;
 const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
    if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");
    return;
  } 
    client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
    } 
    else  {
     WiFiClient client;
 const int httpPort_CCU = 80;
   if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");}
     client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=4.5")  + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
    }
} 
/////////////////hier endet der Block für das chte Device  ///////////////////////////

/////////////////hier beginnt der Block für das neunte Device  ///////////////////////////
void ninthLightChanged(uint8_t brightness) {
    Serial.print("Device 9 changed to ");
    //Beispiel Wohnzimmergeizung für Alexa
    if (brightness) {
      Serial.print("ON, brightness ");
      Serial.println(brightness);
WiFiClient client;
 const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
    if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");
    return;
  } 
    client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
    } 
    else  {
     WiFiClient client;
 const int httpPort_CCU = 80;
   if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");}
     client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=4.5")  + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
    }
} 
/////////////////hier endet der Block für das neunte Device  ///////////////////////////

/////////////////hier beginnt der Block für das zehnte Device  ///////////////////////////
void tenthLightChanged(uint8_t brightness) {
    Serial.print("Device 10 changed to ");
    //Beispiel Wohnzimmergeizung für Alexa
    if (brightness) {
      Serial.print("ON, brightness ");
      Serial.println(brightness);
WiFiClient client;
 const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
    if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");
    return;
  } 
    client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
    } 
    else  {
     WiFiClient client;
 const int httpPort_CCU = 80;
   if (!client.connect(CCU, httpPort_CCU)) {
    Serial.println("connection failed");}
     client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=4.5")  + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n"); 
     }
} 
/////////////////hier endet der Block für das zehnte Device  ///////////////////////////  zum hinzufügen einfach einen Block anhängen und Bezeichnungen anpassen

// connect to wifi – returns true if successful or false if not
boolean connectWifi(){
  boolean state = true;
  int i = 0;
  
  WiFi.mode(WIFI_STA);
  WiFi.hostname("Esp8266_Alexa");
  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 > 20){
      state = false; break;
    }
    i++;
  }
  Serial.println("");
  if (state){
    Serial.print("Connected to ");
    Serial.println(ssid);
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
  }
  else {
    Serial.println("Connection failed.");
  }
  return state;
}
Zuletzt geändert von Roland M. am 04.11.2022, 17:13, insgesamt 1-mal geändert.
Grund: Code-Tags eingefügt
Wenn etwas schiefgehen kann, dann geht es schief (Murphy)

rr745
Beiträge: 305
Registriert: 19.01.2021, 14:53
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 34 Mal

Re: update_Virtuelle Lampen/Dimmer für Alexa......

Beitrag von rr745 » 17.11.2022, 11:29

habe gerade noch ein wenig damit experimentiert.
das teil emuliert tatsächlich eine hue bridge.
ich nutze eine logitech harmony fernbedienung mit hub. dieses teil erkennt den wemos als hue bridge und die darin konfigurierten "Lampen"

darin habe ich z. B. meine Wohnzimmerrolläden auf eine der Haussteuerungstaste gelegt. Auch andere Smarthomedevices lassen sich somit via Logitech Fernbedienung steuern. :P



#ifdef ARDUINO_ARCH_ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include <Espalexa.h>

/////wird benötigt fur reconnect wenn wifi unterbrochen //////////
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
boolean connectioWasAlive = true;
////////////////////////////////////////////////////////////////

boolean connectWifi();

//callback functions
void firstLightChanged(uint8_t brightness);
void secondLightChanged(uint8_t brightness);
void thirdLightChanged(uint8_t brightness);
void fourthLightChanged(uint8_t brightness);
void fifthLightChanged(uint8_t brightness);
void sixthLightChanged(uint8_t brightness);
void seventhLightChanged(uint8_t brightness);
void eighthLightChanged(uint8_t brightness);
void ninthLightChanged(uint8_t brightness);
void tenthLightChanged(uint8_t brightness);


// Anpassen !!!!!!
const char* ssid = "SSID";
const char* password = "Passwort";

////////// unten WIFI Hostnamen ändern ////////7////////
const char* CCU = "xxx.xxx.xxx.xxx";

boolean wifiConnected = false;

Espalexa espalexa;

EspalexaDevice* device3; //Optional

void setup()
{
Serial.begin(115200);
// Initialise wifi connection
wifiConnected = connectWifi();

if(wifiConnected){

// Define your devices here. Hier den Alexanamen des Gerätes angeben
espalexa.addDevice("Badezimmerheizung", firstLightChanged, 255); //simplest definition, default state off
espalexa.addDevice("Küchenheizung", secondLightChanged, 255); //third parameter is beginning state (here fully on)
espalexa.addDevice("Schlafzimmerheizung", thirdLightChanged, 255); //third parameter is beginning state (here fully on)
espalexa.addDevice("Wohnzimmerheizung", fourthLightChanged, 255); //simplest definition, default state off
espalexa.addDevice("Markise",fifthLightChanged, 255); //third parameter is beginning state (here fully on)
espalexa.addDevice("Stehlampe", sixthLightChanged, 255); //third parameter is beginning state (here fully on)
espalexa.addDevice("Beschattung_WZ_lks_Hue", seventhLightChanged, 255); //simplest definition, default state off
espalexa.addDevice("Ambiente_HUE_ALEXA", eighthLightChanged, 255); //third parameter is beginning state (here fully on)
espalexa.addDevice("Jota", ninthLightChanged, 255); //third parameter is beginning state (here fully on)
espalexa.addDevice("Kappa", tenthLightChanged, 255); //third parameter is beginning state (here fully on)

espalexa.begin();


while (1) {
Serial.println("Cannot connect to WiFi. Please check data and reset the ESP.");
delay(2500);
/////wird benötigt fur reconnect wenn wifi unterbrochen //////////
ESP.restart();
//////////////////////////////////////////////////////////////////
}
}
}

///// wird benötigt fur reconnect wenn wifi unterbrochen //////////
void monitorWiFi()
{
if (wifiMulti.run() != WL_CONNECTED)
{
if (connectioWasAlive == true)
{
connectioWasAlive = false;
Serial.print("Looking for WiFi ");
}
Serial.print(".");
delay(500);
ESP.restart();
}
else if (connectioWasAlive == false)
{
connectioWasAlive = true;
Serial.printf(" connected to %s\n", WiFi.SSID().c_str());
}
}
///////////////////////////////////////////////////////////////////

void loop()
{
espalexa.loop();
/////wird benötigt fur reconnect wenn wifi unterbrochen //////////
monitorWiFi();
//////////////////////////////////////////////////////////////////
delay(1);
}

/////////////////hier beginnt der Block für das erste Device ///////////////////////////

void firstLightChanged(uint8_t brightness) {
Serial.print("Device 1 changed to ");
//Beispiel Badezimmergeizung für Alexa
if (brightness) {
Serial.print("ON, brightness ");
Serial.println(brightness);
WiFiClient client;
const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");
return;
}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35302&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
else {
WiFiClient client;
const int httpPort_CCU = 80;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35302&new_value=4.5") + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
}
/////////////////hier endet der Block für das erste Device ///////////////////////////


/////////////////hier beginnt der Block für das zweite Device ///////////////////////////
void secondLightChanged(uint8_t brightness) {
Serial.print("Device 2 changed to ");
//Beispiel Kuechenheizung für Alexa
if (brightness) {
Serial.print("ON, brightness ");
Serial.println(brightness);
// ab hier eingetragen
WiFiClient client;
const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");
return;
}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=37682&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");

}
else {
WiFiClient client;
const int httpPort_CCU = 80;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=37682&new_value=4.5") + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
}
/////////////////hier endet der Block für das zweite Device ///////////////////////////

/////////////////hier beginnt der Block für das dritte Device ///////////////////////////
void thirdLightChanged(uint8_t brightness) {
Serial.print("Device 3 changed to ");
//Beispiel Schlafzimmerheizung für Alexa
if (brightness) {
Serial.print("ON, brightness ");
Serial.println(brightness);
WiFiClient client;
const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");
return;
}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35381&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
else {
WiFiClient client;
const int httpPort_CCU = 80;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35381&new_value=4.5") + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
}
/////////////////hier endet der Block für das dritte Device ///////////////////////////

/////////////////hier beginnt der Block für das vierte Device ///////////////////////////
void fourthLightChanged(uint8_t brightness) {
Serial.print("Device 4 changed to ");
//Beispiel Wohnzimmerheizung für Alexa
if (brightness) {
Serial.print("ON, brightness ");
Serial.println(brightness);
WiFiClient client;
const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");
return;
}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
else {
WiFiClient client;
const int httpPort_CCU = 80;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=4.5") + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");

}
}

/////////////////hier endet der Block für das vierte Device ///////////////////////////

/////////////////hier beginnt der Block für das fünfte Device ///////////////////////////
void fifthLightChanged (uint8_t brightness) {
Serial.print("Device 5 changed to ");
//Beispiel Markise für Alexa
if (brightness) {
Serial.print("ON, brightness ");
Serial.println(brightness);
WiFiClient client;
const int httpPort_CCU = 80;
float Helligkeitswert = (brightness) * 100 / 255 *0.01 ;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");
return;
}
Serial.println(Helligkeitswert);
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=13889&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
else {
WiFiClient client;
const int httpPort_CCU = 80;
float Helligkeitswert = (brightness) * 100 / 255 *0.01 ;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");}
Serial.println(Helligkeitswert);
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=13889&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");

}
}

/////////////////hier endet der Block für das fünfte Device ///////////////////////////

/////////////////hier beginnt der Block für das sechste Device ///////////////////////////
void sixthLightChanged(uint8_t brightness) {
Serial.print("Device 6 changed to ");
//Beispiel Stehlampe für Alexa
if (brightness) {
Serial.print("ON, brightness ");
Serial.println(brightness);
// ab hier eingetragen
WiFiClient client;
const int httpPort_CCU = 80;
float Helligkeitswert = (brightness) * 100 / 255 *0.01 ;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");
return;
}
Serial.println(Helligkeitswert);
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=37968&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
else {
WiFiClient client;
const int httpPort_CCU = 80;
float Helligkeitswert = (brightness) * 100 / 255 * 0.01 ;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");}
Serial.println(Helligkeitswert);
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=37968&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");

}
}
/////////////////hier endet der Block für das sechste Device ///////////////////////////

/////////////////hier beginnt der Block für das siebte Device ///////////////////////////
void seventhLightChanged(uint8_t brightness) {
Serial.print("Device 7 changed to ");
//Beschattung_WZ_lks_Hue
if (brightness) {
Serial.print("ON, brightness ");
Serial.println(brightness);
WiFiClient client;
const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");
return;
}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35893&new_value=1") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
else {
WiFiClient client;
const int httpPort_CCU = 80;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35893&new_value=0") + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
}
/////////////////hier endet der Block für das siebte Device ///////////////////////////

/////////////////hier beginnt der Block für das achte Device ///////////////////////////
void eighthLightChanged(uint8_t brightness) {
Serial.print("Device 8 changed to ");
//Ambiente_HUE_ALEXA
if (brightness) {
Serial.print("ON, brightness ");
Serial.println(brightness);
WiFiClient client;
const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");
return;
}

client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=18509&new_value=1") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
else {
WiFiClient client;
const int httpPort_CCU = 80;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=18509&new_value=0") + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
}
/////////////////hier endet der Block für das chte Device ///////////////////////////

/////////////////hier beginnt der Block für das neunte Device ///////////////////////////
void ninthLightChanged(uint8_t brightness) {
Serial.print("Device 9 changed to ");
//Beispiel Wohnzimmergeizung für Alexa
if (brightness) {
Serial.print("ON, brightness ");
Serial.println(brightness);
WiFiClient client;
const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");
return;
}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
else {
WiFiClient client;
const int httpPort_CCU = 80;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=4.5") + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
}
/////////////////hier endet der Block für das neunte Device ///////////////////////////

/////////////////hier beginnt der Block für das zehnte Device ///////////////////////////
void tenthLightChanged(uint8_t brightness) {
Serial.print("Device 10 changed to ");
//Beispiel Wohnzimmergeizung für Alexa
if (brightness) {
Serial.print("ON, brightness ");
Serial.println(brightness);
WiFiClient client;
const int httpPort_CCU = 80;
int Helligkeitswert = (brightness) * 100 / 255;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");
return;
}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=") + Helligkeitswert + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
else {
WiFiClient client;
const int httpPort_CCU = 80;
if (!client.connect(CCU, httpPort_CCU)) {
Serial.println("connection failed");}
client.print(String("GET /config/xmlapi/statechange.cgi?ise_id=35144&new_value=4.5") + " HTTP/1.1\r\n" + "Host: " + CCU + "\r\n" "Connection: close\r\n\r\n");
}
}
/////////////////hier endet der Block für das zehnte Device /////////////////////////// zum hinzufügen einfach einen Block anhängen und Bezeichnungen anpassen

// connect to wifi – returns true if successful or false if not
boolean connectWifi(){
boolean state = true;
int i = 0;

WiFi.mode(WIFI_STA);
WiFi.hostname("Esp8266_Alexa");
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 > 20){
state = false; break;
}
i++;
}
Serial.println("");
if (state){
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
else {
Serial.println("Connection failed.");
}
return state;
}
Wenn etwas schiefgehen kann, dann geht es schief (Murphy)

Antworten

Zurück zu „Projektvorstellungen“