From 420909fb207ee29fa6577c30bca2c56132d9ea08 Mon Sep 17 00:00:00 2001 From: debsahu Date: Sat, 14 Apr 2018 19:19:44 -0400 Subject: [PATCH] legacy animations optional * Added Legacy animations as an option * Removed ALL mode, replaced with ws2812fx_mode = FX_MODE_STATIC; mode = SET_MODE; * When mode == SET_MODE, set speed, color, etc automatically, needs a new MODE prevMode --- Arduino/McLighting/McLighting.ino | 380 +++++++++++++------------- Arduino/McLighting/definitions.h | 17 +- Arduino/McLighting/request_handlers.h | 263 ++++++++++-------- 3 files changed, 350 insertions(+), 310 deletions(-) diff --git a/Arduino/McLighting/McLighting.ino b/Arduino/McLighting/McLighting.ino index 517f1b6..7546b40 100644 --- a/Arduino/McLighting/McLighting.ino +++ b/Arduino/McLighting/McLighting.ino @@ -26,14 +26,14 @@ //SPIFFS Save #if !defined(ENABLE_HOMEASSISTANT) and defined(ENABLE_STATE_SAVE_SPIFFS) - #include // + #include //https://github.com/bblanchon/ArduinoJson #endif // MQTT #ifdef ENABLE_MQTT #include #ifdef ENABLE_HOMEASSISTANT - #include + #include //https://github.com/bblanchon/ArduinoJson #endif WiFiClient espClient; @@ -220,7 +220,9 @@ void saveConfigCallback () { // *************************************************************************** // Include: Color modes // *************************************************************************** -#include "colormodes.h" +#ifdef ENABLE_LEGACY_ANIMATIONS + #include "colormodes.h" +#endif // *************************************************************************** // MAIN @@ -599,7 +601,9 @@ void setup() { }); server.on("/off", []() { - exit_func = true; + #ifdef ENABLE_LEGACY_ANIMATIONS + exit_func = true; + #endif mode = OFF; getArgs(); getStatusJSON(); @@ -618,8 +622,12 @@ void setup() { }); server.on("/all", []() { - exit_func = true; - mode = ALL; + #ifdef ENABLE_LEGACY_ANIMATIONS + exit_func = true; + #endif + ws2812fx_mode = FX_MODE_STATIC; + mode = SET_MODE; + //mode = ALL; getArgs(); getStatusJSON(); #ifdef ENABLE_MQTT @@ -636,138 +644,140 @@ void setup() { #endif }); - server.on("/wipe", []() { - exit_func = true; - mode = WIPE; - getArgs(); - getStatusJSON(); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =wipe").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =wipe").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - }); - - server.on("/rainbow", []() { - exit_func = true; - mode = RAINBOW; - getArgs(); - getStatusJSON(); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =rainbow").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =rainbow").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - }); - - server.on("/rainbowCycle", []() { - exit_func = true; - mode = RAINBOWCYCLE; - getArgs(); - getStatusJSON(); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =rainbowCycle").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =rainbowCycle").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - }); - - server.on("/theaterchase", []() { - exit_func = true; - mode = THEATERCHASE; - getArgs(); - getStatusJSON(); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =theaterchase").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =theaterchase").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - }); - - server.on("/twinkleRandom", []() { - exit_func = true; - mode = TWINKLERANDOM; - getArgs(); - getStatusJSON(); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =twinkleRandom").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =twinkleRandom").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - }); + #ifdef ENABLE_LEGACY_ANIMATIONS + server.on("/wipe", []() { + exit_func = true; + mode = WIPE; + getArgs(); + getStatusJSON(); + #ifdef ENABLE_MQTT + mqtt_client.publish(mqtt_outtopic, String("OK =wipe").c_str()); + #endif + #ifdef ENABLE_AMQTT + amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =wipe").c_str()); + #endif + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + #ifdef ENABLE_STATE_SAVE_SPIFFS + if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); + #endif + }); - server.on("/theaterchaseRainbow", []() { - exit_func = true; - mode = THEATERCHASERAINBOW; - getArgs(); - getStatusJSON(); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =theaterchaseRainbow").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =theaterchaseRainbow").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - }); - - server.on("/tv", []() { - exit_func = true; - mode = TV; - getArgs(); - getStatusJSON(); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =tv").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =tv").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - }); + server.on("/rainbow", []() { + exit_func = true; + mode = RAINBOW; + getArgs(); + getStatusJSON(); + #ifdef ENABLE_MQTT + mqtt_client.publish(mqtt_outtopic, String("OK =rainbow").c_str()); + #endif + #ifdef ENABLE_AMQTT + amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =rainbow").c_str()); + #endif + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + #ifdef ENABLE_STATE_SAVE_SPIFFS + if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); + #endif + }); + + server.on("/rainbowCycle", []() { + exit_func = true; + mode = RAINBOWCYCLE; + getArgs(); + getStatusJSON(); + #ifdef ENABLE_MQTT + mqtt_client.publish(mqtt_outtopic, String("OK =rainbowCycle").c_str()); + #endif + #ifdef ENABLE_AMQTT + amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =rainbowCycle").c_str()); + #endif + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + #ifdef ENABLE_STATE_SAVE_SPIFFS + if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); + #endif + }); + + server.on("/theaterchase", []() { + exit_func = true; + mode = THEATERCHASE; + getArgs(); + getStatusJSON(); + #ifdef ENABLE_MQTT + mqtt_client.publish(mqtt_outtopic, String("OK =theaterchase").c_str()); + #endif + #ifdef ENABLE_AMQTT + amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =theaterchase").c_str()); + #endif + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + #ifdef ENABLE_STATE_SAVE_SPIFFS + if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); + #endif + }); + + server.on("/twinkleRandom", []() { + exit_func = true; + mode = TWINKLERANDOM; + getArgs(); + getStatusJSON(); + #ifdef ENABLE_MQTT + mqtt_client.publish(mqtt_outtopic, String("OK =twinkleRandom").c_str()); + #endif + #ifdef ENABLE_AMQTT + amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =twinkleRandom").c_str()); + #endif + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + #ifdef ENABLE_STATE_SAVE_SPIFFS + if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); + #endif + }); + + server.on("/theaterchaseRainbow", []() { + exit_func = true; + mode = THEATERCHASERAINBOW; + getArgs(); + getStatusJSON(); + #ifdef ENABLE_MQTT + mqtt_client.publish(mqtt_outtopic, String("OK =theaterchaseRainbow").c_str()); + #endif + #ifdef ENABLE_AMQTT + amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =theaterchaseRainbow").c_str()); + #endif + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + #ifdef ENABLE_STATE_SAVE_SPIFFS + if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); + #endif + }); + + server.on("/tv", []() { + exit_func = true; + mode = TV; + getArgs(); + getStatusJSON(); + #ifdef ENABLE_MQTT + mqtt_client.publish(mqtt_outtopic, String("OK =tv").c_str()); + #endif + #ifdef ENABLE_AMQTT + amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =tv").c_str()); + #endif + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + #ifdef ENABLE_STATE_SAVE_SPIFFS + if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); + #endif + }); + #endif server.on("/get_modes", []() { getModesJSON(); @@ -862,73 +872,77 @@ void loop() { // Simple statemachine that handles the different modes if (mode == SET_MODE) { DBG_OUTPUT_PORT.printf("SET_MODE: %d %d\n", ws2812fx_mode, mode); - strip.setColor(main_color.red, main_color.green, main_color.blue); strip.setMode(ws2812fx_mode); - mode = SETSPEED; + prevmode = SET_MODE; + mode = SETCOLOR; } if (mode == OFF) { -// strip.setColor(0,0,0); -// strip.setMode(FX_MODE_STATIC); if(strip.isRunning()) strip.stop(); //should clear memory // mode = HOLD; } - if (mode == ALL) { - strip.setColor(main_color.red, main_color.green, main_color.blue); - strip.setMode(FX_MODE_STATIC); - mode = HOLD; - } if (mode == SETCOLOR) { strip.setColor(main_color.red, main_color.green, main_color.blue); - mode = HOLD; + mode = (prevmode == SET_MODE) ? SETSPEED : HOLD; } if (mode == SETSPEED) { strip.setSpeed(convertSpeed(ws2812fx_speed)); - mode = BRIGHTNESS; + mode = (prevmode == SET_MODE) ? BRIGHTNESS : HOLD; } if (mode == BRIGHTNESS) { strip.setBrightness(brightness); + if (prevmode == SET_MODE) prevmode == HOLD; mode = HOLD; } - if (mode == WIPE) { - strip.setColor(main_color.red, main_color.green, main_color.blue); - strip.setMode(FX_MODE_COLOR_WIPE); - mode = HOLD; - } - if (mode == RAINBOW) { - strip.setMode(FX_MODE_RAINBOW); - mode = HOLD; - } - if (mode == RAINBOWCYCLE) { - strip.setMode(FX_MODE_RAINBOW_CYCLE); - mode = HOLD; - } - if (mode == THEATERCHASE) { - strip.setColor(main_color.red, main_color.green, main_color.blue); - strip.setMode(FX_MODE_THEATER_CHASE); - mode = HOLD; - } - if (mode == TWINKLERANDOM) { - strip.setColor(main_color.red, main_color.green, main_color.blue); - strip.setMode(FX_MODE_TWINKLE_RANDOM); - mode = HOLD; - } - if (mode == THEATERCHASERAINBOW) { - strip.setMode(FX_MODE_THEATER_CHASE_RAINBOW); - mode = HOLD; - } + #ifdef ENABLE_LEGACY_ANIMATIONS + if (mode == WIPE) { + strip.setColor(main_color.red, main_color.green, main_color.blue); + strip.setMode(FX_MODE_COLOR_WIPE); + mode = HOLD; + } + if (mode == RAINBOW) { + strip.setMode(FX_MODE_RAINBOW); + mode = HOLD; + } + if (mode == RAINBOWCYCLE) { + strip.setMode(FX_MODE_RAINBOW_CYCLE); + mode = HOLD; + } + if (mode == THEATERCHASE) { + strip.setColor(main_color.red, main_color.green, main_color.blue); + strip.setMode(FX_MODE_THEATER_CHASE); + mode = HOLD; + } + if (mode == TWINKLERANDOM) { + strip.setColor(main_color.red, main_color.green, main_color.blue); + strip.setMode(FX_MODE_TWINKLE_RANDOM); + mode = HOLD; + } + if (mode == THEATERCHASERAINBOW) { + strip.setMode(FX_MODE_THEATER_CHASE_RAINBOW); + mode = HOLD; + } + #endif if (mode == HOLD || mode == CUSTOM) { if(!strip.isRunning()) strip.start(); - if (exit_func) { - exit_func = false; + #ifdef ENABLE_LEGACY_ANIMATIONS + if (exit_func) { + exit_func = false; + } + #endif + } + #ifdef ENABLE_LEGACY_ANIMATIONS + if (mode == TV) { + if(!strip.isRunning()) strip.start(); + tv(); } - } - if (mode == TV) { - if(!strip.isRunning()) strip.start(); - tv(); - } + #endif // Only for modes with WS2812FX functionality + #ifdef ENABLE_LEGACY_ANIMATIONS if (mode != TV && mode != CUSTOM) { + #else + if (mode != CUSTOM) { + #endif strip.service(); } @@ -955,4 +969,4 @@ void loop() { EEPROM.commit(); } #endif -} +} \ No newline at end of file diff --git a/Arduino/McLighting/definitions.h b/Arduino/McLighting/definitions.h index 90e2044..1ba171c 100644 --- a/Arduino/McLighting/definitions.h +++ b/Arduino/McLighting/definitions.h @@ -16,7 +16,7 @@ const char HOSTNAME[] = "McLighting01"; // Friedly hostname #define ENABLE_HOMEASSISTANT // If defined, enable Homeassistant integration, ENABLE_MQTT must be active #define ENABLE_BUTTON // If defined, enable button handling code, see: https://github.com/toblum/McLighting/wiki/Button-control //#define MQTT_HOME_ASSISTANT_SUPPORT // If defined, use AMQTT and select Tools -> IwIP Variant -> Higher Bandwidth - +#define ENABLE_LEGACY_ANIMATIONS #if defined(USE_NEOANIMATIONFX) and defined(USE_WS2812FX) #error "Cant have both NeoAnimationFX and WS2812FX enabled. Choose either one." @@ -85,17 +85,22 @@ uint32_t autoParams[][4] = { // color, speed, mode, duration (seconds) #define DBG_OUTPUT_PORT Serial // Set debug output port // List of all color modes -enum MODE { SET_MODE, HOLD, OFF, ALL, SETCOLOR, SETSPEED, BRIGHTNESS, WIPE, RAINBOW, RAINBOWCYCLE, THEATERCHASE, TWINKLERANDOM, THEATERCHASERAINBOW, TV, CUSTOM }; +#ifdef ENABLE_LEGACY_ANIMATIONS + enum MODE { SET_MODE, HOLD, OFF, SETCOLOR, SETSPEED, BRIGHTNESS, WIPE, RAINBOW, RAINBOWCYCLE, THEATERCHASE, TWINKLERANDOM, THEATERCHASERAINBOW, TV, CUSTOM }; + MODE mode = RAINBOW; // Standard mode that is active when software starts + bool exit_func = false; // Global helper variable to get out of the color modes when mode changes +#else + enum MODE { SET_MODE, HOLD, OFF, SETCOLOR, SETSPEED, BRIGHTNESS, CUSTOM }; + MODE mode = SET_MODE; // Standard mode that is active when software starts +#endif -MODE mode = RAINBOW; // Standard mode that is active when software starts +MODE prevmode = mode; int ws2812fx_speed = 196; // Global variable for storing the delay between color changes --> smaller == faster int brightness = 196; // Global variable for storing the brightness (255 == 100%) int ws2812fx_mode = 0; // Helper variable to set WS2812FX modes -bool exit_func = false; // Global helper variable to get out of the color modes when mode changes - bool shouldSaveConfig = false; // For WiFiManger custom config struct ledstate // Data structure to store a state of a single led @@ -135,4 +140,4 @@ LEDState main_color = { 255, 0, 0 }; // Store the "main color" of the strip use byte KeyPressCount = 0; byte prevKeyState = HIGH; // button is active low boolean buttonState = false; -#endif +#endif \ No newline at end of file diff --git a/Arduino/McLighting/request_handlers.h b/Arduino/McLighting/request_handlers.h index 66e4332..3a3a7ec 100644 --- a/Arduino/McLighting/request_handlers.h +++ b/Arduino/McLighting/request_handlers.h @@ -33,11 +33,10 @@ void getArgs() { } if (server.arg("c").toInt() > 0) { - brightness = (int) server.arg("c").toInt() * 2.55; - } else { - brightness = server.arg("p").toInt(); + brightness = constrain((int) server.arg("c").toInt() * 2.55, 0, 255); + } else if (server.arg("p").toInt() > 0) { + brightness = constrain(server.arg("p").toInt(), 0, 255); } - brightness = constrain(brightness, 0, 255); main_color.red = constrain(main_color.red, 0, 255); main_color.green = constrain(main_color.green, 0, 255); @@ -81,7 +80,8 @@ void handleSetMainColor(uint8_t * mypayload) { main_color.red = ((rgb >> 16) & 0xFF); main_color.green = ((rgb >> 8) & 0xFF); main_color.blue = ((rgb >> 0) & 0xFF); - strip.setColor(main_color.red, main_color.green, main_color.blue); +// strip.setColor(main_color.red, main_color.green, main_color.blue); + mode = SETCOLOR; } void handleSetAllMode(uint8_t * mypayload) { @@ -92,13 +92,16 @@ void handleSetAllMode(uint8_t * mypayload) { main_color.green = ((rgb >> 8) & 0xFF); main_color.blue = ((rgb >> 0) & 0xFF); - for (int i = 0; i < strip.numPixels(); i++) { - strip.setPixelColor(i, main_color.red, main_color.green, main_color.blue); - } - strip.show(); +// for (int i = 0; i < strip.numPixels(); i++) { +// strip.setPixelColor(i, main_color.red, main_color.green, main_color.blue); +// } +// strip.show(); DBG_OUTPUT_PORT.printf("WS: Set all leds to main color: [%u] [%u] [%u]\n", main_color.red, main_color.green, main_color.blue); - exit_func = true; - mode = ALL; + #ifdef ENABLE_LEGACY_ANIMATIONS + exit_func = true; + #endif + ws2812fx_mode = FX_MODE_STATIC; + mode = SET_MODE; } void handleSetSingleLED(uint8_t * mypayload, uint8_t firstChar = 0) { @@ -126,7 +129,9 @@ void handleSetSingleLED(uint8_t * mypayload, uint8_t firstChar = 0) { strip.setPixelColor(led, ledstates[led].red, ledstates[led].green, ledstates[led].blue); strip.show(); } - exit_func = true; + #ifdef ENABLE_LEGACY_ANIMATIONS + exit_func = true; + #endif mode = CUSTOM; } @@ -205,64 +210,67 @@ void setModeByStateString(String saved_state_string) { strip.setColor(main_color.red, main_color.green, main_color.blue); } -void handleSetNamedMode(String str_mode) { - exit_func = true; - - if (str_mode.startsWith("=off")) { - mode = OFF; - #ifdef ENABLE_HOMEASSISTANT - stateOn = false; - #endif +#ifdef ENABLE_LEGACY_ANIMATIONS + void handleSetNamedMode(String str_mode) { + exit_func = true; + + if (str_mode.startsWith("=off")) { + mode = OFF; + #ifdef ENABLE_HOMEASSISTANT + stateOn = false; + #endif + } + if (str_mode.startsWith("=all")) { + ws2812fx_mode = FX_MODE_STATIC; + mode = SET_MODE; + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + } + if (str_mode.startsWith("=wipe")) { + mode = WIPE; + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + } + if (str_mode.startsWith("=rainbow")) { + mode = RAINBOW; + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + } + if (str_mode.startsWith("=rainbowCycle")) { + mode = RAINBOWCYCLE; + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + } + if (str_mode.startsWith("=theaterchase")) { + mode = THEATERCHASE; + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + } + if (str_mode.startsWith("=twinkleRandom")) { + mode = TWINKLERANDOM; + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + } + if (str_mode.startsWith("=theaterchaseRainbow")) { + mode = THEATERCHASERAINBOW; + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + } + if (str_mode.startsWith("=tv")) { + mode = TV; + #ifdef ENABLE_HOMEASSISTANT + stateOn = true; + #endif + } } - if (str_mode.startsWith("=all")) { - mode = ALL; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - } - if (str_mode.startsWith("=wipe")) { - mode = WIPE; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - } - if (str_mode.startsWith("=rainbow")) { - mode = RAINBOW; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - } - if (str_mode.startsWith("=rainbowCycle")) { - mode = RAINBOWCYCLE; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - } - if (str_mode.startsWith("=theaterchase")) { - mode = THEATERCHASE; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - } - if (str_mode.startsWith("=twinkleRandom")) { - mode = TWINKLERANDOM; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - } - if (str_mode.startsWith("=theaterchaseRainbow")) { - mode = THEATERCHASERAINBOW; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - } - if (str_mode.startsWith("=tv")) { - mode = TV; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif - } -} +#endif void handleSetWS2812FXMode(uint8_t * mypayload) { mode = HOLD; @@ -277,10 +285,16 @@ char* listStatusJSON() { char json[255]; char modeName[30]; - strncpy_P(modeName, (PGM_P)strip.getModeName(strip.getMode()), sizeof(modeName)); // copy from progmem - snprintf(json, sizeof(json), "{\"mode\":%d, \"ws2812fx_mode\":%d, \"ws2812fx_mode_name\":\"%s\", \"speed\":%d, \"brightness\":%d, \"color\":[%d, %d, %d]}", - mode, strip.getMode(), modeName, ws2812fx_speed, brightness, main_color.red, main_color.green, main_color.blue); +// if (mode == SET_MODE) { + strncpy_P(modeName, (PGM_P)strip.getModeName((uint8_t) ws2812fx_mode), sizeof(modeName)); // copy from progmem + snprintf(json, sizeof(json), "{\"mode\":%d, \"ws2812fx_mode\":%d, \"ws2812fx_mode_name\":\"%s\", \"speed\":%d, \"brightness\":%d, \"color\":[%d, %d, %d]}", + mode, ws2812fx_mode, modeName, ws2812fx_speed, brightness, main_color.red, main_color.green, main_color.blue); +// }else { +// strncpy_P(modeName, (PGM_P)strip.getModeName(strip.getMode()), sizeof(modeName)); // copy from progmem +// snprintf(json, sizeof(json), "{\"mode\":%d, \"ws2812fx_mode\":%d, \"ws2812fx_mode_name\":\"%s\", \"speed\":%d, \"brightness\":%d, \"color\":[%d, %d, %d]}", +// mode, strip.getMode(), modeName, ws2812fx_speed, brightness, main_color.red, main_color.green, main_color.blue); +// } return json; } @@ -510,28 +524,30 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght #endif } - // = ==> Activate named mode - if (payload[0] == '=') { - // we get mode data - String str_mode = String((char *) &payload[0]); - - handleSetNamedMode(str_mode); - - DBG_OUTPUT_PORT.printf("Activated mode [%u]!\n", mode); - webSocket.sendTXT(num, "OK"); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String(String("OK ") + String((char *)payload)).c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String(String("OK ") + String((char *)payload)).c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - if(!ha_send_data.active()) ha_send_data.once(5, tickerSendState); - #endif - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - } + #ifdef ENABLE_LEGACY_ANIMATIONS + // = ==> Activate named mode + if (payload[0] == '=') { + // we get mode data + String str_mode = String((char *) &payload[0]); + + handleSetNamedMode(str_mode); + + DBG_OUTPUT_PORT.printf("Activated mode [%u]!\n", mode); + webSocket.sendTXT(num, "OK"); + #ifdef ENABLE_MQTT + mqtt_client.publish(mqtt_outtopic, String(String("OK ") + String((char *)payload)).c_str()); + #endif + #ifdef ENABLE_AMQTT + amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String(String("OK ") + String((char *)payload)).c_str()); + #endif + #ifdef ENABLE_HOMEASSISTANT + if(!ha_send_data.active()) ha_send_data.once(5, tickerSendState); + #endif + #ifdef ENABLE_STATE_SAVE_SPIFFS + if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); + #endif + } + #endif // $ ==> Get status Info. if (payload[0] == '$') { @@ -604,13 +620,15 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght } } -void checkForRequests() { - webSocket.loop(); - server.handleClient(); - #ifdef ENABLE_MQTT - mqtt_client.loop(); - #endif -} +#ifdef ENABLE_LEGACY_ANIMATIONS + void checkForRequests() { + webSocket.loop(); + server.handleClient(); + #ifdef ENABLE_MQTT + mqtt_client.loop(); + #endif + } +#endif // *************************************************************************** @@ -731,7 +749,8 @@ void checkForRequests() { const char* state_in = root["state"]; if (strcmp(state_in, on_cmd) == 0 and !(animation_on)) { stateOn = true; - mode = ALL; + ws2812fx_mode = FX_MODE_STATIC; + mode = SET_MODE; } else if (strcmp(state_in, off_cmd) == 0) { stateOn = false; @@ -934,24 +953,26 @@ void checkForRequests() { #endif } - // = ==> Activate named mode - if (payload[0] == '=') { - String str_mode = String((char *) &payload[0]); - handleSetNamedMode(str_mode); - DBG_OUTPUT_PORT.printf("MQTT: Activate named mode [%s]\n", payload); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String(String("OK ") + String((char *)payload)).c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String(String("OK ") + String((char *)payload)).c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - if(!ha_send_data.active()) ha_send_data.once(5, tickerSendState); - #endif - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - } + #ifdef ENABLE_LEGACY_ANIMATIONS + // = ==> Activate named mode + if (payload[0] == '=') { + String str_mode = String((char *) &payload[0]); + handleSetNamedMode(str_mode); + DBG_OUTPUT_PORT.printf("MQTT: Activate named mode [%s]\n", payload); + #ifdef ENABLE_MQTT + mqtt_client.publish(mqtt_outtopic, String(String("OK ") + String((char *)payload)).c_str()); + #endif + #ifdef ENABLE_AMQTT + amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String(String("OK ") + String((char *)payload)).c_str()); + #endif + #ifdef ENABLE_HOMEASSISTANT + if(!ha_send_data.active()) ha_send_data.once(5, tickerSendState); + #endif + #ifdef ENABLE_STATE_SAVE_SPIFFS + if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); + #endif + } + #endif // $ ==> Get status Info. if (payload[0] == '$') { @@ -1415,4 +1436,4 @@ bool readStateFS() { updateFS = false; return false; } -#endif +#endif \ No newline at end of file