Skip to content

S1 Pro (T2080A): Integration sends commands to wrong DPS codes — reads work, writes fail #443

Description

@bstanbury

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

  1. 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"

  2. 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.

  3. Standard DPS codes (1-5) have no effectset_value(1, True), set_value(2, ...), set_value(5, ...) all return without error but don't trigger any action.

  4. 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 cleaningset_value(160, True) (not DPS 1 or 2)
  • Set suctionset_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.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions