Commit Graph
21776 Commits
Author SHA1 Message Date
s-hadinger d309da183d Berry lv.start() raises an error instead of crashing when the display can't start (#25193) 2026-10-25 21:27:10 +01:00
Jason2866 4d76e15306 wpa3 variant names changed with IDF 6.x (#25190) 2026-10-24 13:40:03 +02:00
s-hadinger 0ad5879abe Heap Map optional feature fur detailed memory usage at boot (#25186) 2026-10-24 12:31:28 +02:00
Adam Matthews 4df6fa1d4b HttpClientLight: keep read timeouts longer than 65 s (#25180)
The read timeout was kept in 16 bits, so a longer one wrapped: Berry's
webclient.set_timeouts(80000) gave up after about 14.5 s, and 70000
after 4.5 s. Keep it in 32 bits, in HttpClientLight and
AsyncHttpClientLight, as ESPEasy's copy of the client now does.
2026-10-23 22:42:22 +02:00
Adam Matthews 06d51e8fc2 Matter: encode strings longer than 255 bytes (#25185)
Matter_TLV.tlv2raw() wrote a UTF2 string with bytes().frostring(), a
typo for fromstring(), so encoding any string of more than 255 bytes
(which is given type UTF2 automatically) raised attribute_error.
2026-10-23 22:40:50 +02:00
s-hadinger e1325dd292 LVGL Panel update version 2026-10-23 14:22:11 +02:00
s-hadinger c133051258 Remove root sdkconfig.defaults and CMakeLists.txt and ignore them (#25174) 2026-10-22 16:18:48 +02:00
Theo Arends a19e0c6587 Update change logs 2026-10-22 10:46:54 +02:00
Benjamin Temple 2418be974f TuyaMCU: pace outgoing frames so the MCU is never written to back-to-back (#25151)
\#Description:
TuyaSendCmd() doesn't have any sort of pacing, so two back-to-back
commands can land within milliseconds of eachother.

In my specific devices and likely many other Tuya based devices, this
can cause the MCU to crash. This is compounded by the fact that Tasmota
(unnecessarily) writes the local-time every 60s, and the heartbeat every
11s. So roughly every 660s, they coincide, and then several times a day
the MCU will crash.

The end result is that my lights would randomly turn-off, or in the
case of my 3-way lights, they would even turn on randomly in the middle
of the night.

This patches the Tuya MCU driver to queue outgoing frames and release them from FUNC_LOOP once the following four spacing rules pass:

  byte_counter  must not be part way through receiving a frame
  tx_ack_wait   still waiting on a reply, given up after
                TUYA_TX_ACK_TIMEOUT_MS
  tx_last_ms    minimum gap, for commands that don't receive a response
  rx_last_ms    silence since the last byte in

TUYA_TX_MAX_HOLD_MS limits the ack and quiet wait time.

Behaviour changes for existing users:

  - datapoint writes are paced, so a fade or slider drag (might) emit fewer
    intermediate values. The queue insertion order is such though that
    values are never lost, and this is quite the edge-case.
  - a command can be delayed by the minimum gap plus the hold ceiling
  - a full queue with nothing collapsible drops its oldest frame

\#Testing:
I wrote a stress test that could crash the MCU at-will by spamming lots
of writes heartbeat writes.
With this applied, the same test does not crash the MCU

I have also been using this for over a month on all of my lights with 0
issues.
2026-10-22 10:40:08 +02:00
Adam Matthews 805fc7cb01 WifiManager: name the setup AP as it is turned on (#25169)
WifiManagerBegin() turned the AP on with WifiSetMode() and named it with
WiFi.softAP() only after WifiSetMode()'s delay(100): for that time the AP
beaconed under the SDK's default name, ESP_ and the AP MAC, which a phone
or computer then lists beside the real name, often for a minute after.

WiFi.softAP() turns the AP on and names it at once, so it now comes first;
WifiSetMode() then sets the station side as before.
2026-10-22 10:38:47 +02:00
protectivedad 9515f82b23 Fix VEML7700 lux/white rounding, add new command (#25150) 2026-10-22 10:36:04 +02:00
SteWers d8fe06cfe2 Add BLE timeout and eQ3 TRV enhancements (#25173)
* Add BLE timeout and eQ3 TRV enhancements

- Add a configurable BLE connection timeout and default it to 15 seconds (`BLEConnTimeout`)
- Improve eQ3 device detection
- Harden eQ3 advertising parsing
- Request and report TRV firmware version
- Add an option to disable the use of aliases in eQ3 MQTT topics (`TRVAliasAsTopic`)

* Comment MAC prefix
2026-10-22 10:27:52 +02:00
s-hadinger fd390ea34f LVGL touch more responsive (#25172) 2026-10-21 20:45:37 +02:00
s-hadinger 5ce1f1204b LVGL Panel improved click handling (#25171)
* LVGL Panel improved click handling

* Fix auto-start
2026-10-21 19:13:27 +02:00
s-hadinger da51c9b1db LVGL add logging before crash when heap allocation fails (#25170) 2026-10-21 18:26:49 +02:00
Theo Arends 43c6ca3686 Update change logs 2026-10-21 15:23:00 +02:00
Theo Arends 1176980ad1 Merge branch 'development' of https://github.com/arendst/Tasmota into development 2026-10-21 15:15:47 +02:00
Theo Arends 38a0a41938 Fix ESP32 PWMFrequency < 8 result in WDT restart (#25155) 2026-10-21 15:14:47 +02:00
Jason2866 00791eb3ae Fix formatting of D9 value in SH1106_display.ini 2026-10-20 20:09:35 +02:00
s-hadinger a42b458105 LVGL Mirror extension crash (#25165) 2026-10-20 18:53:01 +02:00
Adam Matthews 872daa8695 Berry webclient: log the time of a connection timeout, not its code (#25163)
wc_errorCodeMessage() passed httpCode as well as the elapsed time to the
"Connection timeout after %d ms" format, so the log showed the code:
"HTP: Connection timeout after -1 ms".
2026-10-20 16:51:34 +02:00
Theo Arends d1358faffc Fix ble eq3 bthome decryption regression 2026-10-19 14:35:40 +02:00
Theo Arends fb1929565f BTHome clarify binary state GUI display 2026-10-19 14:09:08 +02:00
Theo Arends c47ffbe6ad Update change logs 2026-10-19 11:57:59 +02:00
Grzegorz 7ecd858fb5 MiEL HVAC Modbus: serve the RS485 slave from its own task (#25157)
The Modbus RTU slave was polled from FUNC_LOOP, so anything that blocks
the main loop (WiFi or MQTT reconnect, flash writes) silenced it and a
PLC master saw no-response timeouts and, once the stale requests were
served, mismatching or unqueried slave answers.

The RS485 port is now served by a FreeRTOS task. Reads are answered
from a register snapshot that the main loop refreshes every few
milliseconds and after every write. Writes are queued to the main loop,
which runs the same miel_hvac_apply_* setters as before, and the task
returns the real result or an acknowledgement if the main loop is
stalled for more than 150 ms. A snapshot older than 30 s answers with
exception 04.
2026-10-19 11:28:22 +02:00
SoWizardandClaude Opus 5.5 185e41c274 Matter: fix stale host test fixtures (#25161)
run_tests.be and button_stability_tests.be stop with assert_failed right
after "Matter epoch conversion for UTC and local time: OK" on development.
Three test-only mistakes, each hiding the next:

- run_tests.be checked the RSSI item's stored TLV type before encoding.
  "Clamp RSSI" (#25126) stores signed values as I4; the encoded bytes are
  still the 1-byte 00C3, which the next assert checks. Check the value only.
- TestGarageDevice (run_tests.be) lacks disable_bridge_mode, which
  Matter_Plugin_Device.init() reads since #25099.
- StabilityDevice (button_stability_tests.be) lacks it too.

Tests only; no firmware files change.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 10:32:35 +02:00
Zhaoqi Xu 81fdbb0bbe Matter: list Window Covering commands in AcceptedCommandList (#25149)
The Shutter and Shutter + Tilt plugins handle UpOrOpen, DownOrClose,
StopMotion and GoToLiftPercentage (and GoToTiltPercentage for tilt) in
invoke_request(), but AcceptedCommandList (0xFFF9) of the Window
Covering cluster was empty. Controllers that build their feature set
from this list, such as Home Assistant, then don't offer setting the
position or tilt.

Override get_accepted_commands() in both plugins to report the
commands they implement.

Fixes #25146
2026-10-19 10:31:39 +02:00
s-hadinger 6389d75c66 LVGL/HASPmota visual touch pointer (dot under finger) (#25158) 2026-10-19 09:49:11 +02:00
s-hadinger fb629eddb5 uDisplay support for SPI QSPI displays (#25156) 2026-10-18 18:36:41 +02:00
Theo Arends 6776e2ea9a Fix Modbus OOB 2026-10-17 14:17:59 +02:00
Theo Arends ba3ead1afc Support OUI wildcard for command MI32Keys in case multiple devices use same bindkey like IoTorero: mi32keys 0C3D5EFFFFFF=48656c6c6f204254486f6d65210d0a00 2026-10-17 12:42:18 +02:00
Theo Arends c00ece8681 Fix hostByName returning negative values when lookup failed 2026-10-16 16:26:13 +02:00
2289c619bb Fix SR04 serial checksum for AJ-SR04M (#25147)
The AJ-SR04M sends FF H L SUM with SUM = H + L (header excluded).
Accept that form as well as FF + H + L when the header byte is 0xFF.


Claude-Session: https://claude.ai/code/session_01Ma8u1on2wkeXraAzZBn2iM

Co-authored-by: Pacif13r <22977757+Pacif13r@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 16:13:59 +02:00
Theo Arends dad74600a1 Fix possible OOB 2026-10-16 11:41:14 +02:00
Theo Arends db29ff1f17 Fix buffer overflow 2026-10-16 10:54:42 +02:00
Theo Arends a0ff1cdc57 Bump version v16.0.0.1 2026-10-16 10:10:37 +02:00
Theo Arends 8402d7d477 Update change logs 2026-10-16 09:25:34 +02:00
s-hadinger 47f3dbc09f Berry webclient.connected() was implemented but not exposed (#25145) 2026-10-15 17:30:25 +02:00
Adam Matthews ece53a64f8 AsyncHttpClientLight: end a body read when the server goes silent or closes (#25141)
* AsyncHttpClientLight: time out reading a body when the server goes silent

writeToStreamDataBlock() waited for the rest of a body for as long as
connected() held. A server that stops sending part way through without
closing leaves connected() true, so the worker never finishes and the
caller, waiting in runJob(), never returns. Give up after _tcpTimeout
without data and return HTTPC_ERROR_READ_TIMEOUT, as HttpClientLight
now does (#25139).

* AsyncHttpClientLight: notice when the server closes after the last byte

AsyncTcpAdapter only saw the peer close inside read(), and callers only
read when available() > 0. A body without Content-Length that ends with
the server closing left connected() true for ever, so
writeToStreamDataBlock() never returned. connected() now peeks at the
socket, as WiFiClient::connected() does: data still buffered keeps it
connected, an orderly close after it does not.

* AsyncHttpClientLight: address review of the read timeout

- connected() only reports a peer close and no longer calls stop(): it can
  be called from another task than the worker using the socket.
- writeToStreamDataBlock() closes the connection on a read timeout, as the
  chunked readers do, so a stalled connection is not reused.
- readBodyToStreamString(): the identity branch used by async GET/POST now
  times out after _tcpTimeout without data, and notices a close: with no
  Content-Length it ends the body, with one it is a lost connection.
2026-10-15 15:10:46 +02:00
Theo Arends 0edebb90a6 Fix BTHome binary event handling 2026-10-15 14:55:13 +02:00
Theo Arends 3da77ba044 Update change logs 2026-10-15 10:40:00 +02:00
Theo Arends fbe55333e8 Update change logs 2026-10-15 10:36:25 +02:00
s-hadinger a2f0c87141 LVGL library from v9.5.0 to v9.6.0 (#25144) 2026-10-15 09:41:19 +02:00
Adam Matthews 90754c5b93 AsyncHttpClientLight: finish a chunked body at the empty line after the last chunk (#25142)
After the zero-size chunk the readers read one line unconditionally,
then waited for another empty line. The first read already consumed the
empty line that ends the body, so every chunked body waited for a line
that never came and failed with HTTPC_ERROR_READ_TIMEOUT after
_tcpTimeout. Read trailer lines up to the first empty one instead.
2026-10-15 09:35:15 +02:00
Theo Arends 770960cec8 Add BTHome events to GUI 2026-10-14 17:20:10 +02:00
Theo Arends 31aa390c45 Update change logs 2026-10-14 15:51:20 +02:00
Adam Matthews c95c241fa3 HttpClientLight: time out reading a body when the server goes silent (#25139)
writeToStreamDataBlock() looped for as long as connected() held, waiting
for the rest of the body with no time limit. A server that stops sending
part way through a body without closing the connection - a computer that
sleeps, a cable pulled, a network that drops between the two ends - leaves
connected() true for ever, so the read never returned. Called from the main
loop, as Berry's webclient get_string() is, it left the device answering
nothing, not even its web page, until it was power-cycled.

Give up after _tcpTimeout without data, returning HTTPC_ERROR_READ_TIMEOUT,
as handleHeaderResponse() already does for the headers. A body that keeps
arriving, however slowly, is unaffected: each piece resets the clock.
2026-10-14 15:12:37 +02:00
s-hadinger 1bb26b29c4 Fix Matter MQTT subscription when Matter is disabled (#25140) 2026-10-14 15:08:29 +02:00
Theo Arends ad60406a38 Update change logs 2026-10-14 14:54:44 +02:00
Theo Arends 4336cd06c4 Add define EMAIL_DISABLE_CHUNKING for ESP32 mail 2026-10-13 16:18:16 +02:00