@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/MultiChannelAssociationCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./MultiChannelAssociationCC._validateArgs.js\";\nconst { validateArgs_MultiChannelAssociationCCAPI_reportGroupCount, validateArgs_MultiChannelAssociationCCAPI_getGroup, validateArgs_MultiChannelAssociationCCAPI_sendReport, validateArgs_MultiChannelAssociationCCAPI_addDestinations, validateArgs_MultiChannelAssociationCCAPI_removeDestinations } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, MAX_NODES, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, type BytesView, pick } from \"@zwave-js/shared\";\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, type EndpointAddress, MultiChannelAssociationCommand, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport * as ccUtils from \"../lib/utils.js\";\nimport { AssociationCCValues } from \"./AssociationCC.js\";\nimport { MultiChannelAssociationCCValues } from \"./_CCValues.generated.js\";\nexport { MultiChannelAssociationCCValues };\nfunction endpointAddressesToString(endpoints: readonly EndpointAddress[]): string {\n return endpoints\n .map(({ nodeId, endpoint }) => {\n if (typeof endpoint === \"number\") {\n return `${nodeId}:${endpoint}`;\n }\n else {\n return `${nodeId}:[${endpoint.map(String).join(\", \")}]`;\n }\n })\n .join(\", \");\n}\nconst MULTI_CHANNEL_ASSOCIATION_MARKER = 0x00;\nfunction serializeMultiChannelAssociationDestination(nodeIds: number[], endpoints: EndpointAddress[]): Bytes {\n const nodeAddressBytes = nodeIds.length;\n const endpointAddressBytes = endpoints.length * 2;\n const payload = new Bytes(\n // node addresses\n nodeAddressBytes\n // endpoint marker\n + (endpointAddressBytes > 0 ? 1 : 0)\n // endpoints\n + endpointAddressBytes);\n // write node addresses\n for (let i = 0; i < nodeIds.length; i++) {\n payload[i] = nodeIds[i];\n }\n // write endpoint addresses\n if (endpointAddressBytes > 0) {\n let offset = nodeIds.length;\n payload[offset] = MULTI_CHANNEL_ASSOCIATION_MARKER;\n offset += 1;\n for (let i = 0; i < endpoints.length; i++) {\n const endpoint = endpoints[i];\n const destination = typeof endpoint.endpoint === \"number\"\n // The destination is a single number\n ? endpoint.endpoint & 127\n // The destination is a bit mask\n : encodeBitMask(endpoint.endpoint, 7)[0] | 128;\n payload[offset + 2 * i] = endpoint.nodeId;\n payload[offset + 2 * i + 1] = destination;\n }\n }\n return payload;\n}\nfunction deserializeMultiChannelAssociationDestination(data: BytesView): {\n nodeIds: number[];\n endpoints: EndpointAddress[];\n} {\n const nodeIds: number[] = [];\n let endpointOffset = data.length;\n // Scan node ids until we find the marker\n for (let i = 0; i < data.length; i++) {\n if (data[i] === MULTI_CHANNEL_ASSOCIATION_MARKER) {\n endpointOffset = i + 1;\n break;\n }\n nodeIds.push(data[i]);\n }\n const endpoints: EndpointAddress[] = [];\n // Each endpoint destination is a (node id, endpoint) pair; stop when a\n // full pair is no longer available so a dangling trailing byte is ignored\n for (let i = endpointOffset; i + 1 < data.length; i += 2) {\n const nodeId = data[i];\n const isBitMask = !!(data[i + 1] & 128);\n const destination = data[i + 1] & 127;\n const endpoint = isBitMask\n ? parseBitMask(Bytes.from([destination]))\n : destination;\n endpoints.push({ nodeId, endpoint });\n }\n return { nodeIds, endpoints };\n}\n// @noSetValueAPI\n@API(CommandClasses[\"Multi Channel Association\"])\nexport class MultiChannelAssociationCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: MultiChannelAssociationCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case MultiChannelAssociationCommand.Get:\n case MultiChannelAssociationCommand.Set:\n case MultiChannelAssociationCommand.Report:\n case MultiChannelAssociationCommand.Remove:\n case MultiChannelAssociationCommand.SupportedGroupingsGet:\n case MultiChannelAssociationCommand.SupportedGroupingsReport:\n return true; // This is mandatory\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(MultiChannelAssociationCommand, MultiChannelAssociationCommand.SupportedGroupingsGet);\n const cc = new MultiChannelAssociationCCSupportedGroupingsGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<MultiChannelAssociationCCSupportedGroupingsReport>(cc, this.commandOptions);\n return response?.groupCount;\n }\n @validateArgs_MultiChannelAssociationCCAPI_reportGroupCount()\n public async reportGroupCount(groupCount: number): Promise<void> {\n this.assertSupportsCommand(MultiChannelAssociationCommand, MultiChannelAssociationCommand.SupportedGroupingsReport);\n const cc = new MultiChannelAssociationCCSupportedGroupingsReport({\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_MultiChannelAssociationCCAPI_getGroup()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getGroup(groupId: number) {\n this.assertSupportsCommand(MultiChannelAssociationCommand, MultiChannelAssociationCommand.Get);\n const cc = new MultiChannelAssociationCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n });\n const response = await this.host.sendCommand<MultiChannelAssociationCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"maxNodes\", \"nodeIds\", \"endpoints\"]);\n }\n }\n @validateArgs_MultiChannelAssociationCCAPI_sendReport()\n public async sendReport(options: MultiChannelAssociationCCReportOptions): Promise<void> {\n this.assertSupportsCommand(MultiChannelAssociationCommand, MultiChannelAssociationCommand.Report);\n const cc = new MultiChannelAssociationCCReport({\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 or endpoints to an association group\n */\n @validateArgs_MultiChannelAssociationCCAPI_addDestinations()\n public async addDestinations(options: MultiChannelAssociationCCSetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MultiChannelAssociationCommand, MultiChannelAssociationCommand.Set);\n const cc = new MultiChannelAssociationCCSet({\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 or endpoints from an association group\n */\n @validateArgs_MultiChannelAssociationCCAPI_removeDestinations()\n public async removeDestinations(options: MultiChannelAssociationCCRemoveOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MultiChannelAssociationCommand, MultiChannelAssociationCommand.Remove);\n if (!options.groupId && this.version === 1) {\n // V1 does not support omitting the group, manually remove the destination from all groups\n // We don't want to do too much work, so find out which groups the destination is in\n const currentDestinations = MultiChannelAssociationCC\n .getAllDestinationsCached(this.host, this.endpoint);\n for (const [group, destinations] of currentDestinations) {\n const cc = new MultiChannelAssociationCCRemove({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId: group,\n nodeIds: destinations\n .filter((d) => d.endpoint != undefined)\n .map((d) => d.nodeId),\n endpoints: destinations.filter((d): d is AssociationAddress & {\n endpoint: number;\n } => d.endpoint != undefined),\n });\n // TODO: evaluate intermediate supervision results\n await this.host.sendCommand(cc, this.commandOptions);\n }\n }\n else if (options.groupId && options.groupId < 0) {\n throw new ZWaveError(\"The group id must not be negative!\", ZWaveErrorCodes.Argument_Invalid);\n }\n else {\n const cc = new MultiChannelAssociationCCRemove({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n }\n}\n@commandClass(CommandClasses[\"Multi Channel Association\"])\n@implementedVersion(5)\n@ccValues(MultiChannelAssociationCCValues)\nexport class MultiChannelAssociationCC extends CommandClass {\n declare ccCommand: MultiChannelAssociationCommand;\n public determineRequiredCCInterviews(): readonly CommandClasses[] {\n // MultiChannelAssociationCC 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 // AssociationCC will short-circuit if this CC is supported\n CommandClasses.Association,\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(MultiChannelAssociationCCValues.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, endpoint: EndpointId, groupId: number): number {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(MultiChannelAssociationCCValues.maxNodes(groupId).endpoint(endpoint.index)) ?? 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 const groupDestinations: AssociationAddress[] = [];\n // Add all node destinations\n const nodes = valueDB.getValue<number[]>(MultiChannelAssociationCCValues.nodeIds(i).endpoint(endpoint.index)) ?? [];\n groupDestinations.push(...nodes.map((nodeId) => ({ nodeId })));\n // And all endpoint destinations\n const endpoints = valueDB.getValue<EndpointAddress[]>(MultiChannelAssociationCCValues.endpoints(i).endpoint(endpoint.index)) ?? [];\n for (const ep of endpoints) {\n if (typeof ep.endpoint === \"number\") {\n groupDestinations.push({\n nodeId: ep.nodeId,\n endpoint: ep.endpoint,\n });\n }\n else {\n groupDestinations.push(...ep.endpoint.map((e) => ({\n nodeId: ep.nodeId,\n endpoint: e,\n })));\n }\n }\n ret.set(i, \n // Filter out duplicates\n groupDestinations.filter((addr, index) => index\n === groupDestinations.findIndex(({ nodeId, endpoint }) => nodeId === addr.nodeId\n && endpoint === addr.endpoint)));\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 mcAPI = CCAPI.create(CommandClasses[\"Multi Channel Association\"], ctx, endpoint);\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // First find out how many groups are supported as multi channel\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying number of multi channel association groups...\",\n direction: \"outbound\",\n });\n const mcGroupCount = await mcAPI.getGroupCount();\n if (mcGroupCount != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `supports ${mcGroupCount} multi channel association groups`,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying multi channel 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 // 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 mcAPI = CCAPI.create(CommandClasses[\"Multi Channel Association\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n const assocAPI = CCAPI.create(CommandClasses.Association, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n const mcGroupCount: number = this.getValue(ctx, MultiChannelAssociationCCValues.groupCount) ?? 0;\n // Some devices report more association groups than multi channel association groups, so we need this info here\n const assocGroupCount: number = this.getValue(ctx, AssociationCCValues.groupCount)\n || mcGroupCount;\n // Then query each multi channel association group\n for (let groupId = 1; groupId <= mcGroupCount; groupId++) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying multi channel association group #${groupId}...`,\n direction: \"outbound\",\n });\n const group = await mcAPI.getGroup(groupId);\n if (!group)\n continue;\n const logMessage = `received information for multi channel association group #${groupId}:\nmaximum # of nodes: ${group.maxNodes}\ncurrently assigned nodes: ${group.nodeIds.map(String).join(\", \")}\ncurrently assigned endpoints: ${group.endpoints\n .map(({ nodeId, endpoint }) => {\n if (typeof endpoint === \"number\") {\n return `${nodeId}:${endpoint}`;\n }\n else {\n return `${nodeId}:[${endpoint.map(String).join(\", \")}]`;\n }\n })\n .join(\"\")}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n options?.onProgress?.(groupId, mcGroupCount);\n }\n // Check if there are more non-multi-channel association groups we haven't queried yet\n if (assocAPI.isSupported() && assocGroupCount > mcGroupCount) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying additional non-multi-channel association groups...`,\n direction: \"outbound\",\n });\n for (let groupId = mcGroupCount + 1; groupId <= assocGroupCount; groupId++) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying association group #${groupId}...`,\n direction: \"outbound\",\n });\n const group = await assocAPI.getGroup(groupId);\n if (!group)\n continue;\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 }\n }\n}\n// @publicAPI\nexport type MultiChannelAssociationCCSetOptions = {\n groupId: number;\n} & ({\n nodeIds: number[];\n} | {\n endpoints: EndpointAddress[];\n} | {\n nodeIds: number[];\n endpoints: EndpointAddress[];\n});\n@CCCommand(MultiChannelAssociationCommand.Set)\n@useSupervision()\nexport class MultiChannelAssociationCCSet extends MultiChannelAssociationCC {\n public constructor(options: WithAddress<MultiChannelAssociationCCSetOptions>) {\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 this.nodeIds = (\"nodeIds\" in options && options.nodeIds) || [];\n if (this.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.endpoints = (\"endpoints\" in options && options.endpoints)\n || [];\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelAssociationCCSet {\n validatePayload(raw.payload.length >= 1);\n const groupId = raw.payload[0];\n const { nodeIds, endpoints } = deserializeMultiChannelAssociationDestination(raw.payload.subarray(1));\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n nodeIds,\n endpoints,\n });\n }\n public groupId: number;\n public nodeIds: number[];\n public endpoints: EndpointAddress[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.groupId],\n serializeMultiChannelAssociationDestination(this.nodeIds, this.endpoints),\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 \"node ids\": this.nodeIds.join(\", \"),\n endpoints: endpointAddressesToString(this.endpoints),\n },\n };\n }\n}\n// @publicAPI\nexport interface MultiChannelAssociationCCRemoveOptions {\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 no nodeIds and no endpoint addresses are specified, ALL nodes will be removed. */\n nodeIds?: number[];\n /** The single endpoints to remove. If no nodeIds and no endpoint addresses are specified, ALL will be removed. */\n endpoints?: EndpointAddress[];\n}\n@CCCommand(MultiChannelAssociationCommand.Remove)\n@useSupervision()\nexport class MultiChannelAssociationCCRemove extends MultiChannelAssociationCC {\n public constructor(options: WithAddress<MultiChannelAssociationCCRemoveOptions>) {\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 this.endpoints = options.endpoints;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelAssociationCCRemove {\n validatePayload(raw.payload.length >= 1);\n const groupId: number | undefined = raw.payload[0];\n const { nodeIds, endpoints } = deserializeMultiChannelAssociationDestination(raw.payload.subarray(1));\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n nodeIds,\n endpoints,\n });\n }\n public groupId?: number;\n public nodeIds?: number[];\n public endpoints?: EndpointAddress[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.groupId || 0],\n serializeMultiChannelAssociationDestination(this.nodeIds || [], this.endpoints || []),\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 };\n if (this.nodeIds) {\n message[\"node ids\"] = this.nodeIds.join(\", \");\n }\n if (this.endpoints) {\n message.endpoints = endpointAddressesToString(this.endpoints);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface MultiChannelAssociationCCReportOptions {\n groupId: number;\n maxNodes: number;\n nodeIds: number[];\n endpoints: EndpointAddress[];\n reportsToFollow: number;\n}\n@CCCommand(MultiChannelAssociationCommand.Report)\n@ccValueProperty(\"maxNodes\", MultiChannelAssociationCCValues.maxNodes, (self) => [self.groupId])\n@ccValueProperty(\"nodeIds\", MultiChannelAssociationCCValues.nodeIds, (self) => [self.groupId])\n@ccValueProperty(\"endpoints\", MultiChannelAssociationCCValues.endpoints, (self) => [self.groupId])\nexport class MultiChannelAssociationCCReport extends MultiChannelAssociationCC {\n public constructor(options: WithAddress<MultiChannelAssociationCCReportOptions>) {\n super(options);\n this.groupId = options.groupId;\n this.maxNodes = options.maxNodes;\n this.nodeIds = options.nodeIds;\n this.endpoints = options.endpoints;\n this.reportsToFollow = options.reportsToFollow;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelAssociationCCReport {\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, endpoints } = deserializeMultiChannelAssociationDestination(raw.payload.subarray(3));\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n maxNodes,\n nodeIds,\n endpoints,\n reportsToFollow,\n });\n }\n public readonly groupId: number;\n public maxNodes: number;\n public nodeIds: number[];\n public endpoints: EndpointAddress[];\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: MultiChannelAssociationCCReport[], _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 // Concat the list of endpoints\n this.endpoints = [...partials, this]\n .map((report) => [...report.endpoints])\n .reduce((prev, cur) => prev.concat(...cur), []);\n return Promise.resolve();\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const destinations = serializeMultiChannelAssociationDestination(this.nodeIds, this.endpoints);\n this.payload = Bytes.concat([\n [\n this.groupId,\n this.maxNodes,\n this.reportsToFollow,\n ],\n destinations,\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 \"maximum # of nodes\": this.maxNodes,\n \"node ids\": this.nodeIds.join(\", \"),\n endpoints: endpointAddressesToString(this.endpoints),\n },\n };\n }\n}\n// @publicAPI\nexport interface MultiChannelAssociationCCGetOptions {\n groupId: number;\n}\n@CCCommand(MultiChannelAssociationCommand.Get)\n@expectedCCResponse(MultiChannelAssociationCCReport)\nexport class MultiChannelAssociationCCGet extends MultiChannelAssociationCC {\n public constructor(options: WithAddress<MultiChannelAssociationCCGetOptions>) {\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): MultiChannelAssociationCCGet {\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 MultiChannelAssociationCCSupportedGroupingsReportOptions {\n groupCount: number;\n}\n@CCCommand(MultiChannelAssociationCommand.SupportedGroupingsReport)\n@ccValueProperty(\"groupCount\", MultiChannelAssociationCCValues.groupCount)\nexport class MultiChannelAssociationCCSupportedGroupingsReport extends MultiChannelAssociationCC {\n public constructor(options: WithAddress<MultiChannelAssociationCCSupportedGroupingsReportOptions>) {\n super(options);\n this.groupCount = options.groupCount;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelAssociationCCSupportedGroupingsReport {\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 readonly 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(MultiChannelAssociationCommand.SupportedGroupingsGet)\n@expectedCCResponse(MultiChannelAssociationCCSupportedGroupingsReport)\nexport class MultiChannelAssociationCCSupportedGroupingsGet extends MultiChannelAssociationCC {\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./MultiChannelAssociationCC._validateArgs.js\";\nconst { validateArgs_MultiChannelAssociationCCAPI_reportGroupCount, validateArgs_MultiChannelAssociationCCAPI_getGroup, validateArgs_MultiChannelAssociationCCAPI_sendReport, validateArgs_MultiChannelAssociationCCAPI_addDestinations, validateArgs_MultiChannelAssociationCCAPI_removeDestinations } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, MAX_NODES, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, type BytesView, pick } from \"@zwave-js/shared\";\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, type EndpointAddress, MultiChannelAssociationCommand, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport * as ccUtils from \"../lib/utils.js\";\nimport { AssociationCCValues } from \"./AssociationCC.js\";\nimport { MultiChannelAssociationCCValues } from \"./_CCValues.generated.js\";\nexport { MultiChannelAssociationCCValues };\nfunction endpointAddressesToString(endpoints: readonly EndpointAddress[]): string {\n return endpoints\n .map(({ nodeId, endpoint }) => {\n if (typeof endpoint === \"number\") {\n return `${nodeId}:${endpoint}`;\n }\n else {\n return `${nodeId}:[${endpoint.map(String).join(\", \")}]`;\n }\n })\n .join(\", \");\n}\nconst MULTI_CHANNEL_ASSOCIATION_MARKER = 0x00;\nfunction serializeMultiChannelAssociationDestination(nodeIds: number[], endpoints: EndpointAddress[]): Bytes {\n const nodeAddressBytes = nodeIds.length;\n const endpointAddressBytes = endpoints.length * 2;\n const payload = new Bytes(\n // node addresses\n nodeAddressBytes\n // endpoint marker\n + (endpointAddressBytes > 0 ? 1 : 0)\n // endpoints\n + endpointAddressBytes);\n // write node addresses\n for (let i = 0; i < nodeIds.length; i++) {\n payload[i] = nodeIds[i];\n }\n // write endpoint addresses\n if (endpointAddressBytes > 0) {\n let offset = nodeIds.length;\n payload[offset] = MULTI_CHANNEL_ASSOCIATION_MARKER;\n offset += 1;\n for (let i = 0; i < endpoints.length; i++) {\n const endpoint = endpoints[i];\n const destination = typeof endpoint.endpoint === \"number\"\n ? // The destination is a single number\n endpoint.endpoint & 127\n : // The destination is a bit mask\n encodeBitMask(endpoint.endpoint, 7)[0] | 128;\n payload[offset + 2 * i] = endpoint.nodeId;\n payload[offset + 2 * i + 1] = destination;\n }\n }\n return payload;\n}\nfunction deserializeMultiChannelAssociationDestination(data: BytesView): {\n nodeIds: number[];\n endpoints: EndpointAddress[];\n} {\n const nodeIds: number[] = [];\n let endpointOffset = data.length;\n // Scan node ids until we find the marker\n for (let i = 0; i < data.length; i++) {\n if (data[i] === MULTI_CHANNEL_ASSOCIATION_MARKER) {\n endpointOffset = i + 1;\n break;\n }\n nodeIds.push(data[i]);\n }\n const endpoints: EndpointAddress[] = [];\n // Each endpoint destination is a (node id, endpoint) pair; stop when a\n // full pair is no longer available so a dangling trailing byte is ignored\n for (let i = endpointOffset; i + 1 < data.length; i += 2) {\n const nodeId = data[i];\n const isBitMask = !!(data[i + 1] & 128);\n const destination = data[i + 1] & 127;\n const endpoint = isBitMask\n ? parseBitMask(Bytes.from([destination]))\n : destination;\n endpoints.push({ nodeId, endpoint });\n }\n return { nodeIds, endpoints };\n}\n// @noSetValueAPI\n@API(CommandClasses[\"Multi Channel Association\"])\nexport class MultiChannelAssociationCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: MultiChannelAssociationCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case MultiChannelAssociationCommand.Get:\n case MultiChannelAssociationCommand.Set:\n case MultiChannelAssociationCommand.Report:\n case MultiChannelAssociationCommand.Remove:\n case MultiChannelAssociationCommand.SupportedGroupingsGet:\n case MultiChannelAssociationCommand.SupportedGroupingsReport:\n return true; // This is mandatory\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(MultiChannelAssociationCommand, MultiChannelAssociationCommand.SupportedGroupingsGet);\n const cc = new MultiChannelAssociationCCSupportedGroupingsGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<MultiChannelAssociationCCSupportedGroupingsReport>(cc, this.commandOptions);\n return response?.groupCount;\n }\n @validateArgs_MultiChannelAssociationCCAPI_reportGroupCount()\n public async reportGroupCount(groupCount: number): Promise<void> {\n this.assertSupportsCommand(MultiChannelAssociationCommand, MultiChannelAssociationCommand.SupportedGroupingsReport);\n const cc = new MultiChannelAssociationCCSupportedGroupingsReport({\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_MultiChannelAssociationCCAPI_getGroup()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getGroup(groupId: number) {\n this.assertSupportsCommand(MultiChannelAssociationCommand, MultiChannelAssociationCommand.Get);\n const cc = new MultiChannelAssociationCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId,\n });\n const response = await this.host.sendCommand<MultiChannelAssociationCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"maxNodes\", \"nodeIds\", \"endpoints\"]);\n }\n }\n @validateArgs_MultiChannelAssociationCCAPI_sendReport()\n public async sendReport(options: MultiChannelAssociationCCReportOptions): Promise<void> {\n this.assertSupportsCommand(MultiChannelAssociationCommand, MultiChannelAssociationCommand.Report);\n const cc = new MultiChannelAssociationCCReport({\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 or endpoints to an association group\n */\n @validateArgs_MultiChannelAssociationCCAPI_addDestinations()\n public async addDestinations(options: MultiChannelAssociationCCSetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MultiChannelAssociationCommand, MultiChannelAssociationCommand.Set);\n const cc = new MultiChannelAssociationCCSet({\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 or endpoints from an association group\n */\n @validateArgs_MultiChannelAssociationCCAPI_removeDestinations()\n public async removeDestinations(options: MultiChannelAssociationCCRemoveOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MultiChannelAssociationCommand, MultiChannelAssociationCommand.Remove);\n if (!options.groupId && this.version === 1) {\n // V1 does not support omitting the group, manually remove the destination from all groups\n // We don't want to do too much work, so find out which groups the destination is in\n const currentDestinations = MultiChannelAssociationCC.getAllDestinationsCached(this.host, this.endpoint);\n for (const [group, destinations] of currentDestinations) {\n const cc = new MultiChannelAssociationCCRemove({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n groupId: group,\n nodeIds: destinations\n .filter((d) => d.endpoint != undefined)\n .map((d) => d.nodeId),\n endpoints: destinations.filter((d): d is AssociationAddress & {\n endpoint: number;\n } => d.endpoint != undefined),\n });\n // TODO: evaluate intermediate supervision results\n await this.host.sendCommand(cc, this.commandOptions);\n }\n }\n else if (options.groupId && options.groupId < 0) {\n throw new ZWaveError(\"The group id must not be negative!\", ZWaveErrorCodes.Argument_Invalid);\n }\n else {\n const cc = new MultiChannelAssociationCCRemove({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n }\n}\n@commandClass(CommandClasses[\"Multi Channel Association\"])\n@implementedVersion(5)\n@ccValues(MultiChannelAssociationCCValues)\nexport class MultiChannelAssociationCC extends CommandClass {\n declare ccCommand: MultiChannelAssociationCommand;\n public determineRequiredCCInterviews(): readonly CommandClasses[] {\n // MultiChannelAssociationCC 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 // AssociationCC will short-circuit if this CC is supported\n CommandClasses.Association,\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(MultiChannelAssociationCCValues.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, endpoint: EndpointId, groupId: number): number {\n return (ctx\n .getValueDB(endpoint.nodeId)\n .getValue(MultiChannelAssociationCCValues.maxNodes(groupId).endpoint(endpoint.index)) ?? 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 const groupDestinations: AssociationAddress[] = [];\n // Add all node destinations\n const nodes = valueDB.getValue<number[]>(MultiChannelAssociationCCValues.nodeIds(i).endpoint(endpoint.index)) ?? [];\n groupDestinations.push(...nodes.map((nodeId) => ({ nodeId })));\n // And all endpoint destinations\n const endpoints = valueDB.getValue<EndpointAddress[]>(MultiChannelAssociationCCValues.endpoints(i).endpoint(endpoint.index)) ?? [];\n for (const ep of endpoints) {\n if (typeof ep.endpoint === \"number\") {\n groupDestinations.push({\n nodeId: ep.nodeId,\n endpoint: ep.endpoint,\n });\n }\n else {\n groupDestinations.push(...ep.endpoint.map((e) => ({\n nodeId: ep.nodeId,\n endpoint: e,\n })));\n }\n }\n ret.set(i, \n // Filter out duplicates\n groupDestinations.filter((addr, index) => index\n === groupDestinations.findIndex(({ nodeId, endpoint }) => nodeId === addr.nodeId\n && endpoint === addr.endpoint)));\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 mcAPI = CCAPI.create(CommandClasses[\"Multi Channel Association\"], ctx, endpoint);\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // First find out how many groups are supported as multi channel\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying number of multi channel association groups...\",\n direction: \"outbound\",\n });\n const mcGroupCount = await mcAPI.getGroupCount();\n if (mcGroupCount != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `supports ${mcGroupCount} multi channel association groups`,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying multi channel 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 // 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 mcAPI = CCAPI.create(CommandClasses[\"Multi Channel Association\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n const assocAPI = CCAPI.create(CommandClasses.Association, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n const mcGroupCount: number = this.getValue(ctx, MultiChannelAssociationCCValues.groupCount) ?? 0;\n // Some devices report more association groups than multi channel association groups, so we need this info here\n const assocGroupCount: number = this.getValue(ctx, AssociationCCValues.groupCount) || mcGroupCount;\n // Then query each multi channel association group\n for (let groupId = 1; groupId <= mcGroupCount; groupId++) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying multi channel association group #${groupId}...`,\n direction: \"outbound\",\n });\n const group = await mcAPI.getGroup(groupId);\n if (!group)\n continue;\n const logMessage = `received information for multi channel association group #${groupId}:\nmaximum # of nodes: ${group.maxNodes}\ncurrently assigned nodes: ${group.nodeIds.map(String).join(\", \")}\ncurrently assigned endpoints: ${group.endpoints\n .map(({ nodeId, endpoint }) => {\n if (typeof endpoint === \"number\") {\n return `${nodeId}:${endpoint}`;\n }\n else {\n return `${nodeId}:[${endpoint.map(String).join(\", \")}]`;\n }\n })\n .join(\"\")}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n options?.onProgress?.(groupId, mcGroupCount);\n }\n // Check if there are more non-multi-channel association groups we haven't queried yet\n if (assocAPI.isSupported() && assocGroupCount > mcGroupCount) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying additional non-multi-channel association groups...`,\n direction: \"outbound\",\n });\n for (let groupId = mcGroupCount + 1; groupId <= assocGroupCount; groupId++) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying association group #${groupId}...`,\n direction: \"outbound\",\n });\n const group = await assocAPI.getGroup(groupId);\n if (!group)\n continue;\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 }\n }\n}\n// @publicAPI\nexport type MultiChannelAssociationCCSetOptions = {\n groupId: number;\n} & ({\n nodeIds: number[];\n} | {\n endpoints: EndpointAddress[];\n} | {\n nodeIds: number[];\n endpoints: EndpointAddress[];\n});\n@CCCommand(MultiChannelAssociationCommand.Set)\n@useSupervision()\nexport class MultiChannelAssociationCCSet extends MultiChannelAssociationCC {\n public constructor(options: WithAddress<MultiChannelAssociationCCSetOptions>) {\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 this.nodeIds = (\"nodeIds\" in options && options.nodeIds) || [];\n if (this.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.endpoints = (\"endpoints\" in options && options.endpoints) || [];\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelAssociationCCSet {\n validatePayload(raw.payload.length >= 1);\n const groupId = raw.payload[0];\n const { nodeIds, endpoints } = deserializeMultiChannelAssociationDestination(raw.payload.subarray(1));\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n nodeIds,\n endpoints,\n });\n }\n public groupId: number;\n public nodeIds: number[];\n public endpoints: EndpointAddress[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.groupId],\n serializeMultiChannelAssociationDestination(this.nodeIds, this.endpoints),\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 \"node ids\": this.nodeIds.join(\", \"),\n endpoints: endpointAddressesToString(this.endpoints),\n },\n };\n }\n}\n// @publicAPI\nexport interface MultiChannelAssociationCCRemoveOptions {\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 no nodeIds and no endpoint addresses are specified, ALL nodes will be removed. */\n nodeIds?: number[];\n /** The single endpoints to remove. If no nodeIds and no endpoint addresses are specified, ALL will be removed. */\n endpoints?: EndpointAddress[];\n}\n@CCCommand(MultiChannelAssociationCommand.Remove)\n@useSupervision()\nexport class MultiChannelAssociationCCRemove extends MultiChannelAssociationCC {\n public constructor(options: WithAddress<MultiChannelAssociationCCRemoveOptions>) {\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 this.endpoints = options.endpoints;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelAssociationCCRemove {\n validatePayload(raw.payload.length >= 1);\n const groupId: number | undefined = raw.payload[0];\n const { nodeIds, endpoints } = deserializeMultiChannelAssociationDestination(raw.payload.subarray(1));\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n nodeIds,\n endpoints,\n });\n }\n public groupId?: number;\n public nodeIds?: number[];\n public endpoints?: EndpointAddress[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.groupId || 0],\n serializeMultiChannelAssociationDestination(this.nodeIds || [], this.endpoints || []),\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 };\n if (this.nodeIds) {\n message[\"node ids\"] = this.nodeIds.join(\", \");\n }\n if (this.endpoints) {\n message.endpoints = endpointAddressesToString(this.endpoints);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface MultiChannelAssociationCCReportOptions {\n groupId: number;\n maxNodes: number;\n nodeIds: number[];\n endpoints: EndpointAddress[];\n reportsToFollow: number;\n}\n@CCCommand(MultiChannelAssociationCommand.Report)\n@ccValueProperty(\"maxNodes\", MultiChannelAssociationCCValues.maxNodes, (self) => [self.groupId])\n@ccValueProperty(\"nodeIds\", MultiChannelAssociationCCValues.nodeIds, (self) => [\n self.groupId,\n])\n@ccValueProperty(\"endpoints\", MultiChannelAssociationCCValues.endpoints, (self) => [self.groupId])\nexport class MultiChannelAssociationCCReport extends MultiChannelAssociationCC {\n public constructor(options: WithAddress<MultiChannelAssociationCCReportOptions>) {\n super(options);\n this.groupId = options.groupId;\n this.maxNodes = options.maxNodes;\n this.nodeIds = options.nodeIds;\n this.endpoints = options.endpoints;\n this.reportsToFollow = options.reportsToFollow;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelAssociationCCReport {\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, endpoints } = deserializeMultiChannelAssociationDestination(raw.payload.subarray(3));\n return new this({\n nodeId: ctx.sourceNodeId,\n groupId,\n maxNodes,\n nodeIds,\n endpoints,\n reportsToFollow,\n });\n }\n public readonly groupId: number;\n public maxNodes: number;\n public nodeIds: number[];\n public endpoints: EndpointAddress[];\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: MultiChannelAssociationCCReport[], _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 // Concat the list of endpoints\n this.endpoints = [...partials, this]\n .map((report) => [...report.endpoints])\n .reduce((prev, cur) => prev.concat(...cur), []);\n return Promise.resolve();\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const destinations = serializeMultiChannelAssociationDestination(this.nodeIds, this.endpoints);\n this.payload = Bytes.concat([\n [this.groupId, this.maxNodes, this.reportsToFollow],\n destinations,\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 \"maximum # of nodes\": this.maxNodes,\n \"node ids\": this.nodeIds.join(\", \"),\n endpoints: endpointAddressesToString(this.endpoints),\n },\n };\n }\n}\n// @publicAPI\nexport interface MultiChannelAssociationCCGetOptions {\n groupId: number;\n}\n@CCCommand(MultiChannelAssociationCommand.Get)\n@expectedCCResponse(MultiChannelAssociationCCReport)\nexport class MultiChannelAssociationCCGet extends MultiChannelAssociationCC {\n public constructor(options: WithAddress<MultiChannelAssociationCCGetOptions>) {\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): MultiChannelAssociationCCGet {\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 MultiChannelAssociationCCSupportedGroupingsReportOptions {\n groupCount: number;\n}\n@CCCommand(MultiChannelAssociationCommand.SupportedGroupingsReport)\n@ccValueProperty(\"groupCount\", MultiChannelAssociationCCValues.groupCount)\nexport class MultiChannelAssociationCCSupportedGroupingsReport extends MultiChannelAssociationCC {\n public constructor(options: WithAddress<MultiChannelAssociationCCSupportedGroupingsReportOptions>) {\n super(options);\n this.groupCount = options.groupCount;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelAssociationCCSupportedGroupingsReport {\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 readonly 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(MultiChannelAssociationCommand.SupportedGroupingsGet)\n@expectedCCResponse(MultiChannelAssociationCCSupportedGroupingsReport)\nexport class MultiChannelAssociationCCSupportedGroupingsGet extends MultiChannelAssociationCC {\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["endpoint"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import { type ApplicationNodeInformation, CommandClasses, type GenericDeviceClass, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type SpecificDeviceClass, type WithAddress } from "@zwave-js/core";
2
2
  import { Bytes } from "@zwave-js/shared";
3
3
  import { CCAPI } from "../lib/API.js";
4
- import { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext } from "../lib/CommandClass.js";
4
+ import { type CCRaw, CommandClass, CommandRelation, type InterviewContext, type PersistValuesContext } from "../lib/CommandClass.js";
5
5
  import { MultiChannelCommand } from "../lib/_Types.js";
6
6
  import type { CCEncodingContext, CCParsingContext } from "../lib/traits.js";
7
7
  import { MultiChannelCCValues } from "./_CCValues.generated.js";
@@ -151,6 +151,7 @@ export declare class MultiChannelCCCommandEncapsulation extends MultiChannelCC {
151
151
  encapsulated: CommandClass;
152
152
  /** The destination end point (0-127) or an array of destination end points (1-7) */
153
153
  destination: MultiChannelCCDestination;
154
+ protected determineRelation(other: CommandClass): CommandRelation;
154
155
  serialize(ctx: CCEncodingContext): Promise<Bytes>;
155
156
  toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
156
157
  protected computeEncapsulationOverhead(): number;
@@ -184,6 +185,7 @@ export declare class MultiChannelCCV1CommandEncapsulation extends MultiChannelCC
184
185
  constructor(options: WithAddress<MultiChannelCCV1CommandEncapsulationOptions>);
185
186
  static from(raw: CCRaw, ctx: CCParsingContext): Promise<MultiChannelCCV1CommandEncapsulation>;
186
187
  encapsulated: CommandClass;
188
+ protected determineRelation(other: CommandClass): CommandRelation;
187
189
  serialize(ctx: CCEncodingContext): Promise<Bytes>;
188
190
  protected computeEncapsulationOverhead(): number;
189
191
  toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
@@ -809,11 +809,7 @@ let MultiChannelCCEndPointFindReport = (() => {
809
809
  reportsToFollow;
810
810
  serialize(ctx) {
811
811
  this.payload = import_shared.Bytes.concat([
812
- [
813
- this.reportsToFollow,
814
- this.genericClass,
815
- this.specificClass
816
- ],
812
+ [this.reportsToFollow, this.genericClass, this.specificClass],
817
813
  import_shared.Bytes.from(this.foundEndpoints.map((e) => e & 127))
818
814
  ]);
819
815
  return super.serialize(ctx);
@@ -1073,13 +1069,25 @@ let MultiChannelCCCommandEncapsulation = (() => {
1073
1069
  encapsulated;
1074
1070
  /** The destination end point (0-127) or an array of destination end points (1-7) */
1075
1071
  destination;
1072
+ determineRelation(other) {
1073
+ if (other instanceof MultiChannelCCCommandEncapsulation2 && (0, import_CommandClass.haveSameDestination)(this.destination, other.destination)) {
1074
+ return this.encapsulated.getRelationTo(other.encapsulated);
1075
+ }
1076
+ return import_CommandClass.CommandRelation.Unrelated;
1077
+ }
1076
1078
  async serialize(ctx) {
1077
1079
  if (ctx.getDeviceConfig?.(this.nodeId)?.compat?.treatDestinationEndpointAsSource) {
1078
1080
  if (typeof this.destination === "number") {
1079
1081
  this.endpointIndex = this.destination;
1080
1082
  }
1081
1083
  }
1082
- const destination = typeof this.destination === "number" ? this.destination & 127 : (0, import_core.encodeBitMask)(this.destination, 7)[0] | 128;
1084
+ const destination = typeof this.destination === "number" ? (
1085
+ // The destination is a single number
1086
+ this.destination & 127
1087
+ ) : (
1088
+ // The destination is a bit mask
1089
+ (0, import_core.encodeBitMask)(this.destination, 7)[0] | 128
1090
+ );
1083
1091
  this.payload = import_shared.Bytes.concat([
1084
1092
  [this.endpointIndex & 127, destination],
1085
1093
  await this.encapsulated.serialize(ctx)
@@ -1139,10 +1147,7 @@ let MultiChannelCCV1Report = (() => {
1139
1147
  requestedCC;
1140
1148
  endpointCount;
1141
1149
  serialize(ctx) {
1142
- this.payload = import_shared.Bytes.from([
1143
- this.requestedCC,
1144
- this.endpointCount
1145
- ]);
1150
+ this.payload = import_shared.Bytes.from([this.requestedCC, this.endpointCount]);
1146
1151
  return super.serialize(ctx);
1147
1152
  }
1148
1153
  toLogEntry(ctx) {
@@ -1271,6 +1276,12 @@ let MultiChannelCCV1CommandEncapsulation = (() => {
1271
1276
  });
1272
1277
  }
1273
1278
  encapsulated;
1279
+ determineRelation(other) {
1280
+ if (other instanceof MultiChannelCCV1CommandEncapsulation2) {
1281
+ return this.encapsulated.getRelationTo(other.encapsulated);
1282
+ }
1283
+ return import_CommandClass.CommandRelation.Unrelated;
1284
+ }
1274
1285
  async serialize(ctx) {
1275
1286
  this.payload = import_shared.Bytes.concat([
1276
1287
  [this.endpointIndex],