Skip to content

Releases: Abasz/ESPRowingMonitor-WebGUI

WebGUI v7.1.0 Version

08 Apr 20:11

Choose a tag to compare

Version 7.1.0

This release introduces a fully customizable dashboard layout editor, session management improvements including pause/resume support, a new sliding moving average feature for smoothing displayed metrics and an experimental comprehensive session analysis feature. The update ensures compatibility with ESPRM firmware v7.1.0.

New Features

Dashboard Layout Editor

  • Drag-and-Drop Tile Editor: Implemented a visual tile layout editor with drag-and-drop support, allowing users to arrange dashboard tiles through the settings dialog.
  • Dynamic Tile Rendering: Replaced hardcoded tile elements with dynamic rendering based on layout configuration, with grid positioning via inline styles.
  • Orientation-Specific Layouts: Added support for separate landscape and portrait layouts with a preferred screen orientation setting (auto, landscape, portrait) and Screen Orientation API lock when available.
  • Standalone Tile Components: Refactored dashboard tiles into standalone components that receive data via injected context, enabling dynamic rendering.

Session Management Enhancements

  • Pause/Resume: Extended SessionManagerService with pause/resume capability. Users can pause a running session and resume without resetting session data. Any stroke arriving while paused triggers auto-resume.
  • Auto-Start Toggle: Added an option to disable automatic timer start when a new stroke appears, useful for sessions where manual control of the timer is preferred.
  • Stopwatch Utility: Added a dedicated Stopwatch utility for high-accuracy elapsed time tracking with start/stop/pause/resume operations, replacing the previous timestamp-based calculation.
  • Reactive Session Pipeline: Replaced the offset-subtraction approach with a scan-based reactive pipeline that accumulates metrics from incoming differences, providing robust guard against device restart and enabling pause support.

Metrics Smoothing

  • Sliding Moving Average (SMA): Added a configurable SMA feature that smooths displayed metric values on the dashboard without affecting recorded data. Users choose between three modes (off, performance, all) and a configurable window size (2–6). The buffer resets when rowing stops.

New Tiles

  • Speed Tile: Added a Speed tile displaying current km/h or mph.
  • Peak Force Tile: Added a Peak Force tile showing peak force from handle forces.
  • Drive Length Tile: Added a Drive Length metric and corresponding tile.

Rower Profile Export

  • Settings Export: Added functionality to export current rowing machine settings as a C++ header file for use when compiling ESPRM firmware, with a dialog for device and model input.

Session Analysis and Detail View (Experimental)

  • Session Detail Route: Added a dedicated session detail view at session/:id with loading, error, and tabbed states, accessible from the logbook dialog.
  • Session Summary: Displays session statistics in three sections (Totals, Maximums, Averages) with responsive grid layout and conditional heart rate display.
  • Time-Series Charts: Added seven interactive time-series charts (Speed, Stroke Power, Stroke Rate, Heart Rate, Dist/Stroke, Drive Length, Drive/Recovery) with average lines, explicit Y-axis bounds, and zoom/pan support via Chart.js and chartjs-plugin-zoom.
  • Stroke Inspector: Added a strokes tab with per-stroke metric cards, prev/next/slider navigation, continuous force curve chart with current stroke highlighting, and lap markers for quick navigation.
  • Lap Detection: Automatically detects laps by identifying periods of inactivity exceeding 5 seconds. A clickable lap table integrates with chart zoom to focus on individual laps.
  • Session Switcher: Added a searchable autocomplete dropdown in the session toolbar to switch between recorded sessions without returning to the dashboard.
  • JSON Import: Added the ability to import session data from JSON files via the session toolbar, with imported sessions available in the session switcher.

General Updates and Improvements

Data and Recording

  • FIT File Export: Replaced TCX export with FIT file export using the official Garmin FIT SDK. Produces standard Activity files with rowing/indoorRowing sport type, including distance, speed, power, cadence, heart rate, HRV data, and session summaries. Compatible with Strava, Garmin Connect, and other FIT-compatible platforms.
  • Drive Length Persistence: Added drive length data to the database and exports, with migration to backfill existing records.
  • Elapsed Time Persistence: Added elapsed time to session data, with DB v3 migration to backfill existing records using timestamp arithmetic.
  • Improved Recording Pipeline: Reworked data recording to save at least one datapoint per second, capturing heart rate snapshots even during inactivity.
  • Refactored Session Architecture: Centralized session lifecycle into SessionManagerService, moving session-relative computation out of MetricsService (now a stateless transformer emitting cumulative device totals).
  • Export Interface Refactor: Consolidated export interfaces into a single IExportSession type used by all export paths (JSON, FIT, CSV), including device name and sessionId.

UI and UX

  • Responsive Layout Improvements: Added container query-based dynamic font sizing for metric tiles, significantly improving dashboard responsiveness across screen sizes.
  • Native M3 Theming: Migrated from M2-to-M3 interop approach to native mat.theme() mixin emitting --mat-sys-* CSS custom properties directly.
  • Settings Dialog Reorganization: Moved each settings component into its own subfolder and refactored tab handling to use an enum.
  • Slider Improvements: Improved rowing settings slider interaction on smaller screens with full-width sliders and permanent value labels.

Database Reliability

  • Migration Safety: Added a blocking migration overlay with progress indication during database schema upgrades, preventing data loss from user interaction during long-running migrations. Includes WakeLock to prevent device sleep during migration.

Framework and Dependency Updates

  • Angular 21.2: Updated Angular and related packages from v21.0 to v21.2.
  • ng2-charts v10: Updated from v8 to v10.
  • New Dependencies: Added @garmin/fitsdk for FIT file export, chartjs-plugin-zoom and hammerjs for interactive chart zoom/pan, and chart.js for session analysis charts. Removed js2xmlparser (previously used for TCX export).

Bug Fixes

  • Device Name in Logbook: Fixed a bug where the connected device name was not correctly linked to the session when reset was hit after connection.
  • Session ID Caching: Fixed caching of sessionId and timeStamp during database writes to avoid race conditions.

Developer Experience

  • Refactored Test Infrastructure: Split SettingsDialogComponent tests into multiple files with shared helper functions.
  • Utility Extraction: Extracted downloadFiles into a reusable utility function.

Breaking Changes

  • Database Schema v3: The database schema has been updated to v3 to include driveLength and elapsedTime fields. Migration runs automatically on first load with a blocking progress overlay. Large databases may take several minutes to migrate.

Full Changelog: 7.0.1...7.1.0

WebGUI v7.0.1 Version

16 Jan 09:59

Choose a tag to compare

Version 7.0.1

This release marks a major milestone with significant architectural improvements, new export capabilities, enhanced firmware update functionality, and a full migration to modern testing infrastructure. The update ensures compatibility with ESPRM firmware v7.0.1 API changes while maintaining backward compatibility with older firmware versions.

New Features

Enhanced Export Functionality

  • CSV Export: Added CSV export functionality for logbook entries, providing per-stroke data including elapsed time, distance, pace, power, stroke rate, drive/recovery durations, heart rate, drag factor, peak force, and handle forces.
  • Web Share API Integration: Enhanced export functionality to leverage the Web Share API on supported devices, providing a seamless sharing experience on mobile devices with automatic fallback to traditional downloads on desktop.

Firmware Update Manager

  • Automated Firmware Download: Implemented a new auto-versioning tool that automatically downloads firmware assets from GitHub releases during build time, ensuring users always have access to the latest firmware.
  • Firmware Profile Selection: Added a new bottom-sheet component for selecting and downloading firmware profiles directly from within the application.
  • Progress Tracking: Integrated download progress bar with ZIP extraction capabilities (using fflate library) for a smooth firmware update experience.

BLE API Updates

  • Extended Metrics Support: Updated extended metrics characteristic to support the new 16-bit dragFactor as per ESPRM v7.0.1 BLE API changes, with backward compatibility maintained for 7-byte packets from older firmware.
  • Deprecated Settings Handling: Refactored stroke detection settings to handle the deprecation of minimumRecoverySlopeMargin field in new firmware while maintaining backward compatibility for legacy firmware versions.
  • UUID Standardization: Updated BLE service and characteristic identifiers to use full 128-bit UUID format for improved cross-platform compatibility.

General Updates and Improvements

Framework Updates

  • Angular v21: Upgraded to Angular v21 from v20, including all related packages (Angular CLI, Material, CDK, compiler, and core modules).
  • Vitest Migration: Complete migration of testing infrastructure from Jasmine/Karma to Vitest for both application tests and tools, providing faster test execution and modern testing capabilities.
  • Zoneless Testing: Completed zoneless migration for unit tests, removing zone.js dependency and migrating from fakeAsync to Vitest's async utilities.

Performance and Stability

  • Stream Optimization: Refactored observables in ErgMetricsService and MetricsService to improve performance by sharing streams and avoiding multiple subscriptions to the same observable.
  • Error Handling: Improved error handling across services and components with better feedback mechanisms and more robust error recovery.
  • Service Worker Guards: Enhanced service worker integration with guards against environments where the service worker API is not available.
  • WebUSB API Guard: Added guards against missing WebUSB API when initializing ANT heart rate service to prevent startup crashes on unsupported platforms.

UI and UX Enhancements

  • Responsive Layout: Refactored media queries to display more cards on iPhones in landscape mode for improved mobile experience.
  • Error Display: Fixed app startup crash error message display issues related to Angular custom app-root tag rendering, with improved device detection for iOS.
  • Settings Styling: Enhanced GeneralSettingsComponent form-field styling for better layout consistency.

Build and Development

  • Build Scripts: Refactored and improved build and dev scripts in package.json for better clarity and consistency with a new build:prepare script.
  • ESLint Configuration: Fixed ESLint configuration issues and updated dependencies for improved linting coverage.
  • Test Improvements: Migrated test syntax from Jasmine to Vitest conventions and improved test implementations in line with modern best practices.

Bug Fixes

  • Database Error Handling: Added proper error handling for IndexedDB operations when fetching session summaries in the logbook.
  • File Download: Fixed file download implementation to properly revoke object URLs after download completion.
  • Stroke Rate Calculation: Fix stroke rate not updating in FTMS mode by adding checks to avoid NaN for strokeTime in stopped state (fixes #4)

Breaking Changes

  • Testing Framework: Projects extending or using the test infrastructure must now use Vitest instead of Jasmine/Karma.
  • Removed zone.js: The application no longer depends on zone.js in production, which may affect extensions relying on Zone.js patching.

This release represents a significant modernization effort, with comprehensive test infrastructure updates, enhanced user features for data export and firmware management, and improved architectural foundations that prepare the application for future enhancements.

Full Changelog: 6.2.0...7.0.1

ESP Rowing Monitor - WebGUI v6.2.0 Release

13 Oct 15:48

Choose a tag to compare

Version 6.2.0

This release focuses on adding rower settings capabilities implemented on the monitor (including rowing machine profile management), comprehensive test coverage, and modernization of the application architecture. The new profile management feature allow users to load standard rowing profiles and create custom configurations, along with substantial improvements to the settings dialog and overall code quality.

New Features

Adding Rower Settings Management

  • Ergometer Configuration: Added functionality to interact with the new runtime-configurable settings API that allows editing settings directly to the connected ergometer device via BLE.
  • Redesigned Settings Dialog: Split the settings dialog into separate "General" and "Rowing" sections for improved organization and independent editing capabilities.
  • Settings Validation: Added user prompts when attempting to close settings without saving changes, preventing accidental loss of configurations.
  • Backward Compatibility: Implemented support for devices running older firmware versions that don't support settings broadcasting.

Rowing Profile Management

  • Standard Profile Support: Added automatic fetching and parsing of standard rowing profiles from the ESPRowingMonitor repository, allowing users to select from pre-configured rowing machine profiles.
  • Custom Profile Management: Implemented custom profile support with automatic persistence to browser local storage. Custom profiles are automatically saved when users modify settings from standard configurations.
  • Profile Auto-Update: Integrated automated build pipeline to fetch updated profiles when new firmware releases are available from the ESPRowingMonitor repository.

Firmware Update Checks

  • Automatic Firmware Detection: The app now automatically checks for available firmware updates when a device successfully connects. The check runs after the connection flow and only runs for fully connected devices.
  • Compatibility Handling: Added safeguards for older devices and firmware versions that do not expose update metadata — those devices are skipped gracefully without errors.
  • Display Hardware Revision: Display hardware revision string if available in the General Settings UI.

General Updates and Improvements

Code Quality and Testing

  • Comprehensive Test Coverage: Added extensive unit tests for multiple components and services
  • Improved Testability: Enhanced service architecture to improve testability, particularly for AntHeartRateService and subscription handling.

Architecture Modernization

  • Zoneless Change Detection: Started migration towards zoneless change detection by removing zone.js dependencies from production code and modernizing unit test infrastructure.
  • Component Refactoring: Moved settings bar buttons into separate, focused components for better modularity and maintainability.
  • Lazy Loading: Implemented routing with lazy loading for the DashboardComponent to improve initial load performance and provide easier extensibility with new features in the future
  • Code Organization: Restructured dashboard-related components into organized folders in preparation for future GUI extensions.

User Experience Enhancements

  • Animation Improvements: Updated animations for Angular v20 compatibility, including fixes for reduced motion preferences and restoration of Material error animations. Transitioned from deprecated animation APIs to CSS-based animations.
  • Error Handling: Added comprehensive global error overlay for application startup errors, with specific guidance for iOS users where Web Bluetooth is not supported.
  • API Availability Checks: Improved native API availability checking with better error handling and user feedback for missing browser APIs.
  • UI Safety: Added safeguards against multiple setting submissions to prevent accidental double-click issues.

Framework Updates

  • Angular v20: Updated to the latest Angular v20 version, including Angular CLI, compiler, and related packages with the newest ESLint configuration.
  • Improved Responsiveness: Added flex-layout helper classes and mixins to enhance responsive design capabilities across different screen sizes.

Bug Fixes and Optimizations

  • Promise Handling: Fixed withDelay utility to correctly handle Promise rejections from passed-in promises.
  • Heart Rate Display: Fixed styling issues with heart rate button component when heart rate monitoring is disabled.
  • Event Handling: Improved event and subscription handling using RxJS operators for better performance and reliability.
  • Settings Interface: Refactored IRowerSettings interface to reflect the new structure separating general and rowing-specific settings.

Developer Experience

  • Enhanced Tooling: Added unit-test instruction files for GitHub Copilot integration and updated debugger configurations for improved unit test debugging capabilities.
  • Code Standards: Updated ESLint rules to remove overly restrictive alphabetical ordering requirements while maintaining code quality standards.
  • Documentation: Improved inline documentation and code comments for better maintainability.

This release represents a significant step forward in application maturity, with comprehensive test coverage, enhanced user features, and improved architectural foundations that prepare the application for future enhancements.

Full Changelog: 6.0.1...6.2.0

Small updates and bug fixes

16 May 21:14

Choose a tag to compare

This minor release fixes a few bugs and updates some packages along with improving tooling (adding a GitHub Action to deploy the WebGUI).

6.0.0

20 Dec 19:02

Choose a tag to compare

Version 6.0.0

This release focuses on significant architectural improvements, new experimental features, and user experience enhancements. The update ensures better compatibility with the new functionalities introduced in ESPRM v6, including the experimental FTMS service and over-the-air (OTA) firmware updates. Additionally, this version continues to refine the application's reliability, modularity, and ease of use.

Please note that this release completely removes any WebSocket or WebServer related feature from the codebase.

New Features

This version aligns version numbering between ESPRM and the WebGUI, hence the bump to version 6 instead of version 4.

FTMS BLE Service Integration

  • Added experimental support for the FTMS BLE Profile, allowing compatibility with applications leveraging this protocol.

Over-the-Air (OTA) Firmware Updates

  • Introduced OTA firmware update functionality, so users can now perform firmware updates directly from the Web GUI and track the status of the update in a progress dialog.

Enhanced Device Information

  • Expanded the Settings Dialog to include data from the BLE Device Information service (such as Manufacturer details, Firmware version.)

UI and UX Enhancements

  • Migrated to Material Design 3 for a modernized look and feel.
  • Improved spinner overlay design.
  • Updated BLE connection status feed back (e.g. service details are only displayed when the device is connected, settings are disabled in settings when no device is connected).
  • Enhanced the layout and usability of the Settings Dialog.
  • Added tooltips with a 1-second delay for better accessibility.

General Updates and Improvements

Bug Fixes and Optimizations

  • Fixed a concurrency bug in BLE notifications that prevented exceptions when writing to characteristics before startNotifications completed.
  • Optimized BLE stream handling by resolving an issues with incorrectly destroying observables in settings.

Refactoring and Code Modernization

  • Service Layer Improvements:
    • Refactored the ErgDataService class into smaller, modular components based on functionality.
    • Simplified repetitive code using static utility functions.
  • Signal-Based State Management:
    • Migrated components to Angular's Signals API for improved performance and readability.
    • Updated components to use InputSignals for better data flow.
  • Standalone Components:
    • Removed NgModules and adopted Angular's standalone component model for cleaner architecture.
  • Refactored Configuration Management:
    • Streamlined configuration handling with a single BehaviorSubject to store state.
  • Transitioned to Vite:
    • As part of Angular 18 update move to Vita, improving build performance and dev server speed.

Full Changelog: 3.3.0...6.0.0

Support new BLE metrics and add logbook feature

10 Jul 12:37

Choose a tag to compare

Version 3.3.0

This release adds support for the Extended BLE API introduced in ESPRM version 5.2 and brings substantial enhancements to the application's functionality. The focus is on user experience improvements, new features, and various bug fixes. The update also introduces several optimizations to ensure smoother and more efficient operation.

Note: This release contains some experimental features which may require user feedback for further refinement.

New Features

Support for New BLE Metrics

  • Extended BLE Metrics: Adds support for Extended BLE metrics, deprecating the WebSocket connection. For backward compatibility, the WebSocket API can still work, but it will be removed in the next major version.
  • Delta Time Logging via BLE: Added functionality to allow receiving delta times via Bluetooth for logging, debugging, and row data analysis purposes.
  • Handle Force Data: Adds support for processing stroke handle force data via BLE.

Logbook Management

Added experimental support for data persistence via the StorageManager API in supported browsers. This feature aims to prevent accidental database deletions and is currently tested in Chrome and Mobile Chrome.

  • Logbook Feature: Added a Logbook feature for managing session data. Users can now delete and download recorded sessions directly from the Logbook dialog.
  • Support for Extended BLE Metrics: Adds support for Extended BLE metrics, deprecating the WebSocket connection. For backward compatibility, the WebSocket API can still work, but it will be removed in the next major version.
  • TCX Export: Implemented the option to export workout data to TCX format, facilitating easy import into platforms like Strava.
  • Database Import/Export: Introduced the ability to import and export databases, making it easier to transfer data between clients. This feature leverages Dexie's native full database import/export capabilities, with the exported files in JSON format for easy editing.

Note: The Logbook feature has some caveats. Please read the README.

General Updates and Fixes

Improved BLE Connection Handling

  • Error Handling and Reconnect: Enhanced error handling for BLE connections, including better feedback through snack bar messages and a more robust reconnect mechanism. Improved the initial connection process and added functionality to restart BLE scanning upon visibility changes.

UI and UX Enhancements

  • PWA Installation: Added a service worker and converted the app to a PWA to be accessible offline. Enhanced the PWA installation experience by adding screenshots to the installation process. The use of PWA allows hosting the WebGUI via GitHub pages, removing issues with secure contexts and SSL certificates. The WebGUI can be accessed here.
  • Connection Indication: Added a connecting state to the BLE connection status API, providing users with clearer feedback during connection attempts.
  • Dialog Components: Added a close button component to dialogs for better user control.
  • Snack Bar Improvements: Enhanced the confirm snack bar API to allow customization of the confirm button text and made the software update snack bar permanently visible with a dismiss button.
  • Icons and Tooltips: Updated icons to use Material Symbols and added tooltips to improve usability. Fixed styling issues with Angular Material dialog titles.

Code Refactoring and Maintenance

  • Settings Refactor: Refactored the SettingsBarComponent to use services instead of Input/Output properties, improving maintainability.
  • Service Layer Refactor: Reworked the data service layer for better flexibility by separating data into individual providers/streams.
  • Constructor Refactor: Improved code readability by refactoring data service constructor setups into more expressive functions.
  • Interface Declarations: Split interface declarations into separate files for better maintainability.

Bug Fixes

  • Angular Updates: Updated Angular to the latest version and resolved related errors.
  • Chunk Processing: Fixed an issue with handleForces chunk processing, ensuring correct data handling across multipart datasets.
  • HR Data Handling: Resolved issues with heart rate (HR) data display, ensuring it hides correctly after monitor disconnections and retries HR measurements appropriately.

Full Changelog: 3.0.1...3.3.0

Update to meet ESP Rowing Monitor API changes

07 Mar 15:23

Choose a tag to compare

This release updates the GUI to comply with the breaking changes implemented in ESP Rowing Monitor's WebSocket API as well as:

  • adds wake lock to prevent screen going to sleep
  • adds time stamps to the received data
  • allows saving of deltaTimes in a separate file
  • includes bug fixes to the BLE HR monitor and media queries
  • updates some dependencies

Full Changelog: 2.0.0...3.0.1

Add Heart Rate Monitor capability and other fixes

04 Sep 16:24

Choose a tag to compare

This version adds both BLE and ANT+ capabilities to the WebGUI as well as fixes some bugs/improves view layout on mobiles

MVP release

07 Apr 19:33

Choose a tag to compare

This is the first fully functional release of the WebGUI for the ESP Rowing Monitor.