From 76f9ebfb72b47dbf72bedc9d9bf986811da88fa4 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 25 Apr 2020 15:34:18 +0200 Subject: [PATCH 1/7] Attempt to fix ESP32 gui page load error Attempt to fix ESP32 gui Configure Template page load error by switching large content from Ajax loading parameters to included parameters. --- tasmota/xdrv_01_webserver.ino | 80 +++++++++++++++-------------------- 1 file changed, 34 insertions(+), 46 deletions(-) diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino index 6c01e6dc5..61f98e649 100644 --- a/tasmota/xdrv_01_webserver.ino +++ b/tasmota/xdrv_01_webserver.ino @@ -257,9 +257,10 @@ const char HTTP_SCRIPT_TEMPLATE[] PROGMEM = "if(eb('s1').value==''){" "eb('s1').value=k;" // Set NAME if not yet set "}" - "os=o.shift();" // Complete GPIO sensor list - "as=o.shift();" // Complete ADC0 list - "g=o.shift().split(',');" // Array separator + "g=o.shift().split(',');" // GPIO - Array separator + "os=\""; // }2'0'>None (0)}3}2'17'>Button1 (17)}3... +const char HTTP_SCRIPT_TEMPLATE2[] PROGMEM = + "\";" "j=0;" "for(i=0;i<" STR(MAX_USER_PINS) ";i++){" // Supports 13 GPIOs "if(6==i){j=9;}" @@ -268,7 +269,9 @@ const char HTTP_SCRIPT_TEMPLATE[] PROGMEM = "j++;" "}" "g=o.shift();" // FLAG - "os=as;" + "os=\""; // }2'0'>None (0)}3}2'17'>Analog (17)}3... +const char HTTP_SCRIPT_TEMPLATE3[] PROGMEM = + "\";" "sk(g&15," STR(ADC0_PIN) ");" // Set ADC0 "g>>=4;" "for(i=0;i<" STR(GPIO_FLAG_USED) ";i++){" @@ -286,20 +289,13 @@ const char HTTP_SCRIPT_TEMPLATE[] PROGMEM = "ld(a,x1);" // ?t related to WebGetArg("t", stemp, sizeof(stemp)); "}" - "function x2(a){" - "os=a.responseText;" + "function sl(){" + "os=\""; // }2'0'>Sonoff Basic (1)}3... +const char HTTP_SCRIPT_TEMPLATE4[] PROGMEM = + "\";" "sk(" STR(WEMOS_MODULE) ",99);" // 17 = WEMOS "st(" STR(USER_MODULE) ");" "}" - -#ifdef USE_JAVASCRIPT_ES6 - "sl=()=>ld('tp?m=1',x2);" // ?m related to Webserver->hasArg("m") -#else - "function sl(){" - "ld('tp?m=1',x2);" // ?m related to Webserver->hasArg("m") - "}" -#endif - "wl(sl);"; const char HTTP_SCRIPT_INFO_BEGIN[] PROGMEM = @@ -1405,16 +1401,6 @@ void HandleTemplateConfiguration(void) char stemp[30]; // Template number and Sensor name - if (Webserver->hasArg("m")) { - WSContentBegin(200, CT_PLAIN); - for (uint32_t i = 0; i < sizeof(kModuleNiceList); i++) { // "}2'%d'>%s (%d)}3" - "}2'0'>Sonoff Basic (1)}3" - uint32_t midx = pgm_read_byte(kModuleNiceList + i); - WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, midx, AnyModuleName(midx).c_str(), midx +1); - } - WSContentEnd(); - return; - } - WebGetArg("t", stemp, sizeof(stemp)); // 0 - 69 Template number if (strlen(stemp)) { uint32_t module = atoi(stemp); @@ -1427,27 +1413,7 @@ void HandleTemplateConfiguration(void) WSContentBegin(200, CT_PLAIN); WSContentSend_P(PSTR("%s}1"), AnyModuleName(module).c_str()); // NAME: Generic - - - for (uint32_t i = 0; i < sizeof(kGpioNiceList); i++) { // GPIO: }2'0'>None (0)}3}2'17'>Button1 (17)}3... - if (1 == i) { - WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, 255, D_SENSOR_USER, 255); // }2'255'>User (255)}3 - } - uint32_t midx = pgm_read_byte(kGpioNiceList + i); - WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, midx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames), midx); - } - WSContentSend_P(PSTR("}1")); // Field separator - - - for (uint32_t i = 0; i < ADC0_END; i++) { // FLAG: }2'0'>None (0)}3}2'17'>Analog (17)}3... - if (1 == i) { - WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, ADC0_USER, D_SENSOR_USER, ADC0_USER); // }2'15'>User (15)}3 - } - WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, i, GetTextIndexed(stemp, sizeof(stemp), i, kAdc0Names), i); - } - WSContentSend_P(PSTR("}1")); // Field separator - - for (uint32_t i = 0; i < ARRAY_SIZE(cmodule.io); i++) { // 17,148,29,149,7,255,255,255,138,255,139,255,255 + for (uint32_t i = 0; i < ARRAY_SIZE(cmodule.io); i++) { // 17,148,29,149,7,255,255,255,138,255,139,255,255 if (!FlashPin(i)) { WSContentSend_P(PSTR("%s%d"), (i>0)?",":"", cmodule.io[i]); } @@ -1461,7 +1427,29 @@ void HandleTemplateConfiguration(void) WSContentStart_P(S_CONFIGURE_TEMPLATE); WSContentSend_P(HTTP_SCRIPT_MODULE_TEMPLATE); + WSContentSend_P(HTTP_SCRIPT_TEMPLATE); + for (uint32_t i = 0; i < sizeof(kGpioNiceList); i++) { // GPIO: }2'0'>None (0)}3}2'17'>Button1 (17)}3... + if (1 == i) { + WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, GPIO_USER, D_SENSOR_USER, GPIO_USER); // }2'255'>User (255)}3 + } + uint32_t midx = pgm_read_byte(kGpioNiceList + i); + WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, midx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames), midx); + } + WSContentSend_P(HTTP_SCRIPT_TEMPLATE2); + for (uint32_t i = 0; i < ADC0_END; i++) { // FLAG: }2'0'>None (0)}3}2'17'>Analog (17)}3... + if (1 == i) { + WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, ADC0_USER, D_SENSOR_USER, ADC0_USER); // }2'15'>User (15)}3 + } + WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, i, GetTextIndexed(stemp, sizeof(stemp), i, kAdc0Names), i); + } + WSContentSend_P(HTTP_SCRIPT_TEMPLATE3); + for (uint32_t i = 0; i < sizeof(kModuleNiceList); i++) { // "}2'%d'>%s (%d)}3" - "}2'0'>Sonoff Basic (1)}3" + uint32_t midx = pgm_read_byte(kModuleNiceList + i); + WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, midx, AnyModuleName(midx).c_str(), midx +1); + } + WSContentSend_P(HTTP_SCRIPT_TEMPLATE4); + WSContentSendStyle(); WSContentSend_P(HTTP_FORM_TEMPLATE); WSContentSend_P(HTTP_TABLE100); From 2ca2fc7cac941b85ba8bc9fd3a995169951a31eb Mon Sep 17 00:00:00 2001 From: Mickael Gaillard Date: Sat, 25 Apr 2020 19:09:53 +0200 Subject: [PATCH 2/7] Add web server gesture display Signed-off-by: Mickael Gaillard --- tasmota/xsns_27_apds9960.ino | 115 ++++++++++++++++++++++------------- 1 file changed, 73 insertions(+), 42 deletions(-) diff --git a/tasmota/xsns_27_apds9960.ino b/tasmota/xsns_27_apds9960.ino index 4800a96de..cc673e853 100644 --- a/tasmota/xsns_27_apds9960.ino +++ b/tasmota/xsns_27_apds9960.ino @@ -61,6 +61,8 @@ #define APDS9930_CHIPID_1 0x12 // we will check, if someone got an incorrect sensor #define APDS9930_CHIPID_2 0x39 // there are case reports about "accidentially bought" 9930's +#define APDS9960_GESTURE + /* Gesture parameters */ #define GESTURE_THRESHOLD_OUT 10 #define GESTURE_SENSITIVITY_1 50 @@ -72,13 +74,26 @@ const char APDS9960_TAG[] = "APDS9960"; #ifdef USE_WEBSERVER -const char HTTP_APDS9960_SNS[] PROGMEM = - "{s}" "Red" "{m}%s{e}" - "{s}" "Green" "{m}%s{e}" - "{s}" "Blue" "{m}%s{e}" - "{s}" "Ambient" "{m}%s " D_UNIT_LUX "{e}" - "{s}" "CCT" "{m}%s " "K" "{e}" // calculated color temperature in Kelvin - "{s}" "Proximity" "{m}%s{e}"; // {s} = , {m} = , {e} = +#ifdef APDS9960_GESTURE + +#define D_GESTURE "Gesture" + +const char HTTP_SNS_GESTURE[] PROGMEM = "{s}%s " D_GESTURE "{m}%s{e}"; + +#endif // APDS9960_GESTURE + +#define D_COLOR_RED "Red" +#define D_COLOR_GREEN "Green" +#define D_COLOR_BLUE "Blue" +#define D_PROXIMITY "Proximity" +#define D_CCT "CCT" + +const char HTTP_SNS_COLOR_RED[] PROGMEM = "{s}%s " D_COLOR_RED "{m}%u{e}"; +const char HTTP_SNS_COLOR_GREEN[] PROGMEM = "{s}%s " D_COLOR_GREEN "{m}%u{e}"; +const char HTTP_SNS_COLOR_BLUE[] PROGMEM = "{s}%s " D_COLOR_BLUE "{m}%u{e}"; +const char HTTP_SNS_CCT[] PROGMEM = "{s}%s " D_CCT "{m}%u " "K" "{e}"; +const char HTTP_SNS_PROXIMITY[] PROGMEM = "{s}%s " D_PROXIMITY "{m}%u{e}"; + #endif // USE_WEBSERVER /*********************************************************************************************\ @@ -236,7 +251,15 @@ const char HTTP_APDS9960_SNS[] PROGMEM = #define APDS9960_ERROR 0xFF +#ifdef APDS9960_GESTURE /* Direction definitions */ +const char GESTURE_UP[] PROGMEM = "Up"; +const char GESTURE_DOWN[] PROGMEM = "Down"; +const char GESTURE_LEFT[] PROGMEM = "Left"; +const char GESTURE_RIGHT[] PROGMEM = "Right"; +const char GESTURE_LONG[] PROGMEM = "Long"; +const char GESTURE_NONE[] PROGMEM = "None"; + enum { DIR_NONE, DIR_LEFT, @@ -249,12 +272,14 @@ enum { }; /* State definitions*/ +/* enum { APDS9960_NA_STATE, APDS9960_NEAR_STATE, APDS9960_FAR_STATE, APDS9960_ALL_STATE }; +*/ /* Container for gesture data */ typedef struct gesture_data_type { @@ -268,8 +293,7 @@ typedef struct gesture_data_type { uint8_t out_threshold; } gesture_data_t; -typedef struct gesture_type -{ +typedef struct gesture_type { int16_t ud_delta_ = 0; int16_t lr_delta_ = 0; int16_t ud_count_ = 0; @@ -278,6 +302,8 @@ typedef struct gesture_type int16_t motion_ = DIR_NONE; } gesture_t; +#endif // APDS9960_GESTURE + typedef struct color_data_type { uint16_t a; // measured ambient uint16_t r; // Red @@ -1451,7 +1477,7 @@ int16_t readGesture(void) { fifo_level = I2cRead8(APDS9960_I2C_ADDR, APDS9960_GFLVL); #ifdef USE_DEBUG_DRIVER - AddLog_P2(LOG_LEVEL_DEBUG, PSTR("DRV: FIFO Level : %d"), fifo_level); + AddLog_P2(LOG_LEVEL_DEBUG, PSTR("DRV: FIFO Level : %d"), fifo_level); #endif // USE_DEBUG_DRIVER /* If there's stuff in the FIFO, read it into our data block */ @@ -1705,28 +1731,28 @@ void handleGesture(void) { if (isGestureAvailable()) { switch (readGesture()) { case DIR_UP: - AddLog_P(LOG_LEVEL_DEBUG, PSTR("UP")); - snprintf_P(currentGesture, sizeof(currentGesture), PSTR("Up")); + AddLog_P(LOG_LEVEL_DEBUG, GESTURE_UP); + snprintf_P(currentGesture, sizeof(currentGesture), GESTURE_UP); break; case DIR_DOWN: - AddLog_P(LOG_LEVEL_DEBUG, PSTR("DOWN")); - snprintf_P(currentGesture, sizeof(currentGesture), PSTR("Down")); + AddLog_P(LOG_LEVEL_DEBUG, GESTURE_DOWN); + snprintf_P(currentGesture, sizeof(currentGesture), GESTURE_DOWN); break; case DIR_LEFT: - AddLog_P(LOG_LEVEL_DEBUG, PSTR("LEFT")); - snprintf_P(currentGesture, sizeof(currentGesture), PSTR("Left")); + AddLog_P(LOG_LEVEL_DEBUG, GESTURE_LEFT); + snprintf_P(currentGesture, sizeof(currentGesture), GESTURE_LEFT); break; case DIR_RIGHT: - AddLog_P(LOG_LEVEL_DEBUG, PSTR("RIGHT")); - snprintf_P(currentGesture, sizeof(currentGesture), PSTR("Right")); + AddLog_P(LOG_LEVEL_DEBUG, GESTURE_RIGHT); + snprintf_P(currentGesture, sizeof(currentGesture), GESTURE_RIGHT); break; default: if (APDS9960_overload) { - AddLog_P(LOG_LEVEL_DEBUG, PSTR("LONG")); - snprintf_P(currentGesture, sizeof(currentGesture), PSTR("Long")); + AddLog_P(LOG_LEVEL_DEBUG, GESTURE_LONG); + snprintf_P(currentGesture, sizeof(currentGesture), GESTURE_LONG); } else { - AddLog_P(LOG_LEVEL_DEBUG, PSTR("NONE")); - snprintf_P(currentGesture, sizeof(currentGesture), PSTR("None")); + AddLog_P(LOG_LEVEL_DEBUG, GESTURE_NONE); + snprintf_P(currentGesture, sizeof(currentGesture), GESTURE_NONE); } break; } @@ -1828,40 +1854,45 @@ void APDS9960_show(bool json) { if (!APDS9960type) { return; } if (!gesture_mode && !APDS9960_overload) { - char red_chr[10]; - char green_chr[10]; - char blue_chr[10]; - char ambient_chr[10]; - char cct_chr[10]; - char prox_chr[10]; + uint16_t ambient; readAllColorAndProximityData(); - - sprintf(ambient_chr, "%u", color_data.a/4); - sprintf(red_chr, "%u", color_data.r); - sprintf(green_chr, "%u", color_data.g); - sprintf(blue_chr, "%u", color_data.b); - sprintf(prox_chr, "%u", color_data.p); + ambient = color_data.a/4; /* disableLightSensor(); I2cWrite8(APDS9960_I2C_ADDR, APDS9960_ATIME, DEFAULT_ATIME); // reset to default enableLightSensor();*/ calculateColorTemperature(); // and calculate Lux - sprintf(cct_chr, "%u", color_data.cct); - if (json) { - ResponseAppend_P(PSTR(",\"%s\":{\"Red\":%s,\"Green\":%s,\"Blue\":%s,\"Ambient\":%s,\"CCT\":%s,\"Proximity\":%s}"), - APDS9960_TAG, red_chr, green_chr, blue_chr, ambient_chr, cct_chr, prox_chr); + ResponseAppend_P(PSTR(",\"%s\":{\"Red\":%u,\"Green\":%u,\"Blue\":%u,\"Ambient\":%u,\"CCT\":%s,\"Proximity\":%u}"), + APDS9960_TAG, + color_data.r, + color_data.g, + color_data.b, + ambient, + color_data.cct, + color_data.p); #ifdef USE_WEBSERVER } else { - WSContentSend_PD(HTTP_APDS9960_SNS, red_chr, green_chr, blue_chr, ambient_chr, cct_chr, prox_chr); + WSContentSend_PD(HTTP_SNS_COLOR_RED, APDS9960_TAG, color_data.r); + WSContentSend_PD(HTTP_SNS_COLOR_GREEN, APDS9960_TAG, color_data.g); + WSContentSend_PD(HTTP_SNS_COLOR_BLUE, APDS9960_TAG, color_data.b); +// WSContentSend_PD(HTTP_SNS_ILLUMINANCE, APDS9960_TAG, ambient); + WSContentSend_PD(HTTP_SNS_CCT, APDS9960_TAG, color_data.cct); + WSContentSend_PD(HTTP_SNS_PROXIMITY, APDS9960_TAG, color_data.p); #endif // USE_WEBSERVER } } else { - if (json && (currentGesture[0] != '\0' )) { - ResponseAppend_P(PSTR(",\"%s\":{\"%s\":1}"), APDS9960_TAG, currentGesture); - currentGesture[0] = '\0'; + if (currentGesture[0] != '\0') { + if (json) { + ResponseAppend_P(PSTR(",\"%s\":{\"%s\":1}"), APDS9960_TAG, currentGesture); +#ifdef USE_WEBSERVER + } else { + WSContentSend_PD(HTTP_SNS_GESTURE, APDS9960_TAG, currentGesture); +#endif // USE_WEBSERVER + currentGesture[0] = '\0'; + } } } } From c5caa0fbda5e5696faa122e06a80e0be69bd69d3 Mon Sep 17 00:00:00 2001 From: Mickael Gaillard Date: Sat, 25 Apr 2020 21:15:35 +0200 Subject: [PATCH 3/7] Optional for gesture (reduce size) Signed-off-by: Mickael Gaillard --- tasmota/xsns_27_apds9960.ino | 40 +++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/tasmota/xsns_27_apds9960.ino b/tasmota/xsns_27_apds9960.ino index cc673e853..7cf3a426c 100644 --- a/tasmota/xsns_27_apds9960.ino +++ b/tasmota/xsns_27_apds9960.ino @@ -61,8 +61,6 @@ #define APDS9930_CHIPID_1 0x12 // we will check, if someone got an incorrect sensor #define APDS9930_CHIPID_2 0x39 // there are case reports about "accidentially bought" 9930's -#define APDS9960_GESTURE - /* Gesture parameters */ #define GESTURE_THRESHOLD_OUT 10 #define GESTURE_SENSITIVITY_1 50 @@ -85,8 +83,8 @@ const char HTTP_SNS_GESTURE[] PROGMEM = "{s}%s " D_GESTURE "{m}%s{e}"; #define D_COLOR_RED "Red" #define D_COLOR_GREEN "Green" #define D_COLOR_BLUE "Blue" -#define D_PROXIMITY "Proximity" #define D_CCT "CCT" +#define D_PROXIMITY "Proximity" const char HTTP_SNS_COLOR_RED[] PROGMEM = "{s}%s " D_COLOR_RED "{m}%u{e}"; const char HTTP_SNS_COLOR_GREEN[] PROGMEM = "{s}%s " D_COLOR_GREEN "{m}%u{e}"; @@ -315,8 +313,11 @@ typedef struct color_data_type { } color_data_t; /*Members*/ +#ifdef APDS9960_GESTURE gesture_data_t gesture_data; gesture_t gesture; +#endif // APDS9960_GESTURE + color_data_t color_data; volatile uint8_t recovery_loop_counter = 0; // count number of stateloops to switch the sensor off, if needed @@ -747,6 +748,8 @@ void setProxPhotoMask(uint8_t mask) { I2cWrite8(APDS9960_I2C_ADDR, APDS9960_CONFIG3, val); } +#ifdef APDS9960_GESTURE + /** * @brief Gets the entry proximity threshold for gesture sensing * @@ -950,6 +953,8 @@ void setGestureWaitTime(uint8_t time) { I2cWrite8(APDS9960_I2C_ADDR, APDS9960_GCONF2, val); } +#endif // APDS9960_GESTURE + /** * @brief Gets the low threshold for ambient light interrupts * @@ -1264,6 +1269,8 @@ bool APDS9960_init(void) { I2cWrite8(APDS9960_I2C_ADDR, APDS9960_CONFIG3, DEFAULT_CONFIG3); /* Set default values for gesture sense registers */ +#ifdef APDS9960_GESTURE + setGestureEnterThresh(DEFAULT_GPENTH); setGestureExitThresh(DEFAULT_GEXTH); @@ -1281,6 +1288,8 @@ bool APDS9960_init(void) { I2cWrite8(APDS9960_I2C_ADDR, APDS9960_GCONF3, DEFAULT_GCONF3); setGestureIntEnable(DEFAULT_GIEN); + +#endif // APDS9960_GESTURE disablePower(); // go to sleep @@ -1383,6 +1392,7 @@ void disableProximitySensor(void) { setMode(PROXIMITY, OFF); } +#ifdef APDS9960_GESTURE /** * @brief Starts the gesture recognition engine on the APDS-9960 * @@ -1530,6 +1540,8 @@ int16_t readGesture(void) { } } +#endif // APDS9960_GESTURE + /** * Turn the APDS-9960 on * @@ -1566,6 +1578,8 @@ void readAllColorAndProximityData(void) { * High-level gesture controls \******************************************************************************/ +#ifdef APDS9960_GESTURE + /** * @brief Resets all the parameters in the gesture data member */ @@ -1760,6 +1774,8 @@ void handleGesture(void) { } } +#endif // APDS9960_GESTURE + void APDS9960_adjustATime(void) { // not really used atm // readAllColorAndProximityData(); I2cValidRead16LE(&color_data.a, APDS9960_I2C_ADDR, APDS9960_CDATAL); @@ -1792,6 +1808,8 @@ void APDS9960_adjustATime(void) { // not really used atm delay(20); } +#ifdef APDS9960_GESTURE + void APDS9960_loop(void) { if (recovery_loop_counter > 0) { recovery_loop_counter -= 1; @@ -1820,6 +1838,8 @@ void APDS9960_loop(void) { } } +#endif // APDS9960_GESTURE + void APDS9960_detect(void) { if (APDS9960type || I2cActive(APDS9960_I2C_ADDR)) { return; } @@ -1835,7 +1855,9 @@ void APDS9960_detect(void) { I2cSetActiveFound(APDS9960_I2C_ADDR, APDS9960_TAG); enableProximitySensor(); +#ifdef APDS9960_GESTURE enableGestureSensor(); +#endif // APDS9960_GESTURE } else { APDS9960type = 0; } @@ -1865,7 +1887,7 @@ void APDS9960_show(bool json) { calculateColorTemperature(); // and calculate Lux if (json) { - ResponseAppend_P(PSTR(",\"%s\":{\"Red\":%u,\"Green\":%u,\"Blue\":%u,\"Ambient\":%u,\"CCT\":%s,\"Proximity\":%u}"), + ResponseAppend_P(PSTR(",\"%s\":{\"Red\":%u,\"Green\":%u,\"Blue\":%u,\"Ambient\":%u,\"CCT\":%u,\"Proximity\":%u}"), APDS9960_TAG, color_data.r, color_data.g, @@ -1878,11 +1900,12 @@ void APDS9960_show(bool json) { WSContentSend_PD(HTTP_SNS_COLOR_RED, APDS9960_TAG, color_data.r); WSContentSend_PD(HTTP_SNS_COLOR_GREEN, APDS9960_TAG, color_data.g); WSContentSend_PD(HTTP_SNS_COLOR_BLUE, APDS9960_TAG, color_data.b); -// WSContentSend_PD(HTTP_SNS_ILLUMINANCE, APDS9960_TAG, ambient); + WSContentSend_PD(HTTP_SNS_ILLUMINANCE, APDS9960_TAG, ambient); WSContentSend_PD(HTTP_SNS_CCT, APDS9960_TAG, color_data.cct); WSContentSend_PD(HTTP_SNS_PROXIMITY, APDS9960_TAG, color_data.p); #endif // USE_WEBSERVER } +#ifdef APDS9960_GESTURE } else { if (currentGesture[0] != '\0') { if (json) { @@ -1894,6 +1917,7 @@ void APDS9960_show(bool json) { currentGesture[0] = '\0'; } } +#endif // APDS9960_GESTURE } } @@ -1913,11 +1937,14 @@ bool APDS9960CommandSensor(void) { switch (XdrvMailbox.payload) { case 0: // Off +#ifdef APDS9960_GESTURE disableGestureSensor(); +#endif // APDS9960_GESTURE gesture_mode = 0; enableLightSensor(); APDS9960_overload = false; // prevent unwanted re-enabling break; +#ifdef APDS9960_GESTURE case 1: // On with default gain of 4x if (APDS9960type) { setGestureGain(DEFAULT_GGAIN); @@ -1936,6 +1963,7 @@ bool APDS9960CommandSensor(void) { gesture_mode = 1; } break; +#endif // APDS9960_GESTURE default: int temp_aTime = (uint8_t)XdrvMailbox.payload; if (temp_aTime > 2 && temp_aTime < 256) { @@ -1964,9 +1992,11 @@ bool Xsns27(uint8_t function) { APDS9960_detect(); } else if (APDS9960type) { switch (function) { +#ifdef APDS9960_GESTURE case FUNC_EVERY_50_MSECOND: APDS9960_loop(); break; +#endif // APDS9960_GESTURE case FUNC_COMMAND_SENSOR: if (XSNS_27 == XdrvMailbox.index) { result = APDS9960CommandSensor(); From 5ab1e66c6a9cc899d99ba63b66f3145257a8abda Mon Sep 17 00:00:00 2001 From: device111 <48546979+device111@users.noreply.github.com> Date: Sat, 25 Apr 2020 23:17:25 +0200 Subject: [PATCH 4/7] Add Text based Error Log Message for MQTT Client --- tasmota/i18n.h | 13 ++++++++++++- tasmota/xdrv_02_mqtt.ino | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/tasmota/i18n.h b/tasmota/i18n.h index 534f5de00..9cb511e33 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -610,7 +610,17 @@ #define D_LOG_UPNP "UPP: " // UPnP #define D_LOG_WIFI "WIF: " // Wifi #define D_LOG_ZIGBEE "ZIG: " // Zigbee - +// MQTT State STATE +#define D_LOG_MQTT_CONNECTION_TIMEOUT "Connection Timeout, " //-4 +#define D_LOG_MQTT_CONNECTION_LOST "Connection Lost, " //-3 +#define D_LOG_MQTT_CONNECT_FAILED "Connection Failed, " //-2 +#define D_LOG_MQTT_DISCONNECTED "Disconnected, " //-1 +#define D_LOG_MQTT_CONNECTED "Connected, " // 0 +#define D_LOG_MQTT_CONNECT_BAD_PROTOCOL "Bad Protokoll, " // 1 +#define D_LOG_MQTT_CONNECT_BAD_CLIENT_ID "Bad Client ID, " // 2 +#define D_LOG_MQTT_CONNECT_UNAVAILABLE "Not available, " // 3 +#define D_LOG_MQTT_CONNECT_BAD_CREDENTIALS "Bad User/Password, " // 4 +#define D_LOG_MQTT_CONNECT_UNAUTHORIZED "No Authorisation, " // 5 /********************************************************************************************/ #define D_ASTERISK_PWD "****" @@ -666,6 +676,7 @@ const char S_LOG_I2C_FOUND_AT[] PROGMEM = D_LOG_I2C "%s " D_FOUND_AT " 0x%x"; const char S_LOG_HTTP[] PROGMEM = D_LOG_HTTP; const char S_LOG_WIFI[] PROGMEM = D_LOG_WIFI; const char S_LOG_MQTT[] PROGMEM = D_LOG_MQTT; +const char* const S_LOG_MQTT_STATE[] PROGMEM = { D_LOG_MQTT_CONNECTION_TIMEOUT, D_LOG_MQTT_CONNECTION_LOST,D_LOG_MQTT_CONNECT_FAILED, D_LOG_MQTT_DISCONNECTED, D_LOG_MQTT_CONNECTED, D_LOG_MQTT_CONNECT_BAD_PROTOCOL, D_LOG_MQTT_CONNECT_BAD_CLIENT_ID, D_LOG_MQTT_CONNECT_UNAVAILABLE, D_LOG_MQTT_CONNECT_BAD_CREDENTIALS, D_LOG_MQTT_CONNECT_UNAUTHORIZED }; const char S_RSLT_POWER[] PROGMEM = D_RSLT_POWER; const char S_RSLT_RESULT[] PROGMEM = D_RSLT_RESULT; const char S_RSLT_WARNING[] PROGMEM = D_RSLT_WARNING; diff --git a/tasmota/xdrv_02_mqtt.ino b/tasmota/xdrv_02_mqtt.ino index eaa2562e8..ef31640ce 100644 --- a/tasmota/xdrv_02_mqtt.ino +++ b/tasmota/xdrv_02_mqtt.ino @@ -487,7 +487,7 @@ void MqttDisconnected(int state) MqttClient.disconnect(); - AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT D_CONNECT_FAILED_TO " %s:%d, rc %d. " D_RETRY_IN " %d " D_UNIT_SECOND), SettingsText(SET_MQTT_HOST), Settings.mqtt_port, state, Mqtt.retry_counter); + AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT D_CONNECT_FAILED_TO " %s:%d, %s " D_RETRY_IN " %d " D_UNIT_SECOND), SettingsText(SET_MQTT_HOST), Settings.mqtt_port, S_LOG_MQTT_STATE[state+4], Mqtt.retry_counter); rules_flag.mqtt_disconnected = 1; } From 3a8bb77c9bacc1810fde00d1468fd7ae9a01dc04 Mon Sep 17 00:00:00 2001 From: Mickael Gaillard Date: Sun, 26 Apr 2020 00:05:54 +0200 Subject: [PATCH 5/7] Enable Gesture by default (fix bad remove) Signed-off-by: Mickael Gaillard --- tasmota/xsns_27_apds9960.ino | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tasmota/xsns_27_apds9960.ino b/tasmota/xsns_27_apds9960.ino index 7cf3a426c..e55deb276 100644 --- a/tasmota/xsns_27_apds9960.ino +++ b/tasmota/xsns_27_apds9960.ino @@ -61,6 +61,8 @@ #define APDS9930_CHIPID_1 0x12 // we will check, if someone got an incorrect sensor #define APDS9930_CHIPID_2 0x39 // there are case reports about "accidentially bought" 9930's +#define APDS9960_GESTURE // Enable Gesture feature(2k on flash) + /* Gesture parameters */ #define GESTURE_THRESHOLD_OUT 10 #define GESTURE_SENSITIVITY_1 50 From 7935e623a09f12d50c8c333c4e96a1f9e0b7e839 Mon Sep 17 00:00:00 2001 From: device111 <48546979+device111@users.noreply.github.com> Date: Sun, 26 Apr 2020 00:43:50 +0200 Subject: [PATCH 6/7] Add translation for AS3935 --- tasmota/i18n.h | 13 +------------ tasmota/language/bg-BG.h | 23 +++++++++++++++++++++++ tasmota/language/cs-CZ.h | 23 +++++++++++++++++++++++ tasmota/language/de-DE.h | 23 +++++++++++++++++++++++ tasmota/language/el-GR.h | 23 +++++++++++++++++++++++ tasmota/language/en-GB.h | 23 +++++++++++++++++++++++ tasmota/language/es-ES.h | 23 +++++++++++++++++++++++ tasmota/language/fr-FR.h | 23 +++++++++++++++++++++++ tasmota/language/he-HE.h | 23 +++++++++++++++++++++++ tasmota/language/hu-HU.h | 23 +++++++++++++++++++++++ tasmota/language/it-IT.h | 23 +++++++++++++++++++++++ tasmota/language/ko-KO.h | 23 +++++++++++++++++++++++ tasmota/language/nl-NL.h | 23 +++++++++++++++++++++++ tasmota/language/pl-PL.h | 23 +++++++++++++++++++++++ tasmota/language/pt-BR.h | 23 +++++++++++++++++++++++ tasmota/language/pt-PT.h | 23 +++++++++++++++++++++++ tasmota/language/ro-RO.h | 23 +++++++++++++++++++++++ tasmota/language/ru-RU.h | 23 +++++++++++++++++++++++ tasmota/language/sk-SK.h | 23 +++++++++++++++++++++++ tasmota/language/sv-SE.h | 23 +++++++++++++++++++++++ tasmota/language/tr-TR.h | 23 +++++++++++++++++++++++ tasmota/language/uk-UA.h | 23 +++++++++++++++++++++++ tasmota/language/zh-CN.h | 23 +++++++++++++++++++++++ tasmota/language/zh-TW.h | 23 +++++++++++++++++++++++ tasmota/xdrv_02_mqtt.ino | 2 +- tasmota/xsns_67_as3935.ino | 26 +------------------------- 26 files changed, 532 insertions(+), 38 deletions(-) diff --git a/tasmota/i18n.h b/tasmota/i18n.h index 9cb511e33..534f5de00 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -610,17 +610,7 @@ #define D_LOG_UPNP "UPP: " // UPnP #define D_LOG_WIFI "WIF: " // Wifi #define D_LOG_ZIGBEE "ZIG: " // Zigbee -// MQTT State STATE -#define D_LOG_MQTT_CONNECTION_TIMEOUT "Connection Timeout, " //-4 -#define D_LOG_MQTT_CONNECTION_LOST "Connection Lost, " //-3 -#define D_LOG_MQTT_CONNECT_FAILED "Connection Failed, " //-2 -#define D_LOG_MQTT_DISCONNECTED "Disconnected, " //-1 -#define D_LOG_MQTT_CONNECTED "Connected, " // 0 -#define D_LOG_MQTT_CONNECT_BAD_PROTOCOL "Bad Protokoll, " // 1 -#define D_LOG_MQTT_CONNECT_BAD_CLIENT_ID "Bad Client ID, " // 2 -#define D_LOG_MQTT_CONNECT_UNAVAILABLE "Not available, " // 3 -#define D_LOG_MQTT_CONNECT_BAD_CREDENTIALS "Bad User/Password, " // 4 -#define D_LOG_MQTT_CONNECT_UNAUTHORIZED "No Authorisation, " // 5 + /********************************************************************************************/ #define D_ASTERISK_PWD "****" @@ -676,7 +666,6 @@ const char S_LOG_I2C_FOUND_AT[] PROGMEM = D_LOG_I2C "%s " D_FOUND_AT " 0x%x"; const char S_LOG_HTTP[] PROGMEM = D_LOG_HTTP; const char S_LOG_WIFI[] PROGMEM = D_LOG_WIFI; const char S_LOG_MQTT[] PROGMEM = D_LOG_MQTT; -const char* const S_LOG_MQTT_STATE[] PROGMEM = { D_LOG_MQTT_CONNECTION_TIMEOUT, D_LOG_MQTT_CONNECTION_LOST,D_LOG_MQTT_CONNECT_FAILED, D_LOG_MQTT_DISCONNECTED, D_LOG_MQTT_CONNECTED, D_LOG_MQTT_CONNECT_BAD_PROTOCOL, D_LOG_MQTT_CONNECT_BAD_CLIENT_ID, D_LOG_MQTT_CONNECT_UNAVAILABLE, D_LOG_MQTT_CONNECT_BAD_CREDENTIALS, D_LOG_MQTT_CONNECT_UNAUTHORIZED }; const char S_RSLT_POWER[] PROGMEM = D_RSLT_POWER; const char S_RSLT_RESULT[] PROGMEM = D_RSLT_RESULT; const char S_RSLT_WARNING[] PROGMEM = D_RSLT_WARNING; diff --git a/tasmota/language/bg-BG.h b/tasmota/language/bg-BG.h index 5a771ec11..b0795b58b 100644 --- a/tasmota/language/bg-BG.h +++ b/tasmota/language/bg-BG.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_BG_BG_H_ diff --git a/tasmota/language/cs-CZ.h b/tasmota/language/cs-CZ.h index de709d07e..15d2cead2 100644 --- a/tasmota/language/cs-CZ.h +++ b/tasmota/language/cs-CZ.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_CS_CZ_H_ diff --git a/tasmota/language/de-DE.h b/tasmota/language/de-DE.h index 675ea9786..bafccdca0 100644 --- a/tasmota/language/de-DE.h +++ b/tasmota/language/de-DE.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload Dateien" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "Rauschpegel:" +#define D_AS3935_ENERGY "Energie:" +#define D_AS3935_DISTANCE "Entfernung:" +#define D_AS3935_DISTURBER "Störsingal:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "ca.:" +#define D_AS3935_AWAY "entfernt" +#define D_AS3935_LIGHT "Blitz" +#define D_AS3935_OUT "ausserhalb der Reichweite" +#define D_AS3935_NOT "Entfernung nicht ermittelbar" +#define D_AS3935_ABOVE "Blitz überhalb" +#define D_AS3935_NOISE "Rauschen entdeckt" +#define D_AS3935_DISTDET "Störer entdeckt" +#define D_AS3935_INTNOEV "Interrupt ohne Grund!" +#define D_AS3935_NOMESS "lausche..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "Kalibrierung fehlerhaft" +#define D_AS3935_CAL_OK "Cap gesetzt auf:" + #endif // _LANGUAGE_DE_DE_H_ diff --git a/tasmota/language/el-GR.h b/tasmota/language/el-GR.h index 19c0a0c56..d5ae776d5 100644 --- a/tasmota/language/el-GR.h +++ b/tasmota/language/el-GR.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_EL_GR_H_ diff --git a/tasmota/language/en-GB.h b/tasmota/language/en-GB.h index 4da4ba276..3d958cae9 100644 --- a/tasmota/language/en-GB.h +++ b/tasmota/language/en-GB.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_EN_GB_H_ diff --git a/tasmota/language/es-ES.h b/tasmota/language/es-ES.h index e074dcf6b..95dd0eeb6 100644 --- a/tasmota/language/es-ES.h +++ b/tasmota/language/es-ES.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Cargar" #define D_SCRIPT_UPLOAD_FILES "Cargar Archivos" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_ES_ES_H_ diff --git a/tasmota/language/fr-FR.h b/tasmota/language/fr-FR.h index a00ef34a1..5019f27ee 100644 --- a/tasmota/language/fr-FR.h +++ b/tasmota/language/fr-FR.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_FR_FR_H_ diff --git a/tasmota/language/he-HE.h b/tasmota/language/he-HE.h index f86a0abfe..28e52585a 100644 --- a/tasmota/language/he-HE.h +++ b/tasmota/language/he-HE.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_HE_HE_H_ diff --git a/tasmota/language/hu-HU.h b/tasmota/language/hu-HU.h index 8efaf236d..c8a05062a 100644 --- a/tasmota/language/hu-HU.h +++ b/tasmota/language/hu-HU.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_HU_HU_H_ diff --git a/tasmota/language/it-IT.h b/tasmota/language/it-IT.h index 4f1cfbe17..b0477f96a 100644 --- a/tasmota/language/it-IT.h +++ b/tasmota/language/it-IT.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload file" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_IT_IT_H_ diff --git a/tasmota/language/ko-KO.h b/tasmota/language/ko-KO.h index 75925b2d3..3ef98b5a2 100644 --- a/tasmota/language/ko-KO.h +++ b/tasmota/language/ko-KO.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_KO_KO_H_ diff --git a/tasmota/language/nl-NL.h b/tasmota/language/nl-NL.h index 7a3ad605d..7f90a0b79 100644 --- a/tasmota/language/nl-NL.h +++ b/tasmota/language/nl-NL.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_NL_NL_H_ diff --git a/tasmota/language/pl-PL.h b/tasmota/language/pl-PL.h index 5dba67103..045f3c6d6 100644 --- a/tasmota/language/pl-PL.h +++ b/tasmota/language/pl-PL.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_PL_PL_D_H_ diff --git a/tasmota/language/pt-BR.h b/tasmota/language/pt-BR.h index 58bc33d91..ce291548b 100644 --- a/tasmota/language/pt-BR.h +++ b/tasmota/language/pt-BR.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_PT_BR_H_ diff --git a/tasmota/language/pt-PT.h b/tasmota/language/pt-PT.h index e31997ecb..8716bf471 100644 --- a/tasmota/language/pt-PT.h +++ b/tasmota/language/pt-PT.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_PT_PT_H_ diff --git a/tasmota/language/ro-RO.h b/tasmota/language/ro-RO.h index 0d29cd8dd..74e583524 100644 --- a/tasmota/language/ro-RO.h +++ b/tasmota/language/ro-RO.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Încarcă" #define D_SCRIPT_UPLOAD_FILES "Încarcă fișiere" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_RO_RO_H_ diff --git a/tasmota/language/ru-RU.h b/tasmota/language/ru-RU.h index 12696e0bf..f7a03da44 100644 --- a/tasmota/language/ru-RU.h +++ b/tasmota/language/ru-RU.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_RU_RU_H_ diff --git a/tasmota/language/sk-SK.h b/tasmota/language/sk-SK.h index 93c02cddd..de740a482 100644 --- a/tasmota/language/sk-SK.h +++ b/tasmota/language/sk-SK.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_SK_SK_H_ diff --git a/tasmota/language/sv-SE.h b/tasmota/language/sv-SE.h index 9fdd52c5d..c17876a8e 100644 --- a/tasmota/language/sv-SE.h +++ b/tasmota/language/sv-SE.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_SV_SE_H_ diff --git a/tasmota/language/tr-TR.h b/tasmota/language/tr-TR.h index 2d568bf4a..fc2598ec7 100644 --- a/tasmota/language/tr-TR.h +++ b/tasmota/language/tr-TR.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_TR_TR_H_ diff --git a/tasmota/language/uk-UA.h b/tasmota/language/uk-UA.h index 64f97093c..bf955f241 100644 --- a/tasmota/language/uk-UA.h +++ b/tasmota/language/uk-UA.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Завантажити" #define D_SCRIPT_UPLOAD_FILES "Завантажити файли" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_UK_UA_H_ diff --git a/tasmota/language/zh-CN.h b/tasmota/language/zh-CN.h index b98006123..578c7ec2c 100644 --- a/tasmota/language/zh-CN.h +++ b/tasmota/language/zh-CN.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_ZH_CN_H_ diff --git a/tasmota/language/zh-TW.h b/tasmota/language/zh-TW.h index d4fa149d5..26f2e0ef1 100644 --- a/tasmota/language/zh-TW.h +++ b/tasmota/language/zh-TW.h @@ -750,4 +750,27 @@ #define D_SCRIPT_UPLOAD "Upload" #define D_SCRIPT_UPLOAD_FILES "Upload files" +//xsns_67_as3935.ino +#define D_AS3935_GAIN "gain:" +#define D_AS3935_ENERGY "energy:" +#define D_AS3935_DISTANCE "distance:" +#define D_AS3935_DISTURBER "disturber:" +#define D_AS3935_VRMS "µVrms:" +#define D_AS3935_APRX "aprx.:" +#define D_AS3935_AWAY "away" +#define D_AS3935_LIGHT "lightning" +#define D_AS3935_OUT "lightning out of range" +#define D_AS3935_NOT "distance not determined" +#define D_AS3935_ABOVE "lightning overhead" +#define D_AS3935_NOISE "noise detected" +#define D_AS3935_DISTDET "disturber detected" +#define D_AS3935_INTNOEV "Interrupt with no Event!" +#define D_AS3935_NOMESS "listening..." +#define D_AS3935_ON "On" +#define D_AS3935_OFF "Off" +#define D_AS3935_INDOORS "Indoors" +#define D_AS3935_OUTDOORS "Outdoors" +#define D_AS3935_CAL_FAIL "calibration failed" +#define D_AS3935_CAL_OK "calibration set to:" + #endif // _LANGUAGE_ZH_TW_H_ diff --git a/tasmota/xdrv_02_mqtt.ino b/tasmota/xdrv_02_mqtt.ino index ef31640ce..eaa2562e8 100644 --- a/tasmota/xdrv_02_mqtt.ino +++ b/tasmota/xdrv_02_mqtt.ino @@ -487,7 +487,7 @@ void MqttDisconnected(int state) MqttClient.disconnect(); - AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT D_CONNECT_FAILED_TO " %s:%d, %s " D_RETRY_IN " %d " D_UNIT_SECOND), SettingsText(SET_MQTT_HOST), Settings.mqtt_port, S_LOG_MQTT_STATE[state+4], Mqtt.retry_counter); + AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT D_CONNECT_FAILED_TO " %s:%d, rc %d. " D_RETRY_IN " %d " D_UNIT_SECOND), SettingsText(SET_MQTT_HOST), Settings.mqtt_port, state, Mqtt.retry_counter); rules_flag.mqtt_disconnected = 1; } diff --git a/tasmota/xsns_67_as3935.ino b/tasmota/xsns_67_as3935.ino index aade21dec..61042228f 100644 --- a/tasmota/xsns_67_as3935.ino +++ b/tasmota/xsns_67_as3935.ino @@ -51,31 +51,7 @@ #define INDOORS 0x24 #define OUTDOORS 0x1C -// Translation -// http -#define D_AS3935_GAIN "gain:" -#define D_AS3935_ENERGY "energy:" -#define D_AS3935_DISTANCE "distance:" -#define D_AS3935_DISTURBER "disturber:" -#define D_AS3935_VRMS "µVrms:" -// http Message -#define D_AS3935_APRX "aprx.:" -#define D_AS3935_AWAY "away" -#define D_AS3935_LIGHT "lightning" -#define D_AS3935_OUT "lightning out of range" -#define D_AS3935_NOT "distance not determined" -#define D_AS3935_ABOVE "lightning overhead" -#define D_AS3935_NOISE "noise detected" -#define D_AS3935_DISTDET "disturber detected" -#define D_AS3935_INTNOEV "Interrupt with no Event!" -#define D_AS3935_NOMESS "listening..." -// CMD Status -#define D_AS3935_ON "On" -#define D_AS3935_OFF "Off" -#define D_AS3935_INDOORS "Indoors" -#define D_AS3935_OUTDOORS "Outdoors" -#define D_AS3935_CAL_FAIL "calibration failed" -#define D_AS3935_CAL_OK "calibration set to:" + // Global const char HTTP_SNS_UNIT_KILOMETER[] PROGMEM = D_UNIT_KILOMETER; From 493a124783901dd137c04ac3bd20ebe10cde3d21 Mon Sep 17 00:00:00 2001 From: Paul C Diem Date: Sat, 25 Apr 2020 17:49:34 -0500 Subject: [PATCH 7/7] Add DGR light sequence support --- tasmota/i18n.h | 1 + tasmota/my_user_config.h | 3 +- tasmota/support_device_groups.ino | 6 +-- tasmota/tasmota_globals.h | 9 +--- tasmota/xdrv_04_light.ino | 72 +++++++++++++++++++++++++++---- 5 files changed, 72 insertions(+), 19 deletions(-) diff --git a/tasmota/i18n.h b/tasmota/i18n.h index 534f5de00..9989238fa 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -398,6 +398,7 @@ #define D_CMND_RGBWWTABLE "RGBWWTable" #define D_CMND_ROTATION "Rotation" #define D_CMND_SCHEME "Scheme" +#define D_CMND_SEQUENCE_OFFSET "SequenceOffset" #define D_CMND_SPEED "Speed" #define D_CMND_WAKEUP "Wakeup" #define D_CMND_WAKEUPDURATION "WakeUpDuration" diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index e20a653a8..8d4ac7e51 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -426,7 +426,7 @@ #define DEVICE_GROUPS_PORT 4447 // Device groups multicast port #define USE_DEVICE_GROUPS_SEND // Add support for the DevGroupSend command (+0k6 code) #define USE_PWM_DIMMER // Add support for MJ-SD01/acenx/NTONPOWER PWM dimmers (+2k2 code, DGR=0k4) - #define USE_PWM_DIMMER_REMOTE // Add support for remote switches to PWM Dimmer, also adds device groups support (+0k9 code plus device groups size) + #define USE_PWM_DIMMER_REMOTE // Add support for remote switches to PWM Dimmer (requires USE_DEVICE_GROUPS) (+0k9 code) //#define USE_KEELOQ // Add support for Jarolift rollers by Keeloq algorithm (+4k5 code) #define USE_SONOFF_D1 // Add support for Sonoff D1 Dimmer (+0k7 code) @@ -441,6 +441,7 @@ #define USE_SONOFF_L1 // Add support for Sonoff L1 led control #define USE_ELECTRIQ_MOODL // Add support for ElectriQ iQ-wifiMOODL RGBW LED controller (+0k3 code) #define USE_LIGHT_PALETTE // Add support for color palette (+0k7 code) +#define USE_DGR_LIGHT_SEQUENCE // Add support for device group light sequencing (requires USE_DEVICE_GROUPS) (+0k2 code) // -- Counter input ------------------------------- #define USE_COUNTER // Enable inputs as counter (+0k8 code) diff --git a/tasmota/support_device_groups.ino b/tasmota/support_device_groups.ino index 1af1c7711..30b5bacc0 100644 --- a/tasmota/support_device_groups.ino +++ b/tasmota/support_device_groups.ino @@ -350,7 +350,7 @@ void SendReceiveDeviceGroupMessage(struct device_group * device_group, struct de else { switch (item) { case DGR_ITEM_LIGHT_CHANNELS: - log_length = snprintf(log_ptr, log_remaining, PSTR("%u,%u,%u,%u,%u"), *message_ptr, *(message_ptr + 1), *(message_ptr + 2), *(message_ptr + 3), *(message_ptr + 4)); + log_length = snprintf(log_ptr, log_remaining, PSTR("%u,%u,%u,%u,%u,%u"), *message_ptr, *(message_ptr + 1), *(message_ptr + 2), *(message_ptr + 3), *(message_ptr + 4), *(message_ptr + 5)); break; } } @@ -549,7 +549,7 @@ bool _SendDeviceGroupMessage(uint8_t device_group_index, DevGroupMessageType mes else { switch (item) { case DGR_ITEM_LIGHT_CHANNELS: - for (int i = 0; i < 5; i++) { + for (int i = 0; i < 6; i++) { *out_ptr++ = strtoul((char *)value_ptr, (char **)&value_ptr, 0); if (*value_ptr == ',') value_ptr++; } @@ -665,7 +665,7 @@ bool _SendDeviceGroupMessage(uint8_t device_group_index, DevGroupMessageType mes else { switch (item) { case DGR_ITEM_LIGHT_CHANNELS: - value = 5; + value = 6; break; } } diff --git a/tasmota/tasmota_globals.h b/tasmota/tasmota_globals.h index cae92fe4c..9b72ba954 100644 --- a/tasmota/tasmota_globals.h +++ b/tasmota/tasmota_globals.h @@ -114,15 +114,10 @@ extern "C" void resetPins(); #define MESSZ (MQTT_MAX_PACKET_SIZE -TOPSZ -7) // Max number of characters in JSON message string #endif -#ifdef USE_PWM_DIMMER_REMOTE -#ifdef USE_PWM_DIMMER #ifndef USE_DEVICE_GROUPS -#define USE_DEVICE_GROUPS -#endif // USE_DEVICE_GROUPS -#else // USE_PWM_DIMMER #undef USE_PWM_DIMMER_REMOTE -#endif // USE_PWM_DIMMER -#endif // USE_PWM_DIMMER_REMOTE +#undef USE_DGR_LIGHT_SEQUENCE +#endif // USE_DEVICE_GROUPS #ifndef DOMOTICZ_UPDATE_TIMER #define DOMOTICZ_UPDATE_TIMER 0 // [DomoticzUpdateTimer] Send relay status (0 = disable, 1 - 3600 seconds) (Optional) diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino index 96ffd1f6c..80bfd01d8 100644 --- a/tasmota/xdrv_04_light.ino +++ b/tasmota/xdrv_04_light.ino @@ -135,6 +135,9 @@ const char kLightCommands[] PROGMEM = "|" // No prefix #ifdef USE_LIGHT_PALETTE "|" D_CMND_PALETTE #endif // USE_LIGHT_PALETTE +#ifdef USE_DGR_LIGHT_SEQUENCE + "|" D_CMND_SEQUENCE_OFFSET +#endif // USE_DGR_LIGHT_SEQUENCE "|UNDOCA" ; void (* const LightCommand[])(void) PROGMEM = { @@ -144,6 +147,9 @@ void (* const LightCommand[])(void) PROGMEM = { #ifdef USE_LIGHT_PALETTE &CmndPalette, #endif // USE_LIGHT_PALETTE +#ifdef USE_DGR_LIGHT_SEQUENCE + &CmndSequenceOffset, +#endif // USE_DGR_LIGHT_SEQUENCE &CmndUndocA }; // Light color mode, either RGB alone, or white-CT alone, or both only available if ct_rgb_linked is false @@ -284,6 +290,10 @@ struct LIGHT { #ifdef USE_DEVICE_GROUPS uint8_t last_scheme = 0; bool devgrp_no_channels_out = false; // don't share channels with device group (e.g. if scheme set by other device) +#ifdef USE_DGR_LIGHT_SEQUENCE + uint8_t sequence_offset = 0; // number of channel changes this light is behind the master + uint8_t * channels_fifo; +#endif // USE_DGR_LIGHT_SEQUENCE #endif // USE_DEVICE_GROUPS #ifdef USE_LIGHT_PALETTE uint8_t palette_count = 0; // palette entry count @@ -2225,16 +2235,22 @@ void calcGammaBulbs(uint16_t cur_col_10[5]) { void LightSendDeviceGroupStatus(bool force) { static uint8_t last_channels[LST_MAX]; + static uint8_t channels_sequence = 0; static uint8_t last_bri; uint8_t bri = light_state.getBri(); bool send_bri_update = (force || bri != last_bri); if (Light.subtype > LST_SINGLE && !Light.devgrp_no_channels_out) { - uint8_t channels[LST_MAX]; + uint8_t channels[LST_MAX + 1]; light_state.getChannels(channels); - if (force || memcmp(last_channels, channels, LST_MAX)) { + if (force || memcmp(last_channels, channels, LST_MAX) +#ifdef USE_LIGHT_PALETTE + || (Settings.light_scheme && Light.palette_count) +#endif // USE_LIGHT_PALETTE + ) { memcpy(last_channels, channels, LST_MAX); + channels[LST_MAX] = ++channels_sequence; SendLocalDeviceGroupMessage((send_bri_update ? DGR_MSGTYP_PARTIAL_UPDATE : DGR_MSGTYP_UPDATE), DGR_ITEM_LIGHT_CHANNELS, channels); } } @@ -2285,7 +2301,30 @@ void LightHandleDevGroupItem(void) } break; case DGR_ITEM_LIGHT_CHANNELS: - light_controller.changeChannels((uint8_t *)XdrvMailbox.data); +#ifdef USE_DGR_LIGHT_SEQUENCE + { + static uint8_t last_sequence = 0; + + // If a sequence offset is set, set the channels to the ones we received + // changes ago. + if (Light.sequence_offset) { + light_controller.changeChannels(Light.channels_fifo); + + // Shift the fifo down and load the newly received channels at the end for this update and + // any updates we missed. + int last_entry = (Light.sequence_offset - 1) * LST_MAX; + for (uint8_t sequence = (uint8_t)XdrvMailbox.data[LST_MAX]; (uint8_t)(sequence - last_sequence) > 0; last_sequence++) { + memmove(Light.channels_fifo, &Light.channels_fifo[LST_MAX], last_entry); + memcpy(&Light.channels_fifo[last_entry], XdrvMailbox.data, LST_MAX); + } + } + else { +#endif // USE_DGR_LIGHT_SEQUENCE + light_controller.changeChannels((uint8_t *)XdrvMailbox.data); +#ifdef USE_DGR_LIGHT_SEQUENCE + } + } +#endif // USE_DGR_LIGHT_SEQUENCE send_state = true; break; case DGR_ITEM_LIGHT_FIXED_COLOR: @@ -2922,12 +2961,15 @@ void CmndPalette(void) for (int entry = 0; entry < Light.palette_count; entry++) { if (Settings.flag.decimal_text) { // SetOption17 - Switch between decimal or hexadecimal output *p++ = '"'; + for (uint32_t i = 0; i < Light.subtype; i++) { + p += sprintf_P(p, PSTR("%d,"), *palette_entry++); + } + *(p - 1) = '"'; } - memcpy(Light.current_color, palette_entry, Light.subtype); - LightGetColor(p); - p += strlen(p); - if (Settings.flag.decimal_text) { // SetOption17 - Switch between decimal or hexadecimal output - *p++ = '"'; + else { + for (uint32_t i = 0; i < Light.subtype; i++) { + p += sprintf_P(p, PSTR("%02X"), *palette_entry++); + } } *p++ = ','; } @@ -2939,6 +2981,20 @@ void CmndPalette(void) } #endif // USE_LIGHT_PALETTE +#ifdef USE_DGR_LIGHT_SEQUENCE +void CmndSequenceOffset(void) +{ + if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 255)) { + if (XdrvMailbox.payload != Light.sequence_offset) { + if (Light.sequence_offset) free(Light.channels_fifo); + Light.sequence_offset = XdrvMailbox.payload; + if (Light.sequence_offset) Light.channels_fifo = (uint8_t *)calloc(Light.sequence_offset, LST_MAX); + } + } + ResponseCmndNumber(Light.sequence_offset); +} +#endif // USE_DGR_LIGHT_SEQUENCE + void CmndUndocA(void) { // Theos legacy status