incyclist-devices 3.0.11 → 3.0.12
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/cjs/ble/fm/sensor.js
CHANGED
|
@@ -22,6 +22,8 @@ class BleFitnessMachineDevice extends sensor_js_1.TBleSensor {
|
|
|
22
22
|
windSpeed = 0;
|
|
23
23
|
wheelSize = 2100;
|
|
24
24
|
ftmsServiceData;
|
|
25
|
+
rowerDataTS;
|
|
26
|
+
rowerMaxPower;
|
|
25
27
|
constructor(peripheral, props) {
|
|
26
28
|
super(peripheral, props);
|
|
27
29
|
this.reset();
|
|
@@ -262,6 +264,12 @@ class BleFitnessMachineDevice extends sensor_js_1.TBleSensor {
|
|
|
262
264
|
parseRowerData(_data) {
|
|
263
265
|
const data = Buffer.from(_data);
|
|
264
266
|
let offset = 2;
|
|
267
|
+
let maxPower;
|
|
268
|
+
if (!this.rowerDataTS || this.rowerDataTS + 1000 < Date.now()) {
|
|
269
|
+
this.rowerDataTS = Date.now();
|
|
270
|
+
maxPower = this.rowerMaxPower;
|
|
271
|
+
delete this.rowerMaxPower;
|
|
272
|
+
}
|
|
265
273
|
if (data.length > 2) {
|
|
266
274
|
try {
|
|
267
275
|
const flags = data.readUInt16LE(0);
|
|
@@ -294,12 +302,11 @@ class BleFitnessMachineDevice extends sensor_js_1.TBleSensor {
|
|
|
294
302
|
if (flags & 0x0020) {
|
|
295
303
|
this.data.instantaneousPower = data.readInt16LE(offset);
|
|
296
304
|
offset += 2;
|
|
305
|
+
this.rowerMaxPower = Math.max(this.rowerMaxPower ?? 0, this.data.instantaneousPower);
|
|
297
306
|
}
|
|
298
307
|
if (flags & 0x0040) {
|
|
299
308
|
this.data.averagePower = data.readInt16LE(offset);
|
|
300
309
|
offset += 2;
|
|
301
|
-
this.data.instantaneousPower = data.readInt16LE(offset);
|
|
302
|
-
offset += 2;
|
|
303
310
|
}
|
|
304
311
|
if (flags & 0x0080) {
|
|
305
312
|
this.data.resistanceLevel = data.readInt16LE(offset);
|
|
@@ -328,6 +335,8 @@ class BleFitnessMachineDevice extends sensor_js_1.TBleSensor {
|
|
|
328
335
|
if (flags & 0x1000) {
|
|
329
336
|
this.data.remainingTime = data.readUInt16LE(offset);
|
|
330
337
|
}
|
|
338
|
+
this.logEvent({ message: 'rower data', device: this.getName(), raw: data.toString('hex'), data: structuredClone(this.data), maxPower: this.rowerMaxPower });
|
|
339
|
+
this.data.instantaneousPower = this.rowerMaxPower;
|
|
331
340
|
}
|
|
332
341
|
catch (err) {
|
|
333
342
|
this.logEvent({ message: 'error', fn: 'parseRowerData()', device: this.getName(), data: data.toString('hex'), offset, error: err.message, stack: err.stack });
|
|
@@ -465,7 +474,7 @@ class BleFitnessMachineDevice extends sensor_js_1.TBleSensor {
|
|
|
465
474
|
return this.ftmsServiceData;
|
|
466
475
|
try {
|
|
467
476
|
const peripheral = this.peripheral;
|
|
468
|
-
if (
|
|
477
|
+
if (peripheral?.getServiceData === undefined)
|
|
469
478
|
return;
|
|
470
479
|
const bitSet = (value, bitNo) => (value & (0, utils_js_1.bit)(bitNo)) > 0;
|
|
471
480
|
const data = peripheral.getServiceData(consts_js_1.FTMS);
|
package/lib/esm/ble/fm/sensor.js
CHANGED
|
@@ -20,6 +20,8 @@ export default class BleFitnessMachineDevice extends TBleSensor {
|
|
|
20
20
|
windSpeed = 0;
|
|
21
21
|
wheelSize = 2100;
|
|
22
22
|
ftmsServiceData;
|
|
23
|
+
rowerDataTS;
|
|
24
|
+
rowerMaxPower;
|
|
23
25
|
constructor(peripheral, props) {
|
|
24
26
|
super(peripheral, props);
|
|
25
27
|
this.reset();
|
|
@@ -260,6 +262,12 @@ export default class BleFitnessMachineDevice extends TBleSensor {
|
|
|
260
262
|
parseRowerData(_data) {
|
|
261
263
|
const data = Buffer.from(_data);
|
|
262
264
|
let offset = 2;
|
|
265
|
+
let maxPower;
|
|
266
|
+
if (!this.rowerDataTS || this.rowerDataTS + 1000 < Date.now()) {
|
|
267
|
+
this.rowerDataTS = Date.now();
|
|
268
|
+
maxPower = this.rowerMaxPower;
|
|
269
|
+
delete this.rowerMaxPower;
|
|
270
|
+
}
|
|
263
271
|
if (data.length > 2) {
|
|
264
272
|
try {
|
|
265
273
|
const flags = data.readUInt16LE(0);
|
|
@@ -292,12 +300,11 @@ export default class BleFitnessMachineDevice extends TBleSensor {
|
|
|
292
300
|
if (flags & 0x0020) {
|
|
293
301
|
this.data.instantaneousPower = data.readInt16LE(offset);
|
|
294
302
|
offset += 2;
|
|
303
|
+
this.rowerMaxPower = Math.max(this.rowerMaxPower ?? 0, this.data.instantaneousPower);
|
|
295
304
|
}
|
|
296
305
|
if (flags & 0x0040) {
|
|
297
306
|
this.data.averagePower = data.readInt16LE(offset);
|
|
298
307
|
offset += 2;
|
|
299
|
-
this.data.instantaneousPower = data.readInt16LE(offset);
|
|
300
|
-
offset += 2;
|
|
301
308
|
}
|
|
302
309
|
if (flags & 0x0080) {
|
|
303
310
|
this.data.resistanceLevel = data.readInt16LE(offset);
|
|
@@ -326,6 +333,8 @@ export default class BleFitnessMachineDevice extends TBleSensor {
|
|
|
326
333
|
if (flags & 0x1000) {
|
|
327
334
|
this.data.remainingTime = data.readUInt16LE(offset);
|
|
328
335
|
}
|
|
336
|
+
this.logEvent({ message: 'rower data', device: this.getName(), raw: data.toString('hex'), data: structuredClone(this.data), maxPower: this.rowerMaxPower });
|
|
337
|
+
this.data.instantaneousPower = this.rowerMaxPower;
|
|
329
338
|
}
|
|
330
339
|
catch (err) {
|
|
331
340
|
this.logEvent({ message: 'error', fn: 'parseRowerData()', device: this.getName(), data: data.toString('hex'), offset, error: err.message, stack: err.stack });
|
|
@@ -463,7 +472,7 @@ export default class BleFitnessMachineDevice extends TBleSensor {
|
|
|
463
472
|
return this.ftmsServiceData;
|
|
464
473
|
try {
|
|
465
474
|
const peripheral = this.peripheral;
|
|
466
|
-
if (
|
|
475
|
+
if (peripheral?.getServiceData === undefined)
|
|
467
476
|
return;
|
|
468
477
|
const bitSet = (value, bitNo) => (value & bit(bitNo)) > 0;
|
|
469
478
|
const data = peripheral.getServiceData(FTMS);
|
|
@@ -19,6 +19,8 @@ export default class BleFitnessMachineDevice extends TBleSensor {
|
|
|
19
19
|
protected windSpeed: number;
|
|
20
20
|
protected wheelSize: number;
|
|
21
21
|
protected ftmsServiceData: FtmsServiceData;
|
|
22
|
+
protected rowerDataTS: number | undefined;
|
|
23
|
+
protected rowerMaxPower: number | undefined;
|
|
22
24
|
constructor(peripheral: IBlePeripheral, props?: any);
|
|
23
25
|
get features(): IndoorBikeFeatures;
|
|
24
26
|
reset(): void;
|