feat: add Freo Z Ultra local control - #76
Conversation
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
|
@KakatkarAkshay — reviewed, and this is good work. I've approved the workflow runs (they were sitting on Two things I checked specifically, because they're the ones that would have blocked it: 1. It keeps the local-only guarantee. I scanned the whole diff for 2. It doesn't regress #73. Every broadcast path — startup subscribe, post-map subscribe, Independent confirmation arrived too — @northwestsupra tested this on their CX7/J5 and reports everything populating correctly. That clears the second-device bar you set for yourself in the PR description. One question before mergeOn a non-broadcasting model, polling stops being a fallback and becomes the only source of state. During an actual clean on the CX7, does the Related, and your call: for a model where broadcasts never arrive, is a 60 s Two minor notes
Answer the cleaning-state question and, assuming CI is green, I'll merge this and ship it. Thank you for the scope discipline — retaining |
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
|
Answered below — short version: it shows I couldn't run a fresh clean at a reasonable hour, so this is from Home Assistant's recorder history of a scheduled run earlier today rather than a live observation. It's the same evidence either way — service calls from
So ~31 s to One thing worth recording alongside that, because it's the limitation and not just the happy path: On scan intervalI'd keep 60 s and not hold this PR for it. I use this integration almost entirely for automations — the 3 PM run above is one — rather than for watching cleaning progress in the UI, and 60 s is comfortably inside what automation needs. Worth adding that faster polling wouldn't buy what it looks like it buys. The fields that would actually benefit from a tighter cadence are the three that are The more interesting follow-up is whether those progress metrics are reachable at all on a non-broadcasting robot. Three candidates I'd like to probe, none of which belong in this PR: a full RebaseRebased onto And noted on topic branches — next one won't come off my fork's |
#76 restructured async_step_user (device-ID step, _async_create_entry), which collided with the discovery block and with the test file where both sides appended. Resolution: kept the whole discovery block plus master's one-line async_step_user signature, and kept both sets of tests — master's non-broadcast device-ID cases inside TestNarwalConfigFlow, TestDiscovery after them. 262 passing = master's 250 plus this branch's 12, which is the check that neither side was silently dropped. The two features compose: discovery pre-fills the host, and a CX7 picked on that form still routes to the device-ID step. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YAo9szBPifvDJrsag2oW6Y
Bumps the manifest, adds release notes, and updates the README's release banner and status table. Headline is the consumable alert fix (#80): both alert sensors had reported "no problem" on every robot since the feature shipped, because packed varints parsed to nothing and an empty list means healthy. Also ships Freo Z Ultra support (#76) and the fan-tier rename with the AX26 gate. Verified before tagging: 255 tests, CI green, deployed to a live Home Assistant on real hardware with all 28 entities correct and both alert sensors reporting their item lists. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YAo9szBPifvDJrsag2oW6Y
Summary
hEA7OEshlx)BYWBPqSxeCas an unresolved discovery key rather than treating it as the verified CX7 keyHardware verification
Verified on one global Freo Z Ultra (hardware CX7, cloud identity J5) running firmware
v01.13.11.02. Addressed local WebSocket queries return base status, maps, consumables, and device information. The Home Assistant integration created 28 entities and rendered the static map.The CX7 does not emit broadcasts, so live cleaning position and progress are unavailable; regular status polling and commands continue to work locally. The polling-only runtime was observed beyond the previous reconnect threshold without wake-burst or forced-reconnect warnings.
Variant scope
Issue #5 also reports firmware
1.12.10.02and aBYWBPqSxeCidentity. Those variants are not yet locally verified with this implementation. Additional owner testing is requested before claiming universal CX7 support.Testing
pytest(241 passed)Related to #5