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 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: Remove deprecated schema property from HA vacuum entity autodiscovery data
ef92967
Features
- ui: HiDPI support for the map renderer
86555ae
- ui: Better feedback for the dock controls
7a318cf
- mqtt: Optionally expose ObstacleAvoidanceControlCapability
9866d94
- mqtt: Optionally expose KeyLockCapability
572e3ce
- vendor.dreame: R2416 support
d87dca8
- OperationModeControlCapability: Vacuum then Mop Mode
1937de9
- CarpetSensorModeControlCapability: Detach Mode
6c3dd7e
- ui: Loading animation cleanup
d8714dd
- ui: Refactor, redesign and rearrange controls a bit
138f0d9
- ui: Change desktop UI breakpoint from min 600px to min 750px width
97818ac
- ui: Custom icons for Fan speeds, Water grades and Operation modes
03ff290
- AutoEmptyDockAutoEmptyIntervalControlCapability
6465975
- vendor.dreame: L10S Pro Ultra Heat support
99e13da
- vendor.roborock: dryer module support for S8 Pro and G10s (#2037)
37f386a
- Allow advanced users to customize their system ID
a9868f7
- ui: Speed up all animations by 2x
8f26ae7
Fixes
- ui: Extending HTML elements is not supported by safari
4f72632
- vendor.dreame: Reduce repoll delay right after startup to reduce the time to first map on some dreames
a7b2cc4
- ui: Fix some hiDPI related issues
13f7db3
- ui: Draw stroke before fill for map structures that have text to fix rendering on firefox mobile
7d9255b
- vendor.dreame: Fix detergent property value 3 mapping
09e2083
- ui: Don't display preset value until it is actually committed
33615ec
- vendor.dreame: Warn on unknown preset value
77be950
- mqtt: Always refresh gettable handles after setting
6ca4eb9
- MockRobot: Remove turbo water grade
92b351a
- timers: Wait a few seconds after executing pre_actions to give the firmware some time to report back its state
f0101b7
- Don't crash the process if we're not able to persist the config
cc0cd41
- ui: Fix missing controls card content indentation
31519e1
- mqtt: Bump to mqttjs v5.5.5 to fix some keep-alive related issues
9dab16c
- vendor.roborock: The S6 does not support the MapSnapshotCapability
7362514
- ui: Prevent the creation of virtual walls with a length of 0
b3417d2
- vendor.dreame: GoTo support has been removed from later X10plus firmwares
b1f58ab
- vendor.3ir: Fix parsing of maps with different dimensions than 800x800px
648b07e
- Fix ConfigPath env variable
e7d2bc6
- vendor.dreame: Document error code 117 (#2020)
4af21c7
- vendor.dreame: Remove mop drying time quirk from the W10 Pro as it is not implemented by the firmware
28c91b6