Finally! Made it work!!!
Been tinkering with gemini and when succeeded, asked to made a guide
Enabling Support for Roborock Q10 S5+ in Home Assistant
The Roborock Q10 S5+ (B01-Q10 series) is currently not fully supported by the official Roborock integration. If you add it, it will either fail to initialize or show no battery and a fixed “Idle” state.
This guide explains how to create a patched Custom Component to make it 100% functional.
Step 1: Download and Prepare the Folder
Download the source code of theofficial Roborock integration(Download the ZIP).
Inside your Home Assistant config folder, create a folder named custom_components (if it doesn’t exist).
Extract the roborock folder from the ZIP into config/custom_components/.
Your structure should look like this: /config/custom_components/roborock/.
Step 2: Modify the Code
You need to edit 3 specific files within /config/custom_components/roborock/.
- File:
__init__.py
Search for the logic where coordinators are created and ensure the Q10 is intercepted.
if device.b01_q10_properties:
_LOGGER.info("Q10 S5+ detected, using custom B01 coordinator")
coordinator = RoborockB01Q10UpdateCoordinator(hass, entry, device, device.b01_q10_properties)
- File:
coordinator.py (Add to the end of file)
This coordinator forces the Q10 to start its data stream and refreshes the status object.
class RoborockB01Q10UpdateCoordinator(RoborockDataUpdateCoordinatorB01):
"""Specific Coordinator for B01-Q10 Series."""
def __init__(self, hass: HomeAssistant, config_entry: RoborockConfigEntry, device: RoborockDevice, api: Any) -> None:
super().__init__(hass, config_entry, device)
self.api = api
self._api_started = False
async def _async_update_data(self) -> Any:
try:
if not self._api_started and hasattr(self.api, 'start'):
await self.api.start()
self._api_started = True
if hasattr(self.api, 'refresh'):
await self.api.refresh()
except Exception as ex:
_LOGGER.debug("Q10 Refresh Error: %s", ex)
return getattr(self.api, 'status', {})
- File
vacuum.py (Add to the end of file)
This handles the string-based statuses and specific command paths for the Q10.
class RoborockB01Q10UpdateCoordinator(RoborockDataUpdateCoordinatorB01):
"""Specific Coordinator for B01-Q10 Series."""
def __init__(self, hass: HomeAssistant, config_entry: RoborockConfigEntry, device: RoborockDevice, api: Any) -> None:
super().__init__(hass, config_entry, device)
self.api = api
self._api_started = False
async def _async_update_data(self) -> Any:
try:
if not self._api_started and hasattr(self.api, 'start'):
await self.api.start()
self._api_started = True
if hasattr(self.api, 'refresh'):
await self.api.refresh()
except Exception as ex:
_LOGGER.debug("Q10 Refresh Error: %s", ex)
return getattr(self.api, 'status', {})
Step 3: Finalize
Restart Home Assistant.
Go to Settings > Devices & Services.
Add the Roborock integration (it will now use your custom_component version).
Login with your Roborock account.
The Q10 S5+ should now correctly report battery percentage, switch to “Cleaning” status when active, and respond to all controls.