Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
465 commits
Select commit Hold shift + click to select a range
f1b621f
Dropped support for the Raspberry Pi Zero
JaapvanEkris Feb 7, 2024
414372e
Fix of an array processing error in the Theil-Sen regressor (#40)
JaapvanEkris Feb 15, 2024
2d647d1
Update physics_openrowingmonitor.md
JaapvanEkris Feb 23, 2024
f628f30
Bugfix in config error message
JaapvanEkris Feb 23, 2024
8d9cb15
Update branch name
JaapvanEkris Mar 11, 2024
1c02f74
Change in Branch name
JaapvanEkris Mar 11, 2024
6bc2931
Newly supported rowers
JaapvanEkris Mar 19, 2024
59ccca0
Updated supported rowers list
JaapvanEkris Mar 19, 2024
f4d12ec
Added support status for the JLL Ventus 2
JaapvanEkris Mar 20, 2024
dacae41
Improvement of the installation script, to allow easier restarts when…
ak6i May 5, 2024
7d71a04
Update Supported_Rowers.md
JaapvanEkris Jul 2, 2024
1080dfe
Added Concept2 Model C
JaapvanEkris Jul 2, 2024
83ef012
Added support for the Jorot MR380
JaapvanEkris Jul 2, 2024
8d374a4
Improvement of the TS regression algorithm and stroke detection (#51)
JaapvanEkris Sep 3, 2024
2b2c0d4
Update install.sh
JaapvanEkris Sep 21, 2024
25c06e8
Removed the Pi5 from the compatibility list
JaapvanEkris Sep 21, 2024
d405fb3
Update README.md
JaapvanEkris Sep 21, 2024
28fa9f4
Architecture cleanup (#56)
JaapvanEkris Feb 8, 2025
5afebc2
Update Release_Notes.md
JaapvanEkris Feb 10, 2025
9831bde
Removed confusing text constructions
JaapvanEkris Feb 10, 2025
d94247e
Fixed typo
JaapvanEkris Feb 10, 2025
23c3e85
Highlighted architecture deviations better
JaapvanEkris Feb 10, 2025
211a55a
Fix Lint error
JaapvanEkris Feb 10, 2025
503236b
Fix Lint error
JaapvanEkris Feb 10, 2025
65e6f44
Fix Lint error
JaapvanEkris Feb 10, 2025
7d973a9
Update README.md
JaapvanEkris Feb 10, 2025
ceb002b
Update README.md
JaapvanEkris Feb 10, 2025
17d83a3
Fix Lint error
JaapvanEkris Feb 10, 2025
5cb97dd
Fix Lint error
JaapvanEkris Feb 10, 2025
0c059e2
Update Architecture.md
JaapvanEkris Feb 10, 2025
92a16af
Update Architecture.md
JaapvanEkris Feb 10, 2025
d2caf15
Update Architecture.md
JaapvanEkris Feb 10, 2025
9ea51ad
added note about magnetic rowers
JaapvanEkris Feb 10, 2025
f64160e
Update Architecture.md
JaapvanEkris Feb 10, 2025
041179e
Update backlog.md
JaapvanEkris Feb 10, 2025
8cc0e40
Added timing behaviour
JaapvanEkris Feb 11, 2025
e921652
Added CPU isolation as an option
JaapvanEkris Feb 11, 2025
69d444c
Update Architecture.md
JaapvanEkris Feb 11, 2025
5a09be2
Fix Lint errors
JaapvanEkris Feb 11, 2025
cedbd9d
Added defensive programming
JaapvanEkris Feb 11, 2025
e83b64e
Added defensive programming
JaapvanEkris Feb 11, 2025
500d563
Added defensive programming
JaapvanEkris Feb 11, 2025
9eaeb5f
Added defensive programming
JaapvanEkris Feb 11, 2025
692c669
Added defensive programming
JaapvanEkris Feb 11, 2025
b4143a7
Added defensive programming
JaapvanEkris Feb 11, 2025
1cc69e8
Added defensive programming
JaapvanEkris Feb 11, 2025
89dc223
Added uploader configuration
JaapvanEkris Feb 23, 2025
3f7b756
Creation of decorators
JaapvanEkris Feb 23, 2025
81aaecc
Split off file writing capability, to harmonize with uploaders
JaapvanEkris Feb 23, 2025
5f00554
Added intevalsicu uploader
JaapvanEkris Feb 23, 2025
0849853
RowsAndAll.com uploader
JaapvanEkris Feb 23, 2025
f7787a1
Update to the new recorder architecture
JaapvanEkris Feb 23, 2025
3275b38
Update to new recorder architecture
JaapvanEkris Feb 23, 2025
4b5830a
Update to new recorder architecture
JaapvanEkris Feb 23, 2025
14707c2
Update to new recorder architecture
JaapvanEkris Feb 23, 2025
3298e48
Update to new recorder architecture
JaapvanEkris Feb 23, 2025
912e828
Added node-fetch
JaapvanEkris Feb 23, 2025
839fd3d
Added node-fetch
JaapvanEkris Feb 23, 2025
e11c1b8
Fix Lint errors
JaapvanEkris Feb 23, 2025
247bc94
Fixed Lint errors
JaapvanEkris Feb 23, 2025
de104c9
Fixed Lint errors
JaapvanEkris Feb 23, 2025
6a8ce3c
Fix Lint errors
JaapvanEkris Feb 23, 2025
54cd300
Fix Lint errors
JaapvanEkris Feb 23, 2025
88c9da8
Fixed Lint errors
JaapvanEkris Feb 23, 2025
567baa4
Fixed Lint errors
JaapvanEkris Feb 23, 2025
6ffd0f5
Fixed Lint errors
JaapvanEkris Feb 23, 2025
da6dba3
Fixed Lint errors
JaapvanEkris Feb 23, 2025
94aa508
Removed a lot of clutter
JaapvanEkris Feb 27, 2025
0792d70
Further removal of clutter
JaapvanEkris Feb 27, 2025
b8fad9e
Fixed typo
JaapvanEkris Feb 27, 2025
7f4aa9d
Fixed typo
JaapvanEkris Feb 27, 2025
5abcdc0
Fixed typo
JaapvanEkris Feb 27, 2025
e7b7e1d
Updated backlog
JaapvanEkris Feb 27, 2025
5d4f3ed
Update Release_Notes.md
JaapvanEkris Feb 27, 2025
dc6519d
Added mqtt configuration
JaapvanEkris Feb 27, 2025
65f8cc3
Added MQTT connector
JaapvanEkris Feb 27, 2025
55e43b5
Added MQTT connector
JaapvanEkris Feb 27, 2025
f50d942
Added mqtt library
JaapvanEkris Feb 27, 2025
5c316c7
Update package-lock.json
JaapvanEkris Feb 27, 2025
e453e44
Added mqtt configuration
JaapvanEkris Feb 27, 2025
9f758af
Added mqtt configuration
JaapvanEkris Feb 27, 2025
40822d8
Added mqtt configuration
JaapvanEkris Feb 27, 2025
7d43f3c
Fix in MQTT startup behaviour
JaapvanEkris Feb 28, 2025
ec68d0c
Fixed too many slashes in the topicname
JaapvanEkris Feb 28, 2025
37df8b0
Update Integrations.md
JaapvanEkris Feb 28, 2025
5688e49
Update Integrations.md
JaapvanEkris Feb 28, 2025
b99b533
Update Integrations.md
JaapvanEkris Feb 28, 2025
2546061
Fix version number
JaapvanEkris Mar 1, 2025
a8c80cf
Added workoutplan push
JaapvanEkris Mar 2, 2025
f33d4c9
Added MQTT workoutplan push
JaapvanEkris Mar 2, 2025
9a6154d
Added Note
JaapvanEkris Mar 2, 2025
6d4e401
Fixed JSON errors
JaapvanEkris Mar 2, 2025
94baca1
Fixed Lint errors
JaapvanEkris Mar 2, 2025
f79177b
Added MQTT workout subscriber
JaapvanEkris Mar 2, 2025
4409f05
Removed unneeded marker
JaapvanEkris Mar 2, 2025
19de597
Added pushing WorkoutSettings via MQTT
JaapvanEkris Mar 2, 2025
371f19d
Improved logging
JaapvanEkris Mar 2, 2025
9440d95
Improved logging
JaapvanEkris Mar 2, 2025
b85abf1
Update due to MQTT progress
JaapvanEkris Mar 2, 2025
3429b3d
Added MQTT Uploader
JaapvanEkris Mar 2, 2025
19e79dd
Improveent of coding style
JaapvanEkris Mar 2, 2025
44e2aa3
Added functionality and defensive programming
JaapvanEkris Mar 2, 2025
99cb40d
Update SessionManager.js
JaapvanEkris Mar 2, 2025
970089f
Removed bug
JaapvanEkris Mar 2, 2025
7a1807b
Fixed Lint error
JaapvanEkris Mar 2, 2025
406a228
Update workoutSegment.test.js
JaapvanEkris Mar 2, 2025
8cae1e9
Added bugfix
JaapvanEkris Mar 2, 2025
7172cf4
Update Integrations.md
JaapvanEkris Mar 2, 2025
cafdd71
Update Integrations.md
JaapvanEkris Mar 2, 2025
b803891
Added comment
JaapvanEkris Mar 2, 2025
9a3adb7
Improved consistency
JaapvanEkris Mar 3, 2025
11e740d
Update of config settings
JaapvanEkris Mar 3, 2025
e094aed
Improvement of the manual
JaapvanEkris Mar 3, 2025
e66928c
Fixed a typo
JaapvanEkris Mar 3, 2025
ccb4b35
Fixed error in example
JaapvanEkris Mar 5, 2025
7efec04
Added error handling on JSON parsing
JaapvanEkris Mar 5, 2025
a9efc9f
Bugfix for showing labels when turning them off
JaapvanEkris Mar 5, 2025
d26de3a
Added GPIO settings
JaapvanEkris Mar 5, 2025
d68858b
Added index
JaapvanEkris Mar 5, 2025
b1f05a5
Fixed Lint errors
JaapvanEkris Mar 5, 2025
d6fbe9d
Improved description
JaapvanEkris Mar 7, 2025
718bb52
Fixed typo in comments
JaapvanEkris Mar 7, 2025
093e267
Update installation with reporting parameters
JaapvanEkris Mar 7, 2025
76b0a5d
Improved readability
JaapvanEkris Mar 7, 2025
65cb313
Improved readability
JaapvanEkris Mar 7, 2025
a3dea94
Added automated integrations
JaapvanEkris Mar 7, 2025
23eaccc
Added file creation options
JaapvanEkris Mar 7, 2025
2982d95
Update Integrations.md
JaapvanEkris Mar 7, 2025
642e597
Improved the VO2Max decorator
JaapvanEkris Mar 8, 2025
a6c1b67
Fix app shutdown process
Mar 9, 2025
868cf45
Improved logging
JaapvanEkris Mar 10, 2025
606aa21
Added sudo to installer
JaapvanEkris Mar 10, 2025
39410a8
Update README.md
JaapvanEkris Mar 12, 2025
5132499
Update installation.md
JaapvanEkris Mar 12, 2025
a8758d4
Fixed Lint error
JaapvanEkris Mar 12, 2025
389306a
Fixed Lint error
JaapvanEkris Mar 12, 2025
5066c66
Removes unused variables
JaapvanEkris Mar 12, 2025
012daf5
Removes unused variables
JaapvanEkris Mar 12, 2025
6a13e0e
Removes unused variables
JaapvanEkris Mar 12, 2025
9c25e11
Removes unused variables
JaapvanEkris Mar 12, 2025
ed1af87
Removes unused variables
JaapvanEkris Mar 12, 2025
94e3301
Removed unnecessary variables
JaapvanEkris Mar 12, 2025
617eedc
Removed unnecessary variables
JaapvanEkris Mar 12, 2025
a1b4831
Removes unused variables
JaapvanEkris Mar 12, 2025
ac5f56e
Removed unnecessary function
JaapvanEkris Mar 12, 2025
518e0db
Removes unused variables
JaapvanEkris Mar 12, 2025
8573dca
Fix Lint error
JaapvanEkris Mar 12, 2025
59d2fe6
Fixes lint error
JaapvanEkris Mar 12, 2025
33378a2
Fix lint error
JaapvanEkris Mar 12, 2025
af1f7dd
Added new RecordingManager structure
JaapvanEkris Mar 13, 2025
69c9cd5
Fixed typo
JaapvanEkris Mar 13, 2025
111ab4f
ESLint configuration update
JaapvanEkris Mar 14, 2025
352d4da
ESLint configuration update
JaapvanEkris Mar 14, 2025
f673089
ESLint configuration update
JaapvanEkris Mar 14, 2025
90e25af
ESLint configuration update
JaapvanEkris Mar 14, 2025
863c173
ESLint configuration update
JaapvanEkris Mar 14, 2025
d71defa
Update Flywheel.test.js
JaapvanEkris Mar 15, 2025
c2ce553
ESLint configuration update
JaapvanEkris Mar 15, 2025
b5a5dbb
ESLint configuration update
JaapvanEkris Mar 15, 2025
d989382
ESLint configuration update
JaapvanEkris Mar 15, 2025
6665dab
ESLint configuration update
JaapvanEkris Mar 15, 2025
c1d567b
ESLint configuration update
JaapvanEkris Mar 15, 2025
fbba85b
ESLint configuration update
JaapvanEkris Mar 15, 2025
b470b84
ESLint configuration update
JaapvanEkris Mar 15, 2025
7fc754d
ESLint configuration update
JaapvanEkris Mar 15, 2025
d0a7abd
ESLint configuration update
JaapvanEkris Mar 15, 2025
25df199
ESLint configuration update
JaapvanEkris Mar 16, 2025
e653c1d
Bugfix
JaapvanEkris Mar 16, 2025
ead1f6c
Added defensive programming
JaapvanEkris Mar 16, 2025
dc0e43e
Added defensive programming
JaapvanEkris Mar 16, 2025
8d3b735
Added defensive programming
JaapvanEkris Mar 16, 2025
cc79d33
Added decent closure to lap and workout if ORM Crashes
JaapvanEkris Mar 17, 2025
03ccaa7
Delete eslint.config.js
JaapvanEkris Mar 17, 2025
6070eca
More nuanced time behaviour around rest intervals
JaapvanEkris Mar 17, 2025
ae62323
Fixed reset behaviour
JaapvanEkris Mar 17, 2025
e8bca1d
Fixed reset behaviour
JaapvanEkris Mar 17, 2025
af48fa6
Fixed reset behaviour
JaapvanEkris Mar 17, 2025
f8e214f
Fixed reset behaviour
JaapvanEkris Mar 17, 2025
7eb6d9c
Fixed reset behaviour
JaapvanEkris Mar 17, 2025
6b1e28c
Reduced code duplication
JaapvanEkris Mar 17, 2025
db46130
Reduced code duplication
JaapvanEkris Mar 17, 2025
c2e9ef5
Reduced code duplication
JaapvanEkris Mar 17, 2025
9c2c4b3
Reduced code duplication
JaapvanEkris Mar 17, 2025
c28face
ESLint configuration update
JaapvanEkris Mar 17, 2025
cffb600
Improved power naming
JaapvanEkris Mar 18, 2025
5314708
Code refactoring
JaapvanEkris Mar 19, 2025
0a17418
Code refactoring
JaapvanEkris Mar 19, 2025
dcaee8c
Code refactoring
JaapvanEkris Mar 19, 2025
4e58b43
Added BLE improvements
JaapvanEkris Mar 20, 2025
52d895a
Added more thanks to Abasz
JaapvanEkris Mar 20, 2025
3ea5ef5
New BLE Api, completed PM5 interface and revamped recorders (#104)
JaapvanEkris May 3, 2025
fd91b99
Added Virtufit
JaapvanEkris May 3, 2025
86f8cbc
Removed scafold code
JaapvanEkris May 4, 2025
2a84de9
Removed scafold code
JaapvanEkris May 4, 2025
0b5aecd
Removed dependency on sessiontype
JaapvanEkris May 4, 2025
5e93e73
Removed dependency on sessiontype
JaapvanEkris May 4, 2025
180346e
Corrected URL
JaapvanEkris May 4, 2025
27f6827
Updated field description
JaapvanEkris May 4, 2025
7dfddfa
Removed unnecessary parameters
JaapvanEkris May 4, 2025
0e0142d
Removal of unneeded parameters
JaapvanEkris May 4, 2025
5e2c7fc
Removed unnecessary parameters
JaapvanEkris May 4, 2025
c1d15a5
Removed unnecessary parameter
JaapvanEkris May 4, 2025
844adcf
Removed unnecessary parameter
JaapvanEkris May 4, 2025
31fbe63
Removed unnecessary parameter
JaapvanEkris May 4, 2025
3fab537
Fixed bug in Min and Max calculation
JaapvanEkris May 4, 2025
e3f6b43
Fixed security warning
JaapvanEkris May 5, 2025
68e15d2
Fix of minimum and maximum functions
JaapvanEkris May 5, 2025
39ff311
Added test for minimum and maximum functions
JaapvanEkris May 5, 2025
dce0843
Robustness improvement
JaapvanEkris May 5, 2025
fc0284b
Improved testing of the workout segment metrics
JaapvanEkris May 5, 2025
28bbb51
Improved reset behaviour
JaapvanEkris May 5, 2025
7dc575f
Improved ErgZone compatibility
JaapvanEkris May 5, 2025
b9fb556
Resolved AthleteId error on intervals.icu
JaapvanEkris May 6, 2025
096a4fd
Fix for incorrect rollover after pause
JaapvanEkris May 9, 2025
ffafcc5
Inproved startup behaviour
JaapvanEkris May 11, 2025
846f51e
Improved commandHandler to prevent recorder crash upon upload
JaapvanEkris May 11, 2025
fddb4f0
Improved logging
JaapvanEkris May 11, 2025
5358bfe
Improved robustness
JaapvanEkris May 11, 2025
ed5bac7
Improved robustness
JaapvanEkris May 11, 2025
28d303d
Update tcxRecorder.js
JaapvanEkris May 11, 2025
1b47f0c
Update GeneralStatusCharacteristic.js
JaapvanEkris May 11, 2025
9b37aa3
Fixed typo in command
JaapvanEkris May 14, 2025
6c4d763
Removed unguarded pace calculation
JaapvanEkris May 14, 2025
c8bcc16
Improvement of startup behaviour
JaapvanEkris May 14, 2025
e5d84fb
Replacement of Chromium with Firefox (#111)
JaapvanEkris May 14, 2025
4dffa17
Updated Release_Notes
JaapvanEkris May 14, 2025
dbf018d
Improved startup behaviour
JaapvanEkris May 14, 2025
a96330d
New insights
JaapvanEkris May 14, 2025
8caa3a4
Trying to prevent a race-condition
JaapvanEkris May 16, 2025
455bb59
Improvement of reset behaviour
JaapvanEkris May 18, 2025
c53e77c
Improved command handling
JaapvanEkris May 18, 2025
ed756cd
Fixed specification bug
JaapvanEkris May 18, 2025
55dffca
Improvement based on PM5 traces
JaapvanEkris May 18, 2025
1c446fd
Added more subtle initialisation
JaapvanEkris May 18, 2025
a689cbe
Fixed resume behaviour
JaapvanEkris May 18, 2025
2952b78
Improved resume behaviour
JaapvanEkris May 18, 2025
cdf2c31
Add resume behaviour
JaapvanEkris May 18, 2025
b9c3c26
Update CsafeManagerService.js
JaapvanEkris May 19, 2025
eeafd89
Fixed a typo
JaapvanEkris May 19, 2025
e5f33d2
Improved resume behaviour
JaapvanEkris May 19, 2025
13f5476
Improvement of the PM5 behaviour for ErgZone and EXR (#113)
JaapvanEkris May 23, 2025
20c95a4
Fix for ghost data recordings
JaapvanEkris May 24, 2025
1d1b045
Fix for ghost data recordings
JaapvanEkris May 24, 2025
9bce6b1
Fix for ghost data recordings
JaapvanEkris May 24, 2025
e63a013
Fix for ghost data recordings
JaapvanEkris May 24, 2025
890cd3b
Fixes typo in parameter name
JaapvanEkris May 24, 2025
0bf34f7
Update SplitDataCharacteristic.js
JaapvanEkris May 25, 2025
ddd7cab
Fixed split number
JaapvanEkris May 25, 2025
84c00d3
Fixed split numbering
JaapvanEkris May 25, 2025
bc31b3c
Fix for split numbering
JaapvanEkris May 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 0 additions & 18 deletions .eslintrc.json

This file was deleted.

2 changes: 1 addition & 1 deletion .github/workflows/node.js.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:

strategy:
matrix:
node-version: [14.x, 16.x]
node-version: [22.x]

steps:
- name: Checkout repository
Expand Down
2 changes: 2 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
unsafe-perm=true
user=0
169 changes: 156 additions & 13 deletions app/WebServer.js
Original file line number Diff line number Diff line change
@@ -1,53 +1,153 @@
'use strict'
/*
Open Rowing Monitor, https://github.com/laberning/openrowingmonitor

Creates the WebServer which serves the static assets and communicates with the clients
via WebSockets
Open Rowing Monitor, https://github.com/JaapvanEkris/openrowingmonitor
*/
/**
* Creates the WebServer which serves the static assets and communicates with the clients via WebSockets
*/
import { WebSocket, WebSocketServer } from 'ws'
import finalhandler from 'finalhandler'
import http from 'http'
import serveStatic from 'serve-static'
import log from 'loglevel'
import EventEmitter from 'events'

function createWebServer () {
export function createWebServer (config) {
const emitter = new EventEmitter()
const port = process.env.PORT || 80
const serve = serveStatic('./build', { index: ['index.html'] })
let timer = setTimeout(timeBasedPresenter, config.webUpdateInterval)
let lastKnownMetrics
let heartRate
let heartRateBatteryLevel
resetLastKnownMetrics()

const server = http.createServer((req, res) => {
serve(req, res, finalhandler(req, res))
})

server.listen(port, (err) => {
if (err) throw err
if (err) { throw err }
log.info(`webserver running on port ${port}`)
})

const wss = new WebSocketServer({ server })

wss.on('connection', function connection (client) {
log.debug('websocket client connected')
emitter.emit('clientConnected', client)
notifyClient(client, 'config', getConfig())
notifyClient(client, 'metrics', lastKnownMetrics)
client.on('message', function incoming (data) {
try {
const message = JSON.parse(data)
if (message) {
emitter.emit('messageReceived', message, client)
emitter.emit('messageReceived', message)
} else {
log.warn(`invalid message received: ${data}`)
}
} catch (err) {
log.error(err)
}
})
client.on('close', function () {
client.on('close', function close () {
log.debug('websocket client disconnected')
})
})

// This function handles all incomming commands. As all commands are broadasted to all application parts,
// we need to filter here what the webserver will react to and what it will ignore
// The start...reset commands are handled by the RowingEngine and the result will be reported by the metrics update, so we ignore them here
/* eslint-disable-next-line no-unused-vars -- this is part of the standardised handleCommand interface */
function handleCommand (commandName, data) {
switch (commandName) {
case ('updateIntervalSettings'):
break
case ('start'):
break
case ('startOrResume'):
break
case ('pause'):
break
case ('stop'):
break
case ('reset'):
resetLastKnownMetrics()
notifyClients('metrics', lastKnownMetrics)
break
case 'switchBlePeripheralMode':
break
case 'switchAntPeripheralMode':
break
case 'switchHrmMode':
break
case 'refreshPeripheralConfig':
notifyClients('config', getConfig())
break
case 'upload':
break
case 'shutdown':
break
default:
log.error(`WebServer: Recieved unknown command: ${commandName}`)
}
}

function presentRowingMetrics (metrics) {
if (metrics.metricsContext === undefined) { return }
switch (true) {
case (metrics.metricsContext.isSessionStart):
notifyClients('metrics', metrics)
break
case (metrics.metricsContext.isSessionStop):
notifyClients('metrics', metrics)
break
case (metrics.metricsContext.isIntervalEnd):
notifyClients('metrics', metrics)
break
case (metrics.metricsContext.isPauseStart):
notifyClients('metrics', metrics)
break
case (metrics.metricsContext.isPauseEnd):
notifyClients('metrics', metrics)
break
case (metrics.metricsContext.isDriveStart):
notifyClients('metrics', metrics)
break
case (metrics.metricsContext.isRecoveryStart):
notifyClients('metrics', metrics)
break
// no default
}
lastKnownMetrics = metrics
}

// initiated when a new heart rate value is received from heart rate sensor
async function presentHeartRate (value) {
heartRate = value.heartrate
heartRateBatteryLevel = value.batteryLevel
}

// Make sure that the GUI is updated with the latest metrics even when no fresh data arrives
function timeBasedPresenter () {
notifyClients('metrics', lastKnownMetrics)
}

/**
* @param {Metrics} metrics
*/
function addHeartRateToMetrics (metrics) {
if (heartRate !== undefined) {
metrics.heartrate = heartRate
} else {
metrics.heartrate = undefined
}
if (heartRateBatteryLevel !== undefined) {
metrics.heartRateBatteryLevel = heartRateBatteryLevel
} else {
metrics.heartRateBatteryLevel = undefined
}
}

function notifyClient (client, type, data) {
const messageString = JSON.stringify({ type, data })
if (wss.clients.has(client)) {
Expand All @@ -60,18 +160,61 @@ function createWebServer () {
}

function notifyClients (type, data) {
clearTimeout(timer)
if (type === 'metrics') { addHeartRateToMetrics(data) }
const messageString = JSON.stringify({ type, data })
wss.clients.forEach(function each (client) {
if (client.readyState === WebSocket.OPEN) {
client.send(messageString)
}
})
timer = setTimeout(timeBasedPresenter, config.webUpdateInterval)
}

function getConfig () {
return {
blePeripheralMode: config.bluetoothMode,
antPeripheralMode: config.antPlusMode,
hrmPeripheralMode: config.heartRateMode,
uploadEnabled: ((config.userSettings.strava.allowUpload && !config.userSettings.strava.autoUpload) || (config.userSettings.intervals.allowUpload && !config.userSettings.intervals.autoUpload) || (config.userSettings.rowsAndAll.allowUpload && !config.userSettings.rowsAndAll.autoUpload)),
shutdownEnabled: !!config.shutdownCommand
}
}

function resetLastKnownMetrics () {
lastKnownMetrics = {
strokeState: 'WaitingForDrive',
sessionState: 'WaitingForStart',
totalMovingTime: 0,
pauseCountdownTime: 0,
totalNumberOfStrokes: 0,
totalLinearDistance: 0,
cyclePace: Infinity,
cyclePower: 0,
cycleStrokeRate: 0,
driveLength: 0,
driveDuration: 0,
driveHandleForceCurve: [],
driveDistance: 0,
recoveryDuration: 0,
dragFactor: undefined,
interval: {
type: 'justrow',
movingTime: {
sinceStart: 0,
toEnd: 0
},
distance: {
fromStart: 0,
toEnd: 0
}
}
}
}

return Object.assign(emitter, {
notifyClient,
notifyClients
presentRowingMetrics,
presentHeartRate,
handleCommand
})
}

export { createWebServer }
63 changes: 0 additions & 63 deletions app/ant/AntManager.js

This file was deleted.

Loading
Loading