mclimate-payload-helper 1.2.19 → 1.2.20
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/README.md +21 -0
- package/dist/decoders/payloadParsers/multisensorPayloadParser.d.ts.map +1 -1
- package/dist/decoders/payloadParsers/multisensorPayloadParser.js +80 -33
- package/dist/decoders/payloadParsers/multisensorPayloadParser.js.map +1 -1
- package/dist/encoders/ButtonCommands.test.d.ts +2 -0
- package/dist/encoders/ButtonCommands.test.d.ts.map +1 -0
- package/dist/encoders/ButtonCommands.test.js +20 -0
- package/dist/encoders/ButtonCommands.test.js.map +1 -0
- package/dist/encoders/ChildLockCommands.test.d.ts +2 -0
- package/dist/encoders/ChildLockCommands.test.d.ts.map +1 -0
- package/dist/encoders/ChildLockCommands.test.js +17 -0
- package/dist/encoders/ChildLockCommands.test.js.map +1 -0
- package/dist/encoders/Co2DisplayCommands.test.d.ts +2 -0
- package/dist/encoders/Co2DisplayCommands.test.d.ts.map +1 -0
- package/dist/encoders/Co2DisplayCommands.test.js +18 -0
- package/dist/encoders/Co2DisplayCommands.test.js.map +1 -0
- package/dist/encoders/Co2DisplayCommonCommands.d.ts +4 -0
- package/dist/encoders/Co2DisplayCommonCommands.d.ts.map +1 -1
- package/dist/encoders/Co2DisplayCommonCommands.js +38 -0
- package/dist/encoders/Co2DisplayCommonCommands.js.map +1 -1
- package/dist/encoders/Co2DisplayLiteCommands.test.d.ts +2 -0
- package/dist/encoders/Co2DisplayLiteCommands.test.d.ts.map +1 -0
- package/dist/encoders/Co2DisplayLiteCommands.test.js +21 -0
- package/dist/encoders/Co2DisplayLiteCommands.test.js.map +1 -0
- package/dist/encoders/Co2PirLiteCommands.test.d.ts +2 -0
- package/dist/encoders/Co2PirLiteCommands.test.d.ts.map +1 -0
- package/dist/encoders/Co2PirLiteCommands.test.js +23 -0
- package/dist/encoders/Co2PirLiteCommands.test.js.map +1 -0
- package/dist/encoders/Co2SensorCommands.test.d.ts +2 -0
- package/dist/encoders/Co2SensorCommands.test.d.ts.map +1 -0
- package/dist/encoders/Co2SensorCommands.test.js +55 -0
- package/dist/encoders/Co2SensorCommands.test.js.map +1 -0
- package/dist/encoders/DisplayCommands.test.d.ts +2 -0
- package/dist/encoders/DisplayCommands.test.d.ts.map +1 -0
- package/dist/encoders/DisplayCommands.test.js +26 -0
- package/dist/encoders/DisplayCommands.test.js.map +1 -0
- package/dist/encoders/DskDeviceCommands.test.d.ts +2 -0
- package/dist/encoders/DskDeviceCommands.test.d.ts.map +1 -0
- package/dist/encoders/DskDeviceCommands.test.js +20 -0
- package/dist/encoders/DskDeviceCommands.test.js.map +1 -0
- package/dist/encoders/FanCoilThermostatCommands.test.d.ts +2 -0
- package/dist/encoders/FanCoilThermostatCommands.test.d.ts.map +1 -0
- package/dist/encoders/FanCoilThermostatCommands.test.js +117 -0
- package/dist/encoders/FanCoilThermostatCommands.test.js.map +1 -0
- package/dist/encoders/GeneralCommands.test.d.ts +2 -0
- package/dist/encoders/GeneralCommands.test.d.ts.map +1 -0
- package/dist/encoders/GeneralCommands.test.js +26 -0
- package/dist/encoders/GeneralCommands.test.js.map +1 -0
- package/dist/encoders/HTDisplayLiteCommands.test.d.ts +2 -0
- package/dist/encoders/HTDisplayLiteCommands.test.d.ts.map +1 -0
- package/dist/encoders/HTDisplayLiteCommands.test.js +20 -0
- package/dist/encoders/HTDisplayLiteCommands.test.js.map +1 -0
- package/dist/encoders/HTPirLiteCommands.test.d.ts +2 -0
- package/dist/encoders/HTPirLiteCommands.test.d.ts.map +1 -0
- package/dist/encoders/HTPirLiteCommands.test.js +23 -0
- package/dist/encoders/HTPirLiteCommands.test.js.map +1 -0
- package/dist/encoders/HTSensorCommands.test.d.ts +2 -0
- package/dist/encoders/HTSensorCommands.test.d.ts.map +1 -0
- package/dist/encoders/HTSensorCommands.test.js +17 -0
- package/dist/encoders/HTSensorCommands.test.js.map +1 -0
- package/dist/encoders/MelissaCommands.test.d.ts +2 -0
- package/dist/encoders/MelissaCommands.test.d.ts.map +1 -0
- package/dist/encoders/MelissaCommands.test.js +14 -0
- package/dist/encoders/MelissaCommands.test.js.map +1 -0
- package/dist/encoders/MultiSensorCommands.test.d.ts +2 -0
- package/dist/encoders/MultiSensorCommands.test.d.ts.map +1 -0
- package/dist/encoders/MultiSensorCommands.test.js +41 -0
- package/dist/encoders/MultiSensorCommands.test.js.map +1 -0
- package/dist/encoders/OpenCloseSensorCommands.test.d.ts +2 -0
- package/dist/encoders/OpenCloseSensorCommands.test.d.ts.map +1 -0
- package/dist/encoders/OpenCloseSensorCommands.test.js +14 -0
- package/dist/encoders/OpenCloseSensorCommands.test.js.map +1 -0
- package/dist/encoders/PIRCommands.test.d.ts +2 -0
- package/dist/encoders/PIRCommands.test.d.ts.map +1 -0
- package/dist/encoders/PIRCommands.test.js +29 -0
- package/dist/encoders/PIRCommands.test.js.map +1 -0
- package/dist/encoders/Relay16Commands.test.d.ts +2 -0
- package/dist/encoders/Relay16Commands.test.d.ts.map +1 -0
- package/dist/encoders/Relay16Commands.test.js +44 -0
- package/dist/encoders/Relay16Commands.test.js.map +1 -0
- package/dist/encoders/Relay16DryCommands.test.d.ts +2 -0
- package/dist/encoders/Relay16DryCommands.test.d.ts.map +1 -0
- package/dist/encoders/Relay16DryCommands.test.js +32 -0
- package/dist/encoders/Relay16DryCommands.test.js.map +1 -0
- package/dist/encoders/SetAqiLedCommands.test.d.ts +2 -0
- package/dist/encoders/SetAqiLedCommands.test.d.ts.map +1 -0
- package/dist/encoders/SetAqiLedCommands.test.js +20 -0
- package/dist/encoders/SetAqiLedCommands.test.js.map +1 -0
- package/dist/encoders/TFloodCommands.test.d.ts +2 -0
- package/dist/encoders/TFloodCommands.test.d.ts.map +1 -0
- package/dist/encoders/TFloodCommands.test.js +23 -0
- package/dist/encoders/TFloodCommands.test.js.map +1 -0
- package/dist/encoders/TRingThermostatCommands.test.d.ts +2 -0
- package/dist/encoders/TRingThermostatCommands.test.d.ts.map +1 -0
- package/dist/encoders/TRingThermostatCommands.test.js +16 -0
- package/dist/encoders/TRingThermostatCommands.test.js.map +1 -0
- package/dist/encoders/TValveCommands.test.d.ts +2 -0
- package/dist/encoders/TValveCommands.test.d.ts.map +1 -0
- package/dist/encoders/TValveCommands.test.js +56 -0
- package/dist/encoders/TValveCommands.test.js.map +1 -0
- package/dist/encoders/TemperatureCommonCommands.test.d.ts +2 -0
- package/dist/encoders/TemperatureCommonCommands.test.d.ts.map +1 -0
- package/dist/encoders/TemperatureCommonCommands.test.js +14 -0
- package/dist/encoders/TemperatureCommonCommands.test.js.map +1 -0
- package/dist/encoders/VickiCommands.test.d.ts +2 -0
- package/dist/encoders/VickiCommands.test.d.ts.map +1 -0
- package/dist/encoders/VickiCommands.test.js +156 -0
- package/dist/encoders/VickiCommands.test.js.map +1 -0
- package/dist/encoders/WirelessThermostatCommands.test.d.ts +2 -0
- package/dist/encoders/WirelessThermostatCommands.test.d.ts.map +1 -0
- package/dist/encoders/WirelessThermostatCommands.test.js +41 -0
- package/dist/encoders/WirelessThermostatCommands.test.js.map +1 -0
- package/dist/test/payloadDecoders.test.js +34 -34
- package/dist/test/payloadDecoders.test.js.map +1 -1
- package/package.json +1 -1
- package/src/decoders/payloadParsers/multisensorPayloadParser.ts +96 -34
- package/src/encoders/ButtonCommands.test.ts +26 -0
- package/src/encoders/ChildLockCommands.test.ts +22 -0
- package/src/encoders/Co2DisplayCommands.test.ts +26 -0
- package/src/encoders/Co2DisplayLiteCommands.test.ts +30 -0
- package/src/encoders/Co2PirLiteCommands.test.ts +32 -0
- package/src/encoders/Co2SensorCommands.test.ts +79 -0
- package/src/encoders/DisplayCommands.test.ts +40 -0
- package/src/encoders/DskDeviceCommands.test.ts +26 -0
- package/src/encoders/FanCoilThermostatCommands.test.ts +204 -0
- package/src/encoders/GeneralCommands.test.ts +38 -0
- package/src/encoders/HTDisplayLiteCommands.test.ts +28 -0
- package/src/encoders/HTPirLiteCommands.test.ts +32 -0
- package/src/encoders/HTSensorCommands.test.ts +24 -0
- package/src/encoders/MelissaCommands.test.ts +16 -0
- package/src/encoders/MultiSensorCommands.test.ts +68 -0
- package/src/encoders/OpenCloseSensorCommands.test.ts +16 -0
- package/src/encoders/PIRCommands.test.ts +46 -0
- package/src/encoders/Relay16Commands.test.ts +76 -0
- package/src/encoders/Relay16DryCommands.test.ts +52 -0
- package/src/encoders/SetAqiLedCommands.test.ts +18 -0
- package/src/encoders/TFloodCommands.test.ts +34 -0
- package/src/encoders/TRingThermostatCommands.test.ts +23 -0
- package/src/encoders/TValveCommands.test.ts +98 -0
- package/src/encoders/TemperatureCommonCommands.test.ts +16 -0
- package/src/encoders/VickiCommands.test.ts +275 -0
- package/src/encoders/WirelessThermostatCommands.test.ts +70 -0
- package/src/test/payloadDecoders.test.ts +34 -34
- package/src/test.txt +1 -0
- package/dist/encoders/FanCoilThermostat.d.ts +0 -61
- package/dist/encoders/FanCoilThermostat.d.ts.map +0 -1
- package/dist/encoders/FanCoilThermostat.js +0 -719
- package/dist/encoders/FanCoilThermostat.js.map +0 -1
- package/dist/encoders/SetAqiLed.d.ts +0 -6
- package/dist/encoders/SetAqiLed.d.ts.map +0 -1
- package/dist/encoders/SetAqiLed.js +0 -46
- package/dist/encoders/SetAqiLed.js.map +0 -1
- package/dist/encoders/types/enumValidation.d.ts +0 -6
- package/dist/encoders/types/enumValidation.d.ts.map +0 -1
- package/dist/encoders/types/enumValidation.js +0 -50
- package/dist/encoders/types/enumValidation.js.map +0 -1
- package/dist/encoders/types/schemaValidatedEnums.d.ts +0 -40
- package/dist/encoders/types/schemaValidatedEnums.d.ts.map +0 -1
- package/dist/encoders/types/schemaValidatedEnums.js +0 -181
- package/dist/encoders/types/schemaValidatedEnums.js.map +0 -1
- package/dist/types/deviceTypes.d.ts +0 -19
- package/dist/types/deviceTypes.d.ts.map +0 -1
- package/dist/types/deviceTypes.js +0 -23
- package/dist/types/deviceTypes.js.map +0 -1
- package/dist/types/index.d.ts +0 -2
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -18
- package/dist/types/index.js.map +0 -1
- package/dist/types/types.d.ts +0 -13
- package/dist/types/types.d.ts.map +0 -1
- package/dist/types/types.js +0 -9
- package/dist/types/types.js.map +0 -1
- package/dist/validation.d.ts +0 -3
- package/dist/validation.d.ts.map +0 -1
- package/dist/validation.js +0 -8
- package/dist/validation.js.map +0 -1
- package/src/test/payloadEncoders.test.ts +0 -850
package/README.md
CHANGED
|
@@ -53,3 +53,24 @@ If a hook fails, fix the issue locally before committing again.
|
|
|
53
53
|
3. Publish the package with `npm publish`. The `prepublishOnly` script will rebuild the dist folder automatically.
|
|
54
54
|
|
|
55
55
|
Skipping the version bump will cause `npm publish` to fail, so always increment the version before publishing.
|
|
56
|
+
|
|
57
|
+
## Testing approach
|
|
58
|
+
|
|
59
|
+
Unit tests live next to their encoders in `src/encoders` (e.g., `Relay16Commands.ts` and `Relay16Commands.test.ts`). For each command class with set commands:
|
|
60
|
+
|
|
61
|
+
- All set commands are exercised with exact `BaseCommand` payload expectations (command id + hex params).
|
|
62
|
+
- `CommandBuilder` is used when the device is available there, so registry routing and camel-casing are covered.
|
|
63
|
+
- Each suite includes at least one validation error case to ensure zod schema failures surface as `CustomError`.
|
|
64
|
+
|
|
65
|
+
Mixin-only classes are covered via the concrete implementations they extend; only classes with distinct command surfaces get their own suite. GeneralCommands is also tested to validate shared helpers like custom hex, keepalive, uplink type, and watchdog parameters.
|
|
66
|
+
|
|
67
|
+
- Decoder tests remain consolidated in `src/test/payloadDecoders.test.ts`.
|
|
68
|
+
|
|
69
|
+
## Adding encoder commands with AI helpers
|
|
70
|
+
|
|
71
|
+
Two interactive guides exist to speed up encoder additions:
|
|
72
|
+
|
|
73
|
+
- `add-encoder-command-existing.md`: walks through adding commands to an existing device class (prompts for command names, params, BaseCommand payloads, schema updates, mixins, and exclusions).
|
|
74
|
+
- `add-encoder-command-new.md`: guides creating a brand-new device class, wiring it into `CommandBuilder`, and adding schemas/types and mixins.
|
|
75
|
+
|
|
76
|
+
Both scripts explain the expected file locations (`src/encoders`, `src/encoders/types/schemas.ts`), import style (`@/...`), and validation patterns (Zod + `CustomError`). Use them as a step-by-step checklist.
|
|
@@ -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,wCAoJvD,CAAA"}
|
|
@@ -15,44 +15,91 @@ const multisensorPayloadParser = (hexData) => {
|
|
|
15
15
|
if (!bytes || !bytes.length)
|
|
16
16
|
return;
|
|
17
17
|
const handleKeepAliveData = (barr) => {
|
|
18
|
-
//
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
//
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
18
|
+
// Verify it's a keepalive message (command byte should be 0x82)
|
|
19
|
+
if (barr[0] !== 0x82 && barr[0] !== 0x81) {
|
|
20
|
+
throw new Error('Not a keepalive message');
|
|
21
|
+
}
|
|
22
|
+
// Byte 2, bit 0 and Byte 3: Average temperature
|
|
23
|
+
// Formula: Average temperature, [°C] = [8:0] / 10
|
|
24
|
+
// Extract bit 0 from byte 2 for the higher bit (bit 8)
|
|
25
|
+
const avgTempHighBit = (barr[2] & 0x01) << 8;
|
|
26
|
+
// Use all bits from byte 3 for the lower bits (bits 7:0)
|
|
27
|
+
const avgTempLowBits = barr[3];
|
|
28
|
+
// Combine to get the full 9-bit temperature value
|
|
29
|
+
const avgTempRaw = avgTempHighBit | avgTempLowBits;
|
|
30
|
+
const avgTempC = Number((avgTempRaw / 10).toFixed(1));
|
|
31
|
+
// Calculate min and max temperature based on deltas
|
|
32
|
+
let minTempC = null;
|
|
33
|
+
let maxTempC = null;
|
|
34
|
+
// Byte 1, bits 6:0: Delta temperature min in °C
|
|
35
|
+
// Formula: ΔT min, [°C] = [6:0] / 10
|
|
36
|
+
if ((barr[1] & 0x7f) !== 0xff) {
|
|
37
|
+
// Check if field is used (not 0xFF)
|
|
38
|
+
const deltaMin = Number(((barr[1] & 0x7f) / 10).toFixed(1));
|
|
39
|
+
minTempC = Number((avgTempC - deltaMin).toFixed(1));
|
|
40
|
+
}
|
|
41
|
+
// Byte 2, bits 7:1: Delta temperature max in °C
|
|
42
|
+
// Formula: ΔT max, [°C] = [7:1] / 10
|
|
43
|
+
if (((barr[2] >> 1) & 0x7f) !== 0xff) {
|
|
44
|
+
// Check if field is used (not 0xFF)
|
|
45
|
+
const deltaMax = Number((((barr[2] >> 1) & 0x7f) / 10).toFixed(1));
|
|
46
|
+
maxTempC = Number((avgTempC + deltaMax).toFixed(1));
|
|
47
|
+
}
|
|
48
|
+
// Byte 4: Relative Humidity data
|
|
49
|
+
// Formula: RH[%] = XX
|
|
50
|
+
const relativeHumidity = barr[4];
|
|
51
|
+
// Byte 5: Pressure (Atmospheric)
|
|
52
|
+
// Formula: Pressure (Atmospheric), [mb] = ((XX * 390) / 255) + 700
|
|
53
|
+
const pressureMbar = Number(((barr[5] * 390) / 255 + 700).toFixed(2));
|
|
54
|
+
// Byte 6: Static AQI
|
|
55
|
+
// Formula: Static AQI = (XX * 500) / 255
|
|
56
|
+
const staticAQI = Math.round((barr[6] * 500) / 255);
|
|
57
|
+
// Byte 7: eCO2
|
|
58
|
+
// Formula: eCO2, [ppm] = ((XX * 4600) / 255) + 400
|
|
59
|
+
const eCO2ppm = Number(((barr[7] * 4600) / 255 + 400).toFixed(2));
|
|
60
|
+
// Byte 8 & 9: bVOC data
|
|
61
|
+
// Byte 8 contains bits [15:8] of bVOC data
|
|
62
|
+
// Byte 9 contains bits [7:0] of bVOC data
|
|
63
|
+
// Formula: bVOC, [ppb] = [15:0]
|
|
64
|
+
const tvocRaw = (barr[8] << 8) | barr[9];
|
|
65
|
+
// Byte 10: Light level
|
|
66
|
+
// Formula: Light level, [Lux] = (XX * 1000) / 255
|
|
67
|
+
const lightLux = Math.round((barr[10] * 1000) / 255);
|
|
68
|
+
// Byte 11: Noise level, [dB]
|
|
69
|
+
const noiseDb = barr[11];
|
|
70
|
+
// Byte 12: PIR trigger count
|
|
71
|
+
const pirTriggerCount = barr[12];
|
|
72
|
+
// Byte 13: Battery Voltage
|
|
73
|
+
// Formula: Battery Voltage, [mV] = ((XX * 2200) / 255) + 1600
|
|
74
|
+
const deviceVoltageMv = Math.round((barr[13] * 2200) / 255 + 1600);
|
|
36
75
|
const deviceVoltage = Number((deviceVoltageMv / 1000).toFixed(2));
|
|
37
|
-
|
|
38
|
-
const
|
|
76
|
+
// Byte 14 - Bit positions for different flags and settings
|
|
77
|
+
const byte14 = barr[14];
|
|
78
|
+
// Bit 4: PIR sensor event flag
|
|
79
|
+
const pir = ((byte14 >> 4) & 0x01) === 1;
|
|
80
|
+
// Bit 3: Hall sensor event flag
|
|
81
|
+
const hallSensorEvent = ((byte14 >> 3) & 0x01) === 1;
|
|
82
|
+
// Bits 2:1: Static AQI accuracy
|
|
83
|
+
const staticAQIAccuracy = (byte14 >> 1) & 0x03;
|
|
84
|
+
// Bit 0: Device power source (0 - Battery, 1 - External)
|
|
85
|
+
const powerSourceStatus = byte14 & 0x01;
|
|
39
86
|
const keepaliveData = {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
87
|
+
averageTemperature: avgTempC,
|
|
88
|
+
minTemperature: minTempC,
|
|
89
|
+
maxTemperature: maxTempC,
|
|
43
90
|
relativeHumidity,
|
|
44
|
-
pressureMbar,
|
|
91
|
+
pressure: pressureMbar,
|
|
45
92
|
staticAQI,
|
|
46
|
-
eCO2ppm,
|
|
47
|
-
tvocRaw,
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
noiseDb,
|
|
93
|
+
eCO2: eCO2ppm,
|
|
94
|
+
bVOC: tvocRaw,
|
|
95
|
+
lightLevel: lightLux,
|
|
96
|
+
noiseLevel: noiseDb,
|
|
51
97
|
pirTriggerCount,
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
98
|
+
batteryVoltage: deviceVoltage,
|
|
99
|
+
pir,
|
|
100
|
+
hallSensorEvent,
|
|
101
|
+
staticAQIAccuracy,
|
|
102
|
+
powerSourceStatus,
|
|
56
103
|
};
|
|
57
104
|
Object.assign(deviceData, Object.assign({}, deviceData), Object.assign({}, keepaliveData));
|
|
58
105
|
};
|
|
@@ -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;IAC3D,MAAM,UAAU,GAA4B,EAAE,CAAA;IAE9C,IAAI,CAAC;QACJ,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,MAAM,KAAK,GAAG,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAM;QAEnC,MAAM,mBAAmB,GAAG,CAAC,IAAc,EAAE,EAAE;YAC9C,
|
|
1
|
+
{"version":3,"file":"multisensorPayloadParser.js","sourceRoot":"","sources":["../../../src/decoders/payloadParsers/multisensorPayloadParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ButtonCommands.test.d.ts","sourceRoot":"","sources":["../../src/encoders/ButtonCommands.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const encoders_1 = require("../encoders");
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
describe('ButtonCommands payload encoder', () => {
|
|
6
|
+
const commandBuilder = new encoders_1.CommandBuilder('mc_button');
|
|
7
|
+
test('SetSendEventLater encodes toggle flag', () => {
|
|
8
|
+
expect(commandBuilder.build('SetSendEventLater', { value: 1 })).toStrictEqual(new encoders_1.BaseCommand('SetSendEventLater', 0x1e, '01'));
|
|
9
|
+
});
|
|
10
|
+
test('ClearPressEventCounter encodes press count selector', () => {
|
|
11
|
+
expect(commandBuilder.build('ClearPressEventCounter', { value: 3 })).toStrictEqual(new encoders_1.BaseCommand('ClearPressEventCounter', 0x20, '03'));
|
|
12
|
+
});
|
|
13
|
+
test('RestartDevice emits restart command', () => {
|
|
14
|
+
expect(commandBuilder.build('RestartDevice')).toStrictEqual(new encoders_1.BaseCommand('RestartDevice', 0xa5));
|
|
15
|
+
});
|
|
16
|
+
test('Invalid SetSendEventLater value throws validation error', () => {
|
|
17
|
+
expect(() => commandBuilder.build('SetSendEventLater', { value: 2 })).toThrow(utils_1.CustomError);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=ButtonCommands.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ButtonCommands.test.js","sourceRoot":"","sources":["../../src/encoders/ButtonCommands.test.ts"],"names":[],"mappings":";;AAAA,yCAAwD;AACxD,mCAAqC;AAErC,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC/C,MAAM,cAAc,GAAG,IAAI,yBAAc,CAAC,WAAW,CAAC,CAAA;IAEtD,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAC5E,IAAI,sBAAW,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,CAChD,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CACjF,IAAI,sBAAW,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,CAAC,CACrD,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,sBAAW,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAA;IACpG,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAW,CAAC,CAAA;IAC3F,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChildLockCommands.test.d.ts","sourceRoot":"","sources":["../../src/encoders/ChildLockCommands.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const encoders_1 = require("../encoders");
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
describe('ChildLockCommands payload encoder', () => {
|
|
6
|
+
const commandBuilder = new encoders_1.CommandBuilder('vicki');
|
|
7
|
+
test('SetChildLock encodes enabled flag', () => {
|
|
8
|
+
expect(commandBuilder.build('SetChildLock', { enabled: true })).toStrictEqual(new encoders_1.BaseCommand('SetChildLock', 0x07, '01'));
|
|
9
|
+
});
|
|
10
|
+
test('SetChildLock encodes disabled flag', () => {
|
|
11
|
+
expect(commandBuilder.build('SetChildLock', { enabled: false })).toStrictEqual(new encoders_1.BaseCommand('SetChildLock', 0x07, '00'));
|
|
12
|
+
});
|
|
13
|
+
test('Invalid SetChildLock param throws validation error', () => {
|
|
14
|
+
expect(() => commandBuilder.build('SetChildLock', { enabled: 2 })).toThrow(utils_1.CustomError);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=ChildLockCommands.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChildLockCommands.test.js","sourceRoot":"","sources":["../../src/encoders/ChildLockCommands.test.ts"],"names":[],"mappings":";;AAAA,yCAAwD;AACxD,mCAAqC;AAErC,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAClD,MAAM,cAAc,GAAG,IAAI,yBAAc,CAAC,OAAO,CAAC,CAAA;IAElD,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa,CAC5E,IAAI,sBAAW,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,CAC3C,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,aAAa,CAC7E,IAAI,sBAAW,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,CAC3C,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,CAAuB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAW,CAAC,CAAA;IAC9G,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Co2DisplayCommands.test.d.ts","sourceRoot":"","sources":["../../src/encoders/Co2DisplayCommands.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const encoders_1 = require("../encoders");
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
describe('CO2DisplayCommands payload encoder', () => {
|
|
6
|
+
const commandBuilder = new encoders_1.CommandBuilder('co2_display');
|
|
7
|
+
test('SetCo2MeasurementBlindTime encodes time value', () => {
|
|
8
|
+
expect(commandBuilder.build('SetCo2MeasurementBlindTime', { time: 10 })).toStrictEqual(new encoders_1.BaseCommand('SetCo2MeasurementBlindTime', 0x81, '0A'));
|
|
9
|
+
});
|
|
10
|
+
test('SetCo2ImagesVisibility encodes chart/digital/emoji bits', () => {
|
|
11
|
+
expect(commandBuilder.build('SetCo2ImagesVisibility', { chart: true, digital_value: true, emoji: false })).toStrictEqual(new encoders_1.BaseCommand('SetCo2ImagesVisibility', 0x82, '06'));
|
|
12
|
+
expect(commandBuilder.build('SetCo2ImagesVisibility', { chart: false, digital_value: false, emoji: true })).toStrictEqual(new encoders_1.BaseCommand('SetCo2ImagesVisibility', 0x82, '01'));
|
|
13
|
+
});
|
|
14
|
+
test('Invalid SetCo2MeasurementBlindTime params throw validation error', () => {
|
|
15
|
+
expect(() => commandBuilder.build('SetCo2MeasurementBlindTime', { time: -1 })).toThrow(utils_1.CustomError);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=Co2DisplayCommands.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Co2DisplayCommands.test.js","sourceRoot":"","sources":["../../src/encoders/Co2DisplayCommands.test.ts"],"names":[],"mappings":";;AAAA,yCAAwD;AACxD,mCAAqC;AAErC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IACnD,MAAM,cAAc,GAAG,IAAI,yBAAc,CAAC,aAAa,CAAC,CAAA;IAExD,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CACrF,IAAI,sBAAW,CAAC,4BAA4B,EAAE,IAAI,EAAE,IAAI,CAAC,CACzD,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACpE,MAAM,CACL,cAAc,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAClG,CAAC,aAAa,CAAC,IAAI,sBAAW,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;QAEtE,MAAM,CACL,cAAc,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CACnG,CAAC,aAAa,CAAC,IAAI,sBAAW,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC7E,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAW,CAAC,CAAA;IACpG,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { BaseCommand } from '../encoders';
|
|
2
|
+
import { Co2CommonDisplayCommandTypes } from '../encoders/types';
|
|
1
3
|
export declare class Co2DisplayCommonCommands {
|
|
4
|
+
static setCo2ImagesVisibility(params: Co2CommonDisplayCommandTypes.SetCo2ImagesVisibilityParams): BaseCommand;
|
|
5
|
+
static getCo2ImagesVisibility(): BaseCommand;
|
|
2
6
|
}
|
|
3
7
|
//# sourceMappingURL=Co2DisplayCommonCommands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Co2DisplayCommonCommands.d.ts","sourceRoot":"","sources":["../../src/encoders/Co2DisplayCommonCommands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Co2DisplayCommonCommands.d.ts","sourceRoot":"","sources":["../../src/encoders/Co2DisplayCommonCommands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGxC,OAAO,EAAE,4BAA4B,EAAwB,MAAM,kBAAkB,CAAA;AAErF,qBAAa,wBAAwB;IACpC,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,4BAA4B,CAAC,4BAA4B;IAgC/F,MAAM,CAAC,sBAAsB;CAG7B"}
|
|
@@ -1,7 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Co2DisplayCommonCommands = void 0;
|
|
4
|
+
const encoders_1 = require("../encoders");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
const types_1 = require("../encoders/types");
|
|
4
8
|
class Co2DisplayCommonCommands {
|
|
9
|
+
static setCo2ImagesVisibility(params) {
|
|
10
|
+
try {
|
|
11
|
+
types_1.DeviceCommandSchemas.Co2CommonDisplayCommandSchemas.setCo2ImagesVisibility.parse(params);
|
|
12
|
+
const { chart, digital_value, emoji } = params;
|
|
13
|
+
const chartValue = chart ? 1 : 0;
|
|
14
|
+
const digitalValue = digital_value ? 1 : 0;
|
|
15
|
+
const emojiValue = emoji ? 1 : 0;
|
|
16
|
+
let bin = '00000000'.split('');
|
|
17
|
+
bin[7] = emojiValue.toString();
|
|
18
|
+
bin[6] = digitalValue.toString();
|
|
19
|
+
bin[5] = chartValue.toString();
|
|
20
|
+
const binValue = parseInt(bin.join(''), 2);
|
|
21
|
+
return new encoders_1.BaseCommand('SetCo2ImagesVisibility', 0x82, (0, utils_1.decToHex)(binValue));
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
if (e instanceof zod_1.ZodError) {
|
|
25
|
+
throw new utils_1.CustomError({
|
|
26
|
+
message: 'Zod validation error during SetCo2ImagesVisibility execution',
|
|
27
|
+
command: 'SetCo2ImagesVisibility',
|
|
28
|
+
originalError: e,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
throw new utils_1.CustomError({
|
|
33
|
+
message: 'Error during SetCo2ImagesVisibility execution',
|
|
34
|
+
command: 'SetCo2ImagesVisibility',
|
|
35
|
+
originalError: e,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
static getCo2ImagesVisibility() {
|
|
41
|
+
return new encoders_1.BaseCommand('GetCo2ImagesVisibility', 0x83);
|
|
42
|
+
}
|
|
5
43
|
}
|
|
6
44
|
exports.Co2DisplayCommonCommands = Co2DisplayCommonCommands;
|
|
7
45
|
//# sourceMappingURL=Co2DisplayCommonCommands.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Co2DisplayCommonCommands.js","sourceRoot":"","sources":["../../src/encoders/Co2DisplayCommonCommands.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"Co2DisplayCommonCommands.js","sourceRoot":"","sources":["../../src/encoders/Co2DisplayCommonCommands.ts"],"names":[],"mappings":";;;AAAA,yCAAwC;AACxC,6BAA8B;AAC9B,mCAA+C;AAC/C,4CAAqF;AAErF,MAAa,wBAAwB;IACpC,MAAM,CAAC,sBAAsB,CAAC,MAAiE;QAC9F,IAAI,CAAC;YACJ,4BAAoB,CAAC,8BAA8B,CAAC,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YACxF,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;YAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAChC,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAEhC,IAAI,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAA;YAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAA;YAChC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAA;YAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YAE1C,OAAO,IAAI,sBAAW,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAA,gBAAQ,EAAC,QAAQ,CAAC,CAAC,CAAA;QAC3E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,cAAQ,EAAE,CAAC;gBAC3B,MAAM,IAAI,mBAAW,CAAC;oBACrB,OAAO,EAAE,8DAA8D;oBACvE,OAAO,EAAE,wBAAwB;oBACjC,aAAa,EAAE,CAAC;iBAChB,CAAC,CAAA;YACH,CAAC;iBAAM,CAAC;gBACP,MAAM,IAAI,mBAAW,CAAC;oBACrB,OAAO,EAAE,+CAA+C;oBACxD,OAAO,EAAE,wBAAwB;oBACjC,aAAa,EAAE,CAAU;iBACzB,CAAC,CAAA;YACH,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,CAAC,sBAAsB;QAC5B,OAAO,IAAI,sBAAW,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAA;IACvD,CAAC;CACD;AApCD,4DAoCC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Co2DisplayLiteCommands.test.d.ts","sourceRoot":"","sources":["../../src/encoders/Co2DisplayLiteCommands.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const encoders_1 = require("../encoders");
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
describe('CO2DisplayLiteCommands payload encoder', () => {
|
|
6
|
+
const commandBuilder = new encoders_1.CommandBuilder('co2_display_lite');
|
|
7
|
+
test('SetCo2ImagesVisibility encodes digital and emoji bits', () => {
|
|
8
|
+
expect(commandBuilder.build('SetCo2ImagesVisibility', { digital_value: true, emoji: false, chart: false })).toStrictEqual(new encoders_1.BaseCommand('SetCo2ImagesVisibility', 0x82, '02'));
|
|
9
|
+
expect(commandBuilder.build('SetCo2ImagesVisibility', { digital_value: true, emoji: true, chart: false })).toStrictEqual(new encoders_1.BaseCommand('SetCo2ImagesVisibility', 0x82, '03'));
|
|
10
|
+
});
|
|
11
|
+
test('SetUplinkSendingOnButtonPress encodes toggle value', () => {
|
|
12
|
+
expect(commandBuilder.build('SetUplinkSendingOnButtonPress', { value: 1 })).toStrictEqual(new encoders_1.BaseCommand('SetUplinkSendingOnButtonPress', 0x2e, '01'));
|
|
13
|
+
});
|
|
14
|
+
test('RestartDevice emits restart command', () => {
|
|
15
|
+
expect(commandBuilder.build('RestartDevice')).toStrictEqual(new encoders_1.BaseCommand('RestartDevice', 0xa5));
|
|
16
|
+
});
|
|
17
|
+
test('Invalid SetUplinkSendingOnButtonPress params throw validation error', () => {
|
|
18
|
+
expect(() => commandBuilder.build('SetUplinkSendingOnButtonPress', { value: -1 })).toThrow(utils_1.CustomError);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=Co2DisplayLiteCommands.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Co2DisplayLiteCommands.test.js","sourceRoot":"","sources":["../../src/encoders/Co2DisplayLiteCommands.test.ts"],"names":[],"mappings":";;AAAA,yCAAwD;AACxD,mCAAqC;AAErC,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACvD,MAAM,cAAc,GAAG,IAAI,yBAAc,CAAC,kBAAkB,CAAC,CAAA;IAE7D,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAClE,MAAM,CACL,cAAc,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CACnG,CAAC,aAAa,CAAC,IAAI,sBAAW,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;QAEtE,MAAM,CACL,cAAc,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAClG,CAAC,aAAa,CAAC,IAAI,sBAAW,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CACxF,IAAI,sBAAW,CAAC,+BAA+B,EAAE,IAAI,EAAE,IAAI,CAAC,CAC5D,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,sBAAW,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAA;IACpG,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAChF,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAW,CAAC,CAAA;IACxG,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Co2PirLiteCommands.test.d.ts","sourceRoot":"","sources":["../../src/encoders/Co2PirLiteCommands.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const encoders_1 = require("../encoders");
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
describe('Co2PirLiteCommands payload encoder', () => {
|
|
6
|
+
const commandBuilder = new encoders_1.CommandBuilder('co2_pir_lite');
|
|
7
|
+
test('SetPIRSensorState encodes enabled flag', () => {
|
|
8
|
+
expect(commandBuilder.build('SetPIRSensorState', { state: 1 })).toStrictEqual(new encoders_1.BaseCommand('SetPIRSensorState', 0x36, '01'));
|
|
9
|
+
});
|
|
10
|
+
test('SetPIRSensorSensitivity encodes sensitivity value', () => {
|
|
11
|
+
expect(commandBuilder.build('SetPIRSensorSensitivity', { sensitivity: 64 })).toStrictEqual(new encoders_1.BaseCommand('SetPIRSensorSensitivity', 0x3e, '40'));
|
|
12
|
+
});
|
|
13
|
+
test('SetOccupancyTimeout encodes timeout into two bytes', () => {
|
|
14
|
+
expect(commandBuilder.build('SetOccupancyTimeout', { timeout: 60 })).toStrictEqual(new encoders_1.BaseCommand('SetOccupancyTimeout', 0x38, '003C'));
|
|
15
|
+
});
|
|
16
|
+
test('RestartDevice emits restart command', () => {
|
|
17
|
+
expect(commandBuilder.build('RestartDevice')).toStrictEqual(new encoders_1.BaseCommand('RestartDevice', 0xa5));
|
|
18
|
+
});
|
|
19
|
+
test('Invalid SetPIRSensorState throws validation error', () => {
|
|
20
|
+
expect(() => commandBuilder.build('SetPIRSensorState', { state: 2 })).toThrow(utils_1.CustomError);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=Co2PirLiteCommands.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Co2PirLiteCommands.test.js","sourceRoot":"","sources":["../../src/encoders/Co2PirLiteCommands.test.ts"],"names":[],"mappings":";;AAAA,yCAAwD;AACxD,mCAAqC;AAErC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IACnD,MAAM,cAAc,GAAG,IAAI,yBAAc,CAAC,cAAc,CAAC,CAAA;IAEzD,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAC5E,IAAI,sBAAW,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,CAChD,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CACzF,IAAI,sBAAW,CAAC,yBAAyB,EAAE,IAAI,EAAE,IAAI,CAAC,CACtD,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CACjF,IAAI,sBAAW,CAAC,qBAAqB,EAAE,IAAI,EAAE,MAAM,CAAC,CACpD,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,sBAAW,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAA;IACpG,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAW,CAAC,CAAA;IAC3F,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Co2SensorCommands.test.d.ts","sourceRoot":"","sources":["../../src/encoders/Co2SensorCommands.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const encoders_1 = require("../encoders");
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
describe('CO2SensorCommands payload encoder', () => {
|
|
6
|
+
const commandBuilder = new encoders_1.CommandBuilder('co2_sensor');
|
|
7
|
+
test('SetCo2BoundaryLevels encodes good/medium thresholds', () => {
|
|
8
|
+
expect(commandBuilder.build('SetCo2BoundaryLevels', { good_medium: 200, medium_bad: 250 })).toStrictEqual(new encoders_1.BaseCommand('SetCo2BoundaryLevels', 0x1e, '00C8', '00FA'));
|
|
9
|
+
});
|
|
10
|
+
test('SetCo2AutoZeroValue encodes ppm value', () => {
|
|
11
|
+
expect(commandBuilder.build('SetCo2AutoZeroValue', { ppm: 150 })).toStrictEqual(new encoders_1.BaseCommand('SetCo2AutoZeroValue', 0x20, '0096'));
|
|
12
|
+
});
|
|
13
|
+
test('SetNotifyPeriod encodes zone periods', () => {
|
|
14
|
+
expect(commandBuilder.build('SetNotifyPeriod', { good_zone: 10, medium_zone: 20, bad_zone: 30 })).toStrictEqual(new encoders_1.BaseCommand('SetNotifyPeriod', 0x22, '0A', '14', '1E'));
|
|
15
|
+
});
|
|
16
|
+
test('SetCo2MeasurementPeriod encodes zone periods', () => {
|
|
17
|
+
expect(commandBuilder.build('SetCo2MeasurementPeriod', { good_zone: 5, medium_zone: 15, bad_zone: 25 })).toStrictEqual(new encoders_1.BaseCommand('SetCo2MeasurementPeriod', 0x24, '05', '0F', '19'));
|
|
18
|
+
});
|
|
19
|
+
test('SetCo2AutoZeroPeriod encodes hours', () => {
|
|
20
|
+
expect(commandBuilder.build('SetCo2AutoZeroPeriod', { hours: 12 })).toStrictEqual(new encoders_1.BaseCommand('SetCo2AutoZeroPeriod', 0x2a, '0C'));
|
|
21
|
+
});
|
|
22
|
+
test('SetBuzzerNotification encodes durations and loud/silent intervals', () => {
|
|
23
|
+
expect(commandBuilder.build('SetBuzzerNotification', {
|
|
24
|
+
duration_good_beeping: 1,
|
|
25
|
+
duration_good_loud: 20,
|
|
26
|
+
duration_good_silent: 30,
|
|
27
|
+
duration_medium_beeping: 2,
|
|
28
|
+
duration_medium_loud: 40,
|
|
29
|
+
duration_medium_silent: 50,
|
|
30
|
+
duration_bad_beeping: 3,
|
|
31
|
+
duration_bad_loud: 60,
|
|
32
|
+
duration_bad_silent: 70,
|
|
33
|
+
})).toStrictEqual(new encoders_1.BaseCommand('SetBuzzerNotification', 0x26, '01', '02', '03', '02', '04', '05', '03', '06', '07'));
|
|
34
|
+
});
|
|
35
|
+
test('SetCo2Led encodes color and duration sequences', () => {
|
|
36
|
+
expect(commandBuilder.build('SetCo2Led', {
|
|
37
|
+
red_good: 1,
|
|
38
|
+
green_good: 2,
|
|
39
|
+
blue_good: 3,
|
|
40
|
+
duration_good: 50,
|
|
41
|
+
red_medium: 4,
|
|
42
|
+
green_medium: 5,
|
|
43
|
+
blue_medium: 6,
|
|
44
|
+
duration_medium: 60,
|
|
45
|
+
red_bad: 7,
|
|
46
|
+
green_bad: 8,
|
|
47
|
+
blue_bad: 9,
|
|
48
|
+
duration_bad: 70,
|
|
49
|
+
})).toStrictEqual(new encoders_1.BaseCommand('SetCo2Led', 0x28, '01', '02', '03', '0005', '04', '05', '06', '0006', '07', '08', '09', '0007'));
|
|
50
|
+
});
|
|
51
|
+
test('Invalid SetCo2BoundaryLevels throws validation error', () => {
|
|
52
|
+
expect(() => commandBuilder.build('SetCo2BoundaryLevels', { good_medium: 2000, medium_bad: 250 })).toThrow(utils_1.CustomError);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=Co2SensorCommands.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Co2SensorCommands.test.js","sourceRoot":"","sources":["../../src/encoders/Co2SensorCommands.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DisplayCommands.test.d.ts","sourceRoot":"","sources":["../../src/encoders/DisplayCommands.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const encoders_1 = require("../encoders");
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
describe('DisplayCommands payload encoder', () => {
|
|
6
|
+
const commandBuilder = new encoders_1.CommandBuilder('co2_display');
|
|
7
|
+
test('SetDisplayRefreshPeriod encodes period hours', () => {
|
|
8
|
+
expect(commandBuilder.build('SetDisplayRefreshPeriod', { period: 5 })).toStrictEqual(new encoders_1.BaseCommand('SetDisplayRefreshPeriod', 0x33, '05'));
|
|
9
|
+
});
|
|
10
|
+
test('SetDeepSleepMode encodes state flag', () => {
|
|
11
|
+
expect(commandBuilder.build('SetDeepSleepMode', { state: 1 })).toStrictEqual(new encoders_1.BaseCommand('SetDeepSleepMode', 0x3b, '01'));
|
|
12
|
+
});
|
|
13
|
+
test('SetHumidityVisibility encodes toggle', () => {
|
|
14
|
+
expect(commandBuilder.build('SetHumidityVisibility', { state: 0 })).toStrictEqual(new encoders_1.BaseCommand('SetHumidityVisibility', 0x42, '00'));
|
|
15
|
+
});
|
|
16
|
+
test('SetLightIntensityVisibility encodes toggle', () => {
|
|
17
|
+
expect(commandBuilder.build('SetLightIntensityVisibility', { state: 1 })).toStrictEqual(new encoders_1.BaseCommand('SetLightIntensityVisibility', 0x44, '01'));
|
|
18
|
+
});
|
|
19
|
+
test('SetCurrentTemperatureVisibility encodes toggle', () => {
|
|
20
|
+
expect(commandBuilder.build('SetCurrentTemperatureVisibility', { state: 1 })).toStrictEqual(new encoders_1.BaseCommand('SetCurrentTemperatureVisibility', 0x40, '01'));
|
|
21
|
+
});
|
|
22
|
+
test('Invalid SetDisplayRefreshPeriod throws validation error', () => {
|
|
23
|
+
expect(() => commandBuilder.build('SetDisplayRefreshPeriod', { period: 0 })).toThrow(utils_1.CustomError);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=DisplayCommands.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DisplayCommands.test.js","sourceRoot":"","sources":["../../src/encoders/DisplayCommands.test.ts"],"names":[],"mappings":";;AAAA,yCAAwD;AACxD,mCAAqC;AAErC,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAChD,MAAM,cAAc,GAAG,IAAI,yBAAc,CAAC,aAAa,CAAC,CAAA;IAExD,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CACnF,IAAI,sBAAW,CAAC,yBAAyB,EAAE,IAAI,EAAE,IAAI,CAAC,CACtD,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAC3E,IAAI,sBAAW,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,CAC/C,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAChF,IAAI,sBAAW,CAAC,uBAAuB,EAAE,IAAI,EAAE,IAAI,CAAC,CACpD,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CACtF,IAAI,sBAAW,CAAC,6BAA6B,EAAE,IAAI,EAAE,IAAI,CAAC,CAC1D,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAC1F,IAAI,sBAAW,CAAC,iCAAiC,EAAE,IAAI,EAAE,IAAI,CAAC,CAC9D,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAW,CAAC,CAAA;IAClG,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DskDeviceCommands.test.d.ts","sourceRoot":"","sources":["../../src/encoders/DskDeviceCommands.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const encoders_1 = require("../encoders");
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
describe('DskDeviceCommands payload encoder', () => {
|
|
6
|
+
const commandBuilder = new encoders_1.CommandBuilder('dsk_device');
|
|
7
|
+
test('SetVrvStatus encodes status flag', () => {
|
|
8
|
+
expect(commandBuilder.build('SetVrvStatus', { status: 1 })).toStrictEqual(new encoders_1.BaseCommand('SetVrvStatus', 0x1e, '01'));
|
|
9
|
+
});
|
|
10
|
+
test('SetVrvOnTime encodes seconds', () => {
|
|
11
|
+
expect(commandBuilder.build('SetVrvOnTime', { time: 300 })).toStrictEqual(new encoders_1.BaseCommand('SetVrvOnTime', 0x20, '012C'));
|
|
12
|
+
});
|
|
13
|
+
test('SetVrvOffTime encodes seconds', () => {
|
|
14
|
+
expect(commandBuilder.build('SetVrvOffTime', { time: 120 })).toStrictEqual(new encoders_1.BaseCommand('SetVrvOffTime', 0x21, '0078'));
|
|
15
|
+
});
|
|
16
|
+
test('Invalid SetVrvStatus params throw validation error', () => {
|
|
17
|
+
expect(() => commandBuilder.build('SetVrvStatus', { status: 'on' })).toThrow(utils_1.CustomError);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=DskDeviceCommands.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DskDeviceCommands.test.js","sourceRoot":"","sources":["../../src/encoders/DskDeviceCommands.test.ts"],"names":[],"mappings":";;AAAA,yCAAwD;AACxD,mCAAqC;AAErC,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAClD,MAAM,cAAc,GAAG,IAAI,yBAAc,CAAC,YAAY,CAAC,CAAA;IAEvD,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,sBAAW,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IACvH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,aAAa,CACxE,IAAI,sBAAW,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,CAC7C,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,aAAa,CACzE,IAAI,sBAAW,CAAC,eAAe,EAAE,IAAI,EAAE,MAAM,CAAC,CAC9C,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAyB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAW,CAAC,CAAA;IAC/G,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FanCoilThermostatCommands.test.d.ts","sourceRoot":"","sources":["../../src/encoders/FanCoilThermostatCommands.test.ts"],"names":[],"mappings":""}
|