@zwave-js/cc 15.25.1 → 15.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/build/cjs/cc/AlarmSensorCC.js +5 -3
  2. package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
  3. package/build/cjs/cc/AssociationCC.js +5 -2
  4. package/build/cjs/cc/AssociationCC.js.map +2 -2
  5. package/build/cjs/cc/AssociationGroupInfoCC.js +7 -2
  6. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  7. package/build/cjs/cc/BarrierOperatorCC.js +5 -3
  8. package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
  9. package/build/cjs/cc/BasicCC.js +3 -2
  10. package/build/cjs/cc/BasicCC.js.map +2 -2
  11. package/build/cjs/cc/BatteryCC.js +3 -2
  12. package/build/cjs/cc/BatteryCC.js.map +2 -2
  13. package/build/cjs/cc/BinarySensorCC.js +5 -3
  14. package/build/cjs/cc/BinarySensorCC.js.map +2 -2
  15. package/build/cjs/cc/BinarySwitchCC.js +3 -2
  16. package/build/cjs/cc/BinarySwitchCC.js.map +2 -2
  17. package/build/cjs/cc/CentralSceneCC.js +2 -1
  18. package/build/cjs/cc/CentralSceneCC.js.map +2 -2
  19. package/build/cjs/cc/ClockCC.js +3 -2
  20. package/build/cjs/cc/ClockCC.js.map +2 -2
  21. package/build/cjs/cc/ColorSwitchCC.js +5 -2
  22. package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
  23. package/build/cjs/cc/ConfigurationCC.js +5 -2
  24. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  25. package/build/cjs/cc/DoorLockCC.js +5 -3
  26. package/build/cjs/cc/DoorLockCC.js.map +2 -2
  27. package/build/cjs/cc/DoorLockLoggingCC.js +3 -2
  28. package/build/cjs/cc/DoorLockLoggingCC.js.map +2 -2
  29. package/build/cjs/cc/EnergyProductionCC.js +3 -2
  30. package/build/cjs/cc/EnergyProductionCC.js.map +2 -2
  31. package/build/cjs/cc/EntryControlCC.js +5 -3
  32. package/build/cjs/cc/EntryControlCC.js.map +2 -2
  33. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +2 -1
  34. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
  35. package/build/cjs/cc/HumidityControlModeCC.js +5 -3
  36. package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
  37. package/build/cjs/cc/HumidityControlOperatingStateCC.js +3 -2
  38. package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +2 -2
  39. package/build/cjs/cc/HumidityControlSetpointCC.js +5 -3
  40. package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
  41. package/build/cjs/cc/IndicatorCC.js +5 -2
  42. package/build/cjs/cc/IndicatorCC.js.map +2 -2
  43. package/build/cjs/cc/IrrigationCC.js +5 -2
  44. package/build/cjs/cc/IrrigationCC.js.map +2 -2
  45. package/build/cjs/cc/LanguageCC.js +3 -2
  46. package/build/cjs/cc/LanguageCC.js.map +2 -2
  47. package/build/cjs/cc/LockCC.js +3 -2
  48. package/build/cjs/cc/LockCC.js.map +2 -2
  49. package/build/cjs/cc/ManufacturerSpecificCC.js +4 -1
  50. package/build/cjs/cc/ManufacturerSpecificCC.js.map +2 -2
  51. package/build/cjs/cc/MeterCC.js +5 -3
  52. package/build/cjs/cc/MeterCC.js.map +2 -2
  53. package/build/cjs/cc/MultiChannelAssociationCC.js +5 -2
  54. package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
  55. package/build/cjs/cc/MultiChannelCC.js +2 -1
  56. package/build/cjs/cc/MultiChannelCC.js.map +2 -2
  57. package/build/cjs/cc/MultilevelSensorCC.js +5 -2
  58. package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
  59. package/build/cjs/cc/MultilevelSwitchCC.js +5 -3
  60. package/build/cjs/cc/MultilevelSwitchCC.js.map +2 -2
  61. package/build/cjs/cc/NodeNamingCC.js +3 -2
  62. package/build/cjs/cc/NodeNamingCC.js.map +2 -2
  63. package/build/cjs/cc/NotificationCC.js +7 -3
  64. package/build/cjs/cc/NotificationCC.js.map +2 -2
  65. package/build/cjs/cc/ProtectionCC.js +5 -3
  66. package/build/cjs/cc/ProtectionCC.js.map +2 -2
  67. package/build/cjs/cc/SceneControllerConfigurationCC.js +2 -1
  68. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
  69. package/build/cjs/cc/ScheduleEntryLockCC.js +2 -1
  70. package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
  71. package/build/cjs/cc/Security2CC.js +3 -2
  72. package/build/cjs/cc/Security2CC.js.map +2 -2
  73. package/build/cjs/cc/SecurityCC.js +2 -1
  74. package/build/cjs/cc/SecurityCC.js.map +2 -2
  75. package/build/cjs/cc/SoundSwitchCC.js +2 -1
  76. package/build/cjs/cc/SoundSwitchCC.js.map +2 -2
  77. package/build/cjs/cc/ThermostatFanModeCC.js +5 -3
  78. package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
  79. package/build/cjs/cc/ThermostatFanStateCC.js +3 -2
  80. package/build/cjs/cc/ThermostatFanStateCC.js.map +2 -2
  81. package/build/cjs/cc/ThermostatModeCC.js +5 -3
  82. package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
  83. package/build/cjs/cc/ThermostatOperatingStateCC.js +3 -2
  84. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
  85. package/build/cjs/cc/ThermostatSetbackCC.js +3 -2
  86. package/build/cjs/cc/ThermostatSetbackCC.js.map +2 -2
  87. package/build/cjs/cc/ThermostatSetpointCC.js +5 -2
  88. package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
  89. package/build/cjs/cc/TimeCC.js +2 -1
  90. package/build/cjs/cc/TimeCC.js.map +2 -2
  91. package/build/cjs/cc/TimeParametersCC.js +2 -1
  92. package/build/cjs/cc/TimeParametersCC.js.map +2 -2
  93. package/build/cjs/cc/UserCodeCC.js +4 -2
  94. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  95. package/build/cjs/cc/UserCredentialCC.js +5 -2
  96. package/build/cjs/cc/UserCredentialCC.js.map +2 -2
  97. package/build/cjs/cc/VersionCC.js +2 -1
  98. package/build/cjs/cc/VersionCC.js.map +2 -2
  99. package/build/cjs/cc/WakeUpCC.js +2 -1
  100. package/build/cjs/cc/WakeUpCC.js.map +2 -2
  101. package/build/cjs/cc/WindowCoveringCC.js +5 -2
  102. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  103. package/build/cjs/cc/ZWavePlusCC.js +2 -1
  104. package/build/cjs/cc/ZWavePlusCC.js.map +2 -2
  105. package/build/cjs/cc/manufacturerProprietary/Decorators.d.ts +1 -1
  106. package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +2 -2
  107. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +3 -2
  108. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +2 -2
  109. package/build/cjs/lib/API.js.map +2 -2
  110. package/build/cjs/lib/CommandClass.d.ts +2 -0
  111. package/build/cjs/lib/CommandClass.js.map +2 -2
  112. package/build/cjs/lib/CommandClassDecorators.d.ts +4 -4
  113. package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
  114. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  115. package/build/esm/cc/AlarmSensorCC.js +3 -1
  116. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  117. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  118. package/build/esm/cc/AssociationCC.js +3 -0
  119. package/build/esm/cc/AssociationCC.js.map +1 -1
  120. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  121. package/build/esm/cc/AssociationGroupInfoCC.js +6 -1
  122. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  123. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  124. package/build/esm/cc/BarrierOperatorCC.js +3 -1
  125. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  126. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  127. package/build/esm/cc/BasicCC.js +2 -1
  128. package/build/esm/cc/BasicCC.js.map +1 -1
  129. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  130. package/build/esm/cc/BatteryCC.js +2 -1
  131. package/build/esm/cc/BatteryCC.js.map +1 -1
  132. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  133. package/build/esm/cc/BinarySensorCC.js +3 -1
  134. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  135. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  136. package/build/esm/cc/BinarySwitchCC.js +2 -1
  137. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  138. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  139. package/build/esm/cc/CentralSceneCC.js +1 -0
  140. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  141. package/build/esm/cc/ClockCC.d.ts.map +1 -1
  142. package/build/esm/cc/ClockCC.js +2 -1
  143. package/build/esm/cc/ClockCC.js.map +1 -1
  144. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  145. package/build/esm/cc/ColorSwitchCC.js +3 -0
  146. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  147. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  148. package/build/esm/cc/ConfigurationCC.js +3 -0
  149. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  150. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  151. package/build/esm/cc/DoorLockCC.js +3 -1
  152. package/build/esm/cc/DoorLockCC.js.map +1 -1
  153. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
  154. package/build/esm/cc/DoorLockLoggingCC.js +2 -1
  155. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
  156. package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
  157. package/build/esm/cc/EnergyProductionCC.js +2 -1
  158. package/build/esm/cc/EnergyProductionCC.js.map +1 -1
  159. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  160. package/build/esm/cc/EntryControlCC.js +3 -1
  161. package/build/esm/cc/EntryControlCC.js.map +1 -1
  162. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  163. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +1 -0
  164. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  165. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  166. package/build/esm/cc/HumidityControlModeCC.js +3 -1
  167. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  168. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
  169. package/build/esm/cc/HumidityControlOperatingStateCC.js +2 -1
  170. package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
  171. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  172. package/build/esm/cc/HumidityControlSetpointCC.js +3 -1
  173. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  174. package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
  175. package/build/esm/cc/IndicatorCC.js +3 -0
  176. package/build/esm/cc/IndicatorCC.js.map +1 -1
  177. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  178. package/build/esm/cc/IrrigationCC.js +3 -0
  179. package/build/esm/cc/IrrigationCC.js.map +1 -1
  180. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  181. package/build/esm/cc/LanguageCC.js +2 -1
  182. package/build/esm/cc/LanguageCC.js.map +1 -1
  183. package/build/esm/cc/LockCC.d.ts.map +1 -1
  184. package/build/esm/cc/LockCC.js +2 -1
  185. package/build/esm/cc/LockCC.js.map +1 -1
  186. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  187. package/build/esm/cc/ManufacturerSpecificCC.js +4 -1
  188. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  189. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  190. package/build/esm/cc/MeterCC.js +3 -1
  191. package/build/esm/cc/MeterCC.js.map +1 -1
  192. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  193. package/build/esm/cc/MultiChannelAssociationCC.js +3 -0
  194. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  195. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  196. package/build/esm/cc/MultiChannelCC.js +1 -0
  197. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  198. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  199. package/build/esm/cc/MultilevelSensorCC.js +3 -0
  200. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  201. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  202. package/build/esm/cc/MultilevelSwitchCC.js +3 -1
  203. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  204. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  205. package/build/esm/cc/NodeNamingCC.js +2 -1
  206. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  207. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  208. package/build/esm/cc/NotificationCC.js +5 -1
  209. package/build/esm/cc/NotificationCC.js.map +1 -1
  210. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  211. package/build/esm/cc/ProtectionCC.js +3 -1
  212. package/build/esm/cc/ProtectionCC.js.map +1 -1
  213. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
  214. package/build/esm/cc/SceneControllerConfigurationCC.js +1 -0
  215. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  216. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  217. package/build/esm/cc/ScheduleEntryLockCC.js +1 -0
  218. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  219. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  220. package/build/esm/cc/Security2CC.js +2 -1
  221. package/build/esm/cc/Security2CC.js.map +1 -1
  222. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  223. package/build/esm/cc/SecurityCC.js +1 -0
  224. package/build/esm/cc/SecurityCC.js.map +1 -1
  225. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
  226. package/build/esm/cc/SoundSwitchCC.js +1 -0
  227. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  228. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  229. package/build/esm/cc/ThermostatFanModeCC.js +3 -1
  230. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  231. package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
  232. package/build/esm/cc/ThermostatFanStateCC.js +2 -1
  233. package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
  234. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  235. package/build/esm/cc/ThermostatModeCC.js +3 -1
  236. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  237. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  238. package/build/esm/cc/ThermostatOperatingStateCC.js +2 -1
  239. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  240. package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -1
  241. package/build/esm/cc/ThermostatSetbackCC.js +2 -1
  242. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
  243. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  244. package/build/esm/cc/ThermostatSetpointCC.js +3 -0
  245. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  246. package/build/esm/cc/TimeCC.d.ts.map +1 -1
  247. package/build/esm/cc/TimeCC.js +1 -0
  248. package/build/esm/cc/TimeCC.js.map +1 -1
  249. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  250. package/build/esm/cc/TimeParametersCC.js +1 -0
  251. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  252. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  253. package/build/esm/cc/UserCodeCC.js +2 -0
  254. package/build/esm/cc/UserCodeCC.js.map +1 -1
  255. package/build/esm/cc/UserCredentialCC.d.ts.map +1 -1
  256. package/build/esm/cc/UserCredentialCC.js +4 -1
  257. package/build/esm/cc/UserCredentialCC.js.map +1 -1
  258. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  259. package/build/esm/cc/VersionCC.js +1 -0
  260. package/build/esm/cc/VersionCC.js.map +1 -1
  261. package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
  262. package/build/esm/cc/WakeUpCC.js +1 -0
  263. package/build/esm/cc/WakeUpCC.js.map +1 -1
  264. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  265. package/build/esm/cc/WindowCoveringCC.js +3 -0
  266. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  267. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
  268. package/build/esm/cc/ZWavePlusCC.js +1 -0
  269. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  270. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts +1 -1
  271. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
  272. package/build/esm/cc/manufacturerProprietary/Decorators.js.map +1 -1
  273. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
  274. package/build/esm/cc/manufacturerProprietary/FibaroCC.js +2 -1
  275. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  276. package/build/esm/lib/API.js.map +1 -1
  277. package/build/esm/lib/CommandClass.d.ts +2 -0
  278. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  279. package/build/esm/lib/CommandClass.js.map +1 -1
  280. package/build/esm/lib/CommandClassDecorators.d.ts +4 -4
  281. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
  282. package/build/esm/lib/CommandClassDecorators.js.map +1 -1
  283. package/package.json +7 -7
@@ -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 });\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 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 });\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": "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",
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": "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",
6
6
  "names": []
7
7
  }
@@ -216,7 +216,8 @@ let TimeCC = (() => {
216
216
  const node = this.getNode(ctx);
217
217
  const endpoint = this.getEndpoint(ctx);
218
218
  const api = import_API.CCAPI.create(import_core.CommandClasses.Time, ctx, endpoint).withOptions({
219
- priority: import_core.MessagePriority.NodeQuery
219
+ priority: import_core.MessagePriority.NodeQuery,
220
+ tag: "interview"
220
221
  });
221
222
  ctx.logNode(node.id, {
222
223
  endpoint: this.endpointIndex,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/TimeCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./TimeCC._validateArgs.js\";\nconst { validateArgs_TimeCCAPI_reportTime, validateArgs_TimeCCAPI_reportDate, validateArgs_TimeCCAPI_setTimezone, validateArgs_TimeCCAPI_reportTimezone } = __validateArgs;\nimport { CommandClasses, type DSTInfo, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type SupervisionResult, type WithAddress, ZWaveError, ZWaveErrorCodes, formatDate, getDSTInfo, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, pick } from \"@zwave-js/shared\";\nimport { CCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { TimeCommand } from \"../lib/_Types.js\";\nimport { encodeTimezone, parseTimezone } from \"../lib/serializers.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\n// @noSetValueAPI\n// Only the timezone information can be set and that accepts a non-primitive value\n@API(CommandClasses.Time)\nexport class TimeCCAPI extends CCAPI {\n public supportsCommand(cmd: TimeCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case TimeCommand.TimeGet:\n case TimeCommand.TimeReport:\n case TimeCommand.DateGet:\n case TimeCommand.DateReport:\n return this.isSinglecast(); // \"mandatory\"\n case TimeCommand.TimeOffsetGet:\n case TimeCommand.TimeOffsetReport:\n return this.version >= 2 && this.isSinglecast();\n case TimeCommand.TimeOffsetSet:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getTime() {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeGet);\n const cc = new TimeCCTimeGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<TimeCCTimeReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"hour\", \"minute\", \"second\"]);\n }\n }\n @validateArgs_TimeCCAPI_reportTime()\n public async reportTime(hour: number, minute: number, second: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeReport);\n const cc = new TimeCCTimeReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n hour,\n minute,\n second,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getDate() {\n this.assertSupportsCommand(TimeCommand, TimeCommand.DateGet);\n const cc = new TimeCCDateGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<TimeCCDateReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"day\", \"month\", \"year\"]);\n }\n }\n @validateArgs_TimeCCAPI_reportDate()\n public async reportDate(year: number, month: number, day: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.DateReport);\n const cc = new TimeCCDateReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n year,\n month,\n day,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_TimeCCAPI_setTimezone()\n public async setTimezone(timezone: DSTInfo): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetSet);\n const cc = new TimeCCTimeOffsetSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n standardOffset: timezone.standardOffset,\n dstOffset: timezone.dstOffset,\n dstStart: timezone.startDate,\n dstEnd: timezone.endDate,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getTimezone(): Promise<MaybeNotKnown<DSTInfo>> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetGet);\n const cc = new TimeCCTimeOffsetGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<TimeCCTimeOffsetReport>(cc, this.commandOptions);\n if (response) {\n return {\n standardOffset: response.standardOffset,\n dstOffset: response.dstOffset,\n startDate: response.dstStartDate,\n endDate: response.dstEndDate,\n };\n }\n }\n @validateArgs_TimeCCAPI_reportTimezone()\n public async reportTimezone(timezone: DSTInfo): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetReport);\n const cc = new TimeCCTimeOffsetReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n standardOffset: timezone.standardOffset,\n dstOffset: timezone.dstOffset,\n dstStart: timezone.startDate,\n dstEnd: timezone.endDate,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses.Time)\n@implementedVersion(2)\nexport class TimeCC extends CommandClass {\n declare ccCommand: TimeCommand;\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.Time, ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // Synchronize the slave's time\n if (api.version >= 2) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"setting timezone information...\",\n direction: \"outbound\",\n });\n // Set the correct timezone on this node\n const timezone = getDSTInfo();\n await api.setTimezone(timezone);\n }\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n}\n// @publicAPI\nexport interface TimeCCTimeReportOptions {\n hour: number;\n minute: number;\n second: number;\n}\n@CCCommand(TimeCommand.TimeReport)\nexport class TimeCCTimeReport extends TimeCC {\n public constructor(options: WithAddress<TimeCCTimeReportOptions>) {\n super(options);\n this.hour = options.hour;\n this.minute = options.minute;\n this.second = options.second;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeCCTimeReport {\n validatePayload(raw.payload.length >= 3);\n const hour = raw.payload[0] & 0b11111;\n const minute = raw.payload[1];\n const second = raw.payload[2];\n validatePayload(hour >= 0, hour <= 23, minute >= 0, minute <= 59, second >= 0, second <= 59);\n return new this({\n nodeId: ctx.sourceNodeId,\n hour,\n minute,\n second,\n });\n }\n public hour: number;\n public minute: number;\n public second: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.hour & 0b11111,\n this.minute,\n this.second,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n time: `${this.hour.toString().padStart(2, \"0\")}:${this.minute.toString().padStart(2, \"0\")}:${this.second.toString().padStart(2, \"0\")}`,\n },\n };\n }\n}\n@CCCommand(TimeCommand.TimeGet)\n@expectedCCResponse(TimeCCTimeReport)\nexport class TimeCCTimeGet extends TimeCC {\n}\n// @publicAPI\nexport interface TimeCCDateReportOptions {\n year: number;\n month: number;\n day: number;\n}\n@CCCommand(TimeCommand.DateReport)\nexport class TimeCCDateReport extends TimeCC {\n public constructor(options: WithAddress<TimeCCDateReportOptions>) {\n super(options);\n this.year = options.year;\n this.month = options.month;\n this.day = options.day;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeCCDateReport {\n validatePayload(raw.payload.length >= 4);\n const year = raw.payload.readUInt16BE(0);\n const month = raw.payload[2];\n const day = raw.payload[3];\n validatePayload(month >= 1, month <= 12, day >= 1, day <= 31);\n return new this({\n nodeId: ctx.sourceNodeId,\n year,\n month,\n day,\n });\n }\n public year: number;\n public month: number;\n public day: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n // 2 bytes placeholder for year\n 0,\n 0,\n this.month,\n this.day,\n ]);\n this.payload.writeUInt16BE(this.year, 0);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n date: `${this.year.toString().padStart(4, \"0\")}-${this.month.toString().padStart(2, \"0\")}-${this.day.toString().padStart(2, \"0\")}`,\n },\n };\n }\n}\n@CCCommand(TimeCommand.DateGet)\n@expectedCCResponse(TimeCCDateReport)\nexport class TimeCCDateGet extends TimeCC {\n}\n// @publicAPI\nexport interface TimeCCTimeOffsetSetOptions {\n standardOffset: number;\n dstOffset: number;\n dstStart: Date;\n dstEnd: Date;\n}\n@CCCommand(TimeCommand.TimeOffsetSet)\n@useSupervision()\nexport class TimeCCTimeOffsetSet extends TimeCC {\n public constructor(options: WithAddress<TimeCCTimeOffsetSetOptions>) {\n super(options);\n this.standardOffset = options.standardOffset;\n this.dstOffset = options.dstOffset;\n this.dstStartDate = options.dstStart;\n this.dstEndDate = options.dstEnd;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): TimeCCTimeOffsetSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new TimeCCTimeOffsetSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public standardOffset: number;\n public dstOffset: number;\n public dstStartDate: Date;\n public dstEndDate: Date;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n encodeTimezone({\n standardOffset: this.standardOffset,\n dstOffset: this.dstOffset,\n }),\n [\n this.dstStartDate.getUTCMonth() + 1,\n this.dstStartDate.getUTCDate(),\n this.dstStartDate.getUTCHours(),\n this.dstEndDate.getUTCMonth() + 1,\n this.dstEndDate.getUTCDate(),\n this.dstEndDate.getUTCHours(),\n ],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"standard time offset\": `${this.standardOffset} minutes`,\n \"DST offset\": `${this.dstOffset} minutes`,\n \"DST start date\": formatDate(this.dstStartDate, \"YYYY-MM-DD\"),\n \"DST end date\": formatDate(this.dstEndDate, \"YYYY-MM-DD\"),\n },\n };\n }\n}\n// @publicAPI\nexport interface TimeCCTimeOffsetReportOptions {\n standardOffset: number;\n dstOffset: number;\n dstStart: Date;\n dstEnd: Date;\n}\n@CCCommand(TimeCommand.TimeOffsetReport)\nexport class TimeCCTimeOffsetReport extends TimeCC {\n public constructor(options: WithAddress<TimeCCTimeOffsetReportOptions>) {\n super(options);\n this.standardOffset = options.standardOffset;\n this.dstOffset = options.dstOffset;\n this.dstStartDate = options.dstStart;\n this.dstEndDate = options.dstEnd;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeCCTimeOffsetReport {\n validatePayload(raw.payload.length >= 9);\n const { standardOffset, dstOffset } = parseTimezone(raw.payload);\n const currentYear = new Date().getUTCFullYear();\n const dstStartDate: Date = new Date(Date.UTC(currentYear, raw.payload[3] - 1, raw.payload[4], raw.payload[5]));\n const dstEndDate: Date = new Date(Date.UTC(currentYear, raw.payload[6] - 1, raw.payload[7], raw.payload[8]));\n return new this({\n nodeId: ctx.sourceNodeId,\n standardOffset,\n dstOffset,\n dstStart: dstStartDate,\n dstEnd: dstEndDate,\n });\n }\n public standardOffset: number;\n public dstOffset: number;\n public dstStartDate: Date;\n public dstEndDate: Date;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n encodeTimezone({\n standardOffset: this.standardOffset,\n dstOffset: this.dstOffset,\n }),\n [\n this.dstStartDate.getUTCMonth() + 1,\n this.dstStartDate.getUTCDate(),\n this.dstStartDate.getUTCHours(),\n this.dstEndDate.getUTCMonth() + 1,\n this.dstEndDate.getUTCDate(),\n this.dstEndDate.getUTCHours(),\n ],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"standard time offset\": `${this.standardOffset} minutes`,\n \"DST offset\": `${this.dstOffset} minutes`,\n \"DST start date\": formatDate(this.dstStartDate, \"YYYY-MM-DD\"),\n \"DST end date\": formatDate(this.dstEndDate, \"YYYY-MM-DD\"),\n },\n };\n }\n}\n@CCCommand(TimeCommand.TimeOffsetGet)\n@expectedCCResponse(TimeCCTimeOffsetReport)\nexport class TimeCCTimeOffsetGet extends TimeCC {\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./TimeCC._validateArgs.js\";\nconst { validateArgs_TimeCCAPI_reportTime, validateArgs_TimeCCAPI_reportDate, validateArgs_TimeCCAPI_setTimezone, validateArgs_TimeCCAPI_reportTimezone } = __validateArgs;\nimport { CommandClasses, type DSTInfo, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type SupervisionResult, type WithAddress, ZWaveError, ZWaveErrorCodes, formatDate, getDSTInfo, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, pick } from \"@zwave-js/shared\";\nimport { CCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { TimeCommand } from \"../lib/_Types.js\";\nimport { encodeTimezone, parseTimezone } from \"../lib/serializers.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\n// @noSetValueAPI\n// Only the timezone information can be set and that accepts a non-primitive value\n@API(CommandClasses.Time)\nexport class TimeCCAPI extends CCAPI {\n public supportsCommand(cmd: TimeCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case TimeCommand.TimeGet:\n case TimeCommand.TimeReport:\n case TimeCommand.DateGet:\n case TimeCommand.DateReport:\n return this.isSinglecast(); // \"mandatory\"\n case TimeCommand.TimeOffsetGet:\n case TimeCommand.TimeOffsetReport:\n return this.version >= 2 && this.isSinglecast();\n case TimeCommand.TimeOffsetSet:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getTime() {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeGet);\n const cc = new TimeCCTimeGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<TimeCCTimeReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"hour\", \"minute\", \"second\"]);\n }\n }\n @validateArgs_TimeCCAPI_reportTime()\n public async reportTime(hour: number, minute: number, second: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeReport);\n const cc = new TimeCCTimeReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n hour,\n minute,\n second,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getDate() {\n this.assertSupportsCommand(TimeCommand, TimeCommand.DateGet);\n const cc = new TimeCCDateGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<TimeCCDateReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"day\", \"month\", \"year\"]);\n }\n }\n @validateArgs_TimeCCAPI_reportDate()\n public async reportDate(year: number, month: number, day: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.DateReport);\n const cc = new TimeCCDateReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n year,\n month,\n day,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_TimeCCAPI_setTimezone()\n public async setTimezone(timezone: DSTInfo): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetSet);\n const cc = new TimeCCTimeOffsetSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n standardOffset: timezone.standardOffset,\n dstOffset: timezone.dstOffset,\n dstStart: timezone.startDate,\n dstEnd: timezone.endDate,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getTimezone(): Promise<MaybeNotKnown<DSTInfo>> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetGet);\n const cc = new TimeCCTimeOffsetGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<TimeCCTimeOffsetReport>(cc, this.commandOptions);\n if (response) {\n return {\n standardOffset: response.standardOffset,\n dstOffset: response.dstOffset,\n startDate: response.dstStartDate,\n endDate: response.dstEndDate,\n };\n }\n }\n @validateArgs_TimeCCAPI_reportTimezone()\n public async reportTimezone(timezone: DSTInfo): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetReport);\n const cc = new TimeCCTimeOffsetReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n standardOffset: timezone.standardOffset,\n dstOffset: timezone.dstOffset,\n dstStart: timezone.startDate,\n dstEnd: timezone.endDate,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses.Time)\n@implementedVersion(2)\nexport class TimeCC extends CommandClass {\n declare ccCommand: TimeCommand;\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.Time, 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 // Synchronize the slave's time\n if (api.version >= 2) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"setting timezone information...\",\n direction: \"outbound\",\n });\n // Set the correct timezone on this node\n const timezone = getDSTInfo();\n await api.setTimezone(timezone);\n }\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n}\n// @publicAPI\nexport interface TimeCCTimeReportOptions {\n hour: number;\n minute: number;\n second: number;\n}\n@CCCommand(TimeCommand.TimeReport)\nexport class TimeCCTimeReport extends TimeCC {\n public constructor(options: WithAddress<TimeCCTimeReportOptions>) {\n super(options);\n this.hour = options.hour;\n this.minute = options.minute;\n this.second = options.second;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeCCTimeReport {\n validatePayload(raw.payload.length >= 3);\n const hour = raw.payload[0] & 0b11111;\n const minute = raw.payload[1];\n const second = raw.payload[2];\n validatePayload(hour >= 0, hour <= 23, minute >= 0, minute <= 59, second >= 0, second <= 59);\n return new this({\n nodeId: ctx.sourceNodeId,\n hour,\n minute,\n second,\n });\n }\n public hour: number;\n public minute: number;\n public second: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.hour & 0b11111,\n this.minute,\n this.second,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n time: `${this.hour.toString().padStart(2, \"0\")}:${this.minute.toString().padStart(2, \"0\")}:${this.second.toString().padStart(2, \"0\")}`,\n },\n };\n }\n}\n@CCCommand(TimeCommand.TimeGet)\n@expectedCCResponse(TimeCCTimeReport)\nexport class TimeCCTimeGet extends TimeCC {\n}\n// @publicAPI\nexport interface TimeCCDateReportOptions {\n year: number;\n month: number;\n day: number;\n}\n@CCCommand(TimeCommand.DateReport)\nexport class TimeCCDateReport extends TimeCC {\n public constructor(options: WithAddress<TimeCCDateReportOptions>) {\n super(options);\n this.year = options.year;\n this.month = options.month;\n this.day = options.day;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeCCDateReport {\n validatePayload(raw.payload.length >= 4);\n const year = raw.payload.readUInt16BE(0);\n const month = raw.payload[2];\n const day = raw.payload[3];\n validatePayload(month >= 1, month <= 12, day >= 1, day <= 31);\n return new this({\n nodeId: ctx.sourceNodeId,\n year,\n month,\n day,\n });\n }\n public year: number;\n public month: number;\n public day: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n // 2 bytes placeholder for year\n 0,\n 0,\n this.month,\n this.day,\n ]);\n this.payload.writeUInt16BE(this.year, 0);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n date: `${this.year.toString().padStart(4, \"0\")}-${this.month.toString().padStart(2, \"0\")}-${this.day.toString().padStart(2, \"0\")}`,\n },\n };\n }\n}\n@CCCommand(TimeCommand.DateGet)\n@expectedCCResponse(TimeCCDateReport)\nexport class TimeCCDateGet extends TimeCC {\n}\n// @publicAPI\nexport interface TimeCCTimeOffsetSetOptions {\n standardOffset: number;\n dstOffset: number;\n dstStart: Date;\n dstEnd: Date;\n}\n@CCCommand(TimeCommand.TimeOffsetSet)\n@useSupervision()\nexport class TimeCCTimeOffsetSet extends TimeCC {\n public constructor(options: WithAddress<TimeCCTimeOffsetSetOptions>) {\n super(options);\n this.standardOffset = options.standardOffset;\n this.dstOffset = options.dstOffset;\n this.dstStartDate = options.dstStart;\n this.dstEndDate = options.dstEnd;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): TimeCCTimeOffsetSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new TimeCCTimeOffsetSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public standardOffset: number;\n public dstOffset: number;\n public dstStartDate: Date;\n public dstEndDate: Date;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n encodeTimezone({\n standardOffset: this.standardOffset,\n dstOffset: this.dstOffset,\n }),\n [\n this.dstStartDate.getUTCMonth() + 1,\n this.dstStartDate.getUTCDate(),\n this.dstStartDate.getUTCHours(),\n this.dstEndDate.getUTCMonth() + 1,\n this.dstEndDate.getUTCDate(),\n this.dstEndDate.getUTCHours(),\n ],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"standard time offset\": `${this.standardOffset} minutes`,\n \"DST offset\": `${this.dstOffset} minutes`,\n \"DST start date\": formatDate(this.dstStartDate, \"YYYY-MM-DD\"),\n \"DST end date\": formatDate(this.dstEndDate, \"YYYY-MM-DD\"),\n },\n };\n }\n}\n// @publicAPI\nexport interface TimeCCTimeOffsetReportOptions {\n standardOffset: number;\n dstOffset: number;\n dstStart: Date;\n dstEnd: Date;\n}\n@CCCommand(TimeCommand.TimeOffsetReport)\nexport class TimeCCTimeOffsetReport extends TimeCC {\n public constructor(options: WithAddress<TimeCCTimeOffsetReportOptions>) {\n super(options);\n this.standardOffset = options.standardOffset;\n this.dstOffset = options.dstOffset;\n this.dstStartDate = options.dstStart;\n this.dstEndDate = options.dstEnd;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeCCTimeOffsetReport {\n validatePayload(raw.payload.length >= 9);\n const { standardOffset, dstOffset } = parseTimezone(raw.payload);\n const currentYear = new Date().getUTCFullYear();\n const dstStartDate: Date = new Date(Date.UTC(currentYear, raw.payload[3] - 1, raw.payload[4], raw.payload[5]));\n const dstEndDate: Date = new Date(Date.UTC(currentYear, raw.payload[6] - 1, raw.payload[7], raw.payload[8]));\n return new this({\n nodeId: ctx.sourceNodeId,\n standardOffset,\n dstOffset,\n dstStart: dstStartDate,\n dstEnd: dstEndDate,\n });\n }\n public standardOffset: number;\n public dstOffset: number;\n public dstStartDate: Date;\n public dstEndDate: Date;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n encodeTimezone({\n standardOffset: this.standardOffset,\n dstOffset: this.dstOffset,\n }),\n [\n this.dstStartDate.getUTCMonth() + 1,\n this.dstStartDate.getUTCDate(),\n this.dstStartDate.getUTCHours(),\n this.dstEndDate.getUTCMonth() + 1,\n this.dstEndDate.getUTCDate(),\n this.dstEndDate.getUTCHours(),\n ],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"standard time offset\": `${this.standardOffset} minutes`,\n \"DST offset\": `${this.dstOffset} minutes`,\n \"DST start date\": formatDate(this.dstStartDate, \"YYYY-MM-DD\"),\n \"DST end date\": formatDate(this.dstEndDate, \"YYYY-MM-DD\"),\n },\n };\n }\n}\n@CCCommand(TimeCommand.TimeOffsetGet)\n@expectedCCResponse(TimeCCTimeOffsetReport)\nexport class TimeCCTimeOffsetGet extends TimeCC {\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -186,7 +186,8 @@ let TimeParametersCC = (() => {
186
186
  const node = this.getNode(ctx);
187
187
  const endpoint = this.getEndpoint(ctx);
188
188
  const api = import_API.CCAPI.create(import_core.CommandClasses["Time Parameters"], ctx, endpoint).withOptions({
189
- priority: import_core.MessagePriority.NodeQuery
189
+ priority: import_core.MessagePriority.NodeQuery,
190
+ tag: "interview"
190
191
  });
191
192
  ctx.logNode(node.id, {
192
193
  endpoint: this.endpointIndex,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/TimeParametersCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./TimeParametersCC._validateArgs.js\";\nconst { validateArgs_TimeParametersCCAPI_set } = __validateArgs;\nimport type { GetDeviceConfig } from \"@zwave-js/config\";\nimport { CommandClasses, type ControlsCC, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type SupervisionResult, type SupportsCC, ValueMetadata, type WithAddress, formatDate, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { TimeParametersCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { TimeParametersCCValues } from \"./_CCValues.generated.js\";\nexport { TimeParametersCCValues };\n/**\n * Determines if the node expects local time instead of UTC.\n */\nfunction shouldUseLocalTime(ctx: GetDeviceConfig, endpoint: EndpointId & SupportsCC & ControlsCC): boolean {\n // GH#311 Some nodes have no way to determine the time zone offset,\n // so they need to interpret the set time as local time instead of UTC.\n //\n // This is the case when they both\n // 1. DON'T control TimeCC V1, so they cannot request the local time\n // 2. DON'T support TimeCC V2, so the controller cannot specify the timezone offset\n // Incidentally, this is also true when they don't support TimeCC at all\n // Use UTC though when the device config file explicitly requests it\n const forceUTC = !!ctx.getDeviceConfig?.(endpoint.nodeId)?.compat\n ?.useUTCInTimeParametersCC;\n if (forceUTC)\n return false;\n const ccVersion = endpoint.getCCVersion(CommandClasses.Time);\n if (ccVersion >= 1 && endpoint.controlsCC(CommandClasses.Time)) {\n return false;\n }\n if (ccVersion >= 2 && endpoint.supportsCC(CommandClasses.Time)) {\n return false;\n }\n return true;\n}\ninterface DateSegments {\n year: number;\n month: number;\n day: number;\n hour: number;\n minute: number;\n second: number;\n}\nfunction segmentsToDate(segments: DateSegments, local: boolean): Date {\n if (local) {\n return new Date(segments.year, segments.month - 1, segments.day, segments.hour, segments.minute, segments.second);\n }\n else {\n return new Date(Date.UTC(segments.year, segments.month - 1, segments.day, segments.hour, segments.minute, segments.second));\n }\n}\nfunction dateToSegments(date: Date, local: boolean): DateSegments {\n return {\n year: (date as any)[`get${local ? \"\" : \"UTC\"}FullYear`]() as number,\n month: ((date as any)[`get${local ? \"\" : \"UTC\"}Month`]() as number) + 1,\n day: (date as any)[`get${local ? \"\" : \"UTC\"}Date`]() as number,\n hour: (date as any)[`get${local ? \"\" : \"UTC\"}Hours`]() as number,\n minute: (date as any)[`get${local ? \"\" : \"UTC\"}Minutes`]() as number,\n second: (date as any)[`get${local ? \"\" : \"UTC\"}Seconds`]() as number,\n };\n}\n@API(CommandClasses[\"Time Parameters\"])\nexport class TimeParametersCCAPI extends CCAPI {\n public supportsCommand(cmd: TimeParametersCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case TimeParametersCommand.Get:\n return this.isSinglecast();\n case TimeParametersCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: TimeParametersCCAPI, { property }, value) {\n if (property !== \"dateAndTime\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (!(value instanceof Date)) {\n throwWrongValueType(this.ccId, property, \"date\", typeof value);\n }\n return this.set(value);\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: TimeParametersCCAPI, { property }) {\n switch (property) {\n case \"dateAndTime\":\n return this.get();\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n public async get(): Promise<MaybeNotKnown<Date>> {\n this.assertSupportsCommand(TimeParametersCommand, TimeParametersCommand.Get);\n const cc = new TimeParametersCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<TimeParametersCCReport>(cc, this.commandOptions);\n return response?.dateAndTime;\n }\n @validateArgs_TimeParametersCCAPI_set()\n public async set(dateAndTime: Date): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeParametersCommand, TimeParametersCommand.Set);\n const endpointToCheck = this.endpoint.virtual\n ? this.endpoint.node.physicalNodes[0].getEndpoint(this.endpoint.index)!\n : this.endpoint;\n const useLocalTime = shouldUseLocalTime(this.host, endpointToCheck);\n const cc = new TimeParametersCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n dateAndTime,\n useLocalTime,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Time Parameters\"])\n@implementedVersion(1)\n@ccValues(TimeParametersCCValues)\nexport class TimeParametersCC extends CommandClass {\n declare ccCommand: TimeParametersCommand;\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[\"Time Parameters\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // Synchronize the node's time\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"setting current time...\",\n direction: \"outbound\",\n });\n await api.set(new Date());\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n}\n// @publicAPI\nexport interface TimeParametersCCReportOptions {\n dateAndTime: Date;\n}\n@CCCommand(TimeParametersCommand.Report)\n@ccValueProperty(\"dateAndTime\", TimeParametersCCValues.dateAndTime)\nexport class TimeParametersCCReport extends TimeParametersCC {\n public constructor(options: WithAddress<TimeParametersCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.dateAndTime = options.dateAndTime;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeParametersCCReport {\n validatePayload(raw.payload.length >= 7);\n const dateSegments = {\n year: raw.payload.readUInt16BE(0),\n month: raw.payload[2],\n day: raw.payload[3],\n hour: raw.payload[4],\n minute: raw.payload[5],\n second: raw.payload[6],\n };\n validatePayload(dateSegments.month >= 1 && dateSegments.month <= 12, dateSegments.day >= 1 && dateSegments.day <= 31, dateSegments.hour >= 0 && dateSegments.hour <= 23, dateSegments.minute >= 0 && dateSegments.minute <= 59, dateSegments.second >= 0 && dateSegments.second <= 59);\n const dateAndTime: Date = segmentsToDate(dateSegments, \n // Assume we can use UTC and correct this assumption in persistValues\n false);\n return new this({\n nodeId: ctx.sourceNodeId,\n dateAndTime,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n // If necessary, fix the date and time before persisting it\n const local = shouldUseLocalTime(ctx, this.getEndpoint(ctx)!);\n if (local) {\n // The initial assumption was incorrect, re-interpret the time\n const segments = dateToSegments(this.dateAndTime, false);\n this.dateAndTime = segmentsToDate(segments, local);\n }\n return super.persistValues(ctx);\n }\n public dateAndTime: Date;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"date and time\": formatDate(this.dateAndTime, \"YYYY-MM-DD HH:mm:ss\"),\n },\n };\n }\n}\n@CCCommand(TimeParametersCommand.Get)\n@expectedCCResponse(TimeParametersCCReport)\nexport class TimeParametersCCGet extends TimeParametersCC {\n}\n// @publicAPI\nexport interface TimeParametersCCSetOptions {\n dateAndTime: Date;\n useLocalTime?: boolean;\n}\n@CCCommand(TimeParametersCommand.Set)\n@useSupervision()\nexport class TimeParametersCCSet extends TimeParametersCC {\n public constructor(options: WithAddress<TimeParametersCCSetOptions>) {\n super(options);\n this.dateAndTime = options.dateAndTime;\n this.useLocalTime = options.useLocalTime;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeParametersCCSet {\n validatePayload(raw.payload.length >= 7);\n const dateSegments = {\n year: raw.payload.readUInt16BE(0),\n month: raw.payload[2],\n day: raw.payload[3],\n hour: raw.payload[4],\n minute: raw.payload[5],\n second: raw.payload[6],\n };\n validatePayload(dateSegments.month >= 1 && dateSegments.month <= 12, dateSegments.day >= 1 && dateSegments.day <= 31, dateSegments.hour >= 0 && dateSegments.hour <= 23, dateSegments.minute >= 0 && dateSegments.minute <= 59, dateSegments.second >= 0 && dateSegments.second <= 59);\n const dateAndTime = segmentsToDate(dateSegments, \n // Assume we can use UTC and correct this assumption in persistValues\n false);\n return new this({\n nodeId: ctx.sourceNodeId,\n dateAndTime,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n // We do not actually persist anything here, but we need access to the node\n // in order to interpret the date segments correctly\n const local = shouldUseLocalTime(ctx, this.getEndpoint(ctx)!);\n if (local) {\n // The initial assumption was incorrect, re-interpret the time\n const segments = dateToSegments(this.dateAndTime, false);\n this.dateAndTime = segmentsToDate(segments, local);\n }\n return super.persistValues(ctx);\n }\n public dateAndTime: Date;\n private useLocalTime?: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const dateSegments = dateToSegments(this.dateAndTime, !!this.useLocalTime);\n this.payload = Bytes.from([\n // 2 bytes placeholder for year\n 0,\n 0,\n dateSegments.month,\n dateSegments.day,\n dateSegments.hour,\n dateSegments.minute,\n dateSegments.second,\n ]);\n this.payload.writeUInt16BE(dateSegments.year, 0);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"date and time\": formatDate(this.dateAndTime, \"YYYY-MM-DD HH:mm:ss\"),\n },\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./TimeParametersCC._validateArgs.js\";\nconst { validateArgs_TimeParametersCCAPI_set } = __validateArgs;\nimport type { GetDeviceConfig } from \"@zwave-js/config\";\nimport { CommandClasses, type ControlsCC, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type SupervisionResult, type SupportsCC, ValueMetadata, type WithAddress, formatDate, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { TimeParametersCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { TimeParametersCCValues } from \"./_CCValues.generated.js\";\nexport { TimeParametersCCValues };\n/**\n * Determines if the node expects local time instead of UTC.\n */\nfunction shouldUseLocalTime(ctx: GetDeviceConfig, endpoint: EndpointId & SupportsCC & ControlsCC): boolean {\n // GH#311 Some nodes have no way to determine the time zone offset,\n // so they need to interpret the set time as local time instead of UTC.\n //\n // This is the case when they both\n // 1. DON'T control TimeCC V1, so they cannot request the local time\n // 2. DON'T support TimeCC V2, so the controller cannot specify the timezone offset\n // Incidentally, this is also true when they don't support TimeCC at all\n // Use UTC though when the device config file explicitly requests it\n const forceUTC = !!ctx.getDeviceConfig?.(endpoint.nodeId)?.compat\n ?.useUTCInTimeParametersCC;\n if (forceUTC)\n return false;\n const ccVersion = endpoint.getCCVersion(CommandClasses.Time);\n if (ccVersion >= 1 && endpoint.controlsCC(CommandClasses.Time)) {\n return false;\n }\n if (ccVersion >= 2 && endpoint.supportsCC(CommandClasses.Time)) {\n return false;\n }\n return true;\n}\ninterface DateSegments {\n year: number;\n month: number;\n day: number;\n hour: number;\n minute: number;\n second: number;\n}\nfunction segmentsToDate(segments: DateSegments, local: boolean): Date {\n if (local) {\n return new Date(segments.year, segments.month - 1, segments.day, segments.hour, segments.minute, segments.second);\n }\n else {\n return new Date(Date.UTC(segments.year, segments.month - 1, segments.day, segments.hour, segments.minute, segments.second));\n }\n}\nfunction dateToSegments(date: Date, local: boolean): DateSegments {\n return {\n year: (date as any)[`get${local ? \"\" : \"UTC\"}FullYear`]() as number,\n month: ((date as any)[`get${local ? \"\" : \"UTC\"}Month`]() as number) + 1,\n day: (date as any)[`get${local ? \"\" : \"UTC\"}Date`]() as number,\n hour: (date as any)[`get${local ? \"\" : \"UTC\"}Hours`]() as number,\n minute: (date as any)[`get${local ? \"\" : \"UTC\"}Minutes`]() as number,\n second: (date as any)[`get${local ? \"\" : \"UTC\"}Seconds`]() as number,\n };\n}\n@API(CommandClasses[\"Time Parameters\"])\nexport class TimeParametersCCAPI extends CCAPI {\n public supportsCommand(cmd: TimeParametersCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case TimeParametersCommand.Get:\n return this.isSinglecast();\n case TimeParametersCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: TimeParametersCCAPI, { property }, value) {\n if (property !== \"dateAndTime\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (!(value instanceof Date)) {\n throwWrongValueType(this.ccId, property, \"date\", typeof value);\n }\n return this.set(value);\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: TimeParametersCCAPI, { property }) {\n switch (property) {\n case \"dateAndTime\":\n return this.get();\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n public async get(): Promise<MaybeNotKnown<Date>> {\n this.assertSupportsCommand(TimeParametersCommand, TimeParametersCommand.Get);\n const cc = new TimeParametersCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<TimeParametersCCReport>(cc, this.commandOptions);\n return response?.dateAndTime;\n }\n @validateArgs_TimeParametersCCAPI_set()\n public async set(dateAndTime: Date): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeParametersCommand, TimeParametersCommand.Set);\n const endpointToCheck = this.endpoint.virtual\n ? this.endpoint.node.physicalNodes[0].getEndpoint(this.endpoint.index)!\n : this.endpoint;\n const useLocalTime = shouldUseLocalTime(this.host, endpointToCheck);\n const cc = new TimeParametersCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n dateAndTime,\n useLocalTime,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Time Parameters\"])\n@implementedVersion(1)\n@ccValues(TimeParametersCCValues)\nexport class TimeParametersCC extends CommandClass {\n declare ccCommand: TimeParametersCommand;\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[\"Time Parameters\"], 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 // Synchronize the node's time\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"setting current time...\",\n direction: \"outbound\",\n });\n await api.set(new Date());\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n}\n// @publicAPI\nexport interface TimeParametersCCReportOptions {\n dateAndTime: Date;\n}\n@CCCommand(TimeParametersCommand.Report)\n@ccValueProperty(\"dateAndTime\", TimeParametersCCValues.dateAndTime)\nexport class TimeParametersCCReport extends TimeParametersCC {\n public constructor(options: WithAddress<TimeParametersCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.dateAndTime = options.dateAndTime;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeParametersCCReport {\n validatePayload(raw.payload.length >= 7);\n const dateSegments = {\n year: raw.payload.readUInt16BE(0),\n month: raw.payload[2],\n day: raw.payload[3],\n hour: raw.payload[4],\n minute: raw.payload[5],\n second: raw.payload[6],\n };\n validatePayload(dateSegments.month >= 1 && dateSegments.month <= 12, dateSegments.day >= 1 && dateSegments.day <= 31, dateSegments.hour >= 0 && dateSegments.hour <= 23, dateSegments.minute >= 0 && dateSegments.minute <= 59, dateSegments.second >= 0 && dateSegments.second <= 59);\n const dateAndTime: Date = segmentsToDate(dateSegments, \n // Assume we can use UTC and correct this assumption in persistValues\n false);\n return new this({\n nodeId: ctx.sourceNodeId,\n dateAndTime,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n // If necessary, fix the date and time before persisting it\n const local = shouldUseLocalTime(ctx, this.getEndpoint(ctx)!);\n if (local) {\n // The initial assumption was incorrect, re-interpret the time\n const segments = dateToSegments(this.dateAndTime, false);\n this.dateAndTime = segmentsToDate(segments, local);\n }\n return super.persistValues(ctx);\n }\n public dateAndTime: Date;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"date and time\": formatDate(this.dateAndTime, \"YYYY-MM-DD HH:mm:ss\"),\n },\n };\n }\n}\n@CCCommand(TimeParametersCommand.Get)\n@expectedCCResponse(TimeParametersCCReport)\nexport class TimeParametersCCGet extends TimeParametersCC {\n}\n// @publicAPI\nexport interface TimeParametersCCSetOptions {\n dateAndTime: Date;\n useLocalTime?: boolean;\n}\n@CCCommand(TimeParametersCommand.Set)\n@useSupervision()\nexport class TimeParametersCCSet extends TimeParametersCC {\n public constructor(options: WithAddress<TimeParametersCCSetOptions>) {\n super(options);\n this.dateAndTime = options.dateAndTime;\n this.useLocalTime = options.useLocalTime;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeParametersCCSet {\n validatePayload(raw.payload.length >= 7);\n const dateSegments = {\n year: raw.payload.readUInt16BE(0),\n month: raw.payload[2],\n day: raw.payload[3],\n hour: raw.payload[4],\n minute: raw.payload[5],\n second: raw.payload[6],\n };\n validatePayload(dateSegments.month >= 1 && dateSegments.month <= 12, dateSegments.day >= 1 && dateSegments.day <= 31, dateSegments.hour >= 0 && dateSegments.hour <= 23, dateSegments.minute >= 0 && dateSegments.minute <= 59, dateSegments.second >= 0 && dateSegments.second <= 59);\n const dateAndTime = segmentsToDate(dateSegments, \n // Assume we can use UTC and correct this assumption in persistValues\n false);\n return new this({\n nodeId: ctx.sourceNodeId,\n dateAndTime,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n // We do not actually persist anything here, but we need access to the node\n // in order to interpret the date segments correctly\n const local = shouldUseLocalTime(ctx, this.getEndpoint(ctx)!);\n if (local) {\n // The initial assumption was incorrect, re-interpret the time\n const segments = dateToSegments(this.dateAndTime, false);\n this.dateAndTime = segmentsToDate(segments, local);\n }\n return super.persistValues(ctx);\n }\n public dateAndTime: Date;\n private useLocalTime?: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const dateSegments = dateToSegments(this.dateAndTime, !!this.useLocalTime);\n this.payload = Bytes.from([\n // 2 bytes placeholder for year\n 0,\n 0,\n dateSegments.month,\n dateSegments.day,\n dateSegments.hour,\n dateSegments.minute,\n dateSegments.second,\n ]);\n this.payload.writeUInt16BE(dateSegments.year, 0);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"date and time\": formatDate(this.dateAndTime, \"YYYY-MM-DD HH:mm:ss\"),\n },\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -578,7 +578,8 @@ let UserCodeCC = (() => {
578
578
  }
579
579
  }
580
580
  const api = import_API.CCAPI.create(import_core.CommandClasses["User Code"], ctx, endpoint).withOptions({
581
- priority: import_core.MessagePriority.NodeQuery
581
+ priority: import_core.MessagePriority.NodeQuery,
582
+ tag: "interview"
582
583
  });
583
584
  ctx.logNode(node.id, {
584
585
  endpoint: this.endpointIndex,
@@ -629,7 +630,8 @@ let UserCodeCC = (() => {
629
630
  return;
630
631
  }
631
632
  const api = import_API.CCAPI.create(import_core.CommandClasses["User Code"], ctx, endpoint).withOptions({
632
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
633
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
634
+ tag: options?.tag
633
635
  });
634
636
  const { queryAllUserCodes = false } = options ?? {};
635
637
  const supportsAdminCode = UserCodeCC2.supportsAdminCodeCached(ctx, endpoint);