mclimate-payload-helper 1.2.6 → 1.2.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.
- package/.eslintrc.cjs +18 -0
- package/.husky/pre-commit +6 -0
- package/CLAUDE.md +10 -1
- package/add-encoder-command-existing.md +51 -51
- package/add-encoder-command-new.md +51 -51
- package/dist/decoders/commandsReadingHelper.d.ts.map +1 -1
- package/dist/decoders/commandsReadingHelper.js +204 -202
- package/dist/decoders/commandsReadingHelper.js.map +1 -1
- package/dist/decoders/payloadParsers/AQISensorPayloadParser.js +5 -5
- package/dist/decoders/payloadParsers/AQISensorPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/CO2DisplayLitePayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/CO2DisplayLitePayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/CO2DisplayLitePayloadParser.js +18 -18
- package/dist/decoders/payloadParsers/CO2DisplayLitePayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/CO2DisplayPayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/CO2DisplayPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/CO2DisplayPayloadParser.js +19 -19
- package/dist/decoders/payloadParsers/CO2DisplayPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/CO2SensorPayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/CO2SensorPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/CO2SensorPayloadParser.js +3 -3
- package/dist/decoders/payloadParsers/CO2SensorPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/DskDevicePayloadParser.js +11 -11
- package/dist/decoders/payloadParsers/DskDevicePayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/FanCoilThermostatPayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/FanCoilThermostatPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/FanCoilThermostatPayloadParser.js +1 -1
- package/dist/decoders/payloadParsers/FanCoilThermostatPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/ThermostatPayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/ThermostatPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/ThermostatPayloadParser.js +32 -40
- package/dist/decoders/payloadParsers/ThermostatPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/WirelessThermostatPayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/WirelessThermostatPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/WirelessThermostatPayloadParser.js +13 -13
- package/dist/decoders/payloadParsers/WirelessThermostatPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/buttonPayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/buttonPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/buttonPayloadParser.js +6 -6
- package/dist/decoders/payloadParsers/buttonPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/co2PirLitePayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/co2PirLitePayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/co2PirLitePayloadParser.js +16 -16
- package/dist/decoders/payloadParsers/co2PirLitePayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/htDisplayLitePayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/htDisplayLitePayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/htDisplayLitePayloadParser.js +17 -17
- package/dist/decoders/payloadParsers/htDisplayLitePayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/htPirLitePayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/htPirLitePayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/htPirLitePayloadParser.js +14 -14
- package/dist/decoders/payloadParsers/htPirLitePayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/htSensorPayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/htSensorPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/htSensorPayloadParser.js +16 -16
- package/dist/decoders/payloadParsers/htSensorPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/melissaLorawanPayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/melissaLorawanPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/melissaLorawanPayloadParser.js +8 -8
- package/dist/decoders/payloadParsers/melissaLorawanPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/multisensorPayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/multisensorPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/multisensorPayloadParser.js +4 -5
- package/dist/decoders/payloadParsers/multisensorPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/openCloseSensorPayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/openCloseSensorPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/openCloseSensorPayloadParser.js +23 -20
- package/dist/decoders/payloadParsers/openCloseSensorPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/relay16DryPayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/relay16DryPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/relay16DryPayloadParser.js +8 -8
- package/dist/decoders/payloadParsers/relay16DryPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/relay16PayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/relay16PayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/relay16PayloadParser.js +8 -8
- package/dist/decoders/payloadParsers/relay16PayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/tFloodPayloadParser.js +7 -7
- package/dist/decoders/payloadParsers/tFloodPayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/tValvePayloadParser.js +4 -4
- package/dist/decoders/payloadParsers/tValvePayloadParser.js.map +1 -1
- package/dist/decoders/payloadParsers/uplinkPayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/uplinkPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/vickiPayloadParser.d.ts +1 -1
- package/dist/decoders/payloadParsers/vickiPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/vickiPayloadParser.js +25 -25
- package/dist/decoders/payloadParsers/vickiPayloadParser.js.map +1 -1
- package/dist/encoders/Co2DisplayCommands.js +1 -1
- package/dist/encoders/Co2DisplayCommands.js.map +1 -1
- package/dist/encoders/Co2DisplayCommonCommands.d.ts +0 -4
- package/dist/encoders/Co2DisplayCommonCommands.d.ts.map +1 -1
- package/dist/encoders/Co2DisplayCommonCommands.js +0 -38
- package/dist/encoders/Co2DisplayCommonCommands.js.map +1 -1
- package/dist/encoders/Co2DisplayLiteCommands.js +1 -1
- package/dist/encoders/Co2DisplayLiteCommands.js.map +1 -1
- package/dist/encoders/CommandBuilder.d.ts +2 -2
- package/dist/encoders/CommandBuilder.d.ts.map +1 -1
- package/dist/encoders/CommandBuilder.js +4 -2
- package/dist/encoders/CommandBuilder.js.map +1 -1
- package/dist/encoders/FanCoilThermostat.d.ts +61 -0
- package/dist/encoders/FanCoilThermostat.d.ts.map +1 -0
- package/dist/encoders/FanCoilThermostat.js +719 -0
- package/dist/encoders/FanCoilThermostat.js.map +1 -0
- package/dist/encoders/HTPirLiteCommands.d.ts.map +1 -1
- package/dist/encoders/HTPirLiteCommands.js +2 -8
- package/dist/encoders/HTPirLiteCommands.js.map +1 -1
- package/dist/encoders/MelissaCommands.d.ts.map +1 -1
- package/dist/encoders/MelissaCommands.js.map +1 -1
- package/dist/encoders/Relay16DryCommands.d.ts.map +1 -1
- package/dist/encoders/Relay16DryCommands.js +1 -3
- package/dist/encoders/Relay16DryCommands.js.map +1 -1
- package/dist/encoders/SetAqiLed.d.ts +6 -0
- package/dist/encoders/SetAqiLed.d.ts.map +1 -0
- package/dist/encoders/SetAqiLed.js +46 -0
- package/dist/encoders/SetAqiLed.js.map +1 -0
- package/dist/encoders/VickiCommands.d.ts.map +1 -1
- package/dist/encoders/VickiCommands.js +5 -7
- package/dist/encoders/VickiCommands.js.map +1 -1
- package/dist/encoders/types/enumValidation.d.ts +6 -0
- package/dist/encoders/types/enumValidation.d.ts.map +1 -0
- package/dist/encoders/types/enumValidation.js +50 -0
- package/dist/encoders/types/enumValidation.js.map +1 -0
- package/dist/encoders/types/schemaValidatedEnums.d.ts +40 -0
- package/dist/encoders/types/schemaValidatedEnums.d.ts.map +1 -0
- package/dist/encoders/types/schemaValidatedEnums.js +181 -0
- package/dist/encoders/types/schemaValidatedEnums.js.map +1 -0
- package/dist/encoders/types/schemas.d.ts.map +1 -1
- package/dist/encoders/types/schemas.js +1 -0
- package/dist/encoders/types/schemas.js.map +1 -1
- package/dist/test/payloadDecoders.test.js +28 -23
- package/dist/test/payloadDecoders.test.js.map +1 -1
- package/dist/test/payloadEncoders.test.js +44 -22
- package/dist/test/payloadEncoders.test.js.map +1 -1
- package/dist/types/deviceTypes.d.ts +19 -0
- package/dist/types/deviceTypes.d.ts.map +1 -0
- package/dist/types/deviceTypes.js +23 -0
- package/dist/types/deviceTypes.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +18 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/types.d.ts +13 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js +9 -0
- package/dist/types/types.js.map +1 -0
- package/dist/utils/delMethods.d.ts +1 -1
- package/dist/utils/delMethods.d.ts.map +1 -1
- package/dist/utils/delMethods.js +3 -2
- package/dist/utils/delMethods.js.map +1 -1
- package/dist/utils/mixin.d.ts +1 -1
- package/dist/utils/mixin.d.ts.map +1 -1
- package/dist/utils/mixin.js +4 -1
- package/dist/utils/mixin.js.map +1 -1
- package/dist/validation.d.ts +3 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +8 -0
- package/dist/validation.js.map +1 -0
- package/package.json +13 -2
- package/src/decoders/commandsReadingHelper.ts +205 -203
- package/src/decoders/payloadParsers/AQISensorPayloadParser.ts +5 -5
- package/src/decoders/payloadParsers/CO2DisplayLitePayloadParser.ts +19 -19
- package/src/decoders/payloadParsers/CO2DisplayPayloadParser.ts +19 -19
- package/src/decoders/payloadParsers/CO2SensorPayloadParser.ts +4 -4
- package/src/decoders/payloadParsers/DskDevicePayloadParser.ts +11 -11
- package/src/decoders/payloadParsers/FanCoilThermostatPayloadParser.ts +3 -3
- package/src/decoders/payloadParsers/ThermostatPayloadParser.ts +32 -42
- package/src/decoders/payloadParsers/WirelessThermostatPayloadParser.ts +16 -14
- package/src/decoders/payloadParsers/buttonPayloadParser.ts +6 -6
- package/src/decoders/payloadParsers/co2PirLitePayloadParser.ts +28 -29
- package/src/decoders/payloadParsers/htDisplayLitePayloadParser.ts +17 -17
- package/src/decoders/payloadParsers/htPirLitePayloadParser.ts +25 -25
- package/src/decoders/payloadParsers/htSensorPayloadParser.ts +17 -17
- package/src/decoders/payloadParsers/melissaLorawanPayloadParser.ts +11 -11
- package/src/decoders/payloadParsers/multisensorPayloadParser.ts +75 -77
- package/src/decoders/payloadParsers/openCloseSensorPayloadParser.ts +40 -36
- package/src/decoders/payloadParsers/relay16DryPayloadParser.ts +10 -10
- package/src/decoders/payloadParsers/relay16PayloadParser.ts +10 -10
- package/src/decoders/payloadParsers/tFloodPayloadParser.ts +7 -7
- package/src/decoders/payloadParsers/tValvePayloadParser.ts +4 -4
- package/src/decoders/payloadParsers/vickiPayloadParser.ts +28 -28
- package/src/encoders/Co2DisplayCommands.ts +1 -1
- package/src/encoders/Co2DisplayLiteCommands.ts +2 -2
- package/src/encoders/Co2PirLiteCommands.ts +0 -1
- package/src/encoders/CommandBuilder.ts +5 -3
- package/src/encoders/HTPirLiteCommands.ts +27 -34
- package/src/encoders/MelissaCommands.ts +20 -24
- package/src/encoders/Relay16DryCommands.ts +3 -6
- package/src/encoders/VickiCommands.ts +23 -53
- package/src/encoders/index.ts +0 -1
- package/src/encoders/types/schemas.ts +1 -0
- package/src/test/payloadDecoders.test.ts +88 -73
- package/src/test/payloadEncoders.test.ts +101 -72
- package/src/utils/delMethods.ts +6 -3
- package/src/utils/mixin.ts +5 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"co2PirLitePayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/co2PirLitePayloadParser.ts"],"names":[],"mappings":";;;AAAA,4EAAwE;AACxE,2DAA4D;AAC5D,uCAA2C;AAC3C,mCAAqC;AAU9B,MAAM,uBAAuB,GAAG,CAAC,OAAe,EAAE,EAAE;IAC1D,
|
|
1
|
+
{"version":3,"file":"co2PirLitePayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/co2PirLitePayloadParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const htDisplayLitePayloadParser: (hexData: string) =>
|
|
1
|
+
export declare const htDisplayLitePayloadParser: (hexData: string) => Record<string, unknown> | undefined;
|
|
2
2
|
//# sourceMappingURL=htDisplayLitePayloadParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htDisplayLitePayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/htDisplayLitePayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,0BAA0B,YAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"htDisplayLitePayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/htDisplayLitePayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,0BAA0B,YAAa,MAAM,wCAoEzD,CAAA"}
|
|
@@ -6,22 +6,22 @@ const types_1 = require("../../decoders/payloadParsers/types");
|
|
|
6
6
|
const helpers_1 = require("../../helpers");
|
|
7
7
|
const utils_1 = require("../../utils");
|
|
8
8
|
const htDisplayLitePayloadParser = (hexData) => {
|
|
9
|
-
|
|
9
|
+
const deviceData = {};
|
|
10
10
|
try {
|
|
11
11
|
const calculateTemperature = (rawData) => (rawData - 400) / 10;
|
|
12
12
|
const calculateHumidity = (rawData) => (rawData * 100) / 256;
|
|
13
13
|
const handleKeepAliveData = (data) => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
14
|
+
const tempHex = ('0' + data[1].toString(16)).substr(-2) + ('0' + data[2].toString(16)).substr(-2);
|
|
15
|
+
const tempDec = parseInt(tempHex, 16);
|
|
16
|
+
const temperature = calculateTemperature(tempDec);
|
|
17
|
+
const humidity = calculateHumidity(data[3]);
|
|
18
|
+
const lux = parseInt('0' + data[4].toString(16) + data[5].toString(16), 16);
|
|
19
|
+
const batteryVoltageCalculated = parseInt(`${(0, helpers_1.decbin)(data[6])}${(0, helpers_1.decbin)(data[7])}`, 2) / 1000;
|
|
20
|
+
const sensorTemperature = Number(temperature.toFixed(2));
|
|
21
|
+
const relativeHumidity = Number(humidity.toFixed(2));
|
|
22
|
+
const batteryVoltage = Number(batteryVoltageCalculated.toFixed(2));
|
|
23
|
+
const powerSourceStatus = data[8];
|
|
24
|
+
const keepaliveData = {
|
|
25
25
|
sensorTemperature,
|
|
26
26
|
relativeHumidity,
|
|
27
27
|
batteryVoltage,
|
|
@@ -31,7 +31,7 @@ const htDisplayLitePayloadParser = (hexData) => {
|
|
|
31
31
|
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
|
|
32
32
|
};
|
|
33
33
|
if (hexData) {
|
|
34
|
-
|
|
34
|
+
const byteArray = (0, helpers_1.byteArrayParser)(hexData);
|
|
35
35
|
if (!byteArray)
|
|
36
36
|
return;
|
|
37
37
|
if (byteArray[0] == 1) {
|
|
@@ -40,18 +40,18 @@ const htDisplayLitePayloadParser = (hexData) => {
|
|
|
40
40
|
}
|
|
41
41
|
else {
|
|
42
42
|
// parse command answers
|
|
43
|
-
|
|
43
|
+
const data = (0, commandsReadingHelper_1.commandsReadingHelper)(hexData, 18, types_1.DeviceType.HTDisplayLite);
|
|
44
44
|
if (!data)
|
|
45
45
|
return;
|
|
46
|
-
const shouldKeepAlive =
|
|
46
|
+
const shouldKeepAlive = Object.prototype.hasOwnProperty.call(data, 'decodeKeepalive');
|
|
47
47
|
if ('decodeKeepalive' in data) {
|
|
48
48
|
delete data.decodeKeepalive;
|
|
49
49
|
}
|
|
50
50
|
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, data));
|
|
51
51
|
// get only keepalive from device response
|
|
52
52
|
if (shouldKeepAlive) {
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
const keepaliveData = hexData.slice(-18);
|
|
54
|
+
const dataToPass = (0, helpers_1.byteArrayParser)(keepaliveData);
|
|
55
55
|
if (!dataToPass)
|
|
56
56
|
return;
|
|
57
57
|
handleKeepAliveData(dataToPass);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htDisplayLitePayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/htDisplayLitePayloadParser.ts"],"names":[],"mappings":";;;AAAA,4EAAwE;AACxE,2DAA4D;AAC5D,uCAAmD;AACnD,mCAAqC;AAE9B,MAAM,0BAA0B,GAAG,CAAC,OAAe,EAAE,EAAE;IAC7D,
|
|
1
|
+
{"version":3,"file":"htDisplayLitePayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/htDisplayLitePayloadParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const htPirLitePayloadParser: (hexData: string) =>
|
|
1
|
+
export declare const htPirLitePayloadParser: (hexData: string) => Record<string, unknown> | undefined;
|
|
2
2
|
//# sourceMappingURL=htPirLitePayloadParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htPirLitePayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/htPirLitePayloadParser.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,sBAAsB,YAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"htPirLitePayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/htPirLitePayloadParser.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,sBAAsB,YAAa,MAAM,wCAuErD,CAAA"}
|
|
@@ -6,33 +6,33 @@ const types_1 = require("../../decoders/payloadParsers/types");
|
|
|
6
6
|
const helpers_1 = require("../../helpers");
|
|
7
7
|
const utils_1 = require("../../utils");
|
|
8
8
|
const htPirLitePayloadParser = (hexData) => {
|
|
9
|
-
|
|
9
|
+
const deviceData = {};
|
|
10
10
|
try {
|
|
11
11
|
const handleKeepAliveData = (bytes) => {
|
|
12
|
-
|
|
12
|
+
const keepaliveData = {};
|
|
13
13
|
// Bytes 1-2: Internal temperature sensor data
|
|
14
14
|
// Formula: t[°C] = (T[15:0]-400)/10
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
const tempMsb = bytes[1]; // bits 15:8
|
|
16
|
+
const tempLsb = bytes[2]; // bits 7:0
|
|
17
|
+
const rawTemperature = (tempMsb << 8) | tempLsb;
|
|
18
18
|
keepaliveData.sensorTemperature = Number(((rawTemperature - 400) / 10).toFixed(2));
|
|
19
19
|
// Byte 3: Relative Humidity data
|
|
20
20
|
// Formula: RH[%] = (XX*100)/256
|
|
21
21
|
keepaliveData.relativeHumidity = Number(((bytes[3] * 100) / 256).toFixed(2));
|
|
22
22
|
// Bytes 4-5: Device battery voltage data
|
|
23
23
|
// Battery voltage [mV]
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
const batteryMsb = bytes[4]; // bits 15:8
|
|
25
|
+
const batteryLsb = bytes[5]; // bits 7:0
|
|
26
26
|
keepaliveData.batteryVoltage = Number((((batteryMsb << 8) | batteryLsb) / 1000).toFixed(2));
|
|
27
27
|
// Byte 6: PIR sensor status (only bit 0 is used, other bits are reserved)
|
|
28
28
|
// 0 - No motion detected
|
|
29
29
|
// 1 - Motion detected
|
|
30
|
-
|
|
31
|
-
keepaliveData.pir = pirValue === 1
|
|
30
|
+
const pirValue = bytes[6] & 0x01; // Extract only the last bit
|
|
31
|
+
keepaliveData.pir = pirValue === 1;
|
|
32
32
|
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
|
|
33
33
|
};
|
|
34
34
|
if (hexData) {
|
|
35
|
-
|
|
35
|
+
const byteArray = (0, helpers_1.byteArrayParser)(hexData);
|
|
36
36
|
if (!byteArray)
|
|
37
37
|
return;
|
|
38
38
|
// Route the message based on the command byte
|
|
@@ -42,10 +42,10 @@ const htPirLitePayloadParser = (hexData) => {
|
|
|
42
42
|
}
|
|
43
43
|
else {
|
|
44
44
|
// parse command answers
|
|
45
|
-
|
|
45
|
+
const data = (0, commandsReadingHelper_1.commandsReadingHelper)(hexData, 14, types_1.DeviceType.HTPirLite);
|
|
46
46
|
if (!data)
|
|
47
47
|
return;
|
|
48
|
-
const shouldKeepAlive =
|
|
48
|
+
const shouldKeepAlive = Object.prototype.hasOwnProperty.call(data, 'decodeKeepalive');
|
|
49
49
|
if ('decodeKeepalive' in data) {
|
|
50
50
|
delete data.decodeKeepalive;
|
|
51
51
|
}
|
|
@@ -53,8 +53,8 @@ const htPirLitePayloadParser = (hexData) => {
|
|
|
53
53
|
// Handle the remaining keepalive data if present
|
|
54
54
|
if (shouldKeepAlive) {
|
|
55
55
|
// Extract the last 7 bytes which contain keepalive data for HT-PIR-Lite
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
const keepaliveData = hexData.slice(-14); // 7 bytes = 14 hex chars
|
|
57
|
+
const dataToPass = (0, helpers_1.byteArrayParser)(keepaliveData);
|
|
58
58
|
if (!dataToPass)
|
|
59
59
|
return;
|
|
60
60
|
handleKeepAliveData(dataToPass);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htPirLitePayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/htPirLitePayloadParser.ts"],"names":[],"mappings":";;;AAAA,4EAAwE;AACxE,2DAA4D;AAC5D,uCAA2C;AAC3C,mCAAqC;AAS9B,MAAM,sBAAsB,GAAG,CAAC,OAAe,EAAE,EAAE;IACzD,
|
|
1
|
+
{"version":3,"file":"htPirLitePayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/htPirLitePayloadParser.ts"],"names":[],"mappings":";;;AAAA,4EAAwE;AACxE,2DAA4D;AAC5D,uCAA2C;AAC3C,mCAAqC;AAS9B,MAAM,sBAAsB,GAAG,CAAC,OAAe,EAAE,EAAE;IACzD,MAAM,UAAU,GAA4B,EAAE,CAAA;IAE9C,IAAI,CAAC;QACJ,MAAM,mBAAmB,GAAG,CAAC,KAAe,EAAE,EAAE;YAC/C,MAAM,aAAa,GAAkB,EAAE,CAAA;YAEvC,8CAA8C;YAC9C,oCAAoC;YACpC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,YAAY;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,WAAW;YACpC,MAAM,cAAc,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,OAAO,CAAA;YAC/C,aAAa,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YAElF,iCAAiC;YACjC,gCAAgC;YAChC,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,yCAAyC;YACzC,uBAAuB;YACvB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,YAAY;YACxC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,WAAW;YACvC,aAAa,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YAE3F,0EAA0E;YAC1E,yBAAyB;YACzB,sBAAsB;YACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA,CAAC,4BAA4B;YAC7D,aAAa,CAAC,GAAG,GAAG,QAAQ,KAAK,CAAC,CAAA;YAElC,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;YAEtB,8CAA8C;YAC9C,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,8BAA8B;gBAC9B,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,SAAS,CAAwC,CAAA;gBAC5G,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,iDAAiD;gBACjD,IAAI,eAAe,EAAE,CAAC;oBACrB,wEAAwE;oBACxE,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA,CAAC,yBAAyB;oBAClE,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,aAAa;YACzB,aAAa,EAAE,CAAU;SACzB,CAAC,CAAA;IACH,CAAC;AACF,CAAC,CAAA;AAvEY,QAAA,sBAAsB,0BAuElC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const htSensorPayloadParser: (hexData: string) =>
|
|
1
|
+
export declare const htSensorPayloadParser: (hexData: string) => Record<string, unknown> | undefined;
|
|
2
2
|
//# sourceMappingURL=htSensorPayloadParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htSensorPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/htSensorPayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB,YAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"htSensorPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/htSensorPayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB,YAAa,MAAM,wCAqEpD,CAAA"}
|
|
@@ -6,21 +6,21 @@ const types_1 = require("../../decoders/payloadParsers/types");
|
|
|
6
6
|
const helpers_1 = require("../../helpers");
|
|
7
7
|
const utils_1 = require("../../utils");
|
|
8
8
|
const htSensorPayloadParser = (hexData) => {
|
|
9
|
-
|
|
9
|
+
const deviceData = {};
|
|
10
10
|
try {
|
|
11
11
|
const calculateTemperature = (rawData) => (rawData - 400) / 10;
|
|
12
12
|
const calculateHumidity = (rawData) => (rawData * 100) / 256;
|
|
13
13
|
const handleKeepAliveData = (data) => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
const temperatureRaw = (data[1] << 8) | data[2];
|
|
15
|
+
const sensorTemperature = Number(calculateTemperature(temperatureRaw).toFixed(2));
|
|
16
|
+
const relativeHumidity = Number(calculateHumidity(data[3]).toFixed(2));
|
|
17
|
+
const batteryVoltage = Number(((data[4] * 8 + 1600) / 1000).toFixed(2));
|
|
18
|
+
const thermistorProperlyConnected = (data[5] & 0x04) === 0;
|
|
19
|
+
const extThermHigh = data[5] & 0x03; // mask out bits 1:0
|
|
20
|
+
const extThermLow = data[6];
|
|
21
|
+
const extThermRaw = (extThermHigh << 8) | extThermLow;
|
|
22
|
+
const extThermistorTemperature = thermistorProperlyConnected ? Number((extThermRaw * 0.1).toFixed(2)) : 0;
|
|
23
|
+
const keepaliveData = {
|
|
24
24
|
sensorTemperature,
|
|
25
25
|
relativeHumidity,
|
|
26
26
|
batteryVoltage,
|
|
@@ -30,7 +30,7 @@ const htSensorPayloadParser = (hexData) => {
|
|
|
30
30
|
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
|
|
31
31
|
};
|
|
32
32
|
if (hexData) {
|
|
33
|
-
|
|
33
|
+
const byteArray = (0, helpers_1.byteArrayParser)(hexData);
|
|
34
34
|
if (!byteArray)
|
|
35
35
|
return;
|
|
36
36
|
if (byteArray[0] == 1) {
|
|
@@ -39,18 +39,18 @@ const htSensorPayloadParser = (hexData) => {
|
|
|
39
39
|
}
|
|
40
40
|
else {
|
|
41
41
|
// parse command answers
|
|
42
|
-
|
|
42
|
+
const data = (0, commandsReadingHelper_1.commandsReadingHelper)(hexData, 14, types_1.DeviceType.HTSensor);
|
|
43
43
|
if (!data)
|
|
44
44
|
return;
|
|
45
|
-
const shouldKeepAlive =
|
|
45
|
+
const shouldKeepAlive = Object.prototype.hasOwnProperty.call(data, 'decodeKeepalive');
|
|
46
46
|
if ('decodeKeepalive' in data) {
|
|
47
47
|
delete data.decodeKeepalive;
|
|
48
48
|
}
|
|
49
49
|
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, data));
|
|
50
50
|
// get only keepalive from device response
|
|
51
51
|
if (shouldKeepAlive) {
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
const keepaliveData = hexData.slice(-14);
|
|
53
|
+
const dataToPass = (0, helpers_1.byteArrayParser)(keepaliveData);
|
|
54
54
|
if (!dataToPass)
|
|
55
55
|
return;
|
|
56
56
|
handleKeepAliveData(dataToPass);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htSensorPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/htSensorPayloadParser.ts"],"names":[],"mappings":";;;AAAA,4EAAwE;AACxE,2DAA4D;AAC5D,
|
|
1
|
+
{"version":3,"file":"htSensorPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/htSensorPayloadParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const melissaLorawanPayloadParser: (hexData: string) =>
|
|
1
|
+
export declare const melissaLorawanPayloadParser: (hexData: string) => Record<string, unknown> | undefined;
|
|
2
2
|
//# sourceMappingURL=melissaLorawanPayloadParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"melissaLorawanPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/melissaLorawanPayloadParser.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,2BAA2B,YAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"melissaLorawanPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/melissaLorawanPayloadParser.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,2BAA2B,YAAa,MAAM,wCA0D1D,CAAA"}
|
|
@@ -6,10 +6,10 @@ const types_1 = require("../../decoders/payloadParsers/types");
|
|
|
6
6
|
const helpers_1 = require("../../helpers");
|
|
7
7
|
const utils_1 = require("../../utils");
|
|
8
8
|
const melissaLorawanPayloadParser = (hexData) => {
|
|
9
|
-
|
|
9
|
+
const deviceData = {};
|
|
10
10
|
try {
|
|
11
11
|
const handleKeepAliveData = (bytes) => {
|
|
12
|
-
|
|
12
|
+
const keepaliveData = {};
|
|
13
13
|
// Internal temperature sensor data from bytes 1-2 (16 bits)
|
|
14
14
|
// According to the screenshot: t[°C] = (T[15:0] - 400) / 10
|
|
15
15
|
const rawTemperature = (bytes[1] << 8) | bytes[2];
|
|
@@ -19,11 +19,11 @@ const melissaLorawanPayloadParser = (hexData) => {
|
|
|
19
19
|
keepaliveData.relativeHumidity = Number(((bytes[3] * 100) / 256).toFixed(2));
|
|
20
20
|
// Device status information (byte 4)
|
|
21
21
|
// Bit 7 indicates if IR code recording is requested (1) or not (0)
|
|
22
|
-
keepaliveData.isIrCodeRecordingRequested = (
|
|
22
|
+
keepaliveData.isIrCodeRecordingRequested = (bytes[4] & 0x80) !== 0;
|
|
23
23
|
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
|
|
24
24
|
};
|
|
25
25
|
if (hexData) {
|
|
26
|
-
|
|
26
|
+
const byteArray = (0, helpers_1.byteArrayParser)(hexData);
|
|
27
27
|
if (!byteArray)
|
|
28
28
|
return;
|
|
29
29
|
if (byteArray[0] == 1) {
|
|
@@ -32,18 +32,18 @@ const melissaLorawanPayloadParser = (hexData) => {
|
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
34
34
|
// parse command answers
|
|
35
|
-
|
|
35
|
+
const data = (0, commandsReadingHelper_1.commandsReadingHelper)(hexData, 10, types_1.DeviceType.MelissaLorawan);
|
|
36
36
|
if (!data)
|
|
37
37
|
return;
|
|
38
|
-
const shouldKeepAlive =
|
|
38
|
+
const shouldKeepAlive = Object.prototype.hasOwnProperty.call(data, 'decodeKeepalive');
|
|
39
39
|
if ('decodeKeepalive' in data) {
|
|
40
40
|
delete data.decodeKeepalive;
|
|
41
41
|
}
|
|
42
42
|
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, data));
|
|
43
43
|
// get only keepalive from device response
|
|
44
44
|
if (shouldKeepAlive) {
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
const keepaliveData = hexData.slice(-10);
|
|
46
|
+
const dataToPass = (0, helpers_1.byteArrayParser)(keepaliveData);
|
|
47
47
|
if (!dataToPass)
|
|
48
48
|
return;
|
|
49
49
|
handleKeepAliveData(dataToPass);
|
|
@@ -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,
|
|
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,2 +1,2 @@
|
|
|
1
|
-
export declare const multisensorPayloadParser: (hexData: string) =>
|
|
1
|
+
export declare const multisensorPayloadParser: (hexData: string) => Record<string, unknown> | undefined;
|
|
2
2
|
//# sourceMappingURL=multisensorPayloadParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multisensorPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/multisensorPayloadParser.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,wBAAwB,YAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"multisensorPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/multisensorPayloadParser.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,wBAAwB,YAAa,MAAM,wCAsFvD,CAAA"}
|
|
@@ -7,14 +7,13 @@ const types_1 = require("../../decoders/payloadParsers/types");
|
|
|
7
7
|
const helpers_1 = require("../../helpers");
|
|
8
8
|
// Multisensor payload parser (uplink). Structure mirrors other parsers in this folder.
|
|
9
9
|
const multisensorPayloadParser = (hexData) => {
|
|
10
|
-
|
|
10
|
+
const deviceData = {};
|
|
11
11
|
try {
|
|
12
12
|
if (!hexData)
|
|
13
13
|
return;
|
|
14
14
|
const bytes = (0, helpers_1.byteArrayParser)(hexData);
|
|
15
15
|
if (!bytes || !bytes.length)
|
|
16
16
|
return;
|
|
17
|
-
const toHex = (arr) => arr.map((b) => ('0' + b.toString(16)).slice(-2)).join('');
|
|
18
17
|
const handleKeepAliveData = (barr) => {
|
|
19
18
|
// Decode according to provided example indexing
|
|
20
19
|
const b = (i, d = 0) => (typeof barr[i] === 'number' ? barr[i] : d);
|
|
@@ -27,7 +26,7 @@ const multisensorPayloadParser = (hexData) => {
|
|
|
27
26
|
const pressureMbar = Number(((b(5) * 390) / 255 + 700).toFixed(2));
|
|
28
27
|
const staticAQI = Number(((b(6) * 500) / 255).toFixed(2));
|
|
29
28
|
// eCO2: matches example (06 -> 508.23): scale = 4600
|
|
30
|
-
const eCO2ppm = Number(((
|
|
29
|
+
const eCO2ppm = Number(((b(7) * 4600) / 255 + 400).toFixed(2));
|
|
31
30
|
const tvocRaw = ((b(8) & 0xff) << 8) | (b(9) & 0xff);
|
|
32
31
|
const tvocPpbApprox = tvocRaw;
|
|
33
32
|
const lightLux = Math.round((b(10) * 1000) / 255);
|
|
@@ -53,7 +52,7 @@ const multisensorPayloadParser = (hexData) => {
|
|
|
53
52
|
deviceVoltageMv,
|
|
54
53
|
deviceVoltage,
|
|
55
54
|
powerSourceRaw,
|
|
56
|
-
powerSource
|
|
55
|
+
powerSource,
|
|
57
56
|
};
|
|
58
57
|
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
|
|
59
58
|
};
|
|
@@ -66,7 +65,7 @@ const multisensorPayloadParser = (hexData) => {
|
|
|
66
65
|
const data = (0, decoders_1.commandsReadingHelper)(hexData, 30, types_1.DeviceType.MultiSensor);
|
|
67
66
|
if (!data)
|
|
68
67
|
return;
|
|
69
|
-
const shouldKeepAlive =
|
|
68
|
+
const shouldKeepAlive = Object.prototype.hasOwnProperty.call(data, 'decodeKeepalive');
|
|
70
69
|
if ('decodeKeepalive' in data) {
|
|
71
70
|
delete data.decodeKeepalive;
|
|
72
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multisensorPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/multisensorPayloadParser.ts"],"names":[],"mappings":";;;AAAA,yCAAkD;AAClD,mCAAqC;AACrC,2DAA4D;AAC5D,uCAA2C;AAE3C,uFAAuF;AAChF,MAAM,wBAAwB,GAAG,CAAC,OAAe,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"multisensorPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/multisensorPayloadParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const openCloseSensorPayloadParser: (hexData: string) =>
|
|
1
|
+
export declare const openCloseSensorPayloadParser: (hexData: string) => Record<string, unknown> | undefined;
|
|
2
2
|
//# sourceMappingURL=openCloseSensorPayloadParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openCloseSensorPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/openCloseSensorPayloadParser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openCloseSensorPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/openCloseSensorPayloadParser.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,4BAA4B,YAAa,MAAM,wCAyF3D,CAAA"}
|
|
@@ -6,7 +6,7 @@ const types_1 = require("../../decoders/payloadParsers/types");
|
|
|
6
6
|
const helpers_1 = require("../../helpers");
|
|
7
7
|
const utils_1 = require("../../utils");
|
|
8
8
|
const openCloseSensorPayloadParser = (hexData) => {
|
|
9
|
-
|
|
9
|
+
const deviceData = {};
|
|
10
10
|
try {
|
|
11
11
|
// Calculate battery voltage from raw value
|
|
12
12
|
const calculateBatteryVoltage = (byte) => {
|
|
@@ -16,37 +16,40 @@ const openCloseSensorPayloadParser = (hexData) => {
|
|
|
16
16
|
const calculateTemperature = (rawTemp) => {
|
|
17
17
|
return rawTemp / 10.0;
|
|
18
18
|
};
|
|
19
|
-
const handleKeepalive = (bytes
|
|
19
|
+
const handleKeepalive = (bytes) => {
|
|
20
20
|
// Byte 1: Device battery voltage
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
const batteryVoltage = calculateBatteryVoltage(bytes[1]) / 1000;
|
|
22
|
+
const batteryVoltageFormatted = Number(batteryVoltage.toFixed(2));
|
|
23
23
|
// Byte 2: Thermistor operational status and temperature data (bits 9:8)
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
const thermistorConnected = (bytes[2] & 0x04) === 0; // Bit 2
|
|
25
|
+
const temperatureHighBits = bytes[2] & 0x03; // Bits 1:0
|
|
26
26
|
// Byte 3: Thermistor temperature data (bits 7:0)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
data.sensorTemperature = Number(temperatureCelsius.toFixed(2));
|
|
27
|
+
const temperatureLowBits = bytes[3];
|
|
28
|
+
const temperatureRaw = (temperatureHighBits << 8) | temperatureLowBits;
|
|
29
|
+
const temperatureCelsius = calculateTemperature(temperatureRaw);
|
|
30
|
+
const sensorTemperature = Number(temperatureCelsius.toFixed(2));
|
|
32
31
|
// Byte 4-6: Counter data
|
|
33
|
-
|
|
34
|
-
data.counter = counter;
|
|
32
|
+
const counter = (bytes[4] << 16) | (bytes[5] << 8) | bytes[6];
|
|
35
33
|
// Byte 7: Status and event code
|
|
36
34
|
const status = bytes[7];
|
|
37
35
|
const events = { '01': 'keepalive', '32': 'reed switch', '33': 'push button' };
|
|
38
|
-
const eventKey =
|
|
36
|
+
const eventKey = bytes[0].toString().padStart(2, '0');
|
|
39
37
|
const event = events[eventKey];
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
return {
|
|
39
|
+
batteryVoltage: batteryVoltageFormatted,
|
|
40
|
+
thermistorProperlyConnected: thermistorConnected,
|
|
41
|
+
sensorTemperature,
|
|
42
|
+
counter,
|
|
43
|
+
status,
|
|
44
|
+
event,
|
|
45
|
+
};
|
|
43
46
|
};
|
|
44
47
|
// Handler for keepalive data that adapts the string input to the new function
|
|
45
48
|
const handleKeepAliveData = (data) => {
|
|
46
49
|
const hexArray = (0, helpers_1.byteArrayParser)(data);
|
|
47
50
|
if (!hexArray)
|
|
48
51
|
return;
|
|
49
|
-
|
|
52
|
+
const keepaliveData = handleKeepalive(hexArray);
|
|
50
53
|
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
|
|
51
54
|
};
|
|
52
55
|
if (hexData) {
|
|
@@ -59,14 +62,14 @@ const openCloseSensorPayloadParser = (hexData) => {
|
|
|
59
62
|
const data = (0, commandsReadingHelper_1.commandsReadingHelper)(hexData, 16, types_1.DeviceType.OpenCloseSensor);
|
|
60
63
|
if (!data)
|
|
61
64
|
return;
|
|
62
|
-
const shouldKeepAlive =
|
|
65
|
+
const shouldKeepAlive = Object.prototype.hasOwnProperty.call(data, 'decodeKeepalive');
|
|
63
66
|
if ('decodeKeepalive' in data) {
|
|
64
67
|
delete data.decodeKeepalive;
|
|
65
68
|
}
|
|
66
69
|
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, data));
|
|
67
70
|
// get only keepalive from device response
|
|
68
71
|
if (shouldKeepAlive) {
|
|
69
|
-
|
|
72
|
+
const keepaliveData = hexData.slice(-16);
|
|
70
73
|
handleKeepAliveData(keepaliveData);
|
|
71
74
|
}
|
|
72
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openCloseSensorPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/openCloseSensorPayloadParser.ts"],"names":[],"mappings":";;;AAAA,4EAAwE;AACxE,2DAA4D;AAC5D,
|
|
1
|
+
{"version":3,"file":"openCloseSensorPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/openCloseSensorPayloadParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const relay16DryPayloadParser: (hexData: string) =>
|
|
1
|
+
export declare const relay16DryPayloadParser: (hexData: string) => Record<string, unknown> | undefined;
|
|
2
2
|
//# sourceMappingURL=relay16DryPayloadParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay16DryPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/relay16DryPayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,uBAAuB,YAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"relay16DryPayloadParser.d.ts","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/relay16DryPayloadParser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,uBAAuB,YAAa,MAAM,wCAsDtD,CAAA"}
|