Skip to content

Commit 2a6c082

Browse files
Merge remote-tracking branch 'Tasmota/development' into work
2 parents 3e232e2 + 5bfa621 commit 2a6c082

File tree

5 files changed

+25
-13
lines changed

5 files changed

+25
-13
lines changed

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
- [ ] Only relevant files were touched
88
- [ ] Only one feature/fix was added per PR and the code change compiles without warnings
99
- [ ] The code change is tested and works with Tasmota core ESP8266 V.2.7.8
10-
- [ ] The code change is tested and works with Tasmota core ESP32 V.3.1.6
10+
- [ ] The code change is tested and works with Tasmota core ESP32 V.3.1.7
1111
- [ ] I accept the [CLA](https://github.com/arendst/Tasmota/blob/development/CONTRIBUTING.md#contributor-license-agreement-cla).
1212

1313
_NOTE: The code change must pass CI tests. **Your PR cannot be merged unless tests pass**_

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@ All notable changes to this project will be documented in this file.
1616
### Changed
1717
- ESP32 Platform from 2025.11.30 to 2025.11.31, Framework (Arduino Core) from v3.1.5 to v3.1.6 and IDF from v5.3.4.251110 to v5.3.4.251110 (#24146)
1818
- Refactored DALI using TasmotaDali library v1.0.0 adding frame receive buffer
19+
- ESP32 Platform from 2025.11.31 to 2025.12.30, Framework (Arduino Core) from v3.1.6 to v3.1.7 and IDF from v5.3.4.251110 to v5.3.4.20251205 (#24212)
1920

2021
### Fixed
2122
- ESP32-P4 Hosted MCU updated to v2.6.6 solving WiFi boot issues (#24146)
2223
- ESP32-Solo1 using pre-compiled Arduino libraries (#24146)
2324
- PCA9685 V2 driver PWMTO fading logic and overflow (#24159)
2425
- RGBW handling in TasmotaLED and xlgt_01_ws2812_esp32 (#24172)
2526
- ArtNet single light color mapping using `ChannelRemap` (#24058)
27+
- Thermostat temperature unit (#24213)
2628

2729
### Removed
2830

RELEASENOTES.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ While fallback or downgrading is common practice it was never supported due to S
3636

3737
This release will be supported from ESP8266/Arduino library Core version **2.7.8** due to reported security and stability issues on previous Core version. This will also support gzipped binaries.
3838

39-
This release will be supported from ESP32/Arduino library Core version **v3.1.6**.
39+
This release will be supported from ESP32/Arduino library Core version **v3.1.7**.
4040

41-
Support of ESP8266 Core versions before 2.7.8 and ESP32 Core versions before v3.1.6 have been removed.
41+
Support of ESP8266 Core versions before 2.7.8 and ESP32 Core versions before v3.1.7 have been removed.
4242

4343
## Initial configuration tools
4444

@@ -76,7 +76,7 @@ Historical binaries can be downloaded from
7676
The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota/release/tasmota.bin.gz``
7777

7878
### ESP32, ESP32-C2, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-P4, ESP32-S2 and ESP32-S3 based
79-
The following binary downloads have been compiled with ESP32/Arduino library core version **v3.1.6**.
79+
The following binary downloads have been compiled with ESP32/Arduino library core version **v3.1.7**.
8080

8181
- **tasmota32.bin** = The Tasmota version with most drivers including additional sensors and KNX for 4M+ flash. **RECOMMENDED RELEASE BINARY**
8282
- **tasmota32solo1.bin** = The Tasmota version with most drivers including additional sensors and KNX for single core ESP32 and 4M+ flash.
@@ -135,7 +135,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
135135
### Breaking Changed
136136

137137
### Changed
138-
- ESP32 Platform from 2025.11.30 to 2025.11.31, Framework (Arduino Core) from v3.1.5 to v3.1.6 and IDF from v5.3.4.250826 to v5.3.4.251110 [#24146](https://github.com/arendst/Tasmota/issues/24118)
138+
- ESP32 Platform from 2025.11.30 to 2025.12.30, Framework (Arduino Core) from v3.1.5 to v3.1.7 and IDF from v5.3.4.250826 to v5.3.4.20251205 [#24212](https://github.com/arendst/Tasmota/issues/24212)
139139
- LVGL library from v9.3.0 to v9.4.0 [#24028](https://github.com/arendst/Tasmota/issues/24028)
140140
- JPEGDEC library from v1.8.3 to v1.8.4 [#24120](https://github.com/arendst/Tasmota/issues/24120)
141141
- GPIOViewer from v1.6.3 to v1.7.0
@@ -151,6 +151,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
151151
- DALI protocol errors
152152
- RGBW handling in TasmotaLED and xlgt_01_ws2812_esp32 [#24172](https://github.com/arendst/Tasmota/issues/24172)
153153
- ArtNet single light color mapping using `ChannelRemap` [#24058](https://github.com/arendst/Tasmota/issues/24058)
154+
- Thermostat temperature unit [#24213](https://github.com/arendst/Tasmota/issues/24213)
154155
- TLS fix ECDSA and add `SetOption165 1` to enable ECDSA in addition to RSA [#24000](https://github.com/arendst/Tasmota/issues/24000)
155156
- ESP32-P4 Hosted MCU updated to v2.6.6 solving WiFi boot issues [#24146](https://github.com/arendst/Tasmota/issues/24118)
156157
- ESP32-Solo1 using pre-compiled Arduino libraries [#24146](https://github.com/arendst/Tasmota/issues/24118)

platformio_tasmota32.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ custom_component_remove =
9797
espressif/cmake_utilities
9898

9999
[core32]
100-
platform = https://github.com/tasmota/platform-espressif32/releases/download/2025.11.31/platform-espressif32.zip
100+
platform = https://github.com/tasmota/platform-espressif32/releases/download/2025.12.30/platform-espressif32.zip
101101
platform_packages =
102102
build_unflags = ${esp32_defaults.build_unflags}
103103
build_flags = ${esp32_defaults.build_flags}

tasmota/tasmota_xdrv_driver/xdrv_39_thermostat.ino

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,8 @@ struct THERMOSTAT {
201201
uint32_t time_ctr_checkpoint = 0; // Time to finalize the control cycle within the PI strategy or to switch to PI from Rampup in seconds
202202
uint32_t time_ctr_changepoint = 0; // Time until switching off output within the controller in seconds
203203
int32_t temp_measured_gradient = 0; // Temperature measured gradient from sensor in thousandths of degrees per hour
204-
int16_t temp_target_level = THERMOSTAT_TEMP_INIT; // Target level of the thermostat in tenths of degrees
205-
int16_t temp_target_level_ctr = THERMOSTAT_TEMP_INIT; // Target level set for the controller
204+
int16_t temp_target_level = THERMOSTAT_TEMP_INIT; // Target level of the thermostat in tenths of degrees celsius
205+
int16_t temp_target_level_ctr = THERMOSTAT_TEMP_INIT; // Target level set for the controller in tenths of degrees celsius
206206
int16_t temp_pi_accum_error = 0; // Temperature accumulated error for the PI controller in hundredths of degrees
207207
int16_t temp_pi_error = 0; // Temperature error for the PI controller in hundredths of degrees
208208
int32_t time_proportional_pi; // Time proportional part of the PI controller
@@ -1402,7 +1402,7 @@ void ThermostatGetLocalSensor(uint8_t ctr_output) {
14021402
JsonParserToken value_token = root[sensor_name].getObject()[PSTR(D_JSON_TEMPERATURE)];
14031403
if (value_token.isNum()) {
14041404
int16_t value = value_token.getFloat() * 10;
1405-
if (Thermostat[ctr_output].status.temp_format == TEMP_FAHRENHEIT) {
1405+
if (Settings->flag.temperature_conversion) { // SetOption8 - Local Sensor provided in Fahrenheit
14061406
value = ThermostatFahrenheitToCelsius(value, TEMP_CONV_ABSOLUTE);
14071407
}
14081408
if ( (value >= -1000)
@@ -2085,18 +2085,27 @@ void ThermostatShow(uint8_t ctr_output, bool json)
20852085
} else {
20862086
char c_unit = Thermostat[ctr_output].status.temp_format==TEMP_CELSIUS ? D_UNIT_CELSIUS[0] : D_UNIT_FAHRENHEIT[0];
20872087
float f_temperature;
2088+
int32_t value;
20882089

20892090
WSContentSend_P(HTTP_THERMOSTAT_INFO, ctr_output + 1, D_ENABLED);
20902091

2091-
f_temperature = Thermostat[ctr_output].temp_target_level / 10.0f;
2092+
value = Thermostat[ctr_output].temp_target_level; // in tenths of degrees Celsius
2093+
if (Thermostat[ctr_output].status.temp_format == TEMP_FAHRENHEIT) {
2094+
value = ThermostatCelsiusToFahrenheit(value, TEMP_CONV_ABSOLUTE);
2095+
}
2096+
f_temperature = value / 10.0f;
20922097
WSContentSend_PD(HTTP_THERMOSTAT_TEMPERATURE, D_THERMOSTAT_SET_POINT, Settings->flag2.temperature_resolution, &f_temperature, c_unit);
20932098

2094-
f_temperature = Thermostat[ctr_output].temp_measured / 10.0f;
2099+
value = Thermostat[ctr_output].temp_measured; // in tenths of degrees Celsius
2100+
if (Thermostat[ctr_output].status.temp_format == TEMP_FAHRENHEIT) {
2101+
value = ThermostatCelsiusToFahrenheit(value, TEMP_CONV_ABSOLUTE);
2102+
}
2103+
f_temperature = value / 10.0f;
20952104
WSContentSend_PD(HTTP_THERMOSTAT_TEMPERATURE, D_THERMOSTAT_SENSOR, Settings->flag2.temperature_resolution, &f_temperature, c_unit);
20962105

2097-
int16_t value = Thermostat[ctr_output].temp_measured_gradient;
2106+
value = Thermostat[ctr_output].temp_measured_gradient;
20982107
if (Thermostat[ctr_output].status.temp_format == TEMP_FAHRENHEIT) {
2099-
value = ThermostatCelsiusToFahrenheit((int32_t)Thermostat[ctr_output].temp_measured_gradient, TEMP_CONV_RELATIVE);
2108+
value = ThermostatCelsiusToFahrenheit(value, TEMP_CONV_RELATIVE);
21002109
}
21012110
f_temperature = abs(value) / 1000.0f;
21022111
WSContentSend_PD(HTTP_THERMOSTAT_TEMP_GRAD, value < 0 ? '-' : '+', Settings->flag2.temperature_resolution, &f_temperature, c_unit);

0 commit comments

Comments
 (0)