incyclist-devices 2.4.5 → 2.4.6-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -35,6 +35,7 @@ export default class SmartTrainerCyclingMode extends PowerBasedCyclingModeBase i
|
|
|
35
35
|
protected maintainPower: number;
|
|
36
36
|
protected prevData: any;
|
|
37
37
|
protected prevEkin: number;
|
|
38
|
+
protected prevSimPower: number;
|
|
38
39
|
protected readonly gearRatios: number[];
|
|
39
40
|
constructor(adapter: IAdapter, props?: any);
|
|
40
41
|
getBikeInitRequest(): UpdateRequest;
|
|
@@ -149,8 +149,6 @@ class SmartTrainerCyclingMode extends power_base_1.default {
|
|
|
149
149
|
return;
|
|
150
150
|
}
|
|
151
151
|
if (request.slope === undefined) {
|
|
152
|
-
console.log('# set simulated power (same slope):', { simPower: this.simPower, gear: this.gear, simSlope: this.simSlope, routeSlope: this.data.slope, cadence: this.data.pedalRpm, power: this.data.power });
|
|
153
|
-
this.logger.logEvent({ message: 'set simulated power (same slope)', simPower: this.simPower, gear: this.gear, simSlope: this.simSlope, routeSlope: this.data.slope, cadence: this.data.pedalRpm, power: this.data.power });
|
|
154
152
|
}
|
|
155
153
|
else {
|
|
156
154
|
const prev = (_a = this.data.slope) !== null && _a !== void 0 ? _a : 0;
|
|
@@ -189,6 +187,7 @@ class SmartTrainerCyclingMode extends power_base_1.default {
|
|
|
189
187
|
}
|
|
190
188
|
}
|
|
191
189
|
checkCadenceChange(request, newRequest = {}) {
|
|
190
|
+
var _a;
|
|
192
191
|
const virtshiftMode = this.getVirtualShiftMode();
|
|
193
192
|
if (virtshiftMode !== 'Simulated') {
|
|
194
193
|
return;
|
|
@@ -198,10 +197,8 @@ class SmartTrainerCyclingMode extends power_base_1.default {
|
|
|
198
197
|
return;
|
|
199
198
|
}
|
|
200
199
|
if (this.data.pedalRpm !== this.prevData.pedalRpm) {
|
|
201
|
-
console.log('# cadence changed ', { cadence: this.data.pedalRpm, prevCadence: this.prevData.pedalRpm });
|
|
202
200
|
this.logger.logEvent({ message: 'cadence changed', cadence: this.data.pedalRpm, prevCadence: this.prevData.pedalRpm });
|
|
203
|
-
|
|
204
|
-
delete request.slope;
|
|
201
|
+
request.slope = (_a = request.slope) !== null && _a !== void 0 ? _a : this.data.slope;
|
|
205
202
|
}
|
|
206
203
|
}
|
|
207
204
|
calculateSimulatedPower(changed) {
|
|
@@ -216,29 +213,23 @@ class SmartTrainerCyclingMode extends power_base_1.default {
|
|
|
216
213
|
const v = virtualSpeed / 3.6;
|
|
217
214
|
const newPower = calculations_1.default.calculatePower(m, virtualSpeed / 3.6, (_c = this.simSlope) !== null && _c !== void 0 ? _c : 0);
|
|
218
215
|
const prevPower = this.data.power;
|
|
216
|
+
const prev = ((_e = (_d = this.prevSimPower) !== null && _d !== void 0 ? _d : prevPower) !== null && _e !== void 0 ? _e : 0);
|
|
217
|
+
const delta = newPower - prev;
|
|
219
218
|
if (!this.prevEkin && this.data.isPedalling) {
|
|
220
219
|
this.simPower = Math.max(newPower, prevPower);
|
|
221
220
|
this.prevEkin = m * v * v / 2;
|
|
222
|
-
|
|
223
|
-
this.logger.logEvent({ message: 'set simulated power (starting)', power: this.simPower, gear: this.gear, simSlope: this.simSlope, routeSlope: this.data.slope, prevPower, newPower });
|
|
221
|
+
this.logger.logEvent({ message: 'set simulated power (starting)', target: this.simPower, gear: this.gear, simSlope: this.simSlope, routeSlope: this.data.slope, prevTarget: this.prevSimPower, actualPower: prevPower, newPower });
|
|
224
222
|
}
|
|
225
223
|
else if (changed === 'gear') {
|
|
226
|
-
this.simPower =
|
|
224
|
+
this.simPower = prev + delta / 2;
|
|
227
225
|
this.prevEkin = m * v * v / 2;
|
|
228
|
-
|
|
229
|
-
|
|
226
|
+
this.logger.logEvent({ message: 'set simulated power (gear change)', target: this.simPower, gear: this.gear, simSlope: this.simSlope, routeSlope: this.data.slope, prevTarget: this.prevSimPower, actualPower: prevPower, newPower });
|
|
227
|
+
}
|
|
228
|
+
else if (changed === 'slope' || changed === 'cadence') {
|
|
229
|
+
this.simPower = prev + delta / 4;
|
|
230
|
+
this.logger.logEvent({ message: `set simulated power (${changed} change)`, target: this.simPower, gear: this.gear, simSlope: this.simSlope, routeSlope: this.data.slope, prevTarget: this.prevSimPower, actualPower: prevPower, newPower });
|
|
230
231
|
}
|
|
231
232
|
else {
|
|
232
|
-
const powerDiff = newPower - prevPower;
|
|
233
|
-
const vTarget = virtualSpeed * 1000 / 3600;
|
|
234
|
-
const eKinTarget = m * vTarget * vTarget / 2;
|
|
235
|
-
const eKinPrev = (_d = this.prevEkin) !== null && _d !== void 0 ? _d : 0;
|
|
236
|
-
const delta = eKinTarget - eKinPrev;
|
|
237
|
-
const eKinAfter1sec = eKinPrev + powerDiff * 1;
|
|
238
|
-
const vAfter1sec = Math.sqrt(eKinAfter1sec / m * 2);
|
|
239
|
-
this.simPower = calculations_1.default.calculatePower(m, vAfter1sec, (_e = this.simSlope) !== null && _e !== void 0 ? _e : 0);
|
|
240
|
-
console.log('# set simulated power (Ekin):', { power: this.simPower, gear: this.gear, simSlope: this.simSlope, routeSlope: this.data.slope, eKinPrev, eKinTarget, delta, prevPower, newPower });
|
|
241
|
-
this.logger.logEvent({ message: 'set simulated power (Ekin)', power: this.simPower, gear: this.gear, simSlope: this.simSlope, routeSlope: this.data.slope, eKinPrev, eKinTarget, delta, prevPower, newPower });
|
|
242
233
|
}
|
|
243
234
|
}
|
|
244
235
|
else {
|
|
@@ -280,6 +271,7 @@ class SmartTrainerCyclingMode extends power_base_1.default {
|
|
|
280
271
|
this.calculateSimulatedPower('gear');
|
|
281
272
|
if (this.simPower !== undefined) {
|
|
282
273
|
this.adapter.sendUpdate({ targetPower: this.simPower }).then(() => { });
|
|
274
|
+
this.prevSimPower = this.simPower;
|
|
283
275
|
}
|
|
284
276
|
}
|
|
285
277
|
break;
|
|
@@ -430,6 +422,9 @@ class SmartTrainerCyclingMode extends power_base_1.default {
|
|
|
430
422
|
catch (err) {
|
|
431
423
|
this.logger.logEvent({ message: "error", fn: 'sendBikeUpdate()', error: err.message, stack: err.stack });
|
|
432
424
|
}
|
|
425
|
+
if (newRequest.targetPower) {
|
|
426
|
+
this.prevSimPower = newRequest.targetPower;
|
|
427
|
+
}
|
|
433
428
|
return newRequest;
|
|
434
429
|
}
|
|
435
430
|
getGearString() {
|