Iterating on and due to the new vendor
Valetudo 2025.10.0
After the last release notes, which have been more of a devlog/manifesto, this one returns to a slightly more technical focus.
That said, things aren't over or resolved, so if you haven't read the 2025.08.0 release notes yet, I highly recommend you do: Valetudo 2025.08.0
So many new capabilities
As I wrote in the last release notes, with there now being two vendor implementations doing the same thing, a lot of quirks graduated and became capabilities. I am very glad for that, given that on recent supported Dreame robots, the quirks section contained more options than the regular robot settings, which was anything but good design.
Starting off with the first two, I'd like to again thank everyone who took part in the public brainstorming session for the icons.
Even after seeing them for a while now, I still think that they've turned out great, and, as suggested, they indeed look merch-able.
Though.. very obscure merch (which is usually the best kind of merch).
MopExtensionControlCapability

This one actually doesn't belong here, as it was introduced in the last release.
It however does now have this new and improved custom icon, hence, here it is again.
MopTwistControlCapability

If your robot can't extend its mop to reach closer to the walls, it might be able to twist to achieve the same.
Or, if it can extend it, it might still be able to twist to reach below some furniture overhangs.
The icon and description will reflect which of the two it is.
MopExtensionFurnitureLegHandlingControlCapability

Being named to prove just how enterprise-y Valetudo has become, this one allows you to enable logic in the firmware that extends the mop to clean closer to legs of tables and chairs.
MopDockMopWashTemperatureControlCapability

Pretty self-explanatory.
The available options are somewhat arbitrarily named, however so are the labels within the vendor apps, as even though they say e.g., 100°C, they do not actually reach 100°C.
/u/Maximus-CZ
This happens when the cost of lying is lower than potential profit
MopDockMopAutoDryingControlCapability

Also self-explanatory, with the icon TBD and currently being just a placeholder.
If you have ideas how that could look like, please let me know!
Also, I was thinking of having a MopDockMopCleaningFrequencyControlCapability
, MopDockMopCleaningIntensityControlCapability
and MopDockMopDryingControlCapability
in the future.
It might make sense for those icons to become a whole consistent set.
I do have fun actually building them though, so unless you're like an actual professional graphics artist able to mimic the existing style, rough ideas would be best.
One capability less
Revisiting the existing capabilities, I noticed that with the introduction of the AutoEmptyDockAutoEmptyIntervalControlCapability
the AutoEmptyDockAutoEmptyControlCapability
became redundant, as "Off" is also an interval. A very long one.
Thus, these two have been merged, which is a breaking change.
I don't think that it will break anything for anyone, but spacebar heating is a thing after all.

Device and state classes for Home Assistant via MQTT
Someone asked why they couldn't change the precision of various Valetudo-provided Entities in Home Assistant (e.g., area in m² instead of cm²).
A few hours later, I asked myself why I hadn't done that a long time ago. Oh well.
Anyway, Entities for e.g., Area or Time provided by Valetudo now have the correct device_class
and state_class
set, meaning that Home Assistant now has the metadata to provide proper enriched handling.
They also now use the correct units as per the HA data model. No clue how I missed that up until now.

This is so much better.
Note: HA will likely tell you that some units changed due to this change. You can safely select "Update without converting".
Midea
The implementation for Midea is moving along.
Beside controls, Valetudo now even shows obstacle images on Midea! (Not all of them might be real)

There are still a bunch of things to do, but once that is done, I'd like to revisit rooting and hopefully come up with some nice guide as usual.
I've also bought another robot. Let's see how that will work out.
FWIW, it was cheap being an Amazon WHD. And also weird, because the original recipient clearly was not a real person + the address being not a real house + the thing being completely unused.
... not sure what was going on there, but cheap robot with Amazon invoice. I won't complain.
What else is going on?
You might have heard that Google is further closing down the formerly open platform known as Android. If you haven't heard, well now you do.
Here's F-Droid's statement for your convenience: https://f-droid.org/en/2025/09/29/google-developer-registration-decree.html
This is.. not ideal.. for many reasons.
It wouldn't make sense to go into all of them within this context, however, Cory Doctorow's prophecy of the (now no longer just coming) War on general computation is something to mention here.
Unfortunately, studies show that opposing authoritarian governments may have adverse effects on shareholder value, meaning that relying on big tech to not be evil might not be a winning strategy.
Thus, motivated by the distressed croaks of my almost boiling amphibious self, I started asking around what options we have.
Beside blissful ignorance and moving into a shed in the woods, those seem to be:
- Android, but with a good vendor (e.g. Fairphone)
- somewhat Android, but also different (e.g. GrapheneOS)
- something else, but with an Android compatibility layer for transitioning (e.g. SailfishOS by Jolla)
Apparently, there are actually Valetudo users daily-driving SailfishOS phones.
Also, apparently, Jolla exists, is European, and has been actually shipping Linux phones for many years now.
Building on some of their tech (thanks, FOSS), there is also Debian-based smartphone Linux distribution Droidian, or, the "let's turn Droidian from a hack for existing products into an actual product on its own" FuriLabs FLX1s.
FuriLabs in this case is a startup founded by one of the maintainers of the aforementioned Droidian.
They are pretty new, small and appear to be neat, hence the mention here, as what I find interesting and neat, you might also find interesting and neat. Also, something something rooting for the underdog, though, keep in mind that I have not ever actually seen their product.
This is a pointer; not a recommendation.
It points here 👉 furilabs.com
To end on a high note, if you've been watching the Dreame subreddit, you might've seen something peculiar recently.
Some users reported that the app started showing them these new and exciting ads (click to enlarge):
Yes, those really are smut dark romance stories, so that.. idk.. you can "practice self-care and mindfulness" while the robot does its cleaning.
Unfortunately, Valetudo users missed out on that enriching and context-aware experience.
Sorry.
The usual
If you like this release or Valetudo in general, you might want to consider donating:
https://github.com/sponsors/Hypfer
https://builder.dontvacuum.me/donations.txt
Autogenerated changelog
Breaking Changes
- Merge AutoEmptyDockAutoEmptyControlCapability into AutoEmptyDockAutoEmptyIntervalControlCapability
7d1aea3
Features
- vendor.dreame: MopDockMopAutoDryingControlCapability
6fcfc6a
- vendor.roborock: MopDockMopAutoDryingControlCapability
847093a
- vendor.midea: MopDockMopAutoDryingControlCapability
ed78538
- core: MopDockMopAutoDryingControlCapability
f150a89
- mqtt: Add missing deviceClass + stateClass attributes, update enums and fix units for HA
921dd13
- vendor.midea: Improve state reporting
0afc47e
- vendor.midea: MopExtensionFurnitureLegHandlingControlCapability
7c0fc3a
- vendor.dreame: MopExtensionFurnitureLegHandlingControlCapability
92cd7f6
- core: MopExtensionFurnitureLegHandlingControlCapability
e6615d2
- ui: Improved MopExtension and MopTwist icons
fd83cd3
- webserver: You know the rules and so do I
0dcca1d
- vendor.midea: MopTwistControlCapability
72444e6
- vendor.dreame: MopTwistControlCapability
ea236ab
- core: MopTwistControlCapability
92ee9a5
- vendor.midea: Pet obstacle avoidance and stain cleaning
0ea2a50
- vendor.midea: Everything carpet
f94f3c1
- vendor.midea: MopDockMopWashTemperatureControlCapability
52c8c4b
- vendor.dreame: MopDockMopWashTemperatureControlCapability
53ff4fa
- core: MopDockMopWashTemperatureControlCapability
de62cbf
- vendor.midea: Auto empty controls
ae01b69
- vendor.midea: Obstacles galore
17ebfae
- ui: Improve MopExtensionControl Icon
757e682
Fixes
- vendor.dreame: Give the firmware some time to think
ec61206
- vendor.midea: Do not fail fast
5715fb0
- ui: MopDockMopWashTemperatureControl should be a dockListItems
493c570
- vendor.midea: Add missing return statement
52b4625
- vendor.dreame: Fix connection timeout on startup on very recent firmwares
15c1f80
- miio: Fix super rare bug crashing the process
0c6272f
- vendor.midea: Fail any requests instantly on initial startup
a963fa1
- vendor.dreame: Add another new modelId
df46e2e
- vendor.dreame: Add missing model ID
87d0760
- vendor.roborock: No-Op handle two more events
0261f57
- vendor.dreame: Track emptying state of auto empty dock
6f0fc2a
Refactoring
- vendor.dreame: Group all the ephemeral state into an object
2fdef9f
- vendor.midea: Move specific capabilities into actual implementation class
c0d1640
- MockRobot: Smurf for consistency
5d40584
- vendor.midea: Rename implementation class for J15PU
785e6b8