@zwave-js/cc 15.25.1 → 15.25.3
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 +15 -17
- package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
- package/build/cjs/cc/AssociationCC.d.ts +1 -1
- package/build/cjs/cc/AssociationCC.js +5 -2
- package/build/cjs/cc/AssociationCC.js.map +2 -2
- package/build/cjs/cc/AssociationGroupInfoCC.js +23 -18
- package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
- package/build/cjs/cc/BarrierOperatorCC.js +9 -7
- package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
- package/build/cjs/cc/BasicCC.js +3 -2
- package/build/cjs/cc/BasicCC.js.map +2 -2
- package/build/cjs/cc/BatteryCC.js +3 -2
- package/build/cjs/cc/BatteryCC.js.map +2 -2
- package/build/cjs/cc/BinarySensorCC.js +8 -6
- package/build/cjs/cc/BinarySensorCC.js.map +2 -2
- package/build/cjs/cc/BinarySwitchCC.js +3 -2
- package/build/cjs/cc/BinarySwitchCC.js.map +2 -2
- package/build/cjs/cc/CentralSceneCC.js +9 -7
- package/build/cjs/cc/CentralSceneCC.js.map +2 -2
- package/build/cjs/cc/ClockCC.js +3 -2
- package/build/cjs/cc/ClockCC.js.map +2 -2
- package/build/cjs/cc/ColorSwitchCC.js +9 -6
- package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
- package/build/cjs/cc/ConfigurationCC.js +27 -27
- package/build/cjs/cc/ConfigurationCC.js.map +2 -2
- package/build/cjs/cc/DoorLockCC.js +49 -63
- package/build/cjs/cc/DoorLockCC.js.map +2 -2
- package/build/cjs/cc/DoorLockLoggingCC.js +3 -2
- package/build/cjs/cc/DoorLockLoggingCC.js.map +2 -2
- package/build/cjs/cc/EnergyProductionCC.js +3 -2
- package/build/cjs/cc/EnergyProductionCC.js.map +2 -2
- package/build/cjs/cc/EntryControlCC.js +5 -3
- package/build/cjs/cc/EntryControlCC.js.map +2 -2
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +2 -1
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlModeCC.js +9 -8
- package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlOperatingStateCC.js +3 -2
- package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlSetpointCC.js +19 -17
- package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
- package/build/cjs/cc/IndicatorCC.js +5 -2
- package/build/cjs/cc/IndicatorCC.js.map +2 -2
- package/build/cjs/cc/IrrigationCC.js +26 -27
- package/build/cjs/cc/IrrigationCC.js.map +2 -2
- package/build/cjs/cc/LanguageCC.js +3 -2
- package/build/cjs/cc/LanguageCC.js.map +2 -2
- package/build/cjs/cc/LockCC.js +3 -2
- package/build/cjs/cc/LockCC.js.map +2 -2
- package/build/cjs/cc/ManufacturerSpecificCC.js +4 -1
- package/build/cjs/cc/ManufacturerSpecificCC.js.map +2 -2
- package/build/cjs/cc/MeterCC.js +14 -13
- package/build/cjs/cc/MeterCC.js.map +2 -2
- package/build/cjs/cc/MultiChannelAssociationCC.js +5 -2
- package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
- package/build/cjs/cc/MultiChannelCC.d.ts +1 -1
- package/build/cjs/cc/MultiChannelCC.js +19 -22
- package/build/cjs/cc/MultiChannelCC.js.map +2 -2
- package/build/cjs/cc/MultilevelSensorCC.js +13 -8
- package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
- package/build/cjs/cc/MultilevelSwitchCC.js +5 -3
- package/build/cjs/cc/MultilevelSwitchCC.js.map +2 -2
- package/build/cjs/cc/NodeNamingCC.js +3 -2
- package/build/cjs/cc/NodeNamingCC.js.map +2 -2
- package/build/cjs/cc/NotificationCC.js +11 -11
- package/build/cjs/cc/NotificationCC.js.map +2 -2
- package/build/cjs/cc/ProtectionCC.js +16 -15
- package/build/cjs/cc/ProtectionCC.js.map +2 -2
- package/build/cjs/cc/SceneControllerConfigurationCC.js +2 -1
- package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
- package/build/cjs/cc/ScheduleEntryLockCC.js +2 -1
- package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
- package/build/cjs/cc/Security2CC.js +15 -24
- package/build/cjs/cc/Security2CC.js.map +2 -2
- package/build/cjs/cc/SecurityCC.js +10 -17
- package/build/cjs/cc/SecurityCC.js.map +2 -2
- package/build/cjs/cc/SoundSwitchCC.js +2 -1
- package/build/cjs/cc/SoundSwitchCC.js.map +2 -2
- package/build/cjs/cc/ThermostatFanModeCC.js +9 -7
- package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
- package/build/cjs/cc/ThermostatFanStateCC.js +3 -2
- package/build/cjs/cc/ThermostatFanStateCC.js.map +2 -2
- package/build/cjs/cc/ThermostatModeCC.js +9 -7
- package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
- package/build/cjs/cc/ThermostatOperatingStateCC.js +4 -4
- package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
- package/build/cjs/cc/ThermostatSetbackCC.js +3 -2
- package/build/cjs/cc/ThermostatSetbackCC.js.map +2 -2
- package/build/cjs/cc/ThermostatSetpointCC.js +9 -5
- package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
- package/build/cjs/cc/TimeCC.js +2 -1
- package/build/cjs/cc/TimeCC.js.map +2 -2
- package/build/cjs/cc/TimeParametersCC.js +2 -1
- package/build/cjs/cc/TimeParametersCC.js.map +2 -2
- package/build/cjs/cc/UserCodeCC.js +6 -6
- package/build/cjs/cc/UserCodeCC.js.map +2 -2
- package/build/cjs/cc/UserCredentialCC.js +5 -2
- package/build/cjs/cc/UserCredentialCC.js.map +2 -2
- package/build/cjs/cc/VersionCC.js +2 -1
- package/build/cjs/cc/VersionCC.js.map +2 -2
- package/build/cjs/cc/WakeUpCC.js +2 -1
- package/build/cjs/cc/WakeUpCC.js.map +2 -2
- package/build/cjs/cc/WindowCoveringCC.js +10 -7
- package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
- package/build/cjs/cc/ZWavePlusCC.js +2 -1
- package/build/cjs/cc/ZWavePlusCC.js.map +2 -2
- package/build/cjs/cc/_CCValues.generated.d.ts +4 -4
- package/build/cjs/cc/_CCValues.generated.js +2 -2
- package/build/cjs/cc/_CCValues.generated.js.map +1 -1
- package/build/cjs/cc/index.d.ts +3 -3
- package/build/cjs/cc/index.js.map +2 -2
- package/build/cjs/cc/manufacturerProprietary/Decorators.d.ts +1 -1
- package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +2 -2
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +3 -2
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +2 -2
- package/build/cjs/lib/API.js.map +2 -2
- package/build/cjs/lib/CommandClass.d.ts +5 -1
- package/build/cjs/lib/CommandClass.js +25 -3
- package/build/cjs/lib/CommandClass.js.map +2 -2
- package/build/cjs/lib/CommandClassDecorators.d.ts +4 -4
- package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
- package/build/cjs/lib/Security2/Extension.d.ts +6 -4
- package/build/cjs/lib/Security2/Extension.js +22 -20
- package/build/cjs/lib/Security2/Extension.js.map +2 -2
- package/build/cjs/lib/_Types.js.map +1 -1
- package/build/cjs/lib/utils.js +14 -8
- package/build/cjs/lib/utils.js.map +2 -2
- package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
- package/build/esm/cc/AlarmSensorCC.js +14 -18
- package/build/esm/cc/AlarmSensorCC.js.map +1 -1
- package/build/esm/cc/AssociationCC.d.ts +1 -1
- package/build/esm/cc/AssociationCC.d.ts.map +1 -1
- package/build/esm/cc/AssociationCC.js +3 -0
- 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 +24 -22
- 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 +8 -8
- 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 +2 -1
- package/build/esm/cc/BasicCC.js.map +1 -1
- package/build/esm/cc/BatteryCC.d.ts.map +1 -1
- package/build/esm/cc/BatteryCC.js +2 -1
- 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 +7 -7
- 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 +2 -1
- package/build/esm/cc/BinarySwitchCC.js.map +1 -1
- package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
- package/build/esm/cc/CentralSceneCC.js +9 -8
- package/build/esm/cc/CentralSceneCC.js.map +1 -1
- package/build/esm/cc/ClockCC.d.ts.map +1 -1
- package/build/esm/cc/ClockCC.js +2 -1
- 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 +8 -7
- package/build/esm/cc/ColorSwitchCC.js.map +1 -1
- package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/ConfigurationCC.js +32 -29
- package/build/esm/cc/ConfigurationCC.js.map +1 -1
- package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
- package/build/esm/cc/DoorLockCC.js +73 -74
- 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 +2 -1
- package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
- package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
- package/build/esm/cc/EnergyProductionCC.js +2 -1
- 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 +3 -1
- 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 +1 -0
- package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
- package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlModeCC.js +8 -9
- 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 +2 -1
- 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 +18 -23
- package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
- package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
- package/build/esm/cc/IndicatorCC.js +3 -0
- 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 +29 -24
- 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 +2 -1
- 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 +2 -1
- package/build/esm/cc/LockCC.js.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.js +4 -1
- package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
- package/build/esm/cc/MeterCC.d.ts.map +1 -1
- package/build/esm/cc/MeterCC.js +15 -19
- 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 +3 -0
- package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
- package/build/esm/cc/MultiChannelCC.d.ts +1 -1
- package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
- package/build/esm/cc/MultiChannelCC.js +19 -23
- package/build/esm/cc/MultiChannelCC.js.map +1 -1
- package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
- package/build/esm/cc/MultilevelSensorCC.js +14 -19
- 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 +3 -1
- package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
- package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
- package/build/esm/cc/NodeNamingCC.js +2 -1
- 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 +11 -14
- package/build/esm/cc/NotificationCC.js.map +1 -1
- package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
- package/build/esm/cc/ProtectionCC.js +15 -22
- package/build/esm/cc/ProtectionCC.js.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.js +1 -0
- 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 +1 -0
- package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
- package/build/esm/cc/Security2CC.d.ts.map +1 -1
- package/build/esm/cc/Security2CC.js +15 -32
- package/build/esm/cc/Security2CC.js.map +1 -1
- package/build/esm/cc/SecurityCC.d.ts.map +1 -1
- package/build/esm/cc/SecurityCC.js +10 -21
- 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 +1 -0
- package/build/esm/cc/SoundSwitchCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.js +8 -8
- 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 +2 -1
- 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 +8 -8
- 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 +4 -5
- package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
- package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatSetbackCC.js +2 -1
- 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 +8 -9
- package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
- package/build/esm/cc/TimeCC.d.ts.map +1 -1
- package/build/esm/cc/TimeCC.js +1 -0
- 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 +1 -0
- package/build/esm/cc/TimeParametersCC.js.map +1 -1
- package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
- package/build/esm/cc/UserCodeCC.js +5 -7
- package/build/esm/cc/UserCodeCC.js.map +1 -1
- package/build/esm/cc/UserCredentialCC.d.ts.map +1 -1
- package/build/esm/cc/UserCredentialCC.js +4 -1
- package/build/esm/cc/UserCredentialCC.js.map +1 -1
- package/build/esm/cc/VersionCC.d.ts.map +1 -1
- package/build/esm/cc/VersionCC.js +1 -0
- 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 +1 -0
- 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 +9 -9
- package/build/esm/cc/WindowCoveringCC.js.map +1 -1
- package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
- package/build/esm/cc/ZWavePlusCC.js +1 -0
- package/build/esm/cc/ZWavePlusCC.js.map +1 -1
- package/build/esm/cc/_CCValues.generated.d.ts +4 -4
- package/build/esm/cc/_CCValues.generated.js +2 -2
- package/build/esm/cc/_CCValues.generated.js.map +1 -1
- package/build/esm/cc/index.d.ts +3 -3
- package/build/esm/cc/index.d.ts.map +1 -1
- package/build/esm/cc/index.js.map +1 -1
- package/build/esm/cc/manufacturerProprietary/Decorators.d.ts +1 -1
- package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
- package/build/esm/cc/manufacturerProprietary/Decorators.js.map +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js +2 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
- package/build/esm/lib/API.js.map +1 -1
- package/build/esm/lib/CommandClass.d.ts +5 -1
- package/build/esm/lib/CommandClass.d.ts.map +1 -1
- package/build/esm/lib/CommandClass.js +30 -4
- package/build/esm/lib/CommandClass.js.map +1 -1
- package/build/esm/lib/CommandClassDecorators.d.ts +4 -4
- package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
- package/build/esm/lib/CommandClassDecorators.js.map +1 -1
- package/build/esm/lib/Security2/Extension.d.ts +6 -4
- package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
- package/build/esm/lib/Security2/Extension.js +23 -21
- package/build/esm/lib/Security2/Extension.js.map +1 -1
- package/build/esm/lib/_Types.js +1 -1
- package/build/esm/lib/utils.d.ts.map +1 -1
- package/build/esm/lib/utils.js +15 -9
- package/build/esm/lib/utils.js.map +1 -1
- package/package.json +7 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/ThermostatFanModeCC.ts"],
|
|
4
|
-
"sourcesContent": ["import * as __validateArgs from \"./ThermostatFanModeCC._validateArgs.js\";\nconst { validateArgs_ThermostatFanModeCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, enumValuesToMetadataStates, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatFanMode, ThermostatFanModeCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatFanModeCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatFanModeCCValues };\n@API(CommandClasses[\"Thermostat Fan Mode\"])\nexport class ThermostatFanModeCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatFanModeCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatFanModeCommand.Get:\n case ThermostatFanModeCommand.SupportedGet:\n return this.isSinglecast();\n case ThermostatFanModeCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: ThermostatFanModeCCAPI, { property }, value) {\n const valueDB = this.getValueDB();\n let result: SupervisionResult | undefined;\n if (property === \"mode\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n // Preserve the value of the \"off\" flag\n const off = valueDB.getValue<boolean>(ThermostatFanModeCCValues.turnedOff.endpoint(this.endpoint.index));\n result = await this.set(value, off);\n }\n else if (property === \"off\") {\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"boolean\", typeof value);\n }\n const mode = valueDB.getValue<ThermostatFanMode>(ThermostatFanModeCCValues.fanMode.endpoint(this.endpoint.index));\n if (mode == undefined) {\n throw new ZWaveError(`The \"off\" property cannot be changed before the fan mode is known!`, ZWaveErrorCodes.Argument_Invalid);\n }\n result = await this.set(mode, value);\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n // Verify the current value after a delay, unless the command was supervised and successful\n if (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n // TODO: Ideally this would be a short delay, but some thermostats like Remotec ZXT-600\n // aren't able to handle the GET this quickly.\n this.schedulePoll({ property }, value);\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatFanModeCCAPI, { property }) {\n switch (property) {\n case \"mode\":\n case \"off\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatFanModeCommand, ThermostatFanModeCommand.Get);\n const cc = new ThermostatFanModeCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatFanModeCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"mode\", \"off\"]);\n }\n }\n @validateArgs_ThermostatFanModeCCAPI_set()\n public async set(mode: ThermostatFanMode, off?: boolean): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatFanModeCommand, ThermostatFanModeCommand.Set);\n const cc = new ThermostatFanModeCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n mode,\n off,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getSupportedModes(): Promise<MaybeNotKnown<readonly ThermostatFanMode[]>> {\n this.assertSupportsCommand(ThermostatFanModeCommand, ThermostatFanModeCommand.SupportedGet);\n const cc = new ThermostatFanModeCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatFanModeCCSupportedReport>(cc, this.commandOptions);\n return response?.supportedModes;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Fan Mode\"])\n@implementedVersion(5)\n@ccValues(ThermostatFanModeCCValues)\nexport class ThermostatFanModeCC extends CommandClass {\n declare ccCommand: ThermostatFanModeCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Fan Mode\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // First query the possible modes to set the metadata\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported thermostat fan modes...\",\n direction: \"outbound\",\n });\n const supportedModes = await api.getSupportedModes();\n if (supportedModes) {\n const logMessage = `received supported thermostat fan modes:${supportedModes\n .map((mode) => `\\n\u00B7 ${getEnumMemberName(ThermostatFanMode, mode)}`)\n .join(\"\")}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported thermostat fan modes timed out, skipping interview...\",\n });\n return;\n }\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Fan Mode\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n // Query the current status\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current thermostat fan mode...\",\n direction: \"outbound\",\n });\n const currentStatus = await api.get();\n if (currentStatus) {\n let logMessage = `received current thermostat fan mode: ${getEnumMemberName(ThermostatFanMode, currentStatus.mode)}`;\n if (currentStatus.off != undefined) {\n logMessage += ` (turned off)`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatFanModeCCSetOptions {\n mode: ThermostatFanMode;\n off?: boolean;\n}\n@CCCommand(ThermostatFanModeCommand.Set)\n@useSupervision()\nexport class ThermostatFanModeCCSet extends ThermostatFanModeCC {\n public constructor(options: WithAddress<ThermostatFanModeCCSetOptions>) {\n super(options);\n this.mode = options.mode;\n this.off = options.off;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): ThermostatFanModeCCSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new ThermostatFanModeCCSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public mode: ThermostatFanMode;\n public off: boolean | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n (this.off ? 128 : 0)\n | (this.mode & 0b1111),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatFanMode, this.mode),\n };\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface ThermostatFanModeCCReportOptions {\n mode: ThermostatFanMode;\n off?: boolean;\n}\n@CCCommand(ThermostatFanModeCommand.Report)\n@ccValueProperty(\"mode\", ThermostatFanModeCCValues.fanMode)\n@ccValueProperty(\"off\", ThermostatFanModeCCValues.turnedOff)\nexport class ThermostatFanModeCCReport extends ThermostatFanModeCC {\n public constructor(options: WithAddress<ThermostatFanModeCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.mode = options.mode;\n this.off = options.off;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatFanModeCCReport {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatFanMode = raw.payload[0] & 0b1111;\n // V3+\n const off = !!(raw.payload[0] & 128);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n off,\n });\n }\n public readonly mode: ThermostatFanMode;\n public readonly off: boolean | undefined;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatFanMode, this.mode),\n };\n if (this.off != undefined) {\n message.off = this.off;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(ThermostatFanModeCommand.Get)\n@expectedCCResponse(ThermostatFanModeCCReport)\nexport class ThermostatFanModeCCGet extends ThermostatFanModeCC {\n}\n// @publicAPI\nexport interface ThermostatFanModeCCSupportedReportOptions {\n supportedModes: ThermostatFanMode[];\n}\n@CCCommand(ThermostatFanModeCommand.SupportedReport)\n@ccValueProperty(\"supportedModes\", ThermostatFanModeCCValues.supportedFanModes)\nexport class ThermostatFanModeCCSupportedReport extends ThermostatFanModeCC {\n public constructor(options: WithAddress<ThermostatFanModeCCSupportedReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedModes = options.supportedModes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatFanModeCCSupportedReport {\n const supportedModes: ThermostatFanMode[] = parseBitMask(raw.payload, ThermostatFanMode[\"Auto low\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedModes,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Remember which fan modes are supported\n const fanModeValue = ThermostatFanModeCCValues.fanMode;\n this.setMetadata(ctx, fanModeValue, {\n ...fanModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatFanMode, this.supportedModes),\n });\n return true;\n }\n public readonly supportedModes: ThermostatFanMode[];\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported modes\": this.supportedModes\n .map((mode) => `\\n\u00B7 ${getEnumMemberName(ThermostatFanMode, mode)}`)\n .join(\"\"),\n },\n };\n }\n}\n@CCCommand(ThermostatFanModeCommand.SupportedGet)\n@expectedCCResponse(ThermostatFanModeCCSupportedReport)\nexport class ThermostatFanModeCCSupportedGet extends ThermostatFanModeCC {\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qBAAgC;AAEhC,
|
|
4
|
+
"sourcesContent": ["import * as __validateArgs from \"./ThermostatFanModeCC._validateArgs.js\";\nconst { validateArgs_ThermostatFanModeCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, enumValuesToMetadataStates, logList, logText, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatFanMode, ThermostatFanModeCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatFanModeCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatFanModeCCValues };\n@API(CommandClasses[\"Thermostat Fan Mode\"])\nexport class ThermostatFanModeCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatFanModeCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatFanModeCommand.Get:\n case ThermostatFanModeCommand.SupportedGet:\n return this.isSinglecast();\n case ThermostatFanModeCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: ThermostatFanModeCCAPI, { property }, value) {\n const valueDB = this.getValueDB();\n let result: SupervisionResult | undefined;\n if (property === \"mode\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n // Preserve the value of the \"off\" flag\n const off = valueDB.getValue<boolean>(ThermostatFanModeCCValues.turnedOff.endpoint(this.endpoint.index));\n result = await this.set(value, off);\n }\n else if (property === \"off\") {\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"boolean\", typeof value);\n }\n const mode = valueDB.getValue<ThermostatFanMode>(ThermostatFanModeCCValues.fanMode.endpoint(this.endpoint.index));\n if (mode == undefined) {\n throw new ZWaveError(`The \"off\" property cannot be changed before the fan mode is known!`, ZWaveErrorCodes.Argument_Invalid);\n }\n result = await this.set(mode, value);\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n // Verify the current value after a delay, unless the command was supervised and successful\n if (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n // TODO: Ideally this would be a short delay, but some thermostats like Remotec ZXT-600\n // aren't able to handle the GET this quickly.\n this.schedulePoll({ property }, value);\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatFanModeCCAPI, { property }) {\n switch (property) {\n case \"mode\":\n case \"off\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatFanModeCommand, ThermostatFanModeCommand.Get);\n const cc = new ThermostatFanModeCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatFanModeCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"mode\", \"off\"]);\n }\n }\n @validateArgs_ThermostatFanModeCCAPI_set()\n public async set(mode: ThermostatFanMode, off?: boolean): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatFanModeCommand, ThermostatFanModeCommand.Set);\n const cc = new ThermostatFanModeCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n mode,\n off,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getSupportedModes(): Promise<MaybeNotKnown<readonly ThermostatFanMode[]>> {\n this.assertSupportsCommand(ThermostatFanModeCommand, ThermostatFanModeCommand.SupportedGet);\n const cc = new ThermostatFanModeCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatFanModeCCSupportedReport>(cc, this.commandOptions);\n return response?.supportedModes;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Fan Mode\"])\n@implementedVersion(5)\n@ccValues(ThermostatFanModeCCValues)\nexport class ThermostatFanModeCC extends CommandClass {\n declare ccCommand: ThermostatFanModeCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Fan Mode\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // First query the possible modes to set the metadata\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported thermostat fan modes...\",\n direction: \"outbound\",\n });\n const supportedModes = await api.getSupportedModes();\n if (supportedModes) {\n const logMessage = logText(\"received supported thermostat fan modes:\", {\n nested: logList(supportedModes.map((mode) => getEnumMemberName(ThermostatFanMode, mode))),\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported thermostat fan modes timed out, skipping interview...\",\n });\n return;\n }\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Fan Mode\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query the current status\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current thermostat fan mode...\",\n direction: \"outbound\",\n });\n const currentStatus = await api.get();\n if (currentStatus) {\n let logMessage = `received current thermostat fan mode: ${getEnumMemberName(ThermostatFanMode, currentStatus.mode)}`;\n if (currentStatus.off != undefined) {\n logMessage += ` (turned off)`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatFanModeCCSetOptions {\n mode: ThermostatFanMode;\n off?: boolean;\n}\n@CCCommand(ThermostatFanModeCommand.Set)\n@useSupervision()\nexport class ThermostatFanModeCCSet extends ThermostatFanModeCC {\n public constructor(options: WithAddress<ThermostatFanModeCCSetOptions>) {\n super(options);\n this.mode = options.mode;\n this.off = options.off;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): ThermostatFanModeCCSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new ThermostatFanModeCCSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public mode: ThermostatFanMode;\n public off: boolean | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n (this.off ? 128 : 0)\n | (this.mode & 0b1111),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatFanMode, this.mode),\n };\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface ThermostatFanModeCCReportOptions {\n mode: ThermostatFanMode;\n off?: boolean;\n}\n@CCCommand(ThermostatFanModeCommand.Report)\n@ccValueProperty(\"mode\", ThermostatFanModeCCValues.fanMode)\n@ccValueProperty(\"off\", ThermostatFanModeCCValues.turnedOff)\nexport class ThermostatFanModeCCReport extends ThermostatFanModeCC {\n public constructor(options: WithAddress<ThermostatFanModeCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.mode = options.mode;\n this.off = options.off;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatFanModeCCReport {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatFanMode = raw.payload[0] & 0b1111;\n // V3+\n const off = !!(raw.payload[0] & 128);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n off,\n });\n }\n public readonly mode: ThermostatFanMode;\n public readonly off: boolean | undefined;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatFanMode, this.mode),\n };\n if (this.off != undefined) {\n message.off = this.off;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(ThermostatFanModeCommand.Get)\n@expectedCCResponse(ThermostatFanModeCCReport)\nexport class ThermostatFanModeCCGet extends ThermostatFanModeCC {\n}\n// @publicAPI\nexport interface ThermostatFanModeCCSupportedReportOptions {\n supportedModes: ThermostatFanMode[];\n}\n@CCCommand(ThermostatFanModeCommand.SupportedReport)\n@ccValueProperty(\"supportedModes\", ThermostatFanModeCCValues.supportedFanModes)\nexport class ThermostatFanModeCCSupportedReport extends ThermostatFanModeCC {\n public constructor(options: WithAddress<ThermostatFanModeCCSupportedReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedModes = options.supportedModes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatFanModeCCSupportedReport {\n const supportedModes: ThermostatFanMode[] = parseBitMask(raw.payload, ThermostatFanMode[\"Auto low\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedModes,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Remember which fan modes are supported\n const fanModeValue = ThermostatFanModeCCValues.fanMode;\n this.setMetadata(ctx, fanModeValue, {\n ...fanModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatFanMode, this.supportedModes),\n });\n return true;\n }\n public readonly supportedModes: ThermostatFanMode[];\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported modes\": logList(this.supportedModes.map((mode) => getEnumMemberName(ThermostatFanMode, mode))),\n },\n };\n }\n}\n@CCCommand(ThermostatFanModeCommand.SupportedGet)\n@expectedCCResponse(ThermostatFanModeCCSupportedReport)\nexport class ThermostatFanModeCCSupportedGet extends ThermostatFanModeCC {\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -113,14 +113,15 @@ let ThermostatFanStateCC = (() => {
|
|
|
113
113
|
message: `Interviewing ${this.ccName}...`,
|
|
114
114
|
direction: "none"
|
|
115
115
|
});
|
|
116
|
-
await this.refreshValues(ctx);
|
|
116
|
+
await this.refreshValues(ctx, { tag: "interview" });
|
|
117
117
|
this.setInterviewComplete(ctx, true);
|
|
118
118
|
}
|
|
119
119
|
async refreshValues(ctx, options) {
|
|
120
120
|
const node = this.getNode(ctx);
|
|
121
121
|
const endpoint = this.getEndpoint(ctx);
|
|
122
122
|
const api = import_API.CCAPI.create(import_core.CommandClasses["Thermostat Fan State"], ctx, endpoint).withOptions({
|
|
123
|
-
priority: options?.priority ?? import_core.MessagePriority.NodeQuery
|
|
123
|
+
priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
|
|
124
|
+
tag: options?.tag
|
|
124
125
|
});
|
|
125
126
|
ctx.logNode(node.id, {
|
|
126
127
|
endpoint: this.endpointIndex,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/ThermostatFanStateCC.ts"],
|
|
4
|
-
"sourcesContent": ["import { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, ValueMetadata, type WithAddress, enumValuesToMetadataStates, validatePayload, } from \"@zwave-js/core\";\nimport { getEnumMemberName } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatFanState, ThermostatFanStateCommand, } from \"../lib/_Types.js\";\nimport type { CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatFanStateCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatFanStateCCValues };\n@API(CommandClasses[\"Thermostat Fan State\"])\nexport class ThermostatFanStateCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatFanStateCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatFanStateCommand.Get:\n return this.isSinglecast();\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatFanStateCCAPI, { property }) {\n switch (property) {\n case \"state\":\n return this.get();\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatFanStateCommand, ThermostatFanStateCommand.Get);\n const cc = new ThermostatFanStateCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatFanStateCCReport>(cc, this.commandOptions);\n if (response) {\n return response?.state;\n }\n }\n}\n@commandClass(CommandClasses[\"Thermostat Fan State\"])\n@implementedVersion(2)\n@ccValues(ThermostatFanStateCCValues)\nexport class ThermostatFanStateCC extends CommandClass {\n declare ccCommand: ThermostatFanStateCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Fan State\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n // Query the current status\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current thermostat fan state...\",\n direction: \"outbound\",\n });\n const currentStatus = await api.get();\n if (currentStatus) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"received current thermostat fan state: \"\n + getEnumMemberName(ThermostatFanState, currentStatus),\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatFanStateCCReportOptions {\n state: ThermostatFanState;\n}\n@CCCommand(ThermostatFanStateCommand.Report)\n@ccValueProperty(\"state\", ThermostatFanStateCCValues.fanState)\nexport class ThermostatFanStateCCReport extends ThermostatFanStateCC {\n public constructor(options: WithAddress<ThermostatFanStateCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.state = options.state;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatFanStateCCReport {\n validatePayload(raw.payload.length == 1);\n const state: ThermostatFanState = raw.payload[0] & 0b1111;\n return new this({\n nodeId: ctx.sourceNodeId,\n state,\n });\n }\n public readonly state: ThermostatFanState;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n state: getEnumMemberName(ThermostatFanState, this.state),\n };\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(ThermostatFanStateCommand.Get)\n@expectedCCResponse(ThermostatFanStateCCReport)\nexport class ThermostatFanStateCCGet extends ThermostatFanStateCC {\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kBAAkN;AAClN,oBAAkC;AAClC,iBAA2F;AAC3F,0BAAuH;AACvH,oCAAiH;AAEjH,mBAA+D;AAE/D,gCAA2C;IAG9B,2BAAuB,MAAA;8BADnC,mCAAI,2BAAe,sBAAsB,CAAC,CAAC;;;;oBACC;+CAAA,YAAK;WAAA;;;;;;;;AAAlD,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACF,gBAAgB,KAA8B;AACjD,cAAQ,KAAK;QACT,KAAK,uCAA0B;AAC3B,iBAAO,KAAK,aAAY;MAChC;AACA,aAAO,MAAM,gBAAgB,GAAG;IACpC;IACA,KAAe,qBAAU,IAAC;AACtB,aAAO,eAA+C,EAAE,SAAQ,GAAE;AAC9D,gBAAQ,UAAU;UACd,KAAK;AACD,mBAAO,KAAK,IAAG;UACnB;AACI,qDAAyB,KAAK,MAAM,QAAQ;QACpD;MACJ;IACJ;;IAEO,MAAM,MAAG;AACZ,WAAK,sBAAsB,wCAA2B,uCAA0B,GAAG;AACnF,YAAM,KAAK,IAAI,wBAAwB;QACnC,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;OAChC;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAAwC,IAAI,KAAK,cAAc;AAChG,UAAI,UAAU;AACV,eAAO,UAAU;MACrB;IACJ;;;;IAKS,wBAAoB,MAAA;8BAHhC,4CAAa,2BAAe,sBAAsB,CAAC,OACnD,kDAAmB,CAAC,OACpB,wCAAS,oDAA0B,CAAC;;;;oBACK;4CAAA,YAAY;WAAA;;;;;;;;AAAtD,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IAEF,MAAM,UAAU,KAAqB;AACxC,YAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,UAAI,QAAQ,KAAK,IAAI;QACjB,UAAU,KAAK;QACf,SAAS,gBAAgB,KAAK,MAAM;QACpC,WAAW;OACd;AACD,YAAM,KAAK,cAAc,
|
|
4
|
+
"sourcesContent": ["import { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, ValueMetadata, type WithAddress, enumValuesToMetadataStates, validatePayload, } from \"@zwave-js/core\";\nimport { getEnumMemberName } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatFanState, ThermostatFanStateCommand, } from \"../lib/_Types.js\";\nimport type { CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatFanStateCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatFanStateCCValues };\n@API(CommandClasses[\"Thermostat Fan State\"])\nexport class ThermostatFanStateCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatFanStateCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatFanStateCommand.Get:\n return this.isSinglecast();\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatFanStateCCAPI, { property }) {\n switch (property) {\n case \"state\":\n return this.get();\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatFanStateCommand, ThermostatFanStateCommand.Get);\n const cc = new ThermostatFanStateCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatFanStateCCReport>(cc, this.commandOptions);\n if (response) {\n return response?.state;\n }\n }\n}\n@commandClass(CommandClasses[\"Thermostat Fan State\"])\n@implementedVersion(2)\n@ccValues(ThermostatFanStateCCValues)\nexport class ThermostatFanStateCC extends CommandClass {\n declare ccCommand: ThermostatFanStateCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Fan State\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query the current status\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current thermostat fan state...\",\n direction: \"outbound\",\n });\n const currentStatus = await api.get();\n if (currentStatus) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"received current thermostat fan state: \"\n + getEnumMemberName(ThermostatFanState, currentStatus),\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatFanStateCCReportOptions {\n state: ThermostatFanState;\n}\n@CCCommand(ThermostatFanStateCommand.Report)\n@ccValueProperty(\"state\", ThermostatFanStateCCValues.fanState)\nexport class ThermostatFanStateCCReport extends ThermostatFanStateCC {\n public constructor(options: WithAddress<ThermostatFanStateCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.state = options.state;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatFanStateCCReport {\n validatePayload(raw.payload.length == 1);\n const state: ThermostatFanState = raw.payload[0] & 0b1111;\n return new this({\n nodeId: ctx.sourceNodeId,\n state,\n });\n }\n public readonly state: ThermostatFanState;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n state: getEnumMemberName(ThermostatFanState, this.state),\n };\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(ThermostatFanStateCommand.Get)\n@expectedCCResponse(ThermostatFanStateCCReport)\nexport class ThermostatFanStateCCGet extends ThermostatFanStateCC {\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kBAAkN;AAClN,oBAAkC;AAClC,iBAA2F;AAC3F,0BAAuH;AACvH,oCAAiH;AAEjH,mBAA+D;AAE/D,gCAA2C;IAG9B,2BAAuB,MAAA;8BADnC,mCAAI,2BAAe,sBAAsB,CAAC,CAAC;;;;oBACC;+CAAA,YAAK;WAAA;;;;;;;;AAAlD,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACF,gBAAgB,KAA8B;AACjD,cAAQ,KAAK;QACT,KAAK,uCAA0B;AAC3B,iBAAO,KAAK,aAAY;MAChC;AACA,aAAO,MAAM,gBAAgB,GAAG;IACpC;IACA,KAAe,qBAAU,IAAC;AACtB,aAAO,eAA+C,EAAE,SAAQ,GAAE;AAC9D,gBAAQ,UAAU;UACd,KAAK;AACD,mBAAO,KAAK,IAAG;UACnB;AACI,qDAAyB,KAAK,MAAM,QAAQ;QACpD;MACJ;IACJ;;IAEO,MAAM,MAAG;AACZ,WAAK,sBAAsB,wCAA2B,uCAA0B,GAAG;AACnF,YAAM,KAAK,IAAI,wBAAwB;QACnC,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;OAChC;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAAwC,IAAI,KAAK,cAAc;AAChG,UAAI,UAAU;AACV,eAAO,UAAU;MACrB;IACJ;;;;IAKS,wBAAoB,MAAA;8BAHhC,4CAAa,2BAAe,sBAAsB,CAAC,OACnD,kDAAmB,CAAC,OACpB,wCAAS,oDAA0B,CAAC;;;;oBACK;4CAAA,YAAY;WAAA;;;;;;;;AAAtD,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IAEF,MAAM,UAAU,KAAqB;AACxC,YAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,UAAI,QAAQ,KAAK,IAAI;QACjB,UAAU,KAAK;QACf,SAAS,gBAAgB,KAAK,MAAM;QACpC,WAAW;OACd;AACD,YAAM,KAAK,cAAc,KAAK,EAAE,KAAK,YAAW,CAAE;AAElD,WAAK,qBAAqB,KAAK,IAAI;IACvC;IACO,MAAM,cAAc,KAA2B,SAA8B;AAChF,YAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,YAAM,WAAW,KAAK,YAAY,GAAG;AACrC,YAAM,MAAM,iBAAM,OAAO,2BAAe,sBAAsB,GAAG,KAAK,QAAQ,EAAE,YAAY;QACxF,UAAU,SAAS,YAAY,4BAAgB;QAC/C,KAAK,SAAS;OACjB;AAED,UAAI,QAAQ,KAAK,IAAI;QACjB,UAAU,KAAK;QACf,SAAS;QACT,WAAW;OACd;AACD,YAAM,gBAAgB,MAAM,IAAI,IAAG;AACnC,UAAI,eAAe;AACf,YAAI,QAAQ,KAAK,IAAI;UACjB,UAAU,KAAK;UACf,SAAS,gDACH,iCAAkB,iCAAoB,aAAa;UACzD,WAAW;SACd;MACL;IACJ;;;;IAQS,8BAA0B,MAAA;8BAFtC,yCAAU,uCAA0B,MAAM,OAC1C,+CAAgB,SAAS,qDAA2B,QAAQ,CAAC;;;;oBACd;kDAAA,YAAoB;WAAA;;;;;;;;AAApE,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACT,YAAmB,SAAuD;AACtE,YAAM,OAAO;AAEb,WAAK,QAAQ,QAAQ;IACzB;IACO,OAAO,KAAK,KAAY,KAAqB;AAChD,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,QAA4B,IAAI,QAAQ,CAAC,IAAI;AACnD,aAAO,IAAI,KAAK;QACZ,QAAQ,IAAI;QACZ;OACH;IACL;IACgB;IACT,WAAW,KAAgB;AAC9B,YAAM,UAAyB;QAC3B,WAAO,iCAAkB,iCAAoB,KAAK,KAAK;;AAE3D,aAAO;QACH,GAAG,MAAM,WAAW,GAAG;QACvB;;IAER;;;;IAIS,2BAAuB,MAAA;8BAFnC,yCAAU,uCAA0B,GAAG,OACvC,kDAAmB,0BAA0B,CAAC;;;;oBACF;+CAAA,YAAoB;WAAA;;;;;;;;AAAjE,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;;;;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -176,7 +176,8 @@ let ThermostatModeCC = (() => {
|
|
|
176
176
|
const node = this.getNode(ctx);
|
|
177
177
|
const endpoint = this.getEndpoint(ctx);
|
|
178
178
|
const api = import_API.CCAPI.create(import_core.CommandClasses["Thermostat Mode"], ctx, endpoint).withOptions({
|
|
179
|
-
priority: import_core.MessagePriority.NodeQuery
|
|
179
|
+
priority: import_core.MessagePriority.NodeQuery,
|
|
180
|
+
tag: "interview"
|
|
180
181
|
});
|
|
181
182
|
ctx.logNode(node.id, {
|
|
182
183
|
endpoint: this.endpointIndex,
|
|
@@ -190,8 +191,9 @@ let ThermostatModeCC = (() => {
|
|
|
190
191
|
});
|
|
191
192
|
const supportedModes = await api.getSupportedModes();
|
|
192
193
|
if (supportedModes) {
|
|
193
|
-
const logMessage =
|
|
194
|
-
|
|
194
|
+
const logMessage = (0, import_core.logText)("received supported thermostat modes:", {
|
|
195
|
+
nested: (0, import_core.logList)(supportedModes.map((mode) => (0, import_shared.getEnumMemberName)(import_Types.ThermostatMode, mode)))
|
|
196
|
+
});
|
|
195
197
|
ctx.logNode(node.id, {
|
|
196
198
|
endpoint: this.endpointIndex,
|
|
197
199
|
message: logMessage,
|
|
@@ -205,14 +207,15 @@ let ThermostatModeCC = (() => {
|
|
|
205
207
|
});
|
|
206
208
|
return;
|
|
207
209
|
}
|
|
208
|
-
await this.refreshValues(ctx);
|
|
210
|
+
await this.refreshValues(ctx, { tag: "interview" });
|
|
209
211
|
this.setInterviewComplete(ctx, true);
|
|
210
212
|
}
|
|
211
213
|
async refreshValues(ctx, options) {
|
|
212
214
|
const node = this.getNode(ctx);
|
|
213
215
|
const endpoint = this.getEndpoint(ctx);
|
|
214
216
|
const api = import_API.CCAPI.create(import_core.CommandClasses["Thermostat Mode"], ctx, endpoint).withOptions({
|
|
215
|
-
priority: options?.priority ?? import_core.MessagePriority.NodeQuery
|
|
217
|
+
priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
|
|
218
|
+
tag: options?.tag
|
|
216
219
|
});
|
|
217
220
|
ctx.logNode(node.id, {
|
|
218
221
|
endpoint: this.endpointIndex,
|
|
@@ -463,8 +466,7 @@ let ThermostatModeCCSupportedReport = (() => {
|
|
|
463
466
|
return {
|
|
464
467
|
...super.toLogEntry(ctx),
|
|
465
468
|
message: {
|
|
466
|
-
"supported modes": this.supportedModes.map((mode) =>
|
|
467
|
-
\xB7 ${(0, import_shared.getEnumMemberName)(import_Types.ThermostatMode, mode)}`).join("")
|
|
469
|
+
"supported modes": (0, import_core.logList)(this.supportedModes.map((mode) => (0, import_shared.getEnumMemberName)(import_Types.ThermostatMode, mode)))
|
|
468
470
|
}
|
|
469
471
|
};
|
|
470
472
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/ThermostatModeCC.ts"],
|
|
4
|
-
"sourcesContent": ["import * as __validateArgs from \"./ThermostatModeCC._validateArgs.js\";\nconst { validateArgs_ThermostatModeCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, enumValuesToMetadataStates, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, type BytesView, buffer2hex, getEnumMemberName, pick, } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatMode, ThermostatModeCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatModeCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatModeCCValues };\n@API(CommandClasses[\"Thermostat Mode\"])\nexport class ThermostatModeCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatModeCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatModeCommand.Get:\n case ThermostatModeCommand.SupportedGet:\n return this.isSinglecast();\n case ThermostatModeCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: ThermostatModeCCAPI, { property }, value) {\n if (property !== \"mode\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n const result = await this.set(value);\n // Verify the current value after a delay, unless the command was supervised and successful\n if (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n // TODO: Ideally this would be a short delay, but some thermostats like Remotec ZXT-600\n // aren't able to handle the GET this quickly.\n this.schedulePoll({ property }, value);\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatModeCCAPI, { property }) {\n switch (property) {\n case \"mode\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.Get);\n const cc = new ThermostatModeCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatModeCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"mode\", \"manufacturerData\"]);\n }\n }\n public async set(mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>): Promise<SupervisionResult | undefined>;\n public async set(mode: (typeof ThermostatMode)[\"Manufacturer specific\"], manufacturerData: BytesView | string): Promise<SupervisionResult | undefined>;\n @validateArgs_ThermostatModeCCAPI_set()\n public async set(mode: ThermostatMode, manufacturerData?: BytesView | string): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.Set);\n if (typeof manufacturerData === \"string\") {\n // We accept the manufacturer data as a hex string. Make sure it's valid\n if (manufacturerData.length % 2 !== 0\n || !/^[0-9a-f]+$/i.test(manufacturerData)) {\n throw new ZWaveError(`Manufacturer data must be represented as hexadecimal when passed as a string!`, ZWaveErrorCodes.Argument_Invalid);\n }\n manufacturerData = Bytes.from(manufacturerData, \"hex\");\n }\n const cc = new ThermostatModeCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n mode,\n manufacturerData: manufacturerData as any,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getSupportedModes(): Promise<MaybeNotKnown<readonly ThermostatMode[]>> {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.SupportedGet);\n const cc = new ThermostatModeCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatModeCCSupportedReport>(cc, this.commandOptions);\n return response?.supportedModes;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Mode\"])\n@implementedVersion(3)\n@ccValues(ThermostatModeCCValues)\nexport class ThermostatModeCC extends CommandClass {\n declare ccCommand: ThermostatModeCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Mode\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // First query the possible modes to set the metadata\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported thermostat modes...\",\n direction: \"outbound\",\n });\n const supportedModes = await api.getSupportedModes();\n if (supportedModes) {\n const logMessage = `received supported thermostat modes:${supportedModes\n .map((mode) => `\\n\u00B7 ${getEnumMemberName(ThermostatMode, mode)}`)\n .join(\"\")}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported thermostat modes timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Mode\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n // Query the current status\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current thermostat mode...\",\n direction: \"outbound\",\n });\n const currentStatus = await api.get();\n if (currentStatus) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"received current thermostat mode: \"\n + getEnumMemberName(ThermostatMode, currentStatus.mode),\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport type ThermostatModeCCSetOptions = {\n mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>;\n} | {\n mode: (typeof ThermostatMode)[\"Manufacturer specific\"];\n manufacturerData: BytesView;\n};\n@CCCommand(ThermostatModeCommand.Set)\n@useSupervision()\nexport class ThermostatModeCCSet extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCSetOptions>) {\n super(options);\n this.mode = options.mode;\n if (\"manufacturerData\" in options) {\n this.manufacturerData = options.manufacturerData;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCSet {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatMode = raw.payload[0] & 0b11111;\n if (mode !== ThermostatMode[\"Manufacturer specific\"]) {\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n const manufacturerDataLength = (raw.payload[0] >>> 5) & 0b111;\n validatePayload(raw.payload.length >= 1 + manufacturerDataLength);\n const manufacturerData = raw.payload.subarray(1, 1 + manufacturerDataLength);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n manufacturerData,\n });\n }\n public mode: ThermostatMode;\n public manufacturerData?: BytesView;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const manufacturerData = this.mode === ThermostatMode[\"Manufacturer specific\"]\n && this.manufacturerData\n ? this.manufacturerData\n : new Uint8Array();\n const manufacturerDataLength = manufacturerData.length;\n this.payload = Bytes.concat([\n [\n ((manufacturerDataLength & 0b111) << 5) + (this.mode & 0b11111),\n ],\n manufacturerData,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatMode, this.mode),\n };\n if (this.manufacturerData != undefined) {\n message[\"manufacturer data\"] = buffer2hex(this.manufacturerData);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport type ThermostatModeCCReportOptions = {\n mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>;\n manufacturerData?: undefined;\n} | {\n mode: (typeof ThermostatMode)[\"Manufacturer specific\"];\n manufacturerData?: BytesView;\n};\n@CCCommand(ThermostatModeCommand.Report)\n@ccValueProperty(\"mode\", ThermostatModeCCValues.thermostatMode)\n@ccValueProperty(\"manufacturerData\", ThermostatModeCCValues.manufacturerData)\nexport class ThermostatModeCCReport extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCReportOptions>) {\n super(options);\n this.mode = options.mode;\n this.manufacturerData = options.manufacturerData;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCReport {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatMode = raw.payload[0] & 0b11111;\n if (mode !== ThermostatMode[\"Manufacturer specific\"]) {\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n // V3+\n const manufacturerDataLength = raw.payload[0] >>> 5;\n validatePayload(raw.payload.length >= 1 + manufacturerDataLength);\n const manufacturerData = raw.payload.subarray(1, 1 + manufacturerDataLength);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n manufacturerData,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Update the supported modes if a mode is used that wasn't previously\n // reported to be supported. This shouldn't happen, but well... it does anyways\n const thermostatModeValue = ThermostatModeCCValues.thermostatMode;\n const supportedModesValue = ThermostatModeCCValues.supportedModes;\n const supportedModes = this.getValue<ThermostatMode[]>(ctx, supportedModesValue);\n if (supportedModes\n && this.mode in ThermostatMode\n && !supportedModes.includes(this.mode)) {\n supportedModes.push(this.mode);\n supportedModes.sort((a, b) => a - b);\n this.setMetadata(ctx, thermostatModeValue, {\n ...thermostatModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatMode, supportedModes),\n });\n this.setValue(ctx, supportedModesValue, supportedModes);\n }\n return true;\n }\n public readonly mode: ThermostatMode;\n public readonly manufacturerData: BytesView | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const manufacturerDataLength = this.mode === ThermostatMode[\"Manufacturer specific\"]\n && this.manufacturerData\n ? Math.min(0b111, this.manufacturerData.length)\n : 0;\n this.payload = new Bytes(1 + manufacturerDataLength);\n this.payload[0] = (manufacturerDataLength << 5) + (this.mode & 0b11111);\n if (manufacturerDataLength && this.manufacturerData) {\n this.payload.set(this.manufacturerData.subarray(0, manufacturerDataLength), 1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatMode, this.mode),\n };\n if (this.manufacturerData != undefined) {\n message[\"manufacturer data\"] = buffer2hex(this.manufacturerData);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(ThermostatModeCommand.Get)\n@expectedCCResponse(ThermostatModeCCReport)\nexport class ThermostatModeCCGet extends ThermostatModeCC {\n}\n// @publicAPI\nexport interface ThermostatModeCCSupportedReportOptions {\n supportedModes: ThermostatMode[];\n}\n@CCCommand(ThermostatModeCommand.SupportedReport)\n@ccValueProperty(\"supportedModes\", ThermostatModeCCValues.supportedModes)\nexport class ThermostatModeCCSupportedReport extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCSupportedReportOptions>) {\n super(options);\n this.supportedModes = options.supportedModes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCSupportedReport {\n const supportedModes: ThermostatMode[] = parseBitMask(raw.payload, ThermostatMode.Off);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedModes,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Use this information to create the metadata for the mode property\n const thermostatModeValue = ThermostatModeCCValues.thermostatMode;\n this.setMetadata(ctx, thermostatModeValue, {\n ...thermostatModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatMode, this.supportedModes),\n });\n return true;\n }\n public readonly supportedModes: ThermostatMode[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.supportedModes, ThermostatMode[\"Manufacturer specific\"], ThermostatMode.Off);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported modes\": this.supportedModes\n .map((mode) => `\\n\u00B7 ${getEnumMemberName(ThermostatMode, mode)}`)\n .join(\"\"),\n },\n };\n }\n}\n@CCCommand(ThermostatModeCommand.SupportedGet)\n@expectedCCResponse(ThermostatModeCCSupportedReport)\nexport class ThermostatModeCCSupportedGet extends ThermostatModeCC {\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qBAAgC;AAEhC,
|
|
4
|
+
"sourcesContent": ["import * as __validateArgs from \"./ThermostatModeCC._validateArgs.js\";\nconst { validateArgs_ThermostatModeCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, enumValuesToMetadataStates, logList, logText, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, type BytesView, buffer2hex, getEnumMemberName, pick, } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatMode, ThermostatModeCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatModeCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatModeCCValues };\n@API(CommandClasses[\"Thermostat Mode\"])\nexport class ThermostatModeCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatModeCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatModeCommand.Get:\n case ThermostatModeCommand.SupportedGet:\n return this.isSinglecast();\n case ThermostatModeCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: ThermostatModeCCAPI, { property }, value) {\n if (property !== \"mode\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n const result = await this.set(value);\n // Verify the current value after a delay, unless the command was supervised and successful\n if (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n // TODO: Ideally this would be a short delay, but some thermostats like Remotec ZXT-600\n // aren't able to handle the GET this quickly.\n this.schedulePoll({ property }, value);\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatModeCCAPI, { property }) {\n switch (property) {\n case \"mode\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.Get);\n const cc = new ThermostatModeCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatModeCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"mode\", \"manufacturerData\"]);\n }\n }\n public async set(mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>): Promise<SupervisionResult | undefined>;\n public async set(mode: (typeof ThermostatMode)[\"Manufacturer specific\"], manufacturerData: BytesView | string): Promise<SupervisionResult | undefined>;\n @validateArgs_ThermostatModeCCAPI_set()\n public async set(mode: ThermostatMode, manufacturerData?: BytesView | string): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.Set);\n if (typeof manufacturerData === \"string\") {\n // We accept the manufacturer data as a hex string. Make sure it's valid\n if (manufacturerData.length % 2 !== 0\n || !/^[0-9a-f]+$/i.test(manufacturerData)) {\n throw new ZWaveError(`Manufacturer data must be represented as hexadecimal when passed as a string!`, ZWaveErrorCodes.Argument_Invalid);\n }\n manufacturerData = Bytes.from(manufacturerData, \"hex\");\n }\n const cc = new ThermostatModeCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n mode,\n manufacturerData: manufacturerData as any,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getSupportedModes(): Promise<MaybeNotKnown<readonly ThermostatMode[]>> {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.SupportedGet);\n const cc = new ThermostatModeCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatModeCCSupportedReport>(cc, this.commandOptions);\n return response?.supportedModes;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Mode\"])\n@implementedVersion(3)\n@ccValues(ThermostatModeCCValues)\nexport class ThermostatModeCC extends CommandClass {\n declare ccCommand: ThermostatModeCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Mode\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // First query the possible modes to set the metadata\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported thermostat modes...\",\n direction: \"outbound\",\n });\n const supportedModes = await api.getSupportedModes();\n if (supportedModes) {\n const logMessage = logText(\"received supported thermostat modes:\", {\n nested: logList(supportedModes.map((mode) => getEnumMemberName(ThermostatMode, mode))),\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported thermostat modes timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Mode\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query the current status\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current thermostat mode...\",\n direction: \"outbound\",\n });\n const currentStatus = await api.get();\n if (currentStatus) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"received current thermostat mode: \"\n + getEnumMemberName(ThermostatMode, currentStatus.mode),\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport type ThermostatModeCCSetOptions = {\n mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>;\n} | {\n mode: (typeof ThermostatMode)[\"Manufacturer specific\"];\n manufacturerData: BytesView;\n};\n@CCCommand(ThermostatModeCommand.Set)\n@useSupervision()\nexport class ThermostatModeCCSet extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCSetOptions>) {\n super(options);\n this.mode = options.mode;\n if (\"manufacturerData\" in options) {\n this.manufacturerData = options.manufacturerData;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCSet {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatMode = raw.payload[0] & 0b11111;\n if (mode !== ThermostatMode[\"Manufacturer specific\"]) {\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n const manufacturerDataLength = (raw.payload[0] >>> 5) & 0b111;\n validatePayload(raw.payload.length >= 1 + manufacturerDataLength);\n const manufacturerData = raw.payload.subarray(1, 1 + manufacturerDataLength);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n manufacturerData,\n });\n }\n public mode: ThermostatMode;\n public manufacturerData?: BytesView;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const manufacturerData = this.mode === ThermostatMode[\"Manufacturer specific\"]\n && this.manufacturerData\n ? this.manufacturerData\n : new Uint8Array();\n const manufacturerDataLength = manufacturerData.length;\n this.payload = Bytes.concat([\n [\n ((manufacturerDataLength & 0b111) << 5) + (this.mode & 0b11111),\n ],\n manufacturerData,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatMode, this.mode),\n };\n if (this.manufacturerData != undefined) {\n message[\"manufacturer data\"] = buffer2hex(this.manufacturerData);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport type ThermostatModeCCReportOptions = {\n mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>;\n manufacturerData?: undefined;\n} | {\n mode: (typeof ThermostatMode)[\"Manufacturer specific\"];\n manufacturerData?: BytesView;\n};\n@CCCommand(ThermostatModeCommand.Report)\n@ccValueProperty(\"mode\", ThermostatModeCCValues.thermostatMode)\n@ccValueProperty(\"manufacturerData\", ThermostatModeCCValues.manufacturerData)\nexport class ThermostatModeCCReport extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCReportOptions>) {\n super(options);\n this.mode = options.mode;\n this.manufacturerData = options.manufacturerData;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCReport {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatMode = raw.payload[0] & 0b11111;\n if (mode !== ThermostatMode[\"Manufacturer specific\"]) {\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n // V3+\n const manufacturerDataLength = raw.payload[0] >>> 5;\n validatePayload(raw.payload.length >= 1 + manufacturerDataLength);\n const manufacturerData = raw.payload.subarray(1, 1 + manufacturerDataLength);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n manufacturerData,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Update the supported modes if a mode is used that wasn't previously\n // reported to be supported. This shouldn't happen, but well... it does anyways\n const thermostatModeValue = ThermostatModeCCValues.thermostatMode;\n const supportedModesValue = ThermostatModeCCValues.supportedModes;\n const supportedModes = this.getValue<ThermostatMode[]>(ctx, supportedModesValue);\n if (supportedModes\n && this.mode in ThermostatMode\n && !supportedModes.includes(this.mode)) {\n supportedModes.push(this.mode);\n supportedModes.sort((a, b) => a - b);\n this.setMetadata(ctx, thermostatModeValue, {\n ...thermostatModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatMode, supportedModes),\n });\n this.setValue(ctx, supportedModesValue, supportedModes);\n }\n return true;\n }\n public readonly mode: ThermostatMode;\n public readonly manufacturerData: BytesView | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const manufacturerDataLength = this.mode === ThermostatMode[\"Manufacturer specific\"]\n && this.manufacturerData\n ? Math.min(0b111, this.manufacturerData.length)\n : 0;\n this.payload = new Bytes(1 + manufacturerDataLength);\n this.payload[0] = (manufacturerDataLength << 5) + (this.mode & 0b11111);\n if (manufacturerDataLength && this.manufacturerData) {\n this.payload.set(this.manufacturerData.subarray(0, manufacturerDataLength), 1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatMode, this.mode),\n };\n if (this.manufacturerData != undefined) {\n message[\"manufacturer data\"] = buffer2hex(this.manufacturerData);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(ThermostatModeCommand.Get)\n@expectedCCResponse(ThermostatModeCCReport)\nexport class ThermostatModeCCGet extends ThermostatModeCC {\n}\n// @publicAPI\nexport interface ThermostatModeCCSupportedReportOptions {\n supportedModes: ThermostatMode[];\n}\n@CCCommand(ThermostatModeCommand.SupportedReport)\n@ccValueProperty(\"supportedModes\", ThermostatModeCCValues.supportedModes)\nexport class ThermostatModeCCSupportedReport extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCSupportedReportOptions>) {\n super(options);\n this.supportedModes = options.supportedModes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCSupportedReport {\n const supportedModes: ThermostatMode[] = parseBitMask(raw.payload, ThermostatMode.Off);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedModes,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Use this information to create the metadata for the mode property\n const thermostatModeValue = ThermostatModeCCValues.thermostatMode;\n this.setMetadata(ctx, thermostatModeValue, {\n ...thermostatModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatMode, this.supportedModes),\n });\n return true;\n }\n public readonly supportedModes: ThermostatMode[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.supportedModes, ThermostatMode[\"Manufacturer specific\"], ThermostatMode.Off);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported modes\": logList(this.supportedModes.map((mode) => getEnumMemberName(ThermostatMode, mode))),\n },\n };\n }\n}\n@CCCommand(ThermostatModeCommand.SupportedGet)\n@expectedCCResponse(ThermostatModeCCSupportedReport)\nexport class ThermostatModeCCSupportedGet extends ThermostatModeCC {\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -157,14 +157,15 @@ let ThermostatOperatingStateCC = (() => {
|
|
|
157
157
|
message: `Interviewing ${this.ccName}...`,
|
|
158
158
|
direction: "none"
|
|
159
159
|
});
|
|
160
|
-
await this.refreshValues(ctx);
|
|
160
|
+
await this.refreshValues(ctx, { tag: "interview" });
|
|
161
161
|
this.setInterviewComplete(ctx, true);
|
|
162
162
|
}
|
|
163
163
|
async refreshValues(ctx, options) {
|
|
164
164
|
const node = this.getNode(ctx);
|
|
165
165
|
const endpoint = this.getEndpoint(ctx);
|
|
166
166
|
const api = import_API.CCAPI.create(import_core.CommandClasses["Thermostat Operating State"], ctx, endpoint).withOptions({
|
|
167
|
-
priority: options?.priority ?? import_core.MessagePriority.NodeQuery
|
|
167
|
+
priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
|
|
168
|
+
tag: options?.tag
|
|
168
169
|
});
|
|
169
170
|
ctx.logNode(node.id, {
|
|
170
171
|
endpoint: this.endpointIndex,
|
|
@@ -296,8 +297,7 @@ let ThermostatOperatingStateCCLoggingSupportedReport = (() => {
|
|
|
296
297
|
return {
|
|
297
298
|
...super.toLogEntry(ctx),
|
|
298
299
|
message: {
|
|
299
|
-
"supported logging types": this.supportedLoggingTypes.map((t) =>
|
|
300
|
-
\xB7 ${(0, import_shared.getEnumMemberName)(import_Types.ThermostatOperatingState, t)}`).join("")
|
|
300
|
+
"supported logging types": (0, import_core.logList)(this.supportedLoggingTypes.map((t) => (0, import_shared.getEnumMemberName)(import_Types.ThermostatOperatingState, t)))
|
|
301
301
|
}
|
|
302
302
|
};
|
|
303
303
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/ThermostatOperatingStateCC.ts"],
|
|
4
|
-
"sourcesContent": ["import * as __validateArgs from \"./ThermostatOperatingStateCC._validateArgs.js\";\nconst { validateArgs_ThermostatOperatingStateCCAPI_getLogging } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, ValueMetadata, type WithAddress, encodeBitMask, enumValuesToMetadataStates, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatOperatingState, ThermostatOperatingStateCommand, type ThermostatOperatingStateLoggingData, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatOperatingStateCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatOperatingStateCCValues };\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses[\"Thermostat Operating State\"])\nexport class ThermostatOperatingStateCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: ThermostatOperatingStateCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatOperatingStateCommand.Get:\n return true; // This is mandatory\n case ThermostatOperatingStateCommand.LoggingSupportedGet:\n case ThermostatOperatingStateCommand.LoggingGet:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatOperatingStateCCAPI, { property }) {\n switch (property) {\n case \"state\":\n return this.get();\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n public async get(): Promise<MaybeNotKnown<ThermostatOperatingState>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.Get);\n const cc = new ThermostatOperatingStateCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCReport>(cc, this.commandOptions);\n return response?.state;\n }\n public async getSupportedLoggingTypes(): Promise<MaybeNotKnown<readonly ThermostatOperatingState[]>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.LoggingSupportedGet);\n const cc = new ThermostatOperatingStateCCLoggingSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCLoggingSupportedReport>(cc, this.commandOptions);\n return response?.supportedLoggingTypes;\n }\n @validateArgs_ThermostatOperatingStateCCAPI_getLogging()\n public async getLogging(states: ThermostatOperatingState[]): Promise<MaybeNotKnown<ReadonlyMap<ThermostatOperatingState, ThermostatOperatingStateLoggingData>>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.LoggingGet);\n const cc = new ThermostatOperatingStateCCLoggingGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n requestedStates: states,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCLoggingReport>(cc, this.commandOptions);\n return response?.loggingData;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Operating State\"])\n@implementedVersion(2)\n@ccValues(ThermostatOperatingStateCCValues)\nexport class ThermostatOperatingStateCC extends CommandClass {\n declare ccCommand: ThermostatOperatingStateCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx);\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Operating State\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying thermostat operating state...\",\n direction: \"outbound\",\n });\n const state = await api.get();\n if (state != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received current thermostat operating state: ${getEnumMemberName(ThermostatOperatingState, state)}`,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCReportOptions {\n state: ThermostatOperatingState;\n}\n@CCCommand(ThermostatOperatingStateCommand.Report)\n@ccValueProperty(\"state\", ThermostatOperatingStateCCValues.operatingState)\nexport class ThermostatOperatingStateCCReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCReportOptions>) {\n super(options);\n this.state = options.state;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCReport {\n validatePayload(raw.payload.length >= 1);\n const state: ThermostatOperatingState = raw.payload[0];\n validatePayload(state <= ThermostatOperatingState[\"3rd Stage Aux Heat\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n state,\n });\n }\n public readonly state: ThermostatOperatingState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.state]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n state: getEnumMemberName(ThermostatOperatingState, this.state),\n },\n };\n }\n}\n@CCCommand(ThermostatOperatingStateCommand.Get)\n@expectedCCResponse(ThermostatOperatingStateCCReport)\nexport class ThermostatOperatingStateCCGet extends ThermostatOperatingStateCC {\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingSupportedReportOptions {\n supportedLoggingTypes: ThermostatOperatingState[];\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingSupportedReport)\nexport class ThermostatOperatingStateCCLoggingSupportedReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingSupportedReportOptions>) {\n super(options);\n this.supportedLoggingTypes = options.supportedLoggingTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingSupportedReport {\n // Bit 0 is not allocated, bit 1 = Operating State 1, etc.\n const supportedLoggingTypes: ThermostatOperatingState[] = parseBitMask(raw.payload, ThermostatOperatingState[\"Idle\"])\n // Bit 0 MUST be set to zero, so we ignore it when set\n .filter((state) => state !== ThermostatOperatingState.Idle);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedLoggingTypes,\n });\n }\n public readonly supportedLoggingTypes: ThermostatOperatingState[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const supportedLoggingTypes = this.supportedLoggingTypes\n // Bit 0 MUST be set to zero, so we filter it out\n .filter((t) => t !== ThermostatOperatingState.Idle);\n this.payload = encodeBitMask(supportedLoggingTypes, undefined, ThermostatOperatingState[\"Idle\"]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported logging types\": this.supportedLoggingTypes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(ThermostatOperatingState, t)}`)\n .join(\"\"),\n },\n };\n }\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingSupportedGet)\n@expectedCCResponse(ThermostatOperatingStateCCLoggingSupportedReport)\nexport class ThermostatOperatingStateCCLoggingSupportedGet extends ThermostatOperatingStateCC {\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingReportOptions {\n reportsToFollow: number;\n loggingData: Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>;\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingReport)\nexport class ThermostatOperatingStateCCLoggingReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingReportOptions>) {\n super(options);\n this.reportsToFollow = options.reportsToFollow;\n this.loggingData = options.loggingData;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingReport {\n validatePayload(raw.payload.length >= 1);\n const reportsToFollow = raw.payload[0];\n // Each log entry is 5 bytes:\n // Reserved[7:4]+StateType[3:0], TodayH, TodayM, YesterdayH, YesterdayM\n const loggingData = new Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>();\n let offset = 1;\n while (offset + 5 <= raw.payload.length) {\n const state: ThermostatOperatingState = raw.payload[offset++]\n & 0b1111;\n loggingData.set(state, {\n usageTodayHours: raw.payload[offset++],\n usageTodayMinutes: raw.payload[offset++],\n usageYesterdayHours: raw.payload[offset++],\n usageYesterdayMinutes: raw.payload[offset++],\n });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n reportsToFollow,\n loggingData,\n });\n }\n public reportsToFollow: number;\n public loggingData: Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>;\n public getPartialCCSessionId(): Record<string, any> | undefined {\n return {};\n }\n public getRemainingSegments(): number | undefined {\n return this.reportsToFollow;\n }\n public mergePartialCCs(partials: ThermostatOperatingStateCCLoggingReport[], _ctx: CCParsingContext): Promise<void> {\n // Merge all logging data maps from partial reports\n const merged = new Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>();\n for (const partial of partials) {\n for (const [state, data] of partial.loggingData) {\n merged.set(state, data);\n }\n }\n for (const [state, data] of this.loggingData) {\n merged.set(state, data);\n }\n this.loggingData = merged;\n return Promise.resolve();\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = new Bytes(1 + this.loggingData.size * 5);\n this.payload[0] = this.reportsToFollow;\n let offset = 1;\n for (const [state, entry] of this.loggingData) {\n this.payload[offset++] = state & 0b1111;\n this.payload[offset++] = entry.usageTodayHours;\n this.payload[offset++] = entry.usageTodayMinutes;\n this.payload[offset++] = entry.usageYesterdayHours;\n this.payload[offset++] = entry.usageYesterdayMinutes;\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"reports to follow\": this.reportsToFollow,\n };\n for (const [state, entry] of this.loggingData) {\n const stateName = getEnumMemberName(ThermostatOperatingState, state);\n message[`${stateName} today`] =\n `${entry.usageTodayHours}h ${entry.usageTodayMinutes}m`;\n message[`${stateName} yesterday`] =\n `${entry.usageYesterdayHours}h ${entry.usageYesterdayMinutes}m`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingGetOptions {\n requestedStates: ThermostatOperatingState[];\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingGet)\n@expectedCCResponse(ThermostatOperatingStateCCLoggingReport)\nexport class ThermostatOperatingStateCCLoggingGet extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingGetOptions>) {\n super(options);\n this.requestedStates = options.requestedStates;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingGet {\n const requestedStates: ThermostatOperatingState[] = parseBitMask(raw.payload, ThermostatOperatingState[\"Idle\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n requestedStates,\n });\n }\n public requestedStates: ThermostatOperatingState[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.requestedStates, undefined, ThermostatOperatingState[\"Idle\"]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"requested states\": this.requestedStates\n .map((t) => getEnumMemberName(ThermostatOperatingState, t))\n .join(\", \"),\n },\n };\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qBAAgC;AAEhC,
|
|
4
|
+
"sourcesContent": ["import * as __validateArgs from \"./ThermostatOperatingStateCC._validateArgs.js\";\nconst { validateArgs_ThermostatOperatingStateCCAPI_getLogging } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, ValueMetadata, type WithAddress, encodeBitMask, enumValuesToMetadataStates, logList, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatOperatingState, ThermostatOperatingStateCommand, type ThermostatOperatingStateLoggingData, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatOperatingStateCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatOperatingStateCCValues };\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses[\"Thermostat Operating State\"])\nexport class ThermostatOperatingStateCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: ThermostatOperatingStateCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatOperatingStateCommand.Get:\n return true; // This is mandatory\n case ThermostatOperatingStateCommand.LoggingSupportedGet:\n case ThermostatOperatingStateCommand.LoggingGet:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatOperatingStateCCAPI, { property }) {\n switch (property) {\n case \"state\":\n return this.get();\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n public async get(): Promise<MaybeNotKnown<ThermostatOperatingState>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.Get);\n const cc = new ThermostatOperatingStateCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCReport>(cc, this.commandOptions);\n return response?.state;\n }\n public async getSupportedLoggingTypes(): Promise<MaybeNotKnown<readonly ThermostatOperatingState[]>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.LoggingSupportedGet);\n const cc = new ThermostatOperatingStateCCLoggingSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCLoggingSupportedReport>(cc, this.commandOptions);\n return response?.supportedLoggingTypes;\n }\n @validateArgs_ThermostatOperatingStateCCAPI_getLogging()\n public async getLogging(states: ThermostatOperatingState[]): Promise<MaybeNotKnown<ReadonlyMap<ThermostatOperatingState, ThermostatOperatingStateLoggingData>>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.LoggingGet);\n const cc = new ThermostatOperatingStateCCLoggingGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n requestedStates: states,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCLoggingReport>(cc, this.commandOptions);\n return response?.loggingData;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Operating State\"])\n@implementedVersion(2)\n@ccValues(ThermostatOperatingStateCCValues)\nexport class ThermostatOperatingStateCC extends CommandClass {\n declare ccCommand: ThermostatOperatingStateCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx, { tag: \"interview\" });\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Operating State\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying thermostat operating state...\",\n direction: \"outbound\",\n });\n const state = await api.get();\n if (state != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received current thermostat operating state: ${getEnumMemberName(ThermostatOperatingState, state)}`,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCReportOptions {\n state: ThermostatOperatingState;\n}\n@CCCommand(ThermostatOperatingStateCommand.Report)\n@ccValueProperty(\"state\", ThermostatOperatingStateCCValues.operatingState)\nexport class ThermostatOperatingStateCCReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCReportOptions>) {\n super(options);\n this.state = options.state;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCReport {\n validatePayload(raw.payload.length >= 1);\n const state: ThermostatOperatingState = raw.payload[0];\n validatePayload(state <= ThermostatOperatingState[\"3rd Stage Aux Heat\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n state,\n });\n }\n public readonly state: ThermostatOperatingState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.state]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n state: getEnumMemberName(ThermostatOperatingState, this.state),\n },\n };\n }\n}\n@CCCommand(ThermostatOperatingStateCommand.Get)\n@expectedCCResponse(ThermostatOperatingStateCCReport)\nexport class ThermostatOperatingStateCCGet extends ThermostatOperatingStateCC {\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingSupportedReportOptions {\n supportedLoggingTypes: ThermostatOperatingState[];\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingSupportedReport)\nexport class ThermostatOperatingStateCCLoggingSupportedReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingSupportedReportOptions>) {\n super(options);\n this.supportedLoggingTypes = options.supportedLoggingTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingSupportedReport {\n // Bit 0 is not allocated, bit 1 = Operating State 1, etc.\n const supportedLoggingTypes: ThermostatOperatingState[] = parseBitMask(raw.payload, ThermostatOperatingState[\"Idle\"])\n // Bit 0 MUST be set to zero, so we ignore it when set\n .filter((state) => state !== ThermostatOperatingState.Idle);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedLoggingTypes,\n });\n }\n public readonly supportedLoggingTypes: ThermostatOperatingState[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const supportedLoggingTypes = this.supportedLoggingTypes\n // Bit 0 MUST be set to zero, so we filter it out\n .filter((t) => t !== ThermostatOperatingState.Idle);\n this.payload = encodeBitMask(supportedLoggingTypes, undefined, ThermostatOperatingState[\"Idle\"]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported logging types\": logList(this.supportedLoggingTypes.map((t) => getEnumMemberName(ThermostatOperatingState, t))),\n },\n };\n }\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingSupportedGet)\n@expectedCCResponse(ThermostatOperatingStateCCLoggingSupportedReport)\nexport class ThermostatOperatingStateCCLoggingSupportedGet extends ThermostatOperatingStateCC {\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingReportOptions {\n reportsToFollow: number;\n loggingData: Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>;\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingReport)\nexport class ThermostatOperatingStateCCLoggingReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingReportOptions>) {\n super(options);\n this.reportsToFollow = options.reportsToFollow;\n this.loggingData = options.loggingData;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingReport {\n validatePayload(raw.payload.length >= 1);\n const reportsToFollow = raw.payload[0];\n // Each log entry is 5 bytes:\n // Reserved[7:4]+StateType[3:0], TodayH, TodayM, YesterdayH, YesterdayM\n const loggingData = new Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>();\n let offset = 1;\n while (offset + 5 <= raw.payload.length) {\n const state: ThermostatOperatingState = raw.payload[offset++]\n & 0b1111;\n loggingData.set(state, {\n usageTodayHours: raw.payload[offset++],\n usageTodayMinutes: raw.payload[offset++],\n usageYesterdayHours: raw.payload[offset++],\n usageYesterdayMinutes: raw.payload[offset++],\n });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n reportsToFollow,\n loggingData,\n });\n }\n public reportsToFollow: number;\n public loggingData: Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>;\n public getPartialCCSessionId(): Record<string, any> | undefined {\n return {};\n }\n public getRemainingSegments(): number | undefined {\n return this.reportsToFollow;\n }\n public mergePartialCCs(partials: ThermostatOperatingStateCCLoggingReport[], _ctx: CCParsingContext): Promise<void> {\n // Merge all logging data maps from partial reports\n const merged = new Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>();\n for (const partial of partials) {\n for (const [state, data] of partial.loggingData) {\n merged.set(state, data);\n }\n }\n for (const [state, data] of this.loggingData) {\n merged.set(state, data);\n }\n this.loggingData = merged;\n return Promise.resolve();\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = new Bytes(1 + this.loggingData.size * 5);\n this.payload[0] = this.reportsToFollow;\n let offset = 1;\n for (const [state, entry] of this.loggingData) {\n this.payload[offset++] = state & 0b1111;\n this.payload[offset++] = entry.usageTodayHours;\n this.payload[offset++] = entry.usageTodayMinutes;\n this.payload[offset++] = entry.usageYesterdayHours;\n this.payload[offset++] = entry.usageYesterdayMinutes;\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"reports to follow\": this.reportsToFollow,\n };\n for (const [state, entry] of this.loggingData) {\n const stateName = getEnumMemberName(ThermostatOperatingState, state);\n message[`${stateName} today`] =\n `${entry.usageTodayHours}h ${entry.usageTodayMinutes}m`;\n message[`${stateName} yesterday`] =\n `${entry.usageYesterdayHours}h ${entry.usageYesterdayMinutes}m`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingGetOptions {\n requestedStates: ThermostatOperatingState[];\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingGet)\n@expectedCCResponse(ThermostatOperatingStateCCLoggingReport)\nexport class ThermostatOperatingStateCCLoggingGet extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingGetOptions>) {\n super(options);\n this.requestedStates = options.requestedStates;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingGet {\n const requestedStates: ThermostatOperatingState[] = parseBitMask(raw.payload, ThermostatOperatingState[\"Idle\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n requestedStates,\n });\n }\n public requestedStates: ThermostatOperatingState[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.requestedStates, undefined, ThermostatOperatingState[\"Idle\"]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"requested states\": this.requestedStates\n .map((t) => getEnumMemberName(ThermostatOperatingState, t))\n .join(\", \"),\n },\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -146,14 +146,15 @@ let ThermostatSetbackCC = (() => {
|
|
|
146
146
|
message: `Interviewing ${this.ccName}...`,
|
|
147
147
|
direction: "none"
|
|
148
148
|
});
|
|
149
|
-
await this.refreshValues(ctx);
|
|
149
|
+
await this.refreshValues(ctx, { tag: "interview" });
|
|
150
150
|
this.setInterviewComplete(ctx, true);
|
|
151
151
|
}
|
|
152
152
|
async refreshValues(ctx, options) {
|
|
153
153
|
const node = this.getNode(ctx);
|
|
154
154
|
const endpoint = this.getEndpoint(ctx);
|
|
155
155
|
const api = import_API.CCAPI.create(import_core.CommandClasses["Thermostat Setback"], ctx, endpoint).withOptions({
|
|
156
|
-
priority: options?.priority ?? import_core.MessagePriority.NodeQuery
|
|
156
|
+
priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
|
|
157
|
+
tag: options?.tag
|
|
157
158
|
});
|
|
158
159
|
ctx.logNode(node.id, {
|
|
159
160
|
endpoint: this.endpointIndex,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/ThermostatSetbackCC.ts"],
|
|
4
|
-
"sourcesContent": ["import * as __validateArgs from \"./ThermostatSetbackCC._validateArgs.js\";\nconst { validateArgs_ThermostatSetbackCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type SupervisionResult, type WithAddress, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { type SetbackState, SetbackType, ThermostatSetbackCommand, } from \"../lib/_Types.js\";\nimport { decodeSetbackState, encodeSetbackState } from \"../lib/serializers.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\n// @noSetValueAPI\n// The setback state consist of two values that must be set together\n@API(CommandClasses[\"Thermostat Setback\"])\nexport class ThermostatSetbackCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatSetbackCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatSetbackCommand.Get:\n return this.isSinglecast();\n case ThermostatSetbackCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatSetbackCCAPI, { property }) {\n switch (property) {\n case \"setbackType\":\n case \"setbackState\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatSetbackCommand, ThermostatSetbackCommand.Get);\n const cc = new ThermostatSetbackCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatSetbackCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"setbackType\", \"setbackState\"]);\n }\n }\n @validateArgs_ThermostatSetbackCCAPI_set()\n public async set(setbackType: SetbackType, setbackState: SetbackState): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatSetbackCommand, ThermostatSetbackCommand.Get);\n const cc = new ThermostatSetbackCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n setbackType,\n setbackState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Thermostat Setback\"])\n@implementedVersion(1)\nexport class ThermostatSetbackCC extends CommandClass {\n declare ccCommand: ThermostatSetbackCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Setback\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n // Query the thermostat state\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying the current thermostat state...\",\n direction: \"outbound\",\n });\n const setbackResp = await api.get();\n if (setbackResp) {\n const logMessage = `received current state:\nsetback type: ${getEnumMemberName(SetbackType, setbackResp.setbackType)}\nsetback state: ${setbackResp.setbackState}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatSetbackCCSetOptions {\n setbackType: SetbackType;\n setbackState: SetbackState;\n}\n@CCCommand(ThermostatSetbackCommand.Set)\n@useSupervision()\nexport class ThermostatSetbackCCSet extends ThermostatSetbackCC {\n public constructor(options: WithAddress<ThermostatSetbackCCSetOptions>) {\n super(options);\n this.setbackType = options.setbackType;\n this.setbackState = options.setbackState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetbackCCSet {\n validatePayload(raw.payload.length >= 2);\n const setbackType: SetbackType = raw.payload[0] & 0b11;\n const setbackState: SetbackState = decodeSetbackState(raw.payload, 1)\n // If we receive an unknown setback state, return the raw value\n || raw.payload.readInt8(1);\n return new this({\n nodeId: ctx.sourceNodeId,\n setbackType,\n setbackState,\n });\n }\n public setbackType: SetbackType;\n /** The offset from the setpoint in 0.1 Kelvin or a special mode */\n public setbackState: SetbackState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.setbackType & 0b11],\n encodeSetbackState(this.setbackState),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setback type\": getEnumMemberName(SetbackType, this.setbackType),\n \"setback state\": typeof this.setbackState === \"number\"\n ? `${this.setbackState} K`\n : this.setbackState,\n },\n };\n }\n}\n// @publicAPI\nexport interface ThermostatSetbackCCReportOptions {\n setbackType: SetbackType;\n setbackState: SetbackState;\n}\n@CCCommand(ThermostatSetbackCommand.Report)\nexport class ThermostatSetbackCCReport extends ThermostatSetbackCC {\n public constructor(options: WithAddress<ThermostatSetbackCCReportOptions>) {\n super(options);\n this.setbackType = options.setbackType;\n this.setbackState = options.setbackState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetbackCCReport {\n validatePayload(raw.payload.length >= 2);\n const setbackType: SetbackType = raw.payload[0] & 0b11;\n const setbackState: SetbackState = decodeSetbackState(raw.payload, 1)\n // If we receive an unknown setback state, return the raw value\n || raw.payload.readInt8(1);\n return new this({\n nodeId: ctx.sourceNodeId,\n setbackType,\n setbackState,\n });\n }\n public readonly setbackType: SetbackType;\n /** The offset from the setpoint in 0.1 Kelvin or a special mode */\n public readonly setbackState: SetbackState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.setbackType & 0b11],\n encodeSetbackState(this.setbackState),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setback type\": getEnumMemberName(SetbackType, this.setbackType),\n \"setback state\": typeof this.setbackState === \"number\"\n ? `${this.setbackState} K`\n : this.setbackState,\n },\n };\n }\n}\n@CCCommand(ThermostatSetbackCommand.Get)\n@expectedCCResponse(ThermostatSetbackCCReport)\nexport class ThermostatSetbackCCGet extends ThermostatSetbackCC {\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qBAAgC;AAEhC,kBAA2K;AAC3K,oBAA+C;AAC/C,iBAA2F;AAC3F,0BAAuH;AACvH,oCAAsG;AACtG,mBAA0E;AAC1E,yBAAuD;AAPvD,MAAM,EAAE,wCAAuC,IAAK;IAYvC,0BAAsB,MAAA;8BADlC,mCAAI,2BAAe,oBAAoB,CAAC,CAAC;;;;oBACE;;;8CAAA,YAAK;WAAA;;;;;;;;yBAiC5C,wCAAuC,CAAE;AAC1C,qCAAA,MAAA,MAAA,iBAAA,EAAA,MAAA,UAAA,MAAA,OAAA,QAAA,OAAA,SAAA,OAAA,QAAA,EAAA,KAAA,gCAAA,SAAA,KAAA,QAAA,KAAA,gCAAA,IAAa,KAAb,OAAgB,GAAA,UAAA,UAAA,GAAA,MAAA,0BAAA;AAlCpB,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACF,gBAAgB,KAA6B;AAChD,cAAQ,KAAK;QACT,KAAK,sCAAyB;AAC1B,iBAAO,KAAK,aAAY;QAC5B,KAAK,sCAAyB;AAC1B,iBAAO;MACf;AACA,aAAO,MAAM,gBAAgB,GAAG;IACpC;IACA,KAAe,qBAAU,IAAC;AACtB,aAAO,eAA8C,EAAE,SAAQ,GAAE;AAC7D,gBAAQ,UAAU;UACd,KAAK;UACL,KAAK;AACD,oBAAQ,MAAM,KAAK,IAAG,KAAM,QAAQ;UACxC;AACI,qDAAyB,KAAK,MAAM,QAAQ;QACpD;MACJ;IACJ;;IAEO,MAAM,MAAG;AACZ,WAAK,sBAAsB,uCAA0B,sCAAyB,GAAG;AACjF,YAAM,KAAK,IAAI,uBAAuB;QAClC,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;OAChC;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAAuC,IAAI,KAAK,cAAc;AAC/F,UAAI,UAAU;AACV,mBAAO,oBAAK,UAAU,CAAC,eAAe,cAAc,CAAC;MACzD;IACJ;IAEO,MAAM,IAAI,aAA0B,cAA0B;AACjE,WAAK,sBAAsB,uCAA0B,sCAAyB,GAAG;AACjF,YAAM,KAAK,IAAI,uBAAuB;QAClC,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;QAC7B;QACA;OACH;AACD,aAAO,KAAK,KAAK,YAAY,IAAI,KAAK,cAAc;IACxD;;;AA3CS,0CAAA,MAAA,0BAAA;;;;;IA+CA,uBAAmB,MAAA;8BAF/B,4CAAa,2BAAe,oBAAoB,CAAC,OACjD,kDAAmB,CAAC,CAAC;;;;oBACmB;2CAAA,YAAY;WAAA;;;;;;;;AAArD,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IAEF,MAAM,UAAU,KAAqB;AACxC,YAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,UAAI,QAAQ,KAAK,IAAI;QACjB,UAAU,KAAK;QACf,SAAS,gBAAgB,KAAK,MAAM;QACpC,WAAW;OACd;AACD,YAAM,KAAK,cAAc,
|
|
4
|
+
"sourcesContent": ["import * as __validateArgs from \"./ThermostatSetbackCC._validateArgs.js\";\nconst { validateArgs_ThermostatSetbackCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type SupervisionResult, type WithAddress, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { type SetbackState, SetbackType, ThermostatSetbackCommand, } from \"../lib/_Types.js\";\nimport { decodeSetbackState, encodeSetbackState } from \"../lib/serializers.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\n// @noSetValueAPI\n// The setback state consist of two values that must be set together\n@API(CommandClasses[\"Thermostat Setback\"])\nexport class ThermostatSetbackCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatSetbackCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatSetbackCommand.Get:\n return this.isSinglecast();\n case ThermostatSetbackCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatSetbackCCAPI, { property }) {\n switch (property) {\n case \"setbackType\":\n case \"setbackState\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatSetbackCommand, ThermostatSetbackCommand.Get);\n const cc = new ThermostatSetbackCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatSetbackCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"setbackType\", \"setbackState\"]);\n }\n }\n @validateArgs_ThermostatSetbackCCAPI_set()\n public async set(setbackType: SetbackType, setbackState: SetbackState): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatSetbackCommand, ThermostatSetbackCommand.Get);\n const cc = new ThermostatSetbackCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n setbackType,\n setbackState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Thermostat Setback\"])\n@implementedVersion(1)\nexport class ThermostatSetbackCC extends CommandClass {\n declare ccCommand: ThermostatSetbackCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Setback\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query the thermostat state\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying the current thermostat state...\",\n direction: \"outbound\",\n });\n const setbackResp = await api.get();\n if (setbackResp) {\n const logMessage = `received current state:\nsetback type: ${getEnumMemberName(SetbackType, setbackResp.setbackType)}\nsetback state: ${setbackResp.setbackState}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatSetbackCCSetOptions {\n setbackType: SetbackType;\n setbackState: SetbackState;\n}\n@CCCommand(ThermostatSetbackCommand.Set)\n@useSupervision()\nexport class ThermostatSetbackCCSet extends ThermostatSetbackCC {\n public constructor(options: WithAddress<ThermostatSetbackCCSetOptions>) {\n super(options);\n this.setbackType = options.setbackType;\n this.setbackState = options.setbackState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetbackCCSet {\n validatePayload(raw.payload.length >= 2);\n const setbackType: SetbackType = raw.payload[0] & 0b11;\n const setbackState: SetbackState = decodeSetbackState(raw.payload, 1)\n // If we receive an unknown setback state, return the raw value\n || raw.payload.readInt8(1);\n return new this({\n nodeId: ctx.sourceNodeId,\n setbackType,\n setbackState,\n });\n }\n public setbackType: SetbackType;\n /** The offset from the setpoint in 0.1 Kelvin or a special mode */\n public setbackState: SetbackState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.setbackType & 0b11],\n encodeSetbackState(this.setbackState),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setback type\": getEnumMemberName(SetbackType, this.setbackType),\n \"setback state\": typeof this.setbackState === \"number\"\n ? `${this.setbackState} K`\n : this.setbackState,\n },\n };\n }\n}\n// @publicAPI\nexport interface ThermostatSetbackCCReportOptions {\n setbackType: SetbackType;\n setbackState: SetbackState;\n}\n@CCCommand(ThermostatSetbackCommand.Report)\nexport class ThermostatSetbackCCReport extends ThermostatSetbackCC {\n public constructor(options: WithAddress<ThermostatSetbackCCReportOptions>) {\n super(options);\n this.setbackType = options.setbackType;\n this.setbackState = options.setbackState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetbackCCReport {\n validatePayload(raw.payload.length >= 2);\n const setbackType: SetbackType = raw.payload[0] & 0b11;\n const setbackState: SetbackState = decodeSetbackState(raw.payload, 1)\n // If we receive an unknown setback state, return the raw value\n || raw.payload.readInt8(1);\n return new this({\n nodeId: ctx.sourceNodeId,\n setbackType,\n setbackState,\n });\n }\n public readonly setbackType: SetbackType;\n /** The offset from the setpoint in 0.1 Kelvin or a special mode */\n public readonly setbackState: SetbackState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.setbackType & 0b11],\n encodeSetbackState(this.setbackState),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setback type\": getEnumMemberName(SetbackType, this.setbackType),\n \"setback state\": typeof this.setbackState === \"number\"\n ? `${this.setbackState} K`\n : this.setbackState,\n },\n };\n }\n}\n@CCCommand(ThermostatSetbackCommand.Get)\n@expectedCCResponse(ThermostatSetbackCCReport)\nexport class ThermostatSetbackCCGet extends ThermostatSetbackCC {\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|