Skip to content

feat: Flow 2 diagnostics, discovery, and live-state improvements#35

Open
StratoGh0st99 wants to merge 1 commit into
sjmotew:masterfrom
StratoGh0st99:master
Open

feat: Flow 2 diagnostics, discovery, and live-state improvements#35
StratoGh0st99 wants to merge 1 commit into
sjmotew:masterfrom
StratoGh0st99:master

Conversation

@StratoGh0st99

Copy link
Copy Markdown

Summary

This PR expands Flow 2 support and improves the integration’s local discovery, diagnostics, and state decoding.

Highlights

  • Add new diagnostic entities for:
    • active errors
    • station tank errors
    • clean water tank errors
    • remote control mode
    • user-action-required state
  • Add a mop humidity select entity
  • Improve config flow discovery via mDNS and DHCP
  • Expand model decoding and map rendering for richer live state
  • Add capture/probing tools for reverse-engineering and validation
  • Improve fan speed handling and add coverage for one-indexed fan levels
  • Confirm room-by-room cleaning now works reliably end-to-end

Notes

  • Several changes are based on live testing against Flow 2 behavior and Narwal broadcasts.
  • This PR is intended to consolidate the fork’s Flow 2 work into upstream.

@StratoGh0st99

StratoGh0st99 commented May 14, 2026

Copy link
Copy Markdown
Author

@Anaxagoras-bc I just created a new pr and rebuild my fork.
Room cleaning works and the sensor for the current room also.

@saeft2003

saeft2003 commented May 15, 2026

Copy link
Copy Markdown

@StratoGh0st99
How do I start a room cleaning in HA? I have installed the latest version and can also see the current room.

Bildschirmfoto 2026-05-15 um 15 24 52

@vpha91

vpha91 commented May 15, 2026

Copy link
Copy Markdown

@StratoGh0st99 Your PR is working quite well, the cleaning activity is more accurate. On a side note, have you figured out what the command for End "dust bag drying/disinfection" is from the app to the robot. Cannot figure out how to stop that process.

@zeanogit

Copy link
Copy Markdown

@StratoGh0st99 How do I start a room cleaning in HA? I have installed the latest version and can also see the current room.

Bildschirmfoto 2026-05-15 um 15 24 52

I believe you need to be on Home Assistant 2026.3 at least for the following to work:

Click on "Vacuum" (in Steuerelemente) then at the pop up that opens you should see a button called "Cleaning by area" probably translated to German for you). The first time you click it you should be given the option to assign rooms from the vacuum to the area rooms of your home assistant.
Then going forward you can click the button to clean a specific room. You can then also set up automations etc. to run area specific cleanings if you want.

I tried it once and it initiated fine, I had a weird audio glitch like the vacuum tried to communicate something to me but it cut off and repeated over and over. Lasted for a few seconds then the vacuum cleaned the mop and continued.

image

@saeft2003

Copy link
Copy Markdown

@zeanogit

Thank you very much for your help. I see that in the pop-up under controls. It looks completely different for you than it does for me. Does version 1.1.13 appear in HA? I did the update but it still shows 1.1.11.

IMG_9244 IMG_9245

@zeanogit

Copy link
Copy Markdown

@saeft2003 My screenshot is from webview which is probably why it looks different but yeah I also see the old version number, even though I did remember needing to distinctly upgrade to the most recent version once it appeared as an update in HA.

image

@saeft2003

Copy link
Copy Markdown

@zeanogit

I had to update Home Assistant. However, room cleaning isn't working. Did I do something wrong when assigning the rooms?

IMG_9249 IMG_9248

@zeanogit

Copy link
Copy Markdown

@saeft2003 silly question but did you try restarting the integration and /or Home Assistant after you assigned the zones?
It seems to send the command to the Vacuum but doesn't tell it what room to clean.

If that doesn't work, you probably need more directed from @StratoGh0st99. Maybe best to open a new issue on his fork repo for it?

@sjmotew

sjmotew commented May 17, 2026

Copy link
Copy Markdown
Owner

Thanks for consolidating this work — it's clearly substantial (+3,806 / −313).

To get it merged without a slow back-and-forth, can you split it into separate PRs by feature area? Suggested cuts:

  1. mDNS + DHCP discovery (config flow) — orthogonal to everything else, low risk, can ship first
  2. Diagnostic entities — active errors, station/clean-water tank errors, remote control mode, user-action-required (relates to Message Watertank #26 water tank request)
  3. Mop humidity select + fan speed (1-indexed) handling — relates to Allow configurable clean parameters in _build_room_clean_payload / start_rooms() #23 (configurable clean params)
  4. Model decoding + map render improvements — Flow 2 broadcast schema (relates to Bug: Flow 2 room sub-type labels differ from Flow 1 (partial mapping confirmed) #22, start_rooms() crashes Flow 2 — command payload likely incompatible #25)
  5. Capture/probe tools under tools/

That lets us ship the safe pieces immediately while we review the larger ones. Diagnostic entities alone would close most of the open Flow 2 feature requests.

If splitting is too much effort I'll review as a monolith, but turnaround will be slower. Also flagging: PR #24 (current_room sensor) and #20 (now merged) touch overlapping areas — wherever there's overlap, the version in master wins to keep history sane.

@saeft2003

Copy link
Copy Markdown

@zeanogit

After restarting Home Assistant, regardless of which room I select in Home Assistant, a cleaning cycle for three rooms is always started. These three rooms are my first shortcut in the Narwal app. Unfortunately, I can't open an issue in the fork; it's not available there.

@StratoGh0st99
Why is this happening?

IMG_9268 IMG_9269

sjmotew added a commit that referenced this pull request May 17, 2026
…37)

@saeft2003 reported on PR #35 that HA room cleans were ignoring the
selection and always running the first Narwal-app shortcut instead.
Same firmware-schema root cause as #36 — the legacy flat-room schema
in _build_room_clean_payload is rejected (or ack-and-ignored) by
firmware v01.07.22+, so the robot falls back to its onboard default
plan.

start_rooms() now:
1. Tries the legacy flat-room payload (preserves behavior on older
   firmware)
2. On NOT_APPLICABLE, retries with _build_clean_payload_v2 populated
   from the caller-selected room IDs (not all map rooms)

Also adds force_v2 kwarg for firmwares that ack the legacy payload
with SUCCESS but still ignore the room list — for those, the
NOT_APPLICABLE detector can't fire, so callers (or a future config
option) can opt straight into v2.

4 new tests cover SUCCESS (no retry), NOT_APPLICABLE (retry with same
room IDs), CONFLICT (no retry), and force_v2.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@sjmotew

sjmotew commented May 17, 2026

Copy link
Copy Markdown
Owner

@saeft2003 — I tracked your room-selection report into a separate bug at #37 and shipped a fix on master in 516ed1c. Same firmware-schema root cause as #36 (the whole-house start() regression on Flow v01.07.22+).

start_rooms() now falls back to the v2 room schema when the legacy payload returns NOT_APPLICABLE. Please re-test after pulling master (or wait for the next release) and report back on the issue — full repro steps and what log lines to look for are in #37.

This is orthogonal to the rest of PR #35; my comment about splitting the PR still stands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants