Environment
- Integration version: v2.3.0-beta.1
- Home Assistant version: 2025.x (HAOS)
- Vacuum model: Eufy RoboVac S1 Pro (T2080A)
- Firmware: 7.0.168
- Station firmware: v2.5.7.2
Problem
The integration can read vacuum status correctly (state, battery, fan speed) but cannot send any commands. Start, stop, return to base, set fan speed, and locate all return HTTP 200 from HA but have no effect on the vacuum.
Root Cause Found
Using tinytuya (v1.18.0) to connect directly, I discovered the S1 Pro uses non-standard DPS codes for commands. The integration appears to be sending writes to the standard Tuya vacuum DPS codes (1-5) which the S1 Pro ignores.
Protocol
The device broadcasts as protocol 3.3 (not 3.4 as listed in the supported models docs for T2080):
{
"ip": "192.168.4.31",
"gwId": "eb4a6faf9217851dc9iop6",
"productKey": "k8ttkrhlqtnfd8e9",
"version": "3.3"
}
DPS Map (discovered and confirmed)
Read-only status DPS:
| DPS |
Example Value |
Purpose |
| 6 |
0 |
work_status (0=standby, 1=cleaning, 2=paused, 5=returning, 34=docked/charging) |
| 7 |
0 |
direction_control |
| 8 |
100 |
battery % |
| 9 |
"gentle" |
clean_preference (auto-linked to DPS 158) |
| 10 |
"middle" |
water_level |
| 40 |
"installed" |
mop_status |
| 163 |
100 |
unknown |
| 178 |
(base64) |
map/room data |
Writable command DPS (confirmed working):
| DPS |
Values |
Purpose |
Confirmed |
| 158 |
"Quiet" / "Standard" / "Turbo" / "Max" |
Suction level |
✅ Instant response |
| 160 |
True / False |
Start/stop cleaning |
✅ Starts cleaning with ~8 min delay (processes room map first, returns map data in DPS 178) |
| 156 |
True / False |
Power on/off |
Reads confirmed |
| 159 |
True / False |
Find robot toggle |
Untested audibly (DND may suppress) |
Key findings
-
DPS 158 writes work instantly — setting suction from "Quiet" to "Standard" takes effect in 2 seconds and DPS 9 auto-updates from "gentle" to "normal"
-
DPS 160 = True starts a full cleaning cycle — the vacuum processes the room map (returns base64 data in DPS 178), then begins cleaning after several minutes. Confirmed by a real 34-minute cleaning session triggered solely by this DPS write.
-
Standard DPS codes (1-5) have no effect — set_value(1, True), set_value(2, ...), set_value(5, ...) all return without error but don't trigger any action.
-
DPS 6 is read-only — attempting set_value(6, 1) has no effect.
Suggestion
The integration's command mapping for the T2080A model needs to be updated:
- Start cleaning →
set_value(160, True) (not DPS 1 or 2)
- Set suction →
set_value(158, level) (confirmed: Quiet/Standard/Turbo/Max)
- Find robot → toggle
set_value(159, False) then set_value(159, True)
- Protocol → should be 3.3 for T2080A, not 3.4
Happy to provide packet captures, additional DPS testing, or any other info.
Environment
Problem
The integration can read vacuum status correctly (state, battery, fan speed) but cannot send any commands. Start, stop, return to base, set fan speed, and locate all return HTTP 200 from HA but have no effect on the vacuum.
Root Cause Found
Using
tinytuya(v1.18.0) to connect directly, I discovered the S1 Pro uses non-standard DPS codes for commands. The integration appears to be sending writes to the standard Tuya vacuum DPS codes (1-5) which the S1 Pro ignores.Protocol
The device broadcasts as protocol 3.3 (not 3.4 as listed in the supported models docs for T2080):
{ "ip": "192.168.4.31", "gwId": "eb4a6faf9217851dc9iop6", "productKey": "k8ttkrhlqtnfd8e9", "version": "3.3" }DPS Map (discovered and confirmed)
Read-only status DPS:
Writable command DPS (confirmed working):
Key findings
DPS 158 writes work instantly — setting suction from "Quiet" to "Standard" takes effect in 2 seconds and DPS 9 auto-updates from "gentle" to "normal"
DPS 160 = True starts a full cleaning cycle — the vacuum processes the room map (returns base64 data in DPS 178), then begins cleaning after several minutes. Confirmed by a real 34-minute cleaning session triggered solely by this DPS write.
Standard DPS codes (1-5) have no effect —
set_value(1, True),set_value(2, ...),set_value(5, ...)all return without error but don't trigger any action.DPS 6 is read-only — attempting
set_value(6, 1)has no effect.Suggestion
The integration's command mapping for the T2080A model needs to be updated:
set_value(160, True)(not DPS 1 or 2)set_value(158, level)(confirmed: Quiet/Standard/Turbo/Max)set_value(159, False)thenset_value(159, True)Happy to provide packet captures, additional DPS testing, or any other info.