@zwave-js/cc 14.0.0-beta.4 → 14.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/cc/AlarmSensorCC.js +381 -266
- package/build/cjs/cc/AlarmSensorCC.js.map +3 -3
- package/build/cjs/cc/AssociationCC.js +669 -503
- package/build/cjs/cc/AssociationCC.js.map +3 -3
- package/build/cjs/cc/AssociationGroupInfoCC.js +633 -492
- package/build/cjs/cc/AssociationGroupInfoCC.js.map +3 -3
- package/build/cjs/cc/BarrierOperatorCC.js +595 -429
- package/build/cjs/cc/BarrierOperatorCC.js.map +3 -3
- package/build/cjs/cc/BasicCC.js +354 -260
- package/build/cjs/cc/BasicCC.js.map +3 -3
- package/build/cjs/cc/BatteryCC.js +427 -345
- package/build/cjs/cc/BatteryCC.js.map +3 -3
- package/build/cjs/cc/BinarySensorCC.js +391 -276
- package/build/cjs/cc/BinarySensorCC.js.map +3 -3
- package/build/cjs/cc/BinarySwitchCC.js +347 -253
- package/build/cjs/cc/BinarySwitchCC.js.map +3 -3
- package/build/cjs/cc/CRC16CC.js +160 -85
- package/build/cjs/cc/CRC16CC.js.map +3 -3
- package/build/cjs/cc/CentralSceneCC.js +459 -324
- package/build/cjs/cc/CentralSceneCC.js.map +3 -3
- package/build/cjs/cc/ClimateControlScheduleCC.js +459 -293
- package/build/cjs/cc/ClimateControlScheduleCC.js.map +3 -3
- package/build/cjs/cc/ClockCC.js +254 -150
- package/build/cjs/cc/ClockCC.js.map +3 -3
- package/build/cjs/cc/ColorSwitchCC.js +758 -610
- package/build/cjs/cc/ColorSwitchCC.js.map +3 -3
- package/build/cjs/cc/ConfigurationCC.js +1700 -1453
- package/build/cjs/cc/ConfigurationCC.js.map +3 -3
- package/build/cjs/cc/DeviceResetLocallyCC.js +125 -49
- package/build/cjs/cc/DeviceResetLocallyCC.js.map +3 -3
- package/build/cjs/cc/DoorLockCC.js +904 -777
- package/build/cjs/cc/DoorLockCC.js.map +3 -3
- package/build/cjs/cc/DoorLockLoggingCC.js +321 -206
- package/build/cjs/cc/DoorLockLoggingCC.js.map +3 -3
- package/build/cjs/cc/EnergyProductionCC.js +249 -160
- package/build/cjs/cc/EnergyProductionCC.js.map +3 -3
- package/build/cjs/cc/EntryControlCC.js +619 -458
- package/build/cjs/cc/EntryControlCC.js.map +3 -3
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +898 -698
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +3 -3
- package/build/cjs/cc/HailCC.js +57 -11
- package/build/cjs/cc/HailCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlModeCC.js +359 -233
- package/build/cjs/cc/HumidityControlModeCC.js.map +3 -3
- package/build/cjs/cc/HumidityControlOperatingStateCC.js +189 -103
- package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +3 -3
- package/build/cjs/cc/HumidityControlSetpointCC.js +682 -495
- package/build/cjs/cc/HumidityControlSetpointCC.js.map +3 -3
- package/build/cjs/cc/InclusionControllerCC.js +205 -114
- package/build/cjs/cc/InclusionControllerCC.js.map +3 -3
- package/build/cjs/cc/IndicatorCC.js +897 -736
- package/build/cjs/cc/IndicatorCC.js.map +3 -3
- package/build/cjs/cc/IrrigationCC.js +1651 -1405
- package/build/cjs/cc/IrrigationCC.js.map +3 -3
- package/build/cjs/cc/LanguageCC.js +268 -171
- package/build/cjs/cc/LanguageCC.js.map +3 -3
- package/build/cjs/cc/LockCC.js +254 -154
- package/build/cjs/cc/LockCC.js.map +3 -3
- package/build/cjs/cc/ManufacturerProprietaryCC.js +189 -129
- package/build/cjs/cc/ManufacturerProprietaryCC.js.map +2 -2
- package/build/cjs/cc/ManufacturerSpecificCC.js +319 -213
- package/build/cjs/cc/ManufacturerSpecificCC.js.map +3 -3
- package/build/cjs/cc/MeterCC.js +827 -707
- package/build/cjs/cc/MeterCC.js.map +3 -3
- package/build/cjs/cc/MultiChannelAssociationCC.js +612 -478
- package/build/cjs/cc/MultiChannelAssociationCC.js.map +3 -3
- package/build/cjs/cc/MultiChannelCC.js +1037 -819
- package/build/cjs/cc/MultiChannelCC.js.map +3 -3
- package/build/cjs/cc/MultiCommandCC.js +172 -97
- package/build/cjs/cc/MultiCommandCC.js.map +3 -3
- package/build/cjs/cc/MultilevelSensorCC.js +589 -449
- package/build/cjs/cc/MultilevelSensorCC.js.map +3 -3
- package/build/cjs/cc/MultilevelSwitchCC.js +587 -439
- package/build/cjs/cc/MultilevelSwitchCC.js.map +3 -3
- package/build/cjs/cc/NoOperationCC.js +89 -27
- package/build/cjs/cc/NoOperationCC.js.map +2 -2
- package/build/cjs/cc/NodeNamingCC.js +417 -277
- package/build/cjs/cc/NodeNamingCC.js.map +3 -3
- package/build/cjs/cc/NotificationCC.js +972 -818
- package/build/cjs/cc/NotificationCC.js.map +3 -3
- package/build/cjs/cc/PowerlevelCC.js +450 -303
- package/build/cjs/cc/PowerlevelCC.js.map +3 -3
- package/build/cjs/cc/ProtectionCC.js +686 -494
- package/build/cjs/cc/ProtectionCC.js.map +3 -3
- package/build/cjs/cc/SceneActivationCC.js +165 -97
- package/build/cjs/cc/SceneActivationCC.js.map +3 -3
- package/build/cjs/cc/SceneActuatorConfigurationCC.js +346 -243
- package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +3 -3
- package/build/cjs/cc/SceneControllerConfigurationCC.js +401 -298
- package/build/cjs/cc/SceneControllerConfigurationCC.js.map +3 -3
- package/build/cjs/cc/ScheduleEntryLockCC.js +1552 -1272
- package/build/cjs/cc/ScheduleEntryLockCC.js.map +3 -3
- package/build/cjs/cc/Security2CC.js +1483 -1219
- package/build/cjs/cc/Security2CC.js.map +3 -3
- package/build/cjs/cc/SecurityCC.js +839 -619
- package/build/cjs/cc/SecurityCC.js.map +3 -3
- package/build/cjs/cc/SoundSwitchCC.js +707 -515
- package/build/cjs/cc/SoundSwitchCC.js.map +3 -3
- package/build/cjs/cc/SupervisionCC.js +327 -237
- package/build/cjs/cc/SupervisionCC.js.map +3 -3
- package/build/cjs/cc/ThermostatFanModeCC.js +386 -263
- package/build/cjs/cc/ThermostatFanModeCC.js.map +3 -3
- package/build/cjs/cc/ThermostatFanStateCC.js +192 -106
- package/build/cjs/cc/ThermostatFanStateCC.js.map +3 -3
- package/build/cjs/cc/ThermostatModeCC.js +425 -302
- package/build/cjs/cc/ThermostatModeCC.js.map +3 -3
- package/build/cjs/cc/ThermostatOperatingStateCC.js +188 -102
- package/build/cjs/cc/ThermostatOperatingStateCC.js.map +3 -3
- package/build/cjs/cc/ThermostatSetbackCC.js +277 -173
- package/build/cjs/cc/ThermostatSetbackCC.js.map +3 -3
- package/build/cjs/cc/ThermostatSetpointCC.js +645 -491
- package/build/cjs/cc/ThermostatSetpointCC.js.map +3 -3
- package/build/cjs/cc/TimeCC.js +515 -353
- package/build/cjs/cc/TimeCC.js.map +3 -3
- package/build/cjs/cc/TimeParametersCC.js +302 -202
- package/build/cjs/cc/TimeParametersCC.js.map +3 -3
- package/build/cjs/cc/TransportServiceCC.js +433 -315
- package/build/cjs/cc/TransportServiceCC.js.map +3 -3
- package/build/cjs/cc/UserCodeCC.js +1385 -1102
- package/build/cjs/cc/UserCodeCC.js.map +3 -3
- package/build/cjs/cc/VersionCC.js +696 -562
- package/build/cjs/cc/VersionCC.js.map +3 -3
- package/build/cjs/cc/WakeUpCC.js +499 -346
- package/build/cjs/cc/WakeUpCC.js.map +3 -3
- package/build/cjs/cc/WindowCoveringCC.js +626 -478
- package/build/cjs/cc/WindowCoveringCC.js.map +3 -3
- package/build/cjs/cc/ZWaveLongRangeCC.js +57 -10
- package/build/cjs/cc/ZWaveLongRangeCC.js.map +2 -2
- package/build/cjs/cc/ZWavePlusCC.js +233 -159
- package/build/cjs/cc/ZWavePlusCC.js.map +3 -3
- package/build/cjs/cc/ZWaveProtocolCC.js +1515 -948
- package/build/cjs/cc/ZWaveProtocolCC.js.map +3 -3
- package/build/cjs/cc/manufacturerProprietary/Decorators.d.ts +4 -4
- package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +1 -1
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +395 -274
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +3 -3
- package/build/cjs/lib/CommandClassDecorators.d.ts +11 -15
- package/build/cjs/lib/CommandClassDecorators.js +19 -20
- package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
- package/build/cjs/lib/Security2/Extension.d.ts +1 -1
- package/build/cjs/lib/Security2/Extension.js +217 -126
- package/build/cjs/lib/Security2/Extension.js.map +3 -3
- package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
- package/build/esm/cc/AlarmSensorCC.js +389 -291
- package/build/esm/cc/AlarmSensorCC.js.map +1 -1
- package/build/esm/cc/AssociationCC.d.ts.map +1 -1
- package/build/esm/cc/AssociationCC.js +678 -537
- package/build/esm/cc/AssociationCC.js.map +1 -1
- package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
- package/build/esm/cc/AssociationGroupInfoCC.js +659 -539
- package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
- package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
- package/build/esm/cc/BarrierOperatorCC.js +634 -493
- package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
- package/build/esm/cc/BasicCC.d.ts.map +1 -1
- package/build/esm/cc/BasicCC.js +380 -302
- package/build/esm/cc/BasicCC.js.map +1 -1
- package/build/esm/cc/BatteryCC.d.ts.map +1 -1
- package/build/esm/cc/BatteryCC.js +449 -384
- package/build/esm/cc/BatteryCC.js.map +1 -1
- package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
- package/build/esm/cc/BinarySensorCC.js +395 -297
- package/build/esm/cc/BinarySensorCC.js.map +1 -1
- package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
- package/build/esm/cc/BinarySwitchCC.js +353 -274
- package/build/esm/cc/BinarySwitchCC.js.map +1 -1
- package/build/esm/cc/CRC16CC.js +162 -98
- package/build/esm/cc/CRC16CC.js.map +1 -1
- package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
- package/build/esm/cc/CentralSceneCC.js +465 -351
- package/build/esm/cc/CentralSceneCC.js.map +1 -1
- package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
- package/build/esm/cc/ClimateControlScheduleCC.js +454 -313
- package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
- package/build/esm/cc/ClockCC.js +248 -159
- package/build/esm/cc/ClockCC.js.map +1 -1
- package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
- package/build/esm/cc/ColorSwitchCC.js +802 -677
- package/build/esm/cc/ColorSwitchCC.js.map +1 -1
- package/build/esm/cc/ConfigurationCC.js +1899 -1687
- package/build/esm/cc/ConfigurationCC.js.map +1 -1
- package/build/esm/cc/DeviceResetLocallyCC.js +124 -59
- package/build/esm/cc/DeviceResetLocallyCC.js.map +1 -1
- package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
- package/build/esm/cc/DoorLockCC.js +951 -849
- package/build/esm/cc/DoorLockCC.js.map +1 -1
- package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
- package/build/esm/cc/DoorLockLoggingCC.js +316 -218
- package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
- package/build/esm/cc/EnergyProductionCC.js +240 -164
- package/build/esm/cc/EnergyProductionCC.js.map +1 -1
- package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
- package/build/esm/cc/EntryControlCC.js +629 -493
- package/build/esm/cc/EntryControlCC.js.map +1 -1
- package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
- package/build/esm/cc/FirmwareUpdateMetaDataCC.js +938 -769
- package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
- package/build/esm/cc/HailCC.js +51 -12
- package/build/esm/cc/HailCC.js.map +1 -1
- package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlModeCC.js +357 -250
- package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.js +182 -109
- package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
- package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlSetpointCC.js +706 -546
- package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
- package/build/esm/cc/InclusionControllerCC.js +197 -119
- package/build/esm/cc/InclusionControllerCC.js.map +1 -1
- package/build/esm/cc/IndicatorCC.js +973 -835
- package/build/esm/cc/IndicatorCC.js.map +1 -1
- package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
- package/build/esm/cc/IrrigationCC.js +1697 -1496
- package/build/esm/cc/IrrigationCC.js.map +1 -1
- package/build/esm/cc/LanguageCC.d.ts.map +1 -1
- package/build/esm/cc/LanguageCC.js +266 -184
- package/build/esm/cc/LanguageCC.js.map +1 -1
- package/build/esm/cc/LockCC.d.ts.map +1 -1
- package/build/esm/cc/LockCC.js +247 -162
- package/build/esm/cc/LockCC.js.map +1 -1
- package/build/esm/cc/ManufacturerProprietaryCC.js +192 -141
- package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.js +312 -223
- package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
- package/build/esm/cc/MeterCC.d.ts.map +1 -1
- package/build/esm/cc/MeterCC.js +896 -795
- package/build/esm/cc/MeterCC.js.map +1 -1
- package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
- package/build/esm/cc/MultiChannelAssociationCC.js +631 -518
- package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
- package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
- package/build/esm/cc/MultiChannelCC.js +1106 -921
- package/build/esm/cc/MultiChannelCC.js.map +1 -1
- package/build/esm/cc/MultiCommandCC.js +166 -102
- package/build/esm/cc/MultiCommandCC.js.map +1 -1
- package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
- package/build/esm/cc/MultilevelSensorCC.js +616 -497
- package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
- package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
- package/build/esm/cc/MultilevelSwitchCC.js +621 -496
- package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
- package/build/esm/cc/NoOperationCC.js +82 -29
- package/build/esm/cc/NoOperationCC.js.map +1 -1
- package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
- package/build/esm/cc/NodeNamingCC.js +413 -294
- package/build/esm/cc/NodeNamingCC.js.map +1 -1
- package/build/esm/cc/NotificationCC.d.ts.map +1 -1
- package/build/esm/cc/NotificationCC.js +1097 -966
- package/build/esm/cc/NotificationCC.js.map +1 -1
- package/build/esm/cc/PowerlevelCC.js +437 -311
- package/build/esm/cc/PowerlevelCC.js.map +1 -1
- package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
- package/build/esm/cc/ProtectionCC.js +704 -543
- package/build/esm/cc/ProtectionCC.js.map +1 -1
- package/build/esm/cc/SceneActivationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneActivationCC.js +157 -100
- package/build/esm/cc/SceneActivationCC.js.map +1 -1
- package/build/esm/cc/SceneActuatorConfigurationCC.js +357 -269
- package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.js +434 -346
- package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
- package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
- package/build/esm/cc/ScheduleEntryLockCC.js +1596 -1357
- package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
- package/build/esm/cc/Security2CC.js +1633 -1406
- package/build/esm/cc/Security2CC.js.map +1 -1
- package/build/esm/cc/SecurityCC.js +876 -687
- package/build/esm/cc/SecurityCC.js.map +1 -1
- package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
- package/build/esm/cc/SoundSwitchCC.js +689 -526
- package/build/esm/cc/SoundSwitchCC.js.map +1 -1
- package/build/esm/cc/SupervisionCC.js +349 -272
- package/build/esm/cc/SupervisionCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.js +388 -284
- package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatFanStateCC.js +184 -111
- package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
- package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatModeCC.js +435 -331
- package/build/esm/cc/ThermostatModeCC.js.map +1 -1
- package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatOperatingStateCC.js +180 -107
- package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
- package/build/esm/cc/ThermostatSetbackCC.js +274 -185
- package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
- package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatSetpointCC.js +674 -543
- package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
- package/build/esm/cc/TimeCC.js +499 -360
- package/build/esm/cc/TimeCC.js.map +1 -1
- package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
- package/build/esm/cc/TimeParametersCC.js +296 -211
- package/build/esm/cc/TimeParametersCC.js.map +1 -1
- package/build/esm/cc/TransportServiceCC.js +464 -363
- package/build/esm/cc/TransportServiceCC.js.map +1 -1
- package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
- package/build/esm/cc/UserCodeCC.js +1443 -1205
- package/build/esm/cc/UserCodeCC.js.map +1 -1
- package/build/esm/cc/VersionCC.d.ts.map +1 -1
- package/build/esm/cc/VersionCC.js +744 -635
- package/build/esm/cc/VersionCC.js.map +1 -1
- package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
- package/build/esm/cc/WakeUpCC.js +494 -364
- package/build/esm/cc/WakeUpCC.js.map +1 -1
- package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
- package/build/esm/cc/WindowCoveringCC.js +655 -530
- package/build/esm/cc/WindowCoveringCC.js.map +1 -1
- package/build/esm/cc/ZWaveLongRangeCC.js +51 -11
- package/build/esm/cc/ZWaveLongRangeCC.js.map +1 -1
- package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
- package/build/esm/cc/ZWavePlusCC.js +223 -162
- package/build/esm/cc/ZWavePlusCC.js.map +1 -1
- package/build/esm/cc/ZWaveProtocolCC.js +1443 -953
- package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
- package/build/esm/cc/manufacturerProprietary/Decorators.d.ts +4 -4
- package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js +390 -286
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
- package/build/esm/lib/CommandClassDecorators.d.ts +11 -15
- package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
- package/build/esm/lib/CommandClassDecorators.js +24 -24
- package/build/esm/lib/CommandClassDecorators.js.map +1 -1
- package/build/esm/lib/Security2/Extension.d.ts +1 -1
- package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
- package/build/esm/lib/Security2/Extension.js +207 -123
- package/build/esm/lib/Security2/Extension.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cc/SceneControllerConfigurationCC.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\tCommandClasses,\n\tDuration,\n\ttype EndpointId,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tgetCCName,\n\tvalidatePayload,\n} from \"@zwave-js/core/safe\";\nimport type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetDeviceConfig,\n\tGetValueDB,\n} from \"@zwave-js/host/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { 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\tthrowMissingPropertyKey,\n\tthrowUnsupportedProperty,\n\tthrowUnsupportedPropertyKey,\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\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { SceneControllerConfigurationCommand } from \"../lib/_Types.js\";\nimport { AssociationCC } from \"./AssociationCC.js\";\n\nexport const SceneControllerConfigurationCCValues = Object.freeze({\n\t...V.defineDynamicCCValues(\n\t\tCommandClasses[\"Scene Controller Configuration\"],\n\t\t{\n\t\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\t\"sceneId\",\n\t\t\t\t\"sceneId\",\n\t\t\t\t(groupId: number) => groupId,\n\t\t\t\t({ property, propertyKey }) =>\n\t\t\t\t\tproperty === \"sceneId\" && typeof propertyKey === \"number\",\n\t\t\t\t(groupId: number) => ({\n\t\t\t\t\t...ValueMetadata.UInt8,\n\t\t\t\t\tlabel: `Associated Scene ID (${groupId})`,\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t} as const),\n\t\t\t),\n\n\t\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\t\"dimmingDuration\",\n\t\t\t\t\"dimmingDuration\",\n\t\t\t\t(groupId: number) => groupId,\n\t\t\t\t({ property, propertyKey }) =>\n\t\t\t\t\tproperty === \"dimmingDuration\"\n\t\t\t\t\t&& typeof propertyKey === \"number\",\n\t\t\t\t(groupId: number) => ({\n\t\t\t\t\t...ValueMetadata.Duration,\n\t\t\t\t\tlabel: `Dimming duration (${groupId})`,\n\t\t\t\t} as const),\n\t\t\t),\n\t\t},\n\t),\n});\n\n@API(CommandClasses[\"Scene Controller Configuration\"])\nexport class SceneControllerConfigurationCCAPI extends CCAPI {\n\tpublic supportsCommand(\n\t\tcmd: SceneControllerConfigurationCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase SceneControllerConfigurationCommand.Get:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase SceneControllerConfigurationCommand.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(\n\t\t\tthis: SceneControllerConfigurationCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t\tvalue,\n\t\t\toptions,\n\t\t) {\n\t\t\tif (propertyKey == undefined) {\n\t\t\t\tthrowMissingPropertyKey(this.ccId, property);\n\t\t\t} else if (typeof propertyKey !== \"number\") {\n\t\t\t\tthrowUnsupportedPropertyKey(this.ccId, property, propertyKey);\n\t\t\t}\n\t\t\tif (property === \"sceneId\") {\n\t\t\t\tif (typeof value !== \"number\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"number\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\t// Disable Group ID / Scene ID\n\t\t\t\t\treturn this.disable(propertyKey);\n\t\t\t\t} else {\n\t\t\t\t\t// We need to set the dimming duration along with the scene ID\n\t\t\t\t\t// Dimming duration is chosen with the following precedence:\n\t\t\t\t\t// 1. options.transitionDuration\n\t\t\t\t\t// 2. current stored value\n\t\t\t\t\t// 3. default value\n\t\t\t\t\tconst dimmingDuration =\n\t\t\t\t\t\tDuration.from(options?.transitionDuration)\n\t\t\t\t\t\t\t?? this.tryGetValueDB()?.getValue<Duration>(\n\t\t\t\t\t\t\t\tSceneControllerConfigurationCCValues\n\t\t\t\t\t\t\t\t\t.dimmingDuration(\n\t\t\t\t\t\t\t\t\t\tpropertyKey,\n\t\t\t\t\t\t\t\t\t).endpoint(this.endpoint.index),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t?? Duration.default();\n\t\t\t\t\treturn this.set(propertyKey, value, dimmingDuration);\n\t\t\t\t}\n\t\t\t} else if (property === \"dimmingDuration\") {\n\t\t\t\tif (typeof value !== \"string\" && !(value instanceof Duration)) {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"duration\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst dimmingDuration = Duration.from(value);\n\t\t\t\tif (dimmingDuration == undefined) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`${\n\t\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}: \"${property}\" could not be set. ${\n\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t} is not a valid duration.`,\n\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst valueDB = this.tryGetValueDB();\n\t\t\t\tconst sceneId = valueDB?.getValue<number>(\n\t\t\t\t\tSceneControllerConfigurationCCValues.sceneId(\n\t\t\t\t\t\tpropertyKey,\n\t\t\t\t\t).endpoint(this.endpoint.index),\n\t\t\t\t);\n\t\t\t\tif (sceneId == undefined || sceneId === 0) {\n\t\t\t\t\tif (valueDB) {\n\t\t\t\t\t\t// Can't actually send dimmingDuration without valid sceneId\n\t\t\t\t\t\t// So we save it in the valueDB without sending it to the node\n\t\t\t\t\t\tconst dimmingDurationValueId =\n\t\t\t\t\t\t\tSceneControllerConfigurationCCValues\n\t\t\t\t\t\t\t\t.dimmingDuration(\n\t\t\t\t\t\t\t\t\tpropertyKey,\n\t\t\t\t\t\t\t\t).endpoint(this.endpoint.index);\n\t\t\t\t\t\tvalueDB.setValue(\n\t\t\t\t\t\t\tdimmingDurationValueId,\n\t\t\t\t\t\t\tdimmingDuration,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\treturn this.set(propertyKey, sceneId, dimmingDuration);\n\t\t\t} else {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(\n\t\t\tthis: SceneControllerConfigurationCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"sceneId\":\n\t\t\t\tcase \"dimmingDuration\": {\n\t\t\t\t\tif (propertyKey == undefined) {\n\t\t\t\t\t\tthrowMissingPropertyKey(this.ccId, property);\n\t\t\t\t\t} else if (typeof propertyKey !== \"number\") {\n\t\t\t\t\t\tthrowUnsupportedPropertyKey(\n\t\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\tpropertyKey,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn (await this.get(propertyKey))?.[property];\n\t\t\t\t}\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 disable(\n\t\tgroupId: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tSceneControllerConfigurationCommand,\n\t\t\tSceneControllerConfigurationCommand.Set,\n\t\t);\n\n\t\treturn this.set(groupId, 0, new Duration(0, \"seconds\"));\n\t}\n\n\t@validateArgs()\n\tpublic async set(\n\t\tgroupId: number,\n\t\tsceneId: number,\n\t\tdimmingDuration?: Duration | string,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tSceneControllerConfigurationCommand,\n\t\t\tSceneControllerConfigurationCommand.Set,\n\t\t);\n\n\t\tif (!this.endpoint.virtual) {\n\t\t\tconst groupCount = SceneControllerConfigurationCC\n\t\t\t\t.getGroupCountCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t);\n\n\t\t\t// The client SHOULD NOT specify group 1 (the life-line group).\n\t\t\t// We don't block it here, because the specs don't forbid it,\n\t\t\t// and it may be needed for some devices.\n\t\t\tif (groupId < 1 || groupId > groupCount) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`${this.constructor.name}: The group ID must be between 1 and the number of supported groups ${groupCount}.`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (groupId < 1) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`The group ID must be greater than 0.`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\n\t\tconst cc = new SceneControllerConfigurationCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tgroupId,\n\t\t\tsceneId,\n\t\t\tdimmingDuration,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\tpublic async getLastActivated(): Promise<\n\t\tMaybeNotKnown<\n\t\t\tPick<\n\t\t\t\tSceneControllerConfigurationCCReport,\n\t\t\t\t\"groupId\" | \"sceneId\" | \"dimmingDuration\"\n\t\t\t>\n\t\t>\n\t> {\n\t\tthis.assertSupportsCommand(\n\t\t\tSceneControllerConfigurationCommand,\n\t\t\tSceneControllerConfigurationCommand.Get,\n\t\t);\n\n\t\tconst cc = new SceneControllerConfigurationCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tgroupId: 0,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tSceneControllerConfigurationCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\n\t\t// Return value includes \"groupId\", because\n\t\t// the returned report will include the actual groupId of the\n\t\t// last activated groupId / sceneId\n\t\tif (response) {\n\t\t\treturn pick(response, [\"groupId\", \"sceneId\", \"dimmingDuration\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async get(\n\t\tgroupId: number,\n\t): Promise<\n\t\tMaybeNotKnown<\n\t\t\tPick<\n\t\t\t\tSceneControllerConfigurationCCReport,\n\t\t\t\t\"sceneId\" | \"dimmingDuration\"\n\t\t\t>\n\t\t>\n\t> {\n\t\tthis.assertSupportsCommand(\n\t\t\tSceneControllerConfigurationCommand,\n\t\t\tSceneControllerConfigurationCommand.Get,\n\t\t);\n\n\t\tif (groupId === 0) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Invalid group ID 0. To get the last activated group / scene, use getLastActivated() instead.`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t} else if (groupId < 0) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`The group ID must be greater than 0.`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\n\t\tconst cc = new SceneControllerConfigurationCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tgroupId,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tSceneControllerConfigurationCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\n\t\t// Since groupId is not allowed to be 0, only Reports with\n\t\t// groupId equal to the requested groupId will be accepted,\n\t\t// so we can omit groupId from the return.\n\t\tif (response) {\n\t\t\treturn pick(response, [\"sceneId\", \"dimmingDuration\"]);\n\t\t}\n\t}\n}\n\n@commandClass(CommandClasses[\"Scene Controller Configuration\"])\n@implementedVersion(1)\n@ccValues(SceneControllerConfigurationCCValues)\nexport class SceneControllerConfigurationCC extends CommandClass {\n\tdeclare ccCommand: SceneControllerConfigurationCommand;\n\n\tpublic determineRequiredCCInterviews(): readonly CommandClasses[] {\n\t\t// AssociationCC is required and MUST be interviewed\n\t\t// before SceneControllerConfigurationCC to supply groupCount\n\t\treturn [\n\t\t\t...super.determineRequiredCCInterviews(),\n\t\t\tCommandClasses.Association,\n\t\t];\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/require-await\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\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tconst groupCount = SceneControllerConfigurationCC.getGroupCountCached(\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t);\n\t\tif (groupCount === 0) {\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`skipping Scene Controller Configuration interview because Association group count is unknown`,\n\t\t\t\tdirection: \"none\",\n\t\t\t\tlevel: \"warn\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Create metadata for each scene, but don't query their actual configuration\n\t\t// since some devices only support setting scenes\n\t\tfor (let groupId = 1; groupId <= groupCount; groupId++) {\n\t\t\tconst sceneIdValue = SceneControllerConfigurationCCValues.sceneId(\n\t\t\t\tgroupId,\n\t\t\t);\n\t\t\tthis.ensureMetadata(ctx, sceneIdValue);\n\n\t\t\tconst dimmingDurationValue = SceneControllerConfigurationCCValues\n\t\t\t\t.dimmingDuration(groupId);\n\t\t\tthis.ensureMetadata(ctx, dimmingDurationValue);\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[\"Scene Controller Configuration\"],\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 groupCount = SceneControllerConfigurationCC.getGroupCountCached(\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t);\n\n\t\tctx.logNode(node.id, {\n\t\t\tmessage: \"querying all scene controller configurations...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tfor (let groupId = 1; groupId <= groupCount; groupId++) {\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 scene configuration for group #${groupId}...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst group = await api.get(groupId);\n\t\t\tif (group != undefined) {\n\t\t\t\tconst logMessage =\n\t\t\t\t\t`received scene configuration for group #${groupId}:\nscene ID: ${group.sceneId}\ndimming duration: ${group.dimmingDuration.toString()}`;\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\t/**\n\t * Returns the number of association groups reported by the node.\n\t * This only works AFTER the node has been interviewed by this CC\n\t * or the AssociationCC.\n\t */\n\tpublic static getGroupCountCached(\n\t\tctx: GetValueDB & GetDeviceConfig,\n\t\tendpoint: EndpointId,\n\t): number {\n\t\treturn ctx.getDeviceConfig?.(endpoint.nodeId)?.compat\n\t\t\t?.forceSceneControllerGroupCount\n\t\t\t?? AssociationCC.getGroupCountCached(ctx, endpoint)\n\t\t\t?? 0;\n\t}\n}\n\n// @publicAPI\nexport interface SceneControllerConfigurationCCSetOptions {\n\tgroupId: number;\n\tsceneId: number;\n\tdimmingDuration?: Duration | string;\n}\n\n@CCCommand(SceneControllerConfigurationCommand.Set)\n@useSupervision()\nexport class SceneControllerConfigurationCCSet\n\textends SceneControllerConfigurationCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<SceneControllerConfigurationCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.groupId = options.groupId;\n\t\tthis.sceneId = options.sceneId;\n\t\t// if dimmingDuration was missing, use default duration.\n\t\tthis.dimmingDuration = Duration.from(options.dimmingDuration)\n\t\t\t?? Duration.default();\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): SceneControllerConfigurationCCSet {\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 SceneControllerConfigurationCCSet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic groupId: number;\n\tpublic sceneId: number;\n\tpublic dimmingDuration: Duration;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.groupId,\n\t\t\tthis.sceneId,\n\t\t\tthis.dimmingDuration.serializeSet(),\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\"group id\": this.groupId,\n\t\t\t\t\"scene id\": this.sceneId,\n\t\t\t\t\"dimming duration\": this.dimmingDuration.toString(),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface SceneControllerConfigurationCCReportOptions {\n\tgroupId: number;\n\tsceneId: number;\n\tdimmingDuration: Duration;\n}\n\n@CCCommand(SceneControllerConfigurationCommand.Report)\nexport class SceneControllerConfigurationCCReport\n\textends SceneControllerConfigurationCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<SceneControllerConfigurationCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.groupId = options.groupId;\n\t\tthis.sceneId = options.sceneId;\n\t\tthis.dimmingDuration = options.dimmingDuration;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): SceneControllerConfigurationCCReport {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst groupId = raw.payload[0];\n\t\tconst sceneId = raw.payload[1];\n\t\tconst dimmingDuration: Duration = Duration.parseReport(raw.payload[2])\n\t\t\t?? Duration.unknown();\n\n\t\treturn new SceneControllerConfigurationCCReport({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgroupId,\n\t\t\tsceneId,\n\t\t\tdimmingDuration,\n\t\t});\n\t}\n\n\tpublic readonly groupId: number;\n\tpublic readonly sceneId: number;\n\tpublic readonly dimmingDuration: Duration;\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\t// If groupId = 0, values are meaningless\n\t\tif (this.groupId === 0) return false;\n\n\t\tconst sceneIdValue = SceneControllerConfigurationCCValues.sceneId(\n\t\t\tthis.groupId,\n\t\t);\n\t\tthis.ensureMetadata(ctx, sceneIdValue);\n\t\tconst dimmingDurationValue = SceneControllerConfigurationCCValues\n\t\t\t.dimmingDuration(this.groupId);\n\t\tthis.ensureMetadata(ctx, dimmingDurationValue);\n\n\t\tthis.setValue(ctx, sceneIdValue, this.sceneId);\n\t\tthis.setValue(ctx, dimmingDurationValue, this.dimmingDuration);\n\n\t\treturn true;\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\"group id\": this.groupId,\n\t\t\t\t\"scene id\": this.sceneId,\n\t\t\t\t\"dimming duration\": this.dimmingDuration.toString(),\n\t\t\t},\n\t\t};\n\t}\n}\n\nfunction testResponseForSceneControllerConfigurationGet(\n\tsent: SceneControllerConfigurationCCGet,\n\treceived: SceneControllerConfigurationCCReport,\n) {\n\t// We expect a Scene Controller Configuration Report that matches\n\t// the requested groupId, unless groupId 0 was requested\n\treturn sent.groupId === 0 || received.groupId === sent.groupId;\n}\n\n// @publicAPI\nexport interface SceneControllerConfigurationCCGetOptions {\n\tgroupId: number;\n}\n\n@CCCommand(SceneControllerConfigurationCommand.Get)\n@expectedCCResponse(\n\tSceneControllerConfigurationCCReport,\n\ttestResponseForSceneControllerConfigurationGet,\n)\nexport class SceneControllerConfigurationCCGet\n\textends SceneControllerConfigurationCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<SceneControllerConfigurationCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.groupId = options.groupId;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): SceneControllerConfigurationCCGet {\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 SceneControllerConfigurationCCGet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic groupId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.groupId]);\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: { \"group id\": this.groupId },\n\t\t};\n\t}\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kBAcO;AAOP,IAAAA,eAAsB;AACtB,IAAAA,eAAqB;AAErB,iBAUO;AACP,0BAMO;AACP,oCAQO;AACP,oBAAkB;AAClB,mBAAoD;AACpD,2BAA8B
|
|
6
|
-
"names": ["import_safe", "
|
|
4
|
+
"sourcesContent": ["import {\n\tCommandClasses,\n\tDuration,\n\ttype EndpointId,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tgetCCName,\n\tvalidatePayload,\n} from \"@zwave-js/core/safe\";\nimport type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetDeviceConfig,\n\tGetValueDB,\n} from \"@zwave-js/host/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { 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\tthrowMissingPropertyKey,\n\tthrowUnsupportedProperty,\n\tthrowUnsupportedPropertyKey,\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\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { SceneControllerConfigurationCommand } from \"../lib/_Types.js\";\nimport { AssociationCC } from \"./AssociationCC.js\";\n\nexport const SceneControllerConfigurationCCValues = Object.freeze({\n\t...V.defineDynamicCCValues(\n\t\tCommandClasses[\"Scene Controller Configuration\"],\n\t\t{\n\t\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\t\"sceneId\",\n\t\t\t\t\"sceneId\",\n\t\t\t\t(groupId: number) => groupId,\n\t\t\t\t({ property, propertyKey }) =>\n\t\t\t\t\tproperty === \"sceneId\" && typeof propertyKey === \"number\",\n\t\t\t\t(groupId: number) => ({\n\t\t\t\t\t...ValueMetadata.UInt8,\n\t\t\t\t\tlabel: `Associated Scene ID (${groupId})`,\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t} as const),\n\t\t\t),\n\n\t\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\t\"dimmingDuration\",\n\t\t\t\t\"dimmingDuration\",\n\t\t\t\t(groupId: number) => groupId,\n\t\t\t\t({ property, propertyKey }) =>\n\t\t\t\t\tproperty === \"dimmingDuration\"\n\t\t\t\t\t&& typeof propertyKey === \"number\",\n\t\t\t\t(groupId: number) => ({\n\t\t\t\t\t...ValueMetadata.Duration,\n\t\t\t\t\tlabel: `Dimming duration (${groupId})`,\n\t\t\t\t} as const),\n\t\t\t),\n\t\t},\n\t),\n});\n\n@API(CommandClasses[\"Scene Controller Configuration\"])\nexport class SceneControllerConfigurationCCAPI extends CCAPI {\n\tpublic supportsCommand(\n\t\tcmd: SceneControllerConfigurationCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase SceneControllerConfigurationCommand.Get:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase SceneControllerConfigurationCommand.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(\n\t\t\tthis: SceneControllerConfigurationCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t\tvalue,\n\t\t\toptions,\n\t\t) {\n\t\t\tif (propertyKey == undefined) {\n\t\t\t\tthrowMissingPropertyKey(this.ccId, property);\n\t\t\t} else if (typeof propertyKey !== \"number\") {\n\t\t\t\tthrowUnsupportedPropertyKey(this.ccId, property, propertyKey);\n\t\t\t}\n\t\t\tif (property === \"sceneId\") {\n\t\t\t\tif (typeof value !== \"number\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"number\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\t// Disable Group ID / Scene ID\n\t\t\t\t\treturn this.disable(propertyKey);\n\t\t\t\t} else {\n\t\t\t\t\t// We need to set the dimming duration along with the scene ID\n\t\t\t\t\t// Dimming duration is chosen with the following precedence:\n\t\t\t\t\t// 1. options.transitionDuration\n\t\t\t\t\t// 2. current stored value\n\t\t\t\t\t// 3. default value\n\t\t\t\t\tconst dimmingDuration =\n\t\t\t\t\t\tDuration.from(options?.transitionDuration)\n\t\t\t\t\t\t\t?? this.tryGetValueDB()?.getValue<Duration>(\n\t\t\t\t\t\t\t\tSceneControllerConfigurationCCValues\n\t\t\t\t\t\t\t\t\t.dimmingDuration(\n\t\t\t\t\t\t\t\t\t\tpropertyKey,\n\t\t\t\t\t\t\t\t\t).endpoint(this.endpoint.index),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t?? Duration.default();\n\t\t\t\t\treturn this.set(propertyKey, value, dimmingDuration);\n\t\t\t\t}\n\t\t\t} else if (property === \"dimmingDuration\") {\n\t\t\t\tif (typeof value !== \"string\" && !(value instanceof Duration)) {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"duration\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst dimmingDuration = Duration.from(value);\n\t\t\t\tif (dimmingDuration == undefined) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`${\n\t\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}: \"${property}\" could not be set. ${\n\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t} is not a valid duration.`,\n\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst valueDB = this.tryGetValueDB();\n\t\t\t\tconst sceneId = valueDB?.getValue<number>(\n\t\t\t\t\tSceneControllerConfigurationCCValues.sceneId(\n\t\t\t\t\t\tpropertyKey,\n\t\t\t\t\t).endpoint(this.endpoint.index),\n\t\t\t\t);\n\t\t\t\tif (sceneId == undefined || sceneId === 0) {\n\t\t\t\t\tif (valueDB) {\n\t\t\t\t\t\t// Can't actually send dimmingDuration without valid sceneId\n\t\t\t\t\t\t// So we save it in the valueDB without sending it to the node\n\t\t\t\t\t\tconst dimmingDurationValueId =\n\t\t\t\t\t\t\tSceneControllerConfigurationCCValues\n\t\t\t\t\t\t\t\t.dimmingDuration(\n\t\t\t\t\t\t\t\t\tpropertyKey,\n\t\t\t\t\t\t\t\t).endpoint(this.endpoint.index);\n\t\t\t\t\t\tvalueDB.setValue(\n\t\t\t\t\t\t\tdimmingDurationValueId,\n\t\t\t\t\t\t\tdimmingDuration,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\treturn this.set(propertyKey, sceneId, dimmingDuration);\n\t\t\t} else {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(\n\t\t\tthis: SceneControllerConfigurationCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"sceneId\":\n\t\t\t\tcase \"dimmingDuration\": {\n\t\t\t\t\tif (propertyKey == undefined) {\n\t\t\t\t\t\tthrowMissingPropertyKey(this.ccId, property);\n\t\t\t\t\t} else if (typeof propertyKey !== \"number\") {\n\t\t\t\t\t\tthrowUnsupportedPropertyKey(\n\t\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\tpropertyKey,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn (await this.get(propertyKey))?.[property];\n\t\t\t\t}\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 disable(\n\t\tgroupId: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tSceneControllerConfigurationCommand,\n\t\t\tSceneControllerConfigurationCommand.Set,\n\t\t);\n\n\t\treturn this.set(groupId, 0, new Duration(0, \"seconds\"));\n\t}\n\n\t@validateArgs()\n\tpublic async set(\n\t\tgroupId: number,\n\t\tsceneId: number,\n\t\tdimmingDuration?: Duration | string,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tSceneControllerConfigurationCommand,\n\t\t\tSceneControllerConfigurationCommand.Set,\n\t\t);\n\n\t\tif (!this.endpoint.virtual) {\n\t\t\tconst groupCount = SceneControllerConfigurationCC\n\t\t\t\t.getGroupCountCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t);\n\n\t\t\t// The client SHOULD NOT specify group 1 (the life-line group).\n\t\t\t// We don't block it here, because the specs don't forbid it,\n\t\t\t// and it may be needed for some devices.\n\t\t\tif (groupId < 1 || groupId > groupCount) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`${this.constructor.name}: The group ID must be between 1 and the number of supported groups ${groupCount}.`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (groupId < 1) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`The group ID must be greater than 0.`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\n\t\tconst cc = new SceneControllerConfigurationCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tgroupId,\n\t\t\tsceneId,\n\t\t\tdimmingDuration,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\tpublic async getLastActivated(): Promise<\n\t\tMaybeNotKnown<\n\t\t\tPick<\n\t\t\t\tSceneControllerConfigurationCCReport,\n\t\t\t\t\"groupId\" | \"sceneId\" | \"dimmingDuration\"\n\t\t\t>\n\t\t>\n\t> {\n\t\tthis.assertSupportsCommand(\n\t\t\tSceneControllerConfigurationCommand,\n\t\t\tSceneControllerConfigurationCommand.Get,\n\t\t);\n\n\t\tconst cc = new SceneControllerConfigurationCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tgroupId: 0,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tSceneControllerConfigurationCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\n\t\t// Return value includes \"groupId\", because\n\t\t// the returned report will include the actual groupId of the\n\t\t// last activated groupId / sceneId\n\t\tif (response) {\n\t\t\treturn pick(response, [\"groupId\", \"sceneId\", \"dimmingDuration\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async get(\n\t\tgroupId: number,\n\t): Promise<\n\t\tMaybeNotKnown<\n\t\t\tPick<\n\t\t\t\tSceneControllerConfigurationCCReport,\n\t\t\t\t\"sceneId\" | \"dimmingDuration\"\n\t\t\t>\n\t\t>\n\t> {\n\t\tthis.assertSupportsCommand(\n\t\t\tSceneControllerConfigurationCommand,\n\t\t\tSceneControllerConfigurationCommand.Get,\n\t\t);\n\n\t\tif (groupId === 0) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Invalid group ID 0. To get the last activated group / scene, use getLastActivated() instead.`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t} else if (groupId < 0) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`The group ID must be greater than 0.`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\n\t\tconst cc = new SceneControllerConfigurationCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tgroupId,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tSceneControllerConfigurationCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\n\t\t// Since groupId is not allowed to be 0, only Reports with\n\t\t// groupId equal to the requested groupId will be accepted,\n\t\t// so we can omit groupId from the return.\n\t\tif (response) {\n\t\t\treturn pick(response, [\"sceneId\", \"dimmingDuration\"]);\n\t\t}\n\t}\n}\n\n@commandClass(CommandClasses[\"Scene Controller Configuration\"])\n@implementedVersion(1)\n@ccValues(SceneControllerConfigurationCCValues)\nexport class SceneControllerConfigurationCC extends CommandClass {\n\tdeclare ccCommand: SceneControllerConfigurationCommand;\n\n\tpublic determineRequiredCCInterviews(): readonly CommandClasses[] {\n\t\t// AssociationCC is required and MUST be interviewed\n\t\t// before SceneControllerConfigurationCC to supply groupCount\n\t\treturn [\n\t\t\t...super.determineRequiredCCInterviews(),\n\t\t\tCommandClasses.Association,\n\t\t];\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/require-await\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\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tconst groupCount = SceneControllerConfigurationCC.getGroupCountCached(\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t);\n\t\tif (groupCount === 0) {\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`skipping Scene Controller Configuration interview because Association group count is unknown`,\n\t\t\t\tdirection: \"none\",\n\t\t\t\tlevel: \"warn\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Create metadata for each scene, but don't query their actual configuration\n\t\t// since some devices only support setting scenes\n\t\tfor (let groupId = 1; groupId <= groupCount; groupId++) {\n\t\t\tconst sceneIdValue = SceneControllerConfigurationCCValues.sceneId(\n\t\t\t\tgroupId,\n\t\t\t);\n\t\t\tthis.ensureMetadata(ctx, sceneIdValue);\n\n\t\t\tconst dimmingDurationValue = SceneControllerConfigurationCCValues\n\t\t\t\t.dimmingDuration(groupId);\n\t\t\tthis.ensureMetadata(ctx, dimmingDurationValue);\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[\"Scene Controller Configuration\"],\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 groupCount = SceneControllerConfigurationCC.getGroupCountCached(\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t);\n\n\t\tctx.logNode(node.id, {\n\t\t\tmessage: \"querying all scene controller configurations...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tfor (let groupId = 1; groupId <= groupCount; groupId++) {\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 scene configuration for group #${groupId}...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst group = await api.get(groupId);\n\t\t\tif (group != undefined) {\n\t\t\t\tconst logMessage =\n\t\t\t\t\t`received scene configuration for group #${groupId}:\nscene ID: ${group.sceneId}\ndimming duration: ${group.dimmingDuration.toString()}`;\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\t/**\n\t * Returns the number of association groups reported by the node.\n\t * This only works AFTER the node has been interviewed by this CC\n\t * or the AssociationCC.\n\t */\n\tpublic static getGroupCountCached(\n\t\tctx: GetValueDB & GetDeviceConfig,\n\t\tendpoint: EndpointId,\n\t): number {\n\t\treturn ctx.getDeviceConfig?.(endpoint.nodeId)?.compat\n\t\t\t?.forceSceneControllerGroupCount\n\t\t\t?? AssociationCC.getGroupCountCached(ctx, endpoint)\n\t\t\t?? 0;\n\t}\n}\n\n// @publicAPI\nexport interface SceneControllerConfigurationCCSetOptions {\n\tgroupId: number;\n\tsceneId: number;\n\tdimmingDuration?: Duration | string;\n}\n\n@CCCommand(SceneControllerConfigurationCommand.Set)\n@useSupervision()\nexport class SceneControllerConfigurationCCSet\n\textends SceneControllerConfigurationCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<SceneControllerConfigurationCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.groupId = options.groupId;\n\t\tthis.sceneId = options.sceneId;\n\t\t// if dimmingDuration was missing, use default duration.\n\t\tthis.dimmingDuration = Duration.from(options.dimmingDuration)\n\t\t\t?? Duration.default();\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): SceneControllerConfigurationCCSet {\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 SceneControllerConfigurationCCSet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic groupId: number;\n\tpublic sceneId: number;\n\tpublic dimmingDuration: Duration;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.groupId,\n\t\t\tthis.sceneId,\n\t\t\tthis.dimmingDuration.serializeSet(),\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\"group id\": this.groupId,\n\t\t\t\t\"scene id\": this.sceneId,\n\t\t\t\t\"dimming duration\": this.dimmingDuration.toString(),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface SceneControllerConfigurationCCReportOptions {\n\tgroupId: number;\n\tsceneId: number;\n\tdimmingDuration: Duration;\n}\n\n@CCCommand(SceneControllerConfigurationCommand.Report)\nexport class SceneControllerConfigurationCCReport\n\textends SceneControllerConfigurationCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<SceneControllerConfigurationCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.groupId = options.groupId;\n\t\tthis.sceneId = options.sceneId;\n\t\tthis.dimmingDuration = options.dimmingDuration;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): SceneControllerConfigurationCCReport {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst groupId = raw.payload[0];\n\t\tconst sceneId = raw.payload[1];\n\t\tconst dimmingDuration: Duration = Duration.parseReport(raw.payload[2])\n\t\t\t?? Duration.unknown();\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgroupId,\n\t\t\tsceneId,\n\t\t\tdimmingDuration,\n\t\t});\n\t}\n\n\tpublic readonly groupId: number;\n\tpublic readonly sceneId: number;\n\tpublic readonly dimmingDuration: Duration;\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\t// If groupId = 0, values are meaningless\n\t\tif (this.groupId === 0) return false;\n\n\t\tconst sceneIdValue = SceneControllerConfigurationCCValues.sceneId(\n\t\t\tthis.groupId,\n\t\t);\n\t\tthis.ensureMetadata(ctx, sceneIdValue);\n\t\tconst dimmingDurationValue = SceneControllerConfigurationCCValues\n\t\t\t.dimmingDuration(this.groupId);\n\t\tthis.ensureMetadata(ctx, dimmingDurationValue);\n\n\t\tthis.setValue(ctx, sceneIdValue, this.sceneId);\n\t\tthis.setValue(ctx, dimmingDurationValue, this.dimmingDuration);\n\n\t\treturn true;\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\"group id\": this.groupId,\n\t\t\t\t\"scene id\": this.sceneId,\n\t\t\t\t\"dimming duration\": this.dimmingDuration.toString(),\n\t\t\t},\n\t\t};\n\t}\n}\n\nfunction testResponseForSceneControllerConfigurationGet(\n\tsent: SceneControllerConfigurationCCGet,\n\treceived: SceneControllerConfigurationCCReport,\n) {\n\t// We expect a Scene Controller Configuration Report that matches\n\t// the requested groupId, unless groupId 0 was requested\n\treturn sent.groupId === 0 || received.groupId === sent.groupId;\n}\n\n// @publicAPI\nexport interface SceneControllerConfigurationCCGetOptions {\n\tgroupId: number;\n}\n\n@CCCommand(SceneControllerConfigurationCommand.Get)\n@expectedCCResponse(\n\tSceneControllerConfigurationCCReport,\n\ttestResponseForSceneControllerConfigurationGet,\n)\nexport class SceneControllerConfigurationCCGet\n\textends SceneControllerConfigurationCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<SceneControllerConfigurationCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.groupId = options.groupId;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): SceneControllerConfigurationCCGet {\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 SceneControllerConfigurationCCGet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic groupId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.groupId]);\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: { \"group id\": this.groupId },\n\t\t};\n\t}\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kBAcO;AAOP,IAAAA,eAAsB;AACtB,IAAAA,eAAqB;AAErB,iBAUO;AACP,0BAMO;AACP,oCAQO;AACP,oBAAkB;AAClB,mBAAoD;AACpD,2BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEvB,MAAM,uCAAuC,OAAO,OAAO;EACjE,GAAG,gBAAE,sBACJ,2BAAe,gCAAgC,GAC/C;IACC,GAAG,gBAAE,8BACJ,WACA,WACA,CAAC,YAAoB,SACrB,CAAC,EAAE,UAAU,YAAW,MACvB,aAAa,aAAa,OAAO,gBAAgB,UAClD,CAAC,aAAqB;MACrB,GAAG,0BAAc;MACjB,OAAO,wBAAwB,OAAO;MACtC,oBAAoB,CAAC,oBAAoB;MAC/B;IAGZ,GAAG,gBAAE,8BACJ,mBACA,mBACA,CAAC,YAAoB,SACrB,CAAC,EAAE,UAAU,YAAW,MACvB,aAAa,qBACV,OAAO,gBAAgB,UAC3B,CAAC,aAAqB;MACrB,GAAG,0BAAc;MACjB,OAAO,qBAAqB,OAAO;MACzB;GAEZ;CAEF;IAGY,qCAAiC,MAAA;8BAD7C,mCAAI,2BAAe,gCAAgC,CAAC,CAAC;;;;oBACC;yDAAA,YAAK;;;;;;AAA5D,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IACL,gBACN,KAAwC;AAExC,cAAQ,KAAK;QACZ,KAAK,iDAAoC;AACxC,iBAAO,KAAK,aAAY;QACzB,KAAK,iDAAoC;AACxC,iBAAO;MACT;AACA,aAAO,MAAM,gBAAgB,GAAG;IACjC;IAEA,KAAwB,oBAAS,IAAC;AACjC,aAAO,eAEN,EAAE,UAAU,YAAW,GACvB,OACA,SAAO;AAEP,YAAI,eAAe,QAAW;AAC7B,kDAAwB,KAAK,MAAM,QAAQ;QAC5C,WAAW,OAAO,gBAAgB,UAAU;AAC3C,sDAA4B,KAAK,MAAM,UAAU,WAAW;QAC7D;AACA,YAAI,aAAa,WAAW;AAC3B,cAAI,OAAO,UAAU,UAAU;AAC9B,gDACC,KAAK,MACL,UACA,UACA,OAAO,KAAK;UAEd;AAEA,cAAI,UAAU,GAAG;AAEhB,mBAAO,KAAK,QAAQ,WAAW;UAChC,OAAO;AAMN,kBAAM,kBACL,qBAAS,KAAK,SAAS,kBAAkB,KACrC,KAAK,cAAa,GAAI,SACxB,qCACE,gBACA,WAAW,EACV,SAAS,KAAK,SAAS,KAAK,CAAC,KAE9B,qBAAS,QAAO;AACrB,mBAAO,KAAK,IAAI,aAAa,OAAO,eAAe;UACpD;QACD,WAAW,aAAa,mBAAmB;AAC1C,cAAI,OAAO,UAAU,YAAY,EAAE,iBAAiB,uBAAW;AAC9D,gDACC,KAAK,MACL,UACA,YACA,OAAO,KAAK;UAEd;AAEA,gBAAM,kBAAkB,qBAAS,KAAK,KAAK;AAC3C,cAAI,mBAAmB,QAAW;AACjC,kBAAM,IAAI,uBACT,OACC,uBACC,KAAK,IAAI,CAEX,MAAM,QAAQ,uBACb,KAAK,UACJ,KAAK,CAEP,6BACA,4BAAgB,gBAAgB;UAElC;AAEA,gBAAM,UAAU,KAAK,cAAa;AAClC,gBAAM,UAAU,SAAS,SACxB,qCAAqC,QACpC,WAAW,EACV,SAAS,KAAK,SAAS,KAAK,CAAC;AAEhC,cAAI,WAAW,UAAa,YAAY,GAAG;AAC1C,gBAAI,SAAS;AAGZ,oBAAM,yBACL,qCACE,gBACA,WAAW,EACV,SAAS,KAAK,SAAS,KAAK;AAChC,sBAAQ,SACP,wBACA,eAAe;YAEjB;AACA;UACD;AAEA,iBAAO,KAAK,IAAI,aAAa,SAAS,eAAe;QACtD,OAAO;AACN,mDAAyB,KAAK,MAAM,QAAQ;QAC7C;MACD;IACD;IAEA,KAAe,qBAAU,IAAC;AACzB,aAAO,eAEN,EAAE,UAAU,YAAW,GAAE;AAEzB,gBAAQ,UAAU;UACjB,KAAK;UACL,KAAK,mBAAmB;AACvB,gBAAI,eAAe,QAAW;AAC7B,sDAAwB,KAAK,MAAM,QAAQ;YAC5C,WAAW,OAAO,gBAAgB,UAAU;AAC3C,0DACC,KAAK,MACL,UACA,WAAW;YAEb;AACA,oBAAQ,MAAM,KAAK,IAAI,WAAW,KAAK,QAAQ;UAChD;UACA;AACC,qDAAyB,KAAK,MAAM,QAAQ;QAC9C;MACD;IACD;IAGO,MAAM,QACZ,SAAe;;AAEf,WAAK,sBACJ,kDACA,iDAAoC,GAAG;AAGxC,aAAO,KAAK,IAAI,SAAS,GAAG,IAAI,qBAAS,GAAG,SAAS,CAAC;;IAIhD,MAAM,IACZ,SACA,SACA,iBAAmC;;;;AAEnC,WAAK,sBACJ,kDACA,iDAAoC,GAAG;AAGxC,UAAI,CAAC,KAAK,SAAS,SAAS;AAC3B,cAAM,aAAa,+BACjB,oBACA,KAAK,MACL,KAAK,QAAQ;AAMf,YAAI,UAAU,KAAK,UAAU,YAAY;AACxC,gBAAM,IAAI,uBACT,GAAG,KAAK,YAAY,IAAI,uEAAuE,UAAU,KACzG,4BAAgB,gBAAgB;QAElC;MACD,WAAW,UAAU,GAAG;AACvB,cAAM,IAAI,uBACT,wCACA,4BAAgB,gBAAgB;MAElC;AAEA,YAAM,KAAK,IAAI,kCAAkC;QAChD,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;QAC7B;QACA;QACA;OACA;AAED,aAAO,KAAK,KAAK,YAAY,IAAI,KAAK,cAAc;;IAG9C,MAAM,mBAAgB;AAQ5B,WAAK,sBACJ,kDACA,iDAAoC,GAAG;AAGxC,YAAM,KAAK,IAAI,kCAAkC;QAChD,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;QAC7B,SAAS;OACT;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAGhC,IACA,KAAK,cAAc;AAMpB,UAAI,UAAU;AACb,mBAAO,mBAAK,UAAU,CAAC,WAAW,WAAW,iBAAiB,CAAC;MAChE;IACD;IAGO,MAAM,IACZ,SAAe;;AASf,WAAK,sBACJ,kDACA,iDAAoC,GAAG;AAGxC,UAAI,YAAY,GAAG;AAClB,cAAM,IAAI,uBACT,gGACA,4BAAgB,gBAAgB;MAElC,WAAW,UAAU,GAAG;AACvB,cAAM,IAAI,uBACT,wCACA,4BAAgB,gBAAgB;MAElC;AAEA,YAAM,KAAK,IAAI,kCAAkC;QAChD,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;QAC7B;OACA;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAGhC,IACA,KAAK,cAAc;AAMpB,UAAI,UAAU;AACb,mBAAO,mBAAK,UAAU,CAAC,WAAW,iBAAiB,CAAC;MACrD;;;;;IAOW,kCAA8B,MAAA;8BAH1C,4CAAa,2BAAe,gCAAgC,CAAC,OAC7D,kDAAmB,CAAC,OACpB,wCAAS,oCAAoC,CAAC;;;;oBACK;sDAAA,YAAY;;;;;;AAAhE,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IAGL,gCAA6B;AAGnC,aAAO;QACN,GAAG,MAAM,8BAA6B;QACtC,2BAAe;;IAEjB;;IAGO,MAAM,UACZ,KAAqB;AAErB,YAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,YAAM,WAAW,KAAK,YAAY,GAAG;AAErC,UAAI,QAAQ,KAAK,IAAI;QACpB,UAAU,KAAK;QACf,SAAS,gBAAgB,KAAK,MAAM;QACpC,WAAW;OACX;AAED,YAAM,aAAaC,gCAA+B,oBACjD,KACA,QAAQ;AAET,UAAI,eAAe,GAAG;AACrB,YAAI,QAAQ,KAAK,IAAI;UACpB,UAAU,KAAK;UACf,SACC;UACD,WAAW;UACX,OAAO;SACP;AACD;MACD;AAIA,eAAS,UAAU,GAAG,WAAW,YAAY,WAAW;AACvD,cAAM,eAAe,qCAAqC,QACzD,OAAO;AAER,aAAK,eAAe,KAAK,YAAY;AAErC,cAAM,uBAAuB,qCAC3B,gBAAgB,OAAO;AACzB,aAAK,eAAe,KAAK,oBAAoB;MAC9C;AAGA,WAAK,qBAAqB,KAAK,IAAI;IACpC;IAEO,MAAM,cACZ,KAAyB;AAEzB,YAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,YAAM,WAAW,KAAK,YAAY,GAAG;AACrC,YAAM,MAAM,iBAAM,OACjB,2BAAe,gCAAgC,GAC/C,KACA,QAAQ,EACP,YAAY;QACb,UAAU,4BAAgB;OAC1B;AAED,YAAM,aAAaA,gCAA+B,oBACjD,KACA,QAAQ;AAGT,UAAI,QAAQ,KAAK,IAAI;QACpB,SAAS;QACT,WAAW;OACX;AACD,eAAS,UAAU,GAAG,WAAW,YAAY,WAAW;AACvD,YAAI,QAAQ,KAAK,IAAI;UACpB,UAAU,KAAK;UACf,SACC,2CAA2C,OAAO;UACnD,WAAW;SACX;AACD,cAAM,QAAQ,MAAM,IAAI,IAAI,OAAO;AACnC,YAAI,SAAS,QAAW;AACvB,gBAAM,aACL,2CAA2C,OAAO;oBACnC,MAAM,OAAO;oBACb,MAAM,gBAAgB,SAAQ,CAAE;AAChD,cAAI,QAAQ,KAAK,IAAI;YACpB,UAAU,KAAK;YACf,SAAS;YACT,WAAW;WACX;QACF;MACD;IACD;;;;;;IAOO,OAAO,oBACb,KACA,UAAoB;AAEpB,aAAO,IAAI,kBAAkB,SAAS,MAAM,GAAG,QAC5C,kCACC,mCAAc,oBAAoB,KAAK,QAAQ,KAC/C;IACL;;;;IAYY,qCAAiC,MAAA;8BAF7C,yCAAU,iDAAoC,GAAG,OACjD,8CAAc,CAAE;;;;oBAER;yDAAA,YAA8B;;;;;;AADvC,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IAGZ,YACC,SAA8D;AAE9D,YAAM,OAAO;AACb,WAAK,UAAU,QAAQ;AACvB,WAAK,UAAU,QAAQ;AAEvB,WAAK,kBAAkB,qBAAS,KAAK,QAAQ,eAAe,KACxD,qBAAS,QAAO;IACrB;IAEO,OAAO,KACb,MACA,MAAsB;AAGtB,YAAM,IAAI,uBACT,GAAG,KAAK,IAAI,qCACZ,4BAAgB,8BAA8B;IAMhD;IAEO;IACA;IACA;IAEA,UAAU,KAAsB;AACtC,WAAK,UAAU,mBAAM,KAAK;QACzB,KAAK;QACL,KAAK;QACL,KAAK,gBAAgB,aAAY;OACjC;AACD,aAAO,MAAM,UAAU,GAAG;IAC3B;IAEO,WAAW,KAAgB;AACjC,aAAO;QACN,GAAG,MAAM,WAAW,GAAG;QACvB,SAAS;UACR,YAAY,KAAK;UACjB,YAAY,KAAK;UACjB,oBAAoB,KAAK,gBAAgB,SAAQ;;;IAGpD;;;;IAWY,wCAAoC,MAAA;8BADhD,yCAAU,iDAAoC,MAAM,CAAC;;;;oBAE7C;4DAAA,YAA8B;;;;;;AADvC,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IAGZ,YACC,SAAiE;AAEjE,YAAM,OAAO;AAGb,WAAK,UAAU,QAAQ;AACvB,WAAK,UAAU,QAAQ;AACvB,WAAK,kBAAkB,QAAQ;IAChC;IAEO,OAAO,KACb,KACA,KAAqB;AAErB,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,UAAU,IAAI,QAAQ,CAAC;AAC7B,YAAM,UAAU,IAAI,QAAQ,CAAC;AAC7B,YAAM,kBAA4B,qBAAS,YAAY,IAAI,QAAQ,CAAC,CAAC,KACjE,qBAAS,QAAO;AAEpB,aAAO,IAAI,KAAK;QACf,QAAQ,IAAI;QACZ;QACA;QACA;OACA;IACF;IAEgB;IACA;IACA;IAET,cAAc,KAAyB;AAC7C,UAAI,CAAC,MAAM,cAAc,GAAG;AAAG,eAAO;AAGtC,UAAI,KAAK,YAAY;AAAG,eAAO;AAE/B,YAAM,eAAe,qCAAqC,QACzD,KAAK,OAAO;AAEb,WAAK,eAAe,KAAK,YAAY;AACrC,YAAM,uBAAuB,qCAC3B,gBAAgB,KAAK,OAAO;AAC9B,WAAK,eAAe,KAAK,oBAAoB;AAE7C,WAAK,SAAS,KAAK,cAAc,KAAK,OAAO;AAC7C,WAAK,SAAS,KAAK,sBAAsB,KAAK,eAAe;AAE7D,aAAO;IACR;IAEO,WAAW,KAAgB;AACjC,aAAO;QACN,GAAG,MAAM,WAAW,GAAG;QACvB,SAAS;UACR,YAAY,KAAK;UACjB,YAAY,KAAK;UACjB,oBAAoB,KAAK,gBAAgB,SAAQ;;;IAGpD;;;;AAGD,SAAS,+CACR,MACA,UAA8C;AAI9C,SAAO,KAAK,YAAY,KAAK,SAAS,YAAY,KAAK;AACxD;IAYa,qCAAiC,MAAA;8BAL7C,yCAAU,iDAAoC,GAAG,OACjD,kDACA,sCACA,8CAA8C,CAC9C;;;;oBAEQ;yDAAA,YAA8B;;;;;;AADvC,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IAGZ,YACC,SAA8D;AAE9D,YAAM,OAAO;AACb,WAAK,UAAU,QAAQ;IACxB;IAEO,OAAO,KACb,MACA,MAAsB;AAGtB,YAAM,IAAI,uBACT,GAAG,KAAK,IAAI,qCACZ,4BAAgB,8BAA8B;IAMhD;IAEO;IAEA,UAAU,KAAsB;AACtC,WAAK,UAAU,mBAAM,KAAK,CAAC,KAAK,OAAO,CAAC;AACxC,aAAO,MAAM,UAAU,GAAG;IAC3B;IAEO,WAAW,KAAgB;AACjC,aAAO;QACN,GAAG,MAAM,WAAW,GAAG;QACvB,SAAS,EAAE,YAAY,KAAK,QAAO;;IAErC;;;;",
|
|
6
|
+
"names": ["import_safe", "SceneControllerConfigurationCC"]
|
|
7
7
|
}
|