@zwave-js/cc 15.24.2 → 15.24.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 (90) hide show
  1. package/build/cjs/cc/AssociationGroupInfoCC.js +1 -0
  2. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  3. package/build/cjs/cc/BarrierOperatorCC.js +1 -0
  4. package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
  5. package/build/cjs/cc/BinarySensorCC.js +1 -0
  6. package/build/cjs/cc/BinarySensorCC.js.map +2 -2
  7. package/build/cjs/cc/ColorSwitchCC.js +1 -0
  8. package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
  9. package/build/cjs/cc/LanguageCC.js +2 -0
  10. package/build/cjs/cc/LanguageCC.js.map +2 -2
  11. package/build/cjs/cc/MultiChannelAssociationCC.js +1 -1
  12. package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
  13. package/build/cjs/cc/NodeNamingCC.js +3 -20
  14. package/build/cjs/cc/NodeNamingCC.js.map +2 -2
  15. package/build/cjs/cc/NotificationCC.js +1 -0
  16. package/build/cjs/cc/NotificationCC.js.map +2 -2
  17. package/build/cjs/cc/ScheduleEntryLockCC.js +3 -0
  18. package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
  19. package/build/cjs/cc/TimeCC.js +1 -0
  20. package/build/cjs/cc/TimeCC.js.map +2 -2
  21. package/build/cjs/cc/TimeParametersCC.js +1 -0
  22. package/build/cjs/cc/TimeParametersCC.js.map +2 -2
  23. package/build/cjs/cc/UserCodeCC.d.ts +2 -1
  24. package/build/cjs/cc/UserCodeCC.js +35 -0
  25. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  26. package/build/cjs/cc/UserCredentialCC.js +12 -0
  27. package/build/cjs/cc/UserCredentialCC.js.map +2 -2
  28. package/build/cjs/cc/VersionCC.js +5 -0
  29. package/build/cjs/cc/VersionCC.js.map +2 -2
  30. package/build/cjs/cc/WindowCoveringCC.js +2 -0
  31. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  32. package/build/cjs/cc/ZWaveProtocolCC.d.ts +2 -0
  33. package/build/cjs/cc/ZWaveProtocolCC.js +4 -0
  34. package/build/cjs/cc/ZWaveProtocolCC.js.map +2 -2
  35. package/build/cjs/lib/serializers.js +1 -0
  36. package/build/cjs/lib/serializers.js.map +2 -2
  37. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  38. package/build/esm/cc/AssociationGroupInfoCC.js +2 -0
  39. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  40. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  41. package/build/esm/cc/BarrierOperatorCC.js +1 -0
  42. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  43. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  44. package/build/esm/cc/BinarySensorCC.js +1 -0
  45. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  46. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  47. package/build/esm/cc/ColorSwitchCC.js +1 -0
  48. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  49. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  50. package/build/esm/cc/LanguageCC.js +4 -0
  51. package/build/esm/cc/LanguageCC.js.map +1 -1
  52. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  53. package/build/esm/cc/MultiChannelAssociationCC.js +3 -1
  54. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  55. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  56. package/build/esm/cc/NodeNamingCC.js +3 -22
  57. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  58. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  59. package/build/esm/cc/NotificationCC.js +5 -0
  60. package/build/esm/cc/NotificationCC.js.map +1 -1
  61. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  62. package/build/esm/cc/ScheduleEntryLockCC.js +5 -0
  63. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  64. package/build/esm/cc/TimeCC.d.ts.map +1 -1
  65. package/build/esm/cc/TimeCC.js +1 -0
  66. package/build/esm/cc/TimeCC.js.map +1 -1
  67. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  68. package/build/esm/cc/TimeParametersCC.js +1 -0
  69. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  70. package/build/esm/cc/UserCodeCC.d.ts +2 -1
  71. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  72. package/build/esm/cc/UserCodeCC.js +44 -0
  73. package/build/esm/cc/UserCodeCC.js.map +1 -1
  74. package/build/esm/cc/UserCredentialCC.d.ts.map +1 -1
  75. package/build/esm/cc/UserCredentialCC.js +20 -0
  76. package/build/esm/cc/UserCredentialCC.js.map +1 -1
  77. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  78. package/build/esm/cc/VersionCC.js +9 -0
  79. package/build/esm/cc/VersionCC.js.map +1 -1
  80. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  81. package/build/esm/cc/WindowCoveringCC.js +3 -1
  82. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  83. package/build/esm/cc/ZWaveProtocolCC.d.ts +2 -0
  84. package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -1
  85. package/build/esm/cc/ZWaveProtocolCC.js +4 -0
  86. package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
  87. package/build/esm/lib/serializers.d.ts.map +1 -1
  88. package/build/esm/lib/serializers.js +3 -1
  89. package/build/esm/lib/serializers.js.map +1 -1
  90. package/package.json +4 -4
@@ -333,6 +333,7 @@ let AssociationGroupInfoCCNameReport = (() => {
333
333
  (0, import_core.validatePayload)(raw.payload.length >= 2);
334
334
  const groupId = raw.payload[0];
335
335
  const nameLength = raw.payload[1];
336
+ (0, import_core.validatePayload)(nameLength <= 42);
336
337
  (0, import_core.validatePayload)(raw.payload.length >= 2 + nameLength);
337
338
  const name = (0, import_shared.cpp2js)(raw.payload.subarray(2, 2 + nameLength).toString("utf8"));
338
339
  return new this({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/AssociationGroupInfoCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./AssociationGroupInfoCC._validateArgs.js\";\nconst { validateArgs_AssociationGroupInfoCCAPI_getGroupName, validateArgs_AssociationGroupInfoCCAPI_reportGroupName, validateArgs_AssociationGroupInfoCCAPI_getGroupInfo, validateArgs_AssociationGroupInfoCCAPI_reportGroupInfo, validateArgs_AssociationGroupInfoCCAPI_getCommands, validateArgs_AssociationGroupInfoCCAPI_reportCommands } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupportsCC, type WithAddress, encodeCCId, getCCName, parseCCId, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, cpp2js, getEnumMemberName, num2hex } from \"@zwave-js/shared\";\nimport { CCAPI, PhysicalCCAPI } 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 { AssociationGroupInfoCommand, AssociationGroupInfoProfile, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { AssociationCC } from \"./AssociationCC.js\";\nimport { MultiChannelAssociationCC } from \"./MultiChannelAssociationCC.js\";\nimport { AssociationGroupInfoCCValues } from \"./_CCValues.generated.js\";\nexport { AssociationGroupInfoCCValues };\n// @noSetValueAPI This CC only has get-type commands\n@API(CommandClasses[\"Association Group Information\"])\nexport class AssociationGroupInfoCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: AssociationGroupInfoCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case AssociationGroupInfoCommand.NameGet:\n case AssociationGroupInfoCommand.NameReport:\n case AssociationGroupInfoCommand.InfoGet:\n case AssociationGroupInfoCommand.InfoReport:\n case AssociationGroupInfoCommand.CommandListGet:\n case AssociationGroupInfoCommand.CommandListReport:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n @validateArgs_AssociationGroupInfoCCAPI_getGroupName()\n public async getGroupName(groupId: number): Promise<MaybeNotKnown<string>> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.NameGet);\n const cc = new AssociationGroupInfoCCNameGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n });\n const response = await this.host.sendCommand<AssociationGroupInfoCCNameReport>(cc, this.commandOptions);\n if (response)\n return response.name;\n }\n @validateArgs_AssociationGroupInfoCCAPI_reportGroupName()\n public async reportGroupName(groupId: number, name: string): Promise<void> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.NameReport);\n const cc = new AssociationGroupInfoCCNameReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n name,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_AssociationGroupInfoCCAPI_getGroupInfo()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getGroupInfo(groupId: number, refreshCache: boolean = false) {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.InfoGet);\n const cc = new AssociationGroupInfoCCInfoGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n refreshCache,\n });\n const response = await this.host.sendCommand<AssociationGroupInfoCCInfoReport>(cc, this.commandOptions);\n // SDS13782 says: If List Mode is set to 0, the Group Count field MUST be set to 1.\n // But that's not always the case. Apparently some endpoints return 0 groups\n // although they support AGI CC\n if (response && response.groups.length > 0) {\n const { groupId: _, ...info } = response.groups[0];\n return {\n hasDynamicInfo: response.hasDynamicInfo,\n ...info,\n };\n }\n }\n @validateArgs_AssociationGroupInfoCCAPI_reportGroupInfo()\n public async reportGroupInfo(options: AssociationGroupInfoCCInfoReportOptions): Promise<void> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.InfoReport);\n const cc = new AssociationGroupInfoCCInfoReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_AssociationGroupInfoCCAPI_getCommands()\n public async getCommands(groupId: number, allowCache: boolean = true): Promise<MaybeNotKnown<AssociationGroupInfoCCCommandListReport[\"commands\"]>> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.CommandListGet);\n const cc = new AssociationGroupInfoCCCommandListGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n allowCache,\n });\n const response = await this.host.sendCommand<AssociationGroupInfoCCCommandListReport>(cc, this.commandOptions);\n if (response)\n return response.commands;\n }\n @validateArgs_AssociationGroupInfoCCAPI_reportCommands()\n public async reportCommands(groupId: number, commands: ReadonlyMap<CommandClasses, readonly number[]>): Promise<void> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.CommandListReport);\n const cc = new AssociationGroupInfoCCCommandListReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n commands,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Association Group Information\"])\n@implementedVersion(3)\n@ccValues(AssociationGroupInfoCCValues)\nexport class AssociationGroupInfoCC extends CommandClass {\n declare ccCommand: AssociationGroupInfoCommand;\n public determineRequiredCCInterviews(): readonly CommandClasses[] {\n // AssociationCC must be interviewed after Z-Wave+ if that is supported\n return [\n ...super.determineRequiredCCInterviews(),\n CommandClasses.Association,\n CommandClasses[\"Multi Channel Association\"],\n ];\n }\n /** Returns the name of an association group */\n public static getGroupNameCached(ctx: GetValueDB, endpoint: EndpointId, groupId: number): MaybeNotKnown<string> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(AssociationGroupInfoCCValues.groupName(groupId).endpoint(endpoint.index));\n }\n /** Returns the association profile for an association group */\n public static getGroupProfileCached(ctx: GetValueDB, endpoint: EndpointId, groupId: number): MaybeNotKnown<AssociationGroupInfoProfile> {\n return ctx.getValueDB(endpoint.nodeId).getValue<{\n profile: AssociationGroupInfoProfile;\n }>(AssociationGroupInfoCCValues.groupInfo(groupId).endpoint(endpoint.index))\n ?.profile;\n }\n /** Returns the dictionary of all commands issued by the given association group */\n public static getIssuedCommandsCached(ctx: GetValueDB, endpoint: EndpointId, groupId: number): MaybeNotKnown<ReadonlyMap<CommandClasses, readonly number[]>> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(AssociationGroupInfoCCValues.commands(groupId).endpoint(endpoint.index));\n }\n public static findGroupsForIssuedCommand(ctx: GetValueDB, endpoint: EndpointId & SupportsCC, ccId: CommandClasses, command: number): number[] {\n const ret: number[] = [];\n const associationGroupCount = this.getAssociationGroupCountCached(ctx, endpoint);\n for (let groupId = 1; groupId <= associationGroupCount; groupId++) {\n // Scan the issued commands of all groups if there's a match\n const issuedCommands = this.getIssuedCommandsCached(ctx, endpoint, groupId);\n if (!issuedCommands)\n continue;\n if (issuedCommands.has(ccId)\n && issuedCommands.get(ccId)!.includes(command)) {\n ret.push(groupId);\n continue;\n }\n }\n return ret;\n }\n private static getAssociationGroupCountCached(ctx: GetValueDB, endpoint: EndpointId & SupportsCC): number {\n // The association group count is either determined by the\n // Association CC or the Multi Channel Association CC\n return (\n // First query the Multi Channel Association CC\n // And fall back to 0\n (endpoint.supportsCC(CommandClasses[\"Multi Channel Association\"])\n && MultiChannelAssociationCC.getGroupCountCached(ctx, endpoint))\n // Then the Association CC\n || (endpoint.supportsCC(CommandClasses.Association)\n && AssociationCC.getGroupCountCached(ctx, endpoint))\n || 0);\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[\"Association Group Information\"], ctx, endpoint).withOptions({ priority: MessagePriority.NodeQuery });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n const associationGroupCount = AssociationGroupInfoCC\n .getAssociationGroupCountCached(ctx, endpoint);\n for (let groupId = 1; groupId <= associationGroupCount; groupId++) {\n // First get the group's name\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Association group #${groupId}: Querying name...`,\n direction: \"outbound\",\n });\n const name = await api.getGroupName(groupId);\n if (name) {\n const logMessage = `Association group #${groupId} has name \"${name}\"`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n // Then the command list\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Association group #${groupId}: Querying command list...`,\n direction: \"outbound\",\n });\n await api.getCommands(groupId);\n // Not sure how to log this\n }\n // Finally query each group for its information\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Association Group Information\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n // Query the information for each group (this is the only thing that could be dynamic)\n const associationGroupCount = AssociationGroupInfoCC\n .getAssociationGroupCountCached(ctx, endpoint);\n const hasDynamicInfo = this.getValue<boolean>(ctx, AssociationGroupInfoCCValues.hasDynamicInfo);\n for (let groupId = 1; groupId <= associationGroupCount; groupId++) {\n // Then its information\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Association group #${groupId}: Querying info...`,\n direction: \"outbound\",\n });\n const info = await api.getGroupInfo(groupId, !!hasDynamicInfo);\n if (info) {\n const logMessage = `Received info for association group #${groupId}:\ninfo is dynamic: ${info.hasDynamicInfo}\nprofile: ${getEnumMemberName(AssociationGroupInfoProfile, info.profile)}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCNameReportOptions {\n groupId: number;\n name: string;\n}\n@CCCommand(AssociationGroupInfoCommand.NameReport)\nexport class AssociationGroupInfoCCNameReport extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCNameReportOptions>) {\n super(options);\n this.groupId = options.groupId;\n this.name = options.name;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCNameReport {\n validatePayload(raw.payload.length >= 2);\n const groupId = raw.payload[0];\n const nameLength = raw.payload[1];\n validatePayload(raw.payload.length >= 2 + nameLength);\n // The specs don't allow 0-terminated string, but some devices use them\n // So we need to cut them off\n const name = cpp2js(raw.payload.subarray(2, 2 + nameLength).toString(\"utf8\"));\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n name,\n });\n }\n public readonly groupId: number;\n public readonly name: string;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const valueDB = this.getValueDB(ctx);\n valueDB.setValue(AssociationGroupInfoCCValues.groupName(this.groupId).endpoint(this.endpointIndex), this.name);\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.groupId, this.name.length],\n Bytes.from(this.name, \"utf8\"),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"group id\": this.groupId,\n name: this.name,\n },\n };\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCNameGetOptions {\n groupId: number;\n}\n@CCCommand(AssociationGroupInfoCommand.NameGet)\n@expectedCCResponse(AssociationGroupInfoCCNameReport)\nexport class AssociationGroupInfoCCNameGet extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCNameGetOptions>) {\n super(options);\n this.groupId = options.groupId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCNameGet {\n validatePayload(raw.payload.length >= 1);\n const groupId = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n });\n }\n public groupId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.groupId]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"group id\": this.groupId },\n };\n }\n}\nexport interface AssociationGroupInfo {\n groupId: number;\n mode: number;\n profile: number;\n eventCode: number;\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCInfoReportOptions {\n isListMode: boolean;\n hasDynamicInfo: boolean;\n groups: AssociationGroupInfo[];\n}\n@CCCommand(AssociationGroupInfoCommand.InfoReport)\n@ccValueProperty(\"hasDynamicInfo\", AssociationGroupInfoCCValues.hasDynamicInfo)\nexport class AssociationGroupInfoCCInfoReport extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCInfoReportOptions>) {\n super(options);\n this.isListMode = options.isListMode;\n this.hasDynamicInfo = options.hasDynamicInfo;\n this.groups = options.groups;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCInfoReport {\n validatePayload(raw.payload.length >= 1);\n const isListMode = !!(raw.payload[0] & 128);\n const hasDynamicInfo = !!(raw.payload[0] & 64);\n const groupCount = raw.payload[0] & 63;\n // each group requires 7 bytes of payload\n validatePayload(raw.payload.length >= 1 + groupCount * 7);\n const groups: AssociationGroupInfo[] = [];\n for (let i = 0; i < groupCount; i++) {\n const offset = 1 + i * 7;\n // Parse the payload\n const groupBytes = raw.payload.subarray(offset, offset + 7);\n const groupId = groupBytes[0];\n const mode = 0; // groupBytes[1];\n const profile = groupBytes.readUInt16BE(2);\n const eventCode = 0; // groupBytes.readUInt16BE(5);\n groups.push({ groupId, mode, profile, eventCode });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n isListMode,\n hasDynamicInfo,\n groups,\n });\n }\n public readonly isListMode: boolean;\n public readonly hasDynamicInfo: boolean;\n public readonly groups: readonly AssociationGroupInfo[];\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n for (const group of this.groups) {\n const { groupId, mode, profile, eventCode } = group;\n this.setValue(ctx, AssociationGroupInfoCCValues.groupInfo(groupId), {\n mode,\n profile,\n eventCode,\n });\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(1 + this.groups.length * 7, 0);\n this.payload[0] = (this.isListMode ? 128 : 0)\n | (this.hasDynamicInfo ? 64 : 0)\n | (this.groups.length & 63);\n for (let i = 0; i < this.groups.length; i++) {\n const offset = 1 + i * 7;\n this.payload[offset] = this.groups[i].groupId;\n this.payload.writeUInt16BE(this.groups[i].profile, offset + 2);\n // The remaining bytes are zero\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"is list mode\": this.isListMode,\n \"has dynamic info\": this.hasDynamicInfo,\n groups: this.groups\n .map((g) => `\n\u00B7 Group #${g.groupId}\n mode: ${g.mode}\n profile: ${g.profile}\n event code: ${g.eventCode}`)\n .join(\"\"),\n },\n };\n }\n}\n// @publicAPI\nexport type AssociationGroupInfoCCInfoGetOptions = {\n refreshCache: boolean;\n} & ({\n listMode: boolean;\n} | {\n groupId: number;\n});\n@CCCommand(AssociationGroupInfoCommand.InfoGet)\n@expectedCCResponse(AssociationGroupInfoCCInfoReport)\nexport class AssociationGroupInfoCCInfoGet extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCInfoGetOptions>) {\n super(options);\n this.refreshCache = options.refreshCache;\n if (\"listMode\" in options)\n this.listMode = options.listMode;\n if (\"groupId\" in options)\n this.groupId = options.groupId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCInfoGet {\n validatePayload(raw.payload.length >= 2);\n const optionByte = raw.payload[0];\n const refreshCache = !!(optionByte & 128);\n const listMode: boolean | undefined = !!(optionByte & 64);\n let groupId: number | undefined;\n if (!listMode) {\n groupId = raw.payload[1];\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n refreshCache,\n listMode,\n groupId,\n });\n }\n public refreshCache: boolean;\n public listMode?: boolean;\n public groupId?: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const isListMode = this.listMode === true;\n const optionByte = (this.refreshCache ? 128 : 0)\n | (isListMode ? 64 : 0);\n this.payload = Bytes.from([\n optionByte,\n isListMode ? 0 : this.groupId!,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.groupId != undefined) {\n message[\"group id\"] = this.groupId;\n }\n if (this.listMode != undefined) {\n message[\"list mode\"] = this.listMode;\n }\n message[\"refresh cache\"] = this.refreshCache;\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCCommandListReportOptions {\n groupId: number;\n commands: ReadonlyMap<CommandClasses, readonly number[]>;\n}\n@CCCommand(AssociationGroupInfoCommand.CommandListReport)\n@ccValueProperty(\"commands\", AssociationGroupInfoCCValues.commands, (self) => [self.groupId])\nexport class AssociationGroupInfoCCCommandListReport extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCCommandListReportOptions>) {\n super(options);\n this.groupId = options.groupId;\n this.commands = options.commands;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCCommandListReport {\n validatePayload(raw.payload.length >= 2);\n const groupId = raw.payload[0];\n const listLength = raw.payload[1];\n validatePayload(raw.payload.length >= 2 + listLength);\n const listBytes = raw.payload.subarray(2, 2 + listLength);\n // Parse all CC ids and commands\n let offset = 0;\n const commands = new Map<CommandClasses, number[]>();\n while (offset < listLength) {\n const { ccId, bytesRead } = parseCCId(listBytes, offset);\n const command = listBytes[offset + bytesRead];\n if (!commands.has(ccId))\n commands.set(ccId, []);\n commands.get(ccId)!.push(command);\n offset += bytesRead + 1;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n commands,\n });\n }\n public readonly groupId: number;\n public readonly commands: ReadonlyMap<CommandClasses, readonly number[]>;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // To make it easier to encode possible extended CCs, we first\n // allocate as much space as we may need, then trim it again\n this.payload = new Bytes(2 + this.commands.size * 3);\n this.payload[0] = this.groupId;\n let offset = 2;\n for (const [ccId, commands] of this.commands) {\n for (const command of commands) {\n offset += encodeCCId(ccId, this.payload, offset);\n this.payload[offset] = command;\n offset++;\n }\n }\n this.payload[1] = offset - 2; // list length\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"group id\": this.groupId,\n commands: [...this.commands]\n .map(([cc, cmds]) => {\n return `\\n\u00B7 ${getCCName(cc)}: ${cmds\n .map((cmd) => num2hex(cmd))\n .join(\", \")}`;\n })\n .join(\"\"),\n },\n };\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCCommandListGetOptions {\n allowCache: boolean;\n groupId: number;\n}\n@CCCommand(AssociationGroupInfoCommand.CommandListGet)\n@expectedCCResponse(AssociationGroupInfoCCCommandListReport)\nexport class AssociationGroupInfoCCCommandListGet extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCCommandListGetOptions>) {\n super(options);\n this.allowCache = options.allowCache;\n this.groupId = options.groupId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCCommandListGet {\n validatePayload(raw.payload.length >= 2);\n const allowCache = !!(raw.payload[0] & 128);\n const groupId = raw.payload[1];\n return new this({\n nodeId: ctx.sourceNodeId,\n allowCache,\n groupId,\n });\n }\n public allowCache: boolean;\n public groupId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.allowCache ? 128 : 0,\n this.groupId,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"group id\": this.groupId,\n \"allow cache\": this.allowCache,\n },\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./AssociationGroupInfoCC._validateArgs.js\";\nconst { validateArgs_AssociationGroupInfoCCAPI_getGroupName, validateArgs_AssociationGroupInfoCCAPI_reportGroupName, validateArgs_AssociationGroupInfoCCAPI_getGroupInfo, validateArgs_AssociationGroupInfoCCAPI_reportGroupInfo, validateArgs_AssociationGroupInfoCCAPI_getCommands, validateArgs_AssociationGroupInfoCCAPI_reportCommands } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupportsCC, type WithAddress, encodeCCId, getCCName, parseCCId, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, cpp2js, getEnumMemberName, num2hex } from \"@zwave-js/shared\";\nimport { CCAPI, PhysicalCCAPI } 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 { AssociationGroupInfoCommand, AssociationGroupInfoProfile, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { AssociationCC } from \"./AssociationCC.js\";\nimport { MultiChannelAssociationCC } from \"./MultiChannelAssociationCC.js\";\nimport { AssociationGroupInfoCCValues } from \"./_CCValues.generated.js\";\nexport { AssociationGroupInfoCCValues };\n// @noSetValueAPI This CC only has get-type commands\n@API(CommandClasses[\"Association Group Information\"])\nexport class AssociationGroupInfoCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: AssociationGroupInfoCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case AssociationGroupInfoCommand.NameGet:\n case AssociationGroupInfoCommand.NameReport:\n case AssociationGroupInfoCommand.InfoGet:\n case AssociationGroupInfoCommand.InfoReport:\n case AssociationGroupInfoCommand.CommandListGet:\n case AssociationGroupInfoCommand.CommandListReport:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n @validateArgs_AssociationGroupInfoCCAPI_getGroupName()\n public async getGroupName(groupId: number): Promise<MaybeNotKnown<string>> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.NameGet);\n const cc = new AssociationGroupInfoCCNameGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n });\n const response = await this.host.sendCommand<AssociationGroupInfoCCNameReport>(cc, this.commandOptions);\n if (response)\n return response.name;\n }\n @validateArgs_AssociationGroupInfoCCAPI_reportGroupName()\n public async reportGroupName(groupId: number, name: string): Promise<void> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.NameReport);\n const cc = new AssociationGroupInfoCCNameReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n name,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_AssociationGroupInfoCCAPI_getGroupInfo()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getGroupInfo(groupId: number, refreshCache: boolean = false) {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.InfoGet);\n const cc = new AssociationGroupInfoCCInfoGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n refreshCache,\n });\n const response = await this.host.sendCommand<AssociationGroupInfoCCInfoReport>(cc, this.commandOptions);\n // SDS13782 says: If List Mode is set to 0, the Group Count field MUST be set to 1.\n // But that's not always the case. Apparently some endpoints return 0 groups\n // although they support AGI CC\n if (response && response.groups.length > 0) {\n const { groupId: _, ...info } = response.groups[0];\n return {\n hasDynamicInfo: response.hasDynamicInfo,\n ...info,\n };\n }\n }\n @validateArgs_AssociationGroupInfoCCAPI_reportGroupInfo()\n public async reportGroupInfo(options: AssociationGroupInfoCCInfoReportOptions): Promise<void> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.InfoReport);\n const cc = new AssociationGroupInfoCCInfoReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_AssociationGroupInfoCCAPI_getCommands()\n public async getCommands(groupId: number, allowCache: boolean = true): Promise<MaybeNotKnown<AssociationGroupInfoCCCommandListReport[\"commands\"]>> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.CommandListGet);\n const cc = new AssociationGroupInfoCCCommandListGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n allowCache,\n });\n const response = await this.host.sendCommand<AssociationGroupInfoCCCommandListReport>(cc, this.commandOptions);\n if (response)\n return response.commands;\n }\n @validateArgs_AssociationGroupInfoCCAPI_reportCommands()\n public async reportCommands(groupId: number, commands: ReadonlyMap<CommandClasses, readonly number[]>): Promise<void> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.CommandListReport);\n const cc = new AssociationGroupInfoCCCommandListReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n commands,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Association Group Information\"])\n@implementedVersion(3)\n@ccValues(AssociationGroupInfoCCValues)\nexport class AssociationGroupInfoCC extends CommandClass {\n declare ccCommand: AssociationGroupInfoCommand;\n public determineRequiredCCInterviews(): readonly CommandClasses[] {\n // AssociationCC must be interviewed after Z-Wave+ if that is supported\n return [\n ...super.determineRequiredCCInterviews(),\n CommandClasses.Association,\n CommandClasses[\"Multi Channel Association\"],\n ];\n }\n /** Returns the name of an association group */\n public static getGroupNameCached(ctx: GetValueDB, endpoint: EndpointId, groupId: number): MaybeNotKnown<string> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(AssociationGroupInfoCCValues.groupName(groupId).endpoint(endpoint.index));\n }\n /** Returns the association profile for an association group */\n public static getGroupProfileCached(ctx: GetValueDB, endpoint: EndpointId, groupId: number): MaybeNotKnown<AssociationGroupInfoProfile> {\n return ctx.getValueDB(endpoint.nodeId).getValue<{\n profile: AssociationGroupInfoProfile;\n }>(AssociationGroupInfoCCValues.groupInfo(groupId).endpoint(endpoint.index))\n ?.profile;\n }\n /** Returns the dictionary of all commands issued by the given association group */\n public static getIssuedCommandsCached(ctx: GetValueDB, endpoint: EndpointId, groupId: number): MaybeNotKnown<ReadonlyMap<CommandClasses, readonly number[]>> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(AssociationGroupInfoCCValues.commands(groupId).endpoint(endpoint.index));\n }\n public static findGroupsForIssuedCommand(ctx: GetValueDB, endpoint: EndpointId & SupportsCC, ccId: CommandClasses, command: number): number[] {\n const ret: number[] = [];\n const associationGroupCount = this.getAssociationGroupCountCached(ctx, endpoint);\n for (let groupId = 1; groupId <= associationGroupCount; groupId++) {\n // Scan the issued commands of all groups if there's a match\n const issuedCommands = this.getIssuedCommandsCached(ctx, endpoint, groupId);\n if (!issuedCommands)\n continue;\n if (issuedCommands.has(ccId)\n && issuedCommands.get(ccId)!.includes(command)) {\n ret.push(groupId);\n continue;\n }\n }\n return ret;\n }\n private static getAssociationGroupCountCached(ctx: GetValueDB, endpoint: EndpointId & SupportsCC): number {\n // The association group count is either determined by the\n // Association CC or the Multi Channel Association CC\n return (\n // First query the Multi Channel Association CC\n // And fall back to 0\n (endpoint.supportsCC(CommandClasses[\"Multi Channel Association\"])\n && MultiChannelAssociationCC.getGroupCountCached(ctx, endpoint))\n // Then the Association CC\n || (endpoint.supportsCC(CommandClasses.Association)\n && AssociationCC.getGroupCountCached(ctx, endpoint))\n || 0);\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[\"Association Group Information\"], ctx, endpoint).withOptions({ priority: MessagePriority.NodeQuery });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n const associationGroupCount = AssociationGroupInfoCC\n .getAssociationGroupCountCached(ctx, endpoint);\n for (let groupId = 1; groupId <= associationGroupCount; groupId++) {\n // First get the group's name\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Association group #${groupId}: Querying name...`,\n direction: \"outbound\",\n });\n const name = await api.getGroupName(groupId);\n if (name) {\n const logMessage = `Association group #${groupId} has name \"${name}\"`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n // Then the command list\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Association group #${groupId}: Querying command list...`,\n direction: \"outbound\",\n });\n await api.getCommands(groupId);\n // Not sure how to log this\n }\n // Finally query each group for its information\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Association Group Information\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n // Query the information for each group (this is the only thing that could be dynamic)\n const associationGroupCount = AssociationGroupInfoCC\n .getAssociationGroupCountCached(ctx, endpoint);\n const hasDynamicInfo = this.getValue<boolean>(ctx, AssociationGroupInfoCCValues.hasDynamicInfo);\n for (let groupId = 1; groupId <= associationGroupCount; groupId++) {\n // Then its information\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Association group #${groupId}: Querying info...`,\n direction: \"outbound\",\n });\n const info = await api.getGroupInfo(groupId, !!hasDynamicInfo);\n if (info) {\n const logMessage = `Received info for association group #${groupId}:\ninfo is dynamic: ${info.hasDynamicInfo}\nprofile: ${getEnumMemberName(AssociationGroupInfoProfile, info.profile)}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCNameReportOptions {\n groupId: number;\n name: string;\n}\n@CCCommand(AssociationGroupInfoCommand.NameReport)\nexport class AssociationGroupInfoCCNameReport extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCNameReportOptions>) {\n super(options);\n this.groupId = options.groupId;\n this.name = options.name;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCNameReport {\n validatePayload(raw.payload.length >= 2);\n const groupId = raw.payload[0];\n const nameLength = raw.payload[1];\n // CC:0059.01.02.11.001: The Name Length field MUST be in the range 0..42\n validatePayload(nameLength <= 42);\n validatePayload(raw.payload.length >= 2 + nameLength);\n // The specs don't allow 0-terminated string, but some devices use them\n // So we need to cut them off\n const name = cpp2js(raw.payload.subarray(2, 2 + nameLength).toString(\"utf8\"));\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n name,\n });\n }\n public readonly groupId: number;\n public readonly name: string;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const valueDB = this.getValueDB(ctx);\n valueDB.setValue(AssociationGroupInfoCCValues.groupName(this.groupId).endpoint(this.endpointIndex), this.name);\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.groupId, this.name.length],\n Bytes.from(this.name, \"utf8\"),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"group id\": this.groupId,\n name: this.name,\n },\n };\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCNameGetOptions {\n groupId: number;\n}\n@CCCommand(AssociationGroupInfoCommand.NameGet)\n@expectedCCResponse(AssociationGroupInfoCCNameReport)\nexport class AssociationGroupInfoCCNameGet extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCNameGetOptions>) {\n super(options);\n this.groupId = options.groupId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCNameGet {\n validatePayload(raw.payload.length >= 1);\n const groupId = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n });\n }\n public groupId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.groupId]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"group id\": this.groupId },\n };\n }\n}\nexport interface AssociationGroupInfo {\n groupId: number;\n mode: number;\n profile: number;\n eventCode: number;\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCInfoReportOptions {\n isListMode: boolean;\n hasDynamicInfo: boolean;\n groups: AssociationGroupInfo[];\n}\n@CCCommand(AssociationGroupInfoCommand.InfoReport)\n@ccValueProperty(\"hasDynamicInfo\", AssociationGroupInfoCCValues.hasDynamicInfo)\nexport class AssociationGroupInfoCCInfoReport extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCInfoReportOptions>) {\n super(options);\n this.isListMode = options.isListMode;\n this.hasDynamicInfo = options.hasDynamicInfo;\n this.groups = options.groups;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCInfoReport {\n validatePayload(raw.payload.length >= 1);\n const isListMode = !!(raw.payload[0] & 128);\n const hasDynamicInfo = !!(raw.payload[0] & 64);\n const groupCount = raw.payload[0] & 63;\n // each group requires 7 bytes of payload\n validatePayload(raw.payload.length >= 1 + groupCount * 7);\n const groups: AssociationGroupInfo[] = [];\n for (let i = 0; i < groupCount; i++) {\n const offset = 1 + i * 7;\n // Parse the payload\n const groupBytes = raw.payload.subarray(offset, offset + 7);\n const groupId = groupBytes[0];\n const mode = 0; // groupBytes[1];\n const profile = groupBytes.readUInt16BE(2);\n const eventCode = 0; // groupBytes.readUInt16BE(5);\n groups.push({ groupId, mode, profile, eventCode });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n isListMode,\n hasDynamicInfo,\n groups,\n });\n }\n public readonly isListMode: boolean;\n public readonly hasDynamicInfo: boolean;\n public readonly groups: readonly AssociationGroupInfo[];\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n for (const group of this.groups) {\n const { groupId, mode, profile, eventCode } = group;\n this.setValue(ctx, AssociationGroupInfoCCValues.groupInfo(groupId), {\n mode,\n profile,\n eventCode,\n });\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(1 + this.groups.length * 7, 0);\n this.payload[0] = (this.isListMode ? 128 : 0)\n | (this.hasDynamicInfo ? 64 : 0)\n | (this.groups.length & 63);\n for (let i = 0; i < this.groups.length; i++) {\n const offset = 1 + i * 7;\n this.payload[offset] = this.groups[i].groupId;\n this.payload.writeUInt16BE(this.groups[i].profile, offset + 2);\n // The remaining bytes are zero\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"is list mode\": this.isListMode,\n \"has dynamic info\": this.hasDynamicInfo,\n groups: this.groups\n .map((g) => `\n\u00B7 Group #${g.groupId}\n mode: ${g.mode}\n profile: ${g.profile}\n event code: ${g.eventCode}`)\n .join(\"\"),\n },\n };\n }\n}\n// @publicAPI\nexport type AssociationGroupInfoCCInfoGetOptions = {\n refreshCache: boolean;\n} & ({\n listMode: boolean;\n} | {\n groupId: number;\n});\n@CCCommand(AssociationGroupInfoCommand.InfoGet)\n@expectedCCResponse(AssociationGroupInfoCCInfoReport)\nexport class AssociationGroupInfoCCInfoGet extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCInfoGetOptions>) {\n super(options);\n this.refreshCache = options.refreshCache;\n if (\"listMode\" in options)\n this.listMode = options.listMode;\n if (\"groupId\" in options)\n this.groupId = options.groupId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCInfoGet {\n validatePayload(raw.payload.length >= 2);\n const optionByte = raw.payload[0];\n const refreshCache = !!(optionByte & 128);\n const listMode: boolean | undefined = !!(optionByte & 64);\n let groupId: number | undefined;\n if (!listMode) {\n groupId = raw.payload[1];\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n refreshCache,\n listMode,\n groupId,\n });\n }\n public refreshCache: boolean;\n public listMode?: boolean;\n public groupId?: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const isListMode = this.listMode === true;\n const optionByte = (this.refreshCache ? 128 : 0)\n | (isListMode ? 64 : 0);\n this.payload = Bytes.from([\n optionByte,\n isListMode ? 0 : this.groupId!,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.groupId != undefined) {\n message[\"group id\"] = this.groupId;\n }\n if (this.listMode != undefined) {\n message[\"list mode\"] = this.listMode;\n }\n message[\"refresh cache\"] = this.refreshCache;\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCCommandListReportOptions {\n groupId: number;\n commands: ReadonlyMap<CommandClasses, readonly number[]>;\n}\n@CCCommand(AssociationGroupInfoCommand.CommandListReport)\n@ccValueProperty(\"commands\", AssociationGroupInfoCCValues.commands, (self) => [self.groupId])\nexport class AssociationGroupInfoCCCommandListReport extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCCommandListReportOptions>) {\n super(options);\n this.groupId = options.groupId;\n this.commands = options.commands;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCCommandListReport {\n validatePayload(raw.payload.length >= 2);\n const groupId = raw.payload[0];\n const listLength = raw.payload[1];\n validatePayload(raw.payload.length >= 2 + listLength);\n const listBytes = raw.payload.subarray(2, 2 + listLength);\n // Parse all CC ids and commands\n let offset = 0;\n const commands = new Map<CommandClasses, number[]>();\n while (offset < listLength) {\n const { ccId, bytesRead } = parseCCId(listBytes, offset);\n const command = listBytes[offset + bytesRead];\n if (!commands.has(ccId))\n commands.set(ccId, []);\n commands.get(ccId)!.push(command);\n offset += bytesRead + 1;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n commands,\n });\n }\n public readonly groupId: number;\n public readonly commands: ReadonlyMap<CommandClasses, readonly number[]>;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // To make it easier to encode possible extended CCs, we first\n // allocate as much space as we may need, then trim it again\n this.payload = new Bytes(2 + this.commands.size * 3);\n this.payload[0] = this.groupId;\n let offset = 2;\n for (const [ccId, commands] of this.commands) {\n for (const command of commands) {\n offset += encodeCCId(ccId, this.payload, offset);\n this.payload[offset] = command;\n offset++;\n }\n }\n this.payload[1] = offset - 2; // list length\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"group id\": this.groupId,\n commands: [...this.commands]\n .map(([cc, cmds]) => {\n return `\\n\u00B7 ${getCCName(cc)}: ${cmds\n .map((cmd) => num2hex(cmd))\n .join(\", \")}`;\n })\n .join(\"\"),\n },\n };\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCCommandListGetOptions {\n allowCache: boolean;\n groupId: number;\n}\n@CCCommand(AssociationGroupInfoCommand.CommandListGet)\n@expectedCCResponse(AssociationGroupInfoCCCommandListReport)\nexport class AssociationGroupInfoCCCommandListGet extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCCommandListGetOptions>) {\n super(options);\n this.allowCache = options.allowCache;\n this.groupId = options.groupId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCCommandListGet {\n validatePayload(raw.payload.length >= 2);\n const allowCache = !!(raw.payload[0] & 128);\n const groupId = raw.payload[1];\n return new this({\n nodeId: ctx.sourceNodeId,\n allowCache,\n groupId,\n });\n }\n public allowCache: boolean;\n public groupId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.allowCache ? 128 : 0,\n this.groupId,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"group id\": this.groupId,\n \"allow cache\": this.allowCache,\n },\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["AssociationGroupInfoCC"]
7
7
  }
@@ -609,6 +609,7 @@ let BarrierOperatorCCEventSignalingReport = (() => {
609
609
  (0, import_core.validatePayload)(raw.payload.length >= 2);
610
610
  const subsystemType = raw.payload[0];
611
611
  const subsystemState = raw.payload[1];
612
+ (0, import_core.validatePayload)((0, import_shared.isEnumMember)(import_Types.SubsystemType, subsystemType), (0, import_shared.isEnumMember)(import_Types.SubsystemState, subsystemState));
612
613
  return new this({
613
614
  nodeId: ctx.sourceNodeId,
614
615
  subsystemType,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/BarrierOperatorCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./BarrierOperatorCC._validateArgs.js\";\nconst { validateArgs_BarrierOperatorCCAPI_set, validateArgs_BarrierOperatorCCAPI_getSignalingCapabilities, validateArgs_BarrierOperatorCCAPI_getEventSignaling, validateArgs_BarrierOperatorCCAPI_setEventSignaling } = __validateArgs;\nimport { CommandClasses, type GetNode, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, MessagePriority, type NodeId, type SupervisionResult, type SupportsCC, UNKNOWN_STATE, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, enumValuesToMetadataStates, maybeUnknownToString, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, isEnumMember, noop, pick, } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, throwMissingPropertyKey, throwUnsupportedProperty, throwUnsupportedPropertyKey, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { BarrierOperatorCommand, BarrierState, SubsystemState, SubsystemType, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ApplicationStatusCCRejectedRequest } from \"./ApplicationStatusCC.js\";\nimport { BarrierOperatorCCValues } from \"./_CCValues.generated.js\";\nexport { BarrierOperatorCCValues };\n@API(CommandClasses[\"Barrier Operator\"])\nexport class BarrierOperatorCCAPI extends CCAPI {\n public supportsCommand(cmd: BarrierOperatorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case BarrierOperatorCommand.Get:\n case BarrierOperatorCommand.Set:\n case BarrierOperatorCommand.SignalingCapabilitiesGet:\n case BarrierOperatorCommand.EventSignalingGet:\n case BarrierOperatorCommand.EventSignalingSet:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.Get);\n const cc = new BarrierOperatorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"currentState\", \"position\"]);\n }\n }\n @validateArgs_BarrierOperatorCCAPI_set()\n public async set(targetState: BarrierState.Open | BarrierState.Closed): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.Set);\n const cc = new BarrierOperatorCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n targetState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_BarrierOperatorCCAPI_getSignalingCapabilities()\n public async getSignalingCapabilities(): Promise<MaybeNotKnown<readonly SubsystemType[]>> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.SignalingCapabilitiesGet);\n const cc = new BarrierOperatorCCSignalingCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCSignalingCapabilitiesReport>(cc, this.commandOptions);\n return response?.supportedSubsystemTypes;\n }\n @validateArgs_BarrierOperatorCCAPI_getEventSignaling()\n public async getEventSignaling(subsystemType: SubsystemType): Promise<MaybeNotKnown<SubsystemState>> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.EventSignalingGet);\n const cc = new BarrierOperatorCCEventSignalingGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n subsystemType,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCEventSignalingReport>(cc, this.commandOptions);\n return response?.subsystemState;\n }\n @validateArgs_BarrierOperatorCCAPI_setEventSignaling()\n public async setEventSignaling(subsystemType: SubsystemType, subsystemState: SubsystemState): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.EventSignalingSet);\n const cc = new BarrierOperatorCCEventSignalingSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n subsystemType,\n subsystemState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: BarrierOperatorCCAPI, { property, propertyKey }, value) {\n if (property === \"targetState\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n const targetValue = value === BarrierState.Closed\n ? BarrierState.Closed\n : BarrierState.Open;\n return this.set(targetValue);\n }\n else if (property === \"signalingState\") {\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n else if (typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.setEventSignaling(propertyKey, value);\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property, propertyKey }, value, _options) => {\n const valueId = {\n commandClass: this.ccId,\n property,\n propertyKey,\n };\n if (BarrierOperatorCCValues.targetState.is(valueId)) {\n const currentStateValueId = BarrierOperatorCCValues.currentState\n .endpoint(this.endpoint.index);\n const targetValue = value === BarrierState.Closed\n ? BarrierState.Closed\n : BarrierState.Open;\n return {\n // This is the target value for a split target/current state pair.\n isSplitStateTargetValue: true,\n // Barrier Operator commands may take some time to be executed.\n // Therefore we try to supervise the command execution and delay the\n // optimistic update until the final result is received.\n supervisionDelayedUpdates: true,\n supervisionOnSuccess: () => {\n this.tryGetValueDB()?.setValue(currentStateValueId, targetValue);\n },\n supervisionOnFailure: async () => {\n // The command failed, so now we don't know the status - refresh the current value\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n },\n optimisticallyUpdateRelatedValues: (supervisedAndSuccessful) => {\n // For barriers, do not update the current value unless we actually know the command was successful\n if (!supervisedAndSuccessful)\n return;\n if (this.isSinglecast()) {\n this.tryGetValueDB()?.setValue(currentStateValueId, targetValue);\n }\n else if (this.isMulticast()) {\n // Figure out which nodes were affected by this command\n const affectedNodes = this.endpoint.node.physicalNodes\n .filter((node) => node\n .getEndpoint(this.endpoint.index)\n ?.supportsCC(this.ccId));\n // and optimistically update the currentValue\n for (const node of affectedNodes) {\n this.host\n .tryGetValueDB(node.id)\n ?.setValue(currentStateValueId, targetValue);\n }\n }\n },\n verifyChanges: () => {\n if (this.isSinglecast()) {\n // We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n this.schedulePoll(currentStateValueId, targetValue);\n }\n else {\n // For multicasts, do not schedule a refresh - this could cause a LOT of traffic\n }\n },\n };\n }\n else if (BarrierOperatorCCValues.signalingState.is(valueId)) {\n const subsystemType = propertyKey as SubsystemType;\n const signalingStateValueId = BarrierOperatorCCValues\n .signalingState(subsystemType).endpoint(this.endpoint.index);\n return {\n verifyChanges: () => {\n if (this.isSinglecast()) {\n this.schedulePoll(signalingStateValueId, value, {\n // Signaling state changes are fast\n transition: \"fast\",\n });\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: BarrierOperatorCCAPI, { property, propertyKey }) {\n switch (property) {\n case \"currentState\":\n case \"position\":\n return (await this.get())?.[property];\n case \"signalingState\":\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n else if (typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n return this.getEventSignaling(propertyKey);\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n}\n@commandClass(CommandClasses[\"Barrier Operator\"])\n@implementedVersion(1)\n@ccValues(BarrierOperatorCCValues)\nexport class BarrierOperatorCC extends CommandClass {\n declare ccCommand: BarrierOperatorCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Barrier Operator\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // Create targetState value if it does not exist\n this.ensureMetadata(ctx, BarrierOperatorCCValues.targetState);\n ctx.logNode(node.id, {\n message: \"Querying signaling capabilities...\",\n direction: \"outbound\",\n });\n const resp = await api.getSignalingCapabilities();\n if (resp) {\n ctx.logNode(node.id, {\n message: `Received supported subsystem types: ${resp\n .map((t) => `\\n\u00B7 ${getEnumMemberName(SubsystemType, t)}`)\n .join(\"\")}`,\n direction: \"inbound\",\n });\n // Enable all supported subsystems\n for (const subsystemType of resp) {\n // Some devices report invalid subsystem types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(SubsystemType, subsystemType))\n continue;\n ctx.logNode(node.id, {\n message: `Enabling subsystem ${getEnumMemberName(SubsystemType, subsystemType)}...`,\n direction: \"outbound\",\n });\n await api.setEventSignaling(subsystemType, SubsystemState.On)\n .catch(noop);\n }\n }\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Barrier Operator\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n const supportedSubsystems: SubsystemType[] = this.getValue(ctx, BarrierOperatorCCValues.supportedSubsystemTypes) ?? [];\n for (const subsystemType of supportedSubsystems) {\n // Some devices report invalid subsystem types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(SubsystemType, subsystemType))\n continue;\n ctx.logNode(node.id, {\n message: `Querying event signaling state for subsystem ${getEnumMemberName(SubsystemType, subsystemType)}...`,\n direction: \"outbound\",\n });\n const state = await api.getEventSignaling(subsystemType);\n if (state != undefined) {\n ctx.logNode(node.id, {\n message: `Subsystem ${getEnumMemberName(SubsystemType, subsystemType)} has state ${getEnumMemberName(SubsystemState, state)}`,\n direction: \"inbound\",\n });\n }\n }\n ctx.logNode(node.id, {\n message: \"querying current barrier state...\",\n direction: \"outbound\",\n });\n await api.get();\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCSetOptions {\n targetState: BarrierState.Open | BarrierState.Closed;\n}\nfunction getCCResponseForBarrierOperatorCCSet(ctx: GetNode<NodeId & SupportsCC>, sent: BarrierOperatorCCSet) {\n // CC:0066.01.01.11.009: If the requested operation is prohibited by\n // the specific device class [...], the device MUST notify the requester\n // by issuing an Application Rejected Request Command\n if (sent.isSinglecast()\n && !sent.isEncapsulatedWith(CommandClasses.Supervision)\n && ctx.getNode(sent.nodeId)?.supportsCC(CommandClasses[\"Application Status\"])) {\n return ApplicationStatusCCRejectedRequest;\n }\n}\n@CCCommand(BarrierOperatorCommand.Set)\n@expectedCCResponse(getCCResponseForBarrierOperatorCCSet)\n@useSupervision()\nexport class BarrierOperatorCCSet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCSetOptions>) {\n super(options);\n this.targetState = options.targetState;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCSet {\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public targetState: BarrierState.Open | BarrierState.Closed;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.targetState]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"target state\": this.targetState },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCReportOptions {\n position: MaybeUnknown<number>;\n currentState: MaybeUnknown<BarrierState>;\n}\n@CCCommand(BarrierOperatorCommand.Report)\n@ccValueProperty(\"currentState\", BarrierOperatorCCValues.currentState)\n@ccValueProperty(\"position\", BarrierOperatorCCValues.position)\nexport class BarrierOperatorCCReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.position = options.position;\n this.currentState = options.currentState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCReport {\n validatePayload(raw.payload.length >= 1);\n // The payload byte encodes information about the state and position in a single value\n const payloadValue = raw.payload[0];\n let position: MaybeUnknown<number>;\n if (payloadValue <= 99) {\n // known position\n position = payloadValue;\n }\n else if (payloadValue === 255) {\n // known position, fully opened\n position = 100;\n }\n else {\n // unknown position\n position = UNKNOWN_STATE;\n }\n let currentState: MaybeUnknown<BarrierState>;\n if (payloadValue === BarrierState.Closed\n || payloadValue >= BarrierState.Closing) {\n // predefined states\n currentState = payloadValue;\n }\n else if (payloadValue > 0 && payloadValue <= 99) {\n // stopped at exact position\n currentState = BarrierState.Stopped;\n }\n else {\n // invalid value, assume unknown\n currentState = UNKNOWN_STATE;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n position,\n currentState,\n });\n }\n public readonly currentState: MaybeUnknown<BarrierState>;\n public readonly position: MaybeUnknown<number>;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"barrier position\": maybeUnknownToString(this.position),\n \"barrier state\": this.currentState != undefined\n ? getEnumMemberName(BarrierState, this.currentState)\n : \"unknown\",\n },\n };\n }\n}\n@CCCommand(BarrierOperatorCommand.Get)\n@expectedCCResponse(BarrierOperatorCCReport)\nexport class BarrierOperatorCCGet extends BarrierOperatorCC {\n}\n// @publicAPI\nexport interface BarrierOperatorCCSignalingCapabilitiesReportOptions {\n supportedSubsystemTypes: SubsystemType[];\n}\n@CCCommand(BarrierOperatorCommand.SignalingCapabilitiesReport)\n@ccValueProperty(\"supportedSubsystemTypes\", BarrierOperatorCCValues.supportedSubsystemTypes)\nexport class BarrierOperatorCCSignalingCapabilitiesReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCSignalingCapabilitiesReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedSubsystemTypes = options.supportedSubsystemTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCSignalingCapabilitiesReport {\n const supportedSubsystemTypes: SubsystemType[] = parseBitMask(raw.payload, SubsystemType.Audible);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedSubsystemTypes,\n });\n }\n public readonly supportedSubsystemTypes: readonly SubsystemType[];\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported types\": this.supportedSubsystemTypes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(SubsystemType, t)}`)\n .join(\"\"),\n },\n };\n }\n}\n@CCCommand(BarrierOperatorCommand.SignalingCapabilitiesGet)\n@expectedCCResponse(BarrierOperatorCCSignalingCapabilitiesReport)\nexport class BarrierOperatorCCSignalingCapabilitiesGet extends BarrierOperatorCC {\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingSetOptions {\n subsystemType: SubsystemType;\n subsystemState: SubsystemState;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingSet)\n@useSupervision()\nexport class BarrierOperatorCCEventSignalingSet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingSetOptions>) {\n super(options);\n this.subsystemType = options.subsystemType;\n this.subsystemState = options.subsystemState;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCEventSignalingSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCEventSignalingSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public subsystemType: SubsystemType;\n public subsystemState: SubsystemState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.subsystemType, this.subsystemState]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n \"subsystem state\": getEnumMemberName(SubsystemState, this.subsystemState),\n },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingReportOptions {\n subsystemType: SubsystemType;\n subsystemState: SubsystemState;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingReport)\nexport class BarrierOperatorCCEventSignalingReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.subsystemType = options.subsystemType;\n this.subsystemState = options.subsystemState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCEventSignalingReport {\n validatePayload(raw.payload.length >= 2);\n const subsystemType: SubsystemType = raw.payload[0];\n const subsystemState: SubsystemState = raw.payload[1];\n return new this({\n nodeId: ctx.sourceNodeId,\n subsystemType,\n subsystemState,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const signalingStateValue = BarrierOperatorCCValues.signalingState(this.subsystemType);\n this.ensureMetadata(ctx, signalingStateValue);\n this.setValue(ctx, signalingStateValue, this.subsystemState);\n return true;\n }\n public readonly subsystemType: SubsystemType;\n public readonly subsystemState: SubsystemState;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n \"subsystem state\": getEnumMemberName(SubsystemState, this.subsystemState),\n },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingGetOptions {\n subsystemType: SubsystemType;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingGet)\n@expectedCCResponse(BarrierOperatorCCEventSignalingReport)\nexport class BarrierOperatorCCEventSignalingGet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingGetOptions>) {\n super(options);\n this.subsystemType = options.subsystemType;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCEventSignalingGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCEventSignalingGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public subsystemType: SubsystemType;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.subsystemType]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n },\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./BarrierOperatorCC._validateArgs.js\";\nconst { validateArgs_BarrierOperatorCCAPI_set, validateArgs_BarrierOperatorCCAPI_getSignalingCapabilities, validateArgs_BarrierOperatorCCAPI_getEventSignaling, validateArgs_BarrierOperatorCCAPI_setEventSignaling } = __validateArgs;\nimport { CommandClasses, type GetNode, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, MessagePriority, type NodeId, type SupervisionResult, type SupportsCC, UNKNOWN_STATE, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, enumValuesToMetadataStates, maybeUnknownToString, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, isEnumMember, noop, pick, } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, throwMissingPropertyKey, throwUnsupportedProperty, throwUnsupportedPropertyKey, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { BarrierOperatorCommand, BarrierState, SubsystemState, SubsystemType, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ApplicationStatusCCRejectedRequest } from \"./ApplicationStatusCC.js\";\nimport { BarrierOperatorCCValues } from \"./_CCValues.generated.js\";\nexport { BarrierOperatorCCValues };\n@API(CommandClasses[\"Barrier Operator\"])\nexport class BarrierOperatorCCAPI extends CCAPI {\n public supportsCommand(cmd: BarrierOperatorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case BarrierOperatorCommand.Get:\n case BarrierOperatorCommand.Set:\n case BarrierOperatorCommand.SignalingCapabilitiesGet:\n case BarrierOperatorCommand.EventSignalingGet:\n case BarrierOperatorCommand.EventSignalingSet:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.Get);\n const cc = new BarrierOperatorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"currentState\", \"position\"]);\n }\n }\n @validateArgs_BarrierOperatorCCAPI_set()\n public async set(targetState: BarrierState.Open | BarrierState.Closed): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.Set);\n const cc = new BarrierOperatorCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n targetState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_BarrierOperatorCCAPI_getSignalingCapabilities()\n public async getSignalingCapabilities(): Promise<MaybeNotKnown<readonly SubsystemType[]>> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.SignalingCapabilitiesGet);\n const cc = new BarrierOperatorCCSignalingCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCSignalingCapabilitiesReport>(cc, this.commandOptions);\n return response?.supportedSubsystemTypes;\n }\n @validateArgs_BarrierOperatorCCAPI_getEventSignaling()\n public async getEventSignaling(subsystemType: SubsystemType): Promise<MaybeNotKnown<SubsystemState>> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.EventSignalingGet);\n const cc = new BarrierOperatorCCEventSignalingGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n subsystemType,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCEventSignalingReport>(cc, this.commandOptions);\n return response?.subsystemState;\n }\n @validateArgs_BarrierOperatorCCAPI_setEventSignaling()\n public async setEventSignaling(subsystemType: SubsystemType, subsystemState: SubsystemState): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.EventSignalingSet);\n const cc = new BarrierOperatorCCEventSignalingSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n subsystemType,\n subsystemState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: BarrierOperatorCCAPI, { property, propertyKey }, value) {\n if (property === \"targetState\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n const targetValue = value === BarrierState.Closed\n ? BarrierState.Closed\n : BarrierState.Open;\n return this.set(targetValue);\n }\n else if (property === \"signalingState\") {\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n else if (typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.setEventSignaling(propertyKey, value);\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property, propertyKey }, value, _options) => {\n const valueId = {\n commandClass: this.ccId,\n property,\n propertyKey,\n };\n if (BarrierOperatorCCValues.targetState.is(valueId)) {\n const currentStateValueId = BarrierOperatorCCValues.currentState\n .endpoint(this.endpoint.index);\n const targetValue = value === BarrierState.Closed\n ? BarrierState.Closed\n : BarrierState.Open;\n return {\n // This is the target value for a split target/current state pair.\n isSplitStateTargetValue: true,\n // Barrier Operator commands may take some time to be executed.\n // Therefore we try to supervise the command execution and delay the\n // optimistic update until the final result is received.\n supervisionDelayedUpdates: true,\n supervisionOnSuccess: () => {\n this.tryGetValueDB()?.setValue(currentStateValueId, targetValue);\n },\n supervisionOnFailure: async () => {\n // The command failed, so now we don't know the status - refresh the current value\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n },\n optimisticallyUpdateRelatedValues: (supervisedAndSuccessful) => {\n // For barriers, do not update the current value unless we actually know the command was successful\n if (!supervisedAndSuccessful)\n return;\n if (this.isSinglecast()) {\n this.tryGetValueDB()?.setValue(currentStateValueId, targetValue);\n }\n else if (this.isMulticast()) {\n // Figure out which nodes were affected by this command\n const affectedNodes = this.endpoint.node.physicalNodes\n .filter((node) => node\n .getEndpoint(this.endpoint.index)\n ?.supportsCC(this.ccId));\n // and optimistically update the currentValue\n for (const node of affectedNodes) {\n this.host\n .tryGetValueDB(node.id)\n ?.setValue(currentStateValueId, targetValue);\n }\n }\n },\n verifyChanges: () => {\n if (this.isSinglecast()) {\n // We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n this.schedulePoll(currentStateValueId, targetValue);\n }\n else {\n // For multicasts, do not schedule a refresh - this could cause a LOT of traffic\n }\n },\n };\n }\n else if (BarrierOperatorCCValues.signalingState.is(valueId)) {\n const subsystemType = propertyKey as SubsystemType;\n const signalingStateValueId = BarrierOperatorCCValues\n .signalingState(subsystemType).endpoint(this.endpoint.index);\n return {\n verifyChanges: () => {\n if (this.isSinglecast()) {\n this.schedulePoll(signalingStateValueId, value, {\n // Signaling state changes are fast\n transition: \"fast\",\n });\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: BarrierOperatorCCAPI, { property, propertyKey }) {\n switch (property) {\n case \"currentState\":\n case \"position\":\n return (await this.get())?.[property];\n case \"signalingState\":\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n else if (typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n return this.getEventSignaling(propertyKey);\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n}\n@commandClass(CommandClasses[\"Barrier Operator\"])\n@implementedVersion(1)\n@ccValues(BarrierOperatorCCValues)\nexport class BarrierOperatorCC extends CommandClass {\n declare ccCommand: BarrierOperatorCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Barrier Operator\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // Create targetState value if it does not exist\n this.ensureMetadata(ctx, BarrierOperatorCCValues.targetState);\n ctx.logNode(node.id, {\n message: \"Querying signaling capabilities...\",\n direction: \"outbound\",\n });\n const resp = await api.getSignalingCapabilities();\n if (resp) {\n ctx.logNode(node.id, {\n message: `Received supported subsystem types: ${resp\n .map((t) => `\\n\u00B7 ${getEnumMemberName(SubsystemType, t)}`)\n .join(\"\")}`,\n direction: \"inbound\",\n });\n // Enable all supported subsystems\n for (const subsystemType of resp) {\n // Some devices report invalid subsystem types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(SubsystemType, subsystemType))\n continue;\n ctx.logNode(node.id, {\n message: `Enabling subsystem ${getEnumMemberName(SubsystemType, subsystemType)}...`,\n direction: \"outbound\",\n });\n await api.setEventSignaling(subsystemType, SubsystemState.On)\n .catch(noop);\n }\n }\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Barrier Operator\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n const supportedSubsystems: SubsystemType[] = this.getValue(ctx, BarrierOperatorCCValues.supportedSubsystemTypes) ?? [];\n for (const subsystemType of supportedSubsystems) {\n // Some devices report invalid subsystem types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(SubsystemType, subsystemType))\n continue;\n ctx.logNode(node.id, {\n message: `Querying event signaling state for subsystem ${getEnumMemberName(SubsystemType, subsystemType)}...`,\n direction: \"outbound\",\n });\n const state = await api.getEventSignaling(subsystemType);\n if (state != undefined) {\n ctx.logNode(node.id, {\n message: `Subsystem ${getEnumMemberName(SubsystemType, subsystemType)} has state ${getEnumMemberName(SubsystemState, state)}`,\n direction: \"inbound\",\n });\n }\n }\n ctx.logNode(node.id, {\n message: \"querying current barrier state...\",\n direction: \"outbound\",\n });\n await api.get();\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCSetOptions {\n targetState: BarrierState.Open | BarrierState.Closed;\n}\nfunction getCCResponseForBarrierOperatorCCSet(ctx: GetNode<NodeId & SupportsCC>, sent: BarrierOperatorCCSet) {\n // CC:0066.01.01.11.009: If the requested operation is prohibited by\n // the specific device class [...], the device MUST notify the requester\n // by issuing an Application Rejected Request Command\n if (sent.isSinglecast()\n && !sent.isEncapsulatedWith(CommandClasses.Supervision)\n && ctx.getNode(sent.nodeId)?.supportsCC(CommandClasses[\"Application Status\"])) {\n return ApplicationStatusCCRejectedRequest;\n }\n}\n@CCCommand(BarrierOperatorCommand.Set)\n@expectedCCResponse(getCCResponseForBarrierOperatorCCSet)\n@useSupervision()\nexport class BarrierOperatorCCSet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCSetOptions>) {\n super(options);\n this.targetState = options.targetState;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCSet {\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public targetState: BarrierState.Open | BarrierState.Closed;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.targetState]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"target state\": this.targetState },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCReportOptions {\n position: MaybeUnknown<number>;\n currentState: MaybeUnknown<BarrierState>;\n}\n@CCCommand(BarrierOperatorCommand.Report)\n@ccValueProperty(\"currentState\", BarrierOperatorCCValues.currentState)\n@ccValueProperty(\"position\", BarrierOperatorCCValues.position)\nexport class BarrierOperatorCCReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.position = options.position;\n this.currentState = options.currentState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCReport {\n validatePayload(raw.payload.length >= 1);\n // The payload byte encodes information about the state and position in a single value\n const payloadValue = raw.payload[0];\n let position: MaybeUnknown<number>;\n if (payloadValue <= 99) {\n // known position\n position = payloadValue;\n }\n else if (payloadValue === 255) {\n // known position, fully opened\n position = 100;\n }\n else {\n // unknown position\n position = UNKNOWN_STATE;\n }\n let currentState: MaybeUnknown<BarrierState>;\n if (payloadValue === BarrierState.Closed\n || payloadValue >= BarrierState.Closing) {\n // predefined states\n currentState = payloadValue;\n }\n else if (payloadValue > 0 && payloadValue <= 99) {\n // stopped at exact position\n currentState = BarrierState.Stopped;\n }\n else {\n // invalid value, assume unknown\n currentState = UNKNOWN_STATE;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n position,\n currentState,\n });\n }\n public readonly currentState: MaybeUnknown<BarrierState>;\n public readonly position: MaybeUnknown<number>;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"barrier position\": maybeUnknownToString(this.position),\n \"barrier state\": this.currentState != undefined\n ? getEnumMemberName(BarrierState, this.currentState)\n : \"unknown\",\n },\n };\n }\n}\n@CCCommand(BarrierOperatorCommand.Get)\n@expectedCCResponse(BarrierOperatorCCReport)\nexport class BarrierOperatorCCGet extends BarrierOperatorCC {\n}\n// @publicAPI\nexport interface BarrierOperatorCCSignalingCapabilitiesReportOptions {\n supportedSubsystemTypes: SubsystemType[];\n}\n@CCCommand(BarrierOperatorCommand.SignalingCapabilitiesReport)\n@ccValueProperty(\"supportedSubsystemTypes\", BarrierOperatorCCValues.supportedSubsystemTypes)\nexport class BarrierOperatorCCSignalingCapabilitiesReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCSignalingCapabilitiesReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedSubsystemTypes = options.supportedSubsystemTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCSignalingCapabilitiesReport {\n const supportedSubsystemTypes: SubsystemType[] = parseBitMask(raw.payload, SubsystemType.Audible);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedSubsystemTypes,\n });\n }\n public readonly supportedSubsystemTypes: readonly SubsystemType[];\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported types\": this.supportedSubsystemTypes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(SubsystemType, t)}`)\n .join(\"\"),\n },\n };\n }\n}\n@CCCommand(BarrierOperatorCommand.SignalingCapabilitiesGet)\n@expectedCCResponse(BarrierOperatorCCSignalingCapabilitiesReport)\nexport class BarrierOperatorCCSignalingCapabilitiesGet extends BarrierOperatorCC {\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingSetOptions {\n subsystemType: SubsystemType;\n subsystemState: SubsystemState;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingSet)\n@useSupervision()\nexport class BarrierOperatorCCEventSignalingSet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingSetOptions>) {\n super(options);\n this.subsystemType = options.subsystemType;\n this.subsystemState = options.subsystemState;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCEventSignalingSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCEventSignalingSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public subsystemType: SubsystemType;\n public subsystemState: SubsystemState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.subsystemType, this.subsystemState]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n \"subsystem state\": getEnumMemberName(SubsystemState, this.subsystemState),\n },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingReportOptions {\n subsystemType: SubsystemType;\n subsystemState: SubsystemState;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingReport)\nexport class BarrierOperatorCCEventSignalingReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.subsystemType = options.subsystemType;\n this.subsystemState = options.subsystemState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCEventSignalingReport {\n validatePayload(raw.payload.length >= 2);\n const subsystemType: SubsystemType = raw.payload[0];\n const subsystemState: SubsystemState = raw.payload[1];\n validatePayload(isEnumMember(SubsystemType, subsystemType), isEnumMember(SubsystemState, subsystemState));\n return new this({\n nodeId: ctx.sourceNodeId,\n subsystemType,\n subsystemState,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const signalingStateValue = BarrierOperatorCCValues.signalingState(this.subsystemType);\n this.ensureMetadata(ctx, signalingStateValue);\n this.setValue(ctx, signalingStateValue, this.subsystemState);\n return true;\n }\n public readonly subsystemType: SubsystemType;\n public readonly subsystemState: SubsystemState;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n \"subsystem state\": getEnumMemberName(SubsystemState, this.subsystemState),\n },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingGetOptions {\n subsystemType: SubsystemType;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingGet)\n@expectedCCResponse(BarrierOperatorCCEventSignalingReport)\nexport class BarrierOperatorCCEventSignalingGet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingGetOptions>) {\n super(options);\n this.subsystemType = options.subsystemType;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCEventSignalingGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCEventSignalingGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public subsystemType: SubsystemType;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.subsystemType]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n },\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -305,6 +305,7 @@ let BinarySensorCCReport = (() => {
305
305
  if (raw.payload.length >= 2) {
306
306
  type = raw.payload[1];
307
307
  }
308
+ (0, import_core.validatePayload)((0, import_shared.isEnumMember)(import_Types.BinarySensorType, type));
308
309
  return new this({
309
310
  nodeId: ctx.sourceNodeId,
310
311
  value,
@@ -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 });\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);\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 });\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 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, 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 });\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);\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 });\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
  }
@@ -502,6 +502,7 @@ let ColorSwitchCCReport = (() => {
502
502
  static from(raw, ctx) {
503
503
  (0, import_core.validatePayload)(raw.payload.length >= 2);
504
504
  const colorComponent = raw.payload[0];
505
+ (0, import_core.validatePayload)((0, import_shared.isEnumMember)(import_Types.ColorComponent, colorComponent));
505
506
  const currentValue = raw.payload[1];
506
507
  let targetValue;
507
508
  let duration;