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.
@@ -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;
@@ -148,6 +148,8 @@ class PowerBasedCyclingModeBase extends base_1.CyclingModeBase {
148
148
  data.speed = speed;
149
149
  data.distanceInternal = distanceInternal + distance;
150
150
  }
151
+ if (data.speed < 0.1)
152
+ data.speed = 0;
151
153
  return t;
152
154
  }
153
155
  getCalcBasics(bikeData) {
@@ -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 = 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
- yield this.getComms().setBikeType(bikeType.toLowerCase());
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.data.pedalRpm,
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(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "incyclist-devices",
3
- "version": "2.1.39",
3
+ "version": "2.1.41",
4
4
  "dependencies": {
5
5
  "@serialport/bindings-interface": "^1.2.2",
6
6
  "@serialport/parser-byte-length": "^9.0.1",