@zwave-js/cc 15.27.1 → 15.29.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.map +2 -2
- package/build/cjs/cc/AssociationCC.js +6 -5
- package/build/cjs/cc/AssociationCC.js.map +2 -2
- package/build/cjs/cc/AssociationGroupInfoCC.js +5 -5
- package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
- package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
- package/build/cjs/cc/BasicCC.d.ts +4 -1
- package/build/cjs/cc/BasicCC.js +18 -0
- package/build/cjs/cc/BasicCC.js.map +3 -3
- package/build/cjs/cc/BasicWindowCoveringCC.js.map +2 -2
- package/build/cjs/cc/BatteryCC.js +18 -4
- package/build/cjs/cc/BatteryCC.js.map +2 -2
- package/build/cjs/cc/BinarySensorCC.js +5 -1
- package/build/cjs/cc/BinarySensorCC.js.map +2 -2
- package/build/cjs/cc/BinarySwitchCC.d.ts +4 -1
- package/build/cjs/cc/BinarySwitchCC.js +18 -0
- package/build/cjs/cc/BinarySwitchCC.js.map +3 -3
- package/build/cjs/cc/CRC16CC.d.ts +3 -2
- package/build/cjs/cc/CRC16CC.js +7 -1
- package/build/cjs/cc/CRC16CC.js.map +3 -3
- package/build/cjs/cc/CentralSceneCC.js.map +2 -2
- package/build/cjs/cc/ClimateControlScheduleCC.js.map +2 -2
- package/build/cjs/cc/ClockCC.js.map +2 -2
- package/build/cjs/cc/ColorSwitchCC.js +1 -4
- package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
- package/build/cjs/cc/ConfigurationCC.js +16 -8
- package/build/cjs/cc/ConfigurationCC.js.map +2 -2
- package/build/cjs/cc/DeviceResetLocallyCC.js.map +2 -2
- package/build/cjs/cc/DoorLockCC.js +1 -1
- package/build/cjs/cc/DoorLockCC.js.map +2 -2
- package/build/cjs/cc/EntryControlCC.js.map +2 -2
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +4 -16
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlSetpointCC.js +10 -4
- package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
- package/build/cjs/cc/IndicatorCC.js +5 -8
- package/build/cjs/cc/IndicatorCC.js.map +2 -2
- package/build/cjs/cc/IrrigationCC.js.map +2 -2
- package/build/cjs/cc/ManufacturerProprietaryCC.js.map +2 -2
- package/build/cjs/cc/ManufacturerSpecificCC._validateArgs.d.ts +1 -0
- package/build/cjs/cc/ManufacturerSpecificCC._validateArgs.js +13 -0
- package/build/cjs/cc/ManufacturerSpecificCC._validateArgs.js.map +2 -2
- package/build/cjs/cc/ManufacturerSpecificCC.d.ts +6 -4
- package/build/cjs/cc/ManufacturerSpecificCC.js +41 -8
- package/build/cjs/cc/ManufacturerSpecificCC.js.map +2 -2
- package/build/cjs/cc/MeterCC.js +18 -29
- package/build/cjs/cc/MeterCC.js.map +2 -2
- package/build/cjs/cc/MultiChannelAssociationCC.js +11 -7
- package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
- package/build/cjs/cc/MultiChannelCC.d.ts +3 -1
- package/build/cjs/cc/MultiChannelCC.js +21 -10
- package/build/cjs/cc/MultiChannelCC.js.map +3 -3
- package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
- package/build/cjs/cc/MultilevelSwitchCC.d.ts +5 -1
- package/build/cjs/cc/MultilevelSwitchCC.js +30 -0
- package/build/cjs/cc/MultilevelSwitchCC.js.map +3 -3
- package/build/cjs/cc/NotificationCC.js +29 -11
- package/build/cjs/cc/NotificationCC.js.map +2 -2
- package/build/cjs/cc/PowerlevelCC.js.map +1 -1
- package/build/cjs/cc/ProtectionCC.js +2 -0
- package/build/cjs/cc/ProtectionCC.js.map +2 -2
- package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +2 -2
- package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
- package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
- package/build/cjs/cc/Security2CC.d.ts +2 -1
- package/build/cjs/cc/Security2CC.js +31 -3
- package/build/cjs/cc/Security2CC.js.map +2 -2
- package/build/cjs/cc/SecurityCC.d.ts +3 -2
- package/build/cjs/cc/SecurityCC.js +7 -6
- package/build/cjs/cc/SecurityCC.js.map +2 -2
- package/build/cjs/cc/SoundSwitchCC.js +6 -6
- package/build/cjs/cc/SoundSwitchCC.js.map +2 -2
- package/build/cjs/cc/SupervisionCC.d.ts +2 -1
- package/build/cjs/cc/SupervisionCC.js +6 -0
- package/build/cjs/cc/SupervisionCC.js.map +3 -3
- package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
- package/build/cjs/cc/ThermostatModeCC.js +1 -3
- package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
- package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
- package/build/cjs/cc/ThermostatSetpointCC.d.ts +4 -1
- package/build/cjs/cc/ThermostatSetpointCC.js +18 -0
- package/build/cjs/cc/ThermostatSetpointCC.js.map +3 -3
- package/build/cjs/cc/TimeCC.js.map +2 -2
- package/build/cjs/cc/TransportServiceCC.js.map +2 -2
- package/build/cjs/cc/UserCodeCC.js +3 -6
- package/build/cjs/cc/UserCodeCC.js.map +2 -2
- package/build/cjs/cc/UserCredentialCC.js +8 -6
- package/build/cjs/cc/UserCredentialCC.js.map +2 -2
- package/build/cjs/cc/VersionCC.js.map +2 -2
- package/build/cjs/cc/WindowCoveringCC.js +5 -1
- package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
- package/build/cjs/cc/ZWaveProtocolCC.js +3 -11
- package/build/cjs/cc/ZWaveProtocolCC.js.map +2 -2
- package/build/cjs/cc/_CCValues.generated.d.ts +4 -4
- package/build/cjs/cc/_CCValues.generated.js +1 -1
- package/build/cjs/cc/_CCValues.generated.js.map +2 -2
- package/build/cjs/cc/index.d.ts +179 -179
- package/build/cjs/cc/index.js.map +1 -1
- package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +2 -2
- package/build/cjs/lib/API.d.ts +3 -2
- package/build/cjs/lib/API.js.map +2 -2
- package/build/cjs/lib/CommandClass.d.ts +23 -1
- package/build/cjs/lib/CommandClass.js +63 -15
- package/build/cjs/lib/CommandClass.js.map +3 -3
- package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
- package/build/cjs/lib/EncapsulatingCommandClass.js.map +2 -2
- package/build/cjs/lib/NotificationEventPayload.js.map +2 -2
- package/build/cjs/lib/Security2/Extension.js +1 -4
- package/build/cjs/lib/Security2/Extension.js.map +2 -2
- package/build/cjs/lib/Security2/shared.js.map +2 -2
- package/build/cjs/lib/SetValueResult.js.map +1 -1
- package/build/cjs/lib/Values.d.ts +1 -1
- package/build/cjs/lib/Values.js.map +2 -2
- package/build/cjs/lib/_CCAPI.generated.js.map +1 -1
- package/build/cjs/lib/_Types.d.ts +34 -30
- package/build/cjs/lib/_Types.js +7 -0
- package/build/cjs/lib/_Types.js.map +3 -3
- package/build/cjs/lib/serializers.js +1 -4
- package/build/cjs/lib/serializers.js.map +2 -2
- package/build/cjs/lib/utils.js.map +2 -2
- package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
- package/build/esm/cc/AlarmSensorCC.js +1 -2
- package/build/esm/cc/AlarmSensorCC.js.map +1 -1
- package/build/esm/cc/AssociationCC.d.ts.map +1 -1
- package/build/esm/cc/AssociationCC.js +8 -7
- package/build/esm/cc/AssociationCC.js.map +1 -1
- package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
- package/build/esm/cc/AssociationGroupInfoCC.js +11 -12
- 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 +10 -9
- package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
- package/build/esm/cc/BasicCC.d.ts +4 -1
- package/build/esm/cc/BasicCC.d.ts.map +1 -1
- package/build/esm/cc/BasicCC.js +30 -7
- package/build/esm/cc/BasicCC.js.map +1 -1
- package/build/esm/cc/BasicWindowCoveringCC.d.ts.map +1 -1
- package/build/esm/cc/BasicWindowCoveringCC.js +2 -5
- package/build/esm/cc/BasicWindowCoveringCC.js.map +1 -1
- package/build/esm/cc/BatteryCC.d.ts.map +1 -1
- package/build/esm/cc/BatteryCC.js +17 -14
- package/build/esm/cc/BatteryCC.js.map +1 -1
- package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
- package/build/esm/cc/BinarySensorCC.js +12 -7
- package/build/esm/cc/BinarySensorCC.js.map +1 -1
- package/build/esm/cc/BinarySwitchCC.d.ts +4 -1
- package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
- package/build/esm/cc/BinarySwitchCC.js +31 -6
- package/build/esm/cc/BinarySwitchCC.js.map +1 -1
- package/build/esm/cc/CRC16CC.d.ts +3 -2
- package/build/esm/cc/CRC16CC.d.ts.map +1 -1
- package/build/esm/cc/CRC16CC.js +10 -4
- package/build/esm/cc/CRC16CC.js.map +1 -1
- package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
- package/build/esm/cc/CentralSceneCC.js +2 -1
- 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 +6 -2
- package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
- package/build/esm/cc/ClockCC.d.ts.map +1 -1
- package/build/esm/cc/ClockCC.js +6 -2
- package/build/esm/cc/ClockCC.js.map +1 -1
- package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
- package/build/esm/cc/ColorSwitchCC.js +17 -20
- package/build/esm/cc/ColorSwitchCC.js.map +1 -1
- package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/ConfigurationCC.js +37 -33
- package/build/esm/cc/ConfigurationCC.js.map +1 -1
- package/build/esm/cc/DeviceResetLocallyCC.d.ts.map +1 -1
- package/build/esm/cc/DeviceResetLocallyCC.js +1 -2
- package/build/esm/cc/DeviceResetLocallyCC.js.map +1 -1
- package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
- package/build/esm/cc/DoorLockCC.js +26 -30
- package/build/esm/cc/DoorLockCC.js.map +1 -1
- package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
- package/build/esm/cc/EntryControlCC.js +10 -7
- package/build/esm/cc/EntryControlCC.js.map +1 -1
- package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
- package/build/esm/cc/FirmwareUpdateMetaDataCC.js +15 -27
- package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
- package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlSetpointCC.js +8 -9
- package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
- package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
- package/build/esm/cc/IndicatorCC.js +27 -42
- package/build/esm/cc/IndicatorCC.js.map +1 -1
- package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
- package/build/esm/cc/IrrigationCC.js +8 -6
- package/build/esm/cc/IrrigationCC.js.map +1 -1
- package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
- package/build/esm/cc/ManufacturerProprietaryCC.js +1 -2
- package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC._validateArgs.d.ts +1 -0
- package/build/esm/cc/ManufacturerSpecificCC._validateArgs.d.ts.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC._validateArgs.js +10 -0
- package/build/esm/cc/ManufacturerSpecificCC._validateArgs.js.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.d.ts +6 -4
- package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.js +54 -17
- 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 +28 -38
- 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 +15 -20
- package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
- package/build/esm/cc/MultiChannelCC.d.ts +3 -1
- package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
- package/build/esm/cc/MultiChannelCC.js +28 -22
- package/build/esm/cc/MultiChannelCC.js.map +1 -1
- package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
- package/build/esm/cc/MultilevelSensorCC.js +11 -11
- package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
- package/build/esm/cc/MultilevelSwitchCC.d.ts +5 -1
- package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
- package/build/esm/cc/MultilevelSwitchCC.js +56 -16
- package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
- package/build/esm/cc/NotificationCC.d.ts.map +1 -1
- package/build/esm/cc/NotificationCC.js +66 -55
- package/build/esm/cc/NotificationCC.js.map +1 -1
- package/build/esm/cc/PowerlevelCC.d.ts.map +1 -1
- package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
- package/build/esm/cc/ProtectionCC.js +13 -9
- 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 +5 -8
- 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 +10 -16
- package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
- package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
- package/build/esm/cc/ScheduleEntryLockCC.js +13 -20
- package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
- package/build/esm/cc/Security2CC.d.ts +2 -1
- package/build/esm/cc/Security2CC.d.ts.map +1 -1
- package/build/esm/cc/Security2CC.js +68 -32
- package/build/esm/cc/Security2CC.js.map +1 -1
- package/build/esm/cc/SecurityCC.d.ts +3 -2
- package/build/esm/cc/SecurityCC.d.ts.map +1 -1
- package/build/esm/cc/SecurityCC.js +16 -11
- 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.d.ts +2 -1
- package/build/esm/cc/SupervisionCC.d.ts.map +1 -1
- package/build/esm/cc/SupervisionCC.js +13 -6
- package/build/esm/cc/SupervisionCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.js +1 -2
- package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
- package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatModeCC.js +1 -3
- package/build/esm/cc/ThermostatModeCC.js.map +1 -1
- package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatOperatingStateCC.js +1 -2
- package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
- package/build/esm/cc/ThermostatSetpointCC.d.ts +4 -1
- package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatSetpointCC.js +31 -19
- package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
- package/build/esm/cc/TimeCC.d.ts.map +1 -1
- package/build/esm/cc/TimeCC.js +6 -2
- package/build/esm/cc/TimeCC.js.map +1 -1
- package/build/esm/cc/TransportServiceCC.d.ts.map +1 -1
- package/build/esm/cc/TransportServiceCC.js +8 -8
- package/build/esm/cc/TransportServiceCC.js.map +1 -1
- package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
- package/build/esm/cc/UserCodeCC.js +23 -30
- package/build/esm/cc/UserCodeCC.js.map +1 -1
- package/build/esm/cc/UserCredentialCC.d.ts.map +1 -1
- package/build/esm/cc/UserCredentialCC.js +49 -60
- package/build/esm/cc/UserCredentialCC.js.map +1 -1
- package/build/esm/cc/VersionCC.js +3 -3
- package/build/esm/cc/VersionCC.js.map +1 -1
- package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
- package/build/esm/cc/WindowCoveringCC.js +10 -9
- package/build/esm/cc/WindowCoveringCC.js.map +1 -1
- package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -1
- package/build/esm/cc/ZWaveProtocolCC.js +5 -26
- package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
- package/build/esm/cc/_CCValues.generated.d.ts +4 -4
- package/build/esm/cc/_CCValues.generated.d.ts.map +1 -1
- package/build/esm/cc/_CCValues.generated.js +638 -679
- package/build/esm/cc/_CCValues.generated.js.map +1 -1
- package/build/esm/cc/index.d.ts +179 -179
- package/build/esm/cc/index.d.ts.map +1 -1
- package/build/esm/cc/index.js +124 -124
- package/build/esm/cc/index.js.map +1 -1
- package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
- package/build/esm/cc/manufacturerProprietary/Decorators.js.map +1 -1
- package/build/esm/lib/API.d.ts +3 -2
- package/build/esm/lib/API.d.ts.map +1 -1
- package/build/esm/lib/API.js +1 -1
- package/build/esm/lib/API.js.map +1 -1
- package/build/esm/lib/CommandClass.d.ts +23 -1
- package/build/esm/lib/CommandClass.d.ts.map +1 -1
- package/build/esm/lib/CommandClass.js +61 -20
- package/build/esm/lib/CommandClass.js.map +1 -1
- package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
- package/build/esm/lib/CommandClassDecorators.js +1 -2
- package/build/esm/lib/CommandClassDecorators.js.map +1 -1
- package/build/esm/lib/EncapsulatingCommandClass.d.ts.map +1 -1
- package/build/esm/lib/EncapsulatingCommandClass.js.map +1 -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.map +1 -1
- package/build/esm/lib/Security2/Extension.js +2 -6
- package/build/esm/lib/Security2/Extension.js.map +1 -1
- package/build/esm/lib/Security2/shared.d.ts.map +1 -1
- package/build/esm/lib/Security2/shared.js.map +1 -1
- package/build/esm/lib/SetValueResult.d.ts.map +1 -1
- package/build/esm/lib/Values.d.ts +1 -1
- package/build/esm/lib/Values.d.ts.map +1 -1
- package/build/esm/lib/Values.js.map +1 -1
- package/build/esm/lib/_CCAPI.generated.d.ts.map +1 -1
- package/build/esm/lib/_Types.d.ts +34 -30
- package/build/esm/lib/_Types.d.ts.map +1 -1
- package/build/esm/lib/_Types.js +5 -0
- package/build/esm/lib/_Types.js.map +1 -1
- package/build/esm/lib/serializers.d.ts.map +1 -1
- package/build/esm/lib/serializers.js +1 -4
- package/build/esm/lib/serializers.js.map +1 -1
- package/build/esm/lib/traits.d.ts.map +1 -1
- package/build/esm/lib/utils.d.ts.map +1 -1
- package/build/esm/lib/utils.js +25 -31
- package/build/esm/lib/utils.js.map +1 -1
- package/package.json +7 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/MultilevelSensorCC.ts"],
|
|
4
|
-
"sourcesContent": ["import * as __validateArgs from \"./MultilevelSensorCC._validateArgs.js\";\nconst { validateArgs_MultilevelSensorCCAPI_get, validateArgs_MultilevelSensorCCAPI_getSupportedScales, validateArgs_MultilevelSensorCCAPI_sendReport } = __validateArgs;\nimport type { GetDeviceConfig } from \"@zwave-js/config\";\nimport { CommandClasses, type ControlsCC, type EndpointId, type GetEndpoint, type GetNode, type GetSupportedCCVersion, type GetValueDB, type LogNode, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type NodeId, type Scale, type SinglecastCC, type SupervisionResult, type SupportsCC, type ValueID, ValueMetadata, type WithAddress, encodeBitMask, encodeFloatWithScale, getSensor, getSensorName, getSensorScale, getUnknownScale, logList, logText, parseBitMask, parseFloatWithScale, timespan, validatePayload, } from \"@zwave-js/core\";\nimport { type AllOrNone, Bytes, num2hex } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, type CCResponsePredicate, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, getEffectiveCCVersion, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { MultilevelSensorCommand, type MultilevelSensorValue, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport type { GetUserPreferences } from \"../lib/traits.js\";\nimport { MultilevelSensorCCValues } from \"./_CCValues.generated.js\";\nexport { MultilevelSensorCCValues };\n/**\n * Determine the scale to use to query a sensor reading. Uses the user-preferred scale if given,\n * followed by the most recently used scale, otherwile falls back to the first supported one.\n */\nfunction getPreferredSensorScale(ctx: GetValueDB & GetUserPreferences & LogNode, nodeId: number, endpointIndex: number, sensorType: number, supportedScales: readonly number[]): number {\n const preferences = ctx.getUserPreferences();\n const sensor = getSensor(sensorType);\n // If the sensor type is unknown, we have no default. Use the user-provided scale or 0\n if (!sensor) {\n const preferred = preferences?.scales[sensorType];\n // We cannot look up strings for unknown sensor types, so this must be a number or we use the fallback\n if (typeof preferred !== \"number\")\n return 0;\n return preferred;\n }\n // Look up the preference for the scale\n let preferred: number | string | undefined;\n // Named scales apply to multiple sensor types. To be able to override the scale for single types\n // we need to look at the preferences by sensor type first\n preferred = preferences?.scales[sensorType];\n // If the scale is named, we can then try to use the named preference\n const scaleGroupName = sensor.scaleGroupName;\n if (preferred == undefined && scaleGroupName) {\n preferred = preferences?.scales[scaleGroupName];\n }\n // Then attempt reading the scale from the corresponding value\n if (preferred == undefined) {\n const sensorName = getSensorName(sensorType);\n const sensorValue = MultilevelSensorCCValues.value(sensorName);\n const metadata = ctx\n .tryGetValueDB(nodeId)\n ?.getMetadata(sensorValue.endpoint(endpointIndex));\n const scale = metadata?.ccSpecific?.scale;\n if (typeof scale === \"number\" && supportedScales.includes(scale)) {\n preferred = scale;\n ctx.logNode(nodeId, {\n endpoint: endpointIndex,\n message: `No scale preference for sensor type ${sensorType}, using the last-used scale ${preferred}`,\n });\n }\n }\n // Then fall back to the first supported scale\n if (preferred == undefined) {\n preferred = supportedScales[0] ?? 0;\n ctx.logNode(nodeId, {\n endpoint: endpointIndex,\n message: `No scale preference for sensor type ${sensorType}, using the first supported scale ${preferred}`,\n });\n return preferred;\n }\n // If the scale name or unit was given, try to look it up\n if (typeof preferred === \"string\") {\n for (const [key, scale] of Object.entries(sensor.scales)) {\n if (scale.label === preferred || scale.unit === preferred) {\n preferred = parseInt(key, 10);\n break;\n }\n }\n }\n if (typeof preferred === \"string\") {\n // Looking up failed\n ctx.logNode(nodeId, {\n endpoint: endpointIndex,\n message: `Preferred scale \"${preferred}\" for sensor type ${sensorType} not found, using the first supported scale ${supportedScales[0] ?? 0}`,\n });\n return supportedScales[0] ?? 0;\n }\n // We have a numeric scale key, nothing to look up. Make sure it is supported though\n if (!supportedScales.length) {\n // No info about supported scales, just use the preferred one\n return preferred;\n }\n else if (!supportedScales.includes(preferred)) {\n ctx.logNode(nodeId, {\n endpoint: endpointIndex,\n message: `Preferred scale ${preferred} not supported for sensor type ${sensorType}, using the first supported scale`,\n });\n return supportedScales[0];\n }\n else {\n return preferred;\n }\n}\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses[\"Multilevel Sensor\"])\nexport class MultilevelSensorCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: MultilevelSensorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case MultilevelSensorCommand.Get:\n case MultilevelSensorCommand.Report:\n return true; // This is mandatory\n case MultilevelSensorCommand.GetSupportedSensor:\n case MultilevelSensorCommand.GetSupportedScale:\n return this.version >= 5;\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: MultilevelSensorCCAPI, { property }) {\n // Look up the necessary information\n const valueId: ValueID = {\n commandClass: CommandClasses[\"Multilevel Sensor\"],\n endpoint: this.endpoint.index,\n property,\n };\n const ccSpecific = this.tryGetValueDB()?.getMetadata(valueId)\n ?.ccSpecific;\n if (!ccSpecific) {\n throwUnsupportedProperty(this.ccId, property);\n }\n const { sensorType, scale } = ccSpecific;\n return this.get(sensorType, scale);\n };\n }\n /** Query the default sensor value */\n public async get(): Promise<MaybeNotKnown<MultilevelSensorValue & {\n type: number;\n }>>;\n /** Query the sensor value for the given sensor type using the preferred sensor scale */\n public async get(sensorType: number): Promise<MaybeNotKnown<MultilevelSensorValue>>;\n /** Query the sensor value for the given sensor type using the given sensor scale */\n public async get(sensorType: number, scale: number): Promise<MaybeNotKnown<number>>;\n @validateArgs_MultilevelSensorCCAPI_get()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get(sensorType?: number, scale?: number) {\n this.assertSupportsCommand(MultilevelSensorCommand, MultilevelSensorCommand.Get);\n // Figure out the preferred scale if none was given\n let preferredScale: number | undefined;\n if (sensorType != undefined && scale == undefined) {\n const supportedScales: readonly number[] = this.tryGetValueDB()?.getValue({\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property: \"supportedScales\",\n propertyKey: sensorType,\n }) ?? [];\n preferredScale = getPreferredSensorScale(this.host, this.endpoint.nodeId, this.endpoint.index, sensorType, supportedScales);\n }\n const cc = new MultilevelSensorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n sensorType: sensorType!,\n scale: (scale ?? preferredScale)!,\n });\n const response = await this.host.sendCommand<MultilevelSensorCCReport>(cc, this.commandOptions);\n if (!response)\n return;\n const responseScale = getSensorScale(response.type, response.scale);\n if (sensorType == undefined) {\n // Overload #1: return the full response\n return {\n type: response.type,\n value: response.value,\n scale: responseScale,\n };\n }\n else if (scale == undefined) {\n // Overload #2: return value and scale\n return {\n value: response.value,\n scale: responseScale,\n };\n }\n else {\n // Overload #3: return only the value\n return response.value;\n }\n }\n public async getSupportedSensorTypes(): Promise<MaybeNotKnown<readonly number[]>> {\n this.assertSupportsCommand(MultilevelSensorCommand, MultilevelSensorCommand.GetSupportedSensor);\n const cc = new MultilevelSensorCCGetSupportedSensor({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<MultilevelSensorCCSupportedSensorReport>(cc, this.commandOptions);\n return response?.supportedSensorTypes;\n }\n @validateArgs_MultilevelSensorCCAPI_getSupportedScales()\n public async getSupportedScales(sensorType: number): Promise<MaybeNotKnown<readonly number[]>> {\n this.assertSupportsCommand(MultilevelSensorCommand, MultilevelSensorCommand.GetSupportedScale);\n const cc = new MultilevelSensorCCGetSupportedScale({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n sensorType,\n });\n const response = await this.host.sendCommand<MultilevelSensorCCSupportedScaleReport>(cc, this.commandOptions);\n return response?.supportedScales;\n }\n @validateArgs_MultilevelSensorCCAPI_sendReport()\n public async sendReport(sensorType: number, scale: number | Scale, value: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MultilevelSensorCommand, MultilevelSensorCommand.Report);\n const cc = new MultilevelSensorCCReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n type: sensorType,\n scale,\n value,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Multilevel Sensor\"])\n@implementedVersion(11)\n@ccValues(MultilevelSensorCCValues)\nexport class MultilevelSensorCC extends CommandClass {\n declare ccCommand: MultilevelSensorCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Multilevel Sensor\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n if (api.version >= 5) {\n // Query the supported sensor types\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"retrieving supported sensor types...\",\n direction: \"outbound\",\n });\n const sensorTypes = await api.getSupportedSensorTypes();\n if (sensorTypes) {\n const logMessage = logText(\"received supported sensor types:\", {\n nested: logList(sensorTypes.map((t) => getSensorName(t))),\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported sensor types timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n // As well as the supported scales for each sensor\n for (const [i, type] of sensorTypes.entries()) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying supported scales for ${getSensorName(type)} sensor`,\n direction: \"outbound\",\n });\n const sensorScales = await api.getSupportedScales(type);\n if (sensorScales) {\n const logMessage = logText(\"received supported scales:\", {\n nested: logList(sensorScales.map((s) => (getSensorScale(type, s)\n ?? getUnknownScale(s)).label)),\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported scales timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n node.reportInterviewProgress(i + 1, sensorTypes.length);\n }\n }\n await this.refreshValues(ctx, {\n tag: \"interview\",\n onProgress: (completed, total) => node.reportInterviewProgress(completed, total),\n });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Multilevel Sensor\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n const valueDB = this.getValueDB(ctx);\n if (api.version <= 4) {\n // Sensors up to V4 only support a single value\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current sensor reading...\",\n direction: \"outbound\",\n });\n const mlsResponse = await api.get();\n if (mlsResponse) {\n const sensorScale = getSensorScale(mlsResponse.type, mlsResponse.scale.key);\n const logMessage = `received current sensor reading:\nsensor type: ${getSensorName(mlsResponse.type)}\nvalue: ${mlsResponse.value}${sensorScale?.unit ? ` ${sensorScale.unit}` : \"\"}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n else {\n // Query all sensor values\n const sensorTypes: readonly number[] = valueDB.getValue({\n commandClass: this.ccId,\n property: \"supportedSensorTypes\",\n endpoint: this.endpointIndex,\n }) || [];\n for (const [i, type] of sensorTypes.entries()) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying ${getSensorName(type)} sensor reading...`,\n direction: \"outbound\",\n });\n const value = await api.get(type);\n if (value) {\n const logMessage = `received current ${getSensorName(type)} sensor reading: ${value.value} ${value.scale.unit || \"\"}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n options?.onProgress?.(i + 1, sensorTypes.length);\n }\n }\n }\n public shouldRefreshValues(this: SinglecastCC<this>, ctx: GetValueDB & GetSupportedCCVersion & GetDeviceConfig & GetNode<NodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>>): boolean {\n // Poll the device when all of the supported values were last updated longer than 6 hours ago.\n // This may lead to some values not being updated, but the user may have disabled some unnecessary\n // reports to reduce traffic.\n const valueDB = ctx.tryGetValueDB(this.nodeId);\n if (!valueDB)\n return true;\n const values = this.getDefinedValueIDs(ctx).filter((v) => MultilevelSensorCCValues.value.is(v));\n return values.every((v) => {\n const lastUpdated = valueDB.getTimestamp(v);\n return (lastUpdated == undefined\n || Date.now() - lastUpdated > timespan.hours(6));\n });\n }\n /**\n * Returns which sensor types are supported.\n * This only works AFTER the interview process\n */\n public static getSupportedSensorTypesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<number[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(MultilevelSensorCCValues.supportedSensorTypes.endpoint(endpoint.index));\n }\n /**\n * Returns which scales are supported for a given sensor type.\n * This only works AFTER the interview process\n */\n public static getSupportedScalesCached(ctx: GetValueDB, endpoint: EndpointId, sensorType: number): MaybeNotKnown<number[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(MultilevelSensorCCValues.supportedScales(sensorType).endpoint(endpoint.index));\n }\n public translatePropertyKey(ctx: GetValueDB, property: string | number, propertyKey: string | number): string | undefined {\n // TODO: check this\n if (property === \"values\" && typeof propertyKey === \"number\") {\n const sensor = getSensor(propertyKey);\n if (sensor)\n return sensor.label;\n }\n return super.translatePropertyKey(ctx, property, propertyKey);\n }\n}\n// @publicAPI\nexport interface MultilevelSensorCCReportOptions {\n type: number;\n scale: number | Scale;\n value: number;\n}\n@CCCommand(MultilevelSensorCommand.Report)\n@useSupervision()\nexport class MultilevelSensorCCReport extends MultilevelSensorCC {\n public constructor(options: WithAddress<MultilevelSensorCCReportOptions>) {\n super(options);\n this.type = options.type;\n this.value = options.value;\n this.scale = typeof options.scale === \"number\"\n ? options.scale\n : options.scale.key;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSensorCCReport {\n validatePayload(raw.payload.length >= 1);\n const type = raw.payload[0];\n // parseFloatWithScale does its own validation\n const { value, scale } = parseFloatWithScale(raw.payload.subarray(1));\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n value,\n scale,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const sensor = getSensor(this.type);\n const scale = getSensorScale(this.type, this.scale) ?? getUnknownScale(this.scale);\n // Filter out unknown sensor types and scales, unless the strict validation is disabled\n const measurementValidation = !ctx.getDeviceConfig?.(this.nodeId as number)?.compat?.disableStrictMeasurementValidation;\n const ccVersion = getEffectiveCCVersion(ctx, this);\n if (measurementValidation) {\n // Filter out unsupported sensor types and scales if possible\n if (ccVersion >= 5) {\n const supportedSensorTypes = this.getValue<number[]>(ctx, MultilevelSensorCCValues.supportedSensorTypes);\n if (supportedSensorTypes?.length) {\n validatePayload.withReason(`Unsupported sensor type ${getSensorName(this.type)} or corrupted data`)(supportedSensorTypes.includes(this.type));\n }\n const supportedScales = this.getValue<number[]>(ctx, MultilevelSensorCCValues.supportedScales(this.type));\n if (supportedScales?.length) {\n validatePayload.withReason(`Unsupported scale ${scale.label} or corrupted data`)(supportedScales.includes(scale.key));\n }\n }\n else {\n // We support a higher CC version than the device, so any types and scales it uses should be known to us\n // Filter out unknown ones.\n validatePayload.withReason(`Unknown sensor type ${num2hex(this.type)} or corrupted data`)(!!sensor);\n validatePayload.withReason(`Unknown scale ${num2hex(this.scale)} or corrupted data`)(scale.label !== getUnknownScale(this.scale).label);\n }\n }\n const sensorName = getSensorName(this.type);\n const sensorValue = MultilevelSensorCCValues.value(sensorName);\n this.setMetadata(ctx, sensorValue, {\n ...sensorValue.meta,\n unit: scale.unit,\n ccSpecific: {\n sensorType: this.type,\n scale: scale.key,\n },\n });\n this.setValue(ctx, sensorValue, this.value);\n return true;\n }\n public type: number;\n public scale: number;\n public value: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.type],\n encodeFloatWithScale(this.value, this.scale),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"sensor type\": getSensorName(this.type),\n scale: (getSensorScale(this.type, this.scale)\n ?? getUnknownScale(this.scale)).label,\n value: this.value,\n },\n };\n }\n}\nconst testResponseForMultilevelSensorGet: CCResponsePredicate<MultilevelSensorCCGet, MultilevelSensorCCReport> = (sent, received) => {\n // We expect a Multilevel Sensor Report that matches the requested sensor type (if a type was requested)\n return sent.sensorType == undefined || received.type === sent.sensorType;\n};\n// These options are supported starting in V5\n// @publicAPI\nexport type MultilevelSensorCCGetOptions = AllOrNone<{\n sensorType: number;\n scale: number;\n}>;\n@CCCommand(MultilevelSensorCommand.Get)\n@expectedCCResponse(MultilevelSensorCCReport, testResponseForMultilevelSensorGet)\nexport class MultilevelSensorCCGet extends MultilevelSensorCC {\n public constructor(options: WithAddress<MultilevelSensorCCGetOptions>) {\n super(options);\n if (\"sensorType\" in options) {\n this.sensorType = options.sensorType;\n this.scale = options.scale;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSensorCCGet {\n if (raw.payload.length >= 2) {\n const sensorType = raw.payload[0];\n const scale = (raw.payload[1] >> 3) & 0b11;\n return new this({\n nodeId: ctx.sourceNodeId,\n sensorType,\n scale,\n });\n }\n else {\n return new this({\n nodeId: ctx.sourceNodeId,\n });\n }\n }\n public sensorType: number | undefined;\n public scale: number | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.sensorType != undefined\n && this.scale != undefined) {\n this.payload = Bytes.from([\n this.sensorType,\n (this.scale & 0b11) << 3,\n ]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n let message: MessageRecord = {};\n if (this.sensorType != undefined\n && this.scale != undefined) {\n message = {\n \"sensor type\": getSensorName(this.sensorType),\n scale: (getSensorScale(this.sensorType, this.scale) ?? getUnknownScale(this.scale)).label,\n };\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface MultilevelSensorCCSupportedSensorReportOptions {\n supportedSensorTypes: readonly number[];\n}\n@CCCommand(MultilevelSensorCommand.SupportedSensorReport)\n@ccValueProperty(\"supportedSensorTypes\", MultilevelSensorCCValues.supportedSensorTypes)\nexport class MultilevelSensorCCSupportedSensorReport extends MultilevelSensorCC {\n public constructor(options: WithAddress<MultilevelSensorCCSupportedSensorReportOptions>) {\n super(options);\n this.supportedSensorTypes = options.supportedSensorTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSensorCCSupportedSensorReport {\n validatePayload(raw.payload.length >= 1);\n const supportedSensorTypes = parseBitMask(raw.payload);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedSensorTypes,\n });\n }\n // TODO: Use this during interview to precreate values\n public supportedSensorTypes: readonly number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.supportedSensorTypes);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported sensor types\": logList(this.supportedSensorTypes.map((t) => getSensorName(t))),\n },\n };\n }\n}\n@CCCommand(MultilevelSensorCommand.GetSupportedSensor)\n@expectedCCResponse(MultilevelSensorCCSupportedSensorReport)\nexport class MultilevelSensorCCGetSupportedSensor extends MultilevelSensorCC {\n}\n// @publicAPI\nexport interface MultilevelSensorCCSupportedScaleReportOptions {\n sensorType: number;\n supportedScales: readonly number[];\n}\n@CCCommand(MultilevelSensorCommand.SupportedScaleReport)\n@ccValueProperty(\"supportedScales\", MultilevelSensorCCValues.supportedScales, (self) => [self.sensorType])\nexport class MultilevelSensorCCSupportedScaleReport extends MultilevelSensorCC {\n public constructor(options: WithAddress<MultilevelSensorCCSupportedScaleReportOptions>) {\n super(options);\n this.sensorType = options.sensorType;\n this.supportedScales = options.supportedScales;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSensorCCSupportedScaleReport {\n validatePayload(raw.payload.length >= 2);\n const sensorType = raw.payload[0];\n const supportedScales = parseBitMask(Bytes.from([raw.payload[1] & 0b1111]), 0);\n return new this({\n nodeId: ctx.sourceNodeId,\n sensorType,\n supportedScales,\n });\n }\n public readonly sensorType: number;\n public readonly supportedScales: readonly number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.sensorType],\n encodeBitMask(this.supportedScales, 4, 0),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"sensor type\": getSensorName(this.sensorType),\n \"supported scales\": logList(this.supportedScales.map((s) => (getSensorScale(this.sensorType, s)\n ?? getUnknownScale(s)).label)),\n },\n };\n }\n}\n// @publicAPI\nexport interface MultilevelSensorCCGetSupportedScaleOptions {\n sensorType: number;\n}\n@CCCommand(MultilevelSensorCommand.GetSupportedScale)\n@expectedCCResponse(MultilevelSensorCCSupportedScaleReport)\nexport class MultilevelSensorCCGetSupportedScale extends MultilevelSensorCC {\n public constructor(options: WithAddress<MultilevelSensorCCGetSupportedScaleOptions>) {\n super(options);\n this.sensorType = options.sensorType;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSensorCCGetSupportedScale {\n validatePayload(raw.payload.length >= 1);\n const sensorType = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n sensorType,\n });\n }\n public sensorType: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.sensorType]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"sensor type\": getSensorName(this.sensorType),\n },\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import * as __validateArgs from \"./MultilevelSensorCC._validateArgs.js\";\nconst { validateArgs_MultilevelSensorCCAPI_get, validateArgs_MultilevelSensorCCAPI_getSupportedScales, validateArgs_MultilevelSensorCCAPI_sendReport } = __validateArgs;\nimport type { GetDeviceConfig } from \"@zwave-js/config\";\nimport { CommandClasses, type ControlsCC, type EndpointId, type GetEndpoint, type GetNode, type GetSupportedCCVersion, type GetValueDB, type LogNode, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type NodeId, type Scale, type SinglecastCC, type SupervisionResult, type SupportsCC, type ValueID, ValueMetadata, type WithAddress, encodeBitMask, encodeFloatWithScale, getSensor, getSensorName, getSensorScale, getUnknownScale, logList, logText, parseBitMask, parseFloatWithScale, timespan, validatePayload, } from \"@zwave-js/core\";\nimport { type AllOrNone, Bytes, num2hex } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, type CCResponsePredicate, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, getEffectiveCCVersion, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { MultilevelSensorCommand, type MultilevelSensorValue, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport type { GetUserPreferences } from \"../lib/traits.js\";\nimport { MultilevelSensorCCValues } from \"./_CCValues.generated.js\";\nexport { MultilevelSensorCCValues };\n/**\n * Determine the scale to use to query a sensor reading. Uses the user-preferred scale if given,\n * followed by the most recently used scale, otherwile falls back to the first supported one.\n */\nfunction getPreferredSensorScale(ctx: GetValueDB & GetUserPreferences & LogNode, nodeId: number, endpointIndex: number, sensorType: number, supportedScales: readonly number[]): number {\n const preferences = ctx.getUserPreferences();\n const sensor = getSensor(sensorType);\n // If the sensor type is unknown, we have no default. Use the user-provided scale or 0\n if (!sensor) {\n const preferred = preferences?.scales[sensorType];\n // We cannot look up strings for unknown sensor types, so this must be a number or we use the fallback\n if (typeof preferred !== \"number\")\n return 0;\n return preferred;\n }\n // Look up the preference for the scale\n let preferred: number | string | undefined;\n // Named scales apply to multiple sensor types. To be able to override the scale for single types\n // we need to look at the preferences by sensor type first\n preferred = preferences?.scales[sensorType];\n // If the scale is named, we can then try to use the named preference\n const scaleGroupName = sensor.scaleGroupName;\n if (preferred == undefined && scaleGroupName) {\n preferred = preferences?.scales[scaleGroupName];\n }\n // Then attempt reading the scale from the corresponding value\n if (preferred == undefined) {\n const sensorName = getSensorName(sensorType);\n const sensorValue = MultilevelSensorCCValues.value(sensorName);\n const metadata = ctx\n .tryGetValueDB(nodeId)\n ?.getMetadata(sensorValue.endpoint(endpointIndex));\n const scale = metadata?.ccSpecific?.scale;\n if (typeof scale === \"number\" && supportedScales.includes(scale)) {\n preferred = scale;\n ctx.logNode(nodeId, {\n endpoint: endpointIndex,\n message: `No scale preference for sensor type ${sensorType}, using the last-used scale ${preferred}`,\n });\n }\n }\n // Then fall back to the first supported scale\n if (preferred == undefined) {\n preferred = supportedScales[0] ?? 0;\n ctx.logNode(nodeId, {\n endpoint: endpointIndex,\n message: `No scale preference for sensor type ${sensorType}, using the first supported scale ${preferred}`,\n });\n return preferred;\n }\n // If the scale name or unit was given, try to look it up\n if (typeof preferred === \"string\") {\n for (const [key, scale] of Object.entries(sensor.scales)) {\n if (scale.label === preferred || scale.unit === preferred) {\n preferred = parseInt(key, 10);\n break;\n }\n }\n }\n if (typeof preferred === \"string\") {\n // Looking up failed\n ctx.logNode(nodeId, {\n endpoint: endpointIndex,\n message: `Preferred scale \"${preferred}\" for sensor type ${sensorType} not found, using the first supported scale ${supportedScales[0] ?? 0}`,\n });\n return supportedScales[0] ?? 0;\n }\n // We have a numeric scale key, nothing to look up. Make sure it is supported though\n if (!supportedScales.length) {\n // No info about supported scales, just use the preferred one\n return preferred;\n }\n else if (!supportedScales.includes(preferred)) {\n ctx.logNode(nodeId, {\n endpoint: endpointIndex,\n message: `Preferred scale ${preferred} not supported for sensor type ${sensorType}, using the first supported scale`,\n });\n return supportedScales[0];\n }\n else {\n return preferred;\n }\n}\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses[\"Multilevel Sensor\"])\nexport class MultilevelSensorCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: MultilevelSensorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case MultilevelSensorCommand.Get:\n case MultilevelSensorCommand.Report:\n return true; // This is mandatory\n case MultilevelSensorCommand.GetSupportedSensor:\n case MultilevelSensorCommand.GetSupportedScale:\n return this.version >= 5;\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: MultilevelSensorCCAPI, { property }) {\n // Look up the necessary information\n const valueId: ValueID = {\n commandClass: CommandClasses[\"Multilevel Sensor\"],\n endpoint: this.endpoint.index,\n property,\n };\n const ccSpecific = this.tryGetValueDB()?.getMetadata(valueId)?.ccSpecific;\n if (!ccSpecific) {\n throwUnsupportedProperty(this.ccId, property);\n }\n const { sensorType, scale } = ccSpecific;\n return this.get(sensorType, scale);\n };\n }\n /** Query the default sensor value */\n public async get(): Promise<MaybeNotKnown<MultilevelSensorValue & {\n type: number;\n }>>;\n /** Query the sensor value for the given sensor type using the preferred sensor scale */\n public async get(sensorType: number): Promise<MaybeNotKnown<MultilevelSensorValue>>;\n /** Query the sensor value for the given sensor type using the given sensor scale */\n public async get(sensorType: number, scale: number): Promise<MaybeNotKnown<number>>;\n @validateArgs_MultilevelSensorCCAPI_get()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get(sensorType?: number, scale?: number) {\n this.assertSupportsCommand(MultilevelSensorCommand, MultilevelSensorCommand.Get);\n // Figure out the preferred scale if none was given\n let preferredScale: number | undefined;\n if (sensorType != undefined && scale == undefined) {\n const supportedScales: readonly number[] = this.tryGetValueDB()?.getValue({\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property: \"supportedScales\",\n propertyKey: sensorType,\n }) ?? [];\n preferredScale = getPreferredSensorScale(this.host, this.endpoint.nodeId, this.endpoint.index, sensorType, supportedScales);\n }\n const cc = new MultilevelSensorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n sensorType: sensorType!,\n scale: (scale ?? preferredScale)!,\n });\n const response = await this.host.sendCommand<MultilevelSensorCCReport>(cc, this.commandOptions);\n if (!response)\n return;\n const responseScale = getSensorScale(response.type, response.scale);\n if (sensorType == undefined) {\n // Overload #1: return the full response\n return {\n type: response.type,\n value: response.value,\n scale: responseScale,\n };\n }\n else if (scale == undefined) {\n // Overload #2: return value and scale\n return {\n value: response.value,\n scale: responseScale,\n };\n }\n else {\n // Overload #3: return only the value\n return response.value;\n }\n }\n public async getSupportedSensorTypes(): Promise<MaybeNotKnown<readonly number[]>> {\n this.assertSupportsCommand(MultilevelSensorCommand, MultilevelSensorCommand.GetSupportedSensor);\n const cc = new MultilevelSensorCCGetSupportedSensor({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<MultilevelSensorCCSupportedSensorReport>(cc, this.commandOptions);\n return response?.supportedSensorTypes;\n }\n @validateArgs_MultilevelSensorCCAPI_getSupportedScales()\n public async getSupportedScales(sensorType: number): Promise<MaybeNotKnown<readonly number[]>> {\n this.assertSupportsCommand(MultilevelSensorCommand, MultilevelSensorCommand.GetSupportedScale);\n const cc = new MultilevelSensorCCGetSupportedScale({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n sensorType,\n });\n const response = await this.host.sendCommand<MultilevelSensorCCSupportedScaleReport>(cc, this.commandOptions);\n return response?.supportedScales;\n }\n @validateArgs_MultilevelSensorCCAPI_sendReport()\n public async sendReport(sensorType: number, scale: number | Scale, value: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MultilevelSensorCommand, MultilevelSensorCommand.Report);\n const cc = new MultilevelSensorCCReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n type: sensorType,\n scale,\n value,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Multilevel Sensor\"])\n@implementedVersion(11)\n@ccValues(MultilevelSensorCCValues)\nexport class MultilevelSensorCC extends CommandClass {\n declare ccCommand: MultilevelSensorCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Multilevel Sensor\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n if (api.version >= 5) {\n // Query the supported sensor types\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"retrieving supported sensor types...\",\n direction: \"outbound\",\n });\n const sensorTypes = await api.getSupportedSensorTypes();\n if (sensorTypes) {\n const logMessage = logText(\"received supported sensor types:\", {\n nested: logList(sensorTypes.map((t) => getSensorName(t))),\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported sensor types timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n // As well as the supported scales for each sensor\n for (const [i, type] of sensorTypes.entries()) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying supported scales for ${getSensorName(type)} sensor`,\n direction: \"outbound\",\n });\n const sensorScales = await api.getSupportedScales(type);\n if (sensorScales) {\n const logMessage = logText(\"received supported scales:\", {\n nested: logList(sensorScales.map((s) => (getSensorScale(type, s)\n ?? getUnknownScale(s)).label)),\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported scales timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n node.reportInterviewProgress(i + 1, sensorTypes.length);\n }\n }\n await this.refreshValues(ctx, {\n tag: \"interview\",\n onProgress: (completed, total) => node.reportInterviewProgress(completed, total),\n });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Multilevel Sensor\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n const valueDB = this.getValueDB(ctx);\n if (api.version <= 4) {\n // Sensors up to V4 only support a single value\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current sensor reading...\",\n direction: \"outbound\",\n });\n const mlsResponse = await api.get();\n if (mlsResponse) {\n const sensorScale = getSensorScale(mlsResponse.type, mlsResponse.scale.key);\n const logMessage = `received current sensor reading:\nsensor type: ${getSensorName(mlsResponse.type)}\nvalue: ${mlsResponse.value}${sensorScale?.unit ? ` ${sensorScale.unit}` : \"\"}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n else {\n // Query all sensor values\n const sensorTypes: readonly number[] = valueDB.getValue({\n commandClass: this.ccId,\n property: \"supportedSensorTypes\",\n endpoint: this.endpointIndex,\n }) || [];\n for (const [i, type] of sensorTypes.entries()) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying ${getSensorName(type)} sensor reading...`,\n direction: \"outbound\",\n });\n const value = await api.get(type);\n if (value) {\n const logMessage = `received current ${getSensorName(type)} sensor reading: ${value.value} ${value.scale.unit || \"\"}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n options?.onProgress?.(i + 1, sensorTypes.length);\n }\n }\n }\n public shouldRefreshValues(this: SinglecastCC<this>, ctx: GetValueDB & GetSupportedCCVersion & GetDeviceConfig & GetNode<NodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>>): boolean {\n // Poll the device when all of the supported values were last updated longer than 6 hours ago.\n // This may lead to some values not being updated, but the user may have disabled some unnecessary\n // reports to reduce traffic.\n const valueDB = ctx.tryGetValueDB(this.nodeId);\n if (!valueDB)\n return true;\n const values = this.getDefinedValueIDs(ctx).filter((v) => MultilevelSensorCCValues.value.is(v));\n return values.every((v) => {\n const lastUpdated = valueDB.getTimestamp(v);\n return (lastUpdated == undefined\n || Date.now() - lastUpdated > timespan.hours(6));\n });\n }\n /**\n * Returns which sensor types are supported.\n * This only works AFTER the interview process\n */\n public static getSupportedSensorTypesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<number[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(MultilevelSensorCCValues.supportedSensorTypes.endpoint(endpoint.index));\n }\n /**\n * Returns which scales are supported for a given sensor type.\n * This only works AFTER the interview process\n */\n public static getSupportedScalesCached(ctx: GetValueDB, endpoint: EndpointId, sensorType: number): MaybeNotKnown<number[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(MultilevelSensorCCValues.supportedScales(sensorType).endpoint(endpoint.index));\n }\n public translatePropertyKey(ctx: GetValueDB, property: string | number, propertyKey: string | number): string | undefined {\n // TODO: check this\n if (property === \"values\" && typeof propertyKey === \"number\") {\n const sensor = getSensor(propertyKey);\n if (sensor)\n return sensor.label;\n }\n return super.translatePropertyKey(ctx, property, propertyKey);\n }\n}\n// @publicAPI\nexport interface MultilevelSensorCCReportOptions {\n type: number;\n scale: number | Scale;\n value: number;\n}\n@CCCommand(MultilevelSensorCommand.Report)\n@useSupervision()\nexport class MultilevelSensorCCReport extends MultilevelSensorCC {\n public constructor(options: WithAddress<MultilevelSensorCCReportOptions>) {\n super(options);\n this.type = options.type;\n this.value = options.value;\n this.scale =\n typeof options.scale === \"number\"\n ? options.scale\n : options.scale.key;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSensorCCReport {\n validatePayload(raw.payload.length >= 1);\n const type = raw.payload[0];\n // parseFloatWithScale does its own validation\n const { value, scale } = parseFloatWithScale(raw.payload.subarray(1));\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n value,\n scale,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const sensor = getSensor(this.type);\n const scale = getSensorScale(this.type, this.scale)\n ?? getUnknownScale(this.scale);\n // Filter out unknown sensor types and scales, unless the strict validation is disabled\n const measurementValidation = !ctx.getDeviceConfig?.(this.nodeId as number)?.compat?.disableStrictMeasurementValidation;\n const ccVersion = getEffectiveCCVersion(ctx, this);\n if (measurementValidation) {\n // Filter out unsupported sensor types and scales if possible\n if (ccVersion >= 5) {\n const supportedSensorTypes = this.getValue<number[]>(ctx, MultilevelSensorCCValues.supportedSensorTypes);\n if (supportedSensorTypes?.length) {\n validatePayload.withReason(`Unsupported sensor type ${getSensorName(this.type)} or corrupted data`)(supportedSensorTypes.includes(this.type));\n }\n const supportedScales = this.getValue<number[]>(ctx, MultilevelSensorCCValues.supportedScales(this.type));\n if (supportedScales?.length) {\n validatePayload.withReason(`Unsupported scale ${scale.label} or corrupted data`)(supportedScales.includes(scale.key));\n }\n }\n else {\n // We support a higher CC version than the device, so any types and scales it uses should be known to us\n // Filter out unknown ones.\n validatePayload.withReason(`Unknown sensor type ${num2hex(this.type)} or corrupted data`)(!!sensor);\n validatePayload.withReason(`Unknown scale ${num2hex(this.scale)} or corrupted data`)(scale.label !== getUnknownScale(this.scale).label);\n }\n }\n const sensorName = getSensorName(this.type);\n const sensorValue = MultilevelSensorCCValues.value(sensorName);\n this.setMetadata(ctx, sensorValue, {\n ...sensorValue.meta,\n unit: scale.unit,\n ccSpecific: {\n sensorType: this.type,\n scale: scale.key,\n },\n });\n this.setValue(ctx, sensorValue, this.value);\n return true;\n }\n public type: number;\n public scale: number;\n public value: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.type],\n encodeFloatWithScale(this.value, this.scale),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"sensor type\": getSensorName(this.type),\n scale: (getSensorScale(this.type, this.scale)\n ?? getUnknownScale(this.scale)).label,\n value: this.value,\n },\n };\n }\n}\nconst testResponseForMultilevelSensorGet: CCResponsePredicate<MultilevelSensorCCGet, MultilevelSensorCCReport> = (sent, received) => {\n // We expect a Multilevel Sensor Report that matches the requested sensor type (if a type was requested)\n return sent.sensorType == undefined || received.type === sent.sensorType;\n};\n// These options are supported starting in V5\n// @publicAPI\nexport type MultilevelSensorCCGetOptions = AllOrNone<{\n sensorType: number;\n scale: number;\n}>;\n@CCCommand(MultilevelSensorCommand.Get)\n@expectedCCResponse(MultilevelSensorCCReport, testResponseForMultilevelSensorGet)\nexport class MultilevelSensorCCGet extends MultilevelSensorCC {\n public constructor(options: WithAddress<MultilevelSensorCCGetOptions>) {\n super(options);\n if (\"sensorType\" in options) {\n this.sensorType = options.sensorType;\n this.scale = options.scale;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSensorCCGet {\n if (raw.payload.length >= 2) {\n const sensorType = raw.payload[0];\n const scale = (raw.payload[1] >> 3) & 0b11;\n return new this({\n nodeId: ctx.sourceNodeId,\n sensorType,\n scale,\n });\n }\n else {\n return new this({\n nodeId: ctx.sourceNodeId,\n });\n }\n }\n public sensorType: number | undefined;\n public scale: number | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.sensorType != undefined && this.scale != undefined) {\n this.payload = Bytes.from([\n this.sensorType,\n (this.scale & 0b11) << 3,\n ]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n let message: MessageRecord = {};\n if (this.sensorType != undefined && this.scale != undefined) {\n message = {\n \"sensor type\": getSensorName(this.sensorType),\n scale: (getSensorScale(this.sensorType, this.scale)\n ?? getUnknownScale(this.scale)).label,\n };\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface MultilevelSensorCCSupportedSensorReportOptions {\n supportedSensorTypes: readonly number[];\n}\n@CCCommand(MultilevelSensorCommand.SupportedSensorReport)\n@ccValueProperty(\"supportedSensorTypes\", MultilevelSensorCCValues.supportedSensorTypes)\nexport class MultilevelSensorCCSupportedSensorReport extends MultilevelSensorCC {\n public constructor(options: WithAddress<MultilevelSensorCCSupportedSensorReportOptions>) {\n super(options);\n this.supportedSensorTypes = options.supportedSensorTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSensorCCSupportedSensorReport {\n validatePayload(raw.payload.length >= 1);\n const supportedSensorTypes = parseBitMask(raw.payload);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedSensorTypes,\n });\n }\n // TODO: Use this during interview to precreate values\n public supportedSensorTypes: readonly number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.supportedSensorTypes);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported sensor types\": logList(this.supportedSensorTypes.map((t) => getSensorName(t))),\n },\n };\n }\n}\n@CCCommand(MultilevelSensorCommand.GetSupportedSensor)\n@expectedCCResponse(MultilevelSensorCCSupportedSensorReport)\nexport class MultilevelSensorCCGetSupportedSensor extends MultilevelSensorCC {\n}\n// @publicAPI\nexport interface MultilevelSensorCCSupportedScaleReportOptions {\n sensorType: number;\n supportedScales: readonly number[];\n}\n@CCCommand(MultilevelSensorCommand.SupportedScaleReport)\n@ccValueProperty(\"supportedScales\", MultilevelSensorCCValues.supportedScales, (self) => [self.sensorType])\nexport class MultilevelSensorCCSupportedScaleReport extends MultilevelSensorCC {\n public constructor(options: WithAddress<MultilevelSensorCCSupportedScaleReportOptions>) {\n super(options);\n this.sensorType = options.sensorType;\n this.supportedScales = options.supportedScales;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSensorCCSupportedScaleReport {\n validatePayload(raw.payload.length >= 2);\n const sensorType = raw.payload[0];\n const supportedScales = parseBitMask(Bytes.from([raw.payload[1] & 0b1111]), 0);\n return new this({\n nodeId: ctx.sourceNodeId,\n sensorType,\n supportedScales,\n });\n }\n public readonly sensorType: number;\n public readonly supportedScales: readonly number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.sensorType],\n encodeBitMask(this.supportedScales, 4, 0),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"sensor type\": getSensorName(this.sensorType),\n \"supported scales\": logList(this.supportedScales.map((s) => (getSensorScale(this.sensorType, s)\n ?? getUnknownScale(s)).label)),\n },\n };\n }\n}\n// @publicAPI\nexport interface MultilevelSensorCCGetSupportedScaleOptions {\n sensorType: number;\n}\n@CCCommand(MultilevelSensorCommand.GetSupportedScale)\n@expectedCCResponse(MultilevelSensorCCSupportedScaleReport)\nexport class MultilevelSensorCCGetSupportedScale extends MultilevelSensorCC {\n public constructor(options: WithAddress<MultilevelSensorCCGetSupportedScaleOptions>) {\n super(options);\n this.sensorType = options.sensorType;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSensorCCGetSupportedScale {\n validatePayload(raw.payload.length >= 1);\n const sensorType = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n sensorType,\n });\n }\n public sensorType: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.sensorType]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"sensor type\": getSensorName(this.sensorType),\n },\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["preferred"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Duration, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, type SupervisionResult, type WithAddress } from "@zwave-js/core";
|
|
2
2
|
import { Bytes } from "@zwave-js/shared";
|
|
3
3
|
import { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory } from "../lib/API.js";
|
|
4
|
-
import { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions } from "../lib/CommandClass.js";
|
|
4
|
+
import { type CCRaw, CommandClass, CommandRelation, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions } from "../lib/CommandClass.js";
|
|
5
5
|
import { LevelChangeDirection, MultilevelSwitchCommand, SwitchType } from "../lib/_Types.js";
|
|
6
6
|
import type { CCEncodingContext, CCParsingContext } from "../lib/traits.js";
|
|
7
7
|
import { MultilevelSwitchCCValues } from "./_CCValues.generated.js";
|
|
@@ -39,6 +39,7 @@ export declare class MultilevelSwitchCCSet extends MultilevelSwitchCC {
|
|
|
39
39
|
static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSwitchCCSet;
|
|
40
40
|
targetValue: number;
|
|
41
41
|
duration: Duration | undefined;
|
|
42
|
+
protected determineRelation(other: CommandClass): CommandRelation;
|
|
42
43
|
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
43
44
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
44
45
|
}
|
|
@@ -53,11 +54,13 @@ export declare class MultilevelSwitchCCReport extends MultilevelSwitchCC {
|
|
|
53
54
|
targetValue: MaybeUnknown<number> | undefined;
|
|
54
55
|
duration: Duration | undefined;
|
|
55
56
|
currentValue: MaybeUnknown<number> | undefined;
|
|
57
|
+
protected determineRelation(other: CommandClass): CommandRelation;
|
|
56
58
|
persistValues(ctx: PersistValuesContext): boolean;
|
|
57
59
|
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
58
60
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
59
61
|
}
|
|
60
62
|
export declare class MultilevelSwitchCCGet extends MultilevelSwitchCC {
|
|
63
|
+
protected determineRelation(other: CommandClass): CommandRelation;
|
|
61
64
|
}
|
|
62
65
|
export type MultilevelSwitchCCStartLevelChangeOptions = {
|
|
63
66
|
direction: keyof typeof LevelChangeDirection;
|
|
@@ -77,6 +80,7 @@ export declare class MultilevelSwitchCCStartLevelChange extends MultilevelSwitch
|
|
|
77
80
|
startLevel: number;
|
|
78
81
|
ignoreStartLevel: boolean;
|
|
79
82
|
direction: keyof typeof LevelChangeDirection;
|
|
83
|
+
protected determineRelation(other: CommandClass): CommandRelation;
|
|
80
84
|
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
81
85
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
82
86
|
}
|
|
@@ -382,6 +382,15 @@ let MultilevelSwitchCCSet = (() => {
|
|
|
382
382
|
}
|
|
383
383
|
targetValue;
|
|
384
384
|
duration;
|
|
385
|
+
determineRelation(other) {
|
|
386
|
+
if (other instanceof MultilevelSwitchCCSet2) {
|
|
387
|
+
return this.targetValue === other.targetValue && (this.duration ?? import_core.Duration.default()).equals(other.duration ?? import_core.Duration.default()) ? import_CommandClass.CommandRelation.Redundant : import_CommandClass.CommandRelation.Supersedes;
|
|
388
|
+
}
|
|
389
|
+
if (other instanceof MultilevelSwitchCCStartLevelChange) {
|
|
390
|
+
return import_CommandClass.CommandRelation.Supersedes;
|
|
391
|
+
}
|
|
392
|
+
return import_CommandClass.CommandRelation.Unrelated;
|
|
393
|
+
}
|
|
385
394
|
serialize(ctx) {
|
|
386
395
|
this.payload = import_shared.Bytes.from([
|
|
387
396
|
this.targetValue,
|
|
@@ -456,6 +465,12 @@ let MultilevelSwitchCCReport = (() => {
|
|
|
456
465
|
targetValue;
|
|
457
466
|
duration;
|
|
458
467
|
currentValue;
|
|
468
|
+
determineRelation(other) {
|
|
469
|
+
if (other instanceof MultilevelSwitchCCReport2) {
|
|
470
|
+
return this.currentValue === other.currentValue && this.targetValue === other.targetValue && (this.duration ?? import_core.Duration.default()).equals(other.duration ?? import_core.Duration.default()) ? import_CommandClass.CommandRelation.Redundant : import_CommandClass.CommandRelation.Supersedes;
|
|
471
|
+
}
|
|
472
|
+
return import_CommandClass.CommandRelation.Unrelated;
|
|
473
|
+
}
|
|
459
474
|
persistValues(ctx) {
|
|
460
475
|
const node = this.getNode(ctx);
|
|
461
476
|
if (!node)
|
|
@@ -533,6 +548,12 @@ let MultilevelSwitchCCGet = (() => {
|
|
|
533
548
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
534
549
|
(0, import_tslib.__runInitializers)(_classThis, _classExtraInitializers);
|
|
535
550
|
}
|
|
551
|
+
determineRelation(other) {
|
|
552
|
+
if (other instanceof MultilevelSwitchCCGet2) {
|
|
553
|
+
return import_CommandClass.CommandRelation.Redundant;
|
|
554
|
+
}
|
|
555
|
+
return import_CommandClass.CommandRelation.Unrelated;
|
|
556
|
+
}
|
|
536
557
|
};
|
|
537
558
|
return MultilevelSwitchCCGet2 = _classThis;
|
|
538
559
|
})();
|
|
@@ -584,6 +605,15 @@ let MultilevelSwitchCCStartLevelChange = (() => {
|
|
|
584
605
|
startLevel;
|
|
585
606
|
ignoreStartLevel;
|
|
586
607
|
direction;
|
|
608
|
+
determineRelation(other) {
|
|
609
|
+
if (other instanceof MultilevelSwitchCCStartLevelChange2) {
|
|
610
|
+
return this.direction === other.direction && this.ignoreStartLevel === other.ignoreStartLevel && this.startLevel === other.startLevel && (this.duration ?? import_core.Duration.default()).equals(other.duration ?? import_core.Duration.default()) ? import_CommandClass.CommandRelation.Redundant : import_CommandClass.CommandRelation.Supersedes;
|
|
611
|
+
}
|
|
612
|
+
if (other instanceof MultilevelSwitchCCSet) {
|
|
613
|
+
return import_CommandClass.CommandRelation.Supersedes;
|
|
614
|
+
}
|
|
615
|
+
return import_CommandClass.CommandRelation.Unrelated;
|
|
616
|
+
}
|
|
587
617
|
serialize(ctx) {
|
|
588
618
|
const controlByte = import_Types.LevelChangeDirection[this.direction] << 6 | (this.ignoreStartLevel ? 32 : 0);
|
|
589
619
|
this.payload = import_shared.Bytes.from([
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/MultilevelSwitchCC.ts"],
|
|
4
|
-
"sourcesContent": ["import * as __validateArgs from \"./MultilevelSwitchCC._validateArgs.js\";\nconst { validateArgs_MultilevelSwitchCCAPI_set, validateArgs_MultilevelSwitchCCAPI_startLevelChange } = __validateArgs;\nimport { CommandClasses, Duration, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, NOT_KNOWN, type SupervisionResult, SupervisionStatus, ValueMetadata, type WithAddress, maybeUnknownToString, parseMaybeNumber, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { multilevelSwitchTypeProperties, multilevelSwitchTypeToActions, } from \"../lib/CCValueUtils.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, getEffectiveCCVersion, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { LevelChangeDirection, MultilevelSwitchCommand, SwitchType, type WindowCoveringParameter, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { WindowCoveringCCValues } from \"./WindowCoveringCC.js\";\nimport { MultilevelSwitchCCValues } from \"./_CCValues.generated.js\";\nexport { MultilevelSwitchCCValues };\n@API(CommandClasses[\"Multilevel Switch\"])\nexport class MultilevelSwitchCCAPI extends CCAPI {\n public supportsCommand(cmd: MultilevelSwitchCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case MultilevelSwitchCommand.Get:\n return this.isSinglecast();\n case MultilevelSwitchCommand.Set:\n case MultilevelSwitchCommand.StartLevelChange:\n case MultilevelSwitchCommand.StopLevelChange:\n return true; // This is mandatory\n case MultilevelSwitchCommand.SupportedGet:\n return this.version >= 3 && this.isSinglecast();\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(MultilevelSwitchCommand, MultilevelSwitchCommand.Get);\n const cc = new MultilevelSwitchCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<MultilevelSwitchCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"currentValue\", \"targetValue\", \"duration\"]);\n }\n }\n /**\n * Sets the switch to a new value\n * @param targetValue The new target value for the switch\n * @param duration The duration after which the target value should be reached. Can be a Duration instance or a user-friendly duration string like `\"1m17s\"`. Only supported in V2 and above.\n * @returns A promise indicating whether the command was completed\n */\n @validateArgs_MultilevelSwitchCCAPI_set()\n public async set(targetValue: number, duration?: Duration | string): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MultilevelSwitchCommand, MultilevelSwitchCommand.Set);\n const cc = new MultilevelSwitchCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n targetValue,\n duration,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_MultilevelSwitchCCAPI_startLevelChange()\n public async startLevelChange(options: MultilevelSwitchCCStartLevelChangeOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MultilevelSwitchCommand, MultilevelSwitchCommand.StartLevelChange);\n const cc = new MultilevelSwitchCCStartLevelChange({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async stopLevelChange(): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MultilevelSwitchCommand, MultilevelSwitchCommand.StopLevelChange);\n const cc = new MultilevelSwitchCCStopLevelChange({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getSupported(): Promise<MaybeNotKnown<SwitchType>> {\n this.assertSupportsCommand(MultilevelSwitchCommand, MultilevelSwitchCommand.SupportedGet);\n const cc = new MultilevelSwitchCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<MultilevelSwitchCCSupportedReport>(cc, this.commandOptions);\n return response?.switchType;\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: MultilevelSwitchCCAPI, { property }, value, options) {\n // Enable restoring the previous non-zero value\n if (property === \"restorePrevious\") {\n property = \"targetValue\";\n value = 255;\n }\n if (property === \"targetValue\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n const duration = Duration.from(options?.transitionDuration);\n return this.set(value, duration);\n }\n else if (multilevelSwitchTypeProperties.includes(property as string)) {\n // Since the switch only supports one of the switch types, we would\n // need to check if the correct one is used. But since the names are\n // purely cosmetic, we just accept all of them\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n if (value) {\n // The property names are organized so that positive motions are\n // at odd indices and negative motions at even indices\n const direction = multilevelSwitchTypeProperties.indexOf(property as string) % 2\n === 0\n ? \"down\"\n : \"up\";\n // Singlecast only: Try to retrieve the current value to use as the start level,\n // even if the target node is going to ignore it. There might\n // be some bugged devices that ignore the ignore start level flag.\n const startLevel = this.tryGetValueDB()?.getValue<MaybeUnknown<number>>(MultilevelSwitchCCValues.currentValue.endpoint(this.endpoint.index));\n // And perform the level change\n const duration = Duration.from(options?.transitionDuration);\n return this.startLevelChange({\n direction,\n ignoreStartLevel: true,\n startLevel: typeof startLevel === \"number\"\n ? startLevel\n : undefined,\n duration,\n });\n }\n else {\n return this.stopLevelChange();\n }\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property }, value, options) => {\n // Enable restoring the previous non-zero value\n if (property === \"restorePrevious\") {\n property = \"targetValue\";\n value = 255;\n }\n if (property === \"targetValue\") {\n const duration = Duration.from(options?.transitionDuration);\n const currentValueValueId = MultilevelSwitchCCValues.currentValue\n .endpoint(this.endpoint.index);\n return {\n // This is the target value for a split target/current state pair.\n isSplitStateTargetValue: true,\n // Multilevel Switch commands may take some time to be executed.\n // Therefore we try to supervise the command execution and delay the\n // optimistic update until the final result is received.\n supervisionDelayedUpdates: true,\n supervisionOnSuccess: async () => {\n // Only update currentValue for valid target values\n if (typeof value === \"number\"\n && value >= 0\n && value <= 99) {\n this.tryGetValueDB()?.setValue(currentValueValueId, value);\n }\n else if (value === 255) {\n // We don't know the status now, so refresh the current value\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n }\n },\n supervisionOnFailure: async () => {\n // The transition failed, so now we don't know the status - refresh the current value\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n },\n optimisticallyUpdateRelatedValues: (_supervisedAndSuccessful) => {\n // Only update currentValue for valid target values\n if (typeof value === \"number\"\n && value >= 0\n && value <= 99) {\n if (this.isSinglecast()) {\n this.tryGetValueDB()?.setValue(currentValueValueId, value);\n }\n else if (this.isMulticast()) {\n // Figure out which nodes were affected by this command\n const affectedNodes = this.endpoint.node\n .physicalNodes.filter((node) => node\n .getEndpoint(this.endpoint.index)\n ?.supportsCC(this.ccId));\n // and optimistically update the currentValue\n for (const node of affectedNodes) {\n this.host\n .tryGetValueDB(node.id)\n ?.setValue(currentValueValueId, value);\n }\n }\n }\n },\n forceVerifyChanges: () => {\n // If we don't know the actual value, we need to verify the change, regardless of the supervision result\n return value === 255;\n },\n verifyChanges: async (result) => {\n if (\n // We generally don't want to poll for multicasts because of how much traffic it can cause\n // However, when setting the value 255 (ON), we don't know the actual state\n !(this.isSinglecast()\n || (this.isMulticast() && value === 255))) {\n return;\n }\n switch (result?.status) {\n case SupervisionStatus.Success:\n case SupervisionStatus.Fail:\n await this.pollValue!(currentValueValueId);\n break;\n case SupervisionStatus.Working:\n default: // (not supervised)\n (this as this).schedulePoll(currentValueValueId, value === 255 ? undefined : value, {\n duration: result?.remainingDuration\n ?? duration,\n });\n break;\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: MultilevelSwitchCCAPI, { property }) {\n switch (property) {\n case \"currentValue\":\n case \"targetValue\":\n case \"duration\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n}\n@commandClass(CommandClasses[\"Multilevel Switch\"])\n@implementedVersion(4)\n@ccValues(MultilevelSwitchCCValues)\nexport class MultilevelSwitchCC extends CommandClass {\n declare ccCommand: MultilevelSwitchCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Multilevel Switch\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n if (api.version >= 3) {\n // Find out which kind of switch this is\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting switch type...\",\n direction: \"outbound\",\n });\n const switchType = await api.getSupported();\n if (switchType != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `has switch type ${getEnumMemberName(SwitchType, switchType)}`,\n direction: \"inbound\",\n });\n }\n }\n else {\n // requesting the switch type automatically creates the up/down actions\n // We need to do this manually for V1 and V2\n this.createMetadataForLevelChangeActions(ctx);\n }\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Multilevel Switch\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting current switch state...\",\n direction: \"outbound\",\n });\n await api.get();\n }\n public setMappedBasicValue(ctx: GetValueDB, value: number): boolean {\n this.setValue(ctx, MultilevelSwitchCCValues.currentValue, value);\n return true;\n }\n protected createMetadataForLevelChangeActions(ctx: GetValueDB, \n // SDS13781: The Primary Switch Type SHOULD be 0x02 (Up/Down)\n switchType: SwitchType = SwitchType[\"Down/Up\"]): void {\n this.ensureMetadata(ctx, MultilevelSwitchCCValues.levelChangeUp(switchType));\n this.ensureMetadata(ctx, MultilevelSwitchCCValues.levelChangeDown(switchType));\n }\n}\n// @publicAPI\nexport interface MultilevelSwitchCCSetOptions {\n targetValue: number;\n // Version >= 2:\n duration?: Duration | string;\n}\n@CCCommand(MultilevelSwitchCommand.Set)\n@useSupervision()\nexport class MultilevelSwitchCCSet extends MultilevelSwitchCC {\n public constructor(options: WithAddress<MultilevelSwitchCCSetOptions>) {\n super(options);\n this.targetValue = options.targetValue;\n this.duration = Duration.from(options.duration);\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSwitchCCSet {\n validatePayload(raw.payload.length >= 1);\n const targetValue = raw.payload[0];\n let duration: Duration | undefined;\n if (raw.payload.length >= 2) {\n duration = Duration.parseReport(raw.payload[1]);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n targetValue,\n duration,\n });\n }\n public targetValue: number;\n public duration: Duration | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.targetValue,\n (this.duration ?? Duration.default()).serializeSet(),\n ]);\n const ccVersion = getEffectiveCCVersion(ctx, this);\n if (ccVersion < 2 && ctx.getDeviceConfig?.(this.nodeId as number)?.compat?.encodeCCsUsingTargetVersion) {\n // When forcing CC version 1, only include the target value\n this.payload = this.payload.subarray(0, 1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"target value\": this.targetValue,\n };\n if (this.duration) {\n message.duration = this.duration.toString();\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface MultilevelSwitchCCReportOptions {\n currentValue?: MaybeUnknown<number>;\n targetValue?: MaybeUnknown<number>;\n duration?: Duration | string;\n}\n@CCCommand(MultilevelSwitchCommand.Report)\n@ccValueProperty(\"targetValue\", MultilevelSwitchCCValues.targetValue)\n@ccValueProperty(\"duration\", MultilevelSwitchCCValues.duration)\n@ccValueProperty(\"currentValue\", MultilevelSwitchCCValues.currentValue)\nexport class MultilevelSwitchCCReport extends MultilevelSwitchCC {\n public constructor(options: WithAddress<MultilevelSwitchCCReportOptions>) {\n super(options);\n this.currentValue = options.currentValue;\n this.targetValue = options.targetValue;\n this.duration = Duration.from(options.duration);\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSwitchCCReport {\n validatePayload(raw.payload.length >= 1);\n const currentValue: MaybeUnknown<number> | undefined = \n // 0xff is a legacy value for 100% (99)\n raw.payload[0] === 0xff\n ? 99\n : parseMaybeNumber(raw.payload[0]);\n let targetValue: MaybeUnknown<number> | undefined;\n let duration: Duration | undefined;\n if (raw.payload.length >= 3) {\n targetValue = parseMaybeNumber(raw.payload[1]);\n duration = Duration.parseReport(raw.payload[2]);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n currentValue,\n targetValue,\n duration,\n });\n }\n public targetValue: MaybeUnknown<number> | undefined;\n public duration: Duration | undefined;\n public currentValue: MaybeUnknown<number> | undefined;\n public persistValues(ctx: PersistValuesContext): boolean {\n const node = this.getNode(ctx);\n if (!node)\n return false;\n const endpoint = node.getEndpoint(this.endpointIndex ?? 0);\n if (!endpoint)\n return false;\n if (!endpoint.supportsCC(CommandClasses[\"Window Covering\"])) {\n return super.persistValues(ctx);\n }\n const valueDB = this.getValueDB(ctx);\n // If the Window Covering CC interview hasn't completed yet,\n // don't persist MLS values \u2014 they'll be mapped correctly once\n // the interview completes and subsequent reports arrive.\n const wcInterviewComplete = valueDB.getValue<boolean>({\n commandClass: CommandClasses[\"Window Covering\"],\n endpoint: this.endpointIndex,\n property: \"interviewComplete\",\n });\n if (!wcInterviewComplete)\n return true;\n const supportedParameters = valueDB.getValue<readonly WindowCoveringParameter[]>(WindowCoveringCCValues.supportedParameters.endpoint(this.endpointIndex));\n if (!supportedParameters?.length)\n return super.persistValues(ctx);\n // Odd parameters have position support, prefer those\n const windowCoveringParameter = supportedParameters.find((p) => p % 2 === 1)\n ?? supportedParameters[0];\n if (this.currentValue !== undefined) {\n valueDB.setValue(WindowCoveringCCValues.currentValue(windowCoveringParameter).endpoint(this.endpointIndex), this.currentValue);\n }\n if (this.targetValue !== undefined) {\n valueDB.setValue(WindowCoveringCCValues.targetValue(windowCoveringParameter).endpoint(this.endpointIndex), this.targetValue);\n }\n if (this.duration !== undefined) {\n valueDB.setValue(WindowCoveringCCValues.duration(windowCoveringParameter).endpoint(this.endpointIndex), this.duration);\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.currentValue ?? 0xfe,\n this.targetValue ?? 0xfe,\n (this.duration ?? Duration.default()).serializeReport(),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"current value\": maybeUnknownToString(this.currentValue),\n };\n if (this.targetValue !== NOT_KNOWN && this.duration) {\n message[\"target value\"] = maybeUnknownToString(this.targetValue);\n message.duration = this.duration.toString();\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(MultilevelSwitchCommand.Get)\n@expectedCCResponse(MultilevelSwitchCCReport)\nexport class MultilevelSwitchCCGet extends MultilevelSwitchCC {\n}\n// @publicAPI\nexport type MultilevelSwitchCCStartLevelChangeOptions = {\n direction: keyof typeof LevelChangeDirection;\n} & ({\n ignoreStartLevel: true;\n startLevel?: number;\n} | {\n ignoreStartLevel: false;\n startLevel: number;\n}) & {\n // Version >= 2:\n duration?: Duration | string;\n};\n@CCCommand(MultilevelSwitchCommand.StartLevelChange)\n@useSupervision()\nexport class MultilevelSwitchCCStartLevelChange extends MultilevelSwitchCC {\n public constructor(options: WithAddress<MultilevelSwitchCCStartLevelChangeOptions>) {\n super(options);\n this.duration = Duration.from(options.duration);\n this.ignoreStartLevel = options.ignoreStartLevel;\n this.startLevel = options.startLevel ?? 0;\n this.direction = options.direction;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSwitchCCStartLevelChange {\n validatePayload(raw.payload.length >= 2);\n const ignoreStartLevel = !!((raw.payload[0] & 32) >>> 5);\n const direction = ((raw.payload[0] & 64) >>> 6)\n ? \"down\"\n : \"up\";\n const startLevel = raw.payload[1];\n let duration: Duration | undefined;\n if (raw.payload.length >= 3) {\n duration = Duration.parseSet(raw.payload[2]);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n ignoreStartLevel,\n direction,\n startLevel,\n duration,\n });\n }\n public duration: Duration | undefined;\n public startLevel: number;\n public ignoreStartLevel: boolean;\n public direction: keyof typeof LevelChangeDirection;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const controlByte = (LevelChangeDirection[this.direction] << 6)\n | (this.ignoreStartLevel ? 32 : 0);\n this.payload = Bytes.from([\n controlByte,\n this.startLevel,\n (this.duration ?? Duration.default()).serializeSet(),\n ]);\n const ccVersion = getEffectiveCCVersion(ctx, this);\n if (ccVersion < 2 && ctx.getDeviceConfig?.(this.nodeId as number)?.compat?.encodeCCsUsingTargetVersion) {\n // When forcing CC version 1, omit the duration byte\n this.payload = this.payload.subarray(0, -1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n startLevel: `${this.startLevel}${this.ignoreStartLevel ? \" (ignored)\" : \"\"}`,\n direction: this.direction,\n };\n if (this.duration) {\n message.duration = this.duration.toString();\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(MultilevelSwitchCommand.StopLevelChange)\n@useSupervision()\nexport class MultilevelSwitchCCStopLevelChange extends MultilevelSwitchCC {\n}\n// @publicAPI\nexport interface MultilevelSwitchCCSupportedReportOptions {\n switchType: SwitchType;\n}\n@CCCommand(MultilevelSwitchCommand.SupportedReport)\n@ccValueProperty(\"switchType\", MultilevelSwitchCCValues.switchType)\nexport class MultilevelSwitchCCSupportedReport extends MultilevelSwitchCC {\n public constructor(options: WithAddress<MultilevelSwitchCCSupportedReportOptions>) {\n super(options);\n this.switchType = options.switchType;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSwitchCCSupportedReport {\n validatePayload(raw.payload.length >= 1);\n const switchType: SwitchType = raw.payload[0] & 0b11111;\n return new this({\n nodeId: ctx.sourceNodeId,\n switchType,\n });\n }\n // This is the primary switch type. We're not supporting secondary switch types\n public readonly switchType: SwitchType;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n this.createMetadataForLevelChangeActions(ctx, this.switchType);\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.switchType & 0b11111]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"switch type\": getEnumMemberName(SwitchType, this.switchType),\n },\n };\n }\n}\n@CCCommand(MultilevelSwitchCommand.SupportedGet)\n@expectedCCResponse(MultilevelSwitchCCSupportedReport)\nexport class MultilevelSwitchCCSupportedGet extends MultilevelSwitchCC {\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["import * as __validateArgs from \"./MultilevelSwitchCC._validateArgs.js\";\nconst { validateArgs_MultilevelSwitchCCAPI_set, validateArgs_MultilevelSwitchCCAPI_startLevelChange } = __validateArgs;\nimport { CommandClasses, Duration, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, NOT_KNOWN, type SupervisionResult, SupervisionStatus, ValueMetadata, type WithAddress, maybeUnknownToString, parseMaybeNumber, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { multilevelSwitchTypeProperties, multilevelSwitchTypeToActions, } from \"../lib/CCValueUtils.js\";\nimport { type CCRaw, CommandClass, CommandRelation, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, getEffectiveCCVersion, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { LevelChangeDirection, MultilevelSwitchCommand, SwitchType, type WindowCoveringParameter, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { WindowCoveringCCValues } from \"./WindowCoveringCC.js\";\nimport { MultilevelSwitchCCValues } from \"./_CCValues.generated.js\";\nexport { MultilevelSwitchCCValues };\n@API(CommandClasses[\"Multilevel Switch\"])\nexport class MultilevelSwitchCCAPI extends CCAPI {\n public supportsCommand(cmd: MultilevelSwitchCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case MultilevelSwitchCommand.Get:\n return this.isSinglecast();\n case MultilevelSwitchCommand.Set:\n case MultilevelSwitchCommand.StartLevelChange:\n case MultilevelSwitchCommand.StopLevelChange:\n return true; // This is mandatory\n case MultilevelSwitchCommand.SupportedGet:\n return this.version >= 3 && this.isSinglecast();\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(MultilevelSwitchCommand, MultilevelSwitchCommand.Get);\n const cc = new MultilevelSwitchCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<MultilevelSwitchCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"currentValue\", \"targetValue\", \"duration\"]);\n }\n }\n /**\n * Sets the switch to a new value\n * @param targetValue The new target value for the switch\n * @param duration The duration after which the target value should be reached. Can be a Duration instance or a user-friendly duration string like `\"1m17s\"`. Only supported in V2 and above.\n * @returns A promise indicating whether the command was completed\n */\n @validateArgs_MultilevelSwitchCCAPI_set()\n public async set(targetValue: number, duration?: Duration | string): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MultilevelSwitchCommand, MultilevelSwitchCommand.Set);\n const cc = new MultilevelSwitchCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n targetValue,\n duration,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_MultilevelSwitchCCAPI_startLevelChange()\n public async startLevelChange(options: MultilevelSwitchCCStartLevelChangeOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MultilevelSwitchCommand, MultilevelSwitchCommand.StartLevelChange);\n const cc = new MultilevelSwitchCCStartLevelChange({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async stopLevelChange(): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MultilevelSwitchCommand, MultilevelSwitchCommand.StopLevelChange);\n const cc = new MultilevelSwitchCCStopLevelChange({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getSupported(): Promise<MaybeNotKnown<SwitchType>> {\n this.assertSupportsCommand(MultilevelSwitchCommand, MultilevelSwitchCommand.SupportedGet);\n const cc = new MultilevelSwitchCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<MultilevelSwitchCCSupportedReport>(cc, this.commandOptions);\n return response?.switchType;\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: MultilevelSwitchCCAPI, { property }, value, options) {\n // Enable restoring the previous non-zero value\n if (property === \"restorePrevious\") {\n property = \"targetValue\";\n value = 255;\n }\n if (property === \"targetValue\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n const duration = Duration.from(options?.transitionDuration);\n return this.set(value, duration);\n }\n else if (multilevelSwitchTypeProperties.includes(property as string)) {\n // Since the switch only supports one of the switch types, we would\n // need to check if the correct one is used. But since the names are\n // purely cosmetic, we just accept all of them\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n if (value) {\n // The property names are organized so that positive motions are\n // at odd indices and negative motions at even indices\n const direction = multilevelSwitchTypeProperties.indexOf(property as string)\n % 2\n === 0\n ? \"down\"\n : \"up\";\n // Singlecast only: Try to retrieve the current value to use as the start level,\n // even if the target node is going to ignore it. There might\n // be some bugged devices that ignore the ignore start level flag.\n const startLevel = this.tryGetValueDB()?.getValue<MaybeUnknown<number>>(MultilevelSwitchCCValues.currentValue.endpoint(this.endpoint.index));\n // And perform the level change\n const duration = Duration.from(options?.transitionDuration);\n return this.startLevelChange({\n direction,\n ignoreStartLevel: true,\n startLevel: typeof startLevel === \"number\"\n ? startLevel\n : undefined,\n duration,\n });\n }\n else {\n return this.stopLevelChange();\n }\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property }, value, options) => {\n // Enable restoring the previous non-zero value\n if (property === \"restorePrevious\") {\n property = \"targetValue\";\n value = 255;\n }\n if (property === \"targetValue\") {\n const duration = Duration.from(options?.transitionDuration);\n const currentValueValueId = MultilevelSwitchCCValues.currentValue.endpoint(this.endpoint.index);\n return {\n // This is the target value for a split target/current state pair.\n isSplitStateTargetValue: true,\n // Multilevel Switch commands may take some time to be executed.\n // Therefore we try to supervise the command execution and delay the\n // optimistic update until the final result is received.\n supervisionDelayedUpdates: true,\n supervisionOnSuccess: async () => {\n // Only update currentValue for valid target values\n if (typeof value === \"number\"\n && value >= 0\n && value <= 99) {\n this.tryGetValueDB()?.setValue(currentValueValueId, value);\n }\n else if (value === 255) {\n // We don't know the status now, so refresh the current value\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n }\n },\n supervisionOnFailure: async () => {\n // The transition failed, so now we don't know the status - refresh the current value\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n },\n optimisticallyUpdateRelatedValues: (_supervisedAndSuccessful) => {\n // Only update currentValue for valid target values\n if (typeof value === \"number\"\n && value >= 0\n && value <= 99) {\n if (this.isSinglecast()) {\n this.tryGetValueDB()?.setValue(currentValueValueId, value);\n }\n else if (this.isMulticast()) {\n // Figure out which nodes were affected by this command\n const affectedNodes = this.endpoint.node.physicalNodes.filter((node) => node\n .getEndpoint(this.endpoint.index)\n ?.supportsCC(this.ccId));\n // and optimistically update the currentValue\n for (const node of affectedNodes) {\n this.host\n .tryGetValueDB(node.id)\n ?.setValue(currentValueValueId, value);\n }\n }\n }\n },\n forceVerifyChanges: () => {\n // If we don't know the actual value, we need to verify the change, regardless of the supervision result\n return value === 255;\n },\n verifyChanges: async (result) => {\n if (\n // We generally don't want to poll for multicasts because of how much traffic it can cause\n // However, when setting the value 255 (ON), we don't know the actual state\n !(this.isSinglecast()\n || (this.isMulticast() && value === 255))) {\n return;\n }\n switch (result?.status) {\n case SupervisionStatus.Success:\n case SupervisionStatus.Fail:\n await this.pollValue!(currentValueValueId);\n break;\n case SupervisionStatus.Working:\n default: // (not supervised)\n (this as this).schedulePoll(currentValueValueId, value === 255 ? undefined : value, {\n duration: result?.remainingDuration ?? duration,\n });\n break;\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: MultilevelSwitchCCAPI, { property }) {\n switch (property) {\n case \"currentValue\":\n case \"targetValue\":\n case \"duration\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n}\n@commandClass(CommandClasses[\"Multilevel Switch\"])\n@implementedVersion(4)\n@ccValues(MultilevelSwitchCCValues)\nexport class MultilevelSwitchCC extends CommandClass {\n declare ccCommand: MultilevelSwitchCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Multilevel Switch\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n if (api.version >= 3) {\n // Find out which kind of switch this is\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting switch type...\",\n direction: \"outbound\",\n });\n const switchType = await api.getSupported();\n if (switchType != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `has switch type ${getEnumMemberName(SwitchType, switchType)}`,\n direction: \"inbound\",\n });\n }\n }\n else {\n // requesting the switch type automatically creates the up/down actions\n // We need to do this manually for V1 and V2\n this.createMetadataForLevelChangeActions(ctx);\n }\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Multilevel Switch\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting current switch state...\",\n direction: \"outbound\",\n });\n await api.get();\n }\n public setMappedBasicValue(ctx: GetValueDB, value: number): boolean {\n this.setValue(ctx, MultilevelSwitchCCValues.currentValue, value);\n return true;\n }\n protected createMetadataForLevelChangeActions(ctx: GetValueDB, \n // SDS13781: The Primary Switch Type SHOULD be 0x02 (Up/Down)\n switchType: SwitchType = SwitchType[\"Down/Up\"]): void {\n this.ensureMetadata(ctx, MultilevelSwitchCCValues.levelChangeUp(switchType));\n this.ensureMetadata(ctx, MultilevelSwitchCCValues.levelChangeDown(switchType));\n }\n}\n// @publicAPI\nexport interface MultilevelSwitchCCSetOptions {\n targetValue: number;\n // Version >= 2:\n duration?: Duration | string;\n}\n@CCCommand(MultilevelSwitchCommand.Set)\n@useSupervision()\nexport class MultilevelSwitchCCSet extends MultilevelSwitchCC {\n public constructor(options: WithAddress<MultilevelSwitchCCSetOptions>) {\n super(options);\n this.targetValue = options.targetValue;\n this.duration = Duration.from(options.duration);\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSwitchCCSet {\n validatePayload(raw.payload.length >= 1);\n const targetValue = raw.payload[0];\n let duration: Duration | undefined;\n if (raw.payload.length >= 2) {\n duration = Duration.parseReport(raw.payload[1]);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n targetValue,\n duration,\n });\n }\n public targetValue: number;\n public duration: Duration | undefined;\n protected override determineRelation(other: CommandClass): CommandRelation {\n if (other instanceof MultilevelSwitchCCSet) {\n return this.targetValue === other.targetValue\n && (this.duration ?? Duration.default()).equals(other.duration ?? Duration.default())\n ? CommandRelation.Redundant\n : CommandRelation.Supersedes;\n }\n if (other instanceof MultilevelSwitchCCStartLevelChange) {\n return CommandRelation.Supersedes;\n }\n return CommandRelation.Unrelated;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.targetValue,\n (this.duration ?? Duration.default()).serializeSet(),\n ]);\n const ccVersion = getEffectiveCCVersion(ctx, this);\n if (ccVersion < 2\n && ctx.getDeviceConfig?.(this.nodeId as number)?.compat\n ?.encodeCCsUsingTargetVersion) {\n // When forcing CC version 1, only include the target value\n this.payload = this.payload.subarray(0, 1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"target value\": this.targetValue,\n };\n if (this.duration) {\n message.duration = this.duration.toString();\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface MultilevelSwitchCCReportOptions {\n currentValue?: MaybeUnknown<number>;\n targetValue?: MaybeUnknown<number>;\n duration?: Duration | string;\n}\n@CCCommand(MultilevelSwitchCommand.Report)\n@ccValueProperty(\"targetValue\", MultilevelSwitchCCValues.targetValue)\n@ccValueProperty(\"duration\", MultilevelSwitchCCValues.duration)\n@ccValueProperty(\"currentValue\", MultilevelSwitchCCValues.currentValue)\nexport class MultilevelSwitchCCReport extends MultilevelSwitchCC {\n public constructor(options: WithAddress<MultilevelSwitchCCReportOptions>) {\n super(options);\n this.currentValue = options.currentValue;\n this.targetValue = options.targetValue;\n this.duration = Duration.from(options.duration);\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSwitchCCReport {\n validatePayload(raw.payload.length >= 1);\n const currentValue: MaybeUnknown<number> | undefined = \n // 0xff is a legacy value for 100% (99)\n raw.payload[0] === 0xff ? 99 : parseMaybeNumber(raw.payload[0]);\n let targetValue: MaybeUnknown<number> | undefined;\n let duration: Duration | undefined;\n if (raw.payload.length >= 3) {\n targetValue = parseMaybeNumber(raw.payload[1]);\n duration = Duration.parseReport(raw.payload[2]);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n currentValue,\n targetValue,\n duration,\n });\n }\n public targetValue: MaybeUnknown<number> | undefined;\n public duration: Duration | undefined;\n public currentValue: MaybeUnknown<number> | undefined;\n protected override determineRelation(other: CommandClass): CommandRelation {\n if (other instanceof MultilevelSwitchCCReport) {\n return this.currentValue === other.currentValue\n && this.targetValue === other.targetValue\n && (this.duration ?? Duration.default()).equals(other.duration ?? Duration.default())\n ? CommandRelation.Redundant\n : CommandRelation.Supersedes;\n }\n return CommandRelation.Unrelated;\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n const node = this.getNode(ctx);\n if (!node)\n return false;\n const endpoint = node.getEndpoint(this.endpointIndex ?? 0);\n if (!endpoint)\n return false;\n if (!endpoint.supportsCC(CommandClasses[\"Window Covering\"])) {\n return super.persistValues(ctx);\n }\n const valueDB = this.getValueDB(ctx);\n // If the Window Covering CC interview hasn't completed yet,\n // don't persist MLS values \u2014 they'll be mapped correctly once\n // the interview completes and subsequent reports arrive.\n const wcInterviewComplete = valueDB.getValue<boolean>({\n commandClass: CommandClasses[\"Window Covering\"],\n endpoint: this.endpointIndex,\n property: \"interviewComplete\",\n });\n if (!wcInterviewComplete)\n return true;\n const supportedParameters = valueDB.getValue<readonly WindowCoveringParameter[]>(WindowCoveringCCValues.supportedParameters.endpoint(this.endpointIndex));\n if (!supportedParameters?.length)\n return super.persistValues(ctx);\n // Odd parameters have position support, prefer those\n const windowCoveringParameter = supportedParameters.find((p) => p % 2 === 1)\n ?? supportedParameters[0];\n if (this.currentValue !== undefined) {\n valueDB.setValue(WindowCoveringCCValues.currentValue(windowCoveringParameter).endpoint(this.endpointIndex), this.currentValue);\n }\n if (this.targetValue !== undefined) {\n valueDB.setValue(WindowCoveringCCValues.targetValue(windowCoveringParameter).endpoint(this.endpointIndex), this.targetValue);\n }\n if (this.duration !== undefined) {\n valueDB.setValue(WindowCoveringCCValues.duration(windowCoveringParameter).endpoint(this.endpointIndex), this.duration);\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.currentValue ?? 0xfe,\n this.targetValue ?? 0xfe,\n (this.duration ?? Duration.default()).serializeReport(),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"current value\": maybeUnknownToString(this.currentValue),\n };\n if (this.targetValue !== NOT_KNOWN && this.duration) {\n message[\"target value\"] = maybeUnknownToString(this.targetValue);\n message.duration = this.duration.toString();\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(MultilevelSwitchCommand.Get)\n@expectedCCResponse(MultilevelSwitchCCReport)\nexport class MultilevelSwitchCCGet extends MultilevelSwitchCC {\n protected override determineRelation(other: CommandClass): CommandRelation {\n if (other instanceof MultilevelSwitchCCGet) {\n return CommandRelation.Redundant;\n }\n return CommandRelation.Unrelated;\n }\n}\n// @publicAPI\nexport type MultilevelSwitchCCStartLevelChangeOptions = {\n direction: keyof typeof LevelChangeDirection;\n} & ({\n ignoreStartLevel: true;\n startLevel?: number;\n} | {\n ignoreStartLevel: false;\n startLevel: number;\n}) & {\n // Version >= 2:\n duration?: Duration | string;\n};\n@CCCommand(MultilevelSwitchCommand.StartLevelChange)\n@useSupervision()\nexport class MultilevelSwitchCCStartLevelChange extends MultilevelSwitchCC {\n public constructor(options: WithAddress<MultilevelSwitchCCStartLevelChangeOptions>) {\n super(options);\n this.duration = Duration.from(options.duration);\n this.ignoreStartLevel = options.ignoreStartLevel;\n this.startLevel = options.startLevel ?? 0;\n this.direction = options.direction;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSwitchCCStartLevelChange {\n validatePayload(raw.payload.length >= 2);\n const ignoreStartLevel = !!((raw.payload[0] & 32) >>> 5);\n const direction = (raw.payload[0] & 64) >>> 6 ? \"down\" : \"up\";\n const startLevel = raw.payload[1];\n let duration: Duration | undefined;\n if (raw.payload.length >= 3) {\n duration = Duration.parseSet(raw.payload[2]);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n ignoreStartLevel,\n direction,\n startLevel,\n duration,\n });\n }\n public duration: Duration | undefined;\n public startLevel: number;\n public ignoreStartLevel: boolean;\n public direction: keyof typeof LevelChangeDirection;\n protected override determineRelation(other: CommandClass): CommandRelation {\n if (other instanceof MultilevelSwitchCCStartLevelChange) {\n return this.direction === other.direction\n && this.ignoreStartLevel === other.ignoreStartLevel\n && this.startLevel === other.startLevel\n && (this.duration ?? Duration.default()).equals(other.duration ?? Duration.default())\n ? CommandRelation.Redundant\n : CommandRelation.Supersedes;\n }\n if (other instanceof MultilevelSwitchCCSet) {\n return CommandRelation.Supersedes;\n }\n return CommandRelation.Unrelated;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const controlByte = (LevelChangeDirection[this.direction] << 6)\n | (this.ignoreStartLevel ? 32 : 0);\n this.payload = Bytes.from([\n controlByte,\n this.startLevel,\n (this.duration ?? Duration.default()).serializeSet(),\n ]);\n const ccVersion = getEffectiveCCVersion(ctx, this);\n if (ccVersion < 2\n && ctx.getDeviceConfig?.(this.nodeId as number)?.compat\n ?.encodeCCsUsingTargetVersion) {\n // When forcing CC version 1, omit the duration byte\n this.payload = this.payload.subarray(0, -1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n startLevel: `${this.startLevel}${this.ignoreStartLevel ? \" (ignored)\" : \"\"}`,\n direction: this.direction,\n };\n if (this.duration) {\n message.duration = this.duration.toString();\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(MultilevelSwitchCommand.StopLevelChange)\n@useSupervision()\nexport class MultilevelSwitchCCStopLevelChange extends MultilevelSwitchCC {\n}\n// @publicAPI\nexport interface MultilevelSwitchCCSupportedReportOptions {\n switchType: SwitchType;\n}\n@CCCommand(MultilevelSwitchCommand.SupportedReport)\n@ccValueProperty(\"switchType\", MultilevelSwitchCCValues.switchType)\nexport class MultilevelSwitchCCSupportedReport extends MultilevelSwitchCC {\n public constructor(options: WithAddress<MultilevelSwitchCCSupportedReportOptions>) {\n super(options);\n this.switchType = options.switchType;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSwitchCCSupportedReport {\n validatePayload(raw.payload.length >= 1);\n const switchType: SwitchType = raw.payload[0] & 0b11111;\n return new this({\n nodeId: ctx.sourceNodeId,\n switchType,\n });\n }\n // This is the primary switch type. We're not supporting secondary switch types\n public readonly switchType: SwitchType;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n this.createMetadataForLevelChangeActions(ctx, this.switchType);\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.switchType & 0b11111]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"switch type\": getEnumMemberName(SwitchType, this.switchType),\n },\n };\n }\n}\n@CCCommand(MultilevelSwitchCommand.SupportedGet)\n@expectedCCResponse(MultilevelSwitchCCSupportedReport)\nexport class MultilevelSwitchCCSupportedGet extends MultilevelSwitchCC {\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["MultilevelSwitchCCSet", "MultilevelSwitchCCReport", "MultilevelSwitchCCGet", "MultilevelSwitchCCStartLevelChange"]
|
|
7
7
|
}
|
|
@@ -144,6 +144,7 @@ let NotificationCCAPI = (() => {
|
|
|
144
144
|
};
|
|
145
145
|
}
|
|
146
146
|
/**
|
|
147
|
+
* Queries the current status of a notification type and persists changes if needed.
|
|
147
148
|
* @internal
|
|
148
149
|
*/
|
|
149
150
|
async getInternal(options) {
|
|
@@ -153,7 +154,20 @@ let NotificationCCAPI = (() => {
|
|
|
153
154
|
endpointIndex: this.endpoint.index,
|
|
154
155
|
...options
|
|
155
156
|
});
|
|
156
|
-
|
|
157
|
+
const response = await this.host.sendCommand(cc, this.commandOptions);
|
|
158
|
+
if (!response)
|
|
159
|
+
return;
|
|
160
|
+
const rawEvent = response.notificationEvent;
|
|
161
|
+
const rawEventParameters = response.eventParameters;
|
|
162
|
+
if (rawEvent === 254) {
|
|
163
|
+
response.notificationEvent = 0;
|
|
164
|
+
response.eventParameters = void 0;
|
|
165
|
+
}
|
|
166
|
+
const node = this.host.getNode(this.endpoint.nodeId);
|
|
167
|
+
await node?.handleCommand(response);
|
|
168
|
+
response.notificationEvent = rawEvent;
|
|
169
|
+
response.eventParameters = rawEventParameters;
|
|
170
|
+
return response;
|
|
157
171
|
}
|
|
158
172
|
async sendReport(options) {
|
|
159
173
|
this.assertSupportsCommand(import_Types.NotificationCommand, import_Types.NotificationCommand.Report);
|
|
@@ -469,7 +483,9 @@ let NotificationCC = (() => {
|
|
|
469
483
|
const metadata = getNotificationValueMetadata(this.getMetadata(ctx, notificationValue), notification, valueConfig);
|
|
470
484
|
this.setMetadata(ctx, notificationValue, metadata);
|
|
471
485
|
}
|
|
472
|
-
this.setValue(ctx, import_CCValues_generated.NotificationCCValues.supportedNotificationTypes, [
|
|
486
|
+
this.setValue(ctx, import_CCValues_generated.NotificationCCValues.supportedNotificationTypes, [
|
|
487
|
+
...supportedNotifications.keys()
|
|
488
|
+
]);
|
|
473
489
|
for (const [type, events] of supportedNotifications) {
|
|
474
490
|
this.setValue(ctx, import_CCValues_generated.NotificationCCValues.supportedNotificationEvents(type), [...events]);
|
|
475
491
|
}
|
|
@@ -513,7 +529,9 @@ let NotificationCC = (() => {
|
|
|
513
529
|
supportedEvents.get(to.notificationType).add(to.notificationEvent);
|
|
514
530
|
}
|
|
515
531
|
}
|
|
516
|
-
this.setValue(ctx, import_CCValues_generated.NotificationCCValues.supportedNotificationTypes, [
|
|
532
|
+
this.setValue(ctx, import_CCValues_generated.NotificationCCValues.supportedNotificationTypes, [
|
|
533
|
+
...supportedTypes
|
|
534
|
+
]);
|
|
517
535
|
for (const [type, events] of supportedEvents) {
|
|
518
536
|
this.setValue(ctx, import_CCValues_generated.NotificationCCValues.supportedNotificationEvents(type), [...events]);
|
|
519
537
|
}
|
|
@@ -550,7 +568,12 @@ let NotificationCC = (() => {
|
|
|
550
568
|
if ([...variable.states.keys()].some((key) => events.includes(key))) {
|
|
551
569
|
const value = import_CCValues_generated.NotificationCCValues.notificationVariable(notification.name, variable.name);
|
|
552
570
|
if (this.getValue(ctx, value) == void 0) {
|
|
553
|
-
this.setValue(
|
|
571
|
+
this.setValue(
|
|
572
|
+
ctx,
|
|
573
|
+
value,
|
|
574
|
+
0
|
|
575
|
+
/* idle */
|
|
576
|
+
);
|
|
554
577
|
}
|
|
555
578
|
}
|
|
556
579
|
}
|
|
@@ -573,12 +596,9 @@ let NotificationCC = (() => {
|
|
|
573
596
|
message: `querying notification status for ${name}...`,
|
|
574
597
|
direction: "outbound"
|
|
575
598
|
});
|
|
576
|
-
|
|
599
|
+
await api.getInternal({
|
|
577
600
|
notificationType: type
|
|
578
601
|
});
|
|
579
|
-
if (response) {
|
|
580
|
-
await node.handleCommand(response);
|
|
581
|
-
}
|
|
582
602
|
options?.onProgress?.(i + 1, supportedNotificationTypes.length);
|
|
583
603
|
}
|
|
584
604
|
this.setValue(ctx, import_CCValues_generated.NotificationCCValues.lastRefresh, Date.now());
|
|
@@ -1119,9 +1139,7 @@ let NotificationCCSupportedReport = (() => {
|
|
|
1119
1139
|
serialize(ctx) {
|
|
1120
1140
|
const bitMask = (0, import_core.encodeBitMask)(this.supportedNotificationTypes, Math.max(...this.supportedNotificationTypes), 0);
|
|
1121
1141
|
this.payload = import_shared.Bytes.concat([
|
|
1122
|
-
[
|
|
1123
|
-
(this.supportsV1Alarm ? 128 : 0) | bitMask.length
|
|
1124
|
-
],
|
|
1142
|
+
[(this.supportsV1Alarm ? 128 : 0) | bitMask.length],
|
|
1125
1143
|
bitMask
|
|
1126
1144
|
]);
|
|
1127
1145
|
return super.serialize(ctx);
|