ECOVACS DEEBOT T90 OMNI Live View Camera Integration

I’ve put together a custom Home Assistant integration that adds Live View camera support for the ECOVACS DEEBOT T90 OMNI.

It currently supports:

  • Live camera view in Home Assistant
  • Start/Stop Live View buttons
  • Automatic robot discovery
  • Live View PIN authentication
  • WebRTC/Kinesis video streaming
  • Configurable automatic stream timeout
  • Live View status/diagnostics

It’s currently tested on the DEEBOT T90 OMNI.

GitHub:
https://github.com/imcdo17-cyber/home-assistant-ecovacs-live

It can also be installed through HACS as a custom repository.

If anyone else has a T90 and wants to test it, I’d be interested to know how it goes on other setups.

Hi; I ran into the following error when trying to add the integration:

Config flow could not be loaded: {"message":"Invalid handler specified"}

Below are the logs related to it:

2026-08-22 13:57:39.761 WARNING (ImportExecutor_0) [py.warnings] /usr/local/lib/python3.14/site-packages/google_crc32c/__init__.py:29: RuntimeWarning: As the c extension couldn't be imported, `google-crc32c` is using a pure python implementation that is significantly slower. If possible, please configure a c build environment and compile the extension
  warnings.warn(_SLOW_CRC32C_WARNING, RuntimeWarning)
2026-08-22 13:57:39.930 WARNING (MainThread) [homeassistant.util.loop] Detected blocking call to import_module with args ('custom_components.ecovacs_live.config_flow',) inside the event loop by integration 'config' at homeassistant/components/config/config_entries.py, line 194: return await super()._post_impl(request, data) (offender: /usr/src/homeassistant/homeassistant/loader.py, line 1321: return importlib.import_module(f"{self.pkg_path}.{platform_name}")), please create a bug report at https://github.com/home-assistant/core/issues?q=is%3Aopen+is%3Aissue+label%3A%22integration%3A+config%22
For developers, please see https://developers.home-assistant.io/docs/asyncio_blocking_operations/#import_module
Traceback (most recent call last):
  File "<frozen runpy>", line 203, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/src/homeassistant/homeassistant/__main__.py", line 227, in <module>
    sys.exit(main())
  File "/usr/src/homeassistant/homeassistant/__main__.py", line 213, in main
    exit_code = runner.run(runtime_conf)
  File "/usr/src/homeassistant/homeassistant/runner.py", line 290, in run
    return loop.run_until_complete(setup_and_run_hass(runtime_config))
  File "/usr/local/lib/python3.14/asyncio/base_events.py", line 706, in run_until_complete
    self.run_forever()
  File "/usr/local/lib/python3.14/asyncio/base_events.py", line 677, in run_forever
    self._run_once()
  File "/usr/local/lib/python3.14/asyncio/base_events.py", line 2056, in _run_once
    handle._run()
  File "/usr/local/lib/python3.14/asyncio/events.py", line 94, in _run
    self._context.run(self._callback, *self._args)
  File "/usr/local/lib/python3.14/site-packages/aiohttp/web_protocol.py", line 575, in _handle_request
    resp = await request_handler(request)
  File "/usr/local/lib/python3.14/site-packages/aiohttp/web_app.py", line 559, in _handle
    return await handler(request)
  File "/usr/local/lib/python3.14/site-packages/aiohttp/web_middlewares.py", line 117, in impl
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 96, in security_filter_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 86, in forwarded_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 24, in request_context_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 88, in ban_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 261, in auth_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 39, in headers_middleware
    response = await handler(request)
  File "/usr/src/homeassistant/homeassistant/helpers/http.py", line 92, in handle
    result = await handler(request, **request.match_info)
  File "/usr/src/homeassistant/homeassistant/components/http/decorators.py", line 81, in with_admin
    return await func(self, request, *args, **kwargs)
  File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 72, in wrapper
    return await method(view, request, data, *args, **kwargs)
  File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 186, in post
    return await self._post_impl(request, data)
  File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 194, in _post_impl
    return await super()._post_impl(request, data)
2026-08-22 13:57:39.931 ERROR (MainThread) [custom_components.ecovacs_live] Error occurred loading flow for integration ecovacs_live: cannot import name 'DeviceVerificationRequiredError' from 'deebot_client.exceptions' (/usr/local/lib/python3.14/site-packages/deebot_client/exceptions.py)
2026-08-22 13:57:52.313 ERROR (MainThread) [custom_components.ecovacs_live] Error occurred loading flow for integration ecovacs_live: cannot import name 'DeviceVerificationRequiredError' from 'deebot_client.exceptions' (/usr/local/lib/python3.14/site-packages/deebot_client/exceptions.py)
2026-08-22 13:58:54.768 ERROR (MainThread) [custom_components.ecovacs_live] Error occurred loading flow for integration ecovacs_live: cannot import name 'DeviceVerificationRequiredError' from 'deebot_client.exceptions' (/usr/local/lib/python3.14/site-packages/deebot_client/exceptions.py)
2026-08-22 14:04:00.400 ERROR (MainThread) [custom_components.ecovacs_live] Error occurred loading flow for integration ecovacs_live: cannot import name 'DeviceVerificationRequiredError' from 'deebot_client.exceptions' (/usr/local/lib/python3.14/site-packages/deebot_client/exceptions.py)

Quick update: I’m investigating an issue affecting the current ECOVACS Live View release where the Home Assistant config flow can fail to load.

I’ve identified the likely cause as a dependency mismatch. The integration was using deebot-client==18.4.0, but the config flow expects functionality available in deebot-client==18.5.1.

I’m testing the change to:


deebot-client==18.5.1

A new release should be available shortly. If you’re affected, please hold off reinstalling for the moment and I’ll post an update as soon as the fix is published.

Update: The fix is now released in ECOVACS Live View v0.8.4.

The config-flow issue was caused by the integration depending on an older deebot-client version. The requirement has now been changed to:

deebot-client>=18.5.1,<21

This keeps 18.5.1 as the minimum known-good version while allowing newer compatible 18.x, 19.x and 20.x releases.

The update is available now through GitHub/HACS.

If you were affected by the Invalid handler specified / config-flow loading error, please update to v0.8.4 and let me know if you still see any issues.

1 Like