@zwave-js/cc 15.25.1 → 15.25.2
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.js +5 -3
- package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
- package/build/cjs/cc/AssociationCC.js +5 -2
- package/build/cjs/cc/AssociationCC.js.map +2 -2
- package/build/cjs/cc/AssociationGroupInfoCC.js +7 -2
- package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
- package/build/cjs/cc/BarrierOperatorCC.js +5 -3
- package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
- package/build/cjs/cc/BasicCC.js +3 -2
- package/build/cjs/cc/BasicCC.js.map +2 -2
- package/build/cjs/cc/BatteryCC.js +3 -2
- package/build/cjs/cc/BatteryCC.js.map +2 -2
- package/build/cjs/cc/BinarySensorCC.js +5 -3
- package/build/cjs/cc/BinarySensorCC.js.map +2 -2
- package/build/cjs/cc/BinarySwitchCC.js +3 -2
- package/build/cjs/cc/BinarySwitchCC.js.map +2 -2
- package/build/cjs/cc/CentralSceneCC.js +2 -1
- package/build/cjs/cc/CentralSceneCC.js.map +2 -2
- package/build/cjs/cc/ClockCC.js +3 -2
- package/build/cjs/cc/ClockCC.js.map +2 -2
- package/build/cjs/cc/ColorSwitchCC.js +5 -2
- package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
- package/build/cjs/cc/ConfigurationCC.js +5 -2
- package/build/cjs/cc/ConfigurationCC.js.map +2 -2
- package/build/cjs/cc/DoorLockCC.js +5 -3
- package/build/cjs/cc/DoorLockCC.js.map +2 -2
- package/build/cjs/cc/DoorLockLoggingCC.js +3 -2
- package/build/cjs/cc/DoorLockLoggingCC.js.map +2 -2
- package/build/cjs/cc/EnergyProductionCC.js +3 -2
- package/build/cjs/cc/EnergyProductionCC.js.map +2 -2
- package/build/cjs/cc/EntryControlCC.js +5 -3
- package/build/cjs/cc/EntryControlCC.js.map +2 -2
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +2 -1
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlModeCC.js +5 -3
- package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlOperatingStateCC.js +3 -2
- package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlSetpointCC.js +5 -3
- package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
- package/build/cjs/cc/IndicatorCC.js +5 -2
- package/build/cjs/cc/IndicatorCC.js.map +2 -2
- package/build/cjs/cc/IrrigationCC.js +5 -2
- package/build/cjs/cc/IrrigationCC.js.map +2 -2
- package/build/cjs/cc/LanguageCC.js +3 -2
- package/build/cjs/cc/LanguageCC.js.map +2 -2
- package/build/cjs/cc/LockCC.js +3 -2
- package/build/cjs/cc/LockCC.js.map +2 -2
- package/build/cjs/cc/ManufacturerSpecificCC.js +4 -1
- package/build/cjs/cc/ManufacturerSpecificCC.js.map +2 -2
- package/build/cjs/cc/MeterCC.js +5 -3
- package/build/cjs/cc/MeterCC.js.map +2 -2
- package/build/cjs/cc/MultiChannelAssociationCC.js +5 -2
- package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
- package/build/cjs/cc/MultiChannelCC.js +2 -1
- package/build/cjs/cc/MultiChannelCC.js.map +2 -2
- package/build/cjs/cc/MultilevelSensorCC.js +5 -2
- package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
- package/build/cjs/cc/MultilevelSwitchCC.js +5 -3
- package/build/cjs/cc/MultilevelSwitchCC.js.map +2 -2
- package/build/cjs/cc/NodeNamingCC.js +3 -2
- package/build/cjs/cc/NodeNamingCC.js.map +2 -2
- package/build/cjs/cc/NotificationCC.js +7 -3
- package/build/cjs/cc/NotificationCC.js.map +2 -2
- package/build/cjs/cc/ProtectionCC.js +5 -3
- package/build/cjs/cc/ProtectionCC.js.map +2 -2
- package/build/cjs/cc/SceneControllerConfigurationCC.js +2 -1
- package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
- package/build/cjs/cc/ScheduleEntryLockCC.js +2 -1
- package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
- package/build/cjs/cc/Security2CC.js +3 -2
- package/build/cjs/cc/Security2CC.js.map +2 -2
- package/build/cjs/cc/SecurityCC.js +2 -1
- package/build/cjs/cc/SecurityCC.js.map +2 -2
- package/build/cjs/cc/SoundSwitchCC.js +2 -1
- package/build/cjs/cc/SoundSwitchCC.js.map +2 -2
- package/build/cjs/cc/ThermostatFanModeCC.js +5 -3
- package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
- package/build/cjs/cc/ThermostatFanStateCC.js +3 -2
- package/build/cjs/cc/ThermostatFanStateCC.js.map +2 -2
- package/build/cjs/cc/ThermostatModeCC.js +5 -3
- package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
- package/build/cjs/cc/ThermostatOperatingStateCC.js +3 -2
- package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
- package/build/cjs/cc/ThermostatSetbackCC.js +3 -2
- package/build/cjs/cc/ThermostatSetbackCC.js.map +2 -2
- package/build/cjs/cc/ThermostatSetpointCC.js +5 -2
- package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
- package/build/cjs/cc/TimeCC.js +2 -1
- package/build/cjs/cc/TimeCC.js.map +2 -2
- package/build/cjs/cc/TimeParametersCC.js +2 -1
- package/build/cjs/cc/TimeParametersCC.js.map +2 -2
- package/build/cjs/cc/UserCodeCC.js +4 -2
- package/build/cjs/cc/UserCodeCC.js.map +2 -2
- package/build/cjs/cc/UserCredentialCC.js +5 -2
- package/build/cjs/cc/UserCredentialCC.js.map +2 -2
- package/build/cjs/cc/VersionCC.js +2 -1
- package/build/cjs/cc/VersionCC.js.map +2 -2
- package/build/cjs/cc/WakeUpCC.js +2 -1
- package/build/cjs/cc/WakeUpCC.js.map +2 -2
- package/build/cjs/cc/WindowCoveringCC.js +5 -2
- package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
- package/build/cjs/cc/ZWavePlusCC.js +2 -1
- package/build/cjs/cc/ZWavePlusCC.js.map +2 -2
- package/build/cjs/cc/manufacturerProprietary/Decorators.d.ts +1 -1
- package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +2 -2
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +3 -2
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +2 -2
- package/build/cjs/lib/API.js.map +2 -2
- package/build/cjs/lib/CommandClass.d.ts +2 -0
- package/build/cjs/lib/CommandClass.js.map +2 -2
- package/build/cjs/lib/CommandClassDecorators.d.ts +4 -4
- package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
- package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
- package/build/esm/cc/AlarmSensorCC.js +3 -1
- package/build/esm/cc/AlarmSensorCC.js.map +1 -1
- package/build/esm/cc/AssociationCC.d.ts.map +1 -1
- package/build/esm/cc/AssociationCC.js +3 -0
- package/build/esm/cc/AssociationCC.js.map +1 -1
- package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
- package/build/esm/cc/AssociationGroupInfoCC.js +6 -1
- package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
- package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
- package/build/esm/cc/BarrierOperatorCC.js +3 -1
- package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
- package/build/esm/cc/BasicCC.d.ts.map +1 -1
- package/build/esm/cc/BasicCC.js +2 -1
- package/build/esm/cc/BasicCC.js.map +1 -1
- package/build/esm/cc/BatteryCC.d.ts.map +1 -1
- package/build/esm/cc/BatteryCC.js +2 -1
- package/build/esm/cc/BatteryCC.js.map +1 -1
- package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
- package/build/esm/cc/BinarySensorCC.js +3 -1
- package/build/esm/cc/BinarySensorCC.js.map +1 -1
- package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
- package/build/esm/cc/BinarySwitchCC.js +2 -1
- package/build/esm/cc/BinarySwitchCC.js.map +1 -1
- package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
- package/build/esm/cc/CentralSceneCC.js +1 -0
- package/build/esm/cc/CentralSceneCC.js.map +1 -1
- package/build/esm/cc/ClockCC.d.ts.map +1 -1
- package/build/esm/cc/ClockCC.js +2 -1
- package/build/esm/cc/ClockCC.js.map +1 -1
- package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
- package/build/esm/cc/ColorSwitchCC.js +3 -0
- package/build/esm/cc/ColorSwitchCC.js.map +1 -1
- package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/ConfigurationCC.js +3 -0
- package/build/esm/cc/ConfigurationCC.js.map +1 -1
- package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
- package/build/esm/cc/DoorLockCC.js +3 -1
- package/build/esm/cc/DoorLockCC.js.map +1 -1
- package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
- package/build/esm/cc/DoorLockLoggingCC.js +2 -1
- package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
- package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
- package/build/esm/cc/EnergyProductionCC.js +2 -1
- package/build/esm/cc/EnergyProductionCC.js.map +1 -1
- package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
- package/build/esm/cc/EntryControlCC.js +3 -1
- package/build/esm/cc/EntryControlCC.js.map +1 -1
- package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
- package/build/esm/cc/FirmwareUpdateMetaDataCC.js +1 -0
- package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
- package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlModeCC.js +3 -1
- package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.js +2 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
- package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlSetpointCC.js +3 -1
- package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
- package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
- package/build/esm/cc/IndicatorCC.js +3 -0
- package/build/esm/cc/IndicatorCC.js.map +1 -1
- package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
- package/build/esm/cc/IrrigationCC.js +3 -0
- package/build/esm/cc/IrrigationCC.js.map +1 -1
- package/build/esm/cc/LanguageCC.d.ts.map +1 -1
- package/build/esm/cc/LanguageCC.js +2 -1
- package/build/esm/cc/LanguageCC.js.map +1 -1
- package/build/esm/cc/LockCC.d.ts.map +1 -1
- package/build/esm/cc/LockCC.js +2 -1
- package/build/esm/cc/LockCC.js.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.js +4 -1
- package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
- package/build/esm/cc/MeterCC.d.ts.map +1 -1
- package/build/esm/cc/MeterCC.js +3 -1
- package/build/esm/cc/MeterCC.js.map +1 -1
- package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
- package/build/esm/cc/MultiChannelAssociationCC.js +3 -0
- package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
- package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
- package/build/esm/cc/MultiChannelCC.js +1 -0
- package/build/esm/cc/MultiChannelCC.js.map +1 -1
- package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
- package/build/esm/cc/MultilevelSensorCC.js +3 -0
- package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
- package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
- package/build/esm/cc/MultilevelSwitchCC.js +3 -1
- package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
- package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
- package/build/esm/cc/NodeNamingCC.js +2 -1
- package/build/esm/cc/NodeNamingCC.js.map +1 -1
- package/build/esm/cc/NotificationCC.d.ts.map +1 -1
- package/build/esm/cc/NotificationCC.js +5 -1
- package/build/esm/cc/NotificationCC.js.map +1 -1
- package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
- package/build/esm/cc/ProtectionCC.js +3 -1
- package/build/esm/cc/ProtectionCC.js.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.js +1 -0
- package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
- package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
- package/build/esm/cc/ScheduleEntryLockCC.js +1 -0
- package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
- package/build/esm/cc/Security2CC.d.ts.map +1 -1
- package/build/esm/cc/Security2CC.js +2 -1
- package/build/esm/cc/Security2CC.js.map +1 -1
- package/build/esm/cc/SecurityCC.d.ts.map +1 -1
- package/build/esm/cc/SecurityCC.js +1 -0
- package/build/esm/cc/SecurityCC.js.map +1 -1
- package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
- package/build/esm/cc/SoundSwitchCC.js +1 -0
- package/build/esm/cc/SoundSwitchCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.js +3 -1
- package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatFanStateCC.js +2 -1
- package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
- package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatModeCC.js +3 -1
- package/build/esm/cc/ThermostatModeCC.js.map +1 -1
- package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatOperatingStateCC.js +2 -1
- package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
- package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatSetbackCC.js +2 -1
- package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
- package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatSetpointCC.js +3 -0
- package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
- package/build/esm/cc/TimeCC.d.ts.map +1 -1
- package/build/esm/cc/TimeCC.js +1 -0
- package/build/esm/cc/TimeCC.js.map +1 -1
- package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
- package/build/esm/cc/TimeParametersCC.js +1 -0
- package/build/esm/cc/TimeParametersCC.js.map +1 -1
- package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
- package/build/esm/cc/UserCodeCC.js +2 -0
- package/build/esm/cc/UserCodeCC.js.map +1 -1
- package/build/esm/cc/UserCredentialCC.d.ts.map +1 -1
- package/build/esm/cc/UserCredentialCC.js +4 -1
- package/build/esm/cc/UserCredentialCC.js.map +1 -1
- package/build/esm/cc/VersionCC.d.ts.map +1 -1
- package/build/esm/cc/VersionCC.js +1 -0
- package/build/esm/cc/VersionCC.js.map +1 -1
- package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
- package/build/esm/cc/WakeUpCC.js +1 -0
- package/build/esm/cc/WakeUpCC.js.map +1 -1
- package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
- package/build/esm/cc/WindowCoveringCC.js +3 -0
- package/build/esm/cc/WindowCoveringCC.js.map +1 -1
- package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
- package/build/esm/cc/ZWavePlusCC.js +1 -0
- package/build/esm/cc/ZWavePlusCC.js.map +1 -1
- package/build/esm/cc/manufacturerProprietary/Decorators.d.ts +1 -1
- package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
- package/build/esm/cc/manufacturerProprietary/Decorators.js.map +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js +2 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
- package/build/esm/lib/API.js.map +1 -1
- package/build/esm/lib/CommandClass.d.ts +2 -0
- package/build/esm/lib/CommandClass.d.ts.map +1 -1
- package/build/esm/lib/CommandClass.js.map +1 -1
- package/build/esm/lib/CommandClassDecorators.d.ts +4 -4
- package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
- package/build/esm/lib/CommandClassDecorators.js.map +1 -1
- package/package.json +7 -7
|
@@ -373,7 +373,8 @@ let DoorLockCC = (() => {
|
|
|
373
373
|
const node = this.getNode(ctx);
|
|
374
374
|
const endpoint = this.getEndpoint(ctx);
|
|
375
375
|
const api = import_API.CCAPI.create(import_core.CommandClasses["Door Lock"], ctx, endpoint).withOptions({
|
|
376
|
-
priority: import_core.MessagePriority.NodeQuery
|
|
376
|
+
priority: import_core.MessagePriority.NodeQuery,
|
|
377
|
+
tag: "interview"
|
|
377
378
|
});
|
|
378
379
|
ctx.logNode(node.id, {
|
|
379
380
|
endpoint: this.endpointIndex,
|
|
@@ -441,7 +442,7 @@ supports block to block: ${resp.blockToBlockSupported}`;
|
|
|
441
442
|
this.setMetadata(ctx, boltStatusValue);
|
|
442
443
|
this.setValue(ctx, import_CCValues_generated.DoorLockCCValues.boltSupported, boltSupported);
|
|
443
444
|
}
|
|
444
|
-
await this.refreshValues(ctx);
|
|
445
|
+
await this.refreshValues(ctx, { tag: "interview" });
|
|
445
446
|
if (!hadCriticalTimeout)
|
|
446
447
|
this.setInterviewComplete(ctx, true);
|
|
447
448
|
}
|
|
@@ -449,7 +450,8 @@ supports block to block: ${resp.blockToBlockSupported}`;
|
|
|
449
450
|
const node = this.getNode(ctx);
|
|
450
451
|
const endpoint = this.getEndpoint(ctx);
|
|
451
452
|
const api = import_API.CCAPI.create(import_core.CommandClasses["Door Lock"], ctx, endpoint).withOptions({
|
|
452
|
-
priority: options?.priority ?? import_core.MessagePriority.NodeQuery
|
|
453
|
+
priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
|
|
454
|
+
tag: options?.tag
|
|
453
455
|
});
|
|
454
456
|
ctx.logNode(node.id, {
|
|
455
457
|
endpoint: this.endpointIndex,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/DoorLockCC.ts"],
|
|
4
|
-
"sourcesContent": ["import * as __validateArgs from \"./DoorLockCC._validateArgs.js\";\nconst { validateArgs_DoorLockCCAPI_set, validateArgs_DoorLockCCAPI_setConfiguration } = __validateArgs;\nimport { CommandClasses, Duration, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, SupervisionStatus, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, enumValuesToMetadataStates, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { isArray } from \"alcalzone-shared/typeguards\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, 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 { type DoorHandleStatus, DoorLockCommand, DoorLockMode, DoorLockOperationType, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { DoorLockCCValues } from \"./_CCValues.generated.js\";\nexport { DoorLockCCValues };\nexport function shouldAutoCreateLatchStatusValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.latchSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateBoltStatusValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.boltSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateDoorStatusValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.doorSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateTwistAssistConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.twistAssistSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateBlockToBlockConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.blockToBlockSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateAutoRelockConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.autoRelockSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateHoldAndReleaseConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.holdAndReleaseSupported.endpoint(endpoint.index));\n}\nconst configurationSetParameters = [\n \"operationType\",\n \"outsideHandlesCanOpenDoorConfiguration\",\n \"insideHandlesCanOpenDoorConfiguration\",\n \"lockTimeoutConfiguration\",\n \"autoRelockTime\",\n \"holdAndReleaseTime\",\n \"twistAssist\",\n \"blockToBlock\",\n] as const;\n@API(CommandClasses[\"Door Lock\"])\nexport class DoorLockCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: DoorLockCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case DoorLockCommand.OperationSet:\n case DoorLockCommand.OperationGet:\n case DoorLockCommand.ConfigurationSet:\n case DoorLockCommand.ConfigurationGet:\n return true; // This is mandatory\n case DoorLockCommand.CapabilitiesGet:\n return this.version >= 4;\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: DoorLockCCAPI, { property }, value) {\n if (property === \"targetMode\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.set(value);\n }\n else if (typeof property === \"string\"\n && configurationSetParameters.includes(property as any)) {\n // checking every type here would create a LOT of duplicate code, so we don't\n // ConfigurationSet expects all parameters --> read the others from cache\n const config = {\n [property]: value,\n } as DoorLockCCConfigurationSetOptions;\n for (const param of configurationSetParameters) {\n if (param !== property) {\n (config as any)[param] = this.tryGetValueDB()?.getValue({\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property: param,\n });\n }\n }\n // Fix insideHandlesCanOpenDoorConfiguration is not iterable\n const allTrue: DoorHandleStatus = [true, true, true, true];\n if (!config.insideHandlesCanOpenDoorConfiguration) {\n config.insideHandlesCanOpenDoorConfiguration = allTrue;\n }\n if (!config.outsideHandlesCanOpenDoorConfiguration) {\n config.outsideHandlesCanOpenDoorConfiguration = allTrue;\n }\n const result = await this.setConfiguration(config);\n // Verify the current value after a delay, unless the command was supervised and successful\n if (!supervisedCommandSucceeded(result)) {\n this.schedulePoll({ property }, value);\n }\n return result;\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property }, value) => {\n if (property === \"targetMode\" && typeof value === \"number\") {\n const targetMode = value;\n const currentModeValueId = DoorLockCCValues.currentMode.endpoint(this.endpoint.index);\n return {\n isSplitStateTargetValue: true,\n supervisionDelayedUpdates: true,\n optimisticallyUpdateRelatedValues: (_supervisedAndSuccessful) => {\n this.tryGetValueDB()?.setValue(currentModeValueId, targetMode);\n },\n supervisionOnSuccess: () => {\n this.tryGetValueDB()?.setValue(currentModeValueId, targetMode);\n },\n supervisionOnFailure: async () => {\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n },\n verifyChanges: async (result) => {\n switch (result?.status) {\n case SupervisionStatus.Success:\n case SupervisionStatus.Working:\n return;\n case SupervisionStatus.Fail:\n case SupervisionStatus.NoSupport:\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n return;\n default:\n this.schedulePoll({ property: \"currentMode\" }, targetMode);\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: DoorLockCCAPI, { property }) {\n switch (property) {\n case \"currentMode\":\n case \"targetMode\":\n case \"duration\":\n case \"outsideHandlesCanOpenDoor\":\n case \"insideHandlesCanOpenDoor\":\n case \"latchStatus\":\n case \"boltStatus\":\n case \"doorStatus\":\n case \"lockTimeout\":\n return (await this.get())?.[property];\n case \"operationType\":\n case \"outsideHandlesCanOpenDoorConfiguration\":\n case \"insideHandlesCanOpenDoorConfiguration\":\n case \"lockTimeoutConfiguration\":\n case \"autoRelockTime\":\n case \"holdAndReleaseTime\":\n case \"twistAssist\":\n case \"blockToBlock\":\n return (await this.getConfiguration())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getCapabilities() {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.CapabilitiesGet);\n const cc = new DoorLockCCCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<DoorLockCCCapabilitiesReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"autoRelockSupported\",\n \"blockToBlockSupported\",\n \"boltSupported\",\n \"doorSupported\",\n \"holdAndReleaseSupported\",\n \"latchSupported\",\n \"twistAssistSupported\",\n \"supportedDoorLockModes\",\n \"supportedInsideHandles\",\n \"supportedOperationTypes\",\n \"supportedOutsideHandles\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.OperationGet);\n const cc = new DoorLockCCOperationGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<DoorLockCCOperationReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"currentMode\",\n \"targetMode\",\n \"duration\",\n \"outsideHandlesCanOpenDoor\",\n \"insideHandlesCanOpenDoor\",\n \"latchStatus\",\n \"boltStatus\",\n \"doorStatus\",\n \"lockTimeout\",\n ]);\n }\n }\n @validateArgs_DoorLockCCAPI_set()\n public async set(mode: DoorLockMode): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.OperationSet);\n const cc = new DoorLockCCOperationSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n mode,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_DoorLockCCAPI_setConfiguration()\n public async setConfiguration(configuration: DoorLockCCConfigurationSetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.ConfigurationSet);\n const cc = new DoorLockCCConfigurationSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...configuration,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getConfiguration() {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.ConfigurationGet);\n const cc = new DoorLockCCConfigurationGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<DoorLockCCConfigurationReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"operationType\",\n \"outsideHandlesCanOpenDoorConfiguration\",\n \"insideHandlesCanOpenDoorConfiguration\",\n \"lockTimeoutConfiguration\",\n \"autoRelockTime\",\n \"holdAndReleaseTime\",\n \"twistAssist\",\n \"blockToBlock\",\n ]);\n }\n }\n}\n@commandClass(CommandClasses[\"Door Lock\"])\n@implementedVersion(4)\n@ccValues(DoorLockCCValues)\nexport class DoorLockCC extends CommandClass {\n declare ccCommand: DoorLockCommand;\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[\"Door Lock\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // We need to do some queries after a potential timeout\n // In this case, do now mark this CC as interviewed completely\n let hadCriticalTimeout = false;\n // By default, assume all status sensors to be supported\n let doorSupported = true;\n let boltSupported = true;\n let latchSupported = true;\n if (api.version >= 4) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting lock capabilities...\",\n direction: \"outbound\",\n });\n const resp = await api.getCapabilities();\n if (resp) {\n const logMessage = `received lock capabilities:\nsupported operation types: ${resp.supportedOperationTypes\n .map((t) => getEnumMemberName(DoorLockOperationType, t))\n .join(\", \")}\nsupported door lock modes: ${resp.supportedDoorLockModes\n .map((t) => getEnumMemberName(DoorLockMode, t))\n .map((str) => `\\n\u00B7 ${str}`)\n .join(\"\")}\nsupported outside handles: ${resp.supportedOutsideHandles\n .map(String)\n .join(\", \")}\nsupported inside handles: ${resp.supportedInsideHandles.map(String).join(\", \")}\nsupports door status: ${resp.doorSupported}\nsupports bolt status: ${resp.boltSupported}\nsupports latch status: ${resp.latchSupported}\nsupports auto-relock: ${resp.autoRelockSupported}\nsupports hold-and-release: ${resp.holdAndReleaseSupported}\nsupports twist assist: ${resp.twistAssistSupported}\nsupports block to block: ${resp.blockToBlockSupported}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n doorSupported = resp.doorSupported;\n boltSupported = resp.boltSupported;\n latchSupported = resp.latchSupported;\n // Update metadata of settable states\n const targetModeValue = DoorLockCCValues.targetMode;\n this.setMetadata(ctx, targetModeValue, {\n ...targetModeValue.meta,\n states: enumValuesToMetadataStates(DoorLockMode, resp.supportedDoorLockModes),\n });\n const operationTypeValue = DoorLockCCValues.operationType;\n this.setMetadata(ctx, operationTypeValue, {\n ...operationTypeValue.meta,\n states: enumValuesToMetadataStates(DoorLockOperationType, resp.supportedOperationTypes),\n });\n }\n else {\n hadCriticalTimeout = true;\n }\n }\n if (!hadCriticalTimeout) {\n // Save support information for the status values\n const doorStatusValue = DoorLockCCValues.doorStatus;\n if (doorSupported)\n this.setMetadata(ctx, doorStatusValue);\n this.setValue(ctx, DoorLockCCValues.doorSupported, doorSupported);\n const latchStatusValue = DoorLockCCValues.latchStatus;\n if (latchSupported)\n this.setMetadata(ctx, latchStatusValue);\n this.setValue(ctx, DoorLockCCValues.latchSupported, latchSupported);\n const boltStatusValue = DoorLockCCValues.boltStatus;\n if (boltSupported)\n this.setMetadata(ctx, boltStatusValue);\n this.setValue(ctx, DoorLockCCValues.boltSupported, boltSupported);\n }\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n if (!hadCriticalTimeout)\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\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting lock configuration...\",\n direction: \"outbound\",\n });\n const config = await api.getConfiguration();\n if (config) {\n let logMessage = `received lock configuration:\noperation type: ${getEnumMemberName(DoorLockOperationType, config.operationType)}`;\n if (config.operationType === DoorLockOperationType.Timed) {\n logMessage += `\nlock timeout: ${config.lockTimeoutConfiguration} seconds\n`;\n }\n logMessage += `\noutside handles can open door: ${config.outsideHandlesCanOpenDoorConfiguration\n .map(String)\n .join(\", \")}\ninside handles can open door: ${config.insideHandlesCanOpenDoorConfiguration\n .map(String)\n .join(\", \")}`;\n if (api.version >= 4) {\n logMessage += `\nauto-relock time ${config.autoRelockTime ?? \"-\"} seconds\nhold-and-release time ${config.holdAndReleaseTime ?? \"-\"} seconds\ntwist assist ${!!config.twistAssist}\nblock to block ${!!config.blockToBlock}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting current lock status...\",\n direction: \"outbound\",\n });\n const status = await api.get();\n if (status) {\n let logMessage = `received lock status:\ncurrent mode: ${getEnumMemberName(DoorLockMode, status.currentMode)}`;\n if (status.targetMode != undefined) {\n logMessage += `\ntarget mode: ${getEnumMemberName(DoorLockMode, status.targetMode)}\nremaining duration: ${status.duration?.toString() ?? \"undefined\"}`;\n }\n if (status.lockTimeout != undefined) {\n logMessage += `\nlock timeout: ${status.lockTimeout} seconds`;\n }\n if (status.doorStatus != undefined) {\n logMessage += `\ndoor status: ${status.doorStatus}`;\n }\n if (status.boltStatus != undefined) {\n logMessage += `\nbolt status: ${status.boltStatus}`;\n }\n if (status.latchStatus != undefined) {\n logMessage += `\nlatch status: ${status.latchStatus}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n /**\n * Returns whether the node supports auto relock.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsAutoRelockCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.autoRelockSupported.endpoint(endpoint.index));\n }\n /**\n * Returns whether the node supports hold and release.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsHoldAndReleaseCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.holdAndReleaseSupported.endpoint(endpoint.index));\n }\n /**\n * Returns whether the node supports twist assist.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsTwistAssistCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.twistAssistSupported.endpoint(endpoint.index));\n }\n /**\n * Returns whether the node supports block to block.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsBlockToBlockCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.blockToBlockSupported.endpoint(endpoint.index));\n }\n /**\n * Returns the supported outside handles.\n * This only works AFTER the node has been interviewed.\n */\n public static getSupportedOutsideHandlesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<DoorHandleStatus> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.supportedOutsideHandles.endpoint(endpoint.index));\n }\n /**\n * Returns the supported inside handles.\n * This only works AFTER the node has been interviewed.\n */\n public static getSupportedInsideHandlesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<DoorHandleStatus> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.supportedInsideHandles.endpoint(endpoint.index));\n }\n}\n// @publicAPI\nexport interface DoorLockCCOperationSetOptions {\n mode: DoorLockMode;\n}\n@CCCommand(DoorLockCommand.OperationSet)\n@useSupervision()\nexport class DoorLockCCOperationSet extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCOperationSetOptions>) {\n super(options);\n if (options.mode === DoorLockMode.Unknown) {\n throw new ZWaveError(`Unknown is not a valid door lock target state!`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.mode = options.mode;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCOperationSet {\n validatePayload(raw.payload.length >= 1);\n const mode: DoorLockMode = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n public mode: DoorLockMode;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.mode]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"target mode\": getEnumMemberName(DoorLockMode, this.mode),\n },\n };\n }\n}\n// @publicAPI\nexport interface DoorLockCCOperationReportOptions {\n currentMode: DoorLockMode;\n outsideHandlesCanOpenDoor: DoorHandleStatus;\n insideHandlesCanOpenDoor: DoorHandleStatus;\n doorStatus?: \"closed\" | \"open\";\n boltStatus?: \"unlocked\" | \"locked\";\n latchStatus?: \"closed\" | \"open\";\n lockTimeout?: number;\n targetMode?: DoorLockMode;\n duration?: Duration;\n}\n@CCCommand(DoorLockCommand.OperationReport)\n@ccValueProperty(\"currentMode\", DoorLockCCValues.currentMode)\n@ccValueProperty(\"targetMode\", DoorLockCCValues.targetMode)\n@ccValueProperty(\"duration\", DoorLockCCValues.duration)\n@ccValueProperty(\"outsideHandlesCanOpenDoor\", DoorLockCCValues.outsideHandlesCanOpenDoor)\n@ccValueProperty(\"insideHandlesCanOpenDoor\", DoorLockCCValues.insideHandlesCanOpenDoor)\n@ccValueProperty(\"lockTimeout\", DoorLockCCValues.lockTimeout)\nexport class DoorLockCCOperationReport extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCOperationReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.currentMode = options.currentMode;\n this.outsideHandlesCanOpenDoor = options.outsideHandlesCanOpenDoor;\n this.insideHandlesCanOpenDoor = options.insideHandlesCanOpenDoor;\n this.doorStatus = options.doorStatus;\n this.boltStatus = options.boltStatus;\n this.latchStatus = options.latchStatus;\n this.lockTimeout = options.lockTimeout;\n this.targetMode = options.targetMode;\n this.duration = options.duration;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCOperationReport {\n validatePayload(raw.payload.length >= 5);\n const currentMode: DoorLockMode = raw.payload[0];\n const outsideHandlesCanOpenDoor: DoorHandleStatus = [\n !!(raw.payload[1] & 16),\n !!(raw.payload[1] & 32),\n !!(raw.payload[1] & 64),\n !!(raw.payload[1] & 128),\n ];\n const insideHandlesCanOpenDoor: DoorHandleStatus = [\n !!(raw.payload[1] & 0b0001),\n !!(raw.payload[1] & 0b0010),\n !!(raw.payload[1] & 0b0100),\n !!(raw.payload[1] & 0b1000),\n ];\n const doorStatus: \"closed\" | \"open\" | undefined = !!(raw.payload[2] & 0b1)\n ? \"closed\"\n : \"open\";\n const boltStatus: \"unlocked\" | \"locked\" | undefined = !!(raw.payload[2] & 0b10) ? \"unlocked\" : \"locked\";\n const latchStatus: \"closed\" | \"open\" | undefined = !!(raw.payload[2] & 0b100)\n ? \"closed\"\n : \"open\";\n // Ignore invalid timeout values\n const lockTimeoutMinutes = raw.payload[3];\n const lockTimeoutSeconds = raw.payload[4];\n let lockTimeout: number | undefined;\n if (lockTimeoutMinutes <= 253 && lockTimeoutSeconds <= 59) {\n lockTimeout = lockTimeoutSeconds + lockTimeoutMinutes * 60;\n }\n let targetMode: DoorLockMode | undefined;\n let duration: Duration | undefined;\n if (raw.payload.length >= 7) {\n targetMode = raw.payload[5];\n duration = Duration.parseReport(raw.payload[6]);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n currentMode,\n outsideHandlesCanOpenDoor,\n insideHandlesCanOpenDoor,\n doorStatus,\n boltStatus,\n latchStatus,\n lockTimeout,\n targetMode,\n duration,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const handles = [\n ...this.insideHandlesCanOpenDoor,\n ...this.outsideHandlesCanOpenDoor,\n ]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n const doorCondition = (this.doorStatus === \"closed\" ? 0b1 : 0)\n | (this.boltStatus === \"unlocked\" ? 0b10 : 0)\n | (this.latchStatus === \"closed\" ? 0b100 : 0);\n let lockTimeoutMinutes = 0xfe;\n let lockTimeoutSeconds = 0xfe;\n if (this.lockTimeout != undefined) {\n lockTimeoutMinutes = Math.floor(this.lockTimeout / 60);\n lockTimeoutSeconds = this.lockTimeout % 60;\n }\n const payload = [\n this.currentMode,\n handles,\n doorCondition,\n lockTimeoutMinutes,\n lockTimeoutSeconds,\n ];\n if (this.targetMode != undefined) {\n payload.push(this.targetMode);\n payload.push((this.duration ?? Duration.default()).serializeReport());\n }\n this.payload = Bytes.from(payload);\n return super.serialize(ctx);\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Only store the door/bolt/latch status if the lock supports it\n const supportsDoorStatus = !!this.getValue(ctx, DoorLockCCValues.doorSupported);\n if (supportsDoorStatus) {\n this.setValue(ctx, DoorLockCCValues.doorStatus, this.doorStatus);\n }\n const supportsBoltStatus = !!this.getValue(ctx, DoorLockCCValues.boltSupported);\n if (supportsBoltStatus) {\n this.setValue(ctx, DoorLockCCValues.boltStatus, this.boltStatus);\n }\n const supportsLatchStatus = !!this.getValue(ctx, DoorLockCCValues.latchSupported);\n if (supportsLatchStatus) {\n this.setValue(ctx, DoorLockCCValues.latchStatus, this.latchStatus);\n }\n return true;\n }\n public readonly currentMode: DoorLockMode;\n public readonly targetMode?: DoorLockMode;\n public readonly duration?: Duration;\n public readonly outsideHandlesCanOpenDoor: DoorHandleStatus;\n public readonly insideHandlesCanOpenDoor: DoorHandleStatus;\n public readonly latchStatus?: \"open\" | \"closed\";\n public readonly boltStatus?: \"locked\" | \"unlocked\";\n public readonly doorStatus?: \"open\" | \"closed\";\n public readonly lockTimeout?: number; // in seconds\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"current mode\": getEnumMemberName(DoorLockMode, this.currentMode),\n \"active outside handles\": this.outsideHandlesCanOpenDoor.join(\", \"),\n \"active inside handles\": this.insideHandlesCanOpenDoor.join(\", \"),\n };\n if (this.latchStatus != undefined) {\n message[\"latch status\"] = this.latchStatus;\n }\n if (this.boltStatus != undefined) {\n message[\"bolt status\"] = this.boltStatus;\n }\n if (this.doorStatus != undefined) {\n message[\"door status\"] = this.doorStatus;\n }\n if (this.targetMode != undefined) {\n message[\"target mode\"] = getEnumMemberName(DoorLockMode, this.targetMode);\n }\n if (this.duration != undefined) {\n message[\"remaining duration\"] = this.duration.toString();\n }\n if (this.lockTimeout != undefined) {\n message[\"lock timeout\"] = `${this.lockTimeout} seconds`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(DoorLockCommand.OperationGet)\n@expectedCCResponse(DoorLockCCOperationReport)\nexport class DoorLockCCOperationGet extends DoorLockCC {\n}\n// @publicAPI\nexport interface DoorLockCCConfigurationReportOptions {\n operationType: DoorLockOperationType;\n outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n lockTimeoutConfiguration?: number;\n autoRelockTime?: number;\n holdAndReleaseTime?: number;\n twistAssist?: boolean;\n blockToBlock?: boolean;\n}\n@CCCommand(DoorLockCommand.ConfigurationReport)\n@ccValueProperty(\"operationType\", DoorLockCCValues.operationType)\n@ccValueProperty(\"outsideHandlesCanOpenDoorConfiguration\", DoorLockCCValues.outsideHandlesCanOpenDoorConfiguration)\n@ccValueProperty(\"insideHandlesCanOpenDoorConfiguration\", DoorLockCCValues.insideHandlesCanOpenDoorConfiguration)\n@ccValueProperty(\"lockTimeoutConfiguration\", DoorLockCCValues.lockTimeoutConfiguration)\nexport class DoorLockCCConfigurationReport extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCConfigurationReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.operationType = options.operationType;\n this.outsideHandlesCanOpenDoorConfiguration =\n options.outsideHandlesCanOpenDoorConfiguration;\n this.insideHandlesCanOpenDoorConfiguration =\n options.insideHandlesCanOpenDoorConfiguration;\n this.lockTimeoutConfiguration = options.lockTimeoutConfiguration;\n this.autoRelockTime = options.autoRelockTime;\n this.holdAndReleaseTime = options.holdAndReleaseTime;\n this.twistAssist = options.twistAssist;\n this.blockToBlock = options.blockToBlock;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCConfigurationReport {\n validatePayload(raw.payload.length >= 4);\n const operationType: DoorLockOperationType = raw.payload[0];\n const outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 16),\n !!(raw.payload[1] & 32),\n !!(raw.payload[1] & 64),\n !!(raw.payload[1] & 128),\n ];\n const insideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 0b0001),\n !!(raw.payload[1] & 0b0010),\n !!(raw.payload[1] & 0b0100),\n !!(raw.payload[1] & 0b1000),\n ];\n let lockTimeoutConfiguration: number | undefined;\n if (operationType === DoorLockOperationType.Timed) {\n const lockTimeoutMinutes = raw.payload[2];\n const lockTimeoutSeconds = raw.payload[3];\n if (lockTimeoutMinutes <= 0xfd && lockTimeoutSeconds <= 59) {\n lockTimeoutConfiguration = lockTimeoutSeconds\n + lockTimeoutMinutes * 60;\n }\n }\n let autoRelockTime: number | undefined;\n let holdAndReleaseTime: number | undefined;\n let twistAssist: boolean | undefined;\n let blockToBlock: boolean | undefined;\n if (raw.payload.length >= 5) {\n autoRelockTime = raw.payload.readUInt16BE(4);\n holdAndReleaseTime = raw.payload.readUInt16BE(6);\n const flags = raw.payload[8];\n twistAssist = !!(flags & 0b1);\n blockToBlock = !!(flags & 0b10);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n outsideHandlesCanOpenDoorConfiguration,\n insideHandlesCanOpenDoorConfiguration,\n lockTimeoutConfiguration,\n autoRelockTime,\n holdAndReleaseTime,\n twistAssist,\n blockToBlock,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const handles = [\n ...this.insideHandlesCanOpenDoorConfiguration,\n ...this.outsideHandlesCanOpenDoorConfiguration,\n ]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n let lockTimeoutMinutes: number;\n let lockTimeoutSeconds: number;\n if (this.operationType === DoorLockOperationType.Timed\n && this.lockTimeoutConfiguration != undefined) {\n lockTimeoutMinutes = Math.floor(this.lockTimeoutConfiguration / 60);\n lockTimeoutSeconds = this.lockTimeoutConfiguration % 60;\n }\n else {\n lockTimeoutMinutes = lockTimeoutSeconds = 0xfe;\n }\n const flags = (this.twistAssist ? 0b1 : 0)\n | (this.blockToBlock ? 0b10 : 0);\n this.payload = Bytes.from([\n this.operationType,\n handles,\n lockTimeoutMinutes,\n lockTimeoutSeconds,\n ]);\n if (this.autoRelockTime != undefined\n || this.holdAndReleaseTime != undefined\n || this.twistAssist != undefined\n || this.blockToBlock != undefined) {\n const extended = Bytes.alloc(5);\n extended.writeUInt16BE((this.autoRelockTime ?? 0) & 0xffff, 0);\n extended.writeUInt16BE((this.holdAndReleaseTime ?? 0) & 0xffff, 2);\n extended[4] = flags;\n this.payload = Bytes.concat([this.payload, extended]);\n }\n return super.serialize(ctx);\n }\n public readonly operationType: DoorLockOperationType;\n public readonly outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public readonly insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public readonly lockTimeoutConfiguration?: number;\n // These are not always supported and have to be persisted manually\n // to avoid unsupported values being exposed to the user\n public readonly autoRelockTime?: number;\n public readonly holdAndReleaseTime?: number;\n public readonly twistAssist?: boolean;\n public readonly blockToBlock?: boolean;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Only store the autoRelockTime etc. params if the lock supports it\n const supportsAutoRelock = !!this.getValue(ctx, DoorLockCCValues.autoRelockSupported);\n if (supportsAutoRelock) {\n this.setValue(ctx, DoorLockCCValues.autoRelockTime, this.autoRelockTime);\n }\n const supportsHoldAndRelease = !!this.getValue(ctx, DoorLockCCValues.holdAndReleaseSupported);\n if (supportsHoldAndRelease) {\n this.setValue(ctx, DoorLockCCValues.holdAndReleaseTime, this.holdAndReleaseTime);\n }\n const supportsTwistAssist = !!this.getValue(ctx, DoorLockCCValues.twistAssistSupported);\n if (supportsTwistAssist) {\n this.setValue(ctx, DoorLockCCValues.twistAssist, this.twistAssist);\n }\n const supportsBlockToBlock = !!this.getValue(ctx, DoorLockCCValues.blockToBlockSupported);\n if (supportsBlockToBlock) {\n this.setValue(ctx, DoorLockCCValues.blockToBlock, this.blockToBlock);\n }\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"operation type\": getEnumMemberName(DoorLockOperationType, this.operationType),\n \"outside handle configuration\": this\n .outsideHandlesCanOpenDoorConfiguration.join(\", \"),\n \"inside handle configuration\": this\n .insideHandlesCanOpenDoorConfiguration.join(\", \"),\n };\n if (this.lockTimeoutConfiguration != undefined) {\n message[\"timed mode duration\"] = `${this.lockTimeoutConfiguration} seconds`;\n }\n if (this.autoRelockTime != undefined) {\n message[\"auto-relock time\"] = `${this.autoRelockTime} seconds`;\n }\n if (this.holdAndReleaseTime != undefined) {\n message[\"hold-and-release time\"] = `${this.holdAndReleaseTime} seconds`;\n }\n if (this.twistAssist != undefined) {\n message[\"twist assist enabled\"] = this.twistAssist;\n }\n if (this.blockToBlock != undefined) {\n message[\"block-to-block enabled\"] = this.blockToBlock;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(DoorLockCommand.ConfigurationGet)\n@expectedCCResponse(DoorLockCCConfigurationReport)\nexport class DoorLockCCConfigurationGet extends DoorLockCC {\n}\n// @publicAPI\nexport type DoorLockCCConfigurationSetOptions = ({\n operationType: DoorLockOperationType.Timed;\n lockTimeoutConfiguration: number;\n} | {\n operationType: DoorLockOperationType.Constant;\n lockTimeoutConfiguration?: undefined;\n}) & {\n outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n // V4+\n autoRelockTime?: number;\n holdAndReleaseTime?: number;\n twistAssist?: boolean;\n blockToBlock?: boolean;\n};\n@CCCommand(DoorLockCommand.ConfigurationSet)\n@useSupervision()\nexport class DoorLockCCConfigurationSet extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCConfigurationSetOptions>) {\n super(options);\n this.operationType = options.operationType;\n this.outsideHandlesCanOpenDoorConfiguration =\n options.outsideHandlesCanOpenDoorConfiguration;\n this.insideHandlesCanOpenDoorConfiguration =\n options.insideHandlesCanOpenDoorConfiguration;\n this.lockTimeoutConfiguration = options.lockTimeoutConfiguration;\n this.autoRelockTime = options.autoRelockTime;\n this.holdAndReleaseTime = options.holdAndReleaseTime;\n this.twistAssist = options.twistAssist;\n this.blockToBlock = options.blockToBlock;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCConfigurationSet {\n validatePayload(raw.payload.length >= 4);\n const operationType: DoorLockOperationType = raw.payload[0];\n const outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 16),\n !!(raw.payload[1] & 32),\n !!(raw.payload[1] & 64),\n !!(raw.payload[1] & 128),\n ];\n const insideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 0b0001),\n !!(raw.payload[1] & 0b0010),\n !!(raw.payload[1] & 0b0100),\n !!(raw.payload[1] & 0b1000),\n ];\n let lockTimeoutConfiguration: number | undefined;\n if (operationType === DoorLockOperationType.Timed) {\n const lockTimeoutMinutes = raw.payload[2];\n const lockTimeoutSeconds = raw.payload[3];\n if (lockTimeoutMinutes <= 0xfd && lockTimeoutSeconds <= 59) {\n lockTimeoutConfiguration = lockTimeoutSeconds\n + lockTimeoutMinutes * 60;\n }\n }\n let autoRelockTime: number | undefined;\n let holdAndReleaseTime: number | undefined;\n let twistAssist: boolean | undefined;\n let blockToBlock: boolean | undefined;\n if (raw.payload.length >= 9) {\n autoRelockTime = raw.payload.readUInt16BE(4);\n holdAndReleaseTime = raw.payload.readUInt16BE(6);\n const flags = raw.payload[8];\n twistAssist = !!(flags & 0b1);\n blockToBlock = !!(flags & 0b10);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n outsideHandlesCanOpenDoorConfiguration,\n insideHandlesCanOpenDoorConfiguration,\n lockTimeoutConfiguration,\n autoRelockTime,\n holdAndReleaseTime,\n twistAssist,\n blockToBlock,\n } as WithAddress<DoorLockCCConfigurationSetOptions>);\n }\n public operationType: DoorLockOperationType;\n public outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public lockTimeoutConfiguration?: number;\n public autoRelockTime?: number;\n public holdAndReleaseTime?: number;\n public twistAssist?: boolean;\n public blockToBlock?: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const insideHandles = isArray(this.insideHandlesCanOpenDoorConfiguration)\n ? this.insideHandlesCanOpenDoorConfiguration\n : [];\n const outsideHandles = isArray(this.outsideHandlesCanOpenDoorConfiguration)\n ? this.outsideHandlesCanOpenDoorConfiguration\n : [];\n const handles = [...insideHandles, ...outsideHandles]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n let lockTimeoutMinutes: number;\n let lockTimeoutSeconds: number;\n if (this.operationType === DoorLockOperationType.Constant) {\n lockTimeoutMinutes = lockTimeoutSeconds = 0xfe;\n }\n else {\n lockTimeoutMinutes = Math.floor(this.lockTimeoutConfiguration! / 60);\n lockTimeoutSeconds = this.lockTimeoutConfiguration! % 60;\n }\n const flags = (this.twistAssist ? 0b1 : 0)\n | (this.blockToBlock ? 0b10 : 0);\n this.payload = Bytes.from([\n this.operationType,\n handles,\n lockTimeoutMinutes,\n lockTimeoutSeconds,\n // placeholder for auto relock time\n 0,\n 0,\n // placeholder for hold and release time\n 0,\n 0,\n flags,\n ]);\n this.payload.writeUInt16BE((this.autoRelockTime ?? 0) & 0xffff, 4);\n this.payload.writeUInt16BE((this.holdAndReleaseTime ?? 0) & 0xffff, 6);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const insideHandles = isArray(this.insideHandlesCanOpenDoorConfiguration)\n ? this.insideHandlesCanOpenDoorConfiguration\n : [];\n const outsideHandles = isArray(this.outsideHandlesCanOpenDoorConfiguration)\n ? this.outsideHandlesCanOpenDoorConfiguration\n : [];\n const message: MessageRecord = {\n \"operation type\": getEnumMemberName(DoorLockOperationType, this.operationType),\n \"outside handle configuration\": outsideHandles.join(\", \"),\n \"inside handle configuration\": insideHandles.join(\", \"),\n };\n if (this.lockTimeoutConfiguration != undefined) {\n message[\"timed mode duration\"] = `${this.lockTimeoutConfiguration} seconds`;\n }\n if (this.autoRelockTime != undefined) {\n message[\"auto-relock time\"] = `${this.autoRelockTime} seconds`;\n }\n if (this.holdAndReleaseTime != undefined) {\n message[\"hold-and-release time\"] = `${this.holdAndReleaseTime} seconds`;\n }\n if (this.twistAssist != undefined) {\n message[\"enable twist assist\"] = this.twistAssist;\n }\n if (this.blockToBlock != undefined) {\n message[\"enable block-to-block\"] = this.blockToBlock;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface DoorLockCCCapabilitiesReportOptions {\n supportedOperationTypes: DoorLockOperationType[];\n supportedDoorLockModes: DoorLockMode[];\n supportedOutsideHandles: DoorHandleStatus;\n supportedInsideHandles: DoorHandleStatus;\n doorSupported: boolean;\n boltSupported: boolean;\n latchSupported: boolean;\n blockToBlockSupported: boolean;\n twistAssistSupported: boolean;\n holdAndReleaseSupported: boolean;\n autoRelockSupported: boolean;\n}\n@CCCommand(DoorLockCommand.CapabilitiesReport)\n@ccValueProperty(\"supportedOutsideHandles\", DoorLockCCValues.supportedOutsideHandles)\n@ccValueProperty(\"supportedInsideHandles\", DoorLockCCValues.supportedInsideHandles)\n@ccValueProperty(\"autoRelockSupported\", DoorLockCCValues.autoRelockSupported)\n@ccValueProperty(\"holdAndReleaseSupported\", DoorLockCCValues.holdAndReleaseSupported)\n@ccValueProperty(\"twistAssistSupported\", DoorLockCCValues.twistAssistSupported)\n@ccValueProperty(\"blockToBlockSupported\", DoorLockCCValues.blockToBlockSupported)\nexport class DoorLockCCCapabilitiesReport extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCCapabilitiesReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedOperationTypes = options.supportedOperationTypes;\n this.supportedDoorLockModes = options.supportedDoorLockModes;\n this.supportedOutsideHandles = options.supportedOutsideHandles;\n this.supportedInsideHandles = options.supportedInsideHandles;\n this.doorSupported = options.doorSupported;\n this.boltSupported = options.boltSupported;\n this.latchSupported = options.latchSupported;\n this.blockToBlockSupported = options.blockToBlockSupported;\n this.twistAssistSupported = options.twistAssistSupported;\n this.holdAndReleaseSupported = options.holdAndReleaseSupported;\n this.autoRelockSupported = options.autoRelockSupported;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCCapabilitiesReport {\n // parse variable length operation type bit mask\n validatePayload(raw.payload.length >= 1);\n const bitMaskLength = raw.payload[0] & 0b11111;\n let offset = 1;\n validatePayload(raw.payload.length >= offset + bitMaskLength + 1);\n const supportedOperationTypes: DoorLockOperationType[] = parseBitMask(raw.payload.subarray(offset, offset + bitMaskLength), \n // bit 0 is reserved, bitmask starts at 1\n 0);\n offset += bitMaskLength;\n // parse variable length door lock mode list\n const listLength = raw.payload[offset];\n offset += 1;\n validatePayload(raw.payload.length >= offset + listLength + 3);\n const supportedDoorLockModes: DoorLockMode[] = [\n ...raw.payload.subarray(offset, offset + listLength),\n ];\n offset += listLength;\n const supportedOutsideHandles: DoorHandleStatus = [\n !!(raw.payload[offset] & 16),\n !!(raw.payload[offset] & 32),\n !!(raw.payload[offset] & 64),\n !!(raw.payload[offset] & 128),\n ];\n const supportedInsideHandles: DoorHandleStatus = [\n !!(raw.payload[offset] & 0b0001),\n !!(raw.payload[offset] & 0b0010),\n !!(raw.payload[offset] & 0b0100),\n !!(raw.payload[offset] & 0b1000),\n ];\n const doorSupported = !!(raw.payload[offset + 1] & 0b1);\n const boltSupported = !!(raw.payload[offset + 1] & 0b10);\n const latchSupported = !!(raw.payload[offset + 1] & 0b100);\n const blockToBlockSupported = !!(raw.payload[offset + 2] & 0b1);\n const twistAssistSupported = !!(raw.payload[offset + 2] & 0b10);\n const holdAndReleaseSupported = !!(raw.payload[offset + 2] & 0b100);\n const autoRelockSupported = !!(raw.payload[offset + 2] & 0b1000);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedOperationTypes,\n supportedDoorLockModes,\n supportedOutsideHandles,\n supportedInsideHandles,\n doorSupported,\n boltSupported,\n latchSupported,\n blockToBlockSupported,\n twistAssistSupported,\n holdAndReleaseSupported,\n autoRelockSupported,\n });\n }\n public readonly supportedOperationTypes: readonly DoorLockOperationType[];\n public readonly supportedDoorLockModes: readonly DoorLockMode[];\n public readonly supportedOutsideHandles: DoorHandleStatus;\n public readonly supportedInsideHandles: DoorHandleStatus;\n // These 3 are not automatically persisted because in CC version 3\n // we have to assume them to be supported. In v4 we can query this.\n public readonly latchSupported: boolean;\n public readonly boltSupported: boolean;\n public readonly doorSupported: boolean;\n public readonly autoRelockSupported: boolean;\n public readonly holdAndReleaseSupported: boolean;\n public readonly twistAssistSupported: boolean;\n public readonly blockToBlockSupported: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // Operation type bitmask (variable length)\n const operationTypeMask = encodeBitMask(this.supportedOperationTypes, undefined, 0);\n // Door lock mode list\n const modeList = Bytes.from(this.supportedDoorLockModes as number[]);\n const handles = [\n ...this.supportedInsideHandles,\n ...this.supportedOutsideHandles,\n ]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n const componentStatus = (this.doorSupported ? 0b1 : 0)\n | (this.boltSupported ? 0b10 : 0)\n | (this.latchSupported ? 0b100 : 0);\n const featureFlags = (this.blockToBlockSupported ? 0b1 : 0)\n | (this.twistAssistSupported ? 0b10 : 0)\n | (this.holdAndReleaseSupported ? 0b100 : 0)\n | (this.autoRelockSupported ? 0b1000 : 0);\n this.payload = Bytes.concat([\n [operationTypeMask.length & 0b11111],\n operationTypeMask,\n [modeList.length],\n modeList,\n [handles, componentStatus, featureFlags],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n door: this.doorSupported,\n bolt: this.boltSupported,\n latch: this.latchSupported,\n \"block-to-block feature\": this.blockToBlockSupported,\n \"twist assist feature\": this.twistAssistSupported,\n \"hold-and-release feature\": this.holdAndReleaseSupported,\n \"auto-relock feature\": this.autoRelockSupported,\n \"operation types\": this.supportedOperationTypes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(DoorLockOperationType, t)}`)\n .join(\"\"),\n \"door lock modes\": this.supportedDoorLockModes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(DoorLockMode, t)}`)\n .join(\"\"),\n \"outside handles\": this.supportedOutsideHandles.join(\", \"),\n \"inside handles\": this.supportedInsideHandles.join(\", \"),\n },\n };\n }\n}\n@CCCommand(DoorLockCommand.CapabilitiesGet)\n@expectedCCResponse(DoorLockCCCapabilitiesReport)\nexport class DoorLockCCCapabilitiesGet extends DoorLockCC {\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import * as __validateArgs from \"./DoorLockCC._validateArgs.js\";\nconst { validateArgs_DoorLockCCAPI_set, validateArgs_DoorLockCCAPI_setConfiguration } = __validateArgs;\nimport { CommandClasses, Duration, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, SupervisionStatus, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, enumValuesToMetadataStates, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { isArray } from \"alcalzone-shared/typeguards\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, 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 { type DoorHandleStatus, DoorLockCommand, DoorLockMode, DoorLockOperationType, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { DoorLockCCValues } from \"./_CCValues.generated.js\";\nexport { DoorLockCCValues };\nexport function shouldAutoCreateLatchStatusValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.latchSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateBoltStatusValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.boltSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateDoorStatusValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.doorSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateTwistAssistConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.twistAssistSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateBlockToBlockConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.blockToBlockSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateAutoRelockConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.autoRelockSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateHoldAndReleaseConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.holdAndReleaseSupported.endpoint(endpoint.index));\n}\nconst configurationSetParameters = [\n \"operationType\",\n \"outsideHandlesCanOpenDoorConfiguration\",\n \"insideHandlesCanOpenDoorConfiguration\",\n \"lockTimeoutConfiguration\",\n \"autoRelockTime\",\n \"holdAndReleaseTime\",\n \"twistAssist\",\n \"blockToBlock\",\n] as const;\n@API(CommandClasses[\"Door Lock\"])\nexport class DoorLockCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: DoorLockCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case DoorLockCommand.OperationSet:\n case DoorLockCommand.OperationGet:\n case DoorLockCommand.ConfigurationSet:\n case DoorLockCommand.ConfigurationGet:\n return true; // This is mandatory\n case DoorLockCommand.CapabilitiesGet:\n return this.version >= 4;\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: DoorLockCCAPI, { property }, value) {\n if (property === \"targetMode\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.set(value);\n }\n else if (typeof property === \"string\"\n && configurationSetParameters.includes(property as any)) {\n // checking every type here would create a LOT of duplicate code, so we don't\n // ConfigurationSet expects all parameters --> read the others from cache\n const config = {\n [property]: value,\n } as DoorLockCCConfigurationSetOptions;\n for (const param of configurationSetParameters) {\n if (param !== property) {\n (config as any)[param] = this.tryGetValueDB()?.getValue({\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property: param,\n });\n }\n }\n // Fix insideHandlesCanOpenDoorConfiguration is not iterable\n const allTrue: DoorHandleStatus = [true, true, true, true];\n if (!config.insideHandlesCanOpenDoorConfiguration) {\n config.insideHandlesCanOpenDoorConfiguration = allTrue;\n }\n if (!config.outsideHandlesCanOpenDoorConfiguration) {\n config.outsideHandlesCanOpenDoorConfiguration = allTrue;\n }\n const result = await this.setConfiguration(config);\n // Verify the current value after a delay, unless the command was supervised and successful\n if (!supervisedCommandSucceeded(result)) {\n this.schedulePoll({ property }, value);\n }\n return result;\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property }, value) => {\n if (property === \"targetMode\" && typeof value === \"number\") {\n const targetMode = value;\n const currentModeValueId = DoorLockCCValues.currentMode.endpoint(this.endpoint.index);\n return {\n isSplitStateTargetValue: true,\n supervisionDelayedUpdates: true,\n optimisticallyUpdateRelatedValues: (_supervisedAndSuccessful) => {\n this.tryGetValueDB()?.setValue(currentModeValueId, targetMode);\n },\n supervisionOnSuccess: () => {\n this.tryGetValueDB()?.setValue(currentModeValueId, targetMode);\n },\n supervisionOnFailure: async () => {\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n },\n verifyChanges: async (result) => {\n switch (result?.status) {\n case SupervisionStatus.Success:\n case SupervisionStatus.Working:\n return;\n case SupervisionStatus.Fail:\n case SupervisionStatus.NoSupport:\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n return;\n default:\n this.schedulePoll({ property: \"currentMode\" }, targetMode);\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: DoorLockCCAPI, { property }) {\n switch (property) {\n case \"currentMode\":\n case \"targetMode\":\n case \"duration\":\n case \"outsideHandlesCanOpenDoor\":\n case \"insideHandlesCanOpenDoor\":\n case \"latchStatus\":\n case \"boltStatus\":\n case \"doorStatus\":\n case \"lockTimeout\":\n return (await this.get())?.[property];\n case \"operationType\":\n case \"outsideHandlesCanOpenDoorConfiguration\":\n case \"insideHandlesCanOpenDoorConfiguration\":\n case \"lockTimeoutConfiguration\":\n case \"autoRelockTime\":\n case \"holdAndReleaseTime\":\n case \"twistAssist\":\n case \"blockToBlock\":\n return (await this.getConfiguration())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getCapabilities() {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.CapabilitiesGet);\n const cc = new DoorLockCCCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<DoorLockCCCapabilitiesReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"autoRelockSupported\",\n \"blockToBlockSupported\",\n \"boltSupported\",\n \"doorSupported\",\n \"holdAndReleaseSupported\",\n \"latchSupported\",\n \"twistAssistSupported\",\n \"supportedDoorLockModes\",\n \"supportedInsideHandles\",\n \"supportedOperationTypes\",\n \"supportedOutsideHandles\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.OperationGet);\n const cc = new DoorLockCCOperationGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<DoorLockCCOperationReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"currentMode\",\n \"targetMode\",\n \"duration\",\n \"outsideHandlesCanOpenDoor\",\n \"insideHandlesCanOpenDoor\",\n \"latchStatus\",\n \"boltStatus\",\n \"doorStatus\",\n \"lockTimeout\",\n ]);\n }\n }\n @validateArgs_DoorLockCCAPI_set()\n public async set(mode: DoorLockMode): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.OperationSet);\n const cc = new DoorLockCCOperationSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n mode,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_DoorLockCCAPI_setConfiguration()\n public async setConfiguration(configuration: DoorLockCCConfigurationSetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.ConfigurationSet);\n const cc = new DoorLockCCConfigurationSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...configuration,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getConfiguration() {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.ConfigurationGet);\n const cc = new DoorLockCCConfigurationGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<DoorLockCCConfigurationReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"operationType\",\n \"outsideHandlesCanOpenDoorConfiguration\",\n \"insideHandlesCanOpenDoorConfiguration\",\n \"lockTimeoutConfiguration\",\n \"autoRelockTime\",\n \"holdAndReleaseTime\",\n \"twistAssist\",\n \"blockToBlock\",\n ]);\n }\n }\n}\n@commandClass(CommandClasses[\"Door Lock\"])\n@implementedVersion(4)\n@ccValues(DoorLockCCValues)\nexport class DoorLockCC extends CommandClass {\n declare ccCommand: DoorLockCommand;\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[\"Door Lock\"], 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 // We need to do some queries after a potential timeout\n // In this case, do now mark this CC as interviewed completely\n let hadCriticalTimeout = false;\n // By default, assume all status sensors to be supported\n let doorSupported = true;\n let boltSupported = true;\n let latchSupported = true;\n if (api.version >= 4) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting lock capabilities...\",\n direction: \"outbound\",\n });\n const resp = await api.getCapabilities();\n if (resp) {\n const logMessage = `received lock capabilities:\nsupported operation types: ${resp.supportedOperationTypes\n .map((t) => getEnumMemberName(DoorLockOperationType, t))\n .join(\", \")}\nsupported door lock modes: ${resp.supportedDoorLockModes\n .map((t) => getEnumMemberName(DoorLockMode, t))\n .map((str) => `\\n\u00B7 ${str}`)\n .join(\"\")}\nsupported outside handles: ${resp.supportedOutsideHandles\n .map(String)\n .join(\", \")}\nsupported inside handles: ${resp.supportedInsideHandles.map(String).join(\", \")}\nsupports door status: ${resp.doorSupported}\nsupports bolt status: ${resp.boltSupported}\nsupports latch status: ${resp.latchSupported}\nsupports auto-relock: ${resp.autoRelockSupported}\nsupports hold-and-release: ${resp.holdAndReleaseSupported}\nsupports twist assist: ${resp.twistAssistSupported}\nsupports block to block: ${resp.blockToBlockSupported}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n doorSupported = resp.doorSupported;\n boltSupported = resp.boltSupported;\n latchSupported = resp.latchSupported;\n // Update metadata of settable states\n const targetModeValue = DoorLockCCValues.targetMode;\n this.setMetadata(ctx, targetModeValue, {\n ...targetModeValue.meta,\n states: enumValuesToMetadataStates(DoorLockMode, resp.supportedDoorLockModes),\n });\n const operationTypeValue = DoorLockCCValues.operationType;\n this.setMetadata(ctx, operationTypeValue, {\n ...operationTypeValue.meta,\n states: enumValuesToMetadataStates(DoorLockOperationType, resp.supportedOperationTypes),\n });\n }\n else {\n hadCriticalTimeout = true;\n }\n }\n if (!hadCriticalTimeout) {\n // Save support information for the status values\n const doorStatusValue = DoorLockCCValues.doorStatus;\n if (doorSupported)\n this.setMetadata(ctx, doorStatusValue);\n this.setValue(ctx, DoorLockCCValues.doorSupported, doorSupported);\n const latchStatusValue = DoorLockCCValues.latchStatus;\n if (latchSupported)\n this.setMetadata(ctx, latchStatusValue);\n this.setValue(ctx, DoorLockCCValues.latchSupported, latchSupported);\n const boltStatusValue = DoorLockCCValues.boltStatus;\n if (boltSupported)\n this.setMetadata(ctx, boltStatusValue);\n this.setValue(ctx, DoorLockCCValues.boltSupported, boltSupported);\n }\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n if (!hadCriticalTimeout)\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\"], 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 lock configuration...\",\n direction: \"outbound\",\n });\n const config = await api.getConfiguration();\n if (config) {\n let logMessage = `received lock configuration:\noperation type: ${getEnumMemberName(DoorLockOperationType, config.operationType)}`;\n if (config.operationType === DoorLockOperationType.Timed) {\n logMessage += `\nlock timeout: ${config.lockTimeoutConfiguration} seconds\n`;\n }\n logMessage += `\noutside handles can open door: ${config.outsideHandlesCanOpenDoorConfiguration\n .map(String)\n .join(\", \")}\ninside handles can open door: ${config.insideHandlesCanOpenDoorConfiguration\n .map(String)\n .join(\", \")}`;\n if (api.version >= 4) {\n logMessage += `\nauto-relock time ${config.autoRelockTime ?? \"-\"} seconds\nhold-and-release time ${config.holdAndReleaseTime ?? \"-\"} seconds\ntwist assist ${!!config.twistAssist}\nblock to block ${!!config.blockToBlock}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting current lock status...\",\n direction: \"outbound\",\n });\n const status = await api.get();\n if (status) {\n let logMessage = `received lock status:\ncurrent mode: ${getEnumMemberName(DoorLockMode, status.currentMode)}`;\n if (status.targetMode != undefined) {\n logMessage += `\ntarget mode: ${getEnumMemberName(DoorLockMode, status.targetMode)}\nremaining duration: ${status.duration?.toString() ?? \"undefined\"}`;\n }\n if (status.lockTimeout != undefined) {\n logMessage += `\nlock timeout: ${status.lockTimeout} seconds`;\n }\n if (status.doorStatus != undefined) {\n logMessage += `\ndoor status: ${status.doorStatus}`;\n }\n if (status.boltStatus != undefined) {\n logMessage += `\nbolt status: ${status.boltStatus}`;\n }\n if (status.latchStatus != undefined) {\n logMessage += `\nlatch status: ${status.latchStatus}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n /**\n * Returns whether the node supports auto relock.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsAutoRelockCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.autoRelockSupported.endpoint(endpoint.index));\n }\n /**\n * Returns whether the node supports hold and release.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsHoldAndReleaseCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.holdAndReleaseSupported.endpoint(endpoint.index));\n }\n /**\n * Returns whether the node supports twist assist.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsTwistAssistCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.twistAssistSupported.endpoint(endpoint.index));\n }\n /**\n * Returns whether the node supports block to block.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsBlockToBlockCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.blockToBlockSupported.endpoint(endpoint.index));\n }\n /**\n * Returns the supported outside handles.\n * This only works AFTER the node has been interviewed.\n */\n public static getSupportedOutsideHandlesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<DoorHandleStatus> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.supportedOutsideHandles.endpoint(endpoint.index));\n }\n /**\n * Returns the supported inside handles.\n * This only works AFTER the node has been interviewed.\n */\n public static getSupportedInsideHandlesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<DoorHandleStatus> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.supportedInsideHandles.endpoint(endpoint.index));\n }\n}\n// @publicAPI\nexport interface DoorLockCCOperationSetOptions {\n mode: DoorLockMode;\n}\n@CCCommand(DoorLockCommand.OperationSet)\n@useSupervision()\nexport class DoorLockCCOperationSet extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCOperationSetOptions>) {\n super(options);\n if (options.mode === DoorLockMode.Unknown) {\n throw new ZWaveError(`Unknown is not a valid door lock target state!`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.mode = options.mode;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCOperationSet {\n validatePayload(raw.payload.length >= 1);\n const mode: DoorLockMode = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n public mode: DoorLockMode;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.mode]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"target mode\": getEnumMemberName(DoorLockMode, this.mode),\n },\n };\n }\n}\n// @publicAPI\nexport interface DoorLockCCOperationReportOptions {\n currentMode: DoorLockMode;\n outsideHandlesCanOpenDoor: DoorHandleStatus;\n insideHandlesCanOpenDoor: DoorHandleStatus;\n doorStatus?: \"closed\" | \"open\";\n boltStatus?: \"unlocked\" | \"locked\";\n latchStatus?: \"closed\" | \"open\";\n lockTimeout?: number;\n targetMode?: DoorLockMode;\n duration?: Duration;\n}\n@CCCommand(DoorLockCommand.OperationReport)\n@ccValueProperty(\"currentMode\", DoorLockCCValues.currentMode)\n@ccValueProperty(\"targetMode\", DoorLockCCValues.targetMode)\n@ccValueProperty(\"duration\", DoorLockCCValues.duration)\n@ccValueProperty(\"outsideHandlesCanOpenDoor\", DoorLockCCValues.outsideHandlesCanOpenDoor)\n@ccValueProperty(\"insideHandlesCanOpenDoor\", DoorLockCCValues.insideHandlesCanOpenDoor)\n@ccValueProperty(\"lockTimeout\", DoorLockCCValues.lockTimeout)\nexport class DoorLockCCOperationReport extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCOperationReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.currentMode = options.currentMode;\n this.outsideHandlesCanOpenDoor = options.outsideHandlesCanOpenDoor;\n this.insideHandlesCanOpenDoor = options.insideHandlesCanOpenDoor;\n this.doorStatus = options.doorStatus;\n this.boltStatus = options.boltStatus;\n this.latchStatus = options.latchStatus;\n this.lockTimeout = options.lockTimeout;\n this.targetMode = options.targetMode;\n this.duration = options.duration;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCOperationReport {\n validatePayload(raw.payload.length >= 5);\n const currentMode: DoorLockMode = raw.payload[0];\n const outsideHandlesCanOpenDoor: DoorHandleStatus = [\n !!(raw.payload[1] & 16),\n !!(raw.payload[1] & 32),\n !!(raw.payload[1] & 64),\n !!(raw.payload[1] & 128),\n ];\n const insideHandlesCanOpenDoor: DoorHandleStatus = [\n !!(raw.payload[1] & 0b0001),\n !!(raw.payload[1] & 0b0010),\n !!(raw.payload[1] & 0b0100),\n !!(raw.payload[1] & 0b1000),\n ];\n const doorStatus: \"closed\" | \"open\" | undefined = !!(raw.payload[2] & 0b1)\n ? \"closed\"\n : \"open\";\n const boltStatus: \"unlocked\" | \"locked\" | undefined = !!(raw.payload[2] & 0b10) ? \"unlocked\" : \"locked\";\n const latchStatus: \"closed\" | \"open\" | undefined = !!(raw.payload[2] & 0b100)\n ? \"closed\"\n : \"open\";\n // Ignore invalid timeout values\n const lockTimeoutMinutes = raw.payload[3];\n const lockTimeoutSeconds = raw.payload[4];\n let lockTimeout: number | undefined;\n if (lockTimeoutMinutes <= 253 && lockTimeoutSeconds <= 59) {\n lockTimeout = lockTimeoutSeconds + lockTimeoutMinutes * 60;\n }\n let targetMode: DoorLockMode | undefined;\n let duration: Duration | undefined;\n if (raw.payload.length >= 7) {\n targetMode = raw.payload[5];\n duration = Duration.parseReport(raw.payload[6]);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n currentMode,\n outsideHandlesCanOpenDoor,\n insideHandlesCanOpenDoor,\n doorStatus,\n boltStatus,\n latchStatus,\n lockTimeout,\n targetMode,\n duration,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const handles = [\n ...this.insideHandlesCanOpenDoor,\n ...this.outsideHandlesCanOpenDoor,\n ]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n const doorCondition = (this.doorStatus === \"closed\" ? 0b1 : 0)\n | (this.boltStatus === \"unlocked\" ? 0b10 : 0)\n | (this.latchStatus === \"closed\" ? 0b100 : 0);\n let lockTimeoutMinutes = 0xfe;\n let lockTimeoutSeconds = 0xfe;\n if (this.lockTimeout != undefined) {\n lockTimeoutMinutes = Math.floor(this.lockTimeout / 60);\n lockTimeoutSeconds = this.lockTimeout % 60;\n }\n const payload = [\n this.currentMode,\n handles,\n doorCondition,\n lockTimeoutMinutes,\n lockTimeoutSeconds,\n ];\n if (this.targetMode != undefined) {\n payload.push(this.targetMode);\n payload.push((this.duration ?? Duration.default()).serializeReport());\n }\n this.payload = Bytes.from(payload);\n return super.serialize(ctx);\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Only store the door/bolt/latch status if the lock supports it\n const supportsDoorStatus = !!this.getValue(ctx, DoorLockCCValues.doorSupported);\n if (supportsDoorStatus) {\n this.setValue(ctx, DoorLockCCValues.doorStatus, this.doorStatus);\n }\n const supportsBoltStatus = !!this.getValue(ctx, DoorLockCCValues.boltSupported);\n if (supportsBoltStatus) {\n this.setValue(ctx, DoorLockCCValues.boltStatus, this.boltStatus);\n }\n const supportsLatchStatus = !!this.getValue(ctx, DoorLockCCValues.latchSupported);\n if (supportsLatchStatus) {\n this.setValue(ctx, DoorLockCCValues.latchStatus, this.latchStatus);\n }\n return true;\n }\n public readonly currentMode: DoorLockMode;\n public readonly targetMode?: DoorLockMode;\n public readonly duration?: Duration;\n public readonly outsideHandlesCanOpenDoor: DoorHandleStatus;\n public readonly insideHandlesCanOpenDoor: DoorHandleStatus;\n public readonly latchStatus?: \"open\" | \"closed\";\n public readonly boltStatus?: \"locked\" | \"unlocked\";\n public readonly doorStatus?: \"open\" | \"closed\";\n public readonly lockTimeout?: number; // in seconds\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"current mode\": getEnumMemberName(DoorLockMode, this.currentMode),\n \"active outside handles\": this.outsideHandlesCanOpenDoor.join(\", \"),\n \"active inside handles\": this.insideHandlesCanOpenDoor.join(\", \"),\n };\n if (this.latchStatus != undefined) {\n message[\"latch status\"] = this.latchStatus;\n }\n if (this.boltStatus != undefined) {\n message[\"bolt status\"] = this.boltStatus;\n }\n if (this.doorStatus != undefined) {\n message[\"door status\"] = this.doorStatus;\n }\n if (this.targetMode != undefined) {\n message[\"target mode\"] = getEnumMemberName(DoorLockMode, this.targetMode);\n }\n if (this.duration != undefined) {\n message[\"remaining duration\"] = this.duration.toString();\n }\n if (this.lockTimeout != undefined) {\n message[\"lock timeout\"] = `${this.lockTimeout} seconds`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(DoorLockCommand.OperationGet)\n@expectedCCResponse(DoorLockCCOperationReport)\nexport class DoorLockCCOperationGet extends DoorLockCC {\n}\n// @publicAPI\nexport interface DoorLockCCConfigurationReportOptions {\n operationType: DoorLockOperationType;\n outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n lockTimeoutConfiguration?: number;\n autoRelockTime?: number;\n holdAndReleaseTime?: number;\n twistAssist?: boolean;\n blockToBlock?: boolean;\n}\n@CCCommand(DoorLockCommand.ConfigurationReport)\n@ccValueProperty(\"operationType\", DoorLockCCValues.operationType)\n@ccValueProperty(\"outsideHandlesCanOpenDoorConfiguration\", DoorLockCCValues.outsideHandlesCanOpenDoorConfiguration)\n@ccValueProperty(\"insideHandlesCanOpenDoorConfiguration\", DoorLockCCValues.insideHandlesCanOpenDoorConfiguration)\n@ccValueProperty(\"lockTimeoutConfiguration\", DoorLockCCValues.lockTimeoutConfiguration)\nexport class DoorLockCCConfigurationReport extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCConfigurationReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.operationType = options.operationType;\n this.outsideHandlesCanOpenDoorConfiguration =\n options.outsideHandlesCanOpenDoorConfiguration;\n this.insideHandlesCanOpenDoorConfiguration =\n options.insideHandlesCanOpenDoorConfiguration;\n this.lockTimeoutConfiguration = options.lockTimeoutConfiguration;\n this.autoRelockTime = options.autoRelockTime;\n this.holdAndReleaseTime = options.holdAndReleaseTime;\n this.twistAssist = options.twistAssist;\n this.blockToBlock = options.blockToBlock;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCConfigurationReport {\n validatePayload(raw.payload.length >= 4);\n const operationType: DoorLockOperationType = raw.payload[0];\n const outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 16),\n !!(raw.payload[1] & 32),\n !!(raw.payload[1] & 64),\n !!(raw.payload[1] & 128),\n ];\n const insideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 0b0001),\n !!(raw.payload[1] & 0b0010),\n !!(raw.payload[1] & 0b0100),\n !!(raw.payload[1] & 0b1000),\n ];\n let lockTimeoutConfiguration: number | undefined;\n if (operationType === DoorLockOperationType.Timed) {\n const lockTimeoutMinutes = raw.payload[2];\n const lockTimeoutSeconds = raw.payload[3];\n if (lockTimeoutMinutes <= 0xfd && lockTimeoutSeconds <= 59) {\n lockTimeoutConfiguration = lockTimeoutSeconds\n + lockTimeoutMinutes * 60;\n }\n }\n let autoRelockTime: number | undefined;\n let holdAndReleaseTime: number | undefined;\n let twistAssist: boolean | undefined;\n let blockToBlock: boolean | undefined;\n if (raw.payload.length >= 5) {\n autoRelockTime = raw.payload.readUInt16BE(4);\n holdAndReleaseTime = raw.payload.readUInt16BE(6);\n const flags = raw.payload[8];\n twistAssist = !!(flags & 0b1);\n blockToBlock = !!(flags & 0b10);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n outsideHandlesCanOpenDoorConfiguration,\n insideHandlesCanOpenDoorConfiguration,\n lockTimeoutConfiguration,\n autoRelockTime,\n holdAndReleaseTime,\n twistAssist,\n blockToBlock,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const handles = [\n ...this.insideHandlesCanOpenDoorConfiguration,\n ...this.outsideHandlesCanOpenDoorConfiguration,\n ]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n let lockTimeoutMinutes: number;\n let lockTimeoutSeconds: number;\n if (this.operationType === DoorLockOperationType.Timed\n && this.lockTimeoutConfiguration != undefined) {\n lockTimeoutMinutes = Math.floor(this.lockTimeoutConfiguration / 60);\n lockTimeoutSeconds = this.lockTimeoutConfiguration % 60;\n }\n else {\n lockTimeoutMinutes = lockTimeoutSeconds = 0xfe;\n }\n const flags = (this.twistAssist ? 0b1 : 0)\n | (this.blockToBlock ? 0b10 : 0);\n this.payload = Bytes.from([\n this.operationType,\n handles,\n lockTimeoutMinutes,\n lockTimeoutSeconds,\n ]);\n if (this.autoRelockTime != undefined\n || this.holdAndReleaseTime != undefined\n || this.twistAssist != undefined\n || this.blockToBlock != undefined) {\n const extended = Bytes.alloc(5);\n extended.writeUInt16BE((this.autoRelockTime ?? 0) & 0xffff, 0);\n extended.writeUInt16BE((this.holdAndReleaseTime ?? 0) & 0xffff, 2);\n extended[4] = flags;\n this.payload = Bytes.concat([this.payload, extended]);\n }\n return super.serialize(ctx);\n }\n public readonly operationType: DoorLockOperationType;\n public readonly outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public readonly insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public readonly lockTimeoutConfiguration?: number;\n // These are not always supported and have to be persisted manually\n // to avoid unsupported values being exposed to the user\n public readonly autoRelockTime?: number;\n public readonly holdAndReleaseTime?: number;\n public readonly twistAssist?: boolean;\n public readonly blockToBlock?: boolean;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Only store the autoRelockTime etc. params if the lock supports it\n const supportsAutoRelock = !!this.getValue(ctx, DoorLockCCValues.autoRelockSupported);\n if (supportsAutoRelock) {\n this.setValue(ctx, DoorLockCCValues.autoRelockTime, this.autoRelockTime);\n }\n const supportsHoldAndRelease = !!this.getValue(ctx, DoorLockCCValues.holdAndReleaseSupported);\n if (supportsHoldAndRelease) {\n this.setValue(ctx, DoorLockCCValues.holdAndReleaseTime, this.holdAndReleaseTime);\n }\n const supportsTwistAssist = !!this.getValue(ctx, DoorLockCCValues.twistAssistSupported);\n if (supportsTwistAssist) {\n this.setValue(ctx, DoorLockCCValues.twistAssist, this.twistAssist);\n }\n const supportsBlockToBlock = !!this.getValue(ctx, DoorLockCCValues.blockToBlockSupported);\n if (supportsBlockToBlock) {\n this.setValue(ctx, DoorLockCCValues.blockToBlock, this.blockToBlock);\n }\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"operation type\": getEnumMemberName(DoorLockOperationType, this.operationType),\n \"outside handle configuration\": this\n .outsideHandlesCanOpenDoorConfiguration.join(\", \"),\n \"inside handle configuration\": this\n .insideHandlesCanOpenDoorConfiguration.join(\", \"),\n };\n if (this.lockTimeoutConfiguration != undefined) {\n message[\"timed mode duration\"] = `${this.lockTimeoutConfiguration} seconds`;\n }\n if (this.autoRelockTime != undefined) {\n message[\"auto-relock time\"] = `${this.autoRelockTime} seconds`;\n }\n if (this.holdAndReleaseTime != undefined) {\n message[\"hold-and-release time\"] = `${this.holdAndReleaseTime} seconds`;\n }\n if (this.twistAssist != undefined) {\n message[\"twist assist enabled\"] = this.twistAssist;\n }\n if (this.blockToBlock != undefined) {\n message[\"block-to-block enabled\"] = this.blockToBlock;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(DoorLockCommand.ConfigurationGet)\n@expectedCCResponse(DoorLockCCConfigurationReport)\nexport class DoorLockCCConfigurationGet extends DoorLockCC {\n}\n// @publicAPI\nexport type DoorLockCCConfigurationSetOptions = ({\n operationType: DoorLockOperationType.Timed;\n lockTimeoutConfiguration: number;\n} | {\n operationType: DoorLockOperationType.Constant;\n lockTimeoutConfiguration?: undefined;\n}) & {\n outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n // V4+\n autoRelockTime?: number;\n holdAndReleaseTime?: number;\n twistAssist?: boolean;\n blockToBlock?: boolean;\n};\n@CCCommand(DoorLockCommand.ConfigurationSet)\n@useSupervision()\nexport class DoorLockCCConfigurationSet extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCConfigurationSetOptions>) {\n super(options);\n this.operationType = options.operationType;\n this.outsideHandlesCanOpenDoorConfiguration =\n options.outsideHandlesCanOpenDoorConfiguration;\n this.insideHandlesCanOpenDoorConfiguration =\n options.insideHandlesCanOpenDoorConfiguration;\n this.lockTimeoutConfiguration = options.lockTimeoutConfiguration;\n this.autoRelockTime = options.autoRelockTime;\n this.holdAndReleaseTime = options.holdAndReleaseTime;\n this.twistAssist = options.twistAssist;\n this.blockToBlock = options.blockToBlock;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCConfigurationSet {\n validatePayload(raw.payload.length >= 4);\n const operationType: DoorLockOperationType = raw.payload[0];\n const outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 16),\n !!(raw.payload[1] & 32),\n !!(raw.payload[1] & 64),\n !!(raw.payload[1] & 128),\n ];\n const insideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 0b0001),\n !!(raw.payload[1] & 0b0010),\n !!(raw.payload[1] & 0b0100),\n !!(raw.payload[1] & 0b1000),\n ];\n let lockTimeoutConfiguration: number | undefined;\n if (operationType === DoorLockOperationType.Timed) {\n const lockTimeoutMinutes = raw.payload[2];\n const lockTimeoutSeconds = raw.payload[3];\n if (lockTimeoutMinutes <= 0xfd && lockTimeoutSeconds <= 59) {\n lockTimeoutConfiguration = lockTimeoutSeconds\n + lockTimeoutMinutes * 60;\n }\n }\n let autoRelockTime: number | undefined;\n let holdAndReleaseTime: number | undefined;\n let twistAssist: boolean | undefined;\n let blockToBlock: boolean | undefined;\n if (raw.payload.length >= 9) {\n autoRelockTime = raw.payload.readUInt16BE(4);\n holdAndReleaseTime = raw.payload.readUInt16BE(6);\n const flags = raw.payload[8];\n twistAssist = !!(flags & 0b1);\n blockToBlock = !!(flags & 0b10);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n outsideHandlesCanOpenDoorConfiguration,\n insideHandlesCanOpenDoorConfiguration,\n lockTimeoutConfiguration,\n autoRelockTime,\n holdAndReleaseTime,\n twistAssist,\n blockToBlock,\n } as WithAddress<DoorLockCCConfigurationSetOptions>);\n }\n public operationType: DoorLockOperationType;\n public outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public lockTimeoutConfiguration?: number;\n public autoRelockTime?: number;\n public holdAndReleaseTime?: number;\n public twistAssist?: boolean;\n public blockToBlock?: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const insideHandles = isArray(this.insideHandlesCanOpenDoorConfiguration)\n ? this.insideHandlesCanOpenDoorConfiguration\n : [];\n const outsideHandles = isArray(this.outsideHandlesCanOpenDoorConfiguration)\n ? this.outsideHandlesCanOpenDoorConfiguration\n : [];\n const handles = [...insideHandles, ...outsideHandles]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n let lockTimeoutMinutes: number;\n let lockTimeoutSeconds: number;\n if (this.operationType === DoorLockOperationType.Constant) {\n lockTimeoutMinutes = lockTimeoutSeconds = 0xfe;\n }\n else {\n lockTimeoutMinutes = Math.floor(this.lockTimeoutConfiguration! / 60);\n lockTimeoutSeconds = this.lockTimeoutConfiguration! % 60;\n }\n const flags = (this.twistAssist ? 0b1 : 0)\n | (this.blockToBlock ? 0b10 : 0);\n this.payload = Bytes.from([\n this.operationType,\n handles,\n lockTimeoutMinutes,\n lockTimeoutSeconds,\n // placeholder for auto relock time\n 0,\n 0,\n // placeholder for hold and release time\n 0,\n 0,\n flags,\n ]);\n this.payload.writeUInt16BE((this.autoRelockTime ?? 0) & 0xffff, 4);\n this.payload.writeUInt16BE((this.holdAndReleaseTime ?? 0) & 0xffff, 6);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const insideHandles = isArray(this.insideHandlesCanOpenDoorConfiguration)\n ? this.insideHandlesCanOpenDoorConfiguration\n : [];\n const outsideHandles = isArray(this.outsideHandlesCanOpenDoorConfiguration)\n ? this.outsideHandlesCanOpenDoorConfiguration\n : [];\n const message: MessageRecord = {\n \"operation type\": getEnumMemberName(DoorLockOperationType, this.operationType),\n \"outside handle configuration\": outsideHandles.join(\", \"),\n \"inside handle configuration\": insideHandles.join(\", \"),\n };\n if (this.lockTimeoutConfiguration != undefined) {\n message[\"timed mode duration\"] = `${this.lockTimeoutConfiguration} seconds`;\n }\n if (this.autoRelockTime != undefined) {\n message[\"auto-relock time\"] = `${this.autoRelockTime} seconds`;\n }\n if (this.holdAndReleaseTime != undefined) {\n message[\"hold-and-release time\"] = `${this.holdAndReleaseTime} seconds`;\n }\n if (this.twistAssist != undefined) {\n message[\"enable twist assist\"] = this.twistAssist;\n }\n if (this.blockToBlock != undefined) {\n message[\"enable block-to-block\"] = this.blockToBlock;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface DoorLockCCCapabilitiesReportOptions {\n supportedOperationTypes: DoorLockOperationType[];\n supportedDoorLockModes: DoorLockMode[];\n supportedOutsideHandles: DoorHandleStatus;\n supportedInsideHandles: DoorHandleStatus;\n doorSupported: boolean;\n boltSupported: boolean;\n latchSupported: boolean;\n blockToBlockSupported: boolean;\n twistAssistSupported: boolean;\n holdAndReleaseSupported: boolean;\n autoRelockSupported: boolean;\n}\n@CCCommand(DoorLockCommand.CapabilitiesReport)\n@ccValueProperty(\"supportedOutsideHandles\", DoorLockCCValues.supportedOutsideHandles)\n@ccValueProperty(\"supportedInsideHandles\", DoorLockCCValues.supportedInsideHandles)\n@ccValueProperty(\"autoRelockSupported\", DoorLockCCValues.autoRelockSupported)\n@ccValueProperty(\"holdAndReleaseSupported\", DoorLockCCValues.holdAndReleaseSupported)\n@ccValueProperty(\"twistAssistSupported\", DoorLockCCValues.twistAssistSupported)\n@ccValueProperty(\"blockToBlockSupported\", DoorLockCCValues.blockToBlockSupported)\nexport class DoorLockCCCapabilitiesReport extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCCapabilitiesReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedOperationTypes = options.supportedOperationTypes;\n this.supportedDoorLockModes = options.supportedDoorLockModes;\n this.supportedOutsideHandles = options.supportedOutsideHandles;\n this.supportedInsideHandles = options.supportedInsideHandles;\n this.doorSupported = options.doorSupported;\n this.boltSupported = options.boltSupported;\n this.latchSupported = options.latchSupported;\n this.blockToBlockSupported = options.blockToBlockSupported;\n this.twistAssistSupported = options.twistAssistSupported;\n this.holdAndReleaseSupported = options.holdAndReleaseSupported;\n this.autoRelockSupported = options.autoRelockSupported;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCCapabilitiesReport {\n // parse variable length operation type bit mask\n validatePayload(raw.payload.length >= 1);\n const bitMaskLength = raw.payload[0] & 0b11111;\n let offset = 1;\n validatePayload(raw.payload.length >= offset + bitMaskLength + 1);\n const supportedOperationTypes: DoorLockOperationType[] = parseBitMask(raw.payload.subarray(offset, offset + bitMaskLength), \n // bit 0 is reserved, bitmask starts at 1\n 0);\n offset += bitMaskLength;\n // parse variable length door lock mode list\n const listLength = raw.payload[offset];\n offset += 1;\n validatePayload(raw.payload.length >= offset + listLength + 3);\n const supportedDoorLockModes: DoorLockMode[] = [\n ...raw.payload.subarray(offset, offset + listLength),\n ];\n offset += listLength;\n const supportedOutsideHandles: DoorHandleStatus = [\n !!(raw.payload[offset] & 16),\n !!(raw.payload[offset] & 32),\n !!(raw.payload[offset] & 64),\n !!(raw.payload[offset] & 128),\n ];\n const supportedInsideHandles: DoorHandleStatus = [\n !!(raw.payload[offset] & 0b0001),\n !!(raw.payload[offset] & 0b0010),\n !!(raw.payload[offset] & 0b0100),\n !!(raw.payload[offset] & 0b1000),\n ];\n const doorSupported = !!(raw.payload[offset + 1] & 0b1);\n const boltSupported = !!(raw.payload[offset + 1] & 0b10);\n const latchSupported = !!(raw.payload[offset + 1] & 0b100);\n const blockToBlockSupported = !!(raw.payload[offset + 2] & 0b1);\n const twistAssistSupported = !!(raw.payload[offset + 2] & 0b10);\n const holdAndReleaseSupported = !!(raw.payload[offset + 2] & 0b100);\n const autoRelockSupported = !!(raw.payload[offset + 2] & 0b1000);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedOperationTypes,\n supportedDoorLockModes,\n supportedOutsideHandles,\n supportedInsideHandles,\n doorSupported,\n boltSupported,\n latchSupported,\n blockToBlockSupported,\n twistAssistSupported,\n holdAndReleaseSupported,\n autoRelockSupported,\n });\n }\n public readonly supportedOperationTypes: readonly DoorLockOperationType[];\n public readonly supportedDoorLockModes: readonly DoorLockMode[];\n public readonly supportedOutsideHandles: DoorHandleStatus;\n public readonly supportedInsideHandles: DoorHandleStatus;\n // These 3 are not automatically persisted because in CC version 3\n // we have to assume them to be supported. In v4 we can query this.\n public readonly latchSupported: boolean;\n public readonly boltSupported: boolean;\n public readonly doorSupported: boolean;\n public readonly autoRelockSupported: boolean;\n public readonly holdAndReleaseSupported: boolean;\n public readonly twistAssistSupported: boolean;\n public readonly blockToBlockSupported: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // Operation type bitmask (variable length)\n const operationTypeMask = encodeBitMask(this.supportedOperationTypes, undefined, 0);\n // Door lock mode list\n const modeList = Bytes.from(this.supportedDoorLockModes as number[]);\n const handles = [\n ...this.supportedInsideHandles,\n ...this.supportedOutsideHandles,\n ]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n const componentStatus = (this.doorSupported ? 0b1 : 0)\n | (this.boltSupported ? 0b10 : 0)\n | (this.latchSupported ? 0b100 : 0);\n const featureFlags = (this.blockToBlockSupported ? 0b1 : 0)\n | (this.twistAssistSupported ? 0b10 : 0)\n | (this.holdAndReleaseSupported ? 0b100 : 0)\n | (this.autoRelockSupported ? 0b1000 : 0);\n this.payload = Bytes.concat([\n [operationTypeMask.length & 0b11111],\n operationTypeMask,\n [modeList.length],\n modeList,\n [handles, componentStatus, featureFlags],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n door: this.doorSupported,\n bolt: this.boltSupported,\n latch: this.latchSupported,\n \"block-to-block feature\": this.blockToBlockSupported,\n \"twist assist feature\": this.twistAssistSupported,\n \"hold-and-release feature\": this.holdAndReleaseSupported,\n \"auto-relock feature\": this.autoRelockSupported,\n \"operation types\": this.supportedOperationTypes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(DoorLockOperationType, t)}`)\n .join(\"\"),\n \"door lock modes\": this.supportedDoorLockModes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(DoorLockMode, t)}`)\n .join(\"\"),\n \"outside handles\": this.supportedOutsideHandles.join(\", \"),\n \"inside handles\": this.supportedInsideHandles.join(\", \"),\n },\n };\n }\n}\n@CCCommand(DoorLockCommand.CapabilitiesGet)\n@expectedCCResponse(DoorLockCCCapabilitiesReport)\nexport class DoorLockCCCapabilitiesGet extends DoorLockCC {\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -184,14 +184,15 @@ let DoorLockLoggingCC = (() => {
|
|
|
184
184
|
message: `Interviewing ${this.ccName}...`,
|
|
185
185
|
direction: "none"
|
|
186
186
|
});
|
|
187
|
-
await this.refreshValues(ctx);
|
|
187
|
+
await this.refreshValues(ctx, { tag: "interview" });
|
|
188
188
|
this.setInterviewComplete(ctx, true);
|
|
189
189
|
}
|
|
190
190
|
async refreshValues(ctx, options) {
|
|
191
191
|
const node = this.getNode(ctx);
|
|
192
192
|
const endpoint = this.getEndpoint(ctx);
|
|
193
193
|
const api = import_API.CCAPI.create(import_core.CommandClasses["Door Lock Logging"], ctx, endpoint).withOptions({
|
|
194
|
-
priority: options?.priority ?? import_core.MessagePriority.NodeQuery
|
|
194
|
+
priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
|
|
195
|
+
tag: options?.tag
|
|
195
196
|
});
|
|
196
197
|
ctx.logNode(node.id, {
|
|
197
198
|
endpoint: this.endpointIndex,
|
|
@@ -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);\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 });\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 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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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -136,14 +136,15 @@ let EnergyProductionCC = (() => {
|
|
|
136
136
|
message: `Interviewing ${this.ccName}...`,
|
|
137
137
|
direction: "none"
|
|
138
138
|
});
|
|
139
|
-
await this.refreshValues(ctx);
|
|
139
|
+
await this.refreshValues(ctx, { tag: "interview" });
|
|
140
140
|
this.setInterviewComplete(ctx, true);
|
|
141
141
|
}
|
|
142
142
|
async refreshValues(ctx, options) {
|
|
143
143
|
const node = this.getNode(ctx);
|
|
144
144
|
const endpoint = this.getEndpoint(ctx);
|
|
145
145
|
const api = import_API.CCAPI.create(import_core.CommandClasses["Energy Production"], ctx, endpoint).withOptions({
|
|
146
|
-
priority: options?.priority ?? import_core.MessagePriority.NodeQuery
|
|
146
|
+
priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
|
|
147
|
+
tag: options?.tag
|
|
147
148
|
});
|
|
148
149
|
for (const parameter of [
|
|
149
150
|
import_Types.EnergyProductionParameter.Power,
|