mclimate-payload-helper 1.5.3 → 1.7.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/commandsReadingHelper.d.ts.map +1 -1
- package/dist/decoders/commandsReadingHelper.js +22 -15
- package/dist/decoders/commandsReadingHelper.js.map +1 -1
- package/dist/decoders/payloadParsers/melissaLorawanPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/melissaLorawanPayloadParser.js +22 -10
- package/dist/decoders/payloadParsers/melissaLorawanPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/tFloodPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/tFloodPayloadParser.js +6 -2
- package/dist/decoders/payloadParsers/tFloodPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/tValvePayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/tValvePayloadParser.js +1 -0
- package/dist/decoders/payloadParsers/tValvePayloadParser.js.map +1 -1
- package/dist/encoders/MelissaCommands.d.ts +27 -0
- package/dist/encoders/MelissaCommands.d.ts.map +1 -1
- package/dist/encoders/MelissaCommands.js +151 -1
- package/dist/encoders/MelissaCommands.js.map +1 -1
- package/dist/encoders/MelissaCommands.test.js +122 -2
- package/dist/encoders/MelissaCommands.test.js.map +1 -1
- package/dist/encoders/TValveCommands.d.ts.map +1 -1
- package/dist/encoders/TValveCommands.js +2 -1
- package/dist/encoders/TValveCommands.js.map +1 -1
- package/dist/encoders/TValveCommands.test.js +10 -0
- package/dist/encoders/TValveCommands.test.js.map +1 -1
- package/dist/encoders/VickiCommands.d.ts.map +1 -1
- package/dist/encoders/VickiCommands.js +2 -2
- package/dist/encoders/VickiCommands.js.map +1 -1
- package/dist/encoders/VickiCommands.test.js +21 -3
- package/dist/encoders/VickiCommands.test.js.map +1 -1
- package/dist/encoders/types/schemas.d.ts +564 -105
- package/dist/encoders/types/schemas.d.ts.map +1 -1
- package/dist/encoders/types/schemas.js +64 -8
- package/dist/encoders/types/schemas.js.map +1 -1
- package/dist/test/payloadDecoders.test.js +222 -28
- package/dist/test/payloadDecoders.test.js.map +1 -1
- package/package.json +1 -1
- package/src/decoders/commandsReadingHelper.ts +21 -15
- package/src/decoders/payloadParsers/melissaLorawanPayloadParser.ts +39 -10
- package/src/decoders/payloadParsers/tFloodPayloadParser.ts +8 -2
- package/src/decoders/payloadParsers/tValvePayloadParser.ts +1 -0
- package/src/encoders/MelissaCommands.test.ts +186 -3
- package/src/encoders/MelissaCommands.ts +153 -2
- package/src/encoders/TValveCommands.test.ts +13 -0
- package/src/encoders/TValveCommands.ts +2 -1
- package/src/encoders/VickiCommands.test.ts +33 -3
- package/src/encoders/VickiCommands.ts +3 -4
- package/src/encoders/types/schemas.ts +103 -16
- package/src/test/payloadDecoders.test.ts +295 -29
- package/dist/test/payloadEncoders.test.d.ts +0 -2
- package/dist/test/payloadEncoders.test.d.ts.map +0 -1
- package/dist/test/payloadEncoders.test.js +0 -517
- package/dist/test/payloadEncoders.test.js.map +0 -1
|
@@ -5,21 +5,34 @@ const commandsReadingHelper_1 = require("../../decoders/commandsReadingHelper");
|
|
|
5
5
|
const types_1 = require("../../decoders/payloadParsers/types");
|
|
6
6
|
const helpers_1 = require("../../helpers");
|
|
7
7
|
const utils_1 = require("../../utils");
|
|
8
|
+
// Melissa LoRaWAN keep-alive (command 0x01) is 10 bytes long -> 20 hex characters
|
|
9
|
+
const KEEPALIVE_HEX_LENGTH = 20;
|
|
8
10
|
const melissaLorawanPayloadParser = (hexData) => {
|
|
9
11
|
const deviceData = {};
|
|
10
12
|
try {
|
|
11
13
|
const handleKeepAliveData = (bytes) => {
|
|
12
14
|
const keepaliveData = {};
|
|
13
|
-
//
|
|
14
|
-
// According to the screenshot: t[°C] = (T[15:0] - 400) / 10
|
|
15
|
+
// Bytes 1-2: internal temperature sensor, t[°C] = (T[15:0] - 400) / 10
|
|
15
16
|
const rawTemperature = (bytes[1] << 8) | bytes[2];
|
|
16
17
|
keepaliveData.sensorTemperature = Number(((rawTemperature - 400) / 10).toFixed(2));
|
|
17
|
-
//
|
|
18
|
-
// According to the screenshot: RH[%] = (XX * 100) / 256
|
|
18
|
+
// Byte 3: relative humidity, RH[%] = (XX * 100) / 256
|
|
19
19
|
keepaliveData.relativeHumidity = Number(((bytes[3] * 100) / 256).toFixed(2));
|
|
20
|
-
//
|
|
21
|
-
//
|
|
20
|
+
// Byte 4: device status
|
|
21
|
+
// bit 7: 1 if IR code recording is requested
|
|
22
|
+
// bit 6: occupancy flag (1 = occupied, 0 = unoccupied)
|
|
23
|
+
// bit 5: power source / LoRaWAN class (0 = USB, class C; 1 = batteries, class A)
|
|
24
|
+
// bits 4:0: reserved
|
|
22
25
|
keepaliveData.isIrCodeRecordingRequested = (bytes[4] & 0x80) !== 0;
|
|
26
|
+
keepaliveData.occupied = (bytes[4] & 0x40) !== 0;
|
|
27
|
+
const onBatteries = (bytes[4] & 0x20) !== 0;
|
|
28
|
+
keepaliveData.powerSource = onBatteries ? 'battery' : 'usb';
|
|
29
|
+
keepaliveData.lorawanClass = onBatteries ? 'A' : 'C';
|
|
30
|
+
// Bytes 5-6: light intensity, directly in lux
|
|
31
|
+
keepaliveData.lux = (bytes[5] << 8) | bytes[6];
|
|
32
|
+
// Bytes 7-8: PIR motion counter
|
|
33
|
+
keepaliveData.pirTriggerCount = (bytes[7] << 8) | bytes[8];
|
|
34
|
+
// Byte 9: device supply voltage, V[mV] = XX * 16 + 1600 (USB supply when powered over USB-C)
|
|
35
|
+
keepaliveData.batteryVoltage = Number(((bytes[9] * 16 + 1600) / 1000).toFixed(3));
|
|
23
36
|
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
|
|
24
37
|
};
|
|
25
38
|
if (hexData) {
|
|
@@ -27,12 +40,12 @@ const melissaLorawanPayloadParser = (hexData) => {
|
|
|
27
40
|
if (!byteArray)
|
|
28
41
|
return;
|
|
29
42
|
if (byteArray[0] == 1) {
|
|
30
|
-
// its a
|
|
43
|
+
// its a keepalive
|
|
31
44
|
handleKeepAliveData(byteArray);
|
|
32
45
|
}
|
|
33
46
|
else {
|
|
34
47
|
// parse command answers
|
|
35
|
-
const data = (0, commandsReadingHelper_1.commandsReadingHelper)(hexData,
|
|
48
|
+
const data = (0, commandsReadingHelper_1.commandsReadingHelper)(hexData, KEEPALIVE_HEX_LENGTH, types_1.DeviceType.MelissaLorawan);
|
|
36
49
|
if (!data)
|
|
37
50
|
return;
|
|
38
51
|
const shouldKeepAlive = Object.prototype.hasOwnProperty.call(data, 'decodeKeepalive');
|
|
@@ -42,14 +55,13 @@ const melissaLorawanPayloadParser = (hexData) => {
|
|
|
42
55
|
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, data));
|
|
43
56
|
// get only keepalive from device response
|
|
44
57
|
if (shouldKeepAlive) {
|
|
45
|
-
const keepaliveData = hexData.slice(-
|
|
58
|
+
const keepaliveData = hexData.slice(-KEEPALIVE_HEX_LENGTH);
|
|
46
59
|
const dataToPass = (0, helpers_1.byteArrayParser)(keepaliveData);
|
|
47
60
|
if (!dataToPass)
|
|
48
61
|
return;
|
|
49
62
|
handleKeepAliveData(dataToPass);
|
|
50
63
|
}
|
|
51
64
|
}
|
|
52
|
-
// console.log(deviceData)
|
|
53
65
|
return deviceData;
|
|
54
66
|
}
|
|
55
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"melissaLorawanPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/melissaLorawanPayloadParser.ts"],"names":[],"mappings":";;;AAAA,4EAAwE;AACxE,2DAA4D;AAC5D,uCAA2C;AAC3C,mCAAqC;
|
|
1
|
+
{"version":3,"file":"melissaLorawanPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/melissaLorawanPayloadParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tFloodPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/tFloodPayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,mBAAmB,YAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"tFloodPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/tFloodPayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,mBAAmB,YAAa,MAAM,mBAiElD,CAAA"}
|
|
@@ -42,11 +42,15 @@ const tFloodPayloadParser = (hexData) => {
|
|
|
42
42
|
};
|
|
43
43
|
if (hexData) {
|
|
44
44
|
if (hexData.length > 6) {
|
|
45
|
-
|
|
45
|
+
// command responses are prepended to the 3-byte keepalive; parse only the
|
|
46
|
+
// command part so keepalive bytes (e.g. 0x0A, 0x4A) aren't read as command ids
|
|
47
|
+
const data = (0, commandsReadingHelper_1.commandsReadingHelper)(hexData.slice(0, -6), 6, types_1.DeviceType.TFlood);
|
|
48
|
+
if (data && 'decodeKeepalive' in data) {
|
|
49
|
+
delete data.decodeKeepalive;
|
|
50
|
+
}
|
|
46
51
|
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, data));
|
|
47
52
|
// get only keepalive from device response
|
|
48
53
|
const keepaliveData = hexData.slice(-6);
|
|
49
|
-
// let dataToPass = keepaliveData.match(/.{1,2}/g).map(byte => { return parseInt(byte, 16) });
|
|
50
54
|
handleKeepAliveData(keepaliveData);
|
|
51
55
|
}
|
|
52
56
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tFloodPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/tFloodPayloadParser.ts"],"names":[],"mappings":";;;AAAA,4EAAwE;AACxE,2DAA4D;AAC5D,uCAAkC;AAClC,mCAAqC;AAE9B,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAE,EAAE;IACtD,MAAM,UAAU,GAAG,EAAE,CAAA;IAErB,IAAI,CAAC;QACJ,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAE,EAAE;;YAC/C,MAAM,SAAS,GAAG,MAAA,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,0CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;YAC1G,IAAI,CAAC,SAAS;gBAAE,OAAM;YAEtB,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,CAAC,CAAA;YAE1G,MAAM,YAAY,GAAG,CAAC,SAAmB,EAAE,EAAE;gBAC5C,MAAM,aAAa,GAAG;oBACrB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC3D,SAAS,EAAE,IAAA,gBAAM,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClC,KAAK,EAAE,IAAA,gBAAM,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9B,OAAO,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI;iBAChD,CAAA;gBACD,MAAM,CAAC,MAAM,CAAC,UAAU,oBAAO,UAAU,qBAAS,aAAa,EAAG,CAAA;YACnE,CAAC,CAAA;YACD,MAAM,WAAW,GAAG,CAAC,SAAmB,EAAE,EAAE;gBAC3C,MAAM,aAAa,GAAG;oBACrB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC3D,SAAS,EAAE,IAAA,gBAAM,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClC,KAAK,EAAE,IAAA,gBAAM,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9B,OAAO,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI;oBAChD,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACtC,CAAA;gBACD,MAAM,CAAC,MAAM,CAAC,UAAU,oBAAO,UAAU,qBAAS,aAAa,EAAG,CAAA;YACnE,CAAC,CAAA;YAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,WAAW,CAAC,SAAS,CAAC,CAAA;YACvB,CAAC;iBAAM,CAAC;gBACP,YAAY,CAAC,SAAS,CAAC,CAAA;YACxB,CAAC;QACF,CAAC,CAAA;QAED,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,IAAA,6CAAqB,EAAC,OAAO,EAAE,CAAC,EAAE,kBAAU,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"tFloodPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/tFloodPayloadParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tValvePayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/tValvePayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,mBAAmB,YAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"tValvePayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/tValvePayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,mBAAmB,YAAa,MAAM,mBAkElD,CAAA"}
|
|
@@ -21,6 +21,7 @@ const tValvePayloadParser = (hexData) => {
|
|
|
21
21
|
const longPackage = (byteArray) => {
|
|
22
22
|
const keepaliveData = {
|
|
23
23
|
reason: messageTypes[(byteArray[0] >> 5) & 0b111], // Extract bits 7:5 using right shift and mask
|
|
24
|
+
batteryTooLow: !!(byteArray[0] & (1 << 4)), // Extract bit 4 (fw >= 1.7, reserved/0 before)
|
|
24
25
|
boxTamper: !!(byteArray[0] & (1 << 3)), // Extract bit 3
|
|
25
26
|
floodDetectionWireState: !!(byteArray[0] & (1 << 2)), // Extract bit 2
|
|
26
27
|
flood: !!(byteArray[0] & (1 << 1)), // Extract bit 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tValvePayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/tValvePayloadParser.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tValvePayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/tValvePayloadParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
import { GeneralCommands, BaseCommand } from '../encoders';
|
|
2
2
|
import { MelissaCommandTypes } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Melissa LoRaWAN commands.
|
|
5
|
+
*
|
|
6
|
+
* IR workflow commands (0x05 - 0x0C) are Melissa specific. The PIR / light-sensor commands
|
|
7
|
+
* (0x1E/0x1F, 0x36 - 0x44) and RestartDevice (0xA5) share the PIR Mini command codes and are
|
|
8
|
+
* mixed in from PirMiniCommands; LED brightness (0x21/0x22) is not supported by Melissa and is
|
|
9
|
+
* removed. PIR sensitivity uses Melissa specific codes (0x45/0x46).
|
|
10
|
+
*/
|
|
3
11
|
export declare class MelissaCommands extends GeneralCommands {
|
|
12
|
+
/** 0x05 - preload a chunk of LZ77-compressed IR code at the given device buffer offset. */
|
|
13
|
+
static sendIrCodeData(params: MelissaCommandTypes.SendIrCodeDataParams): BaseCommand;
|
|
14
|
+
/** 0x06 - ask where the next IR code chunk shall be written. */
|
|
15
|
+
static getIrCodeBufferOffset(): BaseCommand;
|
|
16
|
+
/** 0x07 - forget any preloaded or recorded IR code data. */
|
|
17
|
+
static resetIrCodeBufferOffset(): BaseCommand;
|
|
18
|
+
/** 0x08 - emit and/or store the preloaded IR code. mode: 0 emit, 1 emit + store, 2 store only. */
|
|
19
|
+
static emitPreloadedIrCode(params: MelissaCommandTypes.EmitPreloadedIrCodeParams): BaseCommand;
|
|
20
|
+
/** 0x09 - listen for an IR code for `time` minutes (0 = 10 min) and store it at `position` (0 = do not store). */
|
|
4
21
|
static setIrCodeRecording(params: MelissaCommandTypes.SetIrCodeRecordingParams): BaseCommand;
|
|
22
|
+
/** 0x0A - ask for recorded IR code size and how many bytes were already sent to the server. */
|
|
23
|
+
static getRecordedIrCodeStatus(): BaseCommand;
|
|
24
|
+
/** 0x0B - read recorded IR code data starting from the given buffer offset. */
|
|
25
|
+
static getRecordedIrCodeData(params: MelissaCommandTypes.GetRecordedIrCodeDataParams): BaseCommand;
|
|
26
|
+
/** 0x0C - load the IR code stored at `position`. mode: 0 emit it and preload for reading, 1 preload for reading only. */
|
|
27
|
+
static loadStoredIrCode(params: MelissaCommandTypes.LoadStoredIrCodeParams): BaseCommand;
|
|
28
|
+
/** 0x45 - PIR sensitivity (same semantics as Wireless Thermostat 0x3E, Melissa default is 30). */
|
|
29
|
+
static setPIRSensorSensitivity(params: MelissaCommandTypes.SetPIRSensorSensitivityParams): BaseCommand;
|
|
30
|
+
/** 0x46 - read PIR sensitivity. */
|
|
31
|
+
static getPIRSensorSensitivity(): BaseCommand;
|
|
5
32
|
}
|
|
6
33
|
//# sourceMappingURL=MelissaCommands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MelissaCommands.d.ts","sourceRoot":"","sources":["../../src/encoders/MelissaCommands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"MelissaCommands.d.ts","sourceRoot":"","sources":["../../src/encoders/MelissaCommands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGzD,OAAO,EAAwB,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAGnE;;;;;;;GAOG;AACH,qBAAa,eAAgB,SAAQ,eAAe;IACnD,2FAA2F;IAC3F,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,mBAAmB,CAAC,oBAAoB;IAwBtE,gEAAgE;IAChE,MAAM,CAAC,qBAAqB;IAI5B,4DAA4D;IAC5D,MAAM,CAAC,uBAAuB;IAI9B,kGAAkG;IAClG,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,yBAAyB;IAqBhF,kHAAkH;IAClH,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,CAAC,wBAAwB;IAsB9E,+FAA+F;IAC/F,MAAM,CAAC,uBAAuB;IAI9B,+EAA+E;IAC/E,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,CAAC,2BAA2B;IAsBpF,yHAAyH;IACzH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,CAAC,sBAAsB;IAsB1E,kGAAkG;IAClG,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,mBAAmB,CAAC,6BAA6B;IAsBxF,mCAAmC;IACnC,MAAM,CAAC,uBAAuB;CAG9B"}
|
|
@@ -2,10 +2,77 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MelissaCommands = void 0;
|
|
4
4
|
const encoders_1 = require("../encoders");
|
|
5
|
+
const PirMiniCommands_1 = require("../encoders/PirMiniCommands");
|
|
5
6
|
const utils_1 = require("../utils");
|
|
6
7
|
const types_1 = require("./types");
|
|
7
8
|
const zod_1 = require("zod");
|
|
9
|
+
/**
|
|
10
|
+
* Melissa LoRaWAN commands.
|
|
11
|
+
*
|
|
12
|
+
* IR workflow commands (0x05 - 0x0C) are Melissa specific. The PIR / light-sensor commands
|
|
13
|
+
* (0x1E/0x1F, 0x36 - 0x44) and RestartDevice (0xA5) share the PIR Mini command codes and are
|
|
14
|
+
* mixed in from PirMiniCommands; LED brightness (0x21/0x22) is not supported by Melissa and is
|
|
15
|
+
* removed. PIR sensitivity uses Melissa specific codes (0x45/0x46).
|
|
16
|
+
*/
|
|
8
17
|
class MelissaCommands extends encoders_1.GeneralCommands {
|
|
18
|
+
/** 0x05 - preload a chunk of LZ77-compressed IR code at the given device buffer offset. */
|
|
19
|
+
static sendIrCodeData(params) {
|
|
20
|
+
try {
|
|
21
|
+
types_1.DeviceCommandSchemas.MelissaCommandSchemas.sendIrCodeData.parse(params);
|
|
22
|
+
const { offset, data } = params;
|
|
23
|
+
// length byte counts everything after it: 2 offset bytes + the IR data bytes
|
|
24
|
+
const length = 2 + data.length / 2;
|
|
25
|
+
return new encoders_1.BaseCommand('SendIrCodeData', 0x05, (0, utils_1.decToHex)(length), (0, utils_1.dec2hex)(offset), data.toUpperCase());
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
if (e instanceof zod_1.ZodError) {
|
|
29
|
+
throw new utils_1.CustomError({
|
|
30
|
+
message: 'Zod validation error during SendIrCodeData execution',
|
|
31
|
+
command: 'SendIrCodeData',
|
|
32
|
+
originalError: e,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
throw new utils_1.CustomError({
|
|
37
|
+
message: 'Error during SendIrCodeData execution',
|
|
38
|
+
command: 'SendIrCodeData',
|
|
39
|
+
originalError: e,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** 0x06 - ask where the next IR code chunk shall be written. */
|
|
45
|
+
static getIrCodeBufferOffset() {
|
|
46
|
+
return new encoders_1.BaseCommand('GetIrCodeBufferOffset', 0x06);
|
|
47
|
+
}
|
|
48
|
+
/** 0x07 - forget any preloaded or recorded IR code data. */
|
|
49
|
+
static resetIrCodeBufferOffset() {
|
|
50
|
+
return new encoders_1.BaseCommand('ResetIrCodeBufferOffset', 0x07);
|
|
51
|
+
}
|
|
52
|
+
/** 0x08 - emit and/or store the preloaded IR code. mode: 0 emit, 1 emit + store, 2 store only. */
|
|
53
|
+
static emitPreloadedIrCode(params) {
|
|
54
|
+
try {
|
|
55
|
+
const { mode, position } = types_1.DeviceCommandSchemas.MelissaCommandSchemas.emitPreloadedIrCode.parse(params);
|
|
56
|
+
return new encoders_1.BaseCommand('EmitPreloadedIrCode', 0x08, (0, utils_1.decToHex)(mode), (0, utils_1.decToHex)(position));
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
if (e instanceof zod_1.ZodError) {
|
|
60
|
+
throw new utils_1.CustomError({
|
|
61
|
+
message: 'Zod validation error during EmitPreloadedIrCode execution',
|
|
62
|
+
command: 'EmitPreloadedIrCode',
|
|
63
|
+
originalError: e,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
throw new utils_1.CustomError({
|
|
68
|
+
message: 'Error during EmitPreloadedIrCode execution',
|
|
69
|
+
command: 'EmitPreloadedIrCode',
|
|
70
|
+
originalError: e,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** 0x09 - listen for an IR code for `time` minutes (0 = 10 min) and store it at `position` (0 = do not store). */
|
|
9
76
|
static setIrCodeRecording(params) {
|
|
10
77
|
try {
|
|
11
78
|
types_1.DeviceCommandSchemas.MelissaCommandSchemas.setIrCodeRecording.parse(params);
|
|
@@ -29,7 +96,90 @@ class MelissaCommands extends encoders_1.GeneralCommands {
|
|
|
29
96
|
}
|
|
30
97
|
}
|
|
31
98
|
}
|
|
99
|
+
/** 0x0A - ask for recorded IR code size and how many bytes were already sent to the server. */
|
|
100
|
+
static getRecordedIrCodeStatus() {
|
|
101
|
+
return new encoders_1.BaseCommand('GetRecordedIrCodeStatus', 0x0a);
|
|
102
|
+
}
|
|
103
|
+
/** 0x0B - read recorded IR code data starting from the given buffer offset. */
|
|
104
|
+
static getRecordedIrCodeData(params) {
|
|
105
|
+
try {
|
|
106
|
+
types_1.DeviceCommandSchemas.MelissaCommandSchemas.getRecordedIrCodeData.parse(params);
|
|
107
|
+
const { offset } = params;
|
|
108
|
+
return new encoders_1.BaseCommand('GetRecordedIrCodeData', 0x0b, (0, utils_1.dec2hex)(offset));
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
if (e instanceof zod_1.ZodError) {
|
|
112
|
+
throw new utils_1.CustomError({
|
|
113
|
+
message: 'Zod validation error during GetRecordedIrCodeData execution',
|
|
114
|
+
command: 'GetRecordedIrCodeData',
|
|
115
|
+
originalError: e,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
throw new utils_1.CustomError({
|
|
120
|
+
message: 'Error during GetRecordedIrCodeData execution',
|
|
121
|
+
command: 'GetRecordedIrCodeData',
|
|
122
|
+
originalError: e,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/** 0x0C - load the IR code stored at `position`. mode: 0 emit it and preload for reading, 1 preload for reading only. */
|
|
128
|
+
static loadStoredIrCode(params) {
|
|
129
|
+
try {
|
|
130
|
+
types_1.DeviceCommandSchemas.MelissaCommandSchemas.loadStoredIrCode.parse(params);
|
|
131
|
+
const { mode, position } = params;
|
|
132
|
+
return new encoders_1.BaseCommand('LoadStoredIrCode', 0x0c, (0, utils_1.decToHex)(mode), (0, utils_1.decToHex)(position));
|
|
133
|
+
}
|
|
134
|
+
catch (e) {
|
|
135
|
+
if (e instanceof zod_1.ZodError) {
|
|
136
|
+
throw new utils_1.CustomError({
|
|
137
|
+
message: 'Zod validation error during LoadStoredIrCode execution',
|
|
138
|
+
command: 'LoadStoredIrCode',
|
|
139
|
+
originalError: e,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
throw new utils_1.CustomError({
|
|
144
|
+
message: 'Error during LoadStoredIrCode execution',
|
|
145
|
+
command: 'LoadStoredIrCode',
|
|
146
|
+
originalError: e,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/** 0x45 - PIR sensitivity (same semantics as Wireless Thermostat 0x3E, Melissa default is 30). */
|
|
152
|
+
static setPIRSensorSensitivity(params) {
|
|
153
|
+
try {
|
|
154
|
+
types_1.DeviceCommandSchemas.MelissaCommandSchemas.setPIRSensorSensitivity.parse(params);
|
|
155
|
+
const { sensitivity } = params;
|
|
156
|
+
return new encoders_1.BaseCommand('SetPIRSensorSensitivity', 0x45, (0, utils_1.decToHex)(sensitivity));
|
|
157
|
+
}
|
|
158
|
+
catch (e) {
|
|
159
|
+
if (e instanceof zod_1.ZodError) {
|
|
160
|
+
throw new utils_1.CustomError({
|
|
161
|
+
message: 'Zod validation error during SetPIRSensorSensitivity execution',
|
|
162
|
+
command: 'SetPIRSensorSensitivity',
|
|
163
|
+
originalError: e,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
throw new utils_1.CustomError({
|
|
168
|
+
message: 'Error during SetPIRSensorSensitivity execution',
|
|
169
|
+
command: 'SetPIRSensorSensitivity',
|
|
170
|
+
originalError: e,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/** 0x46 - read PIR sensitivity. */
|
|
176
|
+
static getPIRSensorSensitivity() {
|
|
177
|
+
return new encoders_1.BaseCommand('GetPIRSensorSensitivity', 0x46);
|
|
178
|
+
}
|
|
32
179
|
}
|
|
33
180
|
exports.MelissaCommands = MelissaCommands;
|
|
34
|
-
|
|
181
|
+
// PIR / light sensor commands and RestartDevice share the PIR Mini command codes
|
|
182
|
+
(0, utils_1.applyMixins)(MelissaCommands, [PirMiniCommands_1.PirMiniCommands]);
|
|
183
|
+
// Melissa has no LED brightness commands (0x21 / 0x22)
|
|
184
|
+
(0, utils_1.delMethods)(MelissaCommands, ['setLedBrightness', 'getLedBrightness']);
|
|
35
185
|
//# sourceMappingURL=MelissaCommands.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MelissaCommands.js","sourceRoot":"","sources":["../../src/encoders/MelissaCommands.ts"],"names":[],"mappings":";;;AAAA,yCAAyD;AACzD,
|
|
1
|
+
{"version":3,"file":"MelissaCommands.js","sourceRoot":"","sources":["../../src/encoders/MelissaCommands.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,131 @@ const encoders_1 = require("../encoders");
|
|
|
4
4
|
const utils_1 = require("../utils");
|
|
5
5
|
describe('MelissaCommands payload encoder', () => {
|
|
6
6
|
const commandBuilder = new encoders_1.CommandBuilder('melissa_lorawan');
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
/* ------------------------------ IR workflow (protocol 1.1 - 1.8) ------------------------------ */
|
|
8
|
+
test('SendIrCodeData encodes length, offset and data (protocol 1.1 example)', () => {
|
|
9
|
+
const command = commandBuilder.build('SendIrCodeData', { offset: 0, data: '000102030405060708090A0B' });
|
|
10
|
+
expect(command).toStrictEqual(new encoders_1.BaseCommand('SendIrCodeData', 0x05, '0E', '0000', '000102030405060708090A0B'));
|
|
11
|
+
expect(command.toHex().toUpperCase()).toBe('050E0000000102030405060708090A0B');
|
|
12
|
+
});
|
|
13
|
+
test('SendIrCodeData encodes a follow-up chunk at a non-zero offset (protocol 1.4 flow)', () => {
|
|
14
|
+
const command = commandBuilder.build('SendIrCodeData', { offset: 0x2f, data: '00082f00080800090a' });
|
|
15
|
+
expect(command.toHex().toUpperCase()).toBe('050B002F00082F00080800090A');
|
|
16
|
+
});
|
|
17
|
+
test('SendIrCodeData rejects odd-length or non-hex data', () => {
|
|
18
|
+
expect(() => commandBuilder.build('SendIrCodeData', { offset: 0, data: '0A0' })).toThrow(utils_1.CustomError);
|
|
19
|
+
expect(() => commandBuilder.build('SendIrCodeData', { offset: 0, data: 'zz' })).toThrow(utils_1.CustomError);
|
|
20
|
+
expect(() => commandBuilder.build('SendIrCodeData', { offset: 0, data: '' })).toThrow(utils_1.CustomError);
|
|
21
|
+
});
|
|
22
|
+
test('SendIrCodeData rejects chunks that do not fit the length byte', () => {
|
|
23
|
+
expect(() => commandBuilder.build('SendIrCodeData', { offset: 0, data: '00'.repeat(253) })).not.toThrow();
|
|
24
|
+
expect(() => commandBuilder.build('SendIrCodeData', { offset: 0, data: '00'.repeat(254) })).toThrow(utils_1.CustomError);
|
|
25
|
+
});
|
|
26
|
+
test('SendIrCodeData rejects offsets outside 0-65535', () => {
|
|
27
|
+
expect(() => commandBuilder.build('SendIrCodeData', { offset: 65536, data: '00' })).toThrow(utils_1.CustomError);
|
|
28
|
+
expect(() => commandBuilder.build('SendIrCodeData', { offset: -1, data: '00' })).toThrow(utils_1.CustomError);
|
|
29
|
+
});
|
|
30
|
+
test('GetIrCodeBufferOffset emits get command', () => {
|
|
31
|
+
expect(commandBuilder.build('GetIrCodeBufferOffset')).toStrictEqual(new encoders_1.BaseCommand('GetIrCodeBufferOffset', 0x06));
|
|
32
|
+
});
|
|
33
|
+
test('ResetIrCodeBufferOffset emits reset command', () => {
|
|
34
|
+
expect(commandBuilder.build('ResetIrCodeBufferOffset')).toStrictEqual(new encoders_1.BaseCommand('ResetIrCodeBufferOffset', 0x07));
|
|
35
|
+
});
|
|
36
|
+
test('EmitPreloadedIrCode encodes emit-only (protocol 1.4 flow)', () => {
|
|
37
|
+
const command = commandBuilder.build('EmitPreloadedIrCode', { mode: 0 });
|
|
38
|
+
expect(command).toStrictEqual(new encoders_1.BaseCommand('EmitPreloadedIrCode', 0x08, '00', '00'));
|
|
39
|
+
expect(command.toHex()).toBe('080000');
|
|
40
|
+
});
|
|
41
|
+
test('EmitPreloadedIrCode encodes emit-and-store and store-only with position', () => {
|
|
42
|
+
expect(commandBuilder.build('EmitPreloadedIrCode', { mode: 1, position: 3 })).toStrictEqual(new encoders_1.BaseCommand('EmitPreloadedIrCode', 0x08, '01', '03'));
|
|
43
|
+
expect(commandBuilder.build('EmitPreloadedIrCode', { mode: 2, position: 10 })).toStrictEqual(new encoders_1.BaseCommand('EmitPreloadedIrCode', 0x08, '02', '0A'));
|
|
44
|
+
});
|
|
45
|
+
test('EmitPreloadedIrCode requires a position when storing', () => {
|
|
46
|
+
expect(() => commandBuilder.build('EmitPreloadedIrCode', { mode: 1 })).toThrow(utils_1.CustomError);
|
|
47
|
+
expect(() => commandBuilder.build('EmitPreloadedIrCode', { mode: 2, position: 0 })).toThrow(utils_1.CustomError);
|
|
48
|
+
expect(() => commandBuilder.build('EmitPreloadedIrCode', { mode: 1, position: 11 })).toThrow(utils_1.CustomError);
|
|
49
|
+
expect(() => commandBuilder.build('EmitPreloadedIrCode', { mode: 3 })).toThrow(utils_1.CustomError);
|
|
50
|
+
});
|
|
51
|
+
test('SetIrCodeRecording encodes time and position (protocol 1.5 examples)', () => {
|
|
52
|
+
expect(commandBuilder.build('SetIrCodeRecording', { time: 15, position: 0 })).toStrictEqual(new encoders_1.BaseCommand('SetIrCodeRecording', 0x09, '0F', '00'));
|
|
53
|
+
expect(commandBuilder.build('SetIrCodeRecording', { time: 0, position: 2 })).toStrictEqual(new encoders_1.BaseCommand('SetIrCodeRecording', 0x09, '00', '02'));
|
|
9
54
|
});
|
|
10
55
|
test('Invalid SetIrCodeRecording throws validation error', () => {
|
|
11
56
|
expect(() => commandBuilder.build('SetIrCodeRecording', { time: -1, position: 1 })).toThrow(utils_1.CustomError);
|
|
57
|
+
expect(() => commandBuilder.build('SetIrCodeRecording', { time: 256, position: 1 })).toThrow(utils_1.CustomError);
|
|
58
|
+
expect(() => commandBuilder.build('SetIrCodeRecording', { time: 10, position: 11 })).toThrow(utils_1.CustomError);
|
|
59
|
+
});
|
|
60
|
+
test('GetRecordedIrCodeStatus emits get command', () => {
|
|
61
|
+
expect(commandBuilder.build('GetRecordedIrCodeStatus')).toStrictEqual(new encoders_1.BaseCommand('GetRecordedIrCodeStatus', 0x0a));
|
|
62
|
+
});
|
|
63
|
+
test('GetRecordedIrCodeData encodes the 2-byte read offset (protocol 1.7 examples)', () => {
|
|
64
|
+
expect(commandBuilder.build('GetRecordedIrCodeData', { offset: 0 })).toStrictEqual(new encoders_1.BaseCommand('GetRecordedIrCodeData', 0x0b, '0000'));
|
|
65
|
+
expect(commandBuilder.build('GetRecordedIrCodeData', { offset: 47 }).toHex().toUpperCase()).toBe('0B002F');
|
|
66
|
+
expect(() => commandBuilder.build('GetRecordedIrCodeData', { offset: 65536 })).toThrow(utils_1.CustomError);
|
|
67
|
+
});
|
|
68
|
+
test('LoadStoredIrCode encodes mode and position (protocol 1.8 example)', () => {
|
|
69
|
+
const command = commandBuilder.build('LoadStoredIrCode', { mode: 0, position: 1 });
|
|
70
|
+
expect(command).toStrictEqual(new encoders_1.BaseCommand('LoadStoredIrCode', 0x0c, '00', '01'));
|
|
71
|
+
expect(command.toHex()).toBe('0c0001');
|
|
72
|
+
expect(commandBuilder.build('LoadStoredIrCode', { mode: 1, position: 10 })).toStrictEqual(new encoders_1.BaseCommand('LoadStoredIrCode', 0x0c, '01', '0A'));
|
|
73
|
+
});
|
|
74
|
+
test('LoadStoredIrCode rejects position 0 and unknown modes', () => {
|
|
75
|
+
expect(() => commandBuilder.build('LoadStoredIrCode', { mode: 0, position: 0 })).toThrow(utils_1.CustomError);
|
|
76
|
+
expect(() => commandBuilder.build('LoadStoredIrCode', { mode: 2, position: 1 })).toThrow(utils_1.CustomError);
|
|
77
|
+
});
|
|
78
|
+
/* ------------------------------ PIR / light sensor (shared with PIR Mini) ------------------------------ */
|
|
79
|
+
test('SetLightSensorState / GetLightSensorState use 0x1E / 0x1F', () => {
|
|
80
|
+
expect(commandBuilder.build('SetLightSensorState', { state: 1 })).toStrictEqual(new encoders_1.BaseCommand('SetLightSensorState', 0x1e, '01'));
|
|
81
|
+
expect(commandBuilder.build('GetLightSensorState')).toStrictEqual(new encoders_1.BaseCommand('GetLightSensorState', 0x1f));
|
|
82
|
+
});
|
|
83
|
+
test('SetPIRSensorState / GetPIRSensorState use 0x36 / 0x37', () => {
|
|
84
|
+
expect(commandBuilder.build('SetPIRSensorState', { state: 1 })).toStrictEqual(new encoders_1.BaseCommand('SetPIRSensorState', 0x36, '01'));
|
|
85
|
+
expect(commandBuilder.build('GetPIRSensorState')).toStrictEqual(new encoders_1.BaseCommand('GetPIRSensorState', 0x37));
|
|
86
|
+
});
|
|
87
|
+
test('SetOccupancyTimeout / GetOccupancyTimeout use 0x38 / 0x39', () => {
|
|
88
|
+
expect(commandBuilder.build('SetOccupancyTimeout', { timeout: 60 })).toStrictEqual(new encoders_1.BaseCommand('SetOccupancyTimeout', 0x38, '003C'));
|
|
89
|
+
expect(commandBuilder.build('GetOccupancyTimeout')).toStrictEqual(new encoders_1.BaseCommand('GetOccupancyTimeout', 0x39));
|
|
90
|
+
});
|
|
91
|
+
test('SetPIRDemoMode / GetPIRDemoMode use 0x3C / 0x3D', () => {
|
|
92
|
+
expect(commandBuilder.build('SetPIRDemoMode', { state: 1 })).toStrictEqual(new encoders_1.BaseCommand('SetPIRDemoMode', 0x3c, '01'));
|
|
93
|
+
expect(commandBuilder.build('GetPIRDemoMode')).toStrictEqual(new encoders_1.BaseCommand('GetPIRDemoMode', 0x3d));
|
|
94
|
+
});
|
|
95
|
+
test('SetPIROperationMode / GetPIROperationMode use 0x3E / 0x3F', () => {
|
|
96
|
+
expect(commandBuilder.build('SetPIROperationMode', { mode: 2 })).toStrictEqual(new encoders_1.BaseCommand('SetPIROperationMode', 0x3e, '02'));
|
|
97
|
+
expect(commandBuilder.build('GetPIROperationMode')).toStrictEqual(new encoders_1.BaseCommand('GetPIROperationMode', 0x3f));
|
|
98
|
+
});
|
|
99
|
+
test('SetPIRBlindTime / GetPIRBlindTime use 0x41 / 0x42', () => {
|
|
100
|
+
expect(commandBuilder.build('SetPIRBlindTime', { time: 60 })).toStrictEqual(new encoders_1.BaseCommand('SetPIRBlindTime', 0x41, '003C'));
|
|
101
|
+
expect(commandBuilder.build('GetPIRBlindTime')).toStrictEqual(new encoders_1.BaseCommand('GetPIRBlindTime', 0x42));
|
|
102
|
+
});
|
|
103
|
+
test('SetPIRCounterResetFlag / GetPIRCounterResetFlag use 0x43 / 0x44', () => {
|
|
104
|
+
expect(commandBuilder.build('SetPIRCounterResetFlag', { state: 1 })).toStrictEqual(new encoders_1.BaseCommand('SetPIRCounterResetFlag', 0x43, '01'));
|
|
105
|
+
expect(commandBuilder.build('GetPIRCounterResetFlag')).toStrictEqual(new encoders_1.BaseCommand('GetPIRCounterResetFlag', 0x44));
|
|
106
|
+
});
|
|
107
|
+
test('SetPIRSensorSensitivity / GetPIRSensorSensitivity use Melissa codes 0x45 / 0x46', () => {
|
|
108
|
+
expect(commandBuilder.build('SetPIRSensorSensitivity', { sensitivity: 30 })).toStrictEqual(new encoders_1.BaseCommand('SetPIRSensorSensitivity', 0x45, '1E'));
|
|
109
|
+
expect(commandBuilder.build('GetPIRSensorSensitivity')).toStrictEqual(new encoders_1.BaseCommand('GetPIRSensorSensitivity', 0x46));
|
|
110
|
+
expect(() => commandBuilder.build('SetPIRSensorSensitivity', { sensitivity: 11 })).toThrow(utils_1.CustomError);
|
|
111
|
+
});
|
|
112
|
+
test('RestartDevice emits 0xA5', () => {
|
|
113
|
+
expect(commandBuilder.build('RestartDevice')).toStrictEqual(new encoders_1.BaseCommand('RestartDevice', 0xa5));
|
|
114
|
+
});
|
|
115
|
+
test('LED brightness commands are not available on Melissa', () => {
|
|
116
|
+
expect(() => commandBuilder.build('SetLedBrightness', { value: 50 })).toThrow(utils_1.CustomError);
|
|
117
|
+
expect(() => commandBuilder.build('GetLedBrightness')).toThrow(utils_1.CustomError);
|
|
118
|
+
});
|
|
119
|
+
/* ------------------------------ General commands ------------------------------ */
|
|
120
|
+
test('General commands are inherited', () => {
|
|
121
|
+
expect(commandBuilder.build('SetKeepAlive', { time: 10 })).toStrictEqual(new encoders_1.BaseCommand('SetKeepAlive', 0x02, '0A'));
|
|
122
|
+
expect(commandBuilder.build('GetDeviceVersion')).toStrictEqual(new encoders_1.BaseCommand('GetDeviceVersion', 0x04));
|
|
123
|
+
expect(commandBuilder.build('SetJoinRetryPeriod', { period: 10 })).toStrictEqual(new encoders_1.BaseCommand('SetJoinRetryPeriod', 0x10, '78'));
|
|
124
|
+
expect(commandBuilder.build('GetWatchDogParams')).toStrictEqual(new encoders_1.BaseCommand('GetWatchDogParams', 0x1d));
|
|
125
|
+
});
|
|
126
|
+
test('Commands can be combined into a single downlink (protocol 1.4 flow)', () => {
|
|
127
|
+
const combined = commandBuilder.combine([
|
|
128
|
+
commandBuilder.build('SendIrCodeData', { offset: 0x2f, data: '00082f00080800090a' }),
|
|
129
|
+
commandBuilder.build('EmitPreloadedIrCode', { mode: 0 }),
|
|
130
|
+
]);
|
|
131
|
+
expect(combined).toBe('050B002F00082F00080800090A080000');
|
|
12
132
|
});
|
|
13
133
|
});
|
|
14
134
|
//# sourceMappingURL=MelissaCommands.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MelissaCommands.test.js","sourceRoot":"","sources":["../../src/encoders/MelissaCommands.test.ts"],"names":[],"mappings":";;AAAA,yCAAwD;AACxD,mCAAqC;AAErC,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAChD,MAAM,cAAc,GAAG,IAAI,yBAAc,CAAC,iBAAiB,CAAC,CAAA;IAE5D,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAC1F,IAAI,sBAAW,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CACvD,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAW,CAAC,CAAA;IACzG,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"MelissaCommands.test.js","sourceRoot":"","sources":["../../src/encoders/MelissaCommands.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TValveCommands.d.ts","sourceRoot":"","sources":["../../src/encoders/TValveCommands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAGzD,OAAO,EAAE,kBAAkB,EAAwB,MAAM,kBAAkB,CAAA;AAE3E,qBAAa,cAAe,SAAQ,eAAe;IAClD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,CAAC,sBAAsB;IAsBzE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,YAAY;IAsBrD,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,eAAe;IAgC3D,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,CAAC,0BAA0B;IAsBjF,MAAM,CAAC,oBAAoB;IAI3B,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,CAAC,sBAAsB;IAwBzE,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,CAAC,uBAAuB;IAsB3E,MAAM,CAAC,iBAAiB;IAIxB,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,kBAAkB;IAsBjE,MAAM,CAAC,eAAe;IAItB,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,CAAC,uBAAuB;
|
|
1
|
+
{"version":3,"file":"TValveCommands.d.ts","sourceRoot":"","sources":["../../src/encoders/TValveCommands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAGzD,OAAO,EAAE,kBAAkB,EAAwB,MAAM,kBAAkB,CAAA;AAE3E,qBAAa,cAAe,SAAQ,eAAe;IAClD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,CAAC,sBAAsB;IAsBzE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,YAAY;IAsBrD,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,eAAe;IAgC3D,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,CAAC,0BAA0B;IAsBjF,MAAM,CAAC,oBAAoB;IAI3B,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,CAAC,sBAAsB;IAwBzE,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,CAAC,uBAAuB;IAsB3E,MAAM,CAAC,iBAAiB;IAIxB,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,kBAAkB;IAsBjE,MAAM,CAAC,eAAe;IAItB,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,CAAC,uBAAuB;IAwB3E,MAAM,CAAC,iBAAiB;IAIxB,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,kBAAkB,CAAC,mBAAmB;IAsBnE,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,CAAC,8BAA8B;IAsBzF,MAAM,CAAC,wBAAwB;IAI/B,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,CAAC,6BAA6B;IAsBvF,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,CAAC,0BAA0B;IAwBjF,MAAM,CAAC,oBAAoB;IAI3B,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,8BAA8B;IAuBnF,MAAM,CAAC,kBAAkB;IAIzB,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,kBAAkB,CAAC,yBAAyB;IAsBzE,MAAM,CAAC,aAAa;IAIpB,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,CAAC,uBAAuB;IAsB3E,MAAM,CAAC,iBAAiB;IAIxB,MAAM,CAAC,gBAAgB;CAGvB"}
|
|
@@ -184,7 +184,8 @@ class TValveCommands extends encoders_1.GeneralCommands {
|
|
|
184
184
|
try {
|
|
185
185
|
types_1.DeviceCommandSchemas.TValveCommandSchemas.setWorkingVoltage.parse(params);
|
|
186
186
|
let { voltage } = params;
|
|
187
|
-
|
|
187
|
+
// 8 mV resolution: round so values off the grid (e.g. 1820, 1850) still encode a whole byte
|
|
188
|
+
voltage = Math.round((voltage - 1600) / 8);
|
|
188
189
|
return new encoders_1.BaseCommand('SetWorkingVoltage', 0x09, (0, utils_1.decToHex)(voltage));
|
|
189
190
|
}
|
|
190
191
|
catch (e) {
|