logo elektroda
logo elektroda
X
logo elektroda

Full integration of iRobot Roomba with Home Assistant - remote control without the cloud

p.kaczmarek2  1 1002 Cool? (+7)
📢 Listen (AI):

TL;DR

  • Built a custom Wi‑Fi remote control module for iRobot Roomba 500–800 series vacuums, adding MQTT-based Home Assistant integration and fully cloudless operation.
  • The module runs OpenBeken firmware with ENABLE_DRIVER_ROOMBA, then exposes Roomba controls through the device web page and Home Assistant’s MQTT discovery.
  • The project has been implemented on 33+ platforms, and the firmware can be uploaded with BK7231GUIFlashTool.
  • Home Assistant detects the vacuum as a vacuum entity, enabling start, stop, return-to-base, cleaning mode, and battery, sensor, and charging status reads.
  • A UART level converter is required because Roomba uses different voltages, and direct wiring could damage the microcontroller or cause unstable communication.
Generated by the language model.
iRobot Roomba with open top flap and visible circuit board, near a docking station on a floor
Here I will show how to make and connect a custom remote control module for iRobot Roomba 500-800 series hoovers. The control will be via Wi-Fi and will offer ready integration with Home Assistant via MQTT. The hoover modified in this way will be able to work according to a schedule, follow sent commands and will operate fully cloudless. This solution is particularly useful for older Roomba models that do not have factory network connectivity.

In the previous section...
Let's start by recalling the previous topic in the series. There, the communication protocol was discussed and an early prototype was presented:
Home remote control for Roomba hoover - UART interface - control via WiFi [EN]
Home remote control for Roomba hoover - UART interface - control via WiFi [EN]



Now we've gone a step further, so it's time to see what's changed.


Hardware required
We have implemented the project in our environment on 33+ platforms , so you will need some supported Wi-Fi module. You can check the support status on the repository but in the big picture, some sort of Beken or ESP32 will probably suffice. You'll need inverters from the power supply (because we have battery voltage on the connector from the Roomba) and a UART level converter, as in the diagram:
Wiring diagram of Wi‑Fi module with UART level shifter and 5V/3.3V power for an iRobot Roomba connector
The logic level converter is needed because the Roomba's UART interface works with voltages different from most common Wi-Fi modules. Without it, a direct connection could lead to damage to the microcontroller or unstable communication. We managed to sandwich the module together.
iRobot Roomba vacuum with exposed small circuit board and red, white, and black wires Inside an iRobot Roomba with a small electronic module and wires connected near the compartment

Required firmware
Our batch, compiled with Roomba support of course, needs to be uploaded onto the Wi-Fi module. ENABLE_DRIVER_ROOMBA must be enabled in obk_config.h for our platform. You can compile online:
System online builds OpenBeken - firmware compilation for all platforms on Github [EN]
System online builds OpenBeken - firmware compilation for all platforms on Github [EN]
Can be uploaded with our flasher:
https://github.com/openshwprojects/BK7231GUIFlashTool
We should get the controls on the device web page:
Screenshot of “Roomba_test” web UI with Clean/Spot/Dock buttons, sensor readouts, and MQTT status
From the web interface you can also check the status of the UART connection and verify that the hoover is responding to the commands sent by the firmware.

Integrate Home Assistant
It is enough to perform the classic HASS Discovery, as on other OBK devices:



This way we get full readings in Home Assistant, together with correct integration of the vacuum cleaner .
Home Assistant screenshot: Roomba via MQTT with battery sensors, controls, and activity log
This gives us dedicated controls, docking status, etc:
Home Assistant card “Roomba Vacuum” with robot vacuum icon, “Docked” status, and 100% battery
Once the device has been correctly detected in Home Assistant, it will appear as a vacuum entity. This makes standard HA services such as start, stop, return to base or cleaning mode available.
Home Assistant “Vacuum” card for Roomba showing Docked status, 100% battery, and control buttons

Summary
In summary, this integration gives us full control of the hoover from the Home Assistant. In it, we can read data, such as battery, sensor and charging status, and control the hoover - start and stop a cleaning session. By force, this also becomes compatible with HA's automations and schedules, so we can tailor the operation of the device to our individual needs.
Do you have a hoover paired with Home Assistant, and if so, through what integration?

Interesting links:
Project repository:
https://github.com/openshwprojects/OpenBK7231T_App
Flasher to upload firmware:
https://github.com/openshwprojects/BK7231GUIFlashTool
Supported devices:

Used materials:
https://www.home-assistant.io/integrations/vacuum/
https://github.com/denysdovhan/vacuum-card
Attachments:
  • iRobot_Roomba_600_Open_Interface_Spec.pdf (1.56 MB) You must be logged in to download this attachment.

About Author
p.kaczmarek2
p.kaczmarek2 wrote 14355 posts with rating 12267 , helped 649 times. Been with us since 2014 year.

Comments

szeryf3 11 Mar 2026 20:46

And wasn't it recently the Chinese who bought an iRobot Roomba to acquire data from the cloud? This was written a few days ago. [Read more]

FAQ

TL;DR: This build adds local Wi‑Fi control to iRobot Roomba 500–800 series using one Wi‑Fi module and MQTT; “full readings in Home Assistant” appear after MQTT Discovery. No cloud needed; UART connects via a level shifter. [Elektroda, p.kaczmarek2, post #21855620]

Why it matters: It lets you schedule, start/stop, and dock older Roombas entirely offline through Home Assistant.

Quick Facts

  • Supported models: iRobot Roomba 500–800 series via the Roomba UART/service port. [Elektroda, p.kaczmarek2, post #21855620]
  • Firmware: OpenBeken build with ENABLE_DRIVER_ROOMBA set in obk_config.h; flashed with BK7231GUIFlashTool. [Elektroda, p.kaczmarek2, post #21855620]
  • Interface: UART requires a logic‑level converter because Roomba UART voltage differs from common 3.3 V modules. [Elektroda, p.kaczmarek2, post #21855620]
  • Integration: MQTT Discovery exposes a vacuum entity with start, stop, and return‑to‑base services in Home Assistant. ["Home Assistant Vacuum integration"]
  • Hardware options: Beken BK7231 or ESP32‑class Wi‑Fi modules are supported in the OpenBeken environment. ["OpenBK7231T_App README"]
Control method Internet required Data path Setup steps
OpenBeken + MQTT + Home Assistant No UART → Wi‑Fi → MQTT → HA Flash firmware → wire UART/levels → enable MQTT Discovery
Vendor cloud app Yes Robot → vendor cloud → app Create account → pair → use cloud APIs

Key insight: “Cloudless” Roomba control is achieved by speaking Roomba’s UART protocol locally and surfacing it as a native Home Assistant vacuum entity via MQTT Discovery. [Elektroda, p.kaczmarek2, post #21855620]

What do I need to control a Roomba locally with Home Assistant?

You need a supported Wi‑Fi module (e.g., BK7231/ESP32), a power inverter/step‑down from the Roomba battery rail, a UART logic‑level converter, and OpenBeken firmware built with ENABLE_DRIVER_ROOMBA. Home Assistant auto‑discovers the vacuum over MQTT and provides native controls. [Elektroda, p.kaczmarek2, post #21855620]

How do I flash the OpenBeken firmware for Roomba support?

Flash an OpenBeken build with Roomba support enabled. 1. Compile with ENABLE_DRIVER_ROOMBA in obk_config.h. 2. Upload via BK7231GUIFlashTool. 3. Verify Roomba controls appear on the device web UI and respond to commands. [Elektroda, p.kaczmarek2, post #21855620]

Why do I need a UART level shifter for this integration?

Roomba’s UART voltage level differs from typical 3.3 V Wi‑Fi modules, so a level shifter prevents damage and ensures stable communication. Incorrect direct wiring can damage a microcontroller or cause errors. “The logic level converter is needed… to avoid damage.” [Elektroda, p.kaczmarek2, post #21855620]

Does this work without any cloud connection?

Yes. The module speaks Roomba’s UART locally and publishes states/commands via MQTT, enabling fully cloudless control, schedules, and automations in Home Assistant. Local control continues to work offline. [Elektroda, p.kaczmarek2, post #21855620]

How do I add the robot to Home Assistant with MQTT Discovery?

Enable MQTT on the OpenBeken device and Home Assistant. The device announces itself using MQTT Discovery; Home Assistant creates a vacuum entity with start/stop/dock services and status. Discovery requires no YAML for basic controls. ["Home Assistant Vacuum integration"]

Which Wi‑Fi modules are supported for this Roomba retrofit?

OpenBeken runs on 33+ platforms, including Beken BK7231 families and ESP32‑class boards. Check the project’s support matrix and compile online if needed before flashing. ["OpenBK7231T_App README"]

What pins and wires are involved in the Roomba UART hookup?

You connect Roomba UART RX/TX and GND through a bidirectional level shifter to the module’s UART, plus power via a battery‑to‑module converter. Keep RX/TX straight after level shifting to avoid inverted signaling. [Elektroda, p.kaczmarek2, post #21855620]

What Home Assistant controls will I see after discovery?

You’ll see a vacuum entity exposing start, stop, return‑to‑base, docking state, battery, and charging status in the HA UI and services. These map to standard vacuum services for automations. ["Home Assistant Vacuum integration"]

Is MQTT mandatory, and what port should I use?

Yes, MQTT transports commands and state for Home Assistant Discovery. Typical brokers listen on TCP port 1883 for unencrypted connections; configure matching credentials in both ends. ["MQTT v3.1.1 OASIS"]

Can I use ESP32, and what Wi‑Fi band does it require?

Yes. ESP32‑class boards support 2.4 GHz 802.11 b/g/n, which is compatible with most Home Assistant/MQTT setups. Ensure good 2.4 GHz coverage near the dock for reliable updates. ["ESP32 Wi‑Fi Specifications"]

What happens if I skip the level shifter and wire UART directly?

Directly tying mismatched UART levels risks permanent MCU damage and intermittent comms. Always use a logic‑level converter between Roomba and a 3.3 V module to match voltages. “Without it, a direct connection could lead to damage.” [Elektroda, p.kaczmarek2, post #21855620]

How do I verify the Roomba is responding after the flash?

Open the device’s web UI and use the on‑page controls to issue start/stop/dock. Check the UART status panel; you should see state changes and actions reflected immediately. [Elektroda, p.kaczmarek2, post #21855620]

Can I schedule cleanups in Home Assistant once it’s integrated?

Yes. Use HA automations to trigger the vacuum entity at set times or events. The project explicitly supports schedules because the device operates as a standard HA vacuum. [Elektroda, p.kaczmarek2, post #21855620]

What’s the easiest way to get device entities and cards in the HA dashboard?

Leverage MQTT Discovery for the entity, then add a vacuum card (e.g., denysdovhan/vacuum‑card) to Lovelace for quick controls and status. ["Home Assistant Vacuum integration"]

Where do I find the source code and flashing tool?

Source code lives in the OpenBK7231T_App repository, and you can flash with BK7231GUIFlashTool. The thread links both resources directly. [Elektroda, p.kaczmarek2, post #21855620]

Any caveats when powering the module from the Roomba?

Yes. The Roomba connector exposes battery voltage, so include a suitable converter before powering the Wi‑Fi module. Verify polarity, voltage, and current headroom to prevent brownouts during docking or motor starts. [Elektroda, p.kaczmarek2, post #21855620]
Generated by the language model.
%}