incyclist-devices 2.1.39 → 2.1.41
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.
- package/lib/modes/antble-smarttrainer.d.ts +13 -2
- package/lib/modes/antble-smarttrainer.js +9 -1
- package/lib/modes/power-base.js +2 -0
- package/lib/modes/simulator.js +7 -2
- package/lib/serial/daum/classic/adapter.js +5 -1
- package/lib/simulator/Simulator.d.ts +1 -0
- package/lib/simulator/Simulator.js +9 -2
- package/package.json +1 -1
|
@@ -5,14 +5,25 @@ export default class SmartTrainerCyclingMode extends PowerBasedCyclingModeBase i
|
|
|
5
5
|
protected static config: {
|
|
6
6
|
name: string;
|
|
7
7
|
description: string;
|
|
8
|
-
properties: {
|
|
8
|
+
properties: ({
|
|
9
9
|
key: string;
|
|
10
10
|
name: string;
|
|
11
11
|
description: string;
|
|
12
12
|
type: CyclingModeProperyType;
|
|
13
13
|
options: string[];
|
|
14
14
|
default: string;
|
|
15
|
-
|
|
15
|
+
min?: undefined;
|
|
16
|
+
max?: undefined;
|
|
17
|
+
} | {
|
|
18
|
+
key: string;
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
type: CyclingModeProperyType;
|
|
22
|
+
default: number;
|
|
23
|
+
min: number;
|
|
24
|
+
max: number;
|
|
25
|
+
options?: undefined;
|
|
26
|
+
})[];
|
|
16
27
|
};
|
|
17
28
|
constructor(adapter: IAdapter, props?: any);
|
|
18
29
|
getBikeInitRequest(): UpdateRequest;
|
|
@@ -27,6 +27,13 @@ class SmartTrainerCyclingMode extends power_base_1.default {
|
|
|
27
27
|
if (request.slope !== undefined) {
|
|
28
28
|
newRequest.slope = parseFloat(request.slope.toFixed(1));
|
|
29
29
|
this.data.slope = newRequest.slope;
|
|
30
|
+
try {
|
|
31
|
+
const slopeAdj = this.getSetting('slopeAdj');
|
|
32
|
+
if (slopeAdj !== undefined)
|
|
33
|
+
newRequest.slope = newRequest.slope * slopeAdj / 100;
|
|
34
|
+
}
|
|
35
|
+
catch (_a) {
|
|
36
|
+
}
|
|
30
37
|
}
|
|
31
38
|
}
|
|
32
39
|
checkEmptyRequest(newRequest) {
|
|
@@ -59,7 +66,8 @@ SmartTrainerCyclingMode.config = {
|
|
|
59
66
|
name: "Smart Trainer",
|
|
60
67
|
description: "Calculates speed based on power and slope. Slope is set to the device",
|
|
61
68
|
properties: [
|
|
62
|
-
{ key: 'bikeType', name: 'Bike Type', description: '', type: types_1.CyclingModeProperyType.SingleSelect, options: ['Race', 'Mountain', 'Triathlon'], default: 'Race' }
|
|
69
|
+
{ key: 'bikeType', name: 'Bike Type', description: '', type: types_1.CyclingModeProperyType.SingleSelect, options: ['Race', 'Mountain', 'Triathlon'], default: 'Race' },
|
|
70
|
+
{ key: 'slopeAdj', name: 'Slope Adjustment', description: 'Percentage of slope that should be sent to the SmartTrainer. Should be used in case the slopes are feeling too hard', type: types_1.CyclingModeProperyType.Integer, default: 100, min: 0, max: 200 }
|
|
63
71
|
]
|
|
64
72
|
};
|
|
65
73
|
exports.default = SmartTrainerCyclingMode;
|
package/lib/modes/power-base.js
CHANGED
package/lib/modes/simulator.js
CHANGED
|
@@ -26,7 +26,7 @@ class SimulatorCyclingMode extends power_base_1.default {
|
|
|
26
26
|
delete this.event.gearUpdated;
|
|
27
27
|
delete this.event.rpmUpdated;
|
|
28
28
|
try {
|
|
29
|
-
let rpm = 90;
|
|
29
|
+
let rpm = bikeData.pedalRpm === undefined ? 90 : bikeData.pedalRpm;
|
|
30
30
|
let power = (!mode || mode.toLowerCase() === 'power') ? Number(this.getSetting('power')) : bikeData.power || 0;
|
|
31
31
|
let slope = (prevData.slope !== undefined ? prevData.slope : prevRequest.slope || 0);
|
|
32
32
|
let speed = mode.toLowerCase() === 'speed' ? Number(this.getSetting('speed')) : bikeData.speed || 0;
|
|
@@ -37,11 +37,15 @@ class SimulatorCyclingMode extends power_base_1.default {
|
|
|
37
37
|
const t = this.getTimeSinceLastUpdate();
|
|
38
38
|
let distance = 0;
|
|
39
39
|
if (!mode || mode.toLowerCase() === 'power') {
|
|
40
|
+
if (rpm === 0)
|
|
41
|
+
power = 0;
|
|
40
42
|
const res = this.calculateSpeedAndDistance(power, slope, m, t, { bikeType });
|
|
41
43
|
speed = res.speed;
|
|
42
44
|
distance = res.distance;
|
|
43
45
|
}
|
|
44
46
|
else if (mode.toLowerCase() === 'speed') {
|
|
47
|
+
if (rpm === 0)
|
|
48
|
+
speed = 0;
|
|
45
49
|
const res = this.calculatePowerAndDistance(speed, slope, m, t, { bikeType });
|
|
46
50
|
power = res.power;
|
|
47
51
|
distance = res.distance;
|
|
@@ -72,7 +76,8 @@ class SimulatorCyclingMode extends power_base_1.default {
|
|
|
72
76
|
data.speed = speed;
|
|
73
77
|
data.distanceInternal = distanceInternal + distance;
|
|
74
78
|
}
|
|
75
|
-
data.speed
|
|
79
|
+
if (data.speed < 0.1)
|
|
80
|
+
data.speed = 0;
|
|
76
81
|
data.power = Math.round(power);
|
|
77
82
|
data.distanceInternal = distanceInternal + distance;
|
|
78
83
|
data.slope = slope;
|
|
@@ -125,7 +125,11 @@ class DaumClassicAdapter extends DaumAdapter_1.default {
|
|
|
125
125
|
}
|
|
126
126
|
if (!wasPaused && !startState.setBikeType) {
|
|
127
127
|
const bikeType = this.getCyclingMode().getSetting('bikeType') || 'race';
|
|
128
|
-
|
|
128
|
+
try {
|
|
129
|
+
yield this.getComms().setBikeType(bikeType.toLowerCase());
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
}
|
|
129
133
|
startState.setBikeType = true;
|
|
130
134
|
}
|
|
131
135
|
if (!wasPaused && !startState.startProg) {
|
|
@@ -41,6 +41,7 @@ export declare class Simulator extends IncyclistDevice<SimulatorProperties> {
|
|
|
41
41
|
pause(): Promise<boolean>;
|
|
42
42
|
resume(): Promise<boolean>;
|
|
43
43
|
toggle(): Promise<boolean>;
|
|
44
|
+
adjustCadence(delta: any): void;
|
|
44
45
|
faster(): void;
|
|
45
46
|
slower(): void;
|
|
46
47
|
update(): void;
|
|
@@ -121,6 +121,12 @@ class Simulator extends adpater_1.default {
|
|
|
121
121
|
}
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
|
+
adjustCadence(delta) {
|
|
125
|
+
this.cadence += delta;
|
|
126
|
+
if (this.cadence < 0)
|
|
127
|
+
this.cadence = 0;
|
|
128
|
+
this.logger.logEvent({ message: 'cadence adjusted', device: this.getName(), cadence: this.cadence });
|
|
129
|
+
}
|
|
124
130
|
faster() {
|
|
125
131
|
if (this.speed < 15)
|
|
126
132
|
this.speed += 5;
|
|
@@ -154,12 +160,13 @@ class Simulator extends adpater_1.default {
|
|
|
154
160
|
const prevDist = this.data.distanceInternal;
|
|
155
161
|
const d = this.data;
|
|
156
162
|
const prevTime = d.deviceTime;
|
|
163
|
+
this.data.pedalRpm = this.cadence;
|
|
157
164
|
this.data = this.getCyclingMode().updateData(this.data);
|
|
158
165
|
let data = {
|
|
159
166
|
speed: this.data.speed,
|
|
160
167
|
slope: this.data.slope,
|
|
161
|
-
power: this.data.power,
|
|
162
|
-
cadence: this.
|
|
168
|
+
power: this.cadence === 0 ? 0 : this.data.power,
|
|
169
|
+
cadence: this.cadence,
|
|
163
170
|
distance: this.data.distanceInternal - prevDist,
|
|
164
171
|
heartrate: Math.round(this.data.power - 10 + Math.random() * 20),
|
|
165
172
|
timestamp: Date.now(),
|