@zwave-js/cc 15.25.2 → 15.25.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/build/cjs/cc/AlarmSensorCC.js +10 -14
  2. package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
  3. package/build/cjs/cc/AssociationCC.d.ts +1 -1
  4. package/build/cjs/cc/AssociationCC.js.map +1 -1
  5. package/build/cjs/cc/AssociationGroupInfoCC.js +16 -16
  6. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  7. package/build/cjs/cc/BarrierOperatorCC.js +4 -4
  8. package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
  9. package/build/cjs/cc/BinarySensorCC.js +3 -3
  10. package/build/cjs/cc/BinarySensorCC.js.map +2 -2
  11. package/build/cjs/cc/CentralSceneCC.js +7 -6
  12. package/build/cjs/cc/CentralSceneCC.js.map +2 -2
  13. package/build/cjs/cc/ColorSwitchCC.js +4 -4
  14. package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
  15. package/build/cjs/cc/ConfigurationCC.js +22 -25
  16. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  17. package/build/cjs/cc/DoorLockCC.js +44 -60
  18. package/build/cjs/cc/DoorLockCC.js.map +2 -2
  19. package/build/cjs/cc/HumidityControlModeCC.js +4 -5
  20. package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
  21. package/build/cjs/cc/HumidityControlSetpointCC.js +14 -14
  22. package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
  23. package/build/cjs/cc/IrrigationCC.js +21 -25
  24. package/build/cjs/cc/IrrigationCC.js.map +2 -2
  25. package/build/cjs/cc/MeterCC.js +9 -10
  26. package/build/cjs/cc/MeterCC.js.map +2 -2
  27. package/build/cjs/cc/MultiChannelCC.d.ts +1 -1
  28. package/build/cjs/cc/MultiChannelCC.js +17 -21
  29. package/build/cjs/cc/MultiChannelCC.js.map +2 -2
  30. package/build/cjs/cc/MultilevelSensorCC.js +8 -6
  31. package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
  32. package/build/cjs/cc/NotificationCC.js +4 -8
  33. package/build/cjs/cc/NotificationCC.js.map +2 -2
  34. package/build/cjs/cc/ProtectionCC.js +11 -12
  35. package/build/cjs/cc/ProtectionCC.js.map +2 -2
  36. package/build/cjs/cc/Security2CC.js +12 -22
  37. package/build/cjs/cc/Security2CC.js.map +2 -2
  38. package/build/cjs/cc/SecurityCC.js +8 -16
  39. package/build/cjs/cc/SecurityCC.js.map +2 -2
  40. package/build/cjs/cc/ThermostatFanModeCC.js +4 -4
  41. package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
  42. package/build/cjs/cc/ThermostatModeCC.js +4 -4
  43. package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
  44. package/build/cjs/cc/ThermostatOperatingStateCC.js +1 -2
  45. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
  46. package/build/cjs/cc/ThermostatSetpointCC.js +4 -3
  47. package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
  48. package/build/cjs/cc/UserCodeCC.js +2 -4
  49. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  50. package/build/cjs/cc/WindowCoveringCC.js +5 -5
  51. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  52. package/build/cjs/cc/_CCValues.generated.d.ts +4 -4
  53. package/build/cjs/cc/_CCValues.generated.js +2 -2
  54. package/build/cjs/cc/_CCValues.generated.js.map +1 -1
  55. package/build/cjs/cc/index.d.ts +3 -3
  56. package/build/cjs/cc/index.js.map +2 -2
  57. package/build/cjs/lib/CommandClass.d.ts +3 -1
  58. package/build/cjs/lib/CommandClass.js +25 -3
  59. package/build/cjs/lib/CommandClass.js.map +2 -2
  60. package/build/cjs/lib/Security2/Extension.d.ts +6 -4
  61. package/build/cjs/lib/Security2/Extension.js +22 -20
  62. package/build/cjs/lib/Security2/Extension.js.map +2 -2
  63. package/build/cjs/lib/_Types.js.map +1 -1
  64. package/build/cjs/lib/utils.js +14 -8
  65. package/build/cjs/lib/utils.js.map +2 -2
  66. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  67. package/build/esm/cc/AlarmSensorCC.js +11 -17
  68. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  69. package/build/esm/cc/AssociationCC.d.ts +1 -1
  70. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  71. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  72. package/build/esm/cc/AssociationGroupInfoCC.js +18 -21
  73. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  74. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  75. package/build/esm/cc/BarrierOperatorCC.js +5 -7
  76. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  77. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  78. package/build/esm/cc/BinarySensorCC.js +4 -6
  79. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  80. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  81. package/build/esm/cc/CentralSceneCC.js +8 -8
  82. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  83. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  84. package/build/esm/cc/ColorSwitchCC.js +5 -7
  85. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  86. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  87. package/build/esm/cc/ConfigurationCC.js +29 -29
  88. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  89. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  90. package/build/esm/cc/DoorLockCC.js +70 -73
  91. package/build/esm/cc/DoorLockCC.js.map +1 -1
  92. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  93. package/build/esm/cc/HumidityControlModeCC.js +5 -8
  94. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  95. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  96. package/build/esm/cc/HumidityControlSetpointCC.js +15 -22
  97. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  98. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  99. package/build/esm/cc/IrrigationCC.js +26 -24
  100. package/build/esm/cc/IrrigationCC.js.map +1 -1
  101. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  102. package/build/esm/cc/MeterCC.js +12 -18
  103. package/build/esm/cc/MeterCC.js.map +1 -1
  104. package/build/esm/cc/MultiChannelCC.d.ts +1 -1
  105. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  106. package/build/esm/cc/MultiChannelCC.js +18 -23
  107. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  108. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  109. package/build/esm/cc/MultilevelSensorCC.js +11 -19
  110. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  111. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  112. package/build/esm/cc/NotificationCC.js +6 -13
  113. package/build/esm/cc/NotificationCC.js.map +1 -1
  114. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  115. package/build/esm/cc/ProtectionCC.js +12 -21
  116. package/build/esm/cc/ProtectionCC.js.map +1 -1
  117. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  118. package/build/esm/cc/Security2CC.js +13 -31
  119. package/build/esm/cc/Security2CC.js.map +1 -1
  120. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  121. package/build/esm/cc/SecurityCC.js +9 -21
  122. package/build/esm/cc/SecurityCC.js.map +1 -1
  123. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  124. package/build/esm/cc/ThermostatFanModeCC.js +5 -7
  125. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  126. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  127. package/build/esm/cc/ThermostatModeCC.js +5 -7
  128. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  129. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  130. package/build/esm/cc/ThermostatOperatingStateCC.js +2 -4
  131. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  132. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  133. package/build/esm/cc/ThermostatSetpointCC.js +5 -9
  134. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  135. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  136. package/build/esm/cc/UserCodeCC.js +3 -7
  137. package/build/esm/cc/UserCodeCC.js.map +1 -1
  138. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  139. package/build/esm/cc/WindowCoveringCC.js +6 -9
  140. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  141. package/build/esm/cc/_CCValues.generated.d.ts +4 -4
  142. package/build/esm/cc/_CCValues.generated.js +2 -2
  143. package/build/esm/cc/_CCValues.generated.js.map +1 -1
  144. package/build/esm/cc/index.d.ts +3 -3
  145. package/build/esm/cc/index.d.ts.map +1 -1
  146. package/build/esm/cc/index.js.map +1 -1
  147. package/build/esm/lib/CommandClass.d.ts +3 -1
  148. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  149. package/build/esm/lib/CommandClass.js +30 -4
  150. package/build/esm/lib/CommandClass.js.map +1 -1
  151. package/build/esm/lib/Security2/Extension.d.ts +6 -4
  152. package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
  153. package/build/esm/lib/Security2/Extension.js +23 -21
  154. package/build/esm/lib/Security2/Extension.js.map +1 -1
  155. package/build/esm/lib/_Types.js +1 -1
  156. package/build/esm/lib/utils.d.ts.map +1 -1
  157. package/build/esm/lib/utils.js +15 -9
  158. package/build/esm/lib/utils.js.map +1 -1
  159. package/package.json +4 -4
@@ -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 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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",
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, logList, logText, 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: logText(\"Received supported subsystem types:\", {\n nested: logList(resp.map((t) => getEnumMemberName(SubsystemType, t))),\n }),\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\": logList(this.supportedSubsystemTypes.map((t) => getEnumMemberName(SubsystemType, t))),\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
  }
@@ -189,11 +189,11 @@ let BinarySensorCC = (() => {
189
189
  });
190
190
  const supportedSensorTypes = await api.getSupportedSensorTypes();
191
191
  if (supportedSensorTypes) {
192
- const logMessage = `received supported sensor types: ${supportedSensorTypes.map((type) => (0, import_shared.getEnumMemberName)(import_Types.BinarySensorType, type)).map((name) => `
193
- \xB7 ${name}`).join("")}`;
194
192
  ctx.logNode(node.id, {
195
193
  endpoint: this.endpointIndex,
196
- message: logMessage,
194
+ message: (0, import_core.logText)("received supported sensor types:", {
195
+ nested: (0, import_core.logList)(supportedSensorTypes.map((type) => (0, import_shared.getEnumMemberName)(import_Types.BinarySensorType, type)))
196
+ }),
197
197
  direction: "inbound"
198
198
  });
199
199
  } else {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/BinarySensorCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./BinarySensorCC._validateArgs.js\";\nconst { validateArgs_BinarySensorCCAPI_get, validateArgs_BinarySensorCCAPI_sendReport, validateArgs_BinarySensorCCAPI_reportSupportedSensorTypes } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type SupervisionResult, ValueMetadata, type WithAddress, encodeBitMask, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, isEnumMember } 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 { BinarySensorCommand, BinarySensorType } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { BinarySensorCCValues } from \"./_CCValues.generated.js\";\nexport { BinarySensorCCValues };\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses[\"Binary Sensor\"])\nexport class BinarySensorCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: BinarySensorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case BinarySensorCommand.Get:\n case BinarySensorCommand.Report:\n return true; // This is mandatory\n case BinarySensorCommand.SupportedGet:\n case BinarySensorCommand.SupportedReport:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: BinarySensorCCAPI, { property }) {\n if (typeof property === \"string\") {\n const sensorType = (BinarySensorType as any)[property] as BinarySensorType | undefined;\n if (sensorType)\n return this.get(sensorType);\n }\n throwUnsupportedProperty(this.ccId, property);\n };\n }\n /**\n * Retrieves the current value from this sensor\n * @param sensorType The (optional) sensor type to retrieve the value for\n */\n @validateArgs_BinarySensorCCAPI_get()\n public async get(sensorType?: BinarySensorType): Promise<MaybeNotKnown<boolean>> {\n this.assertSupportsCommand(BinarySensorCommand, BinarySensorCommand.Get);\n const cc = new BinarySensorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n sensorType,\n });\n const response = await this.host.sendCommand<BinarySensorCCReport>(cc, this.commandOptions);\n // We don't want to repeat the sensor type\n return response?.value;\n }\n @validateArgs_BinarySensorCCAPI_sendReport()\n public async sendReport(value: boolean, sensorType?: BinarySensorType): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BinarySensorCommand, BinarySensorCommand.Report);\n const cc = new BinarySensorCCReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n value,\n type: sensorType,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getSupportedSensorTypes(): Promise<readonly BinarySensorType[] | undefined> {\n this.assertSupportsCommand(BinarySensorCommand, BinarySensorCommand.SupportedGet);\n const cc = new BinarySensorCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BinarySensorCCSupportedReport>(cc, this.commandOptions);\n // We don't want to repeat the sensor type\n return response?.supportedSensorTypes;\n }\n @validateArgs_BinarySensorCCAPI_reportSupportedSensorTypes()\n public async reportSupportedSensorTypes(supported: BinarySensorType[]): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BinarySensorCommand, BinarySensorCommand.SupportedReport);\n const cc = new BinarySensorCCSupportedReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n supportedSensorTypes: supported,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Binary Sensor\"])\n@implementedVersion(2)\n@ccValues(BinarySensorCCValues)\nexport class BinarySensorCC extends CommandClass {\n declare ccCommand: BinarySensorCommand;\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[\"Binary Sensor\"], 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 // Find out which sensor types this sensor supports\n if (api.version >= 2) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported sensor types...\",\n direction: \"outbound\",\n });\n const supportedSensorTypes = await api.getSupportedSensorTypes();\n if (supportedSensorTypes) {\n const logMessage = `received supported sensor types: ${supportedSensorTypes\n .map((type) => getEnumMemberName(BinarySensorType, type))\n .map((name) => `\\n\u00B7 ${name}`)\n .join(\"\")}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported sensor types timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\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[\"Binary Sensor\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query (all of) the sensor's current value(s)\n if (api.version === 1) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current value...\",\n direction: \"outbound\",\n });\n const currentValue = await api.get();\n if (currentValue != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received current value: ${currentValue}`,\n direction: \"inbound\",\n });\n }\n }\n else {\n const supportedSensorTypes: readonly BinarySensorType[] = this.getValue(ctx, BinarySensorCCValues.supportedSensorTypes) ?? [];\n for (const type of supportedSensorTypes) {\n // Some devices report invalid sensor types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(BinarySensorType, type))\n continue;\n const sensorName = getEnumMemberName(BinarySensorType, type);\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying current value for ${sensorName}...`,\n direction: \"outbound\",\n });\n const currentValue = await api.get(type);\n if (currentValue != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received current value for ${sensorName}: ${currentValue}`,\n direction: \"inbound\",\n });\n }\n }\n }\n }\n /**\n * Returns which sensor types are supported.\n * This only works AFTER the interview process\n */\n public static getSupportedSensorTypesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<BinarySensorType[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(BinarySensorCCValues.supportedSensorTypes.endpoint(endpoint.index));\n }\n public setMappedBasicValue(ctx: GetValueDB, value: number): boolean {\n // Prefer setting an existing value to avoid creating a spurious \"Any\" sensor type.\n // Check for the Any type first (backwards compat), then the first one that\n // already exists in the value DB. Fall back to Any if none exist.\n const valueDB = this.getValueDB(ctx);\n const anyValueId = BinarySensorCCValues.state(BinarySensorType.Any)\n .endpoint(this.endpointIndex);\n let sensorType: BinarySensorType;\n if (valueDB.hasMetadata(anyValueId)) {\n sensorType = BinarySensorType.Any;\n }\n else {\n const existingSensorTypes = valueDB\n .getAllMetadata(CommandClasses[\"Binary Sensor\"])\n .filter((v) => v.endpoint === this.endpointIndex\n && BinarySensorCCValues.state.is(v))\n .map((v) => (v.metadata as {\n ccSpecific?: {\n sensorType?: BinarySensorType;\n };\n })?.ccSpecific?.sensorType)\n .filter((t): t is BinarySensorType => t != undefined)\n .toSorted((a, b) => a - b);\n sensorType = existingSensorTypes[0] ?? BinarySensorType.Any;\n }\n const binarySensorValue = BinarySensorCCValues.state(sensorType);\n this.setValue(ctx, binarySensorValue, value > 0);\n return true;\n }\n}\n// @publicAPI\nexport interface BinarySensorCCReportOptions {\n type?: BinarySensorType;\n value: boolean;\n}\n@CCCommand(BinarySensorCommand.Report)\nexport class BinarySensorCCReport extends BinarySensorCC {\n public constructor(options: WithAddress<BinarySensorCCReportOptions>) {\n super(options);\n this.type = options.type ?? BinarySensorType.Any;\n this.value = options.value;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BinarySensorCCReport {\n validatePayload(raw.payload.length >= 1);\n const value = raw.payload[0] === 0xff;\n let type: BinarySensorType = BinarySensorType.Any;\n if (raw.payload.length >= 2) {\n type = raw.payload[1];\n }\n validatePayload(isEnumMember(BinarySensorType, type));\n return new this({\n nodeId: ctx.sourceNodeId,\n value,\n type,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Workaround for devices reporting with sensor type Any -> find first supported sensor type and use that\n let sensorType = this.type;\n if (sensorType === BinarySensorType.Any) {\n const supportedSensorTypes = this.getValue<BinarySensorType[]>(ctx, BinarySensorCCValues.supportedSensorTypes);\n if (supportedSensorTypes?.length) {\n sensorType = supportedSensorTypes[0];\n }\n }\n const binarySensorValue = BinarySensorCCValues.state(sensorType);\n this.setMetadata(ctx, binarySensorValue, binarySensorValue.meta);\n this.setValue(ctx, binarySensorValue, this.value);\n return true;\n }\n public type: BinarySensorType;\n public value: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.value ? 0xff : 0x00, this.type]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n type: getEnumMemberName(BinarySensorType, this.type),\n value: this.value,\n },\n };\n }\n}\nfunction testResponseForBinarySensorGet(sent: BinarySensorCCGet, received: BinarySensorCCReport) {\n // We expect a Binary Sensor Report that matches the requested sensor type (if a type was requested)\n return (sent.sensorType == undefined\n || sent.sensorType === BinarySensorType.Any\n || received.type === sent.sensorType\n // This is technically not correct, but some devices do this anyways\n || received.type === BinarySensorType.Any);\n}\n// @publicAPI\nexport interface BinarySensorCCGetOptions {\n sensorType?: BinarySensorType;\n}\n@CCCommand(BinarySensorCommand.Get)\n@expectedCCResponse(BinarySensorCCReport, testResponseForBinarySensorGet)\nexport class BinarySensorCCGet extends BinarySensorCC {\n public constructor(options: WithAddress<BinarySensorCCGetOptions>) {\n super(options);\n this.sensorType = options.sensorType;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BinarySensorCCGet {\n let sensorType: BinarySensorType | undefined;\n if (raw.payload.length >= 1) {\n sensorType = raw.payload[0];\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n sensorType,\n });\n }\n public sensorType: BinarySensorType | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.sensorType ?? BinarySensorType.Any]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n type: getEnumMemberName(BinarySensorType, this.sensorType ?? BinarySensorType.Any),\n },\n };\n }\n}\n// @publicAPI\nexport interface BinarySensorCCSupportedReportOptions {\n supportedSensorTypes: BinarySensorType[];\n}\n@CCCommand(BinarySensorCommand.SupportedReport)\n@ccValueProperty(\"supportedSensorTypes\", BinarySensorCCValues.supportedSensorTypes)\nexport class BinarySensorCCSupportedReport extends BinarySensorCC {\n public constructor(options: WithAddress<BinarySensorCCSupportedReportOptions>) {\n super(options);\n this.supportedSensorTypes = options.supportedSensorTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BinarySensorCCSupportedReport {\n validatePayload(raw.payload.length >= 1);\n // The enumeration starts at 1, but the first (reserved) bit is included\n // in the report\n const supportedSensorTypes: BinarySensorType[] = parseBitMask(raw.payload, 0)\n .filter((t) => t !== 0);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedSensorTypes,\n });\n }\n public supportedSensorTypes: BinarySensorType[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.supportedSensorTypes.filter((t) => t !== BinarySensorType.Any), undefined, 0);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported types\": this.supportedSensorTypes\n .map((type) => getEnumMemberName(BinarySensorType, type))\n .join(\", \"),\n },\n };\n }\n}\n@CCCommand(BinarySensorCommand.SupportedGet)\n@expectedCCResponse(BinarySensorCCSupportedReport)\nexport class BinarySensorCCSupportedGet extends BinarySensorCC {\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./BinarySensorCC._validateArgs.js\";\nconst { validateArgs_BinarySensorCCAPI_get, validateArgs_BinarySensorCCAPI_sendReport, validateArgs_BinarySensorCCAPI_reportSupportedSensorTypes } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type SupervisionResult, ValueMetadata, type WithAddress, encodeBitMask, logList, logText, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, isEnumMember } 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 { BinarySensorCommand, BinarySensorType } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { BinarySensorCCValues } from \"./_CCValues.generated.js\";\nexport { BinarySensorCCValues };\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses[\"Binary Sensor\"])\nexport class BinarySensorCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: BinarySensorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case BinarySensorCommand.Get:\n case BinarySensorCommand.Report:\n return true; // This is mandatory\n case BinarySensorCommand.SupportedGet:\n case BinarySensorCommand.SupportedReport:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: BinarySensorCCAPI, { property }) {\n if (typeof property === \"string\") {\n const sensorType = (BinarySensorType as any)[property] as BinarySensorType | undefined;\n if (sensorType)\n return this.get(sensorType);\n }\n throwUnsupportedProperty(this.ccId, property);\n };\n }\n /**\n * Retrieves the current value from this sensor\n * @param sensorType The (optional) sensor type to retrieve the value for\n */\n @validateArgs_BinarySensorCCAPI_get()\n public async get(sensorType?: BinarySensorType): Promise<MaybeNotKnown<boolean>> {\n this.assertSupportsCommand(BinarySensorCommand, BinarySensorCommand.Get);\n const cc = new BinarySensorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n sensorType,\n });\n const response = await this.host.sendCommand<BinarySensorCCReport>(cc, this.commandOptions);\n // We don't want to repeat the sensor type\n return response?.value;\n }\n @validateArgs_BinarySensorCCAPI_sendReport()\n public async sendReport(value: boolean, sensorType?: BinarySensorType): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BinarySensorCommand, BinarySensorCommand.Report);\n const cc = new BinarySensorCCReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n value,\n type: sensorType,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getSupportedSensorTypes(): Promise<readonly BinarySensorType[] | undefined> {\n this.assertSupportsCommand(BinarySensorCommand, BinarySensorCommand.SupportedGet);\n const cc = new BinarySensorCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BinarySensorCCSupportedReport>(cc, this.commandOptions);\n // We don't want to repeat the sensor type\n return response?.supportedSensorTypes;\n }\n @validateArgs_BinarySensorCCAPI_reportSupportedSensorTypes()\n public async reportSupportedSensorTypes(supported: BinarySensorType[]): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BinarySensorCommand, BinarySensorCommand.SupportedReport);\n const cc = new BinarySensorCCSupportedReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n supportedSensorTypes: supported,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Binary Sensor\"])\n@implementedVersion(2)\n@ccValues(BinarySensorCCValues)\nexport class BinarySensorCC extends CommandClass {\n declare ccCommand: BinarySensorCommand;\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[\"Binary Sensor\"], 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 // Find out which sensor types this sensor supports\n if (api.version >= 2) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported sensor types...\",\n direction: \"outbound\",\n });\n const supportedSensorTypes = await api.getSupportedSensorTypes();\n if (supportedSensorTypes) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logText(\"received supported sensor types:\", {\n nested: logList(supportedSensorTypes.map((type) => getEnumMemberName(BinarySensorType, type))),\n }),\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported sensor types timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\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[\"Binary Sensor\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query (all of) the sensor's current value(s)\n if (api.version === 1) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current value...\",\n direction: \"outbound\",\n });\n const currentValue = await api.get();\n if (currentValue != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received current value: ${currentValue}`,\n direction: \"inbound\",\n });\n }\n }\n else {\n const supportedSensorTypes: readonly BinarySensorType[] = this.getValue(ctx, BinarySensorCCValues.supportedSensorTypes) ?? [];\n for (const type of supportedSensorTypes) {\n // Some devices report invalid sensor types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(BinarySensorType, type))\n continue;\n const sensorName = getEnumMemberName(BinarySensorType, type);\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying current value for ${sensorName}...`,\n direction: \"outbound\",\n });\n const currentValue = await api.get(type);\n if (currentValue != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received current value for ${sensorName}: ${currentValue}`,\n direction: \"inbound\",\n });\n }\n }\n }\n }\n /**\n * Returns which sensor types are supported.\n * This only works AFTER the interview process\n */\n public static getSupportedSensorTypesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<BinarySensorType[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(BinarySensorCCValues.supportedSensorTypes.endpoint(endpoint.index));\n }\n public setMappedBasicValue(ctx: GetValueDB, value: number): boolean {\n // Prefer setting an existing value to avoid creating a spurious \"Any\" sensor type.\n // Check for the Any type first (backwards compat), then the first one that\n // already exists in the value DB. Fall back to Any if none exist.\n const valueDB = this.getValueDB(ctx);\n const anyValueId = BinarySensorCCValues.state(BinarySensorType.Any)\n .endpoint(this.endpointIndex);\n let sensorType: BinarySensorType;\n if (valueDB.hasMetadata(anyValueId)) {\n sensorType = BinarySensorType.Any;\n }\n else {\n const existingSensorTypes = valueDB\n .getAllMetadata(CommandClasses[\"Binary Sensor\"])\n .filter((v) => v.endpoint === this.endpointIndex\n && BinarySensorCCValues.state.is(v))\n .map((v) => (v.metadata as {\n ccSpecific?: {\n sensorType?: BinarySensorType;\n };\n })?.ccSpecific?.sensorType)\n .filter((t): t is BinarySensorType => t != undefined)\n .toSorted((a, b) => a - b);\n sensorType = existingSensorTypes[0] ?? BinarySensorType.Any;\n }\n const binarySensorValue = BinarySensorCCValues.state(sensorType);\n this.setValue(ctx, binarySensorValue, value > 0);\n return true;\n }\n}\n// @publicAPI\nexport interface BinarySensorCCReportOptions {\n type?: BinarySensorType;\n value: boolean;\n}\n@CCCommand(BinarySensorCommand.Report)\nexport class BinarySensorCCReport extends BinarySensorCC {\n public constructor(options: WithAddress<BinarySensorCCReportOptions>) {\n super(options);\n this.type = options.type ?? BinarySensorType.Any;\n this.value = options.value;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BinarySensorCCReport {\n validatePayload(raw.payload.length >= 1);\n const value = raw.payload[0] === 0xff;\n let type: BinarySensorType = BinarySensorType.Any;\n if (raw.payload.length >= 2) {\n type = raw.payload[1];\n }\n validatePayload(isEnumMember(BinarySensorType, type));\n return new this({\n nodeId: ctx.sourceNodeId,\n value,\n type,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Workaround for devices reporting with sensor type Any -> find first supported sensor type and use that\n let sensorType = this.type;\n if (sensorType === BinarySensorType.Any) {\n const supportedSensorTypes = this.getValue<BinarySensorType[]>(ctx, BinarySensorCCValues.supportedSensorTypes);\n if (supportedSensorTypes?.length) {\n sensorType = supportedSensorTypes[0];\n }\n }\n const binarySensorValue = BinarySensorCCValues.state(sensorType);\n this.setMetadata(ctx, binarySensorValue, binarySensorValue.meta);\n this.setValue(ctx, binarySensorValue, this.value);\n return true;\n }\n public type: BinarySensorType;\n public value: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.value ? 0xff : 0x00, this.type]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n type: getEnumMemberName(BinarySensorType, this.type),\n value: this.value,\n },\n };\n }\n}\nfunction testResponseForBinarySensorGet(sent: BinarySensorCCGet, received: BinarySensorCCReport) {\n // We expect a Binary Sensor Report that matches the requested sensor type (if a type was requested)\n return (sent.sensorType == undefined\n || sent.sensorType === BinarySensorType.Any\n || received.type === sent.sensorType\n // This is technically not correct, but some devices do this anyways\n || received.type === BinarySensorType.Any);\n}\n// @publicAPI\nexport interface BinarySensorCCGetOptions {\n sensorType?: BinarySensorType;\n}\n@CCCommand(BinarySensorCommand.Get)\n@expectedCCResponse(BinarySensorCCReport, testResponseForBinarySensorGet)\nexport class BinarySensorCCGet extends BinarySensorCC {\n public constructor(options: WithAddress<BinarySensorCCGetOptions>) {\n super(options);\n this.sensorType = options.sensorType;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BinarySensorCCGet {\n let sensorType: BinarySensorType | undefined;\n if (raw.payload.length >= 1) {\n sensorType = raw.payload[0];\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n sensorType,\n });\n }\n public sensorType: BinarySensorType | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.sensorType ?? BinarySensorType.Any]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n type: getEnumMemberName(BinarySensorType, this.sensorType ?? BinarySensorType.Any),\n },\n };\n }\n}\n// @publicAPI\nexport interface BinarySensorCCSupportedReportOptions {\n supportedSensorTypes: BinarySensorType[];\n}\n@CCCommand(BinarySensorCommand.SupportedReport)\n@ccValueProperty(\"supportedSensorTypes\", BinarySensorCCValues.supportedSensorTypes)\nexport class BinarySensorCCSupportedReport extends BinarySensorCC {\n public constructor(options: WithAddress<BinarySensorCCSupportedReportOptions>) {\n super(options);\n this.supportedSensorTypes = options.supportedSensorTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BinarySensorCCSupportedReport {\n validatePayload(raw.payload.length >= 1);\n // The enumeration starts at 1, but the first (reserved) bit is included\n // in the report\n const supportedSensorTypes: BinarySensorType[] = parseBitMask(raw.payload, 0)\n .filter((t) => t !== 0);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedSensorTypes,\n });\n }\n public supportedSensorTypes: BinarySensorType[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.supportedSensorTypes.filter((t) => t !== BinarySensorType.Any), undefined, 0);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported types\": this.supportedSensorTypes\n .map((type) => getEnumMemberName(BinarySensorType, type))\n .join(\", \"),\n },\n };\n }\n}\n@CCCommand(BinarySensorCommand.SupportedGet)\n@expectedCCResponse(BinarySensorCCSupportedReport)\nexport class BinarySensorCCSupportedGet extends BinarySensorCC {\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -208,12 +208,14 @@ let CentralSceneCC = (() => {
208
208
  });
209
209
  const ccSupported = await api.getSupported();
210
210
  if (ccSupported) {
211
- const logMessage = `received supported scenes:
212
- # of scenes: ${ccSupported.sceneCount}
213
- supports slow refresh: ${ccSupported.supportsSlowRefresh}`;
214
211
  ctx.logNode(node.id, {
215
212
  endpoint: this.endpointIndex,
216
- message: logMessage,
213
+ message: (0, import_core.logText)("received supported scenes:", {
214
+ nested: (0, import_core.logDict)({
215
+ "# of scenes": ccSupported.sceneCount,
216
+ "supports slow refresh": ccSupported.supportsSlowRefresh
217
+ })
218
+ }),
217
219
  direction: "inbound"
218
220
  });
219
221
  } else {
@@ -405,8 +407,7 @@ let CentralSceneCCSupportedReport = (() => {
405
407
  "supports slow refresh": (0, import_core.maybeUnknownToString)(this.supportsSlowRefresh)
406
408
  };
407
409
  for (const [scene, keys] of this.supportedKeyAttributes) {
408
- message[`supported attributes (scene #${scene})`] = keys.map((k) => `
409
- \xB7 ${(0, import_shared.getEnumMemberName)(import_Types.CentralSceneKeys, k)}`).join("");
410
+ message[`supported attributes (scene #${scene})`] = (0, import_core.logList)(keys.map((k) => (0, import_shared.getEnumMemberName)(import_Types.CentralSceneKeys, k)));
410
411
  }
411
412
  return {
412
413
  ...super.toLogEntry(ctx),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/CentralSceneCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./CentralSceneCC._validateArgs.js\";\nconst { validateArgs_CentralSceneCCAPI_setConfiguration } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, enumValuesToMetadataStates, getCCName, maybeUnknownToString, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { CentralSceneCommand, CentralSceneKeys } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport * as ccUtils from \"../lib/utils.js\";\nimport { CentralSceneCCValues } from \"./_CCValues.generated.js\";\nexport { CentralSceneCCValues };\n@API(CommandClasses[\"Central Scene\"])\nexport class CentralSceneCCAPI extends CCAPI {\n public supportsCommand(cmd: CentralSceneCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case CentralSceneCommand.SupportedGet:\n return this.isSinglecast(); // this is mandatory\n case CentralSceneCommand.ConfigurationGet:\n return this.version >= 3 && this.isSinglecast();\n case CentralSceneCommand.ConfigurationSet:\n return this.version >= 3;\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getSupported() {\n this.assertSupportsCommand(CentralSceneCommand, CentralSceneCommand.SupportedGet);\n const cc = new CentralSceneCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<CentralSceneCCSupportedReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"sceneCount\",\n \"supportsSlowRefresh\",\n \"supportedKeyAttributes\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getConfiguration() {\n this.assertSupportsCommand(CentralSceneCommand, CentralSceneCommand.ConfigurationGet);\n const cc = new CentralSceneCCConfigurationGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<CentralSceneCCConfigurationReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"slowRefresh\"]);\n }\n }\n @validateArgs_CentralSceneCCAPI_setConfiguration()\n public async setConfiguration(slowRefresh: boolean): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(CentralSceneCommand, CentralSceneCommand.ConfigurationSet);\n const cc = new CentralSceneCCConfigurationSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n slowRefresh,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: CentralSceneCCAPI, { property }, value) {\n if (property !== \"slowRefresh\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"boolean\", typeof value);\n }\n return this.setConfiguration(value);\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: CentralSceneCCAPI, { property }) {\n if (property === \"slowRefresh\") {\n return (await this.getConfiguration())?.[property];\n }\n throwUnsupportedProperty(this.ccId, property);\n };\n }\n}\n@commandClass(CommandClasses[\"Central Scene\"])\n@implementedVersion(3)\n@ccValues(CentralSceneCCValues)\nexport class CentralSceneCC extends CommandClass {\n declare ccCommand: CentralSceneCommand;\n public determineRequiredCCInterviews(): readonly CommandClasses[] {\n return [\n ...super.determineRequiredCCInterviews(),\n CommandClasses.Association,\n CommandClasses[\"Multi Channel Association\"],\n CommandClasses[\"Association Group Information\"],\n ];\n }\n public skipEndpointInterview(): boolean {\n // Central scene notifications are issued by the root device\n return true;\n }\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[\"Central Scene\"], 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 // If one Association group issues CentralScene notifications,\n // we must associate ourselves with that channel\n try {\n await ccUtils.assignLifelineIssueingCommand(ctx, endpoint, this.ccId, CentralSceneCommand.Notification);\n }\n catch {\n ctx.logNode(node.id, {\n endpoint: endpoint.index,\n message: `Configuring associations to receive ${getCCName(this.ccId)} commands failed!`,\n level: \"warn\",\n });\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported scenes...\",\n direction: \"outbound\",\n });\n const ccSupported = await api.getSupported();\n if (ccSupported) {\n const logMessage = `received supported scenes:\n# of scenes: ${ccSupported.sceneCount}\nsupports slow refresh: ${ccSupported.supportsSlowRefresh}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported scenes timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n // The slow refresh capability should be enabled whenever possible\n if (api.version >= 3 && ccSupported?.supportsSlowRefresh) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Enabling slow refresh capability...\",\n direction: \"outbound\",\n });\n await api.setConfiguration(true);\n }\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n}\n// @publicAPI\nexport interface CentralSceneCCNotificationOptions {\n sequenceNumber: number;\n keyAttribute: CentralSceneKeys;\n sceneNumber: number;\n slowRefresh?: boolean;\n}\n@CCCommand(CentralSceneCommand.Notification)\nexport class CentralSceneCCNotification extends CentralSceneCC {\n public constructor(options: WithAddress<CentralSceneCCNotificationOptions>) {\n super(options);\n // TODO: Check implementation:\n this.sequenceNumber = options.sequenceNumber;\n this.keyAttribute = options.keyAttribute;\n this.sceneNumber = options.sceneNumber;\n this.slowRefresh = options.slowRefresh;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): CentralSceneCCNotification {\n validatePayload(raw.payload.length >= 3);\n const sequenceNumber = raw.payload[0];\n const keyAttribute: CentralSceneKeys = raw.payload[1] & 0b111;\n const sceneNumber = raw.payload[2];\n let slowRefresh: boolean | undefined;\n if (keyAttribute === CentralSceneKeys.KeyHeldDown) {\n // A receiving node MUST ignore this field if the command is not\n // carrying the Key Held Down key attribute.\n slowRefresh = !!(raw.payload[1] & 128);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n sequenceNumber,\n keyAttribute,\n sceneNumber,\n slowRefresh,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // In case the interview is not yet completed, we still create some basic metadata\n const sceneValue = CentralSceneCCValues.scene(this.sceneNumber);\n // Get device configuration to check for custom scene labels\n const sceneConfig = ctx.getDeviceConfig?.(this.nodeId as number)\n ?.scenes?.get(this.sceneNumber);\n if (sceneConfig) {\n // Ensure metadata with custom label and description\n this.ensureMetadata(ctx, sceneValue, {\n ...sceneValue.meta,\n label: sceneConfig.label,\n description: sceneConfig.description,\n });\n }\n else {\n // Use default metadata\n this.ensureMetadata(ctx, sceneValue);\n }\n // The spec behavior is pretty complicated, so we cannot just store\n // the value and call it a day. Handling of these notifications will\n // happen in the receiving node class\n return true;\n }\n public readonly sequenceNumber: number;\n public readonly keyAttribute: CentralSceneKeys;\n public readonly sceneNumber: number;\n public readonly slowRefresh: boolean | undefined;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"sequence number\": this.sequenceNumber,\n \"key attribute\": getEnumMemberName(CentralSceneKeys, this.keyAttribute),\n \"scene number\": this.sceneNumber,\n };\n if (this.slowRefresh != undefined) {\n message[\"slow refresh\"] = this.slowRefresh;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface CentralSceneCCSupportedReportOptions {\n sceneCount: number;\n supportsSlowRefresh: MaybeNotKnown<boolean>;\n supportedKeyAttributes: Record<number, readonly CentralSceneKeys[]>;\n}\n@CCCommand(CentralSceneCommand.SupportedReport)\n@ccValueProperty(\"sceneCount\", CentralSceneCCValues.sceneCount)\n@ccValueProperty(\"supportsSlowRefresh\", CentralSceneCCValues.supportsSlowRefresh)\n@ccValueProperty(\"supportedKeyAttributes\", CentralSceneCCValues.supportedKeyAttributes)\nexport class CentralSceneCCSupportedReport extends CentralSceneCC {\n public constructor(options: WithAddress<CentralSceneCCSupportedReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.sceneCount = options.sceneCount;\n this.supportsSlowRefresh = options.supportsSlowRefresh;\n for (const [scene, keys] of Object.entries(options.supportedKeyAttributes)) {\n this._supportedKeyAttributes.set(parseInt(scene), keys);\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): CentralSceneCCSupportedReport {\n validatePayload(raw.payload.length >= 2);\n const sceneCount = raw.payload[0];\n const supportsSlowRefresh: MaybeNotKnown<boolean> = !!(raw.payload[1] & 128);\n const bitMaskBytes = (raw.payload[1] & 0b110) >>> 1;\n const identicalKeyAttributes = !!(raw.payload[1] & 0b1);\n const numEntries = identicalKeyAttributes ? 1 : sceneCount;\n validatePayload(raw.payload.length >= 2 + bitMaskBytes * numEntries);\n const supportedKeyAttributes: Record<number, readonly CentralSceneKeys[]> = {};\n for (let i = 0; i < numEntries; i++) {\n const mask = raw.payload.subarray(2 + i * bitMaskBytes, 2 + (i + 1) * bitMaskBytes);\n supportedKeyAttributes[i + 1] = parseBitMask(mask, CentralSceneKeys.KeyPressed);\n }\n if (identicalKeyAttributes) {\n // The key attributes are only transmitted for scene 1, copy them to the others\n for (let i = 2; i <= sceneCount; i++) {\n supportedKeyAttributes[i] = supportedKeyAttributes[1];\n }\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n sceneCount,\n supportsSlowRefresh,\n supportedKeyAttributes,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Get device configuration to check for custom scene labels\n const deviceConfig = ctx.getDeviceConfig?.(this.nodeId as number);\n // Create/extend metadata for all scenes\n for (let i = 1; i <= this.sceneCount; i++) {\n const sceneValue = CentralSceneCCValues.scene(i);\n const sceneMetadata = { ...sceneValue.meta };\n // Check if there's a custom configuration for this scene\n const sceneConfig = deviceConfig?.scenes?.get(i);\n if (sceneConfig) {\n // @ts-expect-error The label type is a literal\n sceneMetadata.label = sceneConfig.label;\n }\n if (sceneConfig?.description) {\n // @ts-expect-error The predefined metadata has no description\n sceneMetadata.description = sceneConfig.description;\n }\n this.setMetadata(ctx, sceneValue, {\n ...sceneMetadata,\n states: enumValuesToMetadataStates(CentralSceneKeys, this._supportedKeyAttributes.get(i)),\n });\n }\n return true;\n }\n public readonly sceneCount: number;\n // TODO: Only offer `slowRefresh` if this is true\n public readonly supportsSlowRefresh: MaybeNotKnown<boolean>;\n private _supportedKeyAttributes = new Map<number, readonly CentralSceneKeys[]>();\n public get supportedKeyAttributes(): ReadonlyMap<number, readonly CentralSceneKeys[]> {\n return this._supportedKeyAttributes;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"scene count\": this.sceneCount,\n \"supports slow refresh\": maybeUnknownToString(this.supportsSlowRefresh),\n };\n for (const [scene, keys] of this.supportedKeyAttributes) {\n message[`supported attributes (scene #${scene})`] = keys\n .map((k) => `\\n\u00B7 ${getEnumMemberName(CentralSceneKeys, k)}`)\n .join(\"\");\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(CentralSceneCommand.SupportedGet)\n@expectedCCResponse(CentralSceneCCSupportedReport)\nexport class CentralSceneCCSupportedGet extends CentralSceneCC {\n}\n// @publicAPI\nexport interface CentralSceneCCConfigurationReportOptions {\n slowRefresh: boolean;\n}\n@CCCommand(CentralSceneCommand.ConfigurationReport)\n@ccValueProperty(\"slowRefresh\", CentralSceneCCValues.slowRefresh)\nexport class CentralSceneCCConfigurationReport extends CentralSceneCC {\n public constructor(options: WithAddress<CentralSceneCCConfigurationReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.slowRefresh = options.slowRefresh;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): CentralSceneCCConfigurationReport {\n validatePayload(raw.payload.length >= 1);\n const slowRefresh = !!(raw.payload[0] & 128);\n return new this({\n nodeId: ctx.sourceNodeId,\n slowRefresh,\n });\n }\n public readonly slowRefresh: boolean;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"slow refresh\": this.slowRefresh },\n };\n }\n}\n@CCCommand(CentralSceneCommand.ConfigurationGet)\n@expectedCCResponse(CentralSceneCCConfigurationReport)\nexport class CentralSceneCCConfigurationGet extends CentralSceneCC {\n}\n// @publicAPI\nexport interface CentralSceneCCConfigurationSetOptions {\n slowRefresh: boolean;\n}\n@CCCommand(CentralSceneCommand.ConfigurationSet)\n@useSupervision()\nexport class CentralSceneCCConfigurationSet extends CentralSceneCC {\n public constructor(options: WithAddress<CentralSceneCCConfigurationSetOptions>) {\n super(options);\n this.slowRefresh = options.slowRefresh;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): CentralSceneCCConfigurationSet {\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new CentralSceneCCConfigurationSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public slowRefresh: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.slowRefresh ? 128 : 0]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"slow refresh\": this.slowRefresh },\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./CentralSceneCC._validateArgs.js\";\nconst { validateArgs_CentralSceneCCAPI_setConfiguration } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, enumValuesToMetadataStates, getCCName, logDict, logList, logText, maybeUnknownToString, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { CentralSceneCommand, CentralSceneKeys } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport * as ccUtils from \"../lib/utils.js\";\nimport { CentralSceneCCValues } from \"./_CCValues.generated.js\";\nexport { CentralSceneCCValues };\n@API(CommandClasses[\"Central Scene\"])\nexport class CentralSceneCCAPI extends CCAPI {\n public supportsCommand(cmd: CentralSceneCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case CentralSceneCommand.SupportedGet:\n return this.isSinglecast(); // this is mandatory\n case CentralSceneCommand.ConfigurationGet:\n return this.version >= 3 && this.isSinglecast();\n case CentralSceneCommand.ConfigurationSet:\n return this.version >= 3;\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getSupported() {\n this.assertSupportsCommand(CentralSceneCommand, CentralSceneCommand.SupportedGet);\n const cc = new CentralSceneCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<CentralSceneCCSupportedReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"sceneCount\",\n \"supportsSlowRefresh\",\n \"supportedKeyAttributes\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getConfiguration() {\n this.assertSupportsCommand(CentralSceneCommand, CentralSceneCommand.ConfigurationGet);\n const cc = new CentralSceneCCConfigurationGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<CentralSceneCCConfigurationReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"slowRefresh\"]);\n }\n }\n @validateArgs_CentralSceneCCAPI_setConfiguration()\n public async setConfiguration(slowRefresh: boolean): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(CentralSceneCommand, CentralSceneCommand.ConfigurationSet);\n const cc = new CentralSceneCCConfigurationSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n slowRefresh,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: CentralSceneCCAPI, { property }, value) {\n if (property !== \"slowRefresh\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"boolean\", typeof value);\n }\n return this.setConfiguration(value);\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: CentralSceneCCAPI, { property }) {\n if (property === \"slowRefresh\") {\n return (await this.getConfiguration())?.[property];\n }\n throwUnsupportedProperty(this.ccId, property);\n };\n }\n}\n@commandClass(CommandClasses[\"Central Scene\"])\n@implementedVersion(3)\n@ccValues(CentralSceneCCValues)\nexport class CentralSceneCC extends CommandClass {\n declare ccCommand: CentralSceneCommand;\n public determineRequiredCCInterviews(): readonly CommandClasses[] {\n return [\n ...super.determineRequiredCCInterviews(),\n CommandClasses.Association,\n CommandClasses[\"Multi Channel Association\"],\n CommandClasses[\"Association Group Information\"],\n ];\n }\n public skipEndpointInterview(): boolean {\n // Central scene notifications are issued by the root device\n return true;\n }\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[\"Central Scene\"], 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 // If one Association group issues CentralScene notifications,\n // we must associate ourselves with that channel\n try {\n await ccUtils.assignLifelineIssueingCommand(ctx, endpoint, this.ccId, CentralSceneCommand.Notification);\n }\n catch {\n ctx.logNode(node.id, {\n endpoint: endpoint.index,\n message: `Configuring associations to receive ${getCCName(this.ccId)} commands failed!`,\n level: \"warn\",\n });\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported scenes...\",\n direction: \"outbound\",\n });\n const ccSupported = await api.getSupported();\n if (ccSupported) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logText(\"received supported scenes:\", {\n nested: logDict({\n \"# of scenes\": ccSupported.sceneCount,\n \"supports slow refresh\": ccSupported.supportsSlowRefresh,\n }),\n }),\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported scenes timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n // The slow refresh capability should be enabled whenever possible\n if (api.version >= 3 && ccSupported?.supportsSlowRefresh) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Enabling slow refresh capability...\",\n direction: \"outbound\",\n });\n await api.setConfiguration(true);\n }\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n}\n// @publicAPI\nexport interface CentralSceneCCNotificationOptions {\n sequenceNumber: number;\n keyAttribute: CentralSceneKeys;\n sceneNumber: number;\n slowRefresh?: boolean;\n}\n@CCCommand(CentralSceneCommand.Notification)\nexport class CentralSceneCCNotification extends CentralSceneCC {\n public constructor(options: WithAddress<CentralSceneCCNotificationOptions>) {\n super(options);\n // TODO: Check implementation:\n this.sequenceNumber = options.sequenceNumber;\n this.keyAttribute = options.keyAttribute;\n this.sceneNumber = options.sceneNumber;\n this.slowRefresh = options.slowRefresh;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): CentralSceneCCNotification {\n validatePayload(raw.payload.length >= 3);\n const sequenceNumber = raw.payload[0];\n const keyAttribute: CentralSceneKeys = raw.payload[1] & 0b111;\n const sceneNumber = raw.payload[2];\n let slowRefresh: boolean | undefined;\n if (keyAttribute === CentralSceneKeys.KeyHeldDown) {\n // A receiving node MUST ignore this field if the command is not\n // carrying the Key Held Down key attribute.\n slowRefresh = !!(raw.payload[1] & 128);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n sequenceNumber,\n keyAttribute,\n sceneNumber,\n slowRefresh,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // In case the interview is not yet completed, we still create some basic metadata\n const sceneValue = CentralSceneCCValues.scene(this.sceneNumber);\n // Get device configuration to check for custom scene labels\n const sceneConfig = ctx.getDeviceConfig?.(this.nodeId as number)\n ?.scenes?.get(this.sceneNumber);\n if (sceneConfig) {\n // Ensure metadata with custom label and description\n this.ensureMetadata(ctx, sceneValue, {\n ...sceneValue.meta,\n label: sceneConfig.label,\n description: sceneConfig.description,\n });\n }\n else {\n // Use default metadata\n this.ensureMetadata(ctx, sceneValue);\n }\n // The spec behavior is pretty complicated, so we cannot just store\n // the value and call it a day. Handling of these notifications will\n // happen in the receiving node class\n return true;\n }\n public readonly sequenceNumber: number;\n public readonly keyAttribute: CentralSceneKeys;\n public readonly sceneNumber: number;\n public readonly slowRefresh: boolean | undefined;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"sequence number\": this.sequenceNumber,\n \"key attribute\": getEnumMemberName(CentralSceneKeys, this.keyAttribute),\n \"scene number\": this.sceneNumber,\n };\n if (this.slowRefresh != undefined) {\n message[\"slow refresh\"] = this.slowRefresh;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface CentralSceneCCSupportedReportOptions {\n sceneCount: number;\n supportsSlowRefresh: MaybeNotKnown<boolean>;\n supportedKeyAttributes: Record<number, readonly CentralSceneKeys[]>;\n}\n@CCCommand(CentralSceneCommand.SupportedReport)\n@ccValueProperty(\"sceneCount\", CentralSceneCCValues.sceneCount)\n@ccValueProperty(\"supportsSlowRefresh\", CentralSceneCCValues.supportsSlowRefresh)\n@ccValueProperty(\"supportedKeyAttributes\", CentralSceneCCValues.supportedKeyAttributes)\nexport class CentralSceneCCSupportedReport extends CentralSceneCC {\n public constructor(options: WithAddress<CentralSceneCCSupportedReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.sceneCount = options.sceneCount;\n this.supportsSlowRefresh = options.supportsSlowRefresh;\n for (const [scene, keys] of Object.entries(options.supportedKeyAttributes)) {\n this._supportedKeyAttributes.set(parseInt(scene), keys);\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): CentralSceneCCSupportedReport {\n validatePayload(raw.payload.length >= 2);\n const sceneCount = raw.payload[0];\n const supportsSlowRefresh: MaybeNotKnown<boolean> = !!(raw.payload[1] & 128);\n const bitMaskBytes = (raw.payload[1] & 0b110) >>> 1;\n const identicalKeyAttributes = !!(raw.payload[1] & 0b1);\n const numEntries = identicalKeyAttributes ? 1 : sceneCount;\n validatePayload(raw.payload.length >= 2 + bitMaskBytes * numEntries);\n const supportedKeyAttributes: Record<number, readonly CentralSceneKeys[]> = {};\n for (let i = 0; i < numEntries; i++) {\n const mask = raw.payload.subarray(2 + i * bitMaskBytes, 2 + (i + 1) * bitMaskBytes);\n supportedKeyAttributes[i + 1] = parseBitMask(mask, CentralSceneKeys.KeyPressed);\n }\n if (identicalKeyAttributes) {\n // The key attributes are only transmitted for scene 1, copy them to the others\n for (let i = 2; i <= sceneCount; i++) {\n supportedKeyAttributes[i] = supportedKeyAttributes[1];\n }\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n sceneCount,\n supportsSlowRefresh,\n supportedKeyAttributes,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Get device configuration to check for custom scene labels\n const deviceConfig = ctx.getDeviceConfig?.(this.nodeId as number);\n // Create/extend metadata for all scenes\n for (let i = 1; i <= this.sceneCount; i++) {\n const sceneValue = CentralSceneCCValues.scene(i);\n const sceneMetadata = { ...sceneValue.meta };\n // Check if there's a custom configuration for this scene\n const sceneConfig = deviceConfig?.scenes?.get(i);\n if (sceneConfig) {\n // @ts-expect-error The label type is a literal\n sceneMetadata.label = sceneConfig.label;\n }\n if (sceneConfig?.description) {\n // @ts-expect-error The predefined metadata has no description\n sceneMetadata.description = sceneConfig.description;\n }\n this.setMetadata(ctx, sceneValue, {\n ...sceneMetadata,\n states: enumValuesToMetadataStates(CentralSceneKeys, this._supportedKeyAttributes.get(i)),\n });\n }\n return true;\n }\n public readonly sceneCount: number;\n // TODO: Only offer `slowRefresh` if this is true\n public readonly supportsSlowRefresh: MaybeNotKnown<boolean>;\n private _supportedKeyAttributes = new Map<number, readonly CentralSceneKeys[]>();\n public get supportedKeyAttributes(): ReadonlyMap<number, readonly CentralSceneKeys[]> {\n return this._supportedKeyAttributes;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"scene count\": this.sceneCount,\n \"supports slow refresh\": maybeUnknownToString(this.supportsSlowRefresh),\n };\n for (const [scene, keys] of this.supportedKeyAttributes) {\n message[`supported attributes (scene #${scene})`] = logList(keys.map((k) => getEnumMemberName(CentralSceneKeys, k)));\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(CentralSceneCommand.SupportedGet)\n@expectedCCResponse(CentralSceneCCSupportedReport)\nexport class CentralSceneCCSupportedGet extends CentralSceneCC {\n}\n// @publicAPI\nexport interface CentralSceneCCConfigurationReportOptions {\n slowRefresh: boolean;\n}\n@CCCommand(CentralSceneCommand.ConfigurationReport)\n@ccValueProperty(\"slowRefresh\", CentralSceneCCValues.slowRefresh)\nexport class CentralSceneCCConfigurationReport extends CentralSceneCC {\n public constructor(options: WithAddress<CentralSceneCCConfigurationReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.slowRefresh = options.slowRefresh;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): CentralSceneCCConfigurationReport {\n validatePayload(raw.payload.length >= 1);\n const slowRefresh = !!(raw.payload[0] & 128);\n return new this({\n nodeId: ctx.sourceNodeId,\n slowRefresh,\n });\n }\n public readonly slowRefresh: boolean;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"slow refresh\": this.slowRefresh },\n };\n }\n}\n@CCCommand(CentralSceneCommand.ConfigurationGet)\n@expectedCCResponse(CentralSceneCCConfigurationReport)\nexport class CentralSceneCCConfigurationGet extends CentralSceneCC {\n}\n// @publicAPI\nexport interface CentralSceneCCConfigurationSetOptions {\n slowRefresh: boolean;\n}\n@CCCommand(CentralSceneCommand.ConfigurationSet)\n@useSupervision()\nexport class CentralSceneCCConfigurationSet extends CentralSceneCC {\n public constructor(options: WithAddress<CentralSceneCCConfigurationSetOptions>) {\n super(options);\n this.slowRefresh = options.slowRefresh;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): CentralSceneCCConfigurationSet {\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new CentralSceneCCConfigurationSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public slowRefresh: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.slowRefresh ? 128 : 0]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"slow refresh\": this.slowRefresh },\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -339,8 +339,9 @@ let ColorSwitchCC = (() => {
339
339
  }
340
340
  ctx.logNode(node.id, {
341
341
  endpoint: this.endpointIndex,
342
- message: `received supported colors:${supportedColors.map((c) => `
343
- \xB7 ${(0, import_shared.getEnumMemberName)(import_Types.ColorComponent, c)}`).join("")}`,
342
+ message: (0, import_core.logText)("received supported colors:", {
343
+ nested: (0, import_core.logList)(supportedColors.map((c) => (0, import_shared.getEnumMemberName)(import_Types.ColorComponent, c)))
344
+ }),
344
345
  direction: "outbound"
345
346
  });
346
347
  for (const color of supportedColors) {
@@ -447,8 +448,7 @@ let ColorSwitchCCSupportedReport = (() => {
447
448
  return {
448
449
  ...super.toLogEntry(ctx),
449
450
  message: {
450
- "supported color components": this.supportedColorComponents.map((c) => `
451
- \xB7 ${(0, import_shared.getEnumMemberName)(import_Types.ColorComponent, c)}`).join("")
451
+ "supported color components": (0, import_core.logList)(this.supportedColorComponents.map((c) => (0, import_shared.getEnumMemberName)(import_Types.ColorComponent, c)))
452
452
  }
453
453
  };
454
454
  }