You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* feat(#72): ESP32 runtime capability gating wiring [BENCH-PENDING, do not merge yet]
Wires the shared gate predicates (matter_aircon_map.h, PR #100) into the ESP32
features callback so a per-unit A/C hides the surfaces it lacks:
power_save -> eco ep, fan_mute -> quiet ep, power_display -> display ep
via esp_matter::endpoint::enable/disable (the CHIP ember emberAfEndpointEnable-
Disable is declared but NOT linked in esp-matter's data model -- confirmed at
link time -- so the esp_matter-native per-endpoint API is used instead);
cool_heat -> Thermostat FeatureMap (35 Heat+Cool+Auto vs 2 Cool-only) via
attribute::update of the global FeatureMap attribute.
Strategy: retroactive-correct. Endpoints created at boot (stable IDs, contiguous;
never skip endpoint::create) then hidden from on_features once the 0x66 reply lands.
Runs in bus-task context under the CHIP stack lock; ordering is safe (bus task runs
after esp_matter::start()/enable_all()). Diff-guarded off the known boot layout so an
all-present unit (every unit we own) makes ZERO ember/attribute calls.
Compiles + links clean (debug, 15% flash free). Bumps PROJECT_VER 1.1.8 -> 1.1.9.
NOT FOR MERGE until validated on a bench (user rule + #64): needs a flag-ABSENT unit
or a spoofed 0x66 reply to exercise the hide path (all our units report every
capability present), AND matter-server confirmation that HA drops the entity /
re-derives HVAC modes on a live PartsList/FeatureMap change vs. a manual re-interview.
Compare the exposed model against firmware/../72-baseline.json. AmebaZ2 wiring
(matter_drivers.cpp, emberAfEndpointEnableDisable + FeatureMap::Set) still to write.
Assisted-by: AI
* chore(#72): bump esp32 to 1.1.10 (clean build deployed to node 35 after forced-gate validation)
Node 35 validated the gating (endpoint::disable removes ep3 from PartsList, matter-
server picks it up) then was reverted to this clean gating build (eco re-enabled,
matches baseline). Still BENCH-PENDING / not for merge.
Assisted-by: AI
* feat(#72): AmebaZ2 runtime capability gating wiring
Mirrors the ESP32 gating on the AmebaZ2 path (matter_drivers.cpp features callback),
using the same shared predicates (matter_aircon_map.h):
power_save->eco / fan_mute->quiet / power_display->display via emberAfEndpointEnable-
Disable -- which LINKS on AmebaZ2 (ember static .zap data model, attribute-storage.cpp),
unlike esp-matter where it is declared-but-unlinked. It flips the isEnabled bit on the
existing endpoint slot: no removal, no renumber, so the {0..10} contiguity boot-fault
rule is untouched.
cool_heat -> Thermostat FeatureMap (35 vs 2) via ThermAttr::FeatureMap::Set (ep1 is a
composite endpoint, cannot be endpoint-disabled).
Diff-guarded off the boot layout (all-present unit = zero calls); bus-task context so it
takes the CHIP stack lock. Builds + links clean (--debug, serial 11426). Bumps
version.txt 1.3.25 -> 1.3.26.
Same retroactive-correct strategy + caveats as the ESP32 side (validated on node 35):
endpoint disable propagates to matter-server but HA leaves a runtime-hidden entity
lingering; the clean path is gating at commissioning (persist-at-boot follow-up).
Assisted-by: AI
0 commit comments