Releases: Hypfer/Valetudo
Valetudo 2021.10.0
Another release with a lot of UI changes by @ccoors. Also, there's an Android companion App now.
Android Companion App
Thanks to the help of @TheLastProject who had built the first prototype in less than 18h after initially mentioning the idea on the telegram group, there's now an Android Companion App for Valetudo.
Don't worry, it is completely optional. All it does and aims to do is to find Valetudo instances on your network via Bonjour and help you with the provisioning (configuring Wi-Fi) process of new robots with Valetudo installed.
This can be helpful for example if you were to give your non-linux-skilled parents a rooted robot for Christmas or whatever.
It's available on F-Droid and Google Play and of course open source.
For more information, please check out the docs.
UI Changes
@ccoors provided very nice previews displaying their changes in each PR, which is why I will just copy-paste them here for your convenience.
Also, I'm lazy
Logo Cleanup
As you might've noticed, the logo slightly changed.
This avoids the bug in some people, which made them read it as aletudo when looking at it.
Valetudog
The thing from the telegram group finally got a name: Valetudog
It's now some kind of mascot I guess.
I also bought a lot of stickers of it
Unfortunately, I have no idea what to do with them.
They did turn out quite nice though.
Zoned Cleanup MQTT changes
Starting with this release, it's no longer possible to clean multiple zone presets at once via MQTT.
That should've never been possible in the first place since it's conceptually wrong as you can only call a single preset at a time. Sorry about that.
Note that this is a breaking change and will require updating of e.g. your Home Assistant automations.
Instead of an array, you now have to send just the preset ID as a string.
Autogenerated changelog
Features
- ui: Consumables bottom view sensors (#1104) (2f83d8e)
- ui: DoNotDisturb configuration & Masonry on large screens (#1112) (935f903)
- ui: HTTP Basic Auth and NTP client config (#1118) (2371878)
- ui: Manage voice packs (#1108) (0d02c27)
- ui: Manual control (#1114) (7e9ef04)
- ui: Robot settings (#1097) (4b43b37)
- ui: Wifi configuration (#1116) (3e71184)
- vendor.dreame: Add Dreame D9 Pro (cc50a8c)
Bug Fixes
- mqtt: Fix MQTT Zone cleanup (fdabcc5)
- ui: Allow start and home basic commands on error state (5fd0354)
- ui: Blue line between buttons in PendingMapChangeEventControl (196a29e)
- ui: Fix mobile Icons in new frontend (#1113) (313caa1)
- ui: Import ToggleButton from core (da0cce5)
- ui: RatioBar background color (c00d174)
- ui: Remove persistent data hint (6777f3a)
- ui: repair light mode (#1103) (842aea1)
- ui: Root grid height (957463a)
- ui: Root grid height (1d9a244)
- ui: Stop events badge flashing when it reloads (#1115) (007926b)
- webserver: Fix reflected xss vulnerability (36a3bae)
Valetudo 2021.09.1
This release is packed with UI improvements thanks to @ccoors
Event UI
The new UI now subscribes to the ValetudoEvents endpoint and allows for interaction with them.
This is helpful as they might contain errors that you've missed.
Also, your robot might require confirmation from you to store a new map so make sure to keep an eye on that.
Timer UI
You can now use the new UI to set up ValetudoTimers.
Note that timers are always stored and evaluated as UTC. The local time display is simply a convenience feature.
MQTT config UI
MQTT configuration can now also be done via the new UI.
It features a nice topic preview to make it easier for newcomers to interact with Valetudo via MQTT.
Also, the API will no longer return any MQTT credentials but instead replace them with <redacted>
for security reasons.
Logviewer UI
A basic log viewer has been added to the new UI. While still WIP, it already allows for live updates as well as filtering, which is a neat improvement.
Auto-empty Dock related features
If you own a Dreame Z10, you're now able to enable/disable the automatic dust collection via the Swagger UI.
Furthermore, you can also trigger it manually via either the UI, the REST API or MQTT, meaning that you can now fully customize the collection interval by using e.g. Home Assistant automations.
Misc
Obstacle Avoidance
You can now disable the Obstacle Avoidance Feature of your Dreame L10/Z10 via the Swagger UI if you experience issues such as the robot refusing to drive onto a carpet.
Consumables UI
The new UI now also features a consumables section with a neat hover feature hopefully helping newcomers better understand the consumables.
Runtime Information UI
The new UI about section has been extended to display data returned by the runtime information endpoint.
Autogenerated changelog
Features
- core: AutoEmptyDockAutoEmptyControlCapability (eeeb46c)
- core: AutoEmptyDockManualTriggerCapability (5678d4f)
- core: ObstacleAvoidanceControlCapability (e5fab92)
- core: Robot properties (b1713df)
- MockRobot: MockAutoEmptyDockManualTriggerCapability (31cb972)
- ui: Add button to trigger dock auto empty manually (#1087) (fa2def7)
- ui: Consumables in new UI (#1093) (144d6ed)
- ui: Implement MQTT config ui (#1080) (2dd83e3)
- ui: Implement timer ui (#1077) (abd6345)
- ui: Log with SSE and display log in new UI (#1092) (1721df7)
- ui: Navigation and Events in UI (#1090) (27fd2ba)
- ui: Show MQTT config defaults (711c312)
- ui: Show MQTT topic preview (#1082) (865905e)
- ui: Show runtime info on about page (#1089) (ece2dc9)
- vendor.dreame: DreameAutoEmptyDockAutoEmptyControlCapability (a1fa6d8)
- vendor.dreame: DreameAutoEmptyDockManualTriggerCapability (b7aed1a)
- vendor.dreame: DreameDoNotDisturbCapability (60972ca)
- vendor.dreame: DreameObstacleAvoidanceControlCapability (ca9a499)
- webserver: Provide mqtt config properties (7e6962b)
Bug Fixes
- core: Accepting/rejecting a pending map change should always invalidate a pending event (94c8da2)
- timers: Prevent timer drift (#1078) (105d02a)
- ui: Improve word breaks in MQTT topic preview (#1088) (8736f7f)
- ui: Make timers use correct time zone offset (#1079) (f790db3)
- ui: Remove staleTime: Infinity for queries that should actually refresh automatically (b53d428)
- ui: Show old ui timer page even when there's no DoNotDisturbCapability (ac19d5d)
- ui: Timer action controls Memo dependency (#1091) (7ebbafc)
- ValetudoEvents: Resetting a consumable should also set its event to processed (d705c5b), closes #1096
- webserver: Remove obsolete mqtt config password stripping (c4f6fab)
- webserver: Strip credentials from mqtt config REST response and remove ssh key upload (5b66887)
- webserver: Terminate SSE connections on shutdown for a clean shutdown (bfbf4dd)
Valetudo 2021.09.0
This release features some more bugfixes and some breaking config changes
New UI
If you haven't seen it already, check out the previous release notes.
MQTT changes
Config Schema
This release features a much cleaner mqtt configuration schema. Now, one can actually understand what the options are for.
Since this a breaking change, Valetudo will likely reject your old config file and create a new one.
Don't worry though. The old one is backed up meaning that you can simply copy-paste your timers, presets etc.
Just check the Log for more information.
Identifier
Valetudo will now use the autogenerated machine identifier as the mqtt identifier and friendly name.
If you've been using the defaults until now, you'll either want to manually configure the identifier or update your scripts, delete your Vacuum Device in Home Assistant etc.
The autogenerated unique machine identifier can be found in the Log.
It will sorta look like this: ModestFewChinchilla
Home Assistant Map Data
The Map data camera image has been replaced with a nicer looking one that will also hopefully lead to less confusion for newcomers.
It looks like this:
Out-of-Memory Issues
The out of memory issues causing Valetudo to shut down have been fixed again even though that they were already fixed.
For some reason, npm started installing the old and unpatched dependency. Probably some weirdness regarding the package-lock.json
or something like that.
This has been solved by reimplementing what the dependency did in Valetudo itself. Fortunately, this allowed us to add logging to that.
If you're seeing something like [WARN] Stale SSE connection to the Map SSE Hub detected. Terminating.
in your log, the mitigation is working.
Updated Robot Docs
I've added some notes for each implementation to the Supported Robots Page to make it easier for people to choose a robot to buy.
Autogenerated changelog
Features
Bug Fixes
- miio: reduce loglevel of user ack timeout spam messages (3f81d4c)
- mqtt: Poll robot state every refreshInterval to mitigate stale data on lost cloud connections (95ce4bb)
- openapi: Fix examples schema for ManualControlCapability (b22ceb7)
- ui: Change path color to black for better visibility (2454a85)
- vendor.viomi: catch set_timezone errors (c2cbd45)
Reverts
- Revert "fix(vendor.viomi): Poll state every 30s to fix stale mqtt data" (b55e4a5)
Valetudo 2021.08.1
This release features the new React-based UI by @Jomik as well as some MQTT config changes
New UI
The new UI has been merged and is now available as a usable preview.
There's still a lot to do, however that should be much easier now that it is merged.
Until everything has been ported over, the old UI will still be the default.
You can open the new one via the menu, which now also houses a shortcut to the Swagger UI as well:
There's a drop-down where you can select a zone preset to clean in the new UI.
Futhermore, there's also a button, which lets you set the iteration count for segment cleanups.
This marks a huge step forward for the project, which has been due since years. Thanks again to @Jomik ❤
MQTT config changes
This release removes all mqtt settings where I couldn't find a reasonable explanation for why they exist.
If you're missing something, please let me know in the comments and include an explanation why it was needed.
Dreame Z10 Pro Support
If you're looking for a Valetudo-supported and affordable Vacuum Robot featuring an Auto-Empty Dock, you can now buy
the Dreame Z10 Pro. I didn't know that I needed an auto-empty dock before I got one, but I definitely needed one.
Do note that it's supported on the feature level of the L10 Pro, meaning that you can't control the Dock yet.
That shouldn't matter though as it is on by default and doesn't strictly require any interactions.
Autogenerated changelog
Features
- ui: Add link to swagger ui to menu (513bd8c)
- ui: Added html title to symbols in various map views (#1026) (98d0f1e)
- ui: Display system host info (54df5ca)
- ui: Support segment cleanup iteration count selection in map view (f798ff5)
- vendor.dreame: Add Dreame Z10 Pro (4127ccd)
- vendor.dreame: Log rootfs on startup if embedded (cbde5a4)
- vendor.roborock: Log rootfs on startup if embedded (8d09fd6)
- New React UI (9acb2cd)
Bug Fixes
- miio: Add proper shutdown methods to dummycloud and retrywrapper (f0676ef)
- miio: Reduce loglevel for non-pending messages (dbabe0b)
- mqtt: Catch exceptions on connect reconfiguration (0e3bebd)
- mqtt: Fix 100% cpu consumable fetch recursion (ae163a9)
- mqtt: Remove refreshInterval setting (83d2a45)
- networkadvertisement: Hopefully fix valetudo crashing due to network issues (4ace37e)
- ui: Fix minor issues discovered by deepscan (ee8b58b)
- ui: Only dark mode (for now?) (db985f3)
- vendor.dreame: Add error code 68 mapping (741c711)
- vendor.dreame: Fix incorrect status mapping for powersave mode (343c749)
- vendor.dreame: Ignore "event_occured" cloud messages (4d3f4ac)
- vendor.roborock: Handle more events (972e4df)
- vendor.viomi: Poll state every 30s to fix stale mqtt data (fdb315a)
Valetudo 2021.08.0
This release contains mostly bugfixes and code cleanup.
Also, ordered cleanup and iterations for MQTT segment cleaning.
Dreame root public release
Rooting Dreame robots has been made publicly available with Dennis' DEF CON 29 Talk
Robots with lasers and cameras but no security Liberating your vacuum.
For more information, consider joining the Dreame Robot Vacuum Telegram Usergroup.
MQTT Segment Cleaning options
This release allows you to specify an iteration count when calling Segment Cleanups via MQTT.
Furthermore, you can also request it to respect the order you've provided. e.g. Kitchen then Living Room then Bathroom.
This requires firmware support and is also a breaking change.
You'll have to update your MQTT scripts/automations/whatever.
The docs contain an example payload.
KeyLockCapability
If you have children, cats or drunk roommates who like to mess with your robot vacuum, you can now lock the buttons via Valetudo.
This of course needs firmware support. Something that seems to be available on most Dreame-made robots.
Please note that there's no UI toggle for it yet, meaning that you'll have to use the Swagger UI (http://ROBOT_IP/swagger/) to enable it.
_valetudo._tcp bonjour service
Valetudo 2021.08.0 and up will publish a bonjour service, which should make it easy to auto-discover a Valetudo instance.
This will likely be useful in the future.
Autogenerated changelog
Features
- core: KeyLockCapability (4e2b97b)
- networkadvertisement: Publish _valetudo._tcp service (cb1c34f)
- vendor.dreame: 1C Manual Control (afded40)
- vendor.dreame: DreameKeyLockCapability (36e3598)
- vendor.dreame: Manual Control (4cfddd4)
Bug Fixes
- core: Improve unhandledRejection event handler (a8720b9)
- mqtt: Catch exceptions when handling MQTT commands (33b9dc3)
- mqtt: Fix weirdness on disconnect (be033b6)
- mqtt: Only try to publish state when connected (e61cf98)
- mqtt: Publish named as well as unnamed segments (b5ff0b4)
- vendor.dreame: Add error code 64 for Dreame robots (#1017) (4ed64d2)
- vendor.dreame: Error 11 Mapping for CombinedVirtualRestrictions (491ed4b)
- vendor.dreame: Fix cleaning order of segments (d7cfd07)
- vendor.dreame: Handle more segment-related error codes (57fe90a)
- vendor.dreame: Ignore some FDS uploads (f1930b3)
- vendor.dreame: Update error code mapping (d1699b2)
- Fix invalid use of .finally() (770f977)
- vendor.dreame: Remove logging of raw data on failed parse (11fec98)
- vendor.roborock: Fix unhandled rejection in virtual restrictions (4a76029)
- vendor.viomi: Fix unhandled rejection in virtual restrictions (af4704f)
- Fix more various minor issues found by deepscan (c6c1a7f)
- Fix various minor issues found by deepscan (37cc55f)
Valetudo 2021.07.1
This release includes, SSDP and Zeroconf advertisement, an Event/Notification feature some bugfixes and lowmem optimizations.
Furthermore, 2021.07.1 fixes a race condition which was present in 2021.07.0 causing crashes on reboot.
Network advertisement
To make using Valetudo a bit easier and more straight-forward, advertisement of the Service via both SSDP/UPnP as well as Zeroconf was added.
If you're on Windows, opening "Network" in the File Explorer should look similar to this:
If you're on a Mac, I'm sure that there's also something.
Furthermore, Valetudo will log the .local
domain it's using, which might be useful in some setups.
ValetudoEvents
Starting with this release, we now have something that will deal with everything that would've been a push notification
when using the regular app. Utilizing this, the "Bin Full" notification on roborock vacuum robots may finally happen.
There's no UI for it just yet, however it will be implemented eventually.
Runtime Reuse
As storage space can be quite limited on these devices, it is now possible to use the NodeJS runtime bundled with
Valetudo for other things as well.
This can be helpful if one would e.g. want to implement a Microservice, which also runs on the Robot, talks to Valetudo
and provides Telegram connectivity.
Just add the --ignore-payload
flag plus another JS file:
./valetudo --ignore-payload repl.js
The baked-in v8 options will still apply when reusing the runtime.
That however shouldn't be an issue for most use-cases.
S5 Max Map issues
Apparently, the Map Reset on the S5 Max never worked. That might explain some issues users of this Robot were seeing.
It should be fixed now.
Memory-related changes
During the development of 2021.07.0, a lot of time was spent optimizing Valetudo for use in lowmem environments
such as the Roborock S5 Max or Dreame D9.
It was discovered that there were issues with the SSE Map update feature, which lead to Valetudo being killed by the
Kernel OOM killer. This was the cause of the confusing "Hey my Valetudo is just.. gone" reports.
While this was fixed by introducing limits there, Valetudo was also extended to watch its own Memory usage
and shut down if it exceeds 1/3 of system memory. This should provide an additional failsafe.
Furthermore, Valetudo will also set its OOM score to a rather high value by itself, so that the Kernel OOM killer
will always kill Valetudo and nothing else.
Still, if you can, please buy a 512mb or more RAM robot.
Misc
- To help with debugging, you can now enable an option in the config file to store all uploaded maps in the filesystem.
- Resetting the Map will now also invalidate the map cached by Valetudo to reduce confusion.
Autogenerated changelog
Features
- Network Announcement via SSDP/UPnP and mDNS/Zeroconf/Bonjour (c158d77)
- core: MappingPassCapability (1b09cde)
- core: PendingMapChangeHandlingCapability (ed0455d)
- miio: Add easy way to store uploaded maps for debugging purposes (547f8c1)
- vendor.dreame: Add Support for the L10 Pro (2f618c0)
- vendor.dreame: DreamePendingMapChangeHandlingCapability (d972121)
- vendor.dreame: Handle more properties (421e7de)
- vendor.dreame: MappingPassCapability (7f9322b)
- Set OOM Score Adj when embedded (6de2f06)
- ValetudoEvents (aa15238)
- vendor.dreame: Map fast mapping status (021213e)
- vendor.dreame: Sensor consumable (4c1e319)
Bug Fixes
- core: Catch uncaught exceptions for an orderly shutdown (5cf19c4)
- core: Reverse event order (a829ba5)
- networkadvertisement: Don't crash on reboots + human-friendly URL (3cb1cb8)
- vendor.dreame: Fix segment cleanup via mqtt (5dbb9d0)
- vendor.dreame: Fix status mapping and ignore irrelevant property change (68c1c0c), closes #969
- vendor.dreame: Handle more properties (6a834c8)
- vendor.dreame: Handle sensor consumable push (cc8b7a5)
- vendor.dreame: Handle sensor consumable push (4276c36)
- vendor.dreame: Handle uploaded multi-map jsons (01486b8)
- vendor.dreame: Revert Fix status mapping (8db8b6f)
- vendor.dreame: Segments from rism might not apply in some situations (e1161cf)
- vendor.dreame: There actually is a difference between pause and stop (6da5dc4)
- vendor.roborock: Add filename to map upload url (90b7346)
- vendor.roborock: Enable S7 Water Pump Control + No-Mop-Zones (f699a55)
- vendor.roborock: MapSnapshots are only available on Gen2 robots (0752de2)
- vendor.roborock: MapSnapshots IDs are strings in valetudo but numbers for roborock (361dffa)
- vendor.roborock: Multi-Map capable roborock robots use a different command for map resets (2bbd86f)
- webserver: Remove unused parameter (d27e3b1)
- Fix missing git commit id (40ca9cb)
- Fix OOM-issues caused by SSE connections (a0371f4)
- Further tweak forced garbage collection (c70393a)
- Further tweak SSE settings (8eae178)
- Further tweak SSE settings (40d16f5)
- Further tweak SSE settings (cb8e01e)
- Resetting the map should also clear the Map cached by Valetudo (e70041f)
- vendor.viomi: Set correct env variables (#979) (5fd4a6a)
- vendor.viomi: Set correct ssh key location (b15c707)
- Try logging everything we can get about process memory before committing sudoku (6578a99)
- Tweak forced garbage collection (d905864)
Valetudo 2021.07.0
This release includes, SSDP and Zeroconf advertisement, an Event/Notification feature some bugfixes and lowmem optimizations.
Network advertisement
To make using Valetudo a bit easier and more straight-forward, advertisement of the Service via both SSDP/UPnP as well as Zeroconf was added.
If you're on Windows, opening "Network" in the File Explorer should look similar to this:
If you're on a Mac, I'm sure that there's also something.
Furthermore, Valetudo will log the .local
domain it's using, which might be useful in some setups.
ValetudoEvents
Starting with this release, we now have something that will deal with everything that would've been a push notification
when using the regular app. Utilizing this, the "Bin Full" notification on roborock vacuum robots may finally happen.
There's no UI for it just yet, however it will be implemented eventually.
Runtime Reuse
As storage space can be quite limited on these devices, it is now possible to use the NodeJS runtime bundled with
Valetudo for other things as well.
This can be helpful if one would e.g. want to implement a Microservice, which also runs on the Robot, talks to Valetudo
and provides Telegram connectivity.
Just add the --ignore-payload
flag plus another JS file:
./valetudo --ignore-payload repl.js
The baked-in v8 options will still apply when reusing the runtime.
That however shouldn't be an issue for most use-cases.
S5 Max Map issues
Apparently, the Map Reset on the S5 Max never worked. That might explain some issues users of this Robot were seeing.
It should be fixed now.
Memory-related changes
During the development of 2021.07.0, a lot of time was spent optimizing Valetudo for use in lowmem environments
such as the Roborock S5 Max or Dreame D9.
It was discovered that there were issues with the SSE Map update feature, which lead to Valetudo being killed by the
Kernel OOM killer. This was the cause of the confusing "Hey my Valetudo is just.. gone" reports.
While this was fixed by introducing limits there, Valetudo was also extended to watch its own Memory usage
and shut down if it exceeds 1/3 of system memory. This should provide an additional failsafe.
Furthermore, Valetudo will also set its OOM score to a rather high value by itself, so that the Kernel OOM killer
will always kill Valetudo and nothing else.
Still, if you can, please buy a 512mb or more RAM robot.
Misc
- To help with debugging, you can now enable an option in the config file to store all uploaded maps in the filesystem.
- Resetting the Map will now also invalidate the map cached by Valetudo to reduce confusion.
Autogenerated changelog
Features
- Network Announcement via SSDP/UPnP and mDNS/Zeroconf/Bonjour (c158d77)
- core: MappingPassCapability (1b09cde)
- core: PendingMapChangeHandlingCapability (ed0455d)
- miio: Add easy way to store uploaded maps for debugging purposes (547f8c1)
- vendor.dreame: Add Support for the L10 Pro (2f618c0)
- vendor.dreame: DreamePendingMapChangeHandlingCapability (d972121)
- vendor.dreame: Handle more properties (421e7de)
- vendor.dreame: MappingPassCapability (7f9322b)
- Set OOM Score Adj when embedded (6de2f06)
- ValetudoEvents (aa15238)
- vendor.dreame: Map fast mapping status (021213e)
- vendor.dreame: Sensor consumable (4c1e319)
Bug Fixes
- core: Reverse event order (a829ba5)
- vendor.dreame: Fix segment cleanup via mqtt (5dbb9d0)
- vendor.dreame: Fix status mapping and ignore irrelevant property change (68c1c0c), closes #969
- vendor.dreame: Handle more properties (6a834c8)
- vendor.dreame: Handle sensor consumable push (cc8b7a5)
- vendor.dreame: Handle sensor consumable push (4276c36)
- vendor.dreame: Handle uploaded multi-map jsons (01486b8)
- vendor.dreame: Revert Fix status mapping (8db8b6f)
- vendor.dreame: Segments from rism might not apply in some situations (e1161cf)
- vendor.dreame: There actually is a difference between pause and stop (6da5dc4)
- vendor.roborock: Add filename to map upload url (90b7346)
- vendor.roborock: Enable S7 Water Pump Control + No-Mop-Zones (f699a55)
- vendor.roborock: MapSnapshots are only available on Gen2 robots (0752de2)
- vendor.roborock: MapSnapshots IDs are strings in valetudo but numbers for roborock (361dffa)
- webserver: Remove unused parameter (d27e3b1)
- Fix missing git commit id (40ca9cb)
- Fix OOM-issues caused by SSE connections (a0371f4)
- Further tweak forced garbage collection (c70393a)
- Further tweak SSE settings (40d16f5)
- Further tweak SSE settings (cb8e01e)
- Resetting the map should also clear the Map cached by Valetudo (e70041f)
- vendor.roborock: Multi-Map capable roborock robots use a different command for map resets (2bbd86f)
- Further tweak SSE settings (8eae178)
- vendor.viomi: Set correct env variables (#979) (5fd4a6a)
- vendor.viomi: Set correct ssh key location (b15c707)
- Try logging everything we can get about process memory before committing sudoku (6578a99)
- Tweak forced garbage collection (d905864)
Valetudo 2021.06.0
This release features Swagger UI for proper REST API Documentation.
Also bugfixes and stability + performance improvements like the changelog of every single android app you have installed.
Swagger UI
In a tedious and brain-melting process, OpenAPI documentation was added to Valetudo.
By navigating to ROBOT_IP/swagger/
you now have an interactive overview for the REST API, which directly lets you interface with the robot.
The schemas made for this are also used by the backend to validate every incoming request.
Since staring at JSON Schemas all day is a pretty mind-numbing task, I didn't manage to also add examples for all responses and requests.
I did however add examples for the Timers Endpoint, meaning that it is now easier to use those again.
UI support of course coming soon.
Config file Schema Validation
The new schemas are also used to validate the configuration file loaded by Valetudo.
If any errors arise, Valetudo will backup the config and create a new one using the defaults.
This will prevent issues with Valetudo not starting due to invalid configuration data.
The log will tell you what exactly was wrong in your config and where you can find the backup.
Other noteworthy changes
NodeJS v16.4.0
The Runtime was upgraded to v16.4.0 which brings v8 9.1 including the new Sparkplug thingy, which may result in CPU performance improvements.
MQTT ignores retained messages
A common rookie mistake is that command MQTT messages are sent with the retain flag causing the robot to receive them on every reconnect.
This effectively executed a cleanup on each reboot at 4am.
To combat this, Valetudo will now simply ignore all retained messages received and complain about them in the logfile.
System REST Endpoints
There are new REST Endpoints providing system statistics such as Memory or CPU usage.
/api/v2/system/host/info
{
"hostname": "rockrobo",
"arch": "arm",
"mem": {
"total": 522792960,
"free": 358219776,
"valetudo_current": 59215872,
"valetudo_max": 59699200
},
"uptime": 61036,
"load": [
0.255,
0.2725,
0.28
]
}
Code Compression
Due to the switch to vercel/pkg
5.3.0, Valetudo now uses the code compression feature, which results in smaller binaries.
Memory Usage
MQTT Map compression is now streamed, which may or may not improve memory usage on 256mb ram robots.
Autogenerated changelog
Features
- mqtt: Ignore received retained message to work around common user errors (26d8a4c)
- mqtt: Stream map serialization to improve memory usage with large maps (98b2757)
- timers: Add endpoint which returns timer actions supported by this robot (fe1fa88)
- timers: add ValetudoGoToTimerAction (#953) (d8a523e)
- vendor.roborock: Add support for the Roborock S7 (c9ccb4a)
- webserver: Add SystemRouter (efc46e6)
- webserver: Normalize reported system load (b384ac3)
- webserver: Streamed compression of some heavy requests (0d7d836)
- webserver: Validate actual endpoint existence against openApi schema (f7cee31)
- Swagger Docs (7842d9e), closes #892
- Validate configuration file and create a new one on error (39e4613)
Bug Fixes
- configuration: Add migration for invalid mqtt port type (1220aa5)
- miio: Allow setting new wifi credentials when provisioned (32a12cf), closes #657
- mqtt: Calling GoTo Presets should use regular strings and not json strings (ec975aa), closes #960
- mqtt: Use semaphore to avoid reconfigure race condition (5b4b377)
- ntpclient: Reduce loglevel of more error codes to avoid confusion (ec4ee08)
- ui: Allow resetting map when PersistentMapControl is unavailable (#954) (bc8feb9)
- ui: Hide defunct zones button (ae7c059)
- vendor.dreame: Handle some previously unhandled messages (810a212)
- webserver: Fix SystemRouter units (fd908f6)
- webserver: os.freemem() isn't what it appears to be (80743f4)
- webserver: Properly report memory info for kernels older than 3.14 but newer than 2.6 (9000f51)
Valetudo 2021.05.0
This release features mostly bugfixes, unfinished features and a hostile takeover.
MQTT Rewrite
Due to the scale of the MQTT rewrite that happened with 2021.04.0, some new bugs were introduced, which have been fixed with this release.
Furthermore, this release removes the migration logic of the old mqtt config format so if you're planning on upgrading from something other than 2021.04.0, make sure to upgrade to that before installing 2021.05.0.
As always, reading all the release notes is strongly recommended during upgrades.
Not-yet finished things
Not everything in this section is already part of this release.
UI Rewrite
@Jomik is still working on the rewrite of the Valetudo UI. It's already looking fantastic:
If you're a frontend dev, a design person etc., feel free to join in. :)
We'll definitely need some design input, custom icons and much more stuff.
Timers
A simple scheduler feature has been added to the backend for setups where a full-blown home automation system isn't required.
These shall be understood as WIP and can currently only be controlled via REST API calls.
Dreame Support
Public root coming soon™, again.
The beta test has been expanded to more users. If you want to take part in that, make sure to join the Telegram Dreame Usergroup and check out the pinned form.
Currently, the announcement of the Dreame W10 and Z10 is delaying the release of the rooting method.
Freenode hostile takeover
As you might've heard, Freenode, the FOSS IRC network has been taken over by the crown prince of korea, who decided to have some fun with it.
Today, the #Valetudo Freenode channel was also taken over:
There are other and much more popular victims of this:
- https://mastodon.sdf.org/@kline/106299403921451814
- https://news.ycombinator.com/item?id=27286628
- https://twitter.com/fosdem/status/1397454352835653632
I've left the network and strongly advice you to do the same.
https://libera.chat/ is the continuation of Freenode with a different name, but the same Team that has been running Freenode for the last 20 years.
Freenode on the other hand is just the same name but with completely different people.
Stick to the community. Not to the brand.
For more information, check out some of the resignation letters of the former freenode and current libera staff:
- kline: https://www.kline.sh/
- jess: https://gist.github.com/jesopo/45a3e9cdbe517dc55e6058eb43b00ed9
- Md: https://blog.bofh.it/debian/id_461
- niko: https://coevoet.fr/freenode.html
- edk: https://gist.github.com/edk0/478fb4351bc3ba458288d6878032669d
- emilsp: https://gist.github.com/pinkisemils/39d4ded8b1639b6f39dcab15618649f5
- mniip: https://mniip.com/freenode.txt
- Swant: https://swantzter.se/freenode-resignation/
- JonathanD: https://gist.github.com/JonathanD82/6518b93708e0aaf4b8f92c8e7200816d
There's also a neat FAQ by @joepie91: https://gist.github.com/joepie91/df80d8d36cd9d1bde46ba018af497409
Autogenerated changelog
Features
- vendor.dreame: Add iteration count to MapSegmentationCapability (05b338f)
- Timers (7b8c37a)
- ntpClient: Keep track of the current state and enable configuration via REST (e350eba)
- vendor.dreame: 1C: Add/fix various Map & Volume capabilities (#915) (c88df12)
- vendor.roborock: Add support for ordered segment cleanup with multiple iterations (2541113)
- vendor.viomi: Implement DND capability (#877) (dd05c51)
Bug Fixes
- miio: Better map upload logline (0e7ce7c)
- mqtt: Allow strings as segment IDs (#891) (3e30414), closes #889
- mqtt: Always publish state (6a041c6)
- mqtt: Only migrate HAss topics if enabled (#912) (eb2edaf)
- mqtt: Publish state for both hass and homie, as the hass device availability_topic is set to the same topic (#860) (219bc34)
- mqtt: Remove unnecessary availability_topic (#859) (aa85205), closes #858
- ntpClient: Support disabling the ntpClient (949d8e3), closes #925
- timers: Copy-paste antipattern (e331eda)
- timers: Fix zoned scheduled cleanup (34443b3)
- ui: DND should be rendered as localtime but stored as UTC (fd79163)
- vendor.dreame: Ignore uploaded multi-map data (6f3dcc5)
- vendor.roborock: Handle DND as UTC (8fc9ea8)
- vendor.roborock: Roborock only accepts int coordinates (c7efd6a)
- Print error message when failing to load config file (#914) (9ebda7e)
- vendor.roborock: Remove invalid RoborockCombinedVirtualRestrictionsCapability from V1 robot (5a2bae4)
- vendor.viomi: Fix system timezone in init script (#876) (908d5dd)
- vendor.viomi: Syntax error in init script (2d53b7c)
- vendor.viomi: Viomi minor bugfixes (#820) (4742214)
Valetudo 2021.04.0
This release features a complete rewrite of the MQTT interface, which brings superior OpenHAB support by fully
implementing the Homie specification, Segment renaming, Water Usage Controls, No-Mop-Zones, UI improvements and better
stability in low-mem environments such as the Roborock S5 Max
Newcomer Guide
To answer common questions newcomers or people that haven't actively been following the project may have, there's now
the Valetudo Newcomer Guide Early 2021 Edition in the docs.
MQTT Rewrite
@depau has spent countless hours completely rewriting the MQTT Interface of Valetudo.
Note that this is a breaking change and will require additional attention from you on upgrade.
We're now fully Homie-compatible which brings much better support for Home Automation systems other than Home Assistant such as OpenHAB which has recently been completely overhauled.
Make sure to check out their new demo as well as the Valetudo OpenHAB integration docs.
If you're using something else such as FHEM or ioBroker, the new Homie MQTT implementation should also be much easier to work with.
Documentation on the new MQTT schema can be found in the MQTT Docs.
Davide also went the extra mile and wrote an excellent developer documentation for the new MQTT feature which is a must-read if you want to contribute to that part of Valetudo.
Home Assistant MQTT Rewrite FAQ
Valetudo will try its best to auto-migrate your configuration file and Home Assistant configuration.
However, the latter may not work 100% all the time. Therefore, here's an FAQ for Home Assistant users migrating to Valetudo 2021.04.0
Q: Home Assistant now shows everything as unavailable.
A: Refresh the page
Q: The consumables do not update in Home Assistant
A: Wait one minute, or open valetudo and navigate to the consumables page
Q: ICBINV does not seem to be retrieving the map
A: The map topic changed, it is now TOPIC_PREFIX/IDENTIFIER/MapData/map-data, update your ICBINV config and ICBINV to 2021.04.0
Q: Some stuff is still not detected by Home Assistant
A: Reset the autodiscovery configuration by performing the following:
- Go to the MQTT settings
- Disable MQTT, enable "Delete autodiscovery on shutdown" under "Home Assistant Autodscovery".
- Save MQTT configuration
- Check Hass to ensure everything has disappeared, refresh the page as needed.
- Enable MQTT, disable "Delete autodiscovery on shutdown" under "Home Assistant Autodscovery".
- Save MQTT configuration
Q: vacuum.send_command
doesn't work anymore
A: Yep. The docs will be updated shortly with information on how to achieve the same stuff now
Segment Renaming
Valetudo now supports (re-)naming segments and cleaning them from the UI Homepage in the same way you'd trigger a
ZonePreset cleanup.
Water Usage Control and No-Mop Zones
It is now possible to control the water grades of your robot using Valetudo, which is a completely new feature
that never appeared elsewhere before :^)
Furthermore, no-mop-zones are back as well.
Lowmem enhancements
As it turns out, running nodejs in very resource-limited embedded environments such as vacuum robots isn't exactly
the intended core use-case of the runtime, which is why we seem to be pushing the limits especially on devices with
only 256mb ob ram such as the Roborock S5 Max.
Another surprising discovery is that Nodejs Buffers are not part of the configured heap, which is why even though we've
set the maximum heap size to under 40mb, in some cases, the rss of Valetudo grew to over 100mb, which then caused some
robots to go out of memory.
For some reason, the garbage collector simply doesn't care about old and unused Buffers even if the memory pressure rises.
Therefore, for now, we're forcing a manual garbage collection if the memory usage seems odd.
This significantly improved the stability on the S5 Max and is now enabled for all builds.
Still, I'd recommend choosing the lowmem build for 256mb ram roborock robots.
UI
Stuff such as Virtual Walls will now snap to reasonable angles on creation so that you don't get virtual walls that are infuriatingly almost straight but not quite.
Musl
Thanks to recent changes in vercel/pkg, the nodejs base binaries used are now statically linked against musl instead of glibc,
which apart from being neat enables us to drop the DNSHack.
Also, we've upgraded the runtime to Node v14.16.1
Dreame Support
The Dreame 1c support has been greatly improved thanks to the help of @FrankZZ
Public root coming soon™
Autogenerated changelog
Features
- core: Collect our own garbage (3c3df9a)
- core: MapSegmentRenameCapability (6371291)
- MockRobot: add GoToLocationCapability and MockMap (2957e25)
- MockRobot: add MapResetCapability (531498b)
- MockRobot: Add MockCarpetModeControlCapability (#759) (5bd5fb7)
- MockRobot: Add MockConsumableMonitoringCapability (6d8b8e0)
- MockRobot: Add MockDoNotDisturbCapability (f85194c)
- MockRobot: Add MockWifiConfigurationCapability (accba05)
- MockRobot: add PersistentMapControlCapability (f91e8e7)
- MockRobot: Add speaker capabilities (12d1a27)
- mqtt: Add MapSegmentationCapabilityMqttHandle (#842) (0534888)
- mqtt: Add vacuum error state description property (#850) (14793c7), closes #816
- mqtt: Await MQTT disconnect before proceeding with shutdown (1c0410c)
- mqtt: Provide segment information (f104189)
- mqtt: Remove increase/decrease from intensity capability (#843) (e6fd6e4)
- ui: Add dialog for renaming segments (#772) (306b8ba)
- ui: add Segments on home (2129e22), closes #773
- ui: capitalize robot states in UI (#765) (c988e69)
- ui: Generate consumables list dynamically (#764) (05d658b)
- ui: Snap zones and walls to grid and reasonable angles to implement #796 (25836e8)
- ui: Toggle button states depending on Robot Capabilities (#769) (cc66d52)
- ui: Water Usage Control (cf375ce)
- vendor.dreame: 1C voicepack install support (#795) (b72ca53)
- vendor.dreame: Add Dreame F9 (4fe0ff7)
- vendor.dreame: Add more 1C variants (9e2e194)
- vendor.dreame: Add MOVA Z500 (0107932)
- **vendor.d...