@Martien_Kop There’s no device in your account.
- Install this app on your Homey.
Add a device.
Login with your Eufy Account. After this I get the message “no new device found”
I’m using the new eufy app. The C28 is only working with the new app. Is that the problem?
@Martien_Kop no that’s not the issue. It just that the API doesn’t report any devices in your account. Are you using your main Eufy account ?
I think so. I’m using the account with which I start my Eufy App from the apple App Store.
@Martien_Kop can you try sharing your Robovac with another account and check if you can login with that one and see the device in Homey?
i made another account. same problem
@Martien_Kop please send a new report
@martijnpoppen
Together with Codex, I fixed scenes for at least my C20 vaccuum cleaners. I can now select the scene names directly in Homey which is much better than the 10 scene guessing work.
I have no idea if this works for the other models aswell but it should work with al MQTT models.
My fork:
A Homey app for Eufy Robovac
Maybe you can use it for the app itself?
In also added local room cleaning support for my Tuya bases L60 model but I doubt you want to add that
@Kyle_Michiels nice! Can you make a PR ? Then I’ll integrate it into the app.
Local support I removed as that’s really limited and new devices don’t support it anymore
Its 2 PRs one for the Eufy SDK:
homey-integration ← misterk99:homey-mqtt-scenes
opened 07:23PM - 12 Apr 26 UTC
## Summary
This PR adds the library-side support needed by the Homey app to con… trol newer Eufy MQTT vacuums using their real saved scene metadata, while preserving the existing slot-based scene behavior for older Homey flows.
It also restores local-key discovery and adds numeric room-clean support for local Tuya-capable mapped vacuums.
## MQTT scene problem and solution
The Homey app previously exposed a static `Scene 1` through `Scene 10` card. That works only if a device interprets those slots the way the old card expects. On newer MQTT devices such as the Omni C20 (`T2280`), saved scenes are exposed by the robot/app as real scene records with large scene IDs and names, for example:
- `1767280292` -> `Deep Clean`
- `1772188900` -> `Deep Clean and Mop`
The old behavior cannot reliably start those saved scenes because it does not know the actual scene IDs. It also used slot-style translation (`slot + 3`) rather than the real MQTT scene ID.
This PR solves that by adding first-class scene metadata support:
- `listScenes()` decodes DPS `180` as `SceneResponse` and returns `{ id, name, mapId }` records.
- `sceneClean(sceneId)` now sends the exact selected scene ID in `START_SCENE_CLEAN`.
- `sceneCleanSlot(slot)` preserves the old slot-based behavior by keeping the `slot + 3` translation for existing `Scene 1..10` flows.
- The shared protobuf encoder now uses `fromObject(...)` before `encodeDelimited(...)`, which is required for enum fields such as `START_SCENE_CLEAN` and `START_SELECT_ROOMS_CLEAN` to encode correctly.
So the new Homey flow can show a live scene autocomplete list for MQTT devices, while old slot-based flows keep working unchanged.
## Local Tuya room cleaning
For local Tuya-capable mapped vacuums, this PR also adds:
- restored local key propagation from discovery
- local connection config for `localKey`, optional `ip`, protocol version, map ID, timeout, and debug flag
- `cleanRooms(roomIds, cleanTimes)` for numeric room cleaning
- protobuf room-clean commands on DPS `152` for novel/mapped local devices
This allows the Homey app to offer a numeric `Clean room` action for local-key devices without requiring room-name discovery.
## Notes
The Homey app PR should depend on this library change so it can call `listScenes()`, `sceneClean(sceneId)`, `sceneCleanSlot(slot)`, and `cleanRooms(roomIds, cleanTimes)`.
And one for the actual homey app:
main ← misterk99:mqtt-scenes-local-room-clean
opened 07:24PM - 12 Apr 26 UTC
## Summary
This PR adds two Homey Flow capabilities for newer and mapped Eufy v… acuums:
- MQTT devices: a new `Start saved scene` action that uses the robot's live saved-scene names instead of static scene slots.
- Local Tuya devices: a new `Clean room` action that accepts a numeric room ID and repeat count.
The existing generic clean/pause/dock behavior is left intact, and the existing `Start Scene` / `Scene 1..10` card is preserved for backwards compatibility.
This PR currently pins `eufy-clean` to the companion fork commit that implements the required library APIs. Companion library PR: https://github.com/martijnpoppen/eufy-clean/pull/10
## How the MQTT scene problem was solved
The existing Homey app already had a scene card, but it is a static slot-based card:
- `Scene 1`
- `Scene 2`
- ...
- `Scene 10`
That is not enough for newer MQTT devices such as the Eufy Omni C20 (`T2280`). These devices expose saved scenes as real scene records in the MQTT/novel API. A saved scene has its own large scene ID and a human-readable name, for example:
- `1767280292` -> `Deep Clean`
- `1772188900` -> `Deep Clean and Mop`
The previous flow could not reliably run these user-created scenes because it did not know the actual scene IDs. It could only send a static slot-style value, and the library implementation translated slot scenes using `slot + 3`.
The solution is split into two layers:
1. Library support in `eufy-clean`
The companion `eufy-clean` PR adds:
- `listScenes()`, which decodes DPS `180` as `SceneResponse` and returns `{ id, name, mapId }`.
- `sceneClean(sceneId)`, which sends `START_SCENE_CLEAN` with the exact scene ID selected by the user.
- `sceneCleanSlot(slot)`, which keeps the old `slot + 3` behavior for the legacy `Scene 1..10` Homey card.
- a protobuf encoding fix that switches message creation to `fromObject(...)` before `encodeDelimited(...)`, so enum commands like `START_SCENE_CLEAN` and `START_SELECT_ROOMS_CLEAN` encode correctly.
2. Homey Flow support in this app
This PR adds a new `Start saved scene` card for MQTT-capable devices. The card uses Homey's autocomplete argument to call `device.getSceneAutocompleteItems(...)`, which fetches the scene list from the device at runtime via `listScenes()`.
When the user selects a scene, the run listener calls `sceneClean(scene.id)`, so the command uses the real scene ID rather than a static slot.
The old `Start Scene` card remains unchanged and still calls `sceneCleanSlot(...)`, so existing flows that use `Scene 1..10` are not broken.
## Local room cleaning
This PR also adds a local-only numeric room-clean action for Tuya/local-key devices.
The pairing/repair logic now keeps the real `localKey` when the library can discover one, and the app stores local settings needed by mapped vacuums:
- map ID, default `1`
- protocol version, default `3.3`
- optional last known LAN IP
- find timeout
The new `Clean room` card is exposed only for local-key devices and calls `cleanRooms([roomId], cleanTimes)` in the library. The card intentionally accepts numeric room IDs so users can use trial and error without requiring Android logcat room-name extraction.
## Capability gating
The new cards are gated by transport:
- MQTT devices get `action_scene_named` / `Start saved scene`.
- Local-key non-MQTT devices get `action_room_clean` / `Clean room`.
- Devices without a real local key do not expose the local room-clean action.
The app also avoids storing public/WAN IPs as local Tuya IPs, so a cloud-reported address does not poison the local connection path.
## Validation
Validated locally with:
```bash
homey app validate -p .
```
Manual smoke testing done during development:
- MQTT C20 devices exposed live saved scenes such as `Deep Clean` and `Deep Clean and Mop`.
- L60-style local Tuya device discovery returned a real local key.
- Local room-clean commands were tested with numeric room IDs in the companion CLI/protocol work before porting the payload into `eufy-clean`.
## Notes for review
This PR intentionally keeps the old `Start Scene` card and adds a separate `Start saved scene` card because Homey static dropdown cards cannot be populated dynamically from the device. Runtime scene names require an autocomplete argument.
@Kyle_Michiels thanks will check !
Hi Martijn,
Got a question. Does the homey eufy clean app work when I add my current working E25 and E28 robots to the new Eufy app instead of the Eufy clean app which seems to become EOL?
@Frank_Verschoor the Eufy apps are the same. Just a different UI.
But at the current moment the E25 and E28 are not compatible with Homey
Eufy once again changed their protocols and API
Maybe so but It seems that both Devices are still linked and visible in the homey eufy clean app and I still can see their active state…
@Frank_Verschoor in that case good that it works
MRK
April 27, 2026, 9:20am
1020
Hi,
I have the E18 lawn mower, which I believe isn’t supported yet. Is there any way I can help get it supported?
@MRK no currently I don’t expect it it can be supported
It’s a new api which can’t be decrypted at the moment. Same goes for some new Robovacs
So don’t really see a solution yet. Unless you know how to decrypt it
MRK
April 28, 2026, 1:38pm
1022
Thats a pitty then. I don’t have the knowledge unfortunately to decrypt it.
Best I can do is to contact Eufy support.
@MRK eufy doesn’t give any support on 3rd party integrations