xplorer-rs
Control library for X-Plorer Serie 75 S / Serie 95 S robot vacuum cleaners, built on top of tuya-rs for Tuya v3.3 protocol communication.
Two implementations of the Device trait are available:
LocalXPlorer— local TCP control via the Tuya v3.3 protocol (default)CloudXPlorer— cloud control via the Tuya OEM Mobile API (cloudfeature)
Reverse-engineered from the official Android APK (Ghidra + packet sniffing).
Part of the robottino-rs workspace.
Features
| Flag | Description |
|---|---|
| (default) | Local TCP control, map decoding (LZ4-compressed layout + route) |
cloud |
Cloud API access: login, device discovery, map download via AWS STS. Adds CloudXPlorer for remote device control |
render |
PNG rendering of layout maps and cleaning routes |
Modules
device—Devicetrait andLocalXPlorerstruct: power, clean rooms/zones, forbidden zones, virtual wallscloud_device(cloud) —CloudXPlorer: sameDevicetrait, commands sent via Tuya cloud HTTP APIprotocol— DP 15 binary protocol: sweeper message codec, room/zone clean, forbidden zones, virtual wallstypes— Device state model: DPS event parsing, enums for Mode, Status, SuctionLevel, MopLevelmap— Map file decoder: layout (LZ4 pixel grid + room metadata) and route (cleaning path), optional PNG rendering
Local control
Direct TCP communication with the vacuum on your local network.
Requires DEVICE_IP, DEVICE_ID, and LOCAL_KEY environment variables.
Usage
use ;
use RoomCleanCommand;
let config = from_env?;
let mut vacuum = connect?;
// Query device state
let state = vacuum.status.await?;
println!;
// Clean specific rooms
let cmd = RoomCleanCommand ;
vacuum.clean_rooms.await?;
Examples
| Example | Description |
|---|---|
local_discover |
Find Tuya devices on the local network via UDP broadcast |
local_control |
Status, power on/off, go home, locate, clean rooms |
clean_zone |
Clean a rectangular zone (cmd 0x28) |
forbidden_zone |
Set no-go zones, no-sweep zones, virtual walls |
Cloud control
Remote control via the Tuya OEM Mobile API. Requires --features cloud.
Requires TUYA_EMAIL, TUYA_PASSWORD (and TUYA_DEV_ID for device control).
Usage
use ;
let oem_creds = xplorer_oem_credentials;
let mut robot = login.await?;
let state = robot.status.await?;
println!;
Examples
| Example | Description |
|---|---|
cloud_discover |
List all devices with local keys, names, product IDs |
cloud_control |
Status, power on/off, go home, locate, clean rooms |
download_map |
Download map from AWS S3 and render as PNG (requires render) |
OEM credentials
The cloud feature requires OEM credentials extracted from the official Android APK. These are already embedded in xplorer_oem_credentials() for the X-Plorer app (com.groupeseb.ext.xplorer).
See the workspace README for the full list and extraction methods.
How it works
The vacuum exposes state as numbered Data Points (DPS) over Tuya's local TCP protocol. Complex commands (room clean, zone clean, forbidden zones, virtual walls) are sent as base64-encoded binary frames via DP 15:
0xAA + length (2 bytes BE) + command + data + checksum
Map files (lay.bin, rou.bin) are downloaded from Tuya's AWS S3 storage. The layout contains an LZ4-compressed pixel grid with room metadata; the route contains the cleaning path as signed 16-bit coordinate pairs.
Disclaimer
This project is the result of independent reverse engineering for personal use and interoperability purposes. It is not affiliated with, endorsed by, or connected to Groupe SEB, Tuya, or any of their subsidiaries. Use at your own risk.