WLED/wled00/wled12_alexa.ino

83 wiersze
1.8 KiB
Arduino
Czysty Zwykły widok Historia

/*
* Alexa Voice On/Off/Brightness Control. Emulates a Philips Hue bridge to Alexa.
*
* This was put together from these two excellent projects:
* https://github.com/kakopappa/arduino-esp8266-alexa-wemo-switch
* https://github.com/probonopd/ESP8266HueEmulator
*/
void prepareIds() {
escapedMac = WiFi.macAddress();
escapedMac.replace(":", "");
escapedMac.toLowerCase();
}
#ifndef WLED_DISABLE_ALEXA
2019-03-01 16:10:42 +00:00
void onAlexaChange(EspalexaDevice* dev);
2019-01-09 21:52:42 +00:00
2017-02-21 22:59:47 +00:00
void alexaInit()
{
if (alexaEnabled && WiFi.status() == WL_CONNECTED)
{
2019-01-09 21:52:42 +00:00
if (espalexaDevice == nullptr) //only init once
{
2019-03-01 16:10:42 +00:00
espalexaDevice = new EspalexaDevice(alexaInvocationName, onAlexaChange, EspalexaDeviceType::extendedcolor);
2019-01-09 21:52:42 +00:00
espalexa.addDevice(espalexaDevice);
espalexa.begin(&server);
} else {
espalexaDevice->setName(alexaInvocationName);
}
2017-02-21 22:59:47 +00:00
}
}
2019-01-09 21:52:42 +00:00
void handleAlexa()
2017-02-21 22:59:47 +00:00
{
2019-01-09 21:52:42 +00:00
if (!alexaEnabled || WiFi.status() != WL_CONNECTED) return;
espalexa.loop();
2017-02-21 22:59:47 +00:00
}
2019-03-01 16:10:42 +00:00
void onAlexaChange(EspalexaDevice* dev)
{
2019-03-01 16:10:42 +00:00
EspalexaDeviceProperty m = espalexaDevice->getLastChangedProperty();
2019-03-01 16:10:42 +00:00
if (m == EspalexaDeviceProperty::on)
{
2019-01-09 21:52:42 +00:00
if (!macroAlexaOn)
{
if (bri == 0)
{
bri = briLast;
colorUpdated(10);
}
} else applyMacro(macroAlexaOn);
2019-03-01 16:10:42 +00:00
} else if (m == EspalexaDeviceProperty::off)
{
2019-01-09 21:52:42 +00:00
if (!macroAlexaOff)
{
if (bri > 0)
{
briLast = bri;
bri = 0;
colorUpdated(10);
}
} else applyMacro(macroAlexaOff);
2019-03-01 16:10:42 +00:00
} else if (m == EspalexaDeviceProperty::bri)
{
2019-03-01 16:10:42 +00:00
bri = espalexaDevice->getValue();
2019-01-09 21:52:42 +00:00
colorUpdated(10);
} else //color
{
2019-03-01 16:10:42 +00:00
uint32_t color = espalexaDevice->getRGB();
2019-01-09 21:52:42 +00:00
col[0] = ((color >> 16) & 0xFF);
col[1] = ((color >> 8) & 0xFF);
col[2] = (color & 0xFF);
if (useRGBW) colorRGBtoRGBW(col);
2019-01-09 21:52:42 +00:00
colorUpdated(10);
}
}
#else
void alexaInit(){}
void handleAlexa(){}
#endif