diff --git a/CHANGELOG.md b/CHANGELOG.md index c37bfbaad..a7afe1c87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ All notable changes to this project will be documented in this file. ### Changed - ESP32 Platform from 2024.12.30 to 2025.01.30, Framework (Arduino Core) from v3.1.0.241206 to v3.1.1.250109 and IDF to 5.3.2 (#22792) +- Allow negative values for AdcParam/AdcGpio INPUT, TEMP and RANGE parameters (#22809) ### Fixed diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 525e4961b..90dd1fa3a 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -141,6 +141,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm - ESP32 Platform from 2024.12.30 to 2025.01.30, Framework (Arduino Core) from v3.1.0.241206 to v3.1.1.250109 and IDF to 5.3.2 [#22792](https://github.com/arendst/Tasmota/issues/22792) - GPIOViewer from v1.5.6 to v1.5.9 (No functional change) - Postpone save_data during light animation when fade is Off +- Allow negative values for AdcParam/AdcGpio INPUT, TEMP and RANGE parameters [#22809](https://github.com/arendst/Tasmota/issues/22809) - Command `Pixels` has backwards compatible arguments fixing #22755 [#22791](https://github.com/arendst/Tasmota/issues/22791) - ESP32 disable PSRAM check (and on restart some relay toggles) with `#define DISABLE_PSRAMCHECK true` [#21266](https://github.com/arendst/Tasmota/issues/21266) - Berry bit-shift operators to `int64` [#22709](https://github.com/arendst/Tasmota/issues/22709) diff --git a/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino b/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino index bcd9c358f..7eac532a7 100644 --- a/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino +++ b/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino @@ -1055,8 +1055,8 @@ void CmndAdcParam(void) { if ((GPIO_ADC_INPUT == adc_type) || (GPIO_ADC_TEMP == adc_type) || (GPIO_ADC_RANGE == adc_type)) { - Adc[channel].param[2] = abs(strtol(ArgV(argument, 4), nullptr, 10)); // param3 = abs(int) - Adc[channel].param[3] = abs(strtol(ArgV(argument, 5), nullptr, 10)); // param4 = abs(int) + Adc[channel].param[2] = strtol(ArgV(argument, 4), nullptr, 10); // param3 = int + Adc[channel].param[3] = strtol(ArgV(argument, 5), nullptr, 10); // param4 = int } else { Adc[channel].param[2] = (int)(CharToFloat(ArgV(argument, 4)) * 10000); // param3 = float if (ArgC() > 4) { @@ -1068,7 +1068,7 @@ void CmndAdcParam(void) { if (GPIO_ADC_PH == adc_type) { float phLow = CharToFloat(ArgV(argument, 2)); Adc[channel].param[0] = phLow * ANALOG_PH_DECIMAL_MULTIPLIER; // param1 = float -// Adc[channel].param[1] = strtol(ArgV(argument, 3), nullptr, 10); // param2 = int +// Adc[channel].param[1] = strtol(ArgV(argument, 3), nullptr, 10); // param2 = int float phHigh = CharToFloat(ArgV(argument, 4)); Adc[channel].param[2] = phHigh * ANALOG_PH_DECIMAL_MULTIPLIER; // param3 = float Adc[channel].param[3] = strtol(ArgV(argument, 5), nullptr, 10); // param4 = int @@ -1084,9 +1084,9 @@ void CmndAdcParam(void) { } } if (GPIO_ADC_MQ == adc_type) { - float a = CharToFloat(ArgV(argument, 3)); // param2 = float - float b = CharToFloat(ArgV(argument, 4)); // param3 = float - float ratioMQCleanAir = CharToFloat(ArgV(argument, 5)); // param4 = float + float a = CharToFloat(ArgV(argument, 3)); // param2 = float + float b = CharToFloat(ArgV(argument, 4)); // param3 = float + float ratioMQCleanAir = CharToFloat(ArgV(argument, 5)); // param4 = float if ((0 == a) && (0 == b) && (0 == ratioMQCleanAir)) { if (2 == Adc[channel].param[0]) { // param1 = int a = 574.25; @@ -1115,7 +1115,7 @@ void CmndAdcParam(void) { // AddLog(LOG_LEVEL_INFO, PSTR("ADC: MQ reset mq%d, a = %2_f, b = %2_f, ratioMQCleanAir = %2_f"), Adc[channel].param[0], &a, &b, &ratioMQCleanAir); } - } else { // Set default values based on current adc type + } else { // Set default values based on current adc type // AdcParam 1 AdcInitParams(channel); } @@ -1124,7 +1124,7 @@ void CmndAdcParam(void) { // AdcParam / AdcGpio AdcGetSettings(channel); - Response_P(PSTR("{\"%s"), XdrvMailbox.command); // {"AdcParam or {"AdcGpio + Response_P(PSTR("{\"%s"), XdrvMailbox.command); // {"AdcParam or {"AdcGpio if (strstr_P(XdrvMailbox.command, PSTR(D_CMND_ADCGPIO))) { #ifdef ESP8266 ResponseAppend_P(PSTR("\":[")); @@ -1139,18 +1139,18 @@ void CmndAdcParam(void) { (GPIO_ADC_TEMP == adc_type) || (GPIO_ADC_RANGE == adc_type) || (GPIO_ADC_MQ == adc_type)) { - ResponseAppend_P(PSTR(",%d,%d"), Adc[channel].param[2], Adc[channel].param[3]); // param3 = int, param4 = int + ResponseAppend_P(PSTR(",%d,%d"), Adc[channel].param[2], Adc[channel].param[3]); // param3 = int, param4 = int } else { float param = (float)Adc[channel].param[2] / 10000; - ResponseAppend_P(PSTR(",%*_f"), Decimals(Adc[channel].param[2]), ¶m); // param3 = float + ResponseAppend_P(PSTR(",%*_f"), Decimals(Adc[channel].param[2]), ¶m); // param3 = float if ((GPIO_ADC_CT_POWER == adc_type) || (GPIO_ADC_VOLTAGE == adc_type) || (GPIO_ADC_CURRENT == adc_type)) { param = (float)Adc[channel].param[3] / 10000; - ResponseAppend_P(PSTR(",%*_f"), Decimals(Adc[channel].param[3]), ¶m); // param4 = float + ResponseAppend_P(PSTR(",%*_f"), Decimals(Adc[channel].param[3]), ¶m); // param4 = float } else { - ResponseAppend_P(PSTR(",%d"), Adc[channel].param[3]); // param4 = int + ResponseAppend_P(PSTR(",%d"), Adc[channel].param[3]); // param4 = int } } ResponseAppend_P(PSTR("]}"));