mclimate-payload-helper 1.2.6 → 1.2.8
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 +240 -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 +31 -29
- 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 +26 -26
- 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/Co2DisplayLiteCommands.js +1 -1
- package/dist/encoders/Co2DisplayLiteCommands.js.map +1 -1
- package/dist/encoders/Co2PirLiteCommands.d.ts +6 -2
- package/dist/encoders/Co2PirLiteCommands.d.ts.map +1 -1
- package/dist/encoders/Co2PirLiteCommands.js +66 -13
- package/dist/encoders/Co2PirLiteCommands.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/HTPirLiteCommands.d.ts +6 -2
- package/dist/encoders/HTPirLiteCommands.d.ts.map +1 -1
- package/dist/encoders/HTPirLiteCommands.js +67 -18
- 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/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/schemas.d.ts +80 -170
- package/dist/encoders/types/schemas.d.ts.map +1 -1
- package/dist/encoders/types/schemas.js +30 -7
- package/dist/encoders/types/schemas.js.map +1 -1
- package/dist/test/payloadDecoders.test.js +54 -44
- package/dist/test/payloadDecoders.test.js.map +1 -1
- package/dist/test/payloadEncoders.test.js +50 -34
- package/dist/test/payloadEncoders.test.js.map +1 -1
- 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/package.json +13 -2
- package/src/decoders/commandsReadingHelper.ts +239 -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 +44 -40
- package/src/decoders/payloadParsers/htDisplayLitePayloadParser.ts +17 -17
- package/src/decoders/payloadParsers/htPirLitePayloadParser.ts +37 -35
- 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 +66 -15
- package/src/encoders/CommandBuilder.ts +5 -3
- package/src/encoders/HTPirLiteCommands.ts +81 -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 +51 -12
- package/src/test/payloadDecoders.test.ts +114 -99
- package/src/test/payloadEncoders.test.ts +111 -92
- package/src/utils/delMethods.ts +6 -3
- package/src/utils/mixin.ts +5 -2
package/.eslintrc.cjs
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** @type {import("eslint").Linter.Config} */
|
|
2
|
+
module.exports = {
|
|
3
|
+
root: true,
|
|
4
|
+
parser: '@typescript-eslint/parser',
|
|
5
|
+
parserOptions: {
|
|
6
|
+
project: './tsconfig.json',
|
|
7
|
+
tsconfigRootDir: __dirname,
|
|
8
|
+
},
|
|
9
|
+
env: {
|
|
10
|
+
node: true,
|
|
11
|
+
es2021: true,
|
|
12
|
+
jest: true,
|
|
13
|
+
},
|
|
14
|
+
plugins: ['@typescript-eslint', 'jest'],
|
|
15
|
+
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:jest/recommended', 'prettier'],
|
|
16
|
+
ignorePatterns: ['dist', 'node_modules', 'jest.config.ts'],
|
|
17
|
+
rules: {},
|
|
18
|
+
}
|
package/CLAUDE.md
CHANGED
|
@@ -5,17 +5,20 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|
|
5
5
|
## Common Development Commands
|
|
6
6
|
|
|
7
7
|
### Building the Package
|
|
8
|
+
|
|
8
9
|
```bash
|
|
9
10
|
npm run build # Compiles TypeScript and resolves path aliases
|
|
10
11
|
```
|
|
11
12
|
|
|
12
13
|
### Running Tests
|
|
14
|
+
|
|
13
15
|
```bash
|
|
14
16
|
npm test # Runs all tests
|
|
15
17
|
npm test -- [pattern] # Run specific test files
|
|
16
18
|
```
|
|
17
19
|
|
|
18
20
|
### Publishing
|
|
21
|
+
|
|
19
22
|
```bash
|
|
20
23
|
npm publish # Publishes to npm (runs build automatically via prepublishOnly)
|
|
21
24
|
```
|
|
@@ -25,12 +28,14 @@ npm publish # Publishes to npm (runs build automatically via prepublishOnly)
|
|
|
25
28
|
This is a TypeScript library for encoding and decoding payloads for MClimate IoT devices. The codebase is organized into three main areas:
|
|
26
29
|
|
|
27
30
|
### 1. Decoders (`src/decoders/`)
|
|
31
|
+
|
|
28
32
|
- **Purpose**: Parse incoming device payloads (hex strings) into structured data
|
|
29
33
|
- **Entry Point**: `uplinkPayloadParser` in `src/decoders/payloadParsers/uplinkPayloadParser.ts`
|
|
30
34
|
- **Device Parsers**: Individual parser classes in `src/decoders/payloadParsers/` (e.g., `VickiPayloadParser`, `HTSensorPayloadParser`)
|
|
31
35
|
- **Command Reading**: `commandsReadingHelper.ts` handles parsing of command responses
|
|
32
36
|
|
|
33
37
|
### 2. Encoders (`src/encoders/`)
|
|
38
|
+
|
|
34
39
|
- **Purpose**: Build commands to send to devices
|
|
35
40
|
- **Entry Point**: `CommandBuilder` class that routes to device-specific command classes
|
|
36
41
|
- **Command Classes**: Each device has its own command class (e.g., `VickiCommands`, `HTSensorCommands`)
|
|
@@ -38,6 +43,7 @@ This is a TypeScript library for encoding and decoding payloads for MClimate IoT
|
|
|
38
43
|
- **Schemas**: Command validation schemas in `src/encoders/types/schemas.ts`
|
|
39
44
|
|
|
40
45
|
### 3. Type System
|
|
46
|
+
|
|
41
47
|
- **Device Types**: Enumerated in `src/decoders/payloadParsers/types/allDevices.ts`
|
|
42
48
|
- **Path Aliases**: Uses `@/` prefix for absolute imports from `src/`
|
|
43
49
|
- **Zod Schemas**: Used for command parameter validation
|
|
@@ -45,6 +51,7 @@ This is a TypeScript library for encoding and decoding payloads for MClimate IoT
|
|
|
45
51
|
## Key Implementation Patterns
|
|
46
52
|
|
|
47
53
|
### Adding New Devices
|
|
54
|
+
|
|
48
55
|
1. Add device type to `DeviceType` enum
|
|
49
56
|
2. Create payload parser class and export it
|
|
50
57
|
3. Add parser case to `uplinkPayloadParser` switch
|
|
@@ -55,12 +62,14 @@ This is a TypeScript library for encoding and decoding payloads for MClimate IoT
|
|
|
55
62
|
6. Define Zod schema for command validation
|
|
56
63
|
|
|
57
64
|
### Command Structure
|
|
65
|
+
|
|
58
66
|
- Commands use hexadecimal encoding
|
|
59
67
|
- Each command extends `BaseCommand`
|
|
60
68
|
- Commands can be combined using `CommandBuilder.combine()`
|
|
61
69
|
- Mixins used for shared command sets (e.g., `TemperatureCommonCommands`)
|
|
62
70
|
|
|
63
71
|
### Testing
|
|
72
|
+
|
|
64
73
|
- Tests located in `src/test/`
|
|
65
74
|
- Separate test files for decoders and encoders
|
|
66
|
-
- Uses Jest with TypeScript support
|
|
75
|
+
- Uses Jest with TypeScript support
|
|
@@ -184,27 +184,27 @@ export namespace [YourDeviceCommandTypes] {
|
|
|
184
184
|
```typescript
|
|
185
185
|
/* --------------------------------------- CO2 PIR LITE COMMANDS --------------------------------------- */
|
|
186
186
|
const Co2PirLiteCommandSchemas = {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
187
|
+
...GeneralCommandSchemas,
|
|
188
|
+
...PIRCommandSchemas,
|
|
189
|
+
setUplinkSendingOnButtonPress: z.object({
|
|
190
|
+
value: z.number(),
|
|
191
|
+
}),
|
|
192
|
+
getUplinkSendingOnButtonPress: z.object({}),
|
|
193
|
+
restartDevice: z.object({}),
|
|
194
|
+
setCo2BoundaryLevels: z.object({
|
|
195
|
+
good_medium: z.number(),
|
|
196
|
+
medium_bad: z.number(),
|
|
197
|
+
}),
|
|
198
|
+
getCo2BoundaryLevels: z.object({}),
|
|
199
|
+
// ... more commands
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
export namespace Co2PirLiteCommandTypes {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
203
|
+
export type SetUplinkSendingOnButtonPressParams = z.infer<
|
|
204
|
+
typeof Co2PirLiteCommandSchemas.setUplinkSendingOnButtonPress
|
|
205
|
+
>
|
|
206
|
+
export type RestartDeviceParams = z.infer<typeof Co2PirLiteCommandSchemas.restartDevice>
|
|
207
|
+
export type SetCo2BoundaryLevelsParams = z.infer<typeof Co2PirLiteCommandSchemas.setCo2BoundaryLevels>
|
|
208
208
|
}
|
|
209
209
|
```
|
|
210
210
|
|
|
@@ -243,31 +243,31 @@ import { CustomError } from '@/utils'
|
|
|
243
243
|
import { MyDeviceCommandTypes, DeviceCommandSchemas } from '@/encoders/types'
|
|
244
244
|
|
|
245
245
|
export class MyDeviceCommands {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
246
|
+
static setTemperature(params: MyDeviceCommandTypes.SetTemperatureParams) {
|
|
247
|
+
try {
|
|
248
|
+
DeviceCommandSchemas.MyDeviceCommandSchemas.setTemperature.parse(params)
|
|
249
|
+
const { value } = params
|
|
250
|
+
return new BaseCommand('SetTemperature', 0x15, value)
|
|
251
|
+
} catch (e) {
|
|
252
|
+
if (e instanceof ZodError) {
|
|
253
|
+
throw new CustomError({
|
|
254
|
+
message: 'Zod validation error during SetTemperature execution',
|
|
255
|
+
command: 'SetTemperature',
|
|
256
|
+
originalError: e,
|
|
257
|
+
})
|
|
258
|
+
} else {
|
|
259
|
+
throw new CustomError({
|
|
260
|
+
message: 'Error during SetTemperature execution',
|
|
261
|
+
command: 'SetTemperature',
|
|
262
|
+
originalError: e as Error,
|
|
263
|
+
})
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
static getTemperature() {
|
|
269
|
+
return new BaseCommand('GetTemperature', 0x16)
|
|
270
|
+
}
|
|
271
271
|
}
|
|
272
272
|
```
|
|
273
273
|
|
|
@@ -276,21 +276,21 @@ export class MyDeviceCommands {
|
|
|
276
276
|
```typescript
|
|
277
277
|
/* --------------------------------------- MY DEVICE COMMANDS --------------------------------------- */
|
|
278
278
|
const MyDeviceCommandSchemas = {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
279
|
+
...GeneralCommandSchemas,
|
|
280
|
+
setTemperature: z.object({
|
|
281
|
+
value: z.number().min(-40).max(85),
|
|
282
|
+
}),
|
|
283
|
+
getTemperature: z.object({}),
|
|
284
284
|
}
|
|
285
285
|
|
|
286
286
|
export namespace MyDeviceCommandTypes {
|
|
287
|
-
|
|
287
|
+
export type SetTemperatureParams = z.infer<typeof MyDeviceCommandSchemas.setTemperature>
|
|
288
288
|
}
|
|
289
289
|
|
|
290
290
|
// Then add to the export at bottom:
|
|
291
291
|
export const DeviceCommandSchemas = {
|
|
292
|
-
|
|
293
|
-
|
|
292
|
+
// ... existing schemas
|
|
293
|
+
MyDeviceCommandSchemas,
|
|
294
294
|
}
|
|
295
295
|
```
|
|
296
296
|
|
|
@@ -230,27 +230,27 @@ export namespace [YourDeviceCommandTypes] {
|
|
|
230
230
|
```typescript
|
|
231
231
|
/* --------------------------------------- CO2 PIR LITE COMMANDS --------------------------------------- */
|
|
232
232
|
const Co2PirLiteCommandSchemas = {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
233
|
+
...GeneralCommandSchemas,
|
|
234
|
+
...PIRCommandSchemas,
|
|
235
|
+
setUplinkSendingOnButtonPress: z.object({
|
|
236
|
+
value: z.number(),
|
|
237
|
+
}),
|
|
238
|
+
getUplinkSendingOnButtonPress: z.object({}),
|
|
239
|
+
restartDevice: z.object({}),
|
|
240
|
+
setCo2BoundaryLevels: z.object({
|
|
241
|
+
good_medium: z.number(),
|
|
242
|
+
medium_bad: z.number(),
|
|
243
|
+
}),
|
|
244
|
+
getCo2BoundaryLevels: z.object({}),
|
|
245
|
+
// ... more commands
|
|
246
246
|
}
|
|
247
247
|
|
|
248
248
|
export namespace Co2PirLiteCommandTypes {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
249
|
+
export type SetUplinkSendingOnButtonPressParams = z.infer<
|
|
250
|
+
typeof Co2PirLiteCommandSchemas.setUplinkSendingOnButtonPress
|
|
251
|
+
>
|
|
252
|
+
export type RestartDeviceParams = z.infer<typeof Co2PirLiteCommandSchemas.restartDevice>
|
|
253
|
+
export type SetCo2BoundaryLevelsParams = z.infer<typeof Co2PirLiteCommandSchemas.setCo2BoundaryLevels>
|
|
254
254
|
}
|
|
255
255
|
```
|
|
256
256
|
|
|
@@ -293,31 +293,31 @@ import { CustomError } from '@/utils'
|
|
|
293
293
|
import { MyDeviceCommandTypes, DeviceCommandSchemas } from '@/encoders/types'
|
|
294
294
|
|
|
295
295
|
export class MyDeviceCommands {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
296
|
+
static setTemperature(params: MyDeviceCommandTypes.SetTemperatureParams) {
|
|
297
|
+
try {
|
|
298
|
+
DeviceCommandSchemas.MyDeviceCommandSchemas.setTemperature.parse(params)
|
|
299
|
+
const { value } = params
|
|
300
|
+
return new BaseCommand('SetTemperature', 0x15, value)
|
|
301
|
+
} catch (e) {
|
|
302
|
+
if (e instanceof ZodError) {
|
|
303
|
+
throw new CustomError({
|
|
304
|
+
message: 'Zod validation error during SetTemperature execution',
|
|
305
|
+
command: 'SetTemperature',
|
|
306
|
+
originalError: e,
|
|
307
|
+
})
|
|
308
|
+
} else {
|
|
309
|
+
throw new CustomError({
|
|
310
|
+
message: 'Error during SetTemperature execution',
|
|
311
|
+
command: 'SetTemperature',
|
|
312
|
+
originalError: e as Error,
|
|
313
|
+
})
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
static getTemperature() {
|
|
319
|
+
return new BaseCommand('GetTemperature', 0x16)
|
|
320
|
+
}
|
|
321
321
|
}
|
|
322
322
|
```
|
|
323
323
|
|
|
@@ -326,21 +326,21 @@ export class MyDeviceCommands {
|
|
|
326
326
|
```typescript
|
|
327
327
|
/* --------------------------------------- MY DEVICE COMMANDS --------------------------------------- */
|
|
328
328
|
const MyDeviceCommandSchemas = {
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
329
|
+
...GeneralCommandSchemas,
|
|
330
|
+
setTemperature: z.object({
|
|
331
|
+
value: z.number().min(-40).max(85),
|
|
332
|
+
}),
|
|
333
|
+
getTemperature: z.object({}),
|
|
334
334
|
}
|
|
335
335
|
|
|
336
336
|
export namespace MyDeviceCommandTypes {
|
|
337
|
-
|
|
337
|
+
export type SetTemperatureParams = z.infer<typeof MyDeviceCommandSchemas.setTemperature>
|
|
338
338
|
}
|
|
339
339
|
|
|
340
340
|
// Then add to the export at bottom:
|
|
341
341
|
export const DeviceCommandSchemas = {
|
|
342
|
-
|
|
343
|
-
|
|
342
|
+
// ... existing schemas
|
|
343
|
+
MyDeviceCommandSchemas,
|
|
344
344
|
}
|
|
345
345
|
```
|
|
346
346
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commandsReadingHelper.d.ts","sourceRoot":"","sources":["../../src/decoders/commandsReadingHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAG5D,eAAO,MAAM,qBAAqB,YAAa,MAAM,iBAAiB,MAAM,cAAc,UAAU,
|
|
1
|
+
{"version":3,"file":"commandsReadingHelper.d.ts","sourceRoot":"","sources":["../../src/decoders/commandsReadingHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAG5D,eAAO,MAAM,qBAAqB,YAAa,MAAM,iBAAiB,MAAM,cAAc,UAAU,mBAiwFnG,CAAA"}
|