motion-master-client 0.0.43 → 0.0.44
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/package.json +17 -2
- package/src/index.js +29 -0
- package/src/index.js.map +1 -0
- package/src/lib/cia402.d.ts +182 -0
- package/src/lib/cia402.js +392 -0
- package/src/lib/cia402.js.map +1 -0
- package/src/lib/config-file.d.ts +13 -0
- package/src/lib/config-file.js +50 -0
- package/src/lib/config-file.js.map +1 -0
- package/src/lib/device-log-line.d.ts +5 -0
- package/src/lib/device-log-line.js +3 -0
- package/src/lib/device-log-line.js.map +1 -0
- package/src/lib/device-parameter.d.ts +56 -0
- package/src/lib/device-parameter.js +39 -0
- package/src/lib/device-parameter.js.map +1 -0
- package/src/lib/device.d.ts +9 -0
- package/src/lib/device.js +3 -0
- package/src/lib/device.js.map +1 -0
- package/src/lib/hardware-description.d.ts +41 -0
- package/src/lib/hardware-description.js +94 -0
- package/src/lib/hardware-description.js.map +1 -0
- package/src/lib/logger.d.ts +1 -0
- package/src/lib/logger.js +8 -0
- package/src/lib/logger.js.map +1 -0
- package/src/lib/monitoring-config.d.ts +6 -0
- package/src/lib/monitoring-config.js +3 -0
- package/src/lib/monitoring-config.js.map +1 -0
- package/src/lib/{monitoring-entry.ts → monitoring-entry.d.ts} +4 -5
- package/src/lib/monitoring-entry.js +3 -0
- package/src/lib/monitoring-entry.js.map +1 -0
- package/src/lib/motion-master-client.d.ts +56 -0
- package/src/lib/motion-master-client.js +167 -0
- package/src/lib/motion-master-client.js.map +1 -0
- package/src/lib/motion-master-pub-sub-client.d.ts +17 -0
- package/src/lib/motion-master-pub-sub-client.js +73 -0
- package/src/lib/motion-master-pub-sub-client.js.map +1 -0
- package/src/lib/motion-master-pub-sub-socket.d.ts +34 -0
- package/src/lib/motion-master-pub-sub-socket.js +3 -0
- package/src/lib/motion-master-pub-sub-socket.js.map +1 -0
- package/src/lib/motion-master-pub-sub-web-socket.d.ts +14 -0
- package/src/lib/motion-master-pub-sub-web-socket.js +67 -0
- package/src/lib/motion-master-pub-sub-web-socket.js.map +1 -0
- package/src/lib/motion-master-pub-sub-worker-socket.d.ts +14 -0
- package/src/lib/motion-master-pub-sub-worker-socket.js +42 -0
- package/src/lib/motion-master-pub-sub-worker-socket.js.map +1 -0
- package/src/lib/motion-master-req-res-client.d.ts +947 -0
- package/src/lib/motion-master-req-res-client.js +1735 -0
- package/src/lib/motion-master-req-res-client.js.map +1 -0
- package/src/lib/motion-master-req-res-socket.d.ts +52 -0
- package/src/lib/motion-master-req-res-socket.js +3 -0
- package/src/lib/motion-master-req-res-socket.js.map +1 -0
- package/src/lib/motion-master-req-res-web-socket.d.ts +24 -0
- package/src/lib/motion-master-req-res-web-socket.js +99 -0
- package/src/lib/motion-master-req-res-web-socket.js.map +1 -0
- package/src/lib/motion-master-req-res-worker-socket.d.ts +20 -0
- package/src/lib/motion-master-req-res-worker-socket.js +69 -0
- package/src/lib/motion-master-req-res-worker-socket.js.map +1 -0
- package/src/lib/operators.d.ts +20 -0
- package/src/lib/operators.js +85 -0
- package/src/lib/operators.js.map +1 -0
- package/src/lib/options.d.ts +10 -0
- package/src/lib/options.js +14 -0
- package/src/lib/options.js.map +1 -0
- package/src/lib/parameter.d.ts +72 -0
- package/src/lib/parameter.js +119 -0
- package/src/lib/parameter.js.map +1 -0
- package/src/lib/product-id-range.d.ts +7 -0
- package/src/lib/product-id-range.js +12 -0
- package/src/lib/product-id-range.js.map +1 -0
- package/src/lib/request-status-resolver.d.ts +4 -0
- package/src/lib/request-status-resolver.js +345 -0
- package/src/lib/request-status-resolver.js.map +1 -0
- package/src/lib/system-log-line.d.ts +9 -0
- package/src/lib/system-log-line.js +3 -0
- package/src/lib/system-log-line.js.map +1 -0
- package/src/lib/{types.ts → types.d.ts} +149 -81
- package/src/lib/types.js +29 -0
- package/src/lib/types.js.map +1 -0
- package/src/lib/urls.d.ts +3 -0
- package/src/lib/urls.js +10 -0
- package/src/lib/urls.js.map +1 -0
- package/src/lib/util.d.ts +42 -0
- package/src/lib/util.js +326 -0
- package/src/lib/util.js.map +1 -0
- package/.babelrc +0 -3
- package/.eslintrc.json +0 -18
- package/jest.config.ts +0 -16
- package/motion-master.proto +0 -1822
- package/project.json +0 -45
- package/src/lib/cia402.spec.ts +0 -77
- package/src/lib/cia402.ts +0 -414
- package/src/lib/config-file.spec.ts +0 -114
- package/src/lib/config-file.ts +0 -63
- package/src/lib/device-log-line.ts +0 -5
- package/src/lib/device-parameter.spec.ts +0 -85
- package/src/lib/device-parameter.ts +0 -79
- package/src/lib/device.ts +0 -10
- package/src/lib/hardware-description.spec.ts +0 -253
- package/src/lib/hardware-description.ts +0 -129
- package/src/lib/logger.ts +0 -5
- package/src/lib/monitoring-config.ts +0 -6
- package/src/lib/motion-master-client.ts +0 -250
- package/src/lib/motion-master-pub-sub-client.ts +0 -100
- package/src/lib/motion-master-pub-sub-socket.ts +0 -40
- package/src/lib/motion-master-pub-sub-web-socket.ts +0 -78
- package/src/lib/motion-master-pub-sub-worker-socket.ts +0 -51
- package/src/lib/motion-master-req-res-client.spec.ts +0 -740
- package/src/lib/motion-master-req-res-client.ts +0 -2206
- package/src/lib/motion-master-req-res-socket.ts +0 -62
- package/src/lib/motion-master-req-res-web-socket.ts +0 -124
- package/src/lib/motion-master-req-res-worker-socket.ts +0 -87
- package/src/lib/operators.ts +0 -110
- package/src/lib/options.ts +0 -12
- package/src/lib/parameter.spec.ts +0 -160
- package/src/lib/parameter.ts +0 -170
- package/src/lib/product-id-range.ts +0 -8
- package/src/lib/request-status-resolver.ts +0 -403
- package/src/lib/system-log-line.ts +0 -9
- package/src/lib/urls.ts +0 -6
- package/src/lib/util.ts +0 -317
- package/tsconfig.json +0 -23
- package/tsconfig.lib.json +0 -10
- package/tsconfig.spec.json +0 -20
- package/typedoc.json +0 -10
- /package/src/{index.ts → index.d.ts} +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigFile = void 0;
|
|
4
|
+
const Papa = require("papaparse");
|
|
5
|
+
const parameter_1 = require("./parameter");
|
|
6
|
+
class ConfigFile {
|
|
7
|
+
constructor(content, file) {
|
|
8
|
+
var _a;
|
|
9
|
+
this.content = content;
|
|
10
|
+
this.file = file;
|
|
11
|
+
const parseResult = Papa.parse(content, {
|
|
12
|
+
skipEmptyLines: true,
|
|
13
|
+
transform: (value) => value.trim(),
|
|
14
|
+
});
|
|
15
|
+
if (((_a = parseResult === null || parseResult === void 0 ? void 0 : parseResult.errors) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
16
|
+
throw new Error('Failed to parse the config csv file');
|
|
17
|
+
}
|
|
18
|
+
const matchApiId = content.match(/^#\s+(\d{4}-\d{2})$/m);
|
|
19
|
+
if (matchApiId) {
|
|
20
|
+
this.apiId = matchApiId[1];
|
|
21
|
+
}
|
|
22
|
+
const matchFirmwareVersion = content.match(/^#\s+(v\d.*)$/m);
|
|
23
|
+
if (matchFirmwareVersion) {
|
|
24
|
+
this.firmwareVersion = matchFirmwareVersion[1];
|
|
25
|
+
}
|
|
26
|
+
const matchFirstParameterRow = content.match(/^0x\d{4}/m);
|
|
27
|
+
if (matchFirstParameterRow === null || matchFirstParameterRow === void 0 ? void 0 : matchFirstParameterRow.index) {
|
|
28
|
+
this.header = content.slice(0, matchFirstParameterRow.index - 1);
|
|
29
|
+
}
|
|
30
|
+
this.parameters = parseResult.data
|
|
31
|
+
.filter(([c0]) => c0.startsWith('0x'))
|
|
32
|
+
.map(([c0, c1, c2]) => {
|
|
33
|
+
const index = parseInt(c0, 16);
|
|
34
|
+
const subindex = parseInt(c1, 10);
|
|
35
|
+
const numValue = Number(c2);
|
|
36
|
+
const value = isNaN(numValue) ? c2 : numValue;
|
|
37
|
+
return { index, subindex, value };
|
|
38
|
+
})
|
|
39
|
+
.sort(parameter_1.parametersCompareFn);
|
|
40
|
+
}
|
|
41
|
+
toString() {
|
|
42
|
+
let out = this.parameters.map((p) => { var _a, _b; return `0x${(_a = p.index) === null || _a === void 0 ? void 0 : _a.toString(16)}, ${(_b = p.subindex) === null || _b === void 0 ? void 0 : _b.toString(10)}, ${p.value}`; }).join('\n');
|
|
43
|
+
if (this.header) {
|
|
44
|
+
out = this.header + '\n' + out;
|
|
45
|
+
}
|
|
46
|
+
return out + '\n';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.ConfigFile = ConfigFile;
|
|
50
|
+
//# sourceMappingURL=config-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-file.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/config-file.ts"],"names":[],"mappings":";;;AAAA,kCAAkC;AAClC,2CAA6D;AAK7D,MAAa,UAAU;IAQrB,YACkB,OAAe,EACf,IAA4D;;QAD5D,YAAO,GAAP,OAAO,CAAQ;QACf,SAAI,GAAJ,IAAI,CAAwD;QAE5E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAW,OAAO,EAAE;YAChD,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE;SAC3C,CAAC,CAAC;QAEH,IAAI,CAAA,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,0CAAE,MAAM,IAAG,CAAC,EAAE;YACnC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;SACxD;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACzD,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;SAC5B;QAED,MAAM,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC7D,IAAI,oBAAoB,EAAE;YACxB,IAAI,CAAC,eAAe,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;SAChD;QAED,MAAM,sBAAsB,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,KAAK,EAAE;YACjC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;SAClE;QAED,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,IAAI;aAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;YACpB,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC9C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACpC,CAAC,CAAC;aACD,IAAI,CAAC,+BAAmB,CAAC,CAAC;IAC/B,CAAC;IAED,QAAQ;QACN,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,eAAC,OAAA,KAAK,MAAA,CAAC,CAAC,KAAK,0CAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,MAAA,CAAC,CAAC,QAAQ,0CAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAA,EAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvH,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC;SAChC;QACD,OAAO,GAAG,GAAG,IAAI,CAAC;IACpB,CAAC;CAEF;AAxDD,gCAwDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-log-line.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/device-log-line.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Parameter } from "./parameter";
|
|
2
|
+
export interface DeviceParameter extends Parameter {
|
|
3
|
+
id: string;
|
|
4
|
+
flags?: {
|
|
5
|
+
access?: 'ro' | 'rw' | 'wo';
|
|
6
|
+
category?: 'm' | 'o' | 'c';
|
|
7
|
+
pdoMapping?: 't' | 'r' | 'tr';
|
|
8
|
+
safetyMapping?: 'si' | 'so' | 'sio' | 'sp';
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Make device parameter id by providing a device serial number and tuple of index and subindex.
|
|
13
|
+
*
|
|
14
|
+
* @param serialNumber - device serial number from the hardware description file
|
|
15
|
+
* @param tuple - an array of index and subindex
|
|
16
|
+
* @throws {Error} if index or subindex are less than 0
|
|
17
|
+
* @returns combined index and subindex in uppercase hexadecimal format, e.g. "0x60FE:02"
|
|
18
|
+
*/
|
|
19
|
+
export declare function makeDeviceParameterId(serialNumber: string, tuple: [(number | null | undefined), (number | null | undefined)]): string;
|
|
20
|
+
/**
|
|
21
|
+
* Make device parameter id by providing a device serial number and object which has index and subindex properties.
|
|
22
|
+
*
|
|
23
|
+
* @param serialNumber - device serial number from the hardware description file
|
|
24
|
+
* @param parameter - an object with optional index and subindex properties
|
|
25
|
+
* @throws {Error} if index or subindex are less than 0
|
|
26
|
+
* @returns combined index and subindex in uppercase hexadecimal format, e.g. "0x60FE:02"
|
|
27
|
+
*/
|
|
28
|
+
export declare function makeDeviceParameterId(serialNumber: string, parameter: {
|
|
29
|
+
index?: (number | null);
|
|
30
|
+
subindex?: (number | null);
|
|
31
|
+
}): string;
|
|
32
|
+
/**
|
|
33
|
+
* Make parameter id by providing a device serial number and index and subindex.
|
|
34
|
+
*
|
|
35
|
+
* @param serialNumber - device serial number from the hardware description file
|
|
36
|
+
* @param index - from 0x0000 to 0xFFFF for objects defined in ESI and >0xFFFF for custom object
|
|
37
|
+
* @param subindex - defaults to 0 if not provided
|
|
38
|
+
* @throws {Error} if index or subindex are less than 0
|
|
39
|
+
* @returns combined index and subindex in uppercase hexadecimal format, e.g. "0x60FE:02"
|
|
40
|
+
*/
|
|
41
|
+
export declare function makeDeviceParameterId(serialNumber: string, index?: (number | null), subindex?: (number | null)): string;
|
|
42
|
+
/**
|
|
43
|
+
* Example of device parameter id is "0x2110:1A.8502-03-0001353-2115" where:
|
|
44
|
+
* - 0x2110 is object index in hexadecimal format
|
|
45
|
+
* - 1A is subindex in hexadecimal format
|
|
46
|
+
* - 8502-03-0001353-2115 is device serial number from hardware description file
|
|
47
|
+
*/
|
|
48
|
+
export declare const deviceParameterIdRegExp: RegExp;
|
|
49
|
+
/**
|
|
50
|
+
* Split device parameter id into parts.
|
|
51
|
+
*
|
|
52
|
+
* @param id - device parameter id like "0x2110:1A.8502-03-0001353-2115"
|
|
53
|
+
* @returns tuple of device serial number, index, and subindex
|
|
54
|
+
*/
|
|
55
|
+
export declare function splitDeviceParameterId(id: string): [string, number, number];
|
|
56
|
+
export declare function isDeviceParameterId(id: string): boolean;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isDeviceParameterId = exports.splitDeviceParameterId = exports.deviceParameterIdRegExp = exports.makeDeviceParameterId = void 0;
|
|
4
|
+
const parameter_1 = require("./parameter");
|
|
5
|
+
function makeDeviceParameterId(serialNumber, a, b) {
|
|
6
|
+
const parameterId = (0, parameter_1.makeParameterId)(a, b);
|
|
7
|
+
return `${parameterId}.${serialNumber}`;
|
|
8
|
+
}
|
|
9
|
+
exports.makeDeviceParameterId = makeDeviceParameterId;
|
|
10
|
+
/**
|
|
11
|
+
* Example of device parameter id is "0x2110:1A.8502-03-0001353-2115" where:
|
|
12
|
+
* - 0x2110 is object index in hexadecimal format
|
|
13
|
+
* - 1A is subindex in hexadecimal format
|
|
14
|
+
* - 8502-03-0001353-2115 is device serial number from hardware description file
|
|
15
|
+
*/
|
|
16
|
+
exports.deviceParameterIdRegExp = /^0x([0-9a-fA-F]{4,}):([0-9a-fA-F]{2})\.([\d-]+)$/;
|
|
17
|
+
/**
|
|
18
|
+
* Split device parameter id into parts.
|
|
19
|
+
*
|
|
20
|
+
* @param id - device parameter id like "0x2110:1A.8502-03-0001353-2115"
|
|
21
|
+
* @returns tuple of device serial number, index, and subindex
|
|
22
|
+
*/
|
|
23
|
+
function splitDeviceParameterId(id) {
|
|
24
|
+
const match = id.match(exports.deviceParameterIdRegExp);
|
|
25
|
+
if (!match) {
|
|
26
|
+
throw new Error(`Device parameter id "${id}" doesn't match the regular expression: ${exports.deviceParameterIdRegExp}`);
|
|
27
|
+
}
|
|
28
|
+
return [
|
|
29
|
+
match[3],
|
|
30
|
+
parseInt(match[1], 16),
|
|
31
|
+
parseInt(match[2], 16), // subindex
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
exports.splitDeviceParameterId = splitDeviceParameterId;
|
|
35
|
+
function isDeviceParameterId(id) {
|
|
36
|
+
return exports.deviceParameterIdRegExp.test(id);
|
|
37
|
+
}
|
|
38
|
+
exports.isDeviceParameterId = isDeviceParameterId;
|
|
39
|
+
//# sourceMappingURL=device-parameter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-parameter.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/device-parameter.ts"],"names":[],"mappings":";;;AAAA,2CAAyD;AA2CzD,SAAgB,qBAAqB,CAAC,YAAoB,EAAE,CAA0I,EAAE,CAAmB;IACzN,MAAM,WAAW,GAAG,IAAA,2BAAe,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,OAAO,GAAG,WAAW,IAAI,YAAY,EAAE,CAAC;AAC1C,CAAC;AAHD,sDAGC;AAED;;;;;GAKG;AACU,QAAA,uBAAuB,GAAG,kDAAkD,CAAC;AAE1F;;;;;GAKG;AACH,SAAgB,sBAAsB,CAAC,EAAU;IAC/C,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,+BAAuB,CAAC,CAAC;IAEhD,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,2CAA2C,+BAAuB,EAAE,CAAC,CAAC;KACjH;IAED,OAAO;QACL,KAAK,CAAC,CAAC,CAAC;QACR,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACtB,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,WAAW;KACpC,CAAC;AACJ,CAAC;AAZD,wDAYC;AAED,SAAgB,mBAAmB,CAAC,EAAU;IAC5C,OAAO,+BAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1C,CAAC;AAFD,kDAEC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/device.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface HardwareComponent {
|
|
2
|
+
name: string;
|
|
3
|
+
version: string;
|
|
4
|
+
serialNumber: string;
|
|
5
|
+
}
|
|
6
|
+
export type AssemblyComponent = HardwareComponent;
|
|
7
|
+
export type DeviceComponent = HardwareComponent;
|
|
8
|
+
export interface Assembly {
|
|
9
|
+
name: string;
|
|
10
|
+
id: string;
|
|
11
|
+
version: string;
|
|
12
|
+
serialNumber: string;
|
|
13
|
+
components: AssemblyComponent[];
|
|
14
|
+
}
|
|
15
|
+
export interface HardwareDevice {
|
|
16
|
+
name: string;
|
|
17
|
+
id: string;
|
|
18
|
+
version: string;
|
|
19
|
+
keyId: string;
|
|
20
|
+
serialNumber: string;
|
|
21
|
+
macAddress: string;
|
|
22
|
+
components: DeviceComponent[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* @link https://docs.google.com/document/d/1N00-ZjxHkjoWNIsnoTtza9CUHrxm8-e54298DXLuD94
|
|
26
|
+
*/
|
|
27
|
+
export interface HardwareDescription {
|
|
28
|
+
fileVersion: string;
|
|
29
|
+
assembly?: Assembly;
|
|
30
|
+
device: HardwareDevice;
|
|
31
|
+
}
|
|
32
|
+
export declare function getIdFromHardwareDescription(hd: HardwareDescription): string;
|
|
33
|
+
export declare function getApiIdentifierFromHardwareDescription(hd: HardwareDescription, skipKeyId?: boolean): string;
|
|
34
|
+
export declare function getNameFromHardwareDescription(hd: HardwareDescription): string;
|
|
35
|
+
export declare function getSerialNumberFromHardwareDescription(hd: HardwareDescription): string;
|
|
36
|
+
export declare function getAllComponentsFromHardwareDescription(hd: HardwareDescription): HardwareComponent[];
|
|
37
|
+
export declare function hardwareComponentsMatch(a: HardwareComponent[], b: HardwareComponent[]): boolean;
|
|
38
|
+
export declare function isHardwareDescriptionCompatibleWithPackageFilename(hardwareDescription: HardwareDescription, packageFilename: string): boolean;
|
|
39
|
+
export declare function getHardwareComponentsFromPackageFilename(packageFilename: string): HardwareComponent[];
|
|
40
|
+
export declare function getVersionFromPackageFilename(packageFilename: string): string | undefined;
|
|
41
|
+
export declare function getApiIdentifierFromPackageFilename(packageFilename: string): string | undefined;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getApiIdentifierFromPackageFilename = exports.getVersionFromPackageFilename = exports.getHardwareComponentsFromPackageFilename = exports.isHardwareDescriptionCompatibleWithPackageFilename = exports.hardwareComponentsMatch = exports.getAllComponentsFromHardwareDescription = exports.getSerialNumberFromHardwareDescription = exports.getNameFromHardwareDescription = exports.getApiIdentifierFromHardwareDescription = exports.getIdFromHardwareDescription = void 0;
|
|
4
|
+
const lodash_1 = require("lodash");
|
|
5
|
+
const semver_1 = require("semver");
|
|
6
|
+
function getIdFromHardwareDescription(hd) {
|
|
7
|
+
return hd.assembly
|
|
8
|
+
? hd.assembly.id
|
|
9
|
+
: hd.device.id;
|
|
10
|
+
}
|
|
11
|
+
exports.getIdFromHardwareDescription = getIdFromHardwareDescription;
|
|
12
|
+
function getApiIdentifierFromHardwareDescription(hd, skipKeyId = false) {
|
|
13
|
+
let apiId = hd.assembly
|
|
14
|
+
? `${hd.assembly.id}-${hd.assembly.version}`
|
|
15
|
+
: `${hd.device.id}-${hd.device.version}`;
|
|
16
|
+
if (!skipKeyId && hd.device.keyId) {
|
|
17
|
+
apiId += `-${hd.device.keyId}`;
|
|
18
|
+
}
|
|
19
|
+
return apiId;
|
|
20
|
+
}
|
|
21
|
+
exports.getApiIdentifierFromHardwareDescription = getApiIdentifierFromHardwareDescription;
|
|
22
|
+
function getNameFromHardwareDescription(hd) {
|
|
23
|
+
return hd.assembly
|
|
24
|
+
? hd.assembly.name
|
|
25
|
+
: hd.device.name;
|
|
26
|
+
}
|
|
27
|
+
exports.getNameFromHardwareDescription = getNameFromHardwareDescription;
|
|
28
|
+
function getSerialNumberFromHardwareDescription(hd) {
|
|
29
|
+
return hd.assembly
|
|
30
|
+
? hd.assembly.serialNumber
|
|
31
|
+
: hd.device.serialNumber;
|
|
32
|
+
}
|
|
33
|
+
exports.getSerialNumberFromHardwareDescription = getSerialNumberFromHardwareDescription;
|
|
34
|
+
function getAllComponentsFromHardwareDescription(hd) {
|
|
35
|
+
return hd.assembly
|
|
36
|
+
? [...hd.assembly.components, ...hd.device.components]
|
|
37
|
+
: hd.device.components;
|
|
38
|
+
}
|
|
39
|
+
exports.getAllComponentsFromHardwareDescription = getAllComponentsFromHardwareDescription;
|
|
40
|
+
function hardwareComponentsMatch(a, b) {
|
|
41
|
+
if (a.length === 0 && b.length === 0) {
|
|
42
|
+
return false; // edge case: when both components are empty they don't match since there are no components to compare
|
|
43
|
+
}
|
|
44
|
+
const ac = a.map((c) => `${c.name}-${c.version[0]}`.replace(/\s/g, '').toLocaleLowerCase()).sort();
|
|
45
|
+
const bc = b.map((c) => `${c.name}-${c.version[0]}`.replace(/\s/g, '').toLocaleLowerCase()).sort();
|
|
46
|
+
return (0, lodash_1.isEqual)(ac, bc);
|
|
47
|
+
}
|
|
48
|
+
exports.hardwareComponentsMatch = hardwareComponentsMatch;
|
|
49
|
+
function isHardwareDescriptionCompatibleWithPackageFilename(hardwareDescription, packageFilename) {
|
|
50
|
+
const hdApiId = getApiIdentifierFromHardwareDescription(hardwareDescription);
|
|
51
|
+
const pfApiId = getApiIdentifierFromPackageFilename(packageFilename);
|
|
52
|
+
if (hdApiId && pfApiId) {
|
|
53
|
+
return hdApiId === pfApiId;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const pfComponents = getHardwareComponentsFromPackageFilename(packageFilename);
|
|
57
|
+
const hdComponents = getAllComponentsFromHardwareDescription(hardwareDescription);
|
|
58
|
+
return hardwareComponentsMatch(pfComponents, hdComponents);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.isHardwareDescriptionCompatibleWithPackageFilename = isHardwareDescriptionCompatibleWithPackageFilename;
|
|
62
|
+
function getHardwareComponentsFromPackageFilename(packageFilename) {
|
|
63
|
+
if (packageFilename.match(/_Com[^_]+_Core[^_]+_Drive/g)) {
|
|
64
|
+
return packageFilename.split('_').slice(1, 4).map((b) => {
|
|
65
|
+
const p = b.split('-'); // ['ComEtherCAT', 'b']
|
|
66
|
+
return {
|
|
67
|
+
name: p[0],
|
|
68
|
+
serialNumber: '',
|
|
69
|
+
version: p[1],
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// not all package filenames have components,
|
|
75
|
+
// e.g. 'package_SOMANET-Servo-Node-Circulo-1800_circulo1800_motion-drive_v4.2.0-beta.5.zip'
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.getHardwareComponentsFromPackageFilename = getHardwareComponentsFromPackageFilename;
|
|
80
|
+
function getVersionFromPackageFilename(packageFilename) {
|
|
81
|
+
const parts = packageFilename.split('_');
|
|
82
|
+
const version = parts[parts.length - 1].replace(/\.zip$/, '').split(/\s+/)[0];
|
|
83
|
+
return semver_1.default.valid(version) ? version : undefined;
|
|
84
|
+
}
|
|
85
|
+
exports.getVersionFromPackageFilename = getVersionFromPackageFilename;
|
|
86
|
+
function getApiIdentifierFromPackageFilename(packageFilename) {
|
|
87
|
+
if (packageFilename.match(/_Com[^_]+_Core[^_]+_Drive/g)) {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
const [, , apiIdentifier] = packageFilename.split('_');
|
|
91
|
+
return apiIdentifier;
|
|
92
|
+
}
|
|
93
|
+
exports.getApiIdentifierFromPackageFilename = getApiIdentifierFromPackageFilename;
|
|
94
|
+
//# sourceMappingURL=hardware-description.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hardware-description.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/hardware-description.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const logger: import("roarr").Logger<import("roarr/dist/types").JsonObject>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logger = void 0;
|
|
4
|
+
const roarr_1 = require("roarr");
|
|
5
|
+
exports.logger = roarr_1.Roarr.child({
|
|
6
|
+
package: '@synapticon/motion-master-client'
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/logger.ts"],"names":[],"mappings":";;;AAAA,iCAA8B;AAEjB,QAAA,MAAM,GAAG,aAAK,CAAC,KAAK,CAAC;IAChC,OAAO,EAAE,kCAAkC;CAC5C,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitoring-config.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/monitoring-config.ts"],"names":[],"mappings":""}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { Observable } from "rxjs";
|
|
2
2
|
import { MonitoringConfig } from "./monitoring-config";
|
|
3
3
|
import { MotionMasterMessage, ParameterValueType } from "./types";
|
|
4
|
-
|
|
5
4
|
export interface MonitoringEntry {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
config: Required<MonitoringConfig>;
|
|
6
|
+
interval: number;
|
|
7
|
+
values$: Observable<ParameterValueType[]>;
|
|
8
|
+
parameters: MotionMasterMessage.Request.GetDeviceParameterValues.IParameter[];
|
|
10
9
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitoring-entry.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/monitoring-entry.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
import { MonitoringConfig } from "./monitoring-config";
|
|
3
|
+
import { MotionMasterPubSubClient } from "./motion-master-pub-sub-client";
|
|
4
|
+
import { MotionMasterPubSubSocket } from "./motion-master-pub-sub-socket";
|
|
5
|
+
import { MotionMasterReqResClient } from "./motion-master-req-res-client";
|
|
6
|
+
import { MotionMasterReqResSocket } from "./motion-master-req-res-socket";
|
|
7
|
+
import { DeviceParameterIds, DeviceRef, ParameterValueType } from "./types";
|
|
8
|
+
import { DeviceParameter } from "./device-parameter";
|
|
9
|
+
export declare function createMotionMasterClient(hostname: string): MotionMasterClient;
|
|
10
|
+
export declare class MotionMasterClient {
|
|
11
|
+
readonly reqResSocket: MotionMasterReqResSocket;
|
|
12
|
+
readonly pubSubSocket: MotionMasterPubSubSocket;
|
|
13
|
+
readonly request: MotionMasterReqResClient;
|
|
14
|
+
readonly monitor: MotionMasterPubSubClient;
|
|
15
|
+
constructor(reqResSocket: MotionMasterReqResSocket, pubSubSocket: MotionMasterPubSubSocket);
|
|
16
|
+
/**
|
|
17
|
+
* This observable will emit true when both req/res and pub/sub sockets are opened.
|
|
18
|
+
* If any socket gets closed, this observable will emit false.
|
|
19
|
+
* This is a hot observable that will on subscription emit the last value of sockets opened.
|
|
20
|
+
*/
|
|
21
|
+
socketsOpened$: Observable<boolean>;
|
|
22
|
+
/**
|
|
23
|
+
* Client is ready when both req/res and pub/sub sockets are opened.
|
|
24
|
+
* This observable will emit whenever the sockets opened property changes to true.
|
|
25
|
+
*/
|
|
26
|
+
ready$: Observable<true>;
|
|
27
|
+
/**
|
|
28
|
+
* This observable will emit only once when both req/res and pub/sub sockets are opened.
|
|
29
|
+
* NOTE: This observable might never emit and it doesn't timeout.
|
|
30
|
+
*/
|
|
31
|
+
onceReady$: Observable<true>;
|
|
32
|
+
/**
|
|
33
|
+
* Client is ready when both req/res and pub/sub sockets are opened.
|
|
34
|
+
* If both sockets are already opened, this function will immediately resolve to true.
|
|
35
|
+
* Otherwise, it will wait up to requestTimeout for both sockets to open, or throw an error.
|
|
36
|
+
*/
|
|
37
|
+
whenReady(requestTimeout?: number): Promise<true>;
|
|
38
|
+
startMonitoring(ids: DeviceParameterIds, monitoringInterval: number, config?: MonitoringConfig, requestTimeout?: number): Observable<ParameterValueType[]>;
|
|
39
|
+
/**
|
|
40
|
+
* TODO: return device parameters instead of just parameters
|
|
41
|
+
* get parameters from ESI uprfront, and then when parameters are received
|
|
42
|
+
* from motion master just concatenate (spread operator) props from ESI and props from parameter
|
|
43
|
+
* assign device parameter id like 0x1018:00.12345
|
|
44
|
+
* when assembling device parameter, get parameter from device in ESI based on product code, see ESI service
|
|
45
|
+
* this should probably done for other get parameters functions, get ESI file from device or prepared, get data from it
|
|
46
|
+
*/
|
|
47
|
+
startMonitoringDeviceParameters(ids: DeviceParameterIds, monitoringInterval: number, config?: MonitoringConfig, requestTimeout?: number): Observable<DeviceParameter[]>;
|
|
48
|
+
startMonitoringValue<T extends ParameterValueType = number>(id: string | [DeviceRef, number, number], monitoringInterval: number, config?: MonitoringConfig, requestTimeout?: number): Observable<T>;
|
|
49
|
+
trackTargetReached(deviceRef: DeviceRef, monitoringInterval?: number): Observable<boolean>;
|
|
50
|
+
waitUntilTargetReached(deviceRef: DeviceRef, monitoringInterval?: number): Observable<true>;
|
|
51
|
+
whenTargetReached(deviceRef: DeviceRef, monitoringInterval?: number): Promise<true>;
|
|
52
|
+
stopMonitoring(messageId: string): void;
|
|
53
|
+
stopMonitoringAll(): void;
|
|
54
|
+
closeSockets(): void;
|
|
55
|
+
reopenSockets(): void;
|
|
56
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MotionMasterClient = exports.createMotionMasterClient = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const uuid_1 = require("uuid");
|
|
6
|
+
const motion_master_pub_sub_client_1 = require("./motion-master-pub-sub-client");
|
|
7
|
+
const motion_master_pub_sub_web_socket_1 = require("./motion-master-pub-sub-web-socket");
|
|
8
|
+
const motion_master_req_res_client_1 = require("./motion-master-req-res-client");
|
|
9
|
+
const motion_master_req_res_web_socket_1 = require("./motion-master-req-res-web-socket");
|
|
10
|
+
const operators_1 = require("./operators");
|
|
11
|
+
function createMotionMasterClient(hostname) {
|
|
12
|
+
const reqResSocket = new motion_master_req_res_web_socket_1.MotionMasterReqResWebSocket();
|
|
13
|
+
const pubSubSocket = new motion_master_pub_sub_web_socket_1.MotionMasterPubSubWebSocket();
|
|
14
|
+
const client = new MotionMasterClient(reqResSocket, pubSubSocket);
|
|
15
|
+
const clientId = (0, uuid_1.v4)();
|
|
16
|
+
reqResSocket.open(`ws://${hostname}:63524?clientId=${clientId}`);
|
|
17
|
+
pubSubSocket.open(`ws://${hostname}:63525?clientId=${clientId}`);
|
|
18
|
+
return client;
|
|
19
|
+
}
|
|
20
|
+
exports.createMotionMasterClient = createMotionMasterClient;
|
|
21
|
+
class MotionMasterClient {
|
|
22
|
+
constructor(reqResSocket, pubSubSocket) {
|
|
23
|
+
this.reqResSocket = reqResSocket;
|
|
24
|
+
this.pubSubSocket = pubSubSocket;
|
|
25
|
+
/**
|
|
26
|
+
* This observable will emit true when both req/res and pub/sub sockets are opened.
|
|
27
|
+
* If any socket gets closed, this observable will emit false.
|
|
28
|
+
* This is a hot observable that will on subscription emit the last value of sockets opened.
|
|
29
|
+
*/
|
|
30
|
+
this.socketsOpened$ = (0, rxjs_1.combineLatest)([this.reqResSocket.opened$, this.pubSubSocket.opened$]).pipe((0, rxjs_1.map)(([reqResSocketOpened, pubSubSocketOpened]) => reqResSocketOpened && pubSubSocketOpened));
|
|
31
|
+
/**
|
|
32
|
+
* Client is ready when both req/res and pub/sub sockets are opened.
|
|
33
|
+
* This observable will emit whenever the sockets opened property changes to true.
|
|
34
|
+
*/
|
|
35
|
+
this.ready$ = this.socketsOpened$.pipe((0, rxjs_1.filter)(Boolean));
|
|
36
|
+
/**
|
|
37
|
+
* This observable will emit only once when both req/res and pub/sub sockets are opened.
|
|
38
|
+
* NOTE: This observable might never emit and it doesn't timeout.
|
|
39
|
+
*/
|
|
40
|
+
this.onceReady$ = this.ready$.pipe((0, rxjs_1.first)());
|
|
41
|
+
this.request = new motion_master_req_res_client_1.MotionMasterReqResClient(this.reqResSocket);
|
|
42
|
+
this.monitor = new motion_master_pub_sub_client_1.MotionMasterPubSubClient(this.pubSubSocket);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Client is ready when both req/res and pub/sub sockets are opened.
|
|
46
|
+
* If both sockets are already opened, this function will immediately resolve to true.
|
|
47
|
+
* Otherwise, it will wait up to requestTimeout for both sockets to open, or throw an error.
|
|
48
|
+
*/
|
|
49
|
+
whenReady(requestTimeout = 5000) {
|
|
50
|
+
return (0, rxjs_1.firstValueFrom)(this.ready$.pipe((0, rxjs_1.timeout)(requestTimeout)));
|
|
51
|
+
}
|
|
52
|
+
startMonitoring(ids, monitoringInterval, config, requestTimeout = 5000) {
|
|
53
|
+
return (0, rxjs_1.defer)(() => {
|
|
54
|
+
var _a, _b;
|
|
55
|
+
const topic = (_a = config === null || config === void 0 ? void 0 : config.topic) !== null && _a !== void 0 ? _a : (0, uuid_1.v4)();
|
|
56
|
+
const messageId = (_b = config === null || config === void 0 ? void 0 : config.messageId) !== null && _b !== void 0 ? _b : (0, uuid_1.v4)();
|
|
57
|
+
if (!config) {
|
|
58
|
+
config = { messageId, topic, bufferSize: 1, distinct: false };
|
|
59
|
+
}
|
|
60
|
+
this.request.resolveGetParameterValuesIds(ids).pipe((0, rxjs_1.mergeMap)((refs) => {
|
|
61
|
+
if ((new Set(refs.map(([deviceAddress]) => deviceAddress))).size !== 1) {
|
|
62
|
+
throw new Error('Start monitoring only supports a single device');
|
|
63
|
+
}
|
|
64
|
+
// Skipping write-only (wo) parameters is necessary because Motion Master does not initiate monitoring when the requested list contains such parameters.
|
|
65
|
+
// For now, this serves as a temporary solution until Motion Master is fixed.
|
|
66
|
+
refs = refs.filter(([, index]) => index !== 0x1024);
|
|
67
|
+
const deviceAddress = refs[0][0];
|
|
68
|
+
const props = {
|
|
69
|
+
getDeviceParameterValues: {
|
|
70
|
+
deviceAddress,
|
|
71
|
+
parameters: refs.map(([, index, subindex]) => ({ index, subindex, loadFromCache: false })),
|
|
72
|
+
sendProgress: false,
|
|
73
|
+
},
|
|
74
|
+
interval: monitoringInterval,
|
|
75
|
+
topic,
|
|
76
|
+
};
|
|
77
|
+
return this.request.startMonitoringDeviceParameterValues(props, requestTimeout, messageId);
|
|
78
|
+
})).subscribe();
|
|
79
|
+
this.monitor.subscribe(config);
|
|
80
|
+
const values$ = this.monitor.socket.data$.pipe((0, operators_1.selectMotionMasterMessageByTopic)(config.topic), (0, operators_1.mapMonitoringParameterValuesStatusMessageToParameterValues)());
|
|
81
|
+
return new rxjs_1.Observable((subscriber) => {
|
|
82
|
+
const subscription = values$.subscribe(subscriber);
|
|
83
|
+
return () => {
|
|
84
|
+
subscription.unsubscribe();
|
|
85
|
+
this.stopMonitoring(messageId);
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* TODO: return device parameters instead of just parameters
|
|
92
|
+
* get parameters from ESI uprfront, and then when parameters are received
|
|
93
|
+
* from motion master just concatenate (spread operator) props from ESI and props from parameter
|
|
94
|
+
* assign device parameter id like 0x1018:00.12345
|
|
95
|
+
* when assembling device parameter, get parameter from device in ESI based on product code, see ESI service
|
|
96
|
+
* this should probably done for other get parameters functions, get ESI file from device or prepared, get data from it
|
|
97
|
+
*/
|
|
98
|
+
startMonitoringDeviceParameters(ids, monitoringInterval, config, requestTimeout = 5000) {
|
|
99
|
+
return (0, rxjs_1.defer)(() => {
|
|
100
|
+
var _a, _b;
|
|
101
|
+
const topic = (_a = config === null || config === void 0 ? void 0 : config.topic) !== null && _a !== void 0 ? _a : (0, uuid_1.v4)();
|
|
102
|
+
const messageId = (_b = config === null || config === void 0 ? void 0 : config.messageId) !== null && _b !== void 0 ? _b : (0, uuid_1.v4)();
|
|
103
|
+
if (!config) {
|
|
104
|
+
config = { messageId, topic, bufferSize: 1, distinct: false };
|
|
105
|
+
}
|
|
106
|
+
this.request.resolveGetParameterValuesIds(ids).pipe((0, rxjs_1.mergeMap)((refs) => {
|
|
107
|
+
if ((new Set(refs.map(([deviceAddress]) => deviceAddress))).size !== 1) {
|
|
108
|
+
throw new Error('Start monitoring only supports a single device');
|
|
109
|
+
}
|
|
110
|
+
// Skipping write-only (wo) parameters is necessary because Motion Master does not initiate monitoring when the requested list contains such parameters.
|
|
111
|
+
// For now, this serves as a temporary solution until Motion Master is fixed.
|
|
112
|
+
refs = refs.filter(([, index]) => index !== 0x1024);
|
|
113
|
+
const deviceAddress = refs[0][0];
|
|
114
|
+
const props = {
|
|
115
|
+
getDeviceParameterValues: {
|
|
116
|
+
deviceAddress,
|
|
117
|
+
parameters: refs.map(([, index, subindex]) => ({ index, subindex, loadFromCache: false })),
|
|
118
|
+
sendProgress: false,
|
|
119
|
+
},
|
|
120
|
+
interval: monitoringInterval,
|
|
121
|
+
topic,
|
|
122
|
+
};
|
|
123
|
+
return this.request.startMonitoringDeviceParameterValues(props, requestTimeout, messageId);
|
|
124
|
+
})).subscribe();
|
|
125
|
+
this.monitor.subscribe(config);
|
|
126
|
+
const values$ = this.monitor.socket.data$.pipe((0, operators_1.selectMotionMasterMessageByTopic)(config.topic), (0, operators_1.mapMonitoringParameterValuesStatusMessageToDeviceParameters)(this.request));
|
|
127
|
+
return new rxjs_1.Observable((subscriber) => {
|
|
128
|
+
const subscription = values$.subscribe(subscriber);
|
|
129
|
+
return () => {
|
|
130
|
+
subscription.unsubscribe();
|
|
131
|
+
this.stopMonitoring(messageId);
|
|
132
|
+
};
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
startMonitoringValue(id, monitoringInterval, config, requestTimeout = 5000) {
|
|
137
|
+
const ids = typeof id === 'string' ? [id] : [id];
|
|
138
|
+
return this.startMonitoring(ids, monitoringInterval, config, requestTimeout).pipe((0, rxjs_1.map)((parameters) => { var _a; return ((_a = parameters[0]) !== null && _a !== void 0 ? _a : 0); }));
|
|
139
|
+
}
|
|
140
|
+
trackTargetReached(deviceRef, monitoringInterval = 20) {
|
|
141
|
+
return this.startMonitoringValue([deviceRef, 0x6041, 0], monitoringInterval).pipe((0, rxjs_1.map)((value) => (value & 0x0400) > 0), // tr = target reached bit
|
|
142
|
+
(0, rxjs_1.distinctUntilChanged)());
|
|
143
|
+
}
|
|
144
|
+
waitUntilTargetReached(deviceRef, monitoringInterval = 20) {
|
|
145
|
+
return this.trackTargetReached(deviceRef, monitoringInterval).pipe((0, rxjs_1.filter)(Boolean), (0, rxjs_1.first)());
|
|
146
|
+
}
|
|
147
|
+
whenTargetReached(deviceRef, monitoringInterval = 20) {
|
|
148
|
+
return (0, rxjs_1.firstValueFrom)(this.waitUntilTargetReached(deviceRef, monitoringInterval));
|
|
149
|
+
}
|
|
150
|
+
stopMonitoring(messageId) {
|
|
151
|
+
this.request.stopMonitoringDeviceParameterValues({ startMonitoringRequestId: messageId });
|
|
152
|
+
this.monitor.unsubscribe(messageId);
|
|
153
|
+
}
|
|
154
|
+
stopMonitoringAll() {
|
|
155
|
+
this.monitor.messageIds.forEach(this.stopMonitoring);
|
|
156
|
+
}
|
|
157
|
+
closeSockets() {
|
|
158
|
+
this.reqResSocket.close();
|
|
159
|
+
this.pubSubSocket.close();
|
|
160
|
+
}
|
|
161
|
+
reopenSockets() {
|
|
162
|
+
this.reqResSocket.reopen();
|
|
163
|
+
this.pubSubSocket.reopen();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
exports.MotionMasterClient = MotionMasterClient;
|
|
167
|
+
//# sourceMappingURL=motion-master-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion-master-client.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/motion-master-client.ts"],"names":[],"mappings":"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"}
|