mclimate-payload-helper 1.2.24 → 1.3.0
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/dist/decoders/payloadParsers/index.d.ts +1 -0
- package/dist/decoders/payloadParsers/index.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/index.js +1 -0
- package/dist/decoders/payloadParsers/index.js.map +1 -1
- package/dist/decoders/payloadParsers/pirOnlyPayloadParser.d.ts +2 -0
- package/dist/decoders/payloadParsers/pirOnlyPayloadParser.d.ts.map +1 -0
- package/dist/decoders/payloadParsers/pirOnlyPayloadParser.js +82 -0
- package/dist/decoders/payloadParsers/pirOnlyPayloadParser.js.map +1 -0
- package/dist/decoders/payloadParsers/types/allDevices.d.ts +2 -1
- package/dist/decoders/payloadParsers/types/allDevices.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/types/allDevices.js +1 -0
- package/dist/decoders/payloadParsers/types/allDevices.js.map +1 -1
- package/dist/decoders/payloadParsers/uplinkPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/uplinkPayloadParser.js +2 -0
- package/dist/decoders/payloadParsers/uplinkPayloadParser.js.map +1 -1
- package/dist/encoders/CommandBuilder.d.ts.map +1 -1
- package/dist/encoders/CommandBuilder.js +1 -0
- package/dist/encoders/CommandBuilder.js.map +1 -1
- package/dist/encoders/PirOnlyCommands.d.ts +17 -0
- package/dist/encoders/PirOnlyCommands.d.ts.map +1 -0
- package/dist/encoders/PirOnlyCommands.js +152 -0
- package/dist/encoders/PirOnlyCommands.js.map +1 -0
- package/dist/encoders/PirOnlyCommands.test.d.ts +2 -0
- package/dist/encoders/PirOnlyCommands.test.d.ts.map +1 -0
- package/dist/encoders/PirOnlyCommands.test.js +38 -0
- package/dist/encoders/PirOnlyCommands.test.js.map +1 -0
- package/dist/encoders/index.d.ts +1 -0
- package/dist/encoders/index.d.ts.map +1 -1
- package/dist/encoders/index.js +1 -0
- package/dist/encoders/index.js.map +1 -1
- package/dist/encoders/types/schemas.d.ts +417 -0
- package/dist/encoders/types/schemas.d.ts.map +1 -1
- package/dist/encoders/types/schemas.js +47 -1
- package/dist/encoders/types/schemas.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/test/payloadDecoders.test.js +33 -0
- package/dist/test/payloadDecoders.test.js.map +1 -1
- package/package.json +1 -1
- package/src/decoders/payloadParsers/index.ts +1 -0
- package/src/decoders/payloadParsers/pirOnlyPayloadParser.ts +94 -0
- package/src/decoders/payloadParsers/types/allDevices.ts +1 -0
- package/src/decoders/payloadParsers/uplinkPayloadParser.ts +3 -0
- package/src/encoders/CommandBuilder.ts +2 -0
- package/src/encoders/PirOnlyCommands.test.ts +58 -0
- package/src/encoders/PirOnlyCommands.ts +151 -0
- package/src/encoders/index.ts +1 -0
- package/src/encoders/types/schemas.ts +75 -0
- package/src/index.ts +4 -0
- package/src/test/payloadDecoders.test.ts +33 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,kCAAkC,CAAA;AAChD,cAAc,2BAA2B,CAAA;AACzC,cAAc,mCAAmC,CAAA;AACjD,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,kCAAkC,CAAA;AAChD,cAAc,2BAA2B,CAAA;AACzC,cAAc,mCAAmC,CAAA;AACjD,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,wBAAwB,CAAA"}
|
|
@@ -36,4 +36,5 @@ __exportStar(require("./melissaLorawanPayloadParser"), exports);
|
|
|
36
36
|
__exportStar(require("./co2PirLitePayloadParser"), exports);
|
|
37
37
|
__exportStar(require("./htPirLitePayloadParser"), exports);
|
|
38
38
|
__exportStar(require("./multisensorPayloadParser"), exports);
|
|
39
|
+
__exportStar(require("./pirOnlyPayloadParser"), exports);
|
|
39
40
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAqC;AACrC,uDAAoC;AACpC,2DAAwC;AACxC,gEAA6C;AAC7C,4DAAyC;AACzC,2DAAwC;AACxC,mEAAgD;AAChD,4DAAyC;AACzC,oEAAiD;AACjD,wDAAqC;AACrC,2DAAwC;AACxC,+DAA4C;AAC5C,0DAAuC;AACvC,iEAA8C;AAC9C,wDAAqC;AACrC,wDAAqC;AACrC,yDAAsC;AACtC,4DAAyC;AACzC,gEAA6C;AAC7C,4DAAyC;AACzC,2DAAwC;AACxC,6DAA0C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAqC;AACrC,uDAAoC;AACpC,2DAAwC;AACxC,gEAA6C;AAC7C,4DAAyC;AACzC,2DAAwC;AACxC,mEAAgD;AAChD,4DAAyC;AACzC,oEAAiD;AACjD,wDAAqC;AACrC,2DAAwC;AACxC,+DAA4C;AAC5C,0DAAuC;AACvC,iEAA8C;AAC9C,wDAAqC;AACrC,wDAAqC;AACrC,yDAAsC;AACtC,4DAAyC;AACzC,gEAA6C;AAC7C,4DAAyC;AACzC,2DAAwC;AACxC,6DAA0C;AAC1C,yDAAsC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pirOnlyPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/pirOnlyPayloadParser.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,oBAAoB,YAAa,MAAM,wCA+EnD,CAAA"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pirOnlyPayloadParser = void 0;
|
|
4
|
+
const commandsReadingHelper_1 = require("../../decoders/commandsReadingHelper");
|
|
5
|
+
const types_1 = require("../../decoders/payloadParsers/types");
|
|
6
|
+
const helpers_1 = require("../../helpers");
|
|
7
|
+
const utils_1 = require("../../utils");
|
|
8
|
+
const pirOnlyPayloadParser = (hexData) => {
|
|
9
|
+
const deviceData = {};
|
|
10
|
+
try {
|
|
11
|
+
const handleKeepAliveData = (bytes) => {
|
|
12
|
+
const keepaliveData = {};
|
|
13
|
+
// Byte 1 (bits 1:0) and Byte 2: Internal temperature sensor data
|
|
14
|
+
// Formula: t[°C] = (T[9:0] - 400) / 10
|
|
15
|
+
// Extract bits 1:0 from byte 1 for the higher bits (bits 9:8)
|
|
16
|
+
const tempHighBits = (bytes[1] & 0x03) << 8;
|
|
17
|
+
// Use all bits from byte 2 for the lower bits (bits 7:0)
|
|
18
|
+
const tempLowBits = bytes[2];
|
|
19
|
+
// Combine to get the full 10-bit temperature value
|
|
20
|
+
const tempValue = tempHighBits | tempLowBits;
|
|
21
|
+
keepaliveData.sensorTemperature = Number(((tempValue - 400) / 10).toFixed(2));
|
|
22
|
+
// Byte 3: Relative Humidity data
|
|
23
|
+
// Formula: RH[%] = (XX * 100) / 256
|
|
24
|
+
keepaliveData.relativeHumidity = Number(((bytes[3] * 100) / 256).toFixed(2));
|
|
25
|
+
// Bytes 4-5: Light sensor data
|
|
26
|
+
// Byte 4: Light sensor data bits [15:8]
|
|
27
|
+
// Byte 5: Light sensor data bits [7:0]
|
|
28
|
+
keepaliveData.light = (bytes[4] << 8) | bytes[5];
|
|
29
|
+
// Byte 6: Battery Voltage
|
|
30
|
+
// Battery voltage [mV] = ((XX * 2200) / 255) + 1600
|
|
31
|
+
keepaliveData.batteryVoltage = Number((((bytes[6] * 2200) / 255 + 1600) / 1000).toFixed(2));
|
|
32
|
+
// Byte 7 bit 0: Occupancy Flag (1 = Occupied, 0 = Unoccupied)
|
|
33
|
+
keepaliveData.occupied = (bytes[7] & 0x01) === 1;
|
|
34
|
+
// Bytes 8-9: PIR trigger count data
|
|
35
|
+
// Byte 8: PIR trigger count bits [15:8]
|
|
36
|
+
// Byte 9: PIR trigger count bits [7:0]
|
|
37
|
+
keepaliveData.pirTriggerCount = (bytes[8] << 8) | bytes[9];
|
|
38
|
+
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
|
|
39
|
+
};
|
|
40
|
+
if (hexData) {
|
|
41
|
+
const byteArray = (0, helpers_1.byteArrayParser)(hexData);
|
|
42
|
+
if (!byteArray)
|
|
43
|
+
return;
|
|
44
|
+
// Route the message based on the command byte
|
|
45
|
+
if (byteArray[0] == 1) {
|
|
46
|
+
// This is a keepalive message
|
|
47
|
+
handleKeepAliveData(byteArray);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
// parse command answers
|
|
51
|
+
const data = (0, commandsReadingHelper_1.commandsReadingHelper)(hexData, 20, types_1.DeviceType.PirOnly);
|
|
52
|
+
if (!data)
|
|
53
|
+
return;
|
|
54
|
+
const shouldKeepAlive = Object.prototype.hasOwnProperty.call(data, 'decodeKeepalive');
|
|
55
|
+
if ('decodeKeepalive' in data) {
|
|
56
|
+
delete data.decodeKeepalive;
|
|
57
|
+
}
|
|
58
|
+
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, data));
|
|
59
|
+
// Handle the remaining keepalive data if present
|
|
60
|
+
if (shouldKeepAlive) {
|
|
61
|
+
// Extract the last 10 bytes which contain keepalive data for PIR Only
|
|
62
|
+
const keepaliveData = hexData.slice(-20); // 10 bytes = 20 hex chars
|
|
63
|
+
const dataToPass = (0, helpers_1.byteArrayParser)(keepaliveData);
|
|
64
|
+
if (!dataToPass)
|
|
65
|
+
return;
|
|
66
|
+
handleKeepAliveData(dataToPass);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return deviceData;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
throw new utils_1.CustomError({
|
|
74
|
+
message: `Unhandled data`,
|
|
75
|
+
hexData: hexData,
|
|
76
|
+
deviceType: 'pir_only',
|
|
77
|
+
originalError: e,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
exports.pirOnlyPayloadParser = pirOnlyPayloadParser;
|
|
82
|
+
//# sourceMappingURL=pirOnlyPayloadParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pirOnlyPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/pirOnlyPayloadParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ export declare enum DeviceType {
|
|
|
19
19
|
MelissaLorawan = "melissa_lorawan",
|
|
20
20
|
CO2PirLite = "co2_pir_lite",
|
|
21
21
|
HTPirLite = "ht_pir_lite",
|
|
22
|
-
MultiSensor = "multisensor"
|
|
22
|
+
MultiSensor = "multisensor",
|
|
23
|
+
PirOnly = "pir_only"
|
|
23
24
|
}
|
|
24
25
|
//# sourceMappingURL=allDevices.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"allDevices.d.ts","sourceRoot":"","sources":["../../../../src/decoders/payloadParsers/types/allDevices.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IACrB,KAAK,UAAU;IACf,QAAQ,cAAc;IACtB,MAAM,YAAY;IAClB,SAAS,eAAe;IACxB,MAAM,YAAY;IAClB,SAAS,eAAe;IACxB,UAAU,eAAe;IACzB,QAAQ,cAAc;IACtB,eAAe,sBAAsB;IACrC,SAAS,eAAe;IACxB,kBAAkB,wBAAwB;IAC1C,UAAU,gBAAgB;IAC1B,iBAAiB,wBAAwB;IACzC,cAAc,qBAAqB;IACnC,aAAa,oBAAoB;IACjC,OAAO,aAAa;IACpB,UAAU,iBAAiB;IAC3B,cAAc,oBAAoB;IAClC,UAAU,iBAAiB;IAC3B,SAAS,gBAAgB;IACzB,WAAW,gBAAgB;
|
|
1
|
+
{"version":3,"file":"allDevices.d.ts","sourceRoot":"","sources":["../../../../src/decoders/payloadParsers/types/allDevices.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IACrB,KAAK,UAAU;IACf,QAAQ,cAAc;IACtB,MAAM,YAAY;IAClB,SAAS,eAAe;IACxB,MAAM,YAAY;IAClB,SAAS,eAAe;IACxB,UAAU,eAAe;IACzB,QAAQ,cAAc;IACtB,eAAe,sBAAsB;IACrC,SAAS,eAAe;IACxB,kBAAkB,wBAAwB;IAC1C,UAAU,gBAAgB;IAC1B,iBAAiB,wBAAwB;IACzC,cAAc,qBAAqB;IACnC,aAAa,oBAAoB;IACjC,OAAO,aAAa;IACpB,UAAU,iBAAiB;IAC3B,cAAc,oBAAoB;IAClC,UAAU,iBAAiB;IAC3B,SAAS,gBAAgB;IACzB,WAAW,gBAAgB;IAC3B,OAAO,aAAa;CACpB"}
|
|
@@ -24,5 +24,6 @@ var DeviceType;
|
|
|
24
24
|
DeviceType["CO2PirLite"] = "co2_pir_lite";
|
|
25
25
|
DeviceType["HTPirLite"] = "ht_pir_lite";
|
|
26
26
|
DeviceType["MultiSensor"] = "multisensor";
|
|
27
|
+
DeviceType["PirOnly"] = "pir_only";
|
|
27
28
|
})(DeviceType || (exports.DeviceType = DeviceType = {}));
|
|
28
29
|
//# sourceMappingURL=allDevices.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"allDevices.js","sourceRoot":"","sources":["../../../../src/decoders/payloadParsers/types/allDevices.ts"],"names":[],"mappings":";;;AAAA,IAAY,
|
|
1
|
+
{"version":3,"file":"allDevices.js","sourceRoot":"","sources":["../../../../src/decoders/payloadParsers/types/allDevices.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAuBX;AAvBD,WAAY,UAAU;IACrB,6BAAe,CAAA;IACf,oCAAsB,CAAA;IACtB,gCAAkB,CAAA;IAClB,sCAAwB,CAAA;IACxB,gCAAkB,CAAA;IAClB,sCAAwB,CAAA;IACxB,uCAAyB,CAAA;IACzB,oCAAsB,CAAA;IACtB,mDAAqC,CAAA;IACrC,sCAAwB,CAAA;IACxB,wDAA0C,CAAA;IAC1C,wCAA0B,CAAA;IAC1B,uDAAyC,CAAA;IACzC,iDAAmC,CAAA;IACnC,+CAAiC,CAAA;IACjC,kCAAoB,CAAA;IACpB,yCAA2B,CAAA;IAC3B,gDAAkC,CAAA;IAClC,yCAA2B,CAAA;IAC3B,uCAAyB,CAAA;IACzB,yCAA2B,CAAA;IAC3B,kCAAoB,CAAA;AACrB,CAAC,EAvBW,UAAU,0BAAV,UAAU,QAuBrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uplinkPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/uplinkPayloadParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"uplinkPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/uplinkPayloadParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AA0B5D,eAAO,MAAM,mBAAmB,YAAa,MAAM,cAAc,UAAU,mBAkD1E,CAAA"}
|
|
@@ -47,6 +47,8 @@ const uplinkPayloadParser = (hexData, deviceType) => {
|
|
|
47
47
|
return (0, payloadParsers_1.htPirLitePayloadParser)(hexData);
|
|
48
48
|
case types_1.DeviceType.MultiSensor:
|
|
49
49
|
return (0, payloadParsers_1.multisensorPayloadParser)(hexData);
|
|
50
|
+
case types_1.DeviceType.PirOnly:
|
|
51
|
+
return (0, payloadParsers_1.pirOnlyPayloadParser)(hexData);
|
|
50
52
|
default:
|
|
51
53
|
// Q: is this OK?
|
|
52
54
|
return (0, payloadParsers_1.vickiPayloadParser)(hexData); // Default case if deviceType is not recognized
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uplinkPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/uplinkPayloadParser.ts"],"names":[],"mappings":";;;AAAA,2DAA4D;AAC5D,
|
|
1
|
+
{"version":3,"file":"uplinkPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/uplinkPayloadParser.ts"],"names":[],"mappings":";;;AAAA,2DAA4D;AAC5D,8DAuBkC;AAE3B,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAE,UAAsB,EAAE,EAAE;IAC9E,QAAQ,UAAU,EAAE,CAAC;QACpB,KAAK,kBAAU,CAAC,KAAK;YACpB,OAAO,IAAA,mCAAkB,EAAC,OAAO,CAAC,CAAA;QACnC,KAAK,kBAAU,CAAC,QAAQ;YACvB,OAAO,IAAA,sCAAqB,EAAC,OAAO,CAAC,CAAA;QACtC,KAAK,kBAAU,CAAC,MAAM;YACrB,OAAO,IAAA,oCAAmB,EAAC,OAAO,CAAC,CAAA;QACpC,KAAK,kBAAU,CAAC,SAAS;YACxB,OAAO,IAAA,uCAAsB,EAAC,OAAO,CAAC,CAAA;QACvC,KAAK,kBAAU,CAAC,MAAM;YACrB,OAAO,IAAA,oCAAmB,EAAC,OAAO,CAAC,CAAA;QACpC,KAAK,kBAAU,CAAC,SAAS;YACxB,OAAO,IAAA,uCAAsB,EAAC,OAAO,CAAC,CAAA;QACvC,KAAK,kBAAU,CAAC,UAAU;YACzB,OAAO,IAAA,wCAAuB,EAAC,OAAO,CAAC,CAAA;QACxC,KAAK,kBAAU,CAAC,QAAQ;YACvB,OAAO,IAAA,oCAAmB,EAAC,OAAO,CAAC,CAAA;QACpC,KAAK,kBAAU,CAAC,eAAe;YAC9B,OAAO,IAAA,6CAA4B,EAAC,OAAO,CAAC,CAAA;QAC7C,KAAK,kBAAU,CAAC,SAAS;YACxB,OAAO,IAAA,uCAAsB,EAAC,OAAO,CAAC,CAAA;QACvC,KAAK,kBAAU,CAAC,kBAAkB;YACjC,OAAO,IAAA,gDAA+B,EAAC,OAAO,CAAC,CAAA;QAChD,KAAK,kBAAU,CAAC,UAAU;YACzB,OAAO,IAAA,wCAAuB,EAAC,OAAO,CAAC,CAAA;QACxC,KAAK,kBAAU,CAAC,iBAAiB;YAChC,OAAO,IAAA,+CAA8B,EAAC,OAAO,CAAC,CAAA;QAC/C,KAAK,kBAAU,CAAC,cAAc;YAC7B,OAAO,IAAA,4CAA2B,EAAC,OAAO,CAAC,CAAA;QAC5C,KAAK,kBAAU,CAAC,aAAa;YAC5B,OAAO,IAAA,2CAA0B,EAAC,OAAO,CAAC,CAAA;QAC3C,KAAK,kBAAU,CAAC,OAAO;YACtB,OAAO,IAAA,qCAAoB,EAAC,OAAO,CAAC,CAAA;QACrC,KAAK,kBAAU,CAAC,UAAU;YACzB,OAAO,IAAA,wCAAuB,EAAC,OAAO,CAAC,CAAA;QACxC,KAAK,kBAAU,CAAC,cAAc;YAC7B,OAAO,IAAA,4CAA2B,EAAC,OAAO,CAAC,CAAA;QAC5C,KAAK,kBAAU,CAAC,UAAU;YACzB,OAAO,IAAA,wCAAuB,EAAC,OAAO,CAAC,CAAA;QACxC,KAAK,kBAAU,CAAC,SAAS;YACxB,OAAO,IAAA,uCAAsB,EAAC,OAAO,CAAC,CAAA;QACvC,KAAK,kBAAU,CAAC,WAAW;YAC1B,OAAO,IAAA,yCAAwB,EAAC,OAAO,CAAC,CAAA;QACzC,KAAK,kBAAU,CAAC,OAAO;YACtB,OAAO,IAAA,qCAAoB,EAAC,OAAO,CAAC,CAAA;QACrC;YACC,iBAAiB;YACjB,OAAO,IAAA,mCAAkB,EAAC,OAAO,CAAC,CAAA,CAAC,+CAA+C;IACpF,CAAC;AACF,CAAC,CAAA;AAlDY,QAAA,mBAAmB,uBAkD/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandBuilder.d.ts","sourceRoot":"","sources":["../../src/encoders/CommandBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,WAAW,
|
|
1
|
+
{"version":3,"file":"CommandBuilder.d.ts","sourceRoot":"","sources":["../../src/encoders/CommandBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,WAAW,EAuBX,MAAM,YAAY,CAAA;AAGnB,qBAAa,cAAc;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;gBAE5B,WAAW,EAAE,MAAM;IA4B/B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAsBvC,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE;CAG/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandBuilder.js","sourceRoot":"","sources":["../../src/encoders/CommandBuilder.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"CommandBuilder.js","sourceRoot":"","sources":["../../src/encoders/CommandBuilder.ts"],"names":[],"mappings":";;;AAAA,yCAwBmB;AAEnB,mCAAkD;AAClD,MAAa,cAAc;IAI1B,YAAY,WAAmB;QAC9B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,eAAe,GAAG;YACtB,UAAU,EAAE,4BAAiB;YAC7B,KAAK,EAAE,wBAAa;YACpB,mBAAmB,EAAE,qCAA0B;YAC/C,SAAS,EAAE,yBAAc;YACzB,QAAQ,EAAE,0BAAe;YACzB,mBAAmB,EAAE,oCAAyB;YAC9C,iBAAiB,EAAE,kCAAuB;YAC1C,WAAW,EAAE,6BAAkB;YAC/B,UAAU,EAAE,4BAAiB;YAC7B,gBAAgB,EAAE,iCAAsB;YACxC,OAAO,EAAE,yBAAc;YACvB,OAAO,EAAE,yBAAc;YACvB,SAAS,EAAE,2BAAgB;YAC3B,eAAe,EAAE,wBAAa;YAC9B,UAAU,EAAE,kCAAuB;YACnC,UAAU,EAAE,4BAAiB;YAC7B,YAAY,EAAE,6BAAkB;YAChC,WAAW,EAAE,4BAAiB;YAC9B,YAAY,EAAE,6BAAkB;YAChC,eAAe,EAAE,0BAAe;YAChC,WAAW,EAAE,8BAAmB;YAChC,QAAQ,EAAE,0BAAe;SACzB,CAAA;IACF,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,MAAgB;QACtC,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAgD,CAAC,CAAA;QAElG,IAAI,CAAC,cAAc,EAAE,CAAC;YACrB,MAAM,IAAI,mBAAW,CAAC;gBACrB,OAAO,EAAE,eAAe,IAAI,CAAC,WAAW,mBAAmB;aAC3D,CAAC,CAAA;QACH,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,mBAAW,EAAC,OAAO,CAAC,CAAA;QAEvC,MAAM,YAAY,GAAG,cAAyC,CAAA;QAC9D,MAAM,cAAc,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;QAC/C,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;YAC1C,OAAQ,cAAoD,CAAC,MAAM,CAAC,CAAA;QACrE,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,mBAAW,CAAC;gBACrB,OAAO,EAAE,WAAW,UAAU,kCAAkC,IAAI,CAAC,WAAW,EAAE;aAClF,CAAC,CAAA;QACH,CAAC;IACF,CAAC;IAED,OAAO,CAAC,QAAuB;QAC9B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,OAAoB,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;IAC1G,CAAC;CACD;AAzDD,wCAyDC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { GeneralCommands } from '../encoders';
|
|
2
|
+
import { PirOnlyCommandTypes } from '../encoders/types';
|
|
3
|
+
import { BaseCommand } from '../encoders';
|
|
4
|
+
export declare class PirOnlyCommands extends GeneralCommands {
|
|
5
|
+
static setLightSensorState(params: PirOnlyCommandTypes.SetLightSensorStateParams): BaseCommand;
|
|
6
|
+
static getLightSensorState(): BaseCommand;
|
|
7
|
+
static setLedBrightness(params: PirOnlyCommandTypes.SetLedBrightnessParams): BaseCommand;
|
|
8
|
+
static getLedBrightness(): BaseCommand;
|
|
9
|
+
static setPIRSensorState(params: PirOnlyCommandTypes.SetPIRSensorStateParams): BaseCommand;
|
|
10
|
+
static getPIRSensorState(): BaseCommand;
|
|
11
|
+
static setOccupancyTimeout(params: PirOnlyCommandTypes.SetOccupancyTimeoutParams): BaseCommand;
|
|
12
|
+
static getOccupancyTimeout(): BaseCommand;
|
|
13
|
+
static setPIRDemoMode(params: PirOnlyCommandTypes.SetPIRDemoModeParams): BaseCommand;
|
|
14
|
+
static getPIRDemoMode(): BaseCommand;
|
|
15
|
+
static restartDevice(): BaseCommand;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=PirOnlyCommands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PirOnlyCommands.d.ts","sourceRoot":"","sources":["../../src/encoders/PirOnlyCommands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,OAAO,EAAE,mBAAmB,EAAwB,MAAM,kBAAkB,CAAA;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAKxC,qBAAa,eAAgB,SAAQ,eAAe;IACnD,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,yBAAyB;IAsBhF,MAAM,CAAC,mBAAmB;IAI1B,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,CAAC,sBAAsB;IAsB1E,MAAM,CAAC,gBAAgB;IAIvB,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,CAAC,uBAAuB;IAsB5E,MAAM,CAAC,iBAAiB;IAIxB,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,yBAAyB;IA0BhF,MAAM,CAAC,mBAAmB;IAI1B,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,mBAAmB,CAAC,oBAAoB;IAsBtE,MAAM,CAAC,cAAc;IAIrB,MAAM,CAAC,aAAa;CAGpB"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PirOnlyCommands = void 0;
|
|
4
|
+
const encoders_1 = require("../encoders");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
const types_1 = require("../encoders/types");
|
|
7
|
+
const encoders_2 = require("../encoders");
|
|
8
|
+
const zod_1 = require("zod");
|
|
9
|
+
const utils_2 = require("../utils");
|
|
10
|
+
const utils_3 = require("../utils");
|
|
11
|
+
class PirOnlyCommands extends encoders_1.GeneralCommands {
|
|
12
|
+
static setLightSensorState(params) {
|
|
13
|
+
try {
|
|
14
|
+
types_1.DeviceCommandSchemas.PirOnlyCommandSchemas.setLightSensorState.parse(params);
|
|
15
|
+
const { state } = params;
|
|
16
|
+
return new encoders_2.BaseCommand('SetLightSensorState', 0x1e, (0, utils_3.decToHex)(state));
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
if (e instanceof zod_1.ZodError) {
|
|
20
|
+
throw new utils_2.CustomError({
|
|
21
|
+
message: 'Zod validation error during SetLightSensorState execution',
|
|
22
|
+
command: 'SetLightSensorState',
|
|
23
|
+
originalError: e,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
throw new utils_2.CustomError({
|
|
28
|
+
message: 'Error during SetLightSensorState execution',
|
|
29
|
+
command: 'SetLightSensorState',
|
|
30
|
+
originalError: e,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
static getLightSensorState() {
|
|
36
|
+
return new encoders_2.BaseCommand('GetLightSensorState', 0x1f);
|
|
37
|
+
}
|
|
38
|
+
static setLedBrightness(params) {
|
|
39
|
+
try {
|
|
40
|
+
types_1.DeviceCommandSchemas.PirOnlyCommandSchemas.setLedBrightness.parse(params);
|
|
41
|
+
const { red, green, blue } = params;
|
|
42
|
+
return new encoders_2.BaseCommand('SetLedBrightness', 0x21, (0, utils_3.decToHex)(red), (0, utils_3.decToHex)(green), (0, utils_3.decToHex)(blue));
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
if (e instanceof zod_1.ZodError) {
|
|
46
|
+
throw new utils_2.CustomError({
|
|
47
|
+
message: 'Zod validation error during SetLedBrightness execution',
|
|
48
|
+
command: 'SetLedBrightness',
|
|
49
|
+
originalError: e,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
throw new utils_2.CustomError({
|
|
54
|
+
message: 'Error during SetLedBrightness execution',
|
|
55
|
+
command: 'SetLedBrightness',
|
|
56
|
+
originalError: e,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
static getLedBrightness() {
|
|
62
|
+
return new encoders_2.BaseCommand('GetLedBrightness', 0x22);
|
|
63
|
+
}
|
|
64
|
+
static setPIRSensorState(params) {
|
|
65
|
+
try {
|
|
66
|
+
types_1.DeviceCommandSchemas.PirOnlyCommandSchemas.setPIRSensorState.parse(params);
|
|
67
|
+
const { state } = params;
|
|
68
|
+
return new encoders_2.BaseCommand('SetPIRSensorState', 0x36, (0, utils_3.decToHex)(state));
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
if (e instanceof zod_1.ZodError) {
|
|
72
|
+
throw new utils_2.CustomError({
|
|
73
|
+
message: 'Zod validation error during SetPIRSensorState execution',
|
|
74
|
+
command: 'SetPIRSensorState',
|
|
75
|
+
originalError: e,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
throw new utils_2.CustomError({
|
|
80
|
+
message: 'Error during SetPIRSensorState execution',
|
|
81
|
+
command: 'SetPIRSensorState',
|
|
82
|
+
originalError: e,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
static getPIRSensorState() {
|
|
88
|
+
return new encoders_2.BaseCommand('GetPIRSensorState', 0x37);
|
|
89
|
+
}
|
|
90
|
+
static setOccupancyTimeout(params) {
|
|
91
|
+
try {
|
|
92
|
+
types_1.DeviceCommandSchemas.PirOnlyCommandSchemas.setOccupancyTimeout.parse(params);
|
|
93
|
+
const { timeout } = params;
|
|
94
|
+
// Convert timeout to two bytes (high byte and low byte)
|
|
95
|
+
const highByte = (timeout >> 8) & 0xff;
|
|
96
|
+
const lowByte = timeout & 0xff;
|
|
97
|
+
return new encoders_2.BaseCommand('SetOccupancyTimeout', 0x38, (0, utils_3.decToHex)(highByte) + (0, utils_3.decToHex)(lowByte));
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
if (e instanceof zod_1.ZodError) {
|
|
101
|
+
throw new utils_2.CustomError({
|
|
102
|
+
message: 'Zod validation error during SetOccupancyTimeout execution',
|
|
103
|
+
command: 'SetOccupancyTimeout',
|
|
104
|
+
originalError: e,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
throw new utils_2.CustomError({
|
|
109
|
+
message: 'Error during SetOccupancyTimeout execution',
|
|
110
|
+
command: 'SetOccupancyTimeout',
|
|
111
|
+
originalError: e,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
static getOccupancyTimeout() {
|
|
117
|
+
return new encoders_2.BaseCommand('GetOccupancyTimeout', 0x39);
|
|
118
|
+
}
|
|
119
|
+
static setPIRDemoMode(params) {
|
|
120
|
+
try {
|
|
121
|
+
types_1.DeviceCommandSchemas.PirOnlyCommandSchemas.setPIRDemoMode.parse(params);
|
|
122
|
+
const { state } = params;
|
|
123
|
+
return new encoders_2.BaseCommand('SetPIRDemoMode', 0x3a, (0, utils_3.decToHex)(state));
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
if (e instanceof zod_1.ZodError) {
|
|
127
|
+
throw new utils_2.CustomError({
|
|
128
|
+
message: 'Zod validation error during SetPIRDemoMode execution',
|
|
129
|
+
command: 'SetPIRDemoMode',
|
|
130
|
+
originalError: e,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
throw new utils_2.CustomError({
|
|
135
|
+
message: 'Error during SetPIRDemoMode execution',
|
|
136
|
+
command: 'SetPIRDemoMode',
|
|
137
|
+
originalError: e,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
static getPIRDemoMode() {
|
|
143
|
+
return new encoders_2.BaseCommand('GetPIRDemoMode', 0x3b);
|
|
144
|
+
}
|
|
145
|
+
static restartDevice() {
|
|
146
|
+
return new encoders_2.BaseCommand('RestartDevice', 0xa5);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.PirOnlyCommands = PirOnlyCommands;
|
|
150
|
+
(0, utils_1.applyMixins)(PirOnlyCommands, [encoders_1.GeneralCommands]);
|
|
151
|
+
(0, utils_1.delMethods)(PirOnlyCommands, []);
|
|
152
|
+
//# sourceMappingURL=PirOnlyCommands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PirOnlyCommands.js","sourceRoot":"","sources":["../../src/encoders/PirOnlyCommands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PirOnlyCommands.test.d.ts","sourceRoot":"","sources":["../../src/encoders/PirOnlyCommands.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const encoders_1 = require("../encoders");
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
describe('PirOnlyCommands payload encoder', () => {
|
|
6
|
+
const commandBuilder = new encoders_1.CommandBuilder('pir_only');
|
|
7
|
+
test('SetLightSensorState encodes enabled flag', () => {
|
|
8
|
+
expect(commandBuilder.build('SetLightSensorState', { state: 1 })).toStrictEqual(new encoders_1.BaseCommand('SetLightSensorState', 0x1e, '01'));
|
|
9
|
+
});
|
|
10
|
+
test('SetLightSensorState encodes disabled flag', () => {
|
|
11
|
+
expect(commandBuilder.build('SetLightSensorState', { state: 0 })).toStrictEqual(new encoders_1.BaseCommand('SetLightSensorState', 0x1e, '00'));
|
|
12
|
+
});
|
|
13
|
+
test('SetLedBrightness encodes RGB values', () => {
|
|
14
|
+
expect(commandBuilder.build('SetLedBrightness', { red: 47, green: 42, blue: 59 })).toStrictEqual(new encoders_1.BaseCommand('SetLedBrightness', 0x21, '2F', '2A', '3B'));
|
|
15
|
+
});
|
|
16
|
+
test('SetPIRSensorState encodes enabled flag', () => {
|
|
17
|
+
expect(commandBuilder.build('SetPIRSensorState', { state: 1 })).toStrictEqual(new encoders_1.BaseCommand('SetPIRSensorState', 0x36, '01'));
|
|
18
|
+
});
|
|
19
|
+
test('SetOccupancyTimeout encodes timeout into two bytes', () => {
|
|
20
|
+
expect(commandBuilder.build('SetOccupancyTimeout', { timeout: 60 })).toStrictEqual(new encoders_1.BaseCommand('SetOccupancyTimeout', 0x38, '003C'));
|
|
21
|
+
});
|
|
22
|
+
test('SetPIRDemoMode encodes enabled flag', () => {
|
|
23
|
+
expect(commandBuilder.build('SetPIRDemoMode', { state: 1 })).toStrictEqual(new encoders_1.BaseCommand('SetPIRDemoMode', 0x3a, '01'));
|
|
24
|
+
});
|
|
25
|
+
test('RestartDevice emits restart command', () => {
|
|
26
|
+
expect(commandBuilder.build('RestartDevice')).toStrictEqual(new encoders_1.BaseCommand('RestartDevice', 0xa5));
|
|
27
|
+
});
|
|
28
|
+
test('Invalid SetPIRSensorState throws validation error', () => {
|
|
29
|
+
expect(() => commandBuilder.build('SetPIRSensorState', { state: 2 })).toThrow(utils_1.CustomError);
|
|
30
|
+
});
|
|
31
|
+
test('Invalid SetLedBrightness throws validation error', () => {
|
|
32
|
+
expect(() => commandBuilder.build('SetLedBrightness', { red: 101, green: 0, blue: 0 })).toThrow(utils_1.CustomError);
|
|
33
|
+
});
|
|
34
|
+
test('Invalid SetLightSensorState throws validation error', () => {
|
|
35
|
+
expect(() => commandBuilder.build('SetLightSensorState', { state: 2 })).toThrow(utils_1.CustomError);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=PirOnlyCommands.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PirOnlyCommands.test.js","sourceRoot":"","sources":["../../src/encoders/PirOnlyCommands.test.ts"],"names":[],"mappings":"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"}
|
package/dist/encoders/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/encoders/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/encoders/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA"}
|
package/dist/encoders/index.js
CHANGED
|
@@ -42,4 +42,5 @@ __exportStar(require("./HTPirLiteCommands"), exports);
|
|
|
42
42
|
__exportStar(require("./Co2PirLiteCommands"), exports);
|
|
43
43
|
__exportStar(require("./MelissaCommands"), exports);
|
|
44
44
|
__exportStar(require("./MultiSensorCommands"), exports);
|
|
45
|
+
__exportStar(require("./PirOnlyCommands"), exports);
|
|
45
46
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/encoders/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAgC;AAChC,gDAA6B;AAC7B,oDAAiC;AACjC,oDAAiC;AACjC,8DAA2C;AAC3C,gDAA6B;AAC7B,sDAAmC;AACnC,sDAAmC;AACnC,0DAAuC;AACvC,qDAAkC;AAClC,kDAA+B;AAC/B,oDAAiC;AACjC,8DAA2C;AAC3C,mDAAgC;AAChC,mDAAgC;AAChC,4DAAyC;AACzC,sDAAmC;AACnC,+DAA4C;AAC5C,2DAAwC;AACxC,uDAAoC;AACpC,sDAAmC;AACnC,4DAAyC;AACzC,mDAAgC;AAChC,uDAAoC;AACpC,sDAAmC;AACnC,uDAAoC;AACpC,oDAAiC;AACjC,wDAAqC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/encoders/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAgC;AAChC,gDAA6B;AAC7B,oDAAiC;AACjC,oDAAiC;AACjC,8DAA2C;AAC3C,gDAA6B;AAC7B,sDAAmC;AACnC,sDAAmC;AACnC,0DAAuC;AACvC,qDAAkC;AAClC,kDAA+B;AAC/B,oDAAiC;AACjC,8DAA2C;AAC3C,mDAAgC;AAChC,mDAAgC;AAChC,4DAAyC;AACzC,sDAAmC;AACnC,+DAA4C;AAC5C,2DAAwC;AACxC,uDAAoC;AACpC,sDAAmC;AACnC,4DAAyC;AACzC,mDAAgC;AAChC,uDAAoC;AACpC,sDAAmC;AACnC,uDAAoC;AACpC,oDAAiC;AACjC,wDAAqC;AACrC,oDAAiC"}
|