2.0.38 (2026-04-11)
Bug Fixes
- #273: auto-map HA moisture sensors to HumiditySensor (924fe4c), closes #273
- #275: restore fan speed on turn-on and guard speed rounding (1895fb2), closes #275 #219
- #281: persist cleaning session state across behavior proxy calls (fac2330), closes #281 #281
- #281: preserve progress across mid-session idle in multi-phase cleans (9a64cf5), closes #281
- #281: push operationalState and currentMode in keepalive (9d9fdec), closes #281 #281
- #281: use endpoint instead of agent as WeakMap key for cleaning session (65c2ed7), closes #281 #281
- #286: guard all behavior update() methods against missing attributes (47f58ae), closes #286
- #286: guard endpoint-specific sensor update() against missing attributes (d5a6cfc), closes #286
- #287: keepalive writes directly to RvcOperationalState cluster (cc60f50), closes #287 #287
- #287: make rvc reactors offline to produce subscription reports (bd9857f), closes #287
- #287: use counter-based nonce and add keepalive diagnostics (01a781a), closes #287
- #287: use Date.now() instead of instance nonce for keepalive diff (5e8970b), closes #287 #287 #287
- #287: use errorStateDetails instead of errorStateLabel for keepalive (10d33c9), closes #287
- #287: use setStateOf for keepalive instead of act() (87e2062), closes #287
- #289: derive multiPressMax at endpoint creation time (671543b), closes #289
- #289: fix GenericSwitch event handling for Apple Home buttons (af66db3)
- #289: resolve expired-reference error and lost long press events (77a4b7a)
- #289: split GenericSwitch into single/multi variants (941b7d2), closes #289
- #290: biome formatter compliance for serialNumber line (243865e), closes #290
- #290: populate server-mode root BasicInformation from entity data (a1b7174), closes #290
- #293: honor speaker override for tv media_player entities (255143b), closes #293
- add startup force sync to server-mode-bridge (#282) (bf59ee2)
- alpha: correct vacuum spec-violating state combinations (#287) (22aaa0d)
- alpha: force structural diff in operationalError to trigger subscription reports (#287) (d731f71)
- alpha: improve currentRoom sensor matching and add INFO logging (#281) (6e42c9e)
- alpha: preserve activeAreas during brief state transitions and fix Dreame room_id matching (#281) (f8dcf77)
- alpha: surface silent currentRoom short-circuits and log legacy vacuum auto-assignments at INFO (#281) (3390e42)
- auto-map radon sensors to RadonSensorDevice (4718b70)
- auto-map rain binary sensors to RainSensorDevice (f0abbf8)
- avoid infinite recursion in ServiceArea progress update (3a92134), closes #281
- biome formatting for activeAreas guard condition (edd1da2)
- biome formatting in create-legacy-endpoint-type (9c43060)
- biome formatting in sidebars.ts (cfb0413)
- bounded HA connection retries and memory leak cleanup on dispose (bc43ebe)
- correct broken README links to docs-site URLs (8b69473)
- correct logo path and lint trailing whitespace (#282, #285) (514338a)
- enable ServiceArea ProgressReporting for room cleaning status display (64fbebd)
- guard against missing attributes during HA restart (#286) (02d10ba)
- periodic keepalive to prevent Apple Home "Updating..." (#287) (c20b03b)
- persist currentRoomEntity in entity mapping API and storage (04089b4)
- persist custom product/vendor/serial in entity mapping api (933b3c7)
- persist plugin config to registry on API update (bd6f40b)
- push new log entries to SSE stream subscribers (5ab1444)
- remove HEALTHCHECK from addon Dockerfile (932b8aa)
- restore missing mapping fields in backup restore paths (8ee73bf)
- retain active areas for progress tracking during cleaning session (28aa0be), closes #281
- send area_id from area-based bridge wizard (6c02cde)
- set currentMode in changeToMode and restore currentArea on cleaning transition (7eb8798)
- strip BasicInformationServer from composed sub-endpoints (29db91b)
- update ServiceArea currentArea during vacuum cleaning for Apple Home status display (05e82d4)
- use interval timer for vacuum keepalive instead of in-update check (5952b8e)
Features
- #290: add customSerialNumber per-entity override (5ec2573), closes #290
- #55: discrete Open/Close mode for garage and gate covers (30c4b5b)
- add customProductName and customVendorName entity mapping overrides (0cca498), closes #277
- add dishwasher device type override for switch entities (5f41e3b)
- add Docker HEALTHCHECK to standalone and addon images (12ced3b)
- add Polish (pl) i18n locale (#288) (3a9aa79)
- add productNameFromNodeLabel bridge flag for aqara (32c49d3)
- add siren domain support as OnOff Plug-in Unit (ad0e024)
- dynamic room progress tracking via currentRoomEntity sensor (b95d0c1)
- emit diagnostic events for commands, sessions, and errors (ddb66d4)
- emit diagnostic warning for unsupported sensor device_class (cc40bd2)
- energy/power measurement support on composed devices (977cf34)
- immediate force sync on startup (#282) (2404f4b)
- latency instrumentation in state update path (a380d74)
- mDNS/network diagnostic API endpoint and frontend card (198a222)
- multi-admin fabric diagnostics in session info and health API (59e7ef9)
- startup memory guard, reduced log buffer, and low-resource docs (aee5638)