From 43769f37b24cb20bbdadb566c2e8fd8ee01f3c1e Mon Sep 17 00:00:00 2001 From: BPoH_Voodoo Date: Thu, 28 Feb 2019 15:52:30 +0100 Subject: [PATCH] Pull request to 3colors master includes now 3colors and ir remote --- Arduino/McLighting/McLighting.ino | 1188 ++++++------ Arduino/McLighting/McLighting.ino.nodemcu.bin | Bin 467312 -> 0 bytes Arduino/McLighting/definitions.h | 145 +- .../McLighting/{colormodes.h => mode_tv.h} | 178 +- Arduino/McLighting/request_handlers.h | 1650 ++++++++++------- Arduino/McLighting/version.h | 2 +- Arduino/McLighting/version_info.ino | 6 + 7 files changed, 1634 insertions(+), 1535 deletions(-) delete mode 100644 Arduino/McLighting/McLighting.ino.nodemcu.bin rename Arduino/McLighting/{colormodes.h => mode_tv.h} (75%) diff --git a/Arduino/McLighting/McLighting.ino b/Arduino/McLighting/McLighting.ino index 669209b..9dba564 100644 --- a/Arduino/McLighting/McLighting.ino +++ b/Arduino/McLighting/McLighting.ino @@ -19,83 +19,93 @@ #include //https://github.com/Links2004/arduinoWebSockets #include -#ifdef ENABLE_BUTTON_GY33 - // needed for MCU +#if defined(ENABLE_BUTTON_GY33) +// *************************************************************************** +// Load libraries for GY33 and initialize color sensor +// *************************************************************************** #include //https://github.com/FabLab-Luenen/GY33_MCU/archive/master.zip ; //https://github.com/pasko-zh/brzo_i2c - // *************************************************************************** - // Initialize Color Sensor - // *************************************************************************** GY33_MCU tcs; #endif -// OTA -#ifdef ENABLE_OTA - #include - #include -#endif - -//SPIFFS Save -#if !defined(ENABLE_HOMEASSISTANT) and defined(ENABLE_STATE_SAVE_SPIFFS) - #include //https://github.com/bblanchon/ArduinoJson -#endif +#include //https://github.com/bblanchon/ArduinoJson // MQTT -#ifdef ENABLE_MQTT - #include - #ifdef ENABLE_HOMEASSISTANT - #include //https://github.com/bblanchon/ArduinoJson +#if defined(ENABLE_MQTT) + #if ENABLE_MQTT == 0 +// *************************************************************************** +// Load libraries for PubSubClient +// *************************************************************************** + #include + WiFiClient espClient; + PubSubClient mqtt_client(espClient); + #endif + + #if ENABLE_MQTT == 1 +// *************************************************************************** +// Load libraries for Amqtt +// *************************************************************************** + #include //https://github.com/marvinroger/async-mqtt-client + //https://github.com/me-no-dev/ESPAsyncTCP + AsyncMqttClient amqttClient; + WiFiEventHandler wifiConnectHandler; + WiFiEventHandler wifiDisconnectHandler; #endif - - WiFiClient espClient; - PubSubClient mqtt_client(espClient); #endif -#ifdef ENABLE_AMQTT - #include //https://github.com/marvinroger/async-mqtt-client - //https://github.com/me-no-dev/ESPAsyncTCP - #ifdef ENABLE_HOMEASSISTANT - #include - #endif - - AsyncMqttClient amqttClient; - WiFiEventHandler wifiConnectHandler; - WiFiEventHandler wifiDisconnectHandler; -#endif - -#ifdef ARDUINOJSON_VERSION +#if defined(ARDUINOJSON_VERSION) #if !(ARDUINOJSON_VERSION_MAJOR == 6 and ARDUINOJSON_VERSION_MINOR == 7) #error "Install ArduinoJson v6.7.0-beta" #endif #endif -#ifdef ENABLE_E131 +#if defined(ENABLE_E131) +// *************************************************************************** +// Load libraries for E131 support +// *************************************************************************** #include //https://github.com/me-no-dev/ESPAsyncUDP #include //https://github.com/forkineye/ESPAsyncE131 ESPAsyncE131 e131(END_UNIVERSE - START_UNIVERSE + 1); #endif +#if defined(ENABLE_REMOTE) +// *************************************************************************** +// Load libraries for IR remote support +// *************************************************************************** + #include //https://github.com/markszabo/IRremoteESP8266 + #include + #include +#endif + // *************************************************************************** // Instanciate HTTP(80) / WebSockets(81) Server // *************************************************************************** ESP8266WebServer server(80); WebSocketsServer webSocket = WebSocketsServer(81); -#ifdef HTTP_OTA -#include -ESP8266HTTPUpdateServer httpUpdater; +// *************************************************************************** +// Include: OTA +// *************************************************************************** +#if defined(ENABLE_OTA) + #if ENABLE_OTA == 1 + #include + ESP8266HTTPUpdateServer httpUpdater; + #endif + #if ENABLE_OTA == 0 + #include + #include + #endif #endif // *************************************************************************** // Load libraries / Instanciate WS2812FX library // *************************************************************************** - #include // https://github.com/kitesurfer1404/WS2812FX - - #ifdef RGBW - WS2812FX strip = WS2812FX(NUMLEDS, PIN, NEO_GRBW + NEO_KHZ800); - #else - WS2812FX strip = WS2812FX(NUMLEDS, PIN, NEO_GRB + NEO_KHZ800); - #endif +#if defined(RGBW) + WS2812FX strip = WS2812FX(NUMLEDS, PIN, NEO_GRBW + NEO_KHZ800); +#else + WS2812FX strip = WS2812FX(NUMLEDS, PIN, NEO_GRB + NEO_KHZ800); +#endif +const uint8_t ws2812fx_options = SIZE_SMALL + FADE_MEDIUM; // WS2812FX setSegment OPTIONS, see: https://github.com/kitesurfer1404/WS2812FX/blob/master/extras/WS2812FX%20Users%20Guide.md // Parameter 1 = number of pixels in strip // Parameter 2 = Arduino pin number (most are valid) @@ -110,32 +120,32 @@ ESP8266HTTPUpdateServer httpUpdater; // and minimize distance between Arduino and first pixel. Avoid connecting // on a live circuit...if you must, connect GND first. -#ifdef USE_WS2812FX_DMA // Uses GPIO3/RXD0/RX, more info: https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods - #include - #ifdef RGBW - NeoEsp8266Dma800KbpsMethod dma = NeoEsp8266Dma800KbpsMethod(NUMLEDS, 4); //800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) - #else - NeoEsp8266Dma800KbpsMethod dma = NeoEsp8266Dma800KbpsMethod(NUMLEDS, 3); //800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) +#if defined(USE_WS2812FX_DMA) + #if USE_WS2812FX_DMA == 0// Uses GPIO3/RXD0/RX, more info: https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods + #include + #if defined(RGBW) + NeoEsp8266Dma800KbpsMethod dma = NeoEsp8266Dma800KbpsMethod(NUMLEDS, 4); //800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) + #else + NeoEsp8266Dma800KbpsMethod dma = NeoEsp8266Dma800KbpsMethod(NUMLEDS, 3); //800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) + #endif + //NeoEsp8266Dma400KbpsMethod dma = NeoEsp8266Dma400KbpsMethod(NUMLEDS, 3); //400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) #endif - //NeoEsp8266Dma400KbpsMethod dma = NeoEsp8266Dma400KbpsMethod(NUMLEDS, 3); //400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) -#endif -#ifdef USE_WS2812FX_UART1 // Uses UART1: GPIO1/TXD0/TX, more info: https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods - #include - #ifdef RGBW - NeoEsp8266Uart0800KbpsMethod dma = NeoEsp8266Uart0800KbpsMethod(NUMLEDS, 4); - #else - NeoEsp8266Uart0800KbpsMethod dma = NeoEsp8266Uart0800KbpsMethod(NUMLEDS, 3); + #if USE_WS2812FX_DMA == 1 // Uses UART1: GPIO1/TXD0/TX, more info: https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods + #include + #if defined(RGBW) + NeoEsp8266Uart0800KbpsMethod dma = NeoEsp8266Uart0800KbpsMethod(NUMLEDS, 4); + #else + NeoEsp8266Uart0800KbpsMethod dma = NeoEsp8266Uart0800KbpsMethod(NUMLEDS, 3); + #endif #endif -#endif -#ifdef USE_WS2812FX_UART2 // Uses UART2: GPIO2/TXD1/D4, more info: https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods - #include - #ifdef RGBW - NeoEsp8266Uart1800KbpsMethod dma = NeoEsp8266Uart1800KbpsMethod(NUMLEDS, 4); - #else - NeoEsp8266Uart1800KbpsMethod dma = NeoEsp8266Uart1800KbpsMethod(NUMLEDS, 3); + #if USE_WS2812FX_DMA == 2 // Uses UART2: GPIO2/TXD1/D4, more info: https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods + #include + #if defined(RGBW) + NeoEsp8266Uart1800KbpsMethod dma = NeoEsp8266Uart1800KbpsMethod(NUMLEDS, 4); + #else + NeoEsp8266Uart1800KbpsMethod dma = NeoEsp8266Uart1800KbpsMethod(NUMLEDS, 3); + #endif #endif -#endif -#if defined(USE_WS2812FX_DMA) or defined(USE_WS2812FX_UART) void DMA_Show(void) { if(dma.IsReadyToUpdate()) { memcpy(dma.getPixels(), strip.getPixels(), dma.getPixelsSize()); @@ -145,57 +155,38 @@ ESP8266HTTPUpdateServer httpUpdater; #endif // *************************************************************************** -// Load library "ticker" for blinking status led +// Load library "ticker" for blinking status led, mqtt send and save state // *************************************************************************** #include Ticker ticker; -#ifdef ENABLE_HOMEASSISTANT - Ticker ha_send_data; -#endif -#ifdef ENABLE_AMQTT - Ticker mqttReconnectTimer; - Ticker wifiReconnectTimer; -#endif -#ifdef ENABLE_STATE_SAVE_SPIFFS - Ticker spiffs_save_state; + +#if defined(ENABLE_MQTT) + #if ENABLE_MQTT == 1 + Ticker mqttReconnectTimer; + Ticker wifiReconnectTimer; + #endif + #if defined(ENABLE_HOMEASSISTANT) + Ticker ha_send_data; + #endif #endif + void tick() { //toggle state - int state = digitalRead(BUILTIN_LED); // get the current state of GPIO1 pin - digitalWrite(BUILTIN_LED, !state); // set pin to the opposite state + int state = digitalRead(LED_BUILTIN); // get the current state of GPIO1 pin + digitalWrite(LED_BUILTIN, !state); // set pin to the opposite state } -#ifdef ENABLE_STATE_SAVE_EEPROM - // *************************************************************************** - // EEPROM helper - // *************************************************************************** - String readEEPROM(int offset, int len) { - String res = ""; - for (int i = 0; i < len; ++i) - { - res += char(EEPROM.read(i + offset)); - //DBG_OUTPUT_PORT.println(char(EEPROM.read(i + offset))); - } - DBG_OUTPUT_PORT.printf("readEEPROM(): %s\n", res.c_str()); - return res; - } +#if defined(ENABLE_REMOTE) + IRrecv irrecv(ENABLE_REMOTE); + decode_results results; - void writeEEPROM(int offset, int len, String value) { - DBG_OUTPUT_PORT.printf("writeEEPROM(): %s\n", value.c_str()); - for (int i = 0; i < len; ++i) - { - if (i < value.length()) { - EEPROM.write(i + offset, value[i]); - } else { - EEPROM.write(i + offset, NULL); - } - } - } #endif +Ticker settings_save_state; + // *************************************************************************** -// Saved state handling +// Saved state handling in WifiManager // *************************************************************************** // https://stackoverflow.com/questions/9072320/split-string-into-string-array String getValue(String data, char separator, int index) @@ -250,15 +241,15 @@ void saveConfigCallback () { // *************************************************************************** #include "request_handlers.h" +#if defined(ENABLE_TV) // *************************************************************************** -// Include: Color modes +// Include: TV mode // *************************************************************************** -#ifdef ENABLE_TV - #include "colormodes.h" + #include "mode_tv.h" #endif // *************************************************************************** -// MAIN +// MAIN Setup // *************************************************************************** void setup() { // system_update_cpu_freq(160); @@ -267,14 +258,14 @@ void setup() { EEPROM.begin(512); // set builtin led pin as output - pinMode(BUILTIN_LED, OUTPUT); + pinMode(LED_BUILTIN, OUTPUT); // button pin setup -#ifdef ENABLE_BUTTON - pinMode(BUTTON,INPUT_PULLUP); +#if defined(ENABLE_BUTTON) + pinMode(ENABLE_BUTTON,INPUT_PULLUP); #endif -#ifdef ENABLE_BUTTON_GY33 - pinMode(BUTTON_GY33, INPUT_PULLUP); +#if defined(ENABLE_BUTTON_GY33) + pinMode(ENABLE_BUTTON_GY33, INPUT_PULLUP); if (tcs.begin()) { DBG_OUTPUT_PORT.println("Found GY-33 sensor"); } else { @@ -311,14 +302,13 @@ DBG_OUTPUT_PORT.println("Starting...."); // Setup: Neopixel // *************************************************************************** strip.init(); - #if defined(USE_WS2812FX_DMA) or defined(USE_WS2812FX_UART) + #if defined(USE_WS2812FX_DMA) dma.Initialize(); strip.setCustomShow(DMA_Show); #endif strip.setBrightness(brightness); - strip.setSpeed(convertSpeed(ws2812fx_speed)); - //strip.setMode(FX_MODE_RAINBOW_CYCLE); - strip.setColor(main_color.red, main_color.green, main_color.blue, main_color.white); +// parameters: index, start, stop, mode, color, speed, options + strip.setSegment(0, 0, NUMLEDS-1, FX_MODE_COMET, hex_colors, convertSpeed(ws2812fx_speed), ws2812fx_options); strip.start(); // *************************************************************************** @@ -327,21 +317,24 @@ DBG_OUTPUT_PORT.println("Starting...."); // The extra parameters to be configured (can be either global or just in the setup) // After connecting, parameter.getValue() will get you the configured value // id/name placeholder/prompt default length - #if defined(ENABLE_MQTT) or defined(ENABLE_AMQTT) - #if defined(ENABLE_STATE_SAVE_SPIFFS) and (defined(ENABLE_MQTT) or defined(ENABLE_AMQTT)) - (readConfigFS()) ? DBG_OUTPUT_PORT.println("WiFiManager config FS Read success!"): DBG_OUTPUT_PORT.println("WiFiManager config FS Read failure!"); - #else - String settings_available = readEEPROM(134, 1); - if (settings_available == "1") { - readEEPROM(0, 64).toCharArray(mqtt_host, 64); // 0-63 - readEEPROM(64, 6).toCharArray(mqtt_port, 6); // 64-69 - readEEPROM(70, 32).toCharArray(mqtt_user, 32); // 70-101 - readEEPROM(102, 32).toCharArray(mqtt_pass, 32); // 102-133 - DBG_OUTPUT_PORT.printf("MQTT host: %s\n", mqtt_host); - DBG_OUTPUT_PORT.printf("MQTT port: %s\n", mqtt_port); - DBG_OUTPUT_PORT.printf("MQTT user: %s\n", mqtt_user); - DBG_OUTPUT_PORT.printf("MQTT pass: %s\n", mqtt_pass); - } + #if defined(ENABLE_MQTT) + #if defined(ENABLE_STATE_SAVE) + #if ENABLE_STATE_SAVE == 1 + (readConfigFS()) ? DBG_OUTPUT_PORT.println("WiFiManager config FS Read success!"): DBG_OUTPUT_PORT.println("WiFiManager config FS Read failure!"); + #endif + #if ENABLE_STATE_SAVE == 0 + String settings_available = readEEPROM(134, 1); + if (settings_available == "1") { + readEEPROM(0, 64).toCharArray(mqtt_host, 64); // 0-63 + readEEPROM(64, 6).toCharArray(mqtt_port, 6); // 64-69 + readEEPROM(70, 32).toCharArray(mqtt_user, 32); // 70-101 + readEEPROM(102, 32).toCharArray(mqtt_pass, 32); // 102-133 + DBG_OUTPUT_PORT.printf("MQTT host: %s\n", mqtt_host); + DBG_OUTPUT_PORT.printf("MQTT port: %s\n", mqtt_port); + DBG_OUTPUT_PORT.printf("MQTT user: %s\n", mqtt_user); + DBG_OUTPUT_PORT.printf("MQTT pass: %s\n", mqtt_pass); + } + #endif #endif WiFiManagerParameter custom_mqtt_host("host", "MQTT hostname", mqtt_host, 64); WiFiManagerParameter custom_mqtt_port("port", "MQTT port", mqtt_port, 6); @@ -357,7 +350,7 @@ DBG_OUTPUT_PORT.println("Starting...."); //set callback that gets called when connecting to previous WiFi fails, and enters Access Point mode wifiManager.setAPCallback(configModeCallback); - #if defined(ENABLE_MQTT) or defined(ENABLE_AMQTT) + #if defined(ENABLE_MQTT) //set config save notify callback wifiManager.setSaveConfigCallback(saveConfigCallback); @@ -372,13 +365,13 @@ DBG_OUTPUT_PORT.println("Starting...."); // Uncomment if you want to restart ESP8266 if it cannot connect to WiFi. // Value in brackets is in seconds that WiFiManger waits until restart - #ifdef WIFIMGR_PORTAL_TIMEOUT + #if defined(WIFIMGR_PORTAL_TIMEOUT) wifiManager.setConfigPortalTimeout(WIFIMGR_PORTAL_TIMEOUT); #endif // Uncomment if you want to set static IP // Order is: IP, Gateway and Subnet - #ifdef WIFIMGR_SET_MANUAL_IP + #if defined(WIFIMGR_SET_MANUAL_IP) wifiManager.setSTAStaticIPConfig(IPAddress(_ip[0], _ip[1], _ip[2], _ip[3]), IPAddress(_gw[0], _gw[1], _gw[2], _gw[3]), IPAddress(_sn[0], _sn[1], _sn[2], _sn[3])); #endif @@ -393,121 +386,128 @@ DBG_OUTPUT_PORT.println("Starting...."); delay(1000); //Will be removed when upgrading to standalone offline McLightingUI version } - #if defined(ENABLE_MQTT) or defined(ENABLE_AMQTT) + #if defined(ENABLE_MQTT) //read updated parameters strcpy(mqtt_host, custom_mqtt_host.getValue()); strcpy(mqtt_port, custom_mqtt_port.getValue()); strcpy(mqtt_user, custom_mqtt_user.getValue()); strcpy(mqtt_pass, custom_mqtt_pass.getValue()); - - //save the custom parameters to FS - #if defined(ENABLE_STATE_SAVE_SPIFFS) and (defined(ENABLE_MQTT) or defined(ENABLE_AMQTT)) - (writeConfigFS(shouldSaveConfig)) ? DBG_OUTPUT_PORT.println("WiFiManager config FS Save success!"): DBG_OUTPUT_PORT.println("WiFiManager config FS Save failure!"); + + //save the custom parameters to FS/EEPROM + #if defined(ENABLE_STATE_SAVE) + #if ENABLE_STATE_SAVE == 1 + (writeConfigFS(shouldSaveConfig)) ? DBG_OUTPUT_PORT.println("WiFiManager config FS Save success!"): DBG_OUTPUT_PORT.println("WiFiManager config FS Save failure!"); + #endif + #if ENABLE_STATE_SAVE == 0 + if (shouldSaveConfig) { + DBG_OUTPUT_PORT.println("Saving WiFiManager config"); + + writeEEPROM(0, 64, mqtt_host); // 0-63 + writeEEPROM(64, 6, mqtt_port); // 64-69 + writeEEPROM(70, 32, mqtt_user); // 70-101 + writeEEPROM(102, 32, mqtt_pass); // 102-133 + writeEEPROM(134, 1, "1"); // 134 --> always "1" + EEPROM.commit(); + } + #endif #endif - #if defined(ENABLE_STATE_SAVE_EEPROM) - if (shouldSaveConfig) { - DBG_OUTPUT_PORT.println("Saving WiFiManager config"); - - writeEEPROM(0, 64, mqtt_host); // 0-63 - writeEEPROM(64, 6, mqtt_port); // 64-69 - writeEEPROM(70, 32, mqtt_user); // 70-101 - writeEEPROM(102, 32, mqtt_pass); // 102-133 - writeEEPROM(134, 1, "1"); // 134 --> always "1" - EEPROM.commit(); - } + + #if ENABLE_MQTT == 1 + wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect); + wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect); #endif #endif - - #ifdef ENABLE_AMQTT - wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect); - wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect); - #endif - //if you get here you have connected to the WiFi DBG_OUTPUT_PORT.println("connected...yeey :)"); ticker.detach(); //keep LED on - digitalWrite(BUILTIN_LED, LOW); + digitalWrite(LED_BUILTIN, LOW); + //switch LED off + //digitalWrite(LED_BUILTIN, HIGH); - - // *************************************************************************** - // Configure OTA - // *************************************************************************** - #ifdef ENABLE_OTA - DBG_OUTPUT_PORT.println("Arduino OTA activated."); - - // Port defaults to 8266 - ArduinoOTA.setPort(8266); - - // Hostname defaults to esp8266-[ChipID] - ArduinoOTA.setHostname(HOSTNAME); - - // No authentication by default - // ArduinoOTA.setPassword("admin"); - - // Password can be set with it's md5 value as well - // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3 - // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3"); - - ArduinoOTA.onStart([]() { - DBG_OUTPUT_PORT.println("Arduino OTA: Start updating"); - }); - ArduinoOTA.onEnd([]() { - DBG_OUTPUT_PORT.println("Arduino OTA: End"); - }); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { - DBG_OUTPUT_PORT.printf("Arduino OTA Progress: %u%%\r", (progress / (total / 100))); - }); - ArduinoOTA.onError([](ota_error_t error) { - DBG_OUTPUT_PORT.printf("Arduino OTA Error[%u]: ", error); - if (error == OTA_AUTH_ERROR) DBG_OUTPUT_PORT.println("Arduino OTA: Auth Failed"); - else if (error == OTA_BEGIN_ERROR) DBG_OUTPUT_PORT.println("Arduino OTA: Begin Failed"); - else if (error == OTA_CONNECT_ERROR) DBG_OUTPUT_PORT.println("Arduino OTA: Connect Failed"); - else if (error == OTA_RECEIVE_ERROR) DBG_OUTPUT_PORT.println("Arduino OTA: Receive Failed"); - else if (error == OTA_END_ERROR) DBG_OUTPUT_PORT.println("Arduino OTA: End Failed"); - }); - - ArduinoOTA.begin(); - DBG_OUTPUT_PORT.println(""); + #if defined(ENABLE_OTA) + #if ENABLE_OTA == 0 + // *************************************************************************** + // Configure Arduino OTA + // *************************************************************************** + DBG_OUTPUT_PORT.println("Arduino OTA activated."); + + // Port defaults to 8266 + ArduinoOTA.setPort(8266); + + // Hostname defaults to esp8266-[ChipID] + ArduinoOTA.setHostname(HOSTNAME); + + // No authentication by default + // ArduinoOTA.setPassword("admin"); + + // Password can be set with it's md5 value as well + // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3 + // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3"); + + ArduinoOTA.onStart([]() { + DBG_OUTPUT_PORT.println("Arduino OTA: Start updating"); + }); + ArduinoOTA.onEnd([]() { + DBG_OUTPUT_PORT.println("Arduino OTA: End"); + }); + ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { + DBG_OUTPUT_PORT.printf("Arduino OTA Progress: %u%%\r", (progress / (total / 100))); + }); + ArduinoOTA.onError([](ota_error_t error) { + DBG_OUTPUT_PORT.printf("Arduino OTA Error[%u]: ", error); + if (error == OTA_AUTH_ERROR) DBG_OUTPUT_PORT.println("Arduino OTA: Auth Failed"); + else if (error == OTA_BEGIN_ERROR) DBG_OUTPUT_PORT.println("Arduino OTA: Begin Failed"); + else if (error == OTA_CONNECT_ERROR) DBG_OUTPUT_PORT.println("Arduino OTA: Connect Failed"); + else if (error == OTA_RECEIVE_ERROR) DBG_OUTPUT_PORT.println("Arduino OTA: Receive Failed"); + else if (error == OTA_END_ERROR) DBG_OUTPUT_PORT.println("Arduino OTA: End Failed"); + }); + + ArduinoOTA.begin(); + DBG_OUTPUT_PORT.println(""); + #endif + #if ENABLE_OTA == 1 + httpUpdater.setup(&server, "/update"); + #endif #endif - // *************************************************************************** // Configure MQTT // *************************************************************************** - #ifdef ENABLE_MQTT_HOSTNAME_CHIPID + #if defined(ENABLE_MQTT_HOSTNAME_CHIPID) snprintf(mqtt_clientid, 64, "%s-%08X", HOSTNAME, ESP.getChipId()); #endif - #ifdef ENABLE_MQTT - if (mqtt_host != "" && atoi(mqtt_port) > 0) { - snprintf(mqtt_intopic, sizeof mqtt_intopic, "%s/in", HOSTNAME); - snprintf(mqtt_outtopic, sizeof mqtt_outtopic, "%s/out", HOSTNAME); - - DBG_OUTPUT_PORT.printf("MQTT active: %s:%d\n", mqtt_host, String(mqtt_port).toInt()); - - mqtt_client.setServer(mqtt_host, atoi(mqtt_port)); - mqtt_client.setCallback(mqtt_callback); - } + #if defined(ENABLE_MQTT) + snprintf(mqtt_intopic, sizeof mqtt_intopic, "%s/in", HOSTNAME); + snprintf(mqtt_outtopic, sizeof mqtt_outtopic, "%s/out", HOSTNAME); + #if ENABLE_MQTT == 0 + if (mqtt_host != "" && atoi(mqtt_port) > 0) { + DBG_OUTPUT_PORT.printf("MQTT active: %s:%s\n", mqtt_host, mqtt_port); + mqtt_client.setServer(mqtt_host, atoi(mqtt_port)); + mqtt_client.setCallback(mqtt_callback); + } + #endif + + #if ENABLE_MQTT == 1 + if (mqtt_host != "" && atoi(mqtt_port) > 0) { + DBG_OUTPUT_PORT.printf("AMQTT active: %s:%s\n", mqtt_host, mqtt_port); + amqttClient.onConnect(onMqttConnect); + amqttClient.onDisconnect(onMqttDisconnect); + amqttClient.onMessage(onMqttMessage); + amqttClient.setServer(mqtt_host, atoi(mqtt_port)); + if (mqtt_user != "" or mqtt_pass != "") amqttClient.setCredentials(mqtt_user, mqtt_pass); + amqttClient.setClientId(mqtt_clientid); + + connectToMqtt(); + } + #endif + #if defined(ENABLE_HOMEASSISTANT) + snprintf(mqtt_ha_state_in, sizeof mqtt_ha_state_in, "home/%s_ha/state/in", HOSTNAME); + snprintf(mqtt_ha_state_out, sizeof mqtt_ha_state_out , "home/%s_ha/state/out", HOSTNAME); + #endif #endif - #ifdef ENABLE_AMQTT - if (mqtt_host != "" && atoi(mqtt_port) > 0) { - amqttClient.onConnect(onMqttConnect); - amqttClient.onDisconnect(onMqttDisconnect); - amqttClient.onMessage(onMqttMessage); - amqttClient.setServer(mqtt_host, atoi(mqtt_port)); - if (mqtt_user != "" or mqtt_pass != "") amqttClient.setCredentials(mqtt_user, mqtt_pass); - amqttClient.setClientId(mqtt_clientid); - - connectToMqtt(); - } - #endif - - // #ifdef ENABLE_HOMEASSISTANT - // ha_send_data.attach(5, tickerSendState); // Send HA data back only every 5 sec - // #endif - // *************************************************************************** // Setup: MDNS responder // *************************************************************************** @@ -555,9 +555,9 @@ DBG_OUTPUT_PORT.println("Starting...."); }, handleFileUpload); //get heap status, analog input value and all GPIO statuses in one json call server.on("/esp_status", HTTP_GET, []() { - DynamicJsonDocument jsonBuffer; + const size_t bufferSize = JSON_OBJECT_SIZE(31) + 600; + DynamicJsonDocument jsonBuffer(bufferSize); JsonObject json = jsonBuffer.to(); - json["HOSTNAME"] = HOSTNAME; json["version"] = SKETCH_VERSION; json["heap"] = ESP.getFreeHeap(); @@ -571,67 +571,107 @@ DBG_OUTPUT_PORT.println("Starting...."); json["cpu_freq"] = ESP.getCpuFreqMHz(); json["chip_id"] = ESP.getFlashChipId(); #if defined(USE_WS2812FX_DMA) - json["animation_lib"] = "WS2812FX_DMA"; - json["pin"] = 3; - #elif defined(USE_WS2812FX_UART) - json["animation_lib"] = "WS2812FX_UART"; - json["pin"] = 2; + #if USE_WS2812FX_DMA == 0 + json["animation_lib"] = "WS2812FX_DMA"; + json["ws2812_pin"] = 3; + #endif + #if USE_WS2812FX_DMA == 1 + json["animation_lib"] = "WS2812FX_UART1"; + json["ws2812_pin"] = 2; + #endif + #if USE_WS2812FX_DMA == 2 + json["animation_lib"] = "WS2812FX_UART2"; + json["ws2812_pin"] = 1; + #endif #else json["animation_lib"] = "WS2812FX"; - json["pin"] = PIN; + json["ws2812_pin"] = PIN; #endif json["number_leds"] = NUMLEDS; - #ifdef ENABLE_BUTTON + #if defined(RGBW) + json["rgbw_mode"] = "ON"; + #else + json["rgbw_mode"] = "OFF"; + #endif + #if defined(ENABLE_BUTTON) json["button_mode"] = "ON"; + json["button_pin"] = ENABLE_BUTTON; #else json["button_mode"] = "OFF"; #endif - #ifdef ENABLE_AMQTT - json["amqtt"] = "ON"; + #if defined(ENABLE_BUTTON_GY33) + json["button_gy33"] = "ON"; + json["gy33_pin"] = ENABLE_BUTTON_GY33; + #else + json["button_gy33"] = "OFF"; #endif - #ifdef ENABLE_MQTT - json["mqtt"] = "ON"; + #if defined(ENABLE_REMOTE) + json["ir_remote"] = "ON"; + json["tsop_ir_pin"] = ENABLE_REMOTE; + #else + json["ir_remote"] = "OFF"; #endif - #ifdef ENABLE_HOMEASSISTANT + #if defined(ENABLE_MQTT) + #if ENABLE_MQTT == 0 + json["mqtt"] = "MQTT"; + #endif + #if ENABLE_MQTT == 1 + json["mqtt"] = "AMQTT"; + #endif + #else + json["mqtt"] = "OFF"; + #endif + #if defined(ENABLE_HOMEASSISTANT) json["home_assistant"] = "ON"; #else json["home_assistant"] = "OFF"; #endif - #ifdef ENABLE_LEGACY_ANIMATIONS + #if defined(ENABLE_LEGACY_ANIMATIONS) json["legacy_animations"] = "ON"; #else json["legacy_animations"] = "OFF"; #endif - #ifdef ENABLE_TV + #if defined(ENABLE_TV) json["tv_animation"] = "ON"; #else json["tv_animation"] = "OFF"; #endif - #ifdef ENABLE_E131 + #if defined(ENABLE_E131) json["e131_animations"] = "ON"; #else json["e131_animations"] = "OFF"; #endif - #ifdef HTTP_OTA - json["esp8266_http_updateserver"] = "ON"; + #if defined(ENABLE_OTA) + #if ENABLE_OTA == 0 + json["ota"] = "ARDUINO"; + #endif + #if ENABLE_OTA == 1 + json["ota"] = "HTTP"; + #endif + #else + json["ota"] = "OFF"; #endif - #ifdef ENABLE_OTA - json["arduino_ota"] = "ON"; - #endif - #ifdef ENABLE_STATE_SAVE_SPIFFS - json["state_save"] = "SPIFFS"; - #endif - #ifdef ENABLE_STATE_SAVE_EEPROM - json["state_save"] = "EEPROM"; + #if defined(ENABLE_STATE_SAVE) + #if ENABLE_STATE_SAVE == 1 + json["state_save"] = "SPIFFS"; + #endif + #if ENABLE_STATE_SAVE == 0 + json["state_save"] = "EEPROM"; + #endif + #else + json["state_save"] = "OFF"; #endif String json_str; serializeJson(json, json_str); + jsonBuffer.clear(); server.sendHeader("Access-Control-Allow-Origin", "*"); server.send(200, "application/json", json_str); }); - +// *************************************************************************** +// Setup: SPIFFS Webserver handler +// *************************************************************************** //called when the url is not defined here //use it to load content from SPIFFS server.onNotFound([]() { @@ -669,63 +709,40 @@ DBG_OUTPUT_PORT.println("Starting...."); DBG_OUTPUT_PORT.printf("/format_spiffs\n"); server.send(200, "text/plain", "Formatting SPIFFS ..." ); SPIFFS.format(); - server.send(200, "text/plain", "Formatting SPIFFS complete" ); }); - // *************************************************************************** - // Setup: SPIFFS Webserver handler - // *************************************************************************** server.on("/set_brightness", []() { getArgs(); - mode = BRIGHTNESS; - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String(String("OK %") + String(brightness)).c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String(String("OK %") + String(brightness)).c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - if(!ha_send_data.active()) ha_send_data.once(5, tickerSendState); - #endif + mode = SET_BRIGHTNESS; getStatusJSON(); }); server.on("/get_brightness", []() { - String str_brightness = String((int) (brightness / 2.55)); + char str_brightness[3]; + sprintf(str_brightness, "%i", (int) (brightness / 2.55)); server.sendHeader("Access-Control-Allow-Origin", "*"); server.send(200, "text/plain", str_brightness ); - DBG_OUTPUT_PORT.print("/get_brightness: "); - DBG_OUTPUT_PORT.println(str_brightness); + DBG_OUTPUT_PORT.printf("/get_brightness: %i\r\n", (int) (brightness / 2.55)); }); server.on("/set_speed", []() { getArgs(); - mode = SETSPEED; - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String(String("OK ?") + String(ws2812fx_speed)).c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String(String("OK ?") + String(ws2812fx_speed)).c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - if(!ha_send_data.active()) ha_send_data.once(5, tickerSendState); - #endif + mode = SET_SPEED; getStatusJSON(); }); server.on("/get_speed", []() { - String str_speed = String(ws2812fx_speed); + char str_speed[3]; + sprintf(str_speed, "%i", ws2812fx_speed); server.sendHeader("Access-Control-Allow-Origin", "*"); server.send(200, "text/plain", str_speed ); - DBG_OUTPUT_PORT.print("/get_speed: "); - DBG_OUTPUT_PORT.println(str_speed); + DBG_OUTPUT_PORT.printf("/get_speed: %i\r\n", ws2812fx_speed); }); server.on("/get_switch", []() { server.sendHeader("Access-Control-Allow-Origin", "*"); server.send(200, "text/plain", (mode == OFF) ? "0" : "1" ); - DBG_OUTPUT_PORT.printf("/get_switch: %s\n", (mode == OFF) ? "0" : "1"); + DBG_OUTPUT_PORT.printf("/get_switch: %s\r\n", (mode == OFF) ? "0" : "1"); }); server.on("/get_color", []() { @@ -736,211 +753,102 @@ DBG_OUTPUT_PORT.println("Starting...."); DBG_OUTPUT_PORT.print("/get_color: "); DBG_OUTPUT_PORT.println(rgbcolor); }); + + server.on("/get_color2", []() { + char rgbcolor[9]; + snprintf(rgbcolor, sizeof(rgbcolor), "%02X%02X%02X%02X", back_color.white, back_color.red, back_color.green, back_color.blue); + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", rgbcolor ); + DBG_OUTPUT_PORT.print("/get_color2: "); + DBG_OUTPUT_PORT.println(rgbcolor); + }); + + server.on("/get_color3", []() { + char rgbcolor[9]; + snprintf(rgbcolor, sizeof(rgbcolor), "%02X%02X%02X%02X", xtra_color.white, xtra_color.red, xtra_color.green, xtra_color.blue); + server.sendHeader("Access-Control-Allow-Origin", "*"); + server.send(200, "text/plain", rgbcolor ); + DBG_OUTPUT_PORT.print("/get_color3: "); + DBG_OUTPUT_PORT.println(rgbcolor); + }); + server.on("/status", []() { getStatusJSON(); }); server.on("/off", []() { - #ifdef ENABLE_TV - exit_func = true; - #endif mode = OFF; - //getArgs(); getStatusJSON(); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =off").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =off").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = false; - #endif }); server.on("/auto", []() { - #ifdef ENABLE_TV - exit_func = true; - #endif - handleAutoStart(); - getArgs(); + mode = AUTO; getStatusJSON(); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =auto").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =auto").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = false; - #endif }); server.on("/all", []() { - #ifdef ENABLE_TV - exit_func = true; - #endif - ws2812fx_mode = FX_MODE_STATIC; - mode = SET_MODE; - //mode = ALL; getArgs(); + ws2812fx_mode = FX_MODE_STATIC; + mode = SET_ALL; getStatusJSON(); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =all").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =all").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif }); - #ifdef ENABLE_LEGACY_ANIMATIONS + #if defined(ENABLE_LEGACY_ANIMATIONS) server.on("/wipe", []() { - #ifdef ENABLE_TV - exit_func = true; - #endif - mode = WIPE; getArgs(); + ws2812fx_mode = FX_MODE_COLOR_WIPE; + mode = SET_ALL; 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 }); server.on("/rainbow", []() { - #ifdef ENABLE_TV - exit_func = true; - #endif - mode = RAINBOW; getArgs(); + ws2812fx_mode = FX_MODE_RAINBOW; + mode = SET_ALL; 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 }); - server.on("/rainbowCycle", []() { - #ifdef ENABLE_TV - exit_func = true; - #endif - mode = RAINBOWCYCLE; + server.on("/rainbowcycle", []() { getArgs(); + ws2812fx_mode = FX_MODE_RAINBOW_CYCLE; + mode = SET_ALL; 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 }); server.on("/theaterchase", []() { - #ifdef ENABLE_TV - exit_func = true; - #endif - mode = THEATERCHASE; getArgs(); + ws2812fx_mode = FX_MODE_THEATER_CHASE; + mode = SET_ALL; 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 }); - server.on("/twinkleRandom", []() { - #ifdef ENABLE_TV - exit_func = true; - #endif - mode = TWINKLERANDOM; + server.on("/twinklerandom", []() { getArgs(); + ws2812fx_mode = FX_MODE_TWINKLE_RANDOM; + mode = SET_ALL; 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 }); - server.on("/theaterchaseRainbow", []() { - #ifdef ENABLE_TV - exit_func = true; - #endif - mode = THEATERCHASERAINBOW; + server.on("/theaterchaserainbow", []() { getArgs(); + ws2812fx_mode = FX_MODE_THEATER_CHASE_RAINBOW; + mode = SET_ALL; 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 }); #endif - #ifdef ENABLE_E131 + #if defined(ENABLE_E131) server.on("/e131", []() { - #ifdef ENABLE_TV - exit_func = true; - #endif mode = E131; getStatusJSON(); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =e131").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =e131").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif }); #endif - #ifdef ENABLE_TV + #if defined(ENABLE_TV) 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 }); #endif @@ -952,23 +860,8 @@ DBG_OUTPUT_PORT.println("Starting...."); getArgs(); mode = SET_MODE; getStatusJSON(); - - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String(String("OK /") + String(ws2812fx_mode)).c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String(String("OK /") + String(ws2812fx_mode)).c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - if(!ha_send_data.active()) ha_send_data.once(5, tickerSendState); - #endif }); - #ifdef HTTP_OTA - httpUpdater.setup(&server, "/update"); - #endif - server.begin(); // Start MDNS service @@ -976,234 +869,243 @@ DBG_OUTPUT_PORT.println("Starting...."); MDNS.addService("http", "tcp", 80); } - #ifdef ENABLE_E131 + #if defined(ENABLE_E131) // Choose one to begin listening for E1.31 data - // if (e131.begin(E131_UNICAST)) // Listen via Unicast + // if (e131.begin(E131_UNICAST)) // Listen via Unicast if (e131.begin(E131_MULTICAST, START_UNIVERSE, END_UNIVERSE)) // Listen via Multicast DBG_OUTPUT_PORT.println(F("Listening for data...")); else DBG_OUTPUT_PORT.println(F("*** e131.begin failed ***")); #endif - #ifdef ENABLE_STATE_SAVE_SPIFFS - (readStateFS()) ? DBG_OUTPUT_PORT.println(" Success!") : DBG_OUTPUT_PORT.println(" Failure!"); + #if defined(ENABLE_STATE_SAVE) + #if ENABLE_STATE_SAVE == 1 + (readStateFS()) ? DBG_OUTPUT_PORT.println(" Success!") : DBG_OUTPUT_PORT.println(" Failure!"); + #endif + #if ENABLE_STATE_SAVE == 0 + // Load state string from EEPROM + String saved_state_string = readEEPROM(256, 66); + String chk = getValue(saved_state_string, '|', 0); + if (chk == "STA") { + DBG_OUTPUT_PORT.printf("Found saved state: %s\n", saved_state_string.c_str()); + setModeByStateString(saved_state_string); + mode = SET_ALL; + } + #endif #endif - - #ifdef ENABLE_STATE_SAVE_EEPROM - // Load state string from EEPROM - String saved_state_string = readEEPROM(256, 36); - String chk = getValue(saved_state_string, '|', 0); - if (chk == "STA") { - DBG_OUTPUT_PORT.printf("Found saved state: %s\n", saved_state_string.c_str()); - setModeByStateString(saved_state_string); - } - sprintf(last_state, "STA|%2d|%3d|%3d|%3d|%3d|%3d|%3d|%3d", mode, ws2812fx_mode, ws2812fx_speed, brightness, main_color.red, main_color.green, main_color.blue, main_color.white); - #endif - - #ifdef ENABLE_BUTTON_GY33 + #if defined(ENABLE_BUTTON_GY33) tcs.setConfig(MCU_LED_06, MCU_WHITE_ON); // delay(2000); // tcs.setConfig(MCU_LED_OFF, MCU_WHITE_OFF); #endif + prevmode = mode; + #if defined(ENABLE_REMOTE) + irrecv.enableIRIn(); // Start the receiver + sprintf(last_state, "STA|%2d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d", mode, ws2812fx_mode, ws2812fx_speed, brightness, main_color.red, main_color.green, main_color.blue, main_color.white, back_color.red, back_color.green, back_color.blue, back_color.white, xtra_color.red, xtra_color.green, xtra_color.blue,xtra_color.white); + #endif } - +// *************************************************************************** +// MAIN Loop +// *************************************************************************** void loop() { - #ifdef ENABLE_BUTTON + #if defined(ENABLE_BUTTON) button(); #endif - #ifdef ENABLE_BUTTON_GY33 + #if defined(ENABLE_BUTTON_GY33) button_gy33(); #endif server.handleClient(); webSocket.loop(); - #ifdef ENABLE_OTA - ArduinoOTA.handle(); + #if defined(ENABLE_OTA) + #if ENABLE_OTA == 0 + ArduinoOTA.handle(); + #endif #endif - #ifdef ENABLE_MQTT - if (WiFi.status() != WL_CONNECTED) { - #ifdef ENABLE_HOMEASSISTANT - ha_send_data.detach(); - #endif - DBG_OUTPUT_PORT.println("WiFi disconnected, reconnecting!"); - WiFi.disconnect(); - WiFi.setSleepMode(WIFI_NONE_SLEEP); - WiFi.mode(WIFI_STA); - WiFi.begin(); - } else { - if (mqtt_host != "" && String(mqtt_port).toInt() > 0 && mqtt_reconnect_retries < MQTT_MAX_RECONNECT_TRIES) { - if (!mqtt_client.connected()) { - #ifdef ENABLE_HOMEASSISTANT + #if defined(ENABLE_MQTT) + #if ENABLE_MQTT == 0 + if (WiFi.status() != WL_CONNECTED) { + #if defined(ENABLE_HOMEASSISTANT) ha_send_data.detach(); - #endif - DBG_OUTPUT_PORT.println("MQTT disconnected, reconnecting!"); - mqtt_reconnect(); - } else { - mqtt_client.loop(); + #endif + DBG_OUTPUT_PORT.println("WiFi disconnected, reconnecting!"); + WiFi.disconnect(); + WiFi.setSleepMode(WIFI_NONE_SLEEP); + WiFi.mode(WIFI_STA); + WiFi.begin(); + } else { + if (mqtt_host != "" && String(mqtt_port).toInt() > 0 && mqtt_reconnect_retries < MQTT_MAX_RECONNECT_TRIES) { + if (!mqtt_client.connected()) { + #if defined(ENABLE_HOMEASSISTANT) + ha_send_data.detach(); + #endif + DBG_OUTPUT_PORT.println("MQTT disconnected, reconnecting!"); + mqtt_reconnect(); + } else { + mqtt_client.loop(); + } } } - } - #endif - #ifdef ENABLE_HOMEASSISTANT -// if(!ha_send_data.active()) ha_send_data.once(5, tickerSendState); - if (new_ha_mqtt_msg) sendState(); + #endif #endif + // *************************************************************************** // Simple statemachine that handles the different modes - if (mode == OFF) { - if(strip.isRunning()) strip.stop(); //should clear memory - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - } - - #ifdef ENABLE_TV - if (mode == TV) { - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - if(!strip.isRunning()) strip.start(); - tv(); - } - #endif - - #ifdef ENABLE_E131 - if (mode == E131) { - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - handleE131(); - } - #endif - if (mode == SET_MODE) { - DBG_OUTPUT_PORT.printf("SET_MODE: %d %d\n", ws2812fx_mode, mode); - strip.setMode(ws2812fx_mode); - //strip.trigger(); // is done later anyway, why do it more than once? - prevmode = SET_MODE; - mode = SETCOLOR; - } - if (mode == SETCOLOR) { - strip.setColor(main_color.red, main_color.green, main_color.blue, main_color.white); - mode = (prevmode == SET_MODE) ? SETSPEED : prevmode; - if (mode == HOLD) strip.trigger(); - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - } - if (mode == SETSPEED) { - strip.setSpeed(convertSpeed(ws2812fx_speed)); - mode = (prevmode == SET_MODE) ? BRIGHTNESS : prevmode; - if (mode == HOLD) strip.trigger(); - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - } - if (mode == BRIGHTNESS) { - strip.setBrightness(brightness); - mode = (prevmode == SET_MODE) ? HOLD : prevmode; - if (mode == HOLD) strip.trigger(); - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - } - #ifdef ENABLE_LEGACY_ANIMATIONS - if (mode == WIPE) { - //strip.setColor(main_color.red, main_color.green, main_color.blue, main_color.white); - strip.setMode(FX_MODE_COLOR_WIPE); - strip.trigger(); - mode = HOLD; - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - } - if (mode == RAINBOW) { - strip.setMode(FX_MODE_RAINBOW); - strip.trigger(); - mode = HOLD; - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - } - if (mode == RAINBOWCYCLE) { - strip.setMode(FX_MODE_RAINBOW_CYCLE); - strip.trigger(); - mode = HOLD; - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - } - if (mode == THEATERCHASE) { - //strip.setColor(main_color.red, main_color.green, main_color.blue, main_color.white); - strip.setMode(FX_MODE_THEATER_CHASE); - strip.trigger(); - mode = HOLD; - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - } - if (mode == TWINKLERANDOM) { - //strip.setColor(main_color.red, main_color.green, main_color.blue, main_color.white); - strip.setMode(FX_MODE_TWINKLE_RANDOM); - strip.trigger(); - mode = HOLD; - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - } - if (mode == THEATERCHASERAINBOW) { - strip.setMode(FX_MODE_THEATER_CHASE_RAINBOW); - strip.trigger(); - mode = HOLD; - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - } - #endif - - if (mode == HOLD || mode == CUSTOM) { - #ifdef ENABLE_TV - if (exit_func) { - exit_func = false; - } - #endif + // *************************************************************************** + if ((mode != OFF) && (mode != TV) && (mode != E131)) { // strip.start() is only needed for modes with WS2812FX functionality if(!strip.isRunning()) strip.start(); - if (prevmode == SET_MODE) prevmode = HOLD; + } + + if ((mode == OFF) || (mode == TV) || (mode == E131)) { + if(strip.isRunning()) { + strip.strip_off(); // Workaround: to be shure, + delay(10); // that strip is really off. Sometimes strip.stop isn't enought + strip.stop(); // should clear memory + } else { + if (prevmode != mode) { // Start temporarily to clear strip + strip.start(); + strip.strip_off(); // Workaround: to be shure, + delay(10); // that strip is really off. Sometimes strip.stop isn't enought + strip.stop(); // should clear memory + } + } } - - // Only for modes with WS2812FX functionality - #ifdef ENABLE_TV - if (mode != TV && mode != CUSTOM) { - #else - if (mode != CUSTOM) { - #endif + + if (( mode == AUTO) || (mode == HOLD)) { // strip.service() is only needed for modes with WS2812FX functionality strip.service(); } - - #ifdef ENABLE_STATE_SAVE_SPIFFS - if (updateStateFS) { - (writeStateFS()) ? DBG_OUTPUT_PORT.println(" Success!") : DBG_OUTPUT_PORT.println(" Failure!"); + + if ((prevmode == AUTO) && (mode != AUTO)) { handleAutoStop(); } // stop auto mode + + if (mode == OFF) { + #if defined(ENABLE_MQTT) + if (prevmode != mode) { sprintf(mqtt_buf, "OK =off", ""); } + #endif + } + + if (mode == AUTO) { + if (prevmode != mode) { + handleAutoStart(); + #if defined(ENABLE_MQTT) + sprintf(mqtt_buf, "OK =auto", ""); + #endif + } + } + + #if defined(ENABLE_TV) + if (mode == TV) { + handleTV(); + #if defined(ENABLE_MQTT) + if (prevmode != mode) { sprintf(mqtt_buf, "OK =tv", ""); } + #endif } #endif - - #ifdef ENABLE_STATE_SAVE_EEPROM - // Check for state changes - sprintf(current_state, "STA|%2d|%3d|%3d|%3d|%3d|%3d|%3d|%3d", mode, strip.getMode(), ws2812fx_speed, brightness, main_color.red, main_color.green, main_color.blue, main_color.white); - - if (strcmp(current_state, last_state) != 0) { - // DBG_OUTPUT_PORT.printf("STATE CHANGED: %s / %s\n", last_state, current_state); - strcpy(last_state, current_state); - time_statechange = millis(); - state_save_requested = true; + + #if defined(ENABLE_E131) + if (mode == E131) { + handleE131(); + #if defined(ENABLE_MQTT) + if (prevmode != mode) { sprintf(mqtt_buf, "OK =e131", ""); } + #endif } - if (state_save_requested && time_statechange + timeout_statechange_save <= millis()) { - time_statechange = 0; - state_save_requested = false; - writeEEPROM(256, 36, last_state); // 256 --> last_state (reserved 36 bytes) - EEPROM.commit(); + #endif + + if (mode == SET_ALL) { + mode = HOLD; + if ((prevmode == OFF) || (prevmode == AUTO) || (prevmode == TV) || (prevmode == E131)) { setModeByStateString(last_state); } + #if defined(ENABLE_MQTT) + sprintf(mqtt_buf, "OK /%i", ws2812fx_mode); + #endif + strip.setMode(ws2812fx_mode); + convertColors(); + strip.setColors(0, hex_colors); + strip.setSpeed(convertSpeed(ws2812fx_speed)); + strip.setBrightness(brightness); + prevmode = SET_ALL; + strip.trigger(); + } + + if (mode == SET_MODE) { + mode = HOLD; + #if defined(ENABLE_MQTT) + sprintf(mqtt_buf, "OK /%i", ws2812fx_mode); + #endif + strip.setMode(ws2812fx_mode); + prevmode = SET_MODE; + strip.trigger(); + } + + if (mode == SET_COLOR) { + convertColors(); + strip.setColors(0, hex_colors); + mode = prevmode; + prevmode = SET_COLOR; + if (mode == HOLD) strip.trigger(); + } + if (mode == SET_SPEED) { + #if defined(ENABLE_MQTT) + sprintf(mqtt_buf, "OK ?%i", ws2812fx_speed); + #endif + strip.setSpeed(convertSpeed(ws2812fx_speed)); + mode = prevmode; + prevmode = SET_SPEED; + if (mode == HOLD) strip.trigger(); + } + if (mode == SET_BRIGHTNESS) { + #if defined(ENABLE_MQTT) + sprintf(mqtt_buf, "OK %%%i", brightness); + #endif + strip.setBrightness(brightness); + mode = prevmode; + prevmode = SET_BRIGHTNESS; + if (mode == HOLD) strip.trigger(); + } + + if (prevmode != mode) { + if (prevmode != AUTO) { // do not save if AUTO Mode was set + #if defined(ENABLE_STATE_SAVE) + if(!settings_save_state.active()) settings_save_state.once(3, tickerSaveState); + #endif + snprintf(last_state, sizeof last_state, "STA|%2d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d", prevmode, ws2812fx_mode, ws2812fx_speed, brightness, main_color.red, main_color.green, main_color.blue, main_color.white, back_color.red, back_color.green, back_color.blue, back_color.white, xtra_color.red, xtra_color.green, xtra_color.blue, xtra_color.white); } + #if defined(ENABLE_MQTT) + #if ENABLE_MQTT == 0 + mqtt_client.publish(mqtt_outtopic, mqtt_buf); + #endif + #if ENABLE_MQTT == 1 + amqttClient.publish(mqtt_outtopic, qospub, false, mqtt_buf); + #endif + #if defined(ENABLE_HOMEASSISTANT) + if(!ha_send_data.active()) ha_send_data.once(3, tickerSendState); + #endif + #endif + } + #if defined(ENABLE_STATE_SAVE) + if (updateState){ + #if ENABLE_STATE_SAVE == 1 + (writeStateFS()) ? DBG_OUTPUT_PORT.println(" Success!") : DBG_OUTPUT_PORT.println(" Failure!"); + #endif + #if ENABLE_STATE_SAVE == 0 + writeEEPROM(256, 66, last_state); // 256 --> last_state (reserved 66 bytes) + EEPROM.commit(); + updateState = false; + settings_save_state.detach(); + #endif + #endif + } + #if defined(ENABLE_MQTT) + #if defined(ENABLE_HOMEASSISTANT) + if (new_ha_mqtt_msg) sendState(); + #endif + #endif + + prevmode = mode; + + #if defined(ENABLE_REMOTE) + handleRemote(); #endif } diff --git a/Arduino/McLighting/McLighting.ino.nodemcu.bin b/Arduino/McLighting/McLighting.ino.nodemcu.bin deleted file mode 100644 index 5c0627b88dc0c775d08a6619b4276e6fbc74895e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 467312 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ⅅSdrCDS!OR3e3O=lv)WmPa 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 P>V@JvH_ IwIP Variant -> Higher Bandwidth -#define ENABLE_LEGACY_ANIMATIONS // Enable Legacy Animations -#define ENABLE_E131 // E1.31 implementation You have to uncomment #define USE_WS2812FX_DMA -#define ENABLE_TV // Enable TV Animation +#define ENABLE_OTA 1 // If defined, enable Arduino OTA code. If set to 0 enable Arduino OTA code, if set to 1 enable ESP8266HTTPUpdateServer OTA code. +#define ENABLE_MQTT 1 // If defined use MQTT OR AMQTT, if set to 0 enable MQTT client code, see: https://github.com/toblum/McLighting/wiki/MQTT-API, if set to 1, enable Async MQTT code, see: https://github.com/marvinroger/async-mqtt-client +//#define ENABLE_MQTT_HOSTNAME_CHIPID // Uncomment/comment to add ESPChipID to end of MQTT hostname +#define ENABLE_HOMEASSISTANT // If defined, enable Homeassistant integration, ENABLE_MQTT must be active +#define MQTT_HOME_ASSISTANT_SUPPORT // If defined, use AMQTT and select Tools -> IwIP Variant -> Higher Bandwidth +#define ENABLE_BUTTON 14 // If defined, enable button handling code, see: https://github.com/toblum/McLighting/wiki/Button-control, the value defines the input pin (14 / D5) for switching the LED strip on / off, connect this PIN to ground to trigger button. +//#define ENABLE_BUTTON_GY33 12 // If defined, enable button handling code for GY-33 color sensor to scan color. The value defines the input pin (12 / D6) for read color data with RGB sensor, connect this PIN to ground to trigger button. +//#define ENABLE_REMOTE 13 // If defined, enable Remote Control via TSOP31238. The value defines the input pin (13 / D7) for TSOP31238 Out -#ifdef ENABLE_E131 +#define ENABLE_STATE_SAVE 1 // If defined, save state on reboot, if set to 0 in EEPROM, if set to 1 on SPIFFS + +#define ENABLE_LEGACY_ANIMATIONS // Enable Legacy Animations +#define ENABLE_E131 // E1.31 implementation You have to uncomment #define USE_WS2812FX_DMA and set it to 0 +#define ENABLE_TV // Enable TV Animation + +#if defined(ENABLE_E131) #define START_UNIVERSE 1 // First DMX Universe to listen for #define END_UNIVERSE 2 // Total number of Universes to listen for, starting at UNIVERSE #endif +#if defined(ENABLE_REMOTE) + int selected_color = 1; + int chng = 1; + uint64_t last_remote_cmd; + enum RMT_BTN {ON_OFF, MODE_UP, MODE_DOWN, RED_UP, RED_DOWN, GREEN_UP, GREEN_DOWN, BLUE_UP, BLUE_DOWN, WHITE_UP, WHITE_DOWN, BRIGHTNESS_UP, BRIGHTNESS_DOWN, SPEED_UP, SPEED_DOWN, COL_M, COL_B, COL_X, AUTOMODE, CUST_1, CUST_2, CUST_3, CUST_4, CUST_5, REPEATCMD, BTN_CNT}; + // Change your IR Commands here. You can see them in console, after you pressed a button on the remote + uint64_t rmt_commands[BTN_CNT] = {0xF7C03F, 0xF7708F, 0xF7F00F, 0xF720DF, 0xF710EF, 0xF7A05F, 0xF7906F, 0xF7609F, 0xF750AF, 0xF7E01F, 0xF7D02F, 0xF730CF, 0xF7B04F, 0xF748B7, 0xF7C837, 0xF700FF, 0xF7807F, 0xF740BF, 0xF708F7, 0xF78877, 0xF728D7, 0xF7A857, 0xF76897, 0xF7E817, 0xFFFFFFFFFFFFFFFF}; +#endif //#define WIFIMGR_PORTAL_TIMEOUT 180 //#define WIFIMGR_SET_MANUAL_IP -#ifdef WIFIMGR_SET_MANUAL_IP +#if defined(WIFIMGR_SET_MANUAL_IP) uint8_t _ip[4] = {192,168,0,128}; uint8_t _gw[4] = {192,168,0,1}; uint8_t _sn[4] = {255,255,255,0}; #endif -#ifdef MQTT_HOME_ASSISTANT_SUPPORT +#if defined(MQTT_HOME_ASSISTANT_SUPPORT) #define MQTT_HOME_ASSISTANT_0_84_SUPPORT // Comment if using HA version < 0.84 #endif -#if defined(USE_WS2812FX_DMA) and defined(USE_WS2812FX_UART) -#error "Cant have both DMA and UART method." -#endif -#if defined(ENABLE_MQTT) and defined(ENABLE_AMQTT) -#error "Cant have both PubSubClient and AsyncMQTT enabled. Choose either one." -#endif -#if ( (defined(ENABLE_HOMEASSISTANT) and !defined(ENABLE_MQTT)) and (defined(ENABLE_HOMEASSISTANT) and !defined(ENABLE_AMQTT)) ) +#if defined(ENABLE_HOMEASSISTANT) and !defined(ENABLE_MQTT) #error "To use HA, you have to either enable PubCubClient or AsyncMQTT" #endif -#if ( !defined(ENABLE_HOMEASSISTANT) and defined(MQTT_HOME_ASSISTANT_SUPPORT) ) +#if !defined(ENABLE_HOMEASSISTANT) and defined(MQTT_HOME_ASSISTANT_SUPPORT) #error "To use HA support, you have to either enable Homeassistant component" #endif // parameters for automatically cycling favorite patterns -uint32_t autoParams[][4] = { // color, speed, mode, duration (seconds) - {0xff000000, 120, 1, 5}, // blink red for 5 seconds - {0x00ff0000, 120, 3, 10}, // wipe green for 10 seconds - {0x0000ff00, 196, 14, 5}, // dual scan blue for 5 seconds - {0x0000ff00, 196, 46, 15} // fireworks for 15 seconds +uint32_t autoParams[][6] = { // main_color, back_color, xtra_color, speed, mode, duration (seconds) + {0xff000000, 0x00ff0000, 0x00000000, 200, 1, 5}, // blink red/geen for 5 seconds + {0x00ff0000, 0x0000ff00, 0x00000000, 200, 3, 10}, // wipe green/blue for 10 seconds + {0x0000ff00, 0xff000000, 0x00000000, 60, 14, 10}, // dual scan blue on red for 10 seconds + {0x0000ff00, 0xff000000, 0x00000000, 40, 45, 15}, // fireworks blue/red for 15 seconds + {0xff000000, 0x00ff0000, 0x0000ff00, 40, 54, 15} // tricolor chase red/green/blue for 15 seconds }; -#if defined(ENABLE_MQTT) or defined(ENABLE_AMQTT) - #ifdef ENABLE_MQTT +#if defined(ENABLE_MQTT) + char mqtt_buf[80]; + char mqtt_intopic[strlen(HOSTNAME) + 3 + 1]; // Topic in will be: /in + char mqtt_outtopic[strlen(HOSTNAME) + 4 + 1]; // Topic out will be: /out + #if ENABLE_MQTT == 0 #define MQTT_MAX_PACKET_SIZE 2048 #define MQTT_MAX_RECONNECT_TRIES 4 - int mqtt_reconnect_retries = 0; - char mqtt_intopic[strlen(HOSTNAME) + 4 + 5]; // Topic in will be: /in - char mqtt_outtopic[strlen(HOSTNAME) + 5 + 5]; // Topic out will be: /out uint8_t qossub = 0; // PubSubClient can sub qos 0 or 1 #endif - #ifdef ENABLE_AMQTT - String mqtt_intopic = String(HOSTNAME) + "/in"; - String mqtt_outtopic = String(HOSTNAME) + "/out"; + #if ENABLE_MQTT == 1 uint8_t qossub = 0; // AMQTT can sub qos 0 or 1 or 2 uint8_t qospub = 0; // AMQTT can pub qos 0 or 1 or 2 #endif - #ifdef ENABLE_HOMEASSISTANT - String mqtt_ha = "home/" + String(HOSTNAME) + "_ha/"; - String mqtt_ha_state_in = mqtt_ha + "state/in"; - String mqtt_ha_state_out = mqtt_ha + "state/out"; - + #if defined(ENABLE_HOMEASSISTANT) + char mqtt_ha_state_in[5 + strlen(HOSTNAME) + 12 + 1]; // Topic in will be: home/_ha/state/in" + char mqtt_ha_state_out[5 + strlen(HOSTNAME) + 13 + 1]; // Topic in will be: home/_ha/state/out" const char* on_cmd = "ON"; const char* off_cmd = "OFF"; - bool stateOn = false; - bool animation_on = false; bool new_ha_mqtt_msg = false; uint16_t color_temp = 327; // min is 154 and max is 500 #endif - //#define ENABLE_MQTT_HOSTNAME_CHIPID // Uncomment/comment to add ESPChipID to end of MQTT hostname - #ifdef ENABLE_MQTT_HOSTNAME_CHIPID + #if defined(ENABLE_MQTT_HOSTNAME_CHIPID) char mqtt_clientid[64]; #else const char* mqtt_clientid = HOSTNAME; @@ -114,16 +110,8 @@ uint32_t autoParams[][4] = { // color, speed, mode, duration (seconds) #define DBG_OUTPUT_PORT Serial // Set debug output port // List of all color modes -#ifdef ENABLE_LEGACY_ANIMATIONS - enum MODE {OFF, AUTO, TV, E131, SET_MODE, HOLD, CUSTOM, SETCOLOR, SETSPEED, BRIGHTNESS, WIPE, RAINBOW, RAINBOWCYCLE, THEATERCHASE, TWINKLERANDOM, THEATERCHASERAINBOW}; - MODE mode = RAINBOW; // Standard mode that is active when software starts -#else - enum MODE {OFF, AUTO, TV, E131, SET_MODE, HOLD, CUSTOM, SETCOLOR, SETSPEED, BRIGHTNESS}; - MODE mode = SET_MODE; // Standard mode that is active when software starts -#endif -#ifdef ENABLE_TV - bool exit_func = false; // Global helper variable to get out of the color modes when mode changes -#endif +enum MODE {OFF, AUTO, TV, E131, CUSTOM, HOLD, SET_ALL, SET_MODE, SET_COLOR, SET_SPEED, SET_BRIGHTNESS}; +MODE mode = SET_MODE; // 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 @@ -133,6 +121,7 @@ int ws2812fx_mode = 0; // Helper variable to set WS2812FX modes bool shouldSaveConfig = false; // For WiFiManger custom config +uint32_t hex_colors[3] = {}; // Color array for setting WS2812FX struct ledstate // Data structure to store a state of a single led { uint8_t red; @@ -144,33 +133,19 @@ struct ledstate // Data structure to store a state of a single le typedef struct ledstate LEDState; // Define the datatype LEDState LEDState ledstates[NUMLEDS]; // Get an array of led states to store the state of the whole strip LEDState main_color = { 255, 0, 0, 0 }; // Store the "main color" of the strip used in single color modes +LEDState back_color = { 0, 0, 0, 0 }; // Store the "2nd color" of the strip used in single color modes +LEDState xtra_color = { 0, 0, 0, 0 }; // Store the "3rd color" of the strip used in single color modes - -#define ENABLE_STATE_SAVE_SPIFFS // If defined, saves state on SPIFFS -//#define ENABLE_STATE_SAVE_EEPROM // If defined, save state on reboot - -char beforeoffauto_state[36]; // Keeps the state representation before auto mode -#ifdef ENABLE_STATE_SAVE_EEPROM - char current_state[36]; // Keeps the current state representation - char last_state[36]; // Save the last state as string representation - unsigned long time_statechange = 0; // Time when the state last changed - int timeout_statechange_save = 5000; // Timeout in ms to wait before state is saved - bool state_save_requested = false; // State has to be saved after timeout -#endif -#ifdef ENABLE_STATE_SAVE_SPIFFS - bool updateStateFS = false; -#endif +char last_state[67]; // Keeps the state representation before auto or off mode +bool updateState = false; // Button handling -#if defined(ENABLE_BUTTON) || defined(ENABLE_BUTTON_GY33) - boolean buttonState = false; -#endif - -#ifdef ENABLE_BUTTON - #define BTN_MODE_SHORT "STA| 1| 0|245|196| 0| 0| 0|255" // Static white - #define BTN_MODE_MEDIUM "STA| 1| 48|245|196|255|102| 0| 0" // Fire flicker - #define BTN_MODE_LONG "STA| 1| 46|253|196|255|102| 0| 0" // Fireworks random +#if defined(ENABLE_BUTTON) +//#define BTN_MODE_SHORT "STA|mo|fxm| h| s| r1| g1| b1| w1| r2| g2| b2| w2| r3| g3| b3| w3" // Example + #define BTN_MODE_SHORT "STA| 5| 0|255|196| 0| 0| 0|255| 0| 0| 0| 0| 0| 0| 0| 0" // Static white + #define BTN_MODE_MEDIUM "STA| 5| 48|200|196|255|102| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0" // Fire flicker + #define BTN_MODE_LONG "STA| 5| 46|200|196|255|102| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0" // Fireworks random unsigned long keyPrevMillis = 0; const unsigned long keySampleIntervalMs = 25; byte longKeyPressCountMax = 80; // 80 * 25 = 2000 ms @@ -179,7 +154,7 @@ char beforeoffauto_state[36]; // Keeps the state representation befor byte prevKeyState = HIGH; // button is active low #endif -#ifdef ENABLE_BUTTON_GY33 +#if defined(ENABLE_BUTTON_GY33) unsigned long keyPrevMillis_gy33 = 0; const unsigned long keySampleIntervalMs_gy33 = 25; byte longKeyPressCountMax_gy33 = 80; // 80 * 25 = 2000 ms diff --git a/Arduino/McLighting/colormodes.h b/Arduino/McLighting/mode_tv.h similarity index 75% rename from Arduino/McLighting/colormodes.h rename to Arduino/McLighting/mode_tv.h index 039c464..7871484 100644 --- a/Arduino/McLighting/colormodes.h +++ b/Arduino/McLighting/mode_tv.h @@ -1,100 +1,78 @@ -// *************************************************************************** -// Color modes -// *************************************************************************** - -int dipInterval = 10; -int darkTime = 250; -unsigned long currentDipTime; -unsigned long dipStartTime; -unsigned long currentMillis; -int ledState = LOW; -long previousMillis = 0; -int led = 5; -int interval = 2000; -int twitch = 50; -int dipCount = 0; -int analogLevel = 100; -boolean timeToDip = false; -int ledStates[NUMLEDS]; - - -void hsb2rgbAN1(uint16_t index, uint8_t sat, uint8_t bright, uint8_t myled) { - // Source: https://blog.adafruit.com/2012/03/14/constant-brightness-hsb-to-rgb-algorithm/ - uint8_t temp[5], n = (index >> 8) % 3; - temp[0] = temp[3] = (uint8_t)(( (sat ^ 255) * bright) / 255); - temp[1] = temp[4] = (uint8_t)((((( (index & 255) * sat) / 255) + (sat ^ 255)) * bright) / 255); - temp[2] = (uint8_t)(((((((index & 255) ^ 255) * sat) / 255) + (sat ^ 255)) * bright) / 255); - - strip.setPixelColor(myled, temp[n + 2], temp[n + 1], temp[n], 0); -} - - -void updateLed (int led, int brightness) { - ledStates[led] = brightness; - - for (int i=0; i interval) - { - previousMillis = currentMillis; - //interval = random(750,4001);//Adjusts the interval for more/less frequent random light changes - interval = random(1000-(ws2812fx_speed*2),5001-(ws2812fx_speed*8)); - twitch = random(40,100);// Twitch provides motion effect but can be a bit much if too high - dipCount = dipCount++; - } - if(currentMillis-previousMillis dipInterval) - { - DBG_OUTPUT_PORT.println("dip"); - timeToDip = true; - dipCount = 0; - dipStartTime = millis(); - darkTime = random(50,150); - dipInterval = random(5,250);// cycles of flicker - } - //strip.show(); - } - } - else - { - DBG_OUTPUT_PORT.println("Dip Time"); - currentDipTime = millis(); - if (currentDipTime - dipStartTime < darkTime) - { - for (int i=3; i> 8) % 3; + temp[0] = temp[3] = (uint8_t)(( (sat ^ 255) * bright) / 255); + temp[1] = temp[4] = (uint8_t)((((( (index & 255) * sat) / 255) + (sat ^ 255)) * bright) / 255); + temp[2] = (uint8_t)(((((((index & 255) ^ 255) * sat) / 255) + (sat ^ 255)) * bright) / 255); + strip.setPixelColor(myled, temp[n + 2], temp[n + 1], temp[n], 0); +} + + +void updateLed (int led, int brightness) { + ledStates[led] = brightness; + for (int i=0; i interval) { + previousMillis = currentMillis; + //interval = random(750,4001);//Adjusts the interval for more/less frequent random light changes + interval = random(1000-(ws2812fx_speed*2),5001-(ws2812fx_speed*8)); + twitch = random(40,100);// Twitch provides motion effect but can be a bit much if too high + dipCount = dipCount++; + } + if(currentMillis-previousMillis dipInterval) { + DBG_OUTPUT_PORT.println("dip"); + timeToDip = true; + dipCount = 0; + dipStartTime = millis(); + darkTime = random(50,150); + dipInterval = random(5,250);// cycles of flicker + } + } + } else { + DBG_OUTPUT_PORT.println("Dip Time"); + currentDipTime = millis(); + if (currentDipTime - dipStartTime < darkTime) { + for (int i=3; i NUMLEDS) ? (NUMLEDS - multipacketOffset) : 128; + #else*/ + uint16_t multipacketOffset = (universe - START_UNIVERSE) * 170; //if more than 170 LEDs * 3 colors = 510 channels, client will send in next higher universe if (NUMLEDS <= multipacketOffset) return; uint16_t len = (170 + multipacketOffset > NUMLEDS) ? (NUMLEDS - multipacketOffset) : 170; +/* #endif */ for (uint16_t i = 0; i < len; i++){ uint16_t j = i * 3; - strip.setPixelColor(i + multipacketOffset, data[j], data[j + 1], data[j + 2]); +/* #if defined(RGBW) + strip.setPixelColor(i + multipacketOffset, data[j], data[j + 1], data[j + 2], data[j + 3]); + #else */ + strip.setPixelColor(i + multipacketOffset, data[j], data[j + 1], data[j + 2], 0); +/* #endif */ } strip.show(); - checkForRequests(); } } #endif -#ifdef ENABLE_HOMEASSISTANT -void tickerSendState(){ - new_ha_mqtt_msg = true; +// Call convertColors whenever main_color, back_color or xtra_color changes. +void convertColors() { + hex_colors[0] = (uint32_t)(main_color.white << 24) | (main_color.red << 16) | (main_color.green << 8) | main_color.blue; + hex_colors[1] = (uint32_t)(back_color.white << 24) | (back_color.red << 16) | (back_color.green << 8) | back_color.blue; + hex_colors[2] = (uint32_t)(xtra_color.white << 24) | (xtra_color.red << 16) | (xtra_color.green << 8) | xtra_color.blue; } -#endif -#ifdef ENABLE_STATE_SAVE_SPIFFS -void tickerSpiffsSaveState(){ - updateStateFS = true; -} -#endif void getArgs() { if (server.arg("rgb") != "") { @@ -67,6 +74,46 @@ void getArgs() { main_color.white = server.arg("w").toInt(); } } + if (server.arg("rgb2") != "") { + uint32_t rgb2 = (uint32_t) strtoul(server.arg("rgb2").c_str(), NULL, 16); + back_color.white = ((rgb2 >> 24) & 0xFF); + back_color.red = ((rgb2 >> 16) & 0xFF); + back_color.green = ((rgb2 >> 8) & 0xFF); + back_color.blue = ((rgb2 >> 0) & 0xFF); + } else { + if ((server.arg("r2") != "") && (server.arg("r2").toInt() >= 0) && (server.arg("r2").toInt() <= 255)) { + back_color.red = server.arg("r2").toInt(); + } + if ((server.arg("g2") != "") && (server.arg("g2").toInt() >= 0) && (server.arg("g2").toInt() <= 255)) { + back_color.green = server.arg("g2").toInt(); + } + if ((server.arg("b2") != "") && (server.arg("b2").toInt() >= 0) && (server.arg("b2").toInt() <= 255)) { + back_color.blue = server.arg("b2").toInt(); + } + if ((server.arg("w2") != "") && (server.arg("w2").toInt() >= 0) && (server.arg("w2").toInt() <= 255)){ + back_color.white = server.arg("w2").toInt(); + } + } + if (server.arg("rgb3") != "") { + uint32_t rgb3 = (uint32_t) strtoul(server.arg("rgb3").c_str(), NULL, 16); + xtra_color.white = ((rgb3 >> 24) & 0xFF); + xtra_color.red = ((rgb3 >> 16) & 0xFF); + xtra_color.green = ((rgb3 >> 8) & 0xFF); + xtra_color.blue = ((rgb3 >> 0) & 0xFF); + } else { + if ((server.arg("r3") != "") && (server.arg("r3").toInt() >= 0) && (server.arg("r3").toInt() <= 255)) { + xtra_color.red = server.arg("r3").toInt(); + } + if ((server.arg("g3") != "") && (server.arg("g3").toInt() >= 0) && (server.arg("g3").toInt() <= 255)) { + xtra_color.green = server.arg("g3").toInt(); + } + if ((server.arg("b3") != "") && (server.arg("b3").toInt() >= 0) && (server.arg("b3").toInt() <= 255)) { + xtra_color.blue = server.arg("b3").toInt(); + } + if ((server.arg("w3") != "") && (server.arg("w3").toInt() >= 0) && (server.arg("w3").toInt() <= 255)){ + xtra_color.white = server.arg("w3").toInt(); + } + } if ((server.arg("s") != "") && (server.arg("s").toInt() >= 0) && (server.arg("s").toInt() <= 255)) { ws2812fx_speed = constrain(server.arg("s").toInt(), 0, 255); } @@ -85,21 +132,17 @@ void getArgs() { main_color.green = constrain(main_color.green, 0, 255); main_color.blue = constrain(main_color.blue, 0, 255); main_color.white = constrain(main_color.white, 0, 255); - - DBG_OUTPUT_PORT.print("Mode: "); - DBG_OUTPUT_PORT.print(mode); - DBG_OUTPUT_PORT.print(", Color: "); - DBG_OUTPUT_PORT.print(main_color.red); - DBG_OUTPUT_PORT.print(", "); - DBG_OUTPUT_PORT.print(main_color.green); - DBG_OUTPUT_PORT.print(", "); - DBG_OUTPUT_PORT.print(main_color.blue); - DBG_OUTPUT_PORT.print(", "); - DBG_OUTPUT_PORT.print(main_color.white); - DBG_OUTPUT_PORT.print(", Speed:"); - DBG_OUTPUT_PORT.print(ws2812fx_speed); - DBG_OUTPUT_PORT.print(", Brightness:"); - DBG_OUTPUT_PORT.println(brightness); + back_color.red = constrain(back_color.red, 0, 255); + back_color.green = constrain(back_color.green, 0, 255); + back_color.blue = constrain(back_color.blue, 0, 255); + back_color.white = constrain(back_color.white, 0, 255); + xtra_color.red = constrain(xtra_color.red, 0, 255); + xtra_color.green = constrain(xtra_color.green, 0, 255); + xtra_color.blue = constrain(xtra_color.blue, 0, 255); + xtra_color.white = constrain(xtra_color.white, 0, 255); + convertColors(); + DBG_OUTPUT_PORT.print("Get Args: "); + DBG_OUTPUT_PORT.println(listStatusJSON()); } @@ -126,12 +169,26 @@ 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); - #ifdef ENABLE_TV - exit_func = true; - #endif - prevmode = mode; - mode = SETCOLOR; + mode = SET_COLOR; +} + +void handleSetBackColor(uint8_t * mypayload) { + // decode rgb data + uint32_t rgb = (uint32_t) strtoul((const char *) &mypayload[2], NULL, 16); + back_color.white = ((rgb >> 24) & 0xFF); + back_color.red = ((rgb >> 16) & 0xFF); + back_color.green = ((rgb >> 8) & 0xFF); + back_color.blue = ((rgb >> 0) & 0xFF); + mode = SET_COLOR; +} +void handleSetXtraColor(uint8_t * mypayload) { + // decode rgb data + uint32_t rgb = (uint32_t) strtoul((const char *) &mypayload[3], NULL, 16); + xtra_color.white = ((rgb >> 24) & 0xFF); + xtra_color.red = ((rgb >> 16) & 0xFF); + xtra_color.green = ((rgb >> 8) & 0xFF); + xtra_color.blue = ((rgb >> 0) & 0xFF); + mode = SET_COLOR; } void handleSetAllMode(uint8_t * mypayload) { @@ -142,11 +199,8 @@ void handleSetAllMode(uint8_t * mypayload) { main_color.green = ((rgb >> 8) & 0xFF); main_color.blue = ((rgb >> 0) & 0xFF); DBG_OUTPUT_PORT.printf("WS: Set all leds to main color: R: [%u] G: [%u] B: [%u] W: [%u]\n", main_color.red, main_color.green, main_color.blue, main_color.white); - #ifdef ENABLE_TV - exit_func = true; - #endif ws2812fx_mode = FX_MODE_STATIC; - mode = SET_MODE; + mode = SET_ALL; } void handleSetSingleLED(uint8_t * mypayload, uint8_t firstChar = 0) { @@ -175,9 +229,6 @@ void handleSetSingleLED(uint8_t * mypayload, uint8_t firstChar = 0) { strip.setPixelColor(led, ledstates[led].red, ledstates[led].green, ledstates[led].blue, ledstates[led].white); strip.show(); } - #ifdef ENABLE_TV - exit_func = true; - #endif mode = CUSTOM; } @@ -228,11 +279,10 @@ void handleRangeDifferentColors(uint8_t * mypayload) { } void setModeByStateString(String saved_state_string) { -#ifdef ENABLE_TV - exit_func = true; -#endif String str_mode = getValue(saved_state_string, '|', 1); mode = static_cast(str_mode.toInt()); + DBG_OUTPUT_PORT.print("mode: "); + DBG_OUTPUT_PORT.println(mode); String str_ws2812fx_mode = getValue(saved_state_string, '|', 2); ws2812fx_mode = str_ws2812fx_mode.toInt(); String str_ws2812fx_speed = getValue(saved_state_string, '|', 3); @@ -247,123 +297,117 @@ void setModeByStateString(String saved_state_string) { main_color.blue = str_blue.toInt(); String str_white = getValue(saved_state_string, '|', 8); main_color.white = str_white.toInt(); - DBG_OUTPUT_PORT.printf("Mode: %d\n", mode); - DBG_OUTPUT_PORT.printf("ws2812fx_mode: %d\n", ws2812fx_mode); - DBG_OUTPUT_PORT.printf("ws2812fx_speed: %d\n", ws2812fx_speed); - DBG_OUTPUT_PORT.printf("brightness: %d\n", brightness); - DBG_OUTPUT_PORT.printf("main_color.red: %d\n", main_color.red); - DBG_OUTPUT_PORT.printf("main_color.green: %d\n", main_color.green); - DBG_OUTPUT_PORT.printf("main_color.blue: %d\n", main_color.blue); - DBG_OUTPUT_PORT.printf("main_color.white: %d\n", main_color.white); - - strip.setMode(ws2812fx_mode); - strip.setSpeed(convertSpeed(ws2812fx_speed)); - strip.setBrightness(brightness); - strip.setColor(main_color.red, main_color.green, main_color.blue, main_color.white); - strip.trigger(); + str_red = getValue(saved_state_string, '|', 9); + back_color.red = str_red.toInt(); + str_green = getValue(saved_state_string, '|', 10); + back_color.green = str_green.toInt(); + str_blue = getValue(saved_state_string, '|', 11); + back_color.blue = str_blue.toInt(); + str_white = getValue(saved_state_string, '|', 12); + back_color.white = str_white.toInt(); + str_red = getValue(saved_state_string, '|', 13); + xtra_color.red = str_red.toInt(); + str_green = getValue(saved_state_string, '|', 14); + xtra_color.green = str_green.toInt(); + str_blue = getValue(saved_state_string, '|', 15); + xtra_color.blue = str_blue.toInt(); + str_white = getValue(saved_state_string, '|', 16); + xtra_color.white = str_white.toInt(); + convertColors(); + DBG_OUTPUT_PORT.print("Set to state: "); + DBG_OUTPUT_PORT.println(listStatusJSON()); } -void handleSetNamedMode(String str_mode) { -#ifdef ENABLE_TV - exit_func = true; -#endif - - if (str_mode.startsWith("=off") or str_mode.startsWith("/off")) { +#if defined(ENABLE_LEGACY_ANIMATIONS) +void handleSetNamedMode(uint8_t * mypayload) { + if (strcmp((char *) &mypayload[1], "off") == 0) { mode = OFF; - #ifdef ENABLE_HOMEASSISTANT - stateOn = false; - #endif } - -#ifdef ENABLE_TV - if (str_mode.startsWith("=tv") or str_mode.startsWith("/tv")) { + + #if defined(ENABLE_TV) + if (strcmp((char *) &mypayload[1], "tv") == 0) { mode = TV; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif } -#endif + #endif -#ifdef ENABLE_E131 - if (str_mode.startsWith("=e131") or str_mode.startsWith("/e131")) { - if(strip.isRunning()) strip.stop(); + #if defined(ENABLE_E131) + if (strcmp((char *) &mypayload[1], "e131") == 0) { mode = E131; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif } -#endif - -#ifdef ENABLE_LEGACY_ANIMATIONS - if (str_mode.startsWith("=auto")) { + #endif + + if (strcmp((char *) &mypayload[1], "auto") == 0) { mode = AUTO; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif } - if (str_mode.startsWith("=all")) { + if (strcmp((char *) &mypayload[1], "all") == 0) { ws2812fx_mode = FX_MODE_STATIC; + mode = SET_ALL; + } + if (strcmp((char *) &mypayload[1], "wipe") == 0) { + ws2812fx_mode = FX_MODE_COLOR_WIPE; mode = SET_MODE; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif } - if (str_mode.startsWith("=wipe")) { - mode = WIPE; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif + if (strcmp((char *) &mypayload[1], "rainbow") == 0) { + ws2812fx_mode = FX_MODE_RAINBOW; + mode = SET_MODE; } - if (str_mode.startsWith("=rainbow")) { - mode = RAINBOW; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif + if (strcmp((char *) &mypayload[1], "rainbowCycle") == 0) { + ws2812fx_mode = FX_MODE_RAINBOW_CYCLE; + mode = SET_MODE; } - if (str_mode.startsWith("=rainbowCycle")) { - mode = RAINBOWCYCLE; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif + if (strcmp((char *) &mypayload[1], "theaterchase") == 0) { + ws2812fx_mode = FX_MODE_THEATER_CHASE; + mode = SET_MODE; } - if (str_mode.startsWith("=theaterchase")) { - mode = THEATERCHASE; - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - #endif + if (strcmp((char *) &mypayload[1], "twinkleRandom") == 0) { + ws2812fx_mode = FX_MODE_TWINKLE_RANDOM; + mode = SET_MODE; } - 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 (strcmp((char *) &mypayload[1], "theaterchaseRainbow") == 0) { + ws2812fx_mode = FX_MODE_THEATER_CHASE_RAINBOW; + mode = SET_MODE; } #endif } + void handleSetWS2812FXMode(uint8_t * mypayload) { - uint8_t ws2812fx_mode_tmp = (uint8_t) strtol((const char *) &mypayload[1], NULL, 10); - ws2812fx_mode = constrain(ws2812fx_mode_tmp, 0, strip.getModeCount() - 1); - #ifdef ENABLE_TV - exit_func = true; - #endif - mode = SET_MODE; + if (isDigit(mypayload[1])) { + ws2812fx_mode = (uint8_t) strtol((const char *) &mypayload[1], NULL, 10); + ws2812fx_mode = constrain(ws2812fx_mode, 0, strip.getModeCount() - 1); + mode = SET_MODE; + } else { + if (strcmp((char *) &mypayload[1], "off") == 0) { + mode = OFF; + } + + if (strcmp((char *) &mypayload[1], "auto") == 0) { + mode = AUTO; + } + + #if defined(ENABLE_TV) + if (strcmp((char *) &mypayload[1], "tv") == 0) { + mode = TV; + } + #endif + + #if defined(ENABLE_E131) + if (strcmp((char *) &mypayload[1], "e131") == 0) { + mode = E131; + } + #endif + } } String listStatusJSON(void) { - uint8_t tmp_mode = (mode == SET_MODE) ? (uint8_t) ws2812fx_mode : strip.getMode(); - - const size_t bufferSize = JSON_ARRAY_SIZE(3) + JSON_OBJECT_SIZE(6) + 500; + //uint8_t tmp_mode = (mode == SET_MODE) ? (uint8_t) ws2812fx_mode : strip.getMode(); + const size_t bufferSize = JSON_ARRAY_SIZE(12) + JSON_OBJECT_SIZE(6) + 150; DynamicJsonDocument jsonBuffer(bufferSize); JsonObject root = jsonBuffer.to(); root["mode"] = (uint8_t) mode; - root["ws2812fx_mode"] = tmp_mode; - root["ws2812fx_mode_name"] = strip.getModeName(tmp_mode); + root["ws2812fx_mode"] = ws2812fx_mode; + root["ws2812fx_mode_name"] = strip.getModeName(ws2812fx_mode); + //root["ws2812fx_mode"] = tmp_mode; + //root["ws2812fx_mode_name"] = strip.getModeName(tmp_mode); root["speed"] = ws2812fx_speed; root["brightness"] = brightness; JsonArray color = root.createNestedArray("color"); @@ -371,10 +415,17 @@ String listStatusJSON(void) { color.add(main_color.red); color.add(main_color.green); color.add(main_color.blue); - + color.add(back_color.white); + color.add(back_color.red); + color.add(back_color.green); + color.add(back_color.blue); + color.add(xtra_color.white); + color.add(xtra_color.red); + color.add(xtra_color.green); + color.add(xtra_color.blue); String json; serializeJson(root, json); - + jsonBuffer.clear(); return json; } @@ -384,32 +435,31 @@ void getStatusJSON() { } String listModesJSON(void) { - const size_t bufferSize = JSON_ARRAY_SIZE(strip.getModeCount()+1) + strip.getModeCount()*JSON_OBJECT_SIZE(2) + 1000; + const size_t bufferSize = JSON_ARRAY_SIZE(strip.getModeCount() + 3) + (strip.getModeCount() + 3)*JSON_OBJECT_SIZE(2) + 2000; DynamicJsonDocument jsonBuffer(bufferSize); - JsonArray json = jsonBuffer.to(); - JsonObject objectoff = json.createNestedObject(); + JsonArray root = jsonBuffer.to(); + JsonObject objectoff = root.createNestedObject(); objectoff["mode"] = "off"; objectoff["name"] = "OFF"; - #ifdef ENABLE_TV - JsonObject objecttv = json.createNestedObject(); + #if defined(ENABLE_TV) + JsonObject objecttv = root.createNestedObject(); objecttv["mode"] = "tv"; objecttv["name"] = "TV"; #endif - #ifdef ENABLE_E131 - JsonObject objecte131 = json.createNestedObject(); + #if defined(ENABLE_E131) + JsonObject objecte131 = root.createNestedObject(); objecte131["mode"] = "e131"; objecte131["name"] = "E131"; #endif for (uint8_t i = 0; i < strip.getModeCount(); i++) { - JsonObject object = json.createNestedObject(); + JsonObject object = root.createNestedObject(); object["mode"] = i; object["name"] = strip.getModeName(i); } - JsonObject object = json.createNestedObject(); - - String json_str; - serializeJson(json, json_str); - return json_str; + String json; + serializeJson(root, json); + jsonBuffer.clear(); + return json; } void getModesJSON() { @@ -460,15 +510,18 @@ void handleNotFound() { server.send ( 404, "text/plain", message ); } -// automatic cycling +// *************************************************************************** +// Functions and variables for automatic cycling +// *************************************************************************** Ticker autoTicker; int autoCount = 0; void autoTick() { - strip.setColor(autoParams[autoCount][0]); - strip.setSpeed(convertSpeed((uint8_t)autoParams[autoCount][1])); - strip.setMode((uint8_t)autoParams[autoCount][2]); - autoTicker.once((float)autoParams[autoCount][3], autoTick); + uint32_t setcolors[] = {autoParams[autoCount][0],autoParams[autoCount][1],autoParams[autoCount][2]}; + strip.setColors(0, setcolors); + strip.setSpeed(convertSpeed((uint8_t)autoParams[autoCount][3])); + strip.setMode((uint8_t)autoParams[autoCount][4]); + autoTicker.once((float)autoParams[autoCount][5], autoTick); DBG_OUTPUT_PORT.print("autoTick "); DBG_OUTPUT_PORT.println(autoCount); @@ -477,26 +530,19 @@ void autoTick() { } void handleAutoStart() { - if (mode!=AUTO) { - #ifdef ENABLE_TV - exit_func = true; - #endif - sprintf(beforeoffauto_state, "STA|%2d|%3d|%3d|%3d|%3d|%3d|%3d|%3d", mode, strip.getMode(), ws2812fx_speed, brightness, main_color.red, main_color.green, main_color.blue, main_color.white); - mode = AUTO; - autoCount = 0; - autoTick(); - strip.start(); - } + DBG_OUTPUT_PORT.println("Starting AUTO mode."); + autoCount = 0; + autoTick(); } void handleAutoStop() { - if (mode==AUTO) { + DBG_OUTPUT_PORT.println("Stopping AUTO mode."); autoTicker.detach(); - strip.stop(); - setModeByStateString(beforeoffauto_state); - } } +// *************************************************************************** +// Functions and variables +// *************************************************************************** void Dbg_Prefix(bool mqtt, uint8_t num) { if (mqtt == true) { DBG_OUTPUT_PORT.print("MQTT: "); @@ -507,70 +553,39 @@ void Dbg_Prefix(bool mqtt, uint8_t num) { } void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) { - // # ==> Set main color + // # ==> Set main color - ## ==> Set 2nd color - ### ==> Set 3rd color if (payload[0] == '#') { - handleSetMainColor(payload); - Dbg_Prefix(mqtt, num); - DBG_OUTPUT_PORT.printf("Set main color to: R: [%u] G: [%u] B: [%u] W: [%u]\n", main_color.red, main_color.green, main_color.blue, main_color.white); - #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 - stateOn = true; - if(!ha_send_data.active()) ha_send_data.once(5, tickerSendState); + #if defined(ENABLE_MQTT) + sprintf(mqtt_buf, "OK %s", payload); #endif + if (payload[2] == '#') { + handleSetXtraColor(payload); + DBG_OUTPUT_PORT.printf("Set 3rd color to: R: [%u] G: [%u] B: [%u] W: [%u]\n", xtra_color.red, xtra_color.green, xtra_color.blue, xtra_color.white); + } else if (payload[1] == '#') { + handleSetBackColor(payload); + DBG_OUTPUT_PORT.printf("Set 2nd color to: R: [%u] G: [%u] B: [%u] W: [%u]\n", back_color.red, back_color.green, back_color.blue, back_color.white); + } else { + handleSetMainColor(payload); + DBG_OUTPUT_PORT.printf("Set main color to: R: [%u] G: [%u] B: [%u] W: [%u]\n", main_color.red, main_color.green, main_color.blue, main_color.white); + } } // ? ==> Set speed if (payload[0] == '?') { uint8_t d = (uint8_t) strtol((const char *) &payload[1], NULL, 10); ws2812fx_speed = constrain(d, 0, 255); - #ifdef ENABLE_TV - exit_func = true; - #endif - prevmode = mode; - mode = SETSPEED; + mode = SET_SPEED; Dbg_Prefix(mqtt, num); DBG_OUTPUT_PORT.printf("Set speed to: [%u]\n", ws2812fx_speed); - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - if(!ha_send_data.active()) ha_send_data.once(5, tickerSendState); - #endif - #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 } // % ==> Set brightness if (payload[0] == '%') { uint8_t b = (uint8_t) strtol((const char *) &payload[1], NULL, 10); brightness = constrain(b, 0, 255); - #ifdef ENABLE_TV - exit_func = true; - #endif - prevmode = mode; - mode = BRIGHTNESS; + mode = SET_BRIGHTNESS; Dbg_Prefix(mqtt, num); DBG_OUTPUT_PORT.printf("Set brightness to: [%u]\n", brightness); - #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 - stateOn = true; - 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 } // * ==> Set main color and light all LEDs (Shortcut) @@ -578,45 +593,26 @@ void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) { handleSetAllMode(payload); Dbg_Prefix(mqtt, num); DBG_OUTPUT_PORT.printf("Set main color and light all LEDs [%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 - stateOn = true; - 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 } // ! ==> Set single LED in given color if (payload[0] == '!') { handleSetSingleLED(payload, 1); Dbg_Prefix(mqtt, num); + #if defined(ENABLE_MQTT) + sprintf(mqtt_buf, "OK %s", payload); + #endif DBG_OUTPUT_PORT.printf("Set single LED in given color [%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 } // + ==> Set multiple LED in the given colors if (payload[0] == '+') { handleSetDifferentColors(payload); Dbg_Prefix(mqtt, num); + #if defined(ENABLE_MQTT) + sprintf(mqtt_buf, "OK %s", payload); + #endif DBG_OUTPUT_PORT.printf("Set multiple LEDs in given color [%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 } // + ==> Set range of LEDs in the given color @@ -624,36 +620,18 @@ void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) { handleRangeDifferentColors(payload); Dbg_Prefix(mqtt, num); DBG_OUTPUT_PORT.printf("Set range of LEDs in given color [%s]\n", payload); - 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()); + #if defined(ENABLE_MQTT) + sprintf(mqtt_buf, "OK %s", payload); #endif } - #ifdef ENABLE_LEGACY_ANIMATIONS + #if defined(ENABLE_LEGACY_ANIMATIONS) // = ==> Activate named mode if (payload[0] == '=') { // we get mode data - String str_mode = String((char *) &payload[0]); - - handleSetNamedMode(str_mode); + handleSetNamedMode(payload); Dbg_Prefix(mqtt, num); DBG_OUTPUT_PORT.printf("Activated mode [%u]!\n", mode); - #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 @@ -662,11 +640,13 @@ void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) { String json = listStatusJSON(); if (mqtt == true) { DBG_OUTPUT_PORT.print("MQTT: "); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, json.c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, json.c_str()); + #if defined(ENABLE_MQTT) + #if ENABLE_MQTT == 0 + mqtt_client.publish(mqtt_outtopic, json.c_str()); + #endif + #if ENABLE_MQTT == 1 + amqttClient.publish(mqtt_outtopic, qospub, false, json.c_str()); + #endif #endif } else { DBG_OUTPUT_PORT.print("WS: "); @@ -681,19 +661,21 @@ void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) { String json = listModesJSON(); if (mqtt == true) { DBG_OUTPUT_PORT.print("MQTT: "); - #ifdef ENABLE_MQTT - // TODO: Fix this, doesn't return anything. Too long? - // Hint: https://github.com/knolleary/pubsubclient/issues/110 - DBG_OUTPUT_PORT.printf("Error: Not implemented. Message too large for pubsubclient."); - mqtt_client.publish(mqtt_outtopic, "ERROR: Not implemented. Message too large for pubsubclient."); - //String json_modes = listModesJSON(); - //DBG_OUTPUT_PORT.printf(json_modes.c_str()); - - //int res = mqtt_client.publish(mqtt_outtopic, json_modes.c_str(), json_modes.length()); - //DBG_OUTPUT_PORT.printf("Result: %d / %d", res, json_modes.length()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, json.c_str()); + #if defined(ENABLE_MQTT) + #if ENABLE_MQTT == 0 + // TODO: Fix this, doesn't return anything. Too long? + // Hint: https://github.com/knolleary/pubsubclient/issues/110 + DBG_OUTPUT_PORT.printf("Error: Not implemented. Message too large for pubsubclient."); + mqtt_client.publish(mqtt_outtopic, "ERROR: Not implemented. Message too large for pubsubclient."); + //String json_modes = listModesJSON(); + //DBG_OUTPUT_PORT.printf(json_modes.c_str()); + + //int res = mqtt_client.publish(mqtt_outtopic, json_modes.c_str(), json_modes.length()); + //DBG_OUTPUT_PORT.printf("Result: %d / %d", res, json_modes.length()); + #endif + #if ENABLE_MQTT == 1 + amqttClient.publish(mqtt_outtopic, qospub, false, json.c_str()); + #endif #endif } else { DBG_OUTPUT_PORT.print("WS: "); @@ -707,23 +689,8 @@ void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) { // / ==> Set WS2812 mode. if (payload[0] == '/') { handleSetWS2812FXMode(payload); - String str_mode = String((char *) &payload[0]); - handleSetNamedMode(str_mode); Dbg_Prefix(mqtt, num); DBG_OUTPUT_PORT.printf("Set WS2812 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 - stateOn = true; - 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 } } @@ -752,138 +719,138 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght // start auto cycling if (strcmp((char *)payload, "start") == 0 ) { - handleAutoStart(); + mode = AUTO; webSocket.sendTXT(num, "OK"); } // stop auto cycling if (strcmp((char *)payload, "stop") == 0 ) { - handleAutoStop(); + mode = SET_ALL; webSocket.sendTXT(num, "OK"); } break; } } -#if defined(ENABLE_TV) || defined(ENABLE_E131) - void checkForRequests() { - webSocket.loop(); - server.handleClient(); - #ifdef ENABLE_MQTT - mqtt_client.loop(); - #endif - } -#endif - - // *************************************************************************** // MQTT callback / connection handler // *************************************************************************** -#if defined(ENABLE_MQTT) or defined(ENABLE_AMQTT) +#if defined(ENABLE_MQTT) - #ifdef ENABLE_HOMEASSISTANT + #if defined(ENABLE_HOMEASSISTANT) + void tickerSendState(){ + new_ha_mqtt_msg = true; + } LEDState temp2rgb(unsigned int kelvin) { - int tmp_internal = kelvin / 100.0; - LEDState tmp_color; + int tmp_internal = kelvin / 100.0; + LEDState tmp_color; - // red - if (tmp_internal <= 66) { - tmp_color.red = 255; - } else { - float tmp_red = 329.698727446 * pow(tmp_internal - 60, -0.1332047592); - if (tmp_red < 0) { - tmp_color.red = 0; - } else if (tmp_red > 255) { - tmp_color.red = 255; - } else { - tmp_color.red = tmp_red; - } - } - - // green - if (tmp_internal <= 66) { - float tmp_green = 99.4708025861 * log(tmp_internal) - 161.1195681661; - if (tmp_green < 0) { - tmp_color.green = 0; - } else if (tmp_green > 255) { - tmp_color.green = 255; - } else { - tmp_color.green = tmp_green; - } - } else { - float tmp_green = 288.1221695283 * pow(tmp_internal - 60, -0.0755148492); - if (tmp_green < 0) { - tmp_color.green = 0; - } else if (tmp_green > 255) { - tmp_color.green = 255; - } else { - tmp_color.green = tmp_green; - } - } - - // blue - if (tmp_internal >= 66) { - tmp_color.blue = 255; - } else if (tmp_internal <= 19) { - tmp_color.blue = 0; - } else { - float tmp_blue = 138.5177312231 * log(tmp_internal - 10) - 305.0447927307; - if (tmp_blue < 0) { - tmp_color.blue = 0; - } else if (tmp_blue > 255) { - tmp_color.blue = 255; - } else { - tmp_color.blue = tmp_blue; - } - } - return tmp_color; - } - - void sendState() { - const size_t bufferSize = JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(6) + 500; - DynamicJsonDocument jsonBuffer(bufferSize); - JsonObject root = jsonBuffer.to(); - - root["state"] = (stateOn) ? on_cmd : off_cmd; - JsonObject color = root.createNestedObject("color"); - color["r"] = main_color.red; - color["g"] = main_color.green; - color["b"] = main_color.blue; - color["w"] = main_color.white; - - root["brightness"] = brightness; - - root["color_temp"] = color_temp; - - root["speed"] = ws2812fx_speed; - - //char modeName[30]; - //strncpy_P(modeName, (PGM_P)strip.getModeName(strip.getMode()), sizeof(modeName)); // copy from progmem - #if defined(ENABLE_HOMEASSISTANT) - if (mode == OFF){ - root["effect"] = "OFF"; - } else { - if (mode == TV){ - root["effect"] = "TV"; + // red + if (tmp_internal <= 66) { + tmp_color.red = 255; + } else { + float tmp_red = 329.698727446 * pow(tmp_internal - 60, -0.1332047592); + if (tmp_red < 0) { + tmp_color.red = 0; + } else if (tmp_red > 255) { + tmp_color.red = 255; } else { - if (mode == E131){ - root["effect"] = "E131"; - } else { - root["effect"] = strip.getModeName(strip.getMode()); - } + tmp_color.red = tmp_red; } - } - #endif + } + + // green + if (tmp_internal <= 66) { + float tmp_green = 99.4708025861 * log(tmp_internal) - 161.1195681661; + if (tmp_green < 0) { + tmp_color.green = 0; + } else if (tmp_green > 255) { + tmp_color.green = 255; + } else { + tmp_color.green = tmp_green; + } + } else { + float tmp_green = 288.1221695283 * pow(tmp_internal - 60, -0.0755148492); + if (tmp_green < 0) { + tmp_color.green = 0; + } else if (tmp_green > 255) { + tmp_color.green = 255; + } else { + tmp_color.green = tmp_green; + } + } + + // blue + if (tmp_internal >= 66) { + tmp_color.blue = 255; + } else if (tmp_internal <= 19) { + tmp_color.blue = 0; + } else { + float tmp_blue = 138.5177312231 * log(tmp_internal - 10) - 305.0447927307; + if (tmp_blue < 0) { + tmp_color.blue = 0; + } else if (tmp_blue > 255) { + tmp_color.blue = 255; + } else { + tmp_color.blue = tmp_blue; + } + } + return tmp_color; + } + + void sendState() { + const size_t bufferSize = JSON_OBJECT_SIZE(6) + JSON_OBJECT_SIZE(12) + 1000; + DynamicJsonDocument jsonBuffer(bufferSize); + JsonObject root = jsonBuffer.to(); + root["state"] = (mode != OFF) ? on_cmd : off_cmd; + JsonObject color = root.createNestedObject("color"); + color["r"] = main_color.red; + color["g"] = main_color.green; + color["b"] = main_color.blue; + color["w"] = main_color.white; + color["r2"] = back_color.red; + color["g2"] = back_color.green; + color["b2"] = back_color.blue; + color["w2"] = back_color.white; + color["r3"] = xtra_color.red; + color["g3"] = xtra_color.green; + color["b3"] = xtra_color.blue; + color["w3"] = xtra_color.white; + root["brightness"] = brightness; + root["color_temp"] = color_temp; + root["speed"] = ws2812fx_speed; + //char modeName[30]; + //strncpy_P(modeName, (PGM_P)strip.getModeName(strip.getMode()), sizeof(modeName)); // copy from progmem + #if defined(ENABLE_HOMEASSISTANT) + if (mode == OFF){ + root["effect"] = "OFF"; + } else { + if (mode == AUTO){ + root["effect"] = "AUTO"; + } else { + if (mode == TV){ + root["effect"] = "TV"; + } else { + if (mode == E131){ + root["effect"] = "E131"; + } else { + root["effect"] = strip.getModeName(strip.getMode()); + } + } + } + } + #endif char buffer[measureJson(root) + 1]; serializeJson(root, buffer, sizeof(buffer)); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_ha_state_out.c_str(), buffer, true); - DBG_OUTPUT_PORT.printf("MQTT: Send [%s]: %s\n", mqtt_ha_state_out.c_str(), buffer); + jsonBuffer.clear(); + #if ENABLE_MQTT == 0 + mqtt_client.publish(mqtt_ha_state_out, buffer, true); + DBG_OUTPUT_PORT.printf("MQTT: Send [%s]: %s\n", mqtt_ha_state_out, buffer); #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_ha_state_out.c_str(), 1, true, buffer); - DBG_OUTPUT_PORT.printf("MQTT: Send [%s]: %s\n", mqtt_ha_state_out.c_str(), buffer); + #if ENABLE_MQTT == 1 + amqttClient.publish(mqtt_ha_state_out, 1, true, buffer); + DBG_OUTPUT_PORT.printf("MQTT: Send [%s]: %s\n", mqtt_ha_state_out, buffer); #endif new_ha_mqtt_msg = false; ha_send_data.detach(); @@ -891,12 +858,13 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght } bool processJson(char* message) { - const size_t bufferSize = JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(5) + 150; + const size_t bufferSize = JSON_OBJECT_SIZE(5) + JSON_OBJECT_SIZE(12) + 500; DynamicJsonDocument jsonBuffer(bufferSize); DeserializationError error = deserializeJson(jsonBuffer, message); if (error) { DBG_OUTPUT_PORT.print("parseObject() failed: "); DBG_OUTPUT_PORT.println(error.c_str()); + jsonBuffer.clear(); return false; } //DBG_OUTPUT_PORT.println("JSON ParseObject() done!"); @@ -904,15 +872,12 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght if (root.containsKey("state")) { const char* state_in = root["state"]; - if (strcmp(state_in, on_cmd) == 0 and !(animation_on)) { - stateOn = true; - ws2812fx_mode = FX_MODE_STATIC; - mode = SET_MODE; + if (strcmp(state_in, on_cmd) == 0) { + mode = SET_ALL; } else if (strcmp(state_in, off_cmd) == 0) { - stateOn = false; - animation_on = false; mode = OFF; + jsonBuffer.clear(); return true; } } @@ -923,17 +888,22 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght main_color.green = (uint8_t) color["g"]; main_color.blue = (uint8_t) color["b"]; main_color.white = (uint8_t) color["w"]; - prevmode = mode; - mode = SETCOLOR; + back_color.red = (uint8_t) color["r2"]; + back_color.green = (uint8_t) color["g2"]; + back_color.blue = (uint8_t) color["b2"]; + back_color.white = (uint8_t) color["w2"]; + xtra_color.red = (uint8_t) color["r3"]; + xtra_color.green = (uint8_t) color["g3"]; + xtra_color.blue = (uint8_t) color["b3"]; + xtra_color.white = (uint8_t) color["w3"]; + mode = SET_COLOR; } if (root.containsKey("speed")) { uint8_t json_speed = constrain((uint8_t) root["speed"], 0, 255); if (json_speed != ws2812fx_speed) { ws2812fx_speed = json_speed; - //if(stateOn) mode = SETSPEED; - prevmode = mode; - mode = SETSPEED; + mode = SET_SPEED; } } @@ -942,30 +912,37 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght color_temp = (uint16_t) root["color_temp"]; unsigned int kelvin = 1000000 / color_temp; main_color = temp2rgb(kelvin); - prevmode = mode; - mode = SETCOLOR; + mode = SET_COLOR; } if (root.containsKey("brightness")) { uint8_t json_brightness = constrain((uint8_t) root["brightness"], 0, 255); //fix #224 if (json_brightness != brightness) { - prevmode = mode; - mode = BRIGHTNESS; + mode = SET_BRIGHTNESS; } } if (root.containsKey("effect")) { - animation_on = true; String effectString = root["effect"].as(); - - for (uint8_t i = 0; i < strip.getModeCount(); i++) { - #if defined(ENABLE_E131) and defined(ENABLE_HOMEASSISTANT) - if(effectString == "E131"){ - if(strip.isRunning()) strip.stop(); - mode = E131; - break; + #if defined(ENABLE_HOMEASSISTANT) + if(effectString == "OFF"){ + mode = OFF; } - #endif + if(effectString == "AUTO"){ + mode = AUTO; + } + #endif + #if defined(ENABLE_TV) and defined(ENABLE_HOMEASSISTANT) + if(effectString == "TV"){ + mode = TV; + } + #endif + #if defined(ENABLE_E131) and defined(ENABLE_HOMEASSISTANT) + if(effectString == "E131"){ + mode = E131; + } + #endif + for (uint8_t i = 0; i < strip.getModeCount(); i++) { if(String(strip.getModeName(i)) == effectString) { mode = SET_MODE; ws2812fx_mode = i; @@ -978,7 +955,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght } #endif - #ifdef ENABLE_AMQTT + #if ENABLE_MQTT == 1 void onMqttMessage(char* topic, char* payload_in, AsyncMqttClientMessageProperties properties, size_t length, size_t index, size_t total) { DBG_OUTPUT_PORT.print("MQTT: Recieved ["); DBG_OUTPUT_PORT.print(topic); // DBG_OUTPUT_PORT.print("]: "); DBG_OUTPUT_PORT.println(payload_in); @@ -988,39 +965,37 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght DBG_OUTPUT_PORT.printf("]: %s\n", payload); #endif - #ifdef ENABLE_MQTT + #if ENABLE_MQTT == 0 void mqtt_callback(char* topic, byte* payload_in, unsigned int length) { uint8_t * payload = (uint8_t *)malloc(length + 1); memcpy(payload, payload_in, length); payload[length] = 0; DBG_OUTPUT_PORT.printf("MQTT: Message arrived [%s]\n", payload); #endif - #ifdef ENABLE_HOMEASSISTANT - if (strcmp(topic, mqtt_ha_state_in.c_str()) == 0) { + + #if defined(ENABLE_HOMEASSISTANT) + if (strcmp(topic, mqtt_ha_state_in) == 0) { if (!processJson((char*)payload)) { return; } if(!ha_send_data.active()) ha_send_data.once(5, tickerSendState); - #ifdef ENABLE_STATE_SAVE_SPIFFS - if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); - #endif - #ifdef ENABLE_MQTT + #if ENABLE_MQTT == 0 } else if (strcmp(topic, (char *)mqtt_intopic) == 0) { - #endif - #ifdef ENABLE_AMQTT - } else if (strcmp(topic, mqtt_intopic.c_str()) == 0) { #endif + #if ENABLE_MQTT == 1 + } else if (strcmp(topic, mqtt_intopic) == 0) { + #endif #endif checkpayload(payload, true); - #ifdef ENABLE_HOMEASSISTANT + #if defined(ENABLE_HOMEASSISTANT) } #endif free(payload); } - #ifdef ENABLE_MQTT + #if ENABLE_MQTT == 0 void mqtt_reconnect() { // Loop until we're reconnected while (!mqtt_client.connected() && mqtt_reconnect_retries < MQTT_MAX_RECONNECT_TRIES) { @@ -1036,14 +1011,15 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght mqtt_client.publish(mqtt_outtopic, message); // ... and resubscribe mqtt_client.subscribe(mqtt_intopic, qossub); - #ifdef ENABLE_HOMEASSISTANT + #if defined(ENABLE_HOMEASSISTANT) ha_send_data.detach(); - mqtt_client.subscribe(mqtt_ha_state_in.c_str(), qossub); - #ifdef MQTT_HOME_ASSISTANT_SUPPORT - DynamicJsonDocument jsonBuffer(JSON_ARRAY_SIZE(strip.getModeCount()) + JSON_OBJECT_SIZE(12) + 1500); + mqtt_client.subscribe(mqtt_ha_state_in, qossub); + #if defined(MQTT_HOME_ASSISTANT_SUPPORT) + const size_t bufferSize = JSON_ARRAY_SIZE(strip.getModeCount()+ 4) + JSON_OBJECT_SIZE(11) + 1500; + DynamicJsonDocument jsonBuffer(bufferSize); JsonObject json = jsonBuffer.to(); json["name"] = HOSTNAME; - #ifdef MQTT_HOME_ASSISTANT_0_84_SUPPORT + #if defined(MQTT_HOME_ASSISTANT_0_84_SUPPORT) json["schema"] = "json"; #else json["platform"] = "mqtt_json"; @@ -1057,20 +1033,20 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght json["color_temp"] = "true"; json["effect"] = "true"; JsonArray effect_list = json.createNestedArray("effect_list"); + effect_list.add("OFF"); + effect_list.add("AUTO"); + #if defined(ENABLE_TV) + effect_list.add("TV"); + #endif + #if defined(ENABLE_E131) + effect_list.add("E131"); + #endif for (uint8_t i = 0; i < strip.getModeCount(); i++) { effect_list.add(strip.getModeName(i)); } - #ifdef MQTT_HOME_ASSISTANT_SUPPORT - effect_list.add("OFF"); - #ifdef ENABLE_TV - effect_list.add("TV"); - #endif - #ifdef ENABLE_E131 - effect_list.add("E131"); - #endif - #endif char buffer[measureJson(json) + 1]; serializeJson(json, buffer, sizeof(buffer)); + jsonBuffer.clear(); mqtt_client.publish(String("homeassistant/light/" + String(HOSTNAME) + "/config").c_str(), buffer, true); #endif #endif @@ -1090,7 +1066,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght } } #endif - #ifdef ENABLE_AMQTT + #if ENABLE_MQTT == 1 void connectToWifi() { DBG_OUTPUT_PORT.println("Re-connecting to Wi-Fi..."); WiFi.setSleepMode(WIFI_NONE_SLEEP); @@ -1110,7 +1086,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght void onWifiDisconnect(const WiFiEventStationModeDisconnected& event) { DBG_OUTPUT_PORT.println("Disconnected from Wi-Fi."); - #ifdef ENABLE_HOMEASSISTANT + #if defined(ENABLE_HOMEASSISTANT) ha_send_data.detach(); #endif mqttReconnectTimer.detach(); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi @@ -1124,19 +1100,20 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght char * message = new char[18 + strlen(HOSTNAME) + 1]; strcpy(message, "McLighting ready: "); strcat(message, HOSTNAME); - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, message); + amqttClient.publish(mqtt_outtopic, qospub, false, message); //Subscribe - uint16_t packetIdSub1 = amqttClient.subscribe((char *)mqtt_intopic.c_str(), qossub); + uint16_t packetIdSub1 = amqttClient.subscribe((char *)mqtt_intopic, qossub); DBG_OUTPUT_PORT.printf("Subscribing at QoS %d, packetId: ", qossub); DBG_OUTPUT_PORT.println(packetIdSub1); - #ifdef ENABLE_HOMEASSISTANT + #if defined(ENABLE_HOMEASSISTANT) ha_send_data.detach(); - uint16_t packetIdSub2 = amqttClient.subscribe((char *)mqtt_ha_state_in.c_str(), qossub); + uint16_t packetIdSub2 = amqttClient.subscribe((char *)mqtt_ha_state_in, qossub); DBG_OUTPUT_PORT.printf("Subscribing at QoS %d, packetId: ", qossub); DBG_OUTPUT_PORT.println(packetIdSub2); - #ifdef MQTT_HOME_ASSISTANT_SUPPORT - DynamicJsonDocument jsonBuffer(JSON_ARRAY_SIZE(strip.getModeCount()) + JSON_OBJECT_SIZE(12) + 1500); + #if defined(MQTT_HOME_ASSISTANT_SUPPORT) + const size_t bufferSize = JSON_ARRAY_SIZE(strip.getModeCount()+ 4) + JSON_OBJECT_SIZE(11) + 1500; + DynamicJsonDocument jsonBuffer(bufferSize); JsonObject json = jsonBuffer.to(); json["name"] = HOSTNAME; - #ifdef MQTT_HOME_ASSISTANT_0_84_SUPPORT + #if defined(MQTT_HOME_ASSISTANT_0_84_SUPPORT) json["schema"] = "json"; #else json["platform"] = "mqtt_json"; @@ -1150,21 +1127,20 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght json["color_temp"] = "true"; json["effect"] = "true"; JsonArray effect_list = json.createNestedArray("effect_list"); + effect_list.add("OFF"); + effect_list.add("AUTO"); + #if defined(ENABLE_TV) + effect_list.add("TV"); + #endif + #if defined(ENABLE_E131) + effect_list.add("E131"); + #endif for (uint8_t i = 0; i < strip.getModeCount(); i++) { effect_list.add(strip.getModeName(i)); } - #ifdef MQTT_HOME_ASSISTANT_SUPPORT - effect_list.add("OFF"); - #ifdef ENABLE_TV - effect_list.add("TV"); - #endif - #ifdef ENABLE_E131 - effect_list.add("E131"); - #endif - #endif char buffer[measureJson(json) + 1]; serializeJson(json, buffer, sizeof(buffer)); - DBG_OUTPUT_PORT.println(buffer); + jsonBuffer.clear(); amqttClient.publish(String("homeassistant/light/" + String(HOSTNAME) + "/config").c_str(), qospub, true, buffer); #endif #endif @@ -1200,41 +1176,14 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght // *************************************************************************** // Button management // *************************************************************************** -#ifdef ENABLE_BUTTON +#if defined(ENABLE_BUTTON) void shortKeyPress() { DBG_OUTPUT_PORT.printf("Short button press\n"); - if (buttonState == false) { + if (mode == OFF) { setModeByStateString(BTN_MODE_SHORT); - buttonState = true; - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =static white").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =static white").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - 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 + mode = SET_ALL; } else { mode = OFF; - buttonState = false; - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =off").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =off").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = false; - 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 } } @@ -1242,45 +1191,21 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght void mediumKeyPress() { DBG_OUTPUT_PORT.printf("Medium button press\n"); setModeByStateString(BTN_MODE_MEDIUM); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =fire flicker").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =fire flicker").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - 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 + mode = SET_ALL; } // called when button is kept pressed for 2 seconds or more void longKeyPress() { DBG_OUTPUT_PORT.printf("Long button press\n"); setModeByStateString(BTN_MODE_LONG); - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =fireworks random").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =fireworks random").c_str()); - #endif - #ifdef ENABLE_HOMEASSISTANT - stateOn = true; - 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 + mode = SET_ALL; } void button() { if (millis() - keyPrevMillis >= keySampleIntervalMs) { keyPrevMillis = millis(); - byte currKeyState = digitalRead(BUTTON); + byte currKeyState = digitalRead(ENABLE_BUTTON); if ((prevKeyState == HIGH) && (currKeyState == LOW)) { // key goes from not pressed to pressed @@ -1307,7 +1232,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght } #endif -#ifdef ENABLE_BUTTON_GY33 +#if defined(ENABLE_BUTTON_GY33) void shortKeyPress_gy33() { DBG_OUTPUT_PORT.printf("Short GY-33 button press\n"); // tcs.setConfig(MCU_LED_04, MCU_WHITE_OFF); @@ -1320,26 +1245,13 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght DBG_OUTPUT_PORT.printf("Colors: R: [%d] G: [%d] B: [%d] Color: [%d] Conf: [%d]\n", (int)r, (int)g, (int)b, (int)col, (int)conf); main_color.red = (pow((r/255.0), 2.5)*255); main_color.green = (pow((g/255.0), 2.5)*255); main_color.blue = (pow((b/255.0), 2.5)*255);main_color.white = 0; ws2812fx_mode = 0; - mode = SET_MODE; - buttonState = true; - #ifdef ENABLE_MQTT - mqtt_client.publish(mqtt_outtopic, String("OK =static GY-33").c_str()); - #endif - #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =static GY-33").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 + mode = SET_ALL; // tcs.setConfig(MCU_LED_OFF, MCU_WHITE_OFF); } // called when button is kept pressed for less than 2 seconds void mediumKeyPress_gy33() { - tcs.setConfig(MCU_LED_06, MCU_WHITE_ON); + tcs.setConfig(MCU_LED_06, MCU_WHITE_OFF); } // called when button is kept pressed for 2 seconds or more @@ -1351,7 +1263,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght if (millis() - keyPrevMillis_gy33 >= keySampleIntervalMs_gy33) { keyPrevMillis_gy33 = millis(); - byte currKeyState_gy33 = digitalRead(BUTTON_GY33); + byte currKeyState_gy33 = digitalRead(ENABLE_BUTTON_GY33); if ((prevKeyState_gy33 == HIGH) && (currKeyState_gy33 == LOW)) { // key goes from not pressed to pressed @@ -1378,165 +1290,491 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght } #endif -#ifdef ENABLE_STATE_SAVE_SPIFFS -bool updateFS = false; -#if defined(ENABLE_MQTT) or defined(ENABLE_AMQTT) -// Write configuration to FS JSON -bool writeConfigFS(bool saveConfig){ - if (saveConfig) { - //FS save - updateFS = true; - DBG_OUTPUT_PORT.print("Saving config: "); - DynamicJsonDocument jsonBuffer; - JsonObject json = jsonBuffer.to(); - json["mqtt_host"] = mqtt_host; - json["mqtt_port"] = mqtt_port; - json["mqtt_user"] = mqtt_user; - json["mqtt_pass"] = mqtt_pass; - - //SPIFFS.remove("/config.json") ? DBG_OUTPUT_PORT.println("removed file") : DBG_OUTPUT_PORT.println("failed removing file"); - File configFile = SPIFFS.open("/config.json", "w"); - if (!configFile) DBG_OUTPUT_PORT.println("failed to open config file for writing"); - - serializeJson(json, DBG_OUTPUT_PORT); - serializeJson(json, configFile); - configFile.close(); - updateFS = false; - return true; - //end save - } else { - DBG_OUTPUT_PORT.println("SaveConfig is False!"); - return false; +#if defined(ENABLE_STATE_SAVE) + void tickerSaveState(){ + updateState = true; } -} - -// Read search_str to FS -bool readConfigFS() { - //read configuration from FS JSON - updateFS = true; - if (SPIFFS.exists("/config.json")) { - //file exists, reading and loading - DBG_OUTPUT_PORT.print("Reading config file... "); - File configFile = SPIFFS.open("/config.json", "r"); - if (configFile) { - DBG_OUTPUT_PORT.println("Opened!"); - size_t size = configFile.size(); - std::unique_ptr buf(new char[size]); - configFile.readBytes(buf.get(), size); - DynamicJsonDocument jsonBuffer(JSON_OBJECT_SIZE(4)+300); - DeserializationError error = deserializeJson(jsonBuffer, buf.get()); - DBG_OUTPUT_PORT.print("Config: "); - if (!error) { - DBG_OUTPUT_PORT.println(" Parsed!"); - JsonObject json = jsonBuffer.as(); - serializeJson(json, DBG_OUTPUT_PORT); - strcpy(mqtt_host, json["mqtt_host"]); - strcpy(mqtt_port, json["mqtt_port"]); - strcpy(mqtt_user, json["mqtt_user"]); - strcpy(mqtt_pass, json["mqtt_pass"]); - updateFS = false; - return true; - } else { - DBG_OUTPUT_PORT.print("Failed to load json config: "); - DBG_OUTPUT_PORT.println(error.c_str()); - } - } else { - DBG_OUTPUT_PORT.println("Failed to open /config.json"); - } - } else { - DBG_OUTPUT_PORT.println("Coudnt find config.json"); - } - //end read - updateFS = false; - return false; -} -#endif - -bool writeStateFS(){ - updateFS = true; - //save the strip state to FS JSON - DBG_OUTPUT_PORT.print("Saving cfg: "); - DynamicJsonDocument jsonBuffer; - JsonObject json = jsonBuffer.to(); - json["mode"] = static_cast(mode); - json["strip_mode"] = (int) strip.getMode(); - json["brightness"] = brightness; - json["speed"] = ws2812fx_speed; - json["red"] = main_color.red; - json["green"] = main_color.green; - json["blue"] = main_color.blue; - json["white"] = main_color.white; - - //SPIFFS.remove("/stripstate.json") ? DBG_OUTPUT_PORT.println("removed file") : DBG_OUTPUT_PORT.println("failed removing file"); - File configFile = SPIFFS.open("/stripstate.json", "w"); - if (!configFile) { - DBG_OUTPUT_PORT.println("Failed!"); - updateFS = false; - spiffs_save_state.detach(); - updateStateFS = false; - return false; - } - serializeJson(json, DBG_OUTPUT_PORT); - serializeJson(json, configFile); - configFile.close(); - updateFS = false; - spiffs_save_state.detach(); - updateStateFS = false; - return true; - //end save -} - -bool readStateFS() { - //read strip state from FS JSON - updateFS = true; - //if (resetsettings) { SPIFFS.begin(); SPIFFS.remove("/config.json"); SPIFFS.format(); delay(1000);} - if (SPIFFS.exists("/stripstate.json")) { - //file exists, reading and loading - DBG_OUTPUT_PORT.print("Read cfg: "); - File configFile = SPIFFS.open("/stripstate.json", "r"); - if (configFile) { - size_t size = configFile.size(); - // Allocate a buffer to store contents of the file. - std::unique_ptr buf(new char[size]); - configFile.readBytes(buf.get(), size); - DynamicJsonDocument jsonBuffer(JSON_OBJECT_SIZE(7)+200); - DeserializationError error = deserializeJson(jsonBuffer, buf.get()); - if (!error) { - JsonObject json = jsonBuffer.as(); - serializeJson(json, DBG_OUTPUT_PORT); - mode = static_cast((int) json["mode"]); - ws2812fx_mode = json["strip_mode"]; - brightness = json["brightness"]; - ws2812fx_speed = json["speed"]; - main_color.red = json["red"]; - main_color.green = json["green"]; - main_color.blue = json["blue"]; - main_color.white = json["white"]; - - strip.setMode(ws2812fx_mode); - strip.setSpeed(convertSpeed(ws2812fx_speed)); - strip.setBrightness(brightness); - strip.setColor(main_color.red, main_color.green, main_color.blue, main_color.white); - - #ifdef ENABLE_E131 - if (mode == E131) { - strip.stop(); - } - #endif + #if ENABLE_STATE_SAVE == 1 + bool updateFS = false; + + #if defined(ENABLE_MQTT) + // Write configuration to FS JSON + bool writeConfigFS(bool saveConfig){ + if (saveConfig) { + //FS save + updateFS = true; + DBG_OUTPUT_PORT.print("Saving config: "); + const size_t bufferSize = JSON_OBJECT_SIZE(4) + 150; + DynamicJsonDocument jsonBuffer(bufferSize); + JsonObject json = jsonBuffer.to(); + json["mqtt_host"] = mqtt_host; + json["mqtt_port"] = mqtt_port; + json["mqtt_user"] = mqtt_user; + json["mqtt_pass"] = mqtt_pass; - updateFS = false; - return true; - } else { - DBG_OUTPUT_PORT.println("Failed to parse JSON!"); + //SPIFFS.remove("/config.json") ? DBG_OUTPUT_PORT.println("removed file") : DBG_OUTPUT_PORT.println("failed removing file"); + File configFile = SPIFFS.open("/config.json", "w"); + if (!configFile) DBG_OUTPUT_PORT.println("failed to open config file for writing"); + + serializeJson(json, DBG_OUTPUT_PORT); + serializeJson(json, configFile); + jsonBuffer.clear(); + configFile.close(); + updateFS = false; + return true; + //end save + } else { + DBG_OUTPUT_PORT.println("SaveConfig is False!"); + return false; + } } - } else { - DBG_OUTPUT_PORT.println("Failed to open \"/stripstate.json\""); + + // Read search_str to FS + bool readConfigFS() { + //read configuration from FS JSON + updateFS = true; + if (SPIFFS.exists("/config.json")) { + //file exists, reading and loading + DBG_OUTPUT_PORT.print("Reading config file... "); + File configFile = SPIFFS.open("/config.json", "r"); + if (configFile) { + DBG_OUTPUT_PORT.println("Opened!"); + size_t size = configFile.size(); + std::unique_ptr buf(new char[size]); + configFile.readBytes(buf.get(), size); + const size_t bufferSize = JSON_OBJECT_SIZE(4) + 150; + DynamicJsonDocument jsonBuffer(bufferSize); + DeserializationError error = deserializeJson(jsonBuffer, buf.get()); + DBG_OUTPUT_PORT.print("Config: "); + if (!error) { + DBG_OUTPUT_PORT.println(" Parsed!"); + JsonObject json = jsonBuffer.as(); + serializeJson(json, DBG_OUTPUT_PORT); + strcpy(mqtt_host, json["mqtt_host"]); + strcpy(mqtt_port, json["mqtt_port"]); + strcpy(mqtt_user, json["mqtt_user"]); + strcpy(mqtt_pass, json["mqtt_pass"]); + updateFS = false; + jsonBuffer.clear(); + return true; + } else { + DBG_OUTPUT_PORT.print("Failed to load json config: "); + DBG_OUTPUT_PORT.println(error.c_str()); + jsonBuffer.clear(); + } + } else { + DBG_OUTPUT_PORT.println("Failed to open /config.json"); + } + } else { + DBG_OUTPUT_PORT.println("Coudnt find config.json"); + } + //end read + updateFS = false; + return false; + } + #endif + + bool writeStateFS(){ + updateFS = true; + //save the strip state to FS JSON + DBG_OUTPUT_PORT.print("Saving cfg: "); + //SPIFFS.remove("/stripstate.json") ? DBG_OUTPUT_PORT.println("removed file") : DBG_OUTPUT_PORT.println("failed removing file"); + File configFile = SPIFFS.open("/stripstate.json", "w"); + if (!configFile) { + DBG_OUTPUT_PORT.println("Failed!"); + updateFS = false; + settings_save_state.detach(); + updateState = false; + return false; + } + DBG_OUTPUT_PORT.println(listStatusJSON()); + configFile.print(listStatusJSON()); + configFile.close(); + updateFS = false; + settings_save_state.detach(); + updateState = false; + return true; + //end save } - } else { - DBG_OUTPUT_PORT.println("Couldn't find \"/stripstate.json\""); - } - //end read - updateFS = false; - return false; -} + + bool readStateFS() { + //read strip state from FS JSON + updateFS = true; + //if (resetsettings) { SPIFFS.begin(); SPIFFS.remove("/config.json"); SPIFFS.format(); delay(1000);} + if (SPIFFS.exists("/stripstate.json")) { + //file exists, reading and loading + DBG_OUTPUT_PORT.print("Read cfg: "); + File configFile = SPIFFS.open("/stripstate.json", "r"); + if (configFile) { + size_t size = configFile.size(); + // Allocate a buffer to store contents of the file. + std::unique_ptr buf(new char[size]); + configFile.readBytes(buf.get(), size); + const size_t bufferSize = JSON_OBJECT_SIZE(5) + JSON_ARRAY_SIZE(12) + 500; + DynamicJsonDocument jsonBuffer(bufferSize); + DeserializationError error = deserializeJson(jsonBuffer, buf.get()); + if (!error) { + JsonObject json = jsonBuffer.as(); + serializeJson(json, DBG_OUTPUT_PORT); + mode = static_cast((int) json["mode"]); + ws2812fx_mode = json["ws2812fx_mode"]; + ws2812fx_speed = json["speed"]; + brightness = json["brightness"]; + main_color.white = (uint8_t) json["color"][0]; + main_color.red = (uint8_t) json["color"][1]; + main_color.green = (uint8_t) json["color"][2]; + main_color.blue = (uint8_t) json["color"][3]; + back_color.white = (uint8_t) json["color"][4]; + back_color.red = (uint8_t) json["color"][5]; + back_color.green = (uint8_t) json["color"][6]; + back_color.blue = (uint8_t) json["color"][7]; + xtra_color.white = (uint8_t) json["color"][8]; + xtra_color.red = (uint8_t) json["color"][9]; + xtra_color.green = (uint8_t) json["color"][10]; + xtra_color.blue = (uint8_t) json["color"][11]; + convertColors(); + strip.setMode(ws2812fx_mode); + strip.setSpeed(convertSpeed(ws2812fx_speed)); + strip.setBrightness(brightness); + strip.setColors(0, hex_colors); + updateFS = false; + jsonBuffer.clear(); + return true; + } else { + DBG_OUTPUT_PORT.println("Failed to parse JSON!"); + jsonBuffer.clear(); + } + } else { + DBG_OUTPUT_PORT.println("Failed to open \"/stripstate.json\""); + } + } else { + DBG_OUTPUT_PORT.println("Couldn't find \"/stripstate.json\""); + } + //end read + updateFS = false; + return false; + } + #endif + + #if ENABLE_STATE_SAVE == 0 + // *************************************************************************** + // EEPROM helper + // *************************************************************************** + String readEEPROM(int offset, int len) { + String res = ""; + for (int i = 0; i < len; ++i) + { + res += char(EEPROM.read(i + offset)); + //DBG_OUTPUT_PORT.println(char(EEPROM.read(i + offset))); + } + DBG_OUTPUT_PORT.printf("readEEPROM(): %s\n", res.c_str()); + return res; + } + + void writeEEPROM(int offset, int len, String value) { + DBG_OUTPUT_PORT.printf("writeEEPROM(): %s\n", value.c_str()); + for (int i = 0; i < len; ++i) + { + if (i < value.length()) { + EEPROM.write(i + offset, value[i]); + } else { + EEPROM.write(i + offset, 0); + } + } + } + #endif +#endif + +#if defined(ENABLE_REMOTE) +// *************************************************************************** +// Request handler for IR remote support +// *************************************************************************** +void handleRemote() { + if (irrecv.decode(&results)) { + DBG_OUTPUT_PORT.print("IR Code: 0x"); + DBG_OUTPUT_PORT.print(uint64ToString(results.value, HEX)); + DBG_OUTPUT_PORT.println(""); + if (results.value == rmt_commands[REPEATCMD]) { //Repeat + results.value = last_remote_cmd; + chng = 5; + } else { + chng = 1; + } + if (results.value == rmt_commands[ON_OFF]) { // ON/OFF TOGGLE + last_remote_cmd = 0; + if (mode == OFF) { + mode = SET_ALL; + } else { + mode = OFF; + } + } + if ((mode != AUTO) && (mode != OFF)) { + if (results.value == rmt_commands[BRIGHTNESS_UP]) { //Brightness Up + last_remote_cmd = results.value; + if (brightness + chng <= 255) { + brightness = brightness + chng; + mode = SET_BRIGHTNESS; + } + } + if (results.value == rmt_commands[BRIGHTNESS_DOWN]) { //Brightness down + last_remote_cmd = results.value; + if (brightness - chng >= 0) { + brightness = brightness - chng; + mode = SET_BRIGHTNESS; + } + } + } + if ((mode !=AUTO) && (mode != E131) && (mode != OFF)) { + if (results.value == rmt_commands[SPEED_UP]) { //Speed Up + last_remote_cmd = results.value; + if (ws2812fx_speed + chng <= 255) { + ws2812fx_speed = ws2812fx_speed + chng; + mode = SET_SPEED; + } + } + if (results.value == rmt_commands[SPEED_DOWN]) { //Speed down + last_remote_cmd = results.value; + if (ws2812fx_speed - chng >= 0) { + ws2812fx_speed = ws2812fx_speed - chng; + mode = SET_SPEED; + } + } + } + if (mode == HOLD) { + if (results.value == rmt_commands[RED_UP]) { //Red Up + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.red + chng <= 255) { + main_color.red = main_color.red + chng; + mode = SET_COLOR; + } + } + if (selected_color == 2) { + if (back_color.red + chng <= 255) { + back_color.red = back_color.red + chng; + mode = SET_COLOR; + } + } + if (selected_color == 3) { + if (xtra_color.red + chng <= 255) { + xtra_color.red = xtra_color.red + chng; + mode = SET_COLOR; + } + } + } + if (results.value == rmt_commands[RED_DOWN]) { //Red down + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.red - chng >= 0) { + main_color.red = main_color.red - chng; + mode = SET_COLOR; + } + } + if (selected_color == 2) { + if (back_color.red - chng >= 0) { + back_color.red = back_color.red - chng; + mode = SET_COLOR; + } + } + if (selected_color == 3) { + if (xtra_color.red - chng >= 0) { + xtra_color.red = xtra_color.red - chng; + mode = SET_COLOR; + } + } + } + if (results.value == rmt_commands[GREEN_UP]) { //Green Up + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.green + chng <= 255) { + main_color.green = main_color.green + chng; + mode = SET_COLOR; + } + } + if (selected_color == 2) { + if (back_color.green + chng <= 255) { + back_color.green = back_color.green + chng; + mode = SET_COLOR; + } + } + if (selected_color == 3) { + if (xtra_color.green + chng <= 255) { + xtra_color.green = xtra_color.green + chng; + mode = SET_COLOR; + } + } + } + if (results.value == rmt_commands[GREEN_DOWN]) { //green down + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.green - chng >= 0) { + main_color.green = main_color.green - chng;; + mode = SET_COLOR; + } + } + if (selected_color == 2) { + if (back_color.green - chng >= 0) { + back_color.green = back_color.green - chng; + mode = SET_COLOR; + } + } + if (selected_color == 3) { + if (xtra_color.green - chng >= 0) { + xtra_color.green = xtra_color.green - chng; + mode = SET_COLOR; + } + } + } + if (results.value == rmt_commands[BLUE_UP]) { //Blue Up + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.blue + chng <= 255) { + main_color.blue = main_color.blue + chng; + mode = SET_COLOR; + } + } + if (selected_color == 2) { + if (back_color.blue + chng <= 255) { + back_color.blue = back_color.blue + chng; + mode = SET_COLOR; + } + } + if (selected_color == 3) { + if (xtra_color.blue + chng <= 255) { + xtra_color.blue = xtra_color.blue + chng; + mode = SET_COLOR; + } + } + } + if (results.value == rmt_commands[BLUE_DOWN]) { //BLUE down + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.blue - chng >= 0) { + main_color.blue = main_color.blue - chng; + mode = SET_COLOR; + } + } + if (selected_color == 2) { + if (back_color.blue - chng >= 0) { + back_color.blue = back_color.blue - chng; + mode = SET_COLOR; + } + } + if (selected_color == 3) { + if (xtra_color.blue - chng >= 0) { + xtra_color.blue = xtra_color.blue - chng; + mode = SET_COLOR; + } + } + } + if (results.value == rmt_commands[WHITE_UP]) { //White Up + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.white + chng <= 255) { + main_color.white = main_color.white + chng; + mode = SET_COLOR; + } + } + if (selected_color == 2) { + if (back_color.white + chng <= 255) { + back_color.white = back_color.white + chng; + mode = SET_COLOR; + } + } + if (selected_color == 3) { + if (xtra_color.white + chng <= 255) { + xtra_color.white = xtra_color.white + chng; + mode = SET_COLOR; + } + } + } + if (results.value == rmt_commands[WHITE_DOWN]) { //White down + last_remote_cmd = results.value; + if (selected_color == 1) { + if (main_color.white - chng >= 0) { + main_color.white = main_color.white - chng; + mode = SET_COLOR; + } + } + if (selected_color == 2) { + if (back_color.white - chng >= 0) { + back_color.white = back_color.white - chng; + mode = SET_COLOR; + } + } + if (selected_color == 3) { + if (xtra_color.white - chng >= 0) { + xtra_color.white = xtra_color.white - chng; + mode = SET_COLOR; + } + } + } + if (results.value == rmt_commands[COL_M]) { // Select Main Color + last_remote_cmd = 0; + selected_color = 1; + } + if (results.value == rmt_commands[COL_B]) { // Select Back Color + last_remote_cmd = 0; + selected_color = 2; + } + if (results.value == rmt_commands[COL_X]) { // Select Extra Color + last_remote_cmd = 0; + selected_color = 3; + } + } // end of if HOLD + if (results.value == rmt_commands[MODE_UP]) { //Mode Up + last_remote_cmd = results.value; + if ((ws2812fx_mode < strip.getModeCount()-1) && (mode == HOLD)) { + ws2812fx_mode = ws2812fx_mode + 1; + } + mode = SET_MODE; + } + if (results.value == rmt_commands[MODE_DOWN]) { //Mode down + last_remote_cmd = results.value; + if ((ws2812fx_mode > 0) && (mode == HOLD)) { + ws2812fx_mode = ws2812fx_mode - 1; + } + mode = SET_MODE; + } + if (results.value == rmt_commands[AUTOMODE]) { // Toggle Automode + last_remote_cmd = 0; + if (mode != AUTO) { + mode = AUTO; + } else { + mode = SET_ALL; + } + } + #if defined(ENABLE_TV) + if (results.value == rmt_commands[CUST_1]) { // Select TV Mode + last_remote_cmd = 0; + if (mode == TV) { + mode = SET_ALL; + } else { + mode = TV; + } + } + #endif + if (results.value == rmt_commands[CUST_2]) { // Select Custom Mode 2 + last_remote_cmd = 0; + ws2812fx_mode = 12; + mode = SET_MODE; + } + if (results.value == rmt_commands[CUST_3]) { // Select Custom Mode 3 + last_remote_cmd = 0; + ws2812fx_mode = 48; + mode = SET_MODE; + } + if (results.value == rmt_commands[CUST_4]) { // Select Custom Mode 4 + last_remote_cmd = 0; + ws2812fx_mode = 21; + mode = SET_MODE; + } + if (results.value == rmt_commands[CUST_5]) { // Select Custom Mode 5 + last_remote_cmd = 0; + ws2812fx_mode = 46; + mode = SET_MODE; + } + irrecv.resume(); // Receive the next value + } + } #endif diff --git a/Arduino/McLighting/version.h b/Arduino/McLighting/version.h index 510ef45..827798a 100644 --- a/Arduino/McLighting/version.h +++ b/Arduino/McLighting/version.h @@ -1 +1 @@ -#define SKETCH_VERSION "2.2.0" \ No newline at end of file +#define SKETCH_VERSION "2.2.0.rgbw.3c" diff --git a/Arduino/McLighting/version_info.ino b/Arduino/McLighting/version_info.ino index 8364126..b642a81 100644 --- a/Arduino/McLighting/version_info.ino +++ b/Arduino/McLighting/version_info.ino @@ -59,4 +59,10 @@ * 6 Jan 2018 v 2.2.0 * - fix webserver not responding when E1.31 is mode is acivated: do a webserver.loop() for every 1.31 packet * - HA E1.31 mode added + * + * 15 Feb 2018 v 2.2.0 rgbw 3colors + * - Code cleanup + * - Implemented support for back- and xtra-color + * - Implemented IR remote control + * - Remove some string data types (to be continued) */