@zwave-js/cc 15.25.1 → 15.25.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/build/cjs/cc/AlarmSensorCC.js +15 -17
  2. package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
  3. package/build/cjs/cc/AssociationCC.d.ts +1 -1
  4. package/build/cjs/cc/AssociationCC.js +5 -2
  5. package/build/cjs/cc/AssociationCC.js.map +2 -2
  6. package/build/cjs/cc/AssociationGroupInfoCC.js +23 -18
  7. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  8. package/build/cjs/cc/BarrierOperatorCC.js +9 -7
  9. package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
  10. package/build/cjs/cc/BasicCC.js +3 -2
  11. package/build/cjs/cc/BasicCC.js.map +2 -2
  12. package/build/cjs/cc/BatteryCC.js +3 -2
  13. package/build/cjs/cc/BatteryCC.js.map +2 -2
  14. package/build/cjs/cc/BinarySensorCC.js +8 -6
  15. package/build/cjs/cc/BinarySensorCC.js.map +2 -2
  16. package/build/cjs/cc/BinarySwitchCC.js +3 -2
  17. package/build/cjs/cc/BinarySwitchCC.js.map +2 -2
  18. package/build/cjs/cc/CentralSceneCC.js +9 -7
  19. package/build/cjs/cc/CentralSceneCC.js.map +2 -2
  20. package/build/cjs/cc/ClockCC.js +3 -2
  21. package/build/cjs/cc/ClockCC.js.map +2 -2
  22. package/build/cjs/cc/ColorSwitchCC.js +9 -6
  23. package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
  24. package/build/cjs/cc/ConfigurationCC.js +27 -27
  25. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  26. package/build/cjs/cc/DoorLockCC.js +49 -63
  27. package/build/cjs/cc/DoorLockCC.js.map +2 -2
  28. package/build/cjs/cc/DoorLockLoggingCC.js +3 -2
  29. package/build/cjs/cc/DoorLockLoggingCC.js.map +2 -2
  30. package/build/cjs/cc/EnergyProductionCC.js +3 -2
  31. package/build/cjs/cc/EnergyProductionCC.js.map +2 -2
  32. package/build/cjs/cc/EntryControlCC.js +5 -3
  33. package/build/cjs/cc/EntryControlCC.js.map +2 -2
  34. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +2 -1
  35. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
  36. package/build/cjs/cc/HumidityControlModeCC.js +9 -8
  37. package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
  38. package/build/cjs/cc/HumidityControlOperatingStateCC.js +3 -2
  39. package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +2 -2
  40. package/build/cjs/cc/HumidityControlSetpointCC.js +19 -17
  41. package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
  42. package/build/cjs/cc/IndicatorCC.js +5 -2
  43. package/build/cjs/cc/IndicatorCC.js.map +2 -2
  44. package/build/cjs/cc/IrrigationCC.js +26 -27
  45. package/build/cjs/cc/IrrigationCC.js.map +2 -2
  46. package/build/cjs/cc/LanguageCC.js +3 -2
  47. package/build/cjs/cc/LanguageCC.js.map +2 -2
  48. package/build/cjs/cc/LockCC.js +3 -2
  49. package/build/cjs/cc/LockCC.js.map +2 -2
  50. package/build/cjs/cc/ManufacturerSpecificCC.js +4 -1
  51. package/build/cjs/cc/ManufacturerSpecificCC.js.map +2 -2
  52. package/build/cjs/cc/MeterCC.js +14 -13
  53. package/build/cjs/cc/MeterCC.js.map +2 -2
  54. package/build/cjs/cc/MultiChannelAssociationCC.js +5 -2
  55. package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
  56. package/build/cjs/cc/MultiChannelCC.d.ts +1 -1
  57. package/build/cjs/cc/MultiChannelCC.js +19 -22
  58. package/build/cjs/cc/MultiChannelCC.js.map +2 -2
  59. package/build/cjs/cc/MultilevelSensorCC.js +13 -8
  60. package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
  61. package/build/cjs/cc/MultilevelSwitchCC.js +5 -3
  62. package/build/cjs/cc/MultilevelSwitchCC.js.map +2 -2
  63. package/build/cjs/cc/NodeNamingCC.js +3 -2
  64. package/build/cjs/cc/NodeNamingCC.js.map +2 -2
  65. package/build/cjs/cc/NotificationCC.js +11 -11
  66. package/build/cjs/cc/NotificationCC.js.map +2 -2
  67. package/build/cjs/cc/ProtectionCC.js +16 -15
  68. package/build/cjs/cc/ProtectionCC.js.map +2 -2
  69. package/build/cjs/cc/SceneControllerConfigurationCC.js +2 -1
  70. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
  71. package/build/cjs/cc/ScheduleEntryLockCC.js +2 -1
  72. package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
  73. package/build/cjs/cc/Security2CC.js +15 -24
  74. package/build/cjs/cc/Security2CC.js.map +2 -2
  75. package/build/cjs/cc/SecurityCC.js +10 -17
  76. package/build/cjs/cc/SecurityCC.js.map +2 -2
  77. package/build/cjs/cc/SoundSwitchCC.js +2 -1
  78. package/build/cjs/cc/SoundSwitchCC.js.map +2 -2
  79. package/build/cjs/cc/ThermostatFanModeCC.js +9 -7
  80. package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
  81. package/build/cjs/cc/ThermostatFanStateCC.js +3 -2
  82. package/build/cjs/cc/ThermostatFanStateCC.js.map +2 -2
  83. package/build/cjs/cc/ThermostatModeCC.js +9 -7
  84. package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
  85. package/build/cjs/cc/ThermostatOperatingStateCC.js +4 -4
  86. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
  87. package/build/cjs/cc/ThermostatSetbackCC.js +3 -2
  88. package/build/cjs/cc/ThermostatSetbackCC.js.map +2 -2
  89. package/build/cjs/cc/ThermostatSetpointCC.js +9 -5
  90. package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
  91. package/build/cjs/cc/TimeCC.js +2 -1
  92. package/build/cjs/cc/TimeCC.js.map +2 -2
  93. package/build/cjs/cc/TimeParametersCC.js +2 -1
  94. package/build/cjs/cc/TimeParametersCC.js.map +2 -2
  95. package/build/cjs/cc/UserCodeCC.js +6 -6
  96. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  97. package/build/cjs/cc/UserCredentialCC.js +5 -2
  98. package/build/cjs/cc/UserCredentialCC.js.map +2 -2
  99. package/build/cjs/cc/VersionCC.js +2 -1
  100. package/build/cjs/cc/VersionCC.js.map +2 -2
  101. package/build/cjs/cc/WakeUpCC.js +2 -1
  102. package/build/cjs/cc/WakeUpCC.js.map +2 -2
  103. package/build/cjs/cc/WindowCoveringCC.js +10 -7
  104. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  105. package/build/cjs/cc/ZWavePlusCC.js +2 -1
  106. package/build/cjs/cc/ZWavePlusCC.js.map +2 -2
  107. package/build/cjs/cc/_CCValues.generated.d.ts +4 -4
  108. package/build/cjs/cc/_CCValues.generated.js +2 -2
  109. package/build/cjs/cc/_CCValues.generated.js.map +1 -1
  110. package/build/cjs/cc/index.d.ts +3 -3
  111. package/build/cjs/cc/index.js.map +2 -2
  112. package/build/cjs/cc/manufacturerProprietary/Decorators.d.ts +1 -1
  113. package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +2 -2
  114. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +3 -2
  115. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +2 -2
  116. package/build/cjs/lib/API.js.map +2 -2
  117. package/build/cjs/lib/CommandClass.d.ts +5 -1
  118. package/build/cjs/lib/CommandClass.js +25 -3
  119. package/build/cjs/lib/CommandClass.js.map +2 -2
  120. package/build/cjs/lib/CommandClassDecorators.d.ts +4 -4
  121. package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
  122. package/build/cjs/lib/Security2/Extension.d.ts +6 -4
  123. package/build/cjs/lib/Security2/Extension.js +22 -20
  124. package/build/cjs/lib/Security2/Extension.js.map +2 -2
  125. package/build/cjs/lib/_Types.js.map +1 -1
  126. package/build/cjs/lib/utils.js +14 -8
  127. package/build/cjs/lib/utils.js.map +2 -2
  128. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  129. package/build/esm/cc/AlarmSensorCC.js +14 -18
  130. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  131. package/build/esm/cc/AssociationCC.d.ts +1 -1
  132. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  133. package/build/esm/cc/AssociationCC.js +3 -0
  134. package/build/esm/cc/AssociationCC.js.map +1 -1
  135. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  136. package/build/esm/cc/AssociationGroupInfoCC.js +24 -22
  137. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  138. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  139. package/build/esm/cc/BarrierOperatorCC.js +8 -8
  140. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  141. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  142. package/build/esm/cc/BasicCC.js +2 -1
  143. package/build/esm/cc/BasicCC.js.map +1 -1
  144. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  145. package/build/esm/cc/BatteryCC.js +2 -1
  146. package/build/esm/cc/BatteryCC.js.map +1 -1
  147. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  148. package/build/esm/cc/BinarySensorCC.js +7 -7
  149. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  150. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  151. package/build/esm/cc/BinarySwitchCC.js +2 -1
  152. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  153. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  154. package/build/esm/cc/CentralSceneCC.js +9 -8
  155. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  156. package/build/esm/cc/ClockCC.d.ts.map +1 -1
  157. package/build/esm/cc/ClockCC.js +2 -1
  158. package/build/esm/cc/ClockCC.js.map +1 -1
  159. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  160. package/build/esm/cc/ColorSwitchCC.js +8 -7
  161. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  162. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  163. package/build/esm/cc/ConfigurationCC.js +32 -29
  164. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  165. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  166. package/build/esm/cc/DoorLockCC.js +73 -74
  167. package/build/esm/cc/DoorLockCC.js.map +1 -1
  168. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
  169. package/build/esm/cc/DoorLockLoggingCC.js +2 -1
  170. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
  171. package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
  172. package/build/esm/cc/EnergyProductionCC.js +2 -1
  173. package/build/esm/cc/EnergyProductionCC.js.map +1 -1
  174. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  175. package/build/esm/cc/EntryControlCC.js +3 -1
  176. package/build/esm/cc/EntryControlCC.js.map +1 -1
  177. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  178. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +1 -0
  179. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  180. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  181. package/build/esm/cc/HumidityControlModeCC.js +8 -9
  182. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  183. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
  184. package/build/esm/cc/HumidityControlOperatingStateCC.js +2 -1
  185. package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
  186. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  187. package/build/esm/cc/HumidityControlSetpointCC.js +18 -23
  188. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  189. package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
  190. package/build/esm/cc/IndicatorCC.js +3 -0
  191. package/build/esm/cc/IndicatorCC.js.map +1 -1
  192. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  193. package/build/esm/cc/IrrigationCC.js +29 -24
  194. package/build/esm/cc/IrrigationCC.js.map +1 -1
  195. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  196. package/build/esm/cc/LanguageCC.js +2 -1
  197. package/build/esm/cc/LanguageCC.js.map +1 -1
  198. package/build/esm/cc/LockCC.d.ts.map +1 -1
  199. package/build/esm/cc/LockCC.js +2 -1
  200. package/build/esm/cc/LockCC.js.map +1 -1
  201. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  202. package/build/esm/cc/ManufacturerSpecificCC.js +4 -1
  203. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  204. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  205. package/build/esm/cc/MeterCC.js +15 -19
  206. package/build/esm/cc/MeterCC.js.map +1 -1
  207. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  208. package/build/esm/cc/MultiChannelAssociationCC.js +3 -0
  209. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  210. package/build/esm/cc/MultiChannelCC.d.ts +1 -1
  211. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  212. package/build/esm/cc/MultiChannelCC.js +19 -23
  213. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  214. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  215. package/build/esm/cc/MultilevelSensorCC.js +14 -19
  216. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  217. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  218. package/build/esm/cc/MultilevelSwitchCC.js +3 -1
  219. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  220. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  221. package/build/esm/cc/NodeNamingCC.js +2 -1
  222. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  223. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  224. package/build/esm/cc/NotificationCC.js +11 -14
  225. package/build/esm/cc/NotificationCC.js.map +1 -1
  226. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  227. package/build/esm/cc/ProtectionCC.js +15 -22
  228. package/build/esm/cc/ProtectionCC.js.map +1 -1
  229. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
  230. package/build/esm/cc/SceneControllerConfigurationCC.js +1 -0
  231. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  232. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  233. package/build/esm/cc/ScheduleEntryLockCC.js +1 -0
  234. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  235. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  236. package/build/esm/cc/Security2CC.js +15 -32
  237. package/build/esm/cc/Security2CC.js.map +1 -1
  238. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  239. package/build/esm/cc/SecurityCC.js +10 -21
  240. package/build/esm/cc/SecurityCC.js.map +1 -1
  241. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
  242. package/build/esm/cc/SoundSwitchCC.js +1 -0
  243. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  244. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  245. package/build/esm/cc/ThermostatFanModeCC.js +8 -8
  246. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  247. package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
  248. package/build/esm/cc/ThermostatFanStateCC.js +2 -1
  249. package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
  250. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  251. package/build/esm/cc/ThermostatModeCC.js +8 -8
  252. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  253. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  254. package/build/esm/cc/ThermostatOperatingStateCC.js +4 -5
  255. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  256. package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -1
  257. package/build/esm/cc/ThermostatSetbackCC.js +2 -1
  258. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
  259. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  260. package/build/esm/cc/ThermostatSetpointCC.js +8 -9
  261. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  262. package/build/esm/cc/TimeCC.d.ts.map +1 -1
  263. package/build/esm/cc/TimeCC.js +1 -0
  264. package/build/esm/cc/TimeCC.js.map +1 -1
  265. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  266. package/build/esm/cc/TimeParametersCC.js +1 -0
  267. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  268. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  269. package/build/esm/cc/UserCodeCC.js +5 -7
  270. package/build/esm/cc/UserCodeCC.js.map +1 -1
  271. package/build/esm/cc/UserCredentialCC.d.ts.map +1 -1
  272. package/build/esm/cc/UserCredentialCC.js +4 -1
  273. package/build/esm/cc/UserCredentialCC.js.map +1 -1
  274. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  275. package/build/esm/cc/VersionCC.js +1 -0
  276. package/build/esm/cc/VersionCC.js.map +1 -1
  277. package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
  278. package/build/esm/cc/WakeUpCC.js +1 -0
  279. package/build/esm/cc/WakeUpCC.js.map +1 -1
  280. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  281. package/build/esm/cc/WindowCoveringCC.js +9 -9
  282. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  283. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
  284. package/build/esm/cc/ZWavePlusCC.js +1 -0
  285. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  286. package/build/esm/cc/_CCValues.generated.d.ts +4 -4
  287. package/build/esm/cc/_CCValues.generated.js +2 -2
  288. package/build/esm/cc/_CCValues.generated.js.map +1 -1
  289. package/build/esm/cc/index.d.ts +3 -3
  290. package/build/esm/cc/index.d.ts.map +1 -1
  291. package/build/esm/cc/index.js.map +1 -1
  292. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts +1 -1
  293. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
  294. package/build/esm/cc/manufacturerProprietary/Decorators.js.map +1 -1
  295. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
  296. package/build/esm/cc/manufacturerProprietary/FibaroCC.js +2 -1
  297. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  298. package/build/esm/lib/API.js.map +1 -1
  299. package/build/esm/lib/CommandClass.d.ts +5 -1
  300. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  301. package/build/esm/lib/CommandClass.js +30 -4
  302. package/build/esm/lib/CommandClass.js.map +1 -1
  303. package/build/esm/lib/CommandClassDecorators.d.ts +4 -4
  304. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
  305. package/build/esm/lib/CommandClassDecorators.js.map +1 -1
  306. package/build/esm/lib/Security2/Extension.d.ts +6 -4
  307. package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
  308. package/build/esm/lib/Security2/Extension.js +23 -21
  309. package/build/esm/lib/Security2/Extension.js.map +1 -1
  310. package/build/esm/lib/_Types.js +1 -1
  311. package/build/esm/lib/utils.d.ts.map +1 -1
  312. package/build/esm/lib/utils.js +15 -9
  313. package/build/esm/lib/utils.js.map +1 -1
  314. package/package.json +7 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/AssociationGroupInfoCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./AssociationGroupInfoCC._validateArgs.js\";\nconst { validateArgs_AssociationGroupInfoCCAPI_getGroupName, validateArgs_AssociationGroupInfoCCAPI_reportGroupName, validateArgs_AssociationGroupInfoCCAPI_getGroupInfo, validateArgs_AssociationGroupInfoCCAPI_reportGroupInfo, validateArgs_AssociationGroupInfoCCAPI_getCommands, validateArgs_AssociationGroupInfoCCAPI_reportCommands } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupportsCC, type WithAddress, encodeCCId, getCCName, parseCCId, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, cpp2js, getEnumMemberName, num2hex } from \"@zwave-js/shared\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { AssociationGroupInfoCommand, AssociationGroupInfoProfile, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { AssociationCC } from \"./AssociationCC.js\";\nimport { MultiChannelAssociationCC } from \"./MultiChannelAssociationCC.js\";\nimport { AssociationGroupInfoCCValues } from \"./_CCValues.generated.js\";\nexport { AssociationGroupInfoCCValues };\n// @noSetValueAPI This CC only has get-type commands\n@API(CommandClasses[\"Association Group Information\"])\nexport class AssociationGroupInfoCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: AssociationGroupInfoCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case AssociationGroupInfoCommand.NameGet:\n case AssociationGroupInfoCommand.NameReport:\n case AssociationGroupInfoCommand.InfoGet:\n case AssociationGroupInfoCommand.InfoReport:\n case AssociationGroupInfoCommand.CommandListGet:\n case AssociationGroupInfoCommand.CommandListReport:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n @validateArgs_AssociationGroupInfoCCAPI_getGroupName()\n public async getGroupName(groupId: number): Promise<MaybeNotKnown<string>> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.NameGet);\n const cc = new AssociationGroupInfoCCNameGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n });\n const response = await this.host.sendCommand<AssociationGroupInfoCCNameReport>(cc, this.commandOptions);\n if (response)\n return response.name;\n }\n @validateArgs_AssociationGroupInfoCCAPI_reportGroupName()\n public async reportGroupName(groupId: number, name: string): Promise<void> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.NameReport);\n const cc = new AssociationGroupInfoCCNameReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n name,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_AssociationGroupInfoCCAPI_getGroupInfo()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getGroupInfo(groupId: number, refreshCache: boolean = false) {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.InfoGet);\n const cc = new AssociationGroupInfoCCInfoGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n refreshCache,\n });\n const response = await this.host.sendCommand<AssociationGroupInfoCCInfoReport>(cc, this.commandOptions);\n // SDS13782 says: If List Mode is set to 0, the Group Count field MUST be set to 1.\n // But that's not always the case. Apparently some endpoints return 0 groups\n // although they support AGI CC\n if (response && response.groups.length > 0) {\n const { groupId: _, ...info } = response.groups[0];\n return {\n hasDynamicInfo: response.hasDynamicInfo,\n ...info,\n };\n }\n }\n @validateArgs_AssociationGroupInfoCCAPI_reportGroupInfo()\n public async reportGroupInfo(options: AssociationGroupInfoCCInfoReportOptions): Promise<void> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.InfoReport);\n const cc = new AssociationGroupInfoCCInfoReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_AssociationGroupInfoCCAPI_getCommands()\n public async getCommands(groupId: number, allowCache: boolean = true): Promise<MaybeNotKnown<AssociationGroupInfoCCCommandListReport[\"commands\"]>> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.CommandListGet);\n const cc = new AssociationGroupInfoCCCommandListGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n allowCache,\n });\n const response = await this.host.sendCommand<AssociationGroupInfoCCCommandListReport>(cc, this.commandOptions);\n if (response)\n return response.commands;\n }\n @validateArgs_AssociationGroupInfoCCAPI_reportCommands()\n public async reportCommands(groupId: number, commands: ReadonlyMap<CommandClasses, readonly number[]>): Promise<void> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.CommandListReport);\n const cc = new AssociationGroupInfoCCCommandListReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n commands,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Association Group Information\"])\n@implementedVersion(3)\n@ccValues(AssociationGroupInfoCCValues)\nexport class AssociationGroupInfoCC extends CommandClass {\n declare ccCommand: AssociationGroupInfoCommand;\n public determineRequiredCCInterviews(): readonly CommandClasses[] {\n // AssociationCC must be interviewed after Z-Wave+ if that is supported\n return [\n ...super.determineRequiredCCInterviews(),\n CommandClasses.Association,\n CommandClasses[\"Multi Channel Association\"],\n ];\n }\n /** Returns the name of an association group */\n public static getGroupNameCached(ctx: GetValueDB, endpoint: EndpointId, groupId: number): MaybeNotKnown<string> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(AssociationGroupInfoCCValues.groupName(groupId).endpoint(endpoint.index));\n }\n /** Returns the association profile for an association group */\n public static getGroupProfileCached(ctx: GetValueDB, endpoint: EndpointId, groupId: number): MaybeNotKnown<AssociationGroupInfoProfile> {\n return ctx.getValueDB(endpoint.nodeId).getValue<{\n profile: AssociationGroupInfoProfile;\n }>(AssociationGroupInfoCCValues.groupInfo(groupId).endpoint(endpoint.index))\n ?.profile;\n }\n /** Returns the dictionary of all commands issued by the given association group */\n public static getIssuedCommandsCached(ctx: GetValueDB, endpoint: EndpointId, groupId: number): MaybeNotKnown<ReadonlyMap<CommandClasses, readonly number[]>> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(AssociationGroupInfoCCValues.commands(groupId).endpoint(endpoint.index));\n }\n public static findGroupsForIssuedCommand(ctx: GetValueDB, endpoint: EndpointId & SupportsCC, ccId: CommandClasses, command: number): number[] {\n const ret: number[] = [];\n const associationGroupCount = this.getAssociationGroupCountCached(ctx, endpoint);\n for (let groupId = 1; groupId <= associationGroupCount; groupId++) {\n // Scan the issued commands of all groups if there's a match\n const issuedCommands = this.getIssuedCommandsCached(ctx, endpoint, groupId);\n if (!issuedCommands)\n continue;\n if (issuedCommands.has(ccId)\n && issuedCommands.get(ccId)!.includes(command)) {\n ret.push(groupId);\n continue;\n }\n }\n return ret;\n }\n private static getAssociationGroupCountCached(ctx: GetValueDB, endpoint: EndpointId & SupportsCC): number {\n // The association group count is either determined by the\n // Association CC or the Multi Channel Association CC\n return (\n // First query the Multi Channel Association CC\n // And fall back to 0\n (endpoint.supportsCC(CommandClasses[\"Multi Channel Association\"])\n && MultiChannelAssociationCC.getGroupCountCached(ctx, endpoint))\n // Then the Association CC\n || (endpoint.supportsCC(CommandClasses.Association)\n && AssociationCC.getGroupCountCached(ctx, endpoint))\n || 0);\n }\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Association Group Information\"], ctx, endpoint).withOptions({ priority: MessagePriority.NodeQuery });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n const associationGroupCount = AssociationGroupInfoCC\n .getAssociationGroupCountCached(ctx, endpoint);\n for (let groupId = 1; groupId <= associationGroupCount; groupId++) {\n // First get the group's name\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Association group #${groupId}: Querying name...`,\n direction: \"outbound\",\n });\n const name = await api.getGroupName(groupId);\n if (name) {\n const logMessage = `Association group #${groupId} has name \"${name}\"`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n // Then the command list\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Association group #${groupId}: Querying command list...`,\n direction: \"outbound\",\n });\n await api.getCommands(groupId);\n // Not sure how to log this\n // This loop and the info query in refreshValues() each iterate over all groups,\n // so they make up the first and second half of this CC's interview progress.\n node.reportInterviewProgress(groupId, 2 * associationGroupCount);\n }\n // Finally query each group for its information\n await this.refreshValues(ctx, {\n onProgress: (completed) => node.reportInterviewProgress(associationGroupCount + completed, 2 * associationGroupCount),\n });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Association Group Information\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n // Query the information for each group (this is the only thing that could be dynamic)\n const associationGroupCount = AssociationGroupInfoCC\n .getAssociationGroupCountCached(ctx, endpoint);\n const hasDynamicInfo = this.getValue<boolean>(ctx, AssociationGroupInfoCCValues.hasDynamicInfo);\n for (let groupId = 1; groupId <= associationGroupCount; groupId++) {\n // Then its information\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Association group #${groupId}: Querying info...`,\n direction: \"outbound\",\n });\n const info = await api.getGroupInfo(groupId, !!hasDynamicInfo);\n if (info) {\n const logMessage = `Received info for association group #${groupId}:\ninfo is dynamic: ${info.hasDynamicInfo}\nprofile: ${getEnumMemberName(AssociationGroupInfoProfile, info.profile)}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n options?.onProgress?.(groupId, associationGroupCount);\n }\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCNameReportOptions {\n groupId: number;\n name: string;\n}\n@CCCommand(AssociationGroupInfoCommand.NameReport)\nexport class AssociationGroupInfoCCNameReport extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCNameReportOptions>) {\n super(options);\n this.groupId = options.groupId;\n this.name = options.name;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCNameReport {\n validatePayload(raw.payload.length >= 2);\n const groupId = raw.payload[0];\n const nameLength = raw.payload[1];\n // CC:0059.01.02.11.001: The Name Length field MUST be in the range 0..42\n validatePayload(nameLength <= 42);\n validatePayload(raw.payload.length >= 2 + nameLength);\n // The specs don't allow 0-terminated string, but some devices use them\n // So we need to cut them off\n const name = cpp2js(raw.payload.subarray(2, 2 + nameLength).toString(\"utf8\"));\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n name,\n });\n }\n public readonly groupId: number;\n public readonly name: string;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const valueDB = this.getValueDB(ctx);\n valueDB.setValue(AssociationGroupInfoCCValues.groupName(this.groupId).endpoint(this.endpointIndex), this.name);\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.groupId, this.name.length],\n Bytes.from(this.name, \"utf8\"),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"group id\": this.groupId,\n name: this.name,\n },\n };\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCNameGetOptions {\n groupId: number;\n}\n@CCCommand(AssociationGroupInfoCommand.NameGet)\n@expectedCCResponse(AssociationGroupInfoCCNameReport)\nexport class AssociationGroupInfoCCNameGet extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCNameGetOptions>) {\n super(options);\n this.groupId = options.groupId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCNameGet {\n validatePayload(raw.payload.length >= 1);\n const groupId = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n });\n }\n public groupId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.groupId]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"group id\": this.groupId },\n };\n }\n}\nexport interface AssociationGroupInfo {\n groupId: number;\n mode: number;\n profile: number;\n eventCode: number;\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCInfoReportOptions {\n isListMode: boolean;\n hasDynamicInfo: boolean;\n groups: AssociationGroupInfo[];\n}\n@CCCommand(AssociationGroupInfoCommand.InfoReport)\n@ccValueProperty(\"hasDynamicInfo\", AssociationGroupInfoCCValues.hasDynamicInfo)\nexport class AssociationGroupInfoCCInfoReport extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCInfoReportOptions>) {\n super(options);\n this.isListMode = options.isListMode;\n this.hasDynamicInfo = options.hasDynamicInfo;\n this.groups = options.groups;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCInfoReport {\n validatePayload(raw.payload.length >= 1);\n const isListMode = !!(raw.payload[0] & 128);\n const hasDynamicInfo = !!(raw.payload[0] & 64);\n const groupCount = raw.payload[0] & 63;\n // each group requires 7 bytes of payload\n validatePayload(raw.payload.length >= 1 + groupCount * 7);\n const groups: AssociationGroupInfo[] = [];\n for (let i = 0; i < groupCount; i++) {\n const offset = 1 + i * 7;\n // Parse the payload\n const groupBytes = raw.payload.subarray(offset, offset + 7);\n const groupId = groupBytes[0];\n const mode = 0; // groupBytes[1];\n const profile = groupBytes.readUInt16BE(2);\n const eventCode = 0; // groupBytes.readUInt16BE(5);\n groups.push({ groupId, mode, profile, eventCode });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n isListMode,\n hasDynamicInfo,\n groups,\n });\n }\n public readonly isListMode: boolean;\n public readonly hasDynamicInfo: boolean;\n public readonly groups: readonly AssociationGroupInfo[];\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n for (const group of this.groups) {\n const { groupId, mode, profile, eventCode } = group;\n this.setValue(ctx, AssociationGroupInfoCCValues.groupInfo(groupId), {\n mode,\n profile,\n eventCode,\n });\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(1 + this.groups.length * 7, 0);\n this.payload[0] = (this.isListMode ? 128 : 0)\n | (this.hasDynamicInfo ? 64 : 0)\n | (this.groups.length & 63);\n for (let i = 0; i < this.groups.length; i++) {\n const offset = 1 + i * 7;\n this.payload[offset] = this.groups[i].groupId;\n this.payload.writeUInt16BE(this.groups[i].profile, offset + 2);\n // The remaining bytes are zero\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"is list mode\": this.isListMode,\n \"has dynamic info\": this.hasDynamicInfo,\n groups: this.groups\n .map((g) => `\n\u00B7 Group #${g.groupId}\n mode: ${g.mode}\n profile: ${g.profile}\n event code: ${g.eventCode}`)\n .join(\"\"),\n },\n };\n }\n}\n// @publicAPI\nexport type AssociationGroupInfoCCInfoGetOptions = {\n refreshCache: boolean;\n} & ({\n listMode: boolean;\n} | {\n groupId: number;\n});\n@CCCommand(AssociationGroupInfoCommand.InfoGet)\n@expectedCCResponse(AssociationGroupInfoCCInfoReport)\nexport class AssociationGroupInfoCCInfoGet extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCInfoGetOptions>) {\n super(options);\n this.refreshCache = options.refreshCache;\n if (\"listMode\" in options)\n this.listMode = options.listMode;\n if (\"groupId\" in options)\n this.groupId = options.groupId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCInfoGet {\n validatePayload(raw.payload.length >= 2);\n const optionByte = raw.payload[0];\n const refreshCache = !!(optionByte & 128);\n const listMode: boolean | undefined = !!(optionByte & 64);\n let groupId: number | undefined;\n if (!listMode) {\n groupId = raw.payload[1];\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n refreshCache,\n listMode,\n groupId,\n });\n }\n public refreshCache: boolean;\n public listMode?: boolean;\n public groupId?: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const isListMode = this.listMode === true;\n const optionByte = (this.refreshCache ? 128 : 0)\n | (isListMode ? 64 : 0);\n this.payload = Bytes.from([\n optionByte,\n isListMode ? 0 : this.groupId!,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.groupId != undefined) {\n message[\"group id\"] = this.groupId;\n }\n if (this.listMode != undefined) {\n message[\"list mode\"] = this.listMode;\n }\n message[\"refresh cache\"] = this.refreshCache;\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCCommandListReportOptions {\n groupId: number;\n commands: ReadonlyMap<CommandClasses, readonly number[]>;\n}\n@CCCommand(AssociationGroupInfoCommand.CommandListReport)\n@ccValueProperty(\"commands\", AssociationGroupInfoCCValues.commands, (self) => [self.groupId])\nexport class AssociationGroupInfoCCCommandListReport extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCCommandListReportOptions>) {\n super(options);\n this.groupId = options.groupId;\n this.commands = options.commands;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCCommandListReport {\n validatePayload(raw.payload.length >= 2);\n const groupId = raw.payload[0];\n const listLength = raw.payload[1];\n validatePayload(raw.payload.length >= 2 + listLength);\n const listBytes = raw.payload.subarray(2, 2 + listLength);\n // Parse all CC ids and commands\n let offset = 0;\n const commands = new Map<CommandClasses, number[]>();\n while (offset < listLength) {\n const { ccId, bytesRead } = parseCCId(listBytes, offset);\n const command = listBytes[offset + bytesRead];\n if (!commands.has(ccId))\n commands.set(ccId, []);\n commands.get(ccId)!.push(command);\n offset += bytesRead + 1;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n commands,\n });\n }\n public readonly groupId: number;\n public readonly commands: ReadonlyMap<CommandClasses, readonly number[]>;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // To make it easier to encode possible extended CCs, we first\n // allocate as much space as we may need, then trim it again\n this.payload = new Bytes(2 + this.commands.size * 3);\n this.payload[0] = this.groupId;\n let offset = 2;\n for (const [ccId, commands] of this.commands) {\n for (const command of commands) {\n offset += encodeCCId(ccId, this.payload, offset);\n this.payload[offset] = command;\n offset++;\n }\n }\n this.payload[1] = offset - 2; // list length\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"group id\": this.groupId,\n commands: [...this.commands]\n .map(([cc, cmds]) => {\n return `\\n\u00B7 ${getCCName(cc)}: ${cmds\n .map((cmd) => num2hex(cmd))\n .join(\", \")}`;\n })\n .join(\"\"),\n },\n };\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCCommandListGetOptions {\n allowCache: boolean;\n groupId: number;\n}\n@CCCommand(AssociationGroupInfoCommand.CommandListGet)\n@expectedCCResponse(AssociationGroupInfoCCCommandListReport)\nexport class AssociationGroupInfoCCCommandListGet extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCCommandListGetOptions>) {\n super(options);\n this.allowCache = options.allowCache;\n this.groupId = options.groupId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCCommandListGet {\n validatePayload(raw.payload.length >= 2);\n const allowCache = !!(raw.payload[0] & 128);\n const groupId = raw.payload[1];\n return new this({\n nodeId: ctx.sourceNodeId,\n allowCache,\n groupId,\n });\n }\n public allowCache: boolean;\n public groupId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.allowCache ? 128 : 0,\n this.groupId,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"group id\": this.groupId,\n \"allow cache\": this.allowCache,\n },\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./AssociationGroupInfoCC._validateArgs.js\";\nconst { validateArgs_AssociationGroupInfoCCAPI_getGroupName, validateArgs_AssociationGroupInfoCCAPI_reportGroupName, validateArgs_AssociationGroupInfoCCAPI_getGroupInfo, validateArgs_AssociationGroupInfoCCAPI_reportGroupInfo, validateArgs_AssociationGroupInfoCCAPI_getCommands, validateArgs_AssociationGroupInfoCCAPI_reportCommands } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupportsCC, type WithAddress, encodeCCId, getCCName, logDict, logList, logText, parseCCId, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, cpp2js, getEnumMemberName, num2hex } from \"@zwave-js/shared\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { AssociationGroupInfoCommand, AssociationGroupInfoProfile, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { AssociationCC } from \"./AssociationCC.js\";\nimport { MultiChannelAssociationCC } from \"./MultiChannelAssociationCC.js\";\nimport { AssociationGroupInfoCCValues } from \"./_CCValues.generated.js\";\nexport { AssociationGroupInfoCCValues };\n// @noSetValueAPI This CC only has get-type commands\n@API(CommandClasses[\"Association Group Information\"])\nexport class AssociationGroupInfoCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: AssociationGroupInfoCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case AssociationGroupInfoCommand.NameGet:\n case AssociationGroupInfoCommand.NameReport:\n case AssociationGroupInfoCommand.InfoGet:\n case AssociationGroupInfoCommand.InfoReport:\n case AssociationGroupInfoCommand.CommandListGet:\n case AssociationGroupInfoCommand.CommandListReport:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n @validateArgs_AssociationGroupInfoCCAPI_getGroupName()\n public async getGroupName(groupId: number): Promise<MaybeNotKnown<string>> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.NameGet);\n const cc = new AssociationGroupInfoCCNameGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n });\n const response = await this.host.sendCommand<AssociationGroupInfoCCNameReport>(cc, this.commandOptions);\n if (response)\n return response.name;\n }\n @validateArgs_AssociationGroupInfoCCAPI_reportGroupName()\n public async reportGroupName(groupId: number, name: string): Promise<void> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.NameReport);\n const cc = new AssociationGroupInfoCCNameReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n name,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_AssociationGroupInfoCCAPI_getGroupInfo()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getGroupInfo(groupId: number, refreshCache: boolean = false) {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.InfoGet);\n const cc = new AssociationGroupInfoCCInfoGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n refreshCache,\n });\n const response = await this.host.sendCommand<AssociationGroupInfoCCInfoReport>(cc, this.commandOptions);\n // SDS13782 says: If List Mode is set to 0, the Group Count field MUST be set to 1.\n // But that's not always the case. Apparently some endpoints return 0 groups\n // although they support AGI CC\n if (response && response.groups.length > 0) {\n const { groupId: _, ...info } = response.groups[0];\n return {\n hasDynamicInfo: response.hasDynamicInfo,\n ...info,\n };\n }\n }\n @validateArgs_AssociationGroupInfoCCAPI_reportGroupInfo()\n public async reportGroupInfo(options: AssociationGroupInfoCCInfoReportOptions): Promise<void> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.InfoReport);\n const cc = new AssociationGroupInfoCCInfoReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_AssociationGroupInfoCCAPI_getCommands()\n public async getCommands(groupId: number, allowCache: boolean = true): Promise<MaybeNotKnown<AssociationGroupInfoCCCommandListReport[\"commands\"]>> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.CommandListGet);\n const cc = new AssociationGroupInfoCCCommandListGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n allowCache,\n });\n const response = await this.host.sendCommand<AssociationGroupInfoCCCommandListReport>(cc, this.commandOptions);\n if (response)\n return response.commands;\n }\n @validateArgs_AssociationGroupInfoCCAPI_reportCommands()\n public async reportCommands(groupId: number, commands: ReadonlyMap<CommandClasses, readonly number[]>): Promise<void> {\n this.assertSupportsCommand(AssociationGroupInfoCommand, AssociationGroupInfoCommand.CommandListReport);\n const cc = new AssociationGroupInfoCCCommandListReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n commands,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Association Group Information\"])\n@implementedVersion(3)\n@ccValues(AssociationGroupInfoCCValues)\nexport class AssociationGroupInfoCC extends CommandClass {\n declare ccCommand: AssociationGroupInfoCommand;\n public determineRequiredCCInterviews(): readonly CommandClasses[] {\n // AssociationCC must be interviewed after Z-Wave+ if that is supported\n return [\n ...super.determineRequiredCCInterviews(),\n CommandClasses.Association,\n CommandClasses[\"Multi Channel Association\"],\n ];\n }\n /** Returns the name of an association group */\n public static getGroupNameCached(ctx: GetValueDB, endpoint: EndpointId, groupId: number): MaybeNotKnown<string> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(AssociationGroupInfoCCValues.groupName(groupId).endpoint(endpoint.index));\n }\n /** Returns the association profile for an association group */\n public static getGroupProfileCached(ctx: GetValueDB, endpoint: EndpointId, groupId: number): MaybeNotKnown<AssociationGroupInfoProfile> {\n return ctx.getValueDB(endpoint.nodeId).getValue<{\n profile: AssociationGroupInfoProfile;\n }>(AssociationGroupInfoCCValues.groupInfo(groupId).endpoint(endpoint.index))\n ?.profile;\n }\n /** Returns the dictionary of all commands issued by the given association group */\n public static getIssuedCommandsCached(ctx: GetValueDB, endpoint: EndpointId, groupId: number): MaybeNotKnown<ReadonlyMap<CommandClasses, readonly number[]>> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(AssociationGroupInfoCCValues.commands(groupId).endpoint(endpoint.index));\n }\n public static findGroupsForIssuedCommand(ctx: GetValueDB, endpoint: EndpointId & SupportsCC, ccId: CommandClasses, command: number): number[] {\n const ret: number[] = [];\n const associationGroupCount = this.getAssociationGroupCountCached(ctx, endpoint);\n for (let groupId = 1; groupId <= associationGroupCount; groupId++) {\n // Scan the issued commands of all groups if there's a match\n const issuedCommands = this.getIssuedCommandsCached(ctx, endpoint, groupId);\n if (!issuedCommands)\n continue;\n if (issuedCommands.has(ccId)\n && issuedCommands.get(ccId)!.includes(command)) {\n ret.push(groupId);\n continue;\n }\n }\n return ret;\n }\n private static getAssociationGroupCountCached(ctx: GetValueDB, endpoint: EndpointId & SupportsCC): number {\n // The association group count is either determined by the\n // Association CC or the Multi Channel Association CC\n return (\n // First query the Multi Channel Association CC\n // And fall back to 0\n (endpoint.supportsCC(CommandClasses[\"Multi Channel Association\"])\n && MultiChannelAssociationCC.getGroupCountCached(ctx, endpoint))\n // Then the Association CC\n || (endpoint.supportsCC(CommandClasses.Association)\n && AssociationCC.getGroupCountCached(ctx, endpoint))\n || 0);\n }\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Association Group Information\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n const associationGroupCount = AssociationGroupInfoCC\n .getAssociationGroupCountCached(ctx, endpoint);\n for (let groupId = 1; groupId <= associationGroupCount; groupId++) {\n // First get the group's name\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Association group #${groupId}: Querying name...`,\n direction: \"outbound\",\n });\n const name = await api.getGroupName(groupId);\n if (name) {\n const logMessage = `Association group #${groupId} has name \"${name}\"`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n // Then the command list\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Association group #${groupId}: Querying command list...`,\n direction: \"outbound\",\n });\n await api.getCommands(groupId);\n // Not sure how to log this\n // This loop and the info query in refreshValues() each iterate over all groups,\n // so they make up the first and second half of this CC's interview progress.\n node.reportInterviewProgress(groupId, 2 * associationGroupCount);\n }\n // Finally query each group for its information\n await this.refreshValues(ctx, {\n tag: \"interview\",\n onProgress: (completed) => node.reportInterviewProgress(associationGroupCount + completed, 2 * associationGroupCount),\n });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Association Group Information\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query the information for each group (this is the only thing that could be dynamic)\n const associationGroupCount = AssociationGroupInfoCC\n .getAssociationGroupCountCached(ctx, endpoint);\n const hasDynamicInfo = this.getValue<boolean>(ctx, AssociationGroupInfoCCValues.hasDynamicInfo);\n for (let groupId = 1; groupId <= associationGroupCount; groupId++) {\n // Then its information\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Association group #${groupId}: Querying info...`,\n direction: \"outbound\",\n });\n const info = await api.getGroupInfo(groupId, !!hasDynamicInfo);\n if (info) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logText(`Received info for association group #${groupId}:`, {\n nested: logDict({\n \"info is dynamic\": info.hasDynamicInfo,\n profile: getEnumMemberName(AssociationGroupInfoProfile, info.profile),\n }),\n }),\n direction: \"inbound\",\n });\n }\n options?.onProgress?.(groupId, associationGroupCount);\n }\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCNameReportOptions {\n groupId: number;\n name: string;\n}\n@CCCommand(AssociationGroupInfoCommand.NameReport)\nexport class AssociationGroupInfoCCNameReport extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCNameReportOptions>) {\n super(options);\n this.groupId = options.groupId;\n this.name = options.name;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCNameReport {\n validatePayload(raw.payload.length >= 2);\n const groupId = raw.payload[0];\n const nameLength = raw.payload[1];\n // CC:0059.01.02.11.001: The Name Length field MUST be in the range 0..42\n validatePayload(nameLength <= 42);\n validatePayload(raw.payload.length >= 2 + nameLength);\n // The specs don't allow 0-terminated string, but some devices use them\n // So we need to cut them off\n const name = cpp2js(raw.payload.subarray(2, 2 + nameLength).toString(\"utf8\"));\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n name,\n });\n }\n public readonly groupId: number;\n public readonly name: string;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const valueDB = this.getValueDB(ctx);\n valueDB.setValue(AssociationGroupInfoCCValues.groupName(this.groupId).endpoint(this.endpointIndex), this.name);\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.groupId, this.name.length],\n Bytes.from(this.name, \"utf8\"),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"group id\": this.groupId,\n name: this.name,\n },\n };\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCNameGetOptions {\n groupId: number;\n}\n@CCCommand(AssociationGroupInfoCommand.NameGet)\n@expectedCCResponse(AssociationGroupInfoCCNameReport)\nexport class AssociationGroupInfoCCNameGet extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCNameGetOptions>) {\n super(options);\n this.groupId = options.groupId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCNameGet {\n validatePayload(raw.payload.length >= 1);\n const groupId = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n });\n }\n public groupId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.groupId]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"group id\": this.groupId },\n };\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfo {\n groupId: number;\n mode: number;\n profile: number;\n eventCode: number;\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCInfoReportOptions {\n isListMode: boolean;\n hasDynamicInfo: boolean;\n groups: AssociationGroupInfo[];\n}\n@CCCommand(AssociationGroupInfoCommand.InfoReport)\n@ccValueProperty(\"hasDynamicInfo\", AssociationGroupInfoCCValues.hasDynamicInfo)\nexport class AssociationGroupInfoCCInfoReport extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCInfoReportOptions>) {\n super(options);\n this.isListMode = options.isListMode;\n this.hasDynamicInfo = options.hasDynamicInfo;\n this.groups = options.groups;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCInfoReport {\n validatePayload(raw.payload.length >= 1);\n const isListMode = !!(raw.payload[0] & 128);\n const hasDynamicInfo = !!(raw.payload[0] & 64);\n const groupCount = raw.payload[0] & 63;\n // each group requires 7 bytes of payload\n validatePayload(raw.payload.length >= 1 + groupCount * 7);\n const groups: AssociationGroupInfo[] = [];\n for (let i = 0; i < groupCount; i++) {\n const offset = 1 + i * 7;\n // Parse the payload\n const groupBytes = raw.payload.subarray(offset, offset + 7);\n const groupId = groupBytes[0];\n const mode = 0; // groupBytes[1];\n const profile = groupBytes.readUInt16BE(2);\n const eventCode = 0; // groupBytes.readUInt16BE(5);\n groups.push({ groupId, mode, profile, eventCode });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n isListMode,\n hasDynamicInfo,\n groups,\n });\n }\n public readonly isListMode: boolean;\n public readonly hasDynamicInfo: boolean;\n public readonly groups: readonly AssociationGroupInfo[];\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n for (const group of this.groups) {\n const { groupId, mode, profile, eventCode } = group;\n this.setValue(ctx, AssociationGroupInfoCCValues.groupInfo(groupId), {\n mode,\n profile,\n eventCode,\n });\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.alloc(1 + this.groups.length * 7, 0);\n this.payload[0] = (this.isListMode ? 128 : 0)\n | (this.hasDynamicInfo ? 64 : 0)\n | (this.groups.length & 63);\n for (let i = 0; i < this.groups.length; i++) {\n const offset = 1 + i * 7;\n this.payload[offset] = this.groups[i].groupId;\n this.payload.writeUInt16BE(this.groups[i].profile, offset + 2);\n // The remaining bytes are zero\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: logDict({\n \"is list mode\": this.isListMode,\n \"has dynamic info\": this.hasDynamicInfo,\n }, this.groups.map((g) => logText(`Group #${g.groupId}`, {\n nested: logDict({\n mode: g.mode,\n profile: g.profile,\n \"event code\": g.eventCode,\n }),\n }))),\n };\n }\n}\n// @publicAPI\nexport type AssociationGroupInfoCCInfoGetOptions = {\n refreshCache: boolean;\n} & ({\n listMode: boolean;\n} | {\n groupId: number;\n});\n@CCCommand(AssociationGroupInfoCommand.InfoGet)\n@expectedCCResponse(AssociationGroupInfoCCInfoReport)\nexport class AssociationGroupInfoCCInfoGet extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCInfoGetOptions>) {\n super(options);\n this.refreshCache = options.refreshCache;\n if (\"listMode\" in options)\n this.listMode = options.listMode;\n if (\"groupId\" in options)\n this.groupId = options.groupId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCInfoGet {\n validatePayload(raw.payload.length >= 2);\n const optionByte = raw.payload[0];\n const refreshCache = !!(optionByte & 128);\n const listMode: boolean | undefined = !!(optionByte & 64);\n let groupId: number | undefined;\n if (!listMode) {\n groupId = raw.payload[1];\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n refreshCache,\n listMode,\n groupId,\n });\n }\n public refreshCache: boolean;\n public listMode?: boolean;\n public groupId?: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const isListMode = this.listMode === true;\n const optionByte = (this.refreshCache ? 128 : 0)\n | (isListMode ? 64 : 0);\n this.payload = Bytes.from([\n optionByte,\n isListMode ? 0 : this.groupId!,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.groupId != undefined) {\n message[\"group id\"] = this.groupId;\n }\n if (this.listMode != undefined) {\n message[\"list mode\"] = this.listMode;\n }\n message[\"refresh cache\"] = this.refreshCache;\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCCommandListReportOptions {\n groupId: number;\n commands: ReadonlyMap<CommandClasses, readonly number[]>;\n}\n@CCCommand(AssociationGroupInfoCommand.CommandListReport)\n@ccValueProperty(\"commands\", AssociationGroupInfoCCValues.commands, (self) => [self.groupId])\nexport class AssociationGroupInfoCCCommandListReport extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCCommandListReportOptions>) {\n super(options);\n this.groupId = options.groupId;\n this.commands = options.commands;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCCommandListReport {\n validatePayload(raw.payload.length >= 2);\n const groupId = raw.payload[0];\n const listLength = raw.payload[1];\n validatePayload(raw.payload.length >= 2 + listLength);\n const listBytes = raw.payload.subarray(2, 2 + listLength);\n // Parse all CC ids and commands\n let offset = 0;\n const commands = new Map<CommandClasses, number[]>();\n while (offset < listLength) {\n const { ccId, bytesRead } = parseCCId(listBytes, offset);\n const command = listBytes[offset + bytesRead];\n if (!commands.has(ccId))\n commands.set(ccId, []);\n commands.get(ccId)!.push(command);\n offset += bytesRead + 1;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n commands,\n });\n }\n public readonly groupId: number;\n public readonly commands: ReadonlyMap<CommandClasses, readonly number[]>;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // To make it easier to encode possible extended CCs, we first\n // allocate as much space as we may need, then trim it again\n this.payload = new Bytes(2 + this.commands.size * 3);\n this.payload[0] = this.groupId;\n let offset = 2;\n for (const [ccId, commands] of this.commands) {\n for (const command of commands) {\n offset += encodeCCId(ccId, this.payload, offset);\n this.payload[offset] = command;\n offset++;\n }\n }\n this.payload[1] = offset - 2; // list length\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"group id\": this.groupId,\n commands: logList([...this.commands].map(([cc, cmds]) => `${getCCName(cc)}: ${cmds\n .map((cmd) => num2hex(cmd))\n .join(\", \")}`)),\n },\n };\n }\n}\n// @publicAPI\nexport interface AssociationGroupInfoCCCommandListGetOptions {\n allowCache: boolean;\n groupId: number;\n}\n@CCCommand(AssociationGroupInfoCommand.CommandListGet)\n@expectedCCResponse(AssociationGroupInfoCCCommandListReport)\nexport class AssociationGroupInfoCCCommandListGet extends AssociationGroupInfoCC {\n public constructor(options: WithAddress<AssociationGroupInfoCCCommandListGetOptions>) {\n super(options);\n this.allowCache = options.allowCache;\n this.groupId = options.groupId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationGroupInfoCCCommandListGet {\n validatePayload(raw.payload.length >= 2);\n const allowCache = !!(raw.payload[0] & 128);\n const groupId = raw.payload[1];\n return new this({\n nodeId: ctx.sourceNodeId,\n allowCache,\n groupId,\n });\n }\n public allowCache: boolean;\n public groupId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.allowCache ? 128 : 0,\n this.groupId,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"group id\": this.groupId,\n \"allow cache\": this.allowCache,\n },\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["AssociationGroupInfoCC"]
7
7
  }
@@ -270,7 +270,8 @@ let BarrierOperatorCC = (() => {
270
270
  const node = this.getNode(ctx);
271
271
  const endpoint = this.getEndpoint(ctx);
272
272
  const api = import_API.CCAPI.create(import_core.CommandClasses["Barrier Operator"], ctx, endpoint).withOptions({
273
- priority: import_core.MessagePriority.NodeQuery
273
+ priority: import_core.MessagePriority.NodeQuery,
274
+ tag: "interview"
274
275
  });
275
276
  ctx.logNode(node.id, {
276
277
  endpoint: this.endpointIndex,
@@ -285,8 +286,9 @@ let BarrierOperatorCC = (() => {
285
286
  const resp = await api.getSignalingCapabilities();
286
287
  if (resp) {
287
288
  ctx.logNode(node.id, {
288
- message: `Received supported subsystem types: ${resp.map((t) => `
289
- \xB7 ${(0, import_shared.getEnumMemberName)(import_Types.SubsystemType, t)}`).join("")}`,
289
+ message: (0, import_core.logText)("Received supported subsystem types:", {
290
+ nested: (0, import_core.logList)(resp.map((t) => (0, import_shared.getEnumMemberName)(import_Types.SubsystemType, t)))
291
+ }),
290
292
  direction: "inbound"
291
293
  });
292
294
  for (const subsystemType of resp) {
@@ -299,14 +301,15 @@ let BarrierOperatorCC = (() => {
299
301
  await api.setEventSignaling(subsystemType, import_Types.SubsystemState.On).catch(import_shared.noop);
300
302
  }
301
303
  }
302
- await this.refreshValues(ctx);
304
+ await this.refreshValues(ctx, { tag: "interview" });
303
305
  this.setInterviewComplete(ctx, true);
304
306
  }
305
307
  async refreshValues(ctx, options) {
306
308
  const node = this.getNode(ctx);
307
309
  const endpoint = this.getEndpoint(ctx);
308
310
  const api = import_API.CCAPI.create(import_core.CommandClasses["Barrier Operator"], ctx, endpoint).withOptions({
309
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
311
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
312
+ tag: options?.tag
310
313
  });
311
314
  const supportedSubsystems = this.getValue(ctx, import_CCValues_generated.BarrierOperatorCCValues.supportedSubsystemTypes) ?? [];
312
315
  for (const subsystemType of supportedSubsystems) {
@@ -503,8 +506,7 @@ let BarrierOperatorCCSignalingCapabilitiesReport = (() => {
503
506
  return {
504
507
  ...super.toLogEntry(ctx),
505
508
  message: {
506
- "supported types": this.supportedSubsystemTypes.map((t) => `
507
- \xB7 ${(0, import_shared.getEnumMemberName)(import_Types.SubsystemType, t)}`).join("")
509
+ "supported types": (0, import_core.logList)(this.supportedSubsystemTypes.map((t) => (0, import_shared.getEnumMemberName)(import_Types.SubsystemType, t)))
508
510
  }
509
511
  };
510
512
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/BarrierOperatorCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./BarrierOperatorCC._validateArgs.js\";\nconst { validateArgs_BarrierOperatorCCAPI_set, validateArgs_BarrierOperatorCCAPI_getSignalingCapabilities, validateArgs_BarrierOperatorCCAPI_getEventSignaling, validateArgs_BarrierOperatorCCAPI_setEventSignaling } = __validateArgs;\nimport { CommandClasses, type GetNode, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, MessagePriority, type NodeId, type SupervisionResult, type SupportsCC, UNKNOWN_STATE, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, enumValuesToMetadataStates, maybeUnknownToString, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, isEnumMember, noop, pick, } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, throwMissingPropertyKey, throwUnsupportedProperty, throwUnsupportedPropertyKey, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { BarrierOperatorCommand, BarrierState, SubsystemState, SubsystemType, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ApplicationStatusCCRejectedRequest } from \"./ApplicationStatusCC.js\";\nimport { BarrierOperatorCCValues } from \"./_CCValues.generated.js\";\nexport { BarrierOperatorCCValues };\n@API(CommandClasses[\"Barrier Operator\"])\nexport class BarrierOperatorCCAPI extends CCAPI {\n public supportsCommand(cmd: BarrierOperatorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case BarrierOperatorCommand.Get:\n case BarrierOperatorCommand.Set:\n case BarrierOperatorCommand.SignalingCapabilitiesGet:\n case BarrierOperatorCommand.EventSignalingGet:\n case BarrierOperatorCommand.EventSignalingSet:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.Get);\n const cc = new BarrierOperatorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"currentState\", \"position\"]);\n }\n }\n @validateArgs_BarrierOperatorCCAPI_set()\n public async set(targetState: BarrierState.Open | BarrierState.Closed): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.Set);\n const cc = new BarrierOperatorCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n targetState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_BarrierOperatorCCAPI_getSignalingCapabilities()\n public async getSignalingCapabilities(): Promise<MaybeNotKnown<readonly SubsystemType[]>> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.SignalingCapabilitiesGet);\n const cc = new BarrierOperatorCCSignalingCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCSignalingCapabilitiesReport>(cc, this.commandOptions);\n return response?.supportedSubsystemTypes;\n }\n @validateArgs_BarrierOperatorCCAPI_getEventSignaling()\n public async getEventSignaling(subsystemType: SubsystemType): Promise<MaybeNotKnown<SubsystemState>> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.EventSignalingGet);\n const cc = new BarrierOperatorCCEventSignalingGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n subsystemType,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCEventSignalingReport>(cc, this.commandOptions);\n return response?.subsystemState;\n }\n @validateArgs_BarrierOperatorCCAPI_setEventSignaling()\n public async setEventSignaling(subsystemType: SubsystemType, subsystemState: SubsystemState): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.EventSignalingSet);\n const cc = new BarrierOperatorCCEventSignalingSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n subsystemType,\n subsystemState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: BarrierOperatorCCAPI, { property, propertyKey }, value) {\n if (property === \"targetState\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n const targetValue = value === BarrierState.Closed\n ? BarrierState.Closed\n : BarrierState.Open;\n return this.set(targetValue);\n }\n else if (property === \"signalingState\") {\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n else if (typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.setEventSignaling(propertyKey, value);\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property, propertyKey }, value, _options) => {\n const valueId = {\n commandClass: this.ccId,\n property,\n propertyKey,\n };\n if (BarrierOperatorCCValues.targetState.is(valueId)) {\n const currentStateValueId = BarrierOperatorCCValues.currentState\n .endpoint(this.endpoint.index);\n const targetValue = value === BarrierState.Closed\n ? BarrierState.Closed\n : BarrierState.Open;\n return {\n // This is the target value for a split target/current state pair.\n isSplitStateTargetValue: true,\n // Barrier Operator commands may take some time to be executed.\n // Therefore we try to supervise the command execution and delay the\n // optimistic update until the final result is received.\n supervisionDelayedUpdates: true,\n supervisionOnSuccess: () => {\n this.tryGetValueDB()?.setValue(currentStateValueId, targetValue);\n },\n supervisionOnFailure: async () => {\n // The command failed, so now we don't know the status - refresh the current value\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n },\n optimisticallyUpdateRelatedValues: (supervisedAndSuccessful) => {\n // For barriers, do not update the current value unless we actually know the command was successful\n if (!supervisedAndSuccessful)\n return;\n if (this.isSinglecast()) {\n this.tryGetValueDB()?.setValue(currentStateValueId, targetValue);\n }\n else if (this.isMulticast()) {\n // Figure out which nodes were affected by this command\n const affectedNodes = this.endpoint.node.physicalNodes\n .filter((node) => node\n .getEndpoint(this.endpoint.index)\n ?.supportsCC(this.ccId));\n // and optimistically update the currentValue\n for (const node of affectedNodes) {\n this.host\n .tryGetValueDB(node.id)\n ?.setValue(currentStateValueId, targetValue);\n }\n }\n },\n verifyChanges: () => {\n if (this.isSinglecast()) {\n // We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n this.schedulePoll(currentStateValueId, targetValue);\n }\n else {\n // For multicasts, do not schedule a refresh - this could cause a LOT of traffic\n }\n },\n };\n }\n else if (BarrierOperatorCCValues.signalingState.is(valueId)) {\n const subsystemType = propertyKey as SubsystemType;\n const signalingStateValueId = BarrierOperatorCCValues\n .signalingState(subsystemType).endpoint(this.endpoint.index);\n return {\n verifyChanges: () => {\n if (this.isSinglecast()) {\n this.schedulePoll(signalingStateValueId, value, {\n // Signaling state changes are fast\n transition: \"fast\",\n });\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: BarrierOperatorCCAPI, { property, propertyKey }) {\n switch (property) {\n case \"currentState\":\n case \"position\":\n return (await this.get())?.[property];\n case \"signalingState\":\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n else if (typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n return this.getEventSignaling(propertyKey);\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n}\n@commandClass(CommandClasses[\"Barrier Operator\"])\n@implementedVersion(1)\n@ccValues(BarrierOperatorCCValues)\nexport class BarrierOperatorCC extends CommandClass {\n declare ccCommand: BarrierOperatorCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Barrier Operator\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // Create targetState value if it does not exist\n this.ensureMetadata(ctx, BarrierOperatorCCValues.targetState);\n ctx.logNode(node.id, {\n message: \"Querying signaling capabilities...\",\n direction: \"outbound\",\n });\n const resp = await api.getSignalingCapabilities();\n if (resp) {\n ctx.logNode(node.id, {\n message: `Received supported subsystem types: ${resp\n .map((t) => `\\n\u00B7 ${getEnumMemberName(SubsystemType, t)}`)\n .join(\"\")}`,\n direction: \"inbound\",\n });\n // Enable all supported subsystems\n for (const subsystemType of resp) {\n // Some devices report invalid subsystem types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(SubsystemType, subsystemType))\n continue;\n ctx.logNode(node.id, {\n message: `Enabling subsystem ${getEnumMemberName(SubsystemType, subsystemType)}...`,\n direction: \"outbound\",\n });\n await api.setEventSignaling(subsystemType, SubsystemState.On)\n .catch(noop);\n }\n }\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Barrier Operator\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n const supportedSubsystems: SubsystemType[] = this.getValue(ctx, BarrierOperatorCCValues.supportedSubsystemTypes) ?? [];\n for (const subsystemType of supportedSubsystems) {\n // Some devices report invalid subsystem types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(SubsystemType, subsystemType))\n continue;\n ctx.logNode(node.id, {\n message: `Querying event signaling state for subsystem ${getEnumMemberName(SubsystemType, subsystemType)}...`,\n direction: \"outbound\",\n });\n const state = await api.getEventSignaling(subsystemType);\n if (state != undefined) {\n ctx.logNode(node.id, {\n message: `Subsystem ${getEnumMemberName(SubsystemType, subsystemType)} has state ${getEnumMemberName(SubsystemState, state)}`,\n direction: \"inbound\",\n });\n }\n }\n ctx.logNode(node.id, {\n message: \"querying current barrier state...\",\n direction: \"outbound\",\n });\n await api.get();\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCSetOptions {\n targetState: BarrierState.Open | BarrierState.Closed;\n}\nfunction getCCResponseForBarrierOperatorCCSet(ctx: GetNode<NodeId & SupportsCC>, sent: BarrierOperatorCCSet) {\n // CC:0066.01.01.11.009: If the requested operation is prohibited by\n // the specific device class [...], the device MUST notify the requester\n // by issuing an Application Rejected Request Command\n if (sent.isSinglecast()\n && !sent.isEncapsulatedWith(CommandClasses.Supervision)\n && ctx.getNode(sent.nodeId)?.supportsCC(CommandClasses[\"Application Status\"])) {\n return ApplicationStatusCCRejectedRequest;\n }\n}\n@CCCommand(BarrierOperatorCommand.Set)\n@expectedCCResponse(getCCResponseForBarrierOperatorCCSet)\n@useSupervision()\nexport class BarrierOperatorCCSet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCSetOptions>) {\n super(options);\n this.targetState = options.targetState;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCSet {\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public targetState: BarrierState.Open | BarrierState.Closed;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.targetState]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"target state\": this.targetState },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCReportOptions {\n position: MaybeUnknown<number>;\n currentState: MaybeUnknown<BarrierState>;\n}\n@CCCommand(BarrierOperatorCommand.Report)\n@ccValueProperty(\"currentState\", BarrierOperatorCCValues.currentState)\n@ccValueProperty(\"position\", BarrierOperatorCCValues.position)\nexport class BarrierOperatorCCReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.position = options.position;\n this.currentState = options.currentState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCReport {\n validatePayload(raw.payload.length >= 1);\n // The payload byte encodes information about the state and position in a single value\n const payloadValue = raw.payload[0];\n let position: MaybeUnknown<number>;\n if (payloadValue <= 99) {\n // known position\n position = payloadValue;\n }\n else if (payloadValue === 255) {\n // known position, fully opened\n position = 100;\n }\n else {\n // unknown position\n position = UNKNOWN_STATE;\n }\n let currentState: MaybeUnknown<BarrierState>;\n if (payloadValue === BarrierState.Closed\n || payloadValue >= BarrierState.Closing) {\n // predefined states\n currentState = payloadValue;\n }\n else if (payloadValue > 0 && payloadValue <= 99) {\n // stopped at exact position\n currentState = BarrierState.Stopped;\n }\n else {\n // invalid value, assume unknown\n currentState = UNKNOWN_STATE;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n position,\n currentState,\n });\n }\n public readonly currentState: MaybeUnknown<BarrierState>;\n public readonly position: MaybeUnknown<number>;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"barrier position\": maybeUnknownToString(this.position),\n \"barrier state\": this.currentState != undefined\n ? getEnumMemberName(BarrierState, this.currentState)\n : \"unknown\",\n },\n };\n }\n}\n@CCCommand(BarrierOperatorCommand.Get)\n@expectedCCResponse(BarrierOperatorCCReport)\nexport class BarrierOperatorCCGet extends BarrierOperatorCC {\n}\n// @publicAPI\nexport interface BarrierOperatorCCSignalingCapabilitiesReportOptions {\n supportedSubsystemTypes: SubsystemType[];\n}\n@CCCommand(BarrierOperatorCommand.SignalingCapabilitiesReport)\n@ccValueProperty(\"supportedSubsystemTypes\", BarrierOperatorCCValues.supportedSubsystemTypes)\nexport class BarrierOperatorCCSignalingCapabilitiesReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCSignalingCapabilitiesReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedSubsystemTypes = options.supportedSubsystemTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCSignalingCapabilitiesReport {\n const supportedSubsystemTypes: SubsystemType[] = parseBitMask(raw.payload, SubsystemType.Audible);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedSubsystemTypes,\n });\n }\n public readonly supportedSubsystemTypes: readonly SubsystemType[];\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported types\": this.supportedSubsystemTypes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(SubsystemType, t)}`)\n .join(\"\"),\n },\n };\n }\n}\n@CCCommand(BarrierOperatorCommand.SignalingCapabilitiesGet)\n@expectedCCResponse(BarrierOperatorCCSignalingCapabilitiesReport)\nexport class BarrierOperatorCCSignalingCapabilitiesGet extends BarrierOperatorCC {\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingSetOptions {\n subsystemType: SubsystemType;\n subsystemState: SubsystemState;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingSet)\n@useSupervision()\nexport class BarrierOperatorCCEventSignalingSet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingSetOptions>) {\n super(options);\n this.subsystemType = options.subsystemType;\n this.subsystemState = options.subsystemState;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCEventSignalingSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCEventSignalingSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public subsystemType: SubsystemType;\n public subsystemState: SubsystemState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.subsystemType, this.subsystemState]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n \"subsystem state\": getEnumMemberName(SubsystemState, this.subsystemState),\n },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingReportOptions {\n subsystemType: SubsystemType;\n subsystemState: SubsystemState;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingReport)\nexport class BarrierOperatorCCEventSignalingReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.subsystemType = options.subsystemType;\n this.subsystemState = options.subsystemState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCEventSignalingReport {\n validatePayload(raw.payload.length >= 2);\n const subsystemType: SubsystemType = raw.payload[0];\n const subsystemState: SubsystemState = raw.payload[1];\n validatePayload(isEnumMember(SubsystemType, subsystemType), isEnumMember(SubsystemState, subsystemState));\n return new this({\n nodeId: ctx.sourceNodeId,\n subsystemType,\n subsystemState,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const signalingStateValue = BarrierOperatorCCValues.signalingState(this.subsystemType);\n this.ensureMetadata(ctx, signalingStateValue);\n this.setValue(ctx, signalingStateValue, this.subsystemState);\n return true;\n }\n public readonly subsystemType: SubsystemType;\n public readonly subsystemState: SubsystemState;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n \"subsystem state\": getEnumMemberName(SubsystemState, this.subsystemState),\n },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingGetOptions {\n subsystemType: SubsystemType;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingGet)\n@expectedCCResponse(BarrierOperatorCCEventSignalingReport)\nexport class BarrierOperatorCCEventSignalingGet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingGetOptions>) {\n super(options);\n this.subsystemType = options.subsystemType;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCEventSignalingGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCEventSignalingGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public subsystemType: SubsystemType;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.subsystemType]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n },\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./BarrierOperatorCC._validateArgs.js\";\nconst { validateArgs_BarrierOperatorCCAPI_set, validateArgs_BarrierOperatorCCAPI_getSignalingCapabilities, validateArgs_BarrierOperatorCCAPI_getEventSignaling, validateArgs_BarrierOperatorCCAPI_setEventSignaling } = __validateArgs;\nimport { CommandClasses, type GetNode, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, MessagePriority, type NodeId, type SupervisionResult, type SupportsCC, UNKNOWN_STATE, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, enumValuesToMetadataStates, logList, logText, maybeUnknownToString, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, isEnumMember, noop, pick, } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, throwMissingPropertyKey, throwUnsupportedProperty, throwUnsupportedPropertyKey, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { BarrierOperatorCommand, BarrierState, SubsystemState, SubsystemType, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ApplicationStatusCCRejectedRequest } from \"./ApplicationStatusCC.js\";\nimport { BarrierOperatorCCValues } from \"./_CCValues.generated.js\";\nexport { BarrierOperatorCCValues };\n@API(CommandClasses[\"Barrier Operator\"])\nexport class BarrierOperatorCCAPI extends CCAPI {\n public supportsCommand(cmd: BarrierOperatorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case BarrierOperatorCommand.Get:\n case BarrierOperatorCommand.Set:\n case BarrierOperatorCommand.SignalingCapabilitiesGet:\n case BarrierOperatorCommand.EventSignalingGet:\n case BarrierOperatorCommand.EventSignalingSet:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.Get);\n const cc = new BarrierOperatorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"currentState\", \"position\"]);\n }\n }\n @validateArgs_BarrierOperatorCCAPI_set()\n public async set(targetState: BarrierState.Open | BarrierState.Closed): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.Set);\n const cc = new BarrierOperatorCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n targetState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_BarrierOperatorCCAPI_getSignalingCapabilities()\n public async getSignalingCapabilities(): Promise<MaybeNotKnown<readonly SubsystemType[]>> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.SignalingCapabilitiesGet);\n const cc = new BarrierOperatorCCSignalingCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCSignalingCapabilitiesReport>(cc, this.commandOptions);\n return response?.supportedSubsystemTypes;\n }\n @validateArgs_BarrierOperatorCCAPI_getEventSignaling()\n public async getEventSignaling(subsystemType: SubsystemType): Promise<MaybeNotKnown<SubsystemState>> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.EventSignalingGet);\n const cc = new BarrierOperatorCCEventSignalingGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n subsystemType,\n });\n const response = await this.host.sendCommand<BarrierOperatorCCEventSignalingReport>(cc, this.commandOptions);\n return response?.subsystemState;\n }\n @validateArgs_BarrierOperatorCCAPI_setEventSignaling()\n public async setEventSignaling(subsystemType: SubsystemType, subsystemState: SubsystemState): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BarrierOperatorCommand, BarrierOperatorCommand.EventSignalingSet);\n const cc = new BarrierOperatorCCEventSignalingSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n subsystemType,\n subsystemState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: BarrierOperatorCCAPI, { property, propertyKey }, value) {\n if (property === \"targetState\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n const targetValue = value === BarrierState.Closed\n ? BarrierState.Closed\n : BarrierState.Open;\n return this.set(targetValue);\n }\n else if (property === \"signalingState\") {\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n else if (typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.setEventSignaling(propertyKey, value);\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property, propertyKey }, value, _options) => {\n const valueId = {\n commandClass: this.ccId,\n property,\n propertyKey,\n };\n if (BarrierOperatorCCValues.targetState.is(valueId)) {\n const currentStateValueId = BarrierOperatorCCValues.currentState\n .endpoint(this.endpoint.index);\n const targetValue = value === BarrierState.Closed\n ? BarrierState.Closed\n : BarrierState.Open;\n return {\n // This is the target value for a split target/current state pair.\n isSplitStateTargetValue: true,\n // Barrier Operator commands may take some time to be executed.\n // Therefore we try to supervise the command execution and delay the\n // optimistic update until the final result is received.\n supervisionDelayedUpdates: true,\n supervisionOnSuccess: () => {\n this.tryGetValueDB()?.setValue(currentStateValueId, targetValue);\n },\n supervisionOnFailure: async () => {\n // The command failed, so now we don't know the status - refresh the current value\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n },\n optimisticallyUpdateRelatedValues: (supervisedAndSuccessful) => {\n // For barriers, do not update the current value unless we actually know the command was successful\n if (!supervisedAndSuccessful)\n return;\n if (this.isSinglecast()) {\n this.tryGetValueDB()?.setValue(currentStateValueId, targetValue);\n }\n else if (this.isMulticast()) {\n // Figure out which nodes were affected by this command\n const affectedNodes = this.endpoint.node.physicalNodes\n .filter((node) => node\n .getEndpoint(this.endpoint.index)\n ?.supportsCC(this.ccId));\n // and optimistically update the currentValue\n for (const node of affectedNodes) {\n this.host\n .tryGetValueDB(node.id)\n ?.setValue(currentStateValueId, targetValue);\n }\n }\n },\n verifyChanges: () => {\n if (this.isSinglecast()) {\n // We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n this.schedulePoll(currentStateValueId, targetValue);\n }\n else {\n // For multicasts, do not schedule a refresh - this could cause a LOT of traffic\n }\n },\n };\n }\n else if (BarrierOperatorCCValues.signalingState.is(valueId)) {\n const subsystemType = propertyKey as SubsystemType;\n const signalingStateValueId = BarrierOperatorCCValues\n .signalingState(subsystemType).endpoint(this.endpoint.index);\n return {\n verifyChanges: () => {\n if (this.isSinglecast()) {\n this.schedulePoll(signalingStateValueId, value, {\n // Signaling state changes are fast\n transition: \"fast\",\n });\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: BarrierOperatorCCAPI, { property, propertyKey }) {\n switch (property) {\n case \"currentState\":\n case \"position\":\n return (await this.get())?.[property];\n case \"signalingState\":\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n else if (typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n return this.getEventSignaling(propertyKey);\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n}\n@commandClass(CommandClasses[\"Barrier Operator\"])\n@implementedVersion(1)\n@ccValues(BarrierOperatorCCValues)\nexport class BarrierOperatorCC extends CommandClass {\n declare ccCommand: BarrierOperatorCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Barrier Operator\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // Create targetState value if it does not exist\n this.ensureMetadata(ctx, BarrierOperatorCCValues.targetState);\n ctx.logNode(node.id, {\n message: \"Querying signaling capabilities...\",\n direction: \"outbound\",\n });\n const resp = await api.getSignalingCapabilities();\n if (resp) {\n ctx.logNode(node.id, {\n message: logText(\"Received supported subsystem types:\", {\n nested: logList(resp.map((t) => getEnumMemberName(SubsystemType, t))),\n }),\n direction: \"inbound\",\n });\n // Enable all supported subsystems\n for (const subsystemType of resp) {\n // Some devices report invalid subsystem types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(SubsystemType, subsystemType))\n continue;\n ctx.logNode(node.id, {\n message: `Enabling subsystem ${getEnumMemberName(SubsystemType, subsystemType)}...`,\n direction: \"outbound\",\n });\n await api.setEventSignaling(subsystemType, SubsystemState.On)\n .catch(noop);\n }\n }\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Barrier Operator\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n const supportedSubsystems: SubsystemType[] = this.getValue(ctx, BarrierOperatorCCValues.supportedSubsystemTypes) ?? [];\n for (const subsystemType of supportedSubsystems) {\n // Some devices report invalid subsystem types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(SubsystemType, subsystemType))\n continue;\n ctx.logNode(node.id, {\n message: `Querying event signaling state for subsystem ${getEnumMemberName(SubsystemType, subsystemType)}...`,\n direction: \"outbound\",\n });\n const state = await api.getEventSignaling(subsystemType);\n if (state != undefined) {\n ctx.logNode(node.id, {\n message: `Subsystem ${getEnumMemberName(SubsystemType, subsystemType)} has state ${getEnumMemberName(SubsystemState, state)}`,\n direction: \"inbound\",\n });\n }\n }\n ctx.logNode(node.id, {\n message: \"querying current barrier state...\",\n direction: \"outbound\",\n });\n await api.get();\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCSetOptions {\n targetState: BarrierState.Open | BarrierState.Closed;\n}\nfunction getCCResponseForBarrierOperatorCCSet(ctx: GetNode<NodeId & SupportsCC>, sent: BarrierOperatorCCSet) {\n // CC:0066.01.01.11.009: If the requested operation is prohibited by\n // the specific device class [...], the device MUST notify the requester\n // by issuing an Application Rejected Request Command\n if (sent.isSinglecast()\n && !sent.isEncapsulatedWith(CommandClasses.Supervision)\n && ctx.getNode(sent.nodeId)?.supportsCC(CommandClasses[\"Application Status\"])) {\n return ApplicationStatusCCRejectedRequest;\n }\n}\n@CCCommand(BarrierOperatorCommand.Set)\n@expectedCCResponse(getCCResponseForBarrierOperatorCCSet)\n@useSupervision()\nexport class BarrierOperatorCCSet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCSetOptions>) {\n super(options);\n this.targetState = options.targetState;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCSet {\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public targetState: BarrierState.Open | BarrierState.Closed;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.targetState]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"target state\": this.targetState },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCReportOptions {\n position: MaybeUnknown<number>;\n currentState: MaybeUnknown<BarrierState>;\n}\n@CCCommand(BarrierOperatorCommand.Report)\n@ccValueProperty(\"currentState\", BarrierOperatorCCValues.currentState)\n@ccValueProperty(\"position\", BarrierOperatorCCValues.position)\nexport class BarrierOperatorCCReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.position = options.position;\n this.currentState = options.currentState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCReport {\n validatePayload(raw.payload.length >= 1);\n // The payload byte encodes information about the state and position in a single value\n const payloadValue = raw.payload[0];\n let position: MaybeUnknown<number>;\n if (payloadValue <= 99) {\n // known position\n position = payloadValue;\n }\n else if (payloadValue === 255) {\n // known position, fully opened\n position = 100;\n }\n else {\n // unknown position\n position = UNKNOWN_STATE;\n }\n let currentState: MaybeUnknown<BarrierState>;\n if (payloadValue === BarrierState.Closed\n || payloadValue >= BarrierState.Closing) {\n // predefined states\n currentState = payloadValue;\n }\n else if (payloadValue > 0 && payloadValue <= 99) {\n // stopped at exact position\n currentState = BarrierState.Stopped;\n }\n else {\n // invalid value, assume unknown\n currentState = UNKNOWN_STATE;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n position,\n currentState,\n });\n }\n public readonly currentState: MaybeUnknown<BarrierState>;\n public readonly position: MaybeUnknown<number>;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"barrier position\": maybeUnknownToString(this.position),\n \"barrier state\": this.currentState != undefined\n ? getEnumMemberName(BarrierState, this.currentState)\n : \"unknown\",\n },\n };\n }\n}\n@CCCommand(BarrierOperatorCommand.Get)\n@expectedCCResponse(BarrierOperatorCCReport)\nexport class BarrierOperatorCCGet extends BarrierOperatorCC {\n}\n// @publicAPI\nexport interface BarrierOperatorCCSignalingCapabilitiesReportOptions {\n supportedSubsystemTypes: SubsystemType[];\n}\n@CCCommand(BarrierOperatorCommand.SignalingCapabilitiesReport)\n@ccValueProperty(\"supportedSubsystemTypes\", BarrierOperatorCCValues.supportedSubsystemTypes)\nexport class BarrierOperatorCCSignalingCapabilitiesReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCSignalingCapabilitiesReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedSubsystemTypes = options.supportedSubsystemTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCSignalingCapabilitiesReport {\n const supportedSubsystemTypes: SubsystemType[] = parseBitMask(raw.payload, SubsystemType.Audible);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedSubsystemTypes,\n });\n }\n public readonly supportedSubsystemTypes: readonly SubsystemType[];\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported types\": logList(this.supportedSubsystemTypes.map((t) => getEnumMemberName(SubsystemType, t))),\n },\n };\n }\n}\n@CCCommand(BarrierOperatorCommand.SignalingCapabilitiesGet)\n@expectedCCResponse(BarrierOperatorCCSignalingCapabilitiesReport)\nexport class BarrierOperatorCCSignalingCapabilitiesGet extends BarrierOperatorCC {\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingSetOptions {\n subsystemType: SubsystemType;\n subsystemState: SubsystemState;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingSet)\n@useSupervision()\nexport class BarrierOperatorCCEventSignalingSet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingSetOptions>) {\n super(options);\n this.subsystemType = options.subsystemType;\n this.subsystemState = options.subsystemState;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCEventSignalingSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCEventSignalingSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public subsystemType: SubsystemType;\n public subsystemState: SubsystemState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.subsystemType, this.subsystemState]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n \"subsystem state\": getEnumMemberName(SubsystemState, this.subsystemState),\n },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingReportOptions {\n subsystemType: SubsystemType;\n subsystemState: SubsystemState;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingReport)\nexport class BarrierOperatorCCEventSignalingReport extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.subsystemType = options.subsystemType;\n this.subsystemState = options.subsystemState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BarrierOperatorCCEventSignalingReport {\n validatePayload(raw.payload.length >= 2);\n const subsystemType: SubsystemType = raw.payload[0];\n const subsystemState: SubsystemState = raw.payload[1];\n validatePayload(isEnumMember(SubsystemType, subsystemType), isEnumMember(SubsystemState, subsystemState));\n return new this({\n nodeId: ctx.sourceNodeId,\n subsystemType,\n subsystemState,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const signalingStateValue = BarrierOperatorCCValues.signalingState(this.subsystemType);\n this.ensureMetadata(ctx, signalingStateValue);\n this.setValue(ctx, signalingStateValue, this.subsystemState);\n return true;\n }\n public readonly subsystemType: SubsystemType;\n public readonly subsystemState: SubsystemState;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n \"subsystem state\": getEnumMemberName(SubsystemState, this.subsystemState),\n },\n };\n }\n}\n// @publicAPI\nexport interface BarrierOperatorCCEventSignalingGetOptions {\n subsystemType: SubsystemType;\n}\n@CCCommand(BarrierOperatorCommand.EventSignalingGet)\n@expectedCCResponse(BarrierOperatorCCEventSignalingReport)\nexport class BarrierOperatorCCEventSignalingGet extends BarrierOperatorCC {\n public constructor(options: WithAddress<BarrierOperatorCCEventSignalingGetOptions>) {\n super(options);\n this.subsystemType = options.subsystemType;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): BarrierOperatorCCEventSignalingGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new BarrierOperatorCCEventSignalingGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public subsystemType: SubsystemType;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.subsystemType]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"subsystem type\": getEnumMemberName(SubsystemType, this.subsystemType),\n },\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -194,7 +194,7 @@ let BasicCC = (() => {
194
194
  direction: "none"
195
195
  });
196
196
  endpoint.addCC(import_core.CommandClasses.Basic, { isSupported: true });
197
- await this.refreshValues(ctx);
197
+ await this.refreshValues(ctx, { tag: "interview" });
198
198
  if (this.getValue(ctx, import_CCValues_generated.BasicCCValues.currentValue) == void 0) {
199
199
  ctx.logNode(node.id, {
200
200
  endpoint: this.endpointIndex,
@@ -211,7 +211,8 @@ let BasicCC = (() => {
211
211
  const node = this.getNode(ctx);
212
212
  const endpoint = this.getEndpoint(ctx);
213
213
  const api = import_API.CCAPI.create(import_core.CommandClasses.Basic, ctx, endpoint).withOptions({
214
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
214
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
215
+ tag: options?.tag
215
216
  });
216
217
  ctx.logNode(node.id, {
217
218
  endpoint: this.endpointIndex,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/BasicCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./BasicCC._validateArgs.js\";\nconst { validateArgs_BasicCCAPI_set } = __validateArgs;\nimport type { GetDeviceConfig } from \"@zwave-js/config\";\nimport { CommandClasses, type ControlsCC, Duration, type EndpointId, type GetEndpoint, type GetNode, type GetSupportedCCVersion, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type NodeId, type SupervisionResult, type SupportsCC, type ValueID, ValueMetadata, type WithAddress, maybeUnknownToString, parseMaybeNumber, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, getEffectiveCCVersion, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { BasicCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { BasicCCValues } from \"./_CCValues.generated.js\";\nexport { BasicCCValues };\n@API(CommandClasses.Basic)\nexport class BasicCCAPI extends CCAPI {\n public supportsCommand(cmd: BasicCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case BasicCommand.Get:\n return this.isSinglecast();\n case BasicCommand.Set:\n return true;\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: BasicCCAPI, { property }, value) {\n // Enable restoring the previous non-zero value\n if (property === \"restorePrevious\") {\n property = \"targetValue\";\n value = 255;\n }\n if (property !== \"targetValue\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.set(value);\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property }, value, _options) => {\n // Enable restoring the previous non-zero value\n if (property === \"restorePrevious\") {\n property = \"targetValue\";\n value = 255;\n }\n if (property === \"targetValue\") {\n const currentValueValueId = BasicCCValues.currentValue.endpoint(this.endpoint.index);\n return {\n // This is the target value for a split target/current state pair.\n isSplitStateTargetValue: true,\n optimisticallyUpdateRelatedValues: (_supervisedAndSuccessful) => {\n // Only update currentValue for valid target values\n if (typeof value === \"number\"\n && value >= 0\n && value <= 99) {\n if (this.isSinglecast()) {\n this.tryGetValueDB()?.setValue(currentValueValueId, value);\n }\n else if (this.isMulticast()) {\n // Figure out which nodes were affected by this command\n const affectedNodes = this.endpoint.node\n .physicalNodes.filter((node) => node\n .getEndpoint(this.endpoint.index)\n ?.supportsCC(this.ccId));\n // and optimistically update the currentValue\n for (const node of affectedNodes) {\n this.host\n .tryGetValueDB(node.id)\n ?.setValue(currentValueValueId, value);\n }\n }\n }\n },\n forceVerifyChanges: () => {\n // If we don't know the actual value, we need to verify the change, regardless of the supervision result\n return value === 255;\n },\n verifyChanges: () => {\n if (this.isSinglecast()\n // We generally don't want to poll for multicasts because of how much traffic it can cause\n // However, when setting the value 255 (ON), we don't know the actual state\n || (this.isMulticast() && value === 255)) {\n // We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n (this as this).schedulePoll(currentValueValueId, value === 255 ? undefined : value);\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: BasicCCAPI, { property }) {\n switch (property) {\n case \"currentValue\":\n case \"targetValue\":\n case \"duration\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(BasicCommand, BasicCommand.Get);\n const cc = new BasicCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BasicCCReport>(cc, this.commandOptions);\n if (response) {\n this.tryGetValueDB()?.setValue(BasicCCValues.currentValue.endpoint(this.endpoint.index), response.currentValue);\n return pick(response, [\"currentValue\", \"targetValue\", \"duration\"]);\n }\n }\n @validateArgs_BasicCCAPI_set()\n public async set(targetValue: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BasicCommand, BasicCommand.Set);\n const cc = new BasicCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n targetValue,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses.Basic)\n@implementedVersion(2) // Update tests in CommandClass.test.ts when changing this\n@ccValues(BasicCCValues)\nexport class BasicCC extends CommandClass {\n declare ccCommand: BasicCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // Assume that the endpoint supports Basic CC, so the values get persisted correctly.\n endpoint.addCC(CommandClasses.Basic, { isSupported: true });\n // try to query the current state\n await this.refreshValues(ctx);\n // Remove Basic CC support again when there was no response\n if (this.getValue(ctx, BasicCCValues.currentValue) == undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"No response to Basic Get command, assuming Basic CC is unsupported...\",\n });\n // SDS14223: A controlling node MUST conclude that the Basic Command Class is not supported by a node (or\n // endpoint) if no Basic Report is returned.\n endpoint.addCC(CommandClasses.Basic, { isSupported: false });\n if (!endpoint.controlsCC(CommandClasses.Basic)) {\n endpoint.removeCC(CommandClasses.Basic);\n }\n }\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Basic, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n // try to query the current state\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying Basic CC state...\",\n direction: \"outbound\",\n });\n const basicResponse = await api.get();\n if (basicResponse) {\n let logMessage = `received Basic CC state:\ncurrent value: ${basicResponse.currentValue}`;\n if (basicResponse.targetValue != undefined) {\n logMessage += `\ntarget value: ${basicResponse.targetValue}\nremaining duration: ${basicResponse.duration?.toString() ?? \"undefined\"}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n public override getDefinedValueIDs(ctx: GetValueDB & GetSupportedCCVersion & GetDeviceConfig & GetNode<NodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>>): ValueID[] {\n const ret: ValueID[] = [];\n const endpoint = this.getEndpoint(ctx)!;\n const compat = ctx.getDeviceConfig?.(endpoint.nodeId)?.compat;\n if (compat?.mapBasicSet === \"event\") {\n // Add the compat event value if it should be exposed\n ret.push(BasicCCValues.compatEvent.endpoint(endpoint.index));\n }\n if (endpoint.supportsCC(this.ccId)) {\n // Defer to the base implementation if Basic CC is supported.\n // This implies that no other actuator CC is supported.\n ret.push(...super.getDefinedValueIDs(ctx));\n }\n else if (endpoint.controlsCC(CommandClasses.Basic)) {\n // During the interview, we mark Basic CC as controlled only if we want to expose currentValue\n ret.push(BasicCCValues.currentValue.endpoint(endpoint.index));\n }\n return ret;\n }\n}\n// @publicAPI\nexport interface BasicCCSetOptions {\n targetValue: number;\n}\n@CCCommand(BasicCommand.Set)\n@useSupervision()\nexport class BasicCCSet extends BasicCC {\n public constructor(options: WithAddress<BasicCCSetOptions>) {\n super(options);\n this.targetValue = options.targetValue;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BasicCCSet {\n validatePayload(raw.payload.length >= 1);\n const targetValue = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n targetValue,\n });\n }\n public targetValue: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.targetValue]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"target value\": this.targetValue },\n };\n }\n}\n// @publicAPI\nexport interface BasicCCReportOptions {\n currentValue?: MaybeUnknown<number>;\n targetValue?: MaybeUnknown<number>;\n duration?: Duration;\n}\n@CCCommand(BasicCommand.Report)\n@ccValueProperty(\"currentValue\", BasicCCValues.currentValue)\n@ccValueProperty(\"targetValue\", BasicCCValues.targetValue)\n@ccValueProperty(\"duration\", BasicCCValues.duration)\nexport class BasicCCReport extends BasicCC {\n // @noCCValues See comment in the constructor\n public constructor(options: WithAddress<BasicCCReportOptions>) {\n super(options);\n this.currentValue = options.currentValue;\n this.targetValue = options.targetValue;\n this.duration = options.duration;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BasicCCReport {\n validatePayload(raw.payload.length >= 1);\n const currentValue: MaybeUnknown<number> | undefined = \n // 0xff is a legacy value for 100% (99)\n raw.payload[0] === 0xff\n ? 99\n : parseMaybeNumber(raw.payload[0]);\n validatePayload(currentValue !== undefined);\n let targetValue: MaybeUnknown<number> | undefined;\n let duration: Duration | undefined;\n if (raw.payload.length >= 3) {\n targetValue = parseMaybeNumber(raw.payload[1]);\n duration = Duration.parseReport(raw.payload[2]);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n currentValue,\n targetValue,\n duration,\n });\n }\n public currentValue: MaybeUnknown<number> | undefined;\n public readonly targetValue: MaybeUnknown<number> | undefined;\n public readonly duration: Duration | undefined;\n public persistValues(ctx: PersistValuesContext): boolean {\n // Basic CC Report persists its values itself, since there are some\n // specific rules when which value may be persisted.\n // These rules are essentially encoded in the getDefinedValueIDs overload,\n // so we simply reuse that here.\n // Figure out which values may be persisted.\n const definedValueIDs = this.getDefinedValueIDs(ctx);\n const shouldPersistCurrentValue = definedValueIDs.some((vid) => BasicCCValues.currentValue.is(vid));\n const shouldPersistTargetValue = definedValueIDs.some((vid) => BasicCCValues.targetValue.is(vid));\n const shouldPersistDuration = definedValueIDs.some((vid) => BasicCCValues.duration.is(vid));\n if (this.currentValue !== undefined && shouldPersistCurrentValue) {\n this.setValue(ctx, BasicCCValues.currentValue, this.currentValue);\n }\n if (this.targetValue !== undefined && shouldPersistTargetValue) {\n this.setValue(ctx, BasicCCValues.targetValue, this.targetValue);\n }\n if (this.duration !== undefined && shouldPersistDuration) {\n this.setValue(ctx, BasicCCValues.duration, this.duration);\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.currentValue ?? 0xfe,\n this.targetValue ?? 0xfe,\n (this.duration ?? Duration.unknown()).serializeReport(),\n ]);\n const ccVersion = getEffectiveCCVersion(ctx, this);\n if (ccVersion < 2 && ctx.getDeviceConfig?.(this.nodeId as number)?.compat?.encodeCCsUsingTargetVersion) {\n // When forcing CC version 1, only send the current value\n this.payload = this.payload.subarray(0, 1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"current value\": maybeUnknownToString(this.currentValue),\n };\n if (this.targetValue !== undefined) {\n message[\"target value\"] = maybeUnknownToString(this.targetValue);\n }\n if (this.duration != undefined) {\n message.duration = this.duration.toString();\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(BasicCommand.Get)\n@expectedCCResponse(BasicCCReport)\nexport class BasicCCGet extends BasicCC {\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qBAAgC;AAGhC,kBAA6Z;AAC7Z,oBAA4B;AAC5B,iBAAkN;AAClN,0BAAyK;AACzK,oCAAiI;AAEjI,mBAA6B;AAE7B,gCAA8B;AAV9B,MAAM,EAAE,4BAA2B,IAAK;IAa3B,cAAU,MAAA;8BADtB,mCAAI,2BAAe,KAAK,CAAC;;;;oBACM;;;kCAAA,YAAK;WAAA;;;;;;;;yBAqGhC,4BAA2B,CAAE;AAC9B,qCAAA,MAAA,MAAA,iBAAA,EAAA,MAAA,UAAA,MAAA,OAAA,QAAA,OAAA,SAAA,OAAA,QAAA,EAAA,KAAA,gCAAA,SAAA,KAAA,QAAA,KAAA,gCAAA,IAAa,KAAb,OAAgB,GAAA,UAAA,UAAA,GAAA,MAAA,0BAAA;AAtGpB,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACF,gBAAgB,KAAiB;AACpC,cAAQ,KAAK;QACT,KAAK,0BAAa;AACd,iBAAO,KAAK,aAAY;QAC5B,KAAK,0BAAa;AACd,iBAAO;MACf;AACA,aAAO,MAAM,gBAAgB,GAAG;IACpC;IACA,KAAwB,oBAAS,IAAC;AAC9B,aAAO,eAAkC,EAAE,SAAQ,GAAI,OAAK;AAExD,YAAI,aAAa,mBAAmB;AAChC,qBAAW;AACX,kBAAQ;QACZ;AACA,YAAI,aAAa,eAAe;AAC5B,mDAAyB,KAAK,MAAM,QAAQ;QAChD;AACA,YAAI,OAAO,UAAU,UAAU;AAC3B,8CAAoB,KAAK,MAAM,UAAU,UAAU,OAAO,KAAK;QACnE;AACA,eAAO,KAAK,IAAI,KAAK;MACzB;IACJ;IACU,CAAC,0BAAe,SA1BjB,gCAAA,MAAA,0BAAA,GA0ByD,CAAC,EAAE,SAAQ,GAAI,OAAO,aAAY;AAEhG,UAAI,aAAa,mBAAmB;AAChC,mBAAW;AACX,gBAAQ;MACZ;AACA,UAAI,aAAa,eAAe;AAC5B,cAAM,sBAAsB,wCAAc,aAAa,SAAS,KAAK,SAAS,KAAK;AACnF,eAAO;;UAEH,yBAAyB;UACzB,mCAAmC,wBAAC,6BAA4B;AAE5D,gBAAI,OAAO,UAAU,YACd,SAAS,KACT,SAAS,IAAI;AAChB,kBAAI,KAAK,aAAY,GAAI;AACrB,qBAAK,cAAa,GAAI,SAAS,qBAAqB,KAAK;cAC7D,WACS,KAAK,YAAW,GAAI;AAEzB,sBAAM,gBAAgB,KAAK,SAAS,KAC/B,cAAc,OAAO,CAAC,SAAS,KAC/B,YAAY,KAAK,SAAS,KAAK,GAC9B,WAAW,KAAK,IAAI,CAAC;AAE3B,2BAAW,QAAQ,eAAe;AAC9B,uBAAK,KACA,cAAc,KAAK,EAAE,GACpB,SAAS,qBAAqB,KAAK;gBAC7C;cACJ;YACJ;UACJ,GAtBmC;UAuBnC,oBAAoB,6BAAK;AAErB,mBAAO,UAAU;UACrB,GAHoB;UAIpB,eAAe,6BAAK;AAChB,gBAAI,KAAK,aAAY,KAGb,KAAK,YAAW,KAAM,UAAU,KAAM;AAEzC,mBAAc,aAAa,qBAAqB,UAAU,MAAM,SAAY,KAAK;YACtF;UACJ,GARe;;MAUvB;IACJ;IACA,KAAe,qBAAU,IAAC;AACtB,aAAO,eAAkC,EAAE,SAAQ,GAAE;AACjD,gBAAQ,UAAU;UACd,KAAK;UACL,KAAK;UACL,KAAK;AACD,oBAAQ,MAAM,KAAK,IAAG,KAAM,QAAQ;UACxC;AACI,qDAAyB,KAAK,MAAM,QAAQ;QACpD;MACJ;IACJ;;IAEO,MAAM,MAAG;AACZ,WAAK,sBAAsB,2BAAc,0BAAa,GAAG;AACzD,YAAM,KAAK,IAAI,WAAW;QACtB,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;OAChC;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAA2B,IAAI,KAAK,cAAc;AACnF,UAAI,UAAU;AACV,aAAK,cAAa,GAAI,SAAS,wCAAc,aAAa,SAAS,KAAK,SAAS,KAAK,GAAG,SAAS,YAAY;AAC9G,mBAAO,oBAAK,UAAU,CAAC,gBAAgB,eAAe,UAAU,CAAC;MACrE;IACJ;IAEO,MAAM,IAAI,aAAmB;AAChC,WAAK,sBAAsB,2BAAc,0BAAa,GAAG;AACzD,YAAM,KAAK,IAAI,WAAW;QACtB,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;QAC7B;OACH;AACD,aAAO,KAAK,KAAK,YAAY,IAAI,KAAK,cAAc;IACxD;;;;IAKS,WAAO,MAAA;8BAHnB,4CAAa,2BAAe,KAAK,OACjC,kDAAmB,CAAC,OACpB,wCAAS,uCAAa,CAAC;;;;oBACK;+BAAA,YAAY;WAAA;;;;;;;;AAAzC,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IAEF,MAAM,UAAU,KAAqB;AACxC,YAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,YAAM,WAAW,KAAK,YAAY,GAAG;AACrC,UAAI,QAAQ,KAAK,IAAI;QACjB,UAAU,KAAK;QACf,SAAS,gBAAgB,KAAK,MAAM;QACpC,WAAW;OACd;AAED,eAAS,MAAM,2BAAe,OAAO,EAAE,aAAa,KAAI,CAAE;AAE1D,YAAM,KAAK,cAAc,GAAG;AAE5B,UAAI,KAAK,SAAS,KAAK,wCAAc,YAAY,KAAK,QAAW;AAC7D,YAAI,QAAQ,KAAK,IAAI;UACjB,UAAU,KAAK;UACf,SAAS;SACZ;AAGD,iBAAS,MAAM,2BAAe,OAAO,EAAE,aAAa,MAAK,CAAE;AAC3D,YAAI,CAAC,SAAS,WAAW,2BAAe,KAAK,GAAG;AAC5C,mBAAS,SAAS,2BAAe,KAAK;QAC1C;MACJ;AAEA,WAAK,qBAAqB,KAAK,IAAI;IACvC;IACO,MAAM,cAAc,KAA2B,SAA8B;AAChF,YAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,YAAM,WAAW,KAAK,YAAY,GAAG;AACrC,YAAM,MAAM,iBAAM,OAAO,2BAAe,OAAO,KAAK,QAAQ,EAAE,YAAY;QACtE,UAAU,SAAS,YAAY,4BAAgB;OAClD;AAED,UAAI,QAAQ,KAAK,IAAI;QACjB,UAAU,KAAK;QACf,SAAS;QACT,WAAW;OACd;AACD,YAAM,gBAAgB,MAAM,IAAI,IAAG;AACnC,UAAI,eAAe;AACf,YAAI,aAAa;sBACP,cAAc,YAAY;AACpC,YAAI,cAAc,eAAe,QAAW;AACxC,wBAAc;sBACR,cAAc,WAAW;sBACzB,cAAc,UAAU,SAAQ,KAAM,WAAW;QAC3D;AACA,YAAI,QAAQ,KAAK,IAAI;UACjB,UAAU,KAAK;UACf,SAAS;UACT,WAAW;SACd;MACL;IACJ;IACgB,mBAAmB,KAA+H;AAC9J,YAAM,MAAiB,CAAA;AACvB,YAAM,WAAW,KAAK,YAAY,GAAG;AACrC,YAAM,SAAS,IAAI,kBAAkB,SAAS,MAAM,GAAG;AACvD,UAAI,QAAQ,gBAAgB,SAAS;AAEjC,YAAI,KAAK,wCAAc,YAAY,SAAS,SAAS,KAAK,CAAC;MAC/D;AACA,UAAI,SAAS,WAAW,KAAK,IAAI,GAAG;AAGhC,YAAI,KAAK,GAAG,MAAM,mBAAmB,GAAG,CAAC;MAC7C,WACS,SAAS,WAAW,2BAAe,KAAK,GAAG;AAEhD,YAAI,KAAK,wCAAc,aAAa,SAAS,SAAS,KAAK,CAAC;MAChE;AACA,aAAO;IACX;;;;IAQS,cAAU,MAAA;8BAFtB,yCAAU,0BAAa,GAAG,OAC1B,8CAAc,CAAE;;;;oBACe;kCAAA,YAAO;WAAA;;;;;;;;AAAvC,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACT,YAAmB,SAAuC;AACtD,YAAM,OAAO;AACb,WAAK,cAAc,QAAQ;IAC/B;IACO,OAAO,KAAK,KAAY,KAAqB;AAChD,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,cAAc,IAAI,QAAQ,CAAC;AACjC,aAAO,IAAI,KAAK;QACZ,QAAQ,IAAI;QACZ;OACH;IACL;IACO;IACA,UAAU,KAAsB;AACnC,WAAK,UAAU,oBAAM,KAAK,CAAC,KAAK,WAAW,CAAC;AAC5C,aAAO,MAAM,UAAU,GAAG;IAC9B;IACO,WAAW,KAAgB;AAC9B,aAAO;QACH,GAAG,MAAM,WAAW,GAAG;QACvB,SAAS,EAAE,gBAAgB,KAAK,YAAW;;IAEnD;;;;IAYS,iBAAa,MAAA;8BAJzB,yCAAU,0BAAa,MAAM,OAC7B,+CAAgB,gBAAgB,wCAAc,YAAY,OAC1D,+CAAgB,eAAe,wCAAc,WAAW,OACxD,+CAAgB,YAAY,wCAAc,QAAQ,CAAC;;;;oBACjB;qCAAA,YAAO;WAAA;;;;;;;;AAA1C,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;;IAET,YAAmB,SAA0C;AACzD,YAAM,OAAO;AACb,WAAK,eAAe,QAAQ;AAC5B,WAAK,cAAc,QAAQ;AAC3B,WAAK,WAAW,QAAQ;IAC5B;IACO,OAAO,KAAK,KAAY,KAAqB;AAChD,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM;;QAEN,IAAI,QAAQ,CAAC,MAAM,MACb,SACA,8BAAiB,IAAI,QAAQ,CAAC,CAAC;;AACrC,uCAAgB,iBAAiB,MAAS;AAC1C,UAAI;AACJ,UAAI;AACJ,UAAI,IAAI,QAAQ,UAAU,GAAG;AACzB,0BAAc,8BAAiB,IAAI,QAAQ,CAAC,CAAC;AAC7C,mBAAW,qBAAS,YAAY,IAAI,QAAQ,CAAC,CAAC;MAClD;AACA,aAAO,IAAI,KAAK;QACZ,QAAQ,IAAI;QACZ;QACA;QACA;OACH;IACL;IACO;IACS;IACA;IACT,cAAc,KAAyB;AAM1C,YAAM,kBAAkB,KAAK,mBAAmB,GAAG;AACnD,YAAM,4BAA4B,gBAAgB,KAAK,CAAC,QAAQ,wCAAc,aAAa,GAAG,GAAG,CAAC;AAClG,YAAM,2BAA2B,gBAAgB,KAAK,CAAC,QAAQ,wCAAc,YAAY,GAAG,GAAG,CAAC;AAChG,YAAM,wBAAwB,gBAAgB,KAAK,CAAC,QAAQ,wCAAc,SAAS,GAAG,GAAG,CAAC;AAC1F,UAAI,KAAK,iBAAiB,UAAa,2BAA2B;AAC9D,aAAK,SAAS,KAAK,wCAAc,cAAc,KAAK,YAAY;MACpE;AACA,UAAI,KAAK,gBAAgB,UAAa,0BAA0B;AAC5D,aAAK,SAAS,KAAK,wCAAc,aAAa,KAAK,WAAW;MAClE;AACA,UAAI,KAAK,aAAa,UAAa,uBAAuB;AACtD,aAAK,SAAS,KAAK,wCAAc,UAAU,KAAK,QAAQ;MAC5D;AACA,aAAO;IACX;IACO,UAAU,KAAsB;AACnC,WAAK,UAAU,oBAAM,KAAK;QACtB,KAAK,gBAAgB;QACrB,KAAK,eAAe;SACnB,KAAK,YAAY,qBAAS,QAAO,GAAI,gBAAe;OACxD;AACD,YAAM,gBAAY,2CAAsB,KAAK,IAAI;AACjD,UAAI,YAAY,KAAK,IAAI,kBAAkB,KAAK,MAAgB,GAAG,QAAQ,6BAA6B;AAEpG,aAAK,UAAU,KAAK,QAAQ,SAAS,GAAG,CAAC;MAC7C;AACA,aAAO,MAAM,UAAU,GAAG;IAC9B;IACO,WAAW,KAAgB;AAC9B,YAAM,UAAyB;QAC3B,qBAAiB,kCAAqB,KAAK,YAAY;;AAE3D,UAAI,KAAK,gBAAgB,QAAW;AAChC,gBAAQ,cAAc,QAAI,kCAAqB,KAAK,WAAW;MACnE;AACA,UAAI,KAAK,YAAY,QAAW;AAC5B,gBAAQ,WAAW,KAAK,SAAS,SAAQ;MAC7C;AACA,aAAO;QACH,GAAG,MAAM,WAAW,GAAG;QACvB;;IAER;;;;IAIS,cAAU,MAAA;8BAFtB,yCAAU,0BAAa,GAAG,OAC1B,kDAAmB,aAAa,CAAC;;;;oBACF;kCAAA,YAAO;WAAA;;;;;;;;AAAvC,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;;;;",
4
+ "sourcesContent": ["import * as __validateArgs from \"./BasicCC._validateArgs.js\";\nconst { validateArgs_BasicCCAPI_set } = __validateArgs;\nimport type { GetDeviceConfig } from \"@zwave-js/config\";\nimport { CommandClasses, type ControlsCC, Duration, type EndpointId, type GetEndpoint, type GetNode, type GetSupportedCCVersion, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type NodeId, type SupervisionResult, type SupportsCC, type ValueID, ValueMetadata, type WithAddress, maybeUnknownToString, parseMaybeNumber, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, getEffectiveCCVersion, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { BasicCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { BasicCCValues } from \"./_CCValues.generated.js\";\nexport { BasicCCValues };\n@API(CommandClasses.Basic)\nexport class BasicCCAPI extends CCAPI {\n public supportsCommand(cmd: BasicCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case BasicCommand.Get:\n return this.isSinglecast();\n case BasicCommand.Set:\n return true;\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: BasicCCAPI, { property }, value) {\n // Enable restoring the previous non-zero value\n if (property === \"restorePrevious\") {\n property = \"targetValue\";\n value = 255;\n }\n if (property !== \"targetValue\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.set(value);\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property }, value, _options) => {\n // Enable restoring the previous non-zero value\n if (property === \"restorePrevious\") {\n property = \"targetValue\";\n value = 255;\n }\n if (property === \"targetValue\") {\n const currentValueValueId = BasicCCValues.currentValue.endpoint(this.endpoint.index);\n return {\n // This is the target value for a split target/current state pair.\n isSplitStateTargetValue: true,\n optimisticallyUpdateRelatedValues: (_supervisedAndSuccessful) => {\n // Only update currentValue for valid target values\n if (typeof value === \"number\"\n && value >= 0\n && value <= 99) {\n if (this.isSinglecast()) {\n this.tryGetValueDB()?.setValue(currentValueValueId, value);\n }\n else if (this.isMulticast()) {\n // Figure out which nodes were affected by this command\n const affectedNodes = this.endpoint.node\n .physicalNodes.filter((node) => node\n .getEndpoint(this.endpoint.index)\n ?.supportsCC(this.ccId));\n // and optimistically update the currentValue\n for (const node of affectedNodes) {\n this.host\n .tryGetValueDB(node.id)\n ?.setValue(currentValueValueId, value);\n }\n }\n }\n },\n forceVerifyChanges: () => {\n // If we don't know the actual value, we need to verify the change, regardless of the supervision result\n return value === 255;\n },\n verifyChanges: () => {\n if (this.isSinglecast()\n // We generally don't want to poll for multicasts because of how much traffic it can cause\n // However, when setting the value 255 (ON), we don't know the actual state\n || (this.isMulticast() && value === 255)) {\n // We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n (this as this).schedulePoll(currentValueValueId, value === 255 ? undefined : value);\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: BasicCCAPI, { property }) {\n switch (property) {\n case \"currentValue\":\n case \"targetValue\":\n case \"duration\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(BasicCommand, BasicCommand.Get);\n const cc = new BasicCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<BasicCCReport>(cc, this.commandOptions);\n if (response) {\n this.tryGetValueDB()?.setValue(BasicCCValues.currentValue.endpoint(this.endpoint.index), response.currentValue);\n return pick(response, [\"currentValue\", \"targetValue\", \"duration\"]);\n }\n }\n @validateArgs_BasicCCAPI_set()\n public async set(targetValue: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(BasicCommand, BasicCommand.Set);\n const cc = new BasicCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n targetValue,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses.Basic)\n@implementedVersion(2) // Update tests in CommandClass.test.ts when changing this\n@ccValues(BasicCCValues)\nexport class BasicCC extends CommandClass {\n declare ccCommand: BasicCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // Assume that the endpoint supports Basic CC, so the values get persisted correctly.\n endpoint.addCC(CommandClasses.Basic, { isSupported: true });\n // try to query the current state\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remove Basic CC support again when there was no response\n if (this.getValue(ctx, BasicCCValues.currentValue) == undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"No response to Basic Get command, assuming Basic CC is unsupported...\",\n });\n // SDS14223: A controlling node MUST conclude that the Basic Command Class is not supported by a node (or\n // endpoint) if no Basic Report is returned.\n endpoint.addCC(CommandClasses.Basic, { isSupported: false });\n if (!endpoint.controlsCC(CommandClasses.Basic)) {\n endpoint.removeCC(CommandClasses.Basic);\n }\n }\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Basic, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // try to query the current state\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying Basic CC state...\",\n direction: \"outbound\",\n });\n const basicResponse = await api.get();\n if (basicResponse) {\n let logMessage = `received Basic CC state:\ncurrent value: ${basicResponse.currentValue}`;\n if (basicResponse.targetValue != undefined) {\n logMessage += `\ntarget value: ${basicResponse.targetValue}\nremaining duration: ${basicResponse.duration?.toString() ?? \"undefined\"}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n public override getDefinedValueIDs(ctx: GetValueDB & GetSupportedCCVersion & GetDeviceConfig & GetNode<NodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>>): ValueID[] {\n const ret: ValueID[] = [];\n const endpoint = this.getEndpoint(ctx)!;\n const compat = ctx.getDeviceConfig?.(endpoint.nodeId)?.compat;\n if (compat?.mapBasicSet === \"event\") {\n // Add the compat event value if it should be exposed\n ret.push(BasicCCValues.compatEvent.endpoint(endpoint.index));\n }\n if (endpoint.supportsCC(this.ccId)) {\n // Defer to the base implementation if Basic CC is supported.\n // This implies that no other actuator CC is supported.\n ret.push(...super.getDefinedValueIDs(ctx));\n }\n else if (endpoint.controlsCC(CommandClasses.Basic)) {\n // During the interview, we mark Basic CC as controlled only if we want to expose currentValue\n ret.push(BasicCCValues.currentValue.endpoint(endpoint.index));\n }\n return ret;\n }\n}\n// @publicAPI\nexport interface BasicCCSetOptions {\n targetValue: number;\n}\n@CCCommand(BasicCommand.Set)\n@useSupervision()\nexport class BasicCCSet extends BasicCC {\n public constructor(options: WithAddress<BasicCCSetOptions>) {\n super(options);\n this.targetValue = options.targetValue;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BasicCCSet {\n validatePayload(raw.payload.length >= 1);\n const targetValue = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n targetValue,\n });\n }\n public targetValue: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.targetValue]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"target value\": this.targetValue },\n };\n }\n}\n// @publicAPI\nexport interface BasicCCReportOptions {\n currentValue?: MaybeUnknown<number>;\n targetValue?: MaybeUnknown<number>;\n duration?: Duration;\n}\n@CCCommand(BasicCommand.Report)\n@ccValueProperty(\"currentValue\", BasicCCValues.currentValue)\n@ccValueProperty(\"targetValue\", BasicCCValues.targetValue)\n@ccValueProperty(\"duration\", BasicCCValues.duration)\nexport class BasicCCReport extends BasicCC {\n // @noCCValues See comment in the constructor\n public constructor(options: WithAddress<BasicCCReportOptions>) {\n super(options);\n this.currentValue = options.currentValue;\n this.targetValue = options.targetValue;\n this.duration = options.duration;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): BasicCCReport {\n validatePayload(raw.payload.length >= 1);\n const currentValue: MaybeUnknown<number> | undefined = \n // 0xff is a legacy value for 100% (99)\n raw.payload[0] === 0xff\n ? 99\n : parseMaybeNumber(raw.payload[0]);\n validatePayload(currentValue !== undefined);\n let targetValue: MaybeUnknown<number> | undefined;\n let duration: Duration | undefined;\n if (raw.payload.length >= 3) {\n targetValue = parseMaybeNumber(raw.payload[1]);\n duration = Duration.parseReport(raw.payload[2]);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n currentValue,\n targetValue,\n duration,\n });\n }\n public currentValue: MaybeUnknown<number> | undefined;\n public readonly targetValue: MaybeUnknown<number> | undefined;\n public readonly duration: Duration | undefined;\n public persistValues(ctx: PersistValuesContext): boolean {\n // Basic CC Report persists its values itself, since there are some\n // specific rules when which value may be persisted.\n // These rules are essentially encoded in the getDefinedValueIDs overload,\n // so we simply reuse that here.\n // Figure out which values may be persisted.\n const definedValueIDs = this.getDefinedValueIDs(ctx);\n const shouldPersistCurrentValue = definedValueIDs.some((vid) => BasicCCValues.currentValue.is(vid));\n const shouldPersistTargetValue = definedValueIDs.some((vid) => BasicCCValues.targetValue.is(vid));\n const shouldPersistDuration = definedValueIDs.some((vid) => BasicCCValues.duration.is(vid));\n if (this.currentValue !== undefined && shouldPersistCurrentValue) {\n this.setValue(ctx, BasicCCValues.currentValue, this.currentValue);\n }\n if (this.targetValue !== undefined && shouldPersistTargetValue) {\n this.setValue(ctx, BasicCCValues.targetValue, this.targetValue);\n }\n if (this.duration !== undefined && shouldPersistDuration) {\n this.setValue(ctx, BasicCCValues.duration, this.duration);\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.currentValue ?? 0xfe,\n this.targetValue ?? 0xfe,\n (this.duration ?? Duration.unknown()).serializeReport(),\n ]);\n const ccVersion = getEffectiveCCVersion(ctx, this);\n if (ccVersion < 2 && ctx.getDeviceConfig?.(this.nodeId as number)?.compat?.encodeCCsUsingTargetVersion) {\n // When forcing CC version 1, only send the current value\n this.payload = this.payload.subarray(0, 1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"current value\": maybeUnknownToString(this.currentValue),\n };\n if (this.targetValue !== undefined) {\n message[\"target value\"] = maybeUnknownToString(this.targetValue);\n }\n if (this.duration != undefined) {\n message.duration = this.duration.toString();\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(BasicCommand.Get)\n@expectedCCResponse(BasicCCReport)\nexport class BasicCCGet extends BasicCC {\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -152,14 +152,15 @@ let BatteryCC = (() => {
152
152
  message: `Interviewing ${this.ccName}...`,
153
153
  direction: "none"
154
154
  });
155
- await this.refreshValues(ctx);
155
+ await this.refreshValues(ctx, { tag: "interview" });
156
156
  this.setInterviewComplete(ctx, true);
157
157
  }
158
158
  async refreshValues(ctx, options) {
159
159
  const node = this.getNode(ctx);
160
160
  const endpoint = this.getEndpoint(ctx);
161
161
  const api = import_API.CCAPI.create(import_core.CommandClasses.Battery, ctx, endpoint).withOptions({
162
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
162
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
163
+ tag: options?.tag
163
164
  });
164
165
  ctx.logNode(node.id, {
165
166
  endpoint: this.endpointIndex,