Releases: mrbungle64/ecovacs-deebot.js
Releases · mrbungle64/ecovacs-deebot.js
Release list
Release 1.0.0-alpha.23
New Features
Device verification (login code 1013)
- Added support for the Ecovacs device-verification flow. When the API requires verification,
connect()now throwsEcovacsAPI.DeviceVerificationRequired - Complete the login with
api.requestDeviceVerificationCode()andapi.verifyDevice(code). Invalid codes throwEcovacsAPI.InvalidVerificationCode(code1012) - Automatic token refresh is now disabled after a
DeviceVerificationRequirederror to prevent continuous failure loops - The
verifyDeviceresponse is validated foruidandaccessToken - 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
stdinis not a TTY, so non-interactive environments fail fast instead of hanging - See the Usage Instructions for the full flow
MQTT lifecycle
- Added
initializedandmqttClientReplacedMQTT 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
GetJCYAirQualitynow awaits theAirQualityevent instead ofJCYAirQuality- Added validation and error handling for
publicKeyparsing ingetConfigresponses - Prevented unhandled promise rejections during connection, authentication, and unsubscription
- Authentication error code
1010is now correctly treated as invalid account credentials
Internal / Refactoring
- Renamed
VacBot→EcovacsDevice(class, factories, exports), with a back-compat shim;vacBot.jsmoved tolibrary/ecovacsDevice.js - Renamed the
Ecovacsclass/file toEcovacsDeviceSession; message dispatch extracted intoEcovacsMessageDispatcher - ES6 modernization: crypto-based ID generation,
prefer-constenforced, 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
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 VacBotApiDevicetypedef 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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