v3.1.1
Roomba+ v3.1.1 — Last Mission Summary Bugfix
Config entry version: 24 (unchanged — no migration required)
Minimum Home Assistant: 2025.5.0
Breaking changes: none for end users
Overview
A small follow-up release fixing a bug in sensor.*_last_mission_summary (introduced in v3.1.0) and adding the room-by-room coverage data that was requested alongside it.
Bug fix
cleaned_rooms on sensor.*_last_mission_summary always returned None on real installations. The attribute was reading a last_cleaned_rooms key directly from the stored mission record — but that key never actually exists there; it's only ever computed on the fly (the same name is used as a computed attribute on the vacuum entity, which created the confusion). cleaned_rooms now uses the same MissionStore.latest_cleaned_rooms() resolution path the vacuum entity already used correctly, with the same region-map/UMF-alignment fallback logic for SMART vs. EPHEMERAL robots.
New attribute
sensor.*_last_mission_summary now also exposes room_coverage — a {room_name: coverage_fraction} dictionary for the most recent mission, using the same data the vacuum entity's room_coverage attribute already provides. No new computation, no new data source — same information, now available in one place alongside the rest of the mission summary instead of needing a separate entity lookup.
Both cleaned_rooms and room_coverage are None when no cloud credentials are configured and the robot's Smart Map isn't yet aligned — same gate the vacuum entity attribute uses.
Field-data acknowledgement
This release exists because of a thoughtful follow-up suggestion from a field tester comparing Roomba+ against the official iRobot app's mission summary — specifically asking whether room coverage could be folded into the last-mission entity. Looking into it surfaced the cleaned_rooms bug as a side effect.
Test suite
3029 tests, 0 failures (baseline: 3027 before this release).
Upgrade notes
No config entry migration. If you were already reading cleaned_rooms from last_mission_summary and handling its (incorrect) None value in an automation or template, that workaround is no longer necessary — the attribute now returns real data.