diff --git a/src/app/app.js b/src/app/app.js index 3f8b358..5f76887 100644 --- a/src/app/app.js +++ b/src/app/app.js @@ -32,6 +32,10 @@ export const defaults = { serverAdapter: 'hci0', // adapter for receiving connections from apps serverName: 'Gymnasticon', // how the Gymnasticon will appear to apps serverPingInterval: 6, // send a 0-power 0-cadence update for cadence below 60 rpm + + // power adjustment (to compensate for inaccurate power measurements on bike) + powerScale: 1.0, // multiply power by this + powerOffset: 0.0, // add this to power }; /** @@ -64,6 +68,8 @@ export class App { this.pingInterval = new Timer(opts.serverPingInterval); this.statsTimeout = new Timer(opts.bikeStatsTimeout, {repeats: false}); this.connectTimeout = new Timer(opts.bikeConnectTimeout, {repeats: false}); + this.powerScale = opts.powerScale; + this.powerOffset = opts.powerOffset; this.pingInterval.on('timeout', this.onPingInterval.bind(this)); this.statsTimeout.on('timeout', this.onBikeStatsTimeout.bind(this)); @@ -109,6 +115,7 @@ export class App { } onBikeStats({ power, cadence }) { + power = power > 0 ? Math.max(0, Math.round(power * this.powerScale + this.powerOffset)) : 0; this.logger.log(`received stats from bike [power=${power}W cadence=${cadence}rpm]`); this.statsTimeout.reset(); this.power = power; diff --git a/src/app/cli-options.js b/src/app/cli-options.js index 223edbd..b776f82 100644 --- a/src/app/cli-options.js +++ b/src/app/cli-options.js @@ -68,5 +68,16 @@ export const options = { describe: ' ping app when user not pedaling', type: 'number', default: defaults.serverPingInterval, + }, + + 'power-scale': { + describe: ' scale watts by this multiplier', + type: 'number', + default: defaults.powerScale, + }, + 'power-offset': { + describe: ' add this value to watts', + type: 'number', + default: defaults.powerOffset, } };