From bb567b523cadd326be308dce2b7011bac1575331 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 17 Nov 2019 17:42:57 +0100 Subject: [PATCH 01/10] Update PubSubClient.cpp --- .../src/PubSubClient.cpp | 75 +++++++++++-------- 1 file changed, 43 insertions(+), 32 deletions(-) diff --git a/lib/PubSubClient-EspEasy-2.7.12/src/PubSubClient.cpp b/lib/PubSubClient-EspEasy-2.7.12/src/PubSubClient.cpp index 9fe15006a..68cc2dafa 100644 --- a/lib/PubSubClient-EspEasy-2.7.12/src/PubSubClient.cpp +++ b/lib/PubSubClient-EspEasy-2.7.12/src/PubSubClient.cpp @@ -127,7 +127,7 @@ boolean PubSubClient::connect(const char *id, const char *user, const char *pass if (_client->connected()) { result = 1; } else { - if (domain != NULL) { + if (domain.length() != 0) { result = _client->connect(this->domain.c_str(), this->port); } else { result = _client->connect(this->ip, this->port); @@ -321,9 +321,10 @@ boolean PubSubClient::loop() { } else { buffer[0] = MQTTPINGREQ; buffer[1] = 0; - _client->write(buffer,2); - lastOutActivity = t; - lastInActivity = t; + if (_client->write(buffer,2) != 0) { + lastOutActivity = t; + lastInActivity = t; + } pingOutstanding = true; } } @@ -351,9 +352,9 @@ boolean PubSubClient::loop() { buffer[1] = 2; buffer[2] = (msgId >> 8); buffer[3] = (msgId & 0xFF); - _client->write(buffer,4); - lastOutActivity = t; - + if (_client->write(buffer,4) != 0) { + lastOutActivity = t; + } } else { payload = buffer+llen+3+tl; callback(topic,payload,len-llen-3-tl); @@ -456,11 +457,12 @@ boolean PubSubClient::publish_P(const char* topic, const uint8_t* payload, unsig for (i=0;iwrite((char)pgm_read_byte_near(payload + i)); } - - lastOutActivity = millis(); + if (rc > 0) { + lastOutActivity = millis(); + } // Header (1 byte) + llen + identifier (2 bytes) + topic len + payload len - const int expectedLength = 1 + llen + 2 + tlen + plength; + const unsigned int expectedLength = 1 + llen + 2 + tlen + plength; return (rc == expectedLength); } @@ -475,7 +477,9 @@ boolean PubSubClient::beginPublish(const char* topic, unsigned int plength, bool } size_t hlen = buildHeader(header, buffer, plength+length-MQTT_MAX_HEADER_SIZE); uint16_t rc = _client->write(buffer+(MQTT_MAX_HEADER_SIZE-hlen),length-(MQTT_MAX_HEADER_SIZE-hlen)); - lastOutActivity = millis(); + if (rc > 0) { + lastOutActivity = millis(); + } return (rc == (length-(MQTT_MAX_HEADER_SIZE-hlen))); } return false; @@ -486,19 +490,27 @@ int PubSubClient::endPublish() { } size_t PubSubClient::write(uint8_t data) { - lastOutActivity = millis(); if (_client == nullptr) { - return 0; + lastOutActivity = millis(); + return 0; } - return _client->write(data); + size_t rc = _client->write(data); + if (rc != 0) { + lastOutActivity = millis(); + } + return rc; } size_t PubSubClient::write(const uint8_t *buffer, size_t size) { - lastOutActivity = millis(); if (_client == nullptr) { - return 0; + lastOutActivity = millis(); + return 0; } - return _client->write(buffer,size); + size_t rc = _client->write(buffer,size); + if (rc != 0) { + lastOutActivity = millis(); + } + return rc; } size_t PubSubClient::buildHeader(uint8_t header, uint8_t* buf, uint16_t length) { @@ -544,7 +556,9 @@ boolean PubSubClient::write(uint8_t header, uint8_t* buf, uint16_t length) { return result; #else rc = _client->write(buf+(MQTT_MAX_HEADER_SIZE-hlen),length+hlen); - lastOutActivity = millis(); + if (rc != 0) { + lastOutActivity = millis(); + } return (rc == hlen+length); #endif } @@ -623,22 +637,19 @@ uint16_t PubSubClient::writeString(const char* string, uint8_t* buf, uint16_t po boolean PubSubClient::connected() { - boolean rc; if (_client == NULL ) { - rc = false; - } else { - rc = (int)_client->connected(); - if (!rc) { - if (this->_state == MQTT_CONNECTED) { - this->_state = MQTT_CONNECTION_LOST; - _client->flush(); - _client->stop(); - } - } else { - return this->_state == MQTT_CONNECTED; - } + this->_state = MQTT_DISCONNECTED; + return false; } - return rc; + if (_client->connected() == 0) { + bool lastStateConnected = this->_state == MQTT_CONNECTED; + this->disconnect(); + if (lastStateConnected) { + this->_state = MQTT_CONNECTION_LOST; + } + return false; + } + return this->_state == MQTT_CONNECTED; } PubSubClient& PubSubClient::setServer(uint8_t * ip, uint16_t port) { From 68c32556587f63b5055418813f5b9e4147598914 Mon Sep 17 00:00:00 2001 From: stefanbode Date: Mon, 18 Nov 2019 09:18:21 +0100 Subject: [PATCH 02/10] Enable Temp. Compensation by global offset --- tasmota/support_command.ino | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino index 939189938..11d51f610 100644 --- a/tasmota/support_command.ino +++ b/tasmota/support_command.ino @@ -26,7 +26,7 @@ const char kTasmotaCommands[] PROGMEM = "|" // No prefix D_CMND_BUTTONDEBOUNCE "|" D_CMND_SWITCHDEBOUNCE "|" D_CMND_SYSLOG "|" D_CMND_LOGHOST "|" D_CMND_LOGPORT "|" D_CMND_SERIALSEND "|" D_CMND_BAUDRATE "|" D_CMND_SERIALDELIMITER "|" D_CMND_IPADDRESS "|" D_CMND_NTPSERVER "|" D_CMND_AP "|" D_CMND_SSID "|" D_CMND_PASSWORD "|" D_CMND_HOSTNAME "|" D_CMND_WIFICONFIG "|" D_CMND_FRIENDLYNAME "|" D_CMND_SWITCHMODE "|" D_CMND_INTERLOCK "|" D_CMND_TELEPERIOD "|" D_CMND_RESET "|" D_CMND_TIME "|" D_CMND_TIMEZONE "|" D_CMND_TIMESTD "|" - D_CMND_TIMEDST "|" D_CMND_ALTITUDE "|" D_CMND_LEDPOWER "|" D_CMND_LEDSTATE "|" D_CMND_LEDMASK "|" D_CMND_WIFIPOWER "|" + D_CMND_TIMEDST "|" D_CMND_ALTITUDE "|" D_CMND_LEDPOWER "|" D_CMND_LEDSTATE "|" D_CMND_LEDMASK "|" D_CMND_WIFIPOWER "|" D_CMND_TEMPOFFSET "|" #ifdef USE_I2C D_CMND_I2CSCAN "|" D_CMND_I2CDRIVER "|" #endif @@ -41,7 +41,7 @@ void (* const TasmotaCommand[])(void) PROGMEM = { &CmndButtonDebounce, &CmndSwitchDebounce, &CmndSyslog, &CmndLoghost, &CmndLogport, &CmndSerialSend, &CmndBaudrate, &CmndSerialDelimiter, &CmndIpAddress, &CmndNtpServer, &CmndAp, &CmndSsid, &CmndPassword, &CmndHostname, &CmndWifiConfig, &CmndFriendlyname, &CmndSwitchMode, &CmndInterlock, &CmndTeleperiod, &CmndReset, &CmndTime, &CmndTimezone, &CmndTimeStd, - &CmndTimeDst, &CmndAltitude, &CmndLedPower, &CmndLedState, &CmndLedMask, &CmndWifiPower, + &CmndTimeDst, &CmndAltitude, &CmndLedPower, &CmndLedState, &CmndLedMask, &CmndWifiPower, &CmndTempOffset, #ifdef USE_I2C &CmndI2cScan, CmndI2cDriver, #endif @@ -496,6 +496,15 @@ void CmndState(void) #endif // USE_HOME_ASSISTANT } +void CmndTempOffset(void) +{ + if ((XdrvMailbox.payload > -127) && (XdrvMailbox.payload < 127) && (XdrvMailbox.data_len > 0)) { + Settings.temp_comp = XdrvMailbox.payload; + } + ResponseCmndNumber(Settings.temp_comp); +} + + void CmndSleep(void) { if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload < 251)) { From e2131e3693d8f49d1db1669c9a88881ebda1e04c Mon Sep 17 00:00:00 2001 From: stefanbode Date: Mon, 18 Nov 2019 09:21:11 +0100 Subject: [PATCH 03/10] Update i18n.h --- tasmota/i18n.h | 1 + 1 file changed, 1 insertion(+) diff --git a/tasmota/i18n.h b/tasmota/i18n.h index d1e85c1de..5de4b7a1d 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -290,6 +290,7 @@ #define D_JSON_GPIO "GPIO" #define D_JSON_FLAG "FLAG" #define D_JSON_BASE "BASE" +#define D_CMND_TEMPOFFSET "TempOffset" // Commands xdrv_01_mqtt.ino #define D_CMND_MQTTLOG "MqttLog" From c48e6daed40a03cd85bf6aceea5cecb3d8940ce3 Mon Sep 17 00:00:00 2001 From: stefanbode Date: Mon, 18 Nov 2019 09:23:21 +0100 Subject: [PATCH 04/10] Update support.ino --- tasmota/support.ino | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tasmota/support.ino b/tasmota/support.ino index 0520a04d2..a0f859d56 100644 --- a/tasmota/support.ino +++ b/tasmota/support.ino @@ -520,6 +520,7 @@ float ConvertTemp(float c) if (!isnan(c) && Settings.flag.temperature_conversion) { // SetOption8 - Switch between Celsius or Fahrenheit result = c * 1.8 + 32; // Fahrenheit } + result = result + (0.1 * Settings.temp_comp); return result; } @@ -530,6 +531,7 @@ float ConvertTempToCelsius(float c) if (!isnan(c) && Settings.flag.temperature_conversion) { // SetOption8 - Switch between Celsius or Fahrenheit result = (c - 32) / 1.8; // Celsius } + result = result + (0.1 * Settings.temp_comp); return result; } From 1cf41527477e3a46c2ed4369332e2b709b16834a Mon Sep 17 00:00:00 2001 From: stefanbode Date: Mon, 18 Nov 2019 09:31:39 +0100 Subject: [PATCH 05/10] Update settings.h --- tasmota/settings.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasmota/settings.h b/tasmota/settings.h index f88f33c52..7e557e15e 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -434,8 +434,8 @@ struct SYSCFG { uint32_t deepsleep; // E94 uint16_t energy_power_delta; // E98 uint8_t shutter_motordelay[MAX_SHUTTERS]; // E9A - - uint8_t free_e9e[2]; // E9E + int8_t temp_comp; + uint8_t free_e9e[1]; // E9E uint8_t web_color2[2][3]; // EA0 - Needs to be on integer / 3 distance from web_color From 11c5947c2393f5bbc0fce552e36f65a1ac48a689 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Mon, 18 Nov 2019 11:02:04 +0100 Subject: [PATCH 06/10] Fix possible reboot loop regression --- tasmota/support.ino | 20 ++++++++++++++++++++ tasmota/support_wifi.ino | 1 - tasmota/tasmota.ino | 8 ++------ tasmota/xdrv_29_deepsleep.ino | 8 ++++---- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/tasmota/support.ino b/tasmota/support.ino index 0520a04d2..77103272a 100644 --- a/tasmota/support.ino +++ b/tasmota/support.ino @@ -20,6 +20,26 @@ IPAddress syslog_host_addr; // Syslog host IP address uint32_t syslog_host_hash = 0; // Syslog host name hash +extern "C" { +extern struct rst_info resetInfo; +} + +uint32_t ResetReason(void) +{ + /* + user_interface.h + REASON_DEFAULT_RST = 0, // normal startup by power on + REASON_WDT_RST = 1, // hardware watch dog reset + REASON_EXCEPTION_RST = 2, // exception reset, GPIO status won’t change + REASON_SOFT_WDT_RST = 3, // software watch dog reset, GPIO status won’t change + REASON_SOFT_RESTART = 4, // software restart ,system_restart , GPIO status won’t change + REASON_DEEP_SLEEP_AWAKE = 5, // wake up from deep-sleep + REASON_EXT_SYS_RST = 6 // external system reset + */ + + return resetInfo.reason; +} + /*********************************************************************************************\ * Watchdog extension (https://github.com/esp8266/Arduino/issues/1532) \*********************************************************************************************/ diff --git a/tasmota/support_wifi.ino b/tasmota/support_wifi.ino index 4451047bd..f90d7cff1 100644 --- a/tasmota/support_wifi.ino +++ b/tasmota/support_wifi.ino @@ -615,7 +615,6 @@ void WifiShutdown(void) void EspRestart(void) { WifiShutdown(); - RtcRebootReset(); // ESP.restart(); // This results in exception 3 on restarts on core 2.3.0 ESP.reset(); } diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino index 4d50d9cf7..1469caa2c 100644 --- a/tasmota/tasmota.ino +++ b/tasmota/tasmota.ino @@ -1500,10 +1500,6 @@ void GpioInit(void) XdrvCall(FUNC_PRE_INIT); } -extern "C" { -extern struct rst_info resetInfo; -} - void setup(void) { global_state.data = 3; // Init global state (wifi_down, mqtt_down) to solve possible network issues @@ -1582,7 +1578,7 @@ void setup(void) Settings.module = SONOFF_BASIC; // Reset module to Sonoff Basic // Settings.last_module = SONOFF_BASIC; } - AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_LOG_SOME_SETTINGS_RESET " (%d)"), RtcReboot.fast_reboot_count); + AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_LOG_SOME_SETTINGS_RESET " (%d)"), RtcReboot.fast_reboot_count); } } @@ -1605,7 +1601,7 @@ void setup(void) if (POWER_ALL_ALWAYS_ON == Settings.poweronstate) { SetDevicePower(1, SRC_RESTART); } else { - if ((resetInfo.reason == REASON_DEFAULT_RST) || (resetInfo.reason == REASON_EXT_SYS_RST)) { + if ((ResetReason() == REASON_DEFAULT_RST) || (ResetReason() == REASON_EXT_SYS_RST)) { switch (Settings.poweronstate) { case POWER_ALL_OFF: case POWER_ALL_OFF_PULSETIME_ON: diff --git a/tasmota/xdrv_29_deepsleep.ino b/tasmota/xdrv_29_deepsleep.ino index 11987518c..7fbd3837d 100644 --- a/tasmota/xdrv_29_deepsleep.ino +++ b/tasmota/xdrv_29_deepsleep.ino @@ -59,15 +59,15 @@ bool DeepSleepEnabled(void) return true; } -void DeepSleepInit(void) +void DeepSleepReInit(void) { - if (DeepSleepEnabled()) { - RtcRebootReset(); + if ((ResetReason() == REASON_DEEP_SLEEP_AWAKE) && DeepSleepEnabled()) { if ((RtcSettings.ultradeepsleep > MAX_DEEPSLEEP_CYCLE) && (RtcSettings.ultradeepsleep < 1700000000)) { // Go back to sleep after 60 minutes if requested deepsleep has not been reached RtcSettings.ultradeepsleep = RtcSettings.ultradeepsleep - MAX_DEEPSLEEP_CYCLE; AddLog_P2(LOG_LEVEL_ERROR, PSTR("DSL: Remain DeepSleep %d"), RtcSettings.ultradeepsleep); RtcSettingsSave(); + RtcRebootReset(); ESP.deepSleep(100 * RtcSettings.deepsleep_slip * (MAX_DEEPSLEEP_CYCLE < RtcSettings.ultradeepsleep ? MAX_DEEPSLEEP_CYCLE : RtcSettings.ultradeepsleep), WAKE_RF_DEFAULT); yield(); // Sleeping @@ -198,7 +198,7 @@ bool Xdrv29(uint8_t function) result = DecodeCommand(kDeepsleepCommands, DeepsleepCommand); break; case FUNC_PRE_INIT: - DeepSleepInit(); + DeepSleepReInit(); break; } return result; From c79e5ad7d443e978ae0a6eca9b4af519ad9e3899 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Mon, 18 Nov 2019 11:17:43 +0100 Subject: [PATCH 07/10] Add SDK area erase to short power cycle reset Add SDK area erase to short power cycle reset (#6956) --- tasmota/settings.ino | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/tasmota/settings.ino b/tasmota/settings.ino index 552f04937..9c44f1e37 100644 --- a/tasmota/settings.ino +++ b/tasmota/settings.ino @@ -401,7 +401,7 @@ void UpdateQuickPowerCycle(bool update) if (update && ((pc_register & 0xFFFFFFF0) == 0xFFA55AB0)) { uint32_t counter = ((pc_register & 0xF) << 1) & 0xF; if (0 == counter) { // 4 power cycles in a row - SettingsErase(2); // Quickly reset all settings including QuickPowerCycle flag + SettingsErase(3); // Quickly reset all settings including QuickPowerCycle flag EspRestart(); // And restart } else { pc_register = 0xFFA55AB0 | counter; @@ -571,29 +571,30 @@ void SettingsErase(uint8_t type) 0 = Erase from program end until end of flash as seen by SDK 1 = Erase 16k SDK parameter area near end of flash as seen by SDK (0x0xFCxxx - 0x0xFFFFF) solving possible wifi errors - 2 = Erase Tasmota settings (0x0xF3xxx - 0x0xFBFFF) + 2 = Erase Tasmota parameter area (0x0xF3xxx - 0x0xFBFFF) + 3 = Erase Tasmota and SDK parameter area (0x0F3xxx - 0x0FFFFF) */ #ifndef FIRMWARE_MINIMAL -// AddLog_P2(LOG_LEVEL_DEBUG, PSTR("SDK: Flash size 0x%08X"), flashchip->chip_size); - uint32_t _sectorStart = (ESP.getSketchSize() / SPI_FLASH_SEC_SIZE) + 1; - uint32_t _sectorEnd = ESP.getFlashChipRealSize() / SPI_FLASH_SEC_SIZE; -// uint32_t _sectorEnd = ESP.getFlashChipSize() / SPI_FLASH_SEC_SIZE; + uint32_t _sectorEnd = ESP.getFlashChipRealSize() / SPI_FLASH_SEC_SIZE; // Flash size as reported by hardware if (1 == type) { // source Esp.cpp and core_esp8266_phy.cpp - _sectorStart = (ESP.getFlashChipSize() / SPI_FLASH_SEC_SIZE) - 4; + _sectorStart = (ESP.getFlashChipSize() / SPI_FLASH_SEC_SIZE) - 4; // SDK parameter area } else if (2 == type) { - _sectorStart = SETTINGS_LOCATION - CFG_ROTATES; // Tasmota parameter area (0x0F3xxx - 0x0FBFFF) + _sectorStart = SETTINGS_LOCATION - CFG_ROTATES; // Tasmota parameter area (0x0F3xxx - 0x0FBFFF) _sectorEnd = SETTINGS_LOCATION +1; } + else if (3 == type) { + _sectorStart = SETTINGS_LOCATION - CFG_ROTATES; // Tasmota and SDK parameter area (0x0F3xxx - 0x0FFFFF) + _sectorEnd = ESP.getFlashChipSize() / SPI_FLASH_SEC_SIZE; // Flash size as seen by SDK + } AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_ERASE " %d " D_UNIT_SECTORS), _sectorEnd - _sectorStart); -// EspErase(_sectorStart, _sectorEnd); // Arduino core and SDK - erases flash as seen by SDK - EsptoolErase(_sectorStart, _sectorEnd); // Esptool - erases flash completely - +// EspErase(_sectorStart, _sectorEnd); // Arduino core and SDK - erases flash as seen by SDK + EsptoolErase(_sectorStart, _sectorEnd); // Esptool - erases flash completely #endif // FIRMWARE_MINIMAL } From cc6f2f7896ef517791edd354aa38ce4122c74f0a Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Mon, 18 Nov 2019 11:21:48 +0100 Subject: [PATCH 08/10] Bump version 7.0.0.5 --- tasmota/_changelog.ino | 3 +++ tasmota/tasmota_version.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/tasmota/_changelog.ino b/tasmota/_changelog.ino index cbc56312c..52fef550d 100644 --- a/tasmota/_changelog.ino +++ b/tasmota/_changelog.ino @@ -1,4 +1,7 @@ /*********************************************************************************************\ + * 7.0.0.5 20191118 + * Fix boot loop regression + * * 7.0.0.4 20191108 * Add command WifiPower 0 .. 20.5 to set Wifi Output Power which will be default set to 17dBm * Change supported PCF8574 I2C address range to 0x20 - 0x26 allowing other I2C devices with address 0x27 to be used at the same time diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h index 9cd601086..50a0ac045 100644 --- a/tasmota/tasmota_version.h +++ b/tasmota/tasmota_version.h @@ -20,6 +20,6 @@ #ifndef _TASMOTA_VERSION_H_ #define _TASMOTA_VERSION_H_ -const uint32_t VERSION = 0x07000004; +const uint32_t VERSION = 0x07000005; #endif // _TASMOTA_VERSION_H_ From 14f6f6f22b11bc816b7807699b2e5d49d2fd5702 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Mon, 18 Nov 2019 12:15:49 +0100 Subject: [PATCH 09/10] Add command TempOffset -12.6 .. 12.6 Add command TempOffset -12.6 .. 12.6 to set global temperature sensor offset (#6958) --- tasmota/_changelog.ino | 1 + tasmota/settings.h | 5 +++-- tasmota/support_command.ino | 21 ++++++++++++++------- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/tasmota/_changelog.ino b/tasmota/_changelog.ino index 52fef550d..c1423443d 100644 --- a/tasmota/_changelog.ino +++ b/tasmota/_changelog.ino @@ -1,6 +1,7 @@ /*********************************************************************************************\ * 7.0.0.5 20191118 * Fix boot loop regression + * Add command TempOffset -12.6 .. 12.6 to set global temperature sensor offset (#6958) * * 7.0.0.4 20191108 * Add command WifiPower 0 .. 20.5 to set Wifi Output Power which will be default set to 17dBm diff --git a/tasmota/settings.h b/tasmota/settings.h index 7e557e15e..876e0bde5 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -434,8 +434,9 @@ struct SYSCFG { uint32_t deepsleep; // E94 uint16_t energy_power_delta; // E98 uint8_t shutter_motordelay[MAX_SHUTTERS]; // E9A - int8_t temp_comp; - uint8_t free_e9e[1]; // E9E + int8_t temp_comp; // E9E + + uint8_t free_e9f[1]; // E9F uint8_t web_color2[2][3]; // EA0 - Needs to be on integer / 3 distance from web_color diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino index 11d51f610..7156e6ed8 100644 --- a/tasmota/support_command.ino +++ b/tasmota/support_command.ino @@ -57,6 +57,13 @@ void ResponseCmndNumber(int value) Response_P(S_JSON_COMMAND_NVALUE, XdrvMailbox.command, value); } +void ResponseCmndFloat(float value, uint32_t decimals) +{ + char stemp1[TOPSZ]; + dtostrfd(value, decimals, stemp1); + Response_P(S_JSON_COMMAND_XVALUE, XdrvMailbox.command, stemp1); // Return float value without quotes +} + void ResponseCmndIdxNumber(int value) { Response_P(S_JSON_COMMAND_INDEX_NVALUE, XdrvMailbox.command, XdrvMailbox.index, value); @@ -498,13 +505,15 @@ void CmndState(void) void CmndTempOffset(void) { - if ((XdrvMailbox.payload > -127) && (XdrvMailbox.payload < 127) && (XdrvMailbox.data_len > 0)) { - Settings.temp_comp = XdrvMailbox.payload; + if (XdrvMailbox.data_len > 0) { + int value = (int)(CharToFloat(XdrvMailbox.data) * 10); + if ((value > -127) && (value < 127)) { + Settings.temp_comp = value; + } } - ResponseCmndNumber(Settings.temp_comp); + ResponseCmndFloat((float)(Settings.temp_comp) / 10, 1); } - void CmndSleep(void) { if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload < 251)) { @@ -1549,9 +1558,7 @@ void CmndWifiPower(void) } WifiSetOutputPower(); } - char stemp1[TOPSZ]; - dtostrfd((float)(Settings.wifi_output_power) / 10, 1, stemp1); - Response_P(S_JSON_COMMAND_XVALUE, XdrvMailbox.command, stemp1); // Return float value without quotes + ResponseCmndFloat((float)(Settings.wifi_output_power) / 10, 1); } #ifdef USE_I2C From 27e9765a662d6704f3ac8ab79f14c1bf7fbb060d Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Mon, 18 Nov 2019 12:25:59 +0100 Subject: [PATCH 10/10] Update xdrv_09_timers.ino --- tasmota/xdrv_09_timers.ino | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tasmota/xdrv_09_timers.ino b/tasmota/xdrv_09_timers.ino index 83f830379..a71960695 100644 --- a/tasmota/xdrv_09_timers.ino +++ b/tasmota/xdrv_09_timers.ino @@ -497,9 +497,7 @@ void CmndLongitude(void) if (XdrvMailbox.data_len) { Settings.longitude = (int)(CharToFloat(XdrvMailbox.data) *1000000); } - char lbuff[33]; - dtostrfd(((float)Settings.longitude) /1000000, 6, lbuff); - ResponseCmndChar(lbuff); + ResponseCmndFloat((float)(Settings.longitude) /1000000, 6); } void CmndLatitude(void) @@ -507,9 +505,7 @@ void CmndLatitude(void) if (XdrvMailbox.data_len) { Settings.latitude = (int)(CharToFloat(XdrvMailbox.data) *1000000); } - char lbuff[33]; - dtostrfd(((float)Settings.latitude) /1000000, 6, lbuff); - ResponseCmndChar(lbuff); + ResponseCmndFloat((float)(Settings.latitude) /1000000, 6); } #endif // USE_SUNRISE