@zwave-js/cc 15.1.1 → 15.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/cc/AlarmSensorCC.d.ts +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/BasicWindowCoveringCC._validateArgs.d.ts +3 -0
- package/build/cjs/cc/BasicWindowCoveringCC._validateArgs.js +64 -0
- package/build/cjs/cc/BasicWindowCoveringCC._validateArgs.js.map +7 -0
- package/build/cjs/cc/BasicWindowCoveringCC.d.ts +90 -0
- package/build/cjs/cc/BasicWindowCoveringCC.js +273 -0
- package/build/cjs/cc/BasicWindowCoveringCC.js.map +7 -0
- package/build/cjs/cc/BatteryCC.d.ts +4 -7
- package/build/cjs/cc/BatteryCC.js +18 -20
- 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 +3 -3
- package/build/cjs/cc/ManufacturerProprietaryCC.js +10 -10
- 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 +11 -11
- package/build/cjs/cc/MultiChannelCC.js +53 -53
- 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 +124 -0
- package/build/cjs/cc/_CCValues.generated.js +93 -26
- package/build/cjs/cc/_CCValues.generated.js.map +3 -3
- package/build/cjs/cc/index.d.ts +2 -0
- package/build/cjs/cc/index.js +9 -0
- package/build/cjs/cc/index.js.map +2 -2
- 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 +5 -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 +6 -2
- package/build/cjs/lib/_Types.js +10 -3
- package/build/cjs/lib/_Types.js.map +3 -3
- 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/BasicWindowCoveringCC._validateArgs.d.ts +3 -0
- package/build/esm/cc/BasicWindowCoveringCC._validateArgs.d.ts.map +1 -0
- package/build/esm/cc/BasicWindowCoveringCC._validateArgs.js +22 -0
- package/build/esm/cc/BasicWindowCoveringCC._validateArgs.js.map +1 -0
- package/build/esm/cc/BasicWindowCoveringCC.d.ts +90 -0
- package/build/esm/cc/BasicWindowCoveringCC.d.ts.map +1 -0
- package/build/esm/cc/BasicWindowCoveringCC.js +215 -0
- package/build/esm/cc/BasicWindowCoveringCC.js.map +1 -0
- package/build/esm/cc/BatteryCC.d.ts +4 -7
- package/build/esm/cc/BatteryCC.d.ts.map +1 -1
- package/build/esm/cc/BatteryCC.js +2 -4
- 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 +3 -3
- package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
- package/build/esm/cc/ManufacturerProprietaryCC.js +2 -2
- 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 +11 -11
- package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
- package/build/esm/cc/MultiChannelCC.js +2 -2
- 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 +124 -0
- package/build/esm/cc/_CCValues.generated.d.ts.map +1 -1
- package/build/esm/cc/_CCValues.generated.js +75 -4
- package/build/esm/cc/_CCValues.generated.js.map +1 -1
- package/build/esm/cc/index.d.ts +2 -0
- package/build/esm/cc/index.d.ts.map +1 -1
- package/build/esm/cc/index.js +1 -0
- package/build/esm/cc/index.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 +5 -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 +6 -2
- package/build/esm/lib/_Types.d.ts.map +1 -1
- package/build/esm/lib/_Types.js +6 -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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cc/ThermostatSetpointCC.ts"],
|
|
4
|
-
"sourcesContent": ["import { type CCEncodingContext, type CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype Scale,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype ValueMetadataNumeric,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tencodeBitMask,\n\tencodeFloatWithScale,\n\tgetNamedScale,\n\tgetUnknownScale,\n\tparseBitMask,\n\tparseFloatWithScale,\n\tsupervisedCommandSucceeded,\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\ttype SetValueImplementation,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n\ttype RefreshValuesContext,\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\tThermostatSetpointCommand,\n\tThermostatSetpointType,\n} from \"../lib/_Types.js\";\n\n// This array is used to map the advertised supported types (interpretation A)\n// to the actual enum values\nconst thermostatSetpointTypeMap = [\n\t0x00,\n\t0x01,\n\t0x02,\n\t0x07,\n\t0x08,\n\t0x09,\n\t0x0a,\n\t0x0b,\n\t0x0c,\n\t0x0d,\n\t0x0e,\n\t0x0f,\n];\n\nfunction getScale(scale: number): Scale {\n\treturn getNamedScale(\"temperature\", scale as any)\n\t\t?? getUnknownScale(scale);\n}\nfunction getSetpointUnit(scale: number): string {\n\treturn getScale(scale).unit ?? \"\";\n}\n\nexport const ThermostatSetpointCCValues = V.defineCCValues(\n\tCommandClasses[\"Thermostat Setpoint\"],\n\t{\n\t\t...V.staticProperty(\"supportedSetpointTypes\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"setpoint\",\n\t\t\t\"setpoint\",\n\t\t\t(setpointType: ThermostatSetpointType) => setpointType,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"setpoint\" && typeof propertyKey === \"number\",\n\t\t\t(setpointType: ThermostatSetpointType) => ({\n\t\t\t\t...ValueMetadata.Number,\n\t\t\t\tlabel: `Setpoint (${\n\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\t\tsetpointType,\n\t\t\t\t\t)\n\t\t\t\t})`,\n\t\t\t\tccSpecific: { setpointType },\n\t\t\t} as const),\n\t\t),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"setpointScale\",\n\t\t\t\"setpointScale\",\n\t\t\t(setpointType: ThermostatSetpointType) => setpointType,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"setpointScale\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\t},\n);\n\n@API(CommandClasses[\"Thermostat Setpoint\"])\nexport class ThermostatSetpointCCAPI extends CCAPI {\n\tpublic supportsCommand(\n\t\tcmd: ThermostatSetpointCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase ThermostatSetpointCommand.Get:\n\t\t\tcase ThermostatSetpointCommand.SupportedGet:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase ThermostatSetpointCommand.Set:\n\t\t\t\treturn true; // This is mandatory\n\t\t\tcase ThermostatSetpointCommand.CapabilitiesGet:\n\t\t\t\treturn this.version >= 3 && this.isSinglecast();\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(\n\t\t\tthis: ThermostatSetpointCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t\tvalue,\n\t\t) {\n\t\t\tif (property !== \"setpoint\") {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t\tif (typeof propertyKey !== \"number\") {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`${\n\t\t\t\t\t\tCommandClasses[this.ccId]\n\t\t\t\t\t}: \"${property}\" must be further specified by a numeric property key`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof value !== \"number\") {\n\t\t\t\tthrowWrongValueType(\n\t\t\t\t\tthis.ccId,\n\t\t\t\t\tproperty,\n\t\t\t\t\t\"number\",\n\t\t\t\t\ttypeof value,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// SDS14223: The Scale field value MUST be identical to the value received in the Thermostat Setpoint Report for the\n\t\t\t// actual Setpoint Type during the node interview. Fall back to the first scale if none is known\n\t\t\tconst preferredScale = this.tryGetValueDB()?.getValue<number>(\n\t\t\t\tThermostatSetpointCCValues.setpointScale(propertyKey).endpoint(\n\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t),\n\t\t\t);\n\t\t\tconst result = await this.set(\n\t\t\t\tpropertyKey,\n\t\t\t\tvalue,\n\t\t\t\tpreferredScale ?? 0,\n\t\t\t);\n\n\t\t\t// Verify the current value after a delay, unless the command was supervised and successful\n\t\t\tif (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n\t\t\t\t// TODO: Ideally this would be a short delay, but some thermostats like Remotec ZXT-600\n\t\t\t\t// aren't able to handle the GET this quickly.\n\t\t\t\tthis.schedulePoll({ property, propertyKey }, value);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(\n\t\t\tthis: ThermostatSetpointCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"setpoint\":\n\t\t\t\t\tif (typeof propertyKey !== \"number\") {\n\t\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t\t`${\n\t\t\t\t\t\t\t\tCommandClasses[this.ccId]\n\t\t\t\t\t\t\t}: \"${property}\" must be further specified by a numeric property key`,\n\t\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (await this.get(propertyKey))?.value;\n\t\t\t\tdefault:\n\t\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\t@validateArgs()\n\tpublic async get(\n\t\tsetpointType: ThermostatSetpointType,\n\t): Promise<{ value: number; scale: Scale } | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tThermostatSetpointCommand,\n\t\t\tThermostatSetpointCommand.Get,\n\t\t);\n\n\t\tconst cc = new ThermostatSetpointCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tsetpointType,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tThermostatSetpointCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (!response) return;\n\t\tif (response.type !== ThermostatSetpointType[\"N/A\"]) {\n\t\t\t// This is a supported setpoint\n\t\t\tconst scale = getScale(response.scale);\n\t\t\treturn {\n\t\t\t\tvalue: response.value,\n\t\t\t\tscale,\n\t\t\t};\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async set(\n\t\tsetpointType: ThermostatSetpointType,\n\t\tvalue: number,\n\t\tscale: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tThermostatSetpointCommand,\n\t\t\tThermostatSetpointCommand.Set,\n\t\t);\n\n\t\tconst cc = new ThermostatSetpointCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tsetpointType,\n\t\t\tvalue,\n\t\t\tscale,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getCapabilities(setpointType: ThermostatSetpointType) {\n\t\tthis.assertSupportsCommand(\n\t\t\tThermostatSetpointCommand,\n\t\t\tThermostatSetpointCommand.CapabilitiesGet,\n\t\t);\n\n\t\tconst cc = new ThermostatSetpointCCCapabilitiesGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tsetpointType,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tThermostatSetpointCCCapabilitiesReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"minValue\",\n\t\t\t\t\"maxValue\",\n\t\t\t\t\"minValueScale\",\n\t\t\t\t\"maxValueScale\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t/**\n\t * Requests the supported setpoint types from the node. Due to inconsistencies it is NOT recommended\n\t * to use this method on nodes with CC versions 1 and 2. Instead rely on the information determined\n\t * during node interview.\n\t */\n\tpublic async getSupportedSetpointTypes(): Promise<\n\t\tMaybeNotKnown<readonly ThermostatSetpointType[]>\n\t> {\n\t\tthis.assertSupportsCommand(\n\t\t\tThermostatSetpointCommand,\n\t\t\tThermostatSetpointCommand.SupportedGet,\n\t\t);\n\n\t\tconst cc = new ThermostatSetpointCCSupportedGet({\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\tThermostatSetpointCCSupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.supportedSetpointTypes;\n\t}\n}\n\n@commandClass(CommandClasses[\"Thermostat Setpoint\"])\n@implementedVersion(3)\n@ccValues(ThermostatSetpointCCValues)\nexport class ThermostatSetpointCC extends CommandClass {\n\tdeclare ccCommand: ThermostatSetpointCommand;\n\n\tpublic translatePropertyKey(\n\t\tctx: GetValueDB,\n\t\tproperty: string | number,\n\t\tpropertyKey: string | number,\n\t): string | undefined {\n\t\tif (property === \"setpoint\") {\n\t\t\treturn getEnumMemberName(\n\t\t\t\tThermostatSetpointType,\n\t\t\t\tpropertyKey as any,\n\t\t\t);\n\t\t} else {\n\t\t\treturn super.translatePropertyKey(ctx, property, propertyKey);\n\t\t}\n\t}\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[\"Thermostat Setpoint\"],\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 <= 2) {\n\t\t\t// It has been found that early implementations of this Command Class applied two non-interoperable\n\t\t\t// interpretations of the bit mask advertising the support for specific Setpoint Types in the Thermostat\n\t\t\t// Setpoint Supported Report Command.\n\t\t\t// A controlling node SHOULD determine the supported Setpoint Types of a version 1 and version 2\n\t\t\t// supporting node by sending one Thermostat Setpoint Get Command at a time while incrementing\n\t\t\t// the requested Setpoint Type.\n\t\t\t// If the same Setpoint Type is advertised in the returned Thermostat Setpoint Report Command, the\n\t\t\t// controlling node MUST conclude that the actual Setpoint Type is supported.\n\t\t\t// If the Setpoint Type 0x00 (type N/A) is advertised in the returned Thermostat Setpoint Report\n\t\t\t// Command, the controlling node MUST conclude that the actual Setpoint Type is not supported.\n\n\t\t\t// The specs require us to query the list of supported setpoint types anyways, even if the response is ignored\n\t\t\tawait api.getSupportedSetpointTypes();\n\n\t\t\t// Now scan all endpoints. Each type we received a value for gets marked as supported\n\t\t\tconst supportedSetpointTypes: ThermostatSetpointType[] = [];\n\t\t\tfor (\n\t\t\t\tlet type: ThermostatSetpointType =\n\t\t\t\t\tThermostatSetpointType.Heating;\n\t\t\t\ttype <= ThermostatSetpointType[\"Full Power\"];\n\t\t\t\ttype++\n\t\t\t) {\n\t\t\t\tconst setpointName = getEnumMemberName(\n\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\ttype,\n\t\t\t\t);\n\t\t\t\t// Every time, query the current value\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`querying current value of setpoint ${setpointName}...`,\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\n\t\t\t\tconst setpoint = await api.get(type);\n\t\t\t\t// If the node did not respond, assume the setpoint type is not supported\n\n\t\t\t\tlet logMessage: string;\n\t\t\t\tif (setpoint) {\n\t\t\t\t\t// Setpoint supported, remember the type\n\t\t\t\t\tsupportedSetpointTypes.push(type);\n\t\t\t\t\tlogMessage =\n\t\t\t\t\t\t`received current value of setpoint ${setpointName}: ${setpoint.value} ${\n\t\t\t\t\t\t\tsetpoint.scale.unit ?? \"\"\n\t\t\t\t\t\t}`;\n\t\t\t\t} else {\n\t\t\t\t\t// We're sure about the interpretation - this should not happen\n\t\t\t\t\tlogMessage = `setpoint ${setpointName} is not supported`;\n\t\t\t\t}\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Remember which setpoint types are actually supported\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tThermostatSetpointCCValues.supportedSetpointTypes,\n\t\t\t\tsupportedSetpointTypes,\n\t\t\t);\n\t\t} else {\n\t\t\t// Versions >= 3 adhere to bitmap interpretation A, so we can rely on getSupportedSetpointTypes\n\n\t\t\t// Query the supported setpoint types\n\t\t\tlet setpointTypes: ThermostatSetpointType[] = [];\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"retrieving supported setpoint types...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst resp = await api.getSupportedSetpointTypes();\n\t\t\tif (resp) {\n\t\t\t\tsetpointTypes = [...resp];\n\t\t\t\tconst logMessage = \"received supported setpoint types:\\n\"\n\t\t\t\t\t+ setpointTypes\n\t\t\t\t\t\t.map((type) =>\n\t\t\t\t\t\t\tgetEnumMemberName(ThermostatSetpointType, type)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((name) => `\u00B7 ${name}`)\n\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Querying supported setpoint types timed out, skipping interview...\",\n\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const type of setpointTypes) {\n\t\t\t\tconst setpointName = getEnumMemberName(\n\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\ttype,\n\t\t\t\t);\n\t\t\t\t// Find out the capabilities of this setpoint\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`retrieving capabilities for setpoint ${setpointName}...`,\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tconst setpointCaps = await api.getCapabilities(type);\n\t\t\t\tif (setpointCaps) {\n\t\t\t\t\tconst minValueUnit = getSetpointUnit(\n\t\t\t\t\t\tsetpointCaps.minValueScale,\n\t\t\t\t\t);\n\t\t\t\t\tconst maxValueUnit = getSetpointUnit(\n\t\t\t\t\t\tsetpointCaps.maxValueScale,\n\t\t\t\t\t);\n\t\t\t\t\tconst logMessage =\n\t\t\t\t\t\t`received capabilities for setpoint ${setpointName}:\nminimum value: ${setpointCaps.minValue} ${minValueUnit}\nmaximum value: ${setpointCaps.maxValue} ${maxValueUnit}`;\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Query the current value for all setpoint types\n\t\t\tawait this.refreshValues(ctx);\n\t\t}\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[\"Thermostat Setpoint\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tconst setpointTypes: ThermostatSetpointType[] = this.getValue(\n\t\t\tctx,\n\t\t\tThermostatSetpointCCValues.supportedSetpointTypes,\n\t\t) ?? [];\n\n\t\t// Query each setpoint's current value\n\t\tfor (const type of setpointTypes) {\n\t\t\tconst setpointName = getEnumMemberName(\n\t\t\t\tThermostatSetpointType,\n\t\t\t\ttype,\n\t\t\t);\n\t\t\t// Every time, query the current value\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`querying current value of setpoint ${setpointName}...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst setpoint = await api.get(type);\n\t\t\tif (setpoint) {\n\t\t\t\tconst logMessage =\n\t\t\t\t\t`received current value of setpoint ${setpointName}: ${setpoint.value} ${\n\t\t\t\t\t\tsetpoint.scale.unit ?? \"\"\n\t\t\t\t\t}`;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n// @publicAPI\nexport interface ThermostatSetpointCCSetOptions {\n\tsetpointType: ThermostatSetpointType;\n\tvalue: number;\n\tscale: number;\n}\n\n@CCCommand(ThermostatSetpointCommand.Set)\n@useSupervision()\nexport class ThermostatSetpointCCSet extends ThermostatSetpointCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ThermostatSetpointCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.setpointType = options.setpointType;\n\t\tthis.value = options.value;\n\t\tthis.scale = options.scale;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ThermostatSetpointCCSet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst setpointType: ThermostatSetpointType = raw.payload[0] & 0b1111;\n\n\t\t// parseFloatWithScale does its own validation\n\t\tconst { value, scale } = parseFloatWithScale(\n\t\t\traw.payload.subarray(1),\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsetpointType,\n\t\t\tvalue,\n\t\t\tscale,\n\t\t});\n\t}\n\n\tpublic setpointType: ThermostatSetpointType;\n\tpublic value: number;\n\tpublic scale: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\t// If a config file overwrites how the float should be encoded, use that information\n\t\tconst override = ctx.getDeviceConfig?.(this.nodeId as number)\n\t\t\t?.compat?.overrideFloatEncoding;\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.setpointType & 0b1111]),\n\t\t\tencodeFloatWithScale(this.value, this.scale, override),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst scale = getScale(this.scale);\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"setpoint type\": getEnumMemberName(\n\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\tthis.setpointType,\n\t\t\t\t),\n\t\t\t\tvalue: `${this.value} ${scale.unit}`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ThermostatSetpointCCReportOptions {\n\ttype: ThermostatSetpointType;\n\tvalue: number;\n\tscale: number;\n}\n\n@CCCommand(ThermostatSetpointCommand.Report)\nexport class ThermostatSetpointCCReport extends ThermostatSetpointCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ThermostatSetpointCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.type = options.type;\n\t\tthis.value = options.value;\n\t\tthis.scale = options.scale;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ThermostatSetpointCCReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst type: ThermostatSetpointType = raw.payload[0] & 0b1111;\n\n\t\tif (type === 0) {\n\t\t\t// Not supported\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\ttype,\n\t\t\t\tvalue: 0,\n\t\t\t\tscale: 0,\n\t\t\t});\n\t\t}\n\n\t\t// parseFloatWithScale does its own validation\n\t\tconst { value, scale } = parseFloatWithScale(\n\t\t\traw.payload.subarray(1),\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttype,\n\t\t\tvalue,\n\t\t\tscale,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tconst scale = getScale(this.scale);\n\n\t\tconst setpointValue = ThermostatSetpointCCValues.setpoint(this.type);\n\t\tconst existingMetadata = this.getMetadata<ValueMetadataNumeric>(\n\t\t\tctx,\n\t\t\tsetpointValue,\n\t\t);\n\n\t\t// Update the metadata when it is missing or the unit has changed\n\t\tif (existingMetadata?.unit !== scale.unit) {\n\t\t\tthis.setMetadata(ctx, setpointValue, {\n\t\t\t\t...(existingMetadata ?? setpointValue.meta),\n\t\t\t\tunit: scale.unit,\n\t\t\t});\n\t\t}\n\t\tthis.setValue(ctx, setpointValue, this.value);\n\n\t\t// Remember the device-preferred setpoint scale so it can be used in SET commands\n\t\tthis.setValue(\n\t\t\tctx,\n\t\t\tThermostatSetpointCCValues.setpointScale(this.type),\n\t\t\tscale.key,\n\t\t);\n\t\treturn true;\n\t}\n\n\tpublic type: ThermostatSetpointType;\n\tpublic scale: number;\n\tpublic value: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.type & 0b1111]),\n\t\t\tencodeFloatWithScale(this.value, this.scale),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst scale = getScale(this.scale);\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"setpoint type\": getEnumMemberName(\n\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\tthis.type,\n\t\t\t\t),\n\t\t\t\tvalue: `${this.value} ${scale.unit}`,\n\t\t\t},\n\t\t};\n\t}\n}\n\nfunction testResponseForThermostatSetpointGet(\n\tsent: ThermostatSetpointCCGet,\n\treceived: ThermostatSetpointCCReport,\n) {\n\t// We expect a Thermostat Setpoint Report that matches the requested setpoint type\n\treturn received.type === sent.setpointType;\n}\n\n// @publicAPI\nexport interface ThermostatSetpointCCGetOptions {\n\tsetpointType: ThermostatSetpointType;\n}\n\n@CCCommand(ThermostatSetpointCommand.Get)\n@expectedCCResponse(\n\tThermostatSetpointCCReport,\n\ttestResponseForThermostatSetpointGet,\n)\nexport class ThermostatSetpointCCGet extends ThermostatSetpointCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ThermostatSetpointCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.setpointType = options.setpointType;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ThermostatSetpointCCGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst setpointType: ThermostatSetpointType = raw.payload[0] & 0b1111;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsetpointType,\n\t\t});\n\t}\n\n\tpublic setpointType: ThermostatSetpointType;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.setpointType & 0b1111]);\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\"setpoint type\": getEnumMemberName(\n\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\tthis.setpointType,\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ThermostatSetpointCCCapabilitiesReportOptions {\n\ttype: ThermostatSetpointType;\n\tminValue: number;\n\tminValueScale: number;\n\tmaxValue: number;\n\tmaxValueScale: number;\n}\n\n@CCCommand(ThermostatSetpointCommand.CapabilitiesReport)\nexport class ThermostatSetpointCCCapabilitiesReport\n\textends ThermostatSetpointCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<ThermostatSetpointCCCapabilitiesReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.type = options.type;\n\t\tthis.minValue = options.minValue;\n\t\tthis.minValueScale = options.minValueScale;\n\t\tthis.maxValue = options.maxValue;\n\t\tthis.maxValueScale = options.maxValueScale;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ThermostatSetpointCCCapabilitiesReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst type: ThermostatSetpointType = raw.payload[0];\n\t\t// parseFloatWithScale does its own validation\n\t\tconst {\n\t\t\tvalue: minValue,\n\t\t\tscale: minValueScale,\n\t\t\tbytesRead,\n\t\t} = parseFloatWithScale(raw.payload.subarray(1));\n\t\tconst { value: maxValue, scale: maxValueScale } = parseFloatWithScale(\n\t\t\traw.payload.subarray(1 + bytesRead),\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttype,\n\t\t\tminValue,\n\t\t\tminValueScale,\n\t\t\tmaxValue,\n\t\t\tmaxValueScale,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\t// Predefine the metadata\n\t\tconst setpointValue = ThermostatSetpointCCValues.setpoint(this.type);\n\t\tthis.setMetadata(ctx, setpointValue, {\n\t\t\t...setpointValue.meta,\n\t\t\tmin: this.minValue,\n\t\t\tmax: this.maxValue,\n\t\t\tunit: getSetpointUnit(this.minValueScale)\n\t\t\t\t|| getSetpointUnit(this.maxValueScale),\n\t\t});\n\n\t\treturn true;\n\t}\n\n\tpublic type: ThermostatSetpointType;\n\tpublic minValue: number;\n\tpublic maxValue: number;\n\tpublic minValueScale: number;\n\tpublic maxValueScale: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst min = encodeFloatWithScale(this.minValue, this.minValueScale);\n\t\tconst max = encodeFloatWithScale(this.maxValue, this.maxValueScale);\n\t\tthis.payload = Bytes.concat([Bytes.from([this.type]), min, max]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst minValueScale = getScale(this.minValueScale);\n\t\tconst maxValueScale = getScale(this.maxValueScale);\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"setpoint type\": getEnumMemberName(\n\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\tthis.type,\n\t\t\t\t),\n\t\t\t\t\"min value\": `${this.minValue} ${minValueScale.unit}`,\n\t\t\t\t\"max value\": `${this.maxValue} ${maxValueScale.unit}`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ThermostatSetpointCCCapabilitiesGetOptions {\n\tsetpointType: ThermostatSetpointType;\n}\n\n@CCCommand(ThermostatSetpointCommand.CapabilitiesGet)\n@expectedCCResponse(ThermostatSetpointCCCapabilitiesReport)\nexport class ThermostatSetpointCCCapabilitiesGet extends ThermostatSetpointCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ThermostatSetpointCCCapabilitiesGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.setpointType = options.setpointType;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ThermostatSetpointCCCapabilitiesGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst setpointType: ThermostatSetpointType = raw.payload[0] & 0b1111;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsetpointType,\n\t\t});\n\t}\n\n\tpublic setpointType: ThermostatSetpointType;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.setpointType & 0b1111]);\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\"setpoint type\": getEnumMemberName(\n\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\tthis.setpointType,\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ThermostatSetpointCCSupportedReportOptions {\n\tsupportedSetpointTypes: ThermostatSetpointType[];\n}\n\n@CCCommand(ThermostatSetpointCommand.SupportedReport)\n@ccValueProperty(\n\t\"supportedSetpointTypes\",\n\tThermostatSetpointCCValues.supportedSetpointTypes,\n)\nexport class ThermostatSetpointCCSupportedReport extends ThermostatSetpointCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ThermostatSetpointCCSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tif (options.supportedSetpointTypes.length === 0) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`At least one setpoint type must be supported`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.supportedSetpointTypes = options.supportedSetpointTypes;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ThermostatSetpointCCSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst bitMask = raw.payload;\n\t\tconst supported = parseBitMask(\n\t\t\tbitMask,\n\t\t\tThermostatSetpointType[\"N/A\"],\n\t\t);\n\t\t// We use this command only when we are sure that bitmask interpretation A is used\n\t\t// FIXME: Figure out if we can do this without the CC version\n\t\tconst supportedSetpointTypes: ThermostatSetpointType[] = supported.map(\n\t\t\t(i) => thermostatSetpointTypeMap[i],\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportedSetpointTypes,\n\t\t});\n\t}\n\n\tpublic readonly supportedSetpointTypes: readonly ThermostatSetpointType[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = encodeBitMask(\n\t\t\t// Encode as interpretation A\n\t\t\tthis.supportedSetpointTypes\n\t\t\t\t.map((t) => thermostatSetpointTypeMap.indexOf(t))\n\t\t\t\t.filter((t) => t !== -1),\n\t\t\tundefined,\n\t\t\tThermostatSetpointType[\"N/A\"],\n\t\t);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supported setpoint types\": this.supportedSetpointTypes\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(t) =>\n\t\t\t\t\t\t\t`\\n\u00B7 ${\n\t\t\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\t\t\t\t\tt,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(ThermostatSetpointCommand.SupportedGet)\n@expectedCCResponse(ThermostatSetpointCCSupportedReport)\n/**\n * Issues a SupportedGet command to the node. Due to inconsistencies in interpretation,\n * this command should not be used for nodes with CC versions 1 or 2\n */\nexport class ThermostatSetpointCCSupportedGet extends ThermostatSetpointCC {}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": [
|
|
4
|
+
"sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype Scale,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype ValueMetadataNumeric,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tencodeBitMask,\n\tencodeFloatWithScale,\n\tgetNamedScale,\n\tgetUnknownScale,\n\tparseBitMask,\n\tparseFloatWithScale,\n\tsupervisedCommandSucceeded,\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\ttype SetValueImplementation,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n\ttype RefreshValuesContext,\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\tThermostatSetpointCommand,\n\tThermostatSetpointType,\n} from \"../lib/_Types.js\";\n\n// This array is used to map the advertised supported types (interpretation A)\n// to the actual enum values\nconst thermostatSetpointTypeMap = [\n\t0x00,\n\t0x01,\n\t0x02,\n\t0x07,\n\t0x08,\n\t0x09,\n\t0x0a,\n\t0x0b,\n\t0x0c,\n\t0x0d,\n\t0x0e,\n\t0x0f,\n];\n\nfunction getScale(scale: number): Scale {\n\treturn getNamedScale(\"temperature\", scale as any)\n\t\t?? getUnknownScale(scale);\n}\nfunction getSetpointUnit(scale: number): string {\n\treturn getScale(scale).unit ?? \"\";\n}\n\nexport const ThermostatSetpointCCValues = V.defineCCValues(\n\tCommandClasses[\"Thermostat Setpoint\"],\n\t{\n\t\t...V.staticProperty(\"supportedSetpointTypes\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"setpoint\",\n\t\t\t\"setpoint\",\n\t\t\t(setpointType: ThermostatSetpointType) => setpointType,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"setpoint\" && typeof propertyKey === \"number\",\n\t\t\t(setpointType: ThermostatSetpointType) => ({\n\t\t\t\t...ValueMetadata.Number,\n\t\t\t\tlabel: `Setpoint (${\n\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\t\tsetpointType,\n\t\t\t\t\t)\n\t\t\t\t})`,\n\t\t\t\tccSpecific: { setpointType },\n\t\t\t} as const),\n\t\t),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"setpointScale\",\n\t\t\t\"setpointScale\",\n\t\t\t(setpointType: ThermostatSetpointType) => setpointType,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"setpointScale\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\t},\n);\n\n@API(CommandClasses[\"Thermostat Setpoint\"])\nexport class ThermostatSetpointCCAPI extends CCAPI {\n\tpublic supportsCommand(\n\t\tcmd: ThermostatSetpointCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase ThermostatSetpointCommand.Get:\n\t\t\tcase ThermostatSetpointCommand.SupportedGet:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase ThermostatSetpointCommand.Set:\n\t\t\t\treturn true; // This is mandatory\n\t\t\tcase ThermostatSetpointCommand.CapabilitiesGet:\n\t\t\t\treturn this.version >= 3 && this.isSinglecast();\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(\n\t\t\tthis: ThermostatSetpointCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t\tvalue,\n\t\t) {\n\t\t\tif (property !== \"setpoint\") {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t\tif (typeof propertyKey !== \"number\") {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`${\n\t\t\t\t\t\tCommandClasses[this.ccId]\n\t\t\t\t\t}: \"${property}\" must be further specified by a numeric property key`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof value !== \"number\") {\n\t\t\t\tthrowWrongValueType(\n\t\t\t\t\tthis.ccId,\n\t\t\t\t\tproperty,\n\t\t\t\t\t\"number\",\n\t\t\t\t\ttypeof value,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// SDS14223: The Scale field value MUST be identical to the value received in the Thermostat Setpoint Report for the\n\t\t\t// actual Setpoint Type during the node interview. Fall back to the first scale if none is known\n\t\t\tconst preferredScale = this.tryGetValueDB()?.getValue<number>(\n\t\t\t\tThermostatSetpointCCValues.setpointScale(propertyKey).endpoint(\n\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t),\n\t\t\t);\n\t\t\tconst result = await this.set(\n\t\t\t\tpropertyKey,\n\t\t\t\tvalue,\n\t\t\t\tpreferredScale ?? 0,\n\t\t\t);\n\n\t\t\t// Verify the current value after a delay, unless the command was supervised and successful\n\t\t\tif (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n\t\t\t\t// TODO: Ideally this would be a short delay, but some thermostats like Remotec ZXT-600\n\t\t\t\t// aren't able to handle the GET this quickly.\n\t\t\t\tthis.schedulePoll({ property, propertyKey }, value);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(\n\t\t\tthis: ThermostatSetpointCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"setpoint\":\n\t\t\t\t\tif (typeof propertyKey !== \"number\") {\n\t\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t\t`${\n\t\t\t\t\t\t\t\tCommandClasses[this.ccId]\n\t\t\t\t\t\t\t}: \"${property}\" must be further specified by a numeric property key`,\n\t\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (await this.get(propertyKey))?.value;\n\t\t\t\tdefault:\n\t\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\t@validateArgs()\n\tpublic async get(\n\t\tsetpointType: ThermostatSetpointType,\n\t): Promise<{ value: number; scale: Scale } | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tThermostatSetpointCommand,\n\t\t\tThermostatSetpointCommand.Get,\n\t\t);\n\n\t\tconst cc = new ThermostatSetpointCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tsetpointType,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tThermostatSetpointCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (!response) return;\n\t\tif (response.type !== ThermostatSetpointType[\"N/A\"]) {\n\t\t\t// This is a supported setpoint\n\t\t\tconst scale = getScale(response.scale);\n\t\t\treturn {\n\t\t\t\tvalue: response.value,\n\t\t\t\tscale,\n\t\t\t};\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async set(\n\t\tsetpointType: ThermostatSetpointType,\n\t\tvalue: number,\n\t\tscale: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tThermostatSetpointCommand,\n\t\t\tThermostatSetpointCommand.Set,\n\t\t);\n\n\t\tconst cc = new ThermostatSetpointCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tsetpointType,\n\t\t\tvalue,\n\t\t\tscale,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getCapabilities(setpointType: ThermostatSetpointType) {\n\t\tthis.assertSupportsCommand(\n\t\t\tThermostatSetpointCommand,\n\t\t\tThermostatSetpointCommand.CapabilitiesGet,\n\t\t);\n\n\t\tconst cc = new ThermostatSetpointCCCapabilitiesGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tsetpointType,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tThermostatSetpointCCCapabilitiesReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"minValue\",\n\t\t\t\t\"maxValue\",\n\t\t\t\t\"minValueScale\",\n\t\t\t\t\"maxValueScale\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t/**\n\t * Requests the supported setpoint types from the node. Due to inconsistencies it is NOT recommended\n\t * to use this method on nodes with CC versions 1 and 2. Instead rely on the information determined\n\t * during node interview.\n\t */\n\tpublic async getSupportedSetpointTypes(): Promise<\n\t\tMaybeNotKnown<readonly ThermostatSetpointType[]>\n\t> {\n\t\tthis.assertSupportsCommand(\n\t\t\tThermostatSetpointCommand,\n\t\t\tThermostatSetpointCommand.SupportedGet,\n\t\t);\n\n\t\tconst cc = new ThermostatSetpointCCSupportedGet({\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\tThermostatSetpointCCSupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.supportedSetpointTypes;\n\t}\n}\n\n@commandClass(CommandClasses[\"Thermostat Setpoint\"])\n@implementedVersion(3)\n@ccValues(ThermostatSetpointCCValues)\nexport class ThermostatSetpointCC extends CommandClass {\n\tdeclare ccCommand: ThermostatSetpointCommand;\n\n\tpublic translatePropertyKey(\n\t\tctx: GetValueDB,\n\t\tproperty: string | number,\n\t\tpropertyKey: string | number,\n\t): string | undefined {\n\t\tif (property === \"setpoint\") {\n\t\t\treturn getEnumMemberName(\n\t\t\t\tThermostatSetpointType,\n\t\t\t\tpropertyKey as any,\n\t\t\t);\n\t\t} else {\n\t\t\treturn super.translatePropertyKey(ctx, property, propertyKey);\n\t\t}\n\t}\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[\"Thermostat Setpoint\"],\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 <= 2) {\n\t\t\t// It has been found that early implementations of this Command Class applied two non-interoperable\n\t\t\t// interpretations of the bit mask advertising the support for specific Setpoint Types in the Thermostat\n\t\t\t// Setpoint Supported Report Command.\n\t\t\t// A controlling node SHOULD determine the supported Setpoint Types of a version 1 and version 2\n\t\t\t// supporting node by sending one Thermostat Setpoint Get Command at a time while incrementing\n\t\t\t// the requested Setpoint Type.\n\t\t\t// If the same Setpoint Type is advertised in the returned Thermostat Setpoint Report Command, the\n\t\t\t// controlling node MUST conclude that the actual Setpoint Type is supported.\n\t\t\t// If the Setpoint Type 0x00 (type N/A) is advertised in the returned Thermostat Setpoint Report\n\t\t\t// Command, the controlling node MUST conclude that the actual Setpoint Type is not supported.\n\n\t\t\t// The specs require us to query the list of supported setpoint types anyways, even if the response is ignored\n\t\t\tawait api.getSupportedSetpointTypes();\n\n\t\t\t// Now scan all endpoints. Each type we received a value for gets marked as supported\n\t\t\tconst supportedSetpointTypes: ThermostatSetpointType[] = [];\n\t\t\tfor (\n\t\t\t\tlet type: ThermostatSetpointType =\n\t\t\t\t\tThermostatSetpointType.Heating;\n\t\t\t\ttype <= ThermostatSetpointType[\"Full Power\"];\n\t\t\t\ttype++\n\t\t\t) {\n\t\t\t\tconst setpointName = getEnumMemberName(\n\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\ttype,\n\t\t\t\t);\n\t\t\t\t// Every time, query the current value\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`querying current value of setpoint ${setpointName}...`,\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\n\t\t\t\tconst setpoint = await api.get(type);\n\t\t\t\t// If the node did not respond, assume the setpoint type is not supported\n\n\t\t\t\tlet logMessage: string;\n\t\t\t\tif (setpoint) {\n\t\t\t\t\t// Setpoint supported, remember the type\n\t\t\t\t\tsupportedSetpointTypes.push(type);\n\t\t\t\t\tlogMessage =\n\t\t\t\t\t\t`received current value of setpoint ${setpointName}: ${setpoint.value} ${\n\t\t\t\t\t\t\tsetpoint.scale.unit ?? \"\"\n\t\t\t\t\t\t}`;\n\t\t\t\t} else {\n\t\t\t\t\t// We're sure about the interpretation - this should not happen\n\t\t\t\t\tlogMessage = `setpoint ${setpointName} is not supported`;\n\t\t\t\t}\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Remember which setpoint types are actually supported\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tThermostatSetpointCCValues.supportedSetpointTypes,\n\t\t\t\tsupportedSetpointTypes,\n\t\t\t);\n\t\t} else {\n\t\t\t// Versions >= 3 adhere to bitmap interpretation A, so we can rely on getSupportedSetpointTypes\n\n\t\t\t// Query the supported setpoint types\n\t\t\tlet setpointTypes: ThermostatSetpointType[] = [];\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"retrieving supported setpoint types...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst resp = await api.getSupportedSetpointTypes();\n\t\t\tif (resp) {\n\t\t\t\tsetpointTypes = [...resp];\n\t\t\t\tconst logMessage = \"received supported setpoint types:\\n\"\n\t\t\t\t\t+ setpointTypes\n\t\t\t\t\t\t.map((type) =>\n\t\t\t\t\t\t\tgetEnumMemberName(ThermostatSetpointType, type)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((name) => `\u00B7 ${name}`)\n\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Querying supported setpoint types timed out, skipping interview...\",\n\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const type of setpointTypes) {\n\t\t\t\tconst setpointName = getEnumMemberName(\n\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\ttype,\n\t\t\t\t);\n\t\t\t\t// Find out the capabilities of this setpoint\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`retrieving capabilities for setpoint ${setpointName}...`,\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tconst setpointCaps = await api.getCapabilities(type);\n\t\t\t\tif (setpointCaps) {\n\t\t\t\t\tconst minValueUnit = getSetpointUnit(\n\t\t\t\t\t\tsetpointCaps.minValueScale,\n\t\t\t\t\t);\n\t\t\t\t\tconst maxValueUnit = getSetpointUnit(\n\t\t\t\t\t\tsetpointCaps.maxValueScale,\n\t\t\t\t\t);\n\t\t\t\t\tconst logMessage =\n\t\t\t\t\t\t`received capabilities for setpoint ${setpointName}:\nminimum value: ${setpointCaps.minValue} ${minValueUnit}\nmaximum value: ${setpointCaps.maxValue} ${maxValueUnit}`;\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Query the current value for all setpoint types\n\t\t\tawait this.refreshValues(ctx);\n\t\t}\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[\"Thermostat Setpoint\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tconst setpointTypes: ThermostatSetpointType[] = this.getValue(\n\t\t\tctx,\n\t\t\tThermostatSetpointCCValues.supportedSetpointTypes,\n\t\t) ?? [];\n\n\t\t// Query each setpoint's current value\n\t\tfor (const type of setpointTypes) {\n\t\t\tconst setpointName = getEnumMemberName(\n\t\t\t\tThermostatSetpointType,\n\t\t\t\ttype,\n\t\t\t);\n\t\t\t// Every time, query the current value\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`querying current value of setpoint ${setpointName}...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst setpoint = await api.get(type);\n\t\t\tif (setpoint) {\n\t\t\t\tconst logMessage =\n\t\t\t\t\t`received current value of setpoint ${setpointName}: ${setpoint.value} ${\n\t\t\t\t\t\tsetpoint.scale.unit ?? \"\"\n\t\t\t\t\t}`;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n// @publicAPI\nexport interface ThermostatSetpointCCSetOptions {\n\tsetpointType: ThermostatSetpointType;\n\tvalue: number;\n\tscale: number;\n}\n\n@CCCommand(ThermostatSetpointCommand.Set)\n@useSupervision()\nexport class ThermostatSetpointCCSet extends ThermostatSetpointCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ThermostatSetpointCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.setpointType = options.setpointType;\n\t\tthis.value = options.value;\n\t\tthis.scale = options.scale;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ThermostatSetpointCCSet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst setpointType: ThermostatSetpointType = raw.payload[0] & 0b1111;\n\n\t\t// parseFloatWithScale does its own validation\n\t\tconst { value, scale } = parseFloatWithScale(\n\t\t\traw.payload.subarray(1),\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsetpointType,\n\t\t\tvalue,\n\t\t\tscale,\n\t\t});\n\t}\n\n\tpublic setpointType: ThermostatSetpointType;\n\tpublic value: number;\n\tpublic scale: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\t// If a config file overwrites how the float should be encoded, use that information\n\t\tconst override = ctx.getDeviceConfig?.(this.nodeId as number)\n\t\t\t?.compat?.overrideFloatEncoding;\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.setpointType & 0b1111]),\n\t\t\tencodeFloatWithScale(this.value, this.scale, override),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst scale = getScale(this.scale);\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"setpoint type\": getEnumMemberName(\n\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\tthis.setpointType,\n\t\t\t\t),\n\t\t\t\tvalue: `${this.value} ${scale.unit}`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ThermostatSetpointCCReportOptions {\n\ttype: ThermostatSetpointType;\n\tvalue: number;\n\tscale: number;\n}\n\n@CCCommand(ThermostatSetpointCommand.Report)\nexport class ThermostatSetpointCCReport extends ThermostatSetpointCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ThermostatSetpointCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.type = options.type;\n\t\tthis.value = options.value;\n\t\tthis.scale = options.scale;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ThermostatSetpointCCReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst type: ThermostatSetpointType = raw.payload[0] & 0b1111;\n\n\t\tif (type === 0) {\n\t\t\t// Not supported\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\ttype,\n\t\t\t\tvalue: 0,\n\t\t\t\tscale: 0,\n\t\t\t});\n\t\t}\n\n\t\t// parseFloatWithScale does its own validation\n\t\tconst { value, scale } = parseFloatWithScale(\n\t\t\traw.payload.subarray(1),\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttype,\n\t\t\tvalue,\n\t\t\tscale,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tconst scale = getScale(this.scale);\n\n\t\tconst setpointValue = ThermostatSetpointCCValues.setpoint(this.type);\n\t\tconst existingMetadata = this.getMetadata<ValueMetadataNumeric>(\n\t\t\tctx,\n\t\t\tsetpointValue,\n\t\t);\n\n\t\t// Update the metadata when it is missing or the unit has changed\n\t\tif (existingMetadata?.unit !== scale.unit) {\n\t\t\tthis.setMetadata(ctx, setpointValue, {\n\t\t\t\t...(existingMetadata ?? setpointValue.meta),\n\t\t\t\tunit: scale.unit,\n\t\t\t});\n\t\t}\n\t\tthis.setValue(ctx, setpointValue, this.value);\n\n\t\t// Remember the device-preferred setpoint scale so it can be used in SET commands\n\t\tthis.setValue(\n\t\t\tctx,\n\t\t\tThermostatSetpointCCValues.setpointScale(this.type),\n\t\t\tscale.key,\n\t\t);\n\t\treturn true;\n\t}\n\n\tpublic type: ThermostatSetpointType;\n\tpublic scale: number;\n\tpublic value: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.type & 0b1111]),\n\t\t\tencodeFloatWithScale(this.value, this.scale),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst scale = getScale(this.scale);\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"setpoint type\": getEnumMemberName(\n\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\tthis.type,\n\t\t\t\t),\n\t\t\t\tvalue: `${this.value} ${scale.unit}`,\n\t\t\t},\n\t\t};\n\t}\n}\n\nfunction testResponseForThermostatSetpointGet(\n\tsent: ThermostatSetpointCCGet,\n\treceived: ThermostatSetpointCCReport,\n) {\n\t// We expect a Thermostat Setpoint Report that matches the requested setpoint type\n\treturn received.type === sent.setpointType;\n}\n\n// @publicAPI\nexport interface ThermostatSetpointCCGetOptions {\n\tsetpointType: ThermostatSetpointType;\n}\n\n@CCCommand(ThermostatSetpointCommand.Get)\n@expectedCCResponse(\n\tThermostatSetpointCCReport,\n\ttestResponseForThermostatSetpointGet,\n)\nexport class ThermostatSetpointCCGet extends ThermostatSetpointCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ThermostatSetpointCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.setpointType = options.setpointType;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ThermostatSetpointCCGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst setpointType: ThermostatSetpointType = raw.payload[0] & 0b1111;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsetpointType,\n\t\t});\n\t}\n\n\tpublic setpointType: ThermostatSetpointType;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.setpointType & 0b1111]);\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\"setpoint type\": getEnumMemberName(\n\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\tthis.setpointType,\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ThermostatSetpointCCCapabilitiesReportOptions {\n\ttype: ThermostatSetpointType;\n\tminValue: number;\n\tminValueScale: number;\n\tmaxValue: number;\n\tmaxValueScale: number;\n}\n\n@CCCommand(ThermostatSetpointCommand.CapabilitiesReport)\nexport class ThermostatSetpointCCCapabilitiesReport\n\textends ThermostatSetpointCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<ThermostatSetpointCCCapabilitiesReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.type = options.type;\n\t\tthis.minValue = options.minValue;\n\t\tthis.minValueScale = options.minValueScale;\n\t\tthis.maxValue = options.maxValue;\n\t\tthis.maxValueScale = options.maxValueScale;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ThermostatSetpointCCCapabilitiesReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst type: ThermostatSetpointType = raw.payload[0];\n\t\t// parseFloatWithScale does its own validation\n\t\tconst {\n\t\t\tvalue: minValue,\n\t\t\tscale: minValueScale,\n\t\t\tbytesRead,\n\t\t} = parseFloatWithScale(raw.payload.subarray(1));\n\t\tconst { value: maxValue, scale: maxValueScale } = parseFloatWithScale(\n\t\t\traw.payload.subarray(1 + bytesRead),\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttype,\n\t\t\tminValue,\n\t\t\tminValueScale,\n\t\t\tmaxValue,\n\t\t\tmaxValueScale,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\t// Predefine the metadata\n\t\tconst setpointValue = ThermostatSetpointCCValues.setpoint(this.type);\n\t\tthis.setMetadata(ctx, setpointValue, {\n\t\t\t...setpointValue.meta,\n\t\t\tmin: this.minValue,\n\t\t\tmax: this.maxValue,\n\t\t\tunit: getSetpointUnit(this.minValueScale)\n\t\t\t\t|| getSetpointUnit(this.maxValueScale),\n\t\t});\n\n\t\treturn true;\n\t}\n\n\tpublic type: ThermostatSetpointType;\n\tpublic minValue: number;\n\tpublic maxValue: number;\n\tpublic minValueScale: number;\n\tpublic maxValueScale: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst min = encodeFloatWithScale(this.minValue, this.minValueScale);\n\t\tconst max = encodeFloatWithScale(this.maxValue, this.maxValueScale);\n\t\tthis.payload = Bytes.concat([Bytes.from([this.type]), min, max]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst minValueScale = getScale(this.minValueScale);\n\t\tconst maxValueScale = getScale(this.maxValueScale);\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"setpoint type\": getEnumMemberName(\n\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\tthis.type,\n\t\t\t\t),\n\t\t\t\t\"min value\": `${this.minValue} ${minValueScale.unit}`,\n\t\t\t\t\"max value\": `${this.maxValue} ${maxValueScale.unit}`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ThermostatSetpointCCCapabilitiesGetOptions {\n\tsetpointType: ThermostatSetpointType;\n}\n\n@CCCommand(ThermostatSetpointCommand.CapabilitiesGet)\n@expectedCCResponse(ThermostatSetpointCCCapabilitiesReport)\nexport class ThermostatSetpointCCCapabilitiesGet extends ThermostatSetpointCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ThermostatSetpointCCCapabilitiesGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.setpointType = options.setpointType;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ThermostatSetpointCCCapabilitiesGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst setpointType: ThermostatSetpointType = raw.payload[0] & 0b1111;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsetpointType,\n\t\t});\n\t}\n\n\tpublic setpointType: ThermostatSetpointType;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.setpointType & 0b1111]);\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\"setpoint type\": getEnumMemberName(\n\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\tthis.setpointType,\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ThermostatSetpointCCSupportedReportOptions {\n\tsupportedSetpointTypes: ThermostatSetpointType[];\n}\n\n@CCCommand(ThermostatSetpointCommand.SupportedReport)\n@ccValueProperty(\n\t\"supportedSetpointTypes\",\n\tThermostatSetpointCCValues.supportedSetpointTypes,\n)\nexport class ThermostatSetpointCCSupportedReport extends ThermostatSetpointCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ThermostatSetpointCCSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tif (options.supportedSetpointTypes.length === 0) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`At least one setpoint type must be supported`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.supportedSetpointTypes = options.supportedSetpointTypes;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ThermostatSetpointCCSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst bitMask = raw.payload;\n\t\tconst supported = parseBitMask(\n\t\t\tbitMask,\n\t\t\tThermostatSetpointType[\"N/A\"],\n\t\t);\n\t\t// We use this command only when we are sure that bitmask interpretation A is used\n\t\t// FIXME: Figure out if we can do this without the CC version\n\t\tconst supportedSetpointTypes: ThermostatSetpointType[] = supported.map(\n\t\t\t(i) => thermostatSetpointTypeMap[i],\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportedSetpointTypes,\n\t\t});\n\t}\n\n\tpublic readonly supportedSetpointTypes: readonly ThermostatSetpointType[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = encodeBitMask(\n\t\t\t// Encode as interpretation A\n\t\t\tthis.supportedSetpointTypes\n\t\t\t\t.map((t) => thermostatSetpointTypeMap.indexOf(t))\n\t\t\t\t.filter((t) => t !== -1),\n\t\t\tundefined,\n\t\t\tThermostatSetpointType[\"N/A\"],\n\t\t);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supported setpoint types\": this.supportedSetpointTypes\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(t) =>\n\t\t\t\t\t\t\t`\\n\u00B7 ${\n\t\t\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\t\t\tThermostatSetpointType,\n\t\t\t\t\t\t\t\t\tt,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(ThermostatSetpointCommand.SupportedGet)\n@expectedCCResponse(ThermostatSetpointCCSupportedReport)\n/**\n * Issues a SupportedGet command to the node. Due to inconsistencies in interpretation,\n * this command should not be used for nodes with CC versions 1 or 2\n */\nexport class ThermostatSetpointCCSupportedGet extends ThermostatSetpointCC {}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
package/build/cjs/cc/TimeCC.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { type DSTInfo, type GetValueDB, type MessageOrCCLogEntry, type SupervisionResult, type WithAddress } from "@zwave-js/core";
|
|
3
|
-
import {
|
|
4
|
-
import { Bytes } from "@zwave-js/shared/safe";
|
|
1
|
+
import type { CCEncodingContext, CCParsingContext } from "@zwave-js/cc";
|
|
2
|
+
import { type DSTInfo, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type SupervisionResult, type WithAddress } from "@zwave-js/core";
|
|
3
|
+
import { Bytes } from "@zwave-js/shared";
|
|
5
4
|
import { CCAPI } from "../lib/API.js";
|
|
6
5
|
import { type CCRaw, CommandClass, type InterviewContext } from "../lib/CommandClass.js";
|
|
7
6
|
import { TimeCommand } from "../lib/_Types.js";
|
package/build/cjs/cc/TimeCC.js
CHANGED
|
@@ -42,8 +42,7 @@ __export(TimeCC_exports, {
|
|
|
42
42
|
module.exports = __toCommonJS(TimeCC_exports);
|
|
43
43
|
var __validateArgs = __toESM(require("./TimeCC._validateArgs.js"), 1);
|
|
44
44
|
var import_core = require("@zwave-js/core");
|
|
45
|
-
var
|
|
46
|
-
var import_safe2 = require("@zwave-js/shared/safe");
|
|
45
|
+
var import_shared = require("@zwave-js/shared");
|
|
47
46
|
var import_API = require("../lib/API.js");
|
|
48
47
|
var import_CommandClass = require("../lib/CommandClass.js");
|
|
49
48
|
var import_CommandClassDecorators = require("../lib/CommandClassDecorators.js");
|
|
@@ -148,7 +147,7 @@ let TimeCCAPI = (() => {
|
|
|
148
147
|
});
|
|
149
148
|
const response = await this.host.sendCommand(cc, this.commandOptions);
|
|
150
149
|
if (response) {
|
|
151
|
-
return (0,
|
|
150
|
+
return (0, import_shared.pick)(response, ["hour", "minute", "second"]);
|
|
152
151
|
}
|
|
153
152
|
}
|
|
154
153
|
async reportTime(hour, minute, second) {
|
|
@@ -171,7 +170,7 @@ let TimeCCAPI = (() => {
|
|
|
171
170
|
});
|
|
172
171
|
const response = await this.host.sendCommand(cc, this.commandOptions);
|
|
173
172
|
if (response) {
|
|
174
|
-
return (0,
|
|
173
|
+
return (0, import_shared.pick)(response, ["day", "month", "year"]);
|
|
175
174
|
}
|
|
176
175
|
}
|
|
177
176
|
async reportDate(year, month, day) {
|
|
@@ -320,7 +319,7 @@ let TimeCCTimeReport = (() => {
|
|
|
320
319
|
minute;
|
|
321
320
|
second;
|
|
322
321
|
serialize(ctx) {
|
|
323
|
-
this.payload =
|
|
322
|
+
this.payload = import_shared.Bytes.from([
|
|
324
323
|
this.hour & 31,
|
|
325
324
|
this.minute,
|
|
326
325
|
this.second
|
|
@@ -403,7 +402,7 @@ let TimeCCDateReport = (() => {
|
|
|
403
402
|
month;
|
|
404
403
|
day;
|
|
405
404
|
serialize(ctx) {
|
|
406
|
-
this.payload =
|
|
405
|
+
this.payload = import_shared.Bytes.from([
|
|
407
406
|
// 2 bytes placeholder for year
|
|
408
407
|
0,
|
|
409
408
|
0,
|
|
@@ -482,12 +481,12 @@ let TimeCCTimeOffsetSet = (() => {
|
|
|
482
481
|
dstStartDate;
|
|
483
482
|
dstEndDate;
|
|
484
483
|
serialize(ctx) {
|
|
485
|
-
this.payload =
|
|
484
|
+
this.payload = import_shared.Bytes.concat([
|
|
486
485
|
(0, import_serializers.encodeTimezone)({
|
|
487
486
|
standardOffset: this.standardOffset,
|
|
488
487
|
dstOffset: this.dstOffset
|
|
489
488
|
}),
|
|
490
|
-
|
|
489
|
+
import_shared.Bytes.from([
|
|
491
490
|
this.dstStartDate.getUTCMonth() + 1,
|
|
492
491
|
this.dstStartDate.getUTCDate(),
|
|
493
492
|
this.dstStartDate.getUTCHours(),
|
|
@@ -558,12 +557,12 @@ let TimeCCTimeOffsetReport = (() => {
|
|
|
558
557
|
dstStartDate;
|
|
559
558
|
dstEndDate;
|
|
560
559
|
serialize(ctx) {
|
|
561
|
-
this.payload =
|
|
560
|
+
this.payload = import_shared.Bytes.concat([
|
|
562
561
|
(0, import_serializers.encodeTimezone)({
|
|
563
562
|
standardOffset: this.standardOffset,
|
|
564
563
|
dstOffset: this.dstOffset
|
|
565
564
|
}),
|
|
566
|
-
|
|
565
|
+
import_shared.Bytes.from([
|
|
567
566
|
this.dstStartDate.getUTCMonth() + 1,
|
|
568
567
|
this.dstStartDate.getUTCDate(),
|
|
569
568
|
this.dstStartDate.getUTCHours(),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cc/TimeCC.ts"],
|
|
4
|
-
"sourcesContent": ["import { type CCEncodingContext, type CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype DSTInfo,\n\ttype GetValueDB,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype SupervisionResult,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tformatDate,\n\tgetDSTInfo,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { type MaybeNotKnown } from \"@zwave-js/core/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { pick } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { TimeCommand } from \"../lib/_Types.js\";\nimport { encodeTimezone, parseTimezone } from \"../lib/serializers.js\";\n\n// @noSetValueAPI\n// Only the timezone information can be set and that accepts a non-primitive value\n\n@API(CommandClasses.Time)\nexport class TimeCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: TimeCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase TimeCommand.TimeGet:\n\t\t\tcase TimeCommand.TimeReport:\n\t\t\tcase TimeCommand.DateGet:\n\t\t\tcase TimeCommand.DateReport:\n\t\t\t\treturn this.isSinglecast(); // \"mandatory\"\n\t\t\tcase TimeCommand.TimeOffsetGet:\n\t\t\tcase TimeCommand.TimeOffsetReport:\n\t\t\t\treturn this.version >= 2 && this.isSinglecast();\n\t\t\tcase TimeCommand.TimeOffsetSet:\n\t\t\t\treturn this.version >= 2;\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 getTime() {\n\t\tthis.assertSupportsCommand(TimeCommand, TimeCommand.TimeGet);\n\n\t\tconst cc = new TimeCCTimeGet({\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<TimeCCTimeReport>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"hour\", \"minute\", \"second\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async reportTime(\n\t\thour: number,\n\t\tminute: number,\n\t\tsecond: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(TimeCommand, TimeCommand.TimeReport);\n\n\t\tconst cc = new TimeCCTimeReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\thour,\n\t\t\tminute,\n\t\t\tsecond,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getDate() {\n\t\tthis.assertSupportsCommand(TimeCommand, TimeCommand.DateGet);\n\n\t\tconst cc = new TimeCCDateGet({\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<TimeCCDateReport>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"day\", \"month\", \"year\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async reportDate(\n\t\tyear: number,\n\t\tmonth: number,\n\t\tday: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(TimeCommand, TimeCommand.DateReport);\n\n\t\tconst cc = new TimeCCDateReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tyear,\n\t\t\tmonth,\n\t\t\tday,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async setTimezone(\n\t\ttimezone: DSTInfo,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetSet);\n\n\t\tconst cc = new TimeCCTimeOffsetSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tstandardOffset: timezone.standardOffset,\n\t\t\tdstOffset: timezone.dstOffset,\n\t\t\tdstStart: timezone.startDate,\n\t\t\tdstEnd: timezone.endDate,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\tpublic async getTimezone(): Promise<MaybeNotKnown<DSTInfo>> {\n\t\tthis.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetGet);\n\n\t\tconst cc = new TimeCCTimeOffsetGet({\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\tTimeCCTimeOffsetReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn {\n\t\t\t\tstandardOffset: response.standardOffset,\n\t\t\t\tdstOffset: response.dstOffset,\n\t\t\t\tstartDate: response.dstStartDate,\n\t\t\t\tendDate: response.dstEndDate,\n\t\t\t};\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async reportTimezone(\n\t\ttimezone: DSTInfo,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetReport);\n\n\t\tconst cc = new TimeCCTimeOffsetReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tstandardOffset: timezone.standardOffset,\n\t\t\tdstOffset: timezone.dstOffset,\n\t\t\tdstStart: timezone.startDate,\n\t\t\tdstEnd: timezone.endDate,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses.Time)\n@implementedVersion(2)\nexport class TimeCC extends CommandClass {\n\tdeclare ccCommand: TimeCommand;\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.Time,\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\t// Synchronize the slave's time\n\t\tif (api.version >= 2) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"setting timezone information...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\t// Set the correct timezone on this node\n\t\t\tconst timezone = getDSTInfo();\n\t\t\tawait api.setTimezone(timezone);\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface TimeCCTimeReportOptions {\n\thour: number;\n\tminute: number;\n\tsecond: number;\n}\n\n@CCCommand(TimeCommand.TimeReport)\nexport class TimeCCTimeReport extends TimeCC {\n\tpublic constructor(\n\t\toptions: WithAddress<TimeCCTimeReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.hour = options.hour;\n\t\tthis.minute = options.minute;\n\t\tthis.second = options.second;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): TimeCCTimeReport {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst hour = raw.payload[0] & 0b11111;\n\t\tconst minute = raw.payload[1];\n\t\tconst second = raw.payload[2];\n\n\t\tvalidatePayload(\n\t\t\thour >= 0,\n\t\t\thour <= 23,\n\t\t\tminute >= 0,\n\t\t\tminute <= 59,\n\t\t\tsecond >= 0,\n\t\t\tsecond <= 59,\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\thour,\n\t\t\tminute,\n\t\t\tsecond,\n\t\t});\n\t}\n\n\tpublic hour: number;\n\tpublic minute: number;\n\tpublic second: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.hour & 0b11111,\n\t\t\tthis.minute,\n\t\t\tthis.second,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\ttime: `${this.hour.toString().padStart(2, \"0\")}:${\n\t\t\t\t\tthis.minute.toString().padStart(2, \"0\")\n\t\t\t\t}:${this.second.toString().padStart(2, \"0\")}`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(TimeCommand.TimeGet)\n@expectedCCResponse(TimeCCTimeReport)\nexport class TimeCCTimeGet extends TimeCC {}\n\n// @publicAPI\nexport interface TimeCCDateReportOptions {\n\tyear: number;\n\tmonth: number;\n\tday: number;\n}\n\n@CCCommand(TimeCommand.DateReport)\nexport class TimeCCDateReport extends TimeCC {\n\tpublic constructor(\n\t\toptions: WithAddress<TimeCCDateReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.year = options.year;\n\t\tthis.month = options.month;\n\t\tthis.day = options.day;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): TimeCCDateReport {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst year = raw.payload.readUInt16BE(0);\n\t\tconst month = raw.payload[2];\n\t\tconst day = raw.payload[3];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tyear,\n\t\t\tmonth,\n\t\t\tday,\n\t\t});\n\t}\n\n\tpublic year: number;\n\tpublic month: number;\n\tpublic day: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\t// 2 bytes placeholder for year\n\t\t\t0,\n\t\t\t0,\n\t\t\tthis.month,\n\t\t\tthis.day,\n\t\t]);\n\t\tthis.payload.writeUInt16BE(this.year, 0);\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\tdate: `${this.year.toString().padStart(4, \"0\")}-${\n\t\t\t\t\tthis.month.toString().padStart(2, \"0\")\n\t\t\t\t}-${this.day.toString().padStart(2, \"0\")}`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(TimeCommand.DateGet)\n@expectedCCResponse(TimeCCDateReport)\nexport class TimeCCDateGet extends TimeCC {}\n\n// @publicAPI\nexport interface TimeCCTimeOffsetSetOptions {\n\tstandardOffset: number;\n\tdstOffset: number;\n\tdstStart: Date;\n\tdstEnd: Date;\n}\n\n@CCCommand(TimeCommand.TimeOffsetSet)\n@useSupervision()\nexport class TimeCCTimeOffsetSet extends TimeCC {\n\tpublic constructor(\n\t\toptions: WithAddress<TimeCCTimeOffsetSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.standardOffset = options.standardOffset;\n\t\tthis.dstOffset = options.dstOffset;\n\t\tthis.dstStartDate = options.dstStart;\n\t\tthis.dstEndDate = options.dstEnd;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): TimeCCTimeOffsetSet {\n\t\t// TODO: Deserialize payload\n\t\tthrow new ZWaveError(\n\t\t\t`${this.name}: deserialization not implemented`,\n\t\t\tZWaveErrorCodes.Deserialization_NotImplemented,\n\t\t);\n\n\t\t// return new TimeCCTimeOffsetSet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic standardOffset: number;\n\tpublic dstOffset: number;\n\tpublic dstStartDate: Date;\n\tpublic dstEndDate: Date;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\tencodeTimezone({\n\t\t\t\tstandardOffset: this.standardOffset,\n\t\t\t\tdstOffset: this.dstOffset,\n\t\t\t}),\n\t\t\tBytes.from([\n\t\t\t\tthis.dstStartDate.getUTCMonth() + 1,\n\t\t\t\tthis.dstStartDate.getUTCDate(),\n\t\t\t\tthis.dstStartDate.getUTCHours(),\n\t\t\t\tthis.dstEndDate.getUTCMonth() + 1,\n\t\t\t\tthis.dstEndDate.getUTCDate(),\n\t\t\t\tthis.dstEndDate.getUTCHours(),\n\t\t\t]),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"standard time offset\": `${this.standardOffset} minutes`,\n\t\t\t\t\"DST offset\": `${this.dstOffset} minutes`,\n\t\t\t\t\"DST start date\": formatDate(this.dstStartDate, \"YYYY-MM-DD\"),\n\t\t\t\t\"DST end date\": formatDate(this.dstEndDate, \"YYYY-MM-DD\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface TimeCCTimeOffsetReportOptions {\n\tstandardOffset: number;\n\tdstOffset: number;\n\tdstStart: Date;\n\tdstEnd: Date;\n}\n\n@CCCommand(TimeCommand.TimeOffsetReport)\nexport class TimeCCTimeOffsetReport extends TimeCC {\n\tpublic constructor(\n\t\toptions: WithAddress<TimeCCTimeOffsetReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.standardOffset = options.standardOffset;\n\t\tthis.dstOffset = options.dstOffset;\n\t\tthis.dstStartDate = options.dstStart;\n\t\tthis.dstEndDate = options.dstEnd;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): TimeCCTimeOffsetReport {\n\t\tvalidatePayload(raw.payload.length >= 9);\n\t\tconst { standardOffset, dstOffset } = parseTimezone(raw.payload);\n\t\tconst currentYear = new Date().getUTCFullYear();\n\t\tconst dstStartDate: Date = new Date(\n\t\t\tDate.UTC(\n\t\t\t\tcurrentYear,\n\t\t\t\traw.payload[3] - 1,\n\t\t\t\traw.payload[4],\n\t\t\t\traw.payload[5],\n\t\t\t),\n\t\t);\n\t\tconst dstEndDate: Date = new Date(\n\t\t\tDate.UTC(\n\t\t\t\tcurrentYear,\n\t\t\t\traw.payload[6] - 1,\n\t\t\t\traw.payload[7],\n\t\t\t\traw.payload[8],\n\t\t\t),\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tstandardOffset,\n\t\t\tdstOffset,\n\t\t\tdstStart: dstStartDate,\n\t\t\tdstEnd: dstEndDate,\n\t\t});\n\t}\n\n\tpublic standardOffset: number;\n\tpublic dstOffset: number;\n\tpublic dstStartDate: Date;\n\tpublic dstEndDate: Date;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\tencodeTimezone({\n\t\t\t\tstandardOffset: this.standardOffset,\n\t\t\t\tdstOffset: this.dstOffset,\n\t\t\t}),\n\t\t\tBytes.from([\n\t\t\t\tthis.dstStartDate.getUTCMonth() + 1,\n\t\t\t\tthis.dstStartDate.getUTCDate(),\n\t\t\t\tthis.dstStartDate.getUTCHours(),\n\t\t\t\tthis.dstEndDate.getUTCMonth() + 1,\n\t\t\t\tthis.dstEndDate.getUTCDate(),\n\t\t\t\tthis.dstEndDate.getUTCHours(),\n\t\t\t]),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"standard time offset\": `${this.standardOffset} minutes`,\n\t\t\t\t\"DST offset\": `${this.dstOffset} minutes`,\n\t\t\t\t\"DST start date\": formatDate(this.dstStartDate, \"YYYY-MM-DD\"),\n\t\t\t\t\"DST end date\": formatDate(this.dstEndDate, \"YYYY-MM-DD\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(TimeCommand.TimeOffsetGet)\n@expectedCCResponse(TimeCCTimeOffsetReport)\nexport class TimeCCTimeOffsetGet extends TimeCC {}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,
|
|
6
|
-
"names": [
|
|
4
|
+
"sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype DSTInfo,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype SupervisionResult,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tformatDate,\n\tgetDSTInfo,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, pick } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { TimeCommand } from \"../lib/_Types.js\";\nimport { encodeTimezone, parseTimezone } from \"../lib/serializers.js\";\n\n// @noSetValueAPI\n// Only the timezone information can be set and that accepts a non-primitive value\n\n@API(CommandClasses.Time)\nexport class TimeCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: TimeCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase TimeCommand.TimeGet:\n\t\t\tcase TimeCommand.TimeReport:\n\t\t\tcase TimeCommand.DateGet:\n\t\t\tcase TimeCommand.DateReport:\n\t\t\t\treturn this.isSinglecast(); // \"mandatory\"\n\t\t\tcase TimeCommand.TimeOffsetGet:\n\t\t\tcase TimeCommand.TimeOffsetReport:\n\t\t\t\treturn this.version >= 2 && this.isSinglecast();\n\t\t\tcase TimeCommand.TimeOffsetSet:\n\t\t\t\treturn this.version >= 2;\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 getTime() {\n\t\tthis.assertSupportsCommand(TimeCommand, TimeCommand.TimeGet);\n\n\t\tconst cc = new TimeCCTimeGet({\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<TimeCCTimeReport>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"hour\", \"minute\", \"second\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async reportTime(\n\t\thour: number,\n\t\tminute: number,\n\t\tsecond: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(TimeCommand, TimeCommand.TimeReport);\n\n\t\tconst cc = new TimeCCTimeReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\thour,\n\t\t\tminute,\n\t\t\tsecond,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getDate() {\n\t\tthis.assertSupportsCommand(TimeCommand, TimeCommand.DateGet);\n\n\t\tconst cc = new TimeCCDateGet({\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<TimeCCDateReport>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"day\", \"month\", \"year\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async reportDate(\n\t\tyear: number,\n\t\tmonth: number,\n\t\tday: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(TimeCommand, TimeCommand.DateReport);\n\n\t\tconst cc = new TimeCCDateReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tyear,\n\t\t\tmonth,\n\t\t\tday,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async setTimezone(\n\t\ttimezone: DSTInfo,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetSet);\n\n\t\tconst cc = new TimeCCTimeOffsetSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tstandardOffset: timezone.standardOffset,\n\t\t\tdstOffset: timezone.dstOffset,\n\t\t\tdstStart: timezone.startDate,\n\t\t\tdstEnd: timezone.endDate,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\tpublic async getTimezone(): Promise<MaybeNotKnown<DSTInfo>> {\n\t\tthis.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetGet);\n\n\t\tconst cc = new TimeCCTimeOffsetGet({\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\tTimeCCTimeOffsetReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn {\n\t\t\t\tstandardOffset: response.standardOffset,\n\t\t\t\tdstOffset: response.dstOffset,\n\t\t\t\tstartDate: response.dstStartDate,\n\t\t\t\tendDate: response.dstEndDate,\n\t\t\t};\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async reportTimezone(\n\t\ttimezone: DSTInfo,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetReport);\n\n\t\tconst cc = new TimeCCTimeOffsetReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tstandardOffset: timezone.standardOffset,\n\t\t\tdstOffset: timezone.dstOffset,\n\t\t\tdstStart: timezone.startDate,\n\t\t\tdstEnd: timezone.endDate,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses.Time)\n@implementedVersion(2)\nexport class TimeCC extends CommandClass {\n\tdeclare ccCommand: TimeCommand;\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.Time,\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\t// Synchronize the slave's time\n\t\tif (api.version >= 2) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"setting timezone information...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\t// Set the correct timezone on this node\n\t\t\tconst timezone = getDSTInfo();\n\t\t\tawait api.setTimezone(timezone);\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface TimeCCTimeReportOptions {\n\thour: number;\n\tminute: number;\n\tsecond: number;\n}\n\n@CCCommand(TimeCommand.TimeReport)\nexport class TimeCCTimeReport extends TimeCC {\n\tpublic constructor(\n\t\toptions: WithAddress<TimeCCTimeReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.hour = options.hour;\n\t\tthis.minute = options.minute;\n\t\tthis.second = options.second;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): TimeCCTimeReport {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst hour = raw.payload[0] & 0b11111;\n\t\tconst minute = raw.payload[1];\n\t\tconst second = raw.payload[2];\n\n\t\tvalidatePayload(\n\t\t\thour >= 0,\n\t\t\thour <= 23,\n\t\t\tminute >= 0,\n\t\t\tminute <= 59,\n\t\t\tsecond >= 0,\n\t\t\tsecond <= 59,\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\thour,\n\t\t\tminute,\n\t\t\tsecond,\n\t\t});\n\t}\n\n\tpublic hour: number;\n\tpublic minute: number;\n\tpublic second: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.hour & 0b11111,\n\t\t\tthis.minute,\n\t\t\tthis.second,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\ttime: `${this.hour.toString().padStart(2, \"0\")}:${\n\t\t\t\t\tthis.minute.toString().padStart(2, \"0\")\n\t\t\t\t}:${this.second.toString().padStart(2, \"0\")}`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(TimeCommand.TimeGet)\n@expectedCCResponse(TimeCCTimeReport)\nexport class TimeCCTimeGet extends TimeCC {}\n\n// @publicAPI\nexport interface TimeCCDateReportOptions {\n\tyear: number;\n\tmonth: number;\n\tday: number;\n}\n\n@CCCommand(TimeCommand.DateReport)\nexport class TimeCCDateReport extends TimeCC {\n\tpublic constructor(\n\t\toptions: WithAddress<TimeCCDateReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.year = options.year;\n\t\tthis.month = options.month;\n\t\tthis.day = options.day;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): TimeCCDateReport {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst year = raw.payload.readUInt16BE(0);\n\t\tconst month = raw.payload[2];\n\t\tconst day = raw.payload[3];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tyear,\n\t\t\tmonth,\n\t\t\tday,\n\t\t});\n\t}\n\n\tpublic year: number;\n\tpublic month: number;\n\tpublic day: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\t// 2 bytes placeholder for year\n\t\t\t0,\n\t\t\t0,\n\t\t\tthis.month,\n\t\t\tthis.day,\n\t\t]);\n\t\tthis.payload.writeUInt16BE(this.year, 0);\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\tdate: `${this.year.toString().padStart(4, \"0\")}-${\n\t\t\t\t\tthis.month.toString().padStart(2, \"0\")\n\t\t\t\t}-${this.day.toString().padStart(2, \"0\")}`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(TimeCommand.DateGet)\n@expectedCCResponse(TimeCCDateReport)\nexport class TimeCCDateGet extends TimeCC {}\n\n// @publicAPI\nexport interface TimeCCTimeOffsetSetOptions {\n\tstandardOffset: number;\n\tdstOffset: number;\n\tdstStart: Date;\n\tdstEnd: Date;\n}\n\n@CCCommand(TimeCommand.TimeOffsetSet)\n@useSupervision()\nexport class TimeCCTimeOffsetSet extends TimeCC {\n\tpublic constructor(\n\t\toptions: WithAddress<TimeCCTimeOffsetSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.standardOffset = options.standardOffset;\n\t\tthis.dstOffset = options.dstOffset;\n\t\tthis.dstStartDate = options.dstStart;\n\t\tthis.dstEndDate = options.dstEnd;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): TimeCCTimeOffsetSet {\n\t\t// TODO: Deserialize payload\n\t\tthrow new ZWaveError(\n\t\t\t`${this.name}: deserialization not implemented`,\n\t\t\tZWaveErrorCodes.Deserialization_NotImplemented,\n\t\t);\n\n\t\t// return new TimeCCTimeOffsetSet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic standardOffset: number;\n\tpublic dstOffset: number;\n\tpublic dstStartDate: Date;\n\tpublic dstEndDate: Date;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\tencodeTimezone({\n\t\t\t\tstandardOffset: this.standardOffset,\n\t\t\t\tdstOffset: this.dstOffset,\n\t\t\t}),\n\t\t\tBytes.from([\n\t\t\t\tthis.dstStartDate.getUTCMonth() + 1,\n\t\t\t\tthis.dstStartDate.getUTCDate(),\n\t\t\t\tthis.dstStartDate.getUTCHours(),\n\t\t\t\tthis.dstEndDate.getUTCMonth() + 1,\n\t\t\t\tthis.dstEndDate.getUTCDate(),\n\t\t\t\tthis.dstEndDate.getUTCHours(),\n\t\t\t]),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"standard time offset\": `${this.standardOffset} minutes`,\n\t\t\t\t\"DST offset\": `${this.dstOffset} minutes`,\n\t\t\t\t\"DST start date\": formatDate(this.dstStartDate, \"YYYY-MM-DD\"),\n\t\t\t\t\"DST end date\": formatDate(this.dstEndDate, \"YYYY-MM-DD\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface TimeCCTimeOffsetReportOptions {\n\tstandardOffset: number;\n\tdstOffset: number;\n\tdstStart: Date;\n\tdstEnd: Date;\n}\n\n@CCCommand(TimeCommand.TimeOffsetReport)\nexport class TimeCCTimeOffsetReport extends TimeCC {\n\tpublic constructor(\n\t\toptions: WithAddress<TimeCCTimeOffsetReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.standardOffset = options.standardOffset;\n\t\tthis.dstOffset = options.dstOffset;\n\t\tthis.dstStartDate = options.dstStart;\n\t\tthis.dstEndDate = options.dstEnd;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): TimeCCTimeOffsetReport {\n\t\tvalidatePayload(raw.payload.length >= 9);\n\t\tconst { standardOffset, dstOffset } = parseTimezone(raw.payload);\n\t\tconst currentYear = new Date().getUTCFullYear();\n\t\tconst dstStartDate: Date = new Date(\n\t\t\tDate.UTC(\n\t\t\t\tcurrentYear,\n\t\t\t\traw.payload[3] - 1,\n\t\t\t\traw.payload[4],\n\t\t\t\traw.payload[5],\n\t\t\t),\n\t\t);\n\t\tconst dstEndDate: Date = new Date(\n\t\t\tDate.UTC(\n\t\t\t\tcurrentYear,\n\t\t\t\traw.payload[6] - 1,\n\t\t\t\traw.payload[7],\n\t\t\t\traw.payload[8],\n\t\t\t),\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tstandardOffset,\n\t\t\tdstOffset,\n\t\t\tdstStart: dstStartDate,\n\t\t\tdstEnd: dstEndDate,\n\t\t});\n\t}\n\n\tpublic standardOffset: number;\n\tpublic dstOffset: number;\n\tpublic dstStartDate: Date;\n\tpublic dstEndDate: Date;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\tencodeTimezone({\n\t\t\t\tstandardOffset: this.standardOffset,\n\t\t\t\tdstOffset: this.dstOffset,\n\t\t\t}),\n\t\t\tBytes.from([\n\t\t\t\tthis.dstStartDate.getUTCMonth() + 1,\n\t\t\t\tthis.dstStartDate.getUTCDate(),\n\t\t\t\tthis.dstStartDate.getUTCHours(),\n\t\t\t\tthis.dstEndDate.getUTCMonth() + 1,\n\t\t\t\tthis.dstEndDate.getUTCDate(),\n\t\t\t\tthis.dstEndDate.getUTCHours(),\n\t\t\t]),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"standard time offset\": `${this.standardOffset} minutes`,\n\t\t\t\t\"DST offset\": `${this.dstOffset} minutes`,\n\t\t\t\t\"DST start date\": formatDate(this.dstStartDate, \"YYYY-MM-DD\"),\n\t\t\t\t\"DST end date\": formatDate(this.dstEndDate, \"YYYY-MM-DD\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(TimeCommand.TimeOffsetGet)\n@expectedCCResponse(TimeCCTimeOffsetReport)\nexport class TimeCCTimeOffsetGet extends TimeCC {}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { CommandClasses, type GetValueDB, type MessageOrCCLogEntry, type SupervisionResult, type WithAddress } from "@zwave-js/core";
|
|
3
|
-
import {
|
|
4
|
-
import { Bytes } from "@zwave-js/shared/safe";
|
|
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";
|
|
5
4
|
import { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation } from "../lib/API.js";
|
|
6
5
|
import { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext } from "../lib/CommandClass.js";
|
|
7
6
|
import { TimeParametersCommand } from "../lib/_Types.js";
|
|
@@ -39,7 +39,7 @@ __export(TimeParametersCC_exports, {
|
|
|
39
39
|
module.exports = __toCommonJS(TimeParametersCC_exports);
|
|
40
40
|
var __validateArgs = __toESM(require("./TimeParametersCC._validateArgs.js"), 1);
|
|
41
41
|
var import_core = require("@zwave-js/core");
|
|
42
|
-
var
|
|
42
|
+
var import_shared = require("@zwave-js/shared");
|
|
43
43
|
var import_API = require("../lib/API.js");
|
|
44
44
|
var import_CommandClass = require("../lib/CommandClass.js");
|
|
45
45
|
var import_CommandClassDecorators = require("../lib/CommandClassDecorators.js");
|
|
@@ -389,7 +389,7 @@ let TimeParametersCCSet = (() => {
|
|
|
389
389
|
useLocalTime;
|
|
390
390
|
serialize(ctx) {
|
|
391
391
|
const dateSegments = dateToSegments(this.dateAndTime, !!this.useLocalTime);
|
|
392
|
-
this.payload =
|
|
392
|
+
this.payload = import_shared.Bytes.from([
|
|
393
393
|
// 2 bytes placeholder for year
|
|
394
394
|
0,
|
|
395
395
|
0,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cc/TimeParametersCC.ts"],
|
|
4
|
-
"sourcesContent": ["import { type CCEncodingContext, type CCParsingContext } from \"@zwave-js/cc\";\nimport { type GetDeviceConfig } from \"@zwave-js/config\";\nimport {\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tformatDate,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport {\n\ttype ControlsCC,\n\ttype EndpointId,\n\ttype MaybeNotKnown,\n\ttype SupportsCC,\n} from \"@zwave-js/core/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\ttype SetValueImplementation,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { TimeParametersCommand } from \"../lib/_Types.js\";\n\nexport const TimeParametersCCValues = V.defineCCValues(\n\tCommandClasses[\"Time Parameters\"],\n\t{\n\t\t...V.staticProperty(\n\t\t\t\"dateAndTime\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.Any,\n\t\t\t\tlabel: \"Date and Time\",\n\t\t\t} as const,\n\t\t),\n\t},\n);\n\n/**\n * Determines if the node expects local time instead of UTC.\n */\nfunction shouldUseLocalTime(\n\tctx: GetDeviceConfig,\n\tendpoint: EndpointId & SupportsCC & ControlsCC,\n): boolean {\n\t// GH#311 Some nodes have no way to determine the time zone offset,\n\t// so they need to interpret the set time as local time instead of UTC.\n\t//\n\t// This is the case when they both\n\t// 1. DON'T control TimeCC V1, so they cannot request the local time\n\t// 2. DON'T support TimeCC V2, so the controller cannot specify the timezone offset\n\t// Incidentally, this is also true when they don't support TimeCC at all\n\n\t// Use UTC though when the device config file explicitly requests it\n\tconst forceUTC = !!ctx.getDeviceConfig?.(endpoint.nodeId)?.compat\n\t\t?.useUTCInTimeParametersCC;\n\tif (forceUTC) return false;\n\n\tconst ccVersion = endpoint.getCCVersion(CommandClasses.Time);\n\tif (ccVersion >= 1 && endpoint.controlsCC(CommandClasses.Time)) {\n\t\treturn false;\n\t}\n\tif (ccVersion >= 2 && endpoint.supportsCC(CommandClasses.Time)) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\ninterface DateSegments {\n\tyear: number;\n\tmonth: number;\n\tday: number;\n\thour: number;\n\tminute: number;\n\tsecond: number;\n}\n\nfunction segmentsToDate(segments: DateSegments, local: boolean): Date {\n\tif (local) {\n\t\treturn new Date(\n\t\t\tsegments.year,\n\t\t\tsegments.month - 1,\n\t\t\tsegments.day,\n\t\t\tsegments.hour,\n\t\t\tsegments.minute,\n\t\t\tsegments.second,\n\t\t);\n\t} else {\n\t\treturn new Date(\n\t\t\tDate.UTC(\n\t\t\t\tsegments.year,\n\t\t\t\tsegments.month - 1,\n\t\t\t\tsegments.day,\n\t\t\t\tsegments.hour,\n\t\t\t\tsegments.minute,\n\t\t\t\tsegments.second,\n\t\t\t),\n\t\t);\n\t}\n}\n\nfunction dateToSegments(date: Date, local: boolean): DateSegments {\n\treturn {\n\t\tyear: (date as any)[`get${local ? \"\" : \"UTC\"}FullYear`]() as number,\n\t\tmonth: ((date as any)[`get${local ? \"\" : \"UTC\"}Month`]() as number) + 1,\n\t\tday: (date as any)[`get${local ? \"\" : \"UTC\"}Date`]() as number,\n\t\thour: (date as any)[`get${local ? \"\" : \"UTC\"}Hours`]() as number,\n\t\tminute: (date as any)[`get${local ? \"\" : \"UTC\"}Minutes`]() as number,\n\t\tsecond: (date as any)[`get${local ? \"\" : \"UTC\"}Seconds`]() as number,\n\t};\n}\n\n@API(CommandClasses[\"Time Parameters\"])\nexport class TimeParametersCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: TimeParametersCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase TimeParametersCommand.Get:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase TimeParametersCommand.Set:\n\t\t\t\treturn true; // This is mandatory\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(this: TimeParametersCCAPI, { property }, value) {\n\t\t\tif (property !== \"dateAndTime\") {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t\tif (!(value instanceof Date)) {\n\t\t\t\tthrowWrongValueType(this.ccId, property, \"date\", typeof value);\n\t\t\t}\n\t\t\treturn this.set(value);\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: TimeParametersCCAPI, { property }) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"dateAndTime\":\n\t\t\t\t\treturn this.get();\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\tpublic async get(): Promise<MaybeNotKnown<Date>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tTimeParametersCommand,\n\t\t\tTimeParametersCommand.Get,\n\t\t);\n\n\t\tconst cc = new TimeParametersCCGet({\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\tTimeParametersCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.dateAndTime;\n\t}\n\n\t@validateArgs()\n\tpublic async set(\n\t\tdateAndTime: Date,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tTimeParametersCommand,\n\t\t\tTimeParametersCommand.Set,\n\t\t);\n\n\t\tconst endpointToCheck = this.endpoint.virtual\n\t\t\t? this.endpoint.node.physicalNodes[0].getEndpoint(\n\t\t\t\tthis.endpoint.index,\n\t\t\t)!\n\t\t\t: this.endpoint;\n\n\t\tconst useLocalTime = shouldUseLocalTime(this.host, endpointToCheck);\n\n\t\tconst cc = new TimeParametersCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tdateAndTime,\n\t\t\tuseLocalTime,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses[\"Time Parameters\"])\n@implementedVersion(1)\n@ccValues(TimeParametersCCValues)\nexport class TimeParametersCC extends CommandClass {\n\tdeclare ccCommand: TimeParametersCommand;\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[\"Time Parameters\"],\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\t// Synchronize the node's time\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"setting current time...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tawait api.set(new Date());\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface TimeParametersCCReportOptions {\n\tdateAndTime: Date;\n}\n\n@CCCommand(TimeParametersCommand.Report)\n@ccValueProperty(\"dateAndTime\", TimeParametersCCValues.dateAndTime)\nexport class TimeParametersCCReport extends TimeParametersCC {\n\tpublic constructor(\n\t\toptions: WithAddress<TimeParametersCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.dateAndTime = options.dateAndTime;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): TimeParametersCCReport {\n\t\tvalidatePayload(raw.payload.length >= 7);\n\t\tconst dateSegments = {\n\t\t\tyear: raw.payload.readUInt16BE(0),\n\t\t\tmonth: raw.payload[2],\n\t\t\tday: raw.payload[3],\n\t\t\thour: raw.payload[4],\n\t\t\tminute: raw.payload[5],\n\t\t\tsecond: raw.payload[6],\n\t\t};\n\t\tconst dateAndTime: Date = segmentsToDate(\n\t\t\tdateSegments,\n\t\t\t// Assume we can use UTC and correct this assumption in persistValues\n\t\t\tfalse,\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tdateAndTime,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\t// If necessary, fix the date and time before persisting it\n\t\tconst local = shouldUseLocalTime(ctx, this.getEndpoint(ctx)!);\n\t\tif (local) {\n\t\t\t// The initial assumption was incorrect, re-interpret the time\n\t\t\tconst segments = dateToSegments(this.dateAndTime, false);\n\t\t\tthis.dateAndTime = segmentsToDate(segments, local);\n\t\t}\n\n\t\treturn super.persistValues(ctx);\n\t}\n\n\tpublic dateAndTime: Date;\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\"date and time\": formatDate(\n\t\t\t\t\tthis.dateAndTime,\n\t\t\t\t\t\"YYYY-MM-DD HH:mm:ss\",\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(TimeParametersCommand.Get)\n@expectedCCResponse(TimeParametersCCReport)\nexport class TimeParametersCCGet extends TimeParametersCC {}\n\n// @publicAPI\nexport interface TimeParametersCCSetOptions {\n\tdateAndTime: Date;\n\tuseLocalTime?: boolean;\n}\n\n@CCCommand(TimeParametersCommand.Set)\n@useSupervision()\nexport class TimeParametersCCSet extends TimeParametersCC {\n\tpublic constructor(\n\t\toptions: WithAddress<TimeParametersCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.dateAndTime = options.dateAndTime;\n\t\tthis.useLocalTime = options.useLocalTime;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): TimeParametersCCSet {\n\t\tvalidatePayload(raw.payload.length >= 7);\n\t\tconst dateSegments = {\n\t\t\tyear: raw.payload.readUInt16BE(0),\n\t\t\tmonth: raw.payload[2],\n\t\t\tday: raw.payload[3],\n\t\t\thour: raw.payload[4],\n\t\t\tminute: raw.payload[5],\n\t\t\tsecond: raw.payload[6],\n\t\t};\n\t\tvalidatePayload(\n\t\t\tdateSegments.month >= 1 && dateSegments.month <= 12,\n\t\t\tdateSegments.day >= 1 && dateSegments.day <= 31,\n\t\t\tdateSegments.hour >= 0 && dateSegments.hour <= 23,\n\t\t\tdateSegments.minute >= 0 && dateSegments.minute <= 59,\n\t\t\tdateSegments.second >= 0 && dateSegments.second <= 59,\n\t\t);\n\t\tconst dateAndTime = segmentsToDate(\n\t\t\tdateSegments,\n\t\t\t// Assume we can use UTC and correct this assumption in persistValues\n\t\t\tfalse,\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tdateAndTime,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\t// We do not actually persist anything here, but we need access to the node\n\t\t// in order to interpret the date segments correctly\n\n\t\tconst local = shouldUseLocalTime(ctx, this.getEndpoint(ctx)!);\n\t\tif (local) {\n\t\t\t// The initial assumption was incorrect, re-interpret the time\n\t\t\tconst segments = dateToSegments(this.dateAndTime, false);\n\t\t\tthis.dateAndTime = segmentsToDate(segments, local);\n\t\t}\n\n\t\treturn super.persistValues(ctx);\n\t}\n\n\tpublic dateAndTime: Date;\n\tprivate useLocalTime?: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst dateSegments = dateToSegments(\n\t\t\tthis.dateAndTime,\n\t\t\t!!this.useLocalTime,\n\t\t);\n\t\tthis.payload = Bytes.from([\n\t\t\t// 2 bytes placeholder for year\n\t\t\t0,\n\t\t\t0,\n\t\t\tdateSegments.month,\n\t\t\tdateSegments.day,\n\t\t\tdateSegments.hour,\n\t\t\tdateSegments.minute,\n\t\t\tdateSegments.second,\n\t\t]);\n\t\tthis.payload.writeUInt16BE(dateSegments.year, 0);\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\"date and time\": formatDate(\n\t\t\t\t\tthis.dateAndTime,\n\t\t\t\t\t\"YYYY-MM-DD HH:mm:ss\",\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,
|
|
4
|
+
"sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport type { GetDeviceConfig } from \"@zwave-js/config\";\nimport {\n\tCommandClasses,\n\ttype ControlsCC,\n\ttype EndpointId,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype SupervisionResult,\n\ttype SupportsCC,\n\tValueMetadata,\n\ttype WithAddress,\n\tformatDate,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\ttype SetValueImplementation,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { TimeParametersCommand } from \"../lib/_Types.js\";\n\nexport const TimeParametersCCValues = V.defineCCValues(\n\tCommandClasses[\"Time Parameters\"],\n\t{\n\t\t...V.staticProperty(\n\t\t\t\"dateAndTime\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.Any,\n\t\t\t\tlabel: \"Date and Time\",\n\t\t\t} as const,\n\t\t),\n\t},\n);\n\n/**\n * Determines if the node expects local time instead of UTC.\n */\nfunction shouldUseLocalTime(\n\tctx: GetDeviceConfig,\n\tendpoint: EndpointId & SupportsCC & ControlsCC,\n): boolean {\n\t// GH#311 Some nodes have no way to determine the time zone offset,\n\t// so they need to interpret the set time as local time instead of UTC.\n\t//\n\t// This is the case when they both\n\t// 1. DON'T control TimeCC V1, so they cannot request the local time\n\t// 2. DON'T support TimeCC V2, so the controller cannot specify the timezone offset\n\t// Incidentally, this is also true when they don't support TimeCC at all\n\n\t// Use UTC though when the device config file explicitly requests it\n\tconst forceUTC = !!ctx.getDeviceConfig?.(endpoint.nodeId)?.compat\n\t\t?.useUTCInTimeParametersCC;\n\tif (forceUTC) return false;\n\n\tconst ccVersion = endpoint.getCCVersion(CommandClasses.Time);\n\tif (ccVersion >= 1 && endpoint.controlsCC(CommandClasses.Time)) {\n\t\treturn false;\n\t}\n\tif (ccVersion >= 2 && endpoint.supportsCC(CommandClasses.Time)) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\ninterface DateSegments {\n\tyear: number;\n\tmonth: number;\n\tday: number;\n\thour: number;\n\tminute: number;\n\tsecond: number;\n}\n\nfunction segmentsToDate(segments: DateSegments, local: boolean): Date {\n\tif (local) {\n\t\treturn new Date(\n\t\t\tsegments.year,\n\t\t\tsegments.month - 1,\n\t\t\tsegments.day,\n\t\t\tsegments.hour,\n\t\t\tsegments.minute,\n\t\t\tsegments.second,\n\t\t);\n\t} else {\n\t\treturn new Date(\n\t\t\tDate.UTC(\n\t\t\t\tsegments.year,\n\t\t\t\tsegments.month - 1,\n\t\t\t\tsegments.day,\n\t\t\t\tsegments.hour,\n\t\t\t\tsegments.minute,\n\t\t\t\tsegments.second,\n\t\t\t),\n\t\t);\n\t}\n}\n\nfunction dateToSegments(date: Date, local: boolean): DateSegments {\n\treturn {\n\t\tyear: (date as any)[`get${local ? \"\" : \"UTC\"}FullYear`]() as number,\n\t\tmonth: ((date as any)[`get${local ? \"\" : \"UTC\"}Month`]() as number) + 1,\n\t\tday: (date as any)[`get${local ? \"\" : \"UTC\"}Date`]() as number,\n\t\thour: (date as any)[`get${local ? \"\" : \"UTC\"}Hours`]() as number,\n\t\tminute: (date as any)[`get${local ? \"\" : \"UTC\"}Minutes`]() as number,\n\t\tsecond: (date as any)[`get${local ? \"\" : \"UTC\"}Seconds`]() as number,\n\t};\n}\n\n@API(CommandClasses[\"Time Parameters\"])\nexport class TimeParametersCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: TimeParametersCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase TimeParametersCommand.Get:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase TimeParametersCommand.Set:\n\t\t\t\treturn true; // This is mandatory\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(this: TimeParametersCCAPI, { property }, value) {\n\t\t\tif (property !== \"dateAndTime\") {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t\tif (!(value instanceof Date)) {\n\t\t\t\tthrowWrongValueType(this.ccId, property, \"date\", typeof value);\n\t\t\t}\n\t\t\treturn this.set(value);\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: TimeParametersCCAPI, { property }) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"dateAndTime\":\n\t\t\t\t\treturn this.get();\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\tpublic async get(): Promise<MaybeNotKnown<Date>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tTimeParametersCommand,\n\t\t\tTimeParametersCommand.Get,\n\t\t);\n\n\t\tconst cc = new TimeParametersCCGet({\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\tTimeParametersCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.dateAndTime;\n\t}\n\n\t@validateArgs()\n\tpublic async set(\n\t\tdateAndTime: Date,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tTimeParametersCommand,\n\t\t\tTimeParametersCommand.Set,\n\t\t);\n\n\t\tconst endpointToCheck = this.endpoint.virtual\n\t\t\t? this.endpoint.node.physicalNodes[0].getEndpoint(\n\t\t\t\tthis.endpoint.index,\n\t\t\t)!\n\t\t\t: this.endpoint;\n\n\t\tconst useLocalTime = shouldUseLocalTime(this.host, endpointToCheck);\n\n\t\tconst cc = new TimeParametersCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tdateAndTime,\n\t\t\tuseLocalTime,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses[\"Time Parameters\"])\n@implementedVersion(1)\n@ccValues(TimeParametersCCValues)\nexport class TimeParametersCC extends CommandClass {\n\tdeclare ccCommand: TimeParametersCommand;\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[\"Time Parameters\"],\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\t// Synchronize the node's time\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"setting current time...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tawait api.set(new Date());\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface TimeParametersCCReportOptions {\n\tdateAndTime: Date;\n}\n\n@CCCommand(TimeParametersCommand.Report)\n@ccValueProperty(\"dateAndTime\", TimeParametersCCValues.dateAndTime)\nexport class TimeParametersCCReport extends TimeParametersCC {\n\tpublic constructor(\n\t\toptions: WithAddress<TimeParametersCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.dateAndTime = options.dateAndTime;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): TimeParametersCCReport {\n\t\tvalidatePayload(raw.payload.length >= 7);\n\t\tconst dateSegments = {\n\t\t\tyear: raw.payload.readUInt16BE(0),\n\t\t\tmonth: raw.payload[2],\n\t\t\tday: raw.payload[3],\n\t\t\thour: raw.payload[4],\n\t\t\tminute: raw.payload[5],\n\t\t\tsecond: raw.payload[6],\n\t\t};\n\t\tconst dateAndTime: Date = segmentsToDate(\n\t\t\tdateSegments,\n\t\t\t// Assume we can use UTC and correct this assumption in persistValues\n\t\t\tfalse,\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tdateAndTime,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\t// If necessary, fix the date and time before persisting it\n\t\tconst local = shouldUseLocalTime(ctx, this.getEndpoint(ctx)!);\n\t\tif (local) {\n\t\t\t// The initial assumption was incorrect, re-interpret the time\n\t\t\tconst segments = dateToSegments(this.dateAndTime, false);\n\t\t\tthis.dateAndTime = segmentsToDate(segments, local);\n\t\t}\n\n\t\treturn super.persistValues(ctx);\n\t}\n\n\tpublic dateAndTime: Date;\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\"date and time\": formatDate(\n\t\t\t\t\tthis.dateAndTime,\n\t\t\t\t\t\"YYYY-MM-DD HH:mm:ss\",\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(TimeParametersCommand.Get)\n@expectedCCResponse(TimeParametersCCReport)\nexport class TimeParametersCCGet extends TimeParametersCC {}\n\n// @publicAPI\nexport interface TimeParametersCCSetOptions {\n\tdateAndTime: Date;\n\tuseLocalTime?: boolean;\n}\n\n@CCCommand(TimeParametersCommand.Set)\n@useSupervision()\nexport class TimeParametersCCSet extends TimeParametersCC {\n\tpublic constructor(\n\t\toptions: WithAddress<TimeParametersCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.dateAndTime = options.dateAndTime;\n\t\tthis.useLocalTime = options.useLocalTime;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): TimeParametersCCSet {\n\t\tvalidatePayload(raw.payload.length >= 7);\n\t\tconst dateSegments = {\n\t\t\tyear: raw.payload.readUInt16BE(0),\n\t\t\tmonth: raw.payload[2],\n\t\t\tday: raw.payload[3],\n\t\t\thour: raw.payload[4],\n\t\t\tminute: raw.payload[5],\n\t\t\tsecond: raw.payload[6],\n\t\t};\n\t\tvalidatePayload(\n\t\t\tdateSegments.month >= 1 && dateSegments.month <= 12,\n\t\t\tdateSegments.day >= 1 && dateSegments.day <= 31,\n\t\t\tdateSegments.hour >= 0 && dateSegments.hour <= 23,\n\t\t\tdateSegments.minute >= 0 && dateSegments.minute <= 59,\n\t\t\tdateSegments.second >= 0 && dateSegments.second <= 59,\n\t\t);\n\t\tconst dateAndTime = segmentsToDate(\n\t\t\tdateSegments,\n\t\t\t// Assume we can use UTC and correct this assumption in persistValues\n\t\t\tfalse,\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tdateAndTime,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\t// We do not actually persist anything here, but we need access to the node\n\t\t// in order to interpret the date segments correctly\n\n\t\tconst local = shouldUseLocalTime(ctx, this.getEndpoint(ctx)!);\n\t\tif (local) {\n\t\t\t// The initial assumption was incorrect, re-interpret the time\n\t\t\tconst segments = dateToSegments(this.dateAndTime, false);\n\t\t\tthis.dateAndTime = segmentsToDate(segments, local);\n\t\t}\n\n\t\treturn super.persistValues(ctx);\n\t}\n\n\tpublic dateAndTime: Date;\n\tprivate useLocalTime?: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst dateSegments = dateToSegments(\n\t\t\tthis.dateAndTime,\n\t\t\t!!this.useLocalTime,\n\t\t);\n\t\tthis.payload = Bytes.from([\n\t\t\t// 2 bytes placeholder for year\n\t\t\t0,\n\t\t\t0,\n\t\t\tdateSegments.month,\n\t\t\tdateSegments.day,\n\t\t\tdateSegments.hour,\n\t\t\tdateSegments.minute,\n\t\t\tdateSegments.second,\n\t\t]);\n\t\tthis.payload.writeUInt16BE(dateSegments.year, 0);\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\"date and time\": formatDate(\n\t\t\t\t\tthis.dateAndTime,\n\t\t\t\t\t\"YYYY-MM-DD HH:mm:ss\",\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { type GetValueDB, type MessageOrCCLogEntry, type SinglecastCC, type WithAddress } from "@zwave-js/core
|
|
3
|
-
import { Bytes } from "@zwave-js/shared
|
|
1
|
+
import type { CCEncodingContext, CCParsingContext } from "@zwave-js/cc";
|
|
2
|
+
import { type GetValueDB, type MessageOrCCLogEntry, type SinglecastCC, type WithAddress } from "@zwave-js/core";
|
|
3
|
+
import { Bytes } from "@zwave-js/shared";
|
|
4
4
|
import { type CCRaw, CommandClass } from "../lib/CommandClass.js";
|
|
5
5
|
import { TransportServiceCommand } from "../lib/_Types.js";
|
|
6
6
|
export declare const MAX_SEGMENT_SIZE = 39;
|