mclimate-payload-helper 1.0.5 → 1.0.7

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 (101) hide show
  1. package/dist/decoders/payloadParsers/CO2DisplayLitePayloadParser.d.ts +2 -0
  2. package/dist/decoders/payloadParsers/CO2DisplayLitePayloadParser.d.ts.map +1 -0
  3. package/dist/decoders/payloadParsers/CO2DisplayLitePayloadParser.js +79 -0
  4. package/dist/decoders/payloadParsers/CO2DisplayLitePayloadParser.js.map +1 -0
  5. package/dist/decoders/payloadParsers/CO2DisplayPayloadParser.d.ts +2 -0
  6. package/dist/decoders/payloadParsers/CO2DisplayPayloadParser.d.ts.map +1 -0
  7. package/dist/decoders/payloadParsers/CO2DisplayPayloadParser.js +81 -0
  8. package/dist/decoders/payloadParsers/CO2DisplayPayloadParser.js.map +1 -0
  9. package/dist/decoders/payloadParsers/CO2SensorPayloadParser.d.ts +2 -0
  10. package/dist/decoders/payloadParsers/CO2SensorPayloadParser.d.ts.map +1 -0
  11. package/dist/decoders/payloadParsers/CO2SensorPayloadParser.js +64 -0
  12. package/dist/decoders/payloadParsers/CO2SensorPayloadParser.js.map +1 -0
  13. package/dist/decoders/payloadParsers/DskDevicePayloadParser.d.ts +2 -0
  14. package/dist/decoders/payloadParsers/DskDevicePayloadParser.d.ts.map +1 -0
  15. package/dist/decoders/payloadParsers/DskDevicePayloadParser.js +58 -0
  16. package/dist/decoders/payloadParsers/DskDevicePayloadParser.js.map +1 -0
  17. package/dist/decoders/payloadParsers/FanCoilThermostatPayloadParser.d.ts +2 -0
  18. package/dist/decoders/payloadParsers/FanCoilThermostatPayloadParser.d.ts.map +1 -0
  19. package/dist/decoders/payloadParsers/FanCoilThermostatPayloadParser.js +76 -0
  20. package/dist/decoders/payloadParsers/FanCoilThermostatPayloadParser.js.map +1 -0
  21. package/dist/decoders/payloadParsers/ThermostatPayloadParser.d.ts +2 -0
  22. package/dist/decoders/payloadParsers/ThermostatPayloadParser.d.ts.map +1 -0
  23. package/dist/decoders/payloadParsers/ThermostatPayloadParser.js +78 -0
  24. package/dist/decoders/payloadParsers/ThermostatPayloadParser.js.map +1 -0
  25. package/dist/decoders/payloadParsers/WirelessThermostatPayloadParser.d.ts +2 -0
  26. package/dist/decoders/payloadParsers/WirelessThermostatPayloadParser.d.ts.map +1 -0
  27. package/dist/decoders/payloadParsers/WirelessThermostatPayloadParser.js +91 -0
  28. package/dist/decoders/payloadParsers/WirelessThermostatPayloadParser.js.map +1 -0
  29. package/dist/decoders/payloadParsers/buttonPayloadParser.d.ts +2 -0
  30. package/dist/decoders/payloadParsers/buttonPayloadParser.d.ts.map +1 -0
  31. package/dist/decoders/payloadParsers/buttonPayloadParser.js +78 -0
  32. package/dist/decoders/payloadParsers/buttonPayloadParser.js.map +1 -0
  33. package/dist/decoders/payloadParsers/htDisplayLitePayloadParser.d.ts +2 -0
  34. package/dist/decoders/payloadParsers/htDisplayLitePayloadParser.d.ts.map +1 -0
  35. package/dist/decoders/payloadParsers/htDisplayLitePayloadParser.js +73 -0
  36. package/dist/decoders/payloadParsers/htDisplayLitePayloadParser.js.map +1 -0
  37. package/dist/decoders/payloadParsers/htSensorPayloadParser.d.ts +2 -0
  38. package/dist/decoders/payloadParsers/htSensorPayloadParser.d.ts.map +1 -0
  39. package/dist/decoders/payloadParsers/htSensorPayloadParser.js +77 -0
  40. package/dist/decoders/payloadParsers/htSensorPayloadParser.js.map +1 -0
  41. package/dist/decoders/payloadParsers/index.d.ts +13 -0
  42. package/dist/decoders/payloadParsers/index.d.ts.map +1 -1
  43. package/dist/decoders/payloadParsers/index.js +13 -0
  44. package/dist/decoders/payloadParsers/index.js.map +1 -1
  45. package/dist/decoders/payloadParsers/openCloseSensorPayloadParser.d.ts +2 -0
  46. package/dist/decoders/payloadParsers/openCloseSensorPayloadParser.d.ts.map +1 -0
  47. package/dist/decoders/payloadParsers/openCloseSensorPayloadParser.js +70 -0
  48. package/dist/decoders/payloadParsers/openCloseSensorPayloadParser.js.map +1 -0
  49. package/dist/decoders/payloadParsers/tFloodPayloadParser.d.ts +2 -0
  50. package/dist/decoders/payloadParsers/tFloodPayloadParser.d.ts.map +1 -0
  51. package/dist/decoders/payloadParsers/tFloodPayloadParser.js +69 -0
  52. package/dist/decoders/payloadParsers/tFloodPayloadParser.js.map +1 -0
  53. package/dist/decoders/payloadParsers/tValvePayloadParser.d.ts +2 -0
  54. package/dist/decoders/payloadParsers/tValvePayloadParser.d.ts.map +1 -0
  55. package/dist/decoders/payloadParsers/tValvePayloadParser.js +75 -0
  56. package/dist/decoders/payloadParsers/tValvePayloadParser.js.map +1 -0
  57. package/dist/decoders/payloadParsers/uplinkPayloadParser.d.ts.map +1 -1
  58. package/dist/decoders/payloadParsers/uplinkPayloadParser.js +26 -26
  59. package/dist/decoders/payloadParsers/uplinkPayloadParser.js.map +1 -1
  60. package/dist/decoders/payloadParsers/vickiPayloadParser.d.ts.map +1 -1
  61. package/dist/decoders/payloadParsers/vickiPayloadParser.js +11 -20
  62. package/dist/decoders/payloadParsers/vickiPayloadParser.js.map +1 -1
  63. package/dist/helpers/decbin.d.ts +2 -0
  64. package/dist/helpers/decbin.d.ts.map +1 -0
  65. package/dist/helpers/decbin.js +12 -0
  66. package/dist/helpers/decbin.js.map +1 -0
  67. package/dist/helpers/index.d.ts +2 -0
  68. package/dist/helpers/index.d.ts.map +1 -1
  69. package/dist/helpers/index.js +2 -0
  70. package/dist/helpers/index.js.map +1 -1
  71. package/dist/helpers/toBool.d.ts +2 -0
  72. package/dist/helpers/toBool.d.ts.map +1 -0
  73. package/dist/helpers/toBool.js +6 -0
  74. package/dist/helpers/toBool.js.map +1 -0
  75. package/dist/test/payloadDecoders.test.d.ts +2 -0
  76. package/dist/test/payloadDecoders.test.d.ts.map +1 -0
  77. package/dist/test/payloadDecoders.test.js +474 -0
  78. package/dist/test/payloadDecoders.test.js.map +1 -0
  79. package/jest.config.ts +22 -0
  80. package/package.json +7 -2
  81. package/src/decoders/payloadParsers/CO2DisplayLitePayloadParser.ts +80 -0
  82. package/src/decoders/payloadParsers/CO2DisplayPayloadParser.ts +82 -0
  83. package/src/decoders/payloadParsers/CO2SensorPayloadParser.ts +66 -0
  84. package/src/decoders/payloadParsers/DskDevicePayloadParser.ts +59 -0
  85. package/src/decoders/payloadParsers/FanCoilThermostatPayloadParser.ts +75 -0
  86. package/src/decoders/payloadParsers/ThermostatPayloadParser.ts +80 -0
  87. package/src/decoders/payloadParsers/WirelessThermostatPayloadParser.ts +88 -0
  88. package/src/decoders/payloadParsers/buttonPayloadParser.ts +79 -0
  89. package/src/decoders/payloadParsers/htDisplayLitePayloadParser.ts +74 -0
  90. package/src/decoders/payloadParsers/htSensorPayloadParser.ts +78 -0
  91. package/src/decoders/payloadParsers/index.ts +13 -0
  92. package/src/decoders/payloadParsers/openCloseSensorPayloadParser.ts +70 -0
  93. package/src/decoders/payloadParsers/tFloodPayloadParser.ts +65 -0
  94. package/src/decoders/payloadParsers/tValvePayloadParser.ts +71 -0
  95. package/src/decoders/payloadParsers/uplinkPayloadParser.ts +43 -27
  96. package/src/decoders/payloadParsers/vickiPayloadParser.ts +2 -13
  97. package/src/helpers/decbin.ts +7 -0
  98. package/src/helpers/index.ts +2 -0
  99. package/src/helpers/toBool.ts +1 -0
  100. package/src/test/payloadDecoders.test.ts +509 -0
  101. package/tsconfig.json +2 -1
@@ -0,0 +1,2 @@
1
+ export declare const CO2DisplayLitePayloadParser: (hexData: string) => {} | undefined;
2
+ //# sourceMappingURL=CO2DisplayLitePayloadParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CO2DisplayLitePayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/CO2DisplayLitePayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,2BAA2B,YAAa,MAAM,mBA0E1D,CAAA"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CO2DisplayLitePayloadParser = void 0;
4
+ const decoders_1 = require("../../decoders");
5
+ const types_1 = require("../../decoders/payloadParsers/types");
6
+ const helpers_1 = require("../../helpers");
7
+ const utils_1 = require("../../utils");
8
+ const CO2DisplayLitePayloadParser = (hexData) => {
9
+ let deviceData = {};
10
+ try {
11
+ const calculateTemperature = (rawData) => (rawData - 400) / 10;
12
+ const calculateHumidity = (rawData) => (rawData * 100) / 256;
13
+ const handleKeepAliveData = (data) => {
14
+ let tempHex = ('0' + data[1].toString(16)).substr(-2) + ('0' + data[2].toString(16)).substr(-2);
15
+ let tempDec = parseInt(tempHex, 16);
16
+ let temperature = calculateTemperature(tempDec);
17
+ let humidity = calculateHumidity(data[3]);
18
+ let batteryVoltageCalculated = parseInt(`${(0, helpers_1.decbin)(data[4])}${(0, helpers_1.decbin)(data[5])}`, 2) / 1000;
19
+ let sensorTemperature = Number(temperature.toFixed(2));
20
+ let relativeHumidity = Number(humidity.toFixed(2));
21
+ let batteryVoltage = Number(batteryVoltageCalculated.toFixed(2));
22
+ let ppmBin = (0, helpers_1.decbin)(data[6]);
23
+ let ppmBin2 = (0, helpers_1.decbin)(data[7]);
24
+ ppmBin = `${ppmBin2.slice(0, 5)}${ppmBin}`;
25
+ let ppm = parseInt(ppmBin, 2);
26
+ let powerSourceStatus = ppmBin2.slice(5, 8);
27
+ let lux = parseInt('0' + data[8].toString(16) + data[9].toString(16), 16);
28
+ let keepaliveData = {
29
+ CO2: ppm,
30
+ sensorTemperature,
31
+ relativeHumidity,
32
+ batteryVoltage,
33
+ powerSourceStatus: parseInt(powerSourceStatus, 2),
34
+ lux,
35
+ };
36
+ Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
37
+ };
38
+ if (hexData) {
39
+ let byteArray = (0, helpers_1.byteArrayParser)(hexData);
40
+ if (!byteArray)
41
+ return;
42
+ if (byteArray[0] == 1) {
43
+ // its a keeapalive
44
+ handleKeepAliveData(byteArray);
45
+ }
46
+ else {
47
+ // parse command answers
48
+ let data = (0, decoders_1.commandsReadingHelper)(hexData, 20, types_1.DeviceType.CO2DisplayLite);
49
+ // Q: error handling?
50
+ if (!data)
51
+ return;
52
+ let shouldKeepAlive = data.hasOwnProperty('decodeKeepalive') ? true : false;
53
+ if ('decodeKeepalive' in data) {
54
+ delete data.decodeKeepalive;
55
+ }
56
+ Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, data));
57
+ // get only keepalive from device response
58
+ if (shouldKeepAlive) {
59
+ let keepaliveData = hexData.slice(-20);
60
+ let dataToPass = (0, helpers_1.byteArrayParser)(keepaliveData);
61
+ if (!dataToPass)
62
+ return;
63
+ handleKeepAliveData(dataToPass);
64
+ }
65
+ }
66
+ return deviceData;
67
+ }
68
+ }
69
+ catch (e) {
70
+ throw new utils_1.CustomError({
71
+ message: `Unhandled data`,
72
+ hexData: hexData,
73
+ deviceType: 'co2_display_lite',
74
+ originalError: e,
75
+ });
76
+ }
77
+ };
78
+ exports.CO2DisplayLitePayloadParser = CO2DisplayLitePayloadParser;
79
+ //# sourceMappingURL=CO2DisplayLitePayloadParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CO2DisplayLitePayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/CO2DisplayLitePayloadParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const CO2DisplayPayloadParser: (hexData: string) => {} | undefined;
2
+ //# sourceMappingURL=CO2DisplayPayloadParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CO2DisplayPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/CO2DisplayPayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,uBAAuB,YAAa,MAAM,mBA4EtD,CAAA"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CO2DisplayPayloadParser = void 0;
4
+ const decoders_1 = require("../../decoders");
5
+ const types_1 = require("../../decoders/payloadParsers/types");
6
+ const helpers_1 = require("../../helpers");
7
+ const utils_1 = require("../../utils");
8
+ const CO2DisplayPayloadParser = (hexData) => {
9
+ let deviceData = {};
10
+ try {
11
+ const calculateTemperature = (rawData) => (rawData - 400) / 10;
12
+ const calculateHumidity = (rawData) => (rawData * 100) / 256;
13
+ const handleKeepAliveData = (data) => {
14
+ let tempHex = ('0' + data[1].toString(16)).substr(-2) + ('0' + data[2].toString(16)).substr(-2);
15
+ let tempDec = parseInt(tempHex, 16);
16
+ let temperature = calculateTemperature(tempDec);
17
+ let humidity = calculateHumidity(data[3]);
18
+ let batteryVoltageCalculated = parseInt(`${(0, helpers_1.decbin)(data[4])}${(0, helpers_1.decbin)(data[5])}`, 2) / 1000;
19
+ let sensorTemperature = Number(temperature.toFixed(2));
20
+ let relativeHumidity = Number(humidity.toFixed(2));
21
+ let batteryVoltage = Number(batteryVoltageCalculated.toFixed(2));
22
+ let ppmBin = (0, helpers_1.decbin)(data[6]);
23
+ let ppmBin2 = (0, helpers_1.decbin)(data[7]);
24
+ ppmBin = `${ppmBin2.slice(0, 5)}${ppmBin}`;
25
+ let ppm = parseInt(ppmBin, 2);
26
+ let powerSourceStatus = ppmBin2.slice(5, 8);
27
+ let lux = parseInt('0' + data[8].toString(16) + data[9].toString(16), 16);
28
+ let pir = (0, helpers_1.toBool)(data[10]);
29
+ let keepaliveData = {
30
+ CO2: ppm,
31
+ sensorTemperature,
32
+ relativeHumidity,
33
+ batteryVoltage,
34
+ powerSourceStatus: parseInt(powerSourceStatus, 2),
35
+ lux,
36
+ pir,
37
+ };
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
+ if (byteArray[0] == 1) {
45
+ // its a keeapalive
46
+ handleKeepAliveData(byteArray);
47
+ }
48
+ else {
49
+ // parse command answers
50
+ let data = (0, decoders_1.commandsReadingHelper)(hexData, 22, types_1.DeviceType.CO2Display);
51
+ // Q: error handling
52
+ if (!data)
53
+ return;
54
+ const shouldKeepAlive = data.hasOwnProperty('decodeKeepalive') ? true : false;
55
+ if ('decodeKeepalive' in data) {
56
+ delete data.decodeKeepalive;
57
+ }
58
+ Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, data));
59
+ // get only keepalive from device response
60
+ if (shouldKeepAlive) {
61
+ let keepaliveData = hexData.slice(-22);
62
+ let dataToPass = (0, helpers_1.byteArrayParser)(keepaliveData);
63
+ if (!dataToPass)
64
+ return;
65
+ handleKeepAliveData(dataToPass);
66
+ }
67
+ }
68
+ return deviceData;
69
+ }
70
+ }
71
+ catch (e) {
72
+ throw new utils_1.CustomError({
73
+ message: `Unhandled data`,
74
+ hexData: hexData,
75
+ deviceType: 'co2_display',
76
+ originalError: e,
77
+ });
78
+ }
79
+ };
80
+ exports.CO2DisplayPayloadParser = CO2DisplayPayloadParser;
81
+ //# sourceMappingURL=CO2DisplayPayloadParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CO2DisplayPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/CO2DisplayPayloadParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const CO2SensorPayloadParser: (hexData: string) => {} | undefined;
2
+ //# sourceMappingURL=CO2SensorPayloadParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CO2SensorPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/CO2SensorPayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,sBAAsB,YAAa,MAAM,mBA4DrD,CAAA"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CO2SensorPayloadParser = void 0;
4
+ const decoders_1 = require("../../decoders");
5
+ const types_1 = require("../../decoders/payloadParsers/types");
6
+ const helpers_1 = require("../../helpers");
7
+ const utils_1 = require("../../utils");
8
+ const CO2SensorPayloadParser = (hexData) => {
9
+ let deviceData = {};
10
+ try {
11
+ const handleKeepAliveData = (byteArray) => {
12
+ const co2 = parseInt(byteArray[1].toString(16).padStart(2, '0') + byteArray[2].toString(16).padStart(2, '0'), 16);
13
+ const tempHex = byteArray[3].toString(16).padStart(2, '0') + byteArray[4].toString(16).padStart(2, '0');
14
+ const temperature = (parseInt(tempHex, 16) - 400) / 10;
15
+ const humidity = Number(((byteArray[5] * 100) / 256).toFixed(2));
16
+ const voltage = Number(((byteArray[6] * 8 + 1600) / 1000).toFixed(2));
17
+ let keepaliveData = {
18
+ CO2: co2,
19
+ temperature: temperature,
20
+ humidity: humidity,
21
+ voltage: voltage,
22
+ };
23
+ Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
24
+ };
25
+ if (hexData) {
26
+ const byteArray = (0, helpers_1.byteArrayParser)(hexData);
27
+ if (!byteArray)
28
+ return;
29
+ if (byteArray[0] == 1) {
30
+ handleKeepAliveData(byteArray);
31
+ }
32
+ else {
33
+ // parse command answers
34
+ const data = (0, decoders_1.commandsReadingHelper)(hexData, 14, types_1.DeviceType.CO2Sensor);
35
+ // Q: error handling
36
+ if (!data)
37
+ return;
38
+ const shouldKeepAlive = data.hasOwnProperty('decodeKeepalive') ? true : false;
39
+ if ('decodeKeepalive' in data) {
40
+ delete data.decodeKeepalive;
41
+ }
42
+ Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, data));
43
+ if (shouldKeepAlive) {
44
+ const keepaliveData = hexData.slice(-14);
45
+ const dataToPass = (0, helpers_1.byteArrayParser)(keepaliveData);
46
+ if (!dataToPass)
47
+ return;
48
+ handleKeepAliveData(dataToPass);
49
+ }
50
+ }
51
+ return deviceData;
52
+ }
53
+ }
54
+ catch (e) {
55
+ throw new utils_1.CustomError({
56
+ message: `Unhandled data`,
57
+ hexData: hexData,
58
+ deviceType: 'co2_sensor',
59
+ originalError: e,
60
+ });
61
+ }
62
+ };
63
+ exports.CO2SensorPayloadParser = CO2SensorPayloadParser;
64
+ //# sourceMappingURL=CO2SensorPayloadParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CO2SensorPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/CO2SensorPayloadParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const DskDevicePayloadParser: (hexData: string) => {} | undefined;
2
+ //# sourceMappingURL=DskDevicePayloadParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DskDevicePayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/DskDevicePayloadParser.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,sBAAsB,YAAa,MAAM,mBAoDrD,CAAA"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DskDevicePayloadParser = 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
+ // WARN: no tests found for below
9
+ const DskDevicePayloadParser = (hexData) => {
10
+ let deviceData = {};
11
+ try {
12
+ const handleKeepAliveData = (data) => {
13
+ const hexArray = (0, helpers_1.byteArrayParser)(data);
14
+ if (!hexArray)
15
+ return;
16
+ let powerSupplyVoltage = ((hexArray[1] * 8 + 1600) / 1000).toFixed(2);
17
+ let thermistorProperlyConnected = parseInt((0, helpers_1.decbin)(hexArray[2])[5]) == 0;
18
+ let extT1 = ('0' + hexArray[2].toString(16)).substr(-2)[1];
19
+ let extT2 = ('0' + hexArray[3].toString(16)).substr(-2);
20
+ let sensorTemperature = thermistorProperlyConnected ? (parseInt(`0x${extT1}${extT2}`, 16) * 0.1).toFixed(2) : 0;
21
+ let status = hexArray[4];
22
+ let keepaliveData = {
23
+ sensorTemperature: Number(sensorTemperature),
24
+ powerSupplyVoltage: Number(powerSupplyVoltage),
25
+ status,
26
+ thermistorProperlyConnected,
27
+ };
28
+ Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
29
+ };
30
+ if (hexData) {
31
+ if (parseInt(hexData[1]) == 1) {
32
+ // its a keeapalive
33
+ handleKeepAliveData(hexData);
34
+ }
35
+ else {
36
+ // parse command answers
37
+ let decodeKeepalive = hexData.length <= 84;
38
+ let data = (0, commandsReadingHelper_1.commandsReadingHelper)(hexData, 10, types_1.DeviceType.DskDevice);
39
+ Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, data));
40
+ // get only keepalive from device response
41
+ let keepaliveData = hexData.slice(-10);
42
+ if (decodeKeepalive)
43
+ handleKeepAliveData(keepaliveData);
44
+ }
45
+ return deviceData;
46
+ }
47
+ }
48
+ catch (e) {
49
+ throw new utils_1.CustomError({
50
+ message: `Unhandled data`,
51
+ hexData: hexData,
52
+ deviceType: 'dsk_device',
53
+ originalError: e,
54
+ });
55
+ }
56
+ };
57
+ exports.DskDevicePayloadParser = DskDevicePayloadParser;
58
+ //# sourceMappingURL=DskDevicePayloadParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DskDevicePayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/DskDevicePayloadParser.ts"],"names":[],"mappings":";;;AAAA,4EAAwE;AACxE,2DAA4D;AAC5D,uCAAmD;AACnD,mCAAqC;AAErC,iCAAiC;AAC1B,MAAM,sBAAsB,GAAG,CAAC,OAAe,EAAE,EAAE;IACzD,IAAI,UAAU,GAAG,EAAE,CAAA;IAEnB,IAAI,CAAC;QACJ,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,EAAE;YAC5C,MAAM,QAAQ,GAAG,IAAA,yBAAe,EAAC,IAAI,CAAC,CAAA;YAEtC,IAAI,CAAC,QAAQ;gBAAE,OAAM;YAErB,IAAI,kBAAkB,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YAErE,IAAI,2BAA2B,GAAG,QAAQ,CAAC,IAAA,gBAAM,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAEvE,IAAI,KAAK,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1D,IAAI,KAAK,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;YACvD,IAAI,iBAAiB,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,GAAG,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC/G,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;YAExB,IAAI,aAAa,GAAG;gBACnB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC;gBAC5C,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,CAAC;gBAC9C,MAAM;gBACN,2BAA2B;aAC3B,CAAA;YACD,MAAM,CAAC,MAAM,CAAC,UAAU,oBAAO,UAAU,qBAAS,aAAa,EAAG,CAAA;QACnE,CAAC,CAAA;QAED,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,mBAAmB;gBACnB,mBAAmB,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC;iBAAM,CAAC;gBACP,wBAAwB;gBACxB,IAAI,eAAe,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAA;gBAC1C,IAAI,IAAI,GAAG,IAAA,6CAAqB,EAAC,OAAO,EAAE,EAAE,EAAE,kBAAU,CAAC,SAAS,CAAC,CAAA;gBACnE,MAAM,CAAC,MAAM,CAAC,UAAU,oBAAO,UAAU,qBAAS,IAAI,EAAG,CAAA;gBAEzD,0CAA0C;gBAC1C,IAAI,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;gBAEtC,IAAI,eAAe;oBAAE,mBAAmB,CAAC,aAAa,CAAC,CAAA;YACxD,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,YAAY;YACxB,aAAa,EAAE,CAAU;SACzB,CAAC,CAAA;IACH,CAAC;AACF,CAAC,CAAA;AApDY,QAAA,sBAAsB,0BAoDlC"}
@@ -0,0 +1,2 @@
1
+ export declare const FanCoilThermostatPayloadParser: (hexData: string) => {} | undefined;
2
+ //# sourceMappingURL=FanCoilThermostatPayloadParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FanCoilThermostatPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/FanCoilThermostatPayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,8BAA8B,YAAa,MAAM,mBAqE7D,CAAA"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FanCoilThermostatPayloadParser = 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 FanCoilThermostatPayloadParser = (hexData) => {
9
+ const deviceData = {};
10
+ try {
11
+ const calculateTemperature = (rawData) => (rawData - 400) / 10;
12
+ const calculateHumidity = (rawData) => (rawData * 100) / 256;
13
+ const handleKeepAliveData = (bytesArray) => {
14
+ const tempDec = parseInt(`${(0, helpers_1.decbin)(bytesArray[1])}${(0, helpers_1.decbin)(bytesArray[2])}`, 2);
15
+ const temperatureValue = calculateTemperature(tempDec);
16
+ const humidityValue = calculateHumidity(bytesArray[3]);
17
+ const targetTemperature = parseInt(`${(0, helpers_1.decbin)(bytesArray[4])}${(0, helpers_1.decbin)(bytesArray[5])}`, 2) / 10;
18
+ const operationalMode = bytesArray[6];
19
+ const displayedFanSpeed = bytesArray[7];
20
+ const actualFanSpeed = bytesArray[8];
21
+ const valveStatus = bytesArray[9];
22
+ const deviceStatus = bytesArray[10];
23
+ const keepaliveData = {
24
+ sensorTemperature: Number(temperatureValue.toFixed(2)),
25
+ relativeHumidity: Number(humidityValue.toFixed(2)),
26
+ targetTemperature,
27
+ operationalMode,
28
+ displayedFanSpeed,
29
+ actualFanSpeed,
30
+ valveStatus,
31
+ deviceStatus,
32
+ };
33
+ Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
34
+ };
35
+ // Q: error handling
36
+ if (hexData) {
37
+ const byteArray = (0, helpers_1.byteArrayParser)(hexData);
38
+ if (!byteArray)
39
+ return;
40
+ if (byteArray[0] == 1) {
41
+ // its a keeapalive
42
+ handleKeepAliveData(byteArray);
43
+ }
44
+ else {
45
+ // parse command answers
46
+ const data = (0, commandsReadingHelper_1.commandsReadingHelper)(hexData, 22, types_1.DeviceType.FanCoilThermostat);
47
+ if (!data)
48
+ return;
49
+ const shouldKeepAlive = data.hasOwnProperty('decodeKeepalive') ? true : false;
50
+ if ('decodeKeepalive' in data) {
51
+ delete data.decodeKeepalive;
52
+ }
53
+ Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, data));
54
+ // get only keepalive from device response
55
+ if (shouldKeepAlive) {
56
+ const keepaliveData = hexData.slice(-22);
57
+ const dataToPass = (0, helpers_1.byteArrayParser)(keepaliveData);
58
+ if (!dataToPass)
59
+ return;
60
+ handleKeepAliveData(dataToPass);
61
+ }
62
+ }
63
+ return deviceData;
64
+ }
65
+ }
66
+ catch (e) {
67
+ throw new utils_1.CustomError({
68
+ message: `Unhandled data`,
69
+ hexData: hexData,
70
+ deviceType: 'fan_coil_thermostat',
71
+ originalError: e,
72
+ });
73
+ }
74
+ };
75
+ exports.FanCoilThermostatPayloadParser = FanCoilThermostatPayloadParser;
76
+ //# sourceMappingURL=FanCoilThermostatPayloadParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FanCoilThermostatPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/FanCoilThermostatPayloadParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const ThermostatPayloadParser: (hexData: string) => {} | undefined;
2
+ //# sourceMappingURL=ThermostatPayloadParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThermostatPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/ThermostatPayloadParser.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,uBAAuB,YAAa,MAAM,mBA4EtD,CAAA"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ThermostatPayloadParser = void 0;
4
+ const helpers_1 = require("../../helpers");
5
+ const utils_1 = require("../../utils");
6
+ const ThermostatPayloadParser = (hexData) => {
7
+ let deviceData = {};
8
+ try {
9
+ const handleKeepAliveData = (byteArray) => {
10
+ let reason = byteArray[0];
11
+ let current_temperature;
12
+ let current_temp_1 = byteArray[1];
13
+ let current_temp_2 = byteArray[2];
14
+ current_temperature = (current_temp_2 * 256 + current_temp_1) / 10;
15
+ let relay_status = byteArray[2] == 1 ? true : false;
16
+ let desired_temp_1 = byteArray[4];
17
+ let desired_temp_2 = byteArray[5];
18
+ let target_temperature;
19
+ target_temperature = (desired_temp_2 * 256 + desired_temp_1) / 10;
20
+ let battery_status = byteArray[6]; // in %
21
+ let keepaliveData = {
22
+ reason: reason,
23
+ target_temperature: target_temperature,
24
+ temperature: current_temperature,
25
+ relay_status: relay_status,
26
+ battery_status: battery_status,
27
+ };
28
+ Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
29
+ };
30
+ const handleFirstData = (byteArray) => {
31
+ let reason = byteArray[0];
32
+ let lora_period = byteArray[1]; // in minutes
33
+ let temp_span = byteArray[2]; // if you want to get the final data for temp span (0,5; 1; etc) just divide by 10 (/10)
34
+ let temp_sampling = byteArray[3]; // in minutes
35
+ let desired_temp_1 = byteArray[4];
36
+ let desired_temp_2 = byteArray[5];
37
+ let target_temperature;
38
+ if (desired_temp_2 > 0) {
39
+ target_temperature = (desired_temp_1 + 256) / 10; //using the 2 bytes to get the target temperature
40
+ }
41
+ else {
42
+ target_temperature = desired_temp_1 / 10;
43
+ }
44
+ let battery_status = byteArray[6]; // in %
45
+ let keepaliveData = {
46
+ reason: reason,
47
+ temp_span: temp_span,
48
+ temp_sampling: temp_sampling,
49
+ target_temperature: target_temperature,
50
+ battery_status: battery_status,
51
+ keepAliveTime: lora_period,
52
+ };
53
+ Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
54
+ };
55
+ if (hexData) {
56
+ let byteArray = (0, helpers_1.byteArrayParser)(hexData);
57
+ if (!byteArray)
58
+ return;
59
+ if (byteArray[0] == 0 || byteArray[0] == 1) {
60
+ handleKeepAliveData(byteArray);
61
+ }
62
+ else if (byteArray[0] == 255) {
63
+ handleFirstData(byteArray);
64
+ }
65
+ return deviceData;
66
+ }
67
+ }
68
+ catch (e) {
69
+ throw new utils_1.CustomError({
70
+ message: `Unhandled data`,
71
+ hexData: hexData,
72
+ deviceType: 'lote_thermostat',
73
+ originalError: e,
74
+ });
75
+ }
76
+ };
77
+ exports.ThermostatPayloadParser = ThermostatPayloadParser;
78
+ //# sourceMappingURL=ThermostatPayloadParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThermostatPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/ThermostatPayloadParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const WirelessThermostatPayloadParser: (hexData: string) => {} | undefined;
2
+ //# sourceMappingURL=WirelessThermostatPayloadParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WirelessThermostatPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/WirelessThermostatPayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,+BAA+B,YAAa,MAAM,mBAkF9D,CAAA"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WirelessThermostatPayloadParser = 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 WirelessThermostatPayloadParser = (hexData) => {
9
+ var _a;
10
+ let deviceData = {};
11
+ try {
12
+ const calculateTemperature = (rawData) => (rawData - 400) / 10;
13
+ const calculateHumidity = (rawData) => (rawData * 100) / 256;
14
+ const handleKeepAliveData = (data) => {
15
+ let tempHex = ('0' + data[1].toString(16)).substr(-2) + ('0' + data[2].toString(16)).substr(-2);
16
+ let tempDec = parseInt(tempHex, 16);
17
+ let temperature = calculateTemperature(tempDec);
18
+ let humidity = calculateHumidity(data[3]);
19
+ let batteryVoltageCalculated = parseInt(`${(0, helpers_1.decbin)(data[4])}${(0, helpers_1.decbin)(data[5])}`, 2) / 1000;
20
+ let sensorTemperature = Number(temperature.toFixed(2));
21
+ let relativeHumidity = Number(humidity.toFixed(2));
22
+ let batteryVoltage = Number(batteryVoltageCalculated.toFixed(2));
23
+ let targetTemperature, powerSourceStatus, lux, pir;
24
+ if (data[0] == 1) {
25
+ targetTemperature = data[6];
26
+ powerSourceStatus = data[7];
27
+ lux = parseInt('0' + data[8].toString(16) + data[9].toString(16), 16);
28
+ pir = (0, helpers_1.toBool)(data[10]);
29
+ }
30
+ else {
31
+ targetTemperature = parseInt(`${(0, helpers_1.decbin)(data[6])}${(0, helpers_1.decbin)(data[7])}`, 2) / 10;
32
+ powerSourceStatus = data[8];
33
+ lux = parseInt('0' + data[9].toString(16) + data[10].toString(16), 16);
34
+ pir = (0, helpers_1.toBool)(data[11]);
35
+ }
36
+ const keepaliveData = {
37
+ targetTemperature,
38
+ sensorTemperature,
39
+ relativeHumidity,
40
+ batteryVoltage,
41
+ powerSourceStatus,
42
+ lux,
43
+ pir,
44
+ };
45
+ Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
46
+ };
47
+ if (hexData) {
48
+ const byteArray = (0, helpers_1.byteArrayParser)(hexData);
49
+ if (!byteArray)
50
+ return;
51
+ if (byteArray[0] == 1 || byteArray[0] == 129) {
52
+ // its a keeapalive
53
+ handleKeepAliveData(byteArray);
54
+ }
55
+ else {
56
+ // parse command answers
57
+ let keepaliveLength = 22;
58
+ let potentialKeepAlive = (_a = hexData.match(/.{1,2}/g)) === null || _a === void 0 ? void 0 : _a.slice(-24 / 2);
59
+ if (potentialKeepAlive && potentialKeepAlive[0] == '81')
60
+ keepaliveLength = 24;
61
+ const data = (0, commandsReadingHelper_1.commandsReadingHelper)(hexData, keepaliveLength, types_1.DeviceType.WirelessThermostat);
62
+ if (!data)
63
+ return;
64
+ const shouldKeepAlive = data.hasOwnProperty('decodeKeepalive') ? true : false;
65
+ if ('decodeKeepalive' in data) {
66
+ delete data.decodeKeepalive;
67
+ }
68
+ Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, data));
69
+ // get only keepalive from device response
70
+ if (shouldKeepAlive) {
71
+ let keepaliveData = hexData.slice(-keepaliveLength);
72
+ let dataToPass = (0, helpers_1.byteArrayParser)(keepaliveData);
73
+ if (!dataToPass)
74
+ return;
75
+ handleKeepAliveData(dataToPass);
76
+ }
77
+ }
78
+ return deviceData;
79
+ }
80
+ }
81
+ catch (e) {
82
+ throw new utils_1.CustomError({
83
+ message: `Unhandled data`,
84
+ hexData: hexData,
85
+ deviceType: 'wireless_thermostat',
86
+ originalError: e,
87
+ });
88
+ }
89
+ };
90
+ exports.WirelessThermostatPayloadParser = WirelessThermostatPayloadParser;
91
+ //# sourceMappingURL=WirelessThermostatPayloadParser.js.map