Valetudo Versions Save

Cloud replacement for vacuum robots enabling local-only operation

2021.12.1

2 years ago
valetudo

2021.12.1

Map data format changes, quality of life improvements and bugfixes.

Changes in 2021.12.1

As expected, something would go wrong with the map data format change. This is a bugfix release, so 98% of the previous changelog still apply.

In 2021.12.0, if you have rooms that aren't rectangular, it might happen that the triangle to select it vanishes, leading to you being unable to trigger a segment cleanup using the UI. This happened because in those cases, the UI calculates the median pixel coordinates to properly place the triangle. This value isn't calculated by the backend, because it is an expensive operation, and we're both RAM and CPU-limited there.

To calculate the median, the UI needs the decompressed pixel coordinate format. This works exactly once during the initial render, because of the MapLayerRenderer doing the pixel decompression on the map passed by reference to it.

As soon as the WebWorker is available however, this doesn't happen anymore, as the worker only receives a copy of the data. This means that there are now 0 pixels as far as the SegmentLabel is concerned, leading it to be placed at coordinates [NaN,NaN]. Since testing is done locally without constant map updates, everything seemed fine during development.

Another thing discovered due to this bug was that the GithubValetudoUpdateProvider did not filter out pre-releases or drafts. Not a big issue though as it just requires you to update twice in a row.

Anyways, on with the 2021.12.0 changelog:

Map data format changes

This release features the first version increment of the ValetudoMap data format. Initially, in version 1, pixel data such as walls or floor were stored as a huge array of coordinate pairs: [x0, y0, x1, y1, ...]. This was not a very efficient way of storing that data as most of it is redundant.

This resulted in map files that were over 1 MiB in size being pushed to your browser every 3 seconds.

To combat this, some thought was put into how the data is stored. If you have a row of pixels, all of them will have the same y-coordinate, meaning that you only have to store that once. People already figured that out in the 60s.

With Map V2, pixels are stored as [xStart0, y0, count0, xStart1, y1, count1, ...] where [xStart, y] is the starting point and count represents additional pixels with the same y-coordinate to the right.

This resulted in V2 map files using between 5% and 15% of the size of the equivalent V1 map. The huge testfile map for example was compressed from 847 kB to 75 kB.

While this is a breaking change, the breakage actually isn't that big of a change as V2 can easily be converted back to V1. In fact, running JSON.parse() on a V2 map and then converting it to a V1 one in memory is more than twice as fast as running JSON.parse() on a V1 map.

Since this change drastically reduces the traffic caused by live maps, I expect to see general usability and reliability improvements in situations where the Wi-Fi reception isn't that great.

LogViewer

The LogViewer has been greatly improved and now features a structured and color-coded view of your log.

You can use the text filter at the top to either filter for the loglevel or the message contents. Just start typing.

UI Help

Both consumables and timers now feature a help button, which shall explain how to use these features.

Misc

  • Map reset on newer roborock models should now be fixed thanks to @supersmile2009
  • Zooming the map should now work much better if you zoom via a touchpad or trackpoint instead of a mousewheel
  • MQTT current statistics now have a unit_of_measurement in HA
  • Lowmem builds now have a reduced map poll rate to reduce memory pressure
  • Valetudo now manages its logfile size to prevent it from growing indefinitely

Autogenerated changelog

Features

  • logger: Automatically clear the logfile when it gets too large (c0698b4)
  • Reduce map polling interval for lowmem hosts (fcf94ce)
  • ntpClient: Improve log messages (8880bbf)
  • ui: Add help button + modal to consumables view (d1388f1)
  • ui: Add timers help (c864170)
  • ui: Implement LogViewer component (1b96ae0)
  • ui: Remove obsolete about > github release info (253d9f9)
  • ui: Swap Manual control cw & ccw rotation button (44eab06)

Bug Fixes

  • ui: Automatically refresh the updater state (596dc06)
  • ui: Transparently decompress the v2 map data in the api client (0bcb974), closes #1262
  • updater: Ignore github release drafts and prereleases (ad97a14)
  • ui: Try avoiding bright flashes on initial loading (f84a51d)
  • Fix log sse endpoint (fd6f0e2), closes #1256
  • mqtt: Fix unit_of_measurement for current statistics and consumables (7f052dc)
  • ntpClient: Delay initial ntp sync to wait for valetudo to start up properly (727af04)
  • ui: AppBar and menu should not be user-selectable (69754b7)
  • ui: Cleanup unused code (c050940)
  • ui: Fix map zoom behavior for trackpoint and trackpad scroll zoom (ca94600)
  • ui: Updater changelog should stay in its constraints (5d815bf)
  • updater: Ensure that there is enough space besides process.argv0 to store the new binary (c298e98)
  • vendor.dreame: Fix wrong segment iteration count (9fd9c17)
  • vendor.dreame: There are actually no firmware limits for virtual restrictions (8a8b536)
  • vendor.roborock: Fix resetting incomplete map on Roborock. Detect and reset current map slot. (#1252) (ba86057)
  • Fix CurrentStatistics UI refresh (93249ad)
  • ui: Fix LogViewer overflow-wrap (4799027)

2021.12.0

2 years ago
valetudo

2021.12.0

Map data format changes, quality of life improvements and bugfixes.

Map data format changes

This release features the first version increment of the ValetudoMap data format. Initially, in version 1, pixel data such as walls or floor were stored as a huge array of coordinate pairs: [x0, y0, x1, y1, ...]. This was not a very efficient way of storing that data as most of it is redundant.

This resulted in map files that were over 1 MiB in size being pushed to your browser every 3 seconds.

To combat this, some thought was put into how the data is stored. If you have a row of pixels, all of them will have the same y-coordinate, meaning that you only have to store that once. People already figured that out in the 60s.

With Map V2, pixels are stored as [xStart0, y0, count0, xStart1, y1, count1, ...] where [xStart, y] is the starting point and count represents additional pixels with the same y-coordinate to the right.

This resulted in V2 map files using between 5% and 15% of the size of the equivalent V1 map. The huge testfile map for example was compressed from 847 kB to 75 kB.

While this is a breaking change, the breakage actually isn't that big of a change as V2 can easily be converted back to V1. In fact, running JSON.parse() on a V2 map and then converting it to a V1 one in memory is more than twice as fast as running JSON.parse() on a V1 map.

Since this change drastically reduces the traffic caused by live maps, I expect to see general usability and reliability improvements in situations where the Wi-Fi reception isn't that great.

LogViewer

The LogViewer has been greatly improved and now features a structured and color-coded view of your log.

You can use the text filter at the top to either filter for the loglevel or the message contents. Just start typing.

UI Help

Both consumables and timers now feature a help button, which shall explain how to use these features.

Misc

  • Map reset on newer roborock models should now be fixed thanks to @supersmile2009
  • Zooming the map should now work much better if you zoom via a touchpad or trackpoint instead of a mousewheel
  • MQTT current statistics now have a unit_of_measurement in HA
  • Lowmem builds now have a reduced map poll rate to reduce memory pressure
  • Valetudo now manages its logfile size to prevent it from growing indefinitely

Autogenerated changelog

Features

  • logger: Automatically clear the logfile when it gets too large (c0698b4)
  • Reduce map polling interval for lowmem hosts (fcf94ce)
  • ntpClient: Improve log messages (8880bbf)
  • ui: Add help button + modal to consumables view (d1388f1)
  • ui: Add timers help (c864170)
  • ui: Implement LogViewer component (1b96ae0)
  • ui: Remove obsolete about > github release info (253d9f9)
  • ui: Swap Manual control cw & ccw rotation button (44eab06)

Bug Fixes

  • ui: Try avoiding bright flashes on initial loading (f84a51d)
  • Fix log sse endpoint (fd6f0e2), closes #1256
  • mqtt: Fix unit_of_measurement for current statistics and consumables (7f052dc)
  • ntpClient: Delay initial ntp sync to wait for valetudo to start up properly (727af04)
  • ui: AppBar and menu should not be user-selectable (69754b7)
  • ui: Cleanup unused code (c050940)
  • ui: Fix map zoom behavior for trackpoint and trackpad scroll zoom (ca94600)
  • ui: Updater changelog should stay in its constraints (5d815bf)
  • updater: Ensure that there is enough space besides process.argv0 to store the new binary (c298e98)
  • vendor.dreame: Fix wrong segment iteration count (9fd9c17)
  • vendor.dreame: There are actually no firmware limits for virtual restrictions (8a8b536)
  • vendor.roborock: Fix resetting incomplete map on Roborock. Detect and reset current map slot. (#1252) (ba86057)
  • Fix CurrentStatistics UI refresh (93249ad)
  • ui: Fix LogViewer overflow-wrap (4799027)

2021.11.1

2 years ago
valetudo

2021.11.1

Bugfixes, polishing, two minor breaking changes and new features. Don't forget: If you're running Valetudo 2021.11.0, you can now use the integrated updater :)

UI

Polishing

  • Controls in the UI were slightly rearranged/reworked.
  • The mobile controls drawer now works slightly different and more importantly more reliably with better performance (+ 50kb less bundle size).
  • There's a neat loading splashscreen, which you should only see for longer than a second if your Wi-Fi sucks

image image

Provisioning

The UI now checks if the robot is connected to a Wi-Fi network and if not opens a special provisioning page. It's pretty neat and also fixes the issue of Dreames not being provisionable with the new UI.

image

Backend

CurrentStatisticsCapability

Statistics related to the current (or most recent) operation of the robot are now back. Yes, they are also being published to MQTT. Stop asking.

Data is published to MQTT as machine-readable (seconds for runtime, cm² for the area) as it is meant to build automations with it. Using cm² instead of m² saves us from having to deal with floats.

TotalStatisticsCapability

More importantly, you can now get total statistics from your robot.

Depending on your model those can be

  • Total operation count
  • Total runtime
  • Total area

This isn't available via the UI yet as it is yet TBD how to do that. Maybe have like badges, achievements or a rank system? Maybe have random trivia related to the numbers? (e.g. having cleaned 0.0001% of the Saarland)

Feel free to leave your input in the comments. Like, subscribe and click the bell icon If you're good with graphics design, something like e.g. a Corporal IV vacuum robot badge would be a great contribution.

Zeroconf hostname changes

By actually reading the relevant RFCs, we've discovered that valetudo_something.local is not a valid bonjour hostname as the _ is illegal. While it does seem to work in most setups, it might cause problems in some, which is why starting with this release, Valetudo will use an RFC-compliant hostname: valetudo-something.local.

Please update your bookmarks if you were using any.

MQTT

Home Assistant 2021.11 MQTT Changes

Valetudo 2021.11.1 makes use of new features introduced in Home Assistant 2021.11 (namely configuration_url and entity_category). This means that Home Assistant >= 2021.11 is now required if you want to use it with Valetudo.

You might also have to delete your Valetudo device in HA and let it get rediscovered so that the changes are applied properly.

It now looks like this:

image

Possible MQTT OOM fixes

We have received unconfirmed, unsubstantiated and possibly falsified reports of Valetudo going OOM related to Wi-Fi connectivity issues and the MQTT interface.

To combat this, Valetudo now drops any outgoing MQTT message if there are more than 1 MiB of outgoing messages buffered. This may or may not ever happen. If you see a warning in your log related to this, please report back. I have not been able to reproduce this.

Homie Consumables

Home consumable durations are now reported as an int. This should fix issues with OpenHab.

Bugfixes

Dreame paths

Dreame paths now parse to multiple path map entities instead of a single one, which fixes the visual with lines going straight across the map connecting the previous path to the next one. Consumers of the Valetudo map data might have to be updated to properly display multiple path entities.

I've bought a Dreame 1C to do some QA, which led to a few fixes. I'm now quite happy with the current state of its implementation in Valetudo.

Autogenerated changelog

Features

  • core: CurrentStatisticsCapability (8e4e183)
  • core: CurrentStatisticsCapability & TotalStatisticsCapability properties (4fc9df2)
  • core: Introduce ConsumableMonitoringCapability properties and remove mqtt consumables hack (a998ee1)
  • core: TotalStatisticsCapability (55b6696)
  • MockRobot: Add MockCurrentStatisticsCapability + fix MockConsumableMonitoringCapability (bda0b1a)
  • mqtt: Homie consumables should always be int (c39ad93)
  • mqtt: Limit outgoing message buffer size to prevent OOM situations (1a74f91)
  • mqtt: Publish current statistics to mqtt (102a078)
  • ui: Add Valetudo loading splash (a7ca33c)
  • ui: Collapse preset selection controls (4f8aaec)
  • ui: Display current statistics (0fbc182)
  • ui: Slightly decrease required zoom level for segment label text (08209a3)
  • vendor.dreame: Total and current statistics for the 1C (c1a51e9)
  • Provision Wizard thingy (a6f6ded)
  • ui: Reorder state display (828e54d)
  • ui: Replace bottom sheet with simpler mobile controls (17ff7ec)
  • vendor.dreame: DreameCurrentStatisticsCapability (656a19e)
  • vendor.dreame: DreameTotalStatisticsCapability (4bb9342)
  • vendor.roborock: RoborockCurrentStatisticsCapability (93aa77b)
  • vendor.roborock: RoborockKeyLockCapability (#1222) (02e155c)
  • vendor.roborock: RoborockTotalStatisticsCapability (e0cbbff)
  • vendor.viomi: ViomiCurrentStatisticsCapability (9dd1091)
  • webserver: Add 404 page (8f5095c)

Bug Fixes

  • mqtt: Attempt to mitigate problems related to connectivity issues (cf0f2d6)
  • mqtt: homie.durationsAsInteger should not be a breaking change (bbd918a)
  • ui: Align preset selection labels with icons (c6803f6)
  • ui: Attachment buttons should be disabled (922572a)
  • ui: Fix CurrentStatistics trying to map something that isn't an array (4d6f3d8)
  • ui: Fix mobile control scrolling (6264400)
  • ui: Only check for provisioning once (6bd0480)
  • ui: Only regular mouse clicks should interact with the map (d452d88)
  • ui: Preset selection labels should not be user selectable (965a061)
  • ui: Swap presetSelection open/close icons (380109b)
  • ui: The whole controls body should not be user-selectable (861f15f)
  • vendor.dreame: 1C shall ignore persistent map property updates (5744346)
  • vendor.dreame: Assume that we're in the docked state if we're charging on the 1C (c73e062)
  • vendor.dreame: Fine-tune 1C manual control (72614e2)
  • vendor.dreame: Fine-tune manual control (cc267c7)
  • vendor.dreame: Fix Dreame1CManualControlCapability (9c85ca5)
  • vendor.dreame: Properly parse path data to multiple paths (e083af2)
  • vendor.dreame: Remove capabilities for models that don't support them (0d6d6ad)
  • vendor.dreame: The 1C does not support multiple iterations for segment cleanups (2d35bd9)
  • vendor.viomi: Fix ViomiPersistentMapControlCapability (#1218) (80d7bb2)
  • Fix LinuxWifiConfigurationCapability not_connected state reporting (25271f2)
  • vendor.roborock: RoborockSpeakerVolumeControlCapability.getVolume() should return a number (32898d1)
  • vendor.viomi: Fix volume control (0269182)
  • webserver: try/catch for SpeakerVolumeControlCapabilityRouter (5cb7c5a)
  • Nested assign configuration defaults + don't persist if there are no changes to persist (b12c452)

2021.11.0

2 years ago
valetudo

2021.11.0

Likely the most important release of the year.

Recap 0.6.1 to 2021.11.0

Apparently, Valetudo 0.6.1 was released only a bit more than a year ago, but tbh it feels like an eternity. So much has changed since then. The iteration speed of the project has been insane in the last months. As we've now finished most if not all of the huge tasks, I expect things to slow down a little.

Here's a quick recap of what happened since 0.6.1:

  • Complete core rewrite to easily support multiple vendors and different robots
  • A proper REST-API documented with Swagger UI
  • Complete MQTT rewrite to support Home Assistant as well as Homie
  • Easy map display in Home Assistant via MQTT and the custom lovelace valetudo map card
  • Complete UI rewrite based on a proper UI framework
  • Support for all relevant features of the robots
  • Support for autodiscovery of Valetudo-enabled robots via mDNS and SSDP
  • Support for Dreame-made robots
  • An android companion app that makes use of said autodiscovery feature
  • Valeronoi: A companion app that generates Wi-Fi signal strength maps using Valetudo
  • An updater functionality
  • Proper docs
  • General polishing. A lot of it

Default new UI

Starting with this release, the new react-based UI introduced by @jomik with large contributions by @ccoors is now the default.

The existing map renderer was ported to react with a few quality of life improvements:

  • You can now specify an iteration count when cleaning segments or zones
  • Layers are now sorted, meaning that walls will always be on top. This solves some visual issues of vSlam-based devices
  • Adding a new zone/virtual wall/etc. will now spawn it in the middle of your viewport
  • Map segment labels now attempt to actually be inside the segment they're for. This fixes issues with cornered hallways. No more stray triangles
  • Editing the map will now refresh your current view instead of navigating back
  • Rendering has been partly moved to a webworker for improved performance

Speaking of navigating back: Given that the new UI is based on a frontend framework including proper routing, we now have a working back button. Amazing!

The only thing not yet available in the new UI is management of Zone and GoTo presets. This will be added later. For now, please navigate to the old UI via the menu and use that.

Screenshots

Phone/Mobile

image image

image image

Tablet/Desktop

image

image

image

Updater

Starting with this release, Valetudo will be capable of updating itself with the press of a button.

This has been a long-requested feature and considering how mature this whole project has become, I decided that it was finally time to actually implement that. As it is implemented now, it uses the GitHub API by default, meaning that I am not able to track you.

There's also no automatic update check, because periodical pings to some cloud service are obviously problematic.
You will decide when to press the "Check for Updates" button and also when to update.

More stickers

I've decided to get a few more stickers printed because merch

image

Misc

I'm currently looking for a job that isn't a corporate hellhole with nice people doing interesting stuff. If you're a likeminded hacker looking for a new colleague or know someone who does feel free to ping me

Thanks :)

Autogenerated changelog

Features

  • ui: Add Valetudo logo to bottom sheet (76eeaff)
  • ui: Bring back the old map renderer (7aa6822)
  • ui: Change map colors according to theme in use (b17745e)
  • ui: Fan speed icon and battery level bar improvements (d0a0671)
  • ui: Improve controls (b678cda)
  • ui: Map Editing (35feb65)
  • ui: Move locate to the map view (32de2b8)
  • ui: Place new client structures in the middle of the viewport (d9d2a64)
  • ui: Remove map transparency (ace000b)
  • ui: Remove obsolete segment controls (9912cf5)
  • updater: Introduce ValetudoUpdaterNoUpdateRequiredState (354028e)
  • Updater (5db2c55)
  • ui: Remove Accordion from interface settings (c4c31bb)
  • ui: Set the new UI as the default (c0f90fb)
  • ui: Use a WebWorker for rendering the map layers when possible (3eafded)
  • ui: Use real swagger icon in sidebar (#1160) (f4c0093)
  • ValetudoEvents: Add Mop Attachment Reminder event (ac268d7)
  • Add nonce to every instance of a Valetudo map (f0489f1)

Bug Fixes

  • Fix MopAttachmentReminderValetudoEvent not being a DismissibleValetudoEvent (302f6ce)
  • mqtt: Fix consumable state attribute data being published multiple times (894bba9)
  • mqtt: Fix zone cleanup (#1130) (bb951b2)
  • mqtt: Hopefully avoid a deadlock (c3313ea)
  • ui: Allow more states for zone/segment cleanup and goto (c738938)
  • ui: Better placement of segment labels (ba788a0)
  • ui: Combinations of scrolling and touch events also should not cause any jank (e36c40f)
  • ui: Fix controls jumping around when there is a status flag (c641fb1)
  • ui: Fix draw order for ControlsBottomSheet (c46ef10)
  • ui: Fix SSE not reconnecting after having closed the connection once (6feaaf8)
  • ui: Further improve segment label placement using the median (6545cc7)
  • ui: Ignore map updates if the tab is invisible (370753d)
  • ui: MQTT port is an integer (#1159) (5b91c96)
  • ui: Postpone map data updates during pan/zoom to prevent jank (92a9147)
  • ui: Postpone map data updates during scroll to prevent jank (adcd117)
  • ui: Prevent issues with zooming on mobile (a5057fd)
  • ui: Use the correct canvas size for the map layer renderer (b55ffa6)
  • ui: Zone dimensions should be based on the pixelSize (b317c85)
  • updater: Fix fallback download location for roborock (d515f04)
  • vendor.dreame: Fix virtual restriction coordinates being not sorted properly (17cc303)
  • vendor.dreame: Ignore error 68 (dd44320)
  • webserver: Allow unsetting names of segments (f992e5a)
  • Use shorter model names (d268013)

2021.10.0

2 years ago
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

wifi config and more

voice pack managementmanual control

more settings

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.

valetudog

I also bought a lot of stickers of it

image

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

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)

2021.09.1

2 years ago
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.

image

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.

image

Timer UI

You can now use the new UI to set up ValetudoTimers.

image

image

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.

image

It features a nice topic preview to make it easier for newcomers to interact with Valetudo via MQTT.

image

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.

image

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.

image

Runtime Information UI

The new UI about section has been extended to display data returned by the runtime information endpoint.

image

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)

2021.09.0

2 years ago
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.

image

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:

image

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)

2021.08.1

2 years ago
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:

image

image

There's a drop-down where you can select a zone preset to clean in the new UI.

image

Futhermore, there's also a button, which lets you set the iteration count for segment cleanups.

image

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)

2021.08.0

2 years ago
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)

2021.07.1

2 years ago
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:

image

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.

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)