Repository navigation
Conversation
Add typed DyadApi commands for F25 Ultra settings that span several data points or need a value from the device: - set_drying_mode writes DP 225, while the mode is read from DP 272 - set_self_clean_intensity writes DPs 203, 223 and 239 together - set_suction and set_sponge_suction send the brush speed the app pairs with each level, because the device does not change it by itself - start_self_clean sends the current DP 203 with the start command, as the app does - stop_self_clean stops a running cycle
infy1995
marked this pull request as draft
November 8, 2026 23:02
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up to #1019, based on the review comment suggesting a typed
set_drying_mode. While adding it I checked the other F25 Ultra (roborock.wdv.a194) settings for the same kind of protocol quirk, and added commands only where plainset_valueis not enough.New
DyadApicommandsset_drying_mode(mode)225set_self_clean_intensity(intensity)203,223,239set_suction(suction)206,208set_sponge_suction(suction)244,245start_self_clean()200,203stop_self_clean()200stop_drying(), named for what the caller is doingThe setters are F25 Ultra only, and their docstrings say so. On older Dyad models DP 225 is the silent drying duration in minutes.
set_drying_modeandset_self_clean_intensityrejectunknown. The suction setters accept onlyl2,l3andl4, the levels seen on this device, and raiseValueErrorfor others.Settings on a single data point stay with
set_value. WritingWATER_LEVEL(207) throughset_valuewas checked on the device and changes nothing else.Verification on a real device
Values were read back from the device after each call, with the vacuum docked. Original settings were restored afterwards.
Data points reported after changes in the app:
Sponge mode uses the same pairs on 244 and 245.
Self-clean started from the app:
Results through the library:
set_drying_mode: fast and silent both switched, and the app followed.set_self_clean_intensity: deep, standard and smart were all read back correctly, the status stayedcharging, and the app followed.l2. This is why the suction setters send both data points. With the new methods all three levels were read back with the expected brush speed, in both modes.start_self_cleanreached status 4 (mop_washing). After 8 sstop_self_cleanreturned to status 3 (charging), and the settings did not change.Not verified
start_self_clean()was run on the device at smart only (DP 203 = 1). The deep case is covered by a unit test and by the app traffic above.Tests
pytestunder WSL2 (Ubuntu, Python 3.14) with dependency versions fromuv.lock: 2237 passed, 53 xfailedpre-commiton the changed files: clean