From d28c6e90b6a128b2a63956eefa8179c9c9573ed9 Mon Sep 17 00:00:00 2001
From: ia74 <68617740+ia74@users.noreply.github.com>
Date: Tue, 15 Jul 2025 17:58:13 -0500
Subject: [PATCH] romba rest 908
---
README.md | 120 ++++++++++++++++++
.../roomba_rest980}/RoombaSensor.py | 0
.../roomba_rest980}/__init__.py | 0
.../roomba_rest980}/config_flow.py | 0
.../roomba_rest980}/const.py | 0
.../roomba_rest980}/manifest.json | 0
.../roomba_rest980}/sensor.py | 0
.../roomba_rest980}/services.yaml | 0
.../roomba_rest980}/strings.json | 0
.../roomba_rest980}/switch.py | 0
.../roomba_rest980}/vacuum.py | 0
docker-compose.yaml | 13 ++
hacs.json | 5 +
13 files changed, 138 insertions(+)
create mode 100644 README.md
rename {roomba_rest980 => custom_components/roomba_rest980}/RoombaSensor.py (100%)
rename {roomba_rest980 => custom_components/roomba_rest980}/__init__.py (100%)
rename {roomba_rest980 => custom_components/roomba_rest980}/config_flow.py (100%)
rename {roomba_rest980 => custom_components/roomba_rest980}/const.py (100%)
rename {roomba_rest980 => custom_components/roomba_rest980}/manifest.json (100%)
rename {roomba_rest980 => custom_components/roomba_rest980}/sensor.py (100%)
rename {roomba_rest980 => custom_components/roomba_rest980}/services.yaml (100%)
rename {roomba_rest980 => custom_components/roomba_rest980}/strings.json (100%)
rename {roomba_rest980 => custom_components/roomba_rest980}/switch.py (100%)
rename {roomba_rest980 => custom_components/roomba_rest980}/vacuum.py (100%)
create mode 100644 docker-compose.yaml
create mode 100644 hacs.json
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..6639a3c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,120 @@
+# roomba_rest980
+
+Drop-in native integration/replacement for [jerrywillans/ha-rest980-roomba](https://github.com/jeremywillans/ha-rest980-roomba).
+
+Still work in progress, but the vacuum entity has been fully ported over.
+
+## Roadmap
+
+- [x] Feature parity (minus actions) with vacuum entity
+- [ ] Actions
+- [ ] Dynamically grab rooms and add them to the UI
+
+## Setup
+
+### Prerequisites / Recommendations
+
+- HACS
+- rest980
+ - If you don't have it yet, don't worry; this guide will show you how to add it.
+- Rooms mapped/setup in iRobot app
+ - Note that everytime you remap and a room changes, it's ID may change!
+- Knowledge of your Roomba's IP
+
+> I recommend that you use [the lovelace-roomba-vacuum-card](https://github.com/jeremywillans/lovelace-roomba-vacuum-card) until I remake it for this integration.
+
+
+## Step 1: Setting up rest980: Grab Robot Credentials
+
+If you already have it setup, and you know its url (like `http://localhost:3000`), you may skip this step.
+First, you must gather your robot's on-device password and BLID (identifier).
+
+> NOTE: You cannot have the iRobot app running on your phone, or anything else connected to it during this step!
+
+
+
+ For Docker users
+
+Execute this command:
+```sh
+docker run -it node sh -c "npm install -g dorita980 && get-roomba-password "
+```
+and follow the on-screen instructions.
+
+
+
+
+ HA Addon by jeremywillans
+
+
+Add `https://github.com/jeremywillans/hass-addons` to the Addons tab.
+Locate and install the `roombapw` addon, following the included instructions.
+
+
+
+
+
+ Other HA installation method
+
+
+If you dont have direct access to Docker, you can clone and install the dorita980 package locally.
+See [dorita980's instructions on how to get the credentials](https://github.com/koalazak/dorita980#how-to-get-your-usernameblid-and-password).
+
+
+
+### Setting up rest980: Bringing The Server Up
+
+Now that you have your robot's IP, BLID, and password, we need to actually start rest980.
+
+
+
+ For Docker users (docker-compose)
+
+
+[Download the docker-compose.yaml file, and bring the service up.](docker-compose.yaml)
+
+To bring the service up (just rest980) and leave it in the background, run
+
+```sh
+docker-compose up -d rest980
+```
+
+You may also add the service to an existing configuration. You do not need to add file binds/mounts, as there are not any.
+
+
+
+
+
+ HA Addon by jeremywillans
+
+
+If you haven't, add `https://github.com/jeremywillans/hass-addons` to the Addons tab.
+Locate and install the `rest980` addon, then update and save the configuration options with the credentials you got from the previous step.
+> NOTE: Rest980 Firmware option 2 implies v2+ (inclusive of 3.x)
+
+
+
+
+
+ Other HA installation method
+
+
+ Clone and start the [rest980 server by koalazak, and note your computer's IP and port.](https://github.com/koalazak/rest980)
+
+
+
+## Step 2: Setting up the Integration
+
+
+
+ For HACS users
+
+ Add this custom repository, `https://github.com/ia74/roomba_rest980` to HACS as an Integration. Search for the addon ("iRobot Roomba (rest980)")
+
+
+
+
+ Manual installation
+
+ Clone this repository, `https://github.com/ia74/roomba_rest980`, and add the custom component folder (`roomba_rest980`) to your Home Assistant's `config/custom_components` folder.
+
\ No newline at end of file
diff --git a/roomba_rest980/RoombaSensor.py b/custom_components/roomba_rest980/RoombaSensor.py
similarity index 100%
rename from roomba_rest980/RoombaSensor.py
rename to custom_components/roomba_rest980/RoombaSensor.py
diff --git a/roomba_rest980/__init__.py b/custom_components/roomba_rest980/__init__.py
similarity index 100%
rename from roomba_rest980/__init__.py
rename to custom_components/roomba_rest980/__init__.py
diff --git a/roomba_rest980/config_flow.py b/custom_components/roomba_rest980/config_flow.py
similarity index 100%
rename from roomba_rest980/config_flow.py
rename to custom_components/roomba_rest980/config_flow.py
diff --git a/roomba_rest980/const.py b/custom_components/roomba_rest980/const.py
similarity index 100%
rename from roomba_rest980/const.py
rename to custom_components/roomba_rest980/const.py
diff --git a/roomba_rest980/manifest.json b/custom_components/roomba_rest980/manifest.json
similarity index 100%
rename from roomba_rest980/manifest.json
rename to custom_components/roomba_rest980/manifest.json
diff --git a/roomba_rest980/sensor.py b/custom_components/roomba_rest980/sensor.py
similarity index 100%
rename from roomba_rest980/sensor.py
rename to custom_components/roomba_rest980/sensor.py
diff --git a/roomba_rest980/services.yaml b/custom_components/roomba_rest980/services.yaml
similarity index 100%
rename from roomba_rest980/services.yaml
rename to custom_components/roomba_rest980/services.yaml
diff --git a/roomba_rest980/strings.json b/custom_components/roomba_rest980/strings.json
similarity index 100%
rename from roomba_rest980/strings.json
rename to custom_components/roomba_rest980/strings.json
diff --git a/roomba_rest980/switch.py b/custom_components/roomba_rest980/switch.py
similarity index 100%
rename from roomba_rest980/switch.py
rename to custom_components/roomba_rest980/switch.py
diff --git a/roomba_rest980/vacuum.py b/custom_components/roomba_rest980/vacuum.py
similarity index 100%
rename from roomba_rest980/vacuum.py
rename to custom_components/roomba_rest980/vacuum.py
diff --git a/docker-compose.yaml b/docker-compose.yaml
new file mode 100644
index 0000000..deb1c08
--- /dev/null
+++ b/docker-compose.yaml
@@ -0,0 +1,13 @@
+services:
+ rest980:
+ container_name: rest980
+ image: koalazak/rest980:latest
+ ports:
+ - "3000:3000"
+ environment:
+ # Replace the following with the credentials you got in the last step.
+ - BLID=
+ - PASSWORD=
+ - ROBOT_IP=
+ - FIRMWARE_VERSION=2
+ restart: unless-stopped
\ No newline at end of file
diff --git a/hacs.json b/hacs.json
new file mode 100644
index 0000000..90de87c
--- /dev/null
+++ b/hacs.json
@@ -0,0 +1,5 @@
+{
+ "name": "iRobot Roomba (rest980)",
+ "homeassistant": "2025.5.0",
+ "hacs": "2.0.5"
+}
\ No newline at end of file