@zwave-js/cc 14.1.0 → 14.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
  2. package/build/cjs/cc/AssociationCC.d.ts +2 -0
  3. package/build/cjs/cc/AssociationCC.js +5 -0
  4. package/build/cjs/cc/AssociationCC.js.map +2 -2
  5. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  6. package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
  7. package/build/cjs/cc/BasicCC.js.map +2 -2
  8. package/build/cjs/cc/BatteryCC.js.map +2 -2
  9. package/build/cjs/cc/BinarySensorCC.js.map +2 -2
  10. package/build/cjs/cc/BinarySwitchCC.js.map +2 -2
  11. package/build/cjs/cc/CRC16CC.d.ts +4 -0
  12. package/build/cjs/cc/CRC16CC.js +23 -0
  13. package/build/cjs/cc/CRC16CC.js.map +2 -2
  14. package/build/cjs/cc/CentralSceneCC.js.map +2 -2
  15. package/build/cjs/cc/ClimateControlScheduleCC.js.map +2 -2
  16. package/build/cjs/cc/ClockCC.js.map +2 -2
  17. package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
  18. package/build/cjs/cc/ConfigurationCC.d.ts +4 -0
  19. package/build/cjs/cc/ConfigurationCC.js +10 -0
  20. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  21. package/build/cjs/cc/DoorLockCC.js.map +2 -2
  22. package/build/cjs/cc/DoorLockLoggingCC.js.map +2 -2
  23. package/build/cjs/cc/EnergyProductionCC.js.map +2 -2
  24. package/build/cjs/cc/EntryControlCC.js.map +2 -2
  25. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
  26. package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
  27. package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
  28. package/build/cjs/cc/InclusionControllerCC.js.map +2 -2
  29. package/build/cjs/cc/IndicatorCC.js.map +2 -2
  30. package/build/cjs/cc/IrrigationCC.js.map +2 -2
  31. package/build/cjs/cc/LanguageCC.js.map +2 -2
  32. package/build/cjs/cc/LockCC.js.map +2 -2
  33. package/build/cjs/cc/ManufacturerProprietaryCC.js.map +2 -2
  34. package/build/cjs/cc/ManufacturerSpecificCC.js.map +2 -2
  35. package/build/cjs/cc/MeterCC.js.map +2 -2
  36. package/build/cjs/cc/MultiChannelAssociationCC.d.ts +2 -0
  37. package/build/cjs/cc/MultiChannelAssociationCC.js +6 -0
  38. package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
  39. package/build/cjs/cc/MultiChannelCC.d.ts +10 -0
  40. package/build/cjs/cc/MultiChannelCC.js +65 -0
  41. package/build/cjs/cc/MultiChannelCC.js.map +2 -2
  42. package/build/cjs/cc/MultiCommandCC.d.ts +4 -0
  43. package/build/cjs/cc/MultiCommandCC.js +34 -1
  44. package/build/cjs/cc/MultiCommandCC.js.map +2 -2
  45. package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
  46. package/build/cjs/cc/MultilevelSwitchCC.js.map +2 -2
  47. package/build/cjs/cc/NodeNamingCC.js.map +2 -2
  48. package/build/cjs/cc/NotificationCC.js.map +2 -2
  49. package/build/cjs/cc/PowerlevelCC.js.map +2 -2
  50. package/build/cjs/cc/ProtectionCC.js.map +2 -2
  51. package/build/cjs/cc/SceneActivationCC.js.map +2 -2
  52. package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +2 -2
  53. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
  54. package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
  55. package/build/cjs/cc/Security2CC.d.ts +4 -0
  56. package/build/cjs/cc/Security2CC.js +215 -0
  57. package/build/cjs/cc/Security2CC.js.map +2 -2
  58. package/build/cjs/cc/SecurityCC.d.ts +6 -0
  59. package/build/cjs/cc/SecurityCC.js +53 -0
  60. package/build/cjs/cc/SecurityCC.js.map +2 -2
  61. package/build/cjs/cc/SoundSwitchCC.js.map +2 -2
  62. package/build/cjs/cc/SupervisionCC.d.ts +4 -0
  63. package/build/cjs/cc/SupervisionCC.js +25 -0
  64. package/build/cjs/cc/SupervisionCC.js.map +2 -2
  65. package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
  66. package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
  67. package/build/cjs/cc/ThermostatSetbackCC.js.map +2 -2
  68. package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
  69. package/build/cjs/cc/TimeCC.js.map +2 -2
  70. package/build/cjs/cc/TimeParametersCC.js.map +2 -2
  71. package/build/cjs/cc/TransportServiceCC.d.ts +5 -0
  72. package/build/cjs/cc/TransportServiceCC.js +13 -0
  73. package/build/cjs/cc/TransportServiceCC.js.map +2 -2
  74. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  75. package/build/cjs/cc/VersionCC.js.map +2 -2
  76. package/build/cjs/cc/WakeUpCC.js.map +2 -2
  77. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  78. package/build/cjs/cc/ZWavePlusCC.js.map +2 -2
  79. package/build/cjs/cc/ZWaveProtocolCC.js.map +2 -2
  80. package/build/cjs/cc/manufacturerProprietary/Decorators.js +6 -5
  81. package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +2 -2
  82. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +2 -2
  83. package/build/cjs/lib/CommandClass.d.ts +15 -1
  84. package/build/cjs/lib/CommandClass.js +56 -1
  85. package/build/cjs/lib/CommandClass.js.map +2 -2
  86. package/build/cjs/lib/CommandClassDecorators.js +7 -6
  87. package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
  88. package/build/cjs/lib/Security2/Extension.js +2 -2
  89. package/build/cjs/lib/Security2/Extension.js.map +2 -2
  90. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  91. package/build/esm/cc/AlarmSensorCC.js +1 -0
  92. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  93. package/build/esm/cc/AssociationCC.d.ts +2 -0
  94. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  95. package/build/esm/cc/AssociationCC.js +14 -0
  96. package/build/esm/cc/AssociationCC.js.map +1 -1
  97. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  98. package/build/esm/cc/AssociationGroupInfoCC.js +6 -0
  99. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  100. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  101. package/build/esm/cc/BarrierOperatorCC.js +3 -0
  102. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  103. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  104. package/build/esm/cc/BasicCC.js +2 -0
  105. package/build/esm/cc/BasicCC.js.map +1 -1
  106. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  107. package/build/esm/cc/BatteryCC.js +1 -0
  108. package/build/esm/cc/BatteryCC.js.map +1 -1
  109. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  110. package/build/esm/cc/BinarySensorCC.js +3 -0
  111. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  112. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  113. package/build/esm/cc/BinarySwitchCC.js +2 -0
  114. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  115. package/build/esm/cc/CRC16CC.d.ts +4 -0
  116. package/build/esm/cc/CRC16CC.d.ts.map +1 -1
  117. package/build/esm/cc/CRC16CC.js +30 -0
  118. package/build/esm/cc/CRC16CC.js.map +1 -1
  119. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  120. package/build/esm/cc/CentralSceneCC.js +1 -0
  121. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  122. package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
  123. package/build/esm/cc/ClimateControlScheduleCC.js +3 -0
  124. package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
  125. package/build/esm/cc/ClockCC.d.ts.map +1 -1
  126. package/build/esm/cc/ClockCC.js +1 -0
  127. package/build/esm/cc/ClockCC.js.map +1 -1
  128. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  129. package/build/esm/cc/ColorSwitchCC.js +6 -0
  130. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  131. package/build/esm/cc/ConfigurationCC.d.ts +4 -0
  132. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  133. package/build/esm/cc/ConfigurationCC.js +27 -0
  134. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  135. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  136. package/build/esm/cc/DoorLockCC.js +2 -0
  137. package/build/esm/cc/DoorLockCC.js.map +1 -1
  138. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
  139. package/build/esm/cc/DoorLockLoggingCC.js +1 -0
  140. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
  141. package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
  142. package/build/esm/cc/EnergyProductionCC.js +2 -0
  143. package/build/esm/cc/EnergyProductionCC.js.map +1 -1
  144. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  145. package/build/esm/cc/EntryControlCC.js +1 -0
  146. package/build/esm/cc/EntryControlCC.js.map +1 -1
  147. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  148. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +5 -0
  149. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  150. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  151. package/build/esm/cc/HumidityControlModeCC.js +1 -0
  152. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  153. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  154. package/build/esm/cc/HumidityControlSetpointCC.js +4 -0
  155. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  156. package/build/esm/cc/InclusionControllerCC.d.ts.map +1 -1
  157. package/build/esm/cc/InclusionControllerCC.js +2 -0
  158. package/build/esm/cc/InclusionControllerCC.js.map +1 -1
  159. package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
  160. package/build/esm/cc/IndicatorCC.js +7 -0
  161. package/build/esm/cc/IndicatorCC.js.map +1 -1
  162. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  163. package/build/esm/cc/IrrigationCC.js +9 -0
  164. package/build/esm/cc/IrrigationCC.js.map +1 -1
  165. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  166. package/build/esm/cc/LanguageCC.js +1 -0
  167. package/build/esm/cc/LanguageCC.js.map +1 -1
  168. package/build/esm/cc/LockCC.d.ts.map +1 -1
  169. package/build/esm/cc/LockCC.js +1 -0
  170. package/build/esm/cc/LockCC.js.map +1 -1
  171. package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
  172. package/build/esm/cc/ManufacturerProprietaryCC.js +2 -0
  173. package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
  174. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  175. package/build/esm/cc/ManufacturerSpecificCC.js +2 -0
  176. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  177. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  178. package/build/esm/cc/MeterCC.js +4 -0
  179. package/build/esm/cc/MeterCC.js.map +1 -1
  180. package/build/esm/cc/MultiChannelAssociationCC.d.ts +2 -0
  181. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  182. package/build/esm/cc/MultiChannelAssociationCC.js +17 -0
  183. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  184. package/build/esm/cc/MultiChannelCC.d.ts +10 -0
  185. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  186. package/build/esm/cc/MultiChannelCC.js +94 -0
  187. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  188. package/build/esm/cc/MultiCommandCC.d.ts +4 -0
  189. package/build/esm/cc/MultiCommandCC.d.ts.map +1 -1
  190. package/build/esm/cc/MultiCommandCC.js +35 -1
  191. package/build/esm/cc/MultiCommandCC.js.map +1 -1
  192. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  193. package/build/esm/cc/MultilevelSensorCC.js +5 -0
  194. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  195. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  196. package/build/esm/cc/MultilevelSwitchCC.js +4 -0
  197. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  198. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  199. package/build/esm/cc/NodeNamingCC.js +2 -0
  200. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  201. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  202. package/build/esm/cc/NotificationCC.js +9 -0
  203. package/build/esm/cc/NotificationCC.js.map +1 -1
  204. package/build/esm/cc/PowerlevelCC.d.ts.map +1 -1
  205. package/build/esm/cc/PowerlevelCC.js +4 -0
  206. package/build/esm/cc/PowerlevelCC.js.map +1 -1
  207. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  208. package/build/esm/cc/ProtectionCC.js +3 -0
  209. package/build/esm/cc/ProtectionCC.js.map +1 -1
  210. package/build/esm/cc/SceneActivationCC.d.ts.map +1 -1
  211. package/build/esm/cc/SceneActivationCC.js +1 -0
  212. package/build/esm/cc/SceneActivationCC.js.map +1 -1
  213. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -1
  214. package/build/esm/cc/SceneActuatorConfigurationCC.js +2 -0
  215. package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
  216. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
  217. package/build/esm/cc/SceneControllerConfigurationCC.js +2 -0
  218. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  219. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  220. package/build/esm/cc/ScheduleEntryLockCC.js +14 -0
  221. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  222. package/build/esm/cc/Security2CC.d.ts +4 -0
  223. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  224. package/build/esm/cc/Security2CC.js +301 -0
  225. package/build/esm/cc/Security2CC.js.map +1 -1
  226. package/build/esm/cc/SecurityCC.d.ts +6 -0
  227. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  228. package/build/esm/cc/SecurityCC.js +73 -0
  229. package/build/esm/cc/SecurityCC.js.map +1 -1
  230. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
  231. package/build/esm/cc/SoundSwitchCC.js +7 -0
  232. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  233. package/build/esm/cc/SupervisionCC.d.ts +4 -0
  234. package/build/esm/cc/SupervisionCC.d.ts.map +1 -1
  235. package/build/esm/cc/SupervisionCC.js +30 -0
  236. package/build/esm/cc/SupervisionCC.js.map +1 -1
  237. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  238. package/build/esm/cc/ThermostatFanModeCC.js +1 -0
  239. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  240. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  241. package/build/esm/cc/ThermostatModeCC.js +3 -0
  242. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  243. package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -1
  244. package/build/esm/cc/ThermostatSetbackCC.js +2 -0
  245. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
  246. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  247. package/build/esm/cc/ThermostatSetpointCC.js +6 -0
  248. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  249. package/build/esm/cc/TimeCC.d.ts.map +1 -1
  250. package/build/esm/cc/TimeCC.js +4 -0
  251. package/build/esm/cc/TimeCC.js.map +1 -1
  252. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  253. package/build/esm/cc/TimeParametersCC.js +1 -0
  254. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  255. package/build/esm/cc/TransportServiceCC.d.ts +5 -0
  256. package/build/esm/cc/TransportServiceCC.d.ts.map +1 -1
  257. package/build/esm/cc/TransportServiceCC.js +24 -0
  258. package/build/esm/cc/TransportServiceCC.js.map +1 -1
  259. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  260. package/build/esm/cc/UserCodeCC.js +12 -0
  261. package/build/esm/cc/UserCodeCC.js.map +1 -1
  262. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  263. package/build/esm/cc/VersionCC.js +4 -0
  264. package/build/esm/cc/VersionCC.js.map +1 -1
  265. package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
  266. package/build/esm/cc/WakeUpCC.js +1 -0
  267. package/build/esm/cc/WakeUpCC.js.map +1 -1
  268. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  269. package/build/esm/cc/WindowCoveringCC.js +5 -0
  270. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  271. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
  272. package/build/esm/cc/ZWavePlusCC.js +1 -0
  273. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  274. package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -1
  275. package/build/esm/cc/ZWaveProtocolCC.js +27 -0
  276. package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
  277. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
  278. package/build/esm/cc/manufacturerProprietary/Decorators.js +2 -1
  279. package/build/esm/cc/manufacturerProprietary/Decorators.js.map +1 -1
  280. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
  281. package/build/esm/cc/manufacturerProprietary/FibaroCC.js +3 -0
  282. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  283. package/build/esm/lib/CommandClass.d.ts +15 -1
  284. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  285. package/build/esm/lib/CommandClass.js +94 -1
  286. package/build/esm/lib/CommandClass.js.map +1 -1
  287. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
  288. package/build/esm/lib/CommandClassDecorators.js +2 -1
  289. package/build/esm/lib/CommandClassDecorators.js.map +1 -1
  290. package/build/esm/lib/Security2/Extension.js +1 -1
  291. package/build/esm/lib/Security2/Extension.js.map +1 -1
  292. package/package.json +4 -4
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/VersionCC.ts"],
4
- "sourcesContent": ["import {\n\tCommandClasses,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\tSecurityClass,\n\tValueMetadata,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tZWaveLibraryTypes,\n\tenumValuesToMetadataStates,\n\tgetCCName,\n\tsecurityClassIsS2,\n\tsecurityClassOrder,\n\tvalidatePayload,\n} from \"@zwave-js/core/safe\";\nimport type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetValueDB,\n} from \"@zwave-js/host/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { getEnumMemberName, num2hex, pick } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\tgetImplementedVersion,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { VersionCommand } from \"../lib/_Types.js\";\n\nexport const VersionCCValues = Object.freeze({\n\t...V.defineStaticCCValues(CommandClasses.Version, {\n\t\t...V.staticProperty(\n\t\t\t\"firmwareVersions\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnly,\n\t\t\t\ttype: \"string[]\",\n\t\t\t\tlabel: \"Z-Wave chip firmware versions\",\n\t\t\t} as const,\n\t\t\t{ supportsEndpoints: false },\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"libraryType\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyNumber,\n\t\t\t\tlabel: \"Library type\",\n\t\t\t\tstates: enumValuesToMetadataStates(ZWaveLibraryTypes),\n\t\t\t} as const,\n\t\t\t{ supportsEndpoints: false },\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"protocolVersion\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Z-Wave protocol version\",\n\t\t\t} as const,\n\t\t\t{ supportsEndpoints: false },\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"hardwareVersion\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyNumber,\n\t\t\t\tlabel: \"Z-Wave chip hardware version\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 2,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"supportsZWaveSoftwareGet\",\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tinternal: true,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"sdkVersion\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"SDK version\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"applicationFrameworkAPIVersion\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Z-Wave application framework API version\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"applicationFrameworkBuildNumber\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Z-Wave application framework API build number\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticPropertyWithName(\n\t\t\t\"serialAPIVersion\",\n\t\t\t\"hostInterfaceVersion\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Serial API version\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticPropertyWithName(\n\t\t\t\"serialAPIBuildNumber\",\n\t\t\t\"hostInterfaceBuildNumber\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Serial API build number\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"zWaveProtocolVersion\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Z-Wave protocol version\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"zWaveProtocolBuildNumber\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Z-Wave protocol build number\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"applicationVersion\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Application version\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"applicationBuildNumber\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Application build number\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\t}),\n});\n\nfunction parseVersion(buffer: Uint8Array): string {\n\tif (buffer[0] === 0 && buffer[1] === 0 && buffer[2] === 0) return \"unused\";\n\treturn `${buffer[0]}.${buffer[1]}.${buffer[2]}`;\n}\n\n// @noSetValueAPI This CC is read-only\n\n@API(CommandClasses.Version)\nexport class VersionCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(cmd: VersionCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase VersionCommand.Get:\n\t\t\tcase VersionCommand.Report:\n\t\t\tcase VersionCommand.CommandClassGet:\n\t\t\tcase VersionCommand.CommandClassReport:\n\t\t\t\treturn true; // This is mandatory\n\n\t\t\tcase VersionCommand.CapabilitiesGet:\n\t\t\tcase VersionCommand.CapabilitiesReport:\n\t\t\tcase VersionCommand.ZWaveSoftwareReport:\n\t\t\t\treturn this.version >= 3;\n\n\t\t\tcase VersionCommand.ZWaveSoftwareGet: {\n\t\t\t\treturn this.getValueDB().getValue<boolean>(\n\t\t\t\t\tVersionCCValues.supportsZWaveSoftwareGet.endpoint(\n\t\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async get() {\n\t\tthis.assertSupportsCommand(VersionCommand, VersionCommand.Get);\n\n\t\tconst cc = new VersionCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<VersionCCReport>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"libraryType\",\n\t\t\t\t\"protocolVersion\",\n\t\t\t\t\"firmwareVersions\",\n\t\t\t\t\"hardwareVersion\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async sendReport(options: VersionCCReportOptions): Promise<void> {\n\t\tthis.assertSupportsCommand(VersionCommand, VersionCommand.Report);\n\n\t\tconst cc = new VersionCCReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async getCCVersion(\n\t\trequestedCC: CommandClasses,\n\t): Promise<MaybeNotKnown<number>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CommandClassGet,\n\t\t);\n\n\t\tconst cc = new VersionCCCommandClassGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\trequestedCC,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tVersionCCCommandClassReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.ccVersion;\n\t}\n\n\t@validateArgs()\n\tpublic async reportCCVersion(requestedCC: CommandClasses): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CommandClassReport,\n\t\t);\n\n\t\tlet ccVersion: number;\n\t\tswitch (requestedCC) {\n\t\t\tcase CommandClasses[\"Z-Wave Protocol\"]:\n\t\t\tcase CommandClasses[\"Z-Wave Long Range\"]:\n\t\t\t\t// These two are only for internal use\n\t\t\t\tccVersion = 0;\n\t\t\t\tbreak;\n\t\t\tcase CommandClasses.Hail:\n\t\t\tcase CommandClasses[\"Manufacturer Proprietary\"]:\n\t\t\t\t// These CCs are obsolete, we cannot enter them in the certification portal\n\t\t\t\t// but not doing so fails a certification test. Just respond that they\n\t\t\t\t// are not supported or controlled\n\t\t\t\tccVersion = 0;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tccVersion = getImplementedVersion(requestedCC);\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst cc = new VersionCCCommandClassReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\trequestedCC,\n\t\t\tccVersion,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getCapabilities() {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CapabilitiesGet,\n\t\t);\n\n\t\tconst cc = new VersionCCCapabilitiesGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tVersionCCCapabilitiesReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"supportsZWaveSoftwareGet\"]);\n\t\t}\n\t}\n\n\tpublic async reportCapabilities(): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CapabilitiesReport,\n\t\t);\n\n\t\tconst cc = new VersionCCCapabilitiesReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t// At this time, we do not support responding to Z-Wave Software Get\n\t\t\tsupportsZWaveSoftwareGet: false,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getZWaveSoftware() {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.ZWaveSoftwareGet,\n\t\t);\n\n\t\tconst cc = new VersionCCZWaveSoftwareGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tVersionCCZWaveSoftwareReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"sdkVersion\",\n\t\t\t\t\"applicationFrameworkAPIVersion\",\n\t\t\t\t\"applicationFrameworkBuildNumber\",\n\t\t\t\t\"hostInterfaceVersion\",\n\t\t\t\t\"hostInterfaceBuildNumber\",\n\t\t\t\t\"zWaveProtocolVersion\",\n\t\t\t\t\"zWaveProtocolBuildNumber\",\n\t\t\t\t\"applicationVersion\",\n\t\t\t\t\"applicationBuildNumber\",\n\t\t\t]);\n\t\t}\n\t}\n}\n\n@commandClass(CommandClasses.Version)\n@implementedVersion(3)\n@ccValues(VersionCCValues)\nexport class VersionCC extends CommandClass {\n\tdeclare ccCommand: VersionCommand;\n\n\tpublic determineRequiredCCInterviews(): readonly CommandClasses[] {\n\t\t// VersionCC must be the 2nd CC after ManufacturerSpecificCC\n\t\treturn [CommandClasses[\"Manufacturer Specific\"]];\n\t}\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\n\t\t// SDS13782: In a Multi Channel device, the Version Command Class MUST be supported by the Root Device, while\n\t\t// the Version Command Class SHOULD NOT be supported by individual End Points.\n\t\t//\n\t\t// There may be cases where a given Command Class is not implemented by the Root Device of a Multi\n\t\t// Channel device. However, the Root Device MUST respond to Version requests for any Command Class\n\t\t// implemented by the Multi Channel device; also in cases where the actual Command Class is only\n\t\t// provided by an End Point.\n\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\n\t\t// Use the CC API of the root device for all queries\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses.Version,\n\t\t\tctx,\n\t\t\tnode,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tconst queryCCVersion = async (cc: CommandClasses): Promise<void> => {\n\t\t\t// Only query CCs we support. Theoretically we could skip queries where we support only V1,\n\t\t\t// but there are Z-Wave certification tests that require us to query all CCs\n\t\t\tconst maxImplemented = getImplementedVersion(cc);\n\t\t\tif (maxImplemented === 0) {\n\t\t\t\tctx.logNode(\n\t\t\t\t\tnode.id,\n\t\t\t\t\t` skipping query for ${CommandClasses[cc]} (${\n\t\t\t\t\t\tnum2hex(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t}) because max implemented version is ${maxImplemented}`,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: ` querying the CC version for ${getCCName(cc)}...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\t// query the CC version\n\t\t\tconst supportedVersion = await api.getCCVersion(cc);\n\t\t\tif (supportedVersion != undefined) {\n\t\t\t\t// Remember which CC version this endpoint supports\n\t\t\t\tlet logMessage: string;\n\t\t\t\tif (supportedVersion > 0) {\n\t\t\t\t\t// Basic CC has special rules for when it is considered supported\n\t\t\t\t\t// Therefore we mark all other CCs as supported, but not Basic CC,\n\t\t\t\t\t// for which support is determined later.\n\t\t\t\t\tif (cc === CommandClasses.Basic) {\n\t\t\t\t\t\tendpoint.addCC(cc, { version: supportedVersion });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tendpoint.addCC(cc, {\n\t\t\t\t\t\t\tisSupported: true,\n\t\t\t\t\t\t\tversion: supportedVersion,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tlogMessage = ` supports CC ${CommandClasses[cc]} (${\n\t\t\t\t\t\tnum2hex(cc)\n\t\t\t\t\t}) in version ${supportedVersion}`;\n\t\t\t\t} else {\n\t\t\t\t\t// We were lied to - the NIF said this CC is supported, now the node claims it isn't\n\t\t\t\t\t// Make sure this is not a critical CC, which must be supported though\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tcc === CommandClasses.Version\n\t\t\t\t\t\t|| cc === CommandClasses[\"Manufacturer Specific\"]\n\t\t\t\t\t) {\n\t\t\t\t\t\tlogMessage = ` claims NOT to support CC ${\n\t\t\t\t\t\t\tCommandClasses[cc]\n\t\t\t\t\t\t} (${num2hex(cc)}), but it must. Assuming the ${\n\t\t\t\t\t\t\tthis.endpointIndex === 0 ? \"node\" : \"endpoint\"\n\t\t\t\t\t\t} supports version 1...`;\n\t\t\t\t\t\tendpoint.addCC(cc, { version: 1 });\n\t\t\t\t\t} else if (\n\t\t\t\t\t\t(cc === CommandClasses.Security\n\t\t\t\t\t\t\t&& node.hasSecurityClass(SecurityClass.S0_Legacy))\n\t\t\t\t\t\t|| (cc === CommandClasses[\"Security 2\"]\n\t\t\t\t\t\t\t&& securityClassOrder.some((sc) =>\n\t\t\t\t\t\t\t\tsecurityClassIsS2(sc)\n\t\t\t\t\t\t\t\t&& node.hasSecurityClass(sc)\n\t\t\t\t\t\t\t))\n\t\t\t\t\t) {\n\t\t\t\t\t\tlogMessage = ` claims NOT to support CC ${\n\t\t\t\t\t\t\tCommandClasses[cc]\n\t\t\t\t\t\t} (${\n\t\t\t\t\t\t\tnum2hex(cc)\n\t\t\t\t\t\t}), but it is known to support it. Assuming the ${\n\t\t\t\t\t\t\tthis.endpointIndex === 0 ? \"node\" : \"endpoint\"\n\t\t\t\t\t\t} supports version 1...`;\n\t\t\t\t\t\tendpoint.addCC(cc, { version: 1 });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlogMessage = ` does NOT support CC ${\n\t\t\t\t\t\t\tCommandClasses[cc]\n\t\t\t\t\t\t} (${num2hex(cc)})`;\n\t\t\t\t\t\tendpoint.removeCC(cc);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `CC version query for ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t} timed out - assuming the ${\n\t\t\t\t\t\tthis.endpointIndex === 0 ? \"node\" : \"endpoint\"\n\t\t\t\t\t} supports version 1...`,\n\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t});\n\t\t\t\tendpoint.addCC(cc, { version: 1 });\n\t\t\t}\n\t\t};\n\n\t\t// Version information should not change (except for firmware updates)\n\t\t// And it is only relevant on the root endpoint (the node)\n\t\tif (this.endpointIndex === 0) {\n\t\t\t// Step 1: Query Version CC version\n\t\t\tawait queryCCVersion(CommandClasses.Version);\n\n\t\t\t// Step 2: Query node versions\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"querying node versions...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst versionGetResponse = await api.get();\n\t\t\tif (versionGetResponse) {\n\t\t\t\tlet logMessage = `received response for node versions:\n library type: ${ZWaveLibraryTypes[versionGetResponse.libraryType]} (${\n\t\t\t\t\tnum2hex(versionGetResponse.libraryType)\n\t\t\t\t})\n protocol version: ${versionGetResponse.protocolVersion}\n firmware versions: ${versionGetResponse.firmwareVersions.join(\", \")}`;\n\t\t\t\tif (versionGetResponse.hardwareVersion != undefined) {\n\t\t\t\t\tlogMessage +=\n\t\t\t\t\t\t`\\n hardware version: ${versionGetResponse.hardwareVersion}`;\n\t\t\t\t}\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Step 3: Query all other CC versions\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"querying CC versions...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\t// Basic CC is not included in the NIF, so it won't be returned by endpoint.getCCs() at this point\n\t\t{\n\t\t\tconst cc = CommandClasses.Basic;\n\t\t\t// Skip the query of endpoint CCs that are also supported by the root device\n\t\t\tif (this.endpointIndex === 0 || node.getCCVersion(cc) === 0) {\n\t\t\t\tawait queryCCVersion(cc);\n\t\t\t}\n\t\t}\n\t\tfor (const [cc] of endpoint.getCCs()) {\n\t\t\t// We already queried the Version CC version at the start of this interview\n\t\t\tif (cc === CommandClasses.Version) continue;\n\t\t\t// And we queried Basic CC just before this\n\t\t\tif (cc === CommandClasses.Basic) continue;\n\t\t\t// Skip the query of endpoint CCs that are also supported by the root device\n\t\t\tif (this.endpointIndex > 0 && node.getCCVersion(cc) > 0) continue;\n\t\t\tawait queryCCVersion(cc);\n\t\t}\n\n\t\t// Step 4: Query VersionCC capabilities (root device only)\n\t\tif (this.endpointIndex === 0 && api.version >= 3) {\n\t\t\t// Step 4a: Support for SoftwareGet\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"querying if Z-Wave Software Get is supported...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst capsResponse = await api.getCapabilities();\n\t\t\tif (capsResponse) {\n\t\t\t\tconst { supportsZWaveSoftwareGet } = capsResponse;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `Z-Wave Software Get is${\n\t\t\t\t\t\tsupportsZWaveSoftwareGet ? \"\" : \" not\"\n\t\t\t\t\t} supported`,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\n\t\t\t\tif (supportsZWaveSoftwareGet) {\n\t\t\t\t\t// Step 4b: Query Z-Wave Software versions\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: \"querying Z-Wave software versions...\",\n\t\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t\t});\n\t\t\t\t\tawait api.getZWaveSoftware();\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: \"received Z-Wave software versions\",\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface VersionCCReportOptions {\n\tlibraryType: ZWaveLibraryTypes;\n\tprotocolVersion: string;\n\tfirmwareVersions: string[];\n\thardwareVersion?: number;\n}\n\n@CCCommand(VersionCommand.Report)\n@ccValueProperty(\"libraryType\", VersionCCValues.libraryType)\n@ccValueProperty(\"protocolVersion\", VersionCCValues.protocolVersion)\n@ccValueProperty(\"firmwareVersions\", VersionCCValues.firmwareVersions)\n@ccValueProperty(\"hardwareVersion\", VersionCCValues.hardwareVersion)\nexport class VersionCCReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tif (!/^\\d+\\.\\d+(\\.\\d+)?$/.test(options.protocolVersion)) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`protocolVersion must be a string in the format \"major.minor\" or \"major.minor.patch\", received \"${options.protocolVersion}\"`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t} else if (\n\t\t\t!options.firmwareVersions.every((fw) =>\n\t\t\t\t/^\\d+\\.\\d+(\\.\\d+)?$/.test(fw)\n\t\t\t)\n\t\t) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`firmwareVersions must be an array of strings in the format \"major.minor\" or \"major.minor.patch\", received \"${\n\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\toptions.firmwareVersions,\n\t\t\t\t\t)\n\t\t\t\t}\"`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.libraryType = options.libraryType;\n\t\tthis.protocolVersion = options.protocolVersion;\n\t\tthis.firmwareVersions = options.firmwareVersions;\n\t\tthis.hardwareVersion = options.hardwareVersion;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): VersionCCReport {\n\t\tvalidatePayload(raw.payload.length >= 5);\n\t\tconst libraryType: ZWaveLibraryTypes = raw.payload[0];\n\t\tconst protocolVersion = `${raw.payload[1]}.${raw.payload[2]}`;\n\t\tconst firmwareVersions = [`${raw.payload[3]}.${raw.payload[4]}`];\n\n\t\tlet hardwareVersion: number | undefined;\n\t\tif (raw.payload.length >= 7) {\n\t\t\t// V2+\n\t\t\thardwareVersion = raw.payload[5];\n\t\t\tconst additionalFirmwares = raw.payload[6];\n\t\t\tvalidatePayload(\n\t\t\t\traw.payload.length >= 7 + 2 * additionalFirmwares,\n\t\t\t);\n\t\t\tfor (let i = 0; i < additionalFirmwares; i++) {\n\t\t\t\tfirmwareVersions.push(\n\t\t\t\t\t`${raw.payload[7 + 2 * i]}.${raw.payload[7 + 2 * i + 1]}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tlibraryType,\n\t\t\tprotocolVersion,\n\t\t\tfirmwareVersions,\n\t\t\thardwareVersion,\n\t\t});\n\t}\n\n\tpublic readonly libraryType: ZWaveLibraryTypes;\n\n\tpublic readonly protocolVersion: string;\n\n\tpublic readonly firmwareVersions: string[];\n\n\tpublic readonly hardwareVersion: number | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.libraryType,\n\t\t\t...this.protocolVersion\n\t\t\t\t.split(\".\")\n\t\t\t\t.map((n) => parseInt(n))\n\t\t\t\t.slice(0, 2),\n\t\t\t...this.firmwareVersions[0]\n\t\t\t\t.split(\".\")\n\t\t\t\t.map((n) => parseInt(n))\n\t\t\t\t.slice(0, 2),\n\t\t\tthis.hardwareVersion ?? 0x00,\n\t\t\tthis.firmwareVersions.length - 1,\n\t\t]);\n\n\t\tif (this.firmwareVersions.length > 1) {\n\t\t\tconst firmwaresBuffer = new Bytes(\n\t\t\t\t(this.firmwareVersions.length - 1) * 2,\n\t\t\t);\n\t\t\tfor (let i = 1; i < this.firmwareVersions.length; i++) {\n\t\t\t\tconst [major, minor] = this.firmwareVersions[i]\n\t\t\t\t\t.split(\".\")\n\t\t\t\t\t.map((n) => parseInt(n));\n\t\t\t\tfirmwaresBuffer[2 * (i - 1)] = major;\n\t\t\t\tfirmwaresBuffer[2 * (i - 1) + 1] = minor;\n\t\t\t}\n\t\t\tthis.payload = Bytes.concat([this.payload, firmwaresBuffer]);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"library type\": getEnumMemberName(\n\t\t\t\tZWaveLibraryTypes,\n\t\t\t\tthis.libraryType,\n\t\t\t),\n\t\t\t\"protocol version\": this.protocolVersion,\n\t\t\t\"firmware versions\": this.firmwareVersions.join(\", \"),\n\t\t};\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tmessage[\"hardware version\"] = this.hardwareVersion;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(VersionCommand.Get)\n@expectedCCResponse(VersionCCReport)\nexport class VersionCCGet extends VersionCC {}\n\n// @publicAPI\nexport interface VersionCCCommandClassReportOptions {\n\trequestedCC: CommandClasses;\n\tccVersion: number;\n}\n\n@CCCommand(VersionCommand.CommandClassReport)\nexport class VersionCCCommandClassReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCCommandClassReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.requestedCC = options.requestedCC;\n\t\tthis.ccVersion = options.ccVersion;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCCommandClassReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst requestedCC: CommandClasses = raw.payload[0];\n\t\tconst ccVersion = raw.payload[1];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trequestedCC,\n\t\t\tccVersion,\n\t\t});\n\t}\n\n\tpublic ccVersion: number;\n\tpublic requestedCC: CommandClasses;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.requestedCC, this.ccVersion]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tCC: getCCName(this.requestedCC),\n\t\t\t\tversion: this.ccVersion,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface VersionCCCommandClassGetOptions {\n\trequestedCC: CommandClasses;\n}\n\nfunction testResponseForVersionCommandClassGet(\n\tsent: VersionCCCommandClassGet,\n\treceived: VersionCCCommandClassReport,\n) {\n\t// We expect a Version CommandClass Report that matches the requested CC\n\treturn sent.requestedCC === received.requestedCC;\n}\n\n@CCCommand(VersionCommand.CommandClassGet)\n@expectedCCResponse(\n\tVersionCCCommandClassReport,\n\ttestResponseForVersionCommandClassGet,\n)\nexport class VersionCCCommandClassGet extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCCommandClassGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.requestedCC = options.requestedCC;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCCommandClassGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst requestedCC: CommandClasses = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trequestedCC,\n\t\t});\n\t}\n\n\tpublic requestedCC: CommandClasses;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.requestedCC]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { CC: getCCName(this.requestedCC) },\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface VersionCCCapabilitiesReportOptions {\n\tsupportsZWaveSoftwareGet: boolean;\n}\n\n@CCCommand(VersionCommand.CapabilitiesReport)\n@ccValueProperty(\n\t\"supportsZWaveSoftwareGet\",\n\tVersionCCValues.supportsZWaveSoftwareGet,\n)\nexport class VersionCCCapabilitiesReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCCapabilitiesReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.supportsZWaveSoftwareGet = options.supportsZWaveSoftwareGet;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCCapabilitiesReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst capabilities = raw.payload[0];\n\t\tconst supportsZWaveSoftwareGet = !!(capabilities & 0b100);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportsZWaveSoftwareGet,\n\t\t});\n\t}\n\n\tpublic supportsZWaveSoftwareGet: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\t(this.supportsZWaveSoftwareGet ? 0b100 : 0) | 0b11,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supports Z-Wave Software Get command\":\n\t\t\t\t\tthis.supportsZWaveSoftwareGet,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(VersionCommand.CapabilitiesGet)\n@expectedCCResponse(VersionCCCapabilitiesReport)\nexport class VersionCCCapabilitiesGet extends VersionCC {}\n\n// @publicAPI\nexport interface VersionCCZWaveSoftwareReportOptions {\n\tsdkVersion: string;\n\tapplicationFrameworkAPIVersion: string;\n\tapplicationFrameworkBuildNumber: number;\n\thostInterfaceVersion: string;\n\thostInterfaceBuildNumber: number;\n\tzWaveProtocolVersion: string;\n\tzWaveProtocolBuildNumber: number;\n\tapplicationVersion: string;\n\tapplicationBuildNumber: number;\n}\n\n@CCCommand(VersionCommand.ZWaveSoftwareReport)\n@ccValueProperty(\"sdkVersion\", VersionCCValues.sdkVersion)\n@ccValueProperty(\n\t\"applicationFrameworkAPIVersion\",\n\tVersionCCValues.applicationFrameworkAPIVersion,\n)\n@ccValueProperty(\n\t\"applicationFrameworkBuildNumber\",\n\tVersionCCValues.applicationFrameworkBuildNumber,\n)\n@ccValueProperty(\"hostInterfaceVersion\", VersionCCValues.serialAPIVersion)\n@ccValueProperty(\n\t\"hostInterfaceBuildNumber\",\n\tVersionCCValues.serialAPIBuildNumber,\n)\n@ccValueProperty(\"zWaveProtocolVersion\", VersionCCValues.zWaveProtocolVersion)\n@ccValueProperty(\n\t\"zWaveProtocolBuildNumber\",\n\tVersionCCValues.zWaveProtocolBuildNumber,\n)\n@ccValueProperty(\"applicationVersion\", VersionCCValues.applicationVersion)\n@ccValueProperty(\n\t\"applicationBuildNumber\",\n\tVersionCCValues.applicationBuildNumber,\n)\nexport class VersionCCZWaveSoftwareReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCZWaveSoftwareReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.sdkVersion = options.sdkVersion;\n\t\tthis.applicationFrameworkAPIVersion =\n\t\t\toptions.applicationFrameworkAPIVersion;\n\t\tthis.applicationFrameworkBuildNumber =\n\t\t\toptions.applicationFrameworkBuildNumber;\n\t\tthis.hostInterfaceVersion = options.hostInterfaceVersion;\n\t\tthis.hostInterfaceBuildNumber = options.hostInterfaceBuildNumber;\n\t\tthis.zWaveProtocolVersion = options.zWaveProtocolVersion;\n\t\tthis.zWaveProtocolBuildNumber = options.zWaveProtocolBuildNumber;\n\t\tthis.applicationVersion = options.applicationVersion;\n\t\tthis.applicationBuildNumber = options.applicationBuildNumber;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCZWaveSoftwareReport {\n\t\tvalidatePayload(raw.payload.length >= 23);\n\t\tconst sdkVersion = parseVersion(raw.payload);\n\t\tconst applicationFrameworkAPIVersion = parseVersion(\n\t\t\traw.payload.subarray(3),\n\t\t);\n\t\tlet applicationFrameworkBuildNumber;\n\t\tif (applicationFrameworkAPIVersion !== \"unused\") {\n\t\t\tapplicationFrameworkBuildNumber = raw.payload.readUInt16BE(6);\n\t\t} else {\n\t\t\tapplicationFrameworkBuildNumber = 0;\n\t\t}\n\n\t\tconst hostInterfaceVersion = parseVersion(raw.payload.subarray(8));\n\t\tlet hostInterfaceBuildNumber;\n\t\tif (hostInterfaceVersion !== \"unused\") {\n\t\t\thostInterfaceBuildNumber = raw.payload.readUInt16BE(11);\n\t\t} else {\n\t\t\thostInterfaceBuildNumber = 0;\n\t\t}\n\n\t\tconst zWaveProtocolVersion = parseVersion(raw.payload.subarray(13));\n\t\tlet zWaveProtocolBuildNumber;\n\t\tif (zWaveProtocolVersion !== \"unused\") {\n\t\t\tzWaveProtocolBuildNumber = raw.payload.readUInt16BE(16);\n\t\t} else {\n\t\t\tzWaveProtocolBuildNumber = 0;\n\t\t}\n\n\t\tconst applicationVersion = parseVersion(raw.payload.subarray(18));\n\t\tlet applicationBuildNumber;\n\t\tif (applicationVersion !== \"unused\") {\n\t\t\tapplicationBuildNumber = raw.payload.readUInt16BE(21);\n\t\t} else {\n\t\t\tapplicationBuildNumber = 0;\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsdkVersion,\n\t\t\tapplicationFrameworkAPIVersion,\n\t\t\tapplicationFrameworkBuildNumber,\n\t\t\thostInterfaceVersion,\n\t\t\thostInterfaceBuildNumber,\n\t\t\tzWaveProtocolVersion,\n\t\t\tzWaveProtocolBuildNumber,\n\t\t\tapplicationVersion,\n\t\t\tapplicationBuildNumber,\n\t\t});\n\t}\n\n\tpublic readonly sdkVersion: string;\n\n\tpublic readonly applicationFrameworkAPIVersion: string;\n\n\tpublic readonly applicationFrameworkBuildNumber: number;\n\n\tpublic readonly hostInterfaceVersion: string;\n\n\tpublic readonly hostInterfaceBuildNumber: number;\n\n\tpublic readonly zWaveProtocolVersion: string;\n\n\tpublic readonly zWaveProtocolBuildNumber: number;\n\n\tpublic readonly applicationVersion: string;\n\n\tpublic readonly applicationBuildNumber: number;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"SDK version\": this.sdkVersion,\n\t\t};\n\t\tmessage[\"appl. framework API version\"] =\n\t\t\tthis.applicationFrameworkAPIVersion;\n\t\tif (this.applicationFrameworkAPIVersion !== \"unused\") {\n\t\t\tmessage[\"appl. framework build number\"] =\n\t\t\t\tthis.applicationFrameworkBuildNumber;\n\t\t}\n\t\tmessage[\"host interface version\"] = this.hostInterfaceVersion;\n\t\tif (this.hostInterfaceVersion !== \"unused\") {\n\t\t\tmessage[\"host interface build number\"] =\n\t\t\t\tthis.hostInterfaceBuildNumber;\n\t\t}\n\t\tmessage[\"Z-Wave protocol version\"] = this.zWaveProtocolVersion;\n\t\tif (this.zWaveProtocolVersion !== \"unused\") {\n\t\t\tmessage[\"Z-Wave protocol build number\"] =\n\t\t\t\tthis.zWaveProtocolBuildNumber;\n\t\t}\n\t\tmessage[\"application version\"] = this.applicationVersion;\n\t\tif (this.applicationVersion !== \"unused\") {\n\t\t\tmessage[\"application build number\"] = this.applicationBuildNumber;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(VersionCommand.ZWaveSoftwareGet)\n@expectedCCResponse(VersionCCZWaveSoftwareReport)\nexport class VersionCCZWaveSoftwareGet extends VersionCC {}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n\tCommandClasses,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\tSecurityClass,\n\tValueMetadata,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tZWaveLibraryTypes,\n\tenumValuesToMetadataStates,\n\tgetCCName,\n\tsecurityClassIsS2,\n\tsecurityClassOrder,\n\tvalidatePayload,\n} from \"@zwave-js/core/safe\";\nimport type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetValueDB,\n} from \"@zwave-js/host/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { getEnumMemberName, num2hex, pick } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\tgetImplementedVersion,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { VersionCommand } from \"../lib/_Types.js\";\n\nexport const VersionCCValues = Object.freeze({\n\t...V.defineStaticCCValues(CommandClasses.Version, {\n\t\t...V.staticProperty(\n\t\t\t\"firmwareVersions\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnly,\n\t\t\t\ttype: \"string[]\",\n\t\t\t\tlabel: \"Z-Wave chip firmware versions\",\n\t\t\t} as const,\n\t\t\t{ supportsEndpoints: false },\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"libraryType\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyNumber,\n\t\t\t\tlabel: \"Library type\",\n\t\t\t\tstates: enumValuesToMetadataStates(ZWaveLibraryTypes),\n\t\t\t} as const,\n\t\t\t{ supportsEndpoints: false },\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"protocolVersion\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Z-Wave protocol version\",\n\t\t\t} as const,\n\t\t\t{ supportsEndpoints: false },\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"hardwareVersion\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyNumber,\n\t\t\t\tlabel: \"Z-Wave chip hardware version\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 2,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"supportsZWaveSoftwareGet\",\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tinternal: true,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"sdkVersion\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"SDK version\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"applicationFrameworkAPIVersion\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Z-Wave application framework API version\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"applicationFrameworkBuildNumber\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Z-Wave application framework API build number\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticPropertyWithName(\n\t\t\t\"serialAPIVersion\",\n\t\t\t\"hostInterfaceVersion\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Serial API version\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticPropertyWithName(\n\t\t\t\"serialAPIBuildNumber\",\n\t\t\t\"hostInterfaceBuildNumber\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Serial API build number\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"zWaveProtocolVersion\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Z-Wave protocol version\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"zWaveProtocolBuildNumber\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Z-Wave protocol build number\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"applicationVersion\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Application version\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"applicationBuildNumber\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyString,\n\t\t\t\tlabel: \"Application build number\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 3,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t} as const,\n\t\t),\n\t}),\n});\n\nfunction parseVersion(buffer: Uint8Array): string {\n\tif (buffer[0] === 0 && buffer[1] === 0 && buffer[2] === 0) return \"unused\";\n\treturn `${buffer[0]}.${buffer[1]}.${buffer[2]}`;\n}\n\n// @noSetValueAPI This CC is read-only\n\n@API(CommandClasses.Version)\nexport class VersionCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(cmd: VersionCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase VersionCommand.Get:\n\t\t\tcase VersionCommand.Report:\n\t\t\tcase VersionCommand.CommandClassGet:\n\t\t\tcase VersionCommand.CommandClassReport:\n\t\t\t\treturn true; // This is mandatory\n\n\t\t\tcase VersionCommand.CapabilitiesGet:\n\t\t\tcase VersionCommand.CapabilitiesReport:\n\t\t\tcase VersionCommand.ZWaveSoftwareReport:\n\t\t\t\treturn this.version >= 3;\n\n\t\t\tcase VersionCommand.ZWaveSoftwareGet: {\n\t\t\t\treturn this.getValueDB().getValue<boolean>(\n\t\t\t\t\tVersionCCValues.supportsZWaveSoftwareGet.endpoint(\n\t\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async get() {\n\t\tthis.assertSupportsCommand(VersionCommand, VersionCommand.Get);\n\n\t\tconst cc = new VersionCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<VersionCCReport>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"libraryType\",\n\t\t\t\t\"protocolVersion\",\n\t\t\t\t\"firmwareVersions\",\n\t\t\t\t\"hardwareVersion\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async sendReport(options: VersionCCReportOptions): Promise<void> {\n\t\tthis.assertSupportsCommand(VersionCommand, VersionCommand.Report);\n\n\t\tconst cc = new VersionCCReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async getCCVersion(\n\t\trequestedCC: CommandClasses,\n\t): Promise<MaybeNotKnown<number>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CommandClassGet,\n\t\t);\n\n\t\tconst cc = new VersionCCCommandClassGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\trequestedCC,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tVersionCCCommandClassReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.ccVersion;\n\t}\n\n\t@validateArgs()\n\tpublic async reportCCVersion(requestedCC: CommandClasses): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CommandClassReport,\n\t\t);\n\n\t\tlet ccVersion: number;\n\t\tswitch (requestedCC) {\n\t\t\tcase CommandClasses[\"Z-Wave Protocol\"]:\n\t\t\tcase CommandClasses[\"Z-Wave Long Range\"]:\n\t\t\t\t// These two are only for internal use\n\t\t\t\tccVersion = 0;\n\t\t\t\tbreak;\n\t\t\tcase CommandClasses.Hail:\n\t\t\tcase CommandClasses[\"Manufacturer Proprietary\"]:\n\t\t\t\t// These CCs are obsolete, we cannot enter them in the certification portal\n\t\t\t\t// but not doing so fails a certification test. Just respond that they\n\t\t\t\t// are not supported or controlled\n\t\t\t\tccVersion = 0;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tccVersion = getImplementedVersion(requestedCC);\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst cc = new VersionCCCommandClassReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\trequestedCC,\n\t\t\tccVersion,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getCapabilities() {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CapabilitiesGet,\n\t\t);\n\n\t\tconst cc = new VersionCCCapabilitiesGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tVersionCCCapabilitiesReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"supportsZWaveSoftwareGet\"]);\n\t\t}\n\t}\n\n\tpublic async reportCapabilities(): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.CapabilitiesReport,\n\t\t);\n\n\t\tconst cc = new VersionCCCapabilitiesReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t// At this time, we do not support responding to Z-Wave Software Get\n\t\t\tsupportsZWaveSoftwareGet: false,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getZWaveSoftware() {\n\t\tthis.assertSupportsCommand(\n\t\t\tVersionCommand,\n\t\t\tVersionCommand.ZWaveSoftwareGet,\n\t\t);\n\n\t\tconst cc = new VersionCCZWaveSoftwareGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tVersionCCZWaveSoftwareReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"sdkVersion\",\n\t\t\t\t\"applicationFrameworkAPIVersion\",\n\t\t\t\t\"applicationFrameworkBuildNumber\",\n\t\t\t\t\"hostInterfaceVersion\",\n\t\t\t\t\"hostInterfaceBuildNumber\",\n\t\t\t\t\"zWaveProtocolVersion\",\n\t\t\t\t\"zWaveProtocolBuildNumber\",\n\t\t\t\t\"applicationVersion\",\n\t\t\t\t\"applicationBuildNumber\",\n\t\t\t]);\n\t\t}\n\t}\n}\n\n@commandClass(CommandClasses.Version)\n@implementedVersion(3)\n@ccValues(VersionCCValues)\nexport class VersionCC extends CommandClass {\n\tdeclare ccCommand: VersionCommand;\n\n\tpublic determineRequiredCCInterviews(): readonly CommandClasses[] {\n\t\t// VersionCC must be the 2nd CC after ManufacturerSpecificCC\n\t\treturn [CommandClasses[\"Manufacturer Specific\"]];\n\t}\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\n\t\t// SDS13782: In a Multi Channel device, the Version Command Class MUST be supported by the Root Device, while\n\t\t// the Version Command Class SHOULD NOT be supported by individual End Points.\n\t\t//\n\t\t// There may be cases where a given Command Class is not implemented by the Root Device of a Multi\n\t\t// Channel device. However, the Root Device MUST respond to Version requests for any Command Class\n\t\t// implemented by the Multi Channel device; also in cases where the actual Command Class is only\n\t\t// provided by an End Point.\n\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\n\t\t// Use the CC API of the root device for all queries\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses.Version,\n\t\t\tctx,\n\t\t\tnode,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tconst queryCCVersion = async (cc: CommandClasses): Promise<void> => {\n\t\t\t// Only query CCs we support. Theoretically we could skip queries where we support only V1,\n\t\t\t// but there are Z-Wave certification tests that require us to query all CCs\n\t\t\tconst maxImplemented = getImplementedVersion(cc);\n\t\t\tif (maxImplemented === 0) {\n\t\t\t\tctx.logNode(\n\t\t\t\t\tnode.id,\n\t\t\t\t\t` skipping query for ${CommandClasses[cc]} (${\n\t\t\t\t\t\tnum2hex(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t}) because max implemented version is ${maxImplemented}`,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: ` querying the CC version for ${getCCName(cc)}...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\t// query the CC version\n\t\t\tconst supportedVersion = await api.getCCVersion(cc);\n\t\t\tif (supportedVersion != undefined) {\n\t\t\t\t// Remember which CC version this endpoint supports\n\t\t\t\tlet logMessage: string;\n\t\t\t\tif (supportedVersion > 0) {\n\t\t\t\t\t// Basic CC has special rules for when it is considered supported\n\t\t\t\t\t// Therefore we mark all other CCs as supported, but not Basic CC,\n\t\t\t\t\t// for which support is determined later.\n\t\t\t\t\tif (cc === CommandClasses.Basic) {\n\t\t\t\t\t\tendpoint.addCC(cc, { version: supportedVersion });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tendpoint.addCC(cc, {\n\t\t\t\t\t\t\tisSupported: true,\n\t\t\t\t\t\t\tversion: supportedVersion,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tlogMessage = ` supports CC ${CommandClasses[cc]} (${\n\t\t\t\t\t\tnum2hex(cc)\n\t\t\t\t\t}) in version ${supportedVersion}`;\n\t\t\t\t} else {\n\t\t\t\t\t// We were lied to - the NIF said this CC is supported, now the node claims it isn't\n\t\t\t\t\t// Make sure this is not a critical CC, which must be supported though\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tcc === CommandClasses.Version\n\t\t\t\t\t\t|| cc === CommandClasses[\"Manufacturer Specific\"]\n\t\t\t\t\t) {\n\t\t\t\t\t\tlogMessage = ` claims NOT to support CC ${\n\t\t\t\t\t\t\tCommandClasses[cc]\n\t\t\t\t\t\t} (${num2hex(cc)}), but it must. Assuming the ${\n\t\t\t\t\t\t\tthis.endpointIndex === 0 ? \"node\" : \"endpoint\"\n\t\t\t\t\t\t} supports version 1...`;\n\t\t\t\t\t\tendpoint.addCC(cc, { version: 1 });\n\t\t\t\t\t} else if (\n\t\t\t\t\t\t(cc === CommandClasses.Security\n\t\t\t\t\t\t\t&& node.hasSecurityClass(SecurityClass.S0_Legacy))\n\t\t\t\t\t\t|| (cc === CommandClasses[\"Security 2\"]\n\t\t\t\t\t\t\t&& securityClassOrder.some((sc) =>\n\t\t\t\t\t\t\t\tsecurityClassIsS2(sc)\n\t\t\t\t\t\t\t\t&& node.hasSecurityClass(sc)\n\t\t\t\t\t\t\t))\n\t\t\t\t\t) {\n\t\t\t\t\t\tlogMessage = ` claims NOT to support CC ${\n\t\t\t\t\t\t\tCommandClasses[cc]\n\t\t\t\t\t\t} (${\n\t\t\t\t\t\t\tnum2hex(cc)\n\t\t\t\t\t\t}), but it is known to support it. Assuming the ${\n\t\t\t\t\t\t\tthis.endpointIndex === 0 ? \"node\" : \"endpoint\"\n\t\t\t\t\t\t} supports version 1...`;\n\t\t\t\t\t\tendpoint.addCC(cc, { version: 1 });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlogMessage = ` does NOT support CC ${\n\t\t\t\t\t\t\tCommandClasses[cc]\n\t\t\t\t\t\t} (${num2hex(cc)})`;\n\t\t\t\t\t\tendpoint.removeCC(cc);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `CC version query for ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tcc,\n\t\t\t\t\t\t)\n\t\t\t\t\t} timed out - assuming the ${\n\t\t\t\t\t\tthis.endpointIndex === 0 ? \"node\" : \"endpoint\"\n\t\t\t\t\t} supports version 1...`,\n\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t});\n\t\t\t\tendpoint.addCC(cc, { version: 1 });\n\t\t\t}\n\t\t};\n\n\t\t// Version information should not change (except for firmware updates)\n\t\t// And it is only relevant on the root endpoint (the node)\n\t\tif (this.endpointIndex === 0) {\n\t\t\t// Step 1: Query Version CC version\n\t\t\tawait queryCCVersion(CommandClasses.Version);\n\n\t\t\t// Step 2: Query node versions\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"querying node versions...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst versionGetResponse = await api.get();\n\t\t\tif (versionGetResponse) {\n\t\t\t\tlet logMessage = `received response for node versions:\n library type: ${ZWaveLibraryTypes[versionGetResponse.libraryType]} (${\n\t\t\t\t\tnum2hex(versionGetResponse.libraryType)\n\t\t\t\t})\n protocol version: ${versionGetResponse.protocolVersion}\n firmware versions: ${versionGetResponse.firmwareVersions.join(\", \")}`;\n\t\t\t\tif (versionGetResponse.hardwareVersion != undefined) {\n\t\t\t\t\tlogMessage +=\n\t\t\t\t\t\t`\\n hardware version: ${versionGetResponse.hardwareVersion}`;\n\t\t\t\t}\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Step 3: Query all other CC versions\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"querying CC versions...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\t// Basic CC is not included in the NIF, so it won't be returned by endpoint.getCCs() at this point\n\t\t{\n\t\t\tconst cc = CommandClasses.Basic;\n\t\t\t// Skip the query of endpoint CCs that are also supported by the root device\n\t\t\tif (this.endpointIndex === 0 || node.getCCVersion(cc) === 0) {\n\t\t\t\tawait queryCCVersion(cc);\n\t\t\t}\n\t\t}\n\t\tfor (const [cc] of endpoint.getCCs()) {\n\t\t\t// We already queried the Version CC version at the start of this interview\n\t\t\tif (cc === CommandClasses.Version) continue;\n\t\t\t// And we queried Basic CC just before this\n\t\t\tif (cc === CommandClasses.Basic) continue;\n\t\t\t// Skip the query of endpoint CCs that are also supported by the root device\n\t\t\tif (this.endpointIndex > 0 && node.getCCVersion(cc) > 0) continue;\n\t\t\tawait queryCCVersion(cc);\n\t\t}\n\n\t\t// Step 4: Query VersionCC capabilities (root device only)\n\t\tif (this.endpointIndex === 0 && api.version >= 3) {\n\t\t\t// Step 4a: Support for SoftwareGet\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"querying if Z-Wave Software Get is supported...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst capsResponse = await api.getCapabilities();\n\t\t\tif (capsResponse) {\n\t\t\t\tconst { supportsZWaveSoftwareGet } = capsResponse;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `Z-Wave Software Get is${\n\t\t\t\t\t\tsupportsZWaveSoftwareGet ? \"\" : \" not\"\n\t\t\t\t\t} supported`,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\n\t\t\t\tif (supportsZWaveSoftwareGet) {\n\t\t\t\t\t// Step 4b: Query Z-Wave Software versions\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: \"querying Z-Wave software versions...\",\n\t\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t\t});\n\t\t\t\t\tawait api.getZWaveSoftware();\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: \"received Z-Wave software versions\",\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface VersionCCReportOptions {\n\tlibraryType: ZWaveLibraryTypes;\n\tprotocolVersion: string;\n\tfirmwareVersions: string[];\n\thardwareVersion?: number;\n}\n\n@CCCommand(VersionCommand.Report)\n@ccValueProperty(\"libraryType\", VersionCCValues.libraryType)\n@ccValueProperty(\"protocolVersion\", VersionCCValues.protocolVersion)\n@ccValueProperty(\"firmwareVersions\", VersionCCValues.firmwareVersions)\n@ccValueProperty(\"hardwareVersion\", VersionCCValues.hardwareVersion)\nexport class VersionCCReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tif (!/^\\d+\\.\\d+(\\.\\d+)?$/.test(options.protocolVersion)) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`protocolVersion must be a string in the format \"major.minor\" or \"major.minor.patch\", received \"${options.protocolVersion}\"`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t} else if (\n\t\t\t!options.firmwareVersions.every((fw) =>\n\t\t\t\t/^\\d+\\.\\d+(\\.\\d+)?$/.test(fw)\n\t\t\t)\n\t\t) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`firmwareVersions must be an array of strings in the format \"major.minor\" or \"major.minor.patch\", received \"${\n\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\toptions.firmwareVersions,\n\t\t\t\t\t)\n\t\t\t\t}\"`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.libraryType = options.libraryType;\n\t\tthis.protocolVersion = options.protocolVersion;\n\t\tthis.firmwareVersions = options.firmwareVersions;\n\t\tthis.hardwareVersion = options.hardwareVersion;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): VersionCCReport {\n\t\tvalidatePayload(raw.payload.length >= 5);\n\t\tconst libraryType: ZWaveLibraryTypes = raw.payload[0];\n\t\tconst protocolVersion = `${raw.payload[1]}.${raw.payload[2]}`;\n\t\tconst firmwareVersions = [`${raw.payload[3]}.${raw.payload[4]}`];\n\n\t\tlet hardwareVersion: number | undefined;\n\t\tif (raw.payload.length >= 7) {\n\t\t\t// V2+\n\t\t\thardwareVersion = raw.payload[5];\n\t\t\tconst additionalFirmwares = raw.payload[6];\n\t\t\tvalidatePayload(\n\t\t\t\traw.payload.length >= 7 + 2 * additionalFirmwares,\n\t\t\t);\n\t\t\tfor (let i = 0; i < additionalFirmwares; i++) {\n\t\t\t\tfirmwareVersions.push(\n\t\t\t\t\t`${raw.payload[7 + 2 * i]}.${raw.payload[7 + 2 * i + 1]}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tlibraryType,\n\t\t\tprotocolVersion,\n\t\t\tfirmwareVersions,\n\t\t\thardwareVersion,\n\t\t});\n\t}\n\n\tpublic readonly libraryType: ZWaveLibraryTypes;\n\n\tpublic readonly protocolVersion: string;\n\n\tpublic readonly firmwareVersions: string[];\n\n\tpublic readonly hardwareVersion: number | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.libraryType,\n\t\t\t...this.protocolVersion\n\t\t\t\t.split(\".\")\n\t\t\t\t.map((n) => parseInt(n))\n\t\t\t\t.slice(0, 2),\n\t\t\t...this.firmwareVersions[0]\n\t\t\t\t.split(\".\")\n\t\t\t\t.map((n) => parseInt(n))\n\t\t\t\t.slice(0, 2),\n\t\t\tthis.hardwareVersion ?? 0x00,\n\t\t\tthis.firmwareVersions.length - 1,\n\t\t]);\n\n\t\tif (this.firmwareVersions.length > 1) {\n\t\t\tconst firmwaresBuffer = new Bytes(\n\t\t\t\t(this.firmwareVersions.length - 1) * 2,\n\t\t\t);\n\t\t\tfor (let i = 1; i < this.firmwareVersions.length; i++) {\n\t\t\t\tconst [major, minor] = this.firmwareVersions[i]\n\t\t\t\t\t.split(\".\")\n\t\t\t\t\t.map((n) => parseInt(n));\n\t\t\t\tfirmwaresBuffer[2 * (i - 1)] = major;\n\t\t\t\tfirmwaresBuffer[2 * (i - 1) + 1] = minor;\n\t\t\t}\n\t\t\tthis.payload = Bytes.concat([this.payload, firmwaresBuffer]);\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"library type\": getEnumMemberName(\n\t\t\t\tZWaveLibraryTypes,\n\t\t\t\tthis.libraryType,\n\t\t\t),\n\t\t\t\"protocol version\": this.protocolVersion,\n\t\t\t\"firmware versions\": this.firmwareVersions.join(\", \"),\n\t\t};\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tmessage[\"hardware version\"] = this.hardwareVersion;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(VersionCommand.Get)\n@expectedCCResponse(VersionCCReport)\nexport class VersionCCGet extends VersionCC {}\n\n// @publicAPI\nexport interface VersionCCCommandClassReportOptions {\n\trequestedCC: CommandClasses;\n\tccVersion: number;\n}\n\n@CCCommand(VersionCommand.CommandClassReport)\nexport class VersionCCCommandClassReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCCommandClassReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.requestedCC = options.requestedCC;\n\t\tthis.ccVersion = options.ccVersion;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCCommandClassReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst requestedCC: CommandClasses = raw.payload[0];\n\t\tconst ccVersion = raw.payload[1];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trequestedCC,\n\t\t\tccVersion,\n\t\t});\n\t}\n\n\tpublic ccVersion: number;\n\tpublic requestedCC: CommandClasses;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.requestedCC, this.ccVersion]);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tCC: getCCName(this.requestedCC),\n\t\t\t\tversion: this.ccVersion,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface VersionCCCommandClassGetOptions {\n\trequestedCC: CommandClasses;\n}\n\nfunction testResponseForVersionCommandClassGet(\n\tsent: VersionCCCommandClassGet,\n\treceived: VersionCCCommandClassReport,\n) {\n\t// We expect a Version CommandClass Report that matches the requested CC\n\treturn sent.requestedCC === received.requestedCC;\n}\n\n@CCCommand(VersionCommand.CommandClassGet)\n@expectedCCResponse(\n\tVersionCCCommandClassReport,\n\ttestResponseForVersionCommandClassGet,\n)\nexport class VersionCCCommandClassGet extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCCommandClassGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.requestedCC = options.requestedCC;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCCommandClassGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst requestedCC: CommandClasses = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trequestedCC,\n\t\t});\n\t}\n\n\tpublic requestedCC: CommandClasses;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.requestedCC]);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { CC: getCCName(this.requestedCC) },\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface VersionCCCapabilitiesReportOptions {\n\tsupportsZWaveSoftwareGet: boolean;\n}\n\n@CCCommand(VersionCommand.CapabilitiesReport)\n@ccValueProperty(\n\t\"supportsZWaveSoftwareGet\",\n\tVersionCCValues.supportsZWaveSoftwareGet,\n)\nexport class VersionCCCapabilitiesReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCCapabilitiesReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.supportsZWaveSoftwareGet = options.supportsZWaveSoftwareGet;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCCapabilitiesReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst capabilities = raw.payload[0];\n\t\tconst supportsZWaveSoftwareGet = !!(capabilities & 0b100);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportsZWaveSoftwareGet,\n\t\t});\n\t}\n\n\tpublic supportsZWaveSoftwareGet: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\t(this.supportsZWaveSoftwareGet ? 0b100 : 0) | 0b11,\n\t\t]);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supports Z-Wave Software Get command\":\n\t\t\t\t\tthis.supportsZWaveSoftwareGet,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(VersionCommand.CapabilitiesGet)\n@expectedCCResponse(VersionCCCapabilitiesReport)\nexport class VersionCCCapabilitiesGet extends VersionCC {}\n\n// @publicAPI\nexport interface VersionCCZWaveSoftwareReportOptions {\n\tsdkVersion: string;\n\tapplicationFrameworkAPIVersion: string;\n\tapplicationFrameworkBuildNumber: number;\n\thostInterfaceVersion: string;\n\thostInterfaceBuildNumber: number;\n\tzWaveProtocolVersion: string;\n\tzWaveProtocolBuildNumber: number;\n\tapplicationVersion: string;\n\tapplicationBuildNumber: number;\n}\n\n@CCCommand(VersionCommand.ZWaveSoftwareReport)\n@ccValueProperty(\"sdkVersion\", VersionCCValues.sdkVersion)\n@ccValueProperty(\n\t\"applicationFrameworkAPIVersion\",\n\tVersionCCValues.applicationFrameworkAPIVersion,\n)\n@ccValueProperty(\n\t\"applicationFrameworkBuildNumber\",\n\tVersionCCValues.applicationFrameworkBuildNumber,\n)\n@ccValueProperty(\"hostInterfaceVersion\", VersionCCValues.serialAPIVersion)\n@ccValueProperty(\n\t\"hostInterfaceBuildNumber\",\n\tVersionCCValues.serialAPIBuildNumber,\n)\n@ccValueProperty(\"zWaveProtocolVersion\", VersionCCValues.zWaveProtocolVersion)\n@ccValueProperty(\n\t\"zWaveProtocolBuildNumber\",\n\tVersionCCValues.zWaveProtocolBuildNumber,\n)\n@ccValueProperty(\"applicationVersion\", VersionCCValues.applicationVersion)\n@ccValueProperty(\n\t\"applicationBuildNumber\",\n\tVersionCCValues.applicationBuildNumber,\n)\nexport class VersionCCZWaveSoftwareReport extends VersionCC {\n\tpublic constructor(\n\t\toptions: WithAddress<VersionCCZWaveSoftwareReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.sdkVersion = options.sdkVersion;\n\t\tthis.applicationFrameworkAPIVersion =\n\t\t\toptions.applicationFrameworkAPIVersion;\n\t\tthis.applicationFrameworkBuildNumber =\n\t\t\toptions.applicationFrameworkBuildNumber;\n\t\tthis.hostInterfaceVersion = options.hostInterfaceVersion;\n\t\tthis.hostInterfaceBuildNumber = options.hostInterfaceBuildNumber;\n\t\tthis.zWaveProtocolVersion = options.zWaveProtocolVersion;\n\t\tthis.zWaveProtocolBuildNumber = options.zWaveProtocolBuildNumber;\n\t\tthis.applicationVersion = options.applicationVersion;\n\t\tthis.applicationBuildNumber = options.applicationBuildNumber;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): VersionCCZWaveSoftwareReport {\n\t\tvalidatePayload(raw.payload.length >= 23);\n\t\tconst sdkVersion = parseVersion(raw.payload);\n\t\tconst applicationFrameworkAPIVersion = parseVersion(\n\t\t\traw.payload.subarray(3),\n\t\t);\n\t\tlet applicationFrameworkBuildNumber;\n\t\tif (applicationFrameworkAPIVersion !== \"unused\") {\n\t\t\tapplicationFrameworkBuildNumber = raw.payload.readUInt16BE(6);\n\t\t} else {\n\t\t\tapplicationFrameworkBuildNumber = 0;\n\t\t}\n\n\t\tconst hostInterfaceVersion = parseVersion(raw.payload.subarray(8));\n\t\tlet hostInterfaceBuildNumber;\n\t\tif (hostInterfaceVersion !== \"unused\") {\n\t\t\thostInterfaceBuildNumber = raw.payload.readUInt16BE(11);\n\t\t} else {\n\t\t\thostInterfaceBuildNumber = 0;\n\t\t}\n\n\t\tconst zWaveProtocolVersion = parseVersion(raw.payload.subarray(13));\n\t\tlet zWaveProtocolBuildNumber;\n\t\tif (zWaveProtocolVersion !== \"unused\") {\n\t\t\tzWaveProtocolBuildNumber = raw.payload.readUInt16BE(16);\n\t\t} else {\n\t\t\tzWaveProtocolBuildNumber = 0;\n\t\t}\n\n\t\tconst applicationVersion = parseVersion(raw.payload.subarray(18));\n\t\tlet applicationBuildNumber;\n\t\tif (applicationVersion !== \"unused\") {\n\t\t\tapplicationBuildNumber = raw.payload.readUInt16BE(21);\n\t\t} else {\n\t\t\tapplicationBuildNumber = 0;\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsdkVersion,\n\t\t\tapplicationFrameworkAPIVersion,\n\t\t\tapplicationFrameworkBuildNumber,\n\t\t\thostInterfaceVersion,\n\t\t\thostInterfaceBuildNumber,\n\t\t\tzWaveProtocolVersion,\n\t\t\tzWaveProtocolBuildNumber,\n\t\t\tapplicationVersion,\n\t\t\tapplicationBuildNumber,\n\t\t});\n\t}\n\n\tpublic readonly sdkVersion: string;\n\n\tpublic readonly applicationFrameworkAPIVersion: string;\n\n\tpublic readonly applicationFrameworkBuildNumber: number;\n\n\tpublic readonly hostInterfaceVersion: string;\n\n\tpublic readonly hostInterfaceBuildNumber: number;\n\n\tpublic readonly zWaveProtocolVersion: string;\n\n\tpublic readonly zWaveProtocolBuildNumber: number;\n\n\tpublic readonly applicationVersion: string;\n\n\tpublic readonly applicationBuildNumber: number;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"SDK version\": this.sdkVersion,\n\t\t};\n\t\tmessage[\"appl. framework API version\"] =\n\t\t\tthis.applicationFrameworkAPIVersion;\n\t\tif (this.applicationFrameworkAPIVersion !== \"unused\") {\n\t\t\tmessage[\"appl. framework build number\"] =\n\t\t\t\tthis.applicationFrameworkBuildNumber;\n\t\t}\n\t\tmessage[\"host interface version\"] = this.hostInterfaceVersion;\n\t\tif (this.hostInterfaceVersion !== \"unused\") {\n\t\t\tmessage[\"host interface build number\"] =\n\t\t\t\tthis.hostInterfaceBuildNumber;\n\t\t}\n\t\tmessage[\"Z-Wave protocol version\"] = this.zWaveProtocolVersion;\n\t\tif (this.zWaveProtocolVersion !== \"unused\") {\n\t\t\tmessage[\"Z-Wave protocol build number\"] =\n\t\t\t\tthis.zWaveProtocolBuildNumber;\n\t\t}\n\t\tmessage[\"application version\"] = this.applicationVersion;\n\t\tif (this.applicationVersion !== \"unused\") {\n\t\t\tmessage[\"application build number\"] = this.applicationBuildNumber;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(VersionCommand.ZWaveSoftwareGet)\n@expectedCCResponse(VersionCCZWaveSoftwareReport)\nexport class VersionCCZWaveSoftwareGet extends VersionCC {}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_safe"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/WakeUpCC.ts"],
4
- "sourcesContent": ["import {\n\tCommandClasses,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype SupervisionResult,\n\tTransmitOptions,\n\tValueMetadata,\n\ttype WithAddress,\n\tsupervisedCommandSucceeded,\n\tvalidatePayload,\n} from \"@zwave-js/core/safe\";\nimport type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetValueDB,\n} from \"@zwave-js/host/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { pick } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { clamp } from \"alcalzone-shared/math\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\ttype SetValueImplementation,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { WakeUpCommand } from \"../lib/_Types.js\";\n\nexport const WakeUpCCValues = Object.freeze({\n\t...V.defineStaticCCValues(CommandClasses[\"Wake Up\"], {\n\t\t...V.staticProperty(\n\t\t\t\"controllerNodeId\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnly,\n\t\t\t\tlabel: \"Node ID of the controller\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t},\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"wakeUpInterval\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt24,\n\t\t\t\tlabel: \"Wake Up interval\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t},\n\t\t),\n\n\t\t...V.staticProperty(\"wakeUpOnDemandSupported\", undefined, {\n\t\t\tinternal: true,\n\t\t\tsupportsEndpoints: false,\n\t\t\tminVersion: 3,\n\t\t}),\n\t}),\n});\n\n@API(CommandClasses[\"Wake Up\"])\nexport class WakeUpCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: WakeUpCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase WakeUpCommand.IntervalGet:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase WakeUpCommand.IntervalSet:\n\t\t\tcase WakeUpCommand.NoMoreInformation:\n\t\t\t\treturn true; // This is mandatory\n\t\t\tcase WakeUpCommand.IntervalCapabilitiesGet:\n\t\t\t\treturn this.version >= 2 && this.isSinglecast();\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(this: WakeUpCCAPI, { property }, value) {\n\t\t\tif (property !== \"wakeUpInterval\") {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t\tif (typeof value !== \"number\") {\n\t\t\t\tthrowWrongValueType(\n\t\t\t\t\tthis.ccId,\n\t\t\t\t\tproperty,\n\t\t\t\t\t\"number\",\n\t\t\t\t\ttypeof value,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst result = await this.setInterval(\n\t\t\t\tvalue,\n\t\t\t\tthis.host.ownNodeId ?? 1,\n\t\t\t);\n\n\t\t\t// Verify the change after a short delay, unless the command was supervised and successful\n\t\t\tif (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n\t\t\t\tthis.schedulePoll({ property }, value, { transition: \"fast\" });\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: WakeUpCCAPI, { property }) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"wakeUpInterval\":\n\t\t\t\t\treturn (await this.getInterval())?.[property];\n\t\t\t\tdefault:\n\t\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getInterval() {\n\t\tthis.assertSupportsCommand(WakeUpCommand, WakeUpCommand.IntervalGet);\n\n\t\tconst cc = new WakeUpCCIntervalGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWakeUpCCIntervalReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"wakeUpInterval\", \"controllerNodeId\"]);\n\t\t}\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getIntervalCapabilities() {\n\t\tthis.assertSupportsCommand(\n\t\t\tWakeUpCommand,\n\t\t\tWakeUpCommand.IntervalCapabilitiesGet,\n\t\t);\n\n\t\tconst cc = new WakeUpCCIntervalCapabilitiesGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWakeUpCCIntervalCapabilitiesReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"defaultWakeUpInterval\",\n\t\t\t\t\"minWakeUpInterval\",\n\t\t\t\t\"maxWakeUpInterval\",\n\t\t\t\t\"wakeUpIntervalSteps\",\n\t\t\t\t\"wakeUpOnDemandSupported\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async setInterval(\n\t\twakeUpInterval: number,\n\t\tcontrollerNodeId: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(WakeUpCommand, WakeUpCommand.IntervalSet);\n\n\t\tconst cc = new WakeUpCCIntervalSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\twakeUpInterval,\n\t\t\tcontrollerNodeId,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\tpublic async sendNoMoreInformation(): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWakeUpCommand,\n\t\t\tWakeUpCommand.NoMoreInformation,\n\t\t);\n\n\t\tconst cc = new WakeUpCCNoMoreInformation({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tawait this.host.sendCommand(cc, {\n\t\t\t...this.commandOptions,\n\t\t\t// This command must be sent as part of the wake up queue\n\t\t\tpriority: MessagePriority.WakeUp,\n\t\t\t// Don't try to resend this - if we get no response, the node is most likely asleep\n\t\t\tmaxSendAttempts: 1,\n\t\t\t// Also we don't want to wait for an ACK because this can lock up the network for seconds\n\t\t\t// if the target node is asleep and doesn't respond to the command\n\t\t\ttransmitOptions: TransmitOptions.DEFAULT_NOACK,\n\t\t});\n\t}\n}\n\n@commandClass(CommandClasses[\"Wake Up\"])\n@implementedVersion(3)\n@ccValues(WakeUpCCValues)\nexport class WakeUpCC extends CommandClass {\n\tdeclare ccCommand: WakeUpCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Wake Up\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tif (node.id === ctx.ownNodeId) {\n\t\t\tctx.logNode(\n\t\t\t\tnode.id,\n\t\t\t\t`skipping wakeup configuration for the controller`,\n\t\t\t);\n\t\t} else if (node.isFrequentListening) {\n\t\t\tctx.logNode(\n\t\t\t\tnode.id,\n\t\t\t\t`skipping wakeup configuration for frequent listening device`,\n\t\t\t);\n\t\t} else {\n\t\t\tlet desiredInterval: number;\n\t\t\tlet currentControllerNodeId: number;\n\t\t\tlet minInterval: number | undefined;\n\t\t\tlet maxInterval: number | undefined;\n\n\t\t\t// Retrieve the allowed wake up intervals and wake on demand support if possible\n\t\t\tif (api.version >= 2) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"retrieving wakeup capabilities from the device...\",\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tconst wakeupCaps = await api.getIntervalCapabilities();\n\t\t\t\tif (wakeupCaps) {\n\t\t\t\t\tconst logMessage = `received wakeup capabilities:\ndefault wakeup interval: ${wakeupCaps.defaultWakeUpInterval} seconds\nminimum wakeup interval: ${wakeupCaps.minWakeUpInterval} seconds\nmaximum wakeup interval: ${wakeupCaps.maxWakeUpInterval} seconds\nwakeup interval steps: ${wakeupCaps.wakeUpIntervalSteps} seconds\nwakeup on demand supported: ${wakeupCaps.wakeUpOnDemandSupported}`;\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t\tminInterval = wakeupCaps.minWakeUpInterval;\n\t\t\t\t\tmaxInterval = wakeupCaps.maxWakeUpInterval;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// SDS14223 prescribes a IntervalSet followed by a check\n\t\t\t// We have no intention of changing the interval (maybe some time in the future)\n\t\t\t// So for now get the current interval and just set the controller ID\n\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"retrieving wakeup interval from the device...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst wakeupResp = await api.getInterval();\n\n\t\t\tif (wakeupResp) {\n\t\t\t\tconst logMessage = `received wakeup configuration:\nwakeup interval: ${wakeupResp.wakeUpInterval} seconds\ncontroller node: ${wakeupResp.controllerNodeId}`;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\n\t\t\t\tdesiredInterval = wakeupResp.wakeUpInterval;\n\t\t\t\tcurrentControllerNodeId = wakeupResp.controllerNodeId;\n\t\t\t} else {\n\t\t\t\t// Just guess, I guess\n\t\t\t\tdesiredInterval = 3600 * 6; // 6 hours\n\t\t\t\tcurrentControllerNodeId = 0; // assume not set\n\t\t\t}\n\n\t\t\tconst ownNodeId = ctx.ownNodeId;\n\t\t\t// Only change the destination if necessary\n\t\t\tif (currentControllerNodeId !== ownNodeId) {\n\t\t\t\t// Spec compliance: Limit the interval to the allowed range, but...\n\t\t\t\t// ...try and preserve a \"never wake up\" configuration (#6367)\n\t\t\t\tif (\n\t\t\t\t\tdesiredInterval !== 0\n\t\t\t\t\t&& minInterval != undefined\n\t\t\t\t\t&& maxInterval != undefined\n\t\t\t\t) {\n\t\t\t\t\tdesiredInterval = clamp(\n\t\t\t\t\t\tdesiredInterval,\n\t\t\t\t\t\tminInterval,\n\t\t\t\t\t\tmaxInterval,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: \"configuring wakeup destination node\",\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tawait api.setInterval(desiredInterval, ownNodeId);\n\t\t\t\tthis.setValue(\n\t\t\t\t\tctx,\n\t\t\t\t\tWakeUpCCValues.controllerNodeId,\n\t\t\t\t\townNodeId,\n\t\t\t\t);\n\t\t\t\tctx.logNode(\n\t\t\t\t\tnode.id,\n\t\t\t\t\t\"wakeup destination node changed!\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface WakeUpCCIntervalSetOptions {\n\twakeUpInterval: number;\n\tcontrollerNodeId: number;\n}\n\n@CCCommand(WakeUpCommand.IntervalSet)\n@useSupervision()\nexport class WakeUpCCIntervalSet extends WakeUpCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WakeUpCCIntervalSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.wakeUpInterval = options.wakeUpInterval;\n\t\tthis.controllerNodeId = options.controllerNodeId;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): WakeUpCCIntervalSet {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst wakeUpInterval = raw.payload.readUIntBE(0, 3);\n\t\tconst controllerNodeId = raw.payload[3];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\twakeUpInterval,\n\t\t\tcontrollerNodeId,\n\t\t});\n\t}\n\n\tpublic wakeUpInterval: number;\n\tpublic controllerNodeId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\t0,\n\t\t\t0,\n\t\t\t0, // placeholder\n\t\t\tthis.controllerNodeId,\n\t\t]);\n\t\tthis.payload.writeUIntBE(this.wakeUpInterval, 0, 3);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"wake-up interval\": `${this.wakeUpInterval} seconds`,\n\t\t\t\t\"controller node id\": this.controllerNodeId,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WakeUpCCIntervalReportOptions {\n\twakeUpInterval: number;\n\tcontrollerNodeId: number;\n}\n\n@CCCommand(WakeUpCommand.IntervalReport)\n@ccValueProperty(\"wakeUpInterval\", WakeUpCCValues.wakeUpInterval)\n@ccValueProperty(\"controllerNodeId\", WakeUpCCValues.controllerNodeId)\nexport class WakeUpCCIntervalReport extends WakeUpCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WakeUpCCIntervalReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.wakeUpInterval = options.wakeUpInterval;\n\t\tthis.controllerNodeId = options.controllerNodeId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WakeUpCCIntervalReport {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst wakeUpInterval = raw.payload.readUIntBE(0, 3);\n\t\tconst controllerNodeId = raw.payload[3];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\twakeUpInterval,\n\t\t\tcontrollerNodeId,\n\t\t});\n\t}\n\n\tpublic readonly wakeUpInterval: number;\n\n\tpublic readonly controllerNodeId: number;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"wake-up interval\": `${this.wakeUpInterval} seconds`,\n\t\t\t\t\"controller node id\": this.controllerNodeId,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(WakeUpCommand.IntervalGet)\n@expectedCCResponse(WakeUpCCIntervalReport)\nexport class WakeUpCCIntervalGet extends WakeUpCC {}\n\n@CCCommand(WakeUpCommand.WakeUpNotification)\nexport class WakeUpCCWakeUpNotification extends WakeUpCC {}\n\n@CCCommand(WakeUpCommand.NoMoreInformation)\nexport class WakeUpCCNoMoreInformation extends WakeUpCC {}\n\n// @publicAPI\nexport interface WakeUpCCIntervalCapabilitiesReportOptions {\n\tminWakeUpInterval: number;\n\tmaxWakeUpInterval: number;\n\tdefaultWakeUpInterval: number;\n\twakeUpIntervalSteps: number;\n\twakeUpOnDemandSupported: boolean;\n}\n\n@CCCommand(WakeUpCommand.IntervalCapabilitiesReport)\n@ccValueProperty(\n\t\"wakeUpOnDemandSupported\",\n\tWakeUpCCValues.wakeUpOnDemandSupported,\n)\nexport class WakeUpCCIntervalCapabilitiesReport extends WakeUpCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WakeUpCCIntervalCapabilitiesReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.minWakeUpInterval = options.minWakeUpInterval;\n\t\tthis.maxWakeUpInterval = options.maxWakeUpInterval;\n\t\tthis.defaultWakeUpInterval = options.defaultWakeUpInterval;\n\t\tthis.wakeUpIntervalSteps = options.wakeUpIntervalSteps;\n\t\tthis.wakeUpOnDemandSupported = options.wakeUpOnDemandSupported;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WakeUpCCIntervalCapabilitiesReport {\n\t\tvalidatePayload(raw.payload.length >= 12);\n\t\tconst minWakeUpInterval = raw.payload.readUIntBE(0, 3);\n\t\tconst maxWakeUpInterval = raw.payload.readUIntBE(3, 3);\n\t\tconst defaultWakeUpInterval = raw.payload.readUIntBE(6, 3);\n\t\tconst wakeUpIntervalSteps = raw.payload.readUIntBE(9, 3);\n\t\tlet wakeUpOnDemandSupported = false;\n\t\tif (raw.payload.length >= 13) {\n\t\t\t// V3+\n\t\t\twakeUpOnDemandSupported = !!(raw.payload[12] & 0b1);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tminWakeUpInterval,\n\t\t\tmaxWakeUpInterval,\n\t\t\tdefaultWakeUpInterval,\n\t\t\twakeUpIntervalSteps,\n\t\t\twakeUpOnDemandSupported,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\t\tconst valueDB = this.getValueDB(ctx);\n\n\t\t// Store the received information as metadata for the wake up interval\n\t\tvalueDB.setMetadata(\n\t\t\t{\n\t\t\t\tcommandClass: this.ccId,\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tproperty: \"wakeUpInterval\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t...ValueMetadata.WriteOnlyUInt24,\n\t\t\t\tmin: this.minWakeUpInterval,\n\t\t\t\tmax: this.maxWakeUpInterval,\n\t\t\t\tsteps: this.wakeUpIntervalSteps,\n\t\t\t\tdefault: this.defaultWakeUpInterval,\n\t\t\t},\n\t\t);\n\n\t\t// Store wakeUpOnDemandSupported in valueDB\n\n\t\treturn true;\n\t}\n\n\tpublic readonly minWakeUpInterval: number;\n\tpublic readonly maxWakeUpInterval: number;\n\tpublic readonly defaultWakeUpInterval: number;\n\tpublic readonly wakeUpIntervalSteps: number;\n\n\tpublic readonly wakeUpOnDemandSupported: boolean;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"default interval\": `${this.defaultWakeUpInterval} seconds`,\n\t\t\t\t\"minimum interval\": `${this.minWakeUpInterval} seconds`,\n\t\t\t\t\"maximum interval\": `${this.maxWakeUpInterval} seconds`,\n\t\t\t\t\"interval steps\": `${this.wakeUpIntervalSteps} seconds`,\n\t\t\t\t\"wake up on demand supported\":\n\t\t\t\t\t`${this.wakeUpOnDemandSupported}`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(WakeUpCommand.IntervalCapabilitiesGet)\n@expectedCCResponse(WakeUpCCIntervalCapabilitiesReport)\nexport class WakeUpCCIntervalCapabilitiesGet extends WakeUpCC {}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n\tCommandClasses,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype SupervisionResult,\n\tTransmitOptions,\n\tValueMetadata,\n\ttype WithAddress,\n\tsupervisedCommandSucceeded,\n\tvalidatePayload,\n} from \"@zwave-js/core/safe\";\nimport type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetValueDB,\n} from \"@zwave-js/host/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { pick } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { clamp } from \"alcalzone-shared/math\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\ttype SetValueImplementation,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { WakeUpCommand } from \"../lib/_Types.js\";\n\nexport const WakeUpCCValues = Object.freeze({\n\t...V.defineStaticCCValues(CommandClasses[\"Wake Up\"], {\n\t\t...V.staticProperty(\n\t\t\t\"controllerNodeId\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnly,\n\t\t\t\tlabel: \"Node ID of the controller\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t},\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"wakeUpInterval\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt24,\n\t\t\t\tlabel: \"Wake Up interval\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t},\n\t\t),\n\n\t\t...V.staticProperty(\"wakeUpOnDemandSupported\", undefined, {\n\t\t\tinternal: true,\n\t\t\tsupportsEndpoints: false,\n\t\t\tminVersion: 3,\n\t\t}),\n\t}),\n});\n\n@API(CommandClasses[\"Wake Up\"])\nexport class WakeUpCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: WakeUpCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase WakeUpCommand.IntervalGet:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase WakeUpCommand.IntervalSet:\n\t\t\tcase WakeUpCommand.NoMoreInformation:\n\t\t\t\treturn true; // This is mandatory\n\t\t\tcase WakeUpCommand.IntervalCapabilitiesGet:\n\t\t\t\treturn this.version >= 2 && this.isSinglecast();\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(this: WakeUpCCAPI, { property }, value) {\n\t\t\tif (property !== \"wakeUpInterval\") {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t\tif (typeof value !== \"number\") {\n\t\t\t\tthrowWrongValueType(\n\t\t\t\t\tthis.ccId,\n\t\t\t\t\tproperty,\n\t\t\t\t\t\"number\",\n\t\t\t\t\ttypeof value,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst result = await this.setInterval(\n\t\t\t\tvalue,\n\t\t\t\tthis.host.ownNodeId ?? 1,\n\t\t\t);\n\n\t\t\t// Verify the change after a short delay, unless the command was supervised and successful\n\t\t\tif (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n\t\t\t\tthis.schedulePoll({ property }, value, { transition: \"fast\" });\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: WakeUpCCAPI, { property }) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"wakeUpInterval\":\n\t\t\t\t\treturn (await this.getInterval())?.[property];\n\t\t\t\tdefault:\n\t\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getInterval() {\n\t\tthis.assertSupportsCommand(WakeUpCommand, WakeUpCommand.IntervalGet);\n\n\t\tconst cc = new WakeUpCCIntervalGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWakeUpCCIntervalReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"wakeUpInterval\", \"controllerNodeId\"]);\n\t\t}\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getIntervalCapabilities() {\n\t\tthis.assertSupportsCommand(\n\t\t\tWakeUpCommand,\n\t\t\tWakeUpCommand.IntervalCapabilitiesGet,\n\t\t);\n\n\t\tconst cc = new WakeUpCCIntervalCapabilitiesGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWakeUpCCIntervalCapabilitiesReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"defaultWakeUpInterval\",\n\t\t\t\t\"minWakeUpInterval\",\n\t\t\t\t\"maxWakeUpInterval\",\n\t\t\t\t\"wakeUpIntervalSteps\",\n\t\t\t\t\"wakeUpOnDemandSupported\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async setInterval(\n\t\twakeUpInterval: number,\n\t\tcontrollerNodeId: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(WakeUpCommand, WakeUpCommand.IntervalSet);\n\n\t\tconst cc = new WakeUpCCIntervalSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\twakeUpInterval,\n\t\t\tcontrollerNodeId,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\tpublic async sendNoMoreInformation(): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWakeUpCommand,\n\t\t\tWakeUpCommand.NoMoreInformation,\n\t\t);\n\n\t\tconst cc = new WakeUpCCNoMoreInformation({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tawait this.host.sendCommand(cc, {\n\t\t\t...this.commandOptions,\n\t\t\t// This command must be sent as part of the wake up queue\n\t\t\tpriority: MessagePriority.WakeUp,\n\t\t\t// Don't try to resend this - if we get no response, the node is most likely asleep\n\t\t\tmaxSendAttempts: 1,\n\t\t\t// Also we don't want to wait for an ACK because this can lock up the network for seconds\n\t\t\t// if the target node is asleep and doesn't respond to the command\n\t\t\ttransmitOptions: TransmitOptions.DEFAULT_NOACK,\n\t\t});\n\t}\n}\n\n@commandClass(CommandClasses[\"Wake Up\"])\n@implementedVersion(3)\n@ccValues(WakeUpCCValues)\nexport class WakeUpCC extends CommandClass {\n\tdeclare ccCommand: WakeUpCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Wake Up\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tif (node.id === ctx.ownNodeId) {\n\t\t\tctx.logNode(\n\t\t\t\tnode.id,\n\t\t\t\t`skipping wakeup configuration for the controller`,\n\t\t\t);\n\t\t} else if (node.isFrequentListening) {\n\t\t\tctx.logNode(\n\t\t\t\tnode.id,\n\t\t\t\t`skipping wakeup configuration for frequent listening device`,\n\t\t\t);\n\t\t} else {\n\t\t\tlet desiredInterval: number;\n\t\t\tlet currentControllerNodeId: number;\n\t\t\tlet minInterval: number | undefined;\n\t\t\tlet maxInterval: number | undefined;\n\n\t\t\t// Retrieve the allowed wake up intervals and wake on demand support if possible\n\t\t\tif (api.version >= 2) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"retrieving wakeup capabilities from the device...\",\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tconst wakeupCaps = await api.getIntervalCapabilities();\n\t\t\t\tif (wakeupCaps) {\n\t\t\t\t\tconst logMessage = `received wakeup capabilities:\ndefault wakeup interval: ${wakeupCaps.defaultWakeUpInterval} seconds\nminimum wakeup interval: ${wakeupCaps.minWakeUpInterval} seconds\nmaximum wakeup interval: ${wakeupCaps.maxWakeUpInterval} seconds\nwakeup interval steps: ${wakeupCaps.wakeUpIntervalSteps} seconds\nwakeup on demand supported: ${wakeupCaps.wakeUpOnDemandSupported}`;\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t\tminInterval = wakeupCaps.minWakeUpInterval;\n\t\t\t\t\tmaxInterval = wakeupCaps.maxWakeUpInterval;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// SDS14223 prescribes a IntervalSet followed by a check\n\t\t\t// We have no intention of changing the interval (maybe some time in the future)\n\t\t\t// So for now get the current interval and just set the controller ID\n\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"retrieving wakeup interval from the device...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst wakeupResp = await api.getInterval();\n\n\t\t\tif (wakeupResp) {\n\t\t\t\tconst logMessage = `received wakeup configuration:\nwakeup interval: ${wakeupResp.wakeUpInterval} seconds\ncontroller node: ${wakeupResp.controllerNodeId}`;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\n\t\t\t\tdesiredInterval = wakeupResp.wakeUpInterval;\n\t\t\t\tcurrentControllerNodeId = wakeupResp.controllerNodeId;\n\t\t\t} else {\n\t\t\t\t// Just guess, I guess\n\t\t\t\tdesiredInterval = 3600 * 6; // 6 hours\n\t\t\t\tcurrentControllerNodeId = 0; // assume not set\n\t\t\t}\n\n\t\t\tconst ownNodeId = ctx.ownNodeId;\n\t\t\t// Only change the destination if necessary\n\t\t\tif (currentControllerNodeId !== ownNodeId) {\n\t\t\t\t// Spec compliance: Limit the interval to the allowed range, but...\n\t\t\t\t// ...try and preserve a \"never wake up\" configuration (#6367)\n\t\t\t\tif (\n\t\t\t\t\tdesiredInterval !== 0\n\t\t\t\t\t&& minInterval != undefined\n\t\t\t\t\t&& maxInterval != undefined\n\t\t\t\t) {\n\t\t\t\t\tdesiredInterval = clamp(\n\t\t\t\t\t\tdesiredInterval,\n\t\t\t\t\t\tminInterval,\n\t\t\t\t\t\tmaxInterval,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: \"configuring wakeup destination node\",\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tawait api.setInterval(desiredInterval, ownNodeId);\n\t\t\t\tthis.setValue(\n\t\t\t\t\tctx,\n\t\t\t\t\tWakeUpCCValues.controllerNodeId,\n\t\t\t\t\townNodeId,\n\t\t\t\t);\n\t\t\t\tctx.logNode(\n\t\t\t\t\tnode.id,\n\t\t\t\t\t\"wakeup destination node changed!\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface WakeUpCCIntervalSetOptions {\n\twakeUpInterval: number;\n\tcontrollerNodeId: number;\n}\n\n@CCCommand(WakeUpCommand.IntervalSet)\n@useSupervision()\nexport class WakeUpCCIntervalSet extends WakeUpCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WakeUpCCIntervalSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.wakeUpInterval = options.wakeUpInterval;\n\t\tthis.controllerNodeId = options.controllerNodeId;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): WakeUpCCIntervalSet {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst wakeUpInterval = raw.payload.readUIntBE(0, 3);\n\t\tconst controllerNodeId = raw.payload[3];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\twakeUpInterval,\n\t\t\tcontrollerNodeId,\n\t\t});\n\t}\n\n\tpublic wakeUpInterval: number;\n\tpublic controllerNodeId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\t0,\n\t\t\t0,\n\t\t\t0, // placeholder\n\t\t\tthis.controllerNodeId,\n\t\t]);\n\t\tthis.payload.writeUIntBE(this.wakeUpInterval, 0, 3);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"wake-up interval\": `${this.wakeUpInterval} seconds`,\n\t\t\t\t\"controller node id\": this.controllerNodeId,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WakeUpCCIntervalReportOptions {\n\twakeUpInterval: number;\n\tcontrollerNodeId: number;\n}\n\n@CCCommand(WakeUpCommand.IntervalReport)\n@ccValueProperty(\"wakeUpInterval\", WakeUpCCValues.wakeUpInterval)\n@ccValueProperty(\"controllerNodeId\", WakeUpCCValues.controllerNodeId)\nexport class WakeUpCCIntervalReport extends WakeUpCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WakeUpCCIntervalReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.wakeUpInterval = options.wakeUpInterval;\n\t\tthis.controllerNodeId = options.controllerNodeId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WakeUpCCIntervalReport {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst wakeUpInterval = raw.payload.readUIntBE(0, 3);\n\t\tconst controllerNodeId = raw.payload[3];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\twakeUpInterval,\n\t\t\tcontrollerNodeId,\n\t\t});\n\t}\n\n\tpublic readonly wakeUpInterval: number;\n\n\tpublic readonly controllerNodeId: number;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"wake-up interval\": `${this.wakeUpInterval} seconds`,\n\t\t\t\t\"controller node id\": this.controllerNodeId,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(WakeUpCommand.IntervalGet)\n@expectedCCResponse(WakeUpCCIntervalReport)\nexport class WakeUpCCIntervalGet extends WakeUpCC {}\n\n@CCCommand(WakeUpCommand.WakeUpNotification)\nexport class WakeUpCCWakeUpNotification extends WakeUpCC {}\n\n@CCCommand(WakeUpCommand.NoMoreInformation)\nexport class WakeUpCCNoMoreInformation extends WakeUpCC {}\n\n// @publicAPI\nexport interface WakeUpCCIntervalCapabilitiesReportOptions {\n\tminWakeUpInterval: number;\n\tmaxWakeUpInterval: number;\n\tdefaultWakeUpInterval: number;\n\twakeUpIntervalSteps: number;\n\twakeUpOnDemandSupported: boolean;\n}\n\n@CCCommand(WakeUpCommand.IntervalCapabilitiesReport)\n@ccValueProperty(\n\t\"wakeUpOnDemandSupported\",\n\tWakeUpCCValues.wakeUpOnDemandSupported,\n)\nexport class WakeUpCCIntervalCapabilitiesReport extends WakeUpCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WakeUpCCIntervalCapabilitiesReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.minWakeUpInterval = options.minWakeUpInterval;\n\t\tthis.maxWakeUpInterval = options.maxWakeUpInterval;\n\t\tthis.defaultWakeUpInterval = options.defaultWakeUpInterval;\n\t\tthis.wakeUpIntervalSteps = options.wakeUpIntervalSteps;\n\t\tthis.wakeUpOnDemandSupported = options.wakeUpOnDemandSupported;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WakeUpCCIntervalCapabilitiesReport {\n\t\tvalidatePayload(raw.payload.length >= 12);\n\t\tconst minWakeUpInterval = raw.payload.readUIntBE(0, 3);\n\t\tconst maxWakeUpInterval = raw.payload.readUIntBE(3, 3);\n\t\tconst defaultWakeUpInterval = raw.payload.readUIntBE(6, 3);\n\t\tconst wakeUpIntervalSteps = raw.payload.readUIntBE(9, 3);\n\t\tlet wakeUpOnDemandSupported = false;\n\t\tif (raw.payload.length >= 13) {\n\t\t\t// V3+\n\t\t\twakeUpOnDemandSupported = !!(raw.payload[12] & 0b1);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tminWakeUpInterval,\n\t\t\tmaxWakeUpInterval,\n\t\t\tdefaultWakeUpInterval,\n\t\t\twakeUpIntervalSteps,\n\t\t\twakeUpOnDemandSupported,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\t\tconst valueDB = this.getValueDB(ctx);\n\n\t\t// Store the received information as metadata for the wake up interval\n\t\tvalueDB.setMetadata(\n\t\t\t{\n\t\t\t\tcommandClass: this.ccId,\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tproperty: \"wakeUpInterval\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t...ValueMetadata.WriteOnlyUInt24,\n\t\t\t\tmin: this.minWakeUpInterval,\n\t\t\t\tmax: this.maxWakeUpInterval,\n\t\t\t\tsteps: this.wakeUpIntervalSteps,\n\t\t\t\tdefault: this.defaultWakeUpInterval,\n\t\t\t},\n\t\t);\n\n\t\t// Store wakeUpOnDemandSupported in valueDB\n\n\t\treturn true;\n\t}\n\n\tpublic readonly minWakeUpInterval: number;\n\tpublic readonly maxWakeUpInterval: number;\n\tpublic readonly defaultWakeUpInterval: number;\n\tpublic readonly wakeUpIntervalSteps: number;\n\n\tpublic readonly wakeUpOnDemandSupported: boolean;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"default interval\": `${this.defaultWakeUpInterval} seconds`,\n\t\t\t\t\"minimum interval\": `${this.minWakeUpInterval} seconds`,\n\t\t\t\t\"maximum interval\": `${this.maxWakeUpInterval} seconds`,\n\t\t\t\t\"interval steps\": `${this.wakeUpIntervalSteps} seconds`,\n\t\t\t\t\"wake up on demand supported\":\n\t\t\t\t\t`${this.wakeUpOnDemandSupported}`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(WakeUpCommand.IntervalCapabilitiesGet)\n@expectedCCResponse(WakeUpCCIntervalCapabilitiesReport)\nexport class WakeUpCCIntervalCapabilitiesGet extends WakeUpCC {}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_safe"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/WindowCoveringCC.ts"],
4
- "sourcesContent": ["import {\n\tCommandClasses,\n\tDuration,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tencodeBitMask,\n\tparseBitMask,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { type MaybeNotKnown } from \"@zwave-js/core/safe\";\nimport type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetValueDB,\n} from \"@zwave-js/host\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { getEnumMemberName, pick } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\tSET_VALUE_HOOKS,\n\ttype SetValueImplementation,\n\ttype SetValueImplementationHooksFactory,\n\tthrowMissingPropertyKey,\n\tthrowUnsupportedProperty,\n\tthrowUnsupportedPropertyKey,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\ttype LevelChangeDirection,\n\tWindowCoveringCommand,\n\tWindowCoveringParameter,\n} from \"../lib/_Types.js\";\n\nfunction parameterToMetadataStates(\n\tparameter: WindowCoveringParameter,\n): Record<number, string> {\n\tswitch (parameter) {\n\t\tcase WindowCoveringParameter[\"Vertical Slats Angle (no position)\"]:\n\t\tcase WindowCoveringParameter[\"Vertical Slats Angle\"]:\n\t\t\treturn {\n\t\t\t\t0: \"Closed (right inside)\",\n\t\t\t\t50: \"Open\",\n\t\t\t\t99: \"Closed (left inside)\",\n\t\t\t};\n\n\t\tcase WindowCoveringParameter[\"Horizontal Slats Angle (no position)\"]:\n\t\tcase WindowCoveringParameter[\"Horizontal Slats Angle\"]:\n\t\t\treturn {\n\t\t\t\t0: \"Closed (up inside)\",\n\t\t\t\t50: \"Open\",\n\t\t\t\t99: \"Closed (down inside)\",\n\t\t\t};\n\t}\n\n\treturn {\n\t\t0: \"Closed\",\n\t\t99: \"Open\",\n\t};\n}\n\nfunction parameterToLevelChangeLabel(\n\tparameter: WindowCoveringParameter,\n\tdirection: \"up\" | \"down\",\n): string {\n\tswitch (parameter) {\n\t\t// For angle control, both directions are closed, so we specify it explicitly\n\t\tcase WindowCoveringParameter[\"Vertical Slats Angle (no position)\"]:\n\t\tcase WindowCoveringParameter[\"Vertical Slats Angle\"]:\n\t\t\treturn `Change tilt (${\n\t\t\t\tdirection === \"up\" ? \"left inside\" : \"right inside\"\n\t\t\t})`;\n\n\t\tcase WindowCoveringParameter[\"Horizontal Slats Angle (no position)\"]:\n\t\tcase WindowCoveringParameter[\"Horizontal Slats Angle\"]:\n\t\t\t// Horizontal slats refer to the position of the inner side of the slats\n\t\t\t// where a high level (99) actually means they face down\n\t\t\treturn `Change tilt (${\n\t\t\t\tdirection === \"up\" ? \"down inside\" : \"up inside\"\n\t\t\t})`;\n\t}\n\t// For all other parameters, refer to the amount of light that is let in\n\treturn direction === \"up\" ? \"Open\" : \"Close\";\n}\n\nexport const WindowCoveringCCValues = Object.freeze({\n\t...V.defineStaticCCValues(CommandClasses[\"Window Covering\"], {\n\t\t...V.staticProperty(\n\t\t\t\"supportedParameters\",\n\t\t\tundefined, // meta\n\t\t\t{ internal: true }, // value options\n\t\t),\n\t}),\n\n\t...V.defineDynamicCCValues(CommandClasses[\"Window Covering\"], {\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"currentValue\",\n\t\t\t\"currentValue\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"currentValue\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.ReadOnlyLevel,\n\t\t\t\t\tlabel: `Current value - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\tstates: parameterToMetadataStates(parameter),\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"targetValue\",\n\t\t\t\"targetValue\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"targetValue\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\t// Only odd-numbered parameters have position support and are writable\n\t\t\t\tconst writeable = parameter % 2 === 1;\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.Level,\n\t\t\t\t\tlabel: `Target value - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\t// Only odd-numbered parameters have position support and are writable\n\t\t\t\t\twriteable: parameter % 2 === 1,\n\t\t\t\t\tstates: parameterToMetadataStates(parameter),\n\t\t\t\t\tallowManualEntry: writeable,\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"duration\",\n\t\t\t\"duration\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"duration\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => ({\n\t\t\t\t...ValueMetadata.ReadOnlyDuration,\n\t\t\t\tlabel: `Remaining duration - ${\n\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\tparameter,\n\t\t\t\t\t)\n\t\t\t\t}`,\n\t\t\t\tccSpecific: {\n\t\t\t\t\tparameter,\n\t\t\t\t},\n\t\t\t} as const),\n\t\t),\n\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"levelChangeUp\",\n\t\t\t// The direction refers to the change in level, not the physical location\n\t\t\t\"levelChangeUp\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"levelChangeUp\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\t\tlabel: `${\n\t\t\t\t\t\tparameterToLevelChangeLabel(\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t\t\"up\",\n\t\t\t\t\t\t)\n\t\t\t\t\t} - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t\tstates: {\n\t\t\t\t\t\ttrue: \"Start\",\n\t\t\t\t\t\tfalse: \"Stop\",\n\t\t\t\t\t},\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"levelChangeDown\",\n\t\t\t// The direction refers to the change in level, not the physical location\n\t\t\t\"levelChangeDown\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"levelChangeDown\"\n\t\t\t\t&& typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\t\tlabel: `${\n\t\t\t\t\t\tparameterToLevelChangeLabel(\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t\t\"down\",\n\t\t\t\t\t\t)\n\t\t\t\t\t} - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t\tstates: {\n\t\t\t\t\t\ttrue: \"Start\",\n\t\t\t\t\t\tfalse: \"Stop\",\n\t\t\t\t\t},\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\t}),\n});\n\n@API(CommandClasses[\"Window Covering\"])\nexport class WindowCoveringCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: WindowCoveringCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase WindowCoveringCommand.Get:\n\t\t\tcase WindowCoveringCommand.Set:\n\t\t\tcase WindowCoveringCommand.SupportedGet:\n\t\t\tcase WindowCoveringCommand.StartLevelChange:\n\t\t\tcase WindowCoveringCommand.StopLevelChange:\n\t\t\t\treturn true; // This is mandatory\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(\n\t\t\tthis: WindowCoveringCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t\tvalue,\n\t\t\toptions,\n\t\t) {\n\t\t\tconst valueId = {\n\t\t\t\tcommandClass: this.ccId,\n\t\t\t\tproperty,\n\t\t\t\tpropertyKey,\n\t\t\t};\n\n\t\t\tif (WindowCoveringCCValues.targetValue.is(valueId)) {\n\t\t\t\tif (\n\t\t\t\t\ttypeof propertyKey !== \"number\"\n\t\t\t\t\t// Only odd-numbered parameters have position support and are writable\n\t\t\t\t\t|| propertyKey % 2 === 0\n\t\t\t\t) {\n\t\t\t\t\tthrowUnsupportedPropertyKey(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\tpropertyKey!,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (typeof value !== \"number\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"number\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst parameter = propertyKey;\n\t\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\n\t\t\t\treturn this.set([{ parameter, value }], duration);\n\t\t\t} else if (\n\t\t\t\tWindowCoveringCCValues.levelChangeUp.is(valueId)\n\t\t\t\t|| WindowCoveringCCValues.levelChangeDown.is(valueId)\n\t\t\t) {\n\t\t\t\tif (typeof value !== \"boolean\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"boolean\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst parameter = propertyKey as number;\n\t\t\t\tconst direction = WindowCoveringCCValues.levelChangeUp.is(\n\t\t\t\t\t\tvalueId,\n\t\t\t\t\t)\n\t\t\t\t\t? \"up\"\n\t\t\t\t\t: \"down\";\n\n\t\t\t\tif (value) {\n\t\t\t\t\t// Perform the level change\n\t\t\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\t\t\t\t\treturn this.startLevelChange(\n\t\t\t\t\t\tparameter,\n\t\t\t\t\t\tdirection,\n\t\t\t\t\t\tduration,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn this.stopLevelChange(parameter);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tprotected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = (\n\t\t{ property, propertyKey },\n\t\tvalue,\n\t\toptions,\n\t) => {\n\t\tconst valueId = {\n\t\t\tcommandClass: this.ccId,\n\t\t\tproperty,\n\t\t\tpropertyKey,\n\t\t};\n\n\t\tif (WindowCoveringCCValues.targetValue.is(valueId)) {\n\t\t\tif (typeof propertyKey !== \"number\") return;\n\t\t\tconst parameter = propertyKey;\n\n\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\n\t\t\tconst currentValueValueId = WindowCoveringCCValues.currentValue(\n\t\t\t\tparameter,\n\t\t\t).endpoint(this.endpoint.index);\n\n\t\t\treturn {\n\t\t\t\t// Window Covering commands may take some time to be executed.\n\t\t\t\t// Therefore we try to supervise the command execution and delay the\n\t\t\t\t// optimistic update until the final result is received.\n\t\t\t\tsupervisionDelayedUpdates: true,\n\t\t\t\tsupervisionOnSuccess: async () => {\n\t\t\t\t\t// Only update currentValue for valid target values\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"number\"\n\t\t\t\t\t\t&& value >= 0\n\t\t\t\t\t\t&& value <= 99\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.tryGetValueDB()?.setValue(\n\t\t\t\t\t\t\tcurrentValueValueId,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (value === 255) {\n\t\t\t\t\t\t// We don't know the status now, so refresh the current value\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.get(parameter);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsupervisionOnFailure: async () => {\n\t\t\t\t\t// The transition failed, so now we don't know the status - refresh the current value\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.get(parameter);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// ignore\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\toptimisticallyUpdateRelatedValues: (\n\t\t\t\t\t_supervisedAndSuccessful,\n\t\t\t\t) => {\n\t\t\t\t\t// Only update currentValue for valid target values\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"number\"\n\t\t\t\t\t\t&& value >= 0\n\t\t\t\t\t\t&& value <= 99\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (this.isSinglecast()) {\n\t\t\t\t\t\t\tthis.tryGetValueDB()?.setValue(\n\t\t\t\t\t\t\t\tcurrentValueValueId,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (this.isMulticast()) {\n\t\t\t\t\t\t\t// Figure out which nodes were affected by this command\n\t\t\t\t\t\t\tconst affectedNodes = this.endpoint.node\n\t\t\t\t\t\t\t\t.physicalNodes.filter(\n\t\t\t\t\t\t\t\t\t(node) =>\n\t\t\t\t\t\t\t\t\t\tnode\n\t\t\t\t\t\t\t\t\t\t\t.getEndpoint(this.endpoint.index)\n\t\t\t\t\t\t\t\t\t\t\t?.supportsCC(this.ccId),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// and optimistically update the currentValue\n\t\t\t\t\t\t\tfor (const node of affectedNodes) {\n\t\t\t\t\t\t\t\tthis.host\n\t\t\t\t\t\t\t\t\t.tryGetValueDB(node.id)\n\t\t\t\t\t\t\t\t\t?.setValue(currentValueValueId, value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tverifyChanges: () => {\n\t\t\t\t\tif (this.isSinglecast()) {\n\t\t\t\t\t\t// We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n\t\t\t\t\t\tthis.schedulePoll(currentValueValueId, value, {\n\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// For multicasts, do not schedule a refresh - this could cause a LOT of traffic\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t};\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(\n\t\t\tthis: WindowCoveringCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"currentValue\":\n\t\t\t\tcase \"targetValue\":\n\t\t\t\tcase \"duration\":\n\t\t\t\t\tif (propertyKey == undefined) {\n\t\t\t\t\t\tthrowMissingPropertyKey(this.ccId, property);\n\t\t\t\t\t} else if (typeof propertyKey !== \"number\") {\n\t\t\t\t\t\tthrowUnsupportedPropertyKey(\n\t\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\tpropertyKey,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn (await this.get(propertyKey))?.[property];\n\t\t\t\tdefault:\n\t\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tpublic async getSupported(): Promise<\n\t\tMaybeNotKnown<readonly WindowCoveringParameter[]>\n\t> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.SupportedGet,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCSupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWindowCoveringCCSupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.supportedParameters;\n\t}\n\n\t@validateArgs({ strictEnums: true })\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async get(parameter: WindowCoveringParameter) {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.Get,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tparameter,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWindowCoveringCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"currentValue\", \"targetValue\", \"duration\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async set(\n\t\ttargetValues: {\n\t\t\tparameter: WindowCoveringParameter;\n\t\t\tvalue: number;\n\t\t}[],\n\t\tduration?: Duration | string,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.StartLevelChange,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\ttargetValues,\n\t\t\tduration,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs({ strictEnums: true })\n\tpublic async startLevelChange(\n\t\tparameter: WindowCoveringParameter,\n\t\tdirection: keyof typeof LevelChangeDirection,\n\t\tduration?: Duration | string,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.StartLevelChange,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCStartLevelChange({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tparameter,\n\t\t\tdirection,\n\t\t\tduration,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs({ strictEnums: true })\n\tpublic async stopLevelChange(\n\t\tparameter: WindowCoveringParameter,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.StopLevelChange,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCStopLevelChange({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tparameter,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses[\"Window Covering\"])\n@implementedVersion(1)\n@ccValues(WindowCoveringCCValues)\nexport class WindowCoveringCC extends CommandClass {\n\tdeclare ccCommand: WindowCoveringCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Window Covering\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"querying supported window covering parameters...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst supported = await api.getSupported();\n\t\tif (supported?.length) {\n\t\t\tconst logMessage = `supported window covering parameters:\n${\n\t\t\t\tsupported\n\t\t\t\t\t.map((p) =>\n\t\t\t\t\t\t`\u00B7 ${getEnumMemberName(WindowCoveringParameter, p)}`\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\\n\")\n\t\t\t}`;\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: logMessage,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\n\t\t\t// Create metadata for all supported parameters\n\t\t\tfor (const param of supported) {\n\t\t\t\t// Default values\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.currentValue(param),\n\t\t\t\t);\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.targetValue(param),\n\t\t\t\t);\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.duration(param),\n\t\t\t\t);\n\n\t\t\t\t// Level change values\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.levelChangeUp(param),\n\t\t\t\t);\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.levelChangeDown(param),\n\t\t\t\t);\n\n\t\t\t\t// And for the odd parameters (with position support), query the position\n\t\t\t\tif (param % 2 === 1) {\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: `querying position for parameter ${\n\t\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\t\tparam,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}...`,\n\t\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t\t});\n\t\t\t\t\tawait api.get(param);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic translatePropertyKey(\n\t\tctx: GetValueDB,\n\t\tproperty: string | number,\n\t\tpropertyKey: string | number,\n\t): string | undefined {\n\t\tif (typeof propertyKey === \"number\") {\n\t\t\treturn getEnumMemberName(WindowCoveringParameter, propertyKey);\n\t\t}\n\t\treturn super.translatePropertyKey(ctx, property, propertyKey);\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCSupportedReportOptions {\n\tsupportedParameters: readonly WindowCoveringParameter[];\n}\n\n@CCCommand(WindowCoveringCommand.SupportedReport)\n@ccValueProperty(\n\t\"supportedParameters\",\n\tWindowCoveringCCValues.supportedParameters,\n)\nexport class WindowCoveringCCSupportedReport extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.supportedParameters = options.supportedParameters;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\n\t\tconst numBitmaskBytes = raw.payload[0] & 0b1111;\n\t\tvalidatePayload(raw.payload.length >= 1 + numBitmaskBytes);\n\t\tconst bitmask = raw.payload.subarray(1, 1 + numBitmaskBytes);\n\t\tconst supportedParameters: WindowCoveringParameter[] = parseBitMask(\n\t\t\tbitmask,\n\t\t\tWindowCoveringParameter[\"Outbound Left (no position)\"],\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportedParameters,\n\t\t});\n\t}\n\n\tpublic readonly supportedParameters: readonly WindowCoveringParameter[];\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tconst bitmask = encodeBitMask(\n\t\t\tthis.supportedParameters,\n\t\t\tundefined,\n\t\t\tWindowCoveringParameter[\"Outbound Left (no position)\"],\n\t\t).subarray(0, 15);\n\t\tconst numBitmaskBytes = bitmask.length & 0b1111;\n\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([numBitmaskBytes]),\n\t\t\tbitmask.subarray(0, numBitmaskBytes),\n\t\t]);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supported parameters\": this.supportedParameters\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(p) =>\n\t\t\t\t\t\t\t`\\n\u00B7 ${\n\t\t\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\t\t\tp,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(WindowCoveringCommand.SupportedGet)\n@expectedCCResponse(WindowCoveringCCSupportedReport)\nexport class WindowCoveringCCSupportedGet extends WindowCoveringCC {}\n\n// @publicAPI\nexport interface WindowCoveringCCReportOptions {\n\tparameter: WindowCoveringParameter;\n\tcurrentValue: number;\n\ttargetValue: number;\n\tduration: Duration;\n}\n\n@CCCommand(WindowCoveringCommand.Report)\n@ccValueProperty(\n\t\"currentValue\",\n\tWindowCoveringCCValues.currentValue,\n\t(self) => [self.parameter],\n)\n@ccValueProperty(\n\t\"targetValue\",\n\tWindowCoveringCCValues.targetValue,\n\t(self) => [self.parameter],\n)\n@ccValueProperty(\n\t\"duration\",\n\tWindowCoveringCCValues.duration,\n\t(self) => [self.parameter],\n)\nexport class WindowCoveringCCReport extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.parameter = options.parameter;\n\t\tthis.currentValue = options.currentValue;\n\t\tthis.targetValue = options.targetValue;\n\t\tthis.duration = options.duration;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCReport {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst parameter: WindowCoveringParameter = raw.payload[0];\n\t\tconst currentValue = raw.payload[1];\n\t\tconst targetValue = raw.payload[2];\n\t\tconst duration = Duration.parseReport(raw.payload[3])\n\t\t\t?? Duration.unknown();\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tparameter,\n\t\t\tcurrentValue,\n\t\t\ttargetValue,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic readonly parameter: WindowCoveringParameter;\n\n\tpublic readonly currentValue: number;\n\n\tpublic readonly targetValue: number;\n\n\tpublic readonly duration: Duration;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tparameter: getEnumMemberName(\n\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\tthis.parameter,\n\t\t\t\t),\n\t\t\t\t\"current value\": this.currentValue,\n\t\t\t\t\"target value\": this.targetValue,\n\t\t\t\tduration: this.duration.toString(),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCGetOptions {\n\tparameter: WindowCoveringParameter;\n}\n\nfunction testResponseForWindowCoveringGet(\n\tsent: WindowCoveringCCGet,\n\treceived: WindowCoveringCCReport,\n) {\n\treturn received.parameter === sent.parameter;\n}\n\n@CCCommand(WindowCoveringCommand.Get)\n@expectedCCResponse(WindowCoveringCCReport, testResponseForWindowCoveringGet)\nexport class WindowCoveringCCGet extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.parameter = options.parameter;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): WindowCoveringCCGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst parameter: WindowCoveringParameter = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tparameter,\n\t\t});\n\t}\n\n\tpublic parameter: WindowCoveringParameter;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.parameter]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tparameter: getEnumMemberName(\n\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\tthis.parameter,\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCSetOptions {\n\ttargetValues: {\n\t\tparameter: WindowCoveringParameter;\n\t\tvalue: number;\n\t}[];\n\tduration?: Duration | string;\n}\n\n@CCCommand(WindowCoveringCommand.Set)\n@useSupervision()\nexport class WindowCoveringCCSet extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.targetValues = options.targetValues;\n\t\tthis.duration = Duration.from(options.duration);\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): WindowCoveringCCSet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst numEntries = raw.payload[0] & 0b11111;\n\n\t\tvalidatePayload(raw.payload.length >= 1 + numEntries * 2);\n\t\tconst targetValues: WindowCoveringCCSetOptions[\"targetValues\"] = [];\n\n\t\tfor (let i = 0; i < numEntries; i++) {\n\t\t\tconst offset = 1 + i * 2;\n\t\t\ttargetValues.push({\n\t\t\t\tparameter: raw.payload[offset],\n\t\t\t\tvalue: raw.payload[offset + 1],\n\t\t\t});\n\t\t}\n\n\t\tlet duration: Duration | undefined;\n\n\t\tif (raw.payload.length >= 2 + numEntries * 2) {\n\t\t\tduration = Duration.parseSet(\n\t\t\t\traw.payload[1 + numEntries * 2],\n\t\t\t);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttargetValues,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic targetValues: {\n\t\tparameter: WindowCoveringParameter;\n\t\tvalue: number;\n\t}[];\n\tpublic duration: Duration | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tconst numEntries = this.targetValues.length & 0b11111;\n\t\tthis.payload = new Bytes(2 + numEntries * 2);\n\n\t\tthis.payload[0] = numEntries;\n\t\tfor (let i = 0; i < numEntries; i++) {\n\t\t\tconst offset = 1 + i * 2;\n\t\t\tthis.payload[offset] = this.targetValues[i].parameter;\n\t\t\tthis.payload[offset + 1] = this.targetValues[i].value;\n\t\t}\n\n\t\tthis.payload[this.payload.length - 1] = (\n\t\t\tthis.duration ?? Duration.default()\n\t\t).serializeSet();\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {};\n\t\tfor (const { parameter, value } of this.targetValues) {\n\t\t\tmessage[getEnumMemberName(WindowCoveringParameter, parameter)] =\n\t\t\t\tvalue;\n\t\t}\n\t\tif (this.duration) {\n\t\t\tmessage.duration = this.duration.toString();\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCStartLevelChangeOptions {\n\tparameter: WindowCoveringParameter;\n\tdirection: keyof typeof LevelChangeDirection;\n\tduration?: Duration | string;\n}\n\n@CCCommand(WindowCoveringCommand.StartLevelChange)\n@useSupervision()\nexport class WindowCoveringCCStartLevelChange extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCStartLevelChangeOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.parameter = options.parameter;\n\t\tthis.direction = options.direction;\n\t\tthis.duration = Duration.from(options.duration);\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCStartLevelChange {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst direction = !!(raw.payload[0] & 0b0100_0000)\n\t\t\t? \"down\"\n\t\t\t: \"up\";\n\t\tconst parameter: WindowCoveringParameter = raw.payload[1];\n\t\tlet duration: Duration | undefined;\n\n\t\tif (raw.payload.length >= 3) {\n\t\t\tduration = Duration.parseSet(raw.payload[2]);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tdirection,\n\t\t\tparameter,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic parameter: WindowCoveringParameter;\n\tpublic direction: keyof typeof LevelChangeDirection;\n\tpublic duration: Duration | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.direction === \"down\" ? 0b0100_0000 : 0b0000_0000,\n\t\t\tthis.parameter,\n\t\t\t(this.duration ?? Duration.default()).serializeSet(),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\tparameter: getEnumMemberName(\n\t\t\t\tWindowCoveringParameter,\n\t\t\t\tthis.parameter,\n\t\t\t),\n\t\t\tdirection: this.direction,\n\t\t};\n\t\tif (this.duration) {\n\t\t\tmessage.duration = this.duration.toString();\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCStopLevelChangeOptions {\n\tparameter: WindowCoveringParameter;\n}\n\n@CCCommand(WindowCoveringCommand.StopLevelChange)\n@useSupervision()\nexport class WindowCoveringCCStopLevelChange extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCStopLevelChangeOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.parameter = options.parameter;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCStopLevelChange {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst parameter: WindowCoveringParameter = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tparameter,\n\t\t});\n\t}\n\n\tpublic parameter: WindowCoveringParameter;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.parameter]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tparameter: getEnumMemberName(\n\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\tthis.parameter,\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n\tCommandClasses,\n\tDuration,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tencodeBitMask,\n\tparseBitMask,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { type MaybeNotKnown } from \"@zwave-js/core/safe\";\nimport type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetValueDB,\n} from \"@zwave-js/host\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { getEnumMemberName, pick } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\tSET_VALUE_HOOKS,\n\ttype SetValueImplementation,\n\ttype SetValueImplementationHooksFactory,\n\tthrowMissingPropertyKey,\n\tthrowUnsupportedProperty,\n\tthrowUnsupportedPropertyKey,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\ttype LevelChangeDirection,\n\tWindowCoveringCommand,\n\tWindowCoveringParameter,\n} from \"../lib/_Types.js\";\n\nfunction parameterToMetadataStates(\n\tparameter: WindowCoveringParameter,\n): Record<number, string> {\n\tswitch (parameter) {\n\t\tcase WindowCoveringParameter[\"Vertical Slats Angle (no position)\"]:\n\t\tcase WindowCoveringParameter[\"Vertical Slats Angle\"]:\n\t\t\treturn {\n\t\t\t\t0: \"Closed (right inside)\",\n\t\t\t\t50: \"Open\",\n\t\t\t\t99: \"Closed (left inside)\",\n\t\t\t};\n\n\t\tcase WindowCoveringParameter[\"Horizontal Slats Angle (no position)\"]:\n\t\tcase WindowCoveringParameter[\"Horizontal Slats Angle\"]:\n\t\t\treturn {\n\t\t\t\t0: \"Closed (up inside)\",\n\t\t\t\t50: \"Open\",\n\t\t\t\t99: \"Closed (down inside)\",\n\t\t\t};\n\t}\n\n\treturn {\n\t\t0: \"Closed\",\n\t\t99: \"Open\",\n\t};\n}\n\nfunction parameterToLevelChangeLabel(\n\tparameter: WindowCoveringParameter,\n\tdirection: \"up\" | \"down\",\n): string {\n\tswitch (parameter) {\n\t\t// For angle control, both directions are closed, so we specify it explicitly\n\t\tcase WindowCoveringParameter[\"Vertical Slats Angle (no position)\"]:\n\t\tcase WindowCoveringParameter[\"Vertical Slats Angle\"]:\n\t\t\treturn `Change tilt (${\n\t\t\t\tdirection === \"up\" ? \"left inside\" : \"right inside\"\n\t\t\t})`;\n\n\t\tcase WindowCoveringParameter[\"Horizontal Slats Angle (no position)\"]:\n\t\tcase WindowCoveringParameter[\"Horizontal Slats Angle\"]:\n\t\t\t// Horizontal slats refer to the position of the inner side of the slats\n\t\t\t// where a high level (99) actually means they face down\n\t\t\treturn `Change tilt (${\n\t\t\t\tdirection === \"up\" ? \"down inside\" : \"up inside\"\n\t\t\t})`;\n\t}\n\t// For all other parameters, refer to the amount of light that is let in\n\treturn direction === \"up\" ? \"Open\" : \"Close\";\n}\n\nexport const WindowCoveringCCValues = Object.freeze({\n\t...V.defineStaticCCValues(CommandClasses[\"Window Covering\"], {\n\t\t...V.staticProperty(\n\t\t\t\"supportedParameters\",\n\t\t\tundefined, // meta\n\t\t\t{ internal: true }, // value options\n\t\t),\n\t}),\n\n\t...V.defineDynamicCCValues(CommandClasses[\"Window Covering\"], {\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"currentValue\",\n\t\t\t\"currentValue\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"currentValue\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.ReadOnlyLevel,\n\t\t\t\t\tlabel: `Current value - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\tstates: parameterToMetadataStates(parameter),\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"targetValue\",\n\t\t\t\"targetValue\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"targetValue\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\t// Only odd-numbered parameters have position support and are writable\n\t\t\t\tconst writeable = parameter % 2 === 1;\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.Level,\n\t\t\t\t\tlabel: `Target value - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\t// Only odd-numbered parameters have position support and are writable\n\t\t\t\t\twriteable: parameter % 2 === 1,\n\t\t\t\t\tstates: parameterToMetadataStates(parameter),\n\t\t\t\t\tallowManualEntry: writeable,\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"duration\",\n\t\t\t\"duration\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"duration\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => ({\n\t\t\t\t...ValueMetadata.ReadOnlyDuration,\n\t\t\t\tlabel: `Remaining duration - ${\n\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\tparameter,\n\t\t\t\t\t)\n\t\t\t\t}`,\n\t\t\t\tccSpecific: {\n\t\t\t\t\tparameter,\n\t\t\t\t},\n\t\t\t} as const),\n\t\t),\n\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"levelChangeUp\",\n\t\t\t// The direction refers to the change in level, not the physical location\n\t\t\t\"levelChangeUp\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"levelChangeUp\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\t\tlabel: `${\n\t\t\t\t\t\tparameterToLevelChangeLabel(\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t\t\"up\",\n\t\t\t\t\t\t)\n\t\t\t\t\t} - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t\tstates: {\n\t\t\t\t\t\ttrue: \"Start\",\n\t\t\t\t\t\tfalse: \"Stop\",\n\t\t\t\t\t},\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"levelChangeDown\",\n\t\t\t// The direction refers to the change in level, not the physical location\n\t\t\t\"levelChangeDown\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"levelChangeDown\"\n\t\t\t\t&& typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\t\tlabel: `${\n\t\t\t\t\t\tparameterToLevelChangeLabel(\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t\t\"down\",\n\t\t\t\t\t\t)\n\t\t\t\t\t} - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t\tstates: {\n\t\t\t\t\t\ttrue: \"Start\",\n\t\t\t\t\t\tfalse: \"Stop\",\n\t\t\t\t\t},\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\t}),\n});\n\n@API(CommandClasses[\"Window Covering\"])\nexport class WindowCoveringCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: WindowCoveringCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase WindowCoveringCommand.Get:\n\t\t\tcase WindowCoveringCommand.Set:\n\t\t\tcase WindowCoveringCommand.SupportedGet:\n\t\t\tcase WindowCoveringCommand.StartLevelChange:\n\t\t\tcase WindowCoveringCommand.StopLevelChange:\n\t\t\t\treturn true; // This is mandatory\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(\n\t\t\tthis: WindowCoveringCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t\tvalue,\n\t\t\toptions,\n\t\t) {\n\t\t\tconst valueId = {\n\t\t\t\tcommandClass: this.ccId,\n\t\t\t\tproperty,\n\t\t\t\tpropertyKey,\n\t\t\t};\n\n\t\t\tif (WindowCoveringCCValues.targetValue.is(valueId)) {\n\t\t\t\tif (\n\t\t\t\t\ttypeof propertyKey !== \"number\"\n\t\t\t\t\t// Only odd-numbered parameters have position support and are writable\n\t\t\t\t\t|| propertyKey % 2 === 0\n\t\t\t\t) {\n\t\t\t\t\tthrowUnsupportedPropertyKey(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\tpropertyKey!,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (typeof value !== \"number\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"number\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst parameter = propertyKey;\n\t\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\n\t\t\t\treturn this.set([{ parameter, value }], duration);\n\t\t\t} else if (\n\t\t\t\tWindowCoveringCCValues.levelChangeUp.is(valueId)\n\t\t\t\t|| WindowCoveringCCValues.levelChangeDown.is(valueId)\n\t\t\t) {\n\t\t\t\tif (typeof value !== \"boolean\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"boolean\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst parameter = propertyKey as number;\n\t\t\t\tconst direction = WindowCoveringCCValues.levelChangeUp.is(\n\t\t\t\t\t\tvalueId,\n\t\t\t\t\t)\n\t\t\t\t\t? \"up\"\n\t\t\t\t\t: \"down\";\n\n\t\t\t\tif (value) {\n\t\t\t\t\t// Perform the level change\n\t\t\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\t\t\t\t\treturn this.startLevelChange(\n\t\t\t\t\t\tparameter,\n\t\t\t\t\t\tdirection,\n\t\t\t\t\t\tduration,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn this.stopLevelChange(parameter);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tprotected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = (\n\t\t{ property, propertyKey },\n\t\tvalue,\n\t\toptions,\n\t) => {\n\t\tconst valueId = {\n\t\t\tcommandClass: this.ccId,\n\t\t\tproperty,\n\t\t\tpropertyKey,\n\t\t};\n\n\t\tif (WindowCoveringCCValues.targetValue.is(valueId)) {\n\t\t\tif (typeof propertyKey !== \"number\") return;\n\t\t\tconst parameter = propertyKey;\n\n\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\n\t\t\tconst currentValueValueId = WindowCoveringCCValues.currentValue(\n\t\t\t\tparameter,\n\t\t\t).endpoint(this.endpoint.index);\n\n\t\t\treturn {\n\t\t\t\t// Window Covering commands may take some time to be executed.\n\t\t\t\t// Therefore we try to supervise the command execution and delay the\n\t\t\t\t// optimistic update until the final result is received.\n\t\t\t\tsupervisionDelayedUpdates: true,\n\t\t\t\tsupervisionOnSuccess: async () => {\n\t\t\t\t\t// Only update currentValue for valid target values\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"number\"\n\t\t\t\t\t\t&& value >= 0\n\t\t\t\t\t\t&& value <= 99\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.tryGetValueDB()?.setValue(\n\t\t\t\t\t\t\tcurrentValueValueId,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (value === 255) {\n\t\t\t\t\t\t// We don't know the status now, so refresh the current value\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.get(parameter);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsupervisionOnFailure: async () => {\n\t\t\t\t\t// The transition failed, so now we don't know the status - refresh the current value\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.get(parameter);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// ignore\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\toptimisticallyUpdateRelatedValues: (\n\t\t\t\t\t_supervisedAndSuccessful,\n\t\t\t\t) => {\n\t\t\t\t\t// Only update currentValue for valid target values\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"number\"\n\t\t\t\t\t\t&& value >= 0\n\t\t\t\t\t\t&& value <= 99\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (this.isSinglecast()) {\n\t\t\t\t\t\t\tthis.tryGetValueDB()?.setValue(\n\t\t\t\t\t\t\t\tcurrentValueValueId,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (this.isMulticast()) {\n\t\t\t\t\t\t\t// Figure out which nodes were affected by this command\n\t\t\t\t\t\t\tconst affectedNodes = this.endpoint.node\n\t\t\t\t\t\t\t\t.physicalNodes.filter(\n\t\t\t\t\t\t\t\t\t(node) =>\n\t\t\t\t\t\t\t\t\t\tnode\n\t\t\t\t\t\t\t\t\t\t\t.getEndpoint(this.endpoint.index)\n\t\t\t\t\t\t\t\t\t\t\t?.supportsCC(this.ccId),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// and optimistically update the currentValue\n\t\t\t\t\t\t\tfor (const node of affectedNodes) {\n\t\t\t\t\t\t\t\tthis.host\n\t\t\t\t\t\t\t\t\t.tryGetValueDB(node.id)\n\t\t\t\t\t\t\t\t\t?.setValue(currentValueValueId, value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tverifyChanges: () => {\n\t\t\t\t\tif (this.isSinglecast()) {\n\t\t\t\t\t\t// We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n\t\t\t\t\t\tthis.schedulePoll(currentValueValueId, value, {\n\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// For multicasts, do not schedule a refresh - this could cause a LOT of traffic\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t};\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(\n\t\t\tthis: WindowCoveringCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"currentValue\":\n\t\t\t\tcase \"targetValue\":\n\t\t\t\tcase \"duration\":\n\t\t\t\t\tif (propertyKey == undefined) {\n\t\t\t\t\t\tthrowMissingPropertyKey(this.ccId, property);\n\t\t\t\t\t} else if (typeof propertyKey !== \"number\") {\n\t\t\t\t\t\tthrowUnsupportedPropertyKey(\n\t\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\tpropertyKey,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn (await this.get(propertyKey))?.[property];\n\t\t\t\tdefault:\n\t\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tpublic async getSupported(): Promise<\n\t\tMaybeNotKnown<readonly WindowCoveringParameter[]>\n\t> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.SupportedGet,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCSupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWindowCoveringCCSupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.supportedParameters;\n\t}\n\n\t@validateArgs({ strictEnums: true })\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async get(parameter: WindowCoveringParameter) {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.Get,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tparameter,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWindowCoveringCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"currentValue\", \"targetValue\", \"duration\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async set(\n\t\ttargetValues: {\n\t\t\tparameter: WindowCoveringParameter;\n\t\t\tvalue: number;\n\t\t}[],\n\t\tduration?: Duration | string,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.StartLevelChange,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\ttargetValues,\n\t\t\tduration,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs({ strictEnums: true })\n\tpublic async startLevelChange(\n\t\tparameter: WindowCoveringParameter,\n\t\tdirection: keyof typeof LevelChangeDirection,\n\t\tduration?: Duration | string,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.StartLevelChange,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCStartLevelChange({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tparameter,\n\t\t\tdirection,\n\t\t\tduration,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs({ strictEnums: true })\n\tpublic async stopLevelChange(\n\t\tparameter: WindowCoveringParameter,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.StopLevelChange,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCStopLevelChange({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tparameter,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses[\"Window Covering\"])\n@implementedVersion(1)\n@ccValues(WindowCoveringCCValues)\nexport class WindowCoveringCC extends CommandClass {\n\tdeclare ccCommand: WindowCoveringCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Window Covering\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"querying supported window covering parameters...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst supported = await api.getSupported();\n\t\tif (supported?.length) {\n\t\t\tconst logMessage = `supported window covering parameters:\n${\n\t\t\t\tsupported\n\t\t\t\t\t.map((p) =>\n\t\t\t\t\t\t`\u00B7 ${getEnumMemberName(WindowCoveringParameter, p)}`\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\\n\")\n\t\t\t}`;\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: logMessage,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\n\t\t\t// Create metadata for all supported parameters\n\t\t\tfor (const param of supported) {\n\t\t\t\t// Default values\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.currentValue(param),\n\t\t\t\t);\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.targetValue(param),\n\t\t\t\t);\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.duration(param),\n\t\t\t\t);\n\n\t\t\t\t// Level change values\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.levelChangeUp(param),\n\t\t\t\t);\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.levelChangeDown(param),\n\t\t\t\t);\n\n\t\t\t\t// And for the odd parameters (with position support), query the position\n\t\t\t\tif (param % 2 === 1) {\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: `querying position for parameter ${\n\t\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\t\tparam,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}...`,\n\t\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t\t});\n\t\t\t\t\tawait api.get(param);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic translatePropertyKey(\n\t\tctx: GetValueDB,\n\t\tproperty: string | number,\n\t\tpropertyKey: string | number,\n\t): string | undefined {\n\t\tif (typeof propertyKey === \"number\") {\n\t\t\treturn getEnumMemberName(WindowCoveringParameter, propertyKey);\n\t\t}\n\t\treturn super.translatePropertyKey(ctx, property, propertyKey);\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCSupportedReportOptions {\n\tsupportedParameters: readonly WindowCoveringParameter[];\n}\n\n@CCCommand(WindowCoveringCommand.SupportedReport)\n@ccValueProperty(\n\t\"supportedParameters\",\n\tWindowCoveringCCValues.supportedParameters,\n)\nexport class WindowCoveringCCSupportedReport extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.supportedParameters = options.supportedParameters;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\n\t\tconst numBitmaskBytes = raw.payload[0] & 0b1111;\n\t\tvalidatePayload(raw.payload.length >= 1 + numBitmaskBytes);\n\t\tconst bitmask = raw.payload.subarray(1, 1 + numBitmaskBytes);\n\t\tconst supportedParameters: WindowCoveringParameter[] = parseBitMask(\n\t\t\tbitmask,\n\t\t\tWindowCoveringParameter[\"Outbound Left (no position)\"],\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportedParameters,\n\t\t});\n\t}\n\n\tpublic readonly supportedParameters: readonly WindowCoveringParameter[];\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tconst bitmask = encodeBitMask(\n\t\t\tthis.supportedParameters,\n\t\t\tundefined,\n\t\t\tWindowCoveringParameter[\"Outbound Left (no position)\"],\n\t\t).subarray(0, 15);\n\t\tconst numBitmaskBytes = bitmask.length & 0b1111;\n\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([numBitmaskBytes]),\n\t\t\tbitmask.subarray(0, numBitmaskBytes),\n\t\t]);\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supported parameters\": this.supportedParameters\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(p) =>\n\t\t\t\t\t\t\t`\\n\u00B7 ${\n\t\t\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\t\t\tp,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(WindowCoveringCommand.SupportedGet)\n@expectedCCResponse(WindowCoveringCCSupportedReport)\nexport class WindowCoveringCCSupportedGet extends WindowCoveringCC {}\n\n// @publicAPI\nexport interface WindowCoveringCCReportOptions {\n\tparameter: WindowCoveringParameter;\n\tcurrentValue: number;\n\ttargetValue: number;\n\tduration: Duration;\n}\n\n@CCCommand(WindowCoveringCommand.Report)\n@ccValueProperty(\n\t\"currentValue\",\n\tWindowCoveringCCValues.currentValue,\n\t(self) => [self.parameter],\n)\n@ccValueProperty(\n\t\"targetValue\",\n\tWindowCoveringCCValues.targetValue,\n\t(self) => [self.parameter],\n)\n@ccValueProperty(\n\t\"duration\",\n\tWindowCoveringCCValues.duration,\n\t(self) => [self.parameter],\n)\nexport class WindowCoveringCCReport extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.parameter = options.parameter;\n\t\tthis.currentValue = options.currentValue;\n\t\tthis.targetValue = options.targetValue;\n\t\tthis.duration = options.duration;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCReport {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst parameter: WindowCoveringParameter = raw.payload[0];\n\t\tconst currentValue = raw.payload[1];\n\t\tconst targetValue = raw.payload[2];\n\t\tconst duration = Duration.parseReport(raw.payload[3])\n\t\t\t?? Duration.unknown();\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tparameter,\n\t\t\tcurrentValue,\n\t\t\ttargetValue,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic readonly parameter: WindowCoveringParameter;\n\n\tpublic readonly currentValue: number;\n\n\tpublic readonly targetValue: number;\n\n\tpublic readonly duration: Duration;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tparameter: getEnumMemberName(\n\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\tthis.parameter,\n\t\t\t\t),\n\t\t\t\t\"current value\": this.currentValue,\n\t\t\t\t\"target value\": this.targetValue,\n\t\t\t\tduration: this.duration.toString(),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCGetOptions {\n\tparameter: WindowCoveringParameter;\n}\n\nfunction testResponseForWindowCoveringGet(\n\tsent: WindowCoveringCCGet,\n\treceived: WindowCoveringCCReport,\n) {\n\treturn received.parameter === sent.parameter;\n}\n\n@CCCommand(WindowCoveringCommand.Get)\n@expectedCCResponse(WindowCoveringCCReport, testResponseForWindowCoveringGet)\nexport class WindowCoveringCCGet extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.parameter = options.parameter;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): WindowCoveringCCGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst parameter: WindowCoveringParameter = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tparameter,\n\t\t});\n\t}\n\n\tpublic parameter: WindowCoveringParameter;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.parameter]);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tparameter: getEnumMemberName(\n\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\tthis.parameter,\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCSetOptions {\n\ttargetValues: {\n\t\tparameter: WindowCoveringParameter;\n\t\tvalue: number;\n\t}[];\n\tduration?: Duration | string;\n}\n\n@CCCommand(WindowCoveringCommand.Set)\n@useSupervision()\nexport class WindowCoveringCCSet extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.targetValues = options.targetValues;\n\t\tthis.duration = Duration.from(options.duration);\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): WindowCoveringCCSet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst numEntries = raw.payload[0] & 0b11111;\n\n\t\tvalidatePayload(raw.payload.length >= 1 + numEntries * 2);\n\t\tconst targetValues: WindowCoveringCCSetOptions[\"targetValues\"] = [];\n\n\t\tfor (let i = 0; i < numEntries; i++) {\n\t\t\tconst offset = 1 + i * 2;\n\t\t\ttargetValues.push({\n\t\t\t\tparameter: raw.payload[offset],\n\t\t\t\tvalue: raw.payload[offset + 1],\n\t\t\t});\n\t\t}\n\n\t\tlet duration: Duration | undefined;\n\n\t\tif (raw.payload.length >= 2 + numEntries * 2) {\n\t\t\tduration = Duration.parseSet(\n\t\t\t\traw.payload[1 + numEntries * 2],\n\t\t\t);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttargetValues,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic targetValues: {\n\t\tparameter: WindowCoveringParameter;\n\t\tvalue: number;\n\t}[];\n\tpublic duration: Duration | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tconst numEntries = this.targetValues.length & 0b11111;\n\t\tthis.payload = new Bytes(2 + numEntries * 2);\n\n\t\tthis.payload[0] = numEntries;\n\t\tfor (let i = 0; i < numEntries; i++) {\n\t\t\tconst offset = 1 + i * 2;\n\t\t\tthis.payload[offset] = this.targetValues[i].parameter;\n\t\t\tthis.payload[offset + 1] = this.targetValues[i].value;\n\t\t}\n\n\t\tthis.payload[this.payload.length - 1] = (\n\t\t\tthis.duration ?? Duration.default()\n\t\t).serializeSet();\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {};\n\t\tfor (const { parameter, value } of this.targetValues) {\n\t\t\tmessage[getEnumMemberName(WindowCoveringParameter, parameter)] =\n\t\t\t\tvalue;\n\t\t}\n\t\tif (this.duration) {\n\t\t\tmessage.duration = this.duration.toString();\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCStartLevelChangeOptions {\n\tparameter: WindowCoveringParameter;\n\tdirection: keyof typeof LevelChangeDirection;\n\tduration?: Duration | string;\n}\n\n@CCCommand(WindowCoveringCommand.StartLevelChange)\n@useSupervision()\nexport class WindowCoveringCCStartLevelChange extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCStartLevelChangeOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.parameter = options.parameter;\n\t\tthis.direction = options.direction;\n\t\tthis.duration = Duration.from(options.duration);\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCStartLevelChange {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst direction = !!(raw.payload[0] & 0b0100_0000)\n\t\t\t? \"down\"\n\t\t\t: \"up\";\n\t\tconst parameter: WindowCoveringParameter = raw.payload[1];\n\t\tlet duration: Duration | undefined;\n\n\t\tif (raw.payload.length >= 3) {\n\t\t\tduration = Duration.parseSet(raw.payload[2]);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tdirection,\n\t\t\tparameter,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic parameter: WindowCoveringParameter;\n\tpublic direction: keyof typeof LevelChangeDirection;\n\tpublic duration: Duration | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.direction === \"down\" ? 0b0100_0000 : 0b0000_0000,\n\t\t\tthis.parameter,\n\t\t\t(this.duration ?? Duration.default()).serializeSet(),\n\t\t]);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\tparameter: getEnumMemberName(\n\t\t\t\tWindowCoveringParameter,\n\t\t\t\tthis.parameter,\n\t\t\t),\n\t\t\tdirection: this.direction,\n\t\t};\n\t\tif (this.duration) {\n\t\t\tmessage.duration = this.duration.toString();\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCStopLevelChangeOptions {\n\tparameter: WindowCoveringParameter;\n}\n\n@CCCommand(WindowCoveringCommand.StopLevelChange)\n@useSupervision()\nexport class WindowCoveringCCStopLevelChange extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCStopLevelChangeOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.parameter = options.parameter;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCStopLevelChange {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst parameter: WindowCoveringParameter = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tparameter,\n\t\t});\n\t}\n\n\tpublic parameter: WindowCoveringParameter;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.parameter]);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tparameter: getEnumMemberName(\n\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\tthis.parameter,\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_safe"]
7
7
  }