Changed
- Requires matterbridge@3.9.4 — Minimum required Matterbridge version bumped from
3.7.1to3.9.4across the1.1.7pre-release cycle.
Added
- Roborock Q5 Pro support — Added Q5 Pro to the list of supported devices.
- Multi-map switching — Switching between multiple maps is now supported, with detection of active-map changes and correct default-map selection at startup and after cleaning.
- Service-area cleaning ETA and completion signaling — Wired
OperationCompletion,SkipArea, and per-room estimated end time from live clean progress into the Matter service-area cluster. - Clean-all-rooms via SELECT_AREAS — Selecting all rooms through the RVC service-area cluster now triggers a whole-home clean instead of being ignored, including via HomeKit automations that request an empty/global room selection.
- DirectModeChange support for RVC Clean Mode — Clean mode (e.g. Vacuum/Mop/Clean) can now be changed by Apple Home while a clean is actively running, without requiring the device to return to idle first.
b01-map-infoCLI command — New diagnostic command for testing the B01 map parser against a live device, for both Q7 and Q10 B01 devices.
Fixed
- Scheduled/automation full-home clean only cleaning the last-selected room — An empty room selection (signaling "clean all") was silently ignored instead of clearing the previous selection, and
ServiceArea.selectedAreaswasn't being correctly published for that case either. Both the request-handling and Matter-attribute paths now correctly propagate a global clean. ChangeToMode(Idle)had no effect on the real device — Added anIdleModeHandlermapping the MatterRvcRunModeIdle mode to the device'spauseCleancommand.- Real-time status updates stalling per-device — Replaced a global "all devices have a real-time connection" short-circuit with a per-device staleness check, so a stale device still receives status updates even while other devices are on a live connection. Also fixed falsy-value checks that dropped legitimate
0values for battery level, suction power, and water box mode. - Rooms not showing after plugin startup — Fixed a two-part issue where service-area rooms failed to appear after the plugin started, including a startup crash where the Matter ServiceArea cluster rejected areas with a
mapIdbefore the first multimap query had populatedsupportedMaps. - Multi-map cleaning progress stuck on "Preparing"/"Traveling" — Guarded active-map updates so progress state advances correctly during multi-map cleaning runs.
- Device status listeners not gated by protocol — Status listeners are now correctly gated by device connection protocol, preventing cross-protocol event leakage.
- B01 room icons and names —
roomTypeIdvalues from B01 devices now map to the correct Apple Home room category icons; Q7 map upload switched toupload_by_maptypewith normalized B01 room names. - Roborock Q10 S5+ (B01 protocol) map parsing — Q10 map pushes were incorrectly routed through the Q7-only AES+zlib SCMap-protobuf path and failed with "incorrect header check" on every push. Added a marker-byte classifier that routes Q10-shaped payloads to a dedicated LZ4 block decompressor and Q10-specific field parser; the Q7 pipeline is unaffected. Also fixed handling of Q10's live position/trace packets sent on the same channel during cleaning, which were previously falling through to the Q7 path and crashing.
- Roborock Q10 MaxPlus suction power wire value — Q10 devices set to MaxPlus suction power were sending Q7's wire value instead of Q10's; MaxPlus now correctly maps to the Q10-specific wire value.
- Previously-cleaned rooms staying marked "Cleaned" at the start of a new clean —
ServiceArea.progressis now reset whenever a genuinely new clean starts, whether triggered via Matter/Apple Home (theIdletransition or aRvcServiceArea.selectAreascall) or externally (Roborock app, robot schedule, physical button), so newly cleaned rooms no longer inherit stale completion state from a prior session. - Vacuum/dock error-code to Matter
ErrorStatemappings — corrected several mis-mappedVacuumErrorCode/DockErrorCodeentries (dust bin, water tank, and mop-related error states) that were resolving to the wrongRvcOperationalState.ErrorState, and added the missingAutoEmptyDockFanErrorcode.
Refactored
- Dead code and unused dependency removal — Deleted 22 unused error subclasses and their tests, an empty settings file, an orphaned dependency, and an unused runtime path.
- Consolidated device state and service-area handling — Extracted a shared state-update helper and merged duplicate branches in service-area handling, with expanded test coverage.