|
|
@ -9,17 +9,18 @@ Copyright (C) 2016-2018 by Xose Pérez <xose dot perez at gmail dot com> |
|
|
|
#if ALEXA_SUPPORT
|
|
|
|
|
|
|
|
#include <fauxmoESP.h>
|
|
|
|
#include <map>
|
|
|
|
#include <queue>
|
|
|
|
fauxmoESP alexa; |
|
|
|
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
// ALEXA
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
struct alexa_dev { |
|
|
|
bool _alexa_change = false; |
|
|
|
bool _alexa_state = false; |
|
|
|
struct AlexaDevChange { |
|
|
|
AlexaDevChange(unsigned char device_id, bool state) : device_id(device_id), state(state) {}; |
|
|
|
unsigned char device_id = 0; |
|
|
|
bool state = false; |
|
|
|
}; |
|
|
|
std::map<unsigned char, alexa_dev> alexa_devices; |
|
|
|
static std::queue<AlexaDevChange> _alexa_dev_changes; |
|
|
|
|
|
|
|
void _alexaWebSocketOnSend(JsonObject& root) { |
|
|
|
root["alexaVisible"] = 1; |
|
|
@ -59,8 +60,8 @@ void alexaSetup() { |
|
|
|
} |
|
|
|
|
|
|
|
alexa.onSetState([&](unsigned char device_id, const char * name, bool state) { |
|
|
|
alexa_devices[device_id]._alexa_change = true; |
|
|
|
alexa_devices[device_id]._alexa_state = state; |
|
|
|
AlexaDevChange change(device_id, state); |
|
|
|
_alexa_dev_changes.push(change); |
|
|
|
}); |
|
|
|
|
|
|
|
alexa.onGetState([relays](unsigned char device_id, const char * name) { |
|
|
@ -73,14 +74,12 @@ void alexaLoop() { |
|
|
|
|
|
|
|
alexa.handle(); |
|
|
|
|
|
|
|
for (std::map<unsigned char, alexa_dev>::iterator it=alexa_devices.begin(); it!=alexa_devices.end(); ++it) { |
|
|
|
if (it->second._alexa_change) { |
|
|
|
DEBUG_MSG_P(PSTR("[ALEXA] Device #%d state: %s\n"), it->first, it->second._alexa_state ? "ON" : "OFF"); |
|
|
|
it->second._alexa_change = false; |
|
|
|
relayStatus(it->first, it->second._alexa_state); |
|
|
|
} |
|
|
|
while (!_alexa_dev_changes.empty()) { |
|
|
|
AlexaDevChange& change = _alexa_dev_changes.front(); |
|
|
|
DEBUG_MSG_P(PSTR("[ALEXA] Device #%d state: %s\n"), change.device_id, change.state ? "ON" : "OFF"); |
|
|
|
relayStatus(change.device_id, change.state); |
|
|
|
_alexa_dev_changes.pop(); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#endif
|