Skip to content

Releases: mrbungle64/ecovacs-deebot.js

Release 1.0.0-alpha.23

Pre-release

Choose a tag to compare

@mrbungle64 mrbungle64 released this 19 Jul 14:11

New Features

Device verification (login code 1013)

  • Added support for the Ecovacs device-verification flow. When the API requires verification, connect() now throws EcovacsAPI.DeviceVerificationRequired
  • Complete the login with api.requestDeviceVerificationCode() and api.verifyDevice(code). Invalid codes throw EcovacsAPI.InvalidVerificationCode (code 1012)
  • Automatic token refresh is now disabled after a DeviceVerificationRequired error to prevent continuous failure loops
  • The verifyDevice response is validated for uid and accessToken
  • A stable, validated ECOVACS_CLIENT_DEVICE_ID (trimmed on input) keeps the client identity consistent across restarts and avoids repeated verification prompts — especially useful in Docker/headless setups
  • Interactive prompts are now suppressed and an error is thrown when stdin is not a TTY, so non-interactive environments fail fast instead of hanging
  • See the Usage Instructions for the full flow

MQTT lifecycle

  • Added initialized and mqttClientReplaced MQTT lifecycle events
  • Added optional MQTT transport overrides on the device session (useful for local testing)

Improvements & Changes

  • Command return values: Commands now resolve with the device payload instead of the raw HTTP envelope. (Behavioral change — update any code that relied on the previous envelope shape.)
  • Request-ID disambiguation for command response resolution to prevent cross-talk between concurrent commands
  • Stale pending command entries are now cancelled and rejected before a new registration, preventing command-ID collisions
  • disconnect() is now awaitable and non-rejecting for more robust state management; disconnectAsync() was updated accordingly
  • More descriptive logging of auth response messages for non-zero result codes

Bug Fixes

  • Fixed a timezone double-minus bug
  • Fixed 950 V2 type inconsistency by standardizing property resolution and casing
  • GetJCYAirQuality now awaits the AirQuality event instead of JCYAirQuality
  • Added validation and error handling for publicKey parsing in getConfig responses
  • Prevented unhandled promise rejections during connection, authentication, and unsubscription
  • Authentication error code 1010 is now correctly treated as invalid account credentials

Internal / Refactoring

  • Renamed VacBotEcovacsDevice (class, factories, exports), with a back-compat shim; vacBot.js moved to library/ecovacsDevice.js
  • Renamed the Ecovacs class/file to EcovacsDeviceSession; message dispatch extracted into EcovacsMessageDispatcher
  • ES6 modernization: crypto-based ID generation, prefer-const enforced, early-throw flattening, centralized protocol/message-type definitions
  • Unified device-ID derivation to consistently incorporate DEVICE_NUMBER
  • Documentation updates for the device-verification flow and EVENTS.md

Release 1.0.0-alpha.18

Pre-release

Choose a tag to compare

@mrbungle64 mrbungle64 released this 07 Jun 07:04

Breaking changes

  • XML-based device support has been removed. The "non950type" module — covering both XMPP/XML and MQTT/XML protocol variants — has been deleted entirely. Devices that communicated via these older protocols are no longer supported. Only JSON-based MQTT devices ("950-type" and later) remain supported.
  • Node.js ≥ 22.15 is now required. Older versions are no longer supported.
  • The native node-canvas dependency has been removed entirely (see Map rendering below). Any project that relied on it being a transitive dependency must install it directly.

New features

  • The map rendering stack has been completely rewritten in pure JavaScript
    • A custom framebuffer, PNG encoder, and rasterizer for map overlays replace the previous node-canvas dependency.
    • Live map rendering with piece tracking and validation is now included, along with zstd decompression support for map data.
  • Promise-based command execution
    • runAsync() provides a promise-based API for sending commands and awaiting their response.
    • A new PendingCommandRegistry tracks in-flight commands and routes responses back to their callers.
  • Shared MQTT connections
    • connectShared() allows multiple VacBot instances to share a single MQTT client connection, reducing resource usage when managing a fleet of devices.
  • Revised device support
    • Optional auto-empty station capability
    • smartType / productIotMap for internal IoT protocol resolution
    • deviceType property on model definitions
    • Heuristic model resolver for discovery and similarity analysis

Developer ergonomics

  • sendCommand() convenience wrapper on VacBot
  • ApiDevice typedef for type-safe device objects
  • client property exposed on VacBot
  • Case-insensitive command registry lookup

Bug fixes and improvements

  • Model dictionaries are now frozen at load time and deep-clone calls on hot paths have been removed, reducing GC pressure during high-frequency message handling.
  • MQTT client ID now includes a truncated device ID suffix to ensure uniqueness when connecting multiple devices.
  • Incoming MQTT messages with malformed JSON are now caught and logged rather than crashing the handler.
  • set-prefixed commands are excluded from command name normalization to prevent misrouting.

Infrastructure

  • Docker support added with a Dockerfile and updated local deployment docs.
  • ESLint migrated to flat config format; linting added to CI.
  • Removed all native build dependencies from the Dockerfile (no more node-gyp, python, make, etc.).
  • Comprehensive unit test coverage added for map decoding, MQTT message parsing, command dispatch, and model capability regression testing.

Release 0.9.6-beta.14

Release 0.9.6-beta.14 Pre-release
Pre-release

Choose a tag to compare

@mrbungle64 mrbungle64 released this 06 Apr 17:36
  • Breaking change: Bumped minimum required version of Node.js to 20.x
  • Added some new models to the model dictionary (incl. T20, T30, T80, X2 and X8 series)
  • Added shortcut commands for sweep mode
  • A lot of improvements for Airbot Z1 and Air Quality Monitor
  • and also some improvements for T20 series and X2 series
  • Some clean-up and refactoring
  • Added new example app for output of incoming messages
  • Some further improvements and fixes
  • Updated dependencies

Release 0.9.6-beta.13

Release 0.9.6-beta.13 Pre-release
Pre-release

Choose a tag to compare

@mrbungle64 mrbungle64 released this 06 Apr 06:14
  • Breaking change: Bumped minimum required version of Node.js to 20.x
  • Added some new models to the model dictionary (incl. T20, T30, T80, X2 and X8 series)
  • Added shortcut commands for sweep mode
  • A lot of improvements for Airbot Z1 and Air Quality Monitor
  • and also some improvements for T20 series and X2 series
  • Some clean-up and refactoring
  • Added new example app for output of incoming messages
  • Some further improvements and fixes
  • Updated dependencies

Release 0.9.6-beta.9

Release 0.9.6-beta.9 Pre-release
Pre-release

Choose a tag to compare

@mrbungle64 mrbungle64 released this 26 Aug 05:07
  • Breaking change: Bumped minimum required version of Node.js to 20.x
  • Added some new models to the model dictionary (incl. T20, T30, T80, X2 and X8 series)
  • Added shortcut commands for sweep mode
  • A lot of improvements for Airbot Z1 and Air Quality Monitor
  • and also some improvements for T20 series and X2 series
  • Some clean-up and refactoring
  • Added new example app for output of incoming messages
  • Some further improvements and fixes
  • Updated dependencies

Release 0.9.6-beta.7

Release 0.9.6-beta.7 Pre-release
Pre-release

Choose a tag to compare

@mrbungle64 mrbungle64 released this 22 Sep 08:43
  • Breaking change: Bump minimum required version of Node.js to 18.x
  • Added some new models to the model dictionary (incl. GOAT, N20, N30, T20, T30 and X2 series)
  • Added some new shortcut commands (e.g. sweep mode, air drying duration)
  • A lot of improvements for Airbot Z1 and Air Quality Monitor
  • and also some improvements for T20 series and X2 series
  • Some clean-up and refactoring
  • Added new example app for output of incoming messages
  • Some further improvements and fixes
  • Updated dependencies

Release 0.9.6-beta.6

Release 0.9.6-beta.6 Pre-release
Pre-release

Choose a tag to compare

@mrbungle64 mrbungle64 released this 06 Jul 07:26
  • Breaking change: Bump minimum required version of Node.js to 18.x
  • Added some new models to the model dictionary (incl. GOAT, T20, T30 and X2 series)
  • Added some new shortcut commands (e.g. sweep mode, air drying duration)
  • A lot of improvements for Airbot Z1 and Air Quality Monitor
  • and also some improvements for T20 series and X2 series
  • Some clean-up and refactoring
  • Added new example app for output of incoming messages
  • Some further improvements and fixes
  • Updated dependencies

Release 0.9.6-beta.5

Release 0.9.6-beta.5 Pre-release
Pre-release

Choose a tag to compare

@mrbungle64 mrbungle64 released this 30 Mar 20:56
  • Breaking change: Bump minimum required version of Node.js to 18.x
  • Added some new models to the model dictionary (incl. GOAT, T20, T30 and X2 series)
  • Added some new shortcut commands (e.g. sweep mode, air drying duration)
  • A lot of improvements for Airbot Z1 and Air Quality Monitor
  • and also some improvements for T20 series and X2 series
  • Some clean-up and refactoring
  • Added new example app for output of incoming messages
  • Some further improvements and fixes
  • Updated dependencies

Release 0.9.6-beta.4

Release 0.9.6-beta.4 Pre-release
Pre-release

Choose a tag to compare

@mrbungle64 mrbungle64 released this 23 Mar 11:56
  • Breaking change: Bump minimum required version of Node.js to 18.x
  • Added some new models to the model dictionary (incl. GOAT, T20 OMNI)
  • Added some new shortcut commands (e.g. sweep mode, air drying duration)
  • A lot of improvements for Airbot Z1 and Air Quality Monitor
  • and also some improvements for T20 series and X2 series
  • Some clean-up and refactoring
  • Added new example app for output of incoming messages
  • Some further improvements and fixes
  • Updated dependencies

Release 0.9.6-beta.3

Release 0.9.6-beta.3 Pre-release
Pre-release

Choose a tag to compare

@mrbungle64 mrbungle64 released this 04 Mar 19:27
  • Breaking change: Bump minimum required version of Node.js to 18.x
  • Added some new models to the model dictionary (incl. GOAT, T20 OMNI)
  • Added shortcut commands for sweep mode
  • A lot of improvements for Airbot Z1 and Air Quality Monitor
  • and also some improvements for T20 series and X2 series
  • Some clean-up and refactoring
  • Added new example app for output of incoming messages
  • Some further improvements and fixes
  • Updated dependencies