mirror of
https://github.com/arendst/Tasmota.git
synced 2026-10-27 06:22:25 +00:00
Merge branch 'development' into prerelease-16.0.0
This commit is contained in:
commit
5f34a0f1eb
5 files changed
+27
-5
No files matched your search
@@ -18,6 +18,8 @@ All notable changes to this project will be documented in this file.
|
||||
### Fixed
|
||||
- Unauthenticated UFS writes on web password enabled systems
|
||||
- Display dsi dma2d psram buffers (#24949)
|
||||
- Matter MQTT subscription when Matter is disabled (#25140)
|
||||
- HttpClientLight time out reading a body when the server goes silent (#25139)
|
||||
|
||||
## [15.6.0.2] 20261008
|
||||
### Added
|
||||
|
||||
@@ -166,9 +166,13 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
|
||||
- MiELHVAC Modbus length-based framing, queue writes, FC03 sensor mirror [#24993](https://github.com/arendst/Tasmota/issues/24993)
|
||||
- WT32_ETH01 ethernet initialization [#25051](https://github.com/arendst/Tasmota/issues/25051)
|
||||
- ESP32 release UART0 console when the template uses its pins [#25047](https://github.com/arendst/Tasmota/issues/25047)
|
||||
- HttpClientLight time out reading a body when the server goes silent [#25139](https://github.com/arendst/Tasmota/issues/25139)
|
||||
- PWM on CDC GPIO [#25106](https://github.com/arendst/Tasmota/issues/25106)
|
||||
- Zigbee deferred timer use after free, and the truncated backtrace that hid it [#24979](https://github.com/arendst/Tasmota/issues/24979)
|
||||
- Berry rare register allocation bug [#25010](https://github.com/arendst/Tasmota/issues/25010)
|
||||
- Matter autoconfiguration after configuration reset [#24997](https://github.com/arendst/Tasmota/issues/24997)
|
||||
- Matter commissioning mDNS announcements [#25069](https://github.com/arendst/Tasmota/issues/25069)
|
||||
- Matter non-bridge endpoint topology [#25099](https://github.com/arendst/Tasmota/issues/25099)
|
||||
- Matter MQTT subscription when Matter is disabled [#25140](https://github.com/arendst/Tasmota/issues/25140)
|
||||
|
||||
### Removed
|
||||
@@ -1370,6 +1370,10 @@ int HTTPClientLight::writeToStreamDataBlock(Stream * stream, int size)
|
||||
uint8_t * buff = (uint8_t *) malloc(buff_size);
|
||||
|
||||
if(buff) {
|
||||
// a server gone silent without closing stays connected(): give up
|
||||
// after _tcpTimeout without data, as handleHeaderResponse() does
|
||||
unsigned long lastDataTime = millis();
|
||||
|
||||
// read all data from server
|
||||
while(connected() && (len > 0 || len == -1)) {
|
||||
|
||||
@@ -1442,8 +1446,14 @@ int HTTPClientLight::writeToStreamDataBlock(Stream * stream, int size)
|
||||
len -= readBytes;
|
||||
}
|
||||
|
||||
lastDataTime = millis();
|
||||
delay(0);
|
||||
} else {
|
||||
if((millis() - lastDataTime) > _tcpTimeout) {
|
||||
log_w("read timeout after %d bytes", bytesWritten);
|
||||
free(buff);
|
||||
return HTTPC_ERROR_READ_TIMEOUT;
|
||||
}
|
||||
delay(1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1069,7 +1069,9 @@ class Matter_UI
|
||||
|
||||
if !webserver.check_privileged_access() return nil end
|
||||
|
||||
self.device.ensure_discovery() # lazy subscribe to tasmota/discovery/# on first visit
|
||||
if self.matter_enabled
|
||||
self.device.ensure_discovery() # lazy subscribe to tasmota/discovery/# on first visit
|
||||
end
|
||||
|
||||
webserver.content_start("Matter") #- title of the web page -#
|
||||
webserver.content_send_style() #- send standard Tasmota styles -#
|
||||
@@ -1523,7 +1525,8 @@ class Matter_UI
|
||||
var matter_commissioning_requested = webserver.has_arg("comm")
|
||||
var matter_disable_bridge_mode_requested = (webserver.arg("nobridge") == 'on')
|
||||
var matter_disable_bridge_mode_current = self.device.disable_bridge_mode
|
||||
var matter_bridge_mode_changed = matter_disable_bridge_mode_current != matter_disable_bridge_mode_requested
|
||||
# when Matter is disabled, `device.disable_bridge_mode` is `nil` and the checkbox is not displayed
|
||||
var matter_bridge_mode_changed = self.matter_enabled && (matter_disable_bridge_mode_current != matter_disable_bridge_mode_requested)
|
||||
if matter_bridge_mode_changed
|
||||
# Persist the next-boot topology while keeping the live topology coherent
|
||||
# until the restart below rebuilds all fixed Descriptor metadata.
|
||||
@@ -1544,7 +1547,7 @@ class Matter_UI
|
||||
#- and force restart -#
|
||||
webserver.redirect("/?rst=")
|
||||
else
|
||||
if matter_commissioning_requested != (self.device.commissioning.commissioning_open != nil)
|
||||
if self.matter_enabled && matter_commissioning_requested != (self.device.commissioning.commissioning_open != nil)
|
||||
if matter_commissioning_requested
|
||||
self.device.commissioning.start_root_basic_commissioning()
|
||||
else
|
||||
|
||||
@@ -927,7 +927,8 @@ class Matter_Device
|
||||
# Lazy subscription to tasmota/discovery/# — only on first config page visit
|
||||
#####################################################################
|
||||
def ensure_discovery()
|
||||
if !self.discovery_subscribed
|
||||
# when Matter is disabled, init() returns early and `discovery_subscribed` is `nil`
|
||||
if self.discovery_subscribed == false
|
||||
self.subscribe_discovery()
|
||||
self.discovery_subscribed = true
|
||||
end
|
||||
@@ -942,10 +943,12 @@ class Matter_Device
|
||||
# Parse discovery messages, store by topic
|
||||
def handle_global_discovery(mqtt_topic, data)
|
||||
if data == nil return end
|
||||
# discovery tables are not initialized when Matter is disabled
|
||||
if self.discovered_devices == nil || self.discovered_sensors == nil return end
|
||||
import json
|
||||
import string
|
||||
var j = type(data) == 'string' ? json.load(data) : data
|
||||
if j == nil return end
|
||||
if !isinstance(j, map) return end # also rejects `nil` and non-object JSON
|
||||
|
||||
# tasmota/discovery/<MAC>/config or tasmota/discovery/<MAC>/sensors
|
||||
var discovery_prefix_len = size("tasmota/discovery/")
|
||||
|
||||
Reference in new issue
Block a user