@zwave-js/cc 15.1.0 → 15.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/cc/AlarmSensorCC.d.ts +7 -7
- package/build/cjs/cc/AlarmSensorCC.js +22 -23
- package/build/cjs/cc/AlarmSensorCC.js.map +3 -3
- package/build/cjs/cc/AssociationCC.d.ts +8 -9
- package/build/cjs/cc/AssociationCC.js +29 -29
- package/build/cjs/cc/AssociationCC.js.map +3 -3
- package/build/cjs/cc/AssociationGroupInfoCC.d.ts +7 -7
- package/build/cjs/cc/AssociationGroupInfoCC.js +31 -32
- package/build/cjs/cc/AssociationGroupInfoCC.js.map +3 -3
- package/build/cjs/cc/BarrierOperatorCC.d.ts +8 -8
- package/build/cjs/cc/BarrierOperatorCC.js +35 -36
- package/build/cjs/cc/BarrierOperatorCC.js.map +3 -3
- package/build/cjs/cc/BasicCC.d.ts +4 -4
- package/build/cjs/cc/BasicCC.js +23 -24
- package/build/cjs/cc/BasicCC.js.map +3 -3
- package/build/cjs/cc/BatteryCC.d.ts +6 -8
- package/build/cjs/cc/BatteryCC.js +24 -28
- package/build/cjs/cc/BatteryCC.js.map +3 -3
- package/build/cjs/cc/BinarySensorCC.d.ts +5 -5
- package/build/cjs/cc/BinarySensorCC.js +20 -21
- package/build/cjs/cc/BinarySensorCC.js.map +3 -3
- package/build/cjs/cc/BinarySwitchCC._validateArgs.js +2 -2
- package/build/cjs/cc/BinarySwitchCC.d.ts +6 -6
- package/build/cjs/cc/BinarySwitchCC.js +26 -26
- package/build/cjs/cc/BinarySwitchCC.js.map +3 -3
- package/build/cjs/cc/CRC16CC.d.ts +3 -3
- package/build/cjs/cc/CRC16CC.js +15 -15
- package/build/cjs/cc/CRC16CC.js.map +3 -3
- package/build/cjs/cc/CentralSceneCC.d.ts +8 -8
- package/build/cjs/cc/CentralSceneCC.js +23 -24
- package/build/cjs/cc/CentralSceneCC.js.map +3 -3
- package/build/cjs/cc/ClimateControlScheduleCC.d.ts +6 -6
- package/build/cjs/cc/ClimateControlScheduleCC.js +19 -20
- package/build/cjs/cc/ClimateControlScheduleCC.js.map +3 -3
- package/build/cjs/cc/ClockCC.d.ts +3 -4
- package/build/cjs/cc/ClockCC.js +13 -14
- package/build/cjs/cc/ClockCC.js.map +3 -3
- package/build/cjs/cc/ColorSwitchCC.d.ts +3 -4
- package/build/cjs/cc/ColorSwitchCC.js +22 -24
- package/build/cjs/cc/ColorSwitchCC.js.map +3 -3
- package/build/cjs/cc/ConfigurationCC.d.ts +3 -3
- package/build/cjs/cc/ConfigurationCC.js +114 -115
- package/build/cjs/cc/ConfigurationCC.js.map +3 -3
- package/build/cjs/cc/DeviceResetLocallyCC.d.ts +2 -2
- package/build/cjs/cc/DeviceResetLocallyCC.js +5 -5
- package/build/cjs/cc/DeviceResetLocallyCC.js.map +1 -1
- package/build/cjs/cc/DoorLockCC.d.ts +29 -29
- package/build/cjs/cc/DoorLockCC.js +39 -40
- package/build/cjs/cc/DoorLockCC.js.map +3 -3
- package/build/cjs/cc/DoorLockLoggingCC.d.ts +4 -4
- package/build/cjs/cc/DoorLockLoggingCC.js +13 -14
- package/build/cjs/cc/DoorLockLoggingCC.js.map +3 -3
- package/build/cjs/cc/EnergyProductionCC.d.ts +2 -3
- package/build/cjs/cc/EnergyProductionCC.js.map +2 -2
- package/build/cjs/cc/EntryControlCC.d.ts +8 -8
- package/build/cjs/cc/EntryControlCC.js +41 -42
- package/build/cjs/cc/EntryControlCC.js.map +3 -3
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.d.ts +9 -10
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +52 -53
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +3 -3
- package/build/cjs/cc/HailCC.js +2 -2
- package/build/cjs/cc/HailCC.js.map +1 -1
- package/build/cjs/cc/HumidityControlModeCC.d.ts +5 -5
- package/build/cjs/cc/HumidityControlModeCC.js +20 -21
- package/build/cjs/cc/HumidityControlModeCC.js.map +3 -3
- package/build/cjs/cc/HumidityControlOperatingStateCC.d.ts +3 -3
- package/build/cjs/cc/HumidityControlOperatingStateCC.js +9 -9
- package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +3 -3
- package/build/cjs/cc/HumidityControlSetpointCC.d.ts +6 -6
- package/build/cjs/cc/HumidityControlSetpointCC.js +43 -44
- package/build/cjs/cc/HumidityControlSetpointCC.js.map +3 -3
- package/build/cjs/cc/InclusionControllerCC.d.ts +2 -3
- package/build/cjs/cc/InclusionControllerCC.js.map +2 -2
- package/build/cjs/cc/IndicatorCC.d.ts +3 -3
- package/build/cjs/cc/IndicatorCC.js +50 -52
- package/build/cjs/cc/IndicatorCC.js.map +3 -3
- package/build/cjs/cc/IrrigationCC.d.ts +3 -3
- package/build/cjs/cc/IrrigationCC.js +74 -75
- package/build/cjs/cc/IrrigationCC.js.map +3 -3
- package/build/cjs/cc/LanguageCC.d.ts +5 -6
- package/build/cjs/cc/LanguageCC.js +14 -15
- package/build/cjs/cc/LanguageCC.js.map +3 -3
- package/build/cjs/cc/LockCC.d.ts +4 -4
- package/build/cjs/cc/LockCC.js +10 -10
- package/build/cjs/cc/LockCC.js.map +3 -3
- package/build/cjs/cc/ManufacturerProprietaryCC.d.ts +4 -3
- package/build/cjs/cc/ManufacturerProprietaryCC.js +14 -12
- package/build/cjs/cc/ManufacturerProprietaryCC.js.map +3 -3
- package/build/cjs/cc/ManufacturerSpecificCC.d.ts +7 -8
- package/build/cjs/cc/ManufacturerSpecificCC.js +20 -21
- package/build/cjs/cc/ManufacturerSpecificCC.js.map +3 -3
- package/build/cjs/cc/MeterCC.d.ts +4 -6
- package/build/cjs/cc/MeterCC.js +52 -54
- package/build/cjs/cc/MeterCC.js.map +3 -3
- package/build/cjs/cc/MultiChannelAssociationCC.d.ts +7 -8
- package/build/cjs/cc/MultiChannelAssociationCC.js +34 -35
- package/build/cjs/cc/MultiChannelAssociationCC.js.map +3 -3
- package/build/cjs/cc/MultiChannelCC.d.ts +13 -12
- package/build/cjs/cc/MultiChannelCC.js +104 -56
- package/build/cjs/cc/MultiChannelCC.js.map +3 -3
- package/build/cjs/cc/MultiCommandCC.d.ts +3 -3
- package/build/cjs/cc/MultiCommandCC.js +13 -13
- package/build/cjs/cc/MultiCommandCC.js.map +3 -3
- package/build/cjs/cc/MultilevelSensorCC.d.ts +4 -7
- package/build/cjs/cc/MultilevelSensorCC.js +26 -28
- package/build/cjs/cc/MultilevelSensorCC.js.map +3 -3
- package/build/cjs/cc/MultilevelSwitchCC._validateArgs.js +3 -3
- package/build/cjs/cc/MultilevelSwitchCC.d.ts +13 -13
- package/build/cjs/cc/MultilevelSwitchCC.js +36 -37
- package/build/cjs/cc/MultilevelSwitchCC.js.map +3 -3
- package/build/cjs/cc/NoOperationCC.js +4 -4
- package/build/cjs/cc/NoOperationCC.js.map +1 -1
- package/build/cjs/cc/NodeNamingCC.d.ts +5 -5
- package/build/cjs/cc/NodeNamingCC.js +20 -20
- package/build/cjs/cc/NodeNamingCC.js.map +3 -3
- package/build/cjs/cc/NotificationCC.d.ts +4 -5
- package/build/cjs/cc/NotificationCC.js +66 -68
- package/build/cjs/cc/NotificationCC.js.map +3 -3
- package/build/cjs/cc/PowerlevelCC.d.ts +3 -3
- package/build/cjs/cc/PowerlevelCC.js +25 -26
- package/build/cjs/cc/PowerlevelCC.js.map +3 -3
- package/build/cjs/cc/ProtectionCC._validateArgs.js +2 -2
- package/build/cjs/cc/ProtectionCC.d.ts +11 -11
- package/build/cjs/cc/ProtectionCC.js +35 -36
- package/build/cjs/cc/ProtectionCC.js.map +3 -3
- package/build/cjs/cc/SceneActivationCC._validateArgs.js +2 -2
- package/build/cjs/cc/SceneActivationCC.d.ts +5 -6
- package/build/cjs/cc/SceneActivationCC.js +10 -10
- package/build/cjs/cc/SceneActivationCC.js.map +3 -3
- package/build/cjs/cc/SceneActuatorConfigurationCC._validateArgs.js +2 -2
- package/build/cjs/cc/SceneActuatorConfigurationCC.d.ts +5 -5
- package/build/cjs/cc/SceneActuatorConfigurationCC.js +19 -20
- package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +3 -3
- package/build/cjs/cc/SceneControllerConfigurationCC._validateArgs.js +2 -2
- package/build/cjs/cc/SceneControllerConfigurationCC.d.ts +6 -6
- package/build/cjs/cc/SceneControllerConfigurationCC.js +25 -26
- package/build/cjs/cc/SceneControllerConfigurationCC.js.map +3 -3
- package/build/cjs/cc/ScheduleEntryLockCC.d.ts +2 -3
- package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
- package/build/cjs/cc/Security2CC.d.ts +3 -4
- package/build/cjs/cc/Security2CC.js +60 -62
- package/build/cjs/cc/Security2CC.js.map +3 -3
- package/build/cjs/cc/SecurityCC.d.ts +3 -4
- package/build/cjs/cc/SecurityCC.js +25 -26
- package/build/cjs/cc/SecurityCC.js.map +3 -3
- package/build/cjs/cc/SoundSwitchCC.d.ts +7 -7
- package/build/cjs/cc/SoundSwitchCC.js +28 -29
- package/build/cjs/cc/SoundSwitchCC.js.map +3 -3
- package/build/cjs/cc/SupervisionCC.d.ts +4 -4
- package/build/cjs/cc/SupervisionCC.js +28 -29
- package/build/cjs/cc/SupervisionCC.js.map +3 -3
- package/build/cjs/cc/ThermostatFanModeCC.d.ts +6 -6
- package/build/cjs/cc/ThermostatFanModeCC.js +21 -22
- package/build/cjs/cc/ThermostatFanModeCC.js.map +3 -3
- package/build/cjs/cc/ThermostatFanStateCC.d.ts +3 -3
- package/build/cjs/cc/ThermostatFanStateCC.js +9 -9
- package/build/cjs/cc/ThermostatFanStateCC.js.map +3 -3
- package/build/cjs/cc/ThermostatModeCC.d.ts +6 -6
- package/build/cjs/cc/ThermostatModeCC.js +30 -31
- package/build/cjs/cc/ThermostatModeCC.js.map +3 -3
- package/build/cjs/cc/ThermostatOperatingStateCC.d.ts +3 -4
- package/build/cjs/cc/ThermostatOperatingStateCC.js +9 -9
- package/build/cjs/cc/ThermostatOperatingStateCC.js.map +3 -3
- package/build/cjs/cc/ThermostatSetbackCC.d.ts +3 -3
- package/build/cjs/cc/ThermostatSetbackCC.js +14 -15
- package/build/cjs/cc/ThermostatSetbackCC.js.map +3 -3
- package/build/cjs/cc/ThermostatSetpointCC.d.ts +6 -6
- package/build/cjs/cc/ThermostatSetpointCC.js +48 -49
- package/build/cjs/cc/ThermostatSetpointCC.js.map +3 -3
- package/build/cjs/cc/TimeCC.d.ts +3 -4
- package/build/cjs/cc/TimeCC.js +9 -10
- package/build/cjs/cc/TimeCC.js.map +3 -3
- package/build/cjs/cc/TimeParametersCC.d.ts +3 -4
- package/build/cjs/cc/TimeParametersCC.js +2 -2
- package/build/cjs/cc/TimeParametersCC.js.map +2 -2
- package/build/cjs/cc/TransportServiceCC.d.ts +3 -3
- package/build/cjs/cc/TransportServiceCC.js +44 -45
- package/build/cjs/cc/TransportServiceCC.js.map +3 -3
- package/build/cjs/cc/UserCodeCC.d.ts +19 -19
- package/build/cjs/cc/UserCodeCC.js +102 -103
- package/build/cjs/cc/UserCodeCC.js.map +3 -3
- package/build/cjs/cc/VersionCC.d.ts +17 -17
- package/build/cjs/cc/VersionCC.js +46 -47
- package/build/cjs/cc/VersionCC.js.map +3 -3
- package/build/cjs/cc/WakeUpCC.d.ts +6 -6
- package/build/cjs/cc/WakeUpCC.js +16 -17
- package/build/cjs/cc/WakeUpCC.js.map +3 -3
- package/build/cjs/cc/WindowCoveringCC.d.ts +3 -4
- package/build/cjs/cc/WindowCoveringCC.js +17 -18
- package/build/cjs/cc/WindowCoveringCC.js.map +3 -3
- package/build/cjs/cc/ZWavePlusCC.d.ts +8 -8
- package/build/cjs/cc/ZWavePlusCC.js +15 -16
- package/build/cjs/cc/ZWavePlusCC.js.map +3 -3
- package/build/cjs/cc/ZWaveProtocolCC.d.ts +2 -2
- package/build/cjs/cc/ZWaveProtocolCC.js +35 -35
- package/build/cjs/cc/ZWaveProtocolCC.js.map +2 -2
- package/build/cjs/cc/_CCValues.generated.d.ts +2 -0
- package/build/cjs/cc/_CCValues.generated.js +28 -27
- package/build/cjs/cc/_CCValues.generated.js.map +3 -3
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.d.ts +3 -3
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +14 -14
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
- package/build/cjs/lib/API.d.ts +3 -3
- package/build/cjs/lib/API.js.map +2 -2
- package/build/cjs/lib/CommandClass.d.ts +5 -6
- package/build/cjs/lib/CommandClass.js +45 -45
- package/build/cjs/lib/CommandClass.js.map +3 -3
- package/build/cjs/lib/CommandClassDecorators.d.ts +2 -2
- package/build/cjs/lib/CommandClassDecorators.js +3 -3
- package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
- package/build/cjs/lib/Security2/Extension.d.ts +2 -2
- package/build/cjs/lib/Security2/Extension.js +17 -17
- package/build/cjs/lib/Security2/Extension.js.map +3 -3
- package/build/cjs/lib/SetValueResult.d.ts +1 -1
- package/build/cjs/lib/SetValueResult.js.map +1 -1
- package/build/cjs/lib/Values.d.ts +3 -3
- package/build/cjs/lib/Values.js +6 -6
- package/build/cjs/lib/Values.js.map +2 -2
- package/build/cjs/lib/_Types.d.ts +2 -2
- package/build/cjs/lib/_Types.js +3 -3
- package/build/cjs/lib/_Types.js.map +1 -1
- package/build/cjs/lib/serializers.d.ts +1 -1
- package/build/cjs/lib/serializers.js +5 -5
- package/build/cjs/lib/serializers.js.map +2 -2
- package/build/cjs/lib/traits.d.ts +2 -2
- package/build/cjs/lib/utils.d.ts +2 -2
- package/build/cjs/lib/utils.js +60 -60
- package/build/cjs/lib/utils.js.map +3 -3
- package/build/esm/cc/AlarmSensorCC.d.ts +7 -7
- package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
- package/build/esm/cc/AlarmSensorCC.js +2 -3
- package/build/esm/cc/AlarmSensorCC.js.map +1 -1
- package/build/esm/cc/AssociationCC.d.ts +8 -9
- package/build/esm/cc/AssociationCC.d.ts.map +1 -1
- package/build/esm/cc/AssociationCC.js +2 -2
- package/build/esm/cc/AssociationCC.js.map +1 -1
- package/build/esm/cc/AssociationGroupInfoCC.d.ts +7 -7
- package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
- package/build/esm/cc/AssociationGroupInfoCC.js +2 -3
- package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
- package/build/esm/cc/BarrierOperatorCC.d.ts +8 -8
- package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
- package/build/esm/cc/BarrierOperatorCC.js +2 -3
- package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
- package/build/esm/cc/BasicCC.d.ts +4 -4
- package/build/esm/cc/BasicCC.d.ts.map +1 -1
- package/build/esm/cc/BasicCC.js +2 -3
- package/build/esm/cc/BasicCC.js.map +1 -1
- package/build/esm/cc/BatteryCC.d.ts +6 -8
- package/build/esm/cc/BatteryCC.d.ts.map +1 -1
- package/build/esm/cc/BatteryCC.js +13 -15
- package/build/esm/cc/BatteryCC.js.map +1 -1
- package/build/esm/cc/BinarySensorCC.d.ts +5 -5
- package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
- package/build/esm/cc/BinarySensorCC.js +2 -3
- package/build/esm/cc/BinarySensorCC.js.map +1 -1
- package/build/esm/cc/BinarySwitchCC._validateArgs.js +1 -1
- package/build/esm/cc/BinarySwitchCC._validateArgs.js.map +1 -1
- package/build/esm/cc/BinarySwitchCC.d.ts +6 -6
- package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
- package/build/esm/cc/BinarySwitchCC.js +2 -2
- package/build/esm/cc/BinarySwitchCC.js.map +1 -1
- package/build/esm/cc/CRC16CC.d.ts +3 -3
- package/build/esm/cc/CRC16CC.d.ts.map +1 -1
- package/build/esm/cc/CRC16CC.js +2 -2
- package/build/esm/cc/CRC16CC.js.map +1 -1
- package/build/esm/cc/CentralSceneCC.d.ts +8 -8
- package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
- package/build/esm/cc/CentralSceneCC.js +2 -3
- package/build/esm/cc/CentralSceneCC.js.map +1 -1
- package/build/esm/cc/ClimateControlScheduleCC.d.ts +6 -6
- package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
- package/build/esm/cc/ClimateControlScheduleCC.js +2 -3
- package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
- package/build/esm/cc/ClockCC.d.ts +3 -4
- package/build/esm/cc/ClockCC.d.ts.map +1 -1
- package/build/esm/cc/ClockCC.js +2 -3
- package/build/esm/cc/ClockCC.js.map +1 -1
- package/build/esm/cc/ColorSwitchCC.d.ts +3 -4
- package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
- package/build/esm/cc/ColorSwitchCC.js +2 -4
- package/build/esm/cc/ColorSwitchCC.js.map +1 -1
- package/build/esm/cc/ConfigurationCC.d.ts +3 -3
- package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/ConfigurationCC.js +2 -3
- package/build/esm/cc/ConfigurationCC.js.map +1 -1
- package/build/esm/cc/DeviceResetLocallyCC.d.ts +2 -2
- package/build/esm/cc/DeviceResetLocallyCC.d.ts.map +1 -1
- package/build/esm/cc/DeviceResetLocallyCC.js +1 -1
- package/build/esm/cc/DeviceResetLocallyCC.js.map +1 -1
- package/build/esm/cc/DoorLockCC.d.ts +29 -29
- package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
- package/build/esm/cc/DoorLockCC.js +2 -3
- package/build/esm/cc/DoorLockCC.js.map +1 -1
- package/build/esm/cc/DoorLockLoggingCC.d.ts +4 -4
- package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
- package/build/esm/cc/DoorLockLoggingCC.js +2 -3
- package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
- package/build/esm/cc/EnergyProductionCC.d.ts +2 -3
- package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
- package/build/esm/cc/EnergyProductionCC.js.map +1 -1
- package/build/esm/cc/EntryControlCC.d.ts +8 -8
- package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
- package/build/esm/cc/EntryControlCC.js +2 -3
- package/build/esm/cc/EntryControlCC.js.map +1 -1
- package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts +9 -10
- package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
- package/build/esm/cc/FirmwareUpdateMetaDataCC.js +2 -3
- package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
- package/build/esm/cc/HailCC.js +1 -1
- package/build/esm/cc/HailCC.js.map +1 -1
- package/build/esm/cc/HumidityControlModeCC.d.ts +5 -5
- package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlModeCC.js +2 -3
- package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.d.ts +3 -3
- package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.js +2 -2
- package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
- package/build/esm/cc/HumidityControlSetpointCC.d.ts +6 -6
- package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlSetpointCC.js +2 -3
- package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
- package/build/esm/cc/InclusionControllerCC.d.ts +2 -3
- package/build/esm/cc/InclusionControllerCC.d.ts.map +1 -1
- package/build/esm/cc/InclusionControllerCC.js.map +1 -1
- package/build/esm/cc/IndicatorCC.d.ts +3 -3
- package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
- package/build/esm/cc/IndicatorCC.js +2 -4
- package/build/esm/cc/IndicatorCC.js.map +1 -1
- package/build/esm/cc/IrrigationCC.d.ts +3 -3
- package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
- package/build/esm/cc/IrrigationCC.js +2 -3
- package/build/esm/cc/IrrigationCC.js.map +1 -1
- package/build/esm/cc/LanguageCC.d.ts +5 -6
- package/build/esm/cc/LanguageCC.d.ts.map +1 -1
- package/build/esm/cc/LanguageCC.js +2 -3
- package/build/esm/cc/LanguageCC.js.map +1 -1
- package/build/esm/cc/LockCC.d.ts +4 -4
- package/build/esm/cc/LockCC.d.ts.map +1 -1
- package/build/esm/cc/LockCC.js +2 -2
- package/build/esm/cc/LockCC.js.map +1 -1
- package/build/esm/cc/ManufacturerProprietaryCC.d.ts +4 -3
- package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
- package/build/esm/cc/ManufacturerProprietaryCC.js +5 -3
- package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.d.ts +7 -8
- package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.js +2 -3
- package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
- package/build/esm/cc/MeterCC.d.ts +4 -6
- package/build/esm/cc/MeterCC.d.ts.map +1 -1
- package/build/esm/cc/MeterCC.js +2 -4
- package/build/esm/cc/MeterCC.js.map +1 -1
- package/build/esm/cc/MultiChannelAssociationCC.d.ts +7 -8
- package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
- package/build/esm/cc/MultiChannelAssociationCC.js +2 -3
- package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
- package/build/esm/cc/MultiChannelCC.d.ts +13 -12
- package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
- package/build/esm/cc/MultiChannelCC.js +65 -16
- package/build/esm/cc/MultiChannelCC.js.map +1 -1
- package/build/esm/cc/MultiCommandCC.d.ts +3 -3
- package/build/esm/cc/MultiCommandCC.d.ts.map +1 -1
- package/build/esm/cc/MultiCommandCC.js +2 -2
- package/build/esm/cc/MultiCommandCC.js.map +1 -1
- package/build/esm/cc/MultilevelSensorCC.d.ts +4 -7
- package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
- package/build/esm/cc/MultilevelSensorCC.js +2 -4
- package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
- package/build/esm/cc/MultilevelSwitchCC._validateArgs.js +1 -1
- package/build/esm/cc/MultilevelSwitchCC._validateArgs.js.map +1 -1
- package/build/esm/cc/MultilevelSwitchCC.d.ts +13 -13
- package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
- package/build/esm/cc/MultilevelSwitchCC.js +2 -3
- package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
- package/build/esm/cc/NoOperationCC.js +1 -1
- package/build/esm/cc/NoOperationCC.js.map +1 -1
- package/build/esm/cc/NodeNamingCC.d.ts +5 -5
- package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
- package/build/esm/cc/NodeNamingCC.js +2 -2
- package/build/esm/cc/NodeNamingCC.js.map +1 -1
- package/build/esm/cc/NotificationCC.d.ts +4 -5
- package/build/esm/cc/NotificationCC.d.ts.map +1 -1
- package/build/esm/cc/NotificationCC.js +2 -4
- package/build/esm/cc/NotificationCC.js.map +1 -1
- package/build/esm/cc/PowerlevelCC.d.ts +3 -3
- package/build/esm/cc/PowerlevelCC.d.ts.map +1 -1
- package/build/esm/cc/PowerlevelCC.js +2 -3
- package/build/esm/cc/PowerlevelCC.js.map +1 -1
- package/build/esm/cc/ProtectionCC._validateArgs.js +1 -1
- package/build/esm/cc/ProtectionCC._validateArgs.js.map +1 -1
- package/build/esm/cc/ProtectionCC.d.ts +11 -11
- package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
- package/build/esm/cc/ProtectionCC.js +2 -3
- package/build/esm/cc/ProtectionCC.js.map +1 -1
- package/build/esm/cc/SceneActivationCC._validateArgs.js +1 -1
- package/build/esm/cc/SceneActivationCC._validateArgs.js.map +1 -1
- package/build/esm/cc/SceneActivationCC.d.ts +5 -6
- package/build/esm/cc/SceneActivationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneActivationCC.js +2 -2
- package/build/esm/cc/SceneActivationCC.js.map +1 -1
- package/build/esm/cc/SceneActuatorConfigurationCC._validateArgs.js +1 -1
- package/build/esm/cc/SceneActuatorConfigurationCC._validateArgs.js.map +1 -1
- package/build/esm/cc/SceneActuatorConfigurationCC.d.ts +5 -5
- package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneActuatorConfigurationCC.js +2 -3
- package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC._validateArgs.js +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC._validateArgs.js.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.d.ts +6 -6
- package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.js +2 -3
- package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
- package/build/esm/cc/ScheduleEntryLockCC.d.ts +2 -3
- package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
- package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
- package/build/esm/cc/Security2CC.d.ts +3 -4
- package/build/esm/cc/Security2CC.d.ts.map +1 -1
- package/build/esm/cc/Security2CC.js +2 -4
- package/build/esm/cc/Security2CC.js.map +1 -1
- package/build/esm/cc/SecurityCC.d.ts +3 -4
- package/build/esm/cc/SecurityCC.d.ts.map +1 -1
- package/build/esm/cc/SecurityCC.js +1 -2
- package/build/esm/cc/SecurityCC.js.map +1 -1
- package/build/esm/cc/SoundSwitchCC.d.ts +7 -7
- package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
- package/build/esm/cc/SoundSwitchCC.js +2 -3
- package/build/esm/cc/SoundSwitchCC.js.map +1 -1
- package/build/esm/cc/SupervisionCC.d.ts +4 -4
- package/build/esm/cc/SupervisionCC.d.ts.map +1 -1
- package/build/esm/cc/SupervisionCC.js +2 -3
- package/build/esm/cc/SupervisionCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.d.ts +6 -6
- package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.js +2 -3
- package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanStateCC.d.ts +3 -3
- package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatFanStateCC.js +2 -2
- package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
- package/build/esm/cc/ThermostatModeCC.d.ts +6 -6
- package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatModeCC.js +2 -3
- package/build/esm/cc/ThermostatModeCC.js.map +1 -1
- package/build/esm/cc/ThermostatOperatingStateCC.d.ts +3 -4
- package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatOperatingStateCC.js +2 -2
- package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
- package/build/esm/cc/ThermostatSetbackCC.d.ts +3 -3
- package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatSetbackCC.js +2 -3
- package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
- package/build/esm/cc/ThermostatSetpointCC.d.ts +6 -6
- package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatSetpointCC.js +2 -3
- package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
- package/build/esm/cc/TimeCC.d.ts +3 -4
- package/build/esm/cc/TimeCC.d.ts.map +1 -1
- package/build/esm/cc/TimeCC.js +1 -2
- package/build/esm/cc/TimeCC.js.map +1 -1
- package/build/esm/cc/TimeParametersCC.d.ts +3 -4
- package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
- package/build/esm/cc/TimeParametersCC.js +1 -1
- package/build/esm/cc/TimeParametersCC.js.map +1 -1
- package/build/esm/cc/TransportServiceCC.d.ts +3 -3
- package/build/esm/cc/TransportServiceCC.d.ts.map +1 -1
- package/build/esm/cc/TransportServiceCC.js +2 -3
- package/build/esm/cc/TransportServiceCC.js.map +1 -1
- package/build/esm/cc/UserCodeCC.d.ts +19 -19
- package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
- package/build/esm/cc/UserCodeCC.js +2 -3
- package/build/esm/cc/UserCodeCC.js.map +1 -1
- package/build/esm/cc/VersionCC.d.ts +17 -17
- package/build/esm/cc/VersionCC.d.ts.map +1 -1
- package/build/esm/cc/VersionCC.js +2 -3
- package/build/esm/cc/VersionCC.js.map +1 -1
- package/build/esm/cc/WakeUpCC.d.ts +6 -6
- package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
- package/build/esm/cc/WakeUpCC.js +2 -3
- package/build/esm/cc/WakeUpCC.js.map +1 -1
- package/build/esm/cc/WindowCoveringCC.d.ts +3 -4
- package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
- package/build/esm/cc/WindowCoveringCC.js +1 -2
- package/build/esm/cc/WindowCoveringCC.js.map +1 -1
- package/build/esm/cc/ZWavePlusCC.d.ts +8 -8
- package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
- package/build/esm/cc/ZWavePlusCC.js +2 -3
- package/build/esm/cc/ZWavePlusCC.js.map +1 -1
- package/build/esm/cc/ZWaveProtocolCC.d.ts +2 -2
- package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -1
- package/build/esm/cc/ZWaveProtocolCC.js +1 -1
- package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
- package/build/esm/cc/_CCValues.generated.d.ts +2 -0
- package/build/esm/cc/_CCValues.generated.d.ts.map +1 -1
- package/build/esm/cc/_CCValues.generated.js +5 -4
- package/build/esm/cc/_CCValues.generated.js.map +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts +3 -3
- package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
- package/build/esm/lib/API.d.ts +3 -3
- package/build/esm/lib/API.d.ts.map +1 -1
- package/build/esm/lib/API.js.map +1 -1
- package/build/esm/lib/CommandClass.d.ts +5 -6
- package/build/esm/lib/CommandClass.d.ts.map +1 -1
- package/build/esm/lib/CommandClass.js +2 -2
- package/build/esm/lib/CommandClass.js.map +1 -1
- package/build/esm/lib/CommandClassDecorators.d.ts +2 -2
- package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
- package/build/esm/lib/CommandClassDecorators.js +1 -1
- package/build/esm/lib/CommandClassDecorators.js.map +1 -1
- package/build/esm/lib/Security2/Extension.d.ts +2 -2
- package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
- package/build/esm/lib/Security2/Extension.js +2 -2
- package/build/esm/lib/Security2/Extension.js.map +1 -1
- package/build/esm/lib/SetValueResult.d.ts +1 -1
- package/build/esm/lib/SetValueResult.d.ts.map +1 -1
- package/build/esm/lib/Values.d.ts +3 -3
- package/build/esm/lib/Values.d.ts.map +1 -1
- package/build/esm/lib/Values.js +1 -1
- package/build/esm/lib/Values.js.map +1 -1
- package/build/esm/lib/_Types.d.ts +2 -2
- package/build/esm/lib/_Types.d.ts.map +1 -1
- package/build/esm/lib/_Types.js +1 -1
- package/build/esm/lib/_Types.js.map +1 -1
- package/build/esm/lib/serializers.d.ts +1 -1
- package/build/esm/lib/serializers.d.ts.map +1 -1
- package/build/esm/lib/serializers.js +1 -1
- package/build/esm/lib/serializers.js.map +1 -1
- package/build/esm/lib/traits.d.ts +2 -2
- package/build/esm/lib/traits.d.ts.map +1 -1
- package/build/esm/lib/utils.d.ts +2 -2
- package/build/esm/lib/utils.d.ts.map +1 -1
- package/build/esm/lib/utils.js +2 -2
- package/build/esm/lib/utils.js.map +1 -1
- package/package.json +6 -6
|
@@ -42,9 +42,8 @@ __export(MultilevelSwitchCC_exports, {
|
|
|
42
42
|
});
|
|
43
43
|
module.exports = __toCommonJS(MultilevelSwitchCC_exports);
|
|
44
44
|
var __validateArgs = __toESM(require("./MultilevelSwitchCC._validateArgs.js"), 1);
|
|
45
|
-
var
|
|
46
|
-
var
|
|
47
|
-
var import_safe3 = require("@zwave-js/shared/safe");
|
|
45
|
+
var import_core = require("@zwave-js/core");
|
|
46
|
+
var import_shared = require("@zwave-js/shared");
|
|
48
47
|
var import_API = require("../lib/API.js");
|
|
49
48
|
var import_CCValueUtils = require("../lib/CCValueUtils.js");
|
|
50
49
|
var import_CommandClass = require("../lib/CommandClass.js");
|
|
@@ -94,7 +93,7 @@ var __esDecorate = function(ctor, descriptorIn, decorators, contextIn, initializ
|
|
|
94
93
|
};
|
|
95
94
|
const { validateArgs_MultilevelSwitchCCAPI_set, validateArgs_MultilevelSwitchCCAPI_startLevelChange } = __validateArgs;
|
|
96
95
|
let MultilevelSwitchCCAPI = (() => {
|
|
97
|
-
let _classDecorators = [(0, import_CommandClassDecorators.API)(
|
|
96
|
+
let _classDecorators = [(0, import_CommandClassDecorators.API)(import_core.CommandClasses["Multilevel Switch"])];
|
|
98
97
|
let _classDescriptor;
|
|
99
98
|
let _classExtraInitializers = [];
|
|
100
99
|
let _classThis;
|
|
@@ -141,7 +140,7 @@ let MultilevelSwitchCCAPI = (() => {
|
|
|
141
140
|
});
|
|
142
141
|
const response = await this.host.sendCommand(cc, this.commandOptions);
|
|
143
142
|
if (response) {
|
|
144
|
-
return (0,
|
|
143
|
+
return (0, import_shared.pick)(response, ["currentValue", "targetValue", "duration"]);
|
|
145
144
|
}
|
|
146
145
|
}
|
|
147
146
|
/**
|
|
@@ -196,7 +195,7 @@ let MultilevelSwitchCCAPI = (() => {
|
|
|
196
195
|
if (typeof value !== "number") {
|
|
197
196
|
(0, import_API.throwWrongValueType)(this.ccId, property, "number", typeof value);
|
|
198
197
|
}
|
|
199
|
-
const duration =
|
|
198
|
+
const duration = import_core.Duration.from(options?.transitionDuration);
|
|
200
199
|
return this.set(value, duration);
|
|
201
200
|
} else if (import_CCValueUtils.multilevelSwitchTypeProperties.includes(property)) {
|
|
202
201
|
if (typeof value !== "boolean") {
|
|
@@ -205,7 +204,7 @@ let MultilevelSwitchCCAPI = (() => {
|
|
|
205
204
|
if (value) {
|
|
206
205
|
const direction = import_CCValueUtils.multilevelSwitchTypeProperties.indexOf(property) % 2 === 0 ? "down" : "up";
|
|
207
206
|
const startLevel = this.tryGetValueDB()?.getValue(import_CCValues_generated.MultilevelSwitchCCValues.currentValue.endpoint(this.endpoint.index));
|
|
208
|
-
const duration =
|
|
207
|
+
const duration = import_core.Duration.from(options?.transitionDuration);
|
|
209
208
|
return this.startLevelChange({
|
|
210
209
|
direction,
|
|
211
210
|
ignoreStartLevel: true,
|
|
@@ -226,7 +225,7 @@ let MultilevelSwitchCCAPI = (() => {
|
|
|
226
225
|
value = 255;
|
|
227
226
|
}
|
|
228
227
|
if (property === "targetValue") {
|
|
229
|
-
const duration =
|
|
228
|
+
const duration = import_core.Duration.from(options?.transitionDuration);
|
|
230
229
|
const currentValueValueId = import_CCValues_generated.MultilevelSwitchCCValues.currentValue.endpoint(this.endpoint.index);
|
|
231
230
|
return {
|
|
232
231
|
// Multilevel Switch commands may take some time to be executed.
|
|
@@ -288,7 +287,7 @@ let MultilevelSwitchCCAPI = (() => {
|
|
|
288
287
|
return MultilevelSwitchCCAPI2 = _classThis;
|
|
289
288
|
})();
|
|
290
289
|
let MultilevelSwitchCC = (() => {
|
|
291
|
-
let _classDecorators = [(0, import_CommandClassDecorators.commandClass)(
|
|
290
|
+
let _classDecorators = [(0, import_CommandClassDecorators.commandClass)(import_core.CommandClasses["Multilevel Switch"]), (0, import_CommandClassDecorators.implementedVersion)(4), (0, import_CommandClassDecorators.ccValues)(import_CCValues_generated.MultilevelSwitchCCValues)];
|
|
292
291
|
let _classDescriptor;
|
|
293
292
|
let _classExtraInitializers = [];
|
|
294
293
|
let _classThis;
|
|
@@ -310,8 +309,8 @@ let MultilevelSwitchCC = (() => {
|
|
|
310
309
|
async interview(ctx) {
|
|
311
310
|
const node = this.getNode(ctx);
|
|
312
311
|
const endpoint = this.getEndpoint(ctx);
|
|
313
|
-
const api = import_API.CCAPI.create(
|
|
314
|
-
priority:
|
|
312
|
+
const api = import_API.CCAPI.create(import_core.CommandClasses["Multilevel Switch"], ctx, endpoint).withOptions({
|
|
313
|
+
priority: import_core.MessagePriority.NodeQuery
|
|
315
314
|
});
|
|
316
315
|
ctx.logNode(node.id, {
|
|
317
316
|
endpoint: this.endpointIndex,
|
|
@@ -328,7 +327,7 @@ let MultilevelSwitchCC = (() => {
|
|
|
328
327
|
if (switchType != void 0) {
|
|
329
328
|
ctx.logNode(node.id, {
|
|
330
329
|
endpoint: this.endpointIndex,
|
|
331
|
-
message: `has switch type ${(0,
|
|
330
|
+
message: `has switch type ${(0, import_shared.getEnumMemberName)(import_Types.SwitchType, switchType)}`,
|
|
332
331
|
direction: "inbound"
|
|
333
332
|
});
|
|
334
333
|
}
|
|
@@ -341,8 +340,8 @@ let MultilevelSwitchCC = (() => {
|
|
|
341
340
|
async refreshValues(ctx) {
|
|
342
341
|
const node = this.getNode(ctx);
|
|
343
342
|
const endpoint = this.getEndpoint(ctx);
|
|
344
|
-
const api = import_API.CCAPI.create(
|
|
345
|
-
priority:
|
|
343
|
+
const api = import_API.CCAPI.create(import_core.CommandClasses["Multilevel Switch"], ctx, endpoint).withOptions({
|
|
344
|
+
priority: import_core.MessagePriority.NodeQuery
|
|
346
345
|
});
|
|
347
346
|
ctx.logNode(node.id, {
|
|
348
347
|
endpoint: this.endpointIndex,
|
|
@@ -385,14 +384,14 @@ let MultilevelSwitchCCSet = (() => {
|
|
|
385
384
|
constructor(options) {
|
|
386
385
|
super(options);
|
|
387
386
|
this.targetValue = options.targetValue;
|
|
388
|
-
this.duration =
|
|
387
|
+
this.duration = import_core.Duration.from(options.duration);
|
|
389
388
|
}
|
|
390
389
|
static from(raw, ctx) {
|
|
391
|
-
(0,
|
|
390
|
+
(0, import_core.validatePayload)(raw.payload.length >= 1);
|
|
392
391
|
const targetValue = raw.payload[0];
|
|
393
392
|
let duration;
|
|
394
393
|
if (raw.payload.length >= 2) {
|
|
395
|
-
duration =
|
|
394
|
+
duration = import_core.Duration.parseReport(raw.payload[1]);
|
|
396
395
|
}
|
|
397
396
|
return new this({
|
|
398
397
|
nodeId: ctx.sourceNodeId,
|
|
@@ -403,9 +402,9 @@ let MultilevelSwitchCCSet = (() => {
|
|
|
403
402
|
targetValue;
|
|
404
403
|
duration;
|
|
405
404
|
serialize(ctx) {
|
|
406
|
-
this.payload =
|
|
405
|
+
this.payload = import_shared.Bytes.from([
|
|
407
406
|
this.targetValue,
|
|
408
|
-
(this.duration ??
|
|
407
|
+
(this.duration ?? import_core.Duration.default()).serializeSet()
|
|
409
408
|
]);
|
|
410
409
|
const ccVersion = (0, import_CommandClass.getEffectiveCCVersion)(ctx, this);
|
|
411
410
|
if (ccVersion < 2 && ctx.getDeviceConfig?.(this.nodeId)?.compat?.encodeCCsUsingTargetVersion) {
|
|
@@ -452,19 +451,19 @@ let MultilevelSwitchCCReport = (() => {
|
|
|
452
451
|
super(options);
|
|
453
452
|
this.currentValue = options.currentValue;
|
|
454
453
|
this.targetValue = options.targetValue;
|
|
455
|
-
this.duration =
|
|
454
|
+
this.duration = import_core.Duration.from(options.duration);
|
|
456
455
|
}
|
|
457
456
|
static from(raw, ctx) {
|
|
458
|
-
(0,
|
|
457
|
+
(0, import_core.validatePayload)(raw.payload.length >= 1);
|
|
459
458
|
const currentValue = (
|
|
460
459
|
// 0xff is a legacy value for 100% (99)
|
|
461
|
-
raw.payload[0] === 255 ? 99 : (0,
|
|
460
|
+
raw.payload[0] === 255 ? 99 : (0, import_core.parseMaybeNumber)(raw.payload[0])
|
|
462
461
|
);
|
|
463
462
|
let targetValue;
|
|
464
463
|
let duration;
|
|
465
464
|
if (raw.payload.length >= 3) {
|
|
466
|
-
targetValue = (0,
|
|
467
|
-
duration =
|
|
465
|
+
targetValue = (0, import_core.parseMaybeNumber)(raw.payload[1]);
|
|
466
|
+
duration = import_core.Duration.parseReport(raw.payload[2]);
|
|
468
467
|
}
|
|
469
468
|
return new this({
|
|
470
469
|
nodeId: ctx.sourceNodeId,
|
|
@@ -477,19 +476,19 @@ let MultilevelSwitchCCReport = (() => {
|
|
|
477
476
|
duration;
|
|
478
477
|
currentValue;
|
|
479
478
|
serialize(ctx) {
|
|
480
|
-
this.payload =
|
|
479
|
+
this.payload = import_shared.Bytes.from([
|
|
481
480
|
this.currentValue ?? 254,
|
|
482
481
|
this.targetValue ?? 254,
|
|
483
|
-
(this.duration ??
|
|
482
|
+
(this.duration ?? import_core.Duration.default()).serializeReport()
|
|
484
483
|
]);
|
|
485
484
|
return super.serialize(ctx);
|
|
486
485
|
}
|
|
487
486
|
toLogEntry(ctx) {
|
|
488
487
|
const message = {
|
|
489
|
-
"current value": (0,
|
|
488
|
+
"current value": (0, import_core.maybeUnknownToString)(this.currentValue)
|
|
490
489
|
};
|
|
491
|
-
if (this.targetValue !==
|
|
492
|
-
message["target value"] = (0,
|
|
490
|
+
if (this.targetValue !== import_core.NOT_KNOWN && this.duration) {
|
|
491
|
+
message["target value"] = (0, import_core.maybeUnknownToString)(this.targetValue);
|
|
493
492
|
message.duration = this.duration.toString();
|
|
494
493
|
}
|
|
495
494
|
return {
|
|
@@ -545,19 +544,19 @@ let MultilevelSwitchCCStartLevelChange = (() => {
|
|
|
545
544
|
}
|
|
546
545
|
constructor(options) {
|
|
547
546
|
super(options);
|
|
548
|
-
this.duration =
|
|
547
|
+
this.duration = import_core.Duration.from(options.duration);
|
|
549
548
|
this.ignoreStartLevel = options.ignoreStartLevel;
|
|
550
549
|
this.startLevel = options.startLevel ?? 0;
|
|
551
550
|
this.direction = options.direction;
|
|
552
551
|
}
|
|
553
552
|
static from(raw, ctx) {
|
|
554
|
-
(0,
|
|
553
|
+
(0, import_core.validatePayload)(raw.payload.length >= 2);
|
|
555
554
|
const ignoreStartLevel = !!((raw.payload[0] & 32) >>> 5);
|
|
556
555
|
const direction = (raw.payload[0] & 64) >>> 6 ? "down" : "up";
|
|
557
556
|
const startLevel = raw.payload[1];
|
|
558
557
|
let duration;
|
|
559
558
|
if (raw.payload.length >= 3) {
|
|
560
|
-
duration =
|
|
559
|
+
duration = import_core.Duration.parseSet(raw.payload[2]);
|
|
561
560
|
}
|
|
562
561
|
return new this({
|
|
563
562
|
nodeId: ctx.sourceNodeId,
|
|
@@ -573,10 +572,10 @@ let MultilevelSwitchCCStartLevelChange = (() => {
|
|
|
573
572
|
direction;
|
|
574
573
|
serialize(ctx) {
|
|
575
574
|
const controlByte = import_Types.LevelChangeDirection[this.direction] << 6 | (this.ignoreStartLevel ? 32 : 0);
|
|
576
|
-
this.payload =
|
|
575
|
+
this.payload = import_shared.Bytes.from([
|
|
577
576
|
controlByte,
|
|
578
577
|
this.startLevel,
|
|
579
|
-
(this.duration ??
|
|
578
|
+
(this.duration ?? import_core.Duration.default()).serializeSet()
|
|
580
579
|
]);
|
|
581
580
|
const ccVersion = (0, import_CommandClass.getEffectiveCCVersion)(ctx, this);
|
|
582
581
|
if (ccVersion < 2 && ctx.getDeviceConfig?.(this.nodeId)?.compat?.encodeCCsUsingTargetVersion) {
|
|
@@ -648,7 +647,7 @@ let MultilevelSwitchCCSupportedReport = (() => {
|
|
|
648
647
|
this.switchType = options.switchType;
|
|
649
648
|
}
|
|
650
649
|
static from(raw, ctx) {
|
|
651
|
-
(0,
|
|
650
|
+
(0, import_core.validatePayload)(raw.payload.length >= 1);
|
|
652
651
|
const switchType = raw.payload[0] & 31;
|
|
653
652
|
return new this({
|
|
654
653
|
nodeId: ctx.sourceNodeId,
|
|
@@ -664,14 +663,14 @@ let MultilevelSwitchCCSupportedReport = (() => {
|
|
|
664
663
|
return true;
|
|
665
664
|
}
|
|
666
665
|
serialize(ctx) {
|
|
667
|
-
this.payload =
|
|
666
|
+
this.payload = import_shared.Bytes.from([this.switchType & 31]);
|
|
668
667
|
return super.serialize(ctx);
|
|
669
668
|
}
|
|
670
669
|
toLogEntry(ctx) {
|
|
671
670
|
return {
|
|
672
671
|
...super.toLogEntry(ctx),
|
|
673
672
|
message: {
|
|
674
|
-
"switch type": (0,
|
|
673
|
+
"switch type": (0, import_shared.getEnumMemberName)(import_Types.SwitchType, this.switchType)
|
|
675
674
|
}
|
|
676
675
|
};
|
|
677
676
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cc/MultilevelSwitchCC.ts"],
|
|
4
|
-
"sourcesContent": ["import { type CCEncodingContext, type CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\tDuration,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MaybeUnknown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\tNOT_KNOWN,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tmaybeUnknownToString,\n\tparseMaybeNumber,\n\tvalidatePayload,\n} from \"@zwave-js/core/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { getEnumMemberName, pick } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\tSET_VALUE_HOOKS,\n\ttype SetValueImplementation,\n\ttype SetValueImplementationHooksFactory,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\tmultilevelSwitchTypeProperties,\n\tmultilevelSwitchTypeToActions,\n} from \"../lib/CCValueUtils.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n\ttype RefreshValuesContext,\n\tgetEffectiveCCVersion,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\tLevelChangeDirection,\n\tMultilevelSwitchCommand,\n\tSwitchType,\n} from \"../lib/_Types.js\";\n\nexport const MultilevelSwitchCCValues = V.defineCCValues(\n\tCommandClasses[\"Multilevel Switch\"],\n\t{\n\t\t...V.staticProperty(\n\t\t\t\"currentValue\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyLevel,\n\t\t\t\tlabel: \"Current value\",\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\n\t\t\t\"targetValue\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.Level,\n\t\t\t\tlabel: \"Target value\",\n\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\n\t\t\t\"duration\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyDuration,\n\t\t\t\tlabel: \"Remaining duration\",\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\n\t\t\t\"restorePrevious\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\tlabel: \"Restore previous value\",\n\t\t\t\tstates: {\n\t\t\t\t\ttrue: \"Restore\",\n\t\t\t\t},\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticPropertyWithName(\n\t\t\t\"compatEvent\",\n\t\t\t\"event\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyUInt8,\n\t\t\t\tlabel: \"Event value\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tstateful: false,\n\t\t\t\tautoCreate: (applHost, endpoint) =>\n\t\t\t\t\t!!applHost.getDeviceConfig?.(endpoint.nodeId)?.compat\n\t\t\t\t\t\t?.treatMultilevelSwitchSetAsEvent,\n\t\t\t},\n\t\t),\n\t\t...V.staticProperty(\"switchType\", undefined, { internal: true }),\n\t\t...V.staticProperty(\"superviseStartStopLevelChange\", undefined, {\n\t\t\tinternal: true,\n\t\t\tsupportsEndpoints: false,\n\t\t}),\n\t\t...V.dynamicPropertyWithName(\n\t\t\t\"levelChangeUp\",\n\t\t\t// This is called \"up\" here, but the actual property name will depend on\n\t\t\t// the given switch type\n\t\t\t(switchType: SwitchType) => {\n\t\t\t\tconst switchTypeName = getEnumMemberName(\n\t\t\t\t\tSwitchType,\n\t\t\t\t\tswitchType,\n\t\t\t\t);\n\t\t\t\tconst [, up] = multilevelSwitchTypeToActions(switchTypeName);\n\t\t\t\treturn up;\n\t\t\t},\n\t\t\t({ property }) =>\n\t\t\t\ttypeof property === \"string\"\n\t\t\t\t&& multilevelSwitchTypeProperties.indexOf(property) % 2 === 1,\n\t\t\t(switchType: SwitchType) => {\n\t\t\t\tconst switchTypeName = getEnumMemberName(\n\t\t\t\t\tSwitchType,\n\t\t\t\t\tswitchType,\n\t\t\t\t);\n\t\t\t\tconst [, up] = multilevelSwitchTypeToActions(switchTypeName);\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\t\tlabel: `Perform a level change (${up})`,\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t\tstates: {\n\t\t\t\t\t\ttrue: \"Start\",\n\t\t\t\t\t\tfalse: \"Stop\",\n\t\t\t\t\t},\n\t\t\t\t\tccSpecific: { switchType },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\t\t...V.dynamicPropertyWithName(\n\t\t\t\"levelChangeDown\",\n\t\t\t// This is called \"down\" here, but the actual property name will depend on\n\t\t\t// the given switch type\n\t\t\t(switchType: SwitchType) => {\n\t\t\t\tconst switchTypeName = getEnumMemberName(\n\t\t\t\t\tSwitchType,\n\t\t\t\t\tswitchType,\n\t\t\t\t);\n\t\t\t\tconst [down] = multilevelSwitchTypeToActions(switchTypeName);\n\t\t\t\treturn down;\n\t\t\t},\n\t\t\t({ property }) =>\n\t\t\t\ttypeof property === \"string\"\n\t\t\t\t&& multilevelSwitchTypeProperties.indexOf(property) % 2 === 0,\n\t\t\t(switchType: SwitchType) => {\n\t\t\t\tconst switchTypeName = getEnumMemberName(\n\t\t\t\t\tSwitchType,\n\t\t\t\t\tswitchType,\n\t\t\t\t);\n\t\t\t\tconst [down] = multilevelSwitchTypeToActions(switchTypeName);\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\t\tlabel: `Perform a level change (${down})`,\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t\tstates: {\n\t\t\t\t\t\ttrue: \"Start\",\n\t\t\t\t\t\tfalse: \"Stop\",\n\t\t\t\t\t},\n\t\t\t\t\tccSpecific: { switchType },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\t},\n);\n\n@API(CommandClasses[\"Multilevel Switch\"])\nexport class MultilevelSwitchCCAPI extends CCAPI {\n\tpublic supportsCommand(\n\t\tcmd: MultilevelSwitchCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase MultilevelSwitchCommand.Get:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase MultilevelSwitchCommand.Set:\n\t\t\tcase MultilevelSwitchCommand.StartLevelChange:\n\t\t\tcase MultilevelSwitchCommand.StopLevelChange:\n\t\t\t\treturn true; // This is mandatory\n\t\t\tcase MultilevelSwitchCommand.SupportedGet:\n\t\t\t\treturn this.version >= 3 && this.isSinglecast();\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async get() {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSwitchCommand,\n\t\t\tMultilevelSwitchCommand.Get,\n\t\t);\n\n\t\tconst cc = new MultilevelSwitchCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultilevelSwitchCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"currentValue\", \"targetValue\", \"duration\"]);\n\t\t}\n\t}\n\n\t/**\n\t * Sets the switch to a new value\n\t * @param targetValue The new target value for the switch\n\t * @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\t * @returns A promise indicating whether the command was completed\n\t */\n\t@validateArgs()\n\tpublic async set(\n\t\ttargetValue: number,\n\t\tduration?: Duration | string,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSwitchCommand,\n\t\t\tMultilevelSwitchCommand.Set,\n\t\t);\n\n\t\tconst cc = new MultilevelSwitchCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\ttargetValue,\n\t\t\tduration,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async startLevelChange(\n\t\toptions: MultilevelSwitchCCStartLevelChangeOptions,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSwitchCommand,\n\t\t\tMultilevelSwitchCommand.StartLevelChange,\n\t\t);\n\n\t\tconst cc = new MultilevelSwitchCCStartLevelChange({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\tpublic async stopLevelChange(): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSwitchCommand,\n\t\t\tMultilevelSwitchCommand.StopLevelChange,\n\t\t);\n\n\t\tconst cc = new MultilevelSwitchCCStopLevelChange({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\tpublic async getSupported(): Promise<MaybeNotKnown<SwitchType>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSwitchCommand,\n\t\t\tMultilevelSwitchCommand.SupportedGet,\n\t\t);\n\n\t\tconst cc = new MultilevelSwitchCCSupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultilevelSwitchCCSupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.switchType;\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(\n\t\t\tthis: MultilevelSwitchCCAPI,\n\t\t\t{ property },\n\t\t\tvalue,\n\t\t\toptions,\n\t\t) {\n\t\t\t// Enable restoring the previous non-zero value\n\t\t\tif (property === \"restorePrevious\") {\n\t\t\t\tproperty = \"targetValue\";\n\t\t\t\tvalue = 255;\n\t\t\t}\n\n\t\t\tif (property === \"targetValue\") {\n\t\t\t\tif (typeof value !== \"number\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"number\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\t\t\t\treturn this.set(value, duration);\n\t\t\t} else if (\n\t\t\t\tmultilevelSwitchTypeProperties.includes(property as string)\n\t\t\t) {\n\t\t\t\t// Since the switch only supports one of the switch types, we would\n\t\t\t\t// need to check if the correct one is used. But since the names are\n\t\t\t\t// purely cosmetic, we just accept all of them\n\t\t\t\tif (typeof value !== \"boolean\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"number\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (value) {\n\t\t\t\t\t// The property names are organized so that positive motions are\n\t\t\t\t\t// at odd indices and negative motions at even indices\n\t\t\t\t\tconst direction = multilevelSwitchTypeProperties.indexOf(\n\t\t\t\t\t\t\t\t\tproperty as string,\n\t\t\t\t\t\t\t\t) % 2\n\t\t\t\t\t\t\t=== 0\n\t\t\t\t\t\t? \"down\"\n\t\t\t\t\t\t: \"up\";\n\t\t\t\t\t// Singlecast only: Try to retrieve the current value to use as the start level,\n\t\t\t\t\t// even if the target node is going to ignore it. There might\n\t\t\t\t\t// be some bugged devices that ignore the ignore start level flag.\n\t\t\t\t\tconst startLevel = this.tryGetValueDB()?.getValue<\n\t\t\t\t\t\tMaybeUnknown<number>\n\t\t\t\t\t>(\n\t\t\t\t\t\tMultilevelSwitchCCValues.currentValue.endpoint(\n\t\t\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\t// And perform the level change\n\t\t\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\t\t\t\t\treturn this.startLevelChange({\n\t\t\t\t\t\tdirection,\n\t\t\t\t\t\tignoreStartLevel: true,\n\t\t\t\t\t\tstartLevel: typeof startLevel === \"number\"\n\t\t\t\t\t\t\t? startLevel\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\tduration,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn this.stopLevelChange();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tprotected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = (\n\t\t{ property },\n\t\tvalue,\n\t\toptions,\n\t) => {\n\t\t// Enable restoring the previous non-zero value\n\t\tif (property === \"restorePrevious\") {\n\t\t\tproperty = \"targetValue\";\n\t\t\tvalue = 255;\n\t\t}\n\n\t\tif (property === \"targetValue\") {\n\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\t\t\tconst currentValueValueId = MultilevelSwitchCCValues.currentValue\n\t\t\t\t.endpoint(\n\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t// Multilevel Switch commands may take some time to be executed.\n\t\t\t\t// Therefore we try to supervise the command execution and delay the\n\t\t\t\t// optimistic update until the final result is received.\n\t\t\t\tsupervisionDelayedUpdates: true,\n\t\t\t\tsupervisionOnSuccess: async () => {\n\t\t\t\t\t// Only update currentValue for valid target values\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"number\"\n\t\t\t\t\t\t&& value >= 0\n\t\t\t\t\t\t&& value <= 99\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.tryGetValueDB()?.setValue(\n\t\t\t\t\t\t\tcurrentValueValueId,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (value === 255) {\n\t\t\t\t\t\t// We don't know the status now, so refresh the current value\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.get();\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsupervisionOnFailure: async () => {\n\t\t\t\t\t// The transition failed, so now we don't know the status - refresh the current value\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.get();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// ignore\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\toptimisticallyUpdateRelatedValues: (\n\t\t\t\t\t_supervisedAndSuccessful,\n\t\t\t\t) => {\n\t\t\t\t\t// Only update currentValue for valid target values\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"number\"\n\t\t\t\t\t\t&& value >= 0\n\t\t\t\t\t\t&& value <= 99\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (this.isSinglecast()) {\n\t\t\t\t\t\t\tthis.tryGetValueDB()?.setValue(\n\t\t\t\t\t\t\t\tcurrentValueValueId,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (this.isMulticast()) {\n\t\t\t\t\t\t\t// Figure out which nodes were affected by this command\n\t\t\t\t\t\t\tconst affectedNodes = this.endpoint.node\n\t\t\t\t\t\t\t\t.physicalNodes.filter(\n\t\t\t\t\t\t\t\t\t(node) =>\n\t\t\t\t\t\t\t\t\t\tnode\n\t\t\t\t\t\t\t\t\t\t\t.getEndpoint(this.endpoint.index)\n\t\t\t\t\t\t\t\t\t\t\t?.supportsCC(this.ccId),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// and optimistically update the currentValue\n\t\t\t\t\t\t\tfor (const node of affectedNodes) {\n\t\t\t\t\t\t\t\tthis.host\n\t\t\t\t\t\t\t\t\t.tryGetValueDB(node.id)\n\t\t\t\t\t\t\t\t\t?.setValue(currentValueValueId, value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tforceVerifyChanges: () => {\n\t\t\t\t\t// If we don't know the actual value, we need to verify the change, regardless of the supervision result\n\t\t\t\t\treturn value === 255;\n\t\t\t\t},\n\t\t\t\tverifyChanges: () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.isSinglecast()\n\t\t\t\t\t\t// We generally don't want to poll for multicasts because of how much traffic it can cause\n\t\t\t\t\t\t// However, when setting the value 255 (ON), we don't know the actual state\n\t\t\t\t\t\t|| (this.isMulticast() && value === 255)\n\t\t\t\t\t) {\n\t\t\t\t\t\t// We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n\t\t\t\t\t\t(this as this).schedulePoll(\n\t\t\t\t\t\t\tcurrentValueValueId,\n\t\t\t\t\t\t\tvalue === 255 ? undefined : value,\n\t\t\t\t\t\t\t{ duration },\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t};\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: MultilevelSwitchCCAPI, { property }) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"currentValue\":\n\t\t\t\tcase \"targetValue\":\n\t\t\t\tcase \"duration\":\n\t\t\t\t\treturn (await this.get())?.[property];\n\t\t\t\tdefault:\n\t\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n}\n\n@commandClass(CommandClasses[\"Multilevel Switch\"])\n@implementedVersion(4)\n@ccValues(MultilevelSwitchCCValues)\nexport class MultilevelSwitchCC extends CommandClass {\n\tdeclare ccCommand: MultilevelSwitchCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Multilevel Switch\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tif (api.version >= 3) {\n\t\t\t// Find out which kind of switch this is\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"requesting switch type...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst switchType = await api.getSupported();\n\t\t\tif (switchType != undefined) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `has switch type ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tSwitchType,\n\t\t\t\t\t\t\tswitchType,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\t// requesting the switch type automatically creates the up/down actions\n\t\t\t// We need to do this manually for V1 and V2\n\t\t\tthis.createMetadataForLevelChangeActions(ctx);\n\t\t}\n\n\t\tawait this.refreshValues(ctx);\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Multilevel Switch\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"requesting current switch state...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tawait api.get();\n\t}\n\n\tpublic setMappedBasicValue(\n\t\tctx: GetValueDB,\n\t\tvalue: number,\n\t): boolean {\n\t\tthis.setValue(ctx, MultilevelSwitchCCValues.currentValue, value);\n\t\treturn true;\n\t}\n\n\tprotected createMetadataForLevelChangeActions(\n\t\tctx: GetValueDB,\n\t\t// SDS13781: The Primary Switch Type SHOULD be 0x02 (Up/Down)\n\t\tswitchType: SwitchType = SwitchType[\"Down/Up\"],\n\t): void {\n\t\tthis.ensureMetadata(\n\t\t\tctx,\n\t\t\tMultilevelSwitchCCValues.levelChangeUp(switchType),\n\t\t);\n\t\tthis.ensureMetadata(\n\t\t\tctx,\n\t\t\tMultilevelSwitchCCValues.levelChangeDown(switchType),\n\t\t);\n\t}\n}\n\n// @publicAPI\nexport interface MultilevelSwitchCCSetOptions {\n\ttargetValue: number;\n\t// Version >= 2:\n\tduration?: Duration | string;\n}\n\n@CCCommand(MultilevelSwitchCommand.Set)\n@useSupervision()\nexport class MultilevelSwitchCCSet extends MultilevelSwitchCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSwitchCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.targetValue = options.targetValue;\n\t\tthis.duration = Duration.from(options.duration);\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSwitchCCSet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst targetValue = raw.payload[0];\n\t\tlet duration: Duration | undefined;\n\n\t\tif (raw.payload.length >= 2) {\n\t\t\tduration = Duration.parseReport(raw.payload[1]);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttargetValue,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic targetValue: number;\n\tpublic duration: Duration | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.targetValue,\n\t\t\t(this.duration ?? Duration.default()).serializeSet(),\n\t\t]);\n\n\t\tconst ccVersion = getEffectiveCCVersion(ctx, this);\n\t\tif (\n\t\t\tccVersion < 2 && ctx.getDeviceConfig?.(\n\t\t\t\tthis.nodeId as number,\n\t\t\t)?.compat?.encodeCCsUsingTargetVersion\n\t\t) {\n\t\t\t// When forcing CC version 1, only include the target value\n\t\t\tthis.payload = this.payload.subarray(0, 1);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"target value\": this.targetValue,\n\t\t};\n\t\tif (this.duration) {\n\t\t\tmessage.duration = this.duration.toString();\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultilevelSwitchCCReportOptions {\n\tcurrentValue?: MaybeUnknown<number>;\n\ttargetValue?: MaybeUnknown<number>;\n\tduration?: Duration | string;\n}\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\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSwitchCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.currentValue = options.currentValue;\n\t\tthis.targetValue = options.targetValue;\n\t\tthis.duration = Duration.from(options.duration);\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSwitchCCReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst currentValue: MaybeUnknown<number> | undefined =\n\t\t\t// 0xff is a legacy value for 100% (99)\n\t\t\traw.payload[0] === 0xff\n\t\t\t\t? 99\n\t\t\t\t: parseMaybeNumber(raw.payload[0]);\n\t\tlet targetValue: MaybeUnknown<number> | undefined;\n\t\tlet duration: Duration | undefined;\n\n\t\tif (raw.payload.length >= 3) {\n\t\t\ttargetValue = parseMaybeNumber(raw.payload[1]);\n\t\t\tduration = Duration.parseReport(raw.payload[2]);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tcurrentValue,\n\t\t\ttargetValue,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic targetValue: MaybeUnknown<number> | undefined;\n\n\tpublic duration: Duration | undefined;\n\n\tpublic currentValue: MaybeUnknown<number> | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.currentValue ?? 0xfe,\n\t\t\tthis.targetValue ?? 0xfe,\n\t\t\t(this.duration ?? Duration.default()).serializeReport(),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"current value\": maybeUnknownToString(this.currentValue),\n\t\t};\n\t\tif (this.targetValue !== NOT_KNOWN && this.duration) {\n\t\t\tmessage[\"target value\"] = maybeUnknownToString(this.targetValue);\n\t\t\tmessage.duration = this.duration.toString();\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(MultilevelSwitchCommand.Get)\n@expectedCCResponse(MultilevelSwitchCCReport)\nexport class MultilevelSwitchCCGet extends MultilevelSwitchCC {}\n\n// @publicAPI\nexport type MultilevelSwitchCCStartLevelChangeOptions =\n\t& {\n\t\tdirection: keyof typeof LevelChangeDirection;\n\t}\n\t& (\n\t\t| {\n\t\t\tignoreStartLevel: true;\n\t\t\tstartLevel?: number;\n\t\t}\n\t\t| {\n\t\t\tignoreStartLevel: false;\n\t\t\tstartLevel: number;\n\t\t}\n\t)\n\t& {\n\t\t// Version >= 2:\n\t\tduration?: Duration | string;\n\t};\n\n@CCCommand(MultilevelSwitchCommand.StartLevelChange)\n@useSupervision()\nexport class MultilevelSwitchCCStartLevelChange extends MultilevelSwitchCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSwitchCCStartLevelChangeOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.duration = Duration.from(options.duration);\n\t\tthis.ignoreStartLevel = options.ignoreStartLevel;\n\t\tthis.startLevel = options.startLevel ?? 0;\n\t\tthis.direction = options.direction;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSwitchCCStartLevelChange {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst ignoreStartLevel = !!((raw.payload[0] & 0b0_0_1_00000) >>> 5);\n\t\tconst direction = ((raw.payload[0] & 0b0_1_0_00000) >>> 6)\n\t\t\t? \"down\"\n\t\t\t: \"up\";\n\t\tconst startLevel = raw.payload[1];\n\t\tlet duration: Duration | undefined;\n\t\tif (raw.payload.length >= 3) {\n\t\t\tduration = Duration.parseSet(raw.payload[2]);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tignoreStartLevel,\n\t\t\tdirection,\n\t\t\tstartLevel,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic duration: Duration | undefined;\n\tpublic startLevel: number;\n\tpublic ignoreStartLevel: boolean;\n\tpublic direction: keyof typeof LevelChangeDirection;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst controlByte = (LevelChangeDirection[this.direction] << 6)\n\t\t\t| (this.ignoreStartLevel ? 0b0010_0000 : 0);\n\t\tthis.payload = Bytes.from([\n\t\t\tcontrolByte,\n\t\t\tthis.startLevel,\n\t\t\t(this.duration ?? Duration.default()).serializeSet(),\n\t\t]);\n\n\t\tconst ccVersion = getEffectiveCCVersion(ctx, this);\n\t\tif (\n\t\t\tccVersion < 2 && ctx.getDeviceConfig?.(\n\t\t\t\tthis.nodeId as number,\n\t\t\t)?.compat?.encodeCCsUsingTargetVersion\n\t\t) {\n\t\t\t// When forcing CC version 1, omit the duration byte\n\t\t\tthis.payload = this.payload.subarray(0, -1);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\tstartLevel: `${this.startLevel}${\n\t\t\t\tthis.ignoreStartLevel ? \" (ignored)\" : \"\"\n\t\t\t}`,\n\t\t\tdirection: this.direction,\n\t\t};\n\t\tif (this.duration) {\n\t\t\tmessage.duration = this.duration.toString();\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(MultilevelSwitchCommand.StopLevelChange)\n@useSupervision()\nexport class MultilevelSwitchCCStopLevelChange extends MultilevelSwitchCC {}\n\n// @publicAPI\nexport interface MultilevelSwitchCCSupportedReportOptions {\n\tswitchType: SwitchType;\n}\n\n@CCCommand(MultilevelSwitchCommand.SupportedReport)\n@ccValueProperty(\"switchType\", MultilevelSwitchCCValues.switchType)\nexport class MultilevelSwitchCCSupportedReport extends MultilevelSwitchCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSwitchCCSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.switchType = options.switchType;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSwitchCCSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst switchType: SwitchType = raw.payload[0] & 0b11111;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tswitchType,\n\t\t});\n\t}\n\n\t// This is the primary switch type. We're not supporting secondary switch types\n\n\tpublic readonly switchType: SwitchType;\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\t\tthis.createMetadataForLevelChangeActions(ctx, this.switchType);\n\t\treturn true;\n\t}\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.switchType & 0b11111]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"switch type\": getEnumMemberName(SwitchType, this.switchType),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(MultilevelSwitchCommand.SupportedGet)\n@expectedCCResponse(MultilevelSwitchCCSupportedReport)\nexport class MultilevelSwitchCCSupportedGet extends MultilevelSwitchCC {}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": [
|
|
4
|
+
"sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\tDuration,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MaybeUnknown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\tNOT_KNOWN,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tmaybeUnknownToString,\n\tparseMaybeNumber,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\tSET_VALUE_HOOKS,\n\ttype SetValueImplementation,\n\ttype SetValueImplementationHooksFactory,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\tmultilevelSwitchTypeProperties,\n\tmultilevelSwitchTypeToActions,\n} from \"../lib/CCValueUtils.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n\ttype RefreshValuesContext,\n\tgetEffectiveCCVersion,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\tLevelChangeDirection,\n\tMultilevelSwitchCommand,\n\tSwitchType,\n} from \"../lib/_Types.js\";\n\nexport const MultilevelSwitchCCValues = V.defineCCValues(\n\tCommandClasses[\"Multilevel Switch\"],\n\t{\n\t\t...V.staticProperty(\n\t\t\t\"currentValue\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyLevel,\n\t\t\t\tlabel: \"Current value\",\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\n\t\t\t\"targetValue\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.Level,\n\t\t\t\tlabel: \"Target value\",\n\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\n\t\t\t\"duration\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyDuration,\n\t\t\t\tlabel: \"Remaining duration\",\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\n\t\t\t\"restorePrevious\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\tlabel: \"Restore previous value\",\n\t\t\t\tstates: {\n\t\t\t\t\ttrue: \"Restore\",\n\t\t\t\t},\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticPropertyWithName(\n\t\t\t\"compatEvent\",\n\t\t\t\"event\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyUInt8,\n\t\t\t\tlabel: \"Event value\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tstateful: false,\n\t\t\t\tautoCreate: (applHost, endpoint) =>\n\t\t\t\t\t!!applHost.getDeviceConfig?.(endpoint.nodeId)?.compat\n\t\t\t\t\t\t?.treatMultilevelSwitchSetAsEvent,\n\t\t\t},\n\t\t),\n\t\t...V.staticProperty(\"switchType\", undefined, { internal: true }),\n\t\t...V.staticProperty(\"superviseStartStopLevelChange\", undefined, {\n\t\t\tinternal: true,\n\t\t\tsupportsEndpoints: false,\n\t\t}),\n\t\t...V.dynamicPropertyWithName(\n\t\t\t\"levelChangeUp\",\n\t\t\t// This is called \"up\" here, but the actual property name will depend on\n\t\t\t// the given switch type\n\t\t\t(switchType: SwitchType) => {\n\t\t\t\tconst switchTypeName = getEnumMemberName(\n\t\t\t\t\tSwitchType,\n\t\t\t\t\tswitchType,\n\t\t\t\t);\n\t\t\t\tconst [, up] = multilevelSwitchTypeToActions(switchTypeName);\n\t\t\t\treturn up;\n\t\t\t},\n\t\t\t({ property }) =>\n\t\t\t\ttypeof property === \"string\"\n\t\t\t\t&& multilevelSwitchTypeProperties.indexOf(property) % 2 === 1,\n\t\t\t(switchType: SwitchType) => {\n\t\t\t\tconst switchTypeName = getEnumMemberName(\n\t\t\t\t\tSwitchType,\n\t\t\t\t\tswitchType,\n\t\t\t\t);\n\t\t\t\tconst [, up] = multilevelSwitchTypeToActions(switchTypeName);\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\t\tlabel: `Perform a level change (${up})`,\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t\tstates: {\n\t\t\t\t\t\ttrue: \"Start\",\n\t\t\t\t\t\tfalse: \"Stop\",\n\t\t\t\t\t},\n\t\t\t\t\tccSpecific: { switchType },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\t\t...V.dynamicPropertyWithName(\n\t\t\t\"levelChangeDown\",\n\t\t\t// This is called \"down\" here, but the actual property name will depend on\n\t\t\t// the given switch type\n\t\t\t(switchType: SwitchType) => {\n\t\t\t\tconst switchTypeName = getEnumMemberName(\n\t\t\t\t\tSwitchType,\n\t\t\t\t\tswitchType,\n\t\t\t\t);\n\t\t\t\tconst [down] = multilevelSwitchTypeToActions(switchTypeName);\n\t\t\t\treturn down;\n\t\t\t},\n\t\t\t({ property }) =>\n\t\t\t\ttypeof property === \"string\"\n\t\t\t\t&& multilevelSwitchTypeProperties.indexOf(property) % 2 === 0,\n\t\t\t(switchType: SwitchType) => {\n\t\t\t\tconst switchTypeName = getEnumMemberName(\n\t\t\t\t\tSwitchType,\n\t\t\t\t\tswitchType,\n\t\t\t\t);\n\t\t\t\tconst [down] = multilevelSwitchTypeToActions(switchTypeName);\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\t\tlabel: `Perform a level change (${down})`,\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t\tstates: {\n\t\t\t\t\t\ttrue: \"Start\",\n\t\t\t\t\t\tfalse: \"Stop\",\n\t\t\t\t\t},\n\t\t\t\t\tccSpecific: { switchType },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\t},\n);\n\n@API(CommandClasses[\"Multilevel Switch\"])\nexport class MultilevelSwitchCCAPI extends CCAPI {\n\tpublic supportsCommand(\n\t\tcmd: MultilevelSwitchCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase MultilevelSwitchCommand.Get:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase MultilevelSwitchCommand.Set:\n\t\t\tcase MultilevelSwitchCommand.StartLevelChange:\n\t\t\tcase MultilevelSwitchCommand.StopLevelChange:\n\t\t\t\treturn true; // This is mandatory\n\t\t\tcase MultilevelSwitchCommand.SupportedGet:\n\t\t\t\treturn this.version >= 3 && this.isSinglecast();\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async get() {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSwitchCommand,\n\t\t\tMultilevelSwitchCommand.Get,\n\t\t);\n\n\t\tconst cc = new MultilevelSwitchCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultilevelSwitchCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"currentValue\", \"targetValue\", \"duration\"]);\n\t\t}\n\t}\n\n\t/**\n\t * Sets the switch to a new value\n\t * @param targetValue The new target value for the switch\n\t * @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\t * @returns A promise indicating whether the command was completed\n\t */\n\t@validateArgs()\n\tpublic async set(\n\t\ttargetValue: number,\n\t\tduration?: Duration | string,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSwitchCommand,\n\t\t\tMultilevelSwitchCommand.Set,\n\t\t);\n\n\t\tconst cc = new MultilevelSwitchCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\ttargetValue,\n\t\t\tduration,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async startLevelChange(\n\t\toptions: MultilevelSwitchCCStartLevelChangeOptions,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSwitchCommand,\n\t\t\tMultilevelSwitchCommand.StartLevelChange,\n\t\t);\n\n\t\tconst cc = new MultilevelSwitchCCStartLevelChange({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\tpublic async stopLevelChange(): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSwitchCommand,\n\t\t\tMultilevelSwitchCommand.StopLevelChange,\n\t\t);\n\n\t\tconst cc = new MultilevelSwitchCCStopLevelChange({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\tpublic async getSupported(): Promise<MaybeNotKnown<SwitchType>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSwitchCommand,\n\t\t\tMultilevelSwitchCommand.SupportedGet,\n\t\t);\n\n\t\tconst cc = new MultilevelSwitchCCSupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultilevelSwitchCCSupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.switchType;\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(\n\t\t\tthis: MultilevelSwitchCCAPI,\n\t\t\t{ property },\n\t\t\tvalue,\n\t\t\toptions,\n\t\t) {\n\t\t\t// Enable restoring the previous non-zero value\n\t\t\tif (property === \"restorePrevious\") {\n\t\t\t\tproperty = \"targetValue\";\n\t\t\t\tvalue = 255;\n\t\t\t}\n\n\t\t\tif (property === \"targetValue\") {\n\t\t\t\tif (typeof value !== \"number\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"number\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\t\t\t\treturn this.set(value, duration);\n\t\t\t} else if (\n\t\t\t\tmultilevelSwitchTypeProperties.includes(property as string)\n\t\t\t) {\n\t\t\t\t// Since the switch only supports one of the switch types, we would\n\t\t\t\t// need to check if the correct one is used. But since the names are\n\t\t\t\t// purely cosmetic, we just accept all of them\n\t\t\t\tif (typeof value !== \"boolean\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"number\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (value) {\n\t\t\t\t\t// The property names are organized so that positive motions are\n\t\t\t\t\t// at odd indices and negative motions at even indices\n\t\t\t\t\tconst direction = multilevelSwitchTypeProperties.indexOf(\n\t\t\t\t\t\t\t\t\tproperty as string,\n\t\t\t\t\t\t\t\t) % 2\n\t\t\t\t\t\t\t=== 0\n\t\t\t\t\t\t? \"down\"\n\t\t\t\t\t\t: \"up\";\n\t\t\t\t\t// Singlecast only: Try to retrieve the current value to use as the start level,\n\t\t\t\t\t// even if the target node is going to ignore it. There might\n\t\t\t\t\t// be some bugged devices that ignore the ignore start level flag.\n\t\t\t\t\tconst startLevel = this.tryGetValueDB()?.getValue<\n\t\t\t\t\t\tMaybeUnknown<number>\n\t\t\t\t\t>(\n\t\t\t\t\t\tMultilevelSwitchCCValues.currentValue.endpoint(\n\t\t\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\t// And perform the level change\n\t\t\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\t\t\t\t\treturn this.startLevelChange({\n\t\t\t\t\t\tdirection,\n\t\t\t\t\t\tignoreStartLevel: true,\n\t\t\t\t\t\tstartLevel: typeof startLevel === \"number\"\n\t\t\t\t\t\t\t? startLevel\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\tduration,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn this.stopLevelChange();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tprotected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = (\n\t\t{ property },\n\t\tvalue,\n\t\toptions,\n\t) => {\n\t\t// Enable restoring the previous non-zero value\n\t\tif (property === \"restorePrevious\") {\n\t\t\tproperty = \"targetValue\";\n\t\t\tvalue = 255;\n\t\t}\n\n\t\tif (property === \"targetValue\") {\n\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\t\t\tconst currentValueValueId = MultilevelSwitchCCValues.currentValue\n\t\t\t\t.endpoint(\n\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t// Multilevel Switch commands may take some time to be executed.\n\t\t\t\t// Therefore we try to supervise the command execution and delay the\n\t\t\t\t// optimistic update until the final result is received.\n\t\t\t\tsupervisionDelayedUpdates: true,\n\t\t\t\tsupervisionOnSuccess: async () => {\n\t\t\t\t\t// Only update currentValue for valid target values\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"number\"\n\t\t\t\t\t\t&& value >= 0\n\t\t\t\t\t\t&& value <= 99\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.tryGetValueDB()?.setValue(\n\t\t\t\t\t\t\tcurrentValueValueId,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (value === 255) {\n\t\t\t\t\t\t// We don't know the status now, so refresh the current value\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.get();\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsupervisionOnFailure: async () => {\n\t\t\t\t\t// The transition failed, so now we don't know the status - refresh the current value\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.get();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// ignore\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\toptimisticallyUpdateRelatedValues: (\n\t\t\t\t\t_supervisedAndSuccessful,\n\t\t\t\t) => {\n\t\t\t\t\t// Only update currentValue for valid target values\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"number\"\n\t\t\t\t\t\t&& value >= 0\n\t\t\t\t\t\t&& value <= 99\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (this.isSinglecast()) {\n\t\t\t\t\t\t\tthis.tryGetValueDB()?.setValue(\n\t\t\t\t\t\t\t\tcurrentValueValueId,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (this.isMulticast()) {\n\t\t\t\t\t\t\t// Figure out which nodes were affected by this command\n\t\t\t\t\t\t\tconst affectedNodes = this.endpoint.node\n\t\t\t\t\t\t\t\t.physicalNodes.filter(\n\t\t\t\t\t\t\t\t\t(node) =>\n\t\t\t\t\t\t\t\t\t\tnode\n\t\t\t\t\t\t\t\t\t\t\t.getEndpoint(this.endpoint.index)\n\t\t\t\t\t\t\t\t\t\t\t?.supportsCC(this.ccId),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// and optimistically update the currentValue\n\t\t\t\t\t\t\tfor (const node of affectedNodes) {\n\t\t\t\t\t\t\t\tthis.host\n\t\t\t\t\t\t\t\t\t.tryGetValueDB(node.id)\n\t\t\t\t\t\t\t\t\t?.setValue(currentValueValueId, value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tforceVerifyChanges: () => {\n\t\t\t\t\t// If we don't know the actual value, we need to verify the change, regardless of the supervision result\n\t\t\t\t\treturn value === 255;\n\t\t\t\t},\n\t\t\t\tverifyChanges: () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.isSinglecast()\n\t\t\t\t\t\t// We generally don't want to poll for multicasts because of how much traffic it can cause\n\t\t\t\t\t\t// However, when setting the value 255 (ON), we don't know the actual state\n\t\t\t\t\t\t|| (this.isMulticast() && value === 255)\n\t\t\t\t\t) {\n\t\t\t\t\t\t// We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n\t\t\t\t\t\t(this as this).schedulePoll(\n\t\t\t\t\t\t\tcurrentValueValueId,\n\t\t\t\t\t\t\tvalue === 255 ? undefined : value,\n\t\t\t\t\t\t\t{ duration },\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t};\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: MultilevelSwitchCCAPI, { property }) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"currentValue\":\n\t\t\t\tcase \"targetValue\":\n\t\t\t\tcase \"duration\":\n\t\t\t\t\treturn (await this.get())?.[property];\n\t\t\t\tdefault:\n\t\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n}\n\n@commandClass(CommandClasses[\"Multilevel Switch\"])\n@implementedVersion(4)\n@ccValues(MultilevelSwitchCCValues)\nexport class MultilevelSwitchCC extends CommandClass {\n\tdeclare ccCommand: MultilevelSwitchCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Multilevel Switch\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tif (api.version >= 3) {\n\t\t\t// Find out which kind of switch this is\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"requesting switch type...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst switchType = await api.getSupported();\n\t\t\tif (switchType != undefined) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `has switch type ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tSwitchType,\n\t\t\t\t\t\t\tswitchType,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\t// requesting the switch type automatically creates the up/down actions\n\t\t\t// We need to do this manually for V1 and V2\n\t\t\tthis.createMetadataForLevelChangeActions(ctx);\n\t\t}\n\n\t\tawait this.refreshValues(ctx);\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Multilevel Switch\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"requesting current switch state...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tawait api.get();\n\t}\n\n\tpublic setMappedBasicValue(\n\t\tctx: GetValueDB,\n\t\tvalue: number,\n\t): boolean {\n\t\tthis.setValue(ctx, MultilevelSwitchCCValues.currentValue, value);\n\t\treturn true;\n\t}\n\n\tprotected createMetadataForLevelChangeActions(\n\t\tctx: GetValueDB,\n\t\t// SDS13781: The Primary Switch Type SHOULD be 0x02 (Up/Down)\n\t\tswitchType: SwitchType = SwitchType[\"Down/Up\"],\n\t): void {\n\t\tthis.ensureMetadata(\n\t\t\tctx,\n\t\t\tMultilevelSwitchCCValues.levelChangeUp(switchType),\n\t\t);\n\t\tthis.ensureMetadata(\n\t\t\tctx,\n\t\t\tMultilevelSwitchCCValues.levelChangeDown(switchType),\n\t\t);\n\t}\n}\n\n// @publicAPI\nexport interface MultilevelSwitchCCSetOptions {\n\ttargetValue: number;\n\t// Version >= 2:\n\tduration?: Duration | string;\n}\n\n@CCCommand(MultilevelSwitchCommand.Set)\n@useSupervision()\nexport class MultilevelSwitchCCSet extends MultilevelSwitchCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSwitchCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.targetValue = options.targetValue;\n\t\tthis.duration = Duration.from(options.duration);\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSwitchCCSet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst targetValue = raw.payload[0];\n\t\tlet duration: Duration | undefined;\n\n\t\tif (raw.payload.length >= 2) {\n\t\t\tduration = Duration.parseReport(raw.payload[1]);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttargetValue,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic targetValue: number;\n\tpublic duration: Duration | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.targetValue,\n\t\t\t(this.duration ?? Duration.default()).serializeSet(),\n\t\t]);\n\n\t\tconst ccVersion = getEffectiveCCVersion(ctx, this);\n\t\tif (\n\t\t\tccVersion < 2 && ctx.getDeviceConfig?.(\n\t\t\t\tthis.nodeId as number,\n\t\t\t)?.compat?.encodeCCsUsingTargetVersion\n\t\t) {\n\t\t\t// When forcing CC version 1, only include the target value\n\t\t\tthis.payload = this.payload.subarray(0, 1);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"target value\": this.targetValue,\n\t\t};\n\t\tif (this.duration) {\n\t\t\tmessage.duration = this.duration.toString();\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultilevelSwitchCCReportOptions {\n\tcurrentValue?: MaybeUnknown<number>;\n\ttargetValue?: MaybeUnknown<number>;\n\tduration?: Duration | string;\n}\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\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSwitchCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.currentValue = options.currentValue;\n\t\tthis.targetValue = options.targetValue;\n\t\tthis.duration = Duration.from(options.duration);\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSwitchCCReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst currentValue: MaybeUnknown<number> | undefined =\n\t\t\t// 0xff is a legacy value for 100% (99)\n\t\t\traw.payload[0] === 0xff\n\t\t\t\t? 99\n\t\t\t\t: parseMaybeNumber(raw.payload[0]);\n\t\tlet targetValue: MaybeUnknown<number> | undefined;\n\t\tlet duration: Duration | undefined;\n\n\t\tif (raw.payload.length >= 3) {\n\t\t\ttargetValue = parseMaybeNumber(raw.payload[1]);\n\t\t\tduration = Duration.parseReport(raw.payload[2]);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tcurrentValue,\n\t\t\ttargetValue,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic targetValue: MaybeUnknown<number> | undefined;\n\n\tpublic duration: Duration | undefined;\n\n\tpublic currentValue: MaybeUnknown<number> | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.currentValue ?? 0xfe,\n\t\t\tthis.targetValue ?? 0xfe,\n\t\t\t(this.duration ?? Duration.default()).serializeReport(),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"current value\": maybeUnknownToString(this.currentValue),\n\t\t};\n\t\tif (this.targetValue !== NOT_KNOWN && this.duration) {\n\t\t\tmessage[\"target value\"] = maybeUnknownToString(this.targetValue);\n\t\t\tmessage.duration = this.duration.toString();\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(MultilevelSwitchCommand.Get)\n@expectedCCResponse(MultilevelSwitchCCReport)\nexport class MultilevelSwitchCCGet extends MultilevelSwitchCC {}\n\n// @publicAPI\nexport type MultilevelSwitchCCStartLevelChangeOptions =\n\t& {\n\t\tdirection: keyof typeof LevelChangeDirection;\n\t}\n\t& (\n\t\t| {\n\t\t\tignoreStartLevel: true;\n\t\t\tstartLevel?: number;\n\t\t}\n\t\t| {\n\t\t\tignoreStartLevel: false;\n\t\t\tstartLevel: number;\n\t\t}\n\t)\n\t& {\n\t\t// Version >= 2:\n\t\tduration?: Duration | string;\n\t};\n\n@CCCommand(MultilevelSwitchCommand.StartLevelChange)\n@useSupervision()\nexport class MultilevelSwitchCCStartLevelChange extends MultilevelSwitchCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSwitchCCStartLevelChangeOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.duration = Duration.from(options.duration);\n\t\tthis.ignoreStartLevel = options.ignoreStartLevel;\n\t\tthis.startLevel = options.startLevel ?? 0;\n\t\tthis.direction = options.direction;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSwitchCCStartLevelChange {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst ignoreStartLevel = !!((raw.payload[0] & 0b0_0_1_00000) >>> 5);\n\t\tconst direction = ((raw.payload[0] & 0b0_1_0_00000) >>> 6)\n\t\t\t? \"down\"\n\t\t\t: \"up\";\n\t\tconst startLevel = raw.payload[1];\n\t\tlet duration: Duration | undefined;\n\t\tif (raw.payload.length >= 3) {\n\t\t\tduration = Duration.parseSet(raw.payload[2]);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tignoreStartLevel,\n\t\t\tdirection,\n\t\t\tstartLevel,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic duration: Duration | undefined;\n\tpublic startLevel: number;\n\tpublic ignoreStartLevel: boolean;\n\tpublic direction: keyof typeof LevelChangeDirection;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst controlByte = (LevelChangeDirection[this.direction] << 6)\n\t\t\t| (this.ignoreStartLevel ? 0b0010_0000 : 0);\n\t\tthis.payload = Bytes.from([\n\t\t\tcontrolByte,\n\t\t\tthis.startLevel,\n\t\t\t(this.duration ?? Duration.default()).serializeSet(),\n\t\t]);\n\n\t\tconst ccVersion = getEffectiveCCVersion(ctx, this);\n\t\tif (\n\t\t\tccVersion < 2 && ctx.getDeviceConfig?.(\n\t\t\t\tthis.nodeId as number,\n\t\t\t)?.compat?.encodeCCsUsingTargetVersion\n\t\t) {\n\t\t\t// When forcing CC version 1, omit the duration byte\n\t\t\tthis.payload = this.payload.subarray(0, -1);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\tstartLevel: `${this.startLevel}${\n\t\t\t\tthis.ignoreStartLevel ? \" (ignored)\" : \"\"\n\t\t\t}`,\n\t\t\tdirection: this.direction,\n\t\t};\n\t\tif (this.duration) {\n\t\t\tmessage.duration = this.duration.toString();\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(MultilevelSwitchCommand.StopLevelChange)\n@useSupervision()\nexport class MultilevelSwitchCCStopLevelChange extends MultilevelSwitchCC {}\n\n// @publicAPI\nexport interface MultilevelSwitchCCSupportedReportOptions {\n\tswitchType: SwitchType;\n}\n\n@CCCommand(MultilevelSwitchCommand.SupportedReport)\n@ccValueProperty(\"switchType\", MultilevelSwitchCCValues.switchType)\nexport class MultilevelSwitchCCSupportedReport extends MultilevelSwitchCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSwitchCCSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.switchType = options.switchType;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSwitchCCSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst switchType: SwitchType = raw.payload[0] & 0b11111;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tswitchType,\n\t\t});\n\t}\n\n\t// This is the primary switch type. We're not supporting secondary switch types\n\n\tpublic readonly switchType: SwitchType;\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\t\tthis.createMetadataForLevelChangeActions(ctx, this.switchType);\n\t\treturn true;\n\t}\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.switchType & 0b11111]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"switch type\": getEnumMemberName(SwitchType, this.switchType),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(MultilevelSwitchCommand.SupportedGet)\n@expectedCCResponse(MultilevelSwitchCCSupportedReport)\nexport class MultilevelSwitchCCSupportedGet extends MultilevelSwitchCC {}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kBAgBO;AACP,oBAA+C;AAE/C,iBAUO;AACP,0BAGO;AACP,0BAOO;AACP,oCASO;AACP,oBAAkB;AAClB,mBAIO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8HM,yBAAqB,MAAA;8BADjC,mCAAI,2BAAe,mBAAmB,CAAC,CAAC;;;;oBACE;;;;6CAAA,YAAK;WAAA;;;;;;;;AA8C/C,mBAAA,MAAA,MAAA,iBAAA,EAAA,MAAA,UAAA,MAAA,OAAA,QAAA,OAAA,SAAA,OAAA,QAAA,EAAA,KAAA,gCAAA,SAAA,KAAA,QAAA,KAAA,gCAAA,IAAa,KAAb,OAAgB,GAAA,UAAA,UAAA,GAAA,MAAA,0BAAA;AAmBhB,mBAAA,MAAA,MAAA,8BAAA,EAAA,MAAA,UAAA,MAAA,oBAAA,QAAA,OAAA,SAAA,OAAA,QAAA,EAAA,KAAA,gCAAA,sBAAA,KAAA,QAAA,KAAA,gCAAA,IAAa,kBAAb,OAA6B,GAAA,UAAA,UAAA,GAAA,MAAA,0BAAA;AAjE9B,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IACL,gBACN,KAA4B;AAE5B,cAAQ,KAAK;QACZ,KAAK,qCAAwB;AAC5B,iBAAO,KAAK,aAAY;QACzB,KAAK,qCAAwB;QAC7B,KAAK,qCAAwB;QAC7B,KAAK,qCAAwB;AAC5B,iBAAO;;QACR,KAAK,qCAAwB;AAC5B,iBAAO,KAAK,WAAW,KAAK,KAAK,aAAY;MAC/C;AACA,aAAO,MAAM,gBAAgB,GAAG;IACjC;;IAGO,MAAM,MAAG;AACf,WAAK,sBACJ,sCACA,qCAAwB,GAAG;AAG5B,YAAM,KAAK,IAAI,sBAAsB;QACpC,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;OAC7B;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAGhC,IACA,KAAK,cAAc;AAEpB,UAAI,UAAU;AACb,mBAAO,oBAAK,UAAU,CAAC,gBAAgB,eAAe,UAAU,CAAC;MAClE;IACD;;;;;;;IASO,MAAM,IACZ,aACA,UAA4B;AAE5B,WAAK,sBACJ,sCACA,qCAAwB,GAAG;AAG5B,YAAM,KAAK,IAAI,sBAAsB;QACpC,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;QAC7B;QACA;OACA;AACD,aAAO,KAAK,KAAK,YAAY,IAAI,KAAK,cAAc;IACrD;IAGO,MAAM,iBACZ,SAAkD;AAElD,WAAK,sBACJ,sCACA,qCAAwB,gBAAgB;AAGzC,YAAM,KAAK,IAAI,mCAAmC;QACjD,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;QAC7B,GAAG;OACH;AAED,aAAO,KAAK,KAAK,YAAY,IAAI,KAAK,cAAc;IACrD;IAEO,MAAM,kBAAe;AAC3B,WAAK,sBACJ,sCACA,qCAAwB,eAAe;AAGxC,YAAM,KAAK,IAAI,kCAAkC;QAChD,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;OAC7B;AAED,aAAO,KAAK,KAAK,YAAY,IAAI,KAAK,cAAc;IACrD;IAEO,MAAM,eAAY;AACxB,WAAK,sBACJ,sCACA,qCAAwB,YAAY;AAGrC,YAAM,KAAK,IAAI,+BAA+B;QAC7C,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;OAC7B;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAGhC,IACA,KAAK,cAAc;AAEpB,aAAO,UAAU;IAClB;IAEA,MAAuB,kBAAA,CAtEtB,uCAAA,CAAc,GAAA,+BAAA,CAmBd,oDAAA,CAAc,GAmDS,qBAAS,IAAC;AACjC,aAAO,eAEN,EAAE,SAAQ,GACV,OACA,SAAO;AAGP,YAAI,aAAa,mBAAmB;AACnC,qBAAW;AACX,kBAAQ;QACT;AAEA,YAAI,aAAa,eAAe;AAC/B,cAAI,OAAO,UAAU,UAAU;AAC9B,gDACC,KAAK,MACL,UACA,UACA,OAAO,KAAK;UAEd;AACA,gBAAM,WAAW,qBAAS,KAAK,SAAS,kBAAkB;AAC1D,iBAAO,KAAK,IAAI,OAAO,QAAQ;QAChC,WACC,mDAA+B,SAAS,QAAkB,GACzD;AAID,cAAI,OAAO,UAAU,WAAW;AAC/B,gDACC,KAAK,MACL,UACA,UACA,OAAO,KAAK;UAEd;AACA,cAAI,OAAO;AAGV,kBAAM,YAAY,mDAA+B,QAC7C,QAAkB,IACf,MACD,IACH,SACA;AAIH,kBAAM,aAAa,KAAK,cAAa,GAAI,SAGxC,mDAAyB,aAAa,SACrC,KAAK,SAAS,KAAK,CACnB;AAGF,kBAAM,WAAW,qBAAS,KAAK,SAAS,kBAAkB;AAC1D,mBAAO,KAAK,iBAAiB;cAC5B;cACA,kBAAkB;cAClB,YAAY,OAAO,eAAe,WAC/B,aACA;cACH;aACA;UACF,OAAO;AACN,mBAAO,KAAK,gBAAe;UAC5B;QACD,OAAO;AACN,mDAAyB,KAAK,MAAM,QAAQ;QAC7C;MACD;IACD;IAEU,CAAC,0BAAe,KA/Ld,kBAAA,MAAA,0BAAA,GA+LsD,CACjE,EAAE,SAAQ,GACV,OACA,YACG;AAEH,UAAI,aAAa,mBAAmB;AACnC,mBAAW;AACX,gBAAQ;MACT;AAEA,UAAI,aAAa,eAAe;AAC/B,cAAM,WAAW,qBAAS,KAAK,SAAS,kBAAkB;AAC1D,cAAM,sBAAsB,mDAAyB,aACnD,SACA,KAAK,SAAS,KAAK;AAGrB,eAAO;;;;UAIN,2BAA2B;UAC3B,sBAAsB,mCAAW;AAEhC,gBACC,OAAO,UAAU,YACd,SAAS,KACT,SAAS,IACX;AACD,mBAAK,cAAa,GAAI,SACrB,qBACA,KAAK;YAEP,WAAW,UAAU,KAAK;AAEzB,kBAAI;AACH,sBAAM,KAAK,IAAG;cACf,QAAQ;cAER;YACD;UACD,GAnBsB;UAoBtB,sBAAsB,mCAAW;AAEhC,gBAAI;AACH,oBAAM,KAAK,IAAG;YACf,QAAQ;YAER;UACD,GAPsB;UAQtB,mCAAmC,wBAClC,6BACG;AAEH,gBACC,OAAO,UAAU,YACd,SAAS,KACT,SAAS,IACX;AACD,kBAAI,KAAK,aAAY,GAAI;AACxB,qBAAK,cAAa,GAAI,SACrB,qBACA,KAAK;cAEP,WAAW,KAAK,YAAW,GAAI;AAE9B,sBAAM,gBAAgB,KAAK,SAAS,KAClC,cAAc,OACd,CAAC,SACA,KACE,YAAY,KAAK,SAAS,KAAK,GAC9B,WAAW,KAAK,IAAI,CAAC;AAG3B,2BAAW,QAAQ,eAAe;AACjC,uBAAK,KACH,cAAc,KAAK,EAAE,GACpB,SAAS,qBAAqB,KAAK;gBACvC;cACD;YACD;UACD,GA/BmC;UAgCnC,oBAAoB,6BAAK;AAExB,mBAAO,UAAU;UAClB,GAHoB;UAIpB,eAAe,6BAAK;AACnB,gBACC,KAAK,aAAY,KAGb,KAAK,YAAW,KAAM,UAAU,KACnC;AAEA,mBAAc,aACd,qBACA,UAAU,MAAM,SAAY,OAC5B,EAAE,SAAQ,CAAE;YAEd;UACD,GAde;;MAgBjB;IACD;IAEA,KAAe,qBAAU,IAAC;AACzB,aAAO,eAA4C,EAAE,SAAQ,GAAE;AAC9D,gBAAQ,UAAU;UACjB,KAAK;UACL,KAAK;UACL,KAAK;AACJ,oBAAQ,MAAM,KAAK,IAAG,KAAM,QAAQ;UACrC;AACC,qDAAyB,KAAK,MAAM,QAAQ;QAC9C;MACD;IACD;;;;IAMY,sBAAkB,MAAA;8BAH9B,4CAAa,2BAAe,mBAAmB,CAAC,OAChD,kDAAmB,CAAC,OACpB,wCAAS,kDAAwB,CAAC;;;;oBACK;0CAAA,YAAY;WAAA;;;;;;;;AAApD,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IAGL,MAAM,UACZ,KAAqB;AAErB,YAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,YAAM,WAAW,KAAK,YAAY,GAAG;AACrC,YAAM,MAAM,iBAAM,OACjB,2BAAe,mBAAmB,GAClC,KACA,QAAQ,EACP,YAAY;QACb,UAAU,4BAAgB;OAC1B;AAED,UAAI,QAAQ,KAAK,IAAI;QACpB,UAAU,KAAK;QACf,SAAS,gBAAgB,KAAK,MAAM;QACpC,WAAW;OACX;AAED,UAAI,IAAI,WAAW,GAAG;AAErB,YAAI,QAAQ,KAAK,IAAI;UACpB,UAAU,KAAK;UACf,SAAS;UACT,WAAW;SACX;AACD,cAAM,aAAa,MAAM,IAAI,aAAY;AACzC,YAAI,cAAc,QAAW;AAC5B,cAAI,QAAQ,KAAK,IAAI;YACpB,UAAU,KAAK;YACf,SAAS,uBACR,iCACC,yBACA,UAAU,CAEZ;YACA,WAAW;WACX;QACF;MACD,OAAO;AAGN,aAAK,oCAAoC,GAAG;MAC7C;AAEA,YAAM,KAAK,cAAc,GAAG;AAG5B,WAAK,qBAAqB,KAAK,IAAI;IACpC;IAEO,MAAM,cACZ,KAAyB;AAEzB,YAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,YAAM,WAAW,KAAK,YAAY,GAAG;AACrC,YAAM,MAAM,iBAAM,OACjB,2BAAe,mBAAmB,GAClC,KACA,QAAQ,EACP,YAAY;QACb,UAAU,4BAAgB;OAC1B;AAED,UAAI,QAAQ,KAAK,IAAI;QACpB,UAAU,KAAK;QACf,SAAS;QACT,WAAW;OACX;AACD,YAAM,IAAI,IAAG;IACd;IAEO,oBACN,KACA,OAAa;AAEb,WAAK,SAAS,KAAK,mDAAyB,cAAc,KAAK;AAC/D,aAAO;IACR;IAEU,oCACT,KAEA,aAAyB,wBAAW,SAAS,GAAC;AAE9C,WAAK,eACJ,KACA,mDAAyB,cAAc,UAAU,CAAC;AAEnD,WAAK,eACJ,KACA,mDAAyB,gBAAgB,UAAU,CAAC;IAEtD;;;;IAYY,yBAAqB,MAAA;8BAFjC,yCAAU,qCAAwB,GAAG,OACrC,8CAAc,CAAE;;;;oBAC0B;6CAAA,YAAkB;WAAA;;;;;;;;AAA7D,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IACZ,YACC,SAAkD;AAElD,YAAM,OAAO;AACb,WAAK,cAAc,QAAQ;AAC3B,WAAK,WAAW,qBAAS,KAAK,QAAQ,QAAQ;IAC/C;IAEO,OAAO,KACb,KACA,KAAqB;AAErB,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,cAAc,IAAI,QAAQ,CAAC;AACjC,UAAI;AAEJ,UAAI,IAAI,QAAQ,UAAU,GAAG;AAC5B,mBAAW,qBAAS,YAAY,IAAI,QAAQ,CAAC,CAAC;MAC/C;AAEA,aAAO,IAAI,KAAK;QACf,QAAQ,IAAI;QACZ;QACA;OACA;IACF;IAEO;IACA;IAEA,UAAU,KAAsB;AACtC,WAAK,UAAU,oBAAM,KAAK;QACzB,KAAK;SACJ,KAAK,YAAY,qBAAS,QAAO,GAAI,aAAY;OAClD;AAED,YAAM,gBAAY,2CAAsB,KAAK,IAAI;AACjD,UACC,YAAY,KAAK,IAAI,kBACpB,KAAK,MAAgB,GACnB,QAAQ,6BACV;AAED,aAAK,UAAU,KAAK,QAAQ,SAAS,GAAG,CAAC;MAC1C;AAEA,aAAO,MAAM,UAAU,GAAG;IAC3B;IAEO,WAAW,KAAgB;AACjC,YAAM,UAAyB;QAC9B,gBAAgB,KAAK;;AAEtB,UAAI,KAAK,UAAU;AAClB,gBAAQ,WAAW,KAAK,SAAS,SAAQ;MAC1C;AACA,aAAO;QACN,GAAG,MAAM,WAAW,GAAG;QACvB;;IAEF;;;;IAcY,4BAAwB,MAAA;8BAJpC,yCAAU,qCAAwB,MAAM,OACxC,+CAAgB,eAAe,mDAAyB,WAAW,OACnE,+CAAgB,YAAY,mDAAyB,QAAQ,OAC7D,+CAAgB,gBAAgB,mDAAyB,YAAY,CAAC;;;;oBACzB;gDAAA,YAAkB;WAAA;;;;;;;;AAAhE,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IACZ,YACC,SAAqD;AAErD,YAAM,OAAO;AAEb,WAAK,eAAe,QAAQ;AAC5B,WAAK,cAAc,QAAQ;AAC3B,WAAK,WAAW,qBAAS,KAAK,QAAQ,QAAQ;IAC/C;IAEO,OAAO,KACb,KACA,KAAqB;AAErB,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM;;QAEL,IAAI,QAAQ,CAAC,MAAM,MAChB,SACA,8BAAiB,IAAI,QAAQ,CAAC,CAAC;;AACnC,UAAI;AACJ,UAAI;AAEJ,UAAI,IAAI,QAAQ,UAAU,GAAG;AAC5B,0BAAc,8BAAiB,IAAI,QAAQ,CAAC,CAAC;AAC7C,mBAAW,qBAAS,YAAY,IAAI,QAAQ,CAAC,CAAC;MAC/C;AAEA,aAAO,IAAI,KAAK;QACf,QAAQ,IAAI;QACZ;QACA;QACA;OACA;IACF;IAEO;IAEA;IAEA;IAEA,UAAU,KAAsB;AACtC,WAAK,UAAU,oBAAM,KAAK;QACzB,KAAK,gBAAgB;QACrB,KAAK,eAAe;SACnB,KAAK,YAAY,qBAAS,QAAO,GAAI,gBAAe;OACrD;AACD,aAAO,MAAM,UAAU,GAAG;IAC3B;IAEO,WAAW,KAAgB;AACjC,YAAM,UAAyB;QAC9B,qBAAiB,kCAAqB,KAAK,YAAY;;AAExD,UAAI,KAAK,gBAAgB,yBAAa,KAAK,UAAU;AACpD,gBAAQ,cAAc,QAAI,kCAAqB,KAAK,WAAW;AAC/D,gBAAQ,WAAW,KAAK,SAAS,SAAQ;MAC1C;AACA,aAAO;QACN,GAAG,MAAM,WAAW,GAAG;QACvB;;IAEF;;;;IAKY,yBAAqB,MAAA;8BAFjC,yCAAU,qCAAwB,GAAG,OACrC,kDAAmB,wBAAwB,CAAC;;;;oBACF;6CAAA,YAAkB;WAAA;;;;;;;;AAA7D,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;;;;IAwBA,sCAAkC,MAAA;8BAF9C,yCAAU,qCAAwB,gBAAgB,OAClD,8CAAc,CAAE;;;;oBACuC;0DAAA,YAAkB;WAAA;;;;;;;;AAA1E,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IACZ,YACC,SAA+D;AAE/D,YAAM,OAAO;AACb,WAAK,WAAW,qBAAS,KAAK,QAAQ,QAAQ;AAC9C,WAAK,mBAAmB,QAAQ;AAChC,WAAK,aAAa,QAAQ,cAAc;AACxC,WAAK,YAAY,QAAQ;IAC1B;IAEO,OAAO,KACb,KACA,KAAqB;AAErB,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,mBAAmB,CAAC,GAAG,IAAI,QAAQ,CAAC,IAAI,QAAmB;AACjE,YAAM,aAAc,IAAI,QAAQ,CAAC,IAAI,QAAmB,IACrD,SACA;AACH,YAAM,aAAa,IAAI,QAAQ,CAAC;AAChC,UAAI;AACJ,UAAI,IAAI,QAAQ,UAAU,GAAG;AAC5B,mBAAW,qBAAS,SAAS,IAAI,QAAQ,CAAC,CAAC;MAC5C;AAEA,aAAO,IAAI,KAAK;QACf,QAAQ,IAAI;QACZ;QACA;QACA;QACA;OACA;IACF;IAEO;IACA;IACA;IACA;IAEA,UAAU,KAAsB;AACtC,YAAM,cAAe,kCAAqB,KAAK,SAAS,KAAK,KACzD,KAAK,mBAAmB,KAAc;AAC1C,WAAK,UAAU,oBAAM,KAAK;QACzB;QACA,KAAK;SACJ,KAAK,YAAY,qBAAS,QAAO,GAAI,aAAY;OAClD;AAED,YAAM,gBAAY,2CAAsB,KAAK,IAAI;AACjD,UACC,YAAY,KAAK,IAAI,kBACpB,KAAK,MAAgB,GACnB,QAAQ,6BACV;AAED,aAAK,UAAU,KAAK,QAAQ,SAAS,GAAG,EAAE;MAC3C;AAEA,aAAO,MAAM,UAAU,GAAG;IAC3B;IAEO,WAAW,KAAgB;AACjC,YAAM,UAAyB;QAC9B,YAAY,GAAG,KAAK,UAAU,GAC7B,KAAK,mBAAmB,eAAe,EACxC;QACA,WAAW,KAAK;;AAEjB,UAAI,KAAK,UAAU;AAClB,gBAAQ,WAAW,KAAK,SAAS,SAAQ;MAC1C;AACA,aAAO;QACN,GAAG,MAAM,WAAW,GAAG;QACvB;;IAEF;;;;IAKY,qCAAiC,MAAA;8BAF7C,yCAAU,qCAAwB,eAAe,OACjD,8CAAc,CAAE;;;;oBACsC;yDAAA,YAAkB;WAAA;;;;;;;;AAAzE,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;;;;IASA,qCAAiC,MAAA;8BAF7C,yCAAU,qCAAwB,eAAe,OACjD,+CAAgB,cAAc,mDAAyB,UAAU,CAAC;;;;oBACZ;yDAAA,YAAkB;WAAA;;;;;;;;AAAzE,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IACZ,YACC,SAA8D;AAE9D,YAAM,OAAO;AAEb,WAAK,aAAa,QAAQ;IAC3B;IAEO,OAAO,KACb,KACA,KAAqB;AAErB,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,aAAyB,IAAI,QAAQ,CAAC,IAAI;AAEhD,aAAO,IAAI,KAAK;QACf,QAAQ,IAAI;QACZ;OACA;IACF;;IAIgB;IAET,cAAc,KAAyB;AAC7C,UAAI,CAAC,MAAM,cAAc,GAAG;AAAG,eAAO;AACtC,WAAK,oCAAoC,KAAK,KAAK,UAAU;AAC7D,aAAO;IACR;IAEO,UAAU,KAAsB;AACtC,WAAK,UAAU,oBAAM,KAAK,CAAC,KAAK,aAAa,EAAO,CAAC;AACrD,aAAO,MAAM,UAAU,GAAG;IAC3B;IAEO,WAAW,KAAgB;AACjC,aAAO;QACN,GAAG,MAAM,WAAW,GAAG;QACvB,SAAS;UACR,mBAAe,iCAAkB,yBAAY,KAAK,UAAU;;;IAG/D;;;;IAKY,kCAA8B,MAAA;8BAF1C,yCAAU,qCAAwB,YAAY,OAC9C,kDAAmB,iCAAiC,CAAC;;;;oBACF;sDAAA,YAAkB;WAAA;;;;;;;;AAAtE,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;;;;",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
|
@@ -23,7 +23,7 @@ __export(NoOperationCC_exports, {
|
|
|
23
23
|
NoOperationCCAPI: () => NoOperationCCAPI
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(NoOperationCC_exports);
|
|
26
|
-
var
|
|
26
|
+
var import_core = require("@zwave-js/core");
|
|
27
27
|
var import_API = require("../lib/API.js");
|
|
28
28
|
var import_CommandClass = require("../lib/CommandClass.js");
|
|
29
29
|
var import_CommandClassDecorators = require("../lib/CommandClassDecorators.js");
|
|
@@ -68,7 +68,7 @@ var __runInitializers = function(thisArg, initializers, value) {
|
|
|
68
68
|
return useValue ? value : void 0;
|
|
69
69
|
};
|
|
70
70
|
let NoOperationCCAPI = (() => {
|
|
71
|
-
let _classDecorators = [(0, import_CommandClassDecorators.API)(
|
|
71
|
+
let _classDecorators = [(0, import_CommandClassDecorators.API)(import_core.CommandClasses["No Operation"])];
|
|
72
72
|
let _classDescriptor;
|
|
73
73
|
let _classExtraInitializers = [];
|
|
74
74
|
let _classThis;
|
|
@@ -97,14 +97,14 @@ let NoOperationCCAPI = (() => {
|
|
|
97
97
|
maxSendAttempts: 1,
|
|
98
98
|
// Pings have their own dedicated priority, since they
|
|
99
99
|
// are used to test whether a node is awake/alive
|
|
100
|
-
priority:
|
|
100
|
+
priority: import_core.MessagePriority.Ping
|
|
101
101
|
});
|
|
102
102
|
}
|
|
103
103
|
};
|
|
104
104
|
return NoOperationCCAPI2 = _classThis;
|
|
105
105
|
})();
|
|
106
106
|
let NoOperationCC = (() => {
|
|
107
|
-
let _classDecorators = [(0, import_CommandClassDecorators.commandClass)(
|
|
107
|
+
let _classDecorators = [(0, import_CommandClassDecorators.commandClass)(import_core.CommandClasses["No Operation"]), (0, import_CommandClassDecorators.implementedVersion)(1)];
|
|
108
108
|
let _classDescriptor;
|
|
109
109
|
let _classExtraInitializers = [];
|
|
110
110
|
let _classThis;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cc/NoOperationCC.ts"],
|
|
4
|
-
"sourcesContent": ["import { CommandClasses, MessagePriority } from \"@zwave-js/core
|
|
4
|
+
"sourcesContent": ["import { CommandClasses, MessagePriority } from \"@zwave-js/core\";\nimport { PhysicalCCAPI } from \"../lib/API.js\";\nimport { CommandClass } from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tcommandClass,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\n\n// @noSetValueAPI This CC has no set-type commands\n// @noInterview There's nothing to interview here\n\n@API(CommandClasses[\"No Operation\"])\nexport class NoOperationCCAPI extends PhysicalCCAPI {\n\tpublic async send(): Promise<void> {\n\t\tawait this.host.sendCommand(\n\t\t\tnew NoOperationCC({\n\t\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t}),\n\t\t\t{\n\t\t\t\t...this.commandOptions,\n\t\t\t\t// Don't retry sending ping packets\n\t\t\t\tmaxSendAttempts: 1,\n\t\t\t\t// Pings have their own dedicated priority, since they\n\t\t\t\t// are used to test whether a node is awake/alive\n\t\t\t\tpriority: MessagePriority.Ping,\n\t\t\t},\n\t\t);\n\t}\n}\n\n@commandClass(CommandClasses[\"No Operation\"])\n@implementedVersion(1)\nexport class NoOperationCC extends CommandClass {\n\tdeclare ccCommand: undefined;\n}\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kBAAgD;AAChD,iBAA8B;AAC9B,0BAA6B;AAC7B,oCAIO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAMM,oBAAgB,MAAA;8BAD5B,mCAAI,2BAAe,cAAc,CAAC,CAAC;;;;oBACE;wCAAA,YAAa;WAAA;;;;;;;;AAAnD,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IACL,MAAM,OAAI;AAChB,YAAM,KAAK,KAAK,YACf,IAAI,cAAc;QACjB,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;OAC7B,GACD;QACC,GAAG,KAAK;;QAER,iBAAiB;;;QAGjB,UAAU,4BAAgB;OAC1B;IAEH;;;;IAKY,iBAAa,MAAA;8BAFzB,4CAAa,2BAAe,cAAc,CAAC,OAC3C,kDAAmB,CAAC,CAAC;;;;oBACa;qCAAA,YAAY;WAAA;;;;;;;;AAA/C,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;;;;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type SupervisionResult, type WithAddress } from "@zwave-js/core
|
|
3
|
-
import { Bytes } from "@zwave-js/shared
|
|
1
|
+
import type { CCEncodingContext, CCParsingContext } from "@zwave-js/cc";
|
|
2
|
+
import { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type SupervisionResult, type WithAddress } from "@zwave-js/core";
|
|
3
|
+
import { Bytes } from "@zwave-js/shared";
|
|
4
4
|
import { POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, SET_VALUE, type SetValueImplementation } from "../lib/API.js";
|
|
5
5
|
import { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext } from "../lib/CommandClass.js";
|
|
6
6
|
import { NodeNamingAndLocationCommand } from "../lib/_Types.js";
|
|
@@ -15,7 +15,7 @@ export declare const NodeNamingAndLocationCCValues: Readonly<{
|
|
|
15
15
|
readonly endpoint: 0;
|
|
16
16
|
readonly property: "name";
|
|
17
17
|
};
|
|
18
|
-
is: (valueId: import("@zwave-js/core
|
|
18
|
+
is: (valueId: import("@zwave-js/core").ValueID) => boolean;
|
|
19
19
|
readonly meta: {
|
|
20
20
|
readonly label: "Node name";
|
|
21
21
|
readonly type: "string";
|
|
@@ -41,7 +41,7 @@ export declare const NodeNamingAndLocationCCValues: Readonly<{
|
|
|
41
41
|
readonly endpoint: 0;
|
|
42
42
|
readonly property: "location";
|
|
43
43
|
};
|
|
44
|
-
is: (valueId: import("@zwave-js/core
|
|
44
|
+
is: (valueId: import("@zwave-js/core").ValueID) => boolean;
|
|
45
45
|
readonly meta: {
|
|
46
46
|
readonly label: "Node location";
|
|
47
47
|
readonly type: "string";
|
|
@@ -41,8 +41,8 @@ __export(NodeNamingCC_exports, {
|
|
|
41
41
|
});
|
|
42
42
|
module.exports = __toCommonJS(NodeNamingCC_exports);
|
|
43
43
|
var __validateArgs = __toESM(require("./NodeNamingCC._validateArgs.js"), 1);
|
|
44
|
-
var
|
|
45
|
-
var
|
|
44
|
+
var import_core = require("@zwave-js/core");
|
|
45
|
+
var import_shared = require("@zwave-js/shared");
|
|
46
46
|
var import_API = require("../lib/API.js");
|
|
47
47
|
var import_CommandClass = require("../lib/CommandClass.js");
|
|
48
48
|
var import_CommandClassDecorators = require("../lib/CommandClassDecorators.js");
|
|
@@ -95,7 +95,7 @@ function isASCII(str) {
|
|
|
95
95
|
}
|
|
96
96
|
__name(isASCII, "isASCII");
|
|
97
97
|
let NodeNamingAndLocationCCAPI = (() => {
|
|
98
|
-
let _classDecorators = [(0, import_CommandClassDecorators.API)(
|
|
98
|
+
let _classDecorators = [(0, import_CommandClassDecorators.API)(import_core.CommandClasses["Node Naming and Location"])];
|
|
99
99
|
let _classDescriptor;
|
|
100
100
|
let _classExtraInitializers = [];
|
|
101
101
|
let _classThis;
|
|
@@ -204,7 +204,7 @@ let NodeNamingAndLocationCCAPI = (() => {
|
|
|
204
204
|
return NodeNamingAndLocationCCAPI2 = _classThis;
|
|
205
205
|
})();
|
|
206
206
|
let NodeNamingAndLocationCC = (() => {
|
|
207
|
-
let _classDecorators = [(0, import_CommandClassDecorators.commandClass)(
|
|
207
|
+
let _classDecorators = [(0, import_CommandClassDecorators.commandClass)(import_core.CommandClasses["Node Naming and Location"]), (0, import_CommandClassDecorators.implementedVersion)(1), (0, import_CommandClassDecorators.ccValues)(import_CCValues_generated.NodeNamingAndLocationCCValues)];
|
|
208
208
|
let _classDescriptor;
|
|
209
209
|
let _classExtraInitializers = [];
|
|
210
210
|
let _classThis;
|
|
@@ -239,8 +239,8 @@ let NodeNamingAndLocationCC = (() => {
|
|
|
239
239
|
async refreshValues(ctx) {
|
|
240
240
|
const node = this.getNode(ctx);
|
|
241
241
|
const endpoint = this.getEndpoint(ctx);
|
|
242
|
-
const api = import_API.CCAPI.create(
|
|
243
|
-
priority:
|
|
242
|
+
const api = import_API.CCAPI.create(import_core.CommandClasses["Node Naming and Location"], ctx, endpoint).withOptions({
|
|
243
|
+
priority: import_core.MessagePriority.NodeQuery
|
|
244
244
|
});
|
|
245
245
|
ctx.logNode(node.id, {
|
|
246
246
|
message: "retrieving node name...",
|
|
@@ -293,18 +293,18 @@ let NodeNamingAndLocationCCNameSet = (() => {
|
|
|
293
293
|
this.name = options.name;
|
|
294
294
|
}
|
|
295
295
|
static from(_raw, _ctx) {
|
|
296
|
-
throw new
|
|
296
|
+
throw new import_core.ZWaveError(`${this.name}: deserialization not implemented`, import_core.ZWaveErrorCodes.Deserialization_NotImplemented);
|
|
297
297
|
}
|
|
298
298
|
name;
|
|
299
299
|
serialize(ctx) {
|
|
300
300
|
const encoding = isASCII(this.name) ? "ascii" : "utf16le";
|
|
301
|
-
this.payload = new
|
|
301
|
+
this.payload = new import_shared.Bytes(1 + this.name.length * (encoding === "ascii" ? 1 : 2));
|
|
302
302
|
this.payload[0] = encoding === "ascii" ? 0 : 2;
|
|
303
303
|
let nameBuffer;
|
|
304
304
|
if (encoding === "utf16le") {
|
|
305
|
-
nameBuffer = (0,
|
|
305
|
+
nameBuffer = (0, import_shared.stringToUint8ArrayUTF16BE)(this.name);
|
|
306
306
|
} else {
|
|
307
|
-
nameBuffer =
|
|
307
|
+
nameBuffer = import_shared.Bytes.from(this.name, "ascii");
|
|
308
308
|
}
|
|
309
309
|
this.payload.set(nameBuffer.subarray(0, Math.min(16, nameBuffer.length)), 0);
|
|
310
310
|
return super.serialize(ctx);
|
|
@@ -343,13 +343,13 @@ let NodeNamingAndLocationCCNameReport = (() => {
|
|
|
343
343
|
this.name = options.name;
|
|
344
344
|
}
|
|
345
345
|
static from(raw, ctx) {
|
|
346
|
-
(0,
|
|
346
|
+
(0, import_core.validatePayload)(raw.payload.length >= 1);
|
|
347
347
|
const encoding = raw.payload[0] === 2 ? "utf16le" : "ascii";
|
|
348
348
|
const nameBuffer = raw.payload.subarray(1);
|
|
349
349
|
let name;
|
|
350
350
|
if (encoding === "utf16le") {
|
|
351
|
-
(0,
|
|
352
|
-
name = (0,
|
|
351
|
+
(0, import_core.validatePayload)(nameBuffer.length % 2 === 0);
|
|
352
|
+
name = (0, import_shared.uint8ArrayToStringUTF16BE)(nameBuffer);
|
|
353
353
|
} else {
|
|
354
354
|
name = nameBuffer.toString("ascii");
|
|
355
355
|
}
|
|
@@ -416,18 +416,18 @@ let NodeNamingAndLocationCCLocationSet = (() => {
|
|
|
416
416
|
this.location = options.location;
|
|
417
417
|
}
|
|
418
418
|
static from(_raw, _ctx) {
|
|
419
|
-
throw new
|
|
419
|
+
throw new import_core.ZWaveError(`${this.name}: deserialization not implemented`, import_core.ZWaveErrorCodes.Deserialization_NotImplemented);
|
|
420
420
|
}
|
|
421
421
|
location;
|
|
422
422
|
serialize(ctx) {
|
|
423
423
|
const encoding = isASCII(this.location) ? "ascii" : "utf16le";
|
|
424
|
-
this.payload = new
|
|
424
|
+
this.payload = new import_shared.Bytes(1 + this.location.length * (encoding === "ascii" ? 1 : 2));
|
|
425
425
|
this.payload[0] = encoding === "ascii" ? 0 : 2;
|
|
426
426
|
let locationBuffer;
|
|
427
427
|
if (encoding === "utf16le") {
|
|
428
|
-
locationBuffer = (0,
|
|
428
|
+
locationBuffer = (0, import_shared.stringToUint8ArrayUTF16BE)(this.location);
|
|
429
429
|
} else {
|
|
430
|
-
locationBuffer =
|
|
430
|
+
locationBuffer = import_shared.Bytes.from(this.location, "ascii");
|
|
431
431
|
}
|
|
432
432
|
this.payload.set(locationBuffer.subarray(0, Math.min(16, locationBuffer.length)), 0);
|
|
433
433
|
return super.serialize(ctx);
|
|
@@ -466,13 +466,13 @@ let NodeNamingAndLocationCCLocationReport = (() => {
|
|
|
466
466
|
this.location = options.location;
|
|
467
467
|
}
|
|
468
468
|
static from(raw, ctx) {
|
|
469
|
-
(0,
|
|
469
|
+
(0, import_core.validatePayload)(raw.payload.length >= 1);
|
|
470
470
|
const encoding = raw.payload[0] === 2 ? "utf16le" : "ascii";
|
|
471
471
|
const locationBuffer = raw.payload.subarray(1);
|
|
472
472
|
let location;
|
|
473
473
|
if (encoding === "utf16le") {
|
|
474
|
-
(0,
|
|
475
|
-
location = (0,
|
|
474
|
+
(0, import_core.validatePayload)(locationBuffer.length % 2 === 0);
|
|
475
|
+
location = (0, import_shared.uint8ArrayToStringUTF16BE)(locationBuffer);
|
|
476
476
|
} else {
|
|
477
477
|
location = locationBuffer.toString("ascii");
|
|
478
478
|
}
|