Skip to content

Releases: Abasz/ESPRowingMonitor-WebGUI

WebGUI v7.2.0 Version

Choose a tag to compare

@Abasz Abasz released this 08 Sep 19:19

Version 7.2.0

This release replaces TCX export with a full FIT file export that carries rowing-specific data into Garmin Connect and other platforms, introduces lap and interval support across the whole recording, export and analysis pipeline, adds an Intervals.icu integration with automatic and bulk upload, and brings dedicated kayak ergometer metrics.

New Features

FIT File Export

  • FIT Export: Replaced the TCX export with FIT file export. The generator produces standard Activity files following FIT best practices with summary-last message ordering, including distance, speed, power, cadence, heart rate, HRV data and session summaries. Files are written with the application/vnd.ant.fit MIME type and are compatible with Strava, Garmin Connect and other FIT-capable platforms.
  • Sport Type Detection: The sport type is derived from the connected device, producing rowing/indoorRowing for rowing ergometers and kayaking/generic for kayak ergometers.
  • Multi-Lap Export: FIT files contain one LAP message per lap segment with individual statistics. Pause markers produce a rest lap bracketed by timer stop/start events, and the last active segment is marked as the session end. Sessions without markers produce a single lap.
  • Splits: Added split and split_summary messages so Garmin Connect and other platforms can show per-interval active/rest breakdowns alongside the lap data.
  • Rowing Developer Fields: Added 11 developer field definitions carrying rowing-specific data that has no standard FIT equivalent. Every record includes drive time, recovery time and drag factor; records with handle force data additionally carry drive length, average and peak drive force, and normalized peak force position. Lap and session messages carry the average drag factor.
  • Handle Force Curve: Each record with handle force data also carries the full force curve as a scaled UINT16 array (0.1 N precision) with abscissa metadata, padded to a common point count.

Laps and Intervals

  • Manual Laps: Added a lap button to the dashboard toolbar (visible while a session is running) that records a lap marker at the current stroke. A snackbar confirms each recorded lap with its number.
  • Auto-Lap: Added distance and time based auto-lap. When the accumulated distance or elapsed time crosses the configured threshold a lap is recorded automatically. Configurable from the general settings with an Off/Distance/Time toggle and preset values (200 m–10000 m, or 1–30 min).
  • Auto-Pause: Added an auto-pause option that pauses the session when speed reaches zero, available as a new "On Start & Pause" mode alongside the existing auto-start setting. Pauses are stored as pause markers so rest periods are preserved in exports.
  • Lap Persistence: Added a dedicated laps database table storing session, timestamp, stroke index, lap type (manual/distance/time) and pause flag for every marker.
  • Laps in Session Analysis: The session detail view now segments strokes by stored lap markers, falling back to the previous inactivity-based detection for sessions recorded before this release.
  • Laps in Exports: Lap markers are included in the session JSON export and drive the multi-lap FIT export.

Intervals.icu Integration

  • Automatic Upload: Stopping a session automatically uploads it to Intervals.icu when auto-upload is enabled and an API key is configured.
  • Settings: Added an Intervals.icu section to the General settings tab for the API key, an optional athlete ID and the auto-upload toggle, with visibility toggles for the sensitive fields.
  • Bulk Upload: After saving a new API key or completing first-time setup, the app offers to upload existing sessions in bulk, with a progress dialog and cancellation support.
  • Manual Upload: Added a per-session upload button to the logbook dialog with upload status indication, so individual sessions can be pushed on demand.
  • Upload Tracking: Added a sessionUploads table that records which sessions have already been uploaded so bulk runs skip them.

Kayak Ergometer Support

  • Power Balance Tile: Added a Power Balance tile for ergometers that alternate between left (side A) and right (side B) paddle strokes. The metric compares mean handle force across consecutive odd/even stroke pairs and displays the A/B percentage split, or N/A on non-kayak devices.
  • A/B Side Labels: The Force Curve tile now labels the current stroke side, showing (A) or (B) in the chart title.
  • Balance in Session Analysis: The session detail view shows average balance and balance consistency for kayak sessions, plus a per-lap Balance column in the lap table.

New Tiles

  • Total Work Tile: Added a Total Work metric that accumulates energy across strokes and displays it in kJ. The running total is also included in exports.
  • Peak Force Position Tile: Added a normalized peak force position metric showing, as a percentage, where in the drive the peak force occurs. The value is also included in the CSV export and in the session detail view (summary averages, stroke charts and stroke inspector).

General Updates and Improvements

Configuration

  • Versioned Config Migrations: Replaced the single ad-hoc config migration with sequential, versioned migration steps mirroring Dexie's schema versioning. Each step reads the previous storage format, writes the next and removes stale keys, and is skipped silently when its precondition is not met.
  • Grouped General Config: The flat general config is now split into device (ergometer and heart rate IDs, heart rate monitor type) and session (auto-session, auto-lap) groups, separating connection settings from session behaviour. Existing configs are converted automatically on startup.

UI and UX

  • Toggle Group Settings: Replaced the BLE Mode and Heart Rate Monitor dropdowns with button toggle groups to match the display tab, and reorganized the logging section under separate Log Level and Delta Times headings.
  • Toolbar Space: The time-of-day display is hidden on narrow screens to make room for the lap button.
  • Smaller Stylesheets: Split the global flex-layout stylesheet into utility classes and breakpoint mixins. Components now import only the mixins, eliminating duplicated utility class CSS from every compiled component stylesheet.
  • Project Structure: Moved all dialog components into src/app/dialogs and the toolbar buttons into the dashboard folder.

Bug Fixes

  • Drive/Recovery Chart Scaling (#8): The drive/recovery chart used a fixed 0.1–0.6 s Y-axis range tuned for kayak stroke timings, which cropped most data for rowing ergometers. Rowing sessions now use their own fixed 0.4–3.0 s range, selected by device type and stable across zoom and lap selection.

Framework and Dependency Updates

  • New Dependencies: Added @markw65/fit-file-writer for writing FIT files with developer fields, and @garmin/fitsdk as a development dependency for decoding FIT output in tests. Removed js2xmlparser, which was only used by the TCX export.
  • GitHub Actions: Updated the checkout, setup-node, upload-pages-artifact and deploy-pages actions to their latest versions.
  • TypeScript Config: Consolidated type definitions across the tsconfig files and removed the deprecated baseUrl option.

Developer Experience

  • Simplified Test Configuration: Made deepMerge fully generic with a DeepPartial<T> source and used it across the test suite to replace verbose multi-level spread chains and hardcoded config literals.
  • Split Test Suites: Split the SessionManagerService specs into methods, behaviour, auto-session and auto-lap files, with shared setup extracted into test helpers.
  • Restructured FIT Code: Moved all FIT-related sources and specs into utils/fit-file/ and split the test suite into focused core, developer field and multi-lap spec files.
  • Removed TCX Code: Deleted tcx.interface.ts and createSessionTcxObject now that export uses FIT exclusively.

Breaking Changes

  • TCX Export Removed: Session export now produces .fit files only. The TCX export and its "TCX (Strava)" button have been replaced by the FIT equivalent.
  • Database Schema v4: The database schema has been updated to v4 to add the laps and sessionUploads tables. No data conversion is required and the upgrade runs automatically on first load.
  • Config Schema v6: The stored configuration is migrated to a new nested format on startup. Existing settings are preserved; no user action is required.

Full Changelog: 7.1.0...7.2.0

WebGUI v7.1.0 Version

Choose a tag to compare

@Abasz Abasz released this 08 Apr 20:11

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

  • 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, TCX, 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 chartjs-plugin-zoom and hammerjs for interactive chart zoom/pan, and chart.js for session analysis charts.

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

Choose a tag to compare

@Abasz Abasz released this 16 Jan 09:59

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

Choose a tag to compare

@Abasz Abasz released this 13 Oct 15:48

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

Choose a tag to compare

@Abasz Abasz released this 16 May 21:14

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

Choose a tag to compare

@Abasz Abasz released this 20 Dec 19:02

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

Choose a tag to compare

@Abasz Abasz released this 10 Jul 12:37

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

Choose a tag to compare

@Abasz Abasz released this 07 Mar 15:23

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

Choose a tag to compare

@Abasz Abasz released this 04 Sep 16:24

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

MVP release

Choose a tag to compare

@Abasz Abasz released this 07 Apr 19:33

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