@zwave-js/cc 15.25.1 → 15.25.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/cc/AlarmSensorCC.js +5 -3
- package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
- package/build/cjs/cc/AssociationCC.js +5 -2
- package/build/cjs/cc/AssociationCC.js.map +2 -2
- package/build/cjs/cc/AssociationGroupInfoCC.js +7 -2
- package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
- package/build/cjs/cc/BarrierOperatorCC.js +5 -3
- 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 +5 -3
- 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 +2 -1
- 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 +5 -2
- package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
- package/build/cjs/cc/ConfigurationCC.js +5 -2
- package/build/cjs/cc/ConfigurationCC.js.map +2 -2
- package/build/cjs/cc/DoorLockCC.js +5 -3
- 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 +5 -3
- 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 +5 -3
- 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 +5 -2
- 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 +5 -3
- 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.js +2 -1
- package/build/cjs/cc/MultiChannelCC.js.map +2 -2
- package/build/cjs/cc/MultilevelSensorCC.js +5 -2
- 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 +7 -3
- package/build/cjs/cc/NotificationCC.js.map +2 -2
- package/build/cjs/cc/ProtectionCC.js +5 -3
- 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 +3 -2
- package/build/cjs/cc/Security2CC.js.map +2 -2
- package/build/cjs/cc/SecurityCC.js +2 -1
- 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 +5 -3
- 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 +5 -3
- package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
- package/build/cjs/cc/ThermostatOperatingStateCC.js +3 -2
- 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 +5 -2
- 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 +4 -2
- 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 +5 -2
- 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/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 +2 -0
- 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/esm/cc/AlarmSensorCC.d.ts.map +1 -1
- package/build/esm/cc/AlarmSensorCC.js +3 -1
- package/build/esm/cc/AlarmSensorCC.js.map +1 -1
- package/build/esm/cc/AssociationCC.d.ts.map +1 -1
- package/build/esm/cc/AssociationCC.js +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 +6 -1
- 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 +3 -1
- 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 +3 -1
- 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 +1 -0
- 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 +3 -0
- 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 +3 -0
- 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 +3 -1
- 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 +3 -1
- 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 +3 -1
- 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 +3 -0
- 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 +3 -1
- 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.map +1 -1
- package/build/esm/cc/MultiChannelCC.js +1 -0
- 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 +3 -0
- 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 +5 -1
- 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 +3 -1
- 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 +2 -1
- 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 +1 -0
- 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 +3 -1
- 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 +3 -1
- 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 +2 -1
- 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 +3 -0
- 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 +2 -0
- 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 +3 -0
- 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/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 +2 -0
- package/build/esm/lib/CommandClass.d.ts.map +1 -1
- 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/package.json +7 -7
|
@@ -270,7 +270,8 @@ let BarrierOperatorCC = (() => {
|
|
|
270
270
|
const node = this.getNode(ctx);
|
|
271
271
|
const endpoint = this.getEndpoint(ctx);
|
|
272
272
|
const api = import_API.CCAPI.create(import_core.CommandClasses["Barrier Operator"], ctx, endpoint).withOptions({
|
|
273
|
-
priority: import_core.MessagePriority.NodeQuery
|
|
273
|
+
priority: import_core.MessagePriority.NodeQuery,
|
|
274
|
+
tag: "interview"
|
|
274
275
|
});
|
|
275
276
|
ctx.logNode(node.id, {
|
|
276
277
|
endpoint: this.endpointIndex,
|
|
@@ -299,14 +300,15 @@ let BarrierOperatorCC = (() => {
|
|
|
299
300
|
await api.setEventSignaling(subsystemType, import_Types.SubsystemState.On).catch(import_shared.noop);
|
|
300
301
|
}
|
|
301
302
|
}
|
|
302
|
-
await this.refreshValues(ctx);
|
|
303
|
+
await this.refreshValues(ctx, { tag: "interview" });
|
|
303
304
|
this.setInterviewComplete(ctx, true);
|
|
304
305
|
}
|
|
305
306
|
async refreshValues(ctx, options) {
|
|
306
307
|
const node = this.getNode(ctx);
|
|
307
308
|
const endpoint = this.getEndpoint(ctx);
|
|
308
309
|
const api = import_API.CCAPI.create(import_core.CommandClasses["Barrier Operator"], ctx, endpoint).withOptions({
|
|
309
|
-
priority: options?.priority ?? import_core.MessagePriority.NodeQuery
|
|
310
|
+
priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
|
|
311
|
+
tag: options?.tag
|
|
310
312
|
});
|
|
311
313
|
const supportedSubsystems = this.getValue(ctx, import_CCValues_generated.BarrierOperatorCCValues.supportedSubsystemTypes) ?? [];
|
|
312
314
|
for (const subsystemType of supportedSubsystems) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/BarrierOperatorCC.ts"],
|
|
4
|
-
"sourcesContent": ["import * as __validateArgs from \"./BarrierOperatorCC._validateArgs.js\";\nconst { validateArgs_BarrierOperatorCCAPI_set, validateArgs_BarrierOperatorCCAPI_getSignalingCapabilities, validateArgs_BarrierOperatorCCAPI_getEventSignaling, validateArgs_BarrierOperatorCCAPI_setEventSignaling } = __validateArgs;\nimport { CommandClasses, type GetNode, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, MessagePriority, type NodeId, type SupervisionResult, type SupportsCC, UNKNOWN_STATE, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, enumValuesToMetadataStates, maybeUnknownToString, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, isEnumMember, noop, pick, } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, throwMissingPropertyKey, throwUnsupportedProperty, throwUnsupportedPropertyKey, 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 { BarrierOperatorCommand, BarrierState, SubsystemState, SubsystemType, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ApplicationStatusCCRejectedRequest } from \"./ApplicationStatusCC.js\";\nimport { BarrierOperatorCCValues } from \"./_CCValues.generated.js\";\nexport { BarrierOperatorCCValues };\n@API(CommandClasses[\"Barrier Operator\"])\nexport class BarrierOperatorCCAPI extends CCAPI {\n public supportsCommand(cmd: BarrierOperatorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case BarrierOperatorCommand.Get:\n case BarrierOperatorCommand.Set:\n case BarrierOperatorCommand.SignalingCapabilitiesGet:\n case BarrierOperatorCommand.EventSignalingGet:\n case BarrierOperatorCommand.EventSignalingSet:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.Get);\n const cc = new BarrierOperatorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"currentState\", \"position\"]);\n }\n }\n @validateArgs_BarrierOperatorCCAPI_set()\n public async set(targetState: BarrierState.Open | BarrierState.Closed): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.Set);\n const cc = new BarrierOperatorCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n targetState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_BarrierOperatorCCAPI_getSignalingCapabilities()\n public async getSignalingCapabilities(): Promise<MaybeNotKnown<readonly SubsystemType[]>> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.SignalingCapabilitiesGet);\n const cc = new BarrierOperatorCCSignalingCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCSignalingCapabilitiesReport>(cc, this.commandOptions);\n return response?.supportedSubsystemTypes;\n }\n @validateArgs_BarrierOperatorCCAPI_getEventSignaling()\n public async getEventSignaling(subsystemType: SubsystemType): Promise<MaybeNotKnown<SubsystemState>> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.EventSignalingGet);\n const cc = new BarrierOperatorCCEventSignalingGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n subsystemType,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCEventSignalingReport>(cc, this.commandOptions);\n return response?.subsystemState;\n }\n @validateArgs_BarrierOperatorCCAPI_setEventSignaling()\n public async setEventSignaling(subsystemType: SubsystemType, subsystemState: SubsystemState): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.EventSignalingSet);\n const cc = new BarrierOperatorCCEventSignalingSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n subsystemType,\n subsystemState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: BarrierOperatorCCAPI, { property, propertyKey }, value) {\n if (property === \"targetState\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n const targetValue = value === BarrierState.Closed\n ? BarrierState.Closed\n : BarrierState.Open;\n return this.set(targetValue);\n }\n else if (property === \"signalingState\") {\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n else if (typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.setEventSignaling(propertyKey, value);\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property, propertyKey }, value, _options) => {\n const valueId = {\n commandClass: this.ccId,\n property,\n propertyKey,\n };\n if (BarrierOperatorCCValues.targetState.is(valueId)) {\n const currentStateValueId = BarrierOperatorCCValues.currentState\n .endpoint(this.endpoint.index);\n const targetValue = value === BarrierState.Closed\n ? BarrierState.Closed\n : BarrierState.Open;\n return {\n // This is the target value for a split target/current state pair.\n isSplitStateTargetValue: true,\n // Barrier Operator commands may take some time to be executed.\n // Therefore we try to supervise the command execution and delay the\n // optimistic update until the final result is received.\n supervisionDelayedUpdates: true,\n supervisionOnSuccess: () => {\n this.tryGetValueDB()?.setValue(currentStateValueId, targetValue);\n },\n supervisionOnFailure: async () => {\n // The command failed, so now we don't know the status - refresh the current value\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n },\n optimisticallyUpdateRelatedValues: (supervisedAndSuccessful) => {\n // For barriers, do not update the current value unless we actually know the command was successful\n if (!supervisedAndSuccessful)\n return;\n if (this.isSinglecast()) {\n this.tryGetValueDB()?.setValue(currentStateValueId, targetValue);\n }\n else if (this.isMulticast()) {\n // Figure out which nodes were affected by this command\n const affectedNodes = this.endpoint.node.physicalNodes\n .filter((node) => node\n .getEndpoint(this.endpoint.index)\n ?.supportsCC(this.ccId));\n // and optimistically update the currentValue\n for (const node of affectedNodes) {\n this.host\n .tryGetValueDB(node.id)\n ?.setValue(currentStateValueId, targetValue);\n }\n }\n },\n verifyChanges: () => {\n if (this.isSinglecast()) {\n // We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n this.schedulePoll(currentStateValueId, targetValue);\n }\n else {\n // For multicasts, do not schedule a refresh - this could cause a LOT of traffic\n }\n },\n };\n }\n else if (BarrierOperatorCCValues.signalingState.is(valueId)) {\n const subsystemType = propertyKey as SubsystemType;\n const signalingStateValueId = BarrierOperatorCCValues\n .signalingState(subsystemType).endpoint(this.endpoint.index);\n return {\n verifyChanges: () => {\n if (this.isSinglecast()) {\n this.schedulePoll(signalingStateValueId, value, {\n // Signaling state changes are fast\n transition: \"fast\",\n });\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: BarrierOperatorCCAPI, { property, propertyKey }) {\n switch (property) {\n case \"currentState\":\n case \"position\":\n return (await this.get())?.[property];\n case \"signalingState\":\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n else if (typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n return this.getEventSignaling(propertyKey);\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n}\n@commandClass(CommandClasses[\"Barrier Operator\"])\n@implementedVersion(1)\n@ccValues(BarrierOperatorCCValues)\nexport class BarrierOperatorCC extends CommandClass {\n declare ccCommand: BarrierOperatorCommand;\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[\"Barrier Operator\"], 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 // Create targetState value if it does not exist\n this.ensureMetadata(ctx, BarrierOperatorCCValues.targetState);\n ctx.logNode(node.id, {\n message: \"Querying signaling capabilities...\",\n direction: \"outbound\",\n });\n const resp = await api.getSignalingCapabilities();\n if (resp) {\n ctx.logNode(node.id, {\n message: `Received supported subsystem types: ${resp\n .map((t) => `\\n\u00B7 ${getEnumMemberName(SubsystemType, t)}`)\n .join(\"\")}`,\n direction: \"inbound\",\n });\n // Enable all supported subsystems\n for (const subsystemType of resp) {\n // Some devices report invalid subsystem types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(SubsystemType, subsystemType))\n continue;\n ctx.logNode(node.id, {\n message: `Enabling subsystem ${getEnumMemberName(SubsystemType, subsystemType)}...`,\n direction: \"outbound\",\n });\n await api.setEventSignaling(subsystemType, SubsystemState.On)\n .catch(noop);\n }\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[\"Barrier Operator\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n const supportedSubsystems: SubsystemType[] = this.getValue(ctx, BarrierOperatorCCValues.supportedSubsystemTypes) ?? [];\n for (const subsystemType of supportedSubsystems) {\n // Some devices report invalid subsystem types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(SubsystemType, subsystemType))\n continue;\n ctx.logNode(node.id, {\n message: `Querying event signaling state for subsystem ${getEnumMemberName(SubsystemType, subsystemType)}...`,\n direction: \"outbound\",\n });\n const state = await api.getEventSignaling(subsystemType);\n if (state != undefined) {\n ctx.logNode(node.id, {\n message: `Subsystem ${getEnumMemberName(SubsystemType, subsystemType)} has state ${getEnumMemberName(SubsystemState, state)}`,\n direction: \"inbound\",\n });\n }\n }\n ctx.logNode(node.id, {\n message: \"querying current barrier state...\",\n direction: \"outbound\",\n });\n await api.get();\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCSetOptions {\n targetState: BarrierState.Open | BarrierState.Closed;\n}\nfunction getCCResponseForBarrierOperatorCCSet(ctx: GetNode<NodeId & SupportsCC>, sent: BarrierOperatorCCSet) {\n // CC:0066.01.01.11.009: If the requested operation is prohibited by\n // the specific device class [...], the device MUST notify the requester\n // by issuing an Application Rejected Request Command\n if (sent.isSinglecast()\n && !sent.isEncapsulatedWith(CommandClasses.Supervision)\n && ctx.getNode(sent.nodeId)?.supportsCC(CommandClasses[\"Application Status\"])) {\n return ApplicationStatusCCRejectedRequest;\n }\n}\n@CCCommand(BarrierOperatorCommand.Set)\n@expectedCCResponse(getCCResponseForBarrierOperatorCCSet)\n@useSupervision()\nexport class BarrierOperatorCCSet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCSetOptions>) {\n super(options);\n this.targetState = options.targetState;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCSet {\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public targetState: BarrierState.Open | BarrierState.Closed;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.targetState]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"target state\": this.targetState },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCReportOptions {\n position: MaybeUnknown<number>;\n currentState: MaybeUnknown<BarrierState>;\n}\n@CCCommand(BarrierOperatorCommand.Report)\n@ccValueProperty(\"currentState\", BarrierOperatorCCValues.currentState)\n@ccValueProperty(\"position\", BarrierOperatorCCValues.position)\nexport class BarrierOperatorCCReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.position = options.position;\n this.currentState = options.currentState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCReport {\n validatePayload(raw.payload.length >= 1);\n // The payload byte encodes information about the state and position in a single value\n const payloadValue = raw.payload[0];\n let position: MaybeUnknown<number>;\n if (payloadValue <= 99) {\n // known position\n position = payloadValue;\n }\n else if (payloadValue === 255) {\n // known position, fully opened\n position = 100;\n }\n else {\n // unknown position\n position = UNKNOWN_STATE;\n }\n let currentState: MaybeUnknown<BarrierState>;\n if (payloadValue === BarrierState.Closed\n || payloadValue >= BarrierState.Closing) {\n // predefined states\n currentState = payloadValue;\n }\n else if (payloadValue > 0 && payloadValue <= 99) {\n // stopped at exact position\n currentState = BarrierState.Stopped;\n }\n else {\n // invalid value, assume unknown\n currentState = UNKNOWN_STATE;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n position,\n currentState,\n });\n }\n public readonly currentState: MaybeUnknown<BarrierState>;\n public readonly position: MaybeUnknown<number>;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"barrier position\": maybeUnknownToString(this.position),\n \"barrier state\": this.currentState != undefined\n ? getEnumMemberName(BarrierState, this.currentState)\n : \"unknown\",\n },\n };\n }\n}\n@CCCommand(BarrierOperatorCommand.Get)\n@expectedCCResponse(BarrierOperatorCCReport)\nexport class BarrierOperatorCCGet extends BarrierOperatorCC {\n}\n// @publicAPI\nexport interface BarrierOperatorCCSignalingCapabilitiesReportOptions {\n supportedSubsystemTypes: SubsystemType[];\n}\n@CCCommand(BarrierOperatorCommand.SignalingCapabilitiesReport)\n@ccValueProperty(\"supportedSubsystemTypes\", BarrierOperatorCCValues.supportedSubsystemTypes)\nexport class BarrierOperatorCCSignalingCapabilitiesReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCSignalingCapabilitiesReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedSubsystemTypes = options.supportedSubsystemTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCSignalingCapabilitiesReport {\n const supportedSubsystemTypes: SubsystemType[] = parseBitMask(raw.payload, SubsystemType.Audible);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedSubsystemTypes,\n });\n }\n public readonly supportedSubsystemTypes: readonly SubsystemType[];\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported types\": this.supportedSubsystemTypes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(SubsystemType, t)}`)\n .join(\"\"),\n },\n };\n }\n}\n@CCCommand(BarrierOperatorCommand.SignalingCapabilitiesGet)\n@expectedCCResponse(BarrierOperatorCCSignalingCapabilitiesReport)\nexport class BarrierOperatorCCSignalingCapabilitiesGet extends BarrierOperatorCC {\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingSetOptions {\n subsystemType: SubsystemType;\n subsystemState: SubsystemState;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingSet)\n@useSupervision()\nexport class BarrierOperatorCCEventSignalingSet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingSetOptions>) {\n super(options);\n this.subsystemType = options.subsystemType;\n this.subsystemState = options.subsystemState;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCEventSignalingSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCEventSignalingSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public subsystemType: SubsystemType;\n public subsystemState: SubsystemState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.subsystemType, this.subsystemState]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n \"subsystem state\": getEnumMemberName(SubsystemState, this.subsystemState),\n },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingReportOptions {\n subsystemType: SubsystemType;\n subsystemState: SubsystemState;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingReport)\nexport class BarrierOperatorCCEventSignalingReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.subsystemType = options.subsystemType;\n this.subsystemState = options.subsystemState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCEventSignalingReport {\n validatePayload(raw.payload.length >= 2);\n const subsystemType: SubsystemType = raw.payload[0];\n const subsystemState: SubsystemState = raw.payload[1];\n validatePayload(isEnumMember(SubsystemType, subsystemType), isEnumMember(SubsystemState, subsystemState));\n return new this({\n nodeId: ctx.sourceNodeId,\n subsystemType,\n subsystemState,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const signalingStateValue = BarrierOperatorCCValues.signalingState(this.subsystemType);\n this.ensureMetadata(ctx, signalingStateValue);\n this.setValue(ctx, signalingStateValue, this.subsystemState);\n return true;\n }\n public readonly subsystemType: SubsystemType;\n public readonly subsystemState: SubsystemState;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n \"subsystem state\": getEnumMemberName(SubsystemState, this.subsystemState),\n },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingGetOptions {\n subsystemType: SubsystemType;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingGet)\n@expectedCCResponse(BarrierOperatorCCEventSignalingReport)\nexport class BarrierOperatorCCEventSignalingGet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingGetOptions>) {\n super(options);\n this.subsystemType = options.subsystemType;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCEventSignalingGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCEventSignalingGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public subsystemType: SubsystemType;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.subsystemType]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n },\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import * as __validateArgs from \"./BarrierOperatorCC._validateArgs.js\";\nconst { validateArgs_BarrierOperatorCCAPI_set, validateArgs_BarrierOperatorCCAPI_getSignalingCapabilities, validateArgs_BarrierOperatorCCAPI_getEventSignaling, validateArgs_BarrierOperatorCCAPI_setEventSignaling } = __validateArgs;\nimport { CommandClasses, type GetNode, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, MessagePriority, type NodeId, type SupervisionResult, type SupportsCC, UNKNOWN_STATE, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, enumValuesToMetadataStates, maybeUnknownToString, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, isEnumMember, noop, pick, } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, throwMissingPropertyKey, throwUnsupportedProperty, throwUnsupportedPropertyKey, 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 { BarrierOperatorCommand, BarrierState, SubsystemState, SubsystemType, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ApplicationStatusCCRejectedRequest } from \"./ApplicationStatusCC.js\";\nimport { BarrierOperatorCCValues } from \"./_CCValues.generated.js\";\nexport { BarrierOperatorCCValues };\n@API(CommandClasses[\"Barrier Operator\"])\nexport class BarrierOperatorCCAPI extends CCAPI {\n public supportsCommand(cmd: BarrierOperatorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case BarrierOperatorCommand.Get:\n case BarrierOperatorCommand.Set:\n case BarrierOperatorCommand.SignalingCapabilitiesGet:\n case BarrierOperatorCommand.EventSignalingGet:\n case BarrierOperatorCommand.EventSignalingSet:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.Get);\n const cc = new BarrierOperatorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"currentState\", \"position\"]);\n }\n }\n @validateArgs_BarrierOperatorCCAPI_set()\n public async set(targetState: BarrierState.Open | BarrierState.Closed): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.Set);\n const cc = new BarrierOperatorCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n targetState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_BarrierOperatorCCAPI_getSignalingCapabilities()\n public async getSignalingCapabilities(): Promise<MaybeNotKnown<readonly SubsystemType[]>> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.SignalingCapabilitiesGet);\n const cc = new BarrierOperatorCCSignalingCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCSignalingCapabilitiesReport>(cc, this.commandOptions);\n return response?.supportedSubsystemTypes;\n }\n @validateArgs_BarrierOperatorCCAPI_getEventSignaling()\n public async getEventSignaling(subsystemType: SubsystemType): Promise<MaybeNotKnown<SubsystemState>> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.EventSignalingGet);\n const cc = new BarrierOperatorCCEventSignalingGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n subsystemType,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCEventSignalingReport>(cc, this.commandOptions);\n return response?.subsystemState;\n }\n @validateArgs_BarrierOperatorCCAPI_setEventSignaling()\n public async setEventSignaling(subsystemType: SubsystemType, subsystemState: SubsystemState): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.EventSignalingSet);\n const cc = new BarrierOperatorCCEventSignalingSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n subsystemType,\n subsystemState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: BarrierOperatorCCAPI, { property, propertyKey }, value) {\n if (property === \"targetState\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n const targetValue = value === BarrierState.Closed\n ? BarrierState.Closed\n : BarrierState.Open;\n return this.set(targetValue);\n }\n else if (property === \"signalingState\") {\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n else if (typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.setEventSignaling(propertyKey, value);\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property, propertyKey }, value, _options) => {\n const valueId = {\n commandClass: this.ccId,\n property,\n propertyKey,\n };\n if (BarrierOperatorCCValues.targetState.is(valueId)) {\n const currentStateValueId = BarrierOperatorCCValues.currentState\n .endpoint(this.endpoint.index);\n const targetValue = value === BarrierState.Closed\n ? BarrierState.Closed\n : BarrierState.Open;\n return {\n // This is the target value for a split target/current state pair.\n isSplitStateTargetValue: true,\n // Barrier Operator commands may take some time to be executed.\n // Therefore we try to supervise the command execution and delay the\n // optimistic update until the final result is received.\n supervisionDelayedUpdates: true,\n supervisionOnSuccess: () => {\n this.tryGetValueDB()?.setValue(currentStateValueId, targetValue);\n },\n supervisionOnFailure: async () => {\n // The command failed, so now we don't know the status - refresh the current value\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n },\n optimisticallyUpdateRelatedValues: (supervisedAndSuccessful) => {\n // For barriers, do not update the current value unless we actually know the command was successful\n if (!supervisedAndSuccessful)\n return;\n if (this.isSinglecast()) {\n this.tryGetValueDB()?.setValue(currentStateValueId, targetValue);\n }\n else if (this.isMulticast()) {\n // Figure out which nodes were affected by this command\n const affectedNodes = this.endpoint.node.physicalNodes\n .filter((node) => node\n .getEndpoint(this.endpoint.index)\n ?.supportsCC(this.ccId));\n // and optimistically update the currentValue\n for (const node of affectedNodes) {\n this.host\n .tryGetValueDB(node.id)\n ?.setValue(currentStateValueId, targetValue);\n }\n }\n },\n verifyChanges: () => {\n if (this.isSinglecast()) {\n // We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n this.schedulePoll(currentStateValueId, targetValue);\n }\n else {\n // For multicasts, do not schedule a refresh - this could cause a LOT of traffic\n }\n },\n };\n }\n else if (BarrierOperatorCCValues.signalingState.is(valueId)) {\n const subsystemType = propertyKey as SubsystemType;\n const signalingStateValueId = BarrierOperatorCCValues\n .signalingState(subsystemType).endpoint(this.endpoint.index);\n return {\n verifyChanges: () => {\n if (this.isSinglecast()) {\n this.schedulePoll(signalingStateValueId, value, {\n // Signaling state changes are fast\n transition: \"fast\",\n });\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: BarrierOperatorCCAPI, { property, propertyKey }) {\n switch (property) {\n case \"currentState\":\n case \"position\":\n return (await this.get())?.[property];\n case \"signalingState\":\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n else if (typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n return this.getEventSignaling(propertyKey);\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n}\n@commandClass(CommandClasses[\"Barrier Operator\"])\n@implementedVersion(1)\n@ccValues(BarrierOperatorCCValues)\nexport class BarrierOperatorCC extends CommandClass {\n declare ccCommand: BarrierOperatorCommand;\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[\"Barrier Operator\"], 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 // Create targetState value if it does not exist\n this.ensureMetadata(ctx, BarrierOperatorCCValues.targetState);\n ctx.logNode(node.id, {\n message: \"Querying signaling capabilities...\",\n direction: \"outbound\",\n });\n const resp = await api.getSignalingCapabilities();\n if (resp) {\n ctx.logNode(node.id, {\n message: `Received supported subsystem types: ${resp\n .map((t) => `\\n\u00B7 ${getEnumMemberName(SubsystemType, t)}`)\n .join(\"\")}`,\n direction: \"inbound\",\n });\n // Enable all supported subsystems\n for (const subsystemType of resp) {\n // Some devices report invalid subsystem types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(SubsystemType, subsystemType))\n continue;\n ctx.logNode(node.id, {\n message: `Enabling subsystem ${getEnumMemberName(SubsystemType, subsystemType)}...`,\n direction: \"outbound\",\n });\n await api.setEventSignaling(subsystemType, SubsystemState.On)\n .catch(noop);\n }\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[\"Barrier Operator\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n const supportedSubsystems: SubsystemType[] = this.getValue(ctx, BarrierOperatorCCValues.supportedSubsystemTypes) ?? [];\n for (const subsystemType of supportedSubsystems) {\n // Some devices report invalid subsystem types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(SubsystemType, subsystemType))\n continue;\n ctx.logNode(node.id, {\n message: `Querying event signaling state for subsystem ${getEnumMemberName(SubsystemType, subsystemType)}...`,\n direction: \"outbound\",\n });\n const state = await api.getEventSignaling(subsystemType);\n if (state != undefined) {\n ctx.logNode(node.id, {\n message: `Subsystem ${getEnumMemberName(SubsystemType, subsystemType)} has state ${getEnumMemberName(SubsystemState, state)}`,\n direction: \"inbound\",\n });\n }\n }\n ctx.logNode(node.id, {\n message: \"querying current barrier state...\",\n direction: \"outbound\",\n });\n await api.get();\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCSetOptions {\n targetState: BarrierState.Open | BarrierState.Closed;\n}\nfunction getCCResponseForBarrierOperatorCCSet(ctx: GetNode<NodeId & SupportsCC>, sent: BarrierOperatorCCSet) {\n // CC:0066.01.01.11.009: If the requested operation is prohibited by\n // the specific device class [...], the device MUST notify the requester\n // by issuing an Application Rejected Request Command\n if (sent.isSinglecast()\n && !sent.isEncapsulatedWith(CommandClasses.Supervision)\n && ctx.getNode(sent.nodeId)?.supportsCC(CommandClasses[\"Application Status\"])) {\n return ApplicationStatusCCRejectedRequest;\n }\n}\n@CCCommand(BarrierOperatorCommand.Set)\n@expectedCCResponse(getCCResponseForBarrierOperatorCCSet)\n@useSupervision()\nexport class BarrierOperatorCCSet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCSetOptions>) {\n super(options);\n this.targetState = options.targetState;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCSet {\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public targetState: BarrierState.Open | BarrierState.Closed;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.targetState]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"target state\": this.targetState },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCReportOptions {\n position: MaybeUnknown<number>;\n currentState: MaybeUnknown<BarrierState>;\n}\n@CCCommand(BarrierOperatorCommand.Report)\n@ccValueProperty(\"currentState\", BarrierOperatorCCValues.currentState)\n@ccValueProperty(\"position\", BarrierOperatorCCValues.position)\nexport class BarrierOperatorCCReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.position = options.position;\n this.currentState = options.currentState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCReport {\n validatePayload(raw.payload.length >= 1);\n // The payload byte encodes information about the state and position in a single value\n const payloadValue = raw.payload[0];\n let position: MaybeUnknown<number>;\n if (payloadValue <= 99) {\n // known position\n position = payloadValue;\n }\n else if (payloadValue === 255) {\n // known position, fully opened\n position = 100;\n }\n else {\n // unknown position\n position = UNKNOWN_STATE;\n }\n let currentState: MaybeUnknown<BarrierState>;\n if (payloadValue === BarrierState.Closed\n || payloadValue >= BarrierState.Closing) {\n // predefined states\n currentState = payloadValue;\n }\n else if (payloadValue > 0 && payloadValue <= 99) {\n // stopped at exact position\n currentState = BarrierState.Stopped;\n }\n else {\n // invalid value, assume unknown\n currentState = UNKNOWN_STATE;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n position,\n currentState,\n });\n }\n public readonly currentState: MaybeUnknown<BarrierState>;\n public readonly position: MaybeUnknown<number>;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"barrier position\": maybeUnknownToString(this.position),\n \"barrier state\": this.currentState != undefined\n ? getEnumMemberName(BarrierState, this.currentState)\n : \"unknown\",\n },\n };\n }\n}\n@CCCommand(BarrierOperatorCommand.Get)\n@expectedCCResponse(BarrierOperatorCCReport)\nexport class BarrierOperatorCCGet extends BarrierOperatorCC {\n}\n// @publicAPI\nexport interface BarrierOperatorCCSignalingCapabilitiesReportOptions {\n supportedSubsystemTypes: SubsystemType[];\n}\n@CCCommand(BarrierOperatorCommand.SignalingCapabilitiesReport)\n@ccValueProperty(\"supportedSubsystemTypes\", BarrierOperatorCCValues.supportedSubsystemTypes)\nexport class BarrierOperatorCCSignalingCapabilitiesReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCSignalingCapabilitiesReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedSubsystemTypes = options.supportedSubsystemTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCSignalingCapabilitiesReport {\n const supportedSubsystemTypes: SubsystemType[] = parseBitMask(raw.payload, SubsystemType.Audible);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedSubsystemTypes,\n });\n }\n public readonly supportedSubsystemTypes: readonly SubsystemType[];\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported types\": this.supportedSubsystemTypes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(SubsystemType, t)}`)\n .join(\"\"),\n },\n };\n }\n}\n@CCCommand(BarrierOperatorCommand.SignalingCapabilitiesGet)\n@expectedCCResponse(BarrierOperatorCCSignalingCapabilitiesReport)\nexport class BarrierOperatorCCSignalingCapabilitiesGet extends BarrierOperatorCC {\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingSetOptions {\n subsystemType: SubsystemType;\n subsystemState: SubsystemState;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingSet)\n@useSupervision()\nexport class BarrierOperatorCCEventSignalingSet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingSetOptions>) {\n super(options);\n this.subsystemType = options.subsystemType;\n this.subsystemState = options.subsystemState;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCEventSignalingSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCEventSignalingSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public subsystemType: SubsystemType;\n public subsystemState: SubsystemState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.subsystemType, this.subsystemState]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n \"subsystem state\": getEnumMemberName(SubsystemState, this.subsystemState),\n },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingReportOptions {\n subsystemType: SubsystemType;\n subsystemState: SubsystemState;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingReport)\nexport class BarrierOperatorCCEventSignalingReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.subsystemType = options.subsystemType;\n this.subsystemState = options.subsystemState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCEventSignalingReport {\n validatePayload(raw.payload.length >= 2);\n const subsystemType: SubsystemType = raw.payload[0];\n const subsystemState: SubsystemState = raw.payload[1];\n validatePayload(isEnumMember(SubsystemType, subsystemType), isEnumMember(SubsystemState, subsystemState));\n return new this({\n nodeId: ctx.sourceNodeId,\n subsystemType,\n subsystemState,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const signalingStateValue = BarrierOperatorCCValues.signalingState(this.subsystemType);\n this.ensureMetadata(ctx, signalingStateValue);\n this.setValue(ctx, signalingStateValue, this.subsystemState);\n return true;\n }\n public readonly subsystemType: SubsystemType;\n public readonly subsystemState: SubsystemState;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n \"subsystem state\": getEnumMemberName(SubsystemState, this.subsystemState),\n },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingGetOptions {\n subsystemType: SubsystemType;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingGet)\n@expectedCCResponse(BarrierOperatorCCEventSignalingReport)\nexport class BarrierOperatorCCEventSignalingGet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingGetOptions>) {\n super(options);\n this.subsystemType = options.subsystemType;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCEventSignalingGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCEventSignalingGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public subsystemType: SubsystemType;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.subsystemType]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n },\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/cjs/cc/BasicCC.js
CHANGED
|
@@ -194,7 +194,7 @@ let BasicCC = (() => {
|
|
|
194
194
|
direction: "none"
|
|
195
195
|
});
|
|
196
196
|
endpoint.addCC(import_core.CommandClasses.Basic, { isSupported: true });
|
|
197
|
-
await this.refreshValues(ctx);
|
|
197
|
+
await this.refreshValues(ctx, { tag: "interview" });
|
|
198
198
|
if (this.getValue(ctx, import_CCValues_generated.BasicCCValues.currentValue) == void 0) {
|
|
199
199
|
ctx.logNode(node.id, {
|
|
200
200
|
endpoint: this.endpointIndex,
|
|
@@ -211,7 +211,8 @@ let BasicCC = (() => {
|
|
|
211
211
|
const node = this.getNode(ctx);
|
|
212
212
|
const endpoint = this.getEndpoint(ctx);
|
|
213
213
|
const api = import_API.CCAPI.create(import_core.CommandClasses.Basic, ctx, endpoint).withOptions({
|
|
214
|
-
priority: options?.priority ?? import_core.MessagePriority.NodeQuery
|
|
214
|
+
priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
|
|
215
|
+
tag: options?.tag
|
|
215
216
|
});
|
|
216
217
|
ctx.logNode(node.id, {
|
|
217
218
|
endpoint: this.endpointIndex,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/BasicCC.ts"],
|
|
4
|
-
"sourcesContent": ["import * as __validateArgs from \"./BasicCC._validateArgs.js\";\nconst { validateArgs_BasicCCAPI_set } = __validateArgs;\nimport type { GetDeviceConfig } from \"@zwave-js/config\";\nimport { CommandClasses, type ControlsCC, Duration, type EndpointId, type GetEndpoint, type GetNode, type GetSupportedCCVersion, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type NodeId, type SupervisionResult, type SupportsCC, type ValueID, ValueMetadata, type WithAddress, maybeUnknownToString, parseMaybeNumber, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, getEffectiveCCVersion, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { BasicCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { BasicCCValues } from \"./_CCValues.generated.js\";\nexport { BasicCCValues };\n@API(CommandClasses.Basic)\nexport class BasicCCAPI extends CCAPI {\n public supportsCommand(cmd: BasicCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case BasicCommand.Get:\n return this.isSinglecast();\n case BasicCommand.Set:\n return true;\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: BasicCCAPI, { property }, value) {\n // Enable restoring the previous non-zero value\n if (property === \"restorePrevious\") {\n property = \"targetValue\";\n value = 255;\n }\n if (property !== \"targetValue\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.set(value);\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property }, value, _options) => {\n // Enable restoring the previous non-zero value\n if (property === \"restorePrevious\") {\n property = \"targetValue\";\n value = 255;\n }\n if (property === \"targetValue\") {\n const currentValueValueId = BasicCCValues.currentValue.endpoint(this.endpoint.index);\n return {\n // This is the target value for a split target/current state pair.\n isSplitStateTargetValue: true,\n optimisticallyUpdateRelatedValues: (_supervisedAndSuccessful) => {\n // Only update currentValue for valid target values\n if (typeof value === \"number\"\n && value >= 0\n && value <= 99) {\n if (this.isSinglecast()) {\n this.tryGetValueDB()?.setValue(currentValueValueId, value);\n }\n else if (this.isMulticast()) {\n // Figure out which nodes were affected by this command\n const affectedNodes = this.endpoint.node\n .physicalNodes.filter((node) => node\n .getEndpoint(this.endpoint.index)\n ?.supportsCC(this.ccId));\n // and optimistically update the currentValue\n for (const node of affectedNodes) {\n this.host\n .tryGetValueDB(node.id)\n ?.setValue(currentValueValueId, value);\n }\n }\n }\n },\n forceVerifyChanges: () => {\n // If we don't know the actual value, we need to verify the change, regardless of the supervision result\n return value === 255;\n },\n verifyChanges: () => {\n if (this.isSinglecast()\n // We generally don't want to poll for multicasts because of how much traffic it can cause\n // However, when setting the value 255 (ON), we don't know the actual state\n || (this.isMulticast() && value === 255)) {\n // We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n (this as this).schedulePoll(currentValueValueId, value === 255 ? undefined : value);\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: BasicCCAPI, { property }) {\n switch (property) {\n case \"currentValue\":\n case \"targetValue\":\n case \"duration\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(BasicCommand, BasicCommand.Get);\n const cc = new BasicCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BasicCCReport>(cc, this.commandOptions);\n if (response) {\n this.tryGetValueDB()?.setValue(BasicCCValues.currentValue.endpoint(this.endpoint.index), response.currentValue);\n return pick(response, [\"currentValue\", \"targetValue\", \"duration\"]);\n }\n }\n @validateArgs_BasicCCAPI_set()\n public async set(targetValue: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BasicCommand, BasicCommand.Set);\n const cc = new BasicCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n targetValue,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses.Basic)\n@implementedVersion(2) // Update tests in CommandClass.test.ts when changing this\n@ccValues(BasicCCValues)\nexport class BasicCC extends CommandClass {\n declare ccCommand: BasicCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // Assume that the endpoint supports Basic CC, so the values get persisted correctly.\n endpoint.addCC(CommandClasses.Basic, { isSupported: true });\n // try to query the current state\n await this.refreshValues(ctx);\n // Remove Basic CC support again when there was no response\n if (this.getValue(ctx, BasicCCValues.currentValue) == undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"No response to Basic Get command, assuming Basic CC is unsupported...\",\n });\n // SDS14223: A controlling node MUST conclude that the Basic Command Class is not supported by a node (or\n // endpoint) if no Basic Report is returned.\n endpoint.addCC(CommandClasses.Basic, { isSupported: false });\n if (!endpoint.controlsCC(CommandClasses.Basic)) {\n endpoint.removeCC(CommandClasses.Basic);\n }\n }\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Basic, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n // try to query the current state\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying Basic CC state...\",\n direction: \"outbound\",\n });\n const basicResponse = await api.get();\n if (basicResponse) {\n let logMessage = `received Basic CC state:\ncurrent value: ${basicResponse.currentValue}`;\n if (basicResponse.targetValue != undefined) {\n logMessage += `\ntarget value: ${basicResponse.targetValue}\nremaining duration: ${basicResponse.duration?.toString() ?? \"undefined\"}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n public override getDefinedValueIDs(ctx: GetValueDB & GetSupportedCCVersion & GetDeviceConfig & GetNode<NodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>>): ValueID[] {\n const ret: ValueID[] = [];\n const endpoint = this.getEndpoint(ctx)!;\n const compat = ctx.getDeviceConfig?.(endpoint.nodeId)?.compat;\n if (compat?.mapBasicSet === \"event\") {\n // Add the compat event value if it should be exposed\n ret.push(BasicCCValues.compatEvent.endpoint(endpoint.index));\n }\n if (endpoint.supportsCC(this.ccId)) {\n // Defer to the base implementation if Basic CC is supported.\n // This implies that no other actuator CC is supported.\n ret.push(...super.getDefinedValueIDs(ctx));\n }\n else if (endpoint.controlsCC(CommandClasses.Basic)) {\n // During the interview, we mark Basic CC as controlled only if we want to expose currentValue\n ret.push(BasicCCValues.currentValue.endpoint(endpoint.index));\n }\n return ret;\n }\n}\n// @publicAPI\nexport interface BasicCCSetOptions {\n targetValue: number;\n}\n@CCCommand(BasicCommand.Set)\n@useSupervision()\nexport class BasicCCSet extends BasicCC {\n public constructor(options: WithAddress<BasicCCSetOptions>) {\n super(options);\n this.targetValue = options.targetValue;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BasicCCSet {\n validatePayload(raw.payload.length >= 1);\n const targetValue = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n targetValue,\n });\n }\n public targetValue: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.targetValue]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"target value\": this.targetValue },\n };\n }\n}\n// @publicAPI\nexport interface BasicCCReportOptions {\n currentValue?: MaybeUnknown<number>;\n targetValue?: MaybeUnknown<number>;\n duration?: Duration;\n}\n@CCCommand(BasicCommand.Report)\n@ccValueProperty(\"currentValue\", BasicCCValues.currentValue)\n@ccValueProperty(\"targetValue\", BasicCCValues.targetValue)\n@ccValueProperty(\"duration\", BasicCCValues.duration)\nexport class BasicCCReport extends BasicCC {\n // @noCCValues See comment in the constructor\n public constructor(options: WithAddress<BasicCCReportOptions>) {\n super(options);\n this.currentValue = options.currentValue;\n this.targetValue = options.targetValue;\n this.duration = options.duration;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BasicCCReport {\n validatePayload(raw.payload.length >= 1);\n const currentValue: MaybeUnknown<number> | undefined = \n // 0xff is a legacy value for 100% (99)\n raw.payload[0] === 0xff\n ? 99\n : parseMaybeNumber(raw.payload[0]);\n validatePayload(currentValue !== undefined);\n let targetValue: MaybeUnknown<number> | undefined;\n let duration: Duration | undefined;\n if (raw.payload.length >= 3) {\n targetValue = parseMaybeNumber(raw.payload[1]);\n duration = Duration.parseReport(raw.payload[2]);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n currentValue,\n targetValue,\n duration,\n });\n }\n public currentValue: MaybeUnknown<number> | undefined;\n public readonly targetValue: MaybeUnknown<number> | undefined;\n public readonly duration: Duration | undefined;\n public persistValues(ctx: PersistValuesContext): boolean {\n // Basic CC Report persists its values itself, since there are some\n // specific rules when which value may be persisted.\n // These rules are essentially encoded in the getDefinedValueIDs overload,\n // so we simply reuse that here.\n // Figure out which values may be persisted.\n const definedValueIDs = this.getDefinedValueIDs(ctx);\n const shouldPersistCurrentValue = definedValueIDs.some((vid) => BasicCCValues.currentValue.is(vid));\n const shouldPersistTargetValue = definedValueIDs.some((vid) => BasicCCValues.targetValue.is(vid));\n const shouldPersistDuration = definedValueIDs.some((vid) => BasicCCValues.duration.is(vid));\n if (this.currentValue !== undefined && shouldPersistCurrentValue) {\n this.setValue(ctx, BasicCCValues.currentValue, this.currentValue);\n }\n if (this.targetValue !== undefined && shouldPersistTargetValue) {\n this.setValue(ctx, BasicCCValues.targetValue, this.targetValue);\n }\n if (this.duration !== undefined && shouldPersistDuration) {\n this.setValue(ctx, BasicCCValues.duration, this.duration);\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.currentValue ?? 0xfe,\n this.targetValue ?? 0xfe,\n (this.duration ?? Duration.unknown()).serializeReport(),\n ]);\n const ccVersion = getEffectiveCCVersion(ctx, this);\n if (ccVersion < 2 && ctx.getDeviceConfig?.(this.nodeId as number)?.compat?.encodeCCsUsingTargetVersion) {\n // When forcing CC version 1, only send the current value\n this.payload = this.payload.subarray(0, 1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"current value\": maybeUnknownToString(this.currentValue),\n };\n if (this.targetValue !== undefined) {\n message[\"target value\"] = maybeUnknownToString(this.targetValue);\n }\n if (this.duration != undefined) {\n message.duration = this.duration.toString();\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(BasicCommand.Get)\n@expectedCCResponse(BasicCCReport)\nexport class BasicCCGet extends BasicCC {\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import * as __validateArgs from \"./BasicCC._validateArgs.js\";\nconst { validateArgs_BasicCCAPI_set } = __validateArgs;\nimport type { GetDeviceConfig } from \"@zwave-js/config\";\nimport { CommandClasses, type ControlsCC, Duration, type EndpointId, type GetEndpoint, type GetNode, type GetSupportedCCVersion, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type NodeId, type SupervisionResult, type SupportsCC, type ValueID, ValueMetadata, type WithAddress, maybeUnknownToString, parseMaybeNumber, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, getEffectiveCCVersion, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { BasicCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { BasicCCValues } from \"./_CCValues.generated.js\";\nexport { BasicCCValues };\n@API(CommandClasses.Basic)\nexport class BasicCCAPI extends CCAPI {\n public supportsCommand(cmd: BasicCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case BasicCommand.Get:\n return this.isSinglecast();\n case BasicCommand.Set:\n return true;\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: BasicCCAPI, { property }, value) {\n // Enable restoring the previous non-zero value\n if (property === \"restorePrevious\") {\n property = \"targetValue\";\n value = 255;\n }\n if (property !== \"targetValue\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.set(value);\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property }, value, _options) => {\n // Enable restoring the previous non-zero value\n if (property === \"restorePrevious\") {\n property = \"targetValue\";\n value = 255;\n }\n if (property === \"targetValue\") {\n const currentValueValueId = BasicCCValues.currentValue.endpoint(this.endpoint.index);\n return {\n // This is the target value for a split target/current state pair.\n isSplitStateTargetValue: true,\n optimisticallyUpdateRelatedValues: (_supervisedAndSuccessful) => {\n // Only update currentValue for valid target values\n if (typeof value === \"number\"\n && value >= 0\n && value <= 99) {\n if (this.isSinglecast()) {\n this.tryGetValueDB()?.setValue(currentValueValueId, value);\n }\n else if (this.isMulticast()) {\n // Figure out which nodes were affected by this command\n const affectedNodes = this.endpoint.node\n .physicalNodes.filter((node) => node\n .getEndpoint(this.endpoint.index)\n ?.supportsCC(this.ccId));\n // and optimistically update the currentValue\n for (const node of affectedNodes) {\n this.host\n .tryGetValueDB(node.id)\n ?.setValue(currentValueValueId, value);\n }\n }\n }\n },\n forceVerifyChanges: () => {\n // If we don't know the actual value, we need to verify the change, regardless of the supervision result\n return value === 255;\n },\n verifyChanges: () => {\n if (this.isSinglecast()\n // We generally don't want to poll for multicasts because of how much traffic it can cause\n // However, when setting the value 255 (ON), we don't know the actual state\n || (this.isMulticast() && value === 255)) {\n // We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n (this as this).schedulePoll(currentValueValueId, value === 255 ? undefined : value);\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: BasicCCAPI, { property }) {\n switch (property) {\n case \"currentValue\":\n case \"targetValue\":\n case \"duration\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(BasicCommand, BasicCommand.Get);\n const cc = new BasicCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BasicCCReport>(cc, this.commandOptions);\n if (response) {\n this.tryGetValueDB()?.setValue(BasicCCValues.currentValue.endpoint(this.endpoint.index), response.currentValue);\n return pick(response, [\"currentValue\", \"targetValue\", \"duration\"]);\n }\n }\n @validateArgs_BasicCCAPI_set()\n public async set(targetValue: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BasicCommand, BasicCommand.Set);\n const cc = new BasicCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n targetValue,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses.Basic)\n@implementedVersion(2) // Update tests in CommandClass.test.ts when changing this\n@ccValues(BasicCCValues)\nexport class BasicCC extends CommandClass {\n declare ccCommand: BasicCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // Assume that the endpoint supports Basic CC, so the values get persisted correctly.\n endpoint.addCC(CommandClasses.Basic, { isSupported: true });\n // try to query the current state\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remove Basic CC support again when there was no response\n if (this.getValue(ctx, BasicCCValues.currentValue) == undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"No response to Basic Get command, assuming Basic CC is unsupported...\",\n });\n // SDS14223: A controlling node MUST conclude that the Basic Command Class is not supported by a node (or\n // endpoint) if no Basic Report is returned.\n endpoint.addCC(CommandClasses.Basic, { isSupported: false });\n if (!endpoint.controlsCC(CommandClasses.Basic)) {\n endpoint.removeCC(CommandClasses.Basic);\n }\n }\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Basic, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // try to query the current state\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying Basic CC state...\",\n direction: \"outbound\",\n });\n const basicResponse = await api.get();\n if (basicResponse) {\n let logMessage = `received Basic CC state:\ncurrent value: ${basicResponse.currentValue}`;\n if (basicResponse.targetValue != undefined) {\n logMessage += `\ntarget value: ${basicResponse.targetValue}\nremaining duration: ${basicResponse.duration?.toString() ?? \"undefined\"}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n public override getDefinedValueIDs(ctx: GetValueDB & GetSupportedCCVersion & GetDeviceConfig & GetNode<NodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>>): ValueID[] {\n const ret: ValueID[] = [];\n const endpoint = this.getEndpoint(ctx)!;\n const compat = ctx.getDeviceConfig?.(endpoint.nodeId)?.compat;\n if (compat?.mapBasicSet === \"event\") {\n // Add the compat event value if it should be exposed\n ret.push(BasicCCValues.compatEvent.endpoint(endpoint.index));\n }\n if (endpoint.supportsCC(this.ccId)) {\n // Defer to the base implementation if Basic CC is supported.\n // This implies that no other actuator CC is supported.\n ret.push(...super.getDefinedValueIDs(ctx));\n }\n else if (endpoint.controlsCC(CommandClasses.Basic)) {\n // During the interview, we mark Basic CC as controlled only if we want to expose currentValue\n ret.push(BasicCCValues.currentValue.endpoint(endpoint.index));\n }\n return ret;\n }\n}\n// @publicAPI\nexport interface BasicCCSetOptions {\n targetValue: number;\n}\n@CCCommand(BasicCommand.Set)\n@useSupervision()\nexport class BasicCCSet extends BasicCC {\n public constructor(options: WithAddress<BasicCCSetOptions>) {\n super(options);\n this.targetValue = options.targetValue;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BasicCCSet {\n validatePayload(raw.payload.length >= 1);\n const targetValue = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n targetValue,\n });\n }\n public targetValue: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.targetValue]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"target value\": this.targetValue },\n };\n }\n}\n// @publicAPI\nexport interface BasicCCReportOptions {\n currentValue?: MaybeUnknown<number>;\n targetValue?: MaybeUnknown<number>;\n duration?: Duration;\n}\n@CCCommand(BasicCommand.Report)\n@ccValueProperty(\"currentValue\", BasicCCValues.currentValue)\n@ccValueProperty(\"targetValue\", BasicCCValues.targetValue)\n@ccValueProperty(\"duration\", BasicCCValues.duration)\nexport class BasicCCReport extends BasicCC {\n // @noCCValues See comment in the constructor\n public constructor(options: WithAddress<BasicCCReportOptions>) {\n super(options);\n this.currentValue = options.currentValue;\n this.targetValue = options.targetValue;\n this.duration = options.duration;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BasicCCReport {\n validatePayload(raw.payload.length >= 1);\n const currentValue: MaybeUnknown<number> | undefined = \n // 0xff is a legacy value for 100% (99)\n raw.payload[0] === 0xff\n ? 99\n : parseMaybeNumber(raw.payload[0]);\n validatePayload(currentValue !== undefined);\n let targetValue: MaybeUnknown<number> | undefined;\n let duration: Duration | undefined;\n if (raw.payload.length >= 3) {\n targetValue = parseMaybeNumber(raw.payload[1]);\n duration = Duration.parseReport(raw.payload[2]);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n currentValue,\n targetValue,\n duration,\n });\n }\n public currentValue: MaybeUnknown<number> | undefined;\n public readonly targetValue: MaybeUnknown<number> | undefined;\n public readonly duration: Duration | undefined;\n public persistValues(ctx: PersistValuesContext): boolean {\n // Basic CC Report persists its values itself, since there are some\n // specific rules when which value may be persisted.\n // These rules are essentially encoded in the getDefinedValueIDs overload,\n // so we simply reuse that here.\n // Figure out which values may be persisted.\n const definedValueIDs = this.getDefinedValueIDs(ctx);\n const shouldPersistCurrentValue = definedValueIDs.some((vid) => BasicCCValues.currentValue.is(vid));\n const shouldPersistTargetValue = definedValueIDs.some((vid) => BasicCCValues.targetValue.is(vid));\n const shouldPersistDuration = definedValueIDs.some((vid) => BasicCCValues.duration.is(vid));\n if (this.currentValue !== undefined && shouldPersistCurrentValue) {\n this.setValue(ctx, BasicCCValues.currentValue, this.currentValue);\n }\n if (this.targetValue !== undefined && shouldPersistTargetValue) {\n this.setValue(ctx, BasicCCValues.targetValue, this.targetValue);\n }\n if (this.duration !== undefined && shouldPersistDuration) {\n this.setValue(ctx, BasicCCValues.duration, this.duration);\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.currentValue ?? 0xfe,\n this.targetValue ?? 0xfe,\n (this.duration ?? Duration.unknown()).serializeReport(),\n ]);\n const ccVersion = getEffectiveCCVersion(ctx, this);\n if (ccVersion < 2 && ctx.getDeviceConfig?.(this.nodeId as number)?.compat?.encodeCCsUsingTargetVersion) {\n // When forcing CC version 1, only send the current value\n this.payload = this.payload.subarray(0, 1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"current value\": maybeUnknownToString(this.currentValue),\n };\n if (this.targetValue !== undefined) {\n message[\"target value\"] = maybeUnknownToString(this.targetValue);\n }\n if (this.duration != undefined) {\n message.duration = this.duration.toString();\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(BasicCommand.Get)\n@expectedCCResponse(BasicCCReport)\nexport class BasicCCGet extends BasicCC {\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -152,14 +152,15 @@ let BatteryCC = (() => {
|
|
|
152
152
|
message: `Interviewing ${this.ccName}...`,
|
|
153
153
|
direction: "none"
|
|
154
154
|
});
|
|
155
|
-
await this.refreshValues(ctx);
|
|
155
|
+
await this.refreshValues(ctx, { tag: "interview" });
|
|
156
156
|
this.setInterviewComplete(ctx, true);
|
|
157
157
|
}
|
|
158
158
|
async refreshValues(ctx, options) {
|
|
159
159
|
const node = this.getNode(ctx);
|
|
160
160
|
const endpoint = this.getEndpoint(ctx);
|
|
161
161
|
const api = import_API.CCAPI.create(import_core.CommandClasses.Battery, ctx, endpoint).withOptions({
|
|
162
|
-
priority: options?.priority ?? import_core.MessagePriority.NodeQuery
|
|
162
|
+
priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
|
|
163
|
+
tag: options?.tag
|
|
163
164
|
});
|
|
164
165
|
ctx.logNode(node.id, {
|
|
165
166
|
endpoint: this.endpointIndex,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/BatteryCC.ts"],
|
|
4
|
-
"sourcesContent": ["import type { GetDeviceConfig } from \"@zwave-js/config\";\nimport { CommandClasses, type ControlsCC, type EndpointId, type GetEndpoint, type GetNode, type GetSupportedCCVersion, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type NodeId, type SinglecastCC, type SupportsCC, ValueMetadata, type WithAddress, encodeFloatWithScale, enumValuesToMetadataStates, parseFloatWithScale, timespan, validatePayload, } from \"@zwave-js/core\";\nimport { type AllOrNone, Bytes, getEnumMemberName, pick, } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, throwUnsupportedProperty, } 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, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { BatteryChargingStatus, BatteryCommand, BatteryReplacementStatus, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { NotificationCCValues } from \"./NotificationCC.js\";\nimport { BatteryCCValues } from \"./_CCValues.generated.js\";\nexport { BatteryCCValues };\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses.Battery)\nexport class BatteryCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: BatteryCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case BatteryCommand.Get:\n return true; // This is mandatory\n case BatteryCommand.HealthGet:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: BatteryCCAPI, { property }) {\n switch (property) {\n case \"level\":\n case \"chargingStatus\":\n case \"rechargeable\":\n case \"backup\":\n case \"overheating\":\n case \"lowFluid\":\n case \"rechargeOrReplace\":\n case \"lowTemperatureStatus\":\n case \"disconnected\":\n return (await this.get())?.[property];\n case \"maximumCapacity\":\n case \"temperature\":\n return (await this.getHealth())?.[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(BatteryCommand, BatteryCommand.Get);\n const cc = new BatteryCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BatteryCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"level\",\n \"chargingStatus\",\n \"rechargeable\",\n \"backup\",\n \"overheating\",\n \"lowFluid\",\n \"rechargeOrReplace\",\n \"lowTemperatureStatus\",\n \"disconnected\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getHealth() {\n this.assertSupportsCommand(BatteryCommand, BatteryCommand.HealthGet);\n const cc = new BatteryCCHealthGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BatteryCCHealthReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"maximumCapacity\", \"temperature\"]);\n }\n }\n}\n@commandClass(CommandClasses.Battery)\n@implementedVersion(3)\n@ccValues(BatteryCCValues)\nexport class BatteryCC extends CommandClass {\n declare ccCommand: BatteryCommand;\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 // Query the Battery status\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.Battery, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying battery status...\",\n direction: \"outbound\",\n });\n const batteryStatus = await api.get();\n if (batteryStatus) {\n let logMessage = \"received response for battery information:\";\n if (batteryStatus.disconnected) {\n logMessage += `\nis disconnected: true`;\n }\n else {\n logMessage += `\nlevel: ${batteryStatus.level === 0xff\n ? \"low\"\n : (batteryStatus.level + \" %\")}`;\n }\n if (api.version >= 2) {\n if (!batteryStatus.disconnected) {\n logMessage += `\nstatus: ${BatteryChargingStatus[batteryStatus.chargingStatus!]}`;\n }\n logMessage += `\nrechargeable: ${batteryStatus.rechargeable}\nis backup: ${batteryStatus.backup}\nis overheating: ${batteryStatus.overheating}\nfluid is low: ${batteryStatus.lowFluid}\nneeds to be replaced or charged: ${BatteryReplacementStatus[batteryStatus.rechargeOrReplace!]}\nis low temperature ${batteryStatus.lowTemperatureStatus}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n if (api.version >= 2) {\n // always query the health\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying battery health...\",\n direction: \"outbound\",\n });\n const batteryHealth = await api.getHealth();\n if (batteryHealth) {\n const logMessage = `received response for battery health:\nmax. capacity: ${batteryHealth.maximumCapacity} %\ntemperature: ${batteryHealth.temperature} \u00B0C`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n }\n public shouldRefreshValues(this: SinglecastCC<this>, ctx: GetValueDB & GetSupportedCCVersion & GetDeviceConfig & GetNode<NodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>>): boolean {\n // Check when the battery state was last updated\n const valueDB = ctx.tryGetValueDB(this.nodeId);\n if (!valueDB)\n return true;\n const lastUpdated = valueDB.getTimestamp(BatteryCCValues.level.endpoint(this.endpointIndex));\n return (lastUpdated == undefined\n // The specs say once per month, but that's a bit too unfrequent IMO\n // Also the maximum that setInterval supports is ~24.85 days\n || Date.now() - lastUpdated > timespan.days(7));\n }\n}\n// @publicAPI\nexport type BatteryCCReportOptions = {\n level: number | \"low\";\n} & AllOrNone<{\n // V2+\n chargingStatus: BatteryChargingStatus;\n rechargeable: boolean;\n backup: boolean;\n overheating: boolean;\n lowFluid: boolean;\n rechargeOrReplace: BatteryReplacementStatus;\n disconnected: boolean;\n}> & AllOrNone<{\n // V3+\n lowTemperatureStatus: boolean;\n}>;\n@CCCommand(BatteryCommand.Report)\n@ccValueProperty(\"level\", BatteryCCValues.level)\n@ccValueProperty(\"chargingStatus\", BatteryCCValues.chargingStatus)\n@ccValueProperty(\"rechargeable\", BatteryCCValues.rechargeable)\n@ccValueProperty(\"backup\", BatteryCCValues.backup)\n@ccValueProperty(\"overheating\", BatteryCCValues.overheating)\n@ccValueProperty(\"lowFluid\", BatteryCCValues.lowFluid)\n@ccValueProperty(\"rechargeOrReplace\", BatteryCCValues.rechargeOrReplace)\n@ccValueProperty(\"disconnected\", BatteryCCValues.disconnected)\n@ccValueProperty(\"lowTemperatureStatus\", BatteryCCValues.lowTemperatureStatus)\nexport class BatteryCCReport extends BatteryCC {\n public constructor(options: WithAddress<BatteryCCReportOptions>) {\n super(options);\n this.level = typeof options.level === \"number\" ? options.level : 0xff;\n this.chargingStatus = options.chargingStatus;\n this.rechargeable = options.rechargeable;\n this.backup = options.backup;\n this.overheating = options.overheating;\n this.lowFluid = options.lowFluid;\n this.rechargeOrReplace = options.rechargeOrReplace;\n this.disconnected = options.disconnected;\n this.lowTemperatureStatus = options.lowTemperatureStatus;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BatteryCCReport {\n let ccOptions: BatteryCCReportOptions;\n validatePayload(raw.payload.length >= 1);\n const level = raw.payload[0];\n validatePayload.withReason(`Invalid battery level ${level}`)(\n // This field MUST be in the range 0x00..0x64 or set to 0xFF\n level <= 100 || level === 0xff);\n ccOptions = {\n level,\n };\n if (raw.payload.length >= 3) {\n // Starting with V2\n const chargingStatus: BatteryChargingStatus = raw.payload[1] >>> 6;\n const rechargeable = !!(raw.payload[1] & 32);\n const backup = !!(raw.payload[1] & 16);\n const overheating = !!(raw.payload[1] & 0b1000);\n const lowFluid = !!(raw.payload[1] & 0b0100);\n const rechargeOrReplace: BatteryReplacementStatus = !!(raw.payload[1] & 0b10)\n ? BatteryReplacementStatus.Now\n : !!(raw.payload[1] & 0b1)\n ? BatteryReplacementStatus.Soon\n : BatteryReplacementStatus.No;\n const lowTemperatureStatus = !!(raw.payload[2] & 0b10);\n const disconnected = !!(raw.payload[2] & 0b1);\n ccOptions = {\n ...ccOptions,\n chargingStatus,\n rechargeable,\n backup,\n overheating,\n lowFluid,\n rechargeOrReplace,\n lowTemperatureStatus,\n disconnected,\n };\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n ...ccOptions,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n // Setting the values to undefined is a bit hacky, but we need to avoid persisting\n // them in these special cases, and I don't like copy-pasting what persistValues does.\n if (this.disconnected) {\n // Level and chargingStatus are meaningless when disconnected.\n // Suppress persisting them, then remove any previously stored values.\n const savedLevel = this.level;\n const savedChargingStatus = this.chargingStatus;\n // @ts-expect-error\n this.level = undefined;\n // @ts-expect-error\n this.chargingStatus = undefined;\n const ret = super.persistValues(ctx);\n // Add the values back to the CC instance, so they can be evaluated downstream if needed\n // @ts-expect-error\n this.level = savedLevel;\n // @ts-expect-error\n this.chargingStatus = savedChargingStatus;\n this.removeValue(ctx, BatteryCCValues.level);\n this.removeValue(ctx, BatteryCCValues.chargingStatus);\n return ret;\n }\n else if (this.level === 0xff) {\n // 0xff is a \"low battery\" notification, not an actual level\n // @ts-expect-error\n this.level = undefined;\n const ret = super.persistValues(ctx);\n // Add the value back to the CC instance, so it can be evaluated downstream if needed\n // @ts-expect-error\n this.level = 0xff;\n return ret;\n }\n // Default behavior for all other cases\n if (!super.persistValues(ctx))\n return false;\n // Na\u00EFve heuristic for a full battery\n if (this.level >= 90) {\n // Some devices send Notification CC Reports with battery information,\n // or this information is mapped from legacy V1 alarm values.\n // We may need to idle the corresponding values when the battery is full\n const notificationCCVersion = ctx.getSupportedCCVersion(CommandClasses.Notification, this.nodeId as number, this.endpointIndex);\n if (\n // supported\n notificationCCVersion > 0\n // but idling is not required\n && notificationCCVersion < 8) {\n const batteryLevelStatusValue = NotificationCCValues\n .notificationVariable(\"Power Management\", \"Battery level status\");\n // If not undefined and not idle\n if (this.getValue(ctx, batteryLevelStatusValue)) {\n this.setValue(ctx, batteryLevelStatusValue, 0);\n }\n }\n }\n return true;\n }\n public readonly level: number;\n public readonly chargingStatus: BatteryChargingStatus | undefined;\n public readonly rechargeable: boolean | undefined;\n public readonly backup: boolean | undefined;\n public readonly overheating: boolean | undefined;\n public readonly lowFluid: boolean | undefined;\n public readonly rechargeOrReplace: BatteryReplacementStatus | undefined;\n public readonly disconnected: boolean | undefined;\n public readonly lowTemperatureStatus: boolean | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.disconnected\n // CC:0080.02.03.11.010\n // If this field is set to 1, the Battery Level field MUST\n // be set to 0x00.\n ? 0\n : this.level,\n ]);\n if (this.chargingStatus != undefined) {\n this.payload = Bytes.concat([\n this.payload,\n [\n (this.chargingStatus << 6)\n + (this.rechargeable ? 32 : 0)\n + (this.backup ? 16 : 0)\n + (this.overheating ? 0b1000 : 0)\n + (this.lowFluid ? 0b0100 : 0)\n + (this.rechargeOrReplace === BatteryReplacementStatus.Now\n ? 0b10\n : this.rechargeOrReplace\n === BatteryReplacementStatus.Soon\n ? 0b1\n : 0),\n (this.lowTemperatureStatus ? 0b10 : 0)\n + (this.disconnected ? 0b1 : 0),\n ],\n ]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.disconnected) {\n message.disconnected = true;\n }\n else if (this.level === 0xff) {\n message[\"is low\"] = true;\n }\n else {\n message.level = this.level;\n }\n if (!this.disconnected && this.chargingStatus != undefined) {\n message[\"charging status\"] = getEnumMemberName(BatteryChargingStatus, this.chargingStatus);\n }\n if (this.rechargeable != undefined) {\n message.rechargeable = this.rechargeable;\n }\n if (this.backup != undefined) {\n message.backup = this.backup;\n }\n if (this.overheating != undefined) {\n message.overheating = this.overheating;\n }\n if (this.lowFluid != undefined) {\n message[\"low fluid\"] = this.lowFluid;\n }\n if (this.rechargeOrReplace != undefined) {\n message[\"recharge or replace\"] = getEnumMemberName(BatteryReplacementStatus, this.rechargeOrReplace);\n }\n if (this.lowTemperatureStatus != undefined) {\n message.lowTemperatureStatus = this.lowTemperatureStatus;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(BatteryCommand.Get)\n@expectedCCResponse(BatteryCCReport)\nexport class BatteryCCGet extends BatteryCC {\n}\n// @publicAPI\nexport interface BatteryCCHealthReportOptions {\n maximumCapacity?: number;\n temperature?: number;\n temperatureScale?: number;\n}\n@CCCommand(BatteryCommand.HealthReport)\n@ccValueProperty(\"maximumCapacity\", BatteryCCValues.maximumCapacity)\n@ccValueProperty(\"temperature\", BatteryCCValues.temperature)\nexport class BatteryCCHealthReport extends BatteryCC {\n public constructor(options: WithAddress<BatteryCCHealthReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.maximumCapacity = options.maximumCapacity;\n this.temperature = options.temperature;\n this.temperatureScale = options.temperatureScale;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BatteryCCHealthReport {\n validatePayload(raw.payload.length >= 2);\n // Parse maximum capacity. 0xff means unknown\n let maximumCapacity: number | undefined = raw.payload[0];\n if (maximumCapacity === 0xff)\n maximumCapacity = undefined;\n const { value: temperature, scale: temperatureScale, } = parseFloatWithScale(raw.payload.subarray(1), true);\n return new this({\n nodeId: ctx.sourceNodeId,\n maximumCapacity,\n temperature,\n temperatureScale,\n });\n }\n public readonly maximumCapacity: number | undefined;\n public readonly temperature: number | undefined;\n private readonly temperatureScale: number | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const temperature = this.temperature != undefined\n ? encodeFloatWithScale(this.temperature, this.temperatureScale ?? 0x00)\n // size, precision and scale must be 0 if the temperature is omitted\n : Bytes.from([0x00]);\n this.payload = Bytes.concat([\n [this.maximumCapacity ?? 0xff],\n temperature,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n temperature: this.temperature != undefined\n ? this.temperature\n : \"unknown\",\n \"max capacity\": this.maximumCapacity != undefined\n ? `${this.maximumCapacity} %`\n : \"unknown\",\n },\n };\n }\n}\n@CCCommand(BatteryCommand.HealthGet)\n@expectedCCResponse(BatteryCCHealthReport)\nexport class BatteryCCHealthGet extends BatteryCC {\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kBAAsZ;AACtZ,oBAAgE;AAChE,iBAA0G;AAC1G,0BAAkJ;AAClJ,oCAAiH;AAEjH,mBAAiF;AAEjF,4BAAqC;AACrC,gCAAgC;IAInB,gBAAY,MAAA;8BADxB,mCAAI,2BAAe,OAAO,CAAC;;;;oBACM;oCAAA,YAAa;WAAA;;;;;;;;AAA/C,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,KAAmB;AACtC,cAAQ,KAAK;QACT,KAAK,4BAAe;AAChB,iBAAO;;QACX,KAAK,4BAAe;AAChB,iBAAO,KAAK,WAAW;MAC/B;AACA,aAAO,MAAM,gBAAgB,GAAG;IACpC;IACA,KAAe,qBAAU,IAAC;AACtB,aAAO,eAAoC,EAAE,SAAQ,GAAE;AACnD,gBAAQ,UAAU;UACd,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;AACD,oBAAQ,MAAM,KAAK,IAAG,KAAM,QAAQ;UACxC,KAAK;UACL,KAAK;AACD,oBAAQ,MAAM,KAAK,UAAS,KAAM,QAAQ;UAC9C;AACI,qDAAyB,KAAK,MAAM,QAAQ;QACpD;MACJ;IACJ;;IAEO,MAAM,MAAG;AACZ,WAAK,sBAAsB,6BAAgB,4BAAe,GAAG;AAC7D,YAAM,KAAK,IAAI,aAAa;QACxB,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;OAChC;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAA6B,IAAI,KAAK,cAAc;AACrF,UAAI,UAAU;AACV,mBAAO,oBAAK,UAAU;UAClB;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;SACH;MACL;IACJ;;IAEO,MAAM,YAAS;AAClB,WAAK,sBAAsB,6BAAgB,4BAAe,SAAS;AACnE,YAAM,KAAK,IAAI,mBAAmB;QAC9B,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;OAChC;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAAmC,IAAI,KAAK,cAAc;AAC3F,UAAI,UAAU;AACV,mBAAO,oBAAK,UAAU,CAAC,mBAAmB,aAAa,CAAC;MAC5D;IACJ;;;;IAKS,aAAS,MAAA;8BAHrB,4CAAa,2BAAe,OAAO,OACnC,kDAAmB,CAAC,OACpB,wCAAS,yCAAe,CAAC;;;;oBACK;iCAAA,YAAY;WAAA;;;;;;;;AAA3C,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;AAED,YAAM,KAAK,cAAc,
|
|
4
|
+
"sourcesContent": ["import type { GetDeviceConfig } from \"@zwave-js/config\";\nimport { CommandClasses, type ControlsCC, type EndpointId, type GetEndpoint, type GetNode, type GetSupportedCCVersion, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type NodeId, type SinglecastCC, type SupportsCC, ValueMetadata, type WithAddress, encodeFloatWithScale, enumValuesToMetadataStates, parseFloatWithScale, timespan, validatePayload, } from \"@zwave-js/core\";\nimport { type AllOrNone, Bytes, getEnumMemberName, pick, } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, throwUnsupportedProperty, } 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, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { BatteryChargingStatus, BatteryCommand, BatteryReplacementStatus, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { NotificationCCValues } from \"./NotificationCC.js\";\nimport { BatteryCCValues } from \"./_CCValues.generated.js\";\nexport { BatteryCCValues };\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses.Battery)\nexport class BatteryCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: BatteryCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case BatteryCommand.Get:\n return true; // This is mandatory\n case BatteryCommand.HealthGet:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: BatteryCCAPI, { property }) {\n switch (property) {\n case \"level\":\n case \"chargingStatus\":\n case \"rechargeable\":\n case \"backup\":\n case \"overheating\":\n case \"lowFluid\":\n case \"rechargeOrReplace\":\n case \"lowTemperatureStatus\":\n case \"disconnected\":\n return (await this.get())?.[property];\n case \"maximumCapacity\":\n case \"temperature\":\n return (await this.getHealth())?.[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(BatteryCommand, BatteryCommand.Get);\n const cc = new BatteryCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BatteryCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"level\",\n \"chargingStatus\",\n \"rechargeable\",\n \"backup\",\n \"overheating\",\n \"lowFluid\",\n \"rechargeOrReplace\",\n \"lowTemperatureStatus\",\n \"disconnected\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getHealth() {\n this.assertSupportsCommand(BatteryCommand, BatteryCommand.HealthGet);\n const cc = new BatteryCCHealthGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BatteryCCHealthReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"maximumCapacity\", \"temperature\"]);\n }\n }\n}\n@commandClass(CommandClasses.Battery)\n@implementedVersion(3)\n@ccValues(BatteryCCValues)\nexport class BatteryCC extends CommandClass {\n declare ccCommand: BatteryCommand;\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 // Query the Battery status\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.Battery, 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 battery status...\",\n direction: \"outbound\",\n });\n const batteryStatus = await api.get();\n if (batteryStatus) {\n let logMessage = \"received response for battery information:\";\n if (batteryStatus.disconnected) {\n logMessage += `\nis disconnected: true`;\n }\n else {\n logMessage += `\nlevel: ${batteryStatus.level === 0xff\n ? \"low\"\n : (batteryStatus.level + \" %\")}`;\n }\n if (api.version >= 2) {\n if (!batteryStatus.disconnected) {\n logMessage += `\nstatus: ${BatteryChargingStatus[batteryStatus.chargingStatus!]}`;\n }\n logMessage += `\nrechargeable: ${batteryStatus.rechargeable}\nis backup: ${batteryStatus.backup}\nis overheating: ${batteryStatus.overheating}\nfluid is low: ${batteryStatus.lowFluid}\nneeds to be replaced or charged: ${BatteryReplacementStatus[batteryStatus.rechargeOrReplace!]}\nis low temperature ${batteryStatus.lowTemperatureStatus}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n if (api.version >= 2) {\n // always query the health\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying battery health...\",\n direction: \"outbound\",\n });\n const batteryHealth = await api.getHealth();\n if (batteryHealth) {\n const logMessage = `received response for battery health:\nmax. capacity: ${batteryHealth.maximumCapacity} %\ntemperature: ${batteryHealth.temperature} \u00B0C`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n }\n public shouldRefreshValues(this: SinglecastCC<this>, ctx: GetValueDB & GetSupportedCCVersion & GetDeviceConfig & GetNode<NodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>>): boolean {\n // Check when the battery state was last updated\n const valueDB = ctx.tryGetValueDB(this.nodeId);\n if (!valueDB)\n return true;\n const lastUpdated = valueDB.getTimestamp(BatteryCCValues.level.endpoint(this.endpointIndex));\n return (lastUpdated == undefined\n // The specs say once per month, but that's a bit too unfrequent IMO\n // Also the maximum that setInterval supports is ~24.85 days\n || Date.now() - lastUpdated > timespan.days(7));\n }\n}\n// @publicAPI\nexport type BatteryCCReportOptions = {\n level: number | \"low\";\n} & AllOrNone<{\n // V2+\n chargingStatus: BatteryChargingStatus;\n rechargeable: boolean;\n backup: boolean;\n overheating: boolean;\n lowFluid: boolean;\n rechargeOrReplace: BatteryReplacementStatus;\n disconnected: boolean;\n}> & AllOrNone<{\n // V3+\n lowTemperatureStatus: boolean;\n}>;\n@CCCommand(BatteryCommand.Report)\n@ccValueProperty(\"level\", BatteryCCValues.level)\n@ccValueProperty(\"chargingStatus\", BatteryCCValues.chargingStatus)\n@ccValueProperty(\"rechargeable\", BatteryCCValues.rechargeable)\n@ccValueProperty(\"backup\", BatteryCCValues.backup)\n@ccValueProperty(\"overheating\", BatteryCCValues.overheating)\n@ccValueProperty(\"lowFluid\", BatteryCCValues.lowFluid)\n@ccValueProperty(\"rechargeOrReplace\", BatteryCCValues.rechargeOrReplace)\n@ccValueProperty(\"disconnected\", BatteryCCValues.disconnected)\n@ccValueProperty(\"lowTemperatureStatus\", BatteryCCValues.lowTemperatureStatus)\nexport class BatteryCCReport extends BatteryCC {\n public constructor(options: WithAddress<BatteryCCReportOptions>) {\n super(options);\n this.level = typeof options.level === \"number\" ? options.level : 0xff;\n this.chargingStatus = options.chargingStatus;\n this.rechargeable = options.rechargeable;\n this.backup = options.backup;\n this.overheating = options.overheating;\n this.lowFluid = options.lowFluid;\n this.rechargeOrReplace = options.rechargeOrReplace;\n this.disconnected = options.disconnected;\n this.lowTemperatureStatus = options.lowTemperatureStatus;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BatteryCCReport {\n let ccOptions: BatteryCCReportOptions;\n validatePayload(raw.payload.length >= 1);\n const level = raw.payload[0];\n validatePayload.withReason(`Invalid battery level ${level}`)(\n // This field MUST be in the range 0x00..0x64 or set to 0xFF\n level <= 100 || level === 0xff);\n ccOptions = {\n level,\n };\n if (raw.payload.length >= 3) {\n // Starting with V2\n const chargingStatus: BatteryChargingStatus = raw.payload[1] >>> 6;\n const rechargeable = !!(raw.payload[1] & 32);\n const backup = !!(raw.payload[1] & 16);\n const overheating = !!(raw.payload[1] & 0b1000);\n const lowFluid = !!(raw.payload[1] & 0b0100);\n const rechargeOrReplace: BatteryReplacementStatus = !!(raw.payload[1] & 0b10)\n ? BatteryReplacementStatus.Now\n : !!(raw.payload[1] & 0b1)\n ? BatteryReplacementStatus.Soon\n : BatteryReplacementStatus.No;\n const lowTemperatureStatus = !!(raw.payload[2] & 0b10);\n const disconnected = !!(raw.payload[2] & 0b1);\n ccOptions = {\n ...ccOptions,\n chargingStatus,\n rechargeable,\n backup,\n overheating,\n lowFluid,\n rechargeOrReplace,\n lowTemperatureStatus,\n disconnected,\n };\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n ...ccOptions,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n // Setting the values to undefined is a bit hacky, but we need to avoid persisting\n // them in these special cases, and I don't like copy-pasting what persistValues does.\n if (this.disconnected) {\n // Level and chargingStatus are meaningless when disconnected.\n // Suppress persisting them, then remove any previously stored values.\n const savedLevel = this.level;\n const savedChargingStatus = this.chargingStatus;\n // @ts-expect-error\n this.level = undefined;\n // @ts-expect-error\n this.chargingStatus = undefined;\n const ret = super.persistValues(ctx);\n // Add the values back to the CC instance, so they can be evaluated downstream if needed\n // @ts-expect-error\n this.level = savedLevel;\n // @ts-expect-error\n this.chargingStatus = savedChargingStatus;\n this.removeValue(ctx, BatteryCCValues.level);\n this.removeValue(ctx, BatteryCCValues.chargingStatus);\n return ret;\n }\n else if (this.level === 0xff) {\n // 0xff is a \"low battery\" notification, not an actual level\n // @ts-expect-error\n this.level = undefined;\n const ret = super.persistValues(ctx);\n // Add the value back to the CC instance, so it can be evaluated downstream if needed\n // @ts-expect-error\n this.level = 0xff;\n return ret;\n }\n // Default behavior for all other cases\n if (!super.persistValues(ctx))\n return false;\n // Na\u00EFve heuristic for a full battery\n if (this.level >= 90) {\n // Some devices send Notification CC Reports with battery information,\n // or this information is mapped from legacy V1 alarm values.\n // We may need to idle the corresponding values when the battery is full\n const notificationCCVersion = ctx.getSupportedCCVersion(CommandClasses.Notification, this.nodeId as number, this.endpointIndex);\n if (\n // supported\n notificationCCVersion > 0\n // but idling is not required\n && notificationCCVersion < 8) {\n const batteryLevelStatusValue = NotificationCCValues\n .notificationVariable(\"Power Management\", \"Battery level status\");\n // If not undefined and not idle\n if (this.getValue(ctx, batteryLevelStatusValue)) {\n this.setValue(ctx, batteryLevelStatusValue, 0);\n }\n }\n }\n return true;\n }\n public readonly level: number;\n public readonly chargingStatus: BatteryChargingStatus | undefined;\n public readonly rechargeable: boolean | undefined;\n public readonly backup: boolean | undefined;\n public readonly overheating: boolean | undefined;\n public readonly lowFluid: boolean | undefined;\n public readonly rechargeOrReplace: BatteryReplacementStatus | undefined;\n public readonly disconnected: boolean | undefined;\n public readonly lowTemperatureStatus: boolean | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.disconnected\n // CC:0080.02.03.11.010\n // If this field is set to 1, the Battery Level field MUST\n // be set to 0x00.\n ? 0\n : this.level,\n ]);\n if (this.chargingStatus != undefined) {\n this.payload = Bytes.concat([\n this.payload,\n [\n (this.chargingStatus << 6)\n + (this.rechargeable ? 32 : 0)\n + (this.backup ? 16 : 0)\n + (this.overheating ? 0b1000 : 0)\n + (this.lowFluid ? 0b0100 : 0)\n + (this.rechargeOrReplace === BatteryReplacementStatus.Now\n ? 0b10\n : this.rechargeOrReplace\n === BatteryReplacementStatus.Soon\n ? 0b1\n : 0),\n (this.lowTemperatureStatus ? 0b10 : 0)\n + (this.disconnected ? 0b1 : 0),\n ],\n ]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.disconnected) {\n message.disconnected = true;\n }\n else if (this.level === 0xff) {\n message[\"is low\"] = true;\n }\n else {\n message.level = this.level;\n }\n if (!this.disconnected && this.chargingStatus != undefined) {\n message[\"charging status\"] = getEnumMemberName(BatteryChargingStatus, this.chargingStatus);\n }\n if (this.rechargeable != undefined) {\n message.rechargeable = this.rechargeable;\n }\n if (this.backup != undefined) {\n message.backup = this.backup;\n }\n if (this.overheating != undefined) {\n message.overheating = this.overheating;\n }\n if (this.lowFluid != undefined) {\n message[\"low fluid\"] = this.lowFluid;\n }\n if (this.rechargeOrReplace != undefined) {\n message[\"recharge or replace\"] = getEnumMemberName(BatteryReplacementStatus, this.rechargeOrReplace);\n }\n if (this.lowTemperatureStatus != undefined) {\n message.lowTemperatureStatus = this.lowTemperatureStatus;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(BatteryCommand.Get)\n@expectedCCResponse(BatteryCCReport)\nexport class BatteryCCGet extends BatteryCC {\n}\n// @publicAPI\nexport interface BatteryCCHealthReportOptions {\n maximumCapacity?: number;\n temperature?: number;\n temperatureScale?: number;\n}\n@CCCommand(BatteryCommand.HealthReport)\n@ccValueProperty(\"maximumCapacity\", BatteryCCValues.maximumCapacity)\n@ccValueProperty(\"temperature\", BatteryCCValues.temperature)\nexport class BatteryCCHealthReport extends BatteryCC {\n public constructor(options: WithAddress<BatteryCCHealthReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.maximumCapacity = options.maximumCapacity;\n this.temperature = options.temperature;\n this.temperatureScale = options.temperatureScale;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BatteryCCHealthReport {\n validatePayload(raw.payload.length >= 2);\n // Parse maximum capacity. 0xff means unknown\n let maximumCapacity: number | undefined = raw.payload[0];\n if (maximumCapacity === 0xff)\n maximumCapacity = undefined;\n const { value: temperature, scale: temperatureScale, } = parseFloatWithScale(raw.payload.subarray(1), true);\n return new this({\n nodeId: ctx.sourceNodeId,\n maximumCapacity,\n temperature,\n temperatureScale,\n });\n }\n public readonly maximumCapacity: number | undefined;\n public readonly temperature: number | undefined;\n private readonly temperatureScale: number | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const temperature = this.temperature != undefined\n ? encodeFloatWithScale(this.temperature, this.temperatureScale ?? 0x00)\n // size, precision and scale must be 0 if the temperature is omitted\n : Bytes.from([0x00]);\n this.payload = Bytes.concat([\n [this.maximumCapacity ?? 0xff],\n temperature,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n temperature: this.temperature != undefined\n ? this.temperature\n : \"unknown\",\n \"max capacity\": this.maximumCapacity != undefined\n ? `${this.maximumCapacity} %`\n : \"unknown\",\n },\n };\n }\n}\n@CCCommand(BatteryCommand.HealthGet)\n@expectedCCResponse(BatteryCCHealthReport)\nexport class BatteryCCHealthGet extends BatteryCC {\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -173,7 +173,8 @@ let BinarySensorCC = (() => {
|
|
|
173
173
|
const node = this.getNode(ctx);
|
|
174
174
|
const endpoint = this.getEndpoint(ctx);
|
|
175
175
|
const api = import_API.CCAPI.create(import_core.CommandClasses["Binary Sensor"], ctx, endpoint).withOptions({
|
|
176
|
-
priority: import_core.MessagePriority.NodeQuery
|
|
176
|
+
priority: import_core.MessagePriority.NodeQuery,
|
|
177
|
+
tag: "interview"
|
|
177
178
|
});
|
|
178
179
|
ctx.logNode(node.id, {
|
|
179
180
|
endpoint: this.endpointIndex,
|
|
@@ -204,14 +205,15 @@ let BinarySensorCC = (() => {
|
|
|
204
205
|
return;
|
|
205
206
|
}
|
|
206
207
|
}
|
|
207
|
-
await this.refreshValues(ctx);
|
|
208
|
+
await this.refreshValues(ctx, { tag: "interview" });
|
|
208
209
|
this.setInterviewComplete(ctx, true);
|
|
209
210
|
}
|
|
210
211
|
async refreshValues(ctx, options) {
|
|
211
212
|
const node = this.getNode(ctx);
|
|
212
213
|
const endpoint = this.getEndpoint(ctx);
|
|
213
214
|
const api = import_API.CCAPI.create(import_core.CommandClasses["Binary Sensor"], ctx, endpoint).withOptions({
|
|
214
|
-
priority: options?.priority ?? import_core.MessagePriority.NodeQuery
|
|
215
|
+
priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
|
|
216
|
+
tag: options?.tag
|
|
215
217
|
});
|
|
216
218
|
if (api.version === 1) {
|
|
217
219
|
ctx.logNode(node.id, {
|