@zwave-js/cc 15.28.0 → 15.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
  2. package/build/cjs/cc/AssociationCC.js +6 -5
  3. package/build/cjs/cc/AssociationCC.js.map +2 -2
  4. package/build/cjs/cc/AssociationGroupInfoCC.js +4 -5
  5. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  6. package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
  7. package/build/cjs/cc/BasicCC.d.ts +4 -1
  8. package/build/cjs/cc/BasicCC.js +18 -0
  9. package/build/cjs/cc/BasicCC.js.map +3 -3
  10. package/build/cjs/cc/BasicWindowCoveringCC.js.map +2 -2
  11. package/build/cjs/cc/BatteryCC.js +16 -3
  12. package/build/cjs/cc/BatteryCC.js.map +2 -2
  13. package/build/cjs/cc/BinarySensorCC.js.map +2 -2
  14. package/build/cjs/cc/BinarySwitchCC.d.ts +4 -1
  15. package/build/cjs/cc/BinarySwitchCC.js +18 -0
  16. package/build/cjs/cc/BinarySwitchCC.js.map +3 -3
  17. package/build/cjs/cc/CRC16CC.d.ts +3 -2
  18. package/build/cjs/cc/CRC16CC.js +7 -1
  19. package/build/cjs/cc/CRC16CC.js.map +3 -3
  20. package/build/cjs/cc/CentralSceneCC.js.map +2 -2
  21. package/build/cjs/cc/ClimateControlScheduleCC.js.map +2 -2
  22. package/build/cjs/cc/ClockCC.js.map +2 -2
  23. package/build/cjs/cc/ColorSwitchCC.js +1 -4
  24. package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
  25. package/build/cjs/cc/ConfigurationCC.js +1 -4
  26. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  27. package/build/cjs/cc/DeviceResetLocallyCC.js.map +2 -2
  28. package/build/cjs/cc/DoorLockCC.js.map +2 -2
  29. package/build/cjs/cc/EntryControlCC.js.map +2 -2
  30. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +4 -16
  31. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
  32. package/build/cjs/cc/HumidityControlSetpointCC.js +10 -4
  33. package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
  34. package/build/cjs/cc/IndicatorCC.js +1 -5
  35. package/build/cjs/cc/IndicatorCC.js.map +2 -2
  36. package/build/cjs/cc/IrrigationCC.js.map +2 -2
  37. package/build/cjs/cc/ManufacturerProprietaryCC.js.map +2 -2
  38. package/build/cjs/cc/ManufacturerSpecificCC.js +4 -5
  39. package/build/cjs/cc/ManufacturerSpecificCC.js.map +2 -2
  40. package/build/cjs/cc/MeterCC.js +8 -21
  41. package/build/cjs/cc/MeterCC.js.map +2 -2
  42. package/build/cjs/cc/MultiChannelAssociationCC.js +11 -7
  43. package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
  44. package/build/cjs/cc/MultiChannelCC.d.ts +3 -1
  45. package/build/cjs/cc/MultiChannelCC.js +21 -10
  46. package/build/cjs/cc/MultiChannelCC.js.map +3 -3
  47. package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
  48. package/build/cjs/cc/MultilevelSwitchCC.d.ts +5 -1
  49. package/build/cjs/cc/MultilevelSwitchCC.js +30 -0
  50. package/build/cjs/cc/MultilevelSwitchCC.js.map +3 -3
  51. package/build/cjs/cc/NotificationCC.js +29 -11
  52. package/build/cjs/cc/NotificationCC.js.map +2 -2
  53. package/build/cjs/cc/PowerlevelCC.js.map +1 -1
  54. package/build/cjs/cc/ProtectionCC.js.map +2 -2
  55. package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +2 -2
  56. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
  57. package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
  58. package/build/cjs/cc/Security2CC.d.ts +2 -1
  59. package/build/cjs/cc/Security2CC.js +31 -3
  60. package/build/cjs/cc/Security2CC.js.map +2 -2
  61. package/build/cjs/cc/SecurityCC.d.ts +2 -1
  62. package/build/cjs/cc/SecurityCC.js +7 -6
  63. package/build/cjs/cc/SecurityCC.js.map +2 -2
  64. package/build/cjs/cc/SoundSwitchCC.js +6 -6
  65. package/build/cjs/cc/SoundSwitchCC.js.map +2 -2
  66. package/build/cjs/cc/SupervisionCC.d.ts +2 -1
  67. package/build/cjs/cc/SupervisionCC.js +6 -0
  68. package/build/cjs/cc/SupervisionCC.js.map +3 -3
  69. package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
  70. package/build/cjs/cc/ThermostatModeCC.js +1 -3
  71. package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
  72. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
  73. package/build/cjs/cc/ThermostatSetpointCC.d.ts +4 -1
  74. package/build/cjs/cc/ThermostatSetpointCC.js +18 -0
  75. package/build/cjs/cc/ThermostatSetpointCC.js.map +3 -3
  76. package/build/cjs/cc/TimeCC.js.map +2 -2
  77. package/build/cjs/cc/TransportServiceCC.js.map +2 -2
  78. package/build/cjs/cc/UserCodeCC.js +1 -6
  79. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  80. package/build/cjs/cc/UserCredentialCC.js +4 -6
  81. package/build/cjs/cc/UserCredentialCC.js.map +2 -2
  82. package/build/cjs/cc/VersionCC.js.map +2 -2
  83. package/build/cjs/cc/WindowCoveringCC.js +5 -1
  84. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  85. package/build/cjs/cc/ZWaveProtocolCC.js +3 -11
  86. package/build/cjs/cc/ZWaveProtocolCC.js.map +2 -2
  87. package/build/cjs/cc/_CCValues.generated.d.ts +2 -2
  88. package/build/cjs/cc/_CCValues.generated.js.map +2 -2
  89. package/build/cjs/cc/index.d.ts +179 -179
  90. package/build/cjs/cc/index.js.map +1 -1
  91. package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +2 -2
  92. package/build/cjs/lib/API.d.ts +3 -2
  93. package/build/cjs/lib/API.js.map +2 -2
  94. package/build/cjs/lib/CommandClass.d.ts +20 -0
  95. package/build/cjs/lib/CommandClass.js +52 -11
  96. package/build/cjs/lib/CommandClass.js.map +3 -3
  97. package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
  98. package/build/cjs/lib/EncapsulatingCommandClass.js.map +2 -2
  99. package/build/cjs/lib/NotificationEventPayload.js.map +2 -2
  100. package/build/cjs/lib/Security2/Extension.js +1 -4
  101. package/build/cjs/lib/Security2/Extension.js.map +2 -2
  102. package/build/cjs/lib/Security2/shared.js.map +2 -2
  103. package/build/cjs/lib/SetValueResult.js.map +1 -1
  104. package/build/cjs/lib/Values.d.ts +1 -1
  105. package/build/cjs/lib/Values.js.map +2 -2
  106. package/build/cjs/lib/_CCAPI.generated.js.map +1 -1
  107. package/build/cjs/lib/_Types.d.ts +30 -30
  108. package/build/cjs/lib/_Types.js.map +2 -2
  109. package/build/cjs/lib/serializers.js +1 -4
  110. package/build/cjs/lib/serializers.js.map +2 -2
  111. package/build/cjs/lib/utils.js.map +2 -2
  112. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  113. package/build/esm/cc/AlarmSensorCC.js +1 -2
  114. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  115. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  116. package/build/esm/cc/AssociationCC.js +8 -7
  117. package/build/esm/cc/AssociationCC.js.map +1 -1
  118. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  119. package/build/esm/cc/AssociationGroupInfoCC.js +10 -12
  120. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  121. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  122. package/build/esm/cc/BarrierOperatorCC.js +10 -9
  123. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  124. package/build/esm/cc/BasicCC.d.ts +4 -1
  125. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  126. package/build/esm/cc/BasicCC.js +30 -7
  127. package/build/esm/cc/BasicCC.js.map +1 -1
  128. package/build/esm/cc/BasicWindowCoveringCC.d.ts.map +1 -1
  129. package/build/esm/cc/BasicWindowCoveringCC.js +2 -5
  130. package/build/esm/cc/BasicWindowCoveringCC.js.map +1 -1
  131. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  132. package/build/esm/cc/BatteryCC.js +12 -12
  133. package/build/esm/cc/BatteryCC.js.map +1 -1
  134. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  135. package/build/esm/cc/BinarySensorCC.js +4 -5
  136. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  137. package/build/esm/cc/BinarySwitchCC.d.ts +4 -1
  138. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  139. package/build/esm/cc/BinarySwitchCC.js +31 -6
  140. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  141. package/build/esm/cc/CRC16CC.d.ts +3 -2
  142. package/build/esm/cc/CRC16CC.d.ts.map +1 -1
  143. package/build/esm/cc/CRC16CC.js +10 -4
  144. package/build/esm/cc/CRC16CC.js.map +1 -1
  145. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  146. package/build/esm/cc/CentralSceneCC.js +2 -1
  147. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  148. package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
  149. package/build/esm/cc/ClimateControlScheduleCC.js +6 -2
  150. package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
  151. package/build/esm/cc/ClockCC.d.ts.map +1 -1
  152. package/build/esm/cc/ClockCC.js +6 -2
  153. package/build/esm/cc/ClockCC.js.map +1 -1
  154. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  155. package/build/esm/cc/ColorSwitchCC.js +17 -20
  156. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  157. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  158. package/build/esm/cc/ConfigurationCC.js +20 -29
  159. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  160. package/build/esm/cc/DeviceResetLocallyCC.d.ts.map +1 -1
  161. package/build/esm/cc/DeviceResetLocallyCC.js +1 -2
  162. package/build/esm/cc/DeviceResetLocallyCC.js.map +1 -1
  163. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  164. package/build/esm/cc/DoorLockCC.js +25 -29
  165. package/build/esm/cc/DoorLockCC.js.map +1 -1
  166. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  167. package/build/esm/cc/EntryControlCC.js +10 -7
  168. package/build/esm/cc/EntryControlCC.js.map +1 -1
  169. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  170. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +15 -27
  171. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  172. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  173. package/build/esm/cc/HumidityControlSetpointCC.js +8 -9
  174. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  175. package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
  176. package/build/esm/cc/IndicatorCC.js +19 -38
  177. package/build/esm/cc/IndicatorCC.js.map +1 -1
  178. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  179. package/build/esm/cc/IrrigationCC.js +8 -6
  180. package/build/esm/cc/IrrigationCC.js.map +1 -1
  181. package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
  182. package/build/esm/cc/ManufacturerProprietaryCC.js +1 -2
  183. package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
  184. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  185. package/build/esm/cc/ManufacturerSpecificCC.js +5 -8
  186. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  187. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  188. package/build/esm/cc/MeterCC.js +15 -29
  189. package/build/esm/cc/MeterCC.js.map +1 -1
  190. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  191. package/build/esm/cc/MultiChannelAssociationCC.js +15 -20
  192. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  193. package/build/esm/cc/MultiChannelCC.d.ts +3 -1
  194. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  195. package/build/esm/cc/MultiChannelCC.js +28 -22
  196. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  197. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  198. package/build/esm/cc/MultilevelSensorCC.js +11 -11
  199. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  200. package/build/esm/cc/MultilevelSwitchCC.d.ts +5 -1
  201. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  202. package/build/esm/cc/MultilevelSwitchCC.js +56 -16
  203. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  204. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  205. package/build/esm/cc/NotificationCC.js +66 -55
  206. package/build/esm/cc/NotificationCC.js.map +1 -1
  207. package/build/esm/cc/PowerlevelCC.d.ts.map +1 -1
  208. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  209. package/build/esm/cc/ProtectionCC.js +10 -9
  210. package/build/esm/cc/ProtectionCC.js.map +1 -1
  211. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -1
  212. package/build/esm/cc/SceneActuatorConfigurationCC.js +5 -8
  213. package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
  214. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
  215. package/build/esm/cc/SceneControllerConfigurationCC.js +10 -16
  216. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  217. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  218. package/build/esm/cc/ScheduleEntryLockCC.js +13 -20
  219. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  220. package/build/esm/cc/Security2CC.d.ts +2 -1
  221. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  222. package/build/esm/cc/Security2CC.js +68 -32
  223. package/build/esm/cc/Security2CC.js.map +1 -1
  224. package/build/esm/cc/SecurityCC.d.ts +2 -1
  225. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  226. package/build/esm/cc/SecurityCC.js +16 -11
  227. package/build/esm/cc/SecurityCC.js.map +1 -1
  228. package/build/esm/cc/SoundSwitchCC.js +2 -2
  229. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  230. package/build/esm/cc/SupervisionCC.d.ts +2 -1
  231. package/build/esm/cc/SupervisionCC.d.ts.map +1 -1
  232. package/build/esm/cc/SupervisionCC.js +13 -6
  233. package/build/esm/cc/SupervisionCC.js.map +1 -1
  234. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  235. package/build/esm/cc/ThermostatFanModeCC.js +1 -2
  236. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  237. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  238. package/build/esm/cc/ThermostatModeCC.js +1 -3
  239. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  240. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  241. package/build/esm/cc/ThermostatOperatingStateCC.js +1 -2
  242. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  243. package/build/esm/cc/ThermostatSetpointCC.d.ts +4 -1
  244. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  245. package/build/esm/cc/ThermostatSetpointCC.js +31 -19
  246. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  247. package/build/esm/cc/TimeCC.d.ts.map +1 -1
  248. package/build/esm/cc/TimeCC.js +6 -2
  249. package/build/esm/cc/TimeCC.js.map +1 -1
  250. package/build/esm/cc/TransportServiceCC.d.ts.map +1 -1
  251. package/build/esm/cc/TransportServiceCC.js +8 -8
  252. package/build/esm/cc/TransportServiceCC.js.map +1 -1
  253. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  254. package/build/esm/cc/UserCodeCC.js +20 -30
  255. package/build/esm/cc/UserCodeCC.js.map +1 -1
  256. package/build/esm/cc/UserCredentialCC.d.ts.map +1 -1
  257. package/build/esm/cc/UserCredentialCC.js +42 -59
  258. package/build/esm/cc/UserCredentialCC.js.map +1 -1
  259. package/build/esm/cc/VersionCC.js +3 -3
  260. package/build/esm/cc/VersionCC.js.map +1 -1
  261. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  262. package/build/esm/cc/WindowCoveringCC.js +10 -9
  263. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  264. package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -1
  265. package/build/esm/cc/ZWaveProtocolCC.js +5 -26
  266. package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
  267. package/build/esm/cc/_CCValues.generated.d.ts +2 -2
  268. package/build/esm/cc/_CCValues.generated.d.ts.map +1 -1
  269. package/build/esm/cc/_CCValues.generated.js +637 -678
  270. package/build/esm/cc/_CCValues.generated.js.map +1 -1
  271. package/build/esm/cc/index.d.ts +179 -179
  272. package/build/esm/cc/index.d.ts.map +1 -1
  273. package/build/esm/cc/index.js +124 -124
  274. package/build/esm/cc/index.js.map +1 -1
  275. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
  276. package/build/esm/cc/manufacturerProprietary/Decorators.js.map +1 -1
  277. package/build/esm/lib/API.d.ts +3 -2
  278. package/build/esm/lib/API.d.ts.map +1 -1
  279. package/build/esm/lib/API.js +1 -1
  280. package/build/esm/lib/API.js.map +1 -1
  281. package/build/esm/lib/CommandClass.d.ts +20 -0
  282. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  283. package/build/esm/lib/CommandClass.js +50 -16
  284. package/build/esm/lib/CommandClass.js.map +1 -1
  285. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
  286. package/build/esm/lib/CommandClassDecorators.js +1 -2
  287. package/build/esm/lib/CommandClassDecorators.js.map +1 -1
  288. package/build/esm/lib/EncapsulatingCommandClass.d.ts.map +1 -1
  289. package/build/esm/lib/EncapsulatingCommandClass.js.map +1 -1
  290. package/build/esm/lib/NotificationEventPayload.d.ts.map +1 -1
  291. package/build/esm/lib/NotificationEventPayload.js.map +1 -1
  292. package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
  293. package/build/esm/lib/Security2/Extension.js +2 -6
  294. package/build/esm/lib/Security2/Extension.js.map +1 -1
  295. package/build/esm/lib/Security2/shared.d.ts.map +1 -1
  296. package/build/esm/lib/Security2/shared.js.map +1 -1
  297. package/build/esm/lib/SetValueResult.d.ts.map +1 -1
  298. package/build/esm/lib/Values.d.ts +1 -1
  299. package/build/esm/lib/Values.d.ts.map +1 -1
  300. package/build/esm/lib/Values.js.map +1 -1
  301. package/build/esm/lib/_CCAPI.generated.d.ts.map +1 -1
  302. package/build/esm/lib/_Types.d.ts +30 -30
  303. package/build/esm/lib/_Types.d.ts.map +1 -1
  304. package/build/esm/lib/_Types.js.map +1 -1
  305. package/build/esm/lib/serializers.d.ts.map +1 -1
  306. package/build/esm/lib/serializers.js +1 -4
  307. package/build/esm/lib/serializers.js.map +1 -1
  308. package/build/esm/lib/traits.d.ts.map +1 -1
  309. package/build/esm/lib/utils.d.ts.map +1 -1
  310. package/build/esm/lib/utils.js +25 -31
  311. package/build/esm/lib/utils.js.map +1 -1
  312. package/package.json +7 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/AlarmSensorCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./AlarmSensorCC._validateArgs.js\";\nconst { validateArgs_AlarmSensorCCAPI_get } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, logDict, logList, logText, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, isEnumMember, pick } 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 { AlarmSensorCommand, AlarmSensorType } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { AlarmSensorCCValues } from \"./_CCValues.generated.js\";\nexport { AlarmSensorCCValues };\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses[\"Alarm Sensor\"])\nexport class AlarmSensorCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: AlarmSensorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case AlarmSensorCommand.Get:\n case AlarmSensorCommand.SupportedGet:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n /**\n * Retrieves the current value from this sensor\n * @param sensorType The (optional) sensor type to retrieve the value for\n */\n @validateArgs_AlarmSensorCCAPI_get()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get(sensorType?: AlarmSensorType) {\n this.assertSupportsCommand(AlarmSensorCommand, AlarmSensorCommand.Get);\n const cc = new AlarmSensorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n sensorType,\n });\n const response = await this.host.sendCommand<AlarmSensorCCReport>(cc, this.commandOptions);\n if (response)\n return pick(response, [\"state\", \"severity\", \"duration\"]);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getSupportedSensorTypes() {\n this.assertSupportsCommand(AlarmSensorCommand, AlarmSensorCommand.SupportedGet);\n const cc = new AlarmSensorCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<AlarmSensorCCSupportedReport>(cc, this.commandOptions);\n if (response)\n return response.supportedSensorTypes;\n }\n}\n@commandClass(CommandClasses[\"Alarm Sensor\"])\n@implementedVersion(1)\n@ccValues(AlarmSensorCCValues)\nexport class AlarmSensorCC extends CommandClass {\n declare ccCommand: AlarmSensorCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n // Skip the interview in favor of Notification CC if possible,\n // but only if the device supports Notification CC v2+. Version 1\n // doesn't provide information about supported notification types,\n // so we still need to interview Alarm Sensor CC for those devices.\n if (endpoint.supportsCC(CommandClasses.Notification)\n && endpoint.getCCVersion(CommandClasses.Notification) >= 2) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `${this.constructor.name}: skipping interview because Notification CC is supported...`,\n direction: \"none\",\n });\n this.setInterviewComplete(ctx, true);\n return;\n }\n const api = CCAPI.create(CommandClasses[\"Alarm Sensor\"], 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 // Find out which sensor types this sensor supports\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported sensor types...\",\n direction: \"outbound\",\n });\n const supportedSensorTypes = await api.getSupportedSensorTypes();\n if (supportedSensorTypes) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logText(\"received supported sensor types:\", {\n nested: logList(supportedSensorTypes.map((type) => getEnumMemberName(AlarmSensorType, type))),\n }),\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported sensor types timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n // Query (all of) the sensor's current value(s)\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[\"Alarm Sensor\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n const supportedSensorTypes: readonly AlarmSensorType[] = this.getValue(ctx, AlarmSensorCCValues.supportedSensorTypes)\n ?? [];\n // Always query (all of) the sensor's current value(s)\n for (const type of supportedSensorTypes) {\n // Some devices report invalid sensor types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(AlarmSensorType, type))\n continue;\n const sensorName = getEnumMemberName(AlarmSensorType, type);\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying current value for ${sensorName}...`,\n direction: \"outbound\",\n });\n const currentValue = await api.get(type);\n if (currentValue) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logText(`received current value for ${sensorName}:`, {\n nested: logDict({\n state: currentValue.state,\n severity: currentValue.severity,\n duration: currentValue.duration,\n }),\n }),\n direction: \"inbound\",\n });\n }\n }\n }\n /**\n * Returns which sensor types are supported.\n * This only works AFTER the interview process\n */\n public static getSupportedSensorTypesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<AlarmSensorType[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(AlarmSensorCCValues.supportedSensorTypes.endpoint(endpoint.index));\n }\n protected createMetadataForSensorType(ctx: GetValueDB, sensorType: AlarmSensorType): void {\n const stateValue = AlarmSensorCCValues.state(sensorType);\n const severityValue = AlarmSensorCCValues.severity(sensorType);\n const durationValue = AlarmSensorCCValues.duration(sensorType);\n // Always create metadata if it does not exist\n this.ensureMetadata(ctx, stateValue);\n this.ensureMetadata(ctx, severityValue);\n this.ensureMetadata(ctx, durationValue);\n }\n}\n// @publicAPI\nexport interface AlarmSensorCCReportOptions {\n sensorType: AlarmSensorType;\n state: boolean;\n severity?: number;\n duration?: number;\n}\n@CCCommand(AlarmSensorCommand.Report)\nexport class AlarmSensorCCReport extends AlarmSensorCC {\n public constructor(options: WithAddress<AlarmSensorCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.sensorType = options.sensorType;\n this.state = options.state;\n this.severity = options.severity;\n this.duration = options.duration;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AlarmSensorCCReport {\n validatePayload(raw.payload.length >= 5, raw.payload[1] !== 0xff);\n const sourceNodeId = raw.payload[0];\n const sensorType: AlarmSensorType = raw.payload[1];\n // Any positive value gets interpreted as alarm\n const state: boolean = raw.payload[2] > 0;\n // Severity only ranges from 1 to 100\n let severity: number | undefined;\n if (raw.payload[2] > 0 && raw.payload[2] <= 0x64) {\n severity = raw.payload[2];\n }\n // ignore zero durations\n const duration = raw.payload.readUInt16BE(3) || undefined;\n return new this({\n // Alarm Sensor reports may be forwarded by a different node, in this case\n // (and only then!) the payload contains the original node ID\n nodeId: sourceNodeId || ctx.sourceNodeId,\n sensorType,\n state,\n severity,\n duration,\n });\n }\n public readonly sensorType: AlarmSensorType;\n public readonly state: boolean;\n public readonly severity: number | undefined;\n public readonly duration: number | undefined;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"sensor type\": getEnumMemberName(AlarmSensorType, this.sensorType),\n \"alarm state\": this.state,\n };\n if (this.severity != undefined) {\n message.severity = this.severity;\n }\n if (this.duration != undefined) {\n message.duration = `${this.duration} seconds`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Create metadata if it does not exist\n this.createMetadataForSensorType(ctx, this.sensorType);\n const stateValue = AlarmSensorCCValues.state(this.sensorType);\n const severityValue = AlarmSensorCCValues.severity(this.sensorType);\n const durationValue = AlarmSensorCCValues.duration(this.sensorType);\n this.setValue(ctx, stateValue, this.state);\n this.setValue(ctx, severityValue, this.severity);\n this.setValue(ctx, durationValue, this.duration);\n return true;\n }\n}\nfunction testResponseForAlarmSensorGet(sent: AlarmSensorCCGet, received: AlarmSensorCCReport) {\n // We expect a Alarm Sensor Report that matches the requested sensor type (if a type was requested)\n return (sent.sensorType === AlarmSensorType.Any\n || received.sensorType === sent.sensorType);\n}\n// @publicAPI\nexport interface AlarmSensorCCGetOptions {\n sensorType?: AlarmSensorType;\n}\n@CCCommand(AlarmSensorCommand.Get)\n@expectedCCResponse(AlarmSensorCCReport, testResponseForAlarmSensorGet)\nexport class AlarmSensorCCGet extends AlarmSensorCC {\n public constructor(options: WithAddress<AlarmSensorCCGetOptions>) {\n super(options);\n this.sensorType = options.sensorType ?? AlarmSensorType.Any;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): AlarmSensorCCGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new AlarmSensorCCGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public sensorType: AlarmSensorType;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.sensorType]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"sensor type\": getEnumMemberName(AlarmSensorType, this.sensorType),\n },\n };\n }\n}\n// @publicAPI\nexport interface AlarmSensorCCSupportedReportOptions {\n supportedSensorTypes: AlarmSensorType[];\n}\n@CCCommand(AlarmSensorCommand.SupportedReport)\n@ccValueProperty(\"supportedSensorTypes\", AlarmSensorCCValues.supportedSensorTypes)\nexport class AlarmSensorCCSupportedReport extends AlarmSensorCC {\n public constructor(options: WithAddress<AlarmSensorCCSupportedReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedSensorTypes = options.supportedSensorTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AlarmSensorCCSupportedReport {\n validatePayload(raw.payload.length >= 1);\n const bitMaskLength = raw.payload[0];\n validatePayload(raw.payload.length >= 1 + bitMaskLength);\n const supportedSensorTypes: AlarmSensorType[] = parseBitMask(raw.payload.subarray(1, 1 + bitMaskLength), AlarmSensorType[\"General Purpose\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedSensorTypes,\n });\n }\n public supportedSensorTypes: AlarmSensorType[];\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Create metadata for each sensor type\n for (const type of this.supportedSensorTypes) {\n this.createMetadataForSensorType(ctx, type);\n }\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported sensor types\": this.supportedSensorTypes\n .map((t) => getEnumMemberName(AlarmSensorType, t))\n .join(\", \"),\n },\n };\n }\n}\n@CCCommand(AlarmSensorCommand.SupportedGet)\n@expectedCCResponse(AlarmSensorCCSupportedReport)\nexport class AlarmSensorCCSupportedGet extends AlarmSensorCC {\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./AlarmSensorCC._validateArgs.js\";\nconst { validateArgs_AlarmSensorCCAPI_get } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, logDict, logList, logText, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, isEnumMember, pick } 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 { AlarmSensorCommand, AlarmSensorType } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { AlarmSensorCCValues } from \"./_CCValues.generated.js\";\nexport { AlarmSensorCCValues };\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses[\"Alarm Sensor\"])\nexport class AlarmSensorCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: AlarmSensorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case AlarmSensorCommand.Get:\n case AlarmSensorCommand.SupportedGet:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n /**\n * Retrieves the current value from this sensor\n * @param sensorType The (optional) sensor type to retrieve the value for\n */\n @validateArgs_AlarmSensorCCAPI_get()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get(sensorType?: AlarmSensorType) {\n this.assertSupportsCommand(AlarmSensorCommand, AlarmSensorCommand.Get);\n const cc = new AlarmSensorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n sensorType,\n });\n const response = await this.host.sendCommand<AlarmSensorCCReport>(cc, this.commandOptions);\n if (response)\n return pick(response, [\"state\", \"severity\", \"duration\"]);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getSupportedSensorTypes() {\n this.assertSupportsCommand(AlarmSensorCommand, AlarmSensorCommand.SupportedGet);\n const cc = new AlarmSensorCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<AlarmSensorCCSupportedReport>(cc, this.commandOptions);\n if (response)\n return response.supportedSensorTypes;\n }\n}\n@commandClass(CommandClasses[\"Alarm Sensor\"])\n@implementedVersion(1)\n@ccValues(AlarmSensorCCValues)\nexport class AlarmSensorCC extends CommandClass {\n declare ccCommand: AlarmSensorCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n // Skip the interview in favor of Notification CC if possible,\n // but only if the device supports Notification CC v2+. Version 1\n // doesn't provide information about supported notification types,\n // so we still need to interview Alarm Sensor CC for those devices.\n if (endpoint.supportsCC(CommandClasses.Notification)\n && endpoint.getCCVersion(CommandClasses.Notification) >= 2) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `${this.constructor.name}: skipping interview because Notification CC is supported...`,\n direction: \"none\",\n });\n this.setInterviewComplete(ctx, true);\n return;\n }\n const api = CCAPI.create(CommandClasses[\"Alarm Sensor\"], 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 // Find out which sensor types this sensor supports\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported sensor types...\",\n direction: \"outbound\",\n });\n const supportedSensorTypes = await api.getSupportedSensorTypes();\n if (supportedSensorTypes) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logText(\"received supported sensor types:\", {\n nested: logList(supportedSensorTypes.map((type) => getEnumMemberName(AlarmSensorType, type))),\n }),\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported sensor types timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n // Query (all of) the sensor's current value(s)\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[\"Alarm Sensor\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n const supportedSensorTypes: readonly AlarmSensorType[] = this.getValue(ctx, AlarmSensorCCValues.supportedSensorTypes) ?? [];\n // Always query (all of) the sensor's current value(s)\n for (const type of supportedSensorTypes) {\n // Some devices report invalid sensor types, but the CC API checks\n // for valid values and throws otherwise.\n if (!isEnumMember(AlarmSensorType, type))\n continue;\n const sensorName = getEnumMemberName(AlarmSensorType, type);\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying current value for ${sensorName}...`,\n direction: \"outbound\",\n });\n const currentValue = await api.get(type);\n if (currentValue) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logText(`received current value for ${sensorName}:`, {\n nested: logDict({\n state: currentValue.state,\n severity: currentValue.severity,\n duration: currentValue.duration,\n }),\n }),\n direction: \"inbound\",\n });\n }\n }\n }\n /**\n * Returns which sensor types are supported.\n * This only works AFTER the interview process\n */\n public static getSupportedSensorTypesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<AlarmSensorType[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(AlarmSensorCCValues.supportedSensorTypes.endpoint(endpoint.index));\n }\n protected createMetadataForSensorType(ctx: GetValueDB, sensorType: AlarmSensorType): void {\n const stateValue = AlarmSensorCCValues.state(sensorType);\n const severityValue = AlarmSensorCCValues.severity(sensorType);\n const durationValue = AlarmSensorCCValues.duration(sensorType);\n // Always create metadata if it does not exist\n this.ensureMetadata(ctx, stateValue);\n this.ensureMetadata(ctx, severityValue);\n this.ensureMetadata(ctx, durationValue);\n }\n}\n// @publicAPI\nexport interface AlarmSensorCCReportOptions {\n sensorType: AlarmSensorType;\n state: boolean;\n severity?: number;\n duration?: number;\n}\n@CCCommand(AlarmSensorCommand.Report)\nexport class AlarmSensorCCReport extends AlarmSensorCC {\n public constructor(options: WithAddress<AlarmSensorCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.sensorType = options.sensorType;\n this.state = options.state;\n this.severity = options.severity;\n this.duration = options.duration;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AlarmSensorCCReport {\n validatePayload(raw.payload.length >= 5, raw.payload[1] !== 0xff);\n const sourceNodeId = raw.payload[0];\n const sensorType: AlarmSensorType = raw.payload[1];\n // Any positive value gets interpreted as alarm\n const state: boolean = raw.payload[2] > 0;\n // Severity only ranges from 1 to 100\n let severity: number | undefined;\n if (raw.payload[2] > 0 && raw.payload[2] <= 0x64) {\n severity = raw.payload[2];\n }\n // ignore zero durations\n const duration = raw.payload.readUInt16BE(3) || undefined;\n return new this({\n // Alarm Sensor reports may be forwarded by a different node, in this case\n // (and only then!) the payload contains the original node ID\n nodeId: sourceNodeId || ctx.sourceNodeId,\n sensorType,\n state,\n severity,\n duration,\n });\n }\n public readonly sensorType: AlarmSensorType;\n public readonly state: boolean;\n public readonly severity: number | undefined;\n public readonly duration: number | undefined;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"sensor type\": getEnumMemberName(AlarmSensorType, this.sensorType),\n \"alarm state\": this.state,\n };\n if (this.severity != undefined) {\n message.severity = this.severity;\n }\n if (this.duration != undefined) {\n message.duration = `${this.duration} seconds`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Create metadata if it does not exist\n this.createMetadataForSensorType(ctx, this.sensorType);\n const stateValue = AlarmSensorCCValues.state(this.sensorType);\n const severityValue = AlarmSensorCCValues.severity(this.sensorType);\n const durationValue = AlarmSensorCCValues.duration(this.sensorType);\n this.setValue(ctx, stateValue, this.state);\n this.setValue(ctx, severityValue, this.severity);\n this.setValue(ctx, durationValue, this.duration);\n return true;\n }\n}\nfunction testResponseForAlarmSensorGet(sent: AlarmSensorCCGet, received: AlarmSensorCCReport) {\n // We expect a Alarm Sensor Report that matches the requested sensor type (if a type was requested)\n return (sent.sensorType === AlarmSensorType.Any\n || received.sensorType === sent.sensorType);\n}\n// @publicAPI\nexport interface AlarmSensorCCGetOptions {\n sensorType?: AlarmSensorType;\n}\n@CCCommand(AlarmSensorCommand.Get)\n@expectedCCResponse(AlarmSensorCCReport, testResponseForAlarmSensorGet)\nexport class AlarmSensorCCGet extends AlarmSensorCC {\n public constructor(options: WithAddress<AlarmSensorCCGetOptions>) {\n super(options);\n this.sensorType = options.sensorType ?? AlarmSensorType.Any;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): AlarmSensorCCGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new AlarmSensorCCGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public sensorType: AlarmSensorType;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.sensorType]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"sensor type\": getEnumMemberName(AlarmSensorType, this.sensorType),\n },\n };\n }\n}\n// @publicAPI\nexport interface AlarmSensorCCSupportedReportOptions {\n supportedSensorTypes: AlarmSensorType[];\n}\n@CCCommand(AlarmSensorCommand.SupportedReport)\n@ccValueProperty(\"supportedSensorTypes\", AlarmSensorCCValues.supportedSensorTypes)\nexport class AlarmSensorCCSupportedReport extends AlarmSensorCC {\n public constructor(options: WithAddress<AlarmSensorCCSupportedReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedSensorTypes = options.supportedSensorTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AlarmSensorCCSupportedReport {\n validatePayload(raw.payload.length >= 1);\n const bitMaskLength = raw.payload[0];\n validatePayload(raw.payload.length >= 1 + bitMaskLength);\n const supportedSensorTypes: AlarmSensorType[] = parseBitMask(raw.payload.subarray(1, 1 + bitMaskLength), AlarmSensorType[\"General Purpose\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedSensorTypes,\n });\n }\n public supportedSensorTypes: AlarmSensorType[];\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Create metadata for each sensor type\n for (const type of this.supportedSensorTypes) {\n this.createMetadataForSensorType(ctx, type);\n }\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported sensor types\": this.supportedSensorTypes\n .map((t) => getEnumMemberName(AlarmSensorType, t))\n .join(\", \"),\n },\n };\n }\n}\n@CCCommand(AlarmSensorCommand.SupportedGet)\n@expectedCCResponse(AlarmSensorCCSupportedReport)\nexport class AlarmSensorCCSupportedGet extends AlarmSensorCC {\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -481,10 +481,7 @@ let AssociationCCRemove = (() => {
481
481
  groupId;
482
482
  nodeIds;
483
483
  serialize(ctx) {
484
- this.payload = import_shared.Bytes.from([
485
- this.groupId || 0,
486
- ...this.nodeIds || []
487
- ]);
484
+ this.payload = import_shared.Bytes.from([this.groupId || 0, ...this.nodeIds || []]);
488
485
  return super.serialize(ctx);
489
486
  }
490
487
  toLogEntry(ctx) {
@@ -501,7 +498,11 @@ let AssociationCCRemove = (() => {
501
498
  return AssociationCCRemove2 = _classThis;
502
499
  })();
503
500
  let AssociationCCReport = (() => {
504
- let _classDecorators = [(0, import_CommandClassDecorators.CCCommand)(import_Types.AssociationCommand.Report), (0, import_CommandClassDecorators.ccValueProperty)("maxNodes", import_CCValues_generated.AssociationCCValues.maxNodes, (self) => [self.groupId]), (0, import_CommandClassDecorators.ccValueProperty)("nodeIds", import_CCValues_generated.AssociationCCValues.nodeIds, (self) => [self.groupId])];
501
+ let _classDecorators = [(0, import_CommandClassDecorators.CCCommand)(import_Types.AssociationCommand.Report), (0, import_CommandClassDecorators.ccValueProperty)("maxNodes", import_CCValues_generated.AssociationCCValues.maxNodes, (self) => [
502
+ self.groupId
503
+ ]), (0, import_CommandClassDecorators.ccValueProperty)("nodeIds", import_CCValues_generated.AssociationCCValues.nodeIds, (self) => [
504
+ self.groupId
505
+ ])];
505
506
  let _classDescriptor;
506
507
  let _classExtraInitializers = [];
507
508
  let _classThis;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/AssociationCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./AssociationCC._validateArgs.js\";\nconst { validateArgs_AssociationCCAPI_reportGroupCount, validateArgs_AssociationCCAPI_getGroup, validateArgs_AssociationCCAPI_sendReport, validateArgs_AssociationCCAPI_addNodeIds, validateArgs_AssociationCCAPI_removeNodeIds, validateArgs_AssociationCCAPI_removeNodeIdsFromAllGroups, validateArgs_AssociationCCAPI_getSpecificGroup, validateArgs_AssociationCCAPI_reportSpecificGroup } = __validateArgs;\nimport type { GetDeviceConfig } from \"@zwave-js/config\";\nimport { CommandClasses, type EndpointId, type GetValueDB, MAX_NODES, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, type WithAddress, ZWaveError, ZWaveErrorCodes, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\nimport { distinct } from \"alcalzone-shared/arrays\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { type AssociationAddress, AssociationCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport * as ccUtils from \"../lib/utils.js\";\nimport { AssociationCCValues } from \"./_CCValues.generated.js\";\nexport { AssociationCCValues };\n// @noSetValueAPI\n@API(CommandClasses.Association)\nexport class AssociationCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: AssociationCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case AssociationCommand.Get:\n case AssociationCommand.Set:\n case AssociationCommand.Report:\n case AssociationCommand.Remove:\n case AssociationCommand.SupportedGroupingsGet:\n case AssociationCommand.SupportedGroupingsReport:\n return true;\n case AssociationCommand.SpecificGroupGet:\n case AssociationCommand.SpecificGroupReport:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n /**\n * Returns the number of association groups a node supports.\n * Association groups are consecutive, starting at 1.\n */\n public async getGroupCount(): Promise<MaybeNotKnown<number>> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.SupportedGroupingsGet);\n const cc = new AssociationCCSupportedGroupingsGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<AssociationCCSupportedGroupingsReport>(cc, this.commandOptions);\n if (response)\n return response.groupCount;\n }\n @validateArgs_AssociationCCAPI_reportGroupCount()\n public async reportGroupCount(groupCount: number): Promise<void> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.SupportedGroupingsReport);\n const cc = new AssociationCCSupportedGroupingsReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupCount,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Returns information about an association group.\n */\n @validateArgs_AssociationCCAPI_getGroup()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getGroup(groupId: number) {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.Get);\n const cc = new AssociationCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n });\n const response = await this.host.sendCommand<AssociationCCReport>(cc, this.commandOptions);\n if (response) {\n return {\n maxNodes: response.maxNodes,\n nodeIds: response.nodeIds,\n };\n }\n }\n @validateArgs_AssociationCCAPI_sendReport()\n public async sendReport(options: AssociationCCReportOptions): Promise<void> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.Report);\n const cc = new AssociationCCReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Adds new nodes to an association group\n */\n @validateArgs_AssociationCCAPI_addNodeIds()\n public async addNodeIds(groupId: number, ...nodeIds: number[]): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.Set);\n const cc = new AssociationCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n nodeIds,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Removes nodes from an association group\n */\n @validateArgs_AssociationCCAPI_removeNodeIds()\n public async removeNodeIds(options: AssociationCCRemoveOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.Remove);\n // Validate options\n if (!options.groupId) {\n if (this.version === 1) {\n throw new ZWaveError(`Node ${this.endpoint.nodeId} only supports AssociationCC V1 which requires the group Id to be set`, ZWaveErrorCodes.Argument_Invalid);\n }\n }\n else if (options.groupId < 0) {\n throw new ZWaveError(\"The group id must be positive!\", ZWaveErrorCodes.Argument_Invalid);\n }\n const cc = new AssociationCCRemove({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Removes nodes from all association groups\n */\n @validateArgs_AssociationCCAPI_removeNodeIdsFromAllGroups()\n public async removeNodeIdsFromAllGroups(nodeIds: number[]): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.Remove);\n if (this.version >= 2) {\n // The node supports bulk removal\n return this.removeNodeIds({ nodeIds, groupId: 0 });\n }\n else {\n // We have to remove the node manually from all groups\n const groupCount = this.tryGetValueDB()?.getValue<number>(AssociationCCValues.groupCount.endpoint(this.endpoint.index)) ?? 0;\n for (let groupId = 1; groupId <= groupCount; groupId++) {\n // TODO: evaluate intermediate supervision results\n await this.removeNodeIds({ nodeIds, groupId });\n }\n }\n }\n /**\n * Request the association group that represents the most recently detected button press\n */\n @validateArgs_AssociationCCAPI_getSpecificGroup()\n public async getSpecificGroup(): Promise<number | undefined> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.SpecificGroupGet);\n const cc = new AssociationCCSpecificGroupGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<AssociationCCSpecificGroupReport>(cc, this.commandOptions);\n return response?.group;\n }\n /**\n * Report the association group that represents the most recently detected button press\n */\n @validateArgs_AssociationCCAPI_reportSpecificGroup()\n public async reportSpecificGroup(group: number): Promise<void> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.SpecificGroupReport);\n const cc = new AssociationCCSpecificGroupReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n group,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses.Association)\n@implementedVersion(4)\n@ccValues(AssociationCCValues)\nexport class AssociationCC extends CommandClass {\n declare ccCommand: AssociationCommand;\n public determineRequiredCCInterviews(): readonly CommandClasses[] {\n // AssociationCC must be interviewed after Z-Wave+ if that is supported\n return [\n ...super.determineRequiredCCInterviews(),\n CommandClasses[\"Z-Wave Plus Info\"],\n // We need information about endpoints to correctly configure the lifeline associations\n CommandClasses[\"Multi Channel\"],\n ];\n }\n /**\n * Returns the number of association groups reported by the node/endpoint.\n * This only works AFTER the interview process\n */\n public static getGroupCountCached(ctx: GetValueDB, endpoint: EndpointId): number {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(AssociationCCValues.groupCount.endpoint(endpoint.index)) || 0;\n }\n /**\n * Returns the number of nodes an association group supports.\n * This only works AFTER the interview process\n */\n public static getMaxNodesCached(ctx: GetValueDB & GetDeviceConfig, endpoint: EndpointId, groupId: number): number {\n return (ctx\n .getValueDB(endpoint.nodeId)\n .getValue(AssociationCCValues.maxNodes(groupId).endpoint(endpoint.index))\n // If the information is not available, fall back to the configuration file if possible\n // This can happen on some legacy devices which have \"hidden\" association groups\n ?? ctx\n .getDeviceConfig?.(endpoint.nodeId)\n ?.getAssociationConfigForEndpoint(endpoint.index, groupId)\n ?.maxNodes\n ?? 0);\n }\n /**\n * Returns all the destinations of all association groups reported by the node/endpoint.\n * This only works AFTER the interview process\n */\n public static getAllDestinationsCached(ctx: GetValueDB, endpoint: EndpointId): ReadonlyMap<number, readonly AssociationAddress[]> {\n const ret = new Map<number, AssociationAddress[]>();\n const groupCount = this.getGroupCountCached(ctx, endpoint);\n const valueDB = ctx.getValueDB(endpoint.nodeId);\n for (let i = 1; i <= groupCount; i++) {\n // Add all root destinations\n const nodes = valueDB.getValue<number[]>(AssociationCCValues.nodeIds(i).endpoint(endpoint.index)) ?? [];\n ret.set(i, \n // Filter out duplicates\n distinct(nodes).map((nodeId) => ({ nodeId })));\n }\n return ret;\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, 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 // Even if Multi Channel Association is supported, we still need to query the number of\n // normal association groups since some devices report more association groups than\n // multi channel association groups\n // Find out how many groups are supported\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying number of association groups...\",\n direction: \"outbound\",\n });\n const groupCount = await api.getGroupCount();\n if (groupCount != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `supports ${groupCount} association groups`,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying association groups timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n // Query each association group for its members\n await this.refreshValues(ctx, {\n tag: \"interview\",\n onProgress: (completed, total) => node.reportInterviewProgress(completed, total),\n });\n // Skip the remaining Association CC interview in favor of Multi Channel Association if possible\n if (endpoint.supportsCC(CommandClasses[\"Multi Channel Association\"])) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `${this.constructor.name}: delaying configuration of lifeline associations until after Multi Channel Association interview...`,\n direction: \"none\",\n });\n this.setInterviewComplete(ctx, true);\n return;\n }\n // And set up lifeline associations\n await ccUtils.configureLifelineAssociations(ctx, endpoint);\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, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n const groupCount = AssociationCC.getGroupCountCached(ctx, endpoint);\n // Query each association group\n for (let groupId = 1; groupId <= groupCount; groupId++) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying association group #${groupId}...`,\n direction: \"outbound\",\n });\n const group = await api.getGroup(groupId);\n if (group != undefined) {\n const logMessage = `received information for association group #${groupId}:\nmaximum # of nodes: ${group.maxNodes}\ncurrently assigned nodes: ${group.nodeIds.map(String).join(\", \")}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n options?.onProgress?.(groupId, groupCount);\n }\n }\n}\n// @publicAPI\nexport interface AssociationCCSetOptions {\n groupId: number;\n nodeIds: number[];\n}\n@CCCommand(AssociationCommand.Set)\n@useSupervision()\nexport class AssociationCCSet extends AssociationCC {\n public constructor(options: WithAddress<AssociationCCSetOptions>) {\n super(options);\n if (options.groupId < 1) {\n throw new ZWaveError(\"The group id must be positive!\", ZWaveErrorCodes.Argument_Invalid);\n }\n if (options.nodeIds.some((n) => n < 1 || n > MAX_NODES)) {\n throw new ZWaveError(`All node IDs must be between 1 and ${MAX_NODES}!`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.groupId = options.groupId;\n this.nodeIds = options.nodeIds;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationCCSet {\n validatePayload(raw.payload.length >= 2);\n const groupId = raw.payload[0];\n const nodeIds = [...raw.payload.subarray(1)];\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n nodeIds,\n });\n }\n public groupId: number;\n public nodeIds: number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.groupId, ...this.nodeIds]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"group id\": this.groupId || \"all groups\",\n \"node ids\": this.nodeIds.length\n ? this.nodeIds.join(\", \")\n : \"all nodes\",\n };\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface AssociationCCRemoveOptions {\n /** The group from which to remove the nodes. If none is specified, the nodes will be removed from all groups. */\n groupId?: number;\n /** The nodes to remove. If none are specified, ALL nodes will be removed. */\n nodeIds?: number[];\n}\n@CCCommand(AssociationCommand.Remove)\n@useSupervision()\nexport class AssociationCCRemove extends AssociationCC {\n public constructor(options: WithAddress<AssociationCCRemoveOptions>) {\n super(options);\n // When removing associations, we allow invalid node IDs.\n // See GH#3606 - it is possible that those exist.\n this.groupId = options.groupId;\n this.nodeIds = options.nodeIds;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationCCRemove {\n validatePayload(raw.payload.length >= 1);\n let groupId: number | undefined;\n if (raw.payload[0] !== 0) {\n groupId = raw.payload[0];\n }\n const nodeIds = [...raw.payload.subarray(1)];\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n nodeIds,\n });\n }\n public groupId?: number;\n public nodeIds?: number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.groupId || 0,\n ...(this.nodeIds || []),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"group id\": this.groupId || \"all groups\",\n \"node ids\": this.nodeIds && this.nodeIds.length\n ? this.nodeIds.join(\", \")\n : \"all nodes\",\n };\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface AssociationCCReportOptions {\n groupId: number;\n maxNodes: number;\n nodeIds: number[];\n reportsToFollow: number;\n}\n@CCCommand(AssociationCommand.Report)\n@ccValueProperty(\"maxNodes\", AssociationCCValues.maxNodes, (self) => [self.groupId])\n@ccValueProperty(\"nodeIds\", AssociationCCValues.nodeIds, (self) => [self.groupId])\nexport class AssociationCCReport extends AssociationCC {\n public constructor(options: WithAddress<AssociationCCReportOptions>) {\n super(options);\n this.groupId = options.groupId;\n this.maxNodes = options.maxNodes;\n this.nodeIds = options.nodeIds;\n this.reportsToFollow = options.reportsToFollow;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationCCReport {\n validatePayload(raw.payload.length >= 3);\n const groupId = raw.payload[0];\n const maxNodes = raw.payload[1];\n const reportsToFollow = raw.payload[2];\n const nodeIds = [...raw.payload.subarray(3)];\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n maxNodes,\n reportsToFollow,\n nodeIds,\n });\n }\n public groupId: number;\n public maxNodes: number;\n public nodeIds: number[];\n public reportsToFollow: number;\n public getPartialCCSessionId(): Record<string, any> | undefined {\n // Distinguish sessions by the association group ID\n return { groupId: this.groupId };\n }\n public getRemainingSegments(): number | undefined {\n return this.reportsToFollow;\n }\n public mergePartialCCs(partials: AssociationCCReport[], _ctx: CCParsingContext): Promise<void> {\n // Concat the list of nodes\n this.nodeIds = [...partials, this]\n .map((report) => report.nodeIds)\n .reduce((prev, cur) => prev.concat(...cur), []);\n return Promise.resolve();\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.groupId,\n this.maxNodes,\n this.reportsToFollow,\n ...this.nodeIds,\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 \"max # of nodes\": this.maxNodes,\n \"node IDs\": this.nodeIds.join(\", \"),\n \"reports to follow\": this.reportsToFollow,\n },\n };\n }\n}\n// @publicAPI\nexport interface AssociationCCGetOptions {\n groupId: number;\n}\n@CCCommand(AssociationCommand.Get)\n@expectedCCResponse(AssociationCCReport)\nexport class AssociationCCGet extends AssociationCC {\n public constructor(options: WithAddress<AssociationCCGetOptions>) {\n super(options);\n if (options.groupId < 1) {\n throw new ZWaveError(\"The group id must be positive!\", ZWaveErrorCodes.Argument_Invalid);\n }\n this.groupId = options.groupId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationCCGet {\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 AssociationCCSupportedGroupingsReportOptions {\n groupCount: number;\n}\n@CCCommand(AssociationCommand.SupportedGroupingsReport)\n@ccValueProperty(\"groupCount\", AssociationCCValues.groupCount)\nexport class AssociationCCSupportedGroupingsReport extends AssociationCC {\n public constructor(options: WithAddress<AssociationCCSupportedGroupingsReportOptions>) {\n super(options);\n this.groupCount = options.groupCount;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationCCSupportedGroupingsReport {\n validatePayload(raw.payload.length >= 1);\n const groupCount = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n groupCount,\n });\n }\n public groupCount: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.groupCount]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"group count\": this.groupCount },\n };\n }\n}\n@CCCommand(AssociationCommand.SupportedGroupingsGet)\n@expectedCCResponse(AssociationCCSupportedGroupingsReport)\nexport class AssociationCCSupportedGroupingsGet extends AssociationCC {\n}\n// @publicAPI\nexport interface AssociationCCSpecificGroupReportOptions {\n group: number;\n}\n@CCCommand(AssociationCommand.SpecificGroupReport)\nexport class AssociationCCSpecificGroupReport extends AssociationCC {\n public constructor(options: WithAddress<AssociationCCSpecificGroupReportOptions>) {\n super(options);\n this.group = options.group;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationCCSpecificGroupReport {\n validatePayload(raw.payload.length >= 1);\n const group = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n group,\n });\n }\n public group: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.group]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { group: this.group },\n };\n }\n}\n@CCCommand(AssociationCommand.SpecificGroupGet)\n@expectedCCResponse(AssociationCCSpecificGroupReport)\nexport class AssociationCCSpecificGroupGet extends AssociationCC {\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./AssociationCC._validateArgs.js\";\nconst { validateArgs_AssociationCCAPI_reportGroupCount, validateArgs_AssociationCCAPI_getGroup, validateArgs_AssociationCCAPI_sendReport, validateArgs_AssociationCCAPI_addNodeIds, validateArgs_AssociationCCAPI_removeNodeIds, validateArgs_AssociationCCAPI_removeNodeIdsFromAllGroups, validateArgs_AssociationCCAPI_getSpecificGroup, validateArgs_AssociationCCAPI_reportSpecificGroup } = __validateArgs;\nimport type { GetDeviceConfig } from \"@zwave-js/config\";\nimport { CommandClasses, type EndpointId, type GetValueDB, MAX_NODES, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, type WithAddress, ZWaveError, ZWaveErrorCodes, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\nimport { distinct } from \"alcalzone-shared/arrays\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { type AssociationAddress, AssociationCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport * as ccUtils from \"../lib/utils.js\";\nimport { AssociationCCValues } from \"./_CCValues.generated.js\";\nexport { AssociationCCValues };\n// @noSetValueAPI\n@API(CommandClasses.Association)\nexport class AssociationCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: AssociationCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case AssociationCommand.Get:\n case AssociationCommand.Set:\n case AssociationCommand.Report:\n case AssociationCommand.Remove:\n case AssociationCommand.SupportedGroupingsGet:\n case AssociationCommand.SupportedGroupingsReport:\n return true;\n case AssociationCommand.SpecificGroupGet:\n case AssociationCommand.SpecificGroupReport:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n /**\n * Returns the number of association groups a node supports.\n * Association groups are consecutive, starting at 1.\n */\n public async getGroupCount(): Promise<MaybeNotKnown<number>> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.SupportedGroupingsGet);\n const cc = new AssociationCCSupportedGroupingsGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<AssociationCCSupportedGroupingsReport>(cc, this.commandOptions);\n if (response)\n return response.groupCount;\n }\n @validateArgs_AssociationCCAPI_reportGroupCount()\n public async reportGroupCount(groupCount: number): Promise<void> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.SupportedGroupingsReport);\n const cc = new AssociationCCSupportedGroupingsReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupCount,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Returns information about an association group.\n */\n @validateArgs_AssociationCCAPI_getGroup()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getGroup(groupId: number) {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.Get);\n const cc = new AssociationCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n });\n const response = await this.host.sendCommand<AssociationCCReport>(cc, this.commandOptions);\n if (response) {\n return {\n maxNodes: response.maxNodes,\n nodeIds: response.nodeIds,\n };\n }\n }\n @validateArgs_AssociationCCAPI_sendReport()\n public async sendReport(options: AssociationCCReportOptions): Promise<void> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.Report);\n const cc = new AssociationCCReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Adds new nodes to an association group\n */\n @validateArgs_AssociationCCAPI_addNodeIds()\n public async addNodeIds(groupId: number, ...nodeIds: number[]): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.Set);\n const cc = new AssociationCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n nodeIds,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Removes nodes from an association group\n */\n @validateArgs_AssociationCCAPI_removeNodeIds()\n public async removeNodeIds(options: AssociationCCRemoveOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.Remove);\n // Validate options\n if (!options.groupId) {\n if (this.version === 1) {\n throw new ZWaveError(`Node ${this.endpoint.nodeId} only supports AssociationCC V1 which requires the group Id to be set`, ZWaveErrorCodes.Argument_Invalid);\n }\n }\n else if (options.groupId < 0) {\n throw new ZWaveError(\"The group id must be positive!\", ZWaveErrorCodes.Argument_Invalid);\n }\n const cc = new AssociationCCRemove({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Removes nodes from all association groups\n */\n @validateArgs_AssociationCCAPI_removeNodeIdsFromAllGroups()\n public async removeNodeIdsFromAllGroups(nodeIds: number[]): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.Remove);\n if (this.version >= 2) {\n // The node supports bulk removal\n return this.removeNodeIds({ nodeIds, groupId: 0 });\n }\n else {\n // We have to remove the node manually from all groups\n const groupCount = this.tryGetValueDB()?.getValue<number>(AssociationCCValues.groupCount.endpoint(this.endpoint.index)) ?? 0;\n for (let groupId = 1; groupId <= groupCount; groupId++) {\n // TODO: evaluate intermediate supervision results\n await this.removeNodeIds({ nodeIds, groupId });\n }\n }\n }\n /**\n * Request the association group that represents the most recently detected button press\n */\n @validateArgs_AssociationCCAPI_getSpecificGroup()\n public async getSpecificGroup(): Promise<number | undefined> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.SpecificGroupGet);\n const cc = new AssociationCCSpecificGroupGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<AssociationCCSpecificGroupReport>(cc, this.commandOptions);\n return response?.group;\n }\n /**\n * Report the association group that represents the most recently detected button press\n */\n @validateArgs_AssociationCCAPI_reportSpecificGroup()\n public async reportSpecificGroup(group: number): Promise<void> {\n this.assertSupportsCommand(AssociationCommand, AssociationCommand.SpecificGroupReport);\n const cc = new AssociationCCSpecificGroupReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n group,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses.Association)\n@implementedVersion(4)\n@ccValues(AssociationCCValues)\nexport class AssociationCC extends CommandClass {\n declare ccCommand: AssociationCommand;\n public determineRequiredCCInterviews(): readonly CommandClasses[] {\n // AssociationCC must be interviewed after Z-Wave+ if that is supported\n return [\n ...super.determineRequiredCCInterviews(),\n CommandClasses[\"Z-Wave Plus Info\"],\n // We need information about endpoints to correctly configure the lifeline associations\n CommandClasses[\"Multi Channel\"],\n ];\n }\n /**\n * Returns the number of association groups reported by the node/endpoint.\n * This only works AFTER the interview process\n */\n public static getGroupCountCached(ctx: GetValueDB, endpoint: EndpointId): number {\n return (ctx\n .getValueDB(endpoint.nodeId)\n .getValue(AssociationCCValues.groupCount.endpoint(endpoint.index)) || 0);\n }\n /**\n * Returns the number of nodes an association group supports.\n * This only works AFTER the interview process\n */\n public static getMaxNodesCached(ctx: GetValueDB & GetDeviceConfig, endpoint: EndpointId, groupId: number): number {\n return (ctx\n .getValueDB(endpoint.nodeId)\n .getValue(AssociationCCValues.maxNodes(groupId).endpoint(endpoint.index))\n // If the information is not available, fall back to the configuration file if possible\n // This can happen on some legacy devices which have \"hidden\" association groups\n ?? ctx\n .getDeviceConfig?.(endpoint.nodeId)\n ?.getAssociationConfigForEndpoint(endpoint.index, groupId)\n ?.maxNodes\n ?? 0);\n }\n /**\n * Returns all the destinations of all association groups reported by the node/endpoint.\n * This only works AFTER the interview process\n */\n public static getAllDestinationsCached(ctx: GetValueDB, endpoint: EndpointId): ReadonlyMap<number, readonly AssociationAddress[]> {\n const ret = new Map<number, AssociationAddress[]>();\n const groupCount = this.getGroupCountCached(ctx, endpoint);\n const valueDB = ctx.getValueDB(endpoint.nodeId);\n for (let i = 1; i <= groupCount; i++) {\n // Add all root destinations\n const nodes = valueDB.getValue<number[]>(AssociationCCValues.nodeIds(i).endpoint(endpoint.index)) ?? [];\n ret.set(i, \n // Filter out duplicates\n distinct(nodes).map((nodeId) => ({ nodeId })));\n }\n return ret;\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, 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 // Even if Multi Channel Association is supported, we still need to query the number of\n // normal association groups since some devices report more association groups than\n // multi channel association groups\n // Find out how many groups are supported\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying number of association groups...\",\n direction: \"outbound\",\n });\n const groupCount = await api.getGroupCount();\n if (groupCount != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `supports ${groupCount} association groups`,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying association groups timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n // Query each association group for its members\n await this.refreshValues(ctx, {\n tag: \"interview\",\n onProgress: (completed, total) => node.reportInterviewProgress(completed, total),\n });\n // Skip the remaining Association CC interview in favor of Multi Channel Association if possible\n if (endpoint.supportsCC(CommandClasses[\"Multi Channel Association\"])) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `${this.constructor.name}: delaying configuration of lifeline associations until after Multi Channel Association interview...`,\n direction: \"none\",\n });\n this.setInterviewComplete(ctx, true);\n return;\n }\n // And set up lifeline associations\n await ccUtils.configureLifelineAssociations(ctx, endpoint);\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, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n const groupCount = AssociationCC.getGroupCountCached(ctx, endpoint);\n // Query each association group\n for (let groupId = 1; groupId <= groupCount; groupId++) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying association group #${groupId}...`,\n direction: \"outbound\",\n });\n const group = await api.getGroup(groupId);\n if (group != undefined) {\n const logMessage = `received information for association group #${groupId}:\nmaximum # of nodes: ${group.maxNodes}\ncurrently assigned nodes: ${group.nodeIds.map(String).join(\", \")}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n options?.onProgress?.(groupId, groupCount);\n }\n }\n}\n// @publicAPI\nexport interface AssociationCCSetOptions {\n groupId: number;\n nodeIds: number[];\n}\n@CCCommand(AssociationCommand.Set)\n@useSupervision()\nexport class AssociationCCSet extends AssociationCC {\n public constructor(options: WithAddress<AssociationCCSetOptions>) {\n super(options);\n if (options.groupId < 1) {\n throw new ZWaveError(\"The group id must be positive!\", ZWaveErrorCodes.Argument_Invalid);\n }\n if (options.nodeIds.some((n) => n < 1 || n > MAX_NODES)) {\n throw new ZWaveError(`All node IDs must be between 1 and ${MAX_NODES}!`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.groupId = options.groupId;\n this.nodeIds = options.nodeIds;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationCCSet {\n validatePayload(raw.payload.length >= 2);\n const groupId = raw.payload[0];\n const nodeIds = [...raw.payload.subarray(1)];\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n nodeIds,\n });\n }\n public groupId: number;\n public nodeIds: number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.groupId, ...this.nodeIds]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"group id\": this.groupId || \"all groups\",\n \"node ids\": this.nodeIds.length\n ? this.nodeIds.join(\", \")\n : \"all nodes\",\n };\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface AssociationCCRemoveOptions {\n /** The group from which to remove the nodes. If none is specified, the nodes will be removed from all groups. */\n groupId?: number;\n /** The nodes to remove. If none are specified, ALL nodes will be removed. */\n nodeIds?: number[];\n}\n@CCCommand(AssociationCommand.Remove)\n@useSupervision()\nexport class AssociationCCRemove extends AssociationCC {\n public constructor(options: WithAddress<AssociationCCRemoveOptions>) {\n super(options);\n // When removing associations, we allow invalid node IDs.\n // See GH#3606 - it is possible that those exist.\n this.groupId = options.groupId;\n this.nodeIds = options.nodeIds;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationCCRemove {\n validatePayload(raw.payload.length >= 1);\n let groupId: number | undefined;\n if (raw.payload[0] !== 0) {\n groupId = raw.payload[0];\n }\n const nodeIds = [...raw.payload.subarray(1)];\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n nodeIds,\n });\n }\n public groupId?: number;\n public nodeIds?: number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.groupId || 0, ...(this.nodeIds || [])]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"group id\": this.groupId || \"all groups\",\n \"node ids\": this.nodeIds && this.nodeIds.length\n ? this.nodeIds.join(\", \")\n : \"all nodes\",\n };\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface AssociationCCReportOptions {\n groupId: number;\n maxNodes: number;\n nodeIds: number[];\n reportsToFollow: number;\n}\n@CCCommand(AssociationCommand.Report)\n@ccValueProperty(\"maxNodes\", AssociationCCValues.maxNodes, (self) => [\n self.groupId,\n])\n@ccValueProperty(\"nodeIds\", AssociationCCValues.nodeIds, (self) => [\n self.groupId,\n])\nexport class AssociationCCReport extends AssociationCC {\n public constructor(options: WithAddress<AssociationCCReportOptions>) {\n super(options);\n this.groupId = options.groupId;\n this.maxNodes = options.maxNodes;\n this.nodeIds = options.nodeIds;\n this.reportsToFollow = options.reportsToFollow;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationCCReport {\n validatePayload(raw.payload.length >= 3);\n const groupId = raw.payload[0];\n const maxNodes = raw.payload[1];\n const reportsToFollow = raw.payload[2];\n const nodeIds = [...raw.payload.subarray(3)];\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n maxNodes,\n reportsToFollow,\n nodeIds,\n });\n }\n public groupId: number;\n public maxNodes: number;\n public nodeIds: number[];\n public reportsToFollow: number;\n public getPartialCCSessionId(): Record<string, any> | undefined {\n // Distinguish sessions by the association group ID\n return { groupId: this.groupId };\n }\n public getRemainingSegments(): number | undefined {\n return this.reportsToFollow;\n }\n public mergePartialCCs(partials: AssociationCCReport[], _ctx: CCParsingContext): Promise<void> {\n // Concat the list of nodes\n this.nodeIds = [...partials, this]\n .map((report) => report.nodeIds)\n .reduce((prev, cur) => prev.concat(...cur), []);\n return Promise.resolve();\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.groupId,\n this.maxNodes,\n this.reportsToFollow,\n ...this.nodeIds,\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 \"max # of nodes\": this.maxNodes,\n \"node IDs\": this.nodeIds.join(\", \"),\n \"reports to follow\": this.reportsToFollow,\n },\n };\n }\n}\n// @publicAPI\nexport interface AssociationCCGetOptions {\n groupId: number;\n}\n@CCCommand(AssociationCommand.Get)\n@expectedCCResponse(AssociationCCReport)\nexport class AssociationCCGet extends AssociationCC {\n public constructor(options: WithAddress<AssociationCCGetOptions>) {\n super(options);\n if (options.groupId < 1) {\n throw new ZWaveError(\"The group id must be positive!\", ZWaveErrorCodes.Argument_Invalid);\n }\n this.groupId = options.groupId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationCCGet {\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 AssociationCCSupportedGroupingsReportOptions {\n groupCount: number;\n}\n@CCCommand(AssociationCommand.SupportedGroupingsReport)\n@ccValueProperty(\"groupCount\", AssociationCCValues.groupCount)\nexport class AssociationCCSupportedGroupingsReport extends AssociationCC {\n public constructor(options: WithAddress<AssociationCCSupportedGroupingsReportOptions>) {\n super(options);\n this.groupCount = options.groupCount;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationCCSupportedGroupingsReport {\n validatePayload(raw.payload.length >= 1);\n const groupCount = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n groupCount,\n });\n }\n public groupCount: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.groupCount]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { \"group count\": this.groupCount },\n };\n }\n}\n@CCCommand(AssociationCommand.SupportedGroupingsGet)\n@expectedCCResponse(AssociationCCSupportedGroupingsReport)\nexport class AssociationCCSupportedGroupingsGet extends AssociationCC {\n}\n// @publicAPI\nexport interface AssociationCCSpecificGroupReportOptions {\n group: number;\n}\n@CCCommand(AssociationCommand.SpecificGroupReport)\nexport class AssociationCCSpecificGroupReport extends AssociationCC {\n public constructor(options: WithAddress<AssociationCCSpecificGroupReportOptions>) {\n super(options);\n this.group = options.group;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): AssociationCCSpecificGroupReport {\n validatePayload(raw.payload.length >= 1);\n const group = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n group,\n });\n }\n public group: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.group]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { group: this.group },\n };\n }\n}\n@CCCommand(AssociationCommand.SpecificGroupGet)\n@expectedCCResponse(AssociationCCSpecificGroupReport)\nexport class AssociationCCSpecificGroupGet extends AssociationCC {\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["AssociationCC"]
7
7
  }
@@ -570,10 +570,7 @@ let AssociationGroupInfoCCInfoGet = (() => {
570
570
  serialize(ctx) {
571
571
  const isListMode = this.listMode === true;
572
572
  const optionByte = (this.refreshCache ? 128 : 0) | (isListMode ? 64 : 0);
573
- this.payload = import_shared.Bytes.from([
574
- optionByte,
575
- isListMode ? 0 : this.groupId
576
- ]);
573
+ this.payload = import_shared.Bytes.from([optionByte, isListMode ? 0 : this.groupId]);
577
574
  return super.serialize(ctx);
578
575
  }
579
576
  toLogEntry(ctx) {
@@ -594,7 +591,9 @@ let AssociationGroupInfoCCInfoGet = (() => {
594
591
  return AssociationGroupInfoCCInfoGet2 = _classThis;
595
592
  })();
596
593
  let AssociationGroupInfoCCCommandListReport = (() => {
597
- let _classDecorators = [(0, import_CommandClassDecorators.CCCommand)(import_Types.AssociationGroupInfoCommand.CommandListReport), (0, import_CommandClassDecorators.ccValueProperty)("commands", import_CCValues_generated.AssociationGroupInfoCCValues.commands, (self) => [self.groupId])];
594
+ let _classDecorators = [(0, import_CommandClassDecorators.CCCommand)(import_Types.AssociationGroupInfoCommand.CommandListReport), (0, import_CommandClassDecorators.ccValueProperty)("commands", import_CCValues_generated.AssociationGroupInfoCCValues.commands, (self) => [
595
+ self.groupId
596
+ ])];
598
597
  let _classDescriptor;
599
598
  let _classExtraInitializers = [];
600
599
  let _classThis;
@@ -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, 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 this.payload = this.payload.subarray(0, offset);\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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",
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.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.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] =\n (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([optionByte, isListMode ? 0 : this.groupId!]);\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) => [\n self.groupId,\n])\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 this.payload = this.payload.subarray(0, offset);\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
  }