Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Robart Web UI

Browser-based control panel, map viewer, and API probe for Robart MyVacBot robot vacuums.

HUGE props to: https://github.com/vamposdecampos/robart-web-ui and https://github.com/worm-ee/robart-rest-api for kicking off this project and proving this is possible! I severely expanded on the code in the repos above.

This project has two parts:

  • A small Flask app in app.py that serves the frontend and proxies requests to the robot's REST API to avoid browser CORS issues.
  • A standalone endpoint enumerator in robart_enum.py that brute-forces likely /get/... and /set/... paths and saves the results to endpoints_found.json.

Implemented Features

Web UI

  • Interactive SVG map with pan, zoom, click selection, and layered rendering
  • Cleaning grid overlay decoded from the robot's RLE map data
  • Feature map rendering for walls/segments and docking station marker
  • Area polygon rendering with clickable area selection
  • No-navigation polygon overlay
  • Robot identity panel with name, model, firmware, unique IDs
  • Live status panel with mode, battery, charging state, voltage, selected cleaning profile, robot time, and startup time
  • Wi-Fi panel with SSID, RSSI, IP, MAC address, and connection type
  • Schedule panel
  • Lifetime statistics panel
  • Power status panel
  • Network status panel
  • Maps panel showing known map IDs and map metadata
  • Event log panel
  • Notifications panel
  • Motion controls for start/continue cleaning, go home, and stop
  • Cleaning profile selector for profiles 1 through 4
  • Map management actions for saving the current map and deleting a map by ID
  • Settings actions for renaming the robot, setting time, setting timezone, and sending Wi-Fi connect requests
  • Command log with timestamps and success/error feedback
  • Experimental API Explorer for arbitrary proxied GET requests with query parameters and formatted responses

Utility Script

  • Offline-friendly endpoint enumeration using built-in robot-specific words plus local wordlists
  • Optional SecLists wordlist download mode
  • Concurrent probing with configurable timeout, thread count, target IP, port, and output file
  • JSON export of discovered endpoints and sample responses

Project Layout

app.py
robart_enum.py
endpoints_found.json
static/
  app.html
  app.css
  app.js
  assets/
wordlists/

Requirements

  • Python 3.x
  • flask
  • requests
  • A Robart robot reachable on your local network

Setup

Install dependencies:

pip install flask requests

Configure the robot IP in app.py:

ROBOT_URL = "http://192.168.1.23:10009"

The frontend assets referenced by the app are already present in static/assets/, so no extra downloads are needed for this repository snapshot.

Run The UI

python app.py

Then open http://localhost:5000.

Proxy Architecture

Browser -> Flask proxy (localhost:5000) -> Robot REST API (:10009)

The Flask app exposes two catch-all proxy routes:

Route Forwarded to
GET /get/<path> http://<ROBOT_URL>/get/<path>
GET /set/<path> http://<ROBOT_URL>/set/<path>

Query parameters are forwarded as-is. Requests use an 8 second timeout. Connection and timeout failures are returned as JSON errors.

Endpoint Coverage

All robot operations in this project use HTTP GET, including command-style /set/... requests.

Endpoints Used By The UI

These are implemented directly in static/app.js.

Read Endpoints

Endpoint Query params Used for
GET /get/robot_name none Window title and robot title
GET /get/robot_id none Identity panel
GET /get/status none Live status panel
GET /get/wifi_status none Wi-Fi panel
GET /get/schedule none Schedule panel
GET /get/statistics none Lifetime statistics panel
GET /get/power_status none Power panel
GET /get/network_status none Network panel
GET /get/maps none Maps panel
GET /get/event_log none Event log panel
GET /get/notifications none Notifications panel
GET /get/cleaning_grid_map none Base map selection and cleaned-cell overlay
GET /get/feature_map map_id Wall segments and docking pose
GET /get/areas map_id Cleaning area polygons
GET /get/n_n_polygons map_id No-navigation polygons

Write Endpoints

Endpoint Query params Used for
GET /set/clean_start_or_continue cleaning_parameter_set=1..4 Start or continue cleaning
GET /set/go_home none Return to dock
GET /set/stop none Stop current action
GET /set/save_map none Save current map
GET /set/delete_map map_id Delete a stored map
GET /set/robot_name name Rename robot
GET /set/time year, month, day, hour, min, sec, day_of_week Set robot clock
GET /set/timezone timezone Set timezone
GET /set/connect ssid, optional password Send Wi-Fi connect request

Additional Documented Or Discovered Endpoints

These are present in endpoints_found.json but are not all surfaced as first-class UI panels or actions.

Endpoint Query params Notes
GET /get/cleaning_parameter_set none Returns the currently configured cleaning parameter set
GET /get/system_status none Returns a deprecation error on the sampled robot/firmware
GET /set/password unknown Discovered, but returned not_implemented in the sample scan

Response Notes From The Included Scan

The bundled endpoints_found.json contains 27 discovered endpoints from a scan against http://192.168.1.23:10009.

  • get/maps returns a maps array with map_id, permanent_flag, and map statistics.
  • get/cleaning_grid_map returns map_id, origin coordinates, grid size, resolution, timestamp, and an RLE-encoded cleaned array.
  • get/feature_map returns map.lines plus map.docking_pose.
  • get/areas returns map_id and an areas array with polygon points.
  • get/n_n_polygons returns map.polygons as segment lists.
  • get/network_status returns a MAC address and an addresses list.
  • get/event_log returns robot_events.
  • get/notifications returns robot_notifications.
  • Several /set/... endpoints return parameter_error when called without the required query string, which is expected for endpoints like set/time, set/timezone, set/connect, set/delete_map, and set/robot_name.

Because this is based on one robot and firmware version, treat the discovered endpoint list as firmware-dependent rather than universal.

Endpoint Enumerator

Run the scanner:

python robart_enum.py

Useful options:

python robart_enum.py --ip 192.168.1.23 --port 10009 --threads 12 --timeout 6
python robart_enum.py --wordlists-dir wordlists
python robart_enum.py --download-wordlists

By default the script writes results to endpoints_found.json.

Notes

  • The UI determines the active map_id from get/cleaning_grid_map, then fetches the map-dependent geometry endpoints with that ID.
  • The map view shows the docking station location, not a live robot position. No current-position endpoint is used by this project.
  • app.py runs Flask with debug=True.
  • The API Explorer only issues GET requests through the same proxy used by the rest of the UI.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages