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.
Files changed (51) hide show
  1. package/dist/decoders/commandsReadingHelper.d.ts.map +1 -1
  2. package/dist/decoders/commandsReadingHelper.js +22 -15
  3. package/dist/decoders/commandsReadingHelper.js.map +1 -1
  4. package/dist/decoders/payloadParsers/melissaLorawanPayloadParser.d.ts.map +1 -1
  5. package/dist/decoders/payloadParsers/melissaLorawanPayloadParser.js +22 -10
  6. package/dist/decoders/payloadParsers/melissaLorawanPayloadParser.js.map +1 -1
  7. package/dist/decoders/payloadParsers/tFloodPayloadParser.d.ts.map +1 -1
  8. package/dist/decoders/payloadParsers/tFloodPayloadParser.js +6 -2
  9. package/dist/decoders/payloadParsers/tFloodPayloadParser.js.map +1 -1
  10. package/dist/decoders/payloadParsers/tValvePayloadParser.d.ts.map +1 -1
  11. package/dist/decoders/payloadParsers/tValvePayloadParser.js +1 -0
  12. package/dist/decoders/payloadParsers/tValvePayloadParser.js.map +1 -1
  13. package/dist/encoders/MelissaCommands.d.ts +27 -0
  14. package/dist/encoders/MelissaCommands.d.ts.map +1 -1
  15. package/dist/encoders/MelissaCommands.js +151 -1
  16. package/dist/encoders/MelissaCommands.js.map +1 -1
  17. package/dist/encoders/MelissaCommands.test.js +122 -2
  18. package/dist/encoders/MelissaCommands.test.js.map +1 -1
  19. package/dist/encoders/TValveCommands.d.ts.map +1 -1
  20. package/dist/encoders/TValveCommands.js +2 -1
  21. package/dist/encoders/TValveCommands.js.map +1 -1
  22. package/dist/encoders/TValveCommands.test.js +10 -0
  23. package/dist/encoders/TValveCommands.test.js.map +1 -1
  24. package/dist/encoders/VickiCommands.d.ts.map +1 -1
  25. package/dist/encoders/VickiCommands.js +2 -2
  26. package/dist/encoders/VickiCommands.js.map +1 -1
  27. package/dist/encoders/VickiCommands.test.js +21 -3
  28. package/dist/encoders/VickiCommands.test.js.map +1 -1
  29. package/dist/encoders/types/schemas.d.ts +564 -105
  30. package/dist/encoders/types/schemas.d.ts.map +1 -1
  31. package/dist/encoders/types/schemas.js +64 -8
  32. package/dist/encoders/types/schemas.js.map +1 -1
  33. package/dist/test/payloadDecoders.test.js +222 -28
  34. package/dist/test/payloadDecoders.test.js.map +1 -1
  35. package/package.json +1 -1
  36. package/src/decoders/commandsReadingHelper.ts +21 -15
  37. package/src/decoders/payloadParsers/melissaLorawanPayloadParser.ts +39 -10
  38. package/src/decoders/payloadParsers/tFloodPayloadParser.ts +8 -2
  39. package/src/decoders/payloadParsers/tValvePayloadParser.ts +1 -0
  40. package/src/encoders/MelissaCommands.test.ts +186 -3
  41. package/src/encoders/MelissaCommands.ts +153 -2
  42. package/src/encoders/TValveCommands.test.ts +13 -0
  43. package/src/encoders/TValveCommands.ts +2 -1
  44. package/src/encoders/VickiCommands.test.ts +33 -3
  45. package/src/encoders/VickiCommands.ts +3 -4
  46. package/src/encoders/types/schemas.ts +103 -16
  47. package/src/test/payloadDecoders.test.ts +295 -29
  48. package/dist/test/payloadEncoders.test.d.ts +0 -2
  49. package/dist/test/payloadEncoders.test.d.ts.map +0 -1
  50. package/dist/test/payloadEncoders.test.js +0 -517
  51. 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
- // Internal temperature sensor data from bytes 1-2 (16 bits)
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
- // Relative Humidity from byte 3
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
- // Device status information (byte 4)
21
- // Bit 7 indicates if IR code recording is requested (1) or not (0)
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 keeapalive
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, 10, types_1.DeviceType.MelissaLorawan);
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(-10);
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;AAO9B,MAAM,2BAA2B,GAAG,CAAC,OAAe,EAAE,EAAE;IAC9D,MAAM,UAAU,GAA4B,EAAE,CAAA;IAE9C,IAAI,CAAC;QACJ,MAAM,mBAAmB,GAAG,CAAC,KAAe,EAAE,EAAE;YAC/C,MAAM,aAAa,GAAyB,EAAE,CAAA;YAC9C,4DAA4D;YAC5D,4DAA4D;YAC5D,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACjD,aAAa,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YAElF,gCAAgC;YAChC,wDAAwD;YACxD,aAAa,CAAC,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YAE5E,qCAAqC;YACrC,mEAAmE;YACnE,aAAa,CAAC,0BAA0B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;YAElE,MAAM,CAAC,MAAM,CAAC,UAAU,oBAAO,UAAU,qBAAS,aAAa,EAAG,CAAA;QACnE,CAAC,CAAA;QAED,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAA;YAC1C,IAAI,CAAC,SAAS;gBAAE,OAAM;YACtB,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,mBAAmB;gBACnB,mBAAmB,CAAC,SAAS,CAAC,CAAA;YAC/B,CAAC;iBAAM,CAAC;gBACP,wBAAwB;gBACxB,MAAM,IAAI,GAAG,IAAA,6CAAqB,EAAC,OAAO,EAAE,EAAE,EAAE,kBAAU,CAAC,cAAc,CAAwC,CAAA;gBACjH,IAAI,CAAC,IAAI;oBAAE,OAAM;gBACjB,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;gBACrF,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC;oBAC/B,OAAO,IAAI,CAAC,eAAe,CAAA;gBAC5B,CAAC;gBAED,MAAM,CAAC,MAAM,CAAC,UAAU,oBAAO,UAAU,qBAAS,IAAI,EAAG,CAAA;gBAEzD,0CAA0C;gBAC1C,IAAI,eAAe,EAAE,CAAC;oBACrB,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;oBACxC,MAAM,UAAU,GAAG,IAAA,yBAAe,EAAC,aAAa,CAAC,CAAA;oBACjD,IAAI,CAAC,UAAU;wBAAE,OAAM;oBACvB,mBAAmB,CAAC,UAAU,CAAC,CAAA;gBAChC,CAAC;YACF,CAAC;YACD,0BAA0B;YAC1B,OAAO,UAAU,CAAA;QAClB,CAAC;IACF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,MAAM,IAAI,mBAAW,CAAC;YACrB,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,iBAAiB;YAC7B,aAAa,EAAE,CAAU;SACzB,CAAC,CAAA;IACH,CAAC;AACF,CAAC,CAAA;AA1DY,QAAA,2BAA2B,+BA0DvC"}
1
+ {"version":3,"file":"melissaLorawanPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/melissaLorawanPayloadParser.ts"],"names":[],"mappings":";;;AAAA,4EAAwE;AACxE,2DAA4D;AAC5D,uCAA2C;AAC3C,mCAAqC;AAiBrC,kFAAkF;AAClF,MAAM,oBAAoB,GAAG,EAAE,CAAA;AAExB,MAAM,2BAA2B,GAAG,CAAC,OAAe,EAAE,EAAE;IAC9D,MAAM,UAAU,GAA4B,EAAE,CAAA;IAE9C,IAAI,CAAC;QACJ,MAAM,mBAAmB,GAAG,CAAC,KAAe,EAAE,EAAE;YAC/C,MAAM,aAAa,GAAyB,EAAE,CAAA;YAE9C,uEAAuE;YACvE,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACjD,aAAa,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YAElF,sDAAsD;YACtD,aAAa,CAAC,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YAE5E,wBAAwB;YACxB,+CAA+C;YAC/C,yDAAyD;YACzD,mFAAmF;YACnF,uBAAuB;YACvB,aAAa,CAAC,0BAA0B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;YAClE,aAAa,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;YAChD,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;YAC3C,aAAa,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAA;YAC3D,aAAa,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;YAEpD,8CAA8C;YAC9C,aAAa,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAE9C,gCAAgC;YAChC,aAAa,CAAC,eAAe,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAE1D,6FAA6F;YAC7F,aAAa,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YAEjF,MAAM,CAAC,MAAM,CAAC,UAAU,oBAAO,UAAU,qBAAS,aAAa,EAAG,CAAA;QACnE,CAAC,CAAA;QAED,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAA;YAC1C,IAAI,CAAC,SAAS;gBAAE,OAAM;YACtB,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,kBAAkB;gBAClB,mBAAmB,CAAC,SAAS,CAAC,CAAA;YAC/B,CAAC;iBAAM,CAAC;gBACP,wBAAwB;gBACxB,MAAM,IAAI,GAAG,IAAA,6CAAqB,EAAC,OAAO,EAAE,oBAAoB,EAAE,kBAAU,CAAC,cAAc,CAE/E,CAAA;gBACZ,IAAI,CAAC,IAAI;oBAAE,OAAM;gBACjB,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;gBACrF,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC;oBAC/B,OAAO,IAAI,CAAC,eAAe,CAAA;gBAC5B,CAAC;gBAED,MAAM,CAAC,MAAM,CAAC,UAAU,oBAAO,UAAU,qBAAS,IAAI,EAAG,CAAA;gBAEzD,0CAA0C;gBAC1C,IAAI,eAAe,EAAE,CAAC;oBACrB,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,CAAA;oBAC1D,MAAM,UAAU,GAAG,IAAA,yBAAe,EAAC,aAAa,CAAC,CAAA;oBACjD,IAAI,CAAC,UAAU;wBAAE,OAAM;oBACvB,mBAAmB,CAAC,UAAU,CAAC,CAAA;gBAChC,CAAC;YACF,CAAC;YACD,OAAO,UAAU,CAAA;QAClB,CAAC;IACF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,MAAM,IAAI,mBAAW,CAAC;YACrB,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,iBAAiB;YAC7B,aAAa,EAAE,CAAU;SACzB,CAAC,CAAA;IACH,CAAC;AACF,CAAC,CAAA;AA1EY,QAAA,2BAA2B,+BA0EvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tFloodPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/tFloodPayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,mBAAmB,YAAa,MAAM,mBA2DlD,CAAA"}
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
- const data = (0, commandsReadingHelper_1.commandsReadingHelper)(hexData, 6, types_1.DeviceType.TFlood);
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":"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"}
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,0EAA0E;gBAC1E,+EAA+E;gBAC/E,MAAM,IAAI,GAAG,IAAA,6CAAqB,EAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAU,CAAC,MAAM,CAEjE,CAAA;gBACZ,IAAI,IAAI,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC;oBACvC,OAAO,IAAI,CAAC,eAAe,CAAA;gBAC5B,CAAC;gBACD,MAAM,CAAC,MAAM,CAAC,UAAU,oBAAO,UAAU,qBAAS,IAAI,EAAG,CAAA;gBACzD,0CAA0C;gBAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;gBACvC,mBAAmB,CAAC,aAAa,CAAC,CAAA;YACnC,CAAC;iBAAM,CAAC;gBACP,mBAAmB,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC;YACD,0BAA0B;YAC1B,OAAO,UAAU,CAAA;QAClB,CAAC;IACF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,MAAM,IAAI,mBAAW,CAAC;YACrB,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,SAAS;YACrB,aAAa,EAAE,CAAU;SACzB,CAAC,CAAA;IACH,CAAC;AACF,CAAC,CAAA;AAjEY,QAAA,mBAAmB,uBAiE/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"tValvePayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/tValvePayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,mBAAmB,YAAa,MAAM,mBAiElD,CAAA"}
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;AAEzD,OAAO,EAAwB,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAGnE,qBAAa,eAAgB,SAAQ,eAAe;IACnD,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,CAAC,wBAAwB;CAqB9E"}
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
- (0, utils_1.applyMixins)(MelissaCommands, []);
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,mCAA4D;AAC5D,mCAAmE;AACnE,6BAA8B;AAE9B,MAAa,eAAgB,SAAQ,0BAAe;IACnD,MAAM,CAAC,kBAAkB,CAAC,MAAoD;QAC7E,IAAI,CAAC;YACJ,4BAAoB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAC3E,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;YACjC,OAAO,IAAI,sBAAW,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAA,gBAAQ,EAAC,IAAI,CAAC,EAAE,IAAA,gBAAQ,EAAC,QAAQ,CAAC,CAAC,CAAA;QACvF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,cAAQ,EAAE,CAAC;gBAC3B,MAAM,IAAI,mBAAW,CAAC;oBACrB,OAAO,EAAE,0DAA0D;oBACnE,OAAO,EAAE,oBAAoB;oBAC7B,aAAa,EAAE,CAAC;iBAChB,CAAC,CAAA;YACH,CAAC;iBAAM,CAAC;gBACP,MAAM,IAAI,mBAAW,CAAC;oBACrB,OAAO,EAAE,2CAA2C;oBACpD,OAAO,EAAE,oBAAoB;oBAC7B,aAAa,EAAE,CAAU;iBACzB,CAAC,CAAA;YACH,CAAC;QACF,CAAC;IACF,CAAC;CACD;AAtBD,0CAsBC;AACD,IAAA,mBAAW,EAAC,eAAe,EAAE,EAAE,CAAC,CAAA"}
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
- test('SetIrCodeRecording encodes time and position', () => {
8
- expect(commandBuilder.build('SetIrCodeRecording', { time: 10, position: 2 })).toStrictEqual(new encoders_1.BaseCommand('SetIrCodeRecording', 0x09, '0A', '02'));
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;IAuB3E,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"}
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
- voltage = (voltage - 1600) / 8;
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) {