Valetudo Versions Save

Cloud replacement for vacuum robots enabling local-only operation

2022.10.0

1 year ago
valetudo

2022.10.0

New Robot, new Firmware, Various UX improvements and MQTT changes

Dreame W10 support

Starting with this release, the Dreame W10 (not-pro!) is supported by Valetudo. Because I got pretty annoyed by the lack of proper mopping robots supported by Valetudo, I've finally just bought one myself to check if it is rootable and suitable for Valetudo.

Turns out: It is. Looks like it always was. We were just misinformed because we never had bought one ourselves due to its pricing and people on the internet told us incorrect information about it. The lesson here is that we absolutely have to buy all robots ourselves or else we go nowhere.

Anyway, rooting is possible with the catch that you will need a new custom PCB to do so. I do have ~250 of them lying here waiting to be soldered and used, however the logistical issue of me getting those to you yet remains to be solved.

Dreame D9 Pro firmware backport

Because I got pretty annoyed by the lack of firmware updates for the D9 Pro, I've finally just bought one myself to check if I can do anything about it.

It seemed pretty wrong that the older D9 has a recent 2022 firmware while the newer D9 Pro is stuck with a firmware from early 2021. Thus, I wondered how different those robots really are and if it would be possible to port the D9 firmware over to it.

Turns out: They're pretty similar but not entirely.

And so with a few changes, you can now upgrade your D9 Pro to a much more recent firmware using the Dustbuilder. Gone should be the days of the robot bumping into everything and its map slowly deteriorating over time.

You're welcome :)

image

Reminder: Do not try to install a regular D9 firmware on your D9 Pro. It will brick your robot. You absolutely need to select the customized D9 Pro version in the dustbuilder.

MQTT

This release features a few MQTT improvements.

Optional exposed capabilities

Valetudo's MQTT client has gotten a bit more flexible with this release.

To avoid additional load and traffic for features that aren't required in 90% of setups, not every capability is exposed to MQTT. This unfortunately meant that 10% of people had to also use the REST API to solve their automation needs.

image

With optional exposed capabilities, it is possible to cater to those needs without polluting the MQTT broker of people that don't require the functionality. For now, the only option to select is the SpeakerVolumeControlCapability. Others may follow if someone makes a solid case for why it should be controllable via MQTT.

image

Please only enable optional exposed capabilities that you actually plan on using as each additional one adds system load due to periodic polling.

Improved MQTT Errors

The error mapping improvements that have been implemented in the last release are now also being published to MQTT.

It should make building reliable automations based on the error state much easier

Please note that this could be a breaking change if you've hardcoded the MQTT error topic somewhere. Users of Home Assistant should not notice anything changing as the autoconfiguration payload change should take care of everything.

If you've created automations based on the value of the error topic, this will be a breaking change for those as well.

Better map integration instructions

The process of getting the Valetudo Map into Home Assistant always has been challenging for newcomers as it is not straightforward. Therefore, the image displayed in Home Assistant was changed and a new docs microsite was created.

If you navigate to hass.valetudo.cloud, you'll find a step-by-step walkthrough to get the map integrated. Furthermore, there is also an explanation why things are that complicated.

UX Improvements

The Mop Attachment Reminder event now gets dismissed automatically when you detach the Mop Attachment from the robot.

If the user attempts to start a full cleanup after selecting something in the map view, they will now see a warning dialog.

The Wi-Fi configuration settings are now hidden and replaced by an info box if the robot does not support reconfiguration while provisioned.

Operation Mode Control

This release features support for changing the operation mode of the robot.

image

This enables you to e.g., tell your new W10 that it should only mop.

More error code mappings

After staring at Ghidra for a while, I've managed to discover the meaning of a few more hardware error codes of dreame robots. Furthermore, roborock hardware error code mappings were updated as well.

The usual

As you've seen at the beginning of these release notes, we do have to buy all robots ourselves if we want stuff to happen.

Thus, if you want to see Valetudo on more robots and/or like this release, you might want to consider donating if you haven't done so already:

https://github.com/sponsors/Hypfer

https://builder.dontvacuum.me/donations.txt

Autogenerated changelog

Breaking Changes

  • mqtt: Provide better error information da6994a

Features

  • vendor.dreame: Newer 1C firmwares do seem to support no mop zones a06a86d
  • vendor.dreame: Operation mode control aefa436
  • vendor.dreame: D9 Pro+ special edition support ffbcb73
  • vendor.dreame: Mop Stuff 0081cba
  • ui: Allow configuration of optional exposable capabilities for mqtt 3f31186
  • mqtt: Introduce optional exposed capabilities starting with the SpeakerVolumeControlCapabilityMqttHandle 685227b
  • vendor.dreame: Initial support for the W10 6da6556
  • ui: Warn the user when attempting to start a full cleanup with a MapAction pending bc6a4ce
  • ui: Add current browser timezone hint to timer timePicker 892cc09
  • vendor.dreame: Automatically dismiss the MopAttachmentReminderValetudoEvent on Mop detachment 19f96a2
  • mqtt: Update wrapper image to point to docs microsite 67f600a
  • vendor.dreame: Map some internal error codes c9bc1b8
  • vendor.roborock: Add hardware fault error code mappings 19ce6aa

Fixes

  • vendor.dreame: Fix generational differences in operation mode mapping 8b6643c
  • vendor.dreame: 1C error codes might occasionally be numbers 93fdfb9
  • Hide non-functional Wi-Fi configuration editor if not supported fbcfd47
  • vendor.dreame: Handle carpet information in maps d1ad1af
  • ui: Strip even more characters that home assistant doesn't like from all mqtt topic building blocks 5877381
  • vendor.dreame: Voicepack hash must be lowercase 0deff82
  • ui: Weekday order should be ISO 8601 compliant 3c884f5

Refactoring

Chores

  • release: 2022.10.0 dd49ecc
  • mqtt: Minor cleanup d27b189
  • Bump github actions to setup-node@v3 4dbb745
  • bump upx dependency 38fb6e4
  • Revert axios bump due to broken builds c3de7e5
  • Bump dependencies cefd3a7
  • webserver: Minor data validation cleanup 263774b
  • vendor.dreame: Ignore irrelevant POST_CHARGE_CONTINUE update on initial root 0fdec0c
  • Docs update a96501f
  • mqtt: Update wrapper image cd3b75f

2022.09.0

1 year ago
valetudo

2022.09.0

An interesting newly supported robot plus security and usability improvements

Dreame P2148 Ultra Slim

Thanks to generous user donations, I was able to buy a Mijia Ultra Slim Robot to take a look at. As you can see, it is very small, measuring only 5.5cm in height and 32.3cm in diameter. For comparison: The Z10 next to it measures a height of 9.6cm and a diameter of 35cm.

This makes the ultra slim a very interesting robot as it fills a niche that no other supported one did previously. Apart from that, it's a decent vSLAM robot that - thanks to the ToF sensor in the front - doesn't bump into every wall that it can find.

Fortunately it turned out that even the latest available firmware is rootable via the very easy debug UART rooting method :) Thus, there's now support for it in Valetudo.

Unfortunately however, it is a china-exclusive model, meaning that both it and any spare part have to be imported to wherever you live (unless you live in china that is). Because of its size, it also uses completely different consumables than other dreames. Do keep that in mind if you're thinking about buying one.

Nonetheless, I am very happy to have it supported, as it is a proper solution to a problem that previously was unsolvable without outright replacing your furniture. There is simply nothing else like it in the market. Thus, if you've ever wanted to use Valetudo but couldn't as all supported robots were too large for your scenario, then now there's an option for you.

I do want to stress again that this would not have been possible if it weren't for user donations. There simply is no way to pay for all those robots out of our own pocket... especially considering the pricing of some upcoming models and even more so since we'll need at least two of them

Thank you for your ongoing support!

Encrypted Wi-Fi provisioning

One thing that slightly annoyed me for a long time now was the fact that Wi-Fi provisioning was done via an unencrypted connection over an unencrypted Wi-Fi Access Point, meaning that anyone passively sniffing Wi-Fi traffic during the provisioning process could've in theory gained access to your Wi-Fi credentials.

To solve this unlikely scenario, the Valetudo frontend now requests an RSA-Key from the backend and encrypts the provisioning payload with it, before it is sent over the Wi-Fi. This slight improvement in security does not prevent MITM-attacks, however that wasn't ever the goal to begin with as those are even less plausible than the passive Wi-Fi sniffing attack.

If you want to know more about the reasoning behind this, feel free to take a look at this very extensive code comment further explaining things.

Usability improvements

Larger ClientStructure hitboxes

It should now be easier to interact with the map on mobile as the hitbox size of various things has been increased.

Robot Coverage map

Based on user feedback, the coverage map now renders the coverage and the robots' path.

Map Data Export Button

There's now a button that allows the user to download a ValetudoMap JSON e.g., for use with the ValetudoMap to Minecraft Map converter. Previously, users had to manually call the REST API route and save the JSON.

MQTT resubscribe workaround

In some setups with MQTT brokers that don't have any persistence enabled, a broker restart or a loss of connectivity could lead to Valetudo not reacting to any MQTT commands anymore as all subscriptions were gone. It would still continue publishing status updates though, leading to even more confusion.

This issue should now be solved.

Swagger UI

The Swagger UI now only displays routes that are supported by the currently running ValetudoRobot implementation.

Quality improvements

  • Errors have been refactored to have a proper place in the abstraction
  • The updater has been refactored
  • Binaries are now 1MB smaller due to the removal of irrelevant sourcemaps

The usual

If you want to see Valetudo on more robots and/or like this release, you might want to consider donating if you haven't done so already:

https://github.com/sponsors/Hypfer

https://builder.dontvacuum.me/donations.txt

Autogenerated changelog

Features

  • ui: ValetudoMap data export button f1aea85
  • vendor.dreame: Add support for the P2148 Xiaomi Mijia Ultra Slim 22419f4
  • Encrypted Wi-Fi provisioning 2b6dd04
  • Classify robot errors e8715cb
  • vendor.dreame: Add mop dock error code mapping 6179e19
  • webserver: Filter openapi spec to only display endpoints supported by the implementation in swagger ui 3ab4033
  • ui: Improve coverage view 4ac2928
  • ui: Improve map interaction by allowing for slightly misaligned clicks/taps 6e87ba3

Fixes

  • mqtt: Fix resubscribe on broker restart be33e12
  • vendor.dreame: Remove confusing MCU version logline 4c21394
  • miio: Correctly update our stamp ee6a60d
  • vendor.dreame: Remove broken mop only quirk dbbd0f0
  • vendor.dreame: Fix wrong quirk description afac067
  • vendor.dreame: Ignore another useless piid on the 1C 922aece
  • http.ServerResponse.socket can occasionally be null 03d22dc

Refactoring

  • miio: Code cleanup 81809f1
  • updater: Break updater up into multiple files b9bcbe3
  • vendor.dreame: Change implementation name to something pronounceable b198b10
  • ui: Reduce duplicate code in map structures and improve readability 4f05dcd

Chores

  • release: 2022.09.0 8e3c889
  • remove body-parser in favor of built-in feature (#1568) 4ee0004
  • Misc promise handling cleanup 278ba6e
  • Remove obsolete code + comments 7de1590
  • ui: Disable source maps for production builds to save 1mb compressed total binary size 2a11a82
  • Minor cleanup e0a0800

2022.08.0

1 year ago
valetudo

2022.08.0

New firmwares for dreame robots and some bugfixes

New dreame firmwares

It took quite a lot of time and work, but now we're proud to announce that we've managed to get newer dreame firmwares to work rooted and with Valetudo. A big thank you to everyone who helped during the beta test!

Important: That does not mean that these newer firmwares have become rootable. You will need to have an already rooted robot to install these latest rooted firmwares.

To update, head over to the dustbuilder at https://builder.dontvacuum.me/ to build and install a new image. Make sure to update Valetudo before updating the firmware.

Other dreame news

Starting today, every firmware image built with the dustbuilder will contain a fix for the vanishing Valetudo issue, which occasionally left people with a rooted robot but no Valetudo.

If a user starts a new mapping pass, the fresh map should now appear instantly. Furthermore, issues with frozen maps either during cleanups or when editing segments were fixed as well.

Robot Coverage View

The UI has been extended with a view displaying a much thicker path. This can be used to better see which areas of the map have been cleaned.

Whether this view will stick around long-term is yet to be decided. It was pretty easy to implement though. Feel free to leave your feedback in the comments.

The usual

If you want to see Valetudo on more robots and/or like this release, you might want to consider donating if you haven't done so already:

https://github.com/sponsors/Hypfer

https://builder.dontvacuum.me/donations.txt

Misc

This changelog features artworks generated by DALL-E 2 because I thought it would be neat to have something to look at. Unfortunately, it doesn't like generating artworks featuring lidar-based vacuum robots (yet?)

I hope they've nonetheless enhanced your changelog reading experience. Feel free to leave feedback on that as well.

Autogenerated changelog

Features

  • vendor.dreame: Newer D9 Firmwares also have a sensor consumable 17c0d27
  • ui: Trim whitespaces when renaming segments 39d72f4
  • ui: Add robot coverage map a9661a0
  • vendor.dreame: Add mop-only quirk for newer firmwares a33afe3
  • vendor.dreame: Add Mop Dock UV-C Toggle Quirk 7ce4abe

Fixes

  • vendor.dreame: Add support for more features of newer firmwares b74c281
  • ui: Add margin to apple touch icon (#1526) dc72ef0
  • vendor.dreame: Ignore empty maps 99aad7b
  • networkadvertisement: Don't crash the process on ssdp multicast membership errors bfb96c0
  • miio: Allow two simultaneous FDS uploads 6e26374
  • vendor.dreame: Switch to async map preprocessing to not block the event loop 3b5743b
  • miio: Further improve fds upload timeout handling 8c1ba9e
  • miio: Gracefully handle connectivity issues when receiving fds uploads 8aab94f
  • vendor.dreame: Ignore timezone update message 5ecf7fa
  • ui: Allow sending home basic control command while paused 0dfb4ba
  • vendor.dreame: Fix maps for newer firmwares 5f67103
  • webserver: Fix openapi schema for MapSegmentEditCapability f106735

Refactoring

  • webserver: Response cleanup 839310a
  • webserver: Actually make use of the openapi schema validation 6e2d2e1
  • Introduce RobotFirmwareError and refactor CapabilityRouter for unified error logs 1d2ad47

Chores

2022.06.0

1 year ago
valetudo

2022.06.0

Another maintenance release featuring upgraded dependencies, refactoring and some bugfixes

Bonjour/mDNS fixes

Users can now discover multiple robots of the same model in their home network:

Apparently, the Bonjour service name needs to be unique or else some bonjour implementations will deduplicate it. Because of this, the companion app only displayed one robot even though there were multiple ones on the network.

Nightly build enhancements

The nightly update provider will now display a changelog of all changes since the last release.

You can switch to the nightly update provider by changing the updater.updateProvider.type in your valetudo_config.json to github_nightly. Please keep in mind that nightly builds might be unstable. They should only be used by people that know what they're doing and are willing to handle occasional breakage.

UI Improvements

Multiple issues that caused the live map to stop refreshing have been fixed.

Checking back on the Valetudo UI after having it in a background tab for a while during a cleanup will now display the latest map data. Also, running Valetudo behind a flaky reverse proxy should not interfere with the SSE connection anymore.

Boring chores

This release features plenty of dependency upgrades, the migration to create-react-app 5 and more. It also contains a lot of refactorings that should further improve the code quality.

While all that doesn't offer any directly noticeable benefits to the user, it is worth noting nonetheless, as keeping the project well-maintained is vital to its longevity.

The exciting stuff will hopefully happen later this year :-)

Apart from code changes, I've been busy figuring out how to build statically linked recent versions of common tools that might be added to our robot firmware images. It's all done using dockerfiles to make it easy to understand, document and reproduce. Interestingly, information on the internet do to just that is rather sparse so this might also be useful to someone with a different embedded use-case.

You can find that stuff here: https://github.com/Hypfer/valetudo-misc If you're missing a tool there please let me know

Other news

As mentioned in the previous release notes, we're currently still pretty busy figuring out how to root new robots and/or firmware versions. Since that worked well in the past, I shall continue mentioning it here.

If you want to see Valetudo on more robots and/or like this release, you might want to consider donating if you haven't done so already:

https://github.com/sponsors/Hypfer

https://builder.dontvacuum.me/donations.txt

Autogenerated changelog

The autogenerated changelog generation has been updated to be even better and less of a hassle to use. Enjoy

Breaking Changes

  • timers: Updating timers should be a PUT instead of a POST 9c57f0c

Features

  • updater: Add changelog to nightly update provider 3a874db
  • mqtt: Deduplicate mqtt map data as well 269aa30

Fixes

  • networkadvertisement: Bonjour service names need to be unique 956487e
  • ui: Remove obsolete css statement 6793c67
  • ui: Fix map SSE EventSource not reconnecting on error d84efd5
  • ui: fix circular chunk dependency 271e53c
  • ui: Fix map not properly redrawing on visibility state change bd77d2e
  • utils: hash key instead of value (#1503) bae09ab
  • miio: Fix ERR_HTTP_HEADERS_SENT exception (#1501) a47f3b9
  • vendor.dreame: The STYTJO6ZHM does not feature a watertank 9b75974
  • vendor.roborock: copy statusflag from previous state on state update (#1497) 84de0ef

Refactoring

  • updater: Move type constant to update providers 5ca525e
  • vendor.roborock: Improve logic legibility in ZoneCleaningCapability 560a50e
  • ui: Port map color finder to typescript 6c1b126
  • ui: Make use of webpack 5 and convert the map layer render webworker to typescript d17b66d
  • ui: Port map touch handling to typescript 9548012
  • ui: Do not monkey patch the 2d context of the map renderer 212e4f5
  • ui: Remove unnecessary nullchecks in the map component 96ba8cf
  • vendor.dreame: Improve mop dock settings handling 412a65a
  • miio: Unify previously duplicated map poll code 356d144

Chores

  • release: 2022.06.0 3504a4a
  • Fix nightly changelog generation 2c73de3
  • Minor misc code cleanups 3c3c561
  • More dependency changes 0becd44
  • Delete obsolete Events.js 5176cce
  • Bump dependencies 8ae420c
  • bump GitHub codeql action to v2 643dcc5
  • vendor.dreame: Add documentation on the mop dock settings data format 881f717
  • typo fix 41055d1

2022.05.1

1 year ago
valetudo

2022.05.1

A small incremental release featuring a few UI/UX improvements

MQTT/REST Segment/Zone/GoTo improvements

This release adds an easy way of getting the payload to automate zoned cleanups, segment cleanups and go-to commands via MQTT or REST. Simply set up your zones/select your presets as you'd usually do but instead of just clicking the cleanup button, long-press it, and you will receive a dialog containing the copy-pastable payload for MQTT/REST. ctrl + a also works :)

image

Client Map Structure Visibility

This release adds a shadow to zones drawn onto the map to improve visibility especially when using the light theme.

Before: image

After: image

Furthermore, NoGoAreas and VirtualWalls now are slightly less transparent to improve visibility on orange segments.

Map Crispness

At some point for some reason, the map renderer canvas lost the image-rendering: crisp-edges css property, which caused occasional blurry maps.

This has been fixed. We can now all again enjoy crisp edges :)

Uncrisp edges: image

Crisp edges: image

Node V18

The base binaries have been upgraded to the latest NodeJS v18.1.0. They're also now built with -Os, which decreased our binary size by a few percent.

Other news

As mentioned in the previous release notes, we're currently still pretty busy figuring out how to root new robots and/or firmware versions. Since that worked well the last time, I shall continue mentioning it here.

If you want to see Valetudo on more robots and/or like this release, you might want to consider donating if you haven't done so already:

https://github.com/sponsors/Hypfer

https://builder.dontvacuum.me/donations.txt

Autogenerated changelog

Features

  • ui: Get payload of segment/zone cleanup via long-press (52731bf)
  • vendor.roborock: Add support for the M1S (f234925)

Bug Fixes

  • miio: Limit the maximum fdsUpload filesize (c1de1c5)
  • miio: process _async.stat, _otc.ncstat and _otc.ncinfo messages (#1488) (7cf1fe9)
  • ui: Add shadow to some client structures for better visibility (d4e7f83)
  • ui: Fix map crispness (e55a5dc)
  • ui: Improve visibility of red virtual restrictions on orange segments (797143a)
  • Work around Node v18 breaking os.networkInterfaces (226dae1)
  • vendor.roborock: copy metadata from previous state on state update (#1489) (6ecc76b)
  • vendor.roborock: Ignore event.fan_power_reduced (c56e7a2)
  • vendor.roborock: Multiple fixes for Mijia 1S (#1485) (c66798d)

2022.05.0

1 year ago
valetudo

2022.05.0

Spring-cleaning 2022: Usability improvements, bugfixes and the removal of zone/goto presets + the old UI

Zone/GoTo Preset removal

Valetudo 2022.05.0 removes the Zone Preset/GoTo Location feature that has been deprecated since more than six months now.

As a replacement for this feature, the MQTT interface now accepts coordinates instead of preset IDs. Thus, users can just change the place where they store their coordinates from the Valetudo config file to e.g., the Home Assistant config files.

Please head over to the MQTT docs to find out how to use it. It's the same payload that is used by the REST API. No surprises there.

If you're unhappy and/or like to know more about why this change was done, feel free to click on this spoiler
Feature removal is delicate topic, since there always will be at least one person that is very upset and unhappy with whatever change was done to a project. See also: XKCD 1172.

Still, it has to be done once in a while to keep a clean codebase and focus on what is most important. Without these kinds of cleanups, projects eventually grow to a point when they start suffocating under their own weight.

If you've ever worked with larger legacy enterprise codebases, you should understand the issue. They tend to be torn apart by

  • legacy features/behaviour having to stay like they are for existing customers/long-running support contracts

and

  • management, sales and the market in general demanding newer features that no one could ever have predicted previously

See also this anecdote on Oracle 12.2 found on Hackernews.

As avid listeners of my ramblings have likely been aware, I've been very unhappy with that preset feature for more much more than just half a year now. It was always a very fragile feature to begin with, given that Valetudo itself would store these coordinates without knowing anything about the underlying map. The robot might've decided to rotate the map, leading to them pointing to a completely different location without Valetudo being able to catch that.

At the time when it was added, it was the best we had, given that map segments simply weren't invented just yet. We didn't even have persistent maps, which is very strange to look back to.

That however was almost four years ago. Since then, the market changed a lot as you can tell. Basically every robot now supports not only persistent maps but also the map segmentation, which is handled by the firmware and not Valetudo. Those are objectively superior to some rectangles that are drawn onto the map, which is why it was finally time to remove this hack.

I know that this may be bad news for V1 owners who do not have segments support and also don't want to use something like Home Assistant. However, I'd like to point out that there is nothing forcing anyone to upgrade to a newer Valetudo version. There is no automatic update check that periodically annoys the user. There is no cloud that will change its API. It just works and will continue to do so.

Therefore, for those who want to continue using zone presets and goto locations, it is recommended to stick with Valetudo 2022.03.1. It also shouldn't be too hard to backport changes to that version. I however simply can't provide that kind of support. I hope that you will all understand that.

Removal of the old UI

With the presets gone, we can finally remove the old frontend entirely, which reduced the binary size by around 1MiB. While this doesn't sound like much given that it's "only" 3%, it's important to note that currently, 24MiB of the armv7 build consist of the bundled nodejs runtime. This means that with this update, the size of Valetudo itself shrunk by 15%!

UI improvements

The menu opening thingy of the mobile UI now always stays at the bottom of the screen to improve user experience when using long phones.

image

The live map now renders virtual restrictions with more opacity and less bright colors as they were pretty obstructive previously. The edit map remains unchanged.

image

The log viewer now uses the jetbrains mono font.

image

Attachments

Your robot will now only report and display attachments whose state it is able to track. No more always attached dustbins confusing users.

Companion apps

Over the last weeks, a few new companion applications were built:

  1. valetudo-tray-companion

    A tray icon that allows easy access to Valetudo instances on your network. It's mostly handy when dealing with 4+ robots

  2. valetudo-helper-miioota

    A standalone all-in-one firmware update flasher tool for roborock v1 and s5. The docs have been updated to suggest using it

  3. valetudo-helper-httpbridge

    A standalone self-contained utility webserver currently most useful for rooting dreames. The docs have been updated to suggest using it

  4. valetudo-helper-miio

    A standalone self-contained utility to send raw miio commands. Useful for development of valetudo or other software interacting via miio

  5. valetudo-helper-voicepacks

    A WIP tool to help with Voicepacks

These should make installation and usage of Valetudo even easier than before.

Other news

We're currently pretty busy figuring out how to root new robots and/or firmware versions. These endeavors are partly funded by your donations. Thank you!

If you want to see Valetudo on more robots, you might want to consider donating:

https://github.com/sponsors/Hypfer

https://builder.dontvacuum.me/donations.txt

Autogenerated changelog

Features

  • mqtt: Provide attachment state attributes autodiscovery for home assistant (b7b6344)
  • ui: Improve mobile controls for long screens (f7f3f0d)
  • ui: Reduce live map obstructions caused by virtual restrictions (ddec0b3)
  • ui: Use JetBrains Mono (5a7045c)
  • vendor.dreame: 1C PendingMapChangeHandling (1b2f3bf)
  • vendor.dreame: Add support for the STYTJO6ZHM (519c5b4)
  • vendor.viomi: Fetch and display firmware version (7f08743)
  • vendor.viomi: Raise zone count limit to 10 (8130e24)
  • Provide list of attachments supported by the model of robot (fe65df3)

Bug Fixes

  • mqtt: MqttController default state should be disconnected (137e630)
  • networkadvertisement: Disabling the Network advertisement multiple times in a row should not cause any issues (789608f)
  • ui: Allow closing of ValetudoEvents even if there are a lot (ec599b2)
  • ui: Fix auto empty dock control loading state (7ec1e5d)
  • ui: Handle timers with invalid actions (b467443)
  • ui: use correct relative paths to allow hosting in a subdirectory (6129ec5)
  • vendor.dreame: Fix 1C powersave state mapping (fdb51e7)
  • vendor.roborock: Don't update state for attachments that we don't have (f27bbfd)
  • vendor.roborock: Fix manual control for roborock v1 (abccee4)
  • vendor.roborock: Fix obnoxious "no error" error event (f3b4a54)
  • vendor.roborock: Remove confusing attachments that never get updated (e4274d3)

2022.03.1

2 years ago
valetudo

2022.03.1

Ordered segment cleanups via the UI, MQTT deduplication and a lot of internal refactoring

Ordered segment cleanup

The UI now tracks the order in which segments were selected, meaning that if your robots' firmware supports it, they will be cleaned in the order you've specified.

If supported, the order will be displayed as a roman numeral above the segment label triangle.

image

MQTT

The MQTT connectivity feature now reports a state to the UI. Furthermore, it also collects some statistics.

image

By watching those stats, you will notice that this release also causes less traffic, as most outgoing messages are deduplicated.

Initially, I didn't want to do that as the solution proposed was to just store every payload in memory and then compare on each mqtt publish. That would work, however it comes with a hefty ram overhead as you now have to constantly keep 300+ somewhat long string payloads in memory. With each character taking up 2 byte, this approach isn't feasible with the ram budget we have (32 Mbyte or less).

To reduce the amount of ram required, we could use a hash function such as md5, however that would still be too much. As they'd be saved as hex strings, that would mean 32 characters each with each character taking up 2 bytes, resulting in each pair of topic and payload using 128 byte or more.

Thus, instead we're now using 32-bit CRC32. With object keys being strings, I'd think that these pairs should use around 20 byte each. The downside of CRC32 is that the risk of collisions is much higher. However, I highly doubt that that could actually happen in this application.

To save CPU time, which is also quite limited on our robots, the (in comparison) huge map data is not being deduplicated.

Misc

  • The system information page will now display the current robot firmware version if available
  • The UI will now prevent the user from configuring invalid MQTT topic names (containing spaces, # or +)
  • The UPnP/SSDP lib was dropped in favour of our own implementation, which should fix some unhandledRejections caused by the lib
  • The log viewer now doesn't scroll back down automatically if the user scrolled up
  • TotalStatistics should now also work for the Roborock S7
  • It is now possible to disable network advertisement (bonjour/mDNS and UPnP/SSDP) via the UI if you so desire
  • The nonsensical always-attached dustbin attachment has been removed
  • It is now possible to have 50% more virtual restrictions on roborock robots

Autogenerated changelog

Features

  • ui: Allow setting the order of segments cleaned if support by the robot (9eec3b6)
  • NetworkAdvertisementManager UI control (bd5fa9c), closes #1168
  • core: Remove outdated VirtualWallCapability and RestrictedZoneCapability (5e24783)
  • core: Remove SensorCalibrationCapability (5b081a7)
  • mqtt: Collect runtime metrics and provide them via REST (dcc1db4)
  • ui: Display firmware version if available (e78e9b4)
  • ui: Display MQTTClient status (c54ebc8)
  • vendor.roborock: Support S7 total statistics (d1926a9)

Bug Fixes

  • core: Fix free memory reporting on kernels >= 3.14 (dceea16)
  • miio: Don't throw plain objects on error responses (e84fe8c)
  • miio: Fix RetryWrapper never handshaking on stale stamp (326cb4b)
  • mqtt: Deduplicate outgoing messages (b835336)
  • networkadvertisement: Replace ssdp lib with custom implementation (f5e505a)
  • ui: Disallow whitespaces, + and # for mqtt topic customization (8148736)
  • ui: Make the logviewer only auto-scroll if it is already scrolled down (3c24eba)
  • vendor.dreame: Mapping passes can only be done by lidar-based robots (411fab5)
  • vendor.dreame: Re-enable custom order segment cleanups and hope for the best (744a4bb)
  • vendor.roborock: Fix roborock virtual restrictions counting vertices incorrectly (cc5e37b), closes #1423
  • vendor.roborock: Properly parse and handle lab_status and map_status (e158ac4), closes #1424
  • Remove nonsensical always-attached dustbin attachment (b9bd959)
  • SegmentIds should be strings (6325045)
  • SegmentIds should be strings pt2 (a8d314d)
  • ui: Fix customOrder flag for segmentActions (07c5281)

2022.03.0

2 years ago
valetudo

2022.03.0

Ordered segment cleanups via the UI, MQTT deduplication and a lot of internal refactoring

Ordered segment cleanup

The UI now tracks the order in which segments were selected, meaning that if your robots' firmware supports it, they will be cleaned in the order you've specified.

If supported, the order will be displayed as a roman numeral above the segment label triangle.

image

MQTT

The MQTT connectivity feature now reports a state to the UI. Furthermore, it also collects some statistics.

image

By watching those stats, you will notice that this release also causes less traffic, as most outgoing messages are deduplicated.

Initially, I didn't want to do that as the solution proposed was to just store every payload in memory and then compare on each mqtt publish. That would work, however it comes with a hefty ram overhead as you now have to constantly keep 300+ somewhat long string payloads in memory. With each character taking up 2 byte, this approach isn't feasible with the ram budget we have (32 Mbyte or less).

To reduce the amount of ram required, we could use a hash function such as md5, however that would still be too much. As they'd be saved as hex strings, that would mean 32 characters each with each character taking up 2 bytes, resulting in each pair of topic and payload using 128 byte or more.

Thus, instead we're now using 32-bit CRC32. With object keys being strings, I'd think that these pairs should use around 20 byte each. The downside of CRC32 is that the risk of collisions is much higher. However, I highly doubt that that could actually happen in this application.

To save CPU time, which is also quite limited on our robots, the (in comparison) huge map data is not being deduplicated.

Misc

  • The system information page will now display the current robot firmware version if available
  • The UI will now prevent the user from configuring invalid MQTT topic names (containing spaces, # or +)
  • The UPnP/SSDP lib was dropped in favour of our own implementation, which should fix some unhandledRejections caused by the lib
  • The log viewer now doesn't scroll back down automatically if the user scrolled up
  • TotalStatistics should now also work for the Roborock S7
  • It is now possible to disable network advertisement (bonjour/mDNS and UPnP/SSDP) via the UI if you so desire
  • The nonsensical always-attached dustbin attachment has been removed
  • It is now possible to have 50% more virtual restrictions on roborock robots

Autogenerated changelog

Features

  • ui: Allow setting the order of segments cleaned if support by the robot (9eec3b6)
  • NetworkAdvertisementManager UI control (bd5fa9c), closes #1168
  • core: Remove outdated VirtualWallCapability and RestrictedZoneCapability (5e24783)
  • core: Remove SensorCalibrationCapability (5b081a7)
  • mqtt: Collect runtime metrics and provide them via REST (dcc1db4)
  • ui: Display firmware version if available (e78e9b4)
  • ui: Display MQTTClient status (c54ebc8)
  • vendor.roborock: Support S7 total statistics (d1926a9)

Bug Fixes

  • core: Fix free memory reporting on kernels >= 3.14 (dceea16)
  • miio: Don't throw plain objects on error responses (e84fe8c)
  • miio: Fix RetryWrapper never handshaking on stale stamp (326cb4b)
  • mqtt: Deduplicate outgoing messages (b835336)
  • networkadvertisement: Replace ssdp lib with custom implementation (f5e505a)
  • ui: Disallow whitespaces, + and # for mqtt topic customization (8148736)
  • ui: Make the logviewer only auto-scroll if it is already scrolled down (3c24eba)
  • vendor.dreame: Mapping passes can only be done by lidar-based robots (411fab5)
  • vendor.dreame: Re-enable custom order segment cleanups and hope for the best (744a4bb)
  • vendor.roborock: Fix roborock virtual restrictions counting vertices incorrectly (cc5e37b), closes #1423
  • vendor.roborock: Properly parse and handle lab_status and map_status (e158ac4), closes #1424
  • Remove nonsensical always-attached dustbin attachment (b9bd959)
  • SegmentIds should be strings (6325045)
  • SegmentIds should be strings pt2 (a8d314d)

2022.02.0

2 years ago
valetudo

2022.02.0

Lots of UI changes and more polishing

Quirks

This release adds the quirks concept, which shall be understood as a catch-all and/or staging area containing vendor-specific toggles that don't fit the generic abstraction that is Valetudo (yet). This should make it fairly easy to quickly implement (some of the) exciting new vendor features without jeopardizing the architecture of Valetudo in the long run.

Here's an example taken from the Dreame Z10:

image

Settings

Robot, Map and Connectivity settings have been reorganized/redone.

image

image

image

Wi-Fi and NTP state display has been redone as well:

image

image

Quality of Life

A lot of help text sections and dialogs have been added all around the application to make usage of Valetudo even easier. They should also answer a lot of common support questions, so make sure to read them before asking questions.

Furthermore, all password fields have been updated to feature a plain-text-display toggle.

Total Statistics

Because displaying three numbers is boring, @ccoors had the great idea of adding gamification the total statistics feature. After some iteration on that idea, we've ended up with this:

image

There's also an overview of all achievements:

image

I'm very happy with how this turned out. Now we just need to think of more achievements. If you have any ideas, feel free to leave them down in the comments.

Nightly builds

There are now automated nightly builds, which you can install using the updater.

As this is meant for people willing to accept and capable of handling breakage, there is no UI toggle to switch to nightly builds. To enable them, ssh into your robot and change the update provider to github_nightly.

Misc

  • Viomi consumables have been fixed by @adrez99
  • @schinken fixed local access via IPv6

Autogenerated changelog

Features

  • core: WifiScanCapability (a4fe895)
  • ui: Add general help (ec298dc)
  • ui: Add help for dnd, voice packs and the updater (84c8c04)
  • ui: Add Map Management Help (9d62c26)
  • ui: Add quirks help (77183ed)
  • ui: Add total statistics page (#1330) (8fd0b2e)
  • ui: Allow display of Wi-Fi passwords entered (89624eb)
  • ui: Allow newlines in confirmation dialog (df2ee4f)
  • ui: Another achievement (0ffbef4)
  • ui: Extend map management help (e1514bc)
  • ValetudoWifiStatus may contain a bssid (86fe2f2)
  • ui: Allow display of entered passwords for mqtt and basic auth (4e75531)
  • ui: Disable edit map tap interaction while not docked to reduce confusion (b68e444)
  • ui: Improve achievement badges (7eea13e)
  • ui: Improve NTP client state display (0a265a7)
  • ui: More achievements (892017e)
  • ui: Move map-related features to map management page (ea45f01)
  • ui: Move Wi-Fi settings to connectivity (dff909c)
  • ui: Provide an overview of all achievements (381e3cd)
  • ui: Rename about page to system information (ad1dd16)
  • ui: Restructure connectivity settings (bfe33e4)
  • ui: Restructure robot settings (5c71be4)
  • ui: Restructure routers and add about page (e3a1f13)
  • updater: Add nightly builds (d1a0d91)
  • vendor.dreame: Add auto empty interval quirk (1b6205a)
  • vendor.roborock: Add quirks (7fc584a)
  • vendor.viomi: Add quirks (#1369) (b369e4d)
  • QuirksCapability (79deeb1)
  • webserver: Allow IPv6 requests from own network (#1342) (165deff)

Bug Fixes

  • mqtt: Fix consumables not being polled by the autorefresh (58d6267), closes #1355
  • networkadvertisement: Attempt to catch issues of the ssdp lib (ee3154b)
  • ui: Allow refetching when there are zero quirks (7f3ed2b)
  • ui: Allow user-selection of wifi IP addresses (33c9470)
  • ui: Allow user-selection of wifi IP addresses... again (2bdcea4)
  • ui: Disable updater buttons when busy (f82ae1a)
  • ui: Don't display updater warning if state is busy (4d5c781)
  • ui: Don't provide the wifi configuration route if there is no wifi configuration capability (82e954e)
  • ui: Fix about title (67a9a05)
  • ui: Fix display of text in conjunction with controls in Map Management (1cc76c5)
  • ui: Fix logviewer timestamp display for chrome (56f5ba0)
  • ui: Fix map management not using unique keys for all options (2305b52)
  • ui: Fix menu drawer scrollbars (4a6c9fa)
  • ui: fix minor typo (#1341) (77e07ec)
  • ui: Properly implement newlines in ConfirmationDialog (b8f8eb0)
  • ui: Sort total statistics data points (a568c03)
  • ui: use relativ paths to allow hosting in a subdirectory .. again (3007dbb)
  • updater: Add missing return statement (f5e7451)
  • vendor.viomi: Fix Viomi consumables (#1367) (ccfe175)
  • webserver: Fix missing doctype for error pages (3d48611)
  • webserver: Fix some endpoints never returning anything (32c0f6a)

2022.01.0

2 years ago
valetudo

2022.01.0

Quality of life improvements, bugfixes and more polishing. Also, Happy New Year :)

UI/UX Changes

Map Management

The map management feature has been restructured to be easier to understand especially for newcomers. Furthermore, there are now help texts available in the editor, which should answer common questions.

image image image

Updater

The updater now auto-refreshes its state and provides more feedback. It will also display the latest changelog if there's no update available.

image

Misc

  • The UI now auto-refreshes if the backend version changed
  • Visual consistency has been improved
  • The title is now updated based on the page you're on which makes your browser history actually useful
  • Hovering over some unlabelled buttons/icons should now give you a tooltip clearing things up
  • You can now hover over the progress bars in the about page to get a tooltip for the value as well
  • Info boxes answering common questions have been added to the connectivity page
  • It should now be possible to use Valetudo in a sub folder of a reverse proxy again

MQTT Changes

Home Assistant 2021.12

Valetudo now requires Home Assistant 2021.12 or newer as that release introduced the object_id field for MQTT autodiscovery. This allows us to influence the entity_id so that the days of camera.map_data_3 are gone.

You might have to delete the device in HA and let it be rediscovered for these changes to be applied.

It is worth it though:

image

Bugfixes

Multiple issues regarding MQTT stability and reliability have been identified and fixed with this release, hopefully solving connectivity issues in situations with bad Wi-Fi signal coverage.

External Access

Valetudo now attempts to block access from public-routable IPs to its REST-Interface by default. This was necessary, because publicly-accessible Valetudo instances kept appearing on Shodan.io.

It is certainly no foolproof solution, but it might at least help a little. You can also disable the filter if you absolutely have to, however I'd strongly recommend not doing that.

Misc

As it turns out, nodes os.getNetworkInterfaces() does not return all network interfaces, which led to the unique system identifier randomly changing depending on whether or not the robot had an IP address. This has been fixed by the use of the mighty sysfs.

Moreover, Valetudo now polls the network state every 30s in an attempt to catch network changes and restart the network advertisement so that the companion app doesn't display 192.168.5.1 right after provisioning.

Autogenerated changelog

Features

  • core: Remove DebugCapability (78c84de)
  • ui: Add hover labels to system ram and load information (62ed252)
  • ui: Add info boxes answering common questions to the connectivity settings page (9eae3e3)
  • ui: Add link to the docs (88b810c)
  • ui: Automatically refresh the page when the backend version changed (905ada1)
  • ui: Change infobox icon (a82e1df)
  • ui: Consolidate paths to a single svg (82bc46b)
  • ui: Improve first-time usability by adding titles to buttons and more minor changes (6126718)
  • ui: Improve segment edit help (17e1d5f)
  • ui: Improve visual consistency (006b94b)
  • ui: More space for mobile (6a6ba65)
  • ui: Rework map management (4f51935)
  • ui: Use non-swipable drawer for better performance (25298a0)
  • updater: Display changelog of latest release when in noUpdateRequired state (ce0c675)
  • updater: Introduce busy state to provide better user feedback (4e9ed3d)
  • webserver: Attempt to block external access to valetudo (10b1662)

Bug Fixes

  • updater: fix(updater): Use busy state flag instead of busy state (d122efcb)
  • core: Use sysfs to reliably determine the unique system identifier in all network conditions (8d74825)
  • mqtt: Don't try to publish anything if there is no mqtt connection (9051ac0)
  • mqtt: Fix mqtt getting stuck forever requiring a restart (42a5613)
  • mqtt: Force disconnect if it takes longer than 1500ms (ced9ee1)
  • mqtt: More .disconnect() fixes (322efcc)
  • networkadvertisement: Attempt to watch for network state changes to fix advertisement after initial provisioning (7a2c3d1)
  • ui: Redraw map on visibilityState change to fix map not being updated if the tab was invisible for too long (1c86152)
  • ui: use relativ paths to allow hosting in a subdirectory (1e73947)
  • vendor.dreame: Ignore more irrelevant property updates (9e4e202)
  • webserver: Handle aborted connections gracefully (b3e8024)