@zwave-js/cc 15.29.0 → 15.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/cc/AlarmSensorCC.d.ts +3 -1
- package/build/cjs/cc/AlarmSensorCC.js +22 -2
- package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
- package/build/cjs/cc/BarrierOperatorCC.d.ts +6 -3
- package/build/cjs/cc/BarrierOperatorCC.js +40 -6
- package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
- package/build/cjs/cc/CentralSceneCC.d.ts +4 -1
- package/build/cjs/cc/CentralSceneCC.js +34 -2
- package/build/cjs/cc/CentralSceneCC.js.map +2 -2
- package/build/cjs/cc/ClimateControlScheduleCC.d.ts +6 -3
- package/build/cjs/cc/ClimateControlScheduleCC.js +54 -6
- package/build/cjs/cc/ClimateControlScheduleCC.js.map +2 -2
- package/build/cjs/cc/ClockCC.d.ts +2 -1
- package/build/cjs/cc/ClockCC.js +19 -2
- package/build/cjs/cc/ClockCC.js.map +2 -2
- package/build/cjs/cc/ConfigurationCC.d.ts +3 -2
- package/build/cjs/cc/ConfigurationCC.js +61 -4
- package/build/cjs/cc/ConfigurationCC.js.map +2 -2
- package/build/cjs/cc/DoorLockLoggingCC.d.ts +3 -1
- package/build/cjs/cc/DoorLockLoggingCC.js +35 -2
- package/build/cjs/cc/DoorLockLoggingCC.js.map +2 -2
- package/build/cjs/cc/EntryControlCC.d.ts +5 -1
- package/build/cjs/cc/EntryControlCC.js +57 -2
- package/build/cjs/cc/EntryControlCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlModeCC.d.ts +3 -1
- package/build/cjs/cc/HumidityControlModeCC.js +14 -2
- package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlOperatingStateCC.d.ts +3 -1
- package/build/cjs/cc/HumidityControlOperatingStateCC.js +4 -0
- package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlSetpointCC.d.ts +8 -4
- package/build/cjs/cc/HumidityControlSetpointCC.js +51 -8
- package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
- package/build/cjs/cc/IrrigationCC.d.ts +15 -9
- package/build/cjs/cc/IrrigationCC.js +260 -24
- package/build/cjs/cc/IrrigationCC.js.map +2 -2
- package/build/cjs/cc/LanguageCC.d.ts +2 -1
- package/build/cjs/cc/LanguageCC.js +18 -2
- package/build/cjs/cc/LanguageCC.js.map +2 -2
- package/build/cjs/cc/MultiChannelCC.d.ts +2 -1
- package/build/cjs/cc/MultiChannelCC.js +14 -2
- package/build/cjs/cc/MultiChannelCC.js.map +2 -2
- package/build/cjs/cc/SceneActuatorConfigurationCC.d.ts +3 -2
- package/build/cjs/cc/SceneActuatorConfigurationCC.js +38 -5
- package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +2 -2
- package/build/cjs/cc/SceneControllerConfigurationCC.d.ts +3 -2
- package/build/cjs/cc/SceneControllerConfigurationCC.js +25 -4
- package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
- package/build/cjs/cc/ThermostatFanModeCC.d.ts +3 -1
- package/build/cjs/cc/ThermostatFanModeCC.js +17 -2
- package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
- package/build/cjs/cc/ThermostatFanStateCC.d.ts +3 -1
- package/build/cjs/cc/ThermostatFanStateCC.js +4 -0
- package/build/cjs/cc/ThermostatFanStateCC.js.map +2 -2
- package/build/cjs/cc/ThermostatModeCC.js +2 -2
- package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
- package/build/cjs/cc/TimeCC.d.ts +1 -1
- package/build/cjs/cc/TimeCC.js +11 -2
- package/build/cjs/cc/TimeCC.js.map +2 -2
- package/build/cjs/cc/UserCodeCC.d.ts +2 -1
- package/build/cjs/cc/UserCodeCC.js +31 -2
- package/build/cjs/cc/UserCodeCC.js.map +2 -2
- package/build/cjs/cc/VersionCC.d.ts +1 -0
- package/build/cjs/cc/VersionCC.js +32 -0
- package/build/cjs/cc/VersionCC.js.map +2 -2
- package/build/cjs/cc/WakeUpCC.d.ts +2 -0
- package/build/cjs/cc/WakeUpCC.js +14 -0
- package/build/cjs/cc/WakeUpCC.js.map +2 -2
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.d.ts +2 -1
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +30 -2
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +2 -2
- package/build/esm/cc/AlarmSensorCC.d.ts +3 -1
- package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
- package/build/esm/cc/AlarmSensorCC.js +25 -7
- package/build/esm/cc/AlarmSensorCC.js.map +1 -1
- package/build/esm/cc/BarrierOperatorCC.d.ts +6 -3
- package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
- package/build/esm/cc/BarrierOperatorCC.js +45 -18
- package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
- package/build/esm/cc/CentralSceneCC.d.ts +4 -1
- package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
- package/build/esm/cc/CentralSceneCC.js +35 -6
- package/build/esm/cc/CentralSceneCC.js.map +1 -1
- package/build/esm/cc/ClimateControlScheduleCC.d.ts +6 -3
- package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
- package/build/esm/cc/ClimateControlScheduleCC.js +57 -16
- package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
- package/build/esm/cc/ClockCC.d.ts +2 -1
- package/build/esm/cc/ClockCC.d.ts.map +1 -1
- package/build/esm/cc/ClockCC.js +20 -7
- package/build/esm/cc/ClockCC.js.map +1 -1
- package/build/esm/cc/ConfigurationCC.d.ts +3 -2
- package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/ConfigurationCC.js +63 -12
- package/build/esm/cc/ConfigurationCC.js.map +1 -1
- package/build/esm/cc/DoorLockLoggingCC.d.ts +3 -1
- package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
- package/build/esm/cc/DoorLockLoggingCC.js +39 -5
- package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
- package/build/esm/cc/EntryControlCC.d.ts +5 -1
- package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
- package/build/esm/cc/EntryControlCC.js +64 -7
- package/build/esm/cc/EntryControlCC.js.map +1 -1
- package/build/esm/cc/HumidityControlModeCC.d.ts +3 -1
- package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlModeCC.js +15 -7
- package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.d.ts +3 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.js +5 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
- package/build/esm/cc/HumidityControlSetpointCC.d.ts +8 -4
- package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlSetpointCC.js +52 -25
- package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
- package/build/esm/cc/IrrigationCC.d.ts +15 -9
- package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
- package/build/esm/cc/IrrigationCC.js +268 -61
- package/build/esm/cc/IrrigationCC.js.map +1 -1
- package/build/esm/cc/LanguageCC.d.ts +2 -1
- package/build/esm/cc/LanguageCC.d.ts.map +1 -1
- package/build/esm/cc/LanguageCC.js +18 -6
- package/build/esm/cc/LanguageCC.js.map +1 -1
- package/build/esm/cc/MultiChannelCC.d.ts +2 -1
- package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
- package/build/esm/cc/MultiChannelCC.js +15 -7
- package/build/esm/cc/MultiChannelCC.js.map +1 -1
- package/build/esm/cc/SceneActuatorConfigurationCC.d.ts +3 -2
- package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneActuatorConfigurationCC.js +39 -13
- package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.d.ts +3 -2
- package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.js +25 -12
- package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.d.ts +3 -1
- package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.js +18 -7
- package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanStateCC.d.ts +3 -1
- package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatFanStateCC.js +5 -1
- package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
- package/build/esm/cc/ThermostatModeCC.js +2 -2
- package/build/esm/cc/ThermostatModeCC.js.map +1 -1
- package/build/esm/cc/TimeCC.d.ts +1 -1
- package/build/esm/cc/TimeCC.d.ts.map +1 -1
- package/build/esm/cc/TimeCC.js +12 -7
- package/build/esm/cc/TimeCC.js.map +1 -1
- package/build/esm/cc/UserCodeCC.d.ts +2 -1
- package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
- package/build/esm/cc/UserCodeCC.js +31 -6
- package/build/esm/cc/UserCodeCC.js.map +1 -1
- package/build/esm/cc/VersionCC.d.ts +1 -0
- package/build/esm/cc/VersionCC.d.ts.map +1 -1
- package/build/esm/cc/VersionCC.js +34 -0
- package/build/esm/cc/VersionCC.js.map +1 -1
- package/build/esm/cc/WakeUpCC.d.ts +2 -0
- package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
- package/build/esm/cc/WakeUpCC.js +14 -0
- package/build/esm/cc/WakeUpCC.js.map +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts +2 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js +34 -4
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
- package/package.json +2 -2
|
@@ -24,6 +24,7 @@ export declare class DoorLockLoggingCCRecordsSupportedReport extends DoorLockLog
|
|
|
24
24
|
constructor(options: WithAddress<DoorLockLoggingCCRecordsSupportedReportOptions>);
|
|
25
25
|
static from(raw: CCRaw, ctx: CCParsingContext): DoorLockLoggingCCRecordsSupportedReport;
|
|
26
26
|
readonly recordsCount: number;
|
|
27
|
+
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
27
28
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
28
29
|
}
|
|
29
30
|
export declare class DoorLockLoggingCCRecordsSupportedGet extends DoorLockLoggingCC {
|
|
@@ -37,6 +38,7 @@ export declare class DoorLockLoggingCCRecordReport extends DoorLockLoggingCC {
|
|
|
37
38
|
static from(raw: CCRaw, ctx: CCParsingContext): DoorLockLoggingCCRecordReport;
|
|
38
39
|
readonly recordNumber: number;
|
|
39
40
|
readonly record?: DoorLockLoggingRecord;
|
|
41
|
+
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
40
42
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
41
43
|
}
|
|
42
44
|
export interface DoorLockLoggingCCRecordGetOptions {
|
|
@@ -44,7 +46,7 @@ export interface DoorLockLoggingCCRecordGetOptions {
|
|
|
44
46
|
}
|
|
45
47
|
export declare class DoorLockLoggingCCRecordGet extends DoorLockLoggingCC {
|
|
46
48
|
constructor(options: WithAddress<DoorLockLoggingCCRecordGetOptions>);
|
|
47
|
-
static from(
|
|
49
|
+
static from(raw: CCRaw, ctx: CCParsingContext): DoorLockLoggingCCRecordGet;
|
|
48
50
|
recordNumber: number;
|
|
49
51
|
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
50
52
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
@@ -251,6 +251,10 @@ let DoorLockLoggingCCRecordsSupportedReport = (() => {
|
|
|
251
251
|
});
|
|
252
252
|
}
|
|
253
253
|
recordsCount;
|
|
254
|
+
serialize(ctx) {
|
|
255
|
+
this.payload = import_shared.Bytes.from([this.recordsCount]);
|
|
256
|
+
return super.serialize(ctx);
|
|
257
|
+
}
|
|
254
258
|
toLogEntry(ctx) {
|
|
255
259
|
return {
|
|
256
260
|
...super.toLogEntry(ctx),
|
|
@@ -351,6 +355,31 @@ let DoorLockLoggingCCRecordReport = (() => {
|
|
|
351
355
|
}
|
|
352
356
|
recordNumber;
|
|
353
357
|
record;
|
|
358
|
+
serialize(ctx) {
|
|
359
|
+
const code = typeof this.record?.userCode === "string" ? import_shared.Bytes.from(this.record.userCode, "utf8") : this.record?.userCode ?? new import_shared.Bytes(0);
|
|
360
|
+
if (code.length > 10) {
|
|
361
|
+
throw new import_core.ZWaveError("User code must not exceed 10 bytes", import_core.ZWaveErrorCodes.Argument_Invalid);
|
|
362
|
+
}
|
|
363
|
+
this.payload = new import_shared.Bytes(11 + code.length);
|
|
364
|
+
this.payload[0] = this.recordNumber;
|
|
365
|
+
if (this.record) {
|
|
366
|
+
const date = new Date(this.record.timestamp);
|
|
367
|
+
if (!Number.isFinite(date.getTime())) {
|
|
368
|
+
throw new import_core.ZWaveError("Invalid record timestamp", import_core.ZWaveErrorCodes.Argument_Invalid);
|
|
369
|
+
}
|
|
370
|
+
this.payload.writeUInt16BE(date.getFullYear(), 1);
|
|
371
|
+
this.payload[3] = date.getMonth() + 1;
|
|
372
|
+
this.payload[4] = date.getDate();
|
|
373
|
+
this.payload[5] = import_Types.DoorLockLoggingRecordStatus.HoldsLegalData << 5 | date.getHours();
|
|
374
|
+
this.payload[6] = date.getMinutes();
|
|
375
|
+
this.payload[7] = date.getSeconds();
|
|
376
|
+
this.payload[8] = this.record.eventType;
|
|
377
|
+
this.payload[9] = this.record.userId ?? 0;
|
|
378
|
+
this.payload[10] = code.length;
|
|
379
|
+
this.payload.set(code, 11);
|
|
380
|
+
}
|
|
381
|
+
return super.serialize(ctx);
|
|
382
|
+
}
|
|
354
383
|
toLogEntry(ctx) {
|
|
355
384
|
let message;
|
|
356
385
|
if (!this.record) {
|
|
@@ -406,8 +435,12 @@ let DoorLockLoggingCCRecordGet = (() => {
|
|
|
406
435
|
super(options);
|
|
407
436
|
this.recordNumber = options.recordNumber;
|
|
408
437
|
}
|
|
409
|
-
static from(
|
|
410
|
-
|
|
438
|
+
static from(raw, ctx) {
|
|
439
|
+
(0, import_core.validatePayload)(raw.payload.length >= 1);
|
|
440
|
+
return new this({
|
|
441
|
+
nodeId: ctx.sourceNodeId,
|
|
442
|
+
recordNumber: raw.payload[0]
|
|
443
|
+
});
|
|
411
444
|
}
|
|
412
445
|
recordNumber;
|
|
413
446
|
serialize(ctx) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/DoorLockLoggingCC.ts"],
|
|
4
|
-
"sourcesContent": ["import * as __validateArgs from \"./DoorLockLoggingCC._validateArgs.js\";\nconst { validateArgs_DoorLockLoggingCCAPI_getRecord } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type WithAddress, ZWaveError, ZWaveErrorCodes, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, isPrintableASCII, num2hex } from \"@zwave-js/shared\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { DoorLockLoggingCommand, DoorLockLoggingEventType, type DoorLockLoggingRecord, DoorLockLoggingRecordStatus, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { userCodeToLogString } from \"./UserCodeCC.js\";\ninterface DateSegments {\n year: number;\n month: number;\n day: number;\n hour: number;\n minute: number;\n second: number;\n}\nfunction segmentsToDate(segments: DateSegments): Date {\n return new Date(segments.year, segments.month - 1, // JS months are 0-based.\n segments.day, segments.hour, segments.minute, segments.second);\n}\nconst eventTypeLabel = {\n LockCode: \"Locked via Access Code\",\n UnlockCode: \"Unlocked via Access Code\",\n LockButton: \"Locked via Lock Button\",\n UnlockButton: \"Unlocked via Unlock Button\",\n LockCodeOutOfSchedule: \"Out of Schedule Lock Attempt via Access Code\",\n UnlockCodeOutOfSchedule: \"Out of Schedule Unlock Attempt via Access Code\",\n IllegalCode: \"Illegal Access Code Entered\",\n LockManual: \"Manually Locked\",\n UnlockManual: \"Manually Unlocked\",\n LockAuto: \"Auto Locked\",\n UnlockAuto: \"Auto Unlocked\",\n LockRemoteCode: \"Locked via Remote Access Code\",\n UnlockRemoteCode: \"Unlocked via Remote Access Code\",\n LockRemote: \"Locked via Remote\",\n UnlockRemote: \"Unlocked via Remote\",\n LockRemoteCodeOutOfSchedule: \"Out of Schedule Lock Attempt via Remote Access Code\",\n UnlockRemoteCodeOutOfSchedule: \"Out of Schedule Unlock Attempt via Remote Access Code\",\n RemoteIllegalCode: \"Illegal Remote Access Code\",\n LockManual2: \"Manually Locked (2)\",\n UnlockManual2: \"Manually Unlocked (2)\",\n LockSecured: \"Lock Secured\",\n LockUnsecured: \"Lock Unsecured\",\n UserCodeAdded: \"User Code Added\",\n UserCodeDeleted: \"User Code Deleted\",\n AllUserCodesDeleted: \"All User Codes Deleted\",\n AdminCodeChanged: \"Admin Code Changed\",\n UserCodeChanged: \"User Code Changed\",\n LockReset: \"Lock Reset\",\n ConfigurationChanged: \"Configuration Changed\",\n LowBattery: \"Low Battery\",\n NewBattery: \"New Battery Installed\",\n Unknown: \"Unknown\",\n} as const;\nconst LATEST_RECORD_NUMBER_KEY = 0;\nimport { DoorLockLoggingCCValues } from \"./_CCValues.generated.js\";\nexport { DoorLockLoggingCCValues };\n@API(CommandClasses[\"Door Lock Logging\"])\nexport class DoorLockLoggingCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: DoorLockLoggingCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case DoorLockLoggingCommand.RecordsSupportedGet:\n case DoorLockLoggingCommand.RecordsSupportedReport:\n case DoorLockLoggingCommand.RecordGet:\n case DoorLockLoggingCommand.RecordReport:\n return true;\n }\n return super.supportsCommand(cmd);\n }\n public async getRecordsCount(): Promise<MaybeNotKnown<number>> {\n this.assertSupportsCommand(DoorLockLoggingCommand, DoorLockLoggingCommand.RecordsSupportedGet);\n const cc = new DoorLockLoggingCCRecordsSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<DoorLockLoggingCCRecordsSupportedReport>(cc, this.commandOptions);\n return response?.recordsCount;\n }\n /** Retrieves the specified audit record. Defaults to the latest one. */\n @validateArgs_DoorLockLoggingCCAPI_getRecord()\n public async getRecord(recordNumber: number = LATEST_RECORD_NUMBER_KEY): Promise<MaybeNotKnown<DoorLockLoggingRecord>> {\n this.assertSupportsCommand(DoorLockLoggingCommand, DoorLockLoggingCommand.RecordGet);\n const cc = new DoorLockLoggingCCRecordGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n recordNumber,\n });\n const response = await this.host.sendCommand<DoorLockLoggingCCRecordReport>(cc, this.commandOptions);\n return response?.record;\n }\n}\n@commandClass(CommandClasses[\"Door Lock Logging\"])\n@implementedVersion(1)\n@ccValues(DoorLockLoggingCCValues)\nexport class DoorLockLoggingCC extends CommandClass {\n declare ccCommand: DoorLockLoggingCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Door Lock Logging\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported number of records...\",\n direction: \"outbound\",\n });\n const recordsCount = await api.getRecordsCount();\n if (!recordsCount) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Door Lock Logging records count query timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n const recordsCountLogMessage = `supports ${recordsCount} record${recordsCount === 1 ? \"\" : \"s\"}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: recordsCountLogMessage,\n direction: \"inbound\",\n });\n }\n}\n// @publicAPI\nexport interface DoorLockLoggingCCRecordsSupportedReportOptions {\n recordsCount: number;\n}\n@CCCommand(DoorLockLoggingCommand.RecordsSupportedReport)\n@ccValueProperty(\"recordsCount\", DoorLockLoggingCCValues.recordsCount)\nexport class DoorLockLoggingCCRecordsSupportedReport extends DoorLockLoggingCC {\n public constructor(options: WithAddress<DoorLockLoggingCCRecordsSupportedReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.recordsCount = options.recordsCount;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockLoggingCCRecordsSupportedReport {\n validatePayload(raw.payload.length >= 1);\n const recordsCount = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n recordsCount,\n });\n }\n public readonly recordsCount: number;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported no. of records\": this.recordsCount,\n },\n };\n }\n}\nfunction eventTypeToLabel(eventType: DoorLockLoggingEventType): string {\n return ((eventTypeLabel as any)[DoorLockLoggingEventType[eventType]]\n ?? `Unknown ${num2hex(eventType)}`);\n}\n@CCCommand(DoorLockLoggingCommand.RecordsSupportedGet)\n@expectedCCResponse(DoorLockLoggingCCRecordsSupportedReport)\nexport class DoorLockLoggingCCRecordsSupportedGet extends DoorLockLoggingCC {\n}\n// @publicAPI\nexport interface DoorLockLoggingCCRecordReportOptions {\n recordNumber: number;\n record?: DoorLockLoggingRecord;\n}\n@CCCommand(DoorLockLoggingCommand.RecordReport)\nexport class DoorLockLoggingCCRecordReport extends DoorLockLoggingCC {\n public constructor(options: WithAddress<DoorLockLoggingCCRecordReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.recordNumber = options.recordNumber;\n this.record = options.record;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockLoggingCCRecordReport {\n validatePayload(raw.payload.length >= 11);\n const recordNumber = raw.payload[0];\n const recordStatus = raw.payload[5] >>> 5;\n let record: DoorLockLoggingRecord | undefined;\n if (recordStatus !== DoorLockLoggingRecordStatus.Empty) {\n const dateSegments = {\n year: raw.payload.readUInt16BE(1),\n month: raw.payload[3],\n day: raw.payload[4],\n hour: raw.payload[5] & 0b11111,\n minute: raw.payload[6],\n second: raw.payload[7],\n };\n const eventType = raw.payload[8];\n const recordUserID = raw.payload[9];\n const userCodeLength = raw.payload[10];\n validatePayload(userCodeLength <= 10, raw.payload.length >= 11 + userCodeLength);\n const userCodeBuffer = raw.payload.subarray(11, 11 + userCodeLength);\n // See User Code CC for a detailed description. We try to parse the code as ASCII if possible\n // and fall back to a buffer otherwise.\n const userCodeString = userCodeBuffer.toString(\"utf8\");\n const userCode = isPrintableASCII(userCodeString)\n ? userCodeString\n : userCodeBuffer;\n record = {\n eventType: eventType,\n label: eventTypeToLabel(eventType),\n timestamp: segmentsToDate(dateSegments).toISOString(),\n userId: recordUserID,\n userCode,\n };\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n recordNumber,\n record,\n });\n }\n public readonly recordNumber: number;\n public readonly record?: DoorLockLoggingRecord;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n let message: MessageRecord;\n if (!this.record) {\n message = {\n \"record #\": `${this.recordNumber} (empty)`,\n };\n }\n else {\n message = {\n \"record #\": `${this.recordNumber}`,\n \"event type\": this.record.label,\n timestamp: this.record.timestamp,\n };\n if (this.record.userId) {\n message[\"user ID\"] = this.record.userId;\n }\n if (this.record.userCode) {\n message[\"user code\"] = userCodeToLogString(this.record.userCode);\n }\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface DoorLockLoggingCCRecordGetOptions {\n recordNumber: number;\n}\nfunction testResponseForDoorLockLoggingRecordGet(sent: DoorLockLoggingCCRecordGet, received: DoorLockLoggingCCRecordReport) {\n return (sent.recordNumber === LATEST_RECORD_NUMBER_KEY\n || sent.recordNumber === received.recordNumber);\n}\n@CCCommand(DoorLockLoggingCommand.RecordGet)\n@expectedCCResponse(DoorLockLoggingCCRecordReport, testResponseForDoorLockLoggingRecordGet)\nexport class DoorLockLoggingCCRecordGet extends DoorLockLoggingCC {\n public constructor(options: WithAddress<DoorLockLoggingCCRecordGetOptions>) {\n super(options);\n this.recordNumber = options.recordNumber;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): DoorLockLoggingCCRecordGet {\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new DoorLockLoggingCCRecordGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public recordNumber: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.recordNumber]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"record number\": this.recordNumber },\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import * as __validateArgs from \"./DoorLockLoggingCC._validateArgs.js\";\nconst { validateArgs_DoorLockLoggingCCAPI_getRecord } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type WithAddress, ZWaveError, ZWaveErrorCodes, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, isPrintableASCII, num2hex } from \"@zwave-js/shared\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { DoorLockLoggingCommand, DoorLockLoggingEventType, type DoorLockLoggingRecord, DoorLockLoggingRecordStatus, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { userCodeToLogString } from \"./UserCodeCC.js\";\ninterface DateSegments {\n year: number;\n month: number;\n day: number;\n hour: number;\n minute: number;\n second: number;\n}\nfunction segmentsToDate(segments: DateSegments): Date {\n return new Date(segments.year, segments.month - 1, // JS months are 0-based.\n segments.day, segments.hour, segments.minute, segments.second);\n}\nconst eventTypeLabel = {\n LockCode: \"Locked via Access Code\",\n UnlockCode: \"Unlocked via Access Code\",\n LockButton: \"Locked via Lock Button\",\n UnlockButton: \"Unlocked via Unlock Button\",\n LockCodeOutOfSchedule: \"Out of Schedule Lock Attempt via Access Code\",\n UnlockCodeOutOfSchedule: \"Out of Schedule Unlock Attempt via Access Code\",\n IllegalCode: \"Illegal Access Code Entered\",\n LockManual: \"Manually Locked\",\n UnlockManual: \"Manually Unlocked\",\n LockAuto: \"Auto Locked\",\n UnlockAuto: \"Auto Unlocked\",\n LockRemoteCode: \"Locked via Remote Access Code\",\n UnlockRemoteCode: \"Unlocked via Remote Access Code\",\n LockRemote: \"Locked via Remote\",\n UnlockRemote: \"Unlocked via Remote\",\n LockRemoteCodeOutOfSchedule: \"Out of Schedule Lock Attempt via Remote Access Code\",\n UnlockRemoteCodeOutOfSchedule: \"Out of Schedule Unlock Attempt via Remote Access Code\",\n RemoteIllegalCode: \"Illegal Remote Access Code\",\n LockManual2: \"Manually Locked (2)\",\n UnlockManual2: \"Manually Unlocked (2)\",\n LockSecured: \"Lock Secured\",\n LockUnsecured: \"Lock Unsecured\",\n UserCodeAdded: \"User Code Added\",\n UserCodeDeleted: \"User Code Deleted\",\n AllUserCodesDeleted: \"All User Codes Deleted\",\n AdminCodeChanged: \"Admin Code Changed\",\n UserCodeChanged: \"User Code Changed\",\n LockReset: \"Lock Reset\",\n ConfigurationChanged: \"Configuration Changed\",\n LowBattery: \"Low Battery\",\n NewBattery: \"New Battery Installed\",\n Unknown: \"Unknown\",\n} as const;\nconst LATEST_RECORD_NUMBER_KEY = 0;\nimport { DoorLockLoggingCCValues } from \"./_CCValues.generated.js\";\nexport { DoorLockLoggingCCValues };\n@API(CommandClasses[\"Door Lock Logging\"])\nexport class DoorLockLoggingCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: DoorLockLoggingCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case DoorLockLoggingCommand.RecordsSupportedGet:\n case DoorLockLoggingCommand.RecordsSupportedReport:\n case DoorLockLoggingCommand.RecordGet:\n case DoorLockLoggingCommand.RecordReport:\n return true;\n }\n return super.supportsCommand(cmd);\n }\n public async getRecordsCount(): Promise<MaybeNotKnown<number>> {\n this.assertSupportsCommand(DoorLockLoggingCommand, DoorLockLoggingCommand.RecordsSupportedGet);\n const cc = new DoorLockLoggingCCRecordsSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<DoorLockLoggingCCRecordsSupportedReport>(cc, this.commandOptions);\n return response?.recordsCount;\n }\n /** Retrieves the specified audit record. Defaults to the latest one. */\n @validateArgs_DoorLockLoggingCCAPI_getRecord()\n public async getRecord(recordNumber: number = LATEST_RECORD_NUMBER_KEY): Promise<MaybeNotKnown<DoorLockLoggingRecord>> {\n this.assertSupportsCommand(DoorLockLoggingCommand, DoorLockLoggingCommand.RecordGet);\n const cc = new DoorLockLoggingCCRecordGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n recordNumber,\n });\n const response = await this.host.sendCommand<DoorLockLoggingCCRecordReport>(cc, this.commandOptions);\n return response?.record;\n }\n}\n@commandClass(CommandClasses[\"Door Lock Logging\"])\n@implementedVersion(1)\n@ccValues(DoorLockLoggingCCValues)\nexport class DoorLockLoggingCC extends CommandClass {\n declare ccCommand: DoorLockLoggingCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Door Lock Logging\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported number of records...\",\n direction: \"outbound\",\n });\n const recordsCount = await api.getRecordsCount();\n if (!recordsCount) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Door Lock Logging records count query timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n const recordsCountLogMessage = `supports ${recordsCount} record${recordsCount === 1 ? \"\" : \"s\"}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: recordsCountLogMessage,\n direction: \"inbound\",\n });\n }\n}\n// @publicAPI\nexport interface DoorLockLoggingCCRecordsSupportedReportOptions {\n recordsCount: number;\n}\n@CCCommand(DoorLockLoggingCommand.RecordsSupportedReport)\n@ccValueProperty(\"recordsCount\", DoorLockLoggingCCValues.recordsCount)\nexport class DoorLockLoggingCCRecordsSupportedReport extends DoorLockLoggingCC {\n public constructor(options: WithAddress<DoorLockLoggingCCRecordsSupportedReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.recordsCount = options.recordsCount;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockLoggingCCRecordsSupportedReport {\n validatePayload(raw.payload.length >= 1);\n const recordsCount = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n recordsCount,\n });\n }\n public readonly recordsCount: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.recordsCount]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported no. of records\": this.recordsCount,\n },\n };\n }\n}\nfunction eventTypeToLabel(eventType: DoorLockLoggingEventType): string {\n return ((eventTypeLabel as any)[DoorLockLoggingEventType[eventType]]\n ?? `Unknown ${num2hex(eventType)}`);\n}\n@CCCommand(DoorLockLoggingCommand.RecordsSupportedGet)\n@expectedCCResponse(DoorLockLoggingCCRecordsSupportedReport)\nexport class DoorLockLoggingCCRecordsSupportedGet extends DoorLockLoggingCC {\n}\n// @publicAPI\nexport interface DoorLockLoggingCCRecordReportOptions {\n recordNumber: number;\n record?: DoorLockLoggingRecord;\n}\n@CCCommand(DoorLockLoggingCommand.RecordReport)\nexport class DoorLockLoggingCCRecordReport extends DoorLockLoggingCC {\n public constructor(options: WithAddress<DoorLockLoggingCCRecordReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.recordNumber = options.recordNumber;\n this.record = options.record;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockLoggingCCRecordReport {\n validatePayload(raw.payload.length >= 11);\n const recordNumber = raw.payload[0];\n const recordStatus = raw.payload[5] >>> 5;\n let record: DoorLockLoggingRecord | undefined;\n if (recordStatus !== DoorLockLoggingRecordStatus.Empty) {\n const dateSegments = {\n year: raw.payload.readUInt16BE(1),\n month: raw.payload[3],\n day: raw.payload[4],\n hour: raw.payload[5] & 0b11111,\n minute: raw.payload[6],\n second: raw.payload[7],\n };\n const eventType = raw.payload[8];\n const recordUserID = raw.payload[9];\n const userCodeLength = raw.payload[10];\n validatePayload(userCodeLength <= 10, raw.payload.length >= 11 + userCodeLength);\n const userCodeBuffer = raw.payload.subarray(11, 11 + userCodeLength);\n // See User Code CC for a detailed description. We try to parse the code as ASCII if possible\n // and fall back to a buffer otherwise.\n const userCodeString = userCodeBuffer.toString(\"utf8\");\n const userCode = isPrintableASCII(userCodeString)\n ? userCodeString\n : userCodeBuffer;\n record = {\n eventType: eventType,\n label: eventTypeToLabel(eventType),\n timestamp: segmentsToDate(dateSegments).toISOString(),\n userId: recordUserID,\n userCode,\n };\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n recordNumber,\n record,\n });\n }\n public readonly recordNumber: number;\n public readonly record?: DoorLockLoggingRecord;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const code = typeof this.record?.userCode === \"string\"\n ? Bytes.from(this.record.userCode, \"utf8\")\n : (this.record?.userCode ?? new Bytes(0));\n if (code.length > 10) {\n throw new ZWaveError(\"User code must not exceed 10 bytes\", ZWaveErrorCodes.Argument_Invalid);\n }\n this.payload = new Bytes(11 + code.length);\n this.payload[0] = this.recordNumber;\n if (this.record) {\n const date = new Date(this.record.timestamp);\n if (!Number.isFinite(date.getTime())) {\n throw new ZWaveError(\"Invalid record timestamp\", ZWaveErrorCodes.Argument_Invalid);\n }\n this.payload.writeUInt16BE(date.getFullYear(), 1);\n this.payload[3] = date.getMonth() + 1;\n this.payload[4] = date.getDate();\n this.payload[5] =\n (DoorLockLoggingRecordStatus.HoldsLegalData << 5)\n | date.getHours();\n this.payload[6] = date.getMinutes();\n this.payload[7] = date.getSeconds();\n this.payload[8] = this.record.eventType;\n this.payload[9] = this.record.userId ?? 0;\n this.payload[10] = code.length;\n this.payload.set(code, 11);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n let message: MessageRecord;\n if (!this.record) {\n message = {\n \"record #\": `${this.recordNumber} (empty)`,\n };\n }\n else {\n message = {\n \"record #\": `${this.recordNumber}`,\n \"event type\": this.record.label,\n timestamp: this.record.timestamp,\n };\n if (this.record.userId) {\n message[\"user ID\"] = this.record.userId;\n }\n if (this.record.userCode) {\n message[\"user code\"] = userCodeToLogString(this.record.userCode);\n }\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface DoorLockLoggingCCRecordGetOptions {\n recordNumber: number;\n}\nfunction testResponseForDoorLockLoggingRecordGet(sent: DoorLockLoggingCCRecordGet, received: DoorLockLoggingCCRecordReport) {\n return (sent.recordNumber === LATEST_RECORD_NUMBER_KEY\n || sent.recordNumber === received.recordNumber);\n}\n@CCCommand(DoorLockLoggingCommand.RecordGet)\n@expectedCCResponse(DoorLockLoggingCCRecordReport, testResponseForDoorLockLoggingRecordGet)\nexport class DoorLockLoggingCCRecordGet extends DoorLockLoggingCC {\n public constructor(options: WithAddress<DoorLockLoggingCCRecordGetOptions>) {\n super(options);\n this.recordNumber = options.recordNumber;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockLoggingCCRecordGet {\n validatePayload(raw.payload.length >= 1);\n return new this({\n nodeId: ctx.sourceNodeId,\n recordNumber: raw.payload[0],\n });\n }\n public recordNumber: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.recordNumber]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"record number\": this.recordNumber },\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -34,6 +34,7 @@ export declare class EntryControlCCNotification extends EntryControlCC {
|
|
|
34
34
|
readonly dataType: EntryControlDataTypes;
|
|
35
35
|
readonly eventType: EntryControlEventTypes;
|
|
36
36
|
readonly eventData?: BytesView | string;
|
|
37
|
+
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
37
38
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
38
39
|
}
|
|
39
40
|
export interface EntryControlCCKeySupportedReportOptions {
|
|
@@ -43,6 +44,7 @@ export declare class EntryControlCCKeySupportedReport extends EntryControlCC {
|
|
|
43
44
|
constructor(options: WithAddress<EntryControlCCKeySupportedReportOptions>);
|
|
44
45
|
static from(raw: CCRaw, ctx: CCParsingContext): EntryControlCCKeySupportedReport;
|
|
45
46
|
readonly supportedKeys: readonly number[];
|
|
47
|
+
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
46
48
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
47
49
|
}
|
|
48
50
|
export declare class EntryControlCCKeySupportedGet extends EntryControlCC {
|
|
@@ -65,6 +67,7 @@ export declare class EntryControlCCEventSupportedReport extends EntryControlCC {
|
|
|
65
67
|
readonly maxKeyCacheSize: number;
|
|
66
68
|
readonly minKeyCacheTimeout: number;
|
|
67
69
|
readonly maxKeyCacheTimeout: number;
|
|
70
|
+
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
68
71
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
69
72
|
}
|
|
70
73
|
export declare class EntryControlCCEventSupportedGet extends EntryControlCC {
|
|
@@ -78,6 +81,7 @@ export declare class EntryControlCCConfigurationReport extends EntryControlCC {
|
|
|
78
81
|
static from(raw: CCRaw, ctx: CCParsingContext): EntryControlCCConfigurationReport;
|
|
79
82
|
readonly keyCacheSize: number;
|
|
80
83
|
readonly keyCacheTimeout: number;
|
|
84
|
+
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
81
85
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
82
86
|
}
|
|
83
87
|
export declare class EntryControlCCConfigurationGet extends EntryControlCC {
|
|
@@ -88,7 +92,7 @@ export interface EntryControlCCConfigurationSetOptions {
|
|
|
88
92
|
}
|
|
89
93
|
export declare class EntryControlCCConfigurationSet extends EntryControlCC {
|
|
90
94
|
constructor(options: WithAddress<EntryControlCCConfigurationSetOptions>);
|
|
91
|
-
static from(
|
|
95
|
+
static from(raw: CCRaw, ctx: CCParsingContext): EntryControlCCConfigurationSet;
|
|
92
96
|
readonly keyCacheSize: number;
|
|
93
97
|
readonly keyCacheTimeout: number;
|
|
94
98
|
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
@@ -367,6 +367,27 @@ let EntryControlCCNotification = (() => {
|
|
|
367
367
|
dataType;
|
|
368
368
|
eventType;
|
|
369
369
|
eventData;
|
|
370
|
+
serialize(ctx) {
|
|
371
|
+
let data = typeof this.eventData === "string" ? import_shared.Bytes.from(this.eventData, "ascii") : import_shared.Bytes.from(this.eventData ?? []);
|
|
372
|
+
if (data.length > 32 || this.dataType === import_Types.EntryControlDataTypes.MD5 && data.length !== 16) {
|
|
373
|
+
throw new import_core.ZWaveError("Invalid event data length", import_core.ZWaveErrorCodes.Argument_Invalid);
|
|
374
|
+
}
|
|
375
|
+
if (this.dataType === import_Types.EntryControlDataTypes.ASCII && data.length > 0) {
|
|
376
|
+
const padded = new import_shared.Bytes(Math.ceil(data.length / 16) * 16).fill(255);
|
|
377
|
+
padded.set(data);
|
|
378
|
+
data = padded;
|
|
379
|
+
}
|
|
380
|
+
this.payload = import_shared.Bytes.concat([
|
|
381
|
+
[
|
|
382
|
+
this.sequenceNumber,
|
|
383
|
+
this.dataType & 3,
|
|
384
|
+
this.eventType,
|
|
385
|
+
data.length
|
|
386
|
+
],
|
|
387
|
+
data
|
|
388
|
+
]);
|
|
389
|
+
return super.serialize(ctx);
|
|
390
|
+
}
|
|
370
391
|
toLogEntry(ctx) {
|
|
371
392
|
const message = {
|
|
372
393
|
"sequence number": this.sequenceNumber,
|
|
@@ -426,6 +447,11 @@ let EntryControlCCKeySupportedReport = (() => {
|
|
|
426
447
|
});
|
|
427
448
|
}
|
|
428
449
|
supportedKeys;
|
|
450
|
+
serialize(ctx) {
|
|
451
|
+
const mask = (0, import_core.encodeBitMask)(this.supportedKeys, void 0, 0);
|
|
452
|
+
this.payload = import_shared.Bytes.concat([[mask.length], mask]);
|
|
453
|
+
return super.serialize(ctx);
|
|
454
|
+
}
|
|
429
455
|
toLogEntry(ctx) {
|
|
430
456
|
return {
|
|
431
457
|
...super.toLogEntry(ctx),
|
|
@@ -540,6 +566,23 @@ let EntryControlCCEventSupportedReport = (() => {
|
|
|
540
566
|
maxKeyCacheSize;
|
|
541
567
|
minKeyCacheTimeout;
|
|
542
568
|
maxKeyCacheTimeout;
|
|
569
|
+
serialize(ctx) {
|
|
570
|
+
const dataTypes = (0, import_core.encodeBitMask)(this.supportedDataTypes, void 0, import_Types.EntryControlDataTypes.None);
|
|
571
|
+
const eventTypes = (0, import_core.encodeBitMask)(this.supportedEventTypes, void 0, import_Types.EntryControlEventTypes.Caching);
|
|
572
|
+
this.payload = import_shared.Bytes.concat([
|
|
573
|
+
[dataTypes.length],
|
|
574
|
+
dataTypes,
|
|
575
|
+
[eventTypes.length],
|
|
576
|
+
eventTypes,
|
|
577
|
+
[
|
|
578
|
+
this.minKeyCacheSize,
|
|
579
|
+
this.maxKeyCacheSize,
|
|
580
|
+
this.minKeyCacheTimeout,
|
|
581
|
+
this.maxKeyCacheTimeout
|
|
582
|
+
]
|
|
583
|
+
]);
|
|
584
|
+
return super.serialize(ctx);
|
|
585
|
+
}
|
|
543
586
|
toLogEntry(ctx) {
|
|
544
587
|
return {
|
|
545
588
|
...super.toLogEntry(ctx),
|
|
@@ -617,6 +660,10 @@ let EntryControlCCConfigurationReport = (() => {
|
|
|
617
660
|
}
|
|
618
661
|
keyCacheSize;
|
|
619
662
|
keyCacheTimeout;
|
|
663
|
+
serialize(ctx) {
|
|
664
|
+
this.payload = import_shared.Bytes.from([this.keyCacheSize, this.keyCacheTimeout]);
|
|
665
|
+
return super.serialize(ctx);
|
|
666
|
+
}
|
|
620
667
|
toLogEntry(ctx) {
|
|
621
668
|
return {
|
|
622
669
|
...super.toLogEntry(ctx),
|
|
@@ -677,8 +724,16 @@ let EntryControlCCConfigurationSet = (() => {
|
|
|
677
724
|
this.keyCacheSize = options.keyCacheSize;
|
|
678
725
|
this.keyCacheTimeout = options.keyCacheTimeout;
|
|
679
726
|
}
|
|
680
|
-
static from(
|
|
681
|
-
|
|
727
|
+
static from(raw, ctx) {
|
|
728
|
+
(0, import_core.validatePayload)(raw.payload.length >= 2);
|
|
729
|
+
const keyCacheSize = raw.payload[0];
|
|
730
|
+
(0, import_core.validatePayload)(keyCacheSize >= 1 && keyCacheSize <= 32);
|
|
731
|
+
const keyCacheTimeout = raw.payload[1];
|
|
732
|
+
return new this({
|
|
733
|
+
nodeId: ctx.sourceNodeId,
|
|
734
|
+
keyCacheSize,
|
|
735
|
+
keyCacheTimeout
|
|
736
|
+
});
|
|
682
737
|
}
|
|
683
738
|
keyCacheSize;
|
|
684
739
|
keyCacheTimeout;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/EntryControlCC.ts"],
|
|
4
|
-
"sourcesContent": ["import * as __validateArgs from \"./EntryControlCC._validateArgs.js\";\nconst { validateArgs_EntryControlCCAPI_setConfiguration } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, getCCName, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, type BytesView, buffer2hex, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { EntryControlCommand, EntryControlDataTypes, EntryControlEventTypes, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport * as ccUtils from \"../lib/utils.js\";\nimport { EntryControlCCValues } from \"./_CCValues.generated.js\";\nexport { EntryControlCCValues };\n@API(CommandClasses[\"Entry Control\"])\nexport class EntryControlCCAPI extends CCAPI {\n public supportsCommand(cmd: EntryControlCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case EntryControlCommand.KeySupportedGet:\n case EntryControlCommand.EventSupportedGet:\n case EntryControlCommand.ConfigurationGet:\n return this.isSinglecast();\n case EntryControlCommand.ConfigurationSet:\n return true;\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getSupportedKeys() {\n this.assertSupportsCommand(EntryControlCommand, EntryControlCommand.KeySupportedGet);\n const cc = new EntryControlCCKeySupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<EntryControlCCKeySupportedReport>(cc, this.commandOptions);\n return response?.supportedKeys;\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getEventCapabilities() {\n this.assertSupportsCommand(EntryControlCommand, EntryControlCommand.EventSupportedGet);\n const cc = new EntryControlCCEventSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<EntryControlCCEventSupportedReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"supportedDataTypes\",\n \"supportedEventTypes\",\n \"minKeyCacheSize\",\n \"maxKeyCacheSize\",\n \"minKeyCacheTimeout\",\n \"maxKeyCacheTimeout\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getConfiguration() {\n this.assertSupportsCommand(EntryControlCommand, EntryControlCommand.ConfigurationGet);\n const cc = new EntryControlCCConfigurationGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<EntryControlCCConfigurationReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"keyCacheSize\", \"keyCacheTimeout\"]);\n }\n }\n @validateArgs_EntryControlCCAPI_setConfiguration()\n public async setConfiguration(keyCacheSize: number, keyCacheTimeout: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(EntryControlCommand, EntryControlCommand.ConfigurationGet);\n const cc = new EntryControlCCConfigurationSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n keyCacheSize,\n keyCacheTimeout,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: EntryControlCCAPI, { property }, value) {\n if (property !== \"keyCacheSize\" && property !== \"keyCacheTimeout\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n let keyCacheSize = value;\n let keyCacheTimeout = 2;\n if (property === \"keyCacheTimeout\") {\n keyCacheTimeout = value;\n const oldKeyCacheSize = this.tryGetValueDB()?.getValue<number>(EntryControlCCValues.keyCacheSize.endpoint(this.endpoint.index));\n if (oldKeyCacheSize == undefined) {\n throw new ZWaveError(`The \"keyCacheTimeout\" property cannot be changed before the key cache size is known!`, ZWaveErrorCodes.Argument_Invalid);\n }\n keyCacheSize = oldKeyCacheSize;\n }\n const result = await this.setConfiguration(keyCacheSize, keyCacheTimeout);\n // Verify the change after a short delay, unless the command was supervised and successful\n if (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n this.schedulePoll({ property }, value, { transition: \"fast\" });\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: EntryControlCCAPI, { property }) {\n switch (property) {\n case \"keyCacheSize\":\n case \"keyCacheTimeout\":\n return (await this.getConfiguration())?.[property];\n }\n throwUnsupportedProperty(this.ccId, property);\n };\n }\n}\n@commandClass(CommandClasses[\"Entry Control\"])\n@implementedVersion(1)\n@ccValues(EntryControlCCValues)\nexport class EntryControlCC extends CommandClass {\n declare ccCommand: EntryControlCommand;\n public determineRequiredCCInterviews(): readonly CommandClasses[] {\n return [\n ...super.determineRequiredCCInterviews(),\n CommandClasses.Association,\n CommandClasses[\"Multi Channel Association\"],\n CommandClasses[\"Association Group Information\"],\n ];\n }\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Entry Control\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // If one Association group issues Entry Control notifications,\n // we must associate ourselves with that channel\n try {\n await ccUtils.assignLifelineIssueingCommand(ctx, endpoint, this.ccId, EntryControlCommand.Notification);\n }\n catch {\n ctx.logNode(node.id, {\n endpoint: endpoint.index,\n message: `Configuring associations to receive ${getCCName(this.ccId)} commands failed!`,\n level: \"warn\",\n });\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting entry control supported keys...\",\n direction: \"outbound\",\n });\n const supportedKeys = await api.getSupportedKeys();\n if (supportedKeys) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received entry control supported keys: ${supportedKeys.toString()}`,\n direction: \"inbound\",\n });\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting entry control supported events...\",\n direction: \"outbound\",\n });\n const eventCapabilities = await api.getEventCapabilities();\n if (eventCapabilities) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received entry control supported keys:\ndata types: ${eventCapabilities.supportedDataTypes\n .map((e) => EntryControlDataTypes[e])\n .toString()}\nevent types: ${eventCapabilities.supportedEventTypes\n .map((e) => EntryControlEventTypes[e])\n .toString()}\nmin key cache size: ${eventCapabilities.minKeyCacheSize}\nmax key cache size: ${eventCapabilities.maxKeyCacheSize}\nmin key cache timeout: ${eventCapabilities.minKeyCacheTimeout} seconds\nmax key cache timeout: ${eventCapabilities.maxKeyCacheTimeout} seconds`,\n direction: \"inbound\",\n });\n }\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Entry Control\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting entry control configuration...\",\n direction: \"outbound\",\n });\n const conf = await api.getConfiguration();\n if (conf) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received entry control configuration:\nkey cache size: ${conf.keyCacheSize}\nkey cache timeout: ${conf.keyCacheTimeout} seconds`,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface EntryControlCCNotificationOptions {\n sequenceNumber: number;\n dataType: EntryControlDataTypes;\n eventType: EntryControlEventTypes;\n eventData?: string | Bytes;\n}\n@CCCommand(EntryControlCommand.Notification)\nexport class EntryControlCCNotification extends EntryControlCC {\n public constructor(options: WithAddress<EntryControlCCNotificationOptions>) {\n super(options);\n // TODO: Check implementation:\n this.sequenceNumber = options.sequenceNumber;\n this.dataType = options.dataType;\n this.eventType = options.eventType;\n this.eventData = options.eventData;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): EntryControlCCNotification {\n validatePayload(raw.payload.length >= 4);\n const sequenceNumber = raw.payload[0];\n let dataType: EntryControlDataTypes = raw.payload[1] & 0b11;\n const eventType: EntryControlEventTypes = raw.payload[2];\n const eventDataLength = raw.payload[3];\n validatePayload(eventDataLength >= 0 && eventDataLength <= 32);\n const offset = 4;\n validatePayload(raw.payload.length >= offset + eventDataLength);\n let eventData: string | Bytes | undefined;\n if (eventDataLength > 0) {\n // We shouldn't need to check this, since the specs are pretty clear which format to expect.\n // But as always - manufacturers don't care and send ASCII data with 0 bytes...\n // We also need to disable the strict validation for some devices to make them work\n const noStrictValidation = !!ctx.getDeviceConfig?.(ctx.sourceNodeId)\n ?.compat?.disableStrictEntryControlDataValidation;\n eventData = Bytes.from(raw.payload.subarray(offset, offset + eventDataLength));\n switch (dataType) {\n case EntryControlDataTypes.Raw:\n // RAW 1 to 32 bytes of arbitrary binary data\n if (!noStrictValidation) {\n validatePayload(eventDataLength >= 1 && eventDataLength <= 32);\n }\n break;\n case EntryControlDataTypes.ASCII:\n // ASCII 1 to 32 ASCII encoded characters. ASCII codes MUST be in the value range 0x00-0xF7.\n // The string MUST be padded with the value 0xFF to fit 16 byte blocks when sent in a notification.\n // However, some devices do not follow this requirement, so we accept unpadded strings as well.\n // Trim 0xff padding bytes\n let paddingStart = eventDataLength;\n while (paddingStart > 0\n && eventData[paddingStart - 1] === 0xff) {\n paddingStart--;\n }\n eventData = eventData\n .subarray(0, paddingStart)\n .toString(\"ascii\");\n if (!noStrictValidation) {\n validatePayload(/^[\\u0000-\\u007f]+$/.test(eventData));\n }\n break;\n case EntryControlDataTypes.MD5:\n // MD5 16 byte binary data encoded as a MD5 hash value.\n if (!noStrictValidation) {\n validatePayload(eventDataLength === 16);\n }\n break;\n }\n }\n else {\n dataType = EntryControlDataTypes.None;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n sequenceNumber,\n dataType,\n eventType,\n eventData,\n });\n }\n public readonly sequenceNumber: number;\n public readonly dataType: EntryControlDataTypes;\n public readonly eventType: EntryControlEventTypes;\n public readonly eventData?: BytesView | string;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"sequence number\": this.sequenceNumber,\n \"data type\": this.dataType,\n \"event type\": this.eventType,\n };\n if (this.eventData) {\n switch (this.eventType) {\n case EntryControlEventTypes.CachedKeys:\n case EntryControlEventTypes.Enter:\n // The event data is likely the user's PIN code, hide it from logs\n message[\"event data\"] = \"*\".repeat(this.eventData.length);\n break;\n default:\n message[\"event data\"] =\n typeof this.eventData === \"string\"\n ? this.eventData\n : buffer2hex(this.eventData);\n }\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface EntryControlCCKeySupportedReportOptions {\n supportedKeys: number[];\n}\n@CCCommand(EntryControlCommand.KeySupportedReport)\n@ccValueProperty(\"supportedKeys\", EntryControlCCValues.supportedKeys)\nexport class EntryControlCCKeySupportedReport extends EntryControlCC {\n public constructor(options: WithAddress<EntryControlCCKeySupportedReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedKeys = options.supportedKeys;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): EntryControlCCKeySupportedReport {\n validatePayload(raw.payload.length >= 1);\n const length = raw.payload[0];\n validatePayload(raw.payload.length >= 1 + length);\n const supportedKeys = parseBitMask(raw.payload.subarray(1, 1 + length), 0);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedKeys,\n });\n }\n public readonly supportedKeys: readonly number[];\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"supported keys\": this.supportedKeys.toString() },\n };\n }\n}\n@CCCommand(EntryControlCommand.KeySupportedGet)\n@expectedCCResponse(EntryControlCCKeySupportedReport)\nexport class EntryControlCCKeySupportedGet extends EntryControlCC {\n}\n// @publicAPI\nexport interface EntryControlCCEventSupportedReportOptions {\n supportedDataTypes: EntryControlDataTypes[];\n supportedEventTypes: EntryControlEventTypes[];\n minKeyCacheSize: number;\n maxKeyCacheSize: number;\n minKeyCacheTimeout: number;\n maxKeyCacheTimeout: number;\n}\n@CCCommand(EntryControlCommand.EventSupportedReport)\n@ccValueProperty(\"supportedDataTypes\", EntryControlCCValues.supportedDataTypes)\n@ccValueProperty(\"supportedEventTypes\", EntryControlCCValues.supportedEventTypes)\nexport class EntryControlCCEventSupportedReport extends EntryControlCC {\n public constructor(options: WithAddress<EntryControlCCEventSupportedReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedDataTypes = options.supportedDataTypes;\n this.supportedEventTypes = options.supportedEventTypes;\n this.minKeyCacheSize = options.minKeyCacheSize;\n this.maxKeyCacheSize = options.maxKeyCacheSize;\n this.minKeyCacheTimeout = options.minKeyCacheTimeout;\n this.maxKeyCacheTimeout = options.maxKeyCacheTimeout;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): EntryControlCCEventSupportedReport {\n validatePayload(raw.payload.length >= 1);\n const dataTypeLength = raw.payload[0] & 0b11;\n let offset = 1;\n validatePayload(raw.payload.length >= offset + dataTypeLength);\n const supportedDataTypes: EntryControlDataTypes[] = parseBitMask(raw.payload.subarray(offset, offset + dataTypeLength), EntryControlDataTypes.None);\n offset += dataTypeLength;\n validatePayload(raw.payload.length >= offset + 1);\n const eventTypeLength = raw.payload[offset] & 0b11111;\n offset += 1;\n validatePayload(raw.payload.length >= offset + eventTypeLength);\n const supportedEventTypes: EntryControlEventTypes[] = parseBitMask(raw.payload.subarray(offset, offset + eventTypeLength), EntryControlEventTypes.Caching);\n offset += eventTypeLength;\n validatePayload(raw.payload.length >= offset + 4);\n const minKeyCacheSize = raw.payload[offset];\n validatePayload(minKeyCacheSize >= 1 && minKeyCacheSize <= 32);\n const maxKeyCacheSize = raw.payload[offset + 1];\n validatePayload(maxKeyCacheSize >= minKeyCacheSize && maxKeyCacheSize <= 32);\n const minKeyCacheTimeout = raw.payload[offset + 2];\n const maxKeyCacheTimeout = raw.payload[offset + 3];\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedDataTypes,\n supportedEventTypes,\n minKeyCacheSize,\n maxKeyCacheSize,\n minKeyCacheTimeout,\n maxKeyCacheTimeout,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Store min/max cache size and timeout as metadata\n const keyCacheSizeValue = EntryControlCCValues.keyCacheSize;\n this.setMetadata(ctx, keyCacheSizeValue, {\n ...keyCacheSizeValue.meta,\n min: this.minKeyCacheSize,\n max: this.maxKeyCacheSize,\n });\n const keyCacheTimeoutValue = EntryControlCCValues.keyCacheTimeout;\n this.setMetadata(ctx, keyCacheTimeoutValue, {\n ...keyCacheTimeoutValue.meta,\n min: this.minKeyCacheTimeout,\n max: this.maxKeyCacheTimeout,\n });\n return true;\n }\n public readonly supportedDataTypes: readonly EntryControlDataTypes[];\n public readonly supportedEventTypes: readonly EntryControlEventTypes[];\n public readonly minKeyCacheSize: number;\n public readonly maxKeyCacheSize: number;\n public readonly minKeyCacheTimeout: number;\n public readonly maxKeyCacheTimeout: number;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported data types\": this.supportedDataTypes\n .map((dt) => EntryControlDataTypes[dt])\n .toString(),\n \"supported event types\": this.supportedEventTypes\n .map((et) => EntryControlEventTypes[et])\n .toString(),\n \"min key cache size\": this.minKeyCacheSize,\n \"max key cache size\": this.maxKeyCacheSize,\n \"min key cache timeout\": this.minKeyCacheTimeout,\n \"max key cache timeout\": this.maxKeyCacheTimeout,\n },\n };\n }\n}\n@CCCommand(EntryControlCommand.EventSupportedGet)\n@expectedCCResponse(EntryControlCCEventSupportedReport)\nexport class EntryControlCCEventSupportedGet extends EntryControlCC {\n}\n// @publicAPI\nexport interface EntryControlCCConfigurationReportOptions {\n keyCacheSize: number;\n keyCacheTimeout: number;\n}\n@CCCommand(EntryControlCommand.ConfigurationReport)\n@ccValueProperty(\"keyCacheSize\", EntryControlCCValues.keyCacheSize)\n@ccValueProperty(\"keyCacheTimeout\", EntryControlCCValues.keyCacheTimeout)\nexport class EntryControlCCConfigurationReport extends EntryControlCC {\n public constructor(options: WithAddress<EntryControlCCConfigurationReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.keyCacheSize = options.keyCacheSize;\n this.keyCacheTimeout = options.keyCacheTimeout;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): EntryControlCCConfigurationReport {\n validatePayload(raw.payload.length >= 2);\n const keyCacheSize = raw.payload[0];\n validatePayload(keyCacheSize >= 1 && keyCacheSize <= 32);\n const keyCacheTimeout = raw.payload[1];\n return new this({\n nodeId: ctx.sourceNodeId,\n keyCacheSize,\n keyCacheTimeout,\n });\n }\n public readonly keyCacheSize: number;\n public readonly keyCacheTimeout: number;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"key cache size\": this.keyCacheSize,\n \"key cache timeout\": this.keyCacheTimeout,\n },\n };\n }\n}\n@CCCommand(EntryControlCommand.ConfigurationGet)\n@expectedCCResponse(EntryControlCCConfigurationReport)\nexport class EntryControlCCConfigurationGet extends EntryControlCC {\n}\n// @publicAPI\nexport interface EntryControlCCConfigurationSetOptions {\n keyCacheSize: number;\n keyCacheTimeout: number;\n}\n@CCCommand(EntryControlCommand.ConfigurationSet)\n@useSupervision()\nexport class EntryControlCCConfigurationSet extends EntryControlCC {\n public constructor(options: WithAddress<EntryControlCCConfigurationSetOptions>) {\n super(options);\n this.keyCacheSize = options.keyCacheSize;\n this.keyCacheTimeout = options.keyCacheTimeout;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): EntryControlCCConfigurationSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new EntryControlCCConfigurationSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public readonly keyCacheSize: number;\n public readonly keyCacheTimeout: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.keyCacheSize, this.keyCacheTimeout]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"key cache size\": this.keyCacheSize,\n \"key cache timeout\": this.keyCacheTimeout,\n },\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import * as __validateArgs from \"./EntryControlCC._validateArgs.js\";\nconst { validateArgs_EntryControlCCAPI_setConfiguration } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, getCCName, encodeBitMask, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, type BytesView, buffer2hex, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { EntryControlCommand, EntryControlDataTypes, EntryControlEventTypes, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport * as ccUtils from \"../lib/utils.js\";\nimport { EntryControlCCValues } from \"./_CCValues.generated.js\";\nexport { EntryControlCCValues };\n@API(CommandClasses[\"Entry Control\"])\nexport class EntryControlCCAPI extends CCAPI {\n public supportsCommand(cmd: EntryControlCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case EntryControlCommand.KeySupportedGet:\n case EntryControlCommand.EventSupportedGet:\n case EntryControlCommand.ConfigurationGet:\n return this.isSinglecast();\n case EntryControlCommand.ConfigurationSet:\n return true;\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getSupportedKeys() {\n this.assertSupportsCommand(EntryControlCommand, EntryControlCommand.KeySupportedGet);\n const cc = new EntryControlCCKeySupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<EntryControlCCKeySupportedReport>(cc, this.commandOptions);\n return response?.supportedKeys;\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getEventCapabilities() {\n this.assertSupportsCommand(EntryControlCommand, EntryControlCommand.EventSupportedGet);\n const cc = new EntryControlCCEventSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<EntryControlCCEventSupportedReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"supportedDataTypes\",\n \"supportedEventTypes\",\n \"minKeyCacheSize\",\n \"maxKeyCacheSize\",\n \"minKeyCacheTimeout\",\n \"maxKeyCacheTimeout\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getConfiguration() {\n this.assertSupportsCommand(EntryControlCommand, EntryControlCommand.ConfigurationGet);\n const cc = new EntryControlCCConfigurationGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<EntryControlCCConfigurationReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"keyCacheSize\", \"keyCacheTimeout\"]);\n }\n }\n @validateArgs_EntryControlCCAPI_setConfiguration()\n public async setConfiguration(keyCacheSize: number, keyCacheTimeout: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(EntryControlCommand, EntryControlCommand.ConfigurationGet);\n const cc = new EntryControlCCConfigurationSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n keyCacheSize,\n keyCacheTimeout,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: EntryControlCCAPI, { property }, value) {\n if (property !== \"keyCacheSize\" && property !== \"keyCacheTimeout\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n let keyCacheSize = value;\n let keyCacheTimeout = 2;\n if (property === \"keyCacheTimeout\") {\n keyCacheTimeout = value;\n const oldKeyCacheSize = this.tryGetValueDB()?.getValue<number>(EntryControlCCValues.keyCacheSize.endpoint(this.endpoint.index));\n if (oldKeyCacheSize == undefined) {\n throw new ZWaveError(`The \"keyCacheTimeout\" property cannot be changed before the key cache size is known!`, ZWaveErrorCodes.Argument_Invalid);\n }\n keyCacheSize = oldKeyCacheSize;\n }\n const result = await this.setConfiguration(keyCacheSize, keyCacheTimeout);\n // Verify the change after a short delay, unless the command was supervised and successful\n if (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n this.schedulePoll({ property }, value, { transition: \"fast\" });\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: EntryControlCCAPI, { property }) {\n switch (property) {\n case \"keyCacheSize\":\n case \"keyCacheTimeout\":\n return (await this.getConfiguration())?.[property];\n }\n throwUnsupportedProperty(this.ccId, property);\n };\n }\n}\n@commandClass(CommandClasses[\"Entry Control\"])\n@implementedVersion(1)\n@ccValues(EntryControlCCValues)\nexport class EntryControlCC extends CommandClass {\n declare ccCommand: EntryControlCommand;\n public determineRequiredCCInterviews(): readonly CommandClasses[] {\n return [\n ...super.determineRequiredCCInterviews(),\n CommandClasses.Association,\n CommandClasses[\"Multi Channel Association\"],\n CommandClasses[\"Association Group Information\"],\n ];\n }\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Entry Control\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // If one Association group issues Entry Control notifications,\n // we must associate ourselves with that channel\n try {\n await ccUtils.assignLifelineIssueingCommand(ctx, endpoint, this.ccId, EntryControlCommand.Notification);\n }\n catch {\n ctx.logNode(node.id, {\n endpoint: endpoint.index,\n message: `Configuring associations to receive ${getCCName(this.ccId)} commands failed!`,\n level: \"warn\",\n });\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting entry control supported keys...\",\n direction: \"outbound\",\n });\n const supportedKeys = await api.getSupportedKeys();\n if (supportedKeys) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received entry control supported keys: ${supportedKeys.toString()}`,\n direction: \"inbound\",\n });\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting entry control supported events...\",\n direction: \"outbound\",\n });\n const eventCapabilities = await api.getEventCapabilities();\n if (eventCapabilities) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received entry control supported keys:\ndata types: ${eventCapabilities.supportedDataTypes\n .map((e) => EntryControlDataTypes[e])\n .toString()}\nevent types: ${eventCapabilities.supportedEventTypes\n .map((e) => EntryControlEventTypes[e])\n .toString()}\nmin key cache size: ${eventCapabilities.minKeyCacheSize}\nmax key cache size: ${eventCapabilities.maxKeyCacheSize}\nmin key cache timeout: ${eventCapabilities.minKeyCacheTimeout} seconds\nmax key cache timeout: ${eventCapabilities.maxKeyCacheTimeout} seconds`,\n direction: \"inbound\",\n });\n }\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Entry Control\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting entry control configuration...\",\n direction: \"outbound\",\n });\n const conf = await api.getConfiguration();\n if (conf) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received entry control configuration:\nkey cache size: ${conf.keyCacheSize}\nkey cache timeout: ${conf.keyCacheTimeout} seconds`,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface EntryControlCCNotificationOptions {\n sequenceNumber: number;\n dataType: EntryControlDataTypes;\n eventType: EntryControlEventTypes;\n eventData?: string | Bytes;\n}\n@CCCommand(EntryControlCommand.Notification)\nexport class EntryControlCCNotification extends EntryControlCC {\n public constructor(options: WithAddress<EntryControlCCNotificationOptions>) {\n super(options);\n // TODO: Check implementation:\n this.sequenceNumber = options.sequenceNumber;\n this.dataType = options.dataType;\n this.eventType = options.eventType;\n this.eventData = options.eventData;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): EntryControlCCNotification {\n validatePayload(raw.payload.length >= 4);\n const sequenceNumber = raw.payload[0];\n let dataType: EntryControlDataTypes = raw.payload[1] & 0b11;\n const eventType: EntryControlEventTypes = raw.payload[2];\n const eventDataLength = raw.payload[3];\n validatePayload(eventDataLength >= 0 && eventDataLength <= 32);\n const offset = 4;\n validatePayload(raw.payload.length >= offset + eventDataLength);\n let eventData: string | Bytes | undefined;\n if (eventDataLength > 0) {\n // We shouldn't need to check this, since the specs are pretty clear which format to expect.\n // But as always - manufacturers don't care and send ASCII data with 0 bytes...\n // We also need to disable the strict validation for some devices to make them work\n const noStrictValidation = !!ctx.getDeviceConfig?.(ctx.sourceNodeId)\n ?.compat?.disableStrictEntryControlDataValidation;\n eventData = Bytes.from(raw.payload.subarray(offset, offset + eventDataLength));\n switch (dataType) {\n case EntryControlDataTypes.Raw:\n // RAW 1 to 32 bytes of arbitrary binary data\n if (!noStrictValidation) {\n validatePayload(eventDataLength >= 1 && eventDataLength <= 32);\n }\n break;\n case EntryControlDataTypes.ASCII:\n // ASCII 1 to 32 ASCII encoded characters. ASCII codes MUST be in the value range 0x00-0xF7.\n // The string MUST be padded with the value 0xFF to fit 16 byte blocks when sent in a notification.\n // However, some devices do not follow this requirement, so we accept unpadded strings as well.\n // Trim 0xff padding bytes\n let paddingStart = eventDataLength;\n while (paddingStart > 0\n && eventData[paddingStart - 1] === 0xff) {\n paddingStart--;\n }\n eventData = eventData\n .subarray(0, paddingStart)\n .toString(\"ascii\");\n if (!noStrictValidation) {\n validatePayload(/^[\\u0000-\\u007f]+$/.test(eventData));\n }\n break;\n case EntryControlDataTypes.MD5:\n // MD5 16 byte binary data encoded as a MD5 hash value.\n if (!noStrictValidation) {\n validatePayload(eventDataLength === 16);\n }\n break;\n }\n }\n else {\n dataType = EntryControlDataTypes.None;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n sequenceNumber,\n dataType,\n eventType,\n eventData,\n });\n }\n public readonly sequenceNumber: number;\n public readonly dataType: EntryControlDataTypes;\n public readonly eventType: EntryControlEventTypes;\n public readonly eventData?: BytesView | string;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n let data = typeof this.eventData === \"string\"\n ? Bytes.from(this.eventData, \"ascii\")\n : Bytes.from(this.eventData ?? []);\n // RAW and ASCII: 1 to 32 bytes; MD5: exactly 16 bytes\n if (data.length > 32\n || (this.dataType === EntryControlDataTypes.MD5\n && data.length !== 16)) {\n throw new ZWaveError(\"Invalid event data length\", ZWaveErrorCodes.Argument_Invalid);\n }\n // ASCII data MUST be padded with 0xFF to fit 16 byte blocks\n if (this.dataType === EntryControlDataTypes.ASCII && data.length > 0) {\n const padded = new Bytes(Math.ceil(data.length / 16) * 16).fill(0xff);\n padded.set(data);\n data = padded;\n }\n this.payload = Bytes.concat([\n [\n this.sequenceNumber,\n this.dataType & 0b11,\n this.eventType,\n data.length,\n ],\n data,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"sequence number\": this.sequenceNumber,\n \"data type\": this.dataType,\n \"event type\": this.eventType,\n };\n if (this.eventData) {\n switch (this.eventType) {\n case EntryControlEventTypes.CachedKeys:\n case EntryControlEventTypes.Enter:\n // The event data is likely the user's PIN code, hide it from logs\n message[\"event data\"] = \"*\".repeat(this.eventData.length);\n break;\n default:\n message[\"event data\"] =\n typeof this.eventData === \"string\"\n ? this.eventData\n : buffer2hex(this.eventData);\n }\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface EntryControlCCKeySupportedReportOptions {\n supportedKeys: number[];\n}\n@CCCommand(EntryControlCommand.KeySupportedReport)\n@ccValueProperty(\"supportedKeys\", EntryControlCCValues.supportedKeys)\nexport class EntryControlCCKeySupportedReport extends EntryControlCC {\n public constructor(options: WithAddress<EntryControlCCKeySupportedReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedKeys = options.supportedKeys;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): EntryControlCCKeySupportedReport {\n validatePayload(raw.payload.length >= 1);\n const length = raw.payload[0];\n validatePayload(raw.payload.length >= 1 + length);\n const supportedKeys = parseBitMask(raw.payload.subarray(1, 1 + length), 0);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedKeys,\n });\n }\n public readonly supportedKeys: readonly number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const mask = encodeBitMask(this.supportedKeys, undefined, 0);\n this.payload = Bytes.concat([[mask.length], mask]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"supported keys\": this.supportedKeys.toString() },\n };\n }\n}\n@CCCommand(EntryControlCommand.KeySupportedGet)\n@expectedCCResponse(EntryControlCCKeySupportedReport)\nexport class EntryControlCCKeySupportedGet extends EntryControlCC {\n}\n// @publicAPI\nexport interface EntryControlCCEventSupportedReportOptions {\n supportedDataTypes: EntryControlDataTypes[];\n supportedEventTypes: EntryControlEventTypes[];\n minKeyCacheSize: number;\n maxKeyCacheSize: number;\n minKeyCacheTimeout: number;\n maxKeyCacheTimeout: number;\n}\n@CCCommand(EntryControlCommand.EventSupportedReport)\n@ccValueProperty(\"supportedDataTypes\", EntryControlCCValues.supportedDataTypes)\n@ccValueProperty(\"supportedEventTypes\", EntryControlCCValues.supportedEventTypes)\nexport class EntryControlCCEventSupportedReport extends EntryControlCC {\n public constructor(options: WithAddress<EntryControlCCEventSupportedReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedDataTypes = options.supportedDataTypes;\n this.supportedEventTypes = options.supportedEventTypes;\n this.minKeyCacheSize = options.minKeyCacheSize;\n this.maxKeyCacheSize = options.maxKeyCacheSize;\n this.minKeyCacheTimeout = options.minKeyCacheTimeout;\n this.maxKeyCacheTimeout = options.maxKeyCacheTimeout;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): EntryControlCCEventSupportedReport {\n validatePayload(raw.payload.length >= 1);\n const dataTypeLength = raw.payload[0] & 0b11;\n let offset = 1;\n validatePayload(raw.payload.length >= offset + dataTypeLength);\n const supportedDataTypes: EntryControlDataTypes[] = parseBitMask(raw.payload.subarray(offset, offset + dataTypeLength), EntryControlDataTypes.None);\n offset += dataTypeLength;\n validatePayload(raw.payload.length >= offset + 1);\n const eventTypeLength = raw.payload[offset] & 0b11111;\n offset += 1;\n validatePayload(raw.payload.length >= offset + eventTypeLength);\n const supportedEventTypes: EntryControlEventTypes[] = parseBitMask(raw.payload.subarray(offset, offset + eventTypeLength), EntryControlEventTypes.Caching);\n offset += eventTypeLength;\n validatePayload(raw.payload.length >= offset + 4);\n const minKeyCacheSize = raw.payload[offset];\n validatePayload(minKeyCacheSize >= 1 && minKeyCacheSize <= 32);\n const maxKeyCacheSize = raw.payload[offset + 1];\n validatePayload(maxKeyCacheSize >= minKeyCacheSize && maxKeyCacheSize <= 32);\n const minKeyCacheTimeout = raw.payload[offset + 2];\n const maxKeyCacheTimeout = raw.payload[offset + 3];\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedDataTypes,\n supportedEventTypes,\n minKeyCacheSize,\n maxKeyCacheSize,\n minKeyCacheTimeout,\n maxKeyCacheTimeout,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Store min/max cache size and timeout as metadata\n const keyCacheSizeValue = EntryControlCCValues.keyCacheSize;\n this.setMetadata(ctx, keyCacheSizeValue, {\n ...keyCacheSizeValue.meta,\n min: this.minKeyCacheSize,\n max: this.maxKeyCacheSize,\n });\n const keyCacheTimeoutValue = EntryControlCCValues.keyCacheTimeout;\n this.setMetadata(ctx, keyCacheTimeoutValue, {\n ...keyCacheTimeoutValue.meta,\n min: this.minKeyCacheTimeout,\n max: this.maxKeyCacheTimeout,\n });\n return true;\n }\n public readonly supportedDataTypes: readonly EntryControlDataTypes[];\n public readonly supportedEventTypes: readonly EntryControlEventTypes[];\n public readonly minKeyCacheSize: number;\n public readonly maxKeyCacheSize: number;\n public readonly minKeyCacheTimeout: number;\n public readonly maxKeyCacheTimeout: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const dataTypes = encodeBitMask(this.supportedDataTypes, undefined, EntryControlDataTypes.None);\n const eventTypes = encodeBitMask(this.supportedEventTypes, undefined, EntryControlEventTypes.Caching);\n this.payload = Bytes.concat([\n [dataTypes.length],\n dataTypes,\n [eventTypes.length],\n eventTypes,\n [\n this.minKeyCacheSize,\n this.maxKeyCacheSize,\n this.minKeyCacheTimeout,\n this.maxKeyCacheTimeout,\n ],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported data types\": this.supportedDataTypes\n .map((dt) => EntryControlDataTypes[dt])\n .toString(),\n \"supported event types\": this.supportedEventTypes\n .map((et) => EntryControlEventTypes[et])\n .toString(),\n \"min key cache size\": this.minKeyCacheSize,\n \"max key cache size\": this.maxKeyCacheSize,\n \"min key cache timeout\": this.minKeyCacheTimeout,\n \"max key cache timeout\": this.maxKeyCacheTimeout,\n },\n };\n }\n}\n@CCCommand(EntryControlCommand.EventSupportedGet)\n@expectedCCResponse(EntryControlCCEventSupportedReport)\nexport class EntryControlCCEventSupportedGet extends EntryControlCC {\n}\n// @publicAPI\nexport interface EntryControlCCConfigurationReportOptions {\n keyCacheSize: number;\n keyCacheTimeout: number;\n}\n@CCCommand(EntryControlCommand.ConfigurationReport)\n@ccValueProperty(\"keyCacheSize\", EntryControlCCValues.keyCacheSize)\n@ccValueProperty(\"keyCacheTimeout\", EntryControlCCValues.keyCacheTimeout)\nexport class EntryControlCCConfigurationReport extends EntryControlCC {\n public constructor(options: WithAddress<EntryControlCCConfigurationReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.keyCacheSize = options.keyCacheSize;\n this.keyCacheTimeout = options.keyCacheTimeout;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): EntryControlCCConfigurationReport {\n validatePayload(raw.payload.length >= 2);\n const keyCacheSize = raw.payload[0];\n validatePayload(keyCacheSize >= 1 && keyCacheSize <= 32);\n const keyCacheTimeout = raw.payload[1];\n return new this({\n nodeId: ctx.sourceNodeId,\n keyCacheSize,\n keyCacheTimeout,\n });\n }\n public readonly keyCacheSize: number;\n public readonly keyCacheTimeout: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.keyCacheSize, this.keyCacheTimeout]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"key cache size\": this.keyCacheSize,\n \"key cache timeout\": this.keyCacheTimeout,\n },\n };\n }\n}\n@CCCommand(EntryControlCommand.ConfigurationGet)\n@expectedCCResponse(EntryControlCCConfigurationReport)\nexport class EntryControlCCConfigurationGet extends EntryControlCC {\n}\n// @publicAPI\nexport interface EntryControlCCConfigurationSetOptions {\n keyCacheSize: number;\n keyCacheTimeout: number;\n}\n@CCCommand(EntryControlCommand.ConfigurationSet)\n@useSupervision()\nexport class EntryControlCCConfigurationSet extends EntryControlCC {\n public constructor(options: WithAddress<EntryControlCCConfigurationSetOptions>) {\n super(options);\n this.keyCacheSize = options.keyCacheSize;\n this.keyCacheTimeout = options.keyCacheTimeout;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): EntryControlCCConfigurationSet {\n validatePayload(raw.payload.length >= 2);\n const keyCacheSize = raw.payload[0];\n validatePayload(keyCacheSize >= 1 && keyCacheSize <= 32);\n const keyCacheTimeout = raw.payload[1];\n return new this({\n nodeId: ctx.sourceNodeId,\n keyCacheSize,\n keyCacheTimeout,\n });\n }\n public readonly keyCacheSize: number;\n public readonly keyCacheTimeout: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.keyCacheSize, this.keyCacheTimeout]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"key cache size\": this.keyCacheSize,\n \"key cache timeout\": this.keyCacheTimeout,\n },\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -24,7 +24,7 @@ export interface HumidityControlModeCCSetOptions {
|
|
|
24
24
|
}
|
|
25
25
|
export declare class HumidityControlModeCCSet extends HumidityControlModeCC {
|
|
26
26
|
constructor(options: WithAddress<HumidityControlModeCCSetOptions>);
|
|
27
|
-
static from(
|
|
27
|
+
static from(raw: CCRaw, ctx: CCParsingContext): HumidityControlModeCCSet;
|
|
28
28
|
mode: HumidityControlMode;
|
|
29
29
|
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
30
30
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
@@ -36,6 +36,7 @@ export declare class HumidityControlModeCCReport extends HumidityControlModeCC {
|
|
|
36
36
|
constructor(options: WithAddress<HumidityControlModeCCReportOptions>);
|
|
37
37
|
static from(raw: CCRaw, ctx: CCParsingContext): HumidityControlModeCCReport;
|
|
38
38
|
readonly mode: HumidityControlMode;
|
|
39
|
+
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
39
40
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
40
41
|
}
|
|
41
42
|
export declare class HumidityControlModeCCGet extends HumidityControlModeCC {
|
|
@@ -48,6 +49,7 @@ export declare class HumidityControlModeCCSupportedReport extends HumidityContro
|
|
|
48
49
|
static from(raw: CCRaw, ctx: CCParsingContext): HumidityControlModeCCSupportedReport;
|
|
49
50
|
persistValues(ctx: PersistValuesContext): boolean;
|
|
50
51
|
supportedModes: HumidityControlMode[];
|
|
52
|
+
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
51
53
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
52
54
|
}
|
|
53
55
|
export declare class HumidityControlModeCCSupportedGet extends HumidityControlModeCC {
|
|
@@ -250,8 +250,12 @@ let HumidityControlModeCCSet = (() => {
|
|
|
250
250
|
super(options);
|
|
251
251
|
this.mode = options.mode;
|
|
252
252
|
}
|
|
253
|
-
static from(
|
|
254
|
-
|
|
253
|
+
static from(raw, ctx) {
|
|
254
|
+
(0, import_core.validatePayload)(raw.payload.length >= 1);
|
|
255
|
+
return new this({
|
|
256
|
+
nodeId: ctx.sourceNodeId,
|
|
257
|
+
mode: raw.payload[0] & 15
|
|
258
|
+
});
|
|
255
259
|
}
|
|
256
260
|
mode;
|
|
257
261
|
serialize(ctx) {
|
|
@@ -302,6 +306,10 @@ let HumidityControlModeCCReport = (() => {
|
|
|
302
306
|
});
|
|
303
307
|
}
|
|
304
308
|
mode;
|
|
309
|
+
serialize(ctx) {
|
|
310
|
+
this.payload = import_shared.Bytes.from([this.mode & 15]);
|
|
311
|
+
return super.serialize(ctx);
|
|
312
|
+
}
|
|
305
313
|
toLogEntry(ctx) {
|
|
306
314
|
return {
|
|
307
315
|
...super.toLogEntry(ctx),
|
|
@@ -382,6 +390,10 @@ let HumidityControlModeCCSupportedReport = (() => {
|
|
|
382
390
|
return true;
|
|
383
391
|
}
|
|
384
392
|
supportedModes;
|
|
393
|
+
serialize(ctx) {
|
|
394
|
+
this.payload = (0, import_core.encodeBitMask)(this.supportedModes, void 0, import_Types.HumidityControlMode.Off);
|
|
395
|
+
return super.serialize(ctx);
|
|
396
|
+
}
|
|
385
397
|
toLogEntry(ctx) {
|
|
386
398
|
return {
|
|
387
399
|
...super.toLogEntry(ctx),
|