The Roborock inegration for the vacuum cleaner has completely stopped working

In HA I see a red exclamation mark and a message that it failed to configure check the logs.
I tried uninstalling and re-adding the vacuum cleaner, the exclamation mark is still there.
What are the logs, where can I find them? Or is there any other way to solve this? Not long ago it worked without problems.

My integration is also broken as of this morning.

Same for me. 2024.12.4 appears to have broken the Roborock integration.

Also having the same issue… grabbed some debug logs but haven’t been able to dig into it any further yet.

2024-12-18 14:58:52.150 ERROR (MainThread) [roborock.containers] HomeDataDevice.__init__() got an unexpected keyword argument 'cid'
Traceback (most recent call last):
  File "/usr/local/lib/python3.13/site-packages/roborock/containers.py", line 112, in convert_to_class_obj
    return_list.append(cls_type.from_dict(obj))
                       ~~~~~~~~~~~~~~~~~~^^^^^
  File "/usr/local/lib/python3.13/site-packages/roborock/containers.py", line 166, in from_dict
    return cls(**data)
TypeError: HomeDataDevice.__init__() got an unexpected keyword argument 'cid'
2024-12-18 14:58:52.156 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry [email protected] for roborock
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 640, in __async_setup_with_context
    result = await component.async_setup_entry(hass, self)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/roborock/__init__.py", line 72, in async_setup_entry
    device.duid: device for device in all_devices
    ^^^^^^^^^^^
AttributeError: 'dict' object has no attribute 'duid'
2024-12-18 14:59:33.623 ERROR (MainThread) [roborock.containers] HomeDataDevice.__init__() got an unexpected keyword argument 'cid'
Traceback (most recent call last):
  File "/usr/local/lib/python3.13/site-packages/roborock/containers.py", line 112, in convert_to_class_obj
    return_list.append(cls_type.from_dict(obj))
                       ~~~~~~~~~~~~~~~~~~^^^^^
  File "/usr/local/lib/python3.13/site-packages/roborock/containers.py", line 166, in from_dict
    return cls(**data)
TypeError: HomeDataDevice.__init__() got an unexpected keyword argument 'cid'
2024-12-18 14:59:33.629 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry [email protected] for roborock
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 640, in __async_setup_with_context
    result = await component.async_setup_entry(hass, self)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/roborock/__init__.py", line 72, in async_setup_entry
    device.duid: device for device in all_devices
    ^^^^^^^^^^^
AttributeError: 'dict' object has no attribute 'duid'
2024-12-18 15:00:07.192 ERROR (MainThread) [homeassistant.components.roku.coordinator] Error fetching roku data: Invalid response from API: Timeout occurred while connecting to device
2024-12-18 15:00:10.904 DEBUG (MainThread) [homeassistant.components.roborock] Getting home data
2024-12-18 15:00:11.322 ERROR (MainThread) [roborock.containers] HomeDataDevice.__init__() got an unexpected keyword argument 'cid'
Traceback (most recent call last):
  File "/usr/local/lib/python3.13/site-packages/roborock/containers.py", line 112, in convert_to_class_obj
    return_list.append(cls_type.from_dict(obj))
                       ~~~~~~~~~~~~~~~~~~^^^^^
  File "/usr/local/lib/python3.13/site-packages/roborock/containers.py", line 166, in from_dict
    return cls(**data)
TypeError: HomeDataDevice.__init__() got an unexpected keyword argument 'cid'
2024-12-18 15:00:11.328 DEBUG (MainThread) [homeassistant.components.roborock] Got home data HomeData(id=2123134, name='My Home', products=[HomeDataProduct(id='1y5FvZEz6L6rtsFcFwWuGH', name='Q8 Max', model='roborock.vacuum.a73', category=<RoborockCategory.VACUUM: 'robot.vacuum.cleaner'>, code=None, icon_url=None, attribute=None, capability=0, schema=[HomeDataProductSchema(id=101, name='rpc_request', code='rpc_request', mode='rw', type='RAW', product_property=None, property=None, desc=None), HomeDataProductSchema(id=102, name='rpc_response', code='rpc_response', mode='rw', type='RAW', product_property=None, property=None, desc=None), HomeDataProductSchema(id=120, name='错误代码', code='error_code', mode='ro', type='ENUM', product_property=None, property='{"range": [""]}', desc=None), HomeDataProductSchema(id=121, name='设备状态', code='state', mode='ro', type='ENUM', product_property=None, property='{"range": [""]}', desc=None), HomeDataProductSchema(id=122, name='设备电量', code='battery', mode='ro', type='ENUM', product_property=None, property='{"range": [""]}', desc=None), HomeDataProductSchema(id=123, name='清扫模式', code='fan_power', mode='rw', type='ENUM', product_property=None, property='{"range": [""]}', desc=None), HomeDataProductSchema(id=124, name='拖地模式', code='water_box_mode', mode='rw', type='ENUM', product_property=None, property='{"range": [""]}', desc=None), HomeDataProductSchema(id=125, name='主刷寿命', code='main_brush_life', mode='rw', type='VALUE', product_property=None, property='{"max": 100, "min": 0, "step": 1, "unit": "null", "scale": 1}', desc=None), HomeDataProductSchema(id=126, name='边刷寿命', code='side_brush_life', mode='rw', type='VALUE', product_property=None, property='{"max": 100, "min": 0, "step": 1, "unit": "null", "scale": 1}', desc=None), HomeDataProductSchema(id=127, name='滤网寿命', code='filter_life', mode='rw', type='VALUE', product_property=None, property='{"max": 100, "min": 0, "step": 1, "unit": "null", "scale": 1}', desc=None), HomeDataProductSchema(id=128, name='额外状态', code='additional_props', mode='ro', type='RAW', product_property=None, property=None, desc=None), HomeDataProductSchema(id=130, name='完成事件', code='task_complete', mode='ro', type='RAW', product_property=None, property=None, desc=None), HomeDataProductSchema(id=131, name='电量不足任务取消', code='task_cancel_low_power', mode='ro', type='RAW', product_property=None, property=None, desc=None), HomeDataProductSchema(id=132, name='运动中任务取消', code='task_cancel_in_motion', mode='ro', type='RAW', product_property=None, property=None, desc=None), HomeDataProductSchema(id=133, name='充电状态', code='charge_status', mode='ro', type='RAW', product_property=None, property=None, desc=None), HomeDataProductSchema(id=134, name='烘干状态', code='drying_status', mode='ro', type='RAW', product_property=None, property=None, desc=None), HomeDataProductSchema(id=135, name='离线原因细分', code='offline_status', mode='ro', type='RAW', product_property=None, property=None, desc=None)])], devices=[{'duid': '420jYdmLutrX8QNG2ncEKF', 'name': 'Roborock Q8 Max', 'attribute': None, 'active_time': 1709167394, 'create_time': 1709167394, 'local_key': 'dpd1pXQsLDE4M4d8', 'runtime_env': None, 'time_zone_id': 'America/New_York', 'icon_url': '', 'product_id': '1y5FvZEz6L6rtsFcFwWuGH', 'lon': None, 'lat': None, 'share': False, 'share_time': None, 'online': True, 'fv': '02.07.60', 'pv': '1.0', 'room_id': None, 'tuya_uuid': None, 'tuya_migrated': False, 'extra': None, 'setting': None, 'sn': 'R58NHR33301295', 'cid': None, 'feature_set': '2097862799162879', 'new_feature_set': '00000000385AFFF6', 'device_status': {'121': 8, '122': 100, '123': 104, '124': 202, '125': 20, '126': 66, '127': 54, '128': 0, '133': 1, '120': 0}, 'silent_ota_switch': True, 'f': False}], received_devices=[], lon=None, lat=None, geo_name=None, rooms=[HomeDataRoom(id=5054210, name='Utility Room'), HomeDataRoom(id=5054209, name='Corridor'), HomeDataRoom(id=5054206, name='Bedroom'), HomeDataRoom(id=5054205, name='Bathroom'), HomeDataRoom(id=5054204, name='Kitchen'), HomeDataRoom(id=5054198, name='Living room'), HomeDataRoom(id=5054191, name='Office'), HomeDataRoom(id=5054190, name='Master bedroom'), HomeDataRoom(id=5054186, name='Master Closet'), HomeDataRoom(id=5054185, name='Master Bathroom'), HomeDataRoom(id=5054184, name='Master Bedroom Closet')])
2024-12-18 15:00:11.332 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry [email protected] for roborock
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 640, in __async_setup_with_context
    result = await component.async_setup_entry(hass, self)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/roborock/__init__.py", line 72, in async_setup_entry
    device.duid: device for device in all_devices
    ^^^^^^^^^^^
AttributeError: 'dict' object has no attribute 'duid'

Same for me today as well

Hi everyone! Codeowner for the Roborock integration here. I have a fix for this already included in 2024.12.5 as of this morning. Once 2024.12.5 gets pushed out, update to that.

Basically, Roborock changed their api yesterday a tiny bit and that is causing the issues. I added a solution that will help prevent a similar error from happening again, but api changes of any form can cause major problems.

MANY previous versions of the roborock integration will be permanently broken! So I’m sorry to force anyone to 2024.12.5 that wasn’t planning on it, but you will need to. I encourage everyone to go here: #133533 where I will leave the issue open for any further questions. I do not frequently check the forums.

Sorry for the inconvenience everyone! I fixed it as soon as I was aware of it, but of course I have no real affiliation with Roborock, so I did not know beforehand. Hopefully 2024.12.5 will be released shortly.

7 Likes

Do I understand correctly, since your integration is added to HA and is not installed via HACS, updating your integration is only possible together with updating the whole HA ?

Yes, that is correct

1 Like

Integration connected to api, but all entities are unavailable. Please check