@zwave-js/cc 15.15.3 → 15.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/cc/AlarmSensorCC.js +1 -1
- package/build/cjs/cc/AlarmSensorCC.js.map +1 -1
- package/build/cjs/cc/ApplicationStatusCC.d.ts +33 -0
- package/build/cjs/cc/ApplicationStatusCC.js +229 -0
- package/build/cjs/cc/ApplicationStatusCC.js.map +7 -0
- package/build/cjs/cc/AssociationCC.js.map +1 -1
- package/build/cjs/cc/AssociationGroupInfoCC.js +4 -4
- package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
- package/build/cjs/cc/BarrierOperatorCC.js +9 -2
- package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
- package/build/cjs/cc/BasicCC.js +1 -1
- package/build/cjs/cc/BasicCC.js.map +1 -1
- package/build/cjs/cc/BatteryCC.js +6 -2
- package/build/cjs/cc/BatteryCC.js.map +2 -2
- package/build/cjs/cc/BinarySwitchCC.js +1 -1
- package/build/cjs/cc/BinarySwitchCC.js.map +1 -1
- package/build/cjs/cc/CRC16CC.js +2 -2
- package/build/cjs/cc/CRC16CC.js.map +2 -2
- package/build/cjs/cc/CentralSceneCC.js +2 -2
- package/build/cjs/cc/CentralSceneCC.js.map +1 -1
- package/build/cjs/cc/ClimateControlScheduleCC.js +5 -5
- package/build/cjs/cc/ClimateControlScheduleCC.js.map +2 -2
- package/build/cjs/cc/ClockCC.js +1 -1
- package/build/cjs/cc/ClockCC.js.map +1 -1
- package/build/cjs/cc/ColorSwitchCC.js.map +1 -1
- package/build/cjs/cc/ConfigurationCC.d.ts +6 -0
- package/build/cjs/cc/ConfigurationCC.js +52 -4
- package/build/cjs/cc/ConfigurationCC.js.map +2 -2
- package/build/cjs/cc/DoorLockCC.js +3 -3
- package/build/cjs/cc/DoorLockCC.js.map +1 -1
- package/build/cjs/cc/EntryControlCC.d.ts +2 -2
- package/build/cjs/cc/EntryControlCC.js +3 -3
- package/build/cjs/cc/EntryControlCC.js.map +2 -2
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.d.ts +4 -4
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
- package/build/cjs/cc/IndicatorCC.js +5 -5
- package/build/cjs/cc/IndicatorCC.js.map +2 -2
- package/build/cjs/cc/IrrigationCC.js +3 -3
- package/build/cjs/cc/IrrigationCC.js.map +1 -1
- package/build/cjs/cc/LanguageCC.js +1 -1
- package/build/cjs/cc/LanguageCC.js.map +1 -1
- package/build/cjs/cc/ManufacturerProprietaryCC.d.ts +4 -4
- package/build/cjs/cc/ManufacturerProprietaryCC.js +1 -1
- package/build/cjs/cc/ManufacturerProprietaryCC.js.map +2 -2
- package/build/cjs/cc/ManufacturerSpecificCC.js +1 -1
- package/build/cjs/cc/ManufacturerSpecificCC.js.map +1 -1
- package/build/cjs/cc/MeterCC.js +3 -3
- package/build/cjs/cc/MeterCC.js.map +2 -2
- package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
- package/build/cjs/cc/MultiChannelCC.js +8 -8
- package/build/cjs/cc/MultiChannelCC.js.map +2 -2
- package/build/cjs/cc/MultilevelSensorCC.js.map +1 -1
- package/build/cjs/cc/MultilevelSwitchCC.js +1 -1
- package/build/cjs/cc/MultilevelSwitchCC.js.map +1 -1
- package/build/cjs/cc/NodeNamingCC.js.map +2 -2
- package/build/cjs/cc/NotificationCC.d.ts +3 -3
- package/build/cjs/cc/NotificationCC.js +29 -23
- package/build/cjs/cc/NotificationCC.js.map +2 -2
- package/build/cjs/cc/ProtectionCC.js +10 -3
- package/build/cjs/cc/ProtectionCC.js.map +2 -2
- package/build/cjs/cc/SceneActuatorConfigurationCC.js +0 -1
- package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +2 -2
- package/build/cjs/cc/SceneControllerConfigurationCC.js +0 -1
- package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
- package/build/cjs/cc/ScheduleEntryLockCC.js +1 -1
- package/build/cjs/cc/ScheduleEntryLockCC.js.map +1 -1
- package/build/cjs/cc/Security2CC.d.ts +14 -14
- package/build/cjs/cc/Security2CC.js +6 -5
- package/build/cjs/cc/Security2CC.js.map +2 -2
- package/build/cjs/cc/SecurityCC.d.ts +10 -10
- package/build/cjs/cc/SecurityCC.js +3 -3
- package/build/cjs/cc/SecurityCC.js.map +2 -2
- package/build/cjs/cc/SoundSwitchCC.js +2 -2
- package/build/cjs/cc/SoundSwitchCC.js.map +1 -1
- package/build/cjs/cc/SupervisionCC.js +1 -1
- package/build/cjs/cc/SupervisionCC.js.map +2 -2
- package/build/cjs/cc/ThermostatFanModeCC.js +1 -1
- package/build/cjs/cc/ThermostatFanModeCC.js.map +1 -1
- package/build/cjs/cc/ThermostatFanStateCC.js +1 -1
- package/build/cjs/cc/ThermostatFanStateCC.js.map +1 -1
- package/build/cjs/cc/ThermostatModeCC.d.ts +6 -6
- package/build/cjs/cc/ThermostatModeCC.js +2 -2
- package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
- package/build/cjs/cc/ThermostatSetbackCC.js +1 -1
- package/build/cjs/cc/ThermostatSetbackCC.js.map +1 -1
- package/build/cjs/cc/ThermostatSetpointCC.js.map +1 -1
- package/build/cjs/cc/TimeCC.js +2 -2
- package/build/cjs/cc/TimeCC.js.map +1 -1
- package/build/cjs/cc/TransportServiceCC.d.ts +7 -7
- package/build/cjs/cc/TransportServiceCC.js +1 -1
- package/build/cjs/cc/TransportServiceCC.js.map +2 -2
- package/build/cjs/cc/UserCodeCC.d.ts +14 -6
- package/build/cjs/cc/UserCodeCC.js +16 -4
- package/build/cjs/cc/UserCodeCC.js.map +2 -2
- package/build/cjs/cc/VersionCC.js +3 -3
- package/build/cjs/cc/VersionCC.js.map +2 -2
- package/build/cjs/cc/WakeUpCC.js +2 -2
- package/build/cjs/cc/WakeUpCC.js.map +1 -1
- package/build/cjs/cc/WindowCoveringCC.d.ts +3 -1
- package/build/cjs/cc/WindowCoveringCC.js +28 -8
- package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
- package/build/cjs/cc/ZWavePlusCC.js +1 -1
- package/build/cjs/cc/ZWavePlusCC.js.map +1 -1
- package/build/cjs/cc/ZWaveProtocolCC.d.ts +3 -3
- package/build/cjs/cc/ZWaveProtocolCC.js.map +2 -2
- package/build/cjs/cc/_CCValues.generated.js.map +1 -1
- package/build/cjs/cc/index.d.ts +3 -0
- package/build/cjs/cc/index.js +8 -0
- package/build/cjs/cc/index.js.map +2 -2
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +1 -1
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
- package/build/cjs/lib/API.d.ts +2 -0
- package/build/cjs/lib/API.js +2 -2
- package/build/cjs/lib/API.js.map +2 -2
- package/build/cjs/lib/CommandClass.d.ts +7 -7
- package/build/cjs/lib/CommandClass.js +6 -6
- package/build/cjs/lib/CommandClass.js.map +2 -2
- package/build/cjs/lib/NotificationEventPayload.d.ts +2 -1
- package/build/cjs/lib/NotificationEventPayload.js.map +2 -2
- package/build/cjs/lib/Security2/Extension.d.ts +12 -12
- package/build/cjs/lib/Security2/Extension.js.map +2 -2
- package/build/cjs/lib/_Types.d.ts +11 -1
- package/build/cjs/lib/_Types.js +15 -0
- package/build/cjs/lib/_Types.js.map +3 -3
- package/build/cjs/lib/serializers.d.ts +4 -4
- package/build/cjs/lib/serializers.js.map +2 -2
- package/build/cjs/lib/traits.d.ts +5 -0
- package/build/cjs/lib/utils.js +1 -1
- package/build/cjs/lib/utils.js.map +2 -2
- package/build/esm/cc/AlarmSensorCC.js +1 -1
- package/build/esm/cc/AlarmSensorCC.js.map +1 -1
- package/build/esm/cc/ApplicationStatusCC.d.ts +33 -0
- package/build/esm/cc/ApplicationStatusCC.d.ts.map +1 -0
- package/build/esm/cc/ApplicationStatusCC.js +175 -0
- package/build/esm/cc/ApplicationStatusCC.js.map +1 -0
- package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
- package/build/esm/cc/AssociationGroupInfoCC.js +4 -4
- 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 +13 -2
- package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
- package/build/esm/cc/BasicCC.js +1 -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 +5 -2
- package/build/esm/cc/BatteryCC.js.map +1 -1
- package/build/esm/cc/BinarySwitchCC.js +1 -1
- package/build/esm/cc/BinarySwitchCC.js.map +1 -1
- package/build/esm/cc/CRC16CC.d.ts.map +1 -1
- package/build/esm/cc/CRC16CC.js +2 -2
- package/build/esm/cc/CRC16CC.js.map +1 -1
- package/build/esm/cc/CentralSceneCC.js +2 -2
- package/build/esm/cc/CentralSceneCC.js.map +1 -1
- package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
- package/build/esm/cc/ClimateControlScheduleCC.js +5 -5
- package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
- package/build/esm/cc/ClockCC.js +1 -1
- package/build/esm/cc/ClockCC.js.map +1 -1
- package/build/esm/cc/ConfigurationCC.d.ts +6 -0
- package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/ConfigurationCC.js +65 -5
- package/build/esm/cc/ConfigurationCC.js.map +1 -1
- package/build/esm/cc/DoorLockCC.js +3 -3
- package/build/esm/cc/DoorLockCC.js.map +1 -1
- package/build/esm/cc/EntryControlCC.d.ts +2 -2
- package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
- package/build/esm/cc/EntryControlCC.js +3 -3
- package/build/esm/cc/EntryControlCC.js.map +1 -1
- package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts +4 -4
- package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
- package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
- package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
- package/build/esm/cc/IndicatorCC.js +6 -6
- package/build/esm/cc/IndicatorCC.js.map +1 -1
- package/build/esm/cc/IrrigationCC.js +3 -3
- package/build/esm/cc/IrrigationCC.js.map +1 -1
- package/build/esm/cc/LanguageCC.js +1 -1
- package/build/esm/cc/LanguageCC.js.map +1 -1
- package/build/esm/cc/ManufacturerProprietaryCC.d.ts +4 -4
- package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
- package/build/esm/cc/ManufacturerProprietaryCC.js +1 -1
- package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.js +1 -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 -3
- 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.map +1 -1
- package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
- package/build/esm/cc/MultiChannelCC.js +8 -8
- package/build/esm/cc/MultiChannelCC.js.map +1 -1
- package/build/esm/cc/MultilevelSwitchCC.js +1 -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.map +1 -1
- package/build/esm/cc/NotificationCC.d.ts +3 -3
- package/build/esm/cc/NotificationCC.d.ts.map +1 -1
- package/build/esm/cc/NotificationCC.js +43 -31
- 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 +16 -3
- package/build/esm/cc/ProtectionCC.js.map +1 -1
- package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneActuatorConfigurationCC.js +0 -1
- package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.js +0 -1
- package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
- package/build/esm/cc/ScheduleEntryLockCC.js +1 -1
- package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
- package/build/esm/cc/Security2CC.d.ts +14 -14
- package/build/esm/cc/Security2CC.d.ts.map +1 -1
- package/build/esm/cc/Security2CC.js +7 -6
- package/build/esm/cc/Security2CC.js.map +1 -1
- package/build/esm/cc/SecurityCC.d.ts +10 -10
- package/build/esm/cc/SecurityCC.d.ts.map +1 -1
- package/build/esm/cc/SecurityCC.js +4 -4
- package/build/esm/cc/SecurityCC.js.map +1 -1
- package/build/esm/cc/SoundSwitchCC.js +2 -2
- package/build/esm/cc/SoundSwitchCC.js.map +1 -1
- package/build/esm/cc/SupervisionCC.js +1 -1
- package/build/esm/cc/SupervisionCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.js +1 -1
- package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanStateCC.js +1 -1
- package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
- package/build/esm/cc/ThermostatModeCC.d.ts +6 -6
- package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatModeCC.js +3 -3
- package/build/esm/cc/ThermostatModeCC.js.map +1 -1
- package/build/esm/cc/ThermostatSetbackCC.js +1 -1
- package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
- package/build/esm/cc/TimeCC.js +2 -2
- package/build/esm/cc/TimeCC.js.map +1 -1
- package/build/esm/cc/TransportServiceCC.d.ts +7 -7
- package/build/esm/cc/TransportServiceCC.d.ts.map +1 -1
- package/build/esm/cc/TransportServiceCC.js +2 -1
- package/build/esm/cc/TransportServiceCC.js.map +1 -1
- package/build/esm/cc/UserCodeCC.d.ts +14 -6
- package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
- package/build/esm/cc/UserCodeCC.js +20 -4
- package/build/esm/cc/UserCodeCC.js.map +1 -1
- package/build/esm/cc/VersionCC.d.ts.map +1 -1
- package/build/esm/cc/VersionCC.js +4 -4
- package/build/esm/cc/VersionCC.js.map +1 -1
- package/build/esm/cc/WakeUpCC.js +2 -2
- package/build/esm/cc/WakeUpCC.js.map +1 -1
- package/build/esm/cc/WindowCoveringCC.d.ts +3 -1
- package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
- package/build/esm/cc/WindowCoveringCC.js +30 -9
- package/build/esm/cc/WindowCoveringCC.js.map +1 -1
- package/build/esm/cc/ZWavePlusCC.js +1 -1
- package/build/esm/cc/ZWavePlusCC.js.map +1 -1
- package/build/esm/cc/ZWaveProtocolCC.d.ts +3 -3
- package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -1
- package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
- package/build/esm/cc/index.d.ts +3 -0
- package/build/esm/cc/index.d.ts.map +1 -1
- package/build/esm/cc/index.js +5 -0
- package/build/esm/cc/index.js.map +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
- package/build/esm/lib/API.d.ts +2 -0
- package/build/esm/lib/API.d.ts.map +1 -1
- package/build/esm/lib/API.js +2 -2
- package/build/esm/lib/API.js.map +1 -1
- package/build/esm/lib/CommandClass.d.ts +7 -7
- package/build/esm/lib/CommandClass.d.ts.map +1 -1
- package/build/esm/lib/CommandClass.js +6 -6
- package/build/esm/lib/CommandClass.js.map +1 -1
- package/build/esm/lib/NotificationEventPayload.d.ts +2 -1
- package/build/esm/lib/NotificationEventPayload.d.ts.map +1 -1
- package/build/esm/lib/NotificationEventPayload.js.map +1 -1
- package/build/esm/lib/Security2/Extension.d.ts +12 -12
- package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
- package/build/esm/lib/Security2/Extension.js +1 -1
- package/build/esm/lib/Security2/Extension.js.map +1 -1
- package/build/esm/lib/_Types.d.ts +11 -1
- package/build/esm/lib/_Types.d.ts.map +1 -1
- package/build/esm/lib/_Types.js +11 -0
- package/build/esm/lib/_Types.js.map +1 -1
- package/build/esm/lib/serializers.d.ts +4 -4
- package/build/esm/lib/serializers.d.ts.map +1 -1
- package/build/esm/lib/serializers.js.map +1 -1
- package/build/esm/lib/traits.d.ts +5 -0
- package/build/esm/lib/traits.d.ts.map +1 -1
- package/build/esm/lib/utils.js +1 -1
- package/build/esm/lib/utils.js.map +1 -1
- package/package.json +12 -13
- package/build/cjs/lib/ICommandClassContainer.d.ts +0 -2
- package/build/cjs/lib/ICommandClassContainer.js +0 -17
- package/build/cjs/lib/ICommandClassContainer.js.map +0 -7
- package/build/esm/lib/ICommandClassContainer.d.ts +0 -2
- package/build/esm/lib/ICommandClassContainer.d.ts.map +0 -1
- package/build/esm/lib/ICommandClassContainer.js +0 -2
- package/build/esm/lib/ICommandClassContainer.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cc/VersionCC.ts"],
|
|
4
|
-
"sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\tSecurityClass,\n\tValueMetadata,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tZWaveLibraryTypes,\n\tenumValuesToMetadataStates,\n\tgetCCName,\n\tsecurityClassIsS2,\n\tsecurityClassOrder,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, num2hex, pick } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\tgetImplementedVersion,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { VersionCommand } from \"../lib/_Types.js\";\n\nexport const VersionCCValues = V.defineCCValues(CommandClasses.Version, {\n\t...V.staticProperty(\n\t\t\"firmwareVersions\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnly,\n\t\t\ttype: \"string[]\",\n\t\t\tlabel: \"Z-Wave chip firmware versions\",\n\t\t} as const,\n\t\t{ supportsEndpoints: false },\n\t),\n\t...V.staticProperty(\n\t\t\"libraryType\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyNumber,\n\t\t\tlabel: \"Library type\",\n\t\t\tstates: enumValuesToMetadataStates(ZWaveLibraryTypes),\n\t\t} as const,\n\t\t{ supportsEndpoints: false },\n\t),\n\t...V.staticProperty(\n\t\t\"protocolVersion\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Z-Wave protocol version\",\n\t\t} as const,\n\t\t{ supportsEndpoints: false },\n\t),\n\t...V.staticProperty(\n\t\t\"hardwareVersion\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyNumber,\n\t\t\tlabel: \"Z-Wave chip hardware version\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 2,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"supportsZWaveSoftwareGet\",\n\t\tundefined,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tinternal: true,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"sdkVersion\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"SDK version\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"applicationFrameworkAPIVersion\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Z-Wave application framework API version\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"applicationFrameworkBuildNumber\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Z-Wave application framework API build number\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticPropertyWithName(\n\t\t\"serialAPIVersion\",\n\t\t\"hostInterfaceVersion\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Serial API version\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticPropertyWithName(\n\t\t\"serialAPIBuildNumber\",\n\t\t\"hostInterfaceBuildNumber\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Serial API build number\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"zWaveProtocolVersion\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Z-Wave protocol version\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"zWaveProtocolBuildNumber\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Z-Wave protocol build number\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"applicationVersion\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Application version\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"applicationBuildNumber\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Application build number\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n});\n\nfunction parseVersion(buffer: Uint8Array): string {\n\tif (buffer[0] === 0 && buffer[1] === 0 && buffer[2] === 0) return \"unused\";\n\treturn `${buffer[0]}.${buffer[1]}.${buffer[2]}`;\n}\n\n// @noSetValueAPI This CC is read-only\n\n@API(CommandClasses.Version)\nexport class VersionCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(cmd: VersionCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase VersionCommand.Get:\n\t\t\tcase VersionCommand.Report:\n\t\t\tcase VersionCommand.CommandClassGet:\n\t\t\tcase VersionCommand.CommandClassReport:\n\t\t\t\treturn true; // This is mandatory\n\n\t\t\tcase VersionCommand.CapabilitiesGet:\n\t\t\tcase VersionCommand.CapabilitiesReport:\n\t\t\tcase VersionCommand.ZWaveSoftwareReport:\n\t\t\t\treturn this.version >= 3;\n\n\t\t\tcase VersionCommand.ZWaveSoftwareGet: {\n\t\t\t\treturn this.getValueDB().getValue<boolean>(\n\t\t\t\t\tVersionCCValues.supportsZWaveSoftwareGet.endpoint(\n\t\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async get() {\n\t\tthis.assertSupportsCommand(VersionCommand, VersionCommand.Get);\n\n\t\tconst cc = new VersionCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<VersionCCReport>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"libraryType\",\n\t\t\t\t\"protocolVersion\",\n\t\t\t\t\"firmwareVersions\",\n\t\t\t\t\"hardwareVersion\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async sendReport(options: VersionCCReportOptions): Promise<void> {\n\t\tthis.assertSupportsCommand(VersionCommand, VersionCommand.Report);\n\n\t\tconst cc = new VersionCCReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async getCCVersion(\n\t\trequestedCC: CommandClasses,\n\t): Promise<MaybeNotKnown<number>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CommandClassGet,\n\t\t);\n\n\t\tconst cc = new VersionCCCommandClassGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\trequestedCC,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tVersionCCCommandClassReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.ccVersion;\n\t}\n\n\t@validateArgs()\n\t/**\n\t * @param version The version to report. If not given, the implemented version will be used for the report.\n\t */\n\tpublic async reportCCVersion(\n\t\trequestedCC: CommandClasses,\n\t\tversion?: number,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CommandClassReport,\n\t\t);\n\n\t\tlet ccVersion: number;\n\t\tswitch (requestedCC) {\n\t\t\tcase CommandClasses[\"Z-Wave Protocol\"]:\n\t\t\tcase CommandClasses[\"Z-Wave Long Range\"]:\n\t\t\t\t// These two are only for internal use\n\t\t\t\tccVersion = 0;\n\t\t\t\tbreak;\n\t\t\tcase CommandClasses.Hail:\n\t\t\tcase CommandClasses[\"Manufacturer Proprietary\"]:\n\t\t\t\t// These CCs are obsolete, we cannot enter them in the certification portal\n\t\t\t\t// but not doing so fails a certification test. Just respond that they\n\t\t\t\t// are not supported or controlled\n\t\t\t\tccVersion = 0;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tccVersion = version ?? getImplementedVersion(requestedCC);\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst cc = new VersionCCCommandClassReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\trequestedCC,\n\t\t\tccVersion,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getCapabilities() {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CapabilitiesGet,\n\t\t);\n\n\t\tconst cc = new VersionCCCapabilitiesGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tVersionCCCapabilitiesReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"supportsZWaveSoftwareGet\"]);\n\t\t}\n\t}\n\n\tpublic async reportCapabilities(): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CapabilitiesReport,\n\t\t);\n\n\t\tconst cc = new VersionCCCapabilitiesReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t// At this time, we do not support responding to Z-Wave Software Get\n\t\t\tsupportsZWaveSoftwareGet: false,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getZWaveSoftware() {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.ZWaveSoftwareGet,\n\t\t);\n\n\t\tconst cc = new VersionCCZWaveSoftwareGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tVersionCCZWaveSoftwareReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"sdkVersion\",\n\t\t\t\t\"applicationFrameworkAPIVersion\",\n\t\t\t\t\"applicationFrameworkBuildNumber\",\n\t\t\t\t\"hostInterfaceVersion\",\n\t\t\t\t\"hostInterfaceBuildNumber\",\n\t\t\t\t\"zWaveProtocolVersion\",\n\t\t\t\t\"zWaveProtocolBuildNumber\",\n\t\t\t\t\"applicationVersion\",\n\t\t\t\t\"applicationBuildNumber\",\n\t\t\t]);\n\t\t}\n\t}\n}\n\n@commandClass(CommandClasses.Version)\n@implementedVersion(3)\n@ccValues(VersionCCValues)\nexport class VersionCC extends CommandClass {\n\tdeclare ccCommand: VersionCommand;\n\n\tpublic determineRequiredCCInterviews(): readonly CommandClasses[] {\n\t\t// VersionCC must be the 2nd CC after ManufacturerSpecificCC\n\t\treturn [CommandClasses[\"Manufacturer Specific\"]];\n\t}\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\n\t\t// SDS13782: In a Multi Channel device, the Version Command Class MUST be supported by the Root Device, while\n\t\t// the Version Command Class SHOULD NOT be supported by individual End Points.\n\t\t//\n\t\t// There may be cases where a given Command Class is not implemented by the Root Device of a Multi\n\t\t// Channel device. However, the Root Device MUST respond to Version requests for any Command Class\n\t\t// implemented by the Multi Channel device; also in cases where the actual Command Class is only\n\t\t// provided by an End Point.\n\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\n\t\t// Use the CC API of the root device for all queries\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses.Version,\n\t\t\tctx,\n\t\t\tnode,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tconst queryCCVersion = async (cc: CommandClasses): Promise<void> => {\n\t\t\t// Only query CCs we support. Theoretically we could skip queries where we support only V1,\n\t\t\t// but there are Z-Wave certification tests that require us to query all CCs\n\t\t\tconst maxImplemented = getImplementedVersion(cc);\n\t\t\tif (maxImplemented === 0) {\n\t\t\t\tctx.logNode(\n\t\t\t\t\tnode.id,\n\t\t\t\t\t` skipping query for ${CommandClasses[cc]} (${\n\t\t\t\t\t\tnum2hex(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t}) because max implemented version is ${maxImplemented}`,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: ` querying the CC version for ${getCCName(cc)}...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\t// query the CC version\n\t\t\tconst supportedVersion = await api.getCCVersion(cc);\n\t\t\tif (supportedVersion != undefined) {\n\t\t\t\t// Remember which CC version this endpoint supports\n\t\t\t\tlet logMessage: string;\n\t\t\t\tif (supportedVersion > 0) {\n\t\t\t\t\t// Basic CC has special rules for when it is considered supported\n\t\t\t\t\t// Therefore we mark all other CCs as supported, but not Basic CC,\n\t\t\t\t\t// for which support is determined later.\n\t\t\t\t\tif (cc === CommandClasses.Basic) {\n\t\t\t\t\t\tendpoint.addCC(cc, { version: supportedVersion });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tendpoint.addCC(cc, {\n\t\t\t\t\t\t\tisSupported: true,\n\t\t\t\t\t\t\tversion: supportedVersion,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tlogMessage = ` supports CC ${CommandClasses[cc]} (${\n\t\t\t\t\t\tnum2hex(cc)\n\t\t\t\t\t}) in version ${supportedVersion}`;\n\t\t\t\t} else {\n\t\t\t\t\t// We were lied to - the NIF said this CC is supported, now the node claims it isn't\n\t\t\t\t\t// Make sure this is not a critical CC, which must be supported though\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tcc === CommandClasses.Version\n\t\t\t\t\t\t|| cc === CommandClasses[\"Manufacturer Specific\"]\n\t\t\t\t\t) {\n\t\t\t\t\t\tlogMessage = ` claims NOT to support CC ${\n\t\t\t\t\t\t\tCommandClasses[cc]\n\t\t\t\t\t\t} (${num2hex(cc)}), but it must. Assuming the ${\n\t\t\t\t\t\t\tthis.endpointIndex === 0 ? \"node\" : \"endpoint\"\n\t\t\t\t\t\t} supports version 1...`;\n\t\t\t\t\t\tendpoint.addCC(cc, { version: 1 });\n\t\t\t\t\t} else if (\n\t\t\t\t\t\t(cc === CommandClasses.Security\n\t\t\t\t\t\t\t&& node.hasSecurityClass(SecurityClass.S0_Legacy))\n\t\t\t\t\t\t|| (cc === CommandClasses[\"Security 2\"]\n\t\t\t\t\t\t\t&& securityClassOrder.some((sc) =>\n\t\t\t\t\t\t\t\tsecurityClassIsS2(sc)\n\t\t\t\t\t\t\t\t&& node.hasSecurityClass(sc)\n\t\t\t\t\t\t\t))\n\t\t\t\t\t) {\n\t\t\t\t\t\tlogMessage = ` claims NOT to support CC ${\n\t\t\t\t\t\t\tCommandClasses[cc]\n\t\t\t\t\t\t} (${\n\t\t\t\t\t\t\tnum2hex(cc)\n\t\t\t\t\t\t}), but it is known to support it. Assuming the ${\n\t\t\t\t\t\t\tthis.endpointIndex === 0 ? \"node\" : \"endpoint\"\n\t\t\t\t\t\t} supports version 1...`;\n\t\t\t\t\t\tendpoint.addCC(cc, { version: 1 });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlogMessage = ` does NOT support CC ${\n\t\t\t\t\t\t\tCommandClasses[cc]\n\t\t\t\t\t\t} (${num2hex(cc)})`;\n\t\t\t\t\t\tendpoint.removeCC(cc);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `CC version query for ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t} timed out - assuming the ${\n\t\t\t\t\t\tthis.endpointIndex === 0 ? \"node\" : \"endpoint\"\n\t\t\t\t\t} supports version 1...`,\n\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t});\n\t\t\t\tendpoint.addCC(cc, { version: 1 });\n\t\t\t}\n\t\t};\n\n\t\t// Version information should not change (except for firmware updates)\n\t\t// And it is only relevant on the root endpoint (the node)\n\t\tif (this.endpointIndex === 0) {\n\t\t\t// Step 1: Query Version CC version\n\t\t\tawait queryCCVersion(CommandClasses.Version);\n\n\t\t\t// Step 2: Query node versions\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"querying node versions...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst versionGetResponse = await api.get();\n\t\t\tif (versionGetResponse) {\n\t\t\t\tlet logMessage = `received response for node versions:\n library type: ${ZWaveLibraryTypes[versionGetResponse.libraryType]} (${\n\t\t\t\t\tnum2hex(versionGetResponse.libraryType)\n\t\t\t\t})\n protocol version: ${versionGetResponse.protocolVersion}\n firmware versions: ${versionGetResponse.firmwareVersions.join(\", \")}`;\n\t\t\t\tif (versionGetResponse.hardwareVersion != undefined) {\n\t\t\t\t\tlogMessage +=\n\t\t\t\t\t\t`\\n hardware version: ${versionGetResponse.hardwareVersion}`;\n\t\t\t\t}\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Step 3: Query all other CC versions\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"querying CC versions...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\t// Basic CC is not included in the NIF, so it won't be returned by endpoint.getCCs() at this point\n\t\t{\n\t\t\tconst cc = CommandClasses.Basic;\n\t\t\t// Skip the query of endpoint CCs that are also supported by the root device\n\t\t\tif (this.endpointIndex === 0 || node.getCCVersion(cc) === 0) {\n\t\t\t\tawait queryCCVersion(cc);\n\t\t\t}\n\t\t}\n\t\tfor (const [cc] of endpoint.getCCs()) {\n\t\t\t// We already queried the Version CC version at the start of this interview\n\t\t\tif (cc === CommandClasses.Version) continue;\n\t\t\t// And we queried Basic CC just before this\n\t\t\tif (cc === CommandClasses.Basic) continue;\n\t\t\t// Skip the query of endpoint CCs that are also supported by the root device\n\t\t\tif (this.endpointIndex > 0 && node.getCCVersion(cc) > 0) continue;\n\t\t\tawait queryCCVersion(cc);\n\t\t}\n\n\t\t// Step 4: Query VersionCC capabilities (root device only)\n\t\tif (this.endpointIndex === 0 && api.version >= 3) {\n\t\t\t// Step 4a: Support for SoftwareGet\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"querying if Z-Wave Software Get is supported...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst capsResponse = await api.getCapabilities();\n\t\t\tif (capsResponse) {\n\t\t\t\tconst { supportsZWaveSoftwareGet } = capsResponse;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `Z-Wave Software Get is${\n\t\t\t\t\t\tsupportsZWaveSoftwareGet ? \"\" : \" not\"\n\t\t\t\t\t} supported`,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\n\t\t\t\tif (supportsZWaveSoftwareGet) {\n\t\t\t\t\t// Step 4b: Query Z-Wave Software versions\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: \"querying Z-Wave software versions...\",\n\t\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t\t});\n\t\t\t\t\tawait api.getZWaveSoftware();\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: \"received Z-Wave software versions\",\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface VersionCCReportOptions {\n\tlibraryType: ZWaveLibraryTypes;\n\tprotocolVersion: string;\n\tfirmwareVersions: string[];\n\thardwareVersion?: number;\n}\n\n@CCCommand(VersionCommand.Report)\n@ccValueProperty(\"libraryType\", VersionCCValues.libraryType)\n@ccValueProperty(\"protocolVersion\", VersionCCValues.protocolVersion)\n@ccValueProperty(\"firmwareVersions\", VersionCCValues.firmwareVersions)\n@ccValueProperty(\"hardwareVersion\", VersionCCValues.hardwareVersion)\nexport class VersionCCReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tif (!/^\\d+\\.\\d+(\\.\\d+)?$/.test(options.protocolVersion)) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`protocolVersion must be a string in the format \"major.minor\" or \"major.minor.patch\", received \"${options.protocolVersion}\"`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t} else if (\n\t\t\t!options.firmwareVersions.every((fw) =>\n\t\t\t\t/^\\d+\\.\\d+(\\.\\d+)?$/.test(fw)\n\t\t\t)\n\t\t) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`firmwareVersions must be an array of strings in the format \"major.minor\" or \"major.minor.patch\", received \"${\n\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\toptions.firmwareVersions,\n\t\t\t\t\t)\n\t\t\t\t}\"`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.libraryType = options.libraryType;\n\t\tthis.protocolVersion = options.protocolVersion;\n\t\tthis.firmwareVersions = options.firmwareVersions;\n\t\tthis.hardwareVersion = options.hardwareVersion;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): VersionCCReport {\n\t\tvalidatePayload(raw.payload.length >= 5);\n\t\tconst libraryType: ZWaveLibraryTypes = raw.payload[0];\n\t\tconst protocolVersion = `${raw.payload[1]}.${raw.payload[2]}`;\n\t\tconst firmwareVersions = [`${raw.payload[3]}.${raw.payload[4]}`];\n\n\t\tlet hardwareVersion: number | undefined;\n\t\tif (raw.payload.length >= 7) {\n\t\t\t// V2+\n\t\t\thardwareVersion = raw.payload[5];\n\t\t\tconst additionalFirmwares = raw.payload[6];\n\t\t\tvalidatePayload(\n\t\t\t\traw.payload.length >= 7 + 2 * additionalFirmwares,\n\t\t\t);\n\t\t\tfor (let i = 0; i < additionalFirmwares; i++) {\n\t\t\t\tfirmwareVersions.push(\n\t\t\t\t\t`${raw.payload[7 + 2 * i]}.${raw.payload[7 + 2 * i + 1]}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tlibraryType,\n\t\t\tprotocolVersion,\n\t\t\tfirmwareVersions,\n\t\t\thardwareVersion,\n\t\t});\n\t}\n\n\tpublic readonly libraryType: ZWaveLibraryTypes;\n\n\tpublic readonly protocolVersion: string;\n\n\tpublic readonly firmwareVersions: string[];\n\n\tpublic readonly hardwareVersion: number | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.libraryType,\n\t\t\t...this.protocolVersion\n\t\t\t\t.split(\".\")\n\t\t\t\t.map((n) => parseInt(n))\n\t\t\t\t.slice(0, 2),\n\t\t\t...this.firmwareVersions[0]\n\t\t\t\t.split(\".\")\n\t\t\t\t.map((n) => parseInt(n))\n\t\t\t\t.slice(0, 2),\n\t\t\tthis.hardwareVersion ?? 0x00,\n\t\t\tthis.firmwareVersions.length - 1,\n\t\t]);\n\n\t\tif (this.firmwareVersions.length > 1) {\n\t\t\tconst firmwaresBuffer = new Bytes(\n\t\t\t\t(this.firmwareVersions.length - 1) * 2,\n\t\t\t);\n\t\t\tfor (let i = 1; i < this.firmwareVersions.length; i++) {\n\t\t\t\tconst [major, minor] = this.firmwareVersions[i]\n\t\t\t\t\t.split(\".\")\n\t\t\t\t\t.map((n) => parseInt(n));\n\t\t\t\tfirmwaresBuffer[2 * (i - 1)] = major;\n\t\t\t\tfirmwaresBuffer[2 * (i - 1) + 1] = minor;\n\t\t\t}\n\t\t\tthis.payload = Bytes.concat([this.payload, firmwaresBuffer]);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"library type\": getEnumMemberName(\n\t\t\t\tZWaveLibraryTypes,\n\t\t\t\tthis.libraryType,\n\t\t\t),\n\t\t\t\"protocol version\": this.protocolVersion,\n\t\t\t\"firmware versions\": this.firmwareVersions.join(\", \"),\n\t\t};\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tmessage[\"hardware version\"] = this.hardwareVersion;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(VersionCommand.Get)\n@expectedCCResponse(VersionCCReport)\nexport class VersionCCGet extends VersionCC {}\n\n// @publicAPI\nexport interface VersionCCCommandClassReportOptions {\n\trequestedCC: CommandClasses;\n\tccVersion: number;\n}\n\n@CCCommand(VersionCommand.CommandClassReport)\nexport class VersionCCCommandClassReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCCommandClassReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.requestedCC = options.requestedCC;\n\t\tthis.ccVersion = options.ccVersion;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCCommandClassReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst requestedCC: CommandClasses = raw.payload[0];\n\t\tconst ccVersion = raw.payload[1];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trequestedCC,\n\t\t\tccVersion,\n\t\t});\n\t}\n\n\tpublic ccVersion: number;\n\tpublic requestedCC: CommandClasses;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.requestedCC, this.ccVersion]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tCC: getCCName(this.requestedCC),\n\t\t\t\tversion: this.ccVersion,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface VersionCCCommandClassGetOptions {\n\trequestedCC: CommandClasses;\n}\n\nfunction testResponseForVersionCommandClassGet(\n\tsent: VersionCCCommandClassGet,\n\treceived: VersionCCCommandClassReport,\n) {\n\t// We expect a Version CommandClass Report that matches the requested CC\n\treturn sent.requestedCC === received.requestedCC;\n}\n\n@CCCommand(VersionCommand.CommandClassGet)\n@expectedCCResponse(\n\tVersionCCCommandClassReport,\n\ttestResponseForVersionCommandClassGet,\n)\nexport class VersionCCCommandClassGet extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCCommandClassGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.requestedCC = options.requestedCC;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCCommandClassGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst requestedCC: CommandClasses = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trequestedCC,\n\t\t});\n\t}\n\n\tpublic requestedCC: CommandClasses;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.requestedCC]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { CC: getCCName(this.requestedCC) },\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface VersionCCCapabilitiesReportOptions {\n\tsupportsZWaveSoftwareGet: boolean;\n}\n\n@CCCommand(VersionCommand.CapabilitiesReport)\n@ccValueProperty(\n\t\"supportsZWaveSoftwareGet\",\n\tVersionCCValues.supportsZWaveSoftwareGet,\n)\nexport class VersionCCCapabilitiesReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCCapabilitiesReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.supportsZWaveSoftwareGet = options.supportsZWaveSoftwareGet;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCCapabilitiesReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst capabilities = raw.payload[0];\n\t\tconst supportsZWaveSoftwareGet = !!(capabilities & 0b100);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportsZWaveSoftwareGet,\n\t\t});\n\t}\n\n\tpublic supportsZWaveSoftwareGet: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\t(this.supportsZWaveSoftwareGet ? 0b100 : 0) | 0b11,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supports Z-Wave Software Get command\":\n\t\t\t\t\tthis.supportsZWaveSoftwareGet,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(VersionCommand.CapabilitiesGet)\n@expectedCCResponse(VersionCCCapabilitiesReport)\nexport class VersionCCCapabilitiesGet extends VersionCC {}\n\n// @publicAPI\nexport interface VersionCCZWaveSoftwareReportOptions {\n\tsdkVersion: string;\n\tapplicationFrameworkAPIVersion: string;\n\tapplicationFrameworkBuildNumber: number;\n\thostInterfaceVersion: string;\n\thostInterfaceBuildNumber: number;\n\tzWaveProtocolVersion: string;\n\tzWaveProtocolBuildNumber: number;\n\tapplicationVersion: string;\n\tapplicationBuildNumber: number;\n}\n\n@CCCommand(VersionCommand.ZWaveSoftwareReport)\n@ccValueProperty(\"sdkVersion\", VersionCCValues.sdkVersion)\n@ccValueProperty(\n\t\"applicationFrameworkAPIVersion\",\n\tVersionCCValues.applicationFrameworkAPIVersion,\n)\n@ccValueProperty(\n\t\"applicationFrameworkBuildNumber\",\n\tVersionCCValues.applicationFrameworkBuildNumber,\n)\n@ccValueProperty(\"hostInterfaceVersion\", VersionCCValues.serialAPIVersion)\n@ccValueProperty(\n\t\"hostInterfaceBuildNumber\",\n\tVersionCCValues.serialAPIBuildNumber,\n)\n@ccValueProperty(\"zWaveProtocolVersion\", VersionCCValues.zWaveProtocolVersion)\n@ccValueProperty(\n\t\"zWaveProtocolBuildNumber\",\n\tVersionCCValues.zWaveProtocolBuildNumber,\n)\n@ccValueProperty(\"applicationVersion\", VersionCCValues.applicationVersion)\n@ccValueProperty(\n\t\"applicationBuildNumber\",\n\tVersionCCValues.applicationBuildNumber,\n)\nexport class VersionCCZWaveSoftwareReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCZWaveSoftwareReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.sdkVersion = options.sdkVersion;\n\t\tthis.applicationFrameworkAPIVersion =\n\t\t\toptions.applicationFrameworkAPIVersion;\n\t\tthis.applicationFrameworkBuildNumber =\n\t\t\toptions.applicationFrameworkBuildNumber;\n\t\tthis.hostInterfaceVersion = options.hostInterfaceVersion;\n\t\tthis.hostInterfaceBuildNumber = options.hostInterfaceBuildNumber;\n\t\tthis.zWaveProtocolVersion = options.zWaveProtocolVersion;\n\t\tthis.zWaveProtocolBuildNumber = options.zWaveProtocolBuildNumber;\n\t\tthis.applicationVersion = options.applicationVersion;\n\t\tthis.applicationBuildNumber = options.applicationBuildNumber;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCZWaveSoftwareReport {\n\t\tvalidatePayload(raw.payload.length >= 23);\n\t\tconst sdkVersion = parseVersion(raw.payload);\n\t\tconst applicationFrameworkAPIVersion = parseVersion(\n\t\t\traw.payload.subarray(3),\n\t\t);\n\t\tlet applicationFrameworkBuildNumber;\n\t\tif (applicationFrameworkAPIVersion !== \"unused\") {\n\t\t\tapplicationFrameworkBuildNumber = raw.payload.readUInt16BE(6);\n\t\t} else {\n\t\t\tapplicationFrameworkBuildNumber = 0;\n\t\t}\n\n\t\tconst hostInterfaceVersion = parseVersion(raw.payload.subarray(8));\n\t\tlet hostInterfaceBuildNumber;\n\t\tif (hostInterfaceVersion !== \"unused\") {\n\t\t\thostInterfaceBuildNumber = raw.payload.readUInt16BE(11);\n\t\t} else {\n\t\t\thostInterfaceBuildNumber = 0;\n\t\t}\n\n\t\tconst zWaveProtocolVersion = parseVersion(raw.payload.subarray(13));\n\t\tlet zWaveProtocolBuildNumber;\n\t\tif (zWaveProtocolVersion !== \"unused\") {\n\t\t\tzWaveProtocolBuildNumber = raw.payload.readUInt16BE(16);\n\t\t} else {\n\t\t\tzWaveProtocolBuildNumber = 0;\n\t\t}\n\n\t\tconst applicationVersion = parseVersion(raw.payload.subarray(18));\n\t\tlet applicationBuildNumber;\n\t\tif (applicationVersion !== \"unused\") {\n\t\t\tapplicationBuildNumber = raw.payload.readUInt16BE(21);\n\t\t} else {\n\t\t\tapplicationBuildNumber = 0;\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsdkVersion,\n\t\t\tapplicationFrameworkAPIVersion,\n\t\t\tapplicationFrameworkBuildNumber,\n\t\t\thostInterfaceVersion,\n\t\t\thostInterfaceBuildNumber,\n\t\t\tzWaveProtocolVersion,\n\t\t\tzWaveProtocolBuildNumber,\n\t\t\tapplicationVersion,\n\t\t\tapplicationBuildNumber,\n\t\t});\n\t}\n\n\tpublic readonly sdkVersion: string;\n\n\tpublic readonly applicationFrameworkAPIVersion: string;\n\n\tpublic readonly applicationFrameworkBuildNumber: number;\n\n\tpublic readonly hostInterfaceVersion: string;\n\n\tpublic readonly hostInterfaceBuildNumber: number;\n\n\tpublic readonly zWaveProtocolVersion: string;\n\n\tpublic readonly zWaveProtocolBuildNumber: number;\n\n\tpublic readonly applicationVersion: string;\n\n\tpublic readonly applicationBuildNumber: number;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"SDK version\": this.sdkVersion,\n\t\t};\n\t\tmessage[\"appl. framework API version\"] =\n\t\t\tthis.applicationFrameworkAPIVersion;\n\t\tif (this.applicationFrameworkAPIVersion !== \"unused\") {\n\t\t\tmessage[\"appl. framework build number\"] =\n\t\t\t\tthis.applicationFrameworkBuildNumber;\n\t\t}\n\t\tmessage[\"host interface version\"] = this.hostInterfaceVersion;\n\t\tif (this.hostInterfaceVersion !== \"unused\") {\n\t\t\tmessage[\"host interface build number\"] =\n\t\t\t\tthis.hostInterfaceBuildNumber;\n\t\t}\n\t\tmessage[\"Z-Wave protocol version\"] = this.zWaveProtocolVersion;\n\t\tif (this.zWaveProtocolVersion !== \"unused\") {\n\t\t\tmessage[\"Z-Wave protocol build number\"] =\n\t\t\t\tthis.zWaveProtocolBuildNumber;\n\t\t}\n\t\tmessage[\"application version\"] = this.applicationVersion;\n\t\tif (this.applicationVersion !== \"unused\") {\n\t\t\tmessage[\"application build number\"] = this.applicationBuildNumber;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(VersionCommand.ZWaveSoftwareGet)\n@expectedCCResponse(VersionCCZWaveSoftwareReport)\nexport class VersionCCZWaveSoftwareGet extends VersionCC {}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\tSecurityClass,\n\tValueMetadata,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tZWaveLibraryTypes,\n\tenumValuesToMetadataStates,\n\tgetCCName,\n\tsecurityClassIsS2,\n\tsecurityClassOrder,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport {\n\tBytes,\n\ttype BytesView,\n\tgetEnumMemberName,\n\tnum2hex,\n\tpick,\n} from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\tgetImplementedVersion,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { VersionCommand } from \"../lib/_Types.js\";\n\nexport const VersionCCValues = V.defineCCValues(CommandClasses.Version, {\n\t...V.staticProperty(\n\t\t\"firmwareVersions\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnly,\n\t\t\ttype: \"string[]\",\n\t\t\tlabel: \"Z-Wave chip firmware versions\",\n\t\t} as const,\n\t\t{ supportsEndpoints: false },\n\t),\n\t...V.staticProperty(\n\t\t\"libraryType\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyNumber,\n\t\t\tlabel: \"Library type\",\n\t\t\tstates: enumValuesToMetadataStates(ZWaveLibraryTypes),\n\t\t} as const,\n\t\t{ supportsEndpoints: false },\n\t),\n\t...V.staticProperty(\n\t\t\"protocolVersion\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Z-Wave protocol version\",\n\t\t} as const,\n\t\t{ supportsEndpoints: false },\n\t),\n\t...V.staticProperty(\n\t\t\"hardwareVersion\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyNumber,\n\t\t\tlabel: \"Z-Wave chip hardware version\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 2,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"supportsZWaveSoftwareGet\",\n\t\tundefined,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tinternal: true,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"sdkVersion\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"SDK version\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"applicationFrameworkAPIVersion\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Z-Wave application framework API version\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"applicationFrameworkBuildNumber\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Z-Wave application framework API build number\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticPropertyWithName(\n\t\t\"serialAPIVersion\",\n\t\t\"hostInterfaceVersion\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Serial API version\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticPropertyWithName(\n\t\t\"serialAPIBuildNumber\",\n\t\t\"hostInterfaceBuildNumber\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Serial API build number\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"zWaveProtocolVersion\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Z-Wave protocol version\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"zWaveProtocolBuildNumber\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Z-Wave protocol build number\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"applicationVersion\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Application version\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"applicationBuildNumber\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\tlabel: \"Application build number\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 3,\n\t\t\tsupportsEndpoints: false,\n\t\t} as const,\n\t),\n});\n\nfunction parseVersion(buffer: BytesView): string {\n\tif (buffer[0] === 0 && buffer[1] === 0 && buffer[2] === 0) return \"unused\";\n\treturn `${buffer[0]}.${buffer[1]}.${buffer[2]}`;\n}\n\n// @noSetValueAPI This CC is read-only\n\n@API(CommandClasses.Version)\nexport class VersionCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(cmd: VersionCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase VersionCommand.Get:\n\t\t\tcase VersionCommand.Report:\n\t\t\tcase VersionCommand.CommandClassGet:\n\t\t\tcase VersionCommand.CommandClassReport:\n\t\t\t\treturn true; // This is mandatory\n\n\t\t\tcase VersionCommand.CapabilitiesGet:\n\t\t\tcase VersionCommand.CapabilitiesReport:\n\t\t\tcase VersionCommand.ZWaveSoftwareReport:\n\t\t\t\treturn this.version >= 3;\n\n\t\t\tcase VersionCommand.ZWaveSoftwareGet: {\n\t\t\t\treturn this.getValueDB().getValue<boolean>(\n\t\t\t\t\tVersionCCValues.supportsZWaveSoftwareGet.endpoint(\n\t\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic async get() {\n\t\tthis.assertSupportsCommand(VersionCommand, VersionCommand.Get);\n\n\t\tconst cc = new VersionCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<VersionCCReport>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"libraryType\",\n\t\t\t\t\"protocolVersion\",\n\t\t\t\t\"firmwareVersions\",\n\t\t\t\t\"hardwareVersion\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async sendReport(options: VersionCCReportOptions): Promise<void> {\n\t\tthis.assertSupportsCommand(VersionCommand, VersionCommand.Report);\n\n\t\tconst cc = new VersionCCReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async getCCVersion(\n\t\trequestedCC: CommandClasses,\n\t): Promise<MaybeNotKnown<number>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CommandClassGet,\n\t\t);\n\n\t\tconst cc = new VersionCCCommandClassGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\trequestedCC,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tVersionCCCommandClassReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.ccVersion;\n\t}\n\n\t@validateArgs()\n\t/**\n\t * @param version The version to report. If not given, the implemented version will be used for the report.\n\t */\n\tpublic async reportCCVersion(\n\t\trequestedCC: CommandClasses,\n\t\tversion?: number,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CommandClassReport,\n\t\t);\n\n\t\tlet ccVersion: number;\n\t\tswitch (requestedCC) {\n\t\t\tcase CommandClasses[\"Z-Wave Protocol\"]:\n\t\t\tcase CommandClasses[\"Z-Wave Long Range\"]:\n\t\t\t\t// These two are only for internal use\n\t\t\t\tccVersion = 0;\n\t\t\t\tbreak;\n\t\t\tcase CommandClasses.Hail:\n\t\t\tcase CommandClasses[\"Manufacturer Proprietary\"]:\n\t\t\t\t// These CCs are obsolete, we cannot enter them in the certification portal\n\t\t\t\t// but not doing so fails a certification test. Just respond that they\n\t\t\t\t// are not supported or controlled\n\t\t\t\tccVersion = 0;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tccVersion = version ?? getImplementedVersion(requestedCC);\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst cc = new VersionCCCommandClassReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\trequestedCC,\n\t\t\tccVersion,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic async getCapabilities() {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CapabilitiesGet,\n\t\t);\n\n\t\tconst cc = new VersionCCCapabilitiesGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tVersionCCCapabilitiesReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"supportsZWaveSoftwareGet\"]);\n\t\t}\n\t}\n\n\tpublic async reportCapabilities(): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CapabilitiesReport,\n\t\t);\n\n\t\tconst cc = new VersionCCCapabilitiesReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t// At this time, we do not support responding to Z-Wave Software Get\n\t\t\tsupportsZWaveSoftwareGet: false,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic async getZWaveSoftware() {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.ZWaveSoftwareGet,\n\t\t);\n\n\t\tconst cc = new VersionCCZWaveSoftwareGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tVersionCCZWaveSoftwareReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"sdkVersion\",\n\t\t\t\t\"applicationFrameworkAPIVersion\",\n\t\t\t\t\"applicationFrameworkBuildNumber\",\n\t\t\t\t\"hostInterfaceVersion\",\n\t\t\t\t\"hostInterfaceBuildNumber\",\n\t\t\t\t\"zWaveProtocolVersion\",\n\t\t\t\t\"zWaveProtocolBuildNumber\",\n\t\t\t\t\"applicationVersion\",\n\t\t\t\t\"applicationBuildNumber\",\n\t\t\t]);\n\t\t}\n\t}\n}\n\n@commandClass(CommandClasses.Version)\n@implementedVersion(3)\n@ccValues(VersionCCValues)\nexport class VersionCC extends CommandClass {\n\tdeclare ccCommand: VersionCommand;\n\n\tpublic determineRequiredCCInterviews(): readonly CommandClasses[] {\n\t\t// VersionCC must be the 2nd CC after ManufacturerSpecificCC\n\t\treturn [CommandClasses[\"Manufacturer Specific\"]];\n\t}\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\n\t\t// SDS13782: In a Multi Channel device, the Version Command Class MUST be supported by the Root Device, while\n\t\t// the Version Command Class SHOULD NOT be supported by individual End Points.\n\t\t//\n\t\t// There may be cases where a given Command Class is not implemented by the Root Device of a Multi\n\t\t// Channel device. However, the Root Device MUST respond to Version requests for any Command Class\n\t\t// implemented by the Multi Channel device; also in cases where the actual Command Class is only\n\t\t// provided by an End Point.\n\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\n\t\t// Use the CC API of the root device for all queries\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses.Version,\n\t\t\tctx,\n\t\t\tnode,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tconst queryCCVersion = async (cc: CommandClasses): Promise<void> => {\n\t\t\t// Only query CCs we support. Theoretically we could skip queries where we support only V1,\n\t\t\t// but there are Z-Wave certification tests that require us to query all CCs\n\t\t\tconst maxImplemented = getImplementedVersion(cc);\n\t\t\tif (maxImplemented === 0) {\n\t\t\t\tctx.logNode(\n\t\t\t\t\tnode.id,\n\t\t\t\t\t` skipping query for ${CommandClasses[cc]} (${\n\t\t\t\t\t\tnum2hex(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t}) because max implemented version is ${maxImplemented}`,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: ` querying the CC version for ${getCCName(cc)}...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\t// query the CC version\n\t\t\tconst supportedVersion = await api.getCCVersion(cc);\n\t\t\tif (supportedVersion != undefined) {\n\t\t\t\t// Remember which CC version this endpoint supports\n\t\t\t\tlet logMessage: string;\n\t\t\t\tif (supportedVersion > 0) {\n\t\t\t\t\t// Basic CC has special rules for when it is considered supported\n\t\t\t\t\t// Therefore we mark all other CCs as supported, but not Basic CC,\n\t\t\t\t\t// for which support is determined later.\n\t\t\t\t\tif (cc === CommandClasses.Basic) {\n\t\t\t\t\t\tendpoint.addCC(cc, { version: supportedVersion });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tendpoint.addCC(cc, {\n\t\t\t\t\t\t\tisSupported: true,\n\t\t\t\t\t\t\tversion: supportedVersion,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tlogMessage = ` supports CC ${CommandClasses[cc]} (${\n\t\t\t\t\t\tnum2hex(cc)\n\t\t\t\t\t}) in version ${supportedVersion}`;\n\t\t\t\t} else {\n\t\t\t\t\t// We were lied to - the NIF said this CC is supported, now the node claims it isn't\n\t\t\t\t\t// Make sure this is not a critical CC, which must be supported though\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tcc === CommandClasses.Version\n\t\t\t\t\t\t|| cc === CommandClasses[\"Manufacturer Specific\"]\n\t\t\t\t\t) {\n\t\t\t\t\t\tlogMessage = ` claims NOT to support CC ${\n\t\t\t\t\t\t\tCommandClasses[cc]\n\t\t\t\t\t\t} (${num2hex(cc)}), but it must. Assuming the ${\n\t\t\t\t\t\t\tthis.endpointIndex === 0 ? \"node\" : \"endpoint\"\n\t\t\t\t\t\t} supports version 1...`;\n\t\t\t\t\t\tendpoint.addCC(cc, { version: 1 });\n\t\t\t\t\t} else if (\n\t\t\t\t\t\t(cc === CommandClasses.Security\n\t\t\t\t\t\t\t&& node.hasSecurityClass(SecurityClass.S0_Legacy))\n\t\t\t\t\t\t|| (cc === CommandClasses[\"Security 2\"]\n\t\t\t\t\t\t\t&& securityClassOrder.some((sc) =>\n\t\t\t\t\t\t\t\tsecurityClassIsS2(sc)\n\t\t\t\t\t\t\t\t&& node.hasSecurityClass(sc)\n\t\t\t\t\t\t\t))\n\t\t\t\t\t) {\n\t\t\t\t\t\tlogMessage = ` claims NOT to support CC ${\n\t\t\t\t\t\t\tCommandClasses[cc]\n\t\t\t\t\t\t} (${\n\t\t\t\t\t\t\tnum2hex(cc)\n\t\t\t\t\t\t}), but it is known to support it. Assuming the ${\n\t\t\t\t\t\t\tthis.endpointIndex === 0 ? \"node\" : \"endpoint\"\n\t\t\t\t\t\t} supports version 1...`;\n\t\t\t\t\t\tendpoint.addCC(cc, { version: 1 });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlogMessage = ` does NOT support CC ${\n\t\t\t\t\t\t\tCommandClasses[cc]\n\t\t\t\t\t\t} (${num2hex(cc)})`;\n\t\t\t\t\t\tendpoint.removeCC(cc);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `CC version query for ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t} timed out - assuming the ${\n\t\t\t\t\t\tthis.endpointIndex === 0 ? \"node\" : \"endpoint\"\n\t\t\t\t\t} supports version 1...`,\n\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t});\n\t\t\t\tendpoint.addCC(cc, { version: 1 });\n\t\t\t}\n\t\t};\n\n\t\t// Version information should not change (except for firmware updates)\n\t\t// And it is only relevant on the root endpoint (the node)\n\t\tif (this.endpointIndex === 0) {\n\t\t\t// Step 1: Query Version CC version\n\t\t\tawait queryCCVersion(CommandClasses.Version);\n\n\t\t\t// Step 2: Query node versions\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"querying node versions...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst versionGetResponse = await api.get();\n\t\t\tif (versionGetResponse) {\n\t\t\t\tlet logMessage = `received response for node versions:\n library type: ${ZWaveLibraryTypes[versionGetResponse.libraryType]} (${\n\t\t\t\t\tnum2hex(versionGetResponse.libraryType)\n\t\t\t\t})\n protocol version: ${versionGetResponse.protocolVersion}\n firmware versions: ${versionGetResponse.firmwareVersions.join(\", \")}`;\n\t\t\t\tif (versionGetResponse.hardwareVersion != undefined) {\n\t\t\t\t\tlogMessage +=\n\t\t\t\t\t\t`\\n hardware version: ${versionGetResponse.hardwareVersion}`;\n\t\t\t\t}\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Step 3: Query all other CC versions\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"querying CC versions...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\t// Basic CC is not included in the NIF, so it won't be returned by endpoint.getCCs() at this point\n\t\t{\n\t\t\tconst cc = CommandClasses.Basic;\n\t\t\t// Skip the query of endpoint CCs that are also supported by the root device\n\t\t\tif (this.endpointIndex === 0 || node.getCCVersion(cc) === 0) {\n\t\t\t\tawait queryCCVersion(cc);\n\t\t\t}\n\t\t}\n\t\tfor (const [cc] of endpoint.getCCs()) {\n\t\t\t// We already queried the Version CC version at the start of this interview\n\t\t\tif (cc === CommandClasses.Version) continue;\n\t\t\t// And we queried Basic CC just before this\n\t\t\tif (cc === CommandClasses.Basic) continue;\n\t\t\t// Skip the query of endpoint CCs that are also supported by the root device\n\t\t\tif (this.endpointIndex > 0 && node.getCCVersion(cc) > 0) continue;\n\t\t\tawait queryCCVersion(cc);\n\t\t}\n\n\t\t// Step 4: Query VersionCC capabilities (root device only)\n\t\tif (this.endpointIndex === 0 && api.version >= 3) {\n\t\t\t// Step 4a: Support for SoftwareGet\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"querying if Z-Wave Software Get is supported...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst capsResponse = await api.getCapabilities();\n\t\t\tif (capsResponse) {\n\t\t\t\tconst { supportsZWaveSoftwareGet } = capsResponse;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `Z-Wave Software Get is${\n\t\t\t\t\t\tsupportsZWaveSoftwareGet ? \"\" : \" not\"\n\t\t\t\t\t} supported`,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\n\t\t\t\tif (supportsZWaveSoftwareGet) {\n\t\t\t\t\t// Step 4b: Query Z-Wave Software versions\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: \"querying Z-Wave software versions...\",\n\t\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t\t});\n\t\t\t\t\tawait api.getZWaveSoftware();\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: \"received Z-Wave software versions\",\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface VersionCCReportOptions {\n\tlibraryType: ZWaveLibraryTypes;\n\tprotocolVersion: string;\n\tfirmwareVersions: string[];\n\thardwareVersion?: number;\n}\n\n@CCCommand(VersionCommand.Report)\n@ccValueProperty(\"libraryType\", VersionCCValues.libraryType)\n@ccValueProperty(\"protocolVersion\", VersionCCValues.protocolVersion)\n@ccValueProperty(\"firmwareVersions\", VersionCCValues.firmwareVersions)\n@ccValueProperty(\"hardwareVersion\", VersionCCValues.hardwareVersion)\nexport class VersionCCReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tif (!/^\\d+\\.\\d+(\\.\\d+)?$/.test(options.protocolVersion)) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`protocolVersion must be a string in the format \"major.minor\" or \"major.minor.patch\", received \"${options.protocolVersion}\"`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t} else if (\n\t\t\t!options.firmwareVersions.every((fw) =>\n\t\t\t\t/^\\d+\\.\\d+(\\.\\d+)?$/.test(fw)\n\t\t\t)\n\t\t) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`firmwareVersions must be an array of strings in the format \"major.minor\" or \"major.minor.patch\", received \"${\n\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\toptions.firmwareVersions,\n\t\t\t\t\t)\n\t\t\t\t}\"`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.libraryType = options.libraryType;\n\t\tthis.protocolVersion = options.protocolVersion;\n\t\tthis.firmwareVersions = options.firmwareVersions;\n\t\tthis.hardwareVersion = options.hardwareVersion;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): VersionCCReport {\n\t\tvalidatePayload(raw.payload.length >= 5);\n\t\tconst libraryType: ZWaveLibraryTypes = raw.payload[0];\n\t\tconst protocolVersion = `${raw.payload[1]}.${raw.payload[2]}`;\n\t\tconst firmwareVersions = [`${raw.payload[3]}.${raw.payload[4]}`];\n\n\t\tlet hardwareVersion: number | undefined;\n\t\tif (raw.payload.length >= 7) {\n\t\t\t// V2+\n\t\t\thardwareVersion = raw.payload[5];\n\t\t\tconst additionalFirmwares = raw.payload[6];\n\t\t\tvalidatePayload(\n\t\t\t\traw.payload.length >= 7 + 2 * additionalFirmwares,\n\t\t\t);\n\t\t\tfor (let i = 0; i < additionalFirmwares; i++) {\n\t\t\t\tfirmwareVersions.push(\n\t\t\t\t\t`${raw.payload[7 + 2 * i]}.${raw.payload[7 + 2 * i + 1]}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tlibraryType,\n\t\t\tprotocolVersion,\n\t\t\tfirmwareVersions,\n\t\t\thardwareVersion,\n\t\t});\n\t}\n\n\tpublic readonly libraryType: ZWaveLibraryTypes;\n\n\tpublic readonly protocolVersion: string;\n\n\tpublic readonly firmwareVersions: string[];\n\n\tpublic readonly hardwareVersion: number | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.libraryType,\n\t\t\t...this.protocolVersion\n\t\t\t\t.split(\".\")\n\t\t\t\t.map((n) => parseInt(n))\n\t\t\t\t.slice(0, 2),\n\t\t\t...this.firmwareVersions[0]\n\t\t\t\t.split(\".\")\n\t\t\t\t.map((n) => parseInt(n))\n\t\t\t\t.slice(0, 2),\n\t\t\tthis.hardwareVersion ?? 0x00,\n\t\t\tthis.firmwareVersions.length - 1,\n\t\t]);\n\n\t\tif (this.firmwareVersions.length > 1) {\n\t\t\tconst firmwaresBuffer = new Bytes(\n\t\t\t\t(this.firmwareVersions.length - 1) * 2,\n\t\t\t);\n\t\t\tfor (let i = 1; i < this.firmwareVersions.length; i++) {\n\t\t\t\tconst [major, minor] = this.firmwareVersions[i]\n\t\t\t\t\t.split(\".\")\n\t\t\t\t\t.map((n) => parseInt(n));\n\t\t\t\tfirmwaresBuffer[2 * (i - 1)] = major;\n\t\t\t\tfirmwaresBuffer[2 * (i - 1) + 1] = minor;\n\t\t\t}\n\t\t\tthis.payload = Bytes.concat([this.payload, firmwaresBuffer]);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"library type\": getEnumMemberName(\n\t\t\t\tZWaveLibraryTypes,\n\t\t\t\tthis.libraryType,\n\t\t\t),\n\t\t\t\"protocol version\": this.protocolVersion,\n\t\t\t\"firmware versions\": this.firmwareVersions.join(\", \"),\n\t\t};\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tmessage[\"hardware version\"] = this.hardwareVersion;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(VersionCommand.Get)\n@expectedCCResponse(VersionCCReport)\nexport class VersionCCGet extends VersionCC {}\n\n// @publicAPI\nexport interface VersionCCCommandClassReportOptions {\n\trequestedCC: CommandClasses;\n\tccVersion: number;\n}\n\n@CCCommand(VersionCommand.CommandClassReport)\nexport class VersionCCCommandClassReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCCommandClassReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.requestedCC = options.requestedCC;\n\t\tthis.ccVersion = options.ccVersion;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCCommandClassReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst requestedCC: CommandClasses = raw.payload[0];\n\t\tconst ccVersion = raw.payload[1];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trequestedCC,\n\t\t\tccVersion,\n\t\t});\n\t}\n\n\tpublic ccVersion: number;\n\tpublic requestedCC: CommandClasses;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.requestedCC, this.ccVersion]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tCC: getCCName(this.requestedCC),\n\t\t\t\tversion: this.ccVersion,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface VersionCCCommandClassGetOptions {\n\trequestedCC: CommandClasses;\n}\n\nfunction testResponseForVersionCommandClassGet(\n\tsent: VersionCCCommandClassGet,\n\treceived: VersionCCCommandClassReport,\n) {\n\t// We expect a Version CommandClass Report that matches the requested CC\n\treturn sent.requestedCC === received.requestedCC;\n}\n\n@CCCommand(VersionCommand.CommandClassGet)\n@expectedCCResponse(\n\tVersionCCCommandClassReport,\n\ttestResponseForVersionCommandClassGet,\n)\nexport class VersionCCCommandClassGet extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCCommandClassGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.requestedCC = options.requestedCC;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCCommandClassGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst requestedCC: CommandClasses = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trequestedCC,\n\t\t});\n\t}\n\n\tpublic requestedCC: CommandClasses;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.requestedCC]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { CC: getCCName(this.requestedCC) },\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface VersionCCCapabilitiesReportOptions {\n\tsupportsZWaveSoftwareGet: boolean;\n}\n\n@CCCommand(VersionCommand.CapabilitiesReport)\n@ccValueProperty(\n\t\"supportsZWaveSoftwareGet\",\n\tVersionCCValues.supportsZWaveSoftwareGet,\n)\nexport class VersionCCCapabilitiesReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCCapabilitiesReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.supportsZWaveSoftwareGet = options.supportsZWaveSoftwareGet;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCCapabilitiesReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst capabilities = raw.payload[0];\n\t\tconst supportsZWaveSoftwareGet = !!(capabilities & 0b100);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportsZWaveSoftwareGet,\n\t\t});\n\t}\n\n\tpublic supportsZWaveSoftwareGet: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\t(this.supportsZWaveSoftwareGet ? 0b100 : 0) | 0b11,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supports Z-Wave Software Get command\":\n\t\t\t\t\tthis.supportsZWaveSoftwareGet,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(VersionCommand.CapabilitiesGet)\n@expectedCCResponse(VersionCCCapabilitiesReport)\nexport class VersionCCCapabilitiesGet extends VersionCC {}\n\n// @publicAPI\nexport interface VersionCCZWaveSoftwareReportOptions {\n\tsdkVersion: string;\n\tapplicationFrameworkAPIVersion: string;\n\tapplicationFrameworkBuildNumber: number;\n\thostInterfaceVersion: string;\n\thostInterfaceBuildNumber: number;\n\tzWaveProtocolVersion: string;\n\tzWaveProtocolBuildNumber: number;\n\tapplicationVersion: string;\n\tapplicationBuildNumber: number;\n}\n\n@CCCommand(VersionCommand.ZWaveSoftwareReport)\n@ccValueProperty(\"sdkVersion\", VersionCCValues.sdkVersion)\n@ccValueProperty(\n\t\"applicationFrameworkAPIVersion\",\n\tVersionCCValues.applicationFrameworkAPIVersion,\n)\n@ccValueProperty(\n\t\"applicationFrameworkBuildNumber\",\n\tVersionCCValues.applicationFrameworkBuildNumber,\n)\n@ccValueProperty(\"hostInterfaceVersion\", VersionCCValues.serialAPIVersion)\n@ccValueProperty(\n\t\"hostInterfaceBuildNumber\",\n\tVersionCCValues.serialAPIBuildNumber,\n)\n@ccValueProperty(\"zWaveProtocolVersion\", VersionCCValues.zWaveProtocolVersion)\n@ccValueProperty(\n\t\"zWaveProtocolBuildNumber\",\n\tVersionCCValues.zWaveProtocolBuildNumber,\n)\n@ccValueProperty(\"applicationVersion\", VersionCCValues.applicationVersion)\n@ccValueProperty(\n\t\"applicationBuildNumber\",\n\tVersionCCValues.applicationBuildNumber,\n)\nexport class VersionCCZWaveSoftwareReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCZWaveSoftwareReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.sdkVersion = options.sdkVersion;\n\t\tthis.applicationFrameworkAPIVersion =\n\t\t\toptions.applicationFrameworkAPIVersion;\n\t\tthis.applicationFrameworkBuildNumber =\n\t\t\toptions.applicationFrameworkBuildNumber;\n\t\tthis.hostInterfaceVersion = options.hostInterfaceVersion;\n\t\tthis.hostInterfaceBuildNumber = options.hostInterfaceBuildNumber;\n\t\tthis.zWaveProtocolVersion = options.zWaveProtocolVersion;\n\t\tthis.zWaveProtocolBuildNumber = options.zWaveProtocolBuildNumber;\n\t\tthis.applicationVersion = options.applicationVersion;\n\t\tthis.applicationBuildNumber = options.applicationBuildNumber;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCZWaveSoftwareReport {\n\t\tvalidatePayload(raw.payload.length >= 23);\n\t\tconst sdkVersion = parseVersion(raw.payload);\n\t\tconst applicationFrameworkAPIVersion = parseVersion(\n\t\t\traw.payload.subarray(3),\n\t\t);\n\t\tlet applicationFrameworkBuildNumber;\n\t\tif (applicationFrameworkAPIVersion !== \"unused\") {\n\t\t\tapplicationFrameworkBuildNumber = raw.payload.readUInt16BE(6);\n\t\t} else {\n\t\t\tapplicationFrameworkBuildNumber = 0;\n\t\t}\n\n\t\tconst hostInterfaceVersion = parseVersion(raw.payload.subarray(8));\n\t\tlet hostInterfaceBuildNumber;\n\t\tif (hostInterfaceVersion !== \"unused\") {\n\t\t\thostInterfaceBuildNumber = raw.payload.readUInt16BE(11);\n\t\t} else {\n\t\t\thostInterfaceBuildNumber = 0;\n\t\t}\n\n\t\tconst zWaveProtocolVersion = parseVersion(raw.payload.subarray(13));\n\t\tlet zWaveProtocolBuildNumber;\n\t\tif (zWaveProtocolVersion !== \"unused\") {\n\t\t\tzWaveProtocolBuildNumber = raw.payload.readUInt16BE(16);\n\t\t} else {\n\t\t\tzWaveProtocolBuildNumber = 0;\n\t\t}\n\n\t\tconst applicationVersion = parseVersion(raw.payload.subarray(18));\n\t\tlet applicationBuildNumber;\n\t\tif (applicationVersion !== \"unused\") {\n\t\t\tapplicationBuildNumber = raw.payload.readUInt16BE(21);\n\t\t} else {\n\t\t\tapplicationBuildNumber = 0;\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsdkVersion,\n\t\t\tapplicationFrameworkAPIVersion,\n\t\t\tapplicationFrameworkBuildNumber,\n\t\t\thostInterfaceVersion,\n\t\t\thostInterfaceBuildNumber,\n\t\t\tzWaveProtocolVersion,\n\t\t\tzWaveProtocolBuildNumber,\n\t\t\tapplicationVersion,\n\t\t\tapplicationBuildNumber,\n\t\t});\n\t}\n\n\tpublic readonly sdkVersion: string;\n\n\tpublic readonly applicationFrameworkAPIVersion: string;\n\n\tpublic readonly applicationFrameworkBuildNumber: number;\n\n\tpublic readonly hostInterfaceVersion: string;\n\n\tpublic readonly hostInterfaceBuildNumber: number;\n\n\tpublic readonly zWaveProtocolVersion: string;\n\n\tpublic readonly zWaveProtocolBuildNumber: number;\n\n\tpublic readonly applicationVersion: string;\n\n\tpublic readonly applicationBuildNumber: number;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"SDK version\": this.sdkVersion,\n\t\t};\n\t\tmessage[\"appl. framework API version\"] =\n\t\t\tthis.applicationFrameworkAPIVersion;\n\t\tif (this.applicationFrameworkAPIVersion !== \"unused\") {\n\t\t\tmessage[\"appl. framework build number\"] =\n\t\t\t\tthis.applicationFrameworkBuildNumber;\n\t\t}\n\t\tmessage[\"host interface version\"] = this.hostInterfaceVersion;\n\t\tif (this.hostInterfaceVersion !== \"unused\") {\n\t\t\tmessage[\"host interface build number\"] =\n\t\t\t\tthis.hostInterfaceBuildNumber;\n\t\t}\n\t\tmessage[\"Z-Wave protocol version\"] = this.zWaveProtocolVersion;\n\t\tif (this.zWaveProtocolVersion !== \"unused\") {\n\t\t\tmessage[\"Z-Wave protocol build number\"] =\n\t\t\t\tthis.zWaveProtocolBuildNumber;\n\t\t}\n\t\tmessage[\"application version\"] = this.applicationVersion;\n\t\tif (this.applicationVersion !== \"unused\") {\n\t\t\tmessage[\"application build number\"] = this.applicationBuildNumber;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(VersionCommand.ZWaveSoftwareGet)\n@expectedCCResponse(VersionCCZWaveSoftwareReport)\nexport class VersionCCZWaveSoftwareGet extends VersionCC {}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/cjs/cc/WakeUpCC.js
CHANGED
|
@@ -154,7 +154,7 @@ let WakeUpCCAPI = (() => {
|
|
|
154
154
|
}
|
|
155
155
|
};
|
|
156
156
|
}
|
|
157
|
-
//
|
|
157
|
+
// oxlint-disable-next-line typescript/explicit-module-boundary-types
|
|
158
158
|
async getInterval() {
|
|
159
159
|
this.assertSupportsCommand(import_Types.WakeUpCommand, import_Types.WakeUpCommand.IntervalGet);
|
|
160
160
|
const cc = new WakeUpCCIntervalGet({
|
|
@@ -166,7 +166,7 @@ let WakeUpCCAPI = (() => {
|
|
|
166
166
|
return (0, import_shared.pick)(response, ["wakeUpInterval", "controllerNodeId"]);
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
|
-
//
|
|
169
|
+
// oxlint-disable-next-line typescript/explicit-module-boundary-types
|
|
170
170
|
async getIntervalCapabilities() {
|
|
171
171
|
this.assertSupportsCommand(import_Types.WakeUpCommand, import_Types.WakeUpCommand.IntervalCapabilitiesGet);
|
|
172
172
|
const cc = new WakeUpCCIntervalCapabilitiesGet({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cc/WakeUpCC.ts"],
|
|
4
|
-
"sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype SupervisionResult,\n\tTransmitOptions,\n\tValueMetadata,\n\ttype WithAddress,\n\tsupervisedCommandSucceeded,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, pick } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { clamp } from \"alcalzone-shared/math\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\ttype SetValueImplementation,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { WakeUpCommand } from \"../lib/_Types.js\";\n\nexport const WakeUpCCValues = V.defineCCValues(CommandClasses[\"Wake Up\"], {\n\t...V.staticProperty(\n\t\t\"controllerNodeId\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnly,\n\t\t\tlabel: \"Node ID of the controller\",\n\t\t} as const,\n\t\t{\n\t\t\tsupportsEndpoints: false,\n\t\t},\n\t),\n\t...V.staticProperty(\n\t\t\"wakeUpInterval\",\n\t\t{\n\t\t\t...ValueMetadata.UInt24,\n\t\t\tlabel: \"Wake Up interval\",\n\t\t} as const,\n\t\t{\n\t\t\tsupportsEndpoints: false,\n\t\t},\n\t),\n\t...V.staticProperty(\"wakeUpOnDemandSupported\", undefined, {\n\t\tinternal: true,\n\t\tsupportsEndpoints: false,\n\t\tminVersion: 3,\n\t}),\n});\n\n@API(CommandClasses[\"Wake Up\"])\nexport class WakeUpCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: WakeUpCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase WakeUpCommand.IntervalGet:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase WakeUpCommand.IntervalSet:\n\t\t\tcase WakeUpCommand.NoMoreInformation:\n\t\t\t\treturn true; // This is mandatory\n\t\t\tcase WakeUpCommand.IntervalCapabilitiesGet:\n\t\t\t\treturn this.version >= 2 && this.isSinglecast();\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(this: WakeUpCCAPI, { property }, value) {\n\t\t\tif (property !== \"wakeUpInterval\") {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t\tif (typeof value !== \"number\") {\n\t\t\t\tthrowWrongValueType(\n\t\t\t\t\tthis.ccId,\n\t\t\t\t\tproperty,\n\t\t\t\t\t\"number\",\n\t\t\t\t\ttypeof value,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst result = await this.setInterval(\n\t\t\t\tvalue,\n\t\t\t\tthis.host.ownNodeId ?? 1,\n\t\t\t);\n\n\t\t\t// Verify the change after a short delay, unless the command was supervised and successful\n\t\t\tif (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n\t\t\t\tthis.schedulePoll({ property }, value, { transition: \"fast\" });\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: WakeUpCCAPI, { property }) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"wakeUpInterval\":\n\t\t\t\t\treturn (await this.getInterval())?.[property];\n\t\t\t\tdefault:\n\t\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getInterval() {\n\t\tthis.assertSupportsCommand(WakeUpCommand, WakeUpCommand.IntervalGet);\n\n\t\tconst cc = new WakeUpCCIntervalGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWakeUpCCIntervalReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"wakeUpInterval\", \"controllerNodeId\"]);\n\t\t}\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getIntervalCapabilities() {\n\t\tthis.assertSupportsCommand(\n\t\t\tWakeUpCommand,\n\t\t\tWakeUpCommand.IntervalCapabilitiesGet,\n\t\t);\n\n\t\tconst cc = new WakeUpCCIntervalCapabilitiesGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWakeUpCCIntervalCapabilitiesReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"defaultWakeUpInterval\",\n\t\t\t\t\"minWakeUpInterval\",\n\t\t\t\t\"maxWakeUpInterval\",\n\t\t\t\t\"wakeUpIntervalSteps\",\n\t\t\t\t\"wakeUpOnDemandSupported\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async setInterval(\n\t\twakeUpInterval: number,\n\t\tcontrollerNodeId: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(WakeUpCommand, WakeUpCommand.IntervalSet);\n\n\t\tconst cc = new WakeUpCCIntervalSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\twakeUpInterval,\n\t\t\tcontrollerNodeId,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\tpublic async sendNoMoreInformation(): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWakeUpCommand,\n\t\t\tWakeUpCommand.NoMoreInformation,\n\t\t);\n\n\t\tconst cc = new WakeUpCCNoMoreInformation({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tawait this.host.sendCommand(cc, {\n\t\t\t...this.commandOptions,\n\t\t\t// This command must be sent as part of the wake up queue\n\t\t\tpriority: MessagePriority.WakeUp,\n\t\t\t// Don't try to resend this - if we get no response, the node is most likely asleep\n\t\t\tmaxSendAttempts: 1,\n\t\t\t// Also we don't want to wait for an ACK because this can lock up the network for seconds\n\t\t\t// if the target node is asleep and doesn't respond to the command\n\t\t\ttransmitOptions: TransmitOptions.DEFAULT_NOACK,\n\t\t});\n\t}\n}\n\n@commandClass(CommandClasses[\"Wake Up\"])\n@implementedVersion(3)\n@ccValues(WakeUpCCValues)\nexport class WakeUpCC extends CommandClass {\n\tdeclare ccCommand: WakeUpCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Wake Up\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tif (node.id === ctx.ownNodeId) {\n\t\t\tctx.logNode(\n\t\t\t\tnode.id,\n\t\t\t\t`skipping wakeup configuration for the controller`,\n\t\t\t);\n\t\t} else if (node.isFrequentListening) {\n\t\t\tctx.logNode(\n\t\t\t\tnode.id,\n\t\t\t\t`skipping wakeup configuration for frequent listening device`,\n\t\t\t);\n\t\t} else {\n\t\t\tlet desiredInterval: number;\n\t\t\tlet currentControllerNodeId: number;\n\t\t\tlet minInterval: number | undefined;\n\t\t\tlet maxInterval: number | undefined;\n\n\t\t\t// Retrieve the allowed wake up intervals and wake on demand support if possible\n\t\t\tif (api.version >= 2) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"retrieving wakeup capabilities from the device...\",\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tconst wakeupCaps = await api.getIntervalCapabilities();\n\t\t\t\tif (wakeupCaps) {\n\t\t\t\t\tconst logMessage = `received wakeup capabilities:\ndefault wakeup interval: ${wakeupCaps.defaultWakeUpInterval} seconds\nminimum wakeup interval: ${wakeupCaps.minWakeUpInterval} seconds\nmaximum wakeup interval: ${wakeupCaps.maxWakeUpInterval} seconds\nwakeup interval steps: ${wakeupCaps.wakeUpIntervalSteps} seconds\nwakeup on demand supported: ${wakeupCaps.wakeUpOnDemandSupported}`;\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t\tminInterval = wakeupCaps.minWakeUpInterval;\n\t\t\t\t\tmaxInterval = wakeupCaps.maxWakeUpInterval;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// SDS14223 prescribes a IntervalSet followed by a check\n\t\t\t// We have no intention of changing the interval (maybe some time in the future)\n\t\t\t// So for now get the current interval and just set the controller ID\n\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"retrieving wakeup interval from the device...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst wakeupResp = await api.getInterval();\n\n\t\t\tif (wakeupResp) {\n\t\t\t\tconst logMessage = `received wakeup configuration:\nwakeup interval: ${wakeupResp.wakeUpInterval} seconds\ncontroller node: ${wakeupResp.controllerNodeId}`;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\n\t\t\t\tdesiredInterval = wakeupResp.wakeUpInterval;\n\t\t\t\tcurrentControllerNodeId = wakeupResp.controllerNodeId;\n\t\t\t} else {\n\t\t\t\t// Just guess, I guess\n\t\t\t\tdesiredInterval = 3600 * 6; // 6 hours\n\t\t\t\tcurrentControllerNodeId = 0; // assume not set\n\t\t\t}\n\n\t\t\tconst ownNodeId = ctx.ownNodeId;\n\t\t\t// Only change the destination if necessary\n\t\t\tif (currentControllerNodeId !== ownNodeId) {\n\t\t\t\t// Spec compliance: Limit the interval to the allowed range, but...\n\t\t\t\t// ...try and preserve a \"never wake up\" configuration (#6367)\n\t\t\t\tif (\n\t\t\t\t\tdesiredInterval !== 0\n\t\t\t\t\t&& minInterval != undefined\n\t\t\t\t\t&& maxInterval != undefined\n\t\t\t\t) {\n\t\t\t\t\tdesiredInterval = clamp(\n\t\t\t\t\t\tdesiredInterval,\n\t\t\t\t\t\tminInterval,\n\t\t\t\t\t\tmaxInterval,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: \"configuring wakeup destination node\",\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tawait api.setInterval(desiredInterval, ownNodeId);\n\t\t\t\tthis.setValue(\n\t\t\t\t\tctx,\n\t\t\t\t\tWakeUpCCValues.controllerNodeId,\n\t\t\t\t\townNodeId,\n\t\t\t\t);\n\t\t\t\tctx.logNode(\n\t\t\t\t\tnode.id,\n\t\t\t\t\t\"wakeup destination node changed!\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface WakeUpCCIntervalSetOptions {\n\twakeUpInterval: number;\n\tcontrollerNodeId: number;\n}\n\n@CCCommand(WakeUpCommand.IntervalSet)\n@useSupervision()\nexport class WakeUpCCIntervalSet extends WakeUpCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WakeUpCCIntervalSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.wakeUpInterval = options.wakeUpInterval;\n\t\tthis.controllerNodeId = options.controllerNodeId;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): WakeUpCCIntervalSet {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst wakeUpInterval = raw.payload.readUIntBE(0, 3);\n\t\tconst controllerNodeId = raw.payload[3];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\twakeUpInterval,\n\t\t\tcontrollerNodeId,\n\t\t});\n\t}\n\n\tpublic wakeUpInterval: number;\n\tpublic controllerNodeId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\t0,\n\t\t\t0,\n\t\t\t0, // placeholder\n\t\t\tthis.controllerNodeId,\n\t\t]);\n\t\tthis.payload.writeUIntBE(this.wakeUpInterval, 0, 3);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"wake-up interval\": `${this.wakeUpInterval} seconds`,\n\t\t\t\t\"controller node id\": this.controllerNodeId,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WakeUpCCIntervalReportOptions {\n\twakeUpInterval: number;\n\tcontrollerNodeId: number;\n}\n\n@CCCommand(WakeUpCommand.IntervalReport)\n@ccValueProperty(\"wakeUpInterval\", WakeUpCCValues.wakeUpInterval)\n@ccValueProperty(\"controllerNodeId\", WakeUpCCValues.controllerNodeId)\nexport class WakeUpCCIntervalReport extends WakeUpCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WakeUpCCIntervalReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.wakeUpInterval = options.wakeUpInterval;\n\t\tthis.controllerNodeId = options.controllerNodeId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WakeUpCCIntervalReport {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst wakeUpInterval = raw.payload.readUIntBE(0, 3);\n\t\tconst controllerNodeId = raw.payload[3];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\twakeUpInterval,\n\t\t\tcontrollerNodeId,\n\t\t});\n\t}\n\n\tpublic readonly wakeUpInterval: number;\n\n\tpublic readonly controllerNodeId: number;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"wake-up interval\": `${this.wakeUpInterval} seconds`,\n\t\t\t\t\"controller node id\": this.controllerNodeId,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(WakeUpCommand.IntervalGet)\n@expectedCCResponse(WakeUpCCIntervalReport)\nexport class WakeUpCCIntervalGet extends WakeUpCC {}\n\n@CCCommand(WakeUpCommand.WakeUpNotification)\nexport class WakeUpCCWakeUpNotification extends WakeUpCC {}\n\n@CCCommand(WakeUpCommand.NoMoreInformation)\nexport class WakeUpCCNoMoreInformation extends WakeUpCC {}\n\n// @publicAPI\nexport interface WakeUpCCIntervalCapabilitiesReportOptions {\n\tminWakeUpInterval: number;\n\tmaxWakeUpInterval: number;\n\tdefaultWakeUpInterval: number;\n\twakeUpIntervalSteps: number;\n\twakeUpOnDemandSupported: boolean;\n}\n\n@CCCommand(WakeUpCommand.IntervalCapabilitiesReport)\n@ccValueProperty(\n\t\"wakeUpOnDemandSupported\",\n\tWakeUpCCValues.wakeUpOnDemandSupported,\n)\nexport class WakeUpCCIntervalCapabilitiesReport extends WakeUpCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WakeUpCCIntervalCapabilitiesReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.minWakeUpInterval = options.minWakeUpInterval;\n\t\tthis.maxWakeUpInterval = options.maxWakeUpInterval;\n\t\tthis.defaultWakeUpInterval = options.defaultWakeUpInterval;\n\t\tthis.wakeUpIntervalSteps = options.wakeUpIntervalSteps;\n\t\tthis.wakeUpOnDemandSupported = options.wakeUpOnDemandSupported;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WakeUpCCIntervalCapabilitiesReport {\n\t\tvalidatePayload(raw.payload.length >= 12);\n\t\tconst minWakeUpInterval = raw.payload.readUIntBE(0, 3);\n\t\tconst maxWakeUpInterval = raw.payload.readUIntBE(3, 3);\n\t\tconst defaultWakeUpInterval = raw.payload.readUIntBE(6, 3);\n\t\tconst wakeUpIntervalSteps = raw.payload.readUIntBE(9, 3);\n\t\tlet wakeUpOnDemandSupported = false;\n\t\tif (raw.payload.length >= 13) {\n\t\t\t// V3+\n\t\t\twakeUpOnDemandSupported = !!(raw.payload[12] & 0b1);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tminWakeUpInterval,\n\t\t\tmaxWakeUpInterval,\n\t\t\tdefaultWakeUpInterval,\n\t\t\twakeUpIntervalSteps,\n\t\t\twakeUpOnDemandSupported,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\t\tconst valueDB = this.getValueDB(ctx);\n\n\t\t// Store the received information as metadata for the wake up interval\n\t\tvalueDB.setMetadata(\n\t\t\t{\n\t\t\t\tcommandClass: this.ccId,\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tproperty: \"wakeUpInterval\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t...ValueMetadata.WriteOnlyUInt24,\n\t\t\t\tmin: this.minWakeUpInterval,\n\t\t\t\tmax: this.maxWakeUpInterval,\n\t\t\t\tsteps: this.wakeUpIntervalSteps,\n\t\t\t\tdefault: this.defaultWakeUpInterval,\n\t\t\t},\n\t\t);\n\n\t\t// Store wakeUpOnDemandSupported in valueDB\n\n\t\treturn true;\n\t}\n\n\tpublic readonly minWakeUpInterval: number;\n\tpublic readonly maxWakeUpInterval: number;\n\tpublic readonly defaultWakeUpInterval: number;\n\tpublic readonly wakeUpIntervalSteps: number;\n\n\tpublic readonly wakeUpOnDemandSupported: boolean;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"default interval\": `${this.defaultWakeUpInterval} seconds`,\n\t\t\t\t\"minimum interval\": `${this.minWakeUpInterval} seconds`,\n\t\t\t\t\"maximum interval\": `${this.maxWakeUpInterval} seconds`,\n\t\t\t\t\"interval steps\": `${this.wakeUpIntervalSteps} seconds`,\n\t\t\t\t\"wake up on demand supported\":\n\t\t\t\t\t`${this.wakeUpOnDemandSupported}`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(WakeUpCommand.IntervalCapabilitiesGet)\n@expectedCCResponse(WakeUpCCIntervalCapabilitiesReport)\nexport class WakeUpCCIntervalCapabilitiesGet extends WakeUpCC {}\n"],
|
|
4
|
+
"sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype SupervisionResult,\n\tTransmitOptions,\n\tValueMetadata,\n\ttype WithAddress,\n\tsupervisedCommandSucceeded,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, pick } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { clamp } from \"alcalzone-shared/math\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\ttype SetValueImplementation,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { WakeUpCommand } from \"../lib/_Types.js\";\n\nexport const WakeUpCCValues = V.defineCCValues(CommandClasses[\"Wake Up\"], {\n\t...V.staticProperty(\n\t\t\"controllerNodeId\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnly,\n\t\t\tlabel: \"Node ID of the controller\",\n\t\t} as const,\n\t\t{\n\t\t\tsupportsEndpoints: false,\n\t\t},\n\t),\n\t...V.staticProperty(\n\t\t\"wakeUpInterval\",\n\t\t{\n\t\t\t...ValueMetadata.UInt24,\n\t\t\tlabel: \"Wake Up interval\",\n\t\t} as const,\n\t\t{\n\t\t\tsupportsEndpoints: false,\n\t\t},\n\t),\n\t...V.staticProperty(\"wakeUpOnDemandSupported\", undefined, {\n\t\tinternal: true,\n\t\tsupportsEndpoints: false,\n\t\tminVersion: 3,\n\t}),\n});\n\n@API(CommandClasses[\"Wake Up\"])\nexport class WakeUpCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: WakeUpCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase WakeUpCommand.IntervalGet:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase WakeUpCommand.IntervalSet:\n\t\t\tcase WakeUpCommand.NoMoreInformation:\n\t\t\t\treturn true; // This is mandatory\n\t\t\tcase WakeUpCommand.IntervalCapabilitiesGet:\n\t\t\t\treturn this.version >= 2 && this.isSinglecast();\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(this: WakeUpCCAPI, { property }, value) {\n\t\t\tif (property !== \"wakeUpInterval\") {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t\tif (typeof value !== \"number\") {\n\t\t\t\tthrowWrongValueType(\n\t\t\t\t\tthis.ccId,\n\t\t\t\t\tproperty,\n\t\t\t\t\t\"number\",\n\t\t\t\t\ttypeof value,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst result = await this.setInterval(\n\t\t\t\tvalue,\n\t\t\t\tthis.host.ownNodeId ?? 1,\n\t\t\t);\n\n\t\t\t// Verify the change after a short delay, unless the command was supervised and successful\n\t\t\tif (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n\t\t\t\tthis.schedulePoll({ property }, value, { transition: \"fast\" });\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: WakeUpCCAPI, { property }) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"wakeUpInterval\":\n\t\t\t\t\treturn (await this.getInterval())?.[property];\n\t\t\t\tdefault:\n\t\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic async getInterval() {\n\t\tthis.assertSupportsCommand(WakeUpCommand, WakeUpCommand.IntervalGet);\n\n\t\tconst cc = new WakeUpCCIntervalGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWakeUpCCIntervalReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"wakeUpInterval\", \"controllerNodeId\"]);\n\t\t}\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic async getIntervalCapabilities() {\n\t\tthis.assertSupportsCommand(\n\t\t\tWakeUpCommand,\n\t\t\tWakeUpCommand.IntervalCapabilitiesGet,\n\t\t);\n\n\t\tconst cc = new WakeUpCCIntervalCapabilitiesGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWakeUpCCIntervalCapabilitiesReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"defaultWakeUpInterval\",\n\t\t\t\t\"minWakeUpInterval\",\n\t\t\t\t\"maxWakeUpInterval\",\n\t\t\t\t\"wakeUpIntervalSteps\",\n\t\t\t\t\"wakeUpOnDemandSupported\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async setInterval(\n\t\twakeUpInterval: number,\n\t\tcontrollerNodeId: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(WakeUpCommand, WakeUpCommand.IntervalSet);\n\n\t\tconst cc = new WakeUpCCIntervalSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\twakeUpInterval,\n\t\t\tcontrollerNodeId,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\tpublic async sendNoMoreInformation(): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWakeUpCommand,\n\t\t\tWakeUpCommand.NoMoreInformation,\n\t\t);\n\n\t\tconst cc = new WakeUpCCNoMoreInformation({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tawait this.host.sendCommand(cc, {\n\t\t\t...this.commandOptions,\n\t\t\t// This command must be sent as part of the wake up queue\n\t\t\tpriority: MessagePriority.WakeUp,\n\t\t\t// Don't try to resend this - if we get no response, the node is most likely asleep\n\t\t\tmaxSendAttempts: 1,\n\t\t\t// Also we don't want to wait for an ACK because this can lock up the network for seconds\n\t\t\t// if the target node is asleep and doesn't respond to the command\n\t\t\ttransmitOptions: TransmitOptions.DEFAULT_NOACK,\n\t\t});\n\t}\n}\n\n@commandClass(CommandClasses[\"Wake Up\"])\n@implementedVersion(3)\n@ccValues(WakeUpCCValues)\nexport class WakeUpCC extends CommandClass {\n\tdeclare ccCommand: WakeUpCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Wake Up\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tif (node.id === ctx.ownNodeId) {\n\t\t\tctx.logNode(\n\t\t\t\tnode.id,\n\t\t\t\t`skipping wakeup configuration for the controller`,\n\t\t\t);\n\t\t} else if (node.isFrequentListening) {\n\t\t\tctx.logNode(\n\t\t\t\tnode.id,\n\t\t\t\t`skipping wakeup configuration for frequent listening device`,\n\t\t\t);\n\t\t} else {\n\t\t\tlet desiredInterval: number;\n\t\t\tlet currentControllerNodeId: number;\n\t\t\tlet minInterval: number | undefined;\n\t\t\tlet maxInterval: number | undefined;\n\n\t\t\t// Retrieve the allowed wake up intervals and wake on demand support if possible\n\t\t\tif (api.version >= 2) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"retrieving wakeup capabilities from the device...\",\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tconst wakeupCaps = await api.getIntervalCapabilities();\n\t\t\t\tif (wakeupCaps) {\n\t\t\t\t\tconst logMessage = `received wakeup capabilities:\ndefault wakeup interval: ${wakeupCaps.defaultWakeUpInterval} seconds\nminimum wakeup interval: ${wakeupCaps.minWakeUpInterval} seconds\nmaximum wakeup interval: ${wakeupCaps.maxWakeUpInterval} seconds\nwakeup interval steps: ${wakeupCaps.wakeUpIntervalSteps} seconds\nwakeup on demand supported: ${wakeupCaps.wakeUpOnDemandSupported}`;\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t\tminInterval = wakeupCaps.minWakeUpInterval;\n\t\t\t\t\tmaxInterval = wakeupCaps.maxWakeUpInterval;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// SDS14223 prescribes a IntervalSet followed by a check\n\t\t\t// We have no intention of changing the interval (maybe some time in the future)\n\t\t\t// So for now get the current interval and just set the controller ID\n\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"retrieving wakeup interval from the device...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst wakeupResp = await api.getInterval();\n\n\t\t\tif (wakeupResp) {\n\t\t\t\tconst logMessage = `received wakeup configuration:\nwakeup interval: ${wakeupResp.wakeUpInterval} seconds\ncontroller node: ${wakeupResp.controllerNodeId}`;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\n\t\t\t\tdesiredInterval = wakeupResp.wakeUpInterval;\n\t\t\t\tcurrentControllerNodeId = wakeupResp.controllerNodeId;\n\t\t\t} else {\n\t\t\t\t// Just guess, I guess\n\t\t\t\tdesiredInterval = 3600 * 6; // 6 hours\n\t\t\t\tcurrentControllerNodeId = 0; // assume not set\n\t\t\t}\n\n\t\t\tconst ownNodeId = ctx.ownNodeId;\n\t\t\t// Only change the destination if necessary\n\t\t\tif (currentControllerNodeId !== ownNodeId) {\n\t\t\t\t// Spec compliance: Limit the interval to the allowed range, but...\n\t\t\t\t// ...try and preserve a \"never wake up\" configuration (#6367)\n\t\t\t\tif (\n\t\t\t\t\tdesiredInterval !== 0\n\t\t\t\t\t&& minInterval != undefined\n\t\t\t\t\t&& maxInterval != undefined\n\t\t\t\t) {\n\t\t\t\t\tdesiredInterval = clamp(\n\t\t\t\t\t\tdesiredInterval,\n\t\t\t\t\t\tminInterval,\n\t\t\t\t\t\tmaxInterval,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: \"configuring wakeup destination node\",\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tawait api.setInterval(desiredInterval, ownNodeId);\n\t\t\t\tthis.setValue(\n\t\t\t\t\tctx,\n\t\t\t\t\tWakeUpCCValues.controllerNodeId,\n\t\t\t\t\townNodeId,\n\t\t\t\t);\n\t\t\t\tctx.logNode(\n\t\t\t\t\tnode.id,\n\t\t\t\t\t\"wakeup destination node changed!\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface WakeUpCCIntervalSetOptions {\n\twakeUpInterval: number;\n\tcontrollerNodeId: number;\n}\n\n@CCCommand(WakeUpCommand.IntervalSet)\n@useSupervision()\nexport class WakeUpCCIntervalSet extends WakeUpCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WakeUpCCIntervalSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.wakeUpInterval = options.wakeUpInterval;\n\t\tthis.controllerNodeId = options.controllerNodeId;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): WakeUpCCIntervalSet {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst wakeUpInterval = raw.payload.readUIntBE(0, 3);\n\t\tconst controllerNodeId = raw.payload[3];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\twakeUpInterval,\n\t\t\tcontrollerNodeId,\n\t\t});\n\t}\n\n\tpublic wakeUpInterval: number;\n\tpublic controllerNodeId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\t0,\n\t\t\t0,\n\t\t\t0, // placeholder\n\t\t\tthis.controllerNodeId,\n\t\t]);\n\t\tthis.payload.writeUIntBE(this.wakeUpInterval, 0, 3);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"wake-up interval\": `${this.wakeUpInterval} seconds`,\n\t\t\t\t\"controller node id\": this.controllerNodeId,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WakeUpCCIntervalReportOptions {\n\twakeUpInterval: number;\n\tcontrollerNodeId: number;\n}\n\n@CCCommand(WakeUpCommand.IntervalReport)\n@ccValueProperty(\"wakeUpInterval\", WakeUpCCValues.wakeUpInterval)\n@ccValueProperty(\"controllerNodeId\", WakeUpCCValues.controllerNodeId)\nexport class WakeUpCCIntervalReport extends WakeUpCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WakeUpCCIntervalReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.wakeUpInterval = options.wakeUpInterval;\n\t\tthis.controllerNodeId = options.controllerNodeId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WakeUpCCIntervalReport {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst wakeUpInterval = raw.payload.readUIntBE(0, 3);\n\t\tconst controllerNodeId = raw.payload[3];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\twakeUpInterval,\n\t\t\tcontrollerNodeId,\n\t\t});\n\t}\n\n\tpublic readonly wakeUpInterval: number;\n\n\tpublic readonly controllerNodeId: number;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"wake-up interval\": `${this.wakeUpInterval} seconds`,\n\t\t\t\t\"controller node id\": this.controllerNodeId,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(WakeUpCommand.IntervalGet)\n@expectedCCResponse(WakeUpCCIntervalReport)\nexport class WakeUpCCIntervalGet extends WakeUpCC {}\n\n@CCCommand(WakeUpCommand.WakeUpNotification)\nexport class WakeUpCCWakeUpNotification extends WakeUpCC {}\n\n@CCCommand(WakeUpCommand.NoMoreInformation)\nexport class WakeUpCCNoMoreInformation extends WakeUpCC {}\n\n// @publicAPI\nexport interface WakeUpCCIntervalCapabilitiesReportOptions {\n\tminWakeUpInterval: number;\n\tmaxWakeUpInterval: number;\n\tdefaultWakeUpInterval: number;\n\twakeUpIntervalSteps: number;\n\twakeUpOnDemandSupported: boolean;\n}\n\n@CCCommand(WakeUpCommand.IntervalCapabilitiesReport)\n@ccValueProperty(\n\t\"wakeUpOnDemandSupported\",\n\tWakeUpCCValues.wakeUpOnDemandSupported,\n)\nexport class WakeUpCCIntervalCapabilitiesReport extends WakeUpCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WakeUpCCIntervalCapabilitiesReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.minWakeUpInterval = options.minWakeUpInterval;\n\t\tthis.maxWakeUpInterval = options.maxWakeUpInterval;\n\t\tthis.defaultWakeUpInterval = options.defaultWakeUpInterval;\n\t\tthis.wakeUpIntervalSteps = options.wakeUpIntervalSteps;\n\t\tthis.wakeUpOnDemandSupported = options.wakeUpOnDemandSupported;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WakeUpCCIntervalCapabilitiesReport {\n\t\tvalidatePayload(raw.payload.length >= 12);\n\t\tconst minWakeUpInterval = raw.payload.readUIntBE(0, 3);\n\t\tconst maxWakeUpInterval = raw.payload.readUIntBE(3, 3);\n\t\tconst defaultWakeUpInterval = raw.payload.readUIntBE(6, 3);\n\t\tconst wakeUpIntervalSteps = raw.payload.readUIntBE(9, 3);\n\t\tlet wakeUpOnDemandSupported = false;\n\t\tif (raw.payload.length >= 13) {\n\t\t\t// V3+\n\t\t\twakeUpOnDemandSupported = !!(raw.payload[12] & 0b1);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tminWakeUpInterval,\n\t\t\tmaxWakeUpInterval,\n\t\t\tdefaultWakeUpInterval,\n\t\t\twakeUpIntervalSteps,\n\t\t\twakeUpOnDemandSupported,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\t\tconst valueDB = this.getValueDB(ctx);\n\n\t\t// Store the received information as metadata for the wake up interval\n\t\tvalueDB.setMetadata(\n\t\t\t{\n\t\t\t\tcommandClass: this.ccId,\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tproperty: \"wakeUpInterval\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t...ValueMetadata.WriteOnlyUInt24,\n\t\t\t\tmin: this.minWakeUpInterval,\n\t\t\t\tmax: this.maxWakeUpInterval,\n\t\t\t\tsteps: this.wakeUpIntervalSteps,\n\t\t\t\tdefault: this.defaultWakeUpInterval,\n\t\t\t},\n\t\t);\n\n\t\t// Store wakeUpOnDemandSupported in valueDB\n\n\t\treturn true;\n\t}\n\n\tpublic readonly minWakeUpInterval: number;\n\tpublic readonly maxWakeUpInterval: number;\n\tpublic readonly defaultWakeUpInterval: number;\n\tpublic readonly wakeUpIntervalSteps: number;\n\n\tpublic readonly wakeUpOnDemandSupported: boolean;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"default interval\": `${this.defaultWakeUpInterval} seconds`,\n\t\t\t\t\"minimum interval\": `${this.minWakeUpInterval} seconds`,\n\t\t\t\t\"maximum interval\": `${this.maxWakeUpInterval} seconds`,\n\t\t\t\t\"interval steps\": `${this.wakeUpIntervalSteps} seconds`,\n\t\t\t\t\"wake up on demand supported\":\n\t\t\t\t\t`${this.wakeUpOnDemandSupported}`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(WakeUpCommand.IntervalCapabilitiesGet)\n@expectedCCResponse(WakeUpCCIntervalCapabilitiesReport)\nexport class WakeUpCCIntervalCapabilitiesGet extends WakeUpCC {}\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,7 +2,7 @@ import type { CCEncodingContext, CCParsingContext } from "@zwave-js/cc";
|
|
|
2
2
|
import { CommandClasses, Duration, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type SupervisionResult, type WithAddress } from "@zwave-js/core";
|
|
3
3
|
import { Bytes } from "@zwave-js/shared";
|
|
4
4
|
import { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory } from "../lib/API.js";
|
|
5
|
-
import { type CCRaw, CommandClass, type InterviewContext } from "../lib/CommandClass.js";
|
|
5
|
+
import { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext } from "../lib/CommandClass.js";
|
|
6
6
|
import { type LevelChangeDirection, WindowCoveringCommand, WindowCoveringParameter } from "../lib/_Types.js";
|
|
7
7
|
export declare const WindowCoveringCCValues: Readonly<{
|
|
8
8
|
supportedParameters: {
|
|
@@ -226,6 +226,7 @@ export declare class WindowCoveringCCAPI extends CCAPI {
|
|
|
226
226
|
export declare class WindowCoveringCC extends CommandClass {
|
|
227
227
|
ccCommand: WindowCoveringCommand;
|
|
228
228
|
interview(ctx: InterviewContext): Promise<void>;
|
|
229
|
+
refreshValues(ctx: RefreshValuesContext): Promise<void>;
|
|
229
230
|
translatePropertyKey(ctx: GetValueDB, property: string | number, propertyKey: string | number): string | undefined;
|
|
230
231
|
}
|
|
231
232
|
export interface WindowCoveringCCSupportedReportOptions {
|
|
@@ -253,6 +254,7 @@ export declare class WindowCoveringCCReport extends WindowCoveringCC {
|
|
|
253
254
|
readonly currentValue: number;
|
|
254
255
|
readonly targetValue: number;
|
|
255
256
|
readonly duration: Duration;
|
|
257
|
+
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
256
258
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
257
259
|
}
|
|
258
260
|
export interface WindowCoveringCCGetOptions {
|
|
@@ -348,18 +348,29 @@ ${supported.map((p) => `\xB7 ${(0, import_shared.getEnumMemberName)(import_Types
|
|
|
348
348
|
this.setMetadata(ctx, import_CCValues_generated.WindowCoveringCCValues.duration(param));
|
|
349
349
|
this.setMetadata(ctx, import_CCValues_generated.WindowCoveringCCValues.levelChangeUp(param));
|
|
350
350
|
this.setMetadata(ctx, import_CCValues_generated.WindowCoveringCCValues.levelChangeDown(param));
|
|
351
|
-
if (param % 2 === 1) {
|
|
352
|
-
ctx.logNode(node.id, {
|
|
353
|
-
endpoint: this.endpointIndex,
|
|
354
|
-
message: `querying position for parameter ${(0, import_shared.getEnumMemberName)(import_Types.WindowCoveringParameter, param)}...`,
|
|
355
|
-
direction: "outbound"
|
|
356
|
-
});
|
|
357
|
-
await api.get(param);
|
|
358
|
-
}
|
|
359
351
|
}
|
|
352
|
+
await this.refreshValues(ctx);
|
|
360
353
|
}
|
|
361
354
|
this.setInterviewComplete(ctx, true);
|
|
362
355
|
}
|
|
356
|
+
async refreshValues(ctx) {
|
|
357
|
+
const node = this.getNode(ctx);
|
|
358
|
+
const endpoint = this.getEndpoint(ctx);
|
|
359
|
+
const api = import_API.CCAPI.create(import_core.CommandClasses["Window Covering"], ctx, endpoint).withOptions({
|
|
360
|
+
priority: import_core.MessagePriority.NodeQuery
|
|
361
|
+
});
|
|
362
|
+
const parameters = this.getValue(ctx, import_CCValues_generated.WindowCoveringCCValues.supportedParameters) ?? [];
|
|
363
|
+
for (const param of parameters) {
|
|
364
|
+
if (param % 2 == 0)
|
|
365
|
+
continue;
|
|
366
|
+
ctx.logNode(node.id, {
|
|
367
|
+
endpoint: this.endpointIndex,
|
|
368
|
+
message: `querying position for parameter ${(0, import_shared.getEnumMemberName)(import_Types.WindowCoveringParameter, param)}...`,
|
|
369
|
+
direction: "outbound"
|
|
370
|
+
});
|
|
371
|
+
await api.get(param);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
363
374
|
translatePropertyKey(ctx, property, propertyKey) {
|
|
364
375
|
if (typeof propertyKey === "number") {
|
|
365
376
|
return (0, import_shared.getEnumMemberName)(import_Types.WindowCoveringParameter, propertyKey);
|
|
@@ -494,6 +505,15 @@ let WindowCoveringCCReport = (() => {
|
|
|
494
505
|
currentValue;
|
|
495
506
|
targetValue;
|
|
496
507
|
duration;
|
|
508
|
+
serialize(ctx) {
|
|
509
|
+
this.payload = import_shared.Bytes.from([
|
|
510
|
+
this.parameter,
|
|
511
|
+
this.currentValue,
|
|
512
|
+
this.targetValue,
|
|
513
|
+
this.duration.serializeReport()
|
|
514
|
+
]);
|
|
515
|
+
return super.serialize(ctx);
|
|
516
|
+
}
|
|
497
517
|
toLogEntry(ctx) {
|
|
498
518
|
return {
|
|
499
519
|
...super.toLogEntry(ctx),
|