* Matter Zigbee bridge: route per-endpoint friendly names to correct endpoint
The Matter to Zigbee bridge mapped each Matter endpoint to a Zigbee
shortaddr only, losing endpoint information. For multi-endpoint
devices (e.g. 2-channel on/off relays), every Matter command routed
to Zigbee endpoint 1 and incoming reports updated all Matter plugins
targeting that device.
Changes in Matter_z_Zigbee.be:
* New "<device>:<N>" explicit syntax for per-endpoint targeting,
e.g. zigbee_device:"my_device:2" routes Matter to Zigbee endpoint 2.
* Per-endpoint friendly name auto-resolution as a fallback: when no
explicit ":N" is given and the config string is a non-hex name,
the mapper queries ZbName once at first resolve and walks the
response to find the source endpoint. Preserves the existing
Tasmota convention of per-endpoint friendly names set via
ZbName <dev>,<name>,<ep>.
* Outgoing: pass the original config string verbatim in the ZbSend
Device field. ZbSend's parseDeviceFromName resolves per-endpoint
friendly names natively. Adds explicit Endpoint field when known.
* Incoming: filter Matter_Zigbee.attributes_final by attr_list._src_ep
when the mapper has a known endpoint. The frame parameter is
always nil at this call site (caller passes nullptr), so the
filter relies on the attribute list's source endpoint instead.
* Boot probe (probe_zb_values) is now endpoint-aware: triggers a
ZbRead per attribute the plugin tracks for the specific endpoint.
Avoids the previous merged-state pollution where probe pushed the
same device.info() to all plugins targeting the same shortaddr.
Single-endpoint configs keep the cheap cached probe (no extra
Zigbee traffic).
Backwards compatibility preserved for shortaddr / integer / device-
level friendly name configs - default endpoint behavior is unchanged.
Tested on a 2-channel Zigbee on/off device paired to a Tasmota
Zigbee gateway, verified bidirectional in Apple Home.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Delet solidify file
---------
Co-authored-by: Paul de Monchy <paul.de.monchy@gmail.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: s-hadinger <49731213+s-hadinger@users.noreply.github.com>
On platforms without exceptions (-fno-exceptions, e.g. ESP8266),
new[] returns nullptr on allocation failure instead of throwing.
The missing NULL check caused a hard crash (load/store to address
derived from nullptr+offset) whenever the token buffer could not
be allocated.
Fix all four paths that dereference _tokens without a NULL guard,
and implement the existing TODO in parse() to ensure _token_len=0
invariant holds after OOM, consistent with the zero-error design.
* Replace old software-defined library arduino-vid6608 with hw-defined esp-32-vid6608
* VID6608: Rework integration to allow select RMT/SW method by using the `VID6608_RMT` option
* VID6608: Tune library inclusion for RMT version
* The RMT version is not supported on ESP32-C2, library excluded
* Add more clear error message, if RMT is requested, but not supported
- It seems the current implementation fails to set the clock stretch limit using functions from Wire library; It's set to 0 whatever the user wants it to be. This quick fix at least sets a default of 150ms to allow clock stretch to be used for devices that need it. It fixes support for Sensirion SCD30 and SGP30 which rely on clock stretching.. I'll dive deeper to solve the Wire provided functions.
- Skip :TI (touch I2C) and :TS (touch SPI) lines in case 'T' of the uDisplay
descriptor parser. These touch config lines are handled separately by
xdsp_17_universal.ino via strstr(), but case 'T' was matching on the first
character and unconditionally writing the subsequent values into
panel_config->epd.lut_full_time/lut_partial_time/update_time. In the
PanelConfigUnion, these EPD fields overlap with I80 panel bus pin config
(cs_pin, dc_pin, wr_pin, rd_pin, data_pins), causing parallel displays to
silently receive corrupted GPIO pin assignments and fail to render.
The fix checks if the character after 'T' is 'I' or 'S' and skips EPD timing
parsing for those lines. EPD descriptors using :T,<timing> continue to work
as before.
- Remove dead reference to berry.lvgl_panel_loaded in xdrv_54_lvgl.ino.
The member was removed from BerrySupport in commit e4c2cf591 (Berry Extension
Manager) but the reference in start_lvgl() was left behind, causing a compile
error when USE_BERRY_LVGL_PANEL is defined.
- Add verified display descriptor for WT32-SC01 Plus (ESP32-S3, ST7796U 480x320,
8-bit parallel I80, FT5206 capacitive touch). Tested on Tasmota v15.3.0.1 with
LVGL 9.5.0.
Co-authored-by: Ari Friedman <afriedman@millsupplyco.com>