@zwave-js/cc 15.25.2 → 15.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/build/cjs/cc/AlarmSensorCC.js +10 -14
  2. package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
  3. package/build/cjs/cc/AssociationCC.d.ts +1 -1
  4. package/build/cjs/cc/AssociationCC.js.map +1 -1
  5. package/build/cjs/cc/AssociationGroupInfoCC.js +16 -16
  6. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  7. package/build/cjs/cc/BarrierOperatorCC.js +4 -4
  8. package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
  9. package/build/cjs/cc/BinarySensorCC.js +3 -3
  10. package/build/cjs/cc/BinarySensorCC.js.map +2 -2
  11. package/build/cjs/cc/CentralSceneCC.js +7 -6
  12. package/build/cjs/cc/CentralSceneCC.js.map +2 -2
  13. package/build/cjs/cc/ColorSwitchCC.js +4 -4
  14. package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
  15. package/build/cjs/cc/ConfigurationCC.js +22 -25
  16. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  17. package/build/cjs/cc/DoorLockCC.js +44 -60
  18. package/build/cjs/cc/DoorLockCC.js.map +2 -2
  19. package/build/cjs/cc/HumidityControlModeCC.js +4 -5
  20. package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
  21. package/build/cjs/cc/HumidityControlSetpointCC.js +14 -14
  22. package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
  23. package/build/cjs/cc/IrrigationCC.js +21 -25
  24. package/build/cjs/cc/IrrigationCC.js.map +2 -2
  25. package/build/cjs/cc/MeterCC.js +9 -10
  26. package/build/cjs/cc/MeterCC.js.map +2 -2
  27. package/build/cjs/cc/MultiChannelCC.d.ts +1 -1
  28. package/build/cjs/cc/MultiChannelCC.js +17 -21
  29. package/build/cjs/cc/MultiChannelCC.js.map +2 -2
  30. package/build/cjs/cc/MultilevelSensorCC.js +8 -6
  31. package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
  32. package/build/cjs/cc/NotificationCC.js +4 -8
  33. package/build/cjs/cc/NotificationCC.js.map +2 -2
  34. package/build/cjs/cc/ProtectionCC.js +11 -12
  35. package/build/cjs/cc/ProtectionCC.js.map +2 -2
  36. package/build/cjs/cc/Security2CC.js +12 -22
  37. package/build/cjs/cc/Security2CC.js.map +2 -2
  38. package/build/cjs/cc/SecurityCC.js +8 -16
  39. package/build/cjs/cc/SecurityCC.js.map +2 -2
  40. package/build/cjs/cc/ThermostatFanModeCC.js +4 -4
  41. package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
  42. package/build/cjs/cc/ThermostatModeCC.js +4 -4
  43. package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
  44. package/build/cjs/cc/ThermostatOperatingStateCC.js +1 -2
  45. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
  46. package/build/cjs/cc/ThermostatSetpointCC.js +4 -3
  47. package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
  48. package/build/cjs/cc/UserCodeCC.js +2 -4
  49. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  50. package/build/cjs/cc/UserCredentialCC.js +29 -1
  51. package/build/cjs/cc/UserCredentialCC.js.map +2 -2
  52. package/build/cjs/cc/WindowCoveringCC.js +5 -5
  53. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  54. package/build/cjs/cc/_CCValues.generated.d.ts +4 -4
  55. package/build/cjs/cc/_CCValues.generated.js +2 -2
  56. package/build/cjs/cc/_CCValues.generated.js.map +1 -1
  57. package/build/cjs/cc/index.d.ts +3 -3
  58. package/build/cjs/cc/index.js.map +2 -2
  59. package/build/cjs/lib/CommandClass.d.ts +3 -1
  60. package/build/cjs/lib/CommandClass.js +25 -3
  61. package/build/cjs/lib/CommandClass.js.map +2 -2
  62. package/build/cjs/lib/Security2/Extension.d.ts +6 -4
  63. package/build/cjs/lib/Security2/Extension.js +22 -20
  64. package/build/cjs/lib/Security2/Extension.js.map +2 -2
  65. package/build/cjs/lib/_Types.js.map +1 -1
  66. package/build/cjs/lib/utils.js +14 -8
  67. package/build/cjs/lib/utils.js.map +2 -2
  68. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  69. package/build/esm/cc/AlarmSensorCC.js +11 -17
  70. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  71. package/build/esm/cc/AssociationCC.d.ts +1 -1
  72. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  73. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  74. package/build/esm/cc/AssociationGroupInfoCC.js +18 -21
  75. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  76. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  77. package/build/esm/cc/BarrierOperatorCC.js +5 -7
  78. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  79. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  80. package/build/esm/cc/BinarySensorCC.js +4 -6
  81. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  82. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  83. package/build/esm/cc/CentralSceneCC.js +8 -8
  84. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  85. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  86. package/build/esm/cc/ColorSwitchCC.js +5 -7
  87. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  88. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  89. package/build/esm/cc/ConfigurationCC.js +29 -29
  90. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  91. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  92. package/build/esm/cc/DoorLockCC.js +70 -73
  93. package/build/esm/cc/DoorLockCC.js.map +1 -1
  94. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  95. package/build/esm/cc/HumidityControlModeCC.js +5 -8
  96. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  97. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  98. package/build/esm/cc/HumidityControlSetpointCC.js +15 -22
  99. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  100. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  101. package/build/esm/cc/IrrigationCC.js +26 -24
  102. package/build/esm/cc/IrrigationCC.js.map +1 -1
  103. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  104. package/build/esm/cc/MeterCC.js +12 -18
  105. package/build/esm/cc/MeterCC.js.map +1 -1
  106. package/build/esm/cc/MultiChannelCC.d.ts +1 -1
  107. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  108. package/build/esm/cc/MultiChannelCC.js +18 -23
  109. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  110. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  111. package/build/esm/cc/MultilevelSensorCC.js +11 -19
  112. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  113. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  114. package/build/esm/cc/NotificationCC.js +6 -13
  115. package/build/esm/cc/NotificationCC.js.map +1 -1
  116. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  117. package/build/esm/cc/ProtectionCC.js +12 -21
  118. package/build/esm/cc/ProtectionCC.js.map +1 -1
  119. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  120. package/build/esm/cc/Security2CC.js +13 -31
  121. package/build/esm/cc/Security2CC.js.map +1 -1
  122. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  123. package/build/esm/cc/SecurityCC.js +9 -21
  124. package/build/esm/cc/SecurityCC.js.map +1 -1
  125. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  126. package/build/esm/cc/ThermostatFanModeCC.js +5 -7
  127. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  128. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  129. package/build/esm/cc/ThermostatModeCC.js +5 -7
  130. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  131. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  132. package/build/esm/cc/ThermostatOperatingStateCC.js +2 -4
  133. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  134. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  135. package/build/esm/cc/ThermostatSetpointCC.js +5 -9
  136. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  137. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  138. package/build/esm/cc/UserCodeCC.js +3 -7
  139. package/build/esm/cc/UserCodeCC.js.map +1 -1
  140. package/build/esm/cc/UserCredentialCC.d.ts.map +1 -1
  141. package/build/esm/cc/UserCredentialCC.js +44 -1
  142. package/build/esm/cc/UserCredentialCC.js.map +1 -1
  143. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  144. package/build/esm/cc/WindowCoveringCC.js +6 -9
  145. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  146. package/build/esm/cc/_CCValues.generated.d.ts +4 -4
  147. package/build/esm/cc/_CCValues.generated.js +2 -2
  148. package/build/esm/cc/_CCValues.generated.js.map +1 -1
  149. package/build/esm/cc/index.d.ts +3 -3
  150. package/build/esm/cc/index.d.ts.map +1 -1
  151. package/build/esm/cc/index.js.map +1 -1
  152. package/build/esm/lib/CommandClass.d.ts +3 -1
  153. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  154. package/build/esm/lib/CommandClass.js +30 -4
  155. package/build/esm/lib/CommandClass.js.map +1 -1
  156. package/build/esm/lib/Security2/Extension.d.ts +6 -4
  157. package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
  158. package/build/esm/lib/Security2/Extension.js +23 -21
  159. package/build/esm/lib/Security2/Extension.js.map +1 -1
  160. package/build/esm/lib/_Types.js +1 -1
  161. package/build/esm/lib/utils.d.ts.map +1 -1
  162. package/build/esm/lib/utils.js +15 -9
  163. package/build/esm/lib/utils.js.map +1 -1
  164. package/package.json +5 -5
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/ThermostatOperatingStateCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./ThermostatOperatingStateCC._validateArgs.js\";\nconst { validateArgs_ThermostatOperatingStateCCAPI_getLogging } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, ValueMetadata, type WithAddress, encodeBitMask, enumValuesToMetadataStates, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatOperatingState, ThermostatOperatingStateCommand, type ThermostatOperatingStateLoggingData, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatOperatingStateCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatOperatingStateCCValues };\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses[\"Thermostat Operating State\"])\nexport class ThermostatOperatingStateCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: ThermostatOperatingStateCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatOperatingStateCommand.Get:\n return true; // This is mandatory\n case ThermostatOperatingStateCommand.LoggingSupportedGet:\n case ThermostatOperatingStateCommand.LoggingGet:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatOperatingStateCCAPI, { property }) {\n switch (property) {\n case \"state\":\n return this.get();\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n public async get(): Promise<MaybeNotKnown<ThermostatOperatingState>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.Get);\n const cc = new ThermostatOperatingStateCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCReport>(cc, this.commandOptions);\n return response?.state;\n }\n public async getSupportedLoggingTypes(): Promise<MaybeNotKnown<readonly ThermostatOperatingState[]>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.LoggingSupportedGet);\n const cc = new ThermostatOperatingStateCCLoggingSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCLoggingSupportedReport>(cc, this.commandOptions);\n return response?.supportedLoggingTypes;\n }\n @validateArgs_ThermostatOperatingStateCCAPI_getLogging()\n public async getLogging(states: ThermostatOperatingState[]): Promise<MaybeNotKnown<ReadonlyMap<ThermostatOperatingState, ThermostatOperatingStateLoggingData>>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.LoggingGet);\n const cc = new ThermostatOperatingStateCCLoggingGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n requestedStates: states,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCLoggingReport>(cc, this.commandOptions);\n return response?.loggingData;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Operating State\"])\n@implementedVersion(2)\n@ccValues(ThermostatOperatingStateCCValues)\nexport class ThermostatOperatingStateCC extends CommandClass {\n declare ccCommand: ThermostatOperatingStateCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx, { tag: \"interview\" });\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Operating State\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying thermostat operating state...\",\n direction: \"outbound\",\n });\n const state = await api.get();\n if (state != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received current thermostat operating state: ${getEnumMemberName(ThermostatOperatingState, state)}`,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCReportOptions {\n state: ThermostatOperatingState;\n}\n@CCCommand(ThermostatOperatingStateCommand.Report)\n@ccValueProperty(\"state\", ThermostatOperatingStateCCValues.operatingState)\nexport class ThermostatOperatingStateCCReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCReportOptions>) {\n super(options);\n this.state = options.state;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCReport {\n validatePayload(raw.payload.length >= 1);\n const state: ThermostatOperatingState = raw.payload[0];\n validatePayload(state <= ThermostatOperatingState[\"3rd Stage Aux Heat\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n state,\n });\n }\n public readonly state: ThermostatOperatingState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.state]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n state: getEnumMemberName(ThermostatOperatingState, this.state),\n },\n };\n }\n}\n@CCCommand(ThermostatOperatingStateCommand.Get)\n@expectedCCResponse(ThermostatOperatingStateCCReport)\nexport class ThermostatOperatingStateCCGet extends ThermostatOperatingStateCC {\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingSupportedReportOptions {\n supportedLoggingTypes: ThermostatOperatingState[];\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingSupportedReport)\nexport class ThermostatOperatingStateCCLoggingSupportedReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingSupportedReportOptions>) {\n super(options);\n this.supportedLoggingTypes = options.supportedLoggingTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingSupportedReport {\n // Bit 0 is not allocated, bit 1 = Operating State 1, etc.\n const supportedLoggingTypes: ThermostatOperatingState[] = parseBitMask(raw.payload, ThermostatOperatingState[\"Idle\"])\n // Bit 0 MUST be set to zero, so we ignore it when set\n .filter((state) => state !== ThermostatOperatingState.Idle);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedLoggingTypes,\n });\n }\n public readonly supportedLoggingTypes: ThermostatOperatingState[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const supportedLoggingTypes = this.supportedLoggingTypes\n // Bit 0 MUST be set to zero, so we filter it out\n .filter((t) => t !== ThermostatOperatingState.Idle);\n this.payload = encodeBitMask(supportedLoggingTypes, undefined, ThermostatOperatingState[\"Idle\"]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported logging types\": this.supportedLoggingTypes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(ThermostatOperatingState, t)}`)\n .join(\"\"),\n },\n };\n }\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingSupportedGet)\n@expectedCCResponse(ThermostatOperatingStateCCLoggingSupportedReport)\nexport class ThermostatOperatingStateCCLoggingSupportedGet extends ThermostatOperatingStateCC {\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingReportOptions {\n reportsToFollow: number;\n loggingData: Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>;\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingReport)\nexport class ThermostatOperatingStateCCLoggingReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingReportOptions>) {\n super(options);\n this.reportsToFollow = options.reportsToFollow;\n this.loggingData = options.loggingData;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingReport {\n validatePayload(raw.payload.length >= 1);\n const reportsToFollow = raw.payload[0];\n // Each log entry is 5 bytes:\n // Reserved[7:4]+StateType[3:0], TodayH, TodayM, YesterdayH, YesterdayM\n const loggingData = new Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>();\n let offset = 1;\n while (offset + 5 <= raw.payload.length) {\n const state: ThermostatOperatingState = raw.payload[offset++]\n & 0b1111;\n loggingData.set(state, {\n usageTodayHours: raw.payload[offset++],\n usageTodayMinutes: raw.payload[offset++],\n usageYesterdayHours: raw.payload[offset++],\n usageYesterdayMinutes: raw.payload[offset++],\n });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n reportsToFollow,\n loggingData,\n });\n }\n public reportsToFollow: number;\n public loggingData: Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>;\n public getPartialCCSessionId(): Record<string, any> | undefined {\n return {};\n }\n public getRemainingSegments(): number | undefined {\n return this.reportsToFollow;\n }\n public mergePartialCCs(partials: ThermostatOperatingStateCCLoggingReport[], _ctx: CCParsingContext): Promise<void> {\n // Merge all logging data maps from partial reports\n const merged = new Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>();\n for (const partial of partials) {\n for (const [state, data] of partial.loggingData) {\n merged.set(state, data);\n }\n }\n for (const [state, data] of this.loggingData) {\n merged.set(state, data);\n }\n this.loggingData = merged;\n return Promise.resolve();\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = new Bytes(1 + this.loggingData.size * 5);\n this.payload[0] = this.reportsToFollow;\n let offset = 1;\n for (const [state, entry] of this.loggingData) {\n this.payload[offset++] = state & 0b1111;\n this.payload[offset++] = entry.usageTodayHours;\n this.payload[offset++] = entry.usageTodayMinutes;\n this.payload[offset++] = entry.usageYesterdayHours;\n this.payload[offset++] = entry.usageYesterdayMinutes;\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"reports to follow\": this.reportsToFollow,\n };\n for (const [state, entry] of this.loggingData) {\n const stateName = getEnumMemberName(ThermostatOperatingState, state);\n message[`${stateName} today`] =\n `${entry.usageTodayHours}h ${entry.usageTodayMinutes}m`;\n message[`${stateName} yesterday`] =\n `${entry.usageYesterdayHours}h ${entry.usageYesterdayMinutes}m`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingGetOptions {\n requestedStates: ThermostatOperatingState[];\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingGet)\n@expectedCCResponse(ThermostatOperatingStateCCLoggingReport)\nexport class ThermostatOperatingStateCCLoggingGet extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingGetOptions>) {\n super(options);\n this.requestedStates = options.requestedStates;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingGet {\n const requestedStates: ThermostatOperatingState[] = parseBitMask(raw.payload, ThermostatOperatingState[\"Idle\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n requestedStates,\n });\n }\n public requestedStates: ThermostatOperatingState[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.requestedStates, undefined, ThermostatOperatingState[\"Idle\"]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"requested states\": this.requestedStates\n .map((t) => getEnumMemberName(ThermostatOperatingState, t))\n .join(\", \"),\n },\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./ThermostatOperatingStateCC._validateArgs.js\";\nconst { validateArgs_ThermostatOperatingStateCCAPI_getLogging } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, ValueMetadata, type WithAddress, encodeBitMask, enumValuesToMetadataStates, logList, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatOperatingState, ThermostatOperatingStateCommand, type ThermostatOperatingStateLoggingData, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatOperatingStateCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatOperatingStateCCValues };\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses[\"Thermostat Operating State\"])\nexport class ThermostatOperatingStateCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: ThermostatOperatingStateCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatOperatingStateCommand.Get:\n return true; // This is mandatory\n case ThermostatOperatingStateCommand.LoggingSupportedGet:\n case ThermostatOperatingStateCommand.LoggingGet:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatOperatingStateCCAPI, { property }) {\n switch (property) {\n case \"state\":\n return this.get();\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n public async get(): Promise<MaybeNotKnown<ThermostatOperatingState>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.Get);\n const cc = new ThermostatOperatingStateCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCReport>(cc, this.commandOptions);\n return response?.state;\n }\n public async getSupportedLoggingTypes(): Promise<MaybeNotKnown<readonly ThermostatOperatingState[]>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.LoggingSupportedGet);\n const cc = new ThermostatOperatingStateCCLoggingSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCLoggingSupportedReport>(cc, this.commandOptions);\n return response?.supportedLoggingTypes;\n }\n @validateArgs_ThermostatOperatingStateCCAPI_getLogging()\n public async getLogging(states: ThermostatOperatingState[]): Promise<MaybeNotKnown<ReadonlyMap<ThermostatOperatingState, ThermostatOperatingStateLoggingData>>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.LoggingGet);\n const cc = new ThermostatOperatingStateCCLoggingGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n requestedStates: states,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCLoggingReport>(cc, this.commandOptions);\n return response?.loggingData;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Operating State\"])\n@implementedVersion(2)\n@ccValues(ThermostatOperatingStateCCValues)\nexport class ThermostatOperatingStateCC extends CommandClass {\n declare ccCommand: ThermostatOperatingStateCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx, { tag: \"interview\" });\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Operating State\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying thermostat operating state...\",\n direction: \"outbound\",\n });\n const state = await api.get();\n if (state != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received current thermostat operating state: ${getEnumMemberName(ThermostatOperatingState, state)}`,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCReportOptions {\n state: ThermostatOperatingState;\n}\n@CCCommand(ThermostatOperatingStateCommand.Report)\n@ccValueProperty(\"state\", ThermostatOperatingStateCCValues.operatingState)\nexport class ThermostatOperatingStateCCReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCReportOptions>) {\n super(options);\n this.state = options.state;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCReport {\n validatePayload(raw.payload.length >= 1);\n const state: ThermostatOperatingState = raw.payload[0];\n validatePayload(state <= ThermostatOperatingState[\"3rd Stage Aux Heat\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n state,\n });\n }\n public readonly state: ThermostatOperatingState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.state]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n state: getEnumMemberName(ThermostatOperatingState, this.state),\n },\n };\n }\n}\n@CCCommand(ThermostatOperatingStateCommand.Get)\n@expectedCCResponse(ThermostatOperatingStateCCReport)\nexport class ThermostatOperatingStateCCGet extends ThermostatOperatingStateCC {\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingSupportedReportOptions {\n supportedLoggingTypes: ThermostatOperatingState[];\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingSupportedReport)\nexport class ThermostatOperatingStateCCLoggingSupportedReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingSupportedReportOptions>) {\n super(options);\n this.supportedLoggingTypes = options.supportedLoggingTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingSupportedReport {\n // Bit 0 is not allocated, bit 1 = Operating State 1, etc.\n const supportedLoggingTypes: ThermostatOperatingState[] = parseBitMask(raw.payload, ThermostatOperatingState[\"Idle\"])\n // Bit 0 MUST be set to zero, so we ignore it when set\n .filter((state) => state !== ThermostatOperatingState.Idle);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedLoggingTypes,\n });\n }\n public readonly supportedLoggingTypes: ThermostatOperatingState[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const supportedLoggingTypes = this.supportedLoggingTypes\n // Bit 0 MUST be set to zero, so we filter it out\n .filter((t) => t !== ThermostatOperatingState.Idle);\n this.payload = encodeBitMask(supportedLoggingTypes, undefined, ThermostatOperatingState[\"Idle\"]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported logging types\": logList(this.supportedLoggingTypes.map((t) => getEnumMemberName(ThermostatOperatingState, t))),\n },\n };\n }\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingSupportedGet)\n@expectedCCResponse(ThermostatOperatingStateCCLoggingSupportedReport)\nexport class ThermostatOperatingStateCCLoggingSupportedGet extends ThermostatOperatingStateCC {\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingReportOptions {\n reportsToFollow: number;\n loggingData: Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>;\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingReport)\nexport class ThermostatOperatingStateCCLoggingReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingReportOptions>) {\n super(options);\n this.reportsToFollow = options.reportsToFollow;\n this.loggingData = options.loggingData;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingReport {\n validatePayload(raw.payload.length >= 1);\n const reportsToFollow = raw.payload[0];\n // Each log entry is 5 bytes:\n // Reserved[7:4]+StateType[3:0], TodayH, TodayM, YesterdayH, YesterdayM\n const loggingData = new Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>();\n let offset = 1;\n while (offset + 5 <= raw.payload.length) {\n const state: ThermostatOperatingState = raw.payload[offset++]\n & 0b1111;\n loggingData.set(state, {\n usageTodayHours: raw.payload[offset++],\n usageTodayMinutes: raw.payload[offset++],\n usageYesterdayHours: raw.payload[offset++],\n usageYesterdayMinutes: raw.payload[offset++],\n });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n reportsToFollow,\n loggingData,\n });\n }\n public reportsToFollow: number;\n public loggingData: Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>;\n public getPartialCCSessionId(): Record<string, any> | undefined {\n return {};\n }\n public getRemainingSegments(): number | undefined {\n return this.reportsToFollow;\n }\n public mergePartialCCs(partials: ThermostatOperatingStateCCLoggingReport[], _ctx: CCParsingContext): Promise<void> {\n // Merge all logging data maps from partial reports\n const merged = new Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>();\n for (const partial of partials) {\n for (const [state, data] of partial.loggingData) {\n merged.set(state, data);\n }\n }\n for (const [state, data] of this.loggingData) {\n merged.set(state, data);\n }\n this.loggingData = merged;\n return Promise.resolve();\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = new Bytes(1 + this.loggingData.size * 5);\n this.payload[0] = this.reportsToFollow;\n let offset = 1;\n for (const [state, entry] of this.loggingData) {\n this.payload[offset++] = state & 0b1111;\n this.payload[offset++] = entry.usageTodayHours;\n this.payload[offset++] = entry.usageTodayMinutes;\n this.payload[offset++] = entry.usageYesterdayHours;\n this.payload[offset++] = entry.usageYesterdayMinutes;\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"reports to follow\": this.reportsToFollow,\n };\n for (const [state, entry] of this.loggingData) {\n const stateName = getEnumMemberName(ThermostatOperatingState, state);\n message[`${stateName} today`] =\n `${entry.usageTodayHours}h ${entry.usageTodayMinutes}m`;\n message[`${stateName} yesterday`] =\n `${entry.usageYesterdayHours}h ${entry.usageYesterdayMinutes}m`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingGetOptions {\n requestedStates: ThermostatOperatingState[];\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingGet)\n@expectedCCResponse(ThermostatOperatingStateCCLoggingReport)\nexport class ThermostatOperatingStateCCLoggingGet extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingGetOptions>) {\n super(options);\n this.requestedStates = options.requestedStates;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingGet {\n const requestedStates: ThermostatOperatingState[] = parseBitMask(raw.payload, ThermostatOperatingState[\"Idle\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n requestedStates,\n });\n }\n public requestedStates: ThermostatOperatingState[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.requestedStates, undefined, ThermostatOperatingState[\"Idle\"]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"requested states\": this.requestedStates\n .map((t) => getEnumMemberName(ThermostatOperatingState, t))\n .join(\", \"),\n },\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -290,7 +290,9 @@ let ThermostatSetpointCC = (() => {
290
290
  const resp = await api.getSupportedSetpointTypes();
291
291
  if (resp) {
292
292
  setpointTypes = [...resp];
293
- const logMessage = "received supported setpoint types:\n" + setpointTypes.map((type) => (0, import_shared.getEnumMemberName)(import_Types.ThermostatSetpointType, type)).map((name) => `\xB7 ${name}`).join("\n");
293
+ const logMessage = (0, import_core.logText)("received supported setpoint types:", {
294
+ nested: (0, import_core.logList)(setpointTypes.map((type) => (0, import_shared.getEnumMemberName)(import_Types.ThermostatSetpointType, type)))
295
+ });
294
296
  ctx.logNode(node.id, {
295
297
  endpoint: this.endpointIndex,
296
298
  message: logMessage,
@@ -739,8 +741,7 @@ let ThermostatSetpointCCSupportedReport = (() => {
739
741
  return {
740
742
  ...super.toLogEntry(ctx),
741
743
  message: {
742
- "supported setpoint types": this.supportedSetpointTypes.map((t) => `
743
- \xB7 ${(0, import_shared.getEnumMemberName)(import_Types.ThermostatSetpointType, t)}`).join("")
744
+ "supported setpoint types": (0, import_core.logList)(this.supportedSetpointTypes.map((t) => (0, import_shared.getEnumMemberName)(import_Types.ThermostatSetpointType, t)))
744
745
  }
745
746
  };
746
747
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/ThermostatSetpointCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./ThermostatSetpointCC._validateArgs.js\";\nconst { validateArgs_ThermostatSetpointCCAPI_get, validateArgs_ThermostatSetpointCCAPI_set, validateArgs_ThermostatSetpointCCAPI_getCapabilities } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type Scale, type SupervisionResult, ValueMetadata, type ValueMetadataNumeric, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, encodeFloatWithScale, getNamedScale, getUnknownScale, parseBitMask, parseFloatWithScale, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatSetpointCommand, ThermostatSetpointType, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\n// This array is used to map the advertised supported types (interpretation A)\n// to the actual enum values\nconst thermostatSetpointTypeMap = [\n 0x00,\n 0x01,\n 0x02,\n 0x07,\n 0x08,\n 0x09,\n 0x0a,\n 0x0b,\n 0x0c,\n 0x0d,\n 0x0e,\n 0x0f,\n];\nfunction getScale(scale: number): Scale {\n return getNamedScale(\"temperature\", scale as any)\n ?? getUnknownScale(scale);\n}\nfunction getSetpointUnit(scale: number): string {\n return getScale(scale).unit ?? \"\";\n}\nimport { ThermostatSetpointCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatSetpointCCValues };\n@API(CommandClasses[\"Thermostat Setpoint\"])\nexport class ThermostatSetpointCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatSetpointCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatSetpointCommand.Get:\n case ThermostatSetpointCommand.SupportedGet:\n return this.isSinglecast();\n case ThermostatSetpointCommand.Set:\n return true; // This is mandatory\n case ThermostatSetpointCommand.CapabilitiesGet:\n return this.version >= 3 && this.isSinglecast();\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: ThermostatSetpointCCAPI, { property, propertyKey }, value) {\n if (property !== \"setpoint\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof propertyKey !== \"number\") {\n throw new ZWaveError(`${CommandClasses[this.ccId]}: \"${property}\" must be further specified by a numeric property key`, ZWaveErrorCodes.Argument_Invalid);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n // SDS14223: The Scale field value MUST be identical to the value received in the Thermostat Setpoint Report for the\n // actual Setpoint Type during the node interview. Fall back to the first scale if none is known\n const preferredScale = this.tryGetValueDB()?.getValue<number>(ThermostatSetpointCCValues.setpointScale(propertyKey).endpoint(this.endpoint.index));\n const result = await this.set(propertyKey, value, preferredScale ?? 0);\n // Verify the current value after a delay, unless the command was supervised and successful\n if (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n // TODO: Ideally this would be a short delay, but some thermostats like Remotec ZXT-600\n // aren't able to handle the GET this quickly.\n this.schedulePoll({ property, propertyKey }, value);\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatSetpointCCAPI, { property, propertyKey }) {\n switch (property) {\n case \"setpoint\":\n if (typeof propertyKey !== \"number\") {\n throw new ZWaveError(`${CommandClasses[this.ccId]}: \"${property}\" must be further specified by a numeric property key`, ZWaveErrorCodes.Argument_Invalid);\n }\n return (await this.get(propertyKey))?.value;\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n @validateArgs_ThermostatSetpointCCAPI_get()\n public async get(setpointType: ThermostatSetpointType): Promise<{\n value: number;\n scale: Scale;\n } | undefined> {\n this.assertSupportsCommand(ThermostatSetpointCommand, ThermostatSetpointCommand.Get);\n const cc = new ThermostatSetpointCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n setpointType,\n });\n const response = await this.host.sendCommand<ThermostatSetpointCCReport>(cc, this.commandOptions);\n if (!response)\n return;\n if (response.type !== ThermostatSetpointType[\"N/A\"]) {\n // This is a supported setpoint\n const scale = getScale(response.scale);\n return {\n value: response.value,\n scale,\n };\n }\n }\n @validateArgs_ThermostatSetpointCCAPI_set()\n public async set(setpointType: ThermostatSetpointType, value: number, scale: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatSetpointCommand, ThermostatSetpointCommand.Set);\n const cc = new ThermostatSetpointCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n setpointType,\n value,\n scale,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_ThermostatSetpointCCAPI_getCapabilities()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getCapabilities(setpointType: ThermostatSetpointType) {\n this.assertSupportsCommand(ThermostatSetpointCommand, ThermostatSetpointCommand.CapabilitiesGet);\n const cc = new ThermostatSetpointCCCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n setpointType,\n });\n const response = await this.host.sendCommand<ThermostatSetpointCCCapabilitiesReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"minValue\",\n \"maxValue\",\n \"minValueScale\",\n \"maxValueScale\",\n ]);\n }\n }\n /**\n * Requests the supported setpoint types from the node. Due to inconsistencies it is NOT recommended\n * to use this method on nodes with CC versions 1 and 2. Instead rely on the information determined\n * during node interview.\n */\n public async getSupportedSetpointTypes(): Promise<MaybeNotKnown<readonly ThermostatSetpointType[]>> {\n this.assertSupportsCommand(ThermostatSetpointCommand, ThermostatSetpointCommand.SupportedGet);\n const cc = new ThermostatSetpointCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatSetpointCCSupportedReport>(cc, this.commandOptions);\n return response?.supportedSetpointTypes;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Setpoint\"])\n@implementedVersion(3)\n@ccValues(ThermostatSetpointCCValues)\nexport class ThermostatSetpointCC extends CommandClass {\n declare ccCommand: ThermostatSetpointCommand;\n public translatePropertyKey(ctx: GetValueDB, property: string | number, propertyKey: string | number): string | undefined {\n if (property === \"setpoint\") {\n return getEnumMemberName(ThermostatSetpointType, propertyKey as any);\n }\n else {\n return super.translatePropertyKey(ctx, property, propertyKey);\n }\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[\"Thermostat Setpoint\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n if (api.version <= 2) {\n // It has been found that early implementations of this Command Class applied two non-interoperable\n // interpretations of the bit mask advertising the support for specific Setpoint Types in the Thermostat\n // Setpoint Supported Report Command.\n // A controlling node SHOULD determine the supported Setpoint Types of a version 1 and version 2\n // supporting node by sending one Thermostat Setpoint Get Command at a time while incrementing\n // the requested Setpoint Type.\n // If the same Setpoint Type is advertised in the returned Thermostat Setpoint Report Command, the\n // controlling node MUST conclude that the actual Setpoint Type is supported.\n // If the Setpoint Type 0x00 (type N/A) is advertised in the returned Thermostat Setpoint Report\n // Command, the controlling node MUST conclude that the actual Setpoint Type is not supported.\n // The specs require us to query the list of supported setpoint types anyways, even if the response is ignored\n await api.getSupportedSetpointTypes();\n // Now scan all endpoints. Each type we received a value for gets marked as supported\n const supportedSetpointTypes: ThermostatSetpointType[] = [];\n for (let type: ThermostatSetpointType = ThermostatSetpointType.Heating; type <= ThermostatSetpointType[\"Full Power\"]; type++) {\n const setpointName = getEnumMemberName(ThermostatSetpointType, type);\n // Every time, query the current value\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying current value of setpoint ${setpointName}...`,\n direction: \"outbound\",\n });\n const setpoint = await api.get(type);\n // If the node did not respond, assume the setpoint type is not supported\n let logMessage: string;\n if (setpoint) {\n // Setpoint supported, remember the type\n supportedSetpointTypes.push(type);\n logMessage =\n `received current value of setpoint ${setpointName}: ${setpoint.value} ${setpoint.scale.unit ?? \"\"}`;\n }\n else {\n // We're sure about the interpretation - this should not happen\n logMessage = `setpoint ${setpointName} is not supported`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n node.reportInterviewProgress(type - ThermostatSetpointType.Heating + 1, ThermostatSetpointType[\"Full Power\"]\n - ThermostatSetpointType.Heating\n + 1);\n }\n // Remember which setpoint types are actually supported\n this.setValue(ctx, ThermostatSetpointCCValues.supportedSetpointTypes, supportedSetpointTypes);\n }\n else {\n // Versions >= 3 adhere to bitmap interpretation A, so we can rely on getSupportedSetpointTypes\n // Query the supported setpoint types\n let setpointTypes: ThermostatSetpointType[] = [];\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"retrieving supported setpoint types...\",\n direction: \"outbound\",\n });\n const resp = await api.getSupportedSetpointTypes();\n if (resp) {\n setpointTypes = [...resp];\n const logMessage = \"received supported setpoint types:\\n\"\n + setpointTypes\n .map((type) => getEnumMemberName(ThermostatSetpointType, type))\n .map((name) => `\u00B7 ${name}`)\n .join(\"\\n\");\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported setpoint types timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n for (const [i, type] of setpointTypes.entries()) {\n const setpointName = getEnumMemberName(ThermostatSetpointType, type);\n // Find out the capabilities of this setpoint\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `retrieving capabilities for setpoint ${setpointName}...`,\n direction: \"outbound\",\n });\n const setpointCaps = await api.getCapabilities(type);\n if (setpointCaps) {\n const minValueUnit = getSetpointUnit(setpointCaps.minValueScale);\n const maxValueUnit = getSetpointUnit(setpointCaps.maxValueScale);\n const logMessage = `received capabilities for setpoint ${setpointName}:\nminimum value: ${setpointCaps.minValue} ${minValueUnit}\nmaximum value: ${setpointCaps.maxValue} ${maxValueUnit}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n node.reportInterviewProgress(i + 1, setpointTypes.length);\n }\n // Query the current value for all setpoint types\n await this.refreshValues(ctx, {\n tag: \"interview\",\n onProgress: (completed, total) => node.reportInterviewProgress(completed, total),\n });\n }\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Setpoint\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n const setpointTypes: ThermostatSetpointType[] = this.getValue(ctx, ThermostatSetpointCCValues.supportedSetpointTypes) ?? [];\n // Query each setpoint's current value\n for (const [i, type] of setpointTypes.entries()) {\n const setpointName = getEnumMemberName(ThermostatSetpointType, type);\n // Every time, query the current value\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying current value of setpoint ${setpointName}...`,\n direction: \"outbound\",\n });\n const setpoint = await api.get(type);\n if (setpoint) {\n const logMessage = `received current value of setpoint ${setpointName}: ${setpoint.value} ${setpoint.scale.unit ?? \"\"}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n options?.onProgress?.(i + 1, setpointTypes.length);\n }\n }\n}\n// @publicAPI\nexport interface ThermostatSetpointCCSetOptions {\n setpointType: ThermostatSetpointType;\n value: number;\n scale: number;\n}\n@CCCommand(ThermostatSetpointCommand.Set)\n@useSupervision()\nexport class ThermostatSetpointCCSet extends ThermostatSetpointCC {\n public constructor(options: WithAddress<ThermostatSetpointCCSetOptions>) {\n super(options);\n this.setpointType = options.setpointType;\n this.value = options.value;\n this.scale = options.scale;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetpointCCSet {\n validatePayload(raw.payload.length >= 1);\n const setpointType: ThermostatSetpointType = raw.payload[0] & 0b1111;\n // parseFloatWithScale does its own validation\n const { value, scale } = parseFloatWithScale(raw.payload.subarray(1));\n return new this({\n nodeId: ctx.sourceNodeId,\n setpointType,\n value,\n scale,\n });\n }\n public setpointType: ThermostatSetpointType;\n public value: number;\n public scale: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // If a config file overwrites how the float should be encoded, use that information\n const override = ctx.getDeviceConfig?.(this.nodeId as number)\n ?.compat?.overrideFloatEncoding;\n this.payload = Bytes.concat([\n [this.setpointType & 0b1111],\n encodeFloatWithScale(this.value, this.scale, override),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const scale = getScale(this.scale);\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setpoint type\": getEnumMemberName(ThermostatSetpointType, this.setpointType),\n value: `${this.value} ${scale.unit}`,\n },\n };\n }\n}\n// @publicAPI\nexport interface ThermostatSetpointCCReportOptions {\n type: ThermostatSetpointType;\n value: number;\n scale: number;\n}\n@CCCommand(ThermostatSetpointCommand.Report)\nexport class ThermostatSetpointCCReport extends ThermostatSetpointCC {\n public constructor(options: WithAddress<ThermostatSetpointCCReportOptions>) {\n super(options);\n this.type = options.type;\n this.value = options.value;\n this.scale = options.scale;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetpointCCReport {\n validatePayload(raw.payload.length >= 1);\n const type: ThermostatSetpointType = raw.payload[0] & 0b1111;\n if (type === 0) {\n // Not supported\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n value: 0,\n scale: 0,\n });\n }\n // parseFloatWithScale does its own validation\n const { value, scale } = parseFloatWithScale(raw.payload.subarray(1));\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n value,\n scale,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const scale = getScale(this.scale);\n const setpointValue = ThermostatSetpointCCValues.setpoint(this.type);\n const existingMetadata = this.getMetadata<ValueMetadataNumeric>(ctx, setpointValue);\n // Update the metadata when it is missing or the unit has changed\n if (existingMetadata?.unit !== scale.unit) {\n this.setMetadata(ctx, setpointValue, {\n ...(existingMetadata ?? setpointValue.meta),\n unit: scale.unit,\n });\n }\n this.setValue(ctx, setpointValue, this.value);\n // Remember the device-preferred setpoint scale so it can be used in SET commands\n this.setValue(ctx, ThermostatSetpointCCValues.setpointScale(this.type), scale.key);\n return true;\n }\n public type: ThermostatSetpointType;\n public scale: number;\n public value: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.type & 0b1111],\n encodeFloatWithScale(this.value, this.scale),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const scale = getScale(this.scale);\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setpoint type\": getEnumMemberName(ThermostatSetpointType, this.type),\n value: `${this.value} ${scale.unit}`,\n },\n };\n }\n}\nfunction testResponseForThermostatSetpointGet(sent: ThermostatSetpointCCGet, received: ThermostatSetpointCCReport) {\n // We expect a Thermostat Setpoint Report that matches the requested setpoint type\n return received.type === sent.setpointType;\n}\n// @publicAPI\nexport interface ThermostatSetpointCCGetOptions {\n setpointType: ThermostatSetpointType;\n}\n@CCCommand(ThermostatSetpointCommand.Get)\n@expectedCCResponse(ThermostatSetpointCCReport, testResponseForThermostatSetpointGet)\nexport class ThermostatSetpointCCGet extends ThermostatSetpointCC {\n public constructor(options: WithAddress<ThermostatSetpointCCGetOptions>) {\n super(options);\n this.setpointType = options.setpointType;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetpointCCGet {\n validatePayload(raw.payload.length >= 1);\n const setpointType: ThermostatSetpointType = raw.payload[0] & 0b1111;\n return new this({\n nodeId: ctx.sourceNodeId,\n setpointType,\n });\n }\n public setpointType: ThermostatSetpointType;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.setpointType & 0b1111]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setpoint type\": getEnumMemberName(ThermostatSetpointType, this.setpointType),\n },\n };\n }\n}\n// @publicAPI\nexport interface ThermostatSetpointCCCapabilitiesReportOptions {\n type: ThermostatSetpointType;\n minValue: number;\n minValueScale: number;\n maxValue: number;\n maxValueScale: number;\n}\n@CCCommand(ThermostatSetpointCommand.CapabilitiesReport)\nexport class ThermostatSetpointCCCapabilitiesReport extends ThermostatSetpointCC {\n public constructor(options: WithAddress<ThermostatSetpointCCCapabilitiesReportOptions>) {\n super(options);\n this.type = options.type;\n this.minValue = options.minValue;\n this.minValueScale = options.minValueScale;\n this.maxValue = options.maxValue;\n this.maxValueScale = options.maxValueScale;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetpointCCCapabilitiesReport {\n validatePayload(raw.payload.length >= 1);\n const type: ThermostatSetpointType = raw.payload[0];\n // parseFloatWithScale does its own validation\n const { value: minValue, scale: minValueScale, bytesRead, } = parseFloatWithScale(raw.payload.subarray(1));\n const { value: maxValue, scale: maxValueScale } = parseFloatWithScale(raw.payload.subarray(1 + bytesRead));\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n minValue,\n minValueScale,\n maxValue,\n maxValueScale,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Predefine the metadata\n const setpointValue = ThermostatSetpointCCValues.setpoint(this.type);\n this.setMetadata(ctx, setpointValue, {\n ...setpointValue.meta,\n min: this.minValue,\n max: this.maxValue,\n unit: getSetpointUnit(this.minValueScale)\n || getSetpointUnit(this.maxValueScale),\n });\n return true;\n }\n public type: ThermostatSetpointType;\n public minValue: number;\n public maxValue: number;\n public minValueScale: number;\n public maxValueScale: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const min = encodeFloatWithScale(this.minValue, this.minValueScale);\n const max = encodeFloatWithScale(this.maxValue, this.maxValueScale);\n this.payload = Bytes.concat([[this.type], min, max]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const minValueScale = getScale(this.minValueScale);\n const maxValueScale = getScale(this.maxValueScale);\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setpoint type\": getEnumMemberName(ThermostatSetpointType, this.type),\n \"min value\": `${this.minValue} ${minValueScale.unit}`,\n \"max value\": `${this.maxValue} ${maxValueScale.unit}`,\n },\n };\n }\n}\n// @publicAPI\nexport interface ThermostatSetpointCCCapabilitiesGetOptions {\n setpointType: ThermostatSetpointType;\n}\n@CCCommand(ThermostatSetpointCommand.CapabilitiesGet)\n@expectedCCResponse(ThermostatSetpointCCCapabilitiesReport)\nexport class ThermostatSetpointCCCapabilitiesGet extends ThermostatSetpointCC {\n public constructor(options: WithAddress<ThermostatSetpointCCCapabilitiesGetOptions>) {\n super(options);\n this.setpointType = options.setpointType;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetpointCCCapabilitiesGet {\n validatePayload(raw.payload.length >= 1);\n const setpointType: ThermostatSetpointType = raw.payload[0] & 0b1111;\n return new this({\n nodeId: ctx.sourceNodeId,\n setpointType,\n });\n }\n public setpointType: ThermostatSetpointType;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.setpointType & 0b1111]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setpoint type\": getEnumMemberName(ThermostatSetpointType, this.setpointType),\n },\n };\n }\n}\n// @publicAPI\nexport interface ThermostatSetpointCCSupportedReportOptions {\n supportedSetpointTypes: ThermostatSetpointType[];\n}\n@CCCommand(ThermostatSetpointCommand.SupportedReport)\n@ccValueProperty(\"supportedSetpointTypes\", ThermostatSetpointCCValues.supportedSetpointTypes)\nexport class ThermostatSetpointCCSupportedReport extends ThermostatSetpointCC {\n public constructor(options: WithAddress<ThermostatSetpointCCSupportedReportOptions>) {\n super(options);\n if (options.supportedSetpointTypes.length === 0) {\n throw new ZWaveError(`At least one setpoint type must be supported`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.supportedSetpointTypes = options.supportedSetpointTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetpointCCSupportedReport {\n validatePayload(raw.payload.length >= 1);\n const bitMask = raw.payload;\n const supported = parseBitMask(bitMask, ThermostatSetpointType[\"N/A\"]);\n // We use this command only when we are sure that bitmask interpretation A is used\n // FIXME: Figure out if we can do this without the CC version\n const supportedSetpointTypes: ThermostatSetpointType[] = supported.map((i) => thermostatSetpointTypeMap[i]);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedSetpointTypes,\n });\n }\n public readonly supportedSetpointTypes: readonly ThermostatSetpointType[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(\n // Encode as interpretation A\n this.supportedSetpointTypes\n .map((t) => thermostatSetpointTypeMap.indexOf(t))\n .filter((t) => t !== -1), undefined, ThermostatSetpointType[\"N/A\"]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported setpoint types\": this.supportedSetpointTypes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(ThermostatSetpointType, t)}`)\n .join(\"\"),\n },\n };\n }\n}\n@CCCommand(ThermostatSetpointCommand.SupportedGet)\n@expectedCCResponse(ThermostatSetpointCCSupportedReport)\n/**\n * Issues a SupportedGet command to the node. Due to inconsistencies in interpretation,\n * this command should not be used for nodes with CC versions 1 or 2\n */\nexport class ThermostatSetpointCCSupportedGet extends ThermostatSetpointCC {\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qBAAgC;AAEhC,kBAAkY;AAClY,oBAA+C;AAC/C,iBAAwJ;AACxJ,0BAAkJ;AAClJ,oCAAiI;AAEjI,mBAAmE;AAyBnE,gCAA2C;AAhC3C,MAAM,EAAE,0CAA0C,0CAA0C,qDAAoD,IAAK;AAWrJ,MAAM,4BAA4B;EAC9B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEJ,SAAS,SAAS,OAAa;AAC3B,aAAO,2BAAc,eAAe,KAAY,SACzC,6BAAgB,KAAK;AAChC;AAHS;AAIT,SAAS,gBAAgB,OAAa;AAClC,SAAO,SAAS,KAAK,EAAE,QAAQ;AACnC;AAFS;IAMI,2BAAuB,MAAA;8BADnC,mCAAI,2BAAe,qBAAqB,CAAC,CAAC;;;;oBACE;;;;;+CAAA,YAAK;WAAA;;;;;;;;yBAkD7C,yCAAwC,CAAE;yBAuB1C,yCAAwC,CAAE;qCAY1C,qDAAoD,CAAE;AAlCvD,qCAAA,MAAA,MAAA,iBAAA,EAAA,MAAA,UAAA,MAAA,OAAA,QAAA,OAAA,SAAA,OAAA,QAAA,EAAA,KAAA,gCAAA,SAAA,KAAA,QAAA,KAAA,gCAAA,IAAa,KAAb,OAAgB,GAAA,UAAA,UAAA,GAAA,MAAA,0BAAA;AAuBhB,qCAAA,MAAA,MAAA,iBAAA,EAAA,MAAA,UAAA,MAAA,OAAA,QAAA,OAAA,SAAA,OAAA,QAAA,EAAA,KAAA,gCAAA,SAAA,KAAA,QAAA,KAAA,gCAAA,IAAa,KAAb,OAAgB,GAAA,UAAA,UAAA,GAAA,MAAA,0BAAA;AAahB,qCAAA,MAAA,MAAA,6BAAA,EAAA,MAAA,UAAA,MAAA,mBAAA,QAAA,OAAA,SAAA,OAAA,QAAA,EAAA,KAAA,gCAAA,qBAAA,KAAA,QAAA,KAAA,gCAAA,IAAa,iBAAb,OAA4B,GAAA,UAAA,UAAA,GAAA,MAAA,0BAAA;AAvFhC,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACF,gBAAgB,KAA8B;AACjD,cAAQ,KAAK;QACT,KAAK,uCAA0B;QAC/B,KAAK,uCAA0B;AAC3B,iBAAO,KAAK,aAAY;QAC5B,KAAK,uCAA0B;AAC3B,iBAAO;;QACX,KAAK,uCAA0B;AAC3B,iBAAO,KAAK,WAAW,KAAK,KAAK,aAAY;MACrD;AACA,aAAO,MAAM,gBAAgB,GAAG;IACpC;IACA,KAAwB,oBAAS,IAAC;AAC9B,aAAO,eAA+C,EAAE,UAAU,YAAW,GAAI,OAAK;AAClF,YAAI,aAAa,YAAY;AACzB,mDAAyB,KAAK,MAAM,QAAQ;QAChD;AACA,YAAI,OAAO,gBAAgB,UAAU;AACjC,gBAAM,IAAI,uBAAW,GAAG,2BAAe,KAAK,IAAI,CAAC,MAAM,QAAQ,yDAAyD,4BAAgB,gBAAgB;QAC5J;AACA,YAAI,OAAO,UAAU,UAAU;AAC3B,8CAAoB,KAAK,MAAM,UAAU,UAAU,OAAO,KAAK;QACnE;AAGA,cAAM,iBAAiB,KAAK,cAAa,GAAI,SAAiB,qDAA2B,cAAc,WAAW,EAAE,SAAS,KAAK,SAAS,KAAK,CAAC;AACjJ,cAAM,SAAS,MAAM,KAAK,IAAI,aAAa,OAAO,kBAAkB,CAAC;AAErE,YAAI,KAAK,aAAY,KAAM,KAAC,wCAA2B,MAAM,GAAG;AAG5D,eAAK,aAAa,EAAE,UAAU,YAAW,GAAI,KAAK;QACtD;AACA,eAAO;MACX;IACJ;IACA,KAAe,qBAAU,IAAC;AACtB,aAAO,eAA+C,EAAE,UAAU,YAAW,GAAE;AAC3E,gBAAQ,UAAU;UACd,KAAK;AACD,gBAAI,OAAO,gBAAgB,UAAU;AACjC,oBAAM,IAAI,uBAAW,GAAG,2BAAe,KAAK,IAAI,CAAC,MAAM,QAAQ,yDAAyD,4BAAgB,gBAAgB;YAC5J;AACA,oBAAQ,MAAM,KAAK,IAAI,WAAW,IAAI;UAC1C;AACI,qDAAyB,KAAK,MAAM,QAAQ;QACpD;MACJ;IACJ;IAEO,MAAM,IAAI,cAAoC;AAIjD,WAAK,sBAAsB,wCAA2B,uCAA0B,GAAG;AACnF,YAAM,KAAK,IAAI,wBAAwB;QACnC,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;QAC7B;OACH;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAAwC,IAAI,KAAK,cAAc;AAChG,UAAI,CAAC;AACD;AACJ,UAAI,SAAS,SAAS,oCAAuB,KAAK,GAAG;AAEjD,cAAM,QAAQ,SAAS,SAAS,KAAK;AACrC,eAAO;UACH,OAAO,SAAS;UAChB;;MAER;IACJ;IAEO,MAAM,IAAI,cAAsC,OAAe,OAAa;AAC/E,WAAK,sBAAsB,wCAA2B,uCAA0B,GAAG;AACnF,YAAM,KAAK,IAAI,wBAAwB;QACnC,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;QAC7B;QACA;QACA;OACH;AACD,aAAO,KAAK,KAAK,YAAY,IAAI,KAAK,cAAc;IACxD;IAGO,MAAM,gBAAgB,cAAoC;AAC7D,WAAK,sBAAsB,wCAA2B,uCAA0B,eAAe;AAC/F,YAAM,KAAK,IAAI,oCAAoC;QAC/C,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;QAC7B;OACH;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAAoD,IAAI,KAAK,cAAc;AAC5G,UAAI,UAAU;AACV,mBAAO,oBAAK,UAAU;UAClB;UACA;UACA;UACA;SACH;MACL;IACJ;;;;;;IAMO,MAAM,4BAAyB;AAClC,WAAK,sBAAsB,wCAA2B,uCAA0B,YAAY;AAC5F,YAAM,KAAK,IAAI,iCAAiC;QAC5C,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;OAChC;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAAiD,IAAI,KAAK,cAAc;AACzG,aAAO,UAAU;IACrB;;;AArHS,0CAAA,MAAA,0BAAA;;;;;IA0HA,wBAAoB,MAAA;8BAHhC,4CAAa,2BAAe,qBAAqB,CAAC,OAClD,kDAAmB,CAAC,OACpB,wCAAS,oDAA0B,CAAC;;;;oBACK;4CAAA,YAAY;WAAA;;;;;;;;AAAtD,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IAEF,qBAAqB,KAAiB,UAA2B,aAA4B;AAChG,UAAI,aAAa,YAAY;AACzB,mBAAO,iCAAkB,qCAAwB,WAAkB;MACvE,OACK;AACD,eAAO,MAAM,qBAAqB,KAAK,UAAU,WAAW;MAChE;IACJ;IACO,MAAM,UAAU,KAAqB;AACxC,YAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,YAAM,WAAW,KAAK,YAAY,GAAG;AACrC,YAAM,MAAM,iBAAM,OAAO,2BAAe,qBAAqB,GAAG,KAAK,QAAQ,EAAE,YAAY;QACvF,UAAU,4BAAgB;QAC1B,KAAK;OACR;AACD,UAAI,QAAQ,KAAK,IAAI;QACjB,UAAU,KAAK;QACf,SAAS,gBAAgB,KAAK,MAAM;QACpC,WAAW;OACd;AACD,UAAI,IAAI,WAAW,GAAG;AAYlB,cAAM,IAAI,0BAAyB;AAEnC,cAAM,yBAAmD,CAAA;AACzD,iBAAS,OAA+B,oCAAuB,SAAS,QAAQ,oCAAuB,YAAY,GAAG,QAAQ;AAC1H,gBAAM,mBAAe,iCAAkB,qCAAwB,IAAI;AAEnE,cAAI,QAAQ,KAAK,IAAI;YACjB,UAAU,KAAK;YACf,SAAS,sCAAsC,YAAY;YAC3D,WAAW;WACd;AACD,gBAAM,WAAW,MAAM,IAAI,IAAI,IAAI;AAEnC,cAAI;AACJ,cAAI,UAAU;AAEV,mCAAuB,KAAK,IAAI;AAChC,yBACI,sCAAsC,YAAY,KAAK,SAAS,KAAK,IAAI,SAAS,MAAM,QAAQ,EAAE;UAC1G,OACK;AAED,yBAAa,YAAY,YAAY;UACzC;AACA,cAAI,QAAQ,KAAK,IAAI;YACjB,UAAU,KAAK;YACf,SAAS;YACT,WAAW;WACd;AACD,eAAK,wBAAwB,OAAO,oCAAuB,UAAU,GAAG,oCAAuB,YAAY,IACrG,oCAAuB,UACvB,CAAC;QACX;AAEA,aAAK,SAAS,KAAK,qDAA2B,wBAAwB,sBAAsB;MAChG,OACK;AAGD,YAAI,gBAA0C,CAAA;AAC9C,YAAI,QAAQ,KAAK,IAAI;UACjB,UAAU,KAAK;UACf,SAAS;UACT,WAAW;SACd;AACD,cAAM,OAAO,MAAM,IAAI,0BAAyB;AAChD,YAAI,MAAM;AACN,0BAAgB,CAAC,GAAG,IAAI;AACxB,gBAAM,aAAa,yCACb,cACG,IAAI,CAAC,aAAS,iCAAkB,qCAAwB,IAAI,CAAC,EAC7D,IAAI,CAAC,SAAS,QAAK,IAAI,EAAE,EACzB,KAAK,IAAI;AAClB,cAAI,QAAQ,KAAK,IAAI;YACjB,UAAU,KAAK;YACf,SAAS;YACT,WAAW;WACd;QACL,OACK;AACD,cAAI,QAAQ,KAAK,IAAI;YACjB,UAAU,KAAK;YACf,SAAS;YACT,OAAO;WACV;AACD;QACJ;AACA,mBAAW,CAAC,GAAG,IAAI,KAAK,cAAc,QAAO,GAAI;AAC7C,gBAAM,mBAAe,iCAAkB,qCAAwB,IAAI;AAEnE,cAAI,QAAQ,KAAK,IAAI;YACjB,UAAU,KAAK;YACf,SAAS,wCAAwC,YAAY;YAC7D,WAAW;WACd;AACD,gBAAM,eAAe,MAAM,IAAI,gBAAgB,IAAI;AACnD,cAAI,cAAc;AACd,kBAAM,eAAe,gBAAgB,aAAa,aAAa;AAC/D,kBAAM,eAAe,gBAAgB,aAAa,aAAa;AAC/D,kBAAM,aAAa,sCAAsC,YAAY;iBACxE,aAAa,QAAQ,IAAI,YAAY;iBACrC,aAAa,QAAQ,IAAI,YAAY;AAClC,gBAAI,QAAQ,KAAK,IAAI;cACjB,UAAU,KAAK;cACf,SAAS;cACT,WAAW;aACd;UACL;AACA,eAAK,wBAAwB,IAAI,GAAG,cAAc,MAAM;QAC5D;AAEA,cAAM,KAAK,cAAc,KAAK;UAC1B,KAAK;UACL,YAAY,wBAAC,WAAW,UAAU,KAAK,wBAAwB,WAAW,KAAK,GAAnE;SACf;MACL;AAEA,WAAK,qBAAqB,KAAK,IAAI;IACvC;IACO,MAAM,cAAc,KAA2B,SAA8B;AAChF,YAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,YAAM,WAAW,KAAK,YAAY,GAAG;AACrC,YAAM,MAAM,iBAAM,OAAO,2BAAe,qBAAqB,GAAG,KAAK,QAAQ,EAAE,YAAY;QACvF,UAAU,SAAS,YAAY,4BAAgB;QAC/C,KAAK,SAAS;OACjB;AACD,YAAM,gBAA0C,KAAK,SAAS,KAAK,qDAA2B,sBAAsB,KAAK,CAAA;AAEzH,iBAAW,CAAC,GAAG,IAAI,KAAK,cAAc,QAAO,GAAI;AAC7C,cAAM,mBAAe,iCAAkB,qCAAwB,IAAI;AAEnE,YAAI,QAAQ,KAAK,IAAI;UACjB,UAAU,KAAK;UACf,SAAS,sCAAsC,YAAY;UAC3D,WAAW;SACd;AACD,cAAM,WAAW,MAAM,IAAI,IAAI,IAAI;AACnC,YAAI,UAAU;AACV,gBAAM,aAAa,sCAAsC,YAAY,KAAK,SAAS,KAAK,IAAI,SAAS,MAAM,QAAQ,EAAE;AACrH,cAAI,QAAQ,KAAK,IAAI;YACjB,UAAU,KAAK;YACf,SAAS;YACT,WAAW;WACd;QACL;AACA,iBAAS,aAAa,IAAI,GAAG,cAAc,MAAM;MACrD;IACJ;;;;IAUS,2BAAuB,MAAA;8BAFnC,yCAAU,uCAA0B,GAAG,OACvC,8CAAc,CAAE;;;;oBAC4B;+CAAA,YAAoB;WAAA;;;;;;;;AAAjE,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACT,YAAmB,SAAoD;AACnE,YAAM,OAAO;AACb,WAAK,eAAe,QAAQ;AAC5B,WAAK,QAAQ,QAAQ;AACrB,WAAK,QAAQ,QAAQ;IACzB;IACO,OAAO,KAAK,KAAY,KAAqB;AAChD,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,eAAuC,IAAI,QAAQ,CAAC,IAAI;AAE9D,YAAM,EAAE,OAAO,MAAK,QAAK,iCAAoB,IAAI,QAAQ,SAAS,CAAC,CAAC;AACpE,aAAO,IAAI,KAAK;QACZ,QAAQ,IAAI;QACZ;QACA;QACA;OACH;IACL;IACO;IACA;IACA;IACA,UAAU,KAAsB;AAEnC,YAAM,WAAW,IAAI,kBAAkB,KAAK,MAAgB,GACtD,QAAQ;AACd,WAAK,UAAU,oBAAM,OAAO;QACxB,CAAC,KAAK,eAAe,EAAM;YAC3B,kCAAqB,KAAK,OAAO,KAAK,OAAO,QAAQ;OACxD;AACD,aAAO,MAAM,UAAU,GAAG;IAC9B;IACO,WAAW,KAAgB;AAC9B,YAAM,QAAQ,SAAS,KAAK,KAAK;AACjC,aAAO;QACH,GAAG,MAAM,WAAW,GAAG;QACvB,SAAS;UACL,qBAAiB,iCAAkB,qCAAwB,KAAK,YAAY;UAC5E,OAAO,GAAG,KAAK,KAAK,IAAI,MAAM,IAAI;;;IAG9C;;;;IASS,8BAA0B,MAAA;8BADtC,yCAAU,uCAA0B,MAAM,CAAC;;;;oBACI;kDAAA,YAAoB;WAAA;;;;;;;;AAApE,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACT,YAAmB,SAAuD;AACtE,YAAM,OAAO;AACb,WAAK,OAAO,QAAQ;AACpB,WAAK,QAAQ,QAAQ;AACrB,WAAK,QAAQ,QAAQ;IACzB;IACO,OAAO,KAAK,KAAY,KAAqB;AAChD,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,OAA+B,IAAI,QAAQ,CAAC,IAAI;AACtD,UAAI,SAAS,GAAG;AAEZ,eAAO,IAAI,KAAK;UACZ,QAAQ,IAAI;UACZ;UACA,OAAO;UACP,OAAO;SACV;MACL;AAEA,YAAM,EAAE,OAAO,MAAK,QAAK,iCAAoB,IAAI,QAAQ,SAAS,CAAC,CAAC;AACpE,aAAO,IAAI,KAAK;QACZ,QAAQ,IAAI;QACZ;QACA;QACA;OACH;IACL;IACO,cAAc,KAAyB;AAC1C,UAAI,CAAC,MAAM,cAAc,GAAG;AACxB,eAAO;AACX,YAAM,QAAQ,SAAS,KAAK,KAAK;AACjC,YAAM,gBAAgB,qDAA2B,SAAS,KAAK,IAAI;AACnE,YAAM,mBAAmB,KAAK,YAAkC,KAAK,aAAa;AAElF,UAAI,kBAAkB,SAAS,MAAM,MAAM;AACvC,aAAK,YAAY,KAAK,eAAe;UACjC,GAAI,oBAAoB,cAAc;UACtC,MAAM,MAAM;SACf;MACL;AACA,WAAK,SAAS,KAAK,eAAe,KAAK,KAAK;AAE5C,WAAK,SAAS,KAAK,qDAA2B,cAAc,KAAK,IAAI,GAAG,MAAM,GAAG;AACjF,aAAO;IACX;IACO;IACA;IACA;IACA,UAAU,KAAsB;AACnC,WAAK,UAAU,oBAAM,OAAO;QACxB,CAAC,KAAK,OAAO,EAAM;YACnB,kCAAqB,KAAK,OAAO,KAAK,KAAK;OAC9C;AACD,aAAO,MAAM,UAAU,GAAG;IAC9B;IACO,WAAW,KAAgB;AAC9B,YAAM,QAAQ,SAAS,KAAK,KAAK;AACjC,aAAO;QACH,GAAG,MAAM,WAAW,GAAG;QACvB,SAAS;UACL,qBAAiB,iCAAkB,qCAAwB,KAAK,IAAI;UACpE,OAAO,GAAG,KAAK,KAAK,IAAI,MAAM,IAAI;;;IAG9C;;;;AAEJ,SAAS,qCAAqC,MAA+B,UAAoC;AAE7G,SAAO,SAAS,SAAS,KAAK;AAClC;AAHS;IAUI,2BAAuB,MAAA;8BAFnC,yCAAU,uCAA0B,GAAG,OACvC,kDAAmB,4BAA4B,oCAAoC,CAAC;;;;oBACxC;+CAAA,YAAoB;WAAA;;;;;;;;AAAjE,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACT,YAAmB,SAAoD;AACnE,YAAM,OAAO;AACb,WAAK,eAAe,QAAQ;IAChC;IACO,OAAO,KAAK,KAAY,KAAqB;AAChD,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,eAAuC,IAAI,QAAQ,CAAC,IAAI;AAC9D,aAAO,IAAI,KAAK;QACZ,QAAQ,IAAI;QACZ;OACH;IACL;IACO;IACA,UAAU,KAAsB;AACnC,WAAK,UAAU,oBAAM,KAAK,CAAC,KAAK,eAAe,EAAM,CAAC;AACtD,aAAO,MAAM,UAAU,GAAG;IAC9B;IACO,WAAW,KAAgB;AAC9B,aAAO;QACH,GAAG,MAAM,WAAW,GAAG;QACvB,SAAS;UACL,qBAAiB,iCAAkB,qCAAwB,KAAK,YAAY;;;IAGxF;;;;IAWS,0CAAsC,MAAA;8BADlD,yCAAU,uCAA0B,kBAAkB,CAAC;;;;oBACI;8DAAA,YAAoB;WAAA;;;;;;;;AAAhF,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACT,YAAmB,SAAmE;AAClF,YAAM,OAAO;AACb,WAAK,OAAO,QAAQ;AACpB,WAAK,WAAW,QAAQ;AACxB,WAAK,gBAAgB,QAAQ;AAC7B,WAAK,WAAW,QAAQ;AACxB,WAAK,gBAAgB,QAAQ;IACjC;IACO,OAAO,KAAK,KAAY,KAAqB;AAChD,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,OAA+B,IAAI,QAAQ,CAAC;AAElD,YAAM,EAAE,OAAO,UAAU,OAAO,eAAe,UAAS,QAAM,iCAAoB,IAAI,QAAQ,SAAS,CAAC,CAAC;AACzG,YAAM,EAAE,OAAO,UAAU,OAAO,cAAa,QAAK,iCAAoB,IAAI,QAAQ,SAAS,IAAI,SAAS,CAAC;AACzG,aAAO,IAAI,KAAK;QACZ,QAAQ,IAAI;QACZ;QACA;QACA;QACA;QACA;OACH;IACL;IACO,cAAc,KAAyB;AAC1C,UAAI,CAAC,MAAM,cAAc,GAAG;AACxB,eAAO;AAEX,YAAM,gBAAgB,qDAA2B,SAAS,KAAK,IAAI;AACnE,WAAK,YAAY,KAAK,eAAe;QACjC,GAAG,cAAc;QACjB,KAAK,KAAK;QACV,KAAK,KAAK;QACV,MAAM,gBAAgB,KAAK,aAAa,KACjC,gBAAgB,KAAK,aAAa;OAC5C;AACD,aAAO;IACX;IACO;IACA;IACA;IACA;IACA;IACA,UAAU,KAAsB;AACnC,YAAM,UAAM,kCAAqB,KAAK,UAAU,KAAK,aAAa;AAClE,YAAM,UAAM,kCAAqB,KAAK,UAAU,KAAK,aAAa;AAClE,WAAK,UAAU,oBAAM,OAAO,CAAC,CAAC,KAAK,IAAI,GAAG,KAAK,GAAG,CAAC;AACnD,aAAO,MAAM,UAAU,GAAG;IAC9B;IACO,WAAW,KAAgB;AAC9B,YAAM,gBAAgB,SAAS,KAAK,aAAa;AACjD,YAAM,gBAAgB,SAAS,KAAK,aAAa;AACjD,aAAO;QACH,GAAG,MAAM,WAAW,GAAG;QACvB,SAAS;UACL,qBAAiB,iCAAkB,qCAAwB,KAAK,IAAI;UACpE,aAAa,GAAG,KAAK,QAAQ,IAAI,cAAc,IAAI;UACnD,aAAa,GAAG,KAAK,QAAQ,IAAI,cAAc,IAAI;;;IAG/D;;;;IAQS,uCAAmC,MAAA;8BAF/C,yCAAU,uCAA0B,eAAe,OACnD,kDAAmB,sCAAsC,CAAC;;;;oBACF;2DAAA,YAAoB;WAAA;;;;;;;;AAA7E,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACT,YAAmB,SAAgE;AAC/E,YAAM,OAAO;AACb,WAAK,eAAe,QAAQ;IAChC;IACO,OAAO,KAAK,KAAY,KAAqB;AAChD,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,eAAuC,IAAI,QAAQ,CAAC,IAAI;AAC9D,aAAO,IAAI,KAAK;QACZ,QAAQ,IAAI;QACZ;OACH;IACL;IACO;IACA,UAAU,KAAsB;AACnC,WAAK,UAAU,oBAAM,KAAK,CAAC,KAAK,eAAe,EAAM,CAAC;AACtD,aAAO,MAAM,UAAU,GAAG;IAC9B;IACO,WAAW,KAAgB;AAC9B,aAAO;QACH,GAAG,MAAM,WAAW,GAAG;QACvB,SAAS;UACL,qBAAiB,iCAAkB,qCAAwB,KAAK,YAAY;;;IAGxF;;;;IAQS,uCAAmC,MAAA;8BAF/C,yCAAU,uCAA0B,eAAe,OACnD,+CAAgB,0BAA0B,qDAA2B,sBAAsB,CAAC;;;;oBACpC;2DAAA,YAAoB;WAAA;;;;;;;;AAA7E,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACT,YAAmB,SAAgE;AAC/E,YAAM,OAAO;AACb,UAAI,QAAQ,uBAAuB,WAAW,GAAG;AAC7C,cAAM,IAAI,uBAAW,gDAAgD,4BAAgB,gBAAgB;MACzG;AACA,WAAK,yBAAyB,QAAQ;IAC1C;IACO,OAAO,KAAK,KAAY,KAAqB;AAChD,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,UAAU,IAAI;AACpB,YAAM,gBAAY,0BAAa,SAAS,oCAAuB,KAAK,CAAC;AAGrE,YAAM,yBAAmD,UAAU,IAAI,CAAC,MAAM,0BAA0B,CAAC,CAAC;AAC1G,aAAO,IAAI,KAAK;QACZ,QAAQ,IAAI;QACZ;OACH;IACL;IACgB;IACT,UAAU,KAAsB;AACnC,WAAK,cAAU;;QAEf,KAAK,uBACA,IAAI,CAAC,MAAM,0BAA0B,QAAQ,CAAC,CAAC,EAC/C,OAAO,CAAC,MAAM,MAAM,EAAE;QAAG;QAAW,oCAAuB,KAAK;MAAC;AACtE,aAAO,MAAM,UAAU,GAAG;IAC9B;IACO,WAAW,KAAgB;AAC9B,aAAO;QACH,GAAG,MAAM,WAAW,GAAG;QACvB,SAAS;UACL,4BAA4B,KAAK,uBAC5B,IAAI,CAAC,MAAM;WAAO,iCAAkB,qCAAwB,CAAC,CAAC,EAAE,EAChE,KAAK,EAAE;;;IAGxB;;;;IAQS,oCAAgC,MAAA;8BAN5C,yCAAU,uCAA0B,YAAY,OAChD,kDAAmB,mCAAmC,CAAC;;;;oBAKF;wDAAA,YAAoB;WAAA;;;;;;;;AAA1E,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;;;;",
4
+ "sourcesContent": ["import * as __validateArgs from \"./ThermostatSetpointCC._validateArgs.js\";\nconst { validateArgs_ThermostatSetpointCCAPI_get, validateArgs_ThermostatSetpointCCAPI_set, validateArgs_ThermostatSetpointCCAPI_getCapabilities } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type Scale, type SupervisionResult, ValueMetadata, type ValueMetadataNumeric, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, encodeFloatWithScale, getNamedScale, getUnknownScale, logList, logText, parseBitMask, parseFloatWithScale, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatSetpointCommand, ThermostatSetpointType, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\n// This array is used to map the advertised supported types (interpretation A)\n// to the actual enum values\nconst thermostatSetpointTypeMap = [\n 0x00,\n 0x01,\n 0x02,\n 0x07,\n 0x08,\n 0x09,\n 0x0a,\n 0x0b,\n 0x0c,\n 0x0d,\n 0x0e,\n 0x0f,\n];\nfunction getScale(scale: number): Scale {\n return getNamedScale(\"temperature\", scale as any)\n ?? getUnknownScale(scale);\n}\nfunction getSetpointUnit(scale: number): string {\n return getScale(scale).unit ?? \"\";\n}\nimport { ThermostatSetpointCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatSetpointCCValues };\n@API(CommandClasses[\"Thermostat Setpoint\"])\nexport class ThermostatSetpointCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatSetpointCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatSetpointCommand.Get:\n case ThermostatSetpointCommand.SupportedGet:\n return this.isSinglecast();\n case ThermostatSetpointCommand.Set:\n return true; // This is mandatory\n case ThermostatSetpointCommand.CapabilitiesGet:\n return this.version >= 3 && this.isSinglecast();\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: ThermostatSetpointCCAPI, { property, propertyKey }, value) {\n if (property !== \"setpoint\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof propertyKey !== \"number\") {\n throw new ZWaveError(`${CommandClasses[this.ccId]}: \"${property}\" must be further specified by a numeric property key`, ZWaveErrorCodes.Argument_Invalid);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n // SDS14223: The Scale field value MUST be identical to the value received in the Thermostat Setpoint Report for the\n // actual Setpoint Type during the node interview. Fall back to the first scale if none is known\n const preferredScale = this.tryGetValueDB()?.getValue<number>(ThermostatSetpointCCValues.setpointScale(propertyKey).endpoint(this.endpoint.index));\n const result = await this.set(propertyKey, value, preferredScale ?? 0);\n // Verify the current value after a delay, unless the command was supervised and successful\n if (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n // TODO: Ideally this would be a short delay, but some thermostats like Remotec ZXT-600\n // aren't able to handle the GET this quickly.\n this.schedulePoll({ property, propertyKey }, value);\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatSetpointCCAPI, { property, propertyKey }) {\n switch (property) {\n case \"setpoint\":\n if (typeof propertyKey !== \"number\") {\n throw new ZWaveError(`${CommandClasses[this.ccId]}: \"${property}\" must be further specified by a numeric property key`, ZWaveErrorCodes.Argument_Invalid);\n }\n return (await this.get(propertyKey))?.value;\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n @validateArgs_ThermostatSetpointCCAPI_get()\n public async get(setpointType: ThermostatSetpointType): Promise<{\n value: number;\n scale: Scale;\n } | undefined> {\n this.assertSupportsCommand(ThermostatSetpointCommand, ThermostatSetpointCommand.Get);\n const cc = new ThermostatSetpointCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n setpointType,\n });\n const response = await this.host.sendCommand<ThermostatSetpointCCReport>(cc, this.commandOptions);\n if (!response)\n return;\n if (response.type !== ThermostatSetpointType[\"N/A\"]) {\n // This is a supported setpoint\n const scale = getScale(response.scale);\n return {\n value: response.value,\n scale,\n };\n }\n }\n @validateArgs_ThermostatSetpointCCAPI_set()\n public async set(setpointType: ThermostatSetpointType, value: number, scale: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatSetpointCommand, ThermostatSetpointCommand.Set);\n const cc = new ThermostatSetpointCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n setpointType,\n value,\n scale,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_ThermostatSetpointCCAPI_getCapabilities()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getCapabilities(setpointType: ThermostatSetpointType) {\n this.assertSupportsCommand(ThermostatSetpointCommand, ThermostatSetpointCommand.CapabilitiesGet);\n const cc = new ThermostatSetpointCCCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n setpointType,\n });\n const response = await this.host.sendCommand<ThermostatSetpointCCCapabilitiesReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"minValue\",\n \"maxValue\",\n \"minValueScale\",\n \"maxValueScale\",\n ]);\n }\n }\n /**\n * Requests the supported setpoint types from the node. Due to inconsistencies it is NOT recommended\n * to use this method on nodes with CC versions 1 and 2. Instead rely on the information determined\n * during node interview.\n */\n public async getSupportedSetpointTypes(): Promise<MaybeNotKnown<readonly ThermostatSetpointType[]>> {\n this.assertSupportsCommand(ThermostatSetpointCommand, ThermostatSetpointCommand.SupportedGet);\n const cc = new ThermostatSetpointCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatSetpointCCSupportedReport>(cc, this.commandOptions);\n return response?.supportedSetpointTypes;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Setpoint\"])\n@implementedVersion(3)\n@ccValues(ThermostatSetpointCCValues)\nexport class ThermostatSetpointCC extends CommandClass {\n declare ccCommand: ThermostatSetpointCommand;\n public translatePropertyKey(ctx: GetValueDB, property: string | number, propertyKey: string | number): string | undefined {\n if (property === \"setpoint\") {\n return getEnumMemberName(ThermostatSetpointType, propertyKey as any);\n }\n else {\n return super.translatePropertyKey(ctx, property, propertyKey);\n }\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[\"Thermostat Setpoint\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n if (api.version <= 2) {\n // It has been found that early implementations of this Command Class applied two non-interoperable\n // interpretations of the bit mask advertising the support for specific Setpoint Types in the Thermostat\n // Setpoint Supported Report Command.\n // A controlling node SHOULD determine the supported Setpoint Types of a version 1 and version 2\n // supporting node by sending one Thermostat Setpoint Get Command at a time while incrementing\n // the requested Setpoint Type.\n // If the same Setpoint Type is advertised in the returned Thermostat Setpoint Report Command, the\n // controlling node MUST conclude that the actual Setpoint Type is supported.\n // If the Setpoint Type 0x00 (type N/A) is advertised in the returned Thermostat Setpoint Report\n // Command, the controlling node MUST conclude that the actual Setpoint Type is not supported.\n // The specs require us to query the list of supported setpoint types anyways, even if the response is ignored\n await api.getSupportedSetpointTypes();\n // Now scan all endpoints. Each type we received a value for gets marked as supported\n const supportedSetpointTypes: ThermostatSetpointType[] = [];\n for (let type: ThermostatSetpointType = ThermostatSetpointType.Heating; type <= ThermostatSetpointType[\"Full Power\"]; type++) {\n const setpointName = getEnumMemberName(ThermostatSetpointType, type);\n // Every time, query the current value\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying current value of setpoint ${setpointName}...`,\n direction: \"outbound\",\n });\n const setpoint = await api.get(type);\n // If the node did not respond, assume the setpoint type is not supported\n let logMessage: string;\n if (setpoint) {\n // Setpoint supported, remember the type\n supportedSetpointTypes.push(type);\n logMessage =\n `received current value of setpoint ${setpointName}: ${setpoint.value} ${setpoint.scale.unit ?? \"\"}`;\n }\n else {\n // We're sure about the interpretation - this should not happen\n logMessage = `setpoint ${setpointName} is not supported`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n node.reportInterviewProgress(type - ThermostatSetpointType.Heating + 1, ThermostatSetpointType[\"Full Power\"]\n - ThermostatSetpointType.Heating\n + 1);\n }\n // Remember which setpoint types are actually supported\n this.setValue(ctx, ThermostatSetpointCCValues.supportedSetpointTypes, supportedSetpointTypes);\n }\n else {\n // Versions >= 3 adhere to bitmap interpretation A, so we can rely on getSupportedSetpointTypes\n // Query the supported setpoint types\n let setpointTypes: ThermostatSetpointType[] = [];\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"retrieving supported setpoint types...\",\n direction: \"outbound\",\n });\n const resp = await api.getSupportedSetpointTypes();\n if (resp) {\n setpointTypes = [...resp];\n const logMessage = logText(\"received supported setpoint types:\", {\n nested: logList(setpointTypes.map((type) => getEnumMemberName(ThermostatSetpointType, type))),\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported setpoint types timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n for (const [i, type] of setpointTypes.entries()) {\n const setpointName = getEnumMemberName(ThermostatSetpointType, type);\n // Find out the capabilities of this setpoint\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `retrieving capabilities for setpoint ${setpointName}...`,\n direction: \"outbound\",\n });\n const setpointCaps = await api.getCapabilities(type);\n if (setpointCaps) {\n const minValueUnit = getSetpointUnit(setpointCaps.minValueScale);\n const maxValueUnit = getSetpointUnit(setpointCaps.maxValueScale);\n const logMessage = `received capabilities for setpoint ${setpointName}:\nminimum value: ${setpointCaps.minValue} ${minValueUnit}\nmaximum value: ${setpointCaps.maxValue} ${maxValueUnit}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n node.reportInterviewProgress(i + 1, setpointTypes.length);\n }\n // Query the current value for all setpoint types\n await this.refreshValues(ctx, {\n tag: \"interview\",\n onProgress: (completed, total) => node.reportInterviewProgress(completed, total),\n });\n }\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Setpoint\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n const setpointTypes: ThermostatSetpointType[] = this.getValue(ctx, ThermostatSetpointCCValues.supportedSetpointTypes) ?? [];\n // Query each setpoint's current value\n for (const [i, type] of setpointTypes.entries()) {\n const setpointName = getEnumMemberName(ThermostatSetpointType, type);\n // Every time, query the current value\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying current value of setpoint ${setpointName}...`,\n direction: \"outbound\",\n });\n const setpoint = await api.get(type);\n if (setpoint) {\n const logMessage = `received current value of setpoint ${setpointName}: ${setpoint.value} ${setpoint.scale.unit ?? \"\"}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n options?.onProgress?.(i + 1, setpointTypes.length);\n }\n }\n}\n// @publicAPI\nexport interface ThermostatSetpointCCSetOptions {\n setpointType: ThermostatSetpointType;\n value: number;\n scale: number;\n}\n@CCCommand(ThermostatSetpointCommand.Set)\n@useSupervision()\nexport class ThermostatSetpointCCSet extends ThermostatSetpointCC {\n public constructor(options: WithAddress<ThermostatSetpointCCSetOptions>) {\n super(options);\n this.setpointType = options.setpointType;\n this.value = options.value;\n this.scale = options.scale;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetpointCCSet {\n validatePayload(raw.payload.length >= 1);\n const setpointType: ThermostatSetpointType = raw.payload[0] & 0b1111;\n // parseFloatWithScale does its own validation\n const { value, scale } = parseFloatWithScale(raw.payload.subarray(1));\n return new this({\n nodeId: ctx.sourceNodeId,\n setpointType,\n value,\n scale,\n });\n }\n public setpointType: ThermostatSetpointType;\n public value: number;\n public scale: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // If a config file overwrites how the float should be encoded, use that information\n const override = ctx.getDeviceConfig?.(this.nodeId as number)\n ?.compat?.overrideFloatEncoding;\n this.payload = Bytes.concat([\n [this.setpointType & 0b1111],\n encodeFloatWithScale(this.value, this.scale, override),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const scale = getScale(this.scale);\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setpoint type\": getEnumMemberName(ThermostatSetpointType, this.setpointType),\n value: `${this.value} ${scale.unit}`,\n },\n };\n }\n}\n// @publicAPI\nexport interface ThermostatSetpointCCReportOptions {\n type: ThermostatSetpointType;\n value: number;\n scale: number;\n}\n@CCCommand(ThermostatSetpointCommand.Report)\nexport class ThermostatSetpointCCReport extends ThermostatSetpointCC {\n public constructor(options: WithAddress<ThermostatSetpointCCReportOptions>) {\n super(options);\n this.type = options.type;\n this.value = options.value;\n this.scale = options.scale;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetpointCCReport {\n validatePayload(raw.payload.length >= 1);\n const type: ThermostatSetpointType = raw.payload[0] & 0b1111;\n if (type === 0) {\n // Not supported\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n value: 0,\n scale: 0,\n });\n }\n // parseFloatWithScale does its own validation\n const { value, scale } = parseFloatWithScale(raw.payload.subarray(1));\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n value,\n scale,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const scale = getScale(this.scale);\n const setpointValue = ThermostatSetpointCCValues.setpoint(this.type);\n const existingMetadata = this.getMetadata<ValueMetadataNumeric>(ctx, setpointValue);\n // Update the metadata when it is missing or the unit has changed\n if (existingMetadata?.unit !== scale.unit) {\n this.setMetadata(ctx, setpointValue, {\n ...(existingMetadata ?? setpointValue.meta),\n unit: scale.unit,\n });\n }\n this.setValue(ctx, setpointValue, this.value);\n // Remember the device-preferred setpoint scale so it can be used in SET commands\n this.setValue(ctx, ThermostatSetpointCCValues.setpointScale(this.type), scale.key);\n return true;\n }\n public type: ThermostatSetpointType;\n public scale: number;\n public value: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.type & 0b1111],\n encodeFloatWithScale(this.value, this.scale),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const scale = getScale(this.scale);\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setpoint type\": getEnumMemberName(ThermostatSetpointType, this.type),\n value: `${this.value} ${scale.unit}`,\n },\n };\n }\n}\nfunction testResponseForThermostatSetpointGet(sent: ThermostatSetpointCCGet, received: ThermostatSetpointCCReport) {\n // We expect a Thermostat Setpoint Report that matches the requested setpoint type\n return received.type === sent.setpointType;\n}\n// @publicAPI\nexport interface ThermostatSetpointCCGetOptions {\n setpointType: ThermostatSetpointType;\n}\n@CCCommand(ThermostatSetpointCommand.Get)\n@expectedCCResponse(ThermostatSetpointCCReport, testResponseForThermostatSetpointGet)\nexport class ThermostatSetpointCCGet extends ThermostatSetpointCC {\n public constructor(options: WithAddress<ThermostatSetpointCCGetOptions>) {\n super(options);\n this.setpointType = options.setpointType;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetpointCCGet {\n validatePayload(raw.payload.length >= 1);\n const setpointType: ThermostatSetpointType = raw.payload[0] & 0b1111;\n return new this({\n nodeId: ctx.sourceNodeId,\n setpointType,\n });\n }\n public setpointType: ThermostatSetpointType;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.setpointType & 0b1111]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setpoint type\": getEnumMemberName(ThermostatSetpointType, this.setpointType),\n },\n };\n }\n}\n// @publicAPI\nexport interface ThermostatSetpointCCCapabilitiesReportOptions {\n type: ThermostatSetpointType;\n minValue: number;\n minValueScale: number;\n maxValue: number;\n maxValueScale: number;\n}\n@CCCommand(ThermostatSetpointCommand.CapabilitiesReport)\nexport class ThermostatSetpointCCCapabilitiesReport extends ThermostatSetpointCC {\n public constructor(options: WithAddress<ThermostatSetpointCCCapabilitiesReportOptions>) {\n super(options);\n this.type = options.type;\n this.minValue = options.minValue;\n this.minValueScale = options.minValueScale;\n this.maxValue = options.maxValue;\n this.maxValueScale = options.maxValueScale;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetpointCCCapabilitiesReport {\n validatePayload(raw.payload.length >= 1);\n const type: ThermostatSetpointType = raw.payload[0];\n // parseFloatWithScale does its own validation\n const { value: minValue, scale: minValueScale, bytesRead, } = parseFloatWithScale(raw.payload.subarray(1));\n const { value: maxValue, scale: maxValueScale } = parseFloatWithScale(raw.payload.subarray(1 + bytesRead));\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n minValue,\n minValueScale,\n maxValue,\n maxValueScale,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Predefine the metadata\n const setpointValue = ThermostatSetpointCCValues.setpoint(this.type);\n this.setMetadata(ctx, setpointValue, {\n ...setpointValue.meta,\n min: this.minValue,\n max: this.maxValue,\n unit: getSetpointUnit(this.minValueScale)\n || getSetpointUnit(this.maxValueScale),\n });\n return true;\n }\n public type: ThermostatSetpointType;\n public minValue: number;\n public maxValue: number;\n public minValueScale: number;\n public maxValueScale: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const min = encodeFloatWithScale(this.minValue, this.minValueScale);\n const max = encodeFloatWithScale(this.maxValue, this.maxValueScale);\n this.payload = Bytes.concat([[this.type], min, max]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const minValueScale = getScale(this.minValueScale);\n const maxValueScale = getScale(this.maxValueScale);\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setpoint type\": getEnumMemberName(ThermostatSetpointType, this.type),\n \"min value\": `${this.minValue} ${minValueScale.unit}`,\n \"max value\": `${this.maxValue} ${maxValueScale.unit}`,\n },\n };\n }\n}\n// @publicAPI\nexport interface ThermostatSetpointCCCapabilitiesGetOptions {\n setpointType: ThermostatSetpointType;\n}\n@CCCommand(ThermostatSetpointCommand.CapabilitiesGet)\n@expectedCCResponse(ThermostatSetpointCCCapabilitiesReport)\nexport class ThermostatSetpointCCCapabilitiesGet extends ThermostatSetpointCC {\n public constructor(options: WithAddress<ThermostatSetpointCCCapabilitiesGetOptions>) {\n super(options);\n this.setpointType = options.setpointType;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetpointCCCapabilitiesGet {\n validatePayload(raw.payload.length >= 1);\n const setpointType: ThermostatSetpointType = raw.payload[0] & 0b1111;\n return new this({\n nodeId: ctx.sourceNodeId,\n setpointType,\n });\n }\n public setpointType: ThermostatSetpointType;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.setpointType & 0b1111]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setpoint type\": getEnumMemberName(ThermostatSetpointType, this.setpointType),\n },\n };\n }\n}\n// @publicAPI\nexport interface ThermostatSetpointCCSupportedReportOptions {\n supportedSetpointTypes: ThermostatSetpointType[];\n}\n@CCCommand(ThermostatSetpointCommand.SupportedReport)\n@ccValueProperty(\"supportedSetpointTypes\", ThermostatSetpointCCValues.supportedSetpointTypes)\nexport class ThermostatSetpointCCSupportedReport extends ThermostatSetpointCC {\n public constructor(options: WithAddress<ThermostatSetpointCCSupportedReportOptions>) {\n super(options);\n if (options.supportedSetpointTypes.length === 0) {\n throw new ZWaveError(`At least one setpoint type must be supported`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.supportedSetpointTypes = options.supportedSetpointTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetpointCCSupportedReport {\n validatePayload(raw.payload.length >= 1);\n const bitMask = raw.payload;\n const supported = parseBitMask(bitMask, ThermostatSetpointType[\"N/A\"]);\n // We use this command only when we are sure that bitmask interpretation A is used\n // FIXME: Figure out if we can do this without the CC version\n const supportedSetpointTypes: ThermostatSetpointType[] = supported.map((i) => thermostatSetpointTypeMap[i]);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedSetpointTypes,\n });\n }\n public readonly supportedSetpointTypes: readonly ThermostatSetpointType[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(\n // Encode as interpretation A\n this.supportedSetpointTypes\n .map((t) => thermostatSetpointTypeMap.indexOf(t))\n .filter((t) => t !== -1), undefined, ThermostatSetpointType[\"N/A\"]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported setpoint types\": logList(this.supportedSetpointTypes.map((t) => getEnumMemberName(ThermostatSetpointType, t))),\n },\n };\n }\n}\n@CCCommand(ThermostatSetpointCommand.SupportedGet)\n@expectedCCResponse(ThermostatSetpointCCSupportedReport)\n/**\n * Issues a SupportedGet command to the node. Due to inconsistencies in interpretation,\n * this command should not be used for nodes with CC versions 1 or 2\n */\nexport class ThermostatSetpointCCSupportedGet extends ThermostatSetpointCC {\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1197,10 +1197,8 @@ let UserCodeCCCapabilitiesReport = (() => {
1197
1197
  "supports user code checksum": this.supportsUserCodeChecksum,
1198
1198
  "supports multiple codes in report": this.supportsMultipleUserCodeReport,
1199
1199
  "supports multiple codes in set": this.supportsMultipleUserCodeSet,
1200
- "supported user id statuses": this.supportedUserIDStatuses.map((status) => `
1201
- \xB7 ${(0, import_shared.getEnumMemberName)(import_Types.UserIDStatus, status)}`).join(""),
1202
- "supported keypad modes": this.supportedKeypadModes.map((mode) => `
1203
- \xB7 ${(0, import_shared.getEnumMemberName)(import_Types.KeypadMode, mode)}`).join(""),
1200
+ "supported user id statuses": (0, import_core.logList)(this.supportedUserIDStatuses.map((status) => (0, import_shared.getEnumMemberName)(import_Types.UserIDStatus, status))),
1201
+ "supported keypad modes": (0, import_core.logList)(this.supportedKeypadModes.map((mode) => (0, import_shared.getEnumMemberName)(import_Types.KeypadMode, mode))),
1204
1202
  "supported ASCII chars": this.supportedASCIIChars
1205
1203
  }
1206
1204
  };