Repository navigation
feat(dyad): decode F25 Ultra data points - #1017
Merged
allenporter merged 1 commit intoNov 8, 2026
Merged
Conversation
Add the A01 data points that the F25 Ultra (roborock.wdv.a194) reports, named after the product schema from the cloud. Value mappings were verified on the device by changing each setting in the Roborock app and watching the pushes. New data points: - 238 detergent dosing (off/low/standard/high) - 239 smart self-clean intensity switch - 240 brush light switch - 241 wheel assist power (gentle/moderate/strong) - 242 self-clean water temperature setting (high/steam) - 243 dock type (raw value) - 244/245 suction and brush speed of the sponge mode - 246 1 while not charging (off the dock, self-clean, drying) - 247 drying progress in percent - 248 lying flat - 249/250 remote control drive direction and speed - 270/271 intensity and water temperature of the current self-clean run - 272 drying time in minutes, follows 225 Also decode AUTO_SELF_CLEAN_SET (212) and AUTO_SELF_CLEAN_SET_MODE (223), which were defined without a converter, so their values were dropped.
allenporter
approved these changes
Nov 8, 2026
Contributor
|
Thank you @infy1995 for the fantastic contribution! |
4 of 21 tasks
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
The Roborock F25 Ultra (
roborock.wdv.a194, firmware 01.03.38) pushes several A01 data points that are not inRoborockDyadDataProtocol, soDyadApidrops them. This PR adds them, plus converters for two data points that were already defined but never decoded.Names come from the product schema returned by the cloud (
product.schemain the Home Assistant diagnostics), for example238 set_cleanser_amount,244 water_mode_suction,246 charge_error_status. Value mappings were verified on the device.Changes
New
RoborockDyadDataProtocolmembers and converters:SET_CLEANSER_AMOUNTDyadCleanserAmount:off0,low1,standard2,high3AUTO_SMART_SELF_CLEAN_SETLIGHT_SETCLEAN_ASSIST_POWER_SETDyadCleanAssistPower:gentle1,moderate2,strong3SELF_CLEAN_WATER_TEMP_LEVEL_SETDyadSelfCleanWaterTemp:high3,steam4DOCK_TYPEWATER_MODE_SUCTIONDyadSuction(suction in sponge mode)WATER_MODE_BRUSH_SPEEDDyadBrushSpeed(brush speed in sponge mode)CHARGE_ERROR_STATUSDRYING_RATEFLAT_STATUSPOWERWHEEL_DIRECTIONDyadPowerwheelDirection:stop0,forward1,backward2,left5,right6,exit9POWERWHEEL_SPEEDSELF_CLEAN_CUR_MODEDyadSelfCleanIntensity:smart0,standard1,deep2SELF_CLEAN_CUR_TEMPDyadSelfCleanWaterTempDRY_CUR_MODEConverters added for existing members:
AUTO_SELF_CLEAN_SET(212): bool, 1 when self-cleaning starts after docking.AUTO_SELF_CLEAN_SET_MODE(223):DyadSelfCleanLevel. It always matchedSELF_CLEAN_LEVEL(203) in testing.All new enums define
unknown = -1.Verification on a real device
I ran a small script against this branch. It connected to the F25 Ultra through
DeviceManager, queried the new data points and printed every decoded push. I then changed one setting at a time in the Roborock app and compared the output with the app. The data points were also replayed from earlier Home Assistant debug logs.Selected pushes:
Notes on the read-only data points:
charge_error_statusin the schema, but on this device it is 1 whenever the vacuum is not charging: off the dock, during self-clean and during drying. It goes back to 0 a few seconds after the status changes tocharging.SILENT_DRY_DURATION). Fast drying (225 = 5) took exactly 5 minutes. Silent drying (225 = 22) progressed about 4 to 5 times slower. Both values look like the drying time in minutes.Not verified
DOCK_TYPE) was always 2. With only one dock I could not see other values, so it is exposed as a raw int.257–268(lifetest*in the schema) were never reported and are not added.Other observations (no code change)
ventilating). The app shows this as "Drying".WARM_LEVEL(204) follows the drying mode: 2 for fast drying, 1 for silent drying.DyadWarmLevelcalls thesedeep/normal. I did not rename them so existing users are not affected.SCHEDULE_TASK(10002) has no converter yet. It carries a JSON list such as[{"id":1794081537371,"on":true,"cron":"0 22 * * 0,1,2,3,4,5,6","dpAction":{"200":1,"204":1}}]. This could be a follow-up.Tests
pytest tests/devices/traits/a01 tests/conformance tests/devices/test_a01_traits.py tests/testing/test_a01_simulator.py tests/protocols/test_a01_protocol.py tests/devices/rpc/test_a01_channel.py tests/test_roborock_message.py tests/data: 789 passed, 53 xfailedruff check/ruff format --check: cleanmypyon the changed modules: clean