Releases: Hypfer/Valetudo
Valetudo 2024.11.0
3.1 new Robots and some other updates
New Robots
After the news coverage of Dennis' and Braelynns research into Ecovacs blew up (you can find the original talk here), we were approached by a generous individual worried about such hacks and wanting to see Valetudo on more robots.
With our new-found budget, we thus swiftly went shopping to work.
Given that Christmas, Black Friday and all that is basically right around the corner, we've been prioritizing getting this done asap.
You're welcome. (Don't ever expect that)
Anyway, the results are (ordered by price)
Dreame X40 Master
A cool problem-solving super small dock design, but my god does that problem-solving cost you.
Buying this thing for 1.6k€ did hurt even with money specifically donated to buy this robot.
Space-requirements wise it is very neat nonetheless. You just need to be prepared for the extra plumbing work.
Dreame L40 Ultra
The L40 Ultra is - at least as far as I can tell - just the same robot as the X40 Ultra.
The only difference I can see is that it comes with the higher lidar tower bumper housing three microphones.
That however is just an EU Thing, I think? At least the CN X40 also came with that higher Bumper and so does the EU X40 Master.
Anyway, it's cheaper. It seems to be the same thing. No-Brainer.
...unless of course you're using our affiliate links, in which case you should definitely prefer the more expensive X40.
Mova S20 Ultra
So Dreame is reviving the MOVA brand. VAOW.
This robot is just a plain interesting design, reusing the dock we've gotten used to but with a twist for the different mop design.
Come to think of it, It's also effectively the Roborock S8 Pro Ultra (still priced at ~1k€ at the time of writing) feature-wise:
Dual Brush, Vibrating Mop Pad, Mop Dock with Drying, AI Obstacle Avoidance.
All that and even more for 500€. Neat!
Side-note:
I'm pretty sure the mopping is worse than the spinning mops on the now equally (or cheaper) priced (but EOL) L10s Ultra.
It also can't use the Tri-Cut anti-hair-tangle brush which the L10s Ultra can.
Otoh it does have improved Obstacle Avoidance and should be better at sucking up larger chunks.
Plus newer software, a newer Dock design. Etc.
Feel free to comment down below what works better for your use-case and why.
IKOHS Netbot LS22
I bet you were wondering what that 0.1 Robot was about.
As you can see, it is yet another CRL200S. What else is there to say about these.
Given its rarity, I somewhat doubt that someone will ever use one of these with Valetudo, but listing it here makes number go up :-)
Timer Improvements
Valetudo now knows when it was built, and, assuming that the build host has a synced time, it can now judge if the system time on the robot is plausible by being newer than the build.
With this, time sync requirements for the inbuilt Valetudo timers could be relaxed.
They will now also execute if the time is plausible; not requiring a successful time sync within the last 8 hours.
This should fix hypothetical issues with timers not executing in setups with intermittent internet connectivity issues.
We never heard of any of those, but they might've happened.
Water Hookup Kits and Valetudo
With the X40 Master requiring it, support for testing the water hookup was added to Valetudo as a quirk:
According to user reports, this should also work for the water hookup kit for the other Dreames, however I haven't tested that myself yet.
Fingers crossed 🤞
Firmware Updates
Over the last weeks, were also busy testing and then updating the Dustbuilder with new firmware versions where available.
Feel free to try them and see if you can spot any improvements.
As the Valetudo updater only updates Valetudo, for instructions on updating the firmware, check out the docs.
Other Updates
I've created an icon pack you can install via HACS, that will add the Valetudo icons to your Home Assistant instance.
It's as simple as that. You can find it here:
https://github.com/Hypfer/hass-valetudo-icons
Have fun building Dashboards with the new default sections layout!
Bonus
While playing around with the new-style camera assembly on the X40 and L40 I've noticed that they now have an activity LED that lights up when the camera would be streaming video somewhere else.
This is an improvement over the older designs that had zero visual feedback on the camera state on the unit.. or so you'd think.
One peculiar thing about this LED is that it does not light up when the robot just uses the camera to navigate.
I think you can see where this is going.
Vid.20241106.205641964-1.mp4
Yep, it's pure software. Just some LED controllable via some GPIO.
This however is not unusual. In fact, probably most such activity LEDs on devices are pure software.
It also makes sense, because that LED being on all the time while the robot drives around might be unsettling to some users, as it provides a reminder that there is in fact a camera pointed at them.
Still, an indicator that might lie is arguably worse than no indicator at all.
I'm not pointing fingers at Dreame here though; they’re not doing anything notably different from the rest of the industry.
I'm just mentioning it here, because I'd like to encourage you to normalize putting stickers or other physical shutters on all unused cameras; illustrated by this practical real-world example.
Or, even better yet: Stop putting goddamn cameras (and microphones!! aaaaaah!!!) into absolutely every thing or corner you can find.
Bonus Ep. 2
In even more even other news, there has been a minor event on the /r/roborock subreddit.
One user this time actually bothered to read the ToS they're supposed to accept to continue using their products and then discovered something they did not like very much.
Specifically, the possibility for roborock to sell features as a subscription service or paid upgrade.
Roborock eventually released a statement addressing the unhappy users.
As it should turn out, the ToS update actually wasn't about the sentences in question. In fact, they've been there for a while already. It's just that no one ever read the ToS and with that they weren't discovered previously.
The response statement also confirms the read of those sentences, that they'd like to have the option to sell feature upgrades or subscriptions in the future.
They also say that they're not going to sell features that are free now, but that was an unreasonable fear anyway so no surprises there.
Anyway, what I really like about this is that it finally brought closure at least to me. Now, I finally understand why they've been cracking down as hard as they did on rooting. It wasn't just about region locks and regional pricing (which we explicitly not allow to bypass). It's about keeping the subscription and feature DLC revenue channel open.
And, frankly, it's right of them to do so from a business-standpoint. If you look at the vacuum robot market, you see that it is quite saturated. There's still money to be made, but it's not the booming moneymaker it once was.
Vacuum robots are a commodity now. They all can do very similar things. We now have most features available that one could think of for that kind of form factor vacuum robots have right now.
With roborock being publicly traded (and funded by investors in general), they do have to keep that revenue and growth coming. Thus, they at some point also have to pivot towards possible revenue sources that aren't explored yet.
Subscription services are just that. It's a way of getting more (and recurring!) revenue out of the same idea.
I don't blame them, honestly. It is the logical conclusion resulting out of the rules and mechanisms of the systems we have built.
That said, I definitely don't think that the current rules, mechanisms and systems are good. You wouldn't be here if I did.
I just don't believe that there is much long-term point in attacking the players when it's actually the game that is the problem.
It is a bit mind-breaking, I know, but even such large billion-dollar enterprises can be considered "players" here. That saying does not stop at individuals. You can of course be harsher with companies than with persons (though please not with (most of) their employees), but at the end of the day, it's a systemic issue that requires a systemic solution.
When I sa...
Valetudo 2024.10.0
Obstacle Images - a surprisingly fun feature
Obstacle Images
On robots that support the feature, assuming the right zoom level, you will now be able to click on the obstacle in the map view and see what the robot saw. I didn't expect it to be, but it is very neat to view the world through the perspective of the robot.
I was quite hesitant to implement such a feature for a long time, because there is a lot that one can do wrong when reading arbitrary large files based on user input from the filesystem and delivering them via HTTP.
But, given that long time I had to think about it, I believe that the implementation is now solid.
I hope that you will have as much fun with this feature as I had.
And, if your robot sees something neat and shareable, feel free to post the obstacle image in the comments below.
Side-note:
This should go without saying but please don't use this feature for abuse.
Talk with everyone living in (or even just visiting) your household about this before you enable it.
Even if you live alone, you can be certain that the robot will take a picture at the most unfortunate and inopportune moment imaginable.
Keep that in mind and maybe just keep the feature turned off if unsure.
The obstacle avoidance works regardless of it, so you're not losing out on any functionality if you do decide to not enable it.
Improvements to the Virtual Restrictions Editor
A simple change with great impact to the UX:
The virtual restrictions editor now also renders the path
This makes it a lot easier to precisely place virtual restrictions based on the real struggles the robot faced.
UI UX Fixes
Cutting lines for segments now have a shadow to not become invisible in front of the white background of the light theme.
Furthermore, zooming the map in by 1 step and zooming back out by 1 step will now make you end up with the same zoom level you started with - as one would expect it to.
Thanks to @vivia for both of these!
Improvements to the System Information View
The System Information page now displays the actual CPU load:
Previously, it used the system load, which got very confusing on robots with kernels where that feature is broken for some reason.
Now, these bars make sense again instead of just being stuck at 100% all the time.
Misc
-
Users of the Dreame L10s Pro Ultra Heat and X40 can now trigger the Mop-Dock cleaning procedure using a new quirk.
-
Non-feature-wise, this release comes with a bump to basically all dependencies, meaning that we're good on that front as well again.
The usual
If you want to see Valetudo on more robots and/or like this release, you might want to consider donating:
https://github.com/sponsors/Hypfer
https://builder.dontvacuum.me/donations.txt
Autogenerated changelog
Features
- vendor.dreame: D10s Pro/Plus also support Obstacle Images
63279c4
- vendor.dreame: Add quirk for triggering the mop dock cleaning procedure
76280bd
- vendor.dreame: ObstacleImagesCapability
67ee71c
- ui: ObstacleImagesCapability
30b5fc8
- core: ObstacleImagesCapability
f9fa9d0
- Display the actual CPU usage instead of the system load
d0f754b
- ui: Draw half-transparent path in virtual restrictions edit map to make placing restrictions correctly easier
ca077b6
Fixes
- ui: Fix zoom level after zooming in and back out again not ending up where it started
2e5a9c2
- vendor.dreame: Fix MopDockCleanManualTriggerCapability for everything that is not a pure mop
3513cbc
- webserver: Valetudo router rate limits should be global
7a6eb1e
- vendor.dreame: Fix Mop Dock Water Heater quirk
20917a7
- A config reset should not reset the robot config
28d674f
- ui: Fix cutting line being invisible when using the light theme
a2a1d40
Refactoring
- vendor.dreame: Add more AI classifier IDs and pull the constant into DreameUtils
0928cf0
- webserver: Use rate limiters instead of semaphore in ObstacleImagesCapabilityRouter
90e5ab9
Chores
Valetudo 2024.06.2
Exciting new robots, lots of UI improvements, new features and some words on not burning out
Valetudo 2024.06.2
This version bumps the MQTT.js library once again to hopefully fix some more keepalive-related issues that apparently were caused by the prior fixes. They were causing issues in different setups than previously though, which I'd call a win 👍
Nothing else has changed, so if you've already read the 2024.06.1 changelog, nothing new to see here.
If not, feel free to continue reading.
Valetudo 2024.06.1
Since I did not personally buy an X40 for this release, I kinda expected that there would be some minor additional issues that would show up as soon as someone attempts to root one. And indeed, there was one.
Specifically, we found out that the EU variant(?) is assigned a different Model ID than the US one.
Fortunately though, everything else seems to be the same as on the US model (which was the one we've tested prior to the release).
After then employing highly advanced OSINT research skills (thanks, UHD YouTube reviews), I've discovered that there are two additional Model ID identities the X40 might have.
This release is just 2024.06.0 plus three strings, enabling Valetudo to start on these robots.
Thus, if you have already read the 2024.06.0 release notes, you can skip the rest of this.
If not, feel free to continue reading.
New Robots
Since there has been quite some innovation going on in the robot space since the last time we've released support for a new robot, we figured that it would be time to take a closer look at new robots once more.
Unfortunately, with innovation also came a steep increase in price. But, after irresponsibly spending multiple thousand euros on new robots to void their warranty 30s after they've left the box, I have good news:
With the Dreame X40 and L10s Pro Ultra heat now being supported, we have Valetudo support for what according to reviewers and also our own experience is the best vacuum robot money can buy you right now.
This sounds amazing and also is amazing but do keep in mind that the previously recommended L10s Ultra already is a very good vacuum robot. There aren't many things to improve about it, and, frankly, there are no improvements that would warrant spending more than twice the money.
Still, there have been notable improvements:
- Mops that extend to the side beyond the robot for better edge cleaning
- X40 Only: A side brush that extends beyond the robot for better corner and edge cleaning
- X40 Only: An integrated LED flashlight for much improved AI recognition in all lighting conditions
- X40 Only: Mops that can be automatically detached and left in the dock
- An improved dock design featuring bigger water tanks and easier cleaning
- The ability to auto-empty multiple times during a cleanup
- General cleaning/navigation logic updates
- Updated AI models
As always, don't forget that Valetudo is Valetudo.
It does not strive to implement each and every feature the vendor app might offer. In fact, it strives to explicitly not do that.
UI improvements
Apart from support for these robots, a lot of things have changed about Valetudo itself too.
Custom Icons
Valetudo now has a custom icon set for all presets (Fan, Water, Operating mode).
Thanks a lot to everyone who took part in the iterative feedback process that led to these! :)
I think they really bring the UI together nicely. And, as an added bonus, they also work better on narrow screens.
Controls polish
Speaking of bringing the UI together nicely, the controls have all received some love.
- They're now more unified, using the same padding and spacing and elements.
- They now better show feedback to the user (check the dock controls or presets with a bad wifi connection)
- And, the state flag display now doesn't clip anymore on very narrow screens.
HiDPI support
Screens bring us to the next topic:
Did you ever notice that on mobile, the map view looks a bit bad, blurry and low res?
You might've thought that it's for performance reasons, but it's actually due to this new and amazing innovation called HiDPI screens that has just been released… almost 15 years ago.
Starting with this release, the Valetudo Map renderer now also takes advantage of this revolutionary display technology.
Do note though that unfortunately, HiDPI support had to be disabled for Safari due to Safari being Safari.
Mobile map font rendering
Apart from HiDPI support, another thing that has been fixed in the map renderer is font rendering on firefox mobile.
Previously, fill and stroke were called in the wrong order, leading to those overlaps.
You can also see that this screenshot was taken before HiDPI support was implemented, because the text is still somewhat blocky.
Animations
The UI should now feel more snappy as all delays caused by animations have been cut in half or sped up 2x depending
on how you want to look at it.
Also, the loading animations and how they were used have been changed so that the content jumps around less.
It still jumps around, but it does so less and that's good enough. 👍
New and changed capabilities
As part of adding support for these new robots, Valetudo has been extended a bit
AutoEmptyDockAutoEmptyIntervalControlCapability
This new core capability allows selecting the interval at which the dock should auto-empty the robot.
Previously, this feature was already available as a quirk on some robots.
CarpetSensorModeControlCapability
The CarpetSensorModeControlCapability has gained a new mode with this release: Detach
This for now is only supported by the X40 and allows completely detaching the mop pads once it encounters a carpet.
OperationModeControlCapability
You might've already spotted the fourth icon further up in the changelog but if not, here it is again:
The new operation mode "Vacuum then mop" does exactly what you'd think it does (if your robot's firmware supports it).
I have no clue why one would want that over doing both at the same time, but it is here now so have fun I guess.
Also, if you have a use case for it, feel free to leave a comment and let me know. I am genuinely curious.
MQTT
This release comes with a breaking change for Home Assistant users.
Due to a schema change, you will have to run at least Home Assistant 2024.02 to use this version of Valetudo.
Given that it is June now, I think I've waited long enough to give everyone ample opportunity to update their setup to that version or later.
More optionally exposable capabilities
As requested by a user, it is now possible to optionally expose the KeyLockCapability via MQTT as a dynamic defense against toddlers and cats.
Furthermore, it is now also possible to expose the ObstacleAvoidanceControlCapability to e.g. turn off obstacle avoidance via MQTT
if the robot is sent to a room where there might be problematic curtains or similar.
MQTT fixes
This release includes an updated MQTT.js library, which should solve some weird and unexplainable reconnect issues in some setups.
Furthermore, a fix has been incorporated that should result in near-instant feedback when toggling stuff via MQTT.
Misc
Thanks to a user living in a large non-square house, we've learned that 3irobotix maps can actually be larger than 800x800px.
We also learned that due to the map assumed to be square, in some places, width and height were swapped, leading to a weirdly sliced non-square map.
This has now been fixed.
Lastly, an issue with timer pre_actions not being applied correctly should have been fixed by the use of sleep()
.
The best way of fixing concurrency issues.
On not burning out
I must say that working this much on improving Valetudo again has been a lot of fun.
I really enjoyed it, it gave me a lot of energy and I think it also produced great results.
What I do not enjoy however is that me gaining energy from maintaining the project is something so unusual, it's worth explicitly mentioning.
This is because most of the time I spend maintaining Valetudo, I spend fending off bullshit/abuse and having weekly internet fights over defending my personal boundaries.
- Be it nonsense discussions fueled by emotions/entitlement/hidden agenda.
- Be it callout posts on social media trying to frame me as some kind of bad guy for the mere act of saying "no".
- Be it content creators or other commercial entities trying to non-consensually monetize the project for their own benefit.
This co...
Valetudo 2024.06.1
Exciting new robots, lots of UI improvements, new features and some words on not burning out
Valetudo 2024.06.1
Since I did not personally buy an X40 for this release, I kinda expected that there would be some minor additional issues that would show up as soon as someone attempts to root one. And indeed, there was one.
Specifically, we found out that the EU variant(?) is assigned a different Model ID than the US one.
Fortunately though, everything else seems to be the same as on the US model (which was the one we've tested prior to the release).
After then employing highly advanced OSINT research skills (thanks, UHD YouTube reviews), I've discovered that there are two additional Model ID identities the X40 might have.
This release is just 2024.06.0 plus three strings, enabling Valetudo to start on these robots.
Thus, if you have already read the 2024.06.0 release notes, you can skip the rest of this.
If not, feel free to continue reading.
New Robots
Since there has been quite some innovation going on in the robot space since the last time we've released support for a new robot, we figured that it would be time to take a closer look at new robots once more.
Unfortunately, with innovation also came a steep increase in price. But, after irresponsibly spending multiple thousand euros on new robots to void their warranty 30s after they've left the box, I have good news:
With the Dreame X40 and L10s Pro Ultra heat now being supported, we have Valetudo support for what according to reviewers and also our own experience is the best vacuum robot money can buy you right now.
This sounds amazing and also is amazing but do keep in mind that the previously recommended L10s Ultra already is a very good vacuum robot. There aren't many things to improve about it, and, frankly, there are no improvements that would warrant spending more than twice the money.
Still, there have been notable improvements:
- Mops that extend to the side beyond the robot for better edge cleaning
- X40 Only: A side brush that extends beyond the robot for better corner and edge cleaning
- X40 Only: An integrated LED flashlight for much improved AI recognition in all lighting conditions
- X40 Only: Mops that can be automatically detached and left in the dock
- An improved dock design featuring bigger water tanks and easier cleaning
- The ability to auto-empty multiple times during a cleanup
- General cleaning/navigation logic updates
- Updated AI models
As always, don't forget that Valetudo is Valetudo.
It does not strive to implement each and every feature the vendor app might offer. In fact, it strives to explicitly not do that.
UI improvements
Apart from support for these robots, a lot of things have changed about Valetudo itself too.
Custom Icons
Valetudo now has a custom icon set for all presets (Fan, Water, Operating mode).
Thanks a lot to everyone who took part in the iterative feedback process that led to these! :)
I think they really bring the UI together nicely. And, as an added bonus, they also work better on narrow screens.
Controls polish
Speaking of bringing the UI together nicely, the controls have all received some love.
- They're now more unified, using the same padding and spacing and elements.
- They now better show feedback to the user (check the dock controls or presets with a bad wifi connection)
- And, the state flag display now doesn't clip anymore on very narrow screens.
HiDPI support
Screens bring us to the next topic:
Did you ever notice that on mobile, the map view looks a bit bad, blurry and low res?
You might've thought that it's for performance reasons, but it's actually due to this new and amazing innovation called HiDPI screens that has just been released… almost 15 years ago.
Starting with this release, the Valetudo Map renderer now also takes advantage of this revolutionary display technology.
Do note though that unfortunately, HiDPI support had to be disabled for Safari due to Safari being Safari.
Mobile map font rendering
Apart from HiDPI support, another thing that has been fixed in the map renderer is font rendering on firefox mobile.
Previously, fill and stroke were called in the wrong order, leading to those overlaps.
You can also see that this screenshot was taken before HiDPI support was implemented, because the text is still somewhat blocky.
Animations
The UI should now feel more snappy as all delays caused by animations have been cut in half or sped up 2x depending
on how you want to look at it.
Also, the loading animations and how they were used have been changed so that the content jumps around less.
It still jumps around, but it does so less and that's good enough. 👍
New and changed capabilities
As part of adding support for these new robots, Valetudo has been extended a bit
AutoEmptyDockAutoEmptyIntervalControlCapability
This new core capability allows selecting the interval at which the dock should auto-empty the robot.
Previously, this feature was already available as a quirk on some robots.
CarpetSensorModeControlCapability
The CarpetSensorModeControlCapability has gained a new mode with this release: Detach
This for now is only supported by the X40 and allows completely detaching the mop pads once it encounters a carpet.
OperationModeControlCapability
You might've already spotted the fourth icon further up in the changelog but if not, here it is again:
The new operation mode "Vacuum then mop" does exactly what you'd think it does (if your robot's firmware supports it).
I have no clue why one would want that over doing both at the same time, but it is here now so have fun I guess.
Also, if you have a use case for it, feel free to leave a comment and let me know. I am genuinely curious.
MQTT
This release comes with a breaking change for Home Assistant users.
Due to a schema change, you will have to run at least Home Assistant 2024.02 to use this version of Valetudo.
Given that it is June now, I think I've waited long enough to give everyone ample opportunity to update their setup to that version or later.
More optionally exposable capabilities
As requested by a user, it is now possible to optionally expose the KeyLockCapability via MQTT as a dynamic defense against toddlers and cats.
Furthermore, it is now also possible to expose the ObstacleAvoidanceControlCapability to e.g. turn off obstacle avoidance via MQTT
if the robot is sent to a room where there might be problematic curtains or similar.
MQTT fixes
This release includes an updated MQTT.js library, which should solve some weird and unexplainable reconnect issues in some setups.
Furthermore, a fix has been incorporated that should result in near-instant feedback when toggling stuff via MQTT.
Misc
Thanks to a user living in a large non-square house, we've learned that 3irobotix maps can actually be larger than 800x800px.
We also learned that due to the map assumed to be square, in some places, width and height were swapped, leading to a weirdly sliced non-square map.
This has now been fixed.
Lastly, an issue with timer pre_actions not being applied correctly should have been fixed by the use of sleep()
.
The best way of fixing concurrency issues.
On not burning out
I must say that working this much on improving Valetudo again has been a lot of fun.
I really enjoyed it, it gave me a lot of energy and I think it also produced great results.
What I do not enjoy however is that me gaining energy from maintaining the project is something so unusual, it's worth explicitly mentioning.
This is because most of the time I spend maintaining Valetudo, I spend fending off bullshit/abuse and having weekly internet fights over defending my personal boundaries.
- Be it nonsense discussions fueled by emotions/entitlement/hidden agenda.
- Be it callout posts on social media trying to frame me as some kind of bad guy for the mere act of saying "no".
- Be it content creators or other commercial entities trying to non-consensually monetize the project for their own benefit.
This comes on top of the daily grind consisting of but not being limited to:
- People not reading instructions
- People not reading the docs
- People reading the docs but then asking if the docs are really correct on the matter, because they did not like what they read
- People not doing their own homework
- People throwing the mental load they're responsible to carry at random people on the internet
- People ask...
Valetudo 2024.06.0
Exciting new robots, lots of UI improvements, new features and some words on not burning out
New Robots
Since there has been quite some innovation going on in the robot space since the last time we've released support for a new robot, we figured that it would be time to take a closer look at new robots once more.
Unfortunately, with innovation also came a steep increase in price. But, after irresponsibly spending multiple thousand euros on new robots to void their warranty 30s after they've left the box, I have good news:
With the Dreame X40 and L10s Pro Ultra heat now being supported, we have Valetudo support for what according to reviewers and also our own experience is the best vacuum robot money can buy you right now.
This sounds amazing and also is amazing but do keep in mind that the previously recommended L10s Ultra already is a very good vacuum robot. There aren't many things to improve about it, and, frankly, there are no improvements that would warrant spending more than twice the money.
Still, there have been notable improvements:
- Mops that extend to the side beyond the robot for better edge cleaning
- X40 Only: A side brush that extends beyond the robot for better corner and edge cleaning
- X40 Only: An integrated LED flashlight for much improved AI recognition in all lighting conditions
- X40 Only: Mops that can be automatically detached and left in the dock
- An improved dock design featuring bigger water tanks and easier cleaning
- The ability to auto-empty multiple times during a cleanup
- General cleaning/navigation logic updates
- Updated AI models
As always, don't forget that Valetudo is Valetudo.
It does not strive to implement each and every feature the vendor app might offer. In fact, it strives to explicitly not do that.
UI improvements
Apart from support for these robots, a lot of things have changed about Valetudo itself too.
Custom Icons
Valetudo now has a custom icon set for all presets (Fan, Water, Operating mode).
Thanks a lot to everyone who took part in the iterative feedback process that led to these! :)
I think they really bring the UI together nicely. And, as an added bonus, they also work better on narrow screens.
Controls polish
Speaking of bringing the UI together nicely, the controls have all received some love.
- They're now more unified, using the same padding and spacing and elements.
- They now better show feedback to the user (check the dock controls or presets with a bad wifi connection)
- And, the state flag display now doesn't clip anymore on very narrow screens.
HiDPI support
Screens bring us to the next topic:
Did you ever notice that on mobile, the map view looks a bit bad, blurry and low res?
You might've thought that it's for performance reasons, but it's actually due to this new and amazing innovation called HiDPI screens that has just been released… almost 15 years ago.
Starting with this release, the Valetudo Map renderer now also takes advantage of this revolutionary display technology.
Do note though that unfortunately, HiDPI support had to be disabled for Safari due to Safari being Safari.
Mobile map font rendering
Apart from HiDPI support, another thing that has been fixed in the map renderer is font rendering on firefox mobile.
Previously, fill and stroke were called in the wrong order, leading to those overlaps.
You can also see that this screenshot was taken before HiDPI support was implemented, because the text is still somewhat blocky.
Animations
The UI should now feel more snappy as all delays caused by animations have been cut in half or sped up 2x depending
on how you want to look at it.
Also, the loading animations and how they were used have been changed so that the content jumps around less.
It still jumps around, but it does so less and that's good enough. 👍
New and changed capabilities
As part of adding support for these new robots, Valetudo has been extended a bit
AutoEmptyDockAutoEmptyIntervalControlCapability
This new core capability allows selecting the interval at which the dock should auto-empty the robot.
Previously, this feature was already available as a quirk on some robots.
CarpetSensorModeControlCapability
The CarpetSensorModeControlCapability has gained a new mode with this release: Detach
This for now is only supported by the X40 and allows completely detaching the mop pads once it encounters a carpet.
OperationModeControlCapability
You might've already spotted the fourth icon further up in the changelog but if not, here it is again:
The new operation mode "Vacuum then mop" does exactly what you'd think it does (if your robot's firmware supports it).
I have no clue why one would want that over doing both at the same time, but it is here now so have fun I guess.
Also, if you have a use case for it, feel free to leave a comment and let me know. I am genuinely curious.
MQTT
This release comes with a breaking change for Home Assistant users.
Due to a schema change, you will have to run at least Home Assistant 2024.02 to use this version of Valetudo.
Given that it is June now, I think I've waited long enough to give everyone ample opportunity to update their setup to that version or later.
More optionally exposable capabilities
As requested by a user, it is now possible to optionally expose the KeyLockCapability via MQTT as a dynamic defense against toddlers and cats.
Furthermore, it is now also possible to expose the ObstacleAvoidanceControlCapability to e.g. turn off obstacle avoidance via MQTT
if the robot is sent to a room where there might be problematic curtains or similar.
MQTT fixes
This release includes an updated MQTT.js library, which should solve some weird and unexplainable reconnect issues in some setups.
Furthermore, a fix has been incorporated that should result in near-instant feedback when toggling stuff via MQTT.
Misc
Thanks to a user living in a large non-square house, we've learned that 3irobotix maps can actually be larger than 800x800px.
We also learned that due to the map assumed to be square, in some places, width and height were swapped, leading to a weirdly sliced non-square map.
This has now been fixed.
Lastly, an issue with timer pre_actions not being applied correctly should have been fixed by the use of sleep()
.
The best way of fixing concurrency issues.
On not burning out
I must say that working this much on improving Valetudo again has been a lot of fun.
I really enjoyed it, it gave me a lot of energy and I think it also produced great results.
What I do not enjoy however is that me gaining energy from maintaining the project is something so unusual, it's worth explicitly mentioning.
This is because most of the time I spend maintaining Valetudo, I spend fending off bullshit/abuse and having weekly internet fights over defending my personal boundaries.
- Be it nonsense discussions fueled by emotions/entitlement/hidden agenda.
- Be it callout posts on social media trying to frame me as some kind of bad guy for the mere act of saying "no".
- Be it content creators or other commercial entities trying to non-consensually monetize the project for their own benefit.
This comes on top of the daily grind consisting of but not being limited to:
- People not reading instructions
- People not reading the docs
- People reading the docs but then asking if the docs are really correct on the matter, because they did not like what they read
- People not doing their own homework
- People throwing the mental load they're responsible to carry at random people on the internet
- People asking questions they know the answer to but don't like and thus wanting to hear it again
- People trying to make their completely unreasonable emotions my problem
- People asking if unsupported robots are supported
- People asking when a new robot will be supported
- People not putting in the necessary effort required to practice this hobby
That said, I don't think that there is much point in whining about it, as that is just how it is if you run a project like this one.
The only thing you can do is improve your processes and learn how to better deal with it.
There is point though in documenting it and, most importantly, making it visible, which is why I did that just now.
And now that I did it, I think I'm good.
Thanks for reading!
And thanks a lot to the vast majority of the userbase that isn't like that. ❤
The usual
If you want to see ...
Valetudo 2024.02.0
Events via MQTT, new default NTP server, maintenance & polish
Events via MQTT
Starting with this release, ValetudoEvents are now being published to MQTT.
With that, you can now build automations that react on e.g. the DustBinFullValetudoEvent (if applicable to your robot).
It works similarly to how segment data is published to Home Assistant.
Thanks, @mundschenk-at for the input on how to design that!
If you're using Home Assistant, you should have a new sensor entity after the update.
If you're using something else or want to know how to interact with events, head over to the MQTT docs on https://valetudo.cloud
New default NTP server
Valetudo by default now syncs its time from valetudo.pool.ntp.org
.
Using a vendor zone like that is a requirement from the people behind pool.ntp.org
for any larger project or product.
Thanks, @rimrul for pointing out that requirement!
If your deployment still uses pool.ntp.org
, it will be migrated automatically.
Also, the NTP Client now uses an exponential backoff retry strategy on error.
Misc
- The NTP Connectivity view now displays the current robot time for peace of mind. Thanks, @stefanmd023 for the idea!
- The internal water tank of the Dreame L10s Ultra can now be drained for storage of the robot using a newly introduced quirk
- Setting the mop drying time on dreame now reports the correct value back
- Dreame error code 121 is no longer unknown and now mapped properly
- Zooming the map far out/in on mobile will now snap to the minimum/maximum zoom level with less jank
The usual
If you want to see Valetudo on more robots and/or like this release, you might want to consider donating:
https://github.com/sponsors/Hypfer
https://builder.dontvacuum.me/donations.txt
Autogenerated changelog
Features
- ntpClient: Double wait time to next attempt on each sync error
6b15920
- ntpClient: Use valetudo.pool.ntp.org as the default timeserver
1a3a9f8
- mqtt: Publish ValetudoEvents to MQTT and allow interacting with it via MQTT
cc2ecc3
- ui: Display current robot time in NTPConnectivity view
3880f8b
- vendor.dreame: Add drain internal water tank quirk
25f428f
- vendor.dreame: Add implementation for the R2211
9b01829
Fixes
Valetudo 2023.12.0
Quality of Life, Maintenance, Merry Christmas and it's finally 37c3 time
Map Action Icons
All buttons floating on top of map views now have icons!
It's one of these changes that leaves you wondering why you didn't do that earlier. Thanks again for the input, @alufers!
With the play icon there, maybe less newcomers will click on the large play button provided by the BasicControlCapability?
I don't know what I expected for a join icon.
Virtual restrictions not only received custom icons but also a slight overhaul, adding counters, shortening button labels and adding a "Clear" button for consistency.
Home Assistant device classes
If you're using Home Assistant, with this release, you will see the battery state of the robot as an icon in the device overview.
@mill1000 noticed that we previously forgot to set the correct device class on the battery entity.
Neat!
Maintenance Maintenance Maintenance
This release bumps (almost) all dependencies to their latest versions including the necessary refactorings caused by breaking API changes.
Boring, tedious work that just needs to be done periodically.
On top of that, the NodeJS base binary was upgraded to v20 from the v18 used previously.
I still need to upgrade from react-router v5 to v6, but that will be a new year's resolution.
With these changes, from a user perspective, things should be exactly the same as before.
Fixes to bugs and annoyances
- Disabling edge mopping via the Dreame Quirk now properly reports that it actually was disabled
- SSE subscriptions now have a delay until they disconnect from the server to avoid unnecessary dis- and reconnects when changing views
- The error message thrown on invalid characters in the Wi-Fi password now tries to inform the user that Valetudo is not doing that just to ruin their day - Honestly it's sad that this change was required
37c3
With that whole pandemic thingy finally being resolved and behind us, the Chaos Communication Congress will return to Hamburg!
Dennis and I will be there with rooting PCBs for Dreame, Valetudo stickers, a weird robot that may or may not be rootable and also a new talk by Dennis.
Come say hi :)
If you don't know how to do that because you have no idea how I look like, just stand in front of a candle-lit mirror and say "multi-floor support" 13 times. Looking for a table with some vacuum robots on it might also work.
The usual
If you want to see Valetudo on more robots and/or like this release, you might want to consider donating:
https://github.com/sponsors/Hypfer
https://builder.dontvacuum.me/donations.txt
Autogenerated changelog
Features
- ui: Replace new icons with custom new icons + remove new icon dependency
5621418
- ui: Add some nice icons to all map action buttons
4e958da
- vendor.roborock: Dock dustbin consumable for all auto-empty docks
e3d13fa
- Set the embedded process priority to below normal for good measure
eadc2a7
- mqtt: Add device_class attribute to battery and WiFi sensors for Home Assistant (#1910)
aac0f51
- vendor.dreame: Edge mopping for the L10 Ultra
744fe20
Fixes
- miio: Error message clarifications
d17b299
- ui: Fix achievement display and keep SSE connections alive for additional 500ms after the last subscriber disconnected
c20731d
- vendor.dreame: Remove CollisionAvoidantNavigationControl from the x10+ since it is not supported by the firmware
d4f37e4
- vendor.dreame: Fix edge mopping quirk state reporting
9e4617b
Refactoring
Chores
2023.10.0
Fixes for bugs and annoyances + support for the W10 Pro
W10 Pro support
In the last month I finally found a reasonably-priced used W10 Pro locally. As I expected, I got scammed by the seller since one of the pumps in the dock was broken but it worked well enough to figure out and validate the rooting mechanism.
What's interesting about this model is that it was dreame's first one with an AI camera and thus they apparently threw lots hardware at the problem.
It comes with an 8MP camera which I promptly took for a spin outside. I was a bit surprised that no one at the local supermarket said anything about that random guy pointing a vacuum robot at the local bodega cat but maybe they were all just scared?
Anyway, here you can see a few pictures taken with the robot. No post-processing applied (Click to enlarge)
Good thing that there is Valetudo to disconnect it from the cloud. :-)
Fixes to bugs and annoyances
Apart from W10 Pro support, this release also comes with fixes to a few annoyances and bugs.
Unfortunately, none of these things can be captured by static screenshots so no visualization today.
Icon rendering during pinch zoom
If you've ever used the Valetudo UI on mobile, you might've noticed that the icons behaved strangely when zooming the map.
I thought there was no way to fix that as my understanding of the issue was that it had to be like that due to performance limitations.
As it turns out, this wasn't true. After revisiting the code, it is now finally fixed.
No longer will icons grow super large and then suddenly snap to the right size once you let go of the screen.
Home Assistant 2023.8 naming requirements
Now that almost two months have passed since the Home Assistant 2023.8 release that introduced a breaking change to the way MQTT autodiscovery works, I hope that this should have given Valetudo users enough time to update their Home Assistant instance without being forced to take some quick and unplanned action.
Thus, Valetudo now complies with the new requirements regarding their device and entity naming.
This is a somewhat breaking change on the Valetudo side which might cause names but not IDs to change in older Home Assistant releases.
Overall not a big deal but it should get rid of a confusing warning message in HA that was especially confusing for newcomers.
Dreame AI Camera Obstacle Avoidance
While implementing and testing support for the W10 Pro, I've noticed that the way Valetudo implemented the ObstacleAvoidanceControl was wrong for the AI Camera based models. The way it worked before only influenced the Line laser obstacle avoidance which doesn't exist on W10 Pro and D10s Pro/Plus.
I missed that, because there is both Line Laser and AI Camera obstacle avoidance on the L10s Ultra and disabling one of them made a difference in navigation leading to me asking no further questions.
Interestingly, it seems that disabling the Line Laser Obstacle Avoidance on the L10s Ultra isn't possible at all using the Vendor app? Weird.
But no matter. Valetudo now does the correct thing on all supported robots.
Misc
During this release cycle, I did take the time to write down the promised rooting instructions for the freshly supported models from the last release.
They are now available on valetudo.cloud.
Additionally, we've finally been successful in eliminating the need for a Windows machine for the new fastboot rooting procedure.
All you will need is Debian - a statement that applies to not just these rooting instructions :)
Lastly, as might've already noticed, the OpenAPI spec is now also one of the release assets and can be found in the nightly repo as well.
This should be helpful for people wanting to take a look at the API without having a robot at hand.
The usual
If you want to see Valetudo on more robots and/or like this release, you might want to consider donating:
https://github.com/sponsors/Hypfer
https://builder.dontvacuum.me/donations.txt
Autogenerated changelog
Breaking Changes
- mqtt: Comply with new home assistant 2023.8 naming requirements
9d0fed1
Features
- ui: Remove unnecessary confirm dialog from initial provisioning
1d0dec7
- MockRobot: Mock more capabilities
a7179d2
- vendor.dreame: W10 Pro
db52169
- Allow skipping the wifi credential validation
810e2e7
- vendor.roborock: G10S support
7e4fdfe
Fixes
- vendor.dreame: Fix obstacle avoidance control for camera models
7108bca
- vendor.dreame: Map error code 69 & 70
fd8193a
- ui: Correctly scale map structures during pinch zoom
1e0a306
Refactoring
- Remove old config migration code
d34f49c
- ui: Remove no longer needed workaround for a bug in DOMMatrix.invertSelf in Blink 107
9acc263
Chores
Valetudo 2023.08.0
DEFCON 31 - 7 newly rootable robots, new rooting method for 6 robots with a previous root, 5 more new robots in the pipeline
DEFCON 31
If you haven't seen it already, I highly recommend watching our latest talk:
https://media.ccc.de/v/camp2023-57158-vacuum_robot_security_and_privacy (CCCamp 2023 version)
The Valetudo docs have already been partially updates with new rooting methods and robot details. It will take some more time to fully finish all documentation. Please bear with me :)
The new Dreame Rooting PCB can be found here: https://github.com/Hypfer/valetudo-dreameadapter
As a spoiler, here's the full list of what we just released in that talk:
Newly rootable robots
These robots are now rootable for the first time
- Dreame L10s Ultra
- Roborock S8
- Roborock S8 Pro Ultra
- Xiaomi X10+
- Dreame D10s Plus
- Dreame D10s Pro
Robots with a new rooting method
These robots have been rootable previously but received firmware patches that blocked the old methods
- Dreame Z10
- Dreame L10
- Dreame W10
- Dreame D9
- Dreame F9
- Xiaomi Vacuum-Mop 2 Ultra
Robots currently in the pipeline
Edit from the future (2024-04):
Since this text keeps haunting me, I need to add this note.
It didn't work out.
I've got way too hyped and wanted to help too many people and with that ended up spending more than 4000€ of my own hard-earned cash on dead-ends that led nowhere. Please stop asking about these or robots mentioned in the section above, okay?
It is frustrating enough as it is. No I did not accidentally forget to update the docs. No it's not just a tiny step away.I accidentally tried to be nice, wasting a lot of my own personal resources on that, and now the reminder of that waste of time and resources periodically pops up in my inbox as a "but but but you said that".
And yes, this also includes robots that might've been mentioned in other release notes. Let it go.
We're currently finishing up the rooting methods for these robots. It might take a little while as it's conference season
- Dreame L10 Ultra
- Dreame L10s Pro
- Dreame W10 Pro
- Roborock Q Revo
- Roborock S7 Max Ultra
Valetudo features
While most of our time was spent getting the fresh rooting methods ready, a few things extending beyond adding support
for the new robots also happened to Valetudo
Return of the ObstacleAvoidanceCapability
With the Roborock S8 now being officially rootable and supported, toggling the obstacle avoidance on or off was reintroduced
as a full capability again after it was previously demoted to being just a dreame-specific quirk.
Furthermore, the PetObstacleAvoidanceControlCapability
was introduced as a way to tell the Obstacle Detection AI to be especially
careful with some particularly dangerous kinds of obstacles.
Even more capabilities
With the CarpetSensorModeControlCapability
there's now proper UI to select how a robot equipped with a dedicated carpet
sensor should deal with detected carpet. This feature was previously found in the quirks section.
The last new capability for this release is the CollisionAvoidantNavigationControlCapability
which toggles what the name suggests.
MQTT Changes
New Entities
For convenience and better automations, Battery Level and Status Flag are now being exposed to Home Assistant as separate
entities. Previously, the Battery Level was only available as an attribute of the Vacuum entity.
Note regarding Home Assistant 2023.08 and newer
Valetudo users that have upgraded their Home Assistant Instance to 2023.8 are currently being confronted with a scary error message that looks like this:
This is neither an actual functional issue nor a bug in Valetudo.
There were some architectural and strategic changes inside Home Assistant that affect some details about how MQTT Autodiscovery
should be implemented by other software that wants to show up in Home Assistant. Implementing the requested changes not very hard,
however doing so would break the naming of Valetudo-related entities in older versions of Home Assistant.
Since the release of HA 2023.8 happened less than two weeks ago, it would be unreasonable to force all users of Valetudo
to upgrade their HA instances. Especially since due to migration logic in HA, things work just fine and will continue to work like that until 02/2024.
For now, simply click on the "Ignore" Button in Home Assistant. No need to rename anything.
The usual
I am quite happy with what we've released today and I think you will be too :)
If you want to see Valetudo on more robots and/or like this release, you might want to consider donating:
https://github.com/sponsors/Hypfer
https://builder.dontvacuum.me/donations.txt
Autogenerated changelog
Features
- ui: Include consumable name in consumable reset confirm dialog
7f7b218
- mqtt: Expose battery state and status flag as home assistant sensor entities
5f26145
- vendor.roborock: S8 Pro Ultra support
0f390e0
- vendor.viomi: Support outline cleaning mode (#1844)
f68b995
- CarpetSensorModeControlCapability
a4261b6
- CollisionAvoidantNavigationControlCapability
e22e532
- vendor.dreame: More quirks
5a3ecc6
- PetObstacleAvoidanceControlCapability
7eae549
- vendor.roborock: RoborockObstacleAvoidanceControlCapability
bd1febe
- Return of the ObstacleAvoidanceControlCapability
e48aa7e
- vendor.roborock: S8 support + map parser cleanup
12aa3a7
- vendor.dreame: L10 Ultra
4e4b7ae
Fixes
- vendor.roborock: Remove invalid quirk for S8 series
76bba87
- vendor.dreame: The L10S Pro does not support the CollisionAvoidantNavigationControlCapability
c3405bd
Refactoring
- vendor.dreame: Hard-code miot IDs for capabilities that are exclusive to the gen2 miot schema
ef93adf
Chores
Valetudo 2023.05.0
A few MQTT expansions plus some bugfixes
MQTT
All the feature changes in this release are related to the MQTT interface:
Consumables
It is now possible to reset consumables via MQTT.
For users of home assistant, this is as easy as clicking on the button entity for the respective consumable that is now also being autoconfigured.
If you're using a different smarthome software, you can find out how to issue the reset command in the MQTT docs.
Note:
Starting with this release, consumables by default aren't exposed to MQTT anymore, as the information value of them is rather mediocre at best.
This is because at the end of the day, you're looking at linearly decrementing counters that convey a lifetime assumption.
A better way to check for the actual consumable state is to just look at the part in question during regular maintenance.
Fear not however, as the functionality is just a checkbox in the MQTT settings away.
If you have an existing deployment, said checkbox will be checked automatically for you during the update process so no breakage here.
Total statistics
Speaking of optionally exposable capabilities, there's now a new one: Total Statistics
They work exactly the same as the current statistics but provide all-time values for your automation needs.
Current statistics
As with the consumables, current statistics are not exposed to MQTT by default anymore in new deployments.
This is all part of an effort to reduce the amount of data constantly polled from the robot firmware in scenarios where it isn't actually requested or needed by anyone.
More MQTT buttons
Now that I've figured out that home assistant button.mqtt
entities exist, I've also added two more to the autodiscovery:
You can even have ones that are disabled by default for functionality that probably isn't needed by most users:
Overall these are just a few minor neat-ness improvements for the UX.
Bugfixes
- Map polling on roborock robots has been improved to fix issues with stale data e.g. when editing virtual restrictions on the S7 Pro Ultra
- The
mop dock cleaning frequency
quirk for the roborock ultra dock now works correctly - When creating multiple timers at once, the editor is now cleared in between to remove stale data
The usual
If you want to see Valetudo on more robots and/or like this release, you might want to consider donating:
https://github.com/sponsors/Hypfer
https://builder.dontvacuum.me/donations.txt
Autogenerated changelog
Features
- mqtt: Introduce autoconfigured home assistant buttons for AutoEmpty manual trigger and locate capabilities
246d655
- mqtt: Allow resetting consumables via MQTT and set consumables to be optionally exposed in new deployments
ac06012
- mqtt: Optionally expose total statistics and make exposure of current statistics optional for new deployments
5f85637
- mqtt: Expose fan speed as its own select entity to home assistant
4f03d6b
- ui: Refresh current statistics every 30s
63a49a1
- vendor.roborock: Map more error codes
1b55334
Fixes
- ui: Hide overflowing status state flag on small screens
3ccd63f
- ui: Fix timer editor not being reset when creating multiple timers
342b5e3
- vendor.dreame: Handle pixel type 3
91003db
- vendor.roborock: Fix MOP_DOCK_MOP_CLEANING_FREQUENCY quirk
15a6baa
- vendor.roborock: Fix virtual restrictions not appearing on refresh on the S7 Pro Ultra + map polling on S5e 1668
de9a085
- Satisfy new sonarcloud rules
c306028