@zwave-js/cc 14.1.0 → 14.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
  2. package/build/cjs/cc/AssociationCC.d.ts +2 -0
  3. package/build/cjs/cc/AssociationCC.js +5 -0
  4. package/build/cjs/cc/AssociationCC.js.map +2 -2
  5. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  6. package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
  7. package/build/cjs/cc/BasicCC.js.map +2 -2
  8. package/build/cjs/cc/BatteryCC.js.map +2 -2
  9. package/build/cjs/cc/BinarySensorCC.js.map +2 -2
  10. package/build/cjs/cc/BinarySwitchCC.js.map +2 -2
  11. package/build/cjs/cc/CRC16CC.d.ts +4 -0
  12. package/build/cjs/cc/CRC16CC.js +23 -0
  13. package/build/cjs/cc/CRC16CC.js.map +2 -2
  14. package/build/cjs/cc/CentralSceneCC.js.map +2 -2
  15. package/build/cjs/cc/ClimateControlScheduleCC.js.map +2 -2
  16. package/build/cjs/cc/ClockCC.js.map +2 -2
  17. package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
  18. package/build/cjs/cc/ConfigurationCC.d.ts +4 -0
  19. package/build/cjs/cc/ConfigurationCC.js +10 -0
  20. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  21. package/build/cjs/cc/DoorLockCC.js.map +2 -2
  22. package/build/cjs/cc/DoorLockLoggingCC.js.map +2 -2
  23. package/build/cjs/cc/EnergyProductionCC.js.map +2 -2
  24. package/build/cjs/cc/EntryControlCC.js.map +2 -2
  25. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
  26. package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
  27. package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
  28. package/build/cjs/cc/InclusionControllerCC.js.map +2 -2
  29. package/build/cjs/cc/IndicatorCC.js.map +2 -2
  30. package/build/cjs/cc/IrrigationCC.js.map +2 -2
  31. package/build/cjs/cc/LanguageCC.js.map +2 -2
  32. package/build/cjs/cc/LockCC.js.map +2 -2
  33. package/build/cjs/cc/ManufacturerProprietaryCC.js.map +2 -2
  34. package/build/cjs/cc/ManufacturerSpecificCC.js.map +2 -2
  35. package/build/cjs/cc/MeterCC.js.map +2 -2
  36. package/build/cjs/cc/MultiChannelAssociationCC.d.ts +2 -0
  37. package/build/cjs/cc/MultiChannelAssociationCC.js +6 -0
  38. package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
  39. package/build/cjs/cc/MultiChannelCC.d.ts +10 -0
  40. package/build/cjs/cc/MultiChannelCC.js +65 -0
  41. package/build/cjs/cc/MultiChannelCC.js.map +2 -2
  42. package/build/cjs/cc/MultiCommandCC.d.ts +4 -0
  43. package/build/cjs/cc/MultiCommandCC.js +34 -1
  44. package/build/cjs/cc/MultiCommandCC.js.map +2 -2
  45. package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
  46. package/build/cjs/cc/MultilevelSwitchCC.js.map +2 -2
  47. package/build/cjs/cc/NodeNamingCC.js.map +2 -2
  48. package/build/cjs/cc/NotificationCC.js.map +2 -2
  49. package/build/cjs/cc/PowerlevelCC.js.map +2 -2
  50. package/build/cjs/cc/ProtectionCC.js.map +2 -2
  51. package/build/cjs/cc/SceneActivationCC.js.map +2 -2
  52. package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +2 -2
  53. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
  54. package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
  55. package/build/cjs/cc/Security2CC.d.ts +7 -1
  56. package/build/cjs/cc/Security2CC.js +383 -52
  57. package/build/cjs/cc/Security2CC.js.map +2 -2
  58. package/build/cjs/cc/SecurityCC.d.ts +7 -0
  59. package/build/cjs/cc/SecurityCC.js +101 -6
  60. package/build/cjs/cc/SecurityCC.js.map +2 -2
  61. package/build/cjs/cc/SoundSwitchCC.js.map +2 -2
  62. package/build/cjs/cc/SupervisionCC.d.ts +4 -0
  63. package/build/cjs/cc/SupervisionCC.js +25 -0
  64. package/build/cjs/cc/SupervisionCC.js.map +2 -2
  65. package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
  66. package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
  67. package/build/cjs/cc/ThermostatSetbackCC.js.map +2 -2
  68. package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
  69. package/build/cjs/cc/TimeCC.js.map +2 -2
  70. package/build/cjs/cc/TimeParametersCC.js.map +2 -2
  71. package/build/cjs/cc/TransportServiceCC.d.ts +5 -0
  72. package/build/cjs/cc/TransportServiceCC.js +13 -0
  73. package/build/cjs/cc/TransportServiceCC.js.map +2 -2
  74. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  75. package/build/cjs/cc/VersionCC.js.map +2 -2
  76. package/build/cjs/cc/WakeUpCC.js.map +2 -2
  77. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  78. package/build/cjs/cc/ZWavePlusCC.js.map +2 -2
  79. package/build/cjs/cc/ZWaveProtocolCC.js.map +2 -2
  80. package/build/cjs/cc/manufacturerProprietary/Decorators.js +6 -5
  81. package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +2 -2
  82. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +2 -2
  83. package/build/cjs/lib/CommandClass.d.ts +15 -1
  84. package/build/cjs/lib/CommandClass.js +56 -1
  85. package/build/cjs/lib/CommandClass.js.map +2 -2
  86. package/build/cjs/lib/CommandClassDecorators.js +7 -6
  87. package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
  88. package/build/cjs/lib/Security2/Extension.js +2 -2
  89. package/build/cjs/lib/Security2/Extension.js.map +2 -2
  90. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  91. package/build/esm/cc/AlarmSensorCC.js +1 -0
  92. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  93. package/build/esm/cc/AssociationCC.d.ts +2 -0
  94. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  95. package/build/esm/cc/AssociationCC.js +14 -0
  96. package/build/esm/cc/AssociationCC.js.map +1 -1
  97. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  98. package/build/esm/cc/AssociationGroupInfoCC.js +6 -0
  99. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  100. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  101. package/build/esm/cc/BarrierOperatorCC.js +3 -0
  102. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  103. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  104. package/build/esm/cc/BasicCC.js +2 -0
  105. package/build/esm/cc/BasicCC.js.map +1 -1
  106. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  107. package/build/esm/cc/BatteryCC.js +1 -0
  108. package/build/esm/cc/BatteryCC.js.map +1 -1
  109. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  110. package/build/esm/cc/BinarySensorCC.js +3 -0
  111. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  112. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  113. package/build/esm/cc/BinarySwitchCC.js +2 -0
  114. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  115. package/build/esm/cc/CRC16CC.d.ts +4 -0
  116. package/build/esm/cc/CRC16CC.d.ts.map +1 -1
  117. package/build/esm/cc/CRC16CC.js +30 -0
  118. package/build/esm/cc/CRC16CC.js.map +1 -1
  119. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  120. package/build/esm/cc/CentralSceneCC.js +1 -0
  121. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  122. package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
  123. package/build/esm/cc/ClimateControlScheduleCC.js +3 -0
  124. package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
  125. package/build/esm/cc/ClockCC.d.ts.map +1 -1
  126. package/build/esm/cc/ClockCC.js +1 -0
  127. package/build/esm/cc/ClockCC.js.map +1 -1
  128. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  129. package/build/esm/cc/ColorSwitchCC.js +6 -0
  130. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  131. package/build/esm/cc/ConfigurationCC.d.ts +4 -0
  132. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  133. package/build/esm/cc/ConfigurationCC.js +27 -0
  134. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  135. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  136. package/build/esm/cc/DoorLockCC.js +2 -0
  137. package/build/esm/cc/DoorLockCC.js.map +1 -1
  138. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
  139. package/build/esm/cc/DoorLockLoggingCC.js +1 -0
  140. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
  141. package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
  142. package/build/esm/cc/EnergyProductionCC.js +2 -0
  143. package/build/esm/cc/EnergyProductionCC.js.map +1 -1
  144. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  145. package/build/esm/cc/EntryControlCC.js +1 -0
  146. package/build/esm/cc/EntryControlCC.js.map +1 -1
  147. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  148. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +5 -0
  149. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  150. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  151. package/build/esm/cc/HumidityControlModeCC.js +1 -0
  152. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  153. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  154. package/build/esm/cc/HumidityControlSetpointCC.js +4 -0
  155. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  156. package/build/esm/cc/InclusionControllerCC.d.ts.map +1 -1
  157. package/build/esm/cc/InclusionControllerCC.js +2 -0
  158. package/build/esm/cc/InclusionControllerCC.js.map +1 -1
  159. package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
  160. package/build/esm/cc/IndicatorCC.js +7 -0
  161. package/build/esm/cc/IndicatorCC.js.map +1 -1
  162. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  163. package/build/esm/cc/IrrigationCC.js +9 -0
  164. package/build/esm/cc/IrrigationCC.js.map +1 -1
  165. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  166. package/build/esm/cc/LanguageCC.js +1 -0
  167. package/build/esm/cc/LanguageCC.js.map +1 -1
  168. package/build/esm/cc/LockCC.d.ts.map +1 -1
  169. package/build/esm/cc/LockCC.js +1 -0
  170. package/build/esm/cc/LockCC.js.map +1 -1
  171. package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
  172. package/build/esm/cc/ManufacturerProprietaryCC.js +2 -0
  173. package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
  174. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  175. package/build/esm/cc/ManufacturerSpecificCC.js +2 -0
  176. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  177. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  178. package/build/esm/cc/MeterCC.js +4 -0
  179. package/build/esm/cc/MeterCC.js.map +1 -1
  180. package/build/esm/cc/MultiChannelAssociationCC.d.ts +2 -0
  181. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  182. package/build/esm/cc/MultiChannelAssociationCC.js +17 -0
  183. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  184. package/build/esm/cc/MultiChannelCC.d.ts +10 -0
  185. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  186. package/build/esm/cc/MultiChannelCC.js +94 -0
  187. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  188. package/build/esm/cc/MultiCommandCC.d.ts +4 -0
  189. package/build/esm/cc/MultiCommandCC.d.ts.map +1 -1
  190. package/build/esm/cc/MultiCommandCC.js +35 -1
  191. package/build/esm/cc/MultiCommandCC.js.map +1 -1
  192. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  193. package/build/esm/cc/MultilevelSensorCC.js +5 -0
  194. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  195. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  196. package/build/esm/cc/MultilevelSwitchCC.js +4 -0
  197. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  198. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  199. package/build/esm/cc/NodeNamingCC.js +2 -0
  200. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  201. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  202. package/build/esm/cc/NotificationCC.js +9 -0
  203. package/build/esm/cc/NotificationCC.js.map +1 -1
  204. package/build/esm/cc/PowerlevelCC.d.ts.map +1 -1
  205. package/build/esm/cc/PowerlevelCC.js +4 -0
  206. package/build/esm/cc/PowerlevelCC.js.map +1 -1
  207. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  208. package/build/esm/cc/ProtectionCC.js +3 -0
  209. package/build/esm/cc/ProtectionCC.js.map +1 -1
  210. package/build/esm/cc/SceneActivationCC.d.ts.map +1 -1
  211. package/build/esm/cc/SceneActivationCC.js +1 -0
  212. package/build/esm/cc/SceneActivationCC.js.map +1 -1
  213. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -1
  214. package/build/esm/cc/SceneActuatorConfigurationCC.js +2 -0
  215. package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
  216. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
  217. package/build/esm/cc/SceneControllerConfigurationCC.js +2 -0
  218. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  219. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  220. package/build/esm/cc/ScheduleEntryLockCC.js +14 -0
  221. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  222. package/build/esm/cc/Security2CC.d.ts +7 -1
  223. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  224. package/build/esm/cc/Security2CC.js +534 -68
  225. package/build/esm/cc/Security2CC.js.map +1 -1
  226. package/build/esm/cc/SecurityCC.d.ts +7 -0
  227. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  228. package/build/esm/cc/SecurityCC.js +133 -7
  229. package/build/esm/cc/SecurityCC.js.map +1 -1
  230. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
  231. package/build/esm/cc/SoundSwitchCC.js +7 -0
  232. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  233. package/build/esm/cc/SupervisionCC.d.ts +4 -0
  234. package/build/esm/cc/SupervisionCC.d.ts.map +1 -1
  235. package/build/esm/cc/SupervisionCC.js +30 -0
  236. package/build/esm/cc/SupervisionCC.js.map +1 -1
  237. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  238. package/build/esm/cc/ThermostatFanModeCC.js +1 -0
  239. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  240. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  241. package/build/esm/cc/ThermostatModeCC.js +3 -0
  242. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  243. package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -1
  244. package/build/esm/cc/ThermostatSetbackCC.js +2 -0
  245. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
  246. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  247. package/build/esm/cc/ThermostatSetpointCC.js +6 -0
  248. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  249. package/build/esm/cc/TimeCC.d.ts.map +1 -1
  250. package/build/esm/cc/TimeCC.js +4 -0
  251. package/build/esm/cc/TimeCC.js.map +1 -1
  252. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  253. package/build/esm/cc/TimeParametersCC.js +1 -0
  254. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  255. package/build/esm/cc/TransportServiceCC.d.ts +5 -0
  256. package/build/esm/cc/TransportServiceCC.d.ts.map +1 -1
  257. package/build/esm/cc/TransportServiceCC.js +24 -0
  258. package/build/esm/cc/TransportServiceCC.js.map +1 -1
  259. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  260. package/build/esm/cc/UserCodeCC.js +12 -0
  261. package/build/esm/cc/UserCodeCC.js.map +1 -1
  262. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  263. package/build/esm/cc/VersionCC.js +4 -0
  264. package/build/esm/cc/VersionCC.js.map +1 -1
  265. package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
  266. package/build/esm/cc/WakeUpCC.js +1 -0
  267. package/build/esm/cc/WakeUpCC.js.map +1 -1
  268. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  269. package/build/esm/cc/WindowCoveringCC.js +5 -0
  270. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  271. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
  272. package/build/esm/cc/ZWavePlusCC.js +1 -0
  273. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  274. package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -1
  275. package/build/esm/cc/ZWaveProtocolCC.js +27 -0
  276. package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
  277. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
  278. package/build/esm/cc/manufacturerProprietary/Decorators.js +2 -1
  279. package/build/esm/cc/manufacturerProprietary/Decorators.js.map +1 -1
  280. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
  281. package/build/esm/cc/manufacturerProprietary/FibaroCC.js +3 -0
  282. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  283. package/build/esm/lib/CommandClass.d.ts +15 -1
  284. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  285. package/build/esm/lib/CommandClass.js +94 -1
  286. package/build/esm/lib/CommandClass.js.map +1 -1
  287. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
  288. package/build/esm/lib/CommandClassDecorators.js +2 -1
  289. package/build/esm/lib/CommandClassDecorators.js.map +1 -1
  290. package/build/esm/lib/Security2/Extension.js +1 -1
  291. package/build/esm/lib/Security2/Extension.js.map +1 -1
  292. package/package.json +6 -6
@@ -212,7 +212,9 @@ export declare class MultiChannelAssociationCCReport extends MultiChannelAssocia
212
212
  reportsToFollow: number;
213
213
  getPartialCCSessionId(): Record<string, any> | undefined;
214
214
  expectMoreMessages(): boolean;
215
+ /** @deprecated Use {@link mergePartialCCsAsync} instead */
215
216
  mergePartialCCs(partials: MultiChannelAssociationCCReport[], _ctx: CCParsingContext): void;
217
+ mergePartialCCsAsync(partials: MultiChannelAssociationCCReport[], _ctx: CCParsingContext): Promise<void>;
216
218
  serialize(ctx: CCEncodingContext): Bytes;
217
219
  toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
218
220
  }
@@ -936,10 +936,16 @@ let MultiChannelAssociationCCReport = (() => {
936
936
  expectMoreMessages() {
937
937
  return this.reportsToFollow > 0;
938
938
  }
939
+ /** @deprecated Use {@link mergePartialCCsAsync} instead */
939
940
  mergePartialCCs(partials, _ctx) {
940
941
  this.nodeIds = [...partials, this].map((report) => [...report.nodeIds]).reduce((prev, cur) => prev.concat(...cur), []);
941
942
  this.endpoints = [...partials, this].map((report) => [...report.endpoints]).reduce((prev, cur) => prev.concat(...cur), []);
942
943
  }
944
+ mergePartialCCsAsync(partials, _ctx) {
945
+ this.nodeIds = [...partials, this].map((report) => [...report.nodeIds]).reduce((prev, cur) => prev.concat(...cur), []);
946
+ this.endpoints = [...partials, this].map((report) => [...report.endpoints]).reduce((prev, cur) => prev.concat(...cur), []);
947
+ return Promise.resolve();
948
+ }
943
949
  serialize(ctx) {
944
950
  const destinations = serializeMultiChannelAssociationDestination(this.nodeIds, this.endpoints);
945
951
  this.payload = import_safe2.Bytes.concat([
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/MultiChannelAssociationCC.ts"],
4
- "sourcesContent": ["import type {\n\tEndpointId,\n\tMessageRecord,\n\tSupervisionResult,\n\tWithAddress,\n} from \"@zwave-js/core/safe\";\nimport {\n\tCommandClasses,\n\tMAX_NODES,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tencodeBitMask,\n\tparseBitMask,\n\tvalidatePayload,\n} from \"@zwave-js/core/safe\";\nimport type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetValueDB,\n} from \"@zwave-js/host/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { pick } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype RefreshValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\ttype AssociationAddress,\n\ttype EndpointAddress,\n\tMultiChannelAssociationCommand,\n} from \"../lib/_Types.js\";\nimport * as ccUtils from \"../lib/utils.js\";\nimport { AssociationCCValues } from \"./AssociationCC.js\";\n\nexport const MultiChannelAssociationCCValues = Object.freeze({\n\t...V.defineStaticCCValues(CommandClasses[\"Multi Channel Association\"], {\n\t\t// number multi channel association groups\n\t\t...V.staticProperty(\"groupCount\", undefined, { internal: true }),\n\t}),\n\n\t...V.defineDynamicCCValues(CommandClasses[\"Multi Channel Association\"], {\n\t\t// maximum number of nodes of a multi channel association group\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"maxNodes\",\n\t\t\t\"maxNodes\",\n\t\t\t(groupId: number) => groupId,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"maxNodes\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\n\t\t// node IDs of a multi channel association group\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"nodeIds\",\n\t\t\t\"nodeIds\",\n\t\t\t(groupId: number) => groupId,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"nodeIds\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\n\t\t// Endpoint addresses of a multi channel association group\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"endpoints\",\n\t\t\t\"endpoints\",\n\t\t\t(groupId: number) => groupId,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"endpoints\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\t}),\n});\n\nfunction endpointAddressesToString(\n\tendpoints: readonly EndpointAddress[],\n): string {\n\treturn endpoints\n\t\t.map(({ nodeId, endpoint }) => {\n\t\t\tif (typeof endpoint === \"number\") {\n\t\t\t\treturn `${nodeId}:${endpoint}`;\n\t\t\t} else {\n\t\t\t\treturn `${nodeId}:[${endpoint.map(String).join(\", \")}]`;\n\t\t\t}\n\t\t})\n\t\t.join(\", \");\n}\n\nconst MULTI_CHANNEL_ASSOCIATION_MARKER = 0x00;\n\nfunction serializeMultiChannelAssociationDestination(\n\tnodeIds: number[],\n\tendpoints: EndpointAddress[],\n): Bytes {\n\tconst nodeAddressBytes = nodeIds.length;\n\tconst endpointAddressBytes = endpoints.length * 2;\n\tconst payload = new Bytes(\n\t\t// node addresses\n\t\tnodeAddressBytes\n\t\t\t// endpoint marker\n\t\t\t+ (endpointAddressBytes > 0 ? 1 : 0)\n\t\t\t// endpoints\n\t\t\t+ endpointAddressBytes,\n\t);\n\t// write node addresses\n\tfor (let i = 0; i < nodeIds.length; i++) {\n\t\tpayload[i] = nodeIds[i];\n\t}\n\t// write endpoint addresses\n\tif (endpointAddressBytes > 0) {\n\t\tlet offset = nodeIds.length;\n\t\tpayload[offset] = MULTI_CHANNEL_ASSOCIATION_MARKER;\n\t\toffset += 1;\n\t\tfor (let i = 0; i < endpoints.length; i++) {\n\t\t\tconst endpoint = endpoints[i];\n\t\t\tconst destination = typeof endpoint.endpoint === \"number\"\n\t\t\t\t// The destination is a single number\n\t\t\t\t? endpoint.endpoint & 0b0111_1111\n\t\t\t\t// The destination is a bit mask\n\t\t\t\t: encodeBitMask(endpoint.endpoint, 7)[0] | 0b1000_0000;\n\n\t\t\tpayload[offset + 2 * i] = endpoint.nodeId;\n\t\t\tpayload[offset + 2 * i + 1] = destination;\n\t\t}\n\t}\n\treturn payload;\n}\n\nfunction deserializeMultiChannelAssociationDestination(data: Uint8Array): {\n\tnodeIds: number[];\n\tendpoints: EndpointAddress[];\n} {\n\tconst nodeIds: number[] = [];\n\tlet endpointOffset = data.length;\n\t// Scan node ids until we find the marker\n\tfor (let i = 0; i < data.length; i++) {\n\t\tif (data[i] === MULTI_CHANNEL_ASSOCIATION_MARKER) {\n\t\t\tendpointOffset = i + 1;\n\t\t\tbreak;\n\t\t}\n\t\tnodeIds.push(data[i]);\n\t}\n\tconst endpoints: EndpointAddress[] = [];\n\tfor (let i = endpointOffset; i < data.length; i += 2) {\n\t\tconst nodeId = data[i];\n\t\tconst isBitMask = !!(data[i + 1] & 0b1000_0000);\n\t\tconst destination = data[i + 1] & 0b0111_1111;\n\t\tconst endpoint = isBitMask\n\t\t\t? parseBitMask(Bytes.from([destination]))\n\t\t\t: destination;\n\n\t\tendpoints.push({ nodeId, endpoint });\n\t}\n\n\treturn { nodeIds, endpoints };\n}\n\n// @noSetValueAPI\n\n@API(CommandClasses[\"Multi Channel Association\"])\nexport class MultiChannelAssociationCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(\n\t\tcmd: MultiChannelAssociationCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase MultiChannelAssociationCommand.Get:\n\t\t\tcase MultiChannelAssociationCommand.Set:\n\t\t\tcase MultiChannelAssociationCommand.Report:\n\t\t\tcase MultiChannelAssociationCommand.Remove:\n\t\t\tcase MultiChannelAssociationCommand.SupportedGroupingsGet:\n\t\t\tcase MultiChannelAssociationCommand.SupportedGroupingsReport:\n\t\t\t\treturn true; // This is mandatory\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t/**\n\t * Returns the number of association groups a node supports.\n\t * Association groups are consecutive, starting at 1.\n\t */\n\tpublic async getGroupCount(): Promise<MaybeNotKnown<number>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelAssociationCommand,\n\t\t\tMultiChannelAssociationCommand.SupportedGroupingsGet,\n\t\t);\n\n\t\tconst cc = new MultiChannelAssociationCCSupportedGroupingsGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultiChannelAssociationCCSupportedGroupingsReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.groupCount;\n\t}\n\n\t@validateArgs()\n\tpublic async reportGroupCount(groupCount: number): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelAssociationCommand,\n\t\t\tMultiChannelAssociationCommand.SupportedGroupingsReport,\n\t\t);\n\n\t\tconst cc = new MultiChannelAssociationCCSupportedGroupingsReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tgroupCount,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t/**\n\t * Returns information about an association group.\n\t */\n\t@validateArgs()\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getGroup(groupId: number) {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelAssociationCommand,\n\t\t\tMultiChannelAssociationCommand.Get,\n\t\t);\n\n\t\tconst cc = new MultiChannelAssociationCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tgroupId,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultiChannelAssociationCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"maxNodes\", \"nodeIds\", \"endpoints\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async sendReport(\n\t\toptions: MultiChannelAssociationCCReportOptions,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelAssociationCommand,\n\t\t\tMultiChannelAssociationCommand.Report,\n\t\t);\n\n\t\tconst cc = new MultiChannelAssociationCCReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t/**\n\t * Adds new nodes or endpoints to an association group\n\t */\n\t@validateArgs()\n\tpublic async addDestinations(\n\t\toptions: MultiChannelAssociationCCSetOptions,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelAssociationCommand,\n\t\t\tMultiChannelAssociationCommand.Set,\n\t\t);\n\n\t\tconst cc = new MultiChannelAssociationCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t/**\n\t * Removes nodes or endpoints from an association group\n\t */\n\t@validateArgs()\n\tpublic async removeDestinations(\n\t\toptions: MultiChannelAssociationCCRemoveOptions,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelAssociationCommand,\n\t\t\tMultiChannelAssociationCommand.Remove,\n\t\t);\n\n\t\tif (!options.groupId && this.version === 1) {\n\t\t\t// V1 does not support omitting the group, manually remove the destination from all groups\n\t\t\t// We don't want to do too much work, so find out which groups the destination is in\n\t\t\tconst currentDestinations = MultiChannelAssociationCC\n\t\t\t\t.getAllDestinationsCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t);\n\t\t\tfor (const [group, destinations] of currentDestinations) {\n\t\t\t\tconst cc = new MultiChannelAssociationCCRemove({\n\t\t\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t\t\tgroupId: group,\n\t\t\t\t\tnodeIds: destinations\n\t\t\t\t\t\t.filter((d) => d.endpoint != undefined)\n\t\t\t\t\t\t.map((d) => d.nodeId),\n\t\t\t\t\tendpoints: destinations.filter(\n\t\t\t\t\t\t(d): d is AssociationAddress & { endpoint: number } =>\n\t\t\t\t\t\t\td.endpoint != undefined,\n\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t\t// TODO: evaluate intermediate supervision results\n\t\t\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t\t\t}\n\t\t} else if (options.groupId && options.groupId < 0) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The group id must not be negative!\",\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t} else {\n\t\t\tconst cc = new MultiChannelAssociationCCRemove({\n\t\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t\t...options,\n\t\t\t});\n\t\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t\t}\n\t}\n}\n\n@commandClass(CommandClasses[\"Multi Channel Association\"])\n@implementedVersion(5)\n@ccValues(MultiChannelAssociationCCValues)\nexport class MultiChannelAssociationCC extends CommandClass {\n\tdeclare ccCommand: MultiChannelAssociationCommand;\n\n\tpublic determineRequiredCCInterviews(): readonly CommandClasses[] {\n\t\t// MultiChannelAssociationCC must be interviewed after Z-Wave+ if that is supported\n\t\treturn [\n\t\t\t...super.determineRequiredCCInterviews(),\n\t\t\tCommandClasses[\"Z-Wave Plus Info\"],\n\t\t\t// We need information about endpoints to correctly configure the lifeline associations\n\t\t\tCommandClasses[\"Multi Channel\"],\n\t\t\t// AssociationCC will short-circuit if this CC is supported\n\t\t\tCommandClasses.Association,\n\t\t];\n\t}\n\n\t/**\n\t * Returns the number of association groups reported by the node/endpoint.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getGroupCountCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t): number {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tMultiChannelAssociationCCValues.groupCount.endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t) || 0;\n\t}\n\n\t/**\n\t * Returns the number of nodes an association group supports.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getMaxNodesCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tgroupId: number,\n\t): number {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tMultiChannelAssociationCCValues.maxNodes(groupId).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t) ?? 0;\n\t}\n\n\t/**\n\t * Returns all the destinations of all association groups reported by the node/endpoint.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getAllDestinationsCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t): ReadonlyMap<number, readonly AssociationAddress[]> {\n\t\tconst ret = new Map<number, AssociationAddress[]>();\n\t\tconst groupCount = this.getGroupCountCached(ctx, endpoint);\n\t\tconst valueDB = ctx.getValueDB(endpoint.nodeId);\n\t\tfor (let i = 1; i <= groupCount; i++) {\n\t\t\tconst groupDestinations: AssociationAddress[] = [];\n\t\t\t// Add all node destinations\n\t\t\tconst nodes = valueDB.getValue<number[]>(\n\t\t\t\tMultiChannelAssociationCCValues.nodeIds(i).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t) ?? [];\n\t\t\tgroupDestinations.push(...nodes.map((nodeId) => ({ nodeId })));\n\t\t\t// And all endpoint destinations\n\t\t\tconst endpoints = valueDB.getValue<EndpointAddress[]>(\n\t\t\t\tMultiChannelAssociationCCValues.endpoints(i).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t) ?? [];\n\t\t\tfor (const ep of endpoints) {\n\t\t\t\tif (typeof ep.endpoint === \"number\") {\n\t\t\t\t\tgroupDestinations.push({\n\t\t\t\t\t\tnodeId: ep.nodeId,\n\t\t\t\t\t\tendpoint: ep.endpoint,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tgroupDestinations.push(\n\t\t\t\t\t\t...ep.endpoint.map((e) => ({\n\t\t\t\t\t\t\tnodeId: ep.nodeId,\n\t\t\t\t\t\t\tendpoint: e,\n\t\t\t\t\t\t})),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tret.set(\n\t\t\t\ti,\n\t\t\t\t// Filter out duplicates\n\t\t\t\tgroupDestinations.filter(\n\t\t\t\t\t(addr, index) =>\n\t\t\t\t\t\tindex\n\t\t\t\t\t\t\t=== groupDestinations.findIndex(\n\t\t\t\t\t\t\t\t({ nodeId, endpoint }) =>\n\t\t\t\t\t\t\t\t\tnodeId === addr.nodeId\n\t\t\t\t\t\t\t\t\t&& endpoint === addr.endpoint,\n\t\t\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\treturn ret;\n\t}\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst mcAPI = CCAPI.create(\n\t\t\tCommandClasses[\"Multi Channel Association\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t);\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\t// First find out how many groups are supported as multi channel\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"querying number of multi channel association groups...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst mcGroupCount = await mcAPI.getGroupCount();\n\t\tif (mcGroupCount != undefined) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`supports ${mcGroupCount} multi channel association groups`,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t} else {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t\"Querying multi channel association groups timed out, skipping interview...\",\n\t\t\t\tlevel: \"warn\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Query each association group for its members\n\t\tawait this.refreshValues(ctx);\n\n\t\t// And set up lifeline associations\n\t\tawait ccUtils.configureLifelineAssociations(ctx, endpoint);\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst mcAPI = CCAPI.create(\n\t\t\tCommandClasses[\"Multi Channel Association\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\t\tconst assocAPI = CCAPI.create(\n\t\t\tCommandClasses.Association,\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tconst mcGroupCount: number = this.getValue(\n\t\t\tctx,\n\t\t\tMultiChannelAssociationCCValues.groupCount,\n\t\t) ?? 0;\n\n\t\t// Some devices report more association groups than multi channel association groups, so we need this info here\n\t\tconst assocGroupCount: number =\n\t\t\tthis.getValue(ctx, AssociationCCValues.groupCount)\n\t\t\t|| mcGroupCount;\n\n\t\t// Then query each multi channel association group\n\t\tfor (let groupId = 1; groupId <= mcGroupCount; groupId++) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`querying multi channel association group #${groupId}...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst group = await mcAPI.getGroup(groupId);\n\t\t\tif (!group) continue;\n\t\t\tconst logMessage =\n\t\t\t\t`received information for multi channel association group #${groupId}:\nmaximum # of nodes: ${group.maxNodes}\ncurrently assigned nodes: ${group.nodeIds.map(String).join(\", \")}\ncurrently assigned endpoints: ${\n\t\t\t\t\tgroup.endpoints\n\t\t\t\t\t\t.map(({ nodeId, endpoint }) => {\n\t\t\t\t\t\t\tif (typeof endpoint === \"number\") {\n\t\t\t\t\t\t\t\treturn `${nodeId}:${endpoint}`;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn `${nodeId}:[${\n\t\t\t\t\t\t\t\t\tendpoint.map(String).join(\", \")\n\t\t\t\t\t\t\t\t}]`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(\"\")\n\t\t\t\t}`;\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: logMessage,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\n\t\t// Check if there are more non-multi-channel association groups we haven't queried yet\n\t\tif (assocAPI.isSupported() && assocGroupCount > mcGroupCount) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`querying additional non-multi-channel association groups...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tfor (\n\t\t\t\tlet groupId = mcGroupCount + 1;\n\t\t\t\tgroupId <= assocGroupCount;\n\t\t\t\tgroupId++\n\t\t\t) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `querying association group #${groupId}...`,\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tconst group = await assocAPI.getGroup(groupId);\n\t\t\t\tif (!group) continue;\n\t\t\t\tconst logMessage =\n\t\t\t\t\t`received information for association group #${groupId}:\nmaximum # of nodes: ${group.maxNodes}\ncurrently assigned nodes: ${group.nodeIds.map(String).join(\", \")}`;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n// @publicAPI\nexport type MultiChannelAssociationCCSetOptions =\n\t& {\n\t\tgroupId: number;\n\t}\n\t& (\n\t\t| { nodeIds: number[] }\n\t\t| { endpoints: EndpointAddress[] }\n\t\t| { nodeIds: number[]; endpoints: EndpointAddress[] }\n\t);\n\n@CCCommand(MultiChannelAssociationCommand.Set)\n@useSupervision()\nexport class MultiChannelAssociationCCSet extends MultiChannelAssociationCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelAssociationCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.groupId < 1) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The group id must be positive!\",\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.groupId = options.groupId;\n\t\tthis.nodeIds = (\"nodeIds\" in options && options.nodeIds) || [];\n\t\tif (this.nodeIds.some((n) => n < 1 || n > MAX_NODES)) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`All node IDs must be between 1 and ${MAX_NODES}!`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.endpoints = (\"endpoints\" in options && options.endpoints)\n\t\t\t|| [];\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelAssociationCCSet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst groupId = raw.payload[0];\n\n\t\tconst { nodeIds, endpoints } =\n\t\t\tdeserializeMultiChannelAssociationDestination(\n\t\t\t\traw.payload.subarray(1),\n\t\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgroupId,\n\t\t\tnodeIds,\n\t\t\tendpoints,\n\t\t});\n\t}\n\n\tpublic groupId: number;\n\tpublic nodeIds: number[];\n\tpublic endpoints: EndpointAddress[];\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.groupId]),\n\t\t\tserializeMultiChannelAssociationDestination(\n\t\t\t\tthis.nodeIds,\n\t\t\t\tthis.endpoints,\n\t\t\t),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"group id\": this.groupId,\n\t\t\t\t\"node ids\": this.nodeIds.join(\", \"),\n\t\t\t\tendpoints: endpointAddressesToString(this.endpoints),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelAssociationCCRemoveOptions {\n\t/** The group from which to remove the nodes. If none is specified, the nodes will be removed from all groups. */\n\tgroupId?: number;\n\t/** The nodes to remove. If no nodeIds and no endpoint addresses are specified, ALL nodes will be removed. */\n\tnodeIds?: number[];\n\t/** The single endpoints to remove. If no nodeIds and no endpoint addresses are specified, ALL will be removed. */\n\tendpoints?: EndpointAddress[];\n}\n\n@CCCommand(MultiChannelAssociationCommand.Remove)\n@useSupervision()\nexport class MultiChannelAssociationCCRemove extends MultiChannelAssociationCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelAssociationCCRemoveOptions>,\n\t) {\n\t\tsuper(options);\n\t\t// When removing associations, we allow invalid node IDs.\n\t\t// See GH#3606 - it is possible that those exist.\n\t\tthis.groupId = options.groupId;\n\t\tthis.nodeIds = options.nodeIds;\n\t\tthis.endpoints = options.endpoints;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelAssociationCCRemove {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst groupId: number | undefined = raw.payload[0];\n\n\t\tconst { nodeIds, endpoints } =\n\t\t\tdeserializeMultiChannelAssociationDestination(\n\t\t\t\traw.payload.subarray(1),\n\t\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgroupId,\n\t\t\tnodeIds,\n\t\t\tendpoints,\n\t\t});\n\t}\n\n\tpublic groupId?: number;\n\tpublic nodeIds?: number[];\n\tpublic endpoints?: EndpointAddress[];\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.groupId || 0]),\n\t\t\tserializeMultiChannelAssociationDestination(\n\t\t\t\tthis.nodeIds || [],\n\t\t\t\tthis.endpoints || [],\n\t\t\t),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"group id\": this.groupId || \"(all groups)\",\n\t\t};\n\t\tif (this.nodeIds) {\n\t\t\tmessage[\"node ids\"] = this.nodeIds.join(\", \");\n\t\t}\n\t\tif (this.endpoints) {\n\t\t\tmessage.endpoints = endpointAddressesToString(this.endpoints);\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelAssociationCCReportOptions {\n\tgroupId: number;\n\tmaxNodes: number;\n\tnodeIds: number[];\n\tendpoints: EndpointAddress[];\n\treportsToFollow: number;\n}\n\n@CCCommand(MultiChannelAssociationCommand.Report)\n@ccValueProperty(\n\t\"maxNodes\",\n\tMultiChannelAssociationCCValues.maxNodes,\n\t(self) => [self.groupId],\n)\n@ccValueProperty(\n\t\"nodeIds\",\n\tMultiChannelAssociationCCValues.nodeIds,\n\t(self) => [self.groupId],\n)\n@ccValueProperty(\n\t\"endpoints\",\n\tMultiChannelAssociationCCValues.endpoints,\n\t(self) => [self.groupId],\n)\nexport class MultiChannelAssociationCCReport extends MultiChannelAssociationCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelAssociationCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.groupId = options.groupId;\n\t\tthis.maxNodes = options.maxNodes;\n\t\tthis.nodeIds = options.nodeIds;\n\t\tthis.endpoints = options.endpoints;\n\t\tthis.reportsToFollow = options.reportsToFollow;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelAssociationCCReport {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst groupId = raw.payload[0];\n\t\tconst maxNodes = raw.payload[1];\n\t\tconst reportsToFollow = raw.payload[2];\n\n\t\tconst { nodeIds, endpoints } =\n\t\t\tdeserializeMultiChannelAssociationDestination(\n\t\t\t\traw.payload.subarray(3),\n\t\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgroupId,\n\t\t\tmaxNodes,\n\t\t\tnodeIds,\n\t\t\tendpoints,\n\t\t\treportsToFollow,\n\t\t});\n\t}\n\n\tpublic readonly groupId: number;\n\n\tpublic maxNodes: number;\n\n\tpublic nodeIds: number[];\n\n\tpublic endpoints: EndpointAddress[];\n\n\tpublic reportsToFollow: number;\n\n\tpublic getPartialCCSessionId(): Record<string, any> | undefined {\n\t\t// Distinguish sessions by the association group ID\n\t\treturn { groupId: this.groupId };\n\t}\n\n\tpublic expectMoreMessages(): boolean {\n\t\treturn this.reportsToFollow > 0;\n\t}\n\n\tpublic mergePartialCCs(\n\t\tpartials: MultiChannelAssociationCCReport[],\n\t\t_ctx: CCParsingContext,\n\t): void {\n\t\t// Concat the list of nodes\n\t\tthis.nodeIds = [...partials, this]\n\t\t\t.map((report) => [...report.nodeIds])\n\t\t\t.reduce((prev, cur) => prev.concat(...cur), []);\n\t\t// Concat the list of endpoints\n\t\tthis.endpoints = [...partials, this]\n\t\t\t.map((report) => [...report.endpoints])\n\t\t\t.reduce((prev, cur) => prev.concat(...cur), []);\n\t}\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tconst destinations = serializeMultiChannelAssociationDestination(\n\t\t\tthis.nodeIds,\n\t\t\tthis.endpoints,\n\t\t);\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([\n\t\t\t\tthis.groupId,\n\t\t\t\tthis.maxNodes,\n\t\t\t\tthis.reportsToFollow,\n\t\t\t]),\n\t\t\tdestinations,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"group id\": this.groupId,\n\t\t\t\t\"maximum # of nodes\": this.maxNodes,\n\t\t\t\t\"node ids\": this.nodeIds.join(\", \"),\n\t\t\t\tendpoints: endpointAddressesToString(this.endpoints),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelAssociationCCGetOptions {\n\tgroupId: number;\n}\n\n@CCCommand(MultiChannelAssociationCommand.Get)\n@expectedCCResponse(MultiChannelAssociationCCReport)\nexport class MultiChannelAssociationCCGet extends MultiChannelAssociationCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelAssociationCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.groupId < 1) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The group id must be positive!\",\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.groupId = options.groupId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelAssociationCCGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst groupId = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgroupId,\n\t\t});\n\t}\n\n\tpublic groupId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.groupId]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { \"group id\": this.groupId },\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelAssociationCCSupportedGroupingsReportOptions {\n\tgroupCount: number;\n}\n\n@CCCommand(MultiChannelAssociationCommand.SupportedGroupingsReport)\n@ccValueProperty(\"groupCount\", MultiChannelAssociationCCValues.groupCount)\nexport class MultiChannelAssociationCCSupportedGroupingsReport\n\textends MultiChannelAssociationCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<\n\t\t\tMultiChannelAssociationCCSupportedGroupingsReportOptions\n\t\t>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.groupCount = options.groupCount;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelAssociationCCSupportedGroupingsReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst groupCount = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgroupCount,\n\t\t});\n\t}\n\n\tpublic readonly groupCount: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.groupCount]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { \"group count\": this.groupCount },\n\t\t};\n\t}\n}\n\n@CCCommand(MultiChannelAssociationCommand.SupportedGroupingsGet)\n@expectedCCResponse(MultiChannelAssociationCCSupportedGroupingsReport)\nexport class MultiChannelAssociationCCSupportedGroupingsGet\n\textends MultiChannelAssociationCC\n{}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type {\n\tEndpointId,\n\tMessageRecord,\n\tSupervisionResult,\n\tWithAddress,\n} from \"@zwave-js/core/safe\";\nimport {\n\tCommandClasses,\n\tMAX_NODES,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tencodeBitMask,\n\tparseBitMask,\n\tvalidatePayload,\n} from \"@zwave-js/core/safe\";\nimport type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetValueDB,\n} from \"@zwave-js/host/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { pick } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype RefreshValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\ttype AssociationAddress,\n\ttype EndpointAddress,\n\tMultiChannelAssociationCommand,\n} from \"../lib/_Types.js\";\nimport * as ccUtils from \"../lib/utils.js\";\nimport { AssociationCCValues } from \"./AssociationCC.js\";\n\nexport const MultiChannelAssociationCCValues = Object.freeze({\n\t...V.defineStaticCCValues(CommandClasses[\"Multi Channel Association\"], {\n\t\t// number multi channel association groups\n\t\t...V.staticProperty(\"groupCount\", undefined, { internal: true }),\n\t}),\n\n\t...V.defineDynamicCCValues(CommandClasses[\"Multi Channel Association\"], {\n\t\t// maximum number of nodes of a multi channel association group\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"maxNodes\",\n\t\t\t\"maxNodes\",\n\t\t\t(groupId: number) => groupId,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"maxNodes\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\n\t\t// node IDs of a multi channel association group\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"nodeIds\",\n\t\t\t\"nodeIds\",\n\t\t\t(groupId: number) => groupId,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"nodeIds\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\n\t\t// Endpoint addresses of a multi channel association group\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"endpoints\",\n\t\t\t\"endpoints\",\n\t\t\t(groupId: number) => groupId,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"endpoints\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\t}),\n});\n\nfunction endpointAddressesToString(\n\tendpoints: readonly EndpointAddress[],\n): string {\n\treturn endpoints\n\t\t.map(({ nodeId, endpoint }) => {\n\t\t\tif (typeof endpoint === \"number\") {\n\t\t\t\treturn `${nodeId}:${endpoint}`;\n\t\t\t} else {\n\t\t\t\treturn `${nodeId}:[${endpoint.map(String).join(\", \")}]`;\n\t\t\t}\n\t\t})\n\t\t.join(\", \");\n}\n\nconst MULTI_CHANNEL_ASSOCIATION_MARKER = 0x00;\n\nfunction serializeMultiChannelAssociationDestination(\n\tnodeIds: number[],\n\tendpoints: EndpointAddress[],\n): Bytes {\n\tconst nodeAddressBytes = nodeIds.length;\n\tconst endpointAddressBytes = endpoints.length * 2;\n\tconst payload = new Bytes(\n\t\t// node addresses\n\t\tnodeAddressBytes\n\t\t\t// endpoint marker\n\t\t\t+ (endpointAddressBytes > 0 ? 1 : 0)\n\t\t\t// endpoints\n\t\t\t+ endpointAddressBytes,\n\t);\n\t// write node addresses\n\tfor (let i = 0; i < nodeIds.length; i++) {\n\t\tpayload[i] = nodeIds[i];\n\t}\n\t// write endpoint addresses\n\tif (endpointAddressBytes > 0) {\n\t\tlet offset = nodeIds.length;\n\t\tpayload[offset] = MULTI_CHANNEL_ASSOCIATION_MARKER;\n\t\toffset += 1;\n\t\tfor (let i = 0; i < endpoints.length; i++) {\n\t\t\tconst endpoint = endpoints[i];\n\t\t\tconst destination = typeof endpoint.endpoint === \"number\"\n\t\t\t\t// The destination is a single number\n\t\t\t\t? endpoint.endpoint & 0b0111_1111\n\t\t\t\t// The destination is a bit mask\n\t\t\t\t: encodeBitMask(endpoint.endpoint, 7)[0] | 0b1000_0000;\n\n\t\t\tpayload[offset + 2 * i] = endpoint.nodeId;\n\t\t\tpayload[offset + 2 * i + 1] = destination;\n\t\t}\n\t}\n\treturn payload;\n}\n\nfunction deserializeMultiChannelAssociationDestination(data: Uint8Array): {\n\tnodeIds: number[];\n\tendpoints: EndpointAddress[];\n} {\n\tconst nodeIds: number[] = [];\n\tlet endpointOffset = data.length;\n\t// Scan node ids until we find the marker\n\tfor (let i = 0; i < data.length; i++) {\n\t\tif (data[i] === MULTI_CHANNEL_ASSOCIATION_MARKER) {\n\t\t\tendpointOffset = i + 1;\n\t\t\tbreak;\n\t\t}\n\t\tnodeIds.push(data[i]);\n\t}\n\tconst endpoints: EndpointAddress[] = [];\n\tfor (let i = endpointOffset; i < data.length; i += 2) {\n\t\tconst nodeId = data[i];\n\t\tconst isBitMask = !!(data[i + 1] & 0b1000_0000);\n\t\tconst destination = data[i + 1] & 0b0111_1111;\n\t\tconst endpoint = isBitMask\n\t\t\t? parseBitMask(Bytes.from([destination]))\n\t\t\t: destination;\n\n\t\tendpoints.push({ nodeId, endpoint });\n\t}\n\n\treturn { nodeIds, endpoints };\n}\n\n// @noSetValueAPI\n\n@API(CommandClasses[\"Multi Channel Association\"])\nexport class MultiChannelAssociationCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(\n\t\tcmd: MultiChannelAssociationCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase MultiChannelAssociationCommand.Get:\n\t\t\tcase MultiChannelAssociationCommand.Set:\n\t\t\tcase MultiChannelAssociationCommand.Report:\n\t\t\tcase MultiChannelAssociationCommand.Remove:\n\t\t\tcase MultiChannelAssociationCommand.SupportedGroupingsGet:\n\t\t\tcase MultiChannelAssociationCommand.SupportedGroupingsReport:\n\t\t\t\treturn true; // This is mandatory\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t/**\n\t * Returns the number of association groups a node supports.\n\t * Association groups are consecutive, starting at 1.\n\t */\n\tpublic async getGroupCount(): Promise<MaybeNotKnown<number>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelAssociationCommand,\n\t\t\tMultiChannelAssociationCommand.SupportedGroupingsGet,\n\t\t);\n\n\t\tconst cc = new MultiChannelAssociationCCSupportedGroupingsGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultiChannelAssociationCCSupportedGroupingsReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.groupCount;\n\t}\n\n\t@validateArgs()\n\tpublic async reportGroupCount(groupCount: number): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelAssociationCommand,\n\t\t\tMultiChannelAssociationCommand.SupportedGroupingsReport,\n\t\t);\n\n\t\tconst cc = new MultiChannelAssociationCCSupportedGroupingsReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tgroupCount,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t/**\n\t * Returns information about an association group.\n\t */\n\t@validateArgs()\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getGroup(groupId: number) {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelAssociationCommand,\n\t\t\tMultiChannelAssociationCommand.Get,\n\t\t);\n\n\t\tconst cc = new MultiChannelAssociationCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tgroupId,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultiChannelAssociationCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"maxNodes\", \"nodeIds\", \"endpoints\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async sendReport(\n\t\toptions: MultiChannelAssociationCCReportOptions,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelAssociationCommand,\n\t\t\tMultiChannelAssociationCommand.Report,\n\t\t);\n\n\t\tconst cc = new MultiChannelAssociationCCReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t/**\n\t * Adds new nodes or endpoints to an association group\n\t */\n\t@validateArgs()\n\tpublic async addDestinations(\n\t\toptions: MultiChannelAssociationCCSetOptions,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelAssociationCommand,\n\t\t\tMultiChannelAssociationCommand.Set,\n\t\t);\n\n\t\tconst cc = new MultiChannelAssociationCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t/**\n\t * Removes nodes or endpoints from an association group\n\t */\n\t@validateArgs()\n\tpublic async removeDestinations(\n\t\toptions: MultiChannelAssociationCCRemoveOptions,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelAssociationCommand,\n\t\t\tMultiChannelAssociationCommand.Remove,\n\t\t);\n\n\t\tif (!options.groupId && this.version === 1) {\n\t\t\t// V1 does not support omitting the group, manually remove the destination from all groups\n\t\t\t// We don't want to do too much work, so find out which groups the destination is in\n\t\t\tconst currentDestinations = MultiChannelAssociationCC\n\t\t\t\t.getAllDestinationsCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t);\n\t\t\tfor (const [group, destinations] of currentDestinations) {\n\t\t\t\tconst cc = new MultiChannelAssociationCCRemove({\n\t\t\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t\t\tgroupId: group,\n\t\t\t\t\tnodeIds: destinations\n\t\t\t\t\t\t.filter((d) => d.endpoint != undefined)\n\t\t\t\t\t\t.map((d) => d.nodeId),\n\t\t\t\t\tendpoints: destinations.filter(\n\t\t\t\t\t\t(d): d is AssociationAddress & { endpoint: number } =>\n\t\t\t\t\t\t\td.endpoint != undefined,\n\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t\t// TODO: evaluate intermediate supervision results\n\t\t\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t\t\t}\n\t\t} else if (options.groupId && options.groupId < 0) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The group id must not be negative!\",\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t} else {\n\t\t\tconst cc = new MultiChannelAssociationCCRemove({\n\t\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t\t...options,\n\t\t\t});\n\t\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t\t}\n\t}\n}\n\n@commandClass(CommandClasses[\"Multi Channel Association\"])\n@implementedVersion(5)\n@ccValues(MultiChannelAssociationCCValues)\nexport class MultiChannelAssociationCC extends CommandClass {\n\tdeclare ccCommand: MultiChannelAssociationCommand;\n\n\tpublic determineRequiredCCInterviews(): readonly CommandClasses[] {\n\t\t// MultiChannelAssociationCC must be interviewed after Z-Wave+ if that is supported\n\t\treturn [\n\t\t\t...super.determineRequiredCCInterviews(),\n\t\t\tCommandClasses[\"Z-Wave Plus Info\"],\n\t\t\t// We need information about endpoints to correctly configure the lifeline associations\n\t\t\tCommandClasses[\"Multi Channel\"],\n\t\t\t// AssociationCC will short-circuit if this CC is supported\n\t\t\tCommandClasses.Association,\n\t\t];\n\t}\n\n\t/**\n\t * Returns the number of association groups reported by the node/endpoint.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getGroupCountCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t): number {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tMultiChannelAssociationCCValues.groupCount.endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t) || 0;\n\t}\n\n\t/**\n\t * Returns the number of nodes an association group supports.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getMaxNodesCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tgroupId: number,\n\t): number {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tMultiChannelAssociationCCValues.maxNodes(groupId).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t) ?? 0;\n\t}\n\n\t/**\n\t * Returns all the destinations of all association groups reported by the node/endpoint.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getAllDestinationsCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t): ReadonlyMap<number, readonly AssociationAddress[]> {\n\t\tconst ret = new Map<number, AssociationAddress[]>();\n\t\tconst groupCount = this.getGroupCountCached(ctx, endpoint);\n\t\tconst valueDB = ctx.getValueDB(endpoint.nodeId);\n\t\tfor (let i = 1; i <= groupCount; i++) {\n\t\t\tconst groupDestinations: AssociationAddress[] = [];\n\t\t\t// Add all node destinations\n\t\t\tconst nodes = valueDB.getValue<number[]>(\n\t\t\t\tMultiChannelAssociationCCValues.nodeIds(i).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t) ?? [];\n\t\t\tgroupDestinations.push(...nodes.map((nodeId) => ({ nodeId })));\n\t\t\t// And all endpoint destinations\n\t\t\tconst endpoints = valueDB.getValue<EndpointAddress[]>(\n\t\t\t\tMultiChannelAssociationCCValues.endpoints(i).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t) ?? [];\n\t\t\tfor (const ep of endpoints) {\n\t\t\t\tif (typeof ep.endpoint === \"number\") {\n\t\t\t\t\tgroupDestinations.push({\n\t\t\t\t\t\tnodeId: ep.nodeId,\n\t\t\t\t\t\tendpoint: ep.endpoint,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tgroupDestinations.push(\n\t\t\t\t\t\t...ep.endpoint.map((e) => ({\n\t\t\t\t\t\t\tnodeId: ep.nodeId,\n\t\t\t\t\t\t\tendpoint: e,\n\t\t\t\t\t\t})),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tret.set(\n\t\t\t\ti,\n\t\t\t\t// Filter out duplicates\n\t\t\t\tgroupDestinations.filter(\n\t\t\t\t\t(addr, index) =>\n\t\t\t\t\t\tindex\n\t\t\t\t\t\t\t=== groupDestinations.findIndex(\n\t\t\t\t\t\t\t\t({ nodeId, endpoint }) =>\n\t\t\t\t\t\t\t\t\tnodeId === addr.nodeId\n\t\t\t\t\t\t\t\t\t&& endpoint === addr.endpoint,\n\t\t\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\treturn ret;\n\t}\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst mcAPI = CCAPI.create(\n\t\t\tCommandClasses[\"Multi Channel Association\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t);\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\t// First find out how many groups are supported as multi channel\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"querying number of multi channel association groups...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst mcGroupCount = await mcAPI.getGroupCount();\n\t\tif (mcGroupCount != undefined) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`supports ${mcGroupCount} multi channel association groups`,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t} else {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t\"Querying multi channel association groups timed out, skipping interview...\",\n\t\t\t\tlevel: \"warn\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Query each association group for its members\n\t\tawait this.refreshValues(ctx);\n\n\t\t// And set up lifeline associations\n\t\tawait ccUtils.configureLifelineAssociations(ctx, endpoint);\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst mcAPI = CCAPI.create(\n\t\t\tCommandClasses[\"Multi Channel Association\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\t\tconst assocAPI = CCAPI.create(\n\t\t\tCommandClasses.Association,\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tconst mcGroupCount: number = this.getValue(\n\t\t\tctx,\n\t\t\tMultiChannelAssociationCCValues.groupCount,\n\t\t) ?? 0;\n\n\t\t// Some devices report more association groups than multi channel association groups, so we need this info here\n\t\tconst assocGroupCount: number =\n\t\t\tthis.getValue(ctx, AssociationCCValues.groupCount)\n\t\t\t|| mcGroupCount;\n\n\t\t// Then query each multi channel association group\n\t\tfor (let groupId = 1; groupId <= mcGroupCount; groupId++) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`querying multi channel association group #${groupId}...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst group = await mcAPI.getGroup(groupId);\n\t\t\tif (!group) continue;\n\t\t\tconst logMessage =\n\t\t\t\t`received information for multi channel association group #${groupId}:\nmaximum # of nodes: ${group.maxNodes}\ncurrently assigned nodes: ${group.nodeIds.map(String).join(\", \")}\ncurrently assigned endpoints: ${\n\t\t\t\t\tgroup.endpoints\n\t\t\t\t\t\t.map(({ nodeId, endpoint }) => {\n\t\t\t\t\t\t\tif (typeof endpoint === \"number\") {\n\t\t\t\t\t\t\t\treturn `${nodeId}:${endpoint}`;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn `${nodeId}:[${\n\t\t\t\t\t\t\t\t\tendpoint.map(String).join(\", \")\n\t\t\t\t\t\t\t\t}]`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(\"\")\n\t\t\t\t}`;\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: logMessage,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\n\t\t// Check if there are more non-multi-channel association groups we haven't queried yet\n\t\tif (assocAPI.isSupported() && assocGroupCount > mcGroupCount) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`querying additional non-multi-channel association groups...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tfor (\n\t\t\t\tlet groupId = mcGroupCount + 1;\n\t\t\t\tgroupId <= assocGroupCount;\n\t\t\t\tgroupId++\n\t\t\t) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `querying association group #${groupId}...`,\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tconst group = await assocAPI.getGroup(groupId);\n\t\t\t\tif (!group) continue;\n\t\t\t\tconst logMessage =\n\t\t\t\t\t`received information for association group #${groupId}:\nmaximum # of nodes: ${group.maxNodes}\ncurrently assigned nodes: ${group.nodeIds.map(String).join(\", \")}`;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n// @publicAPI\nexport type MultiChannelAssociationCCSetOptions =\n\t& {\n\t\tgroupId: number;\n\t}\n\t& (\n\t\t| { nodeIds: number[] }\n\t\t| { endpoints: EndpointAddress[] }\n\t\t| { nodeIds: number[]; endpoints: EndpointAddress[] }\n\t);\n\n@CCCommand(MultiChannelAssociationCommand.Set)\n@useSupervision()\nexport class MultiChannelAssociationCCSet extends MultiChannelAssociationCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelAssociationCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.groupId < 1) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The group id must be positive!\",\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.groupId = options.groupId;\n\t\tthis.nodeIds = (\"nodeIds\" in options && options.nodeIds) || [];\n\t\tif (this.nodeIds.some((n) => n < 1 || n > MAX_NODES)) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`All node IDs must be between 1 and ${MAX_NODES}!`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.endpoints = (\"endpoints\" in options && options.endpoints)\n\t\t\t|| [];\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelAssociationCCSet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst groupId = raw.payload[0];\n\n\t\tconst { nodeIds, endpoints } =\n\t\t\tdeserializeMultiChannelAssociationDestination(\n\t\t\t\traw.payload.subarray(1),\n\t\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgroupId,\n\t\t\tnodeIds,\n\t\t\tendpoints,\n\t\t});\n\t}\n\n\tpublic groupId: number;\n\tpublic nodeIds: number[];\n\tpublic endpoints: EndpointAddress[];\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.groupId]),\n\t\t\tserializeMultiChannelAssociationDestination(\n\t\t\t\tthis.nodeIds,\n\t\t\t\tthis.endpoints,\n\t\t\t),\n\t\t]);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"group id\": this.groupId,\n\t\t\t\t\"node ids\": this.nodeIds.join(\", \"),\n\t\t\t\tendpoints: endpointAddressesToString(this.endpoints),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelAssociationCCRemoveOptions {\n\t/** The group from which to remove the nodes. If none is specified, the nodes will be removed from all groups. */\n\tgroupId?: number;\n\t/** The nodes to remove. If no nodeIds and no endpoint addresses are specified, ALL nodes will be removed. */\n\tnodeIds?: number[];\n\t/** The single endpoints to remove. If no nodeIds and no endpoint addresses are specified, ALL will be removed. */\n\tendpoints?: EndpointAddress[];\n}\n\n@CCCommand(MultiChannelAssociationCommand.Remove)\n@useSupervision()\nexport class MultiChannelAssociationCCRemove extends MultiChannelAssociationCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelAssociationCCRemoveOptions>,\n\t) {\n\t\tsuper(options);\n\t\t// When removing associations, we allow invalid node IDs.\n\t\t// See GH#3606 - it is possible that those exist.\n\t\tthis.groupId = options.groupId;\n\t\tthis.nodeIds = options.nodeIds;\n\t\tthis.endpoints = options.endpoints;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelAssociationCCRemove {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst groupId: number | undefined = raw.payload[0];\n\n\t\tconst { nodeIds, endpoints } =\n\t\t\tdeserializeMultiChannelAssociationDestination(\n\t\t\t\traw.payload.subarray(1),\n\t\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgroupId,\n\t\t\tnodeIds,\n\t\t\tendpoints,\n\t\t});\n\t}\n\n\tpublic groupId?: number;\n\tpublic nodeIds?: number[];\n\tpublic endpoints?: EndpointAddress[];\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.groupId || 0]),\n\t\t\tserializeMultiChannelAssociationDestination(\n\t\t\t\tthis.nodeIds || [],\n\t\t\t\tthis.endpoints || [],\n\t\t\t),\n\t\t]);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"group id\": this.groupId || \"(all groups)\",\n\t\t};\n\t\tif (this.nodeIds) {\n\t\t\tmessage[\"node ids\"] = this.nodeIds.join(\", \");\n\t\t}\n\t\tif (this.endpoints) {\n\t\t\tmessage.endpoints = endpointAddressesToString(this.endpoints);\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelAssociationCCReportOptions {\n\tgroupId: number;\n\tmaxNodes: number;\n\tnodeIds: number[];\n\tendpoints: EndpointAddress[];\n\treportsToFollow: number;\n}\n\n@CCCommand(MultiChannelAssociationCommand.Report)\n@ccValueProperty(\n\t\"maxNodes\",\n\tMultiChannelAssociationCCValues.maxNodes,\n\t(self) => [self.groupId],\n)\n@ccValueProperty(\n\t\"nodeIds\",\n\tMultiChannelAssociationCCValues.nodeIds,\n\t(self) => [self.groupId],\n)\n@ccValueProperty(\n\t\"endpoints\",\n\tMultiChannelAssociationCCValues.endpoints,\n\t(self) => [self.groupId],\n)\nexport class MultiChannelAssociationCCReport extends MultiChannelAssociationCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelAssociationCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.groupId = options.groupId;\n\t\tthis.maxNodes = options.maxNodes;\n\t\tthis.nodeIds = options.nodeIds;\n\t\tthis.endpoints = options.endpoints;\n\t\tthis.reportsToFollow = options.reportsToFollow;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelAssociationCCReport {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst groupId = raw.payload[0];\n\t\tconst maxNodes = raw.payload[1];\n\t\tconst reportsToFollow = raw.payload[2];\n\n\t\tconst { nodeIds, endpoints } =\n\t\t\tdeserializeMultiChannelAssociationDestination(\n\t\t\t\traw.payload.subarray(3),\n\t\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgroupId,\n\t\t\tmaxNodes,\n\t\t\tnodeIds,\n\t\t\tendpoints,\n\t\t\treportsToFollow,\n\t\t});\n\t}\n\n\tpublic readonly groupId: number;\n\n\tpublic maxNodes: number;\n\n\tpublic nodeIds: number[];\n\n\tpublic endpoints: EndpointAddress[];\n\n\tpublic reportsToFollow: number;\n\n\tpublic getPartialCCSessionId(): Record<string, any> | undefined {\n\t\t// Distinguish sessions by the association group ID\n\t\treturn { groupId: this.groupId };\n\t}\n\n\tpublic expectMoreMessages(): boolean {\n\t\treturn this.reportsToFollow > 0;\n\t}\n\n\t/** @deprecated Use {@link mergePartialCCsAsync} instead */\n\tpublic mergePartialCCs(\n\t\tpartials: MultiChannelAssociationCCReport[],\n\t\t_ctx: CCParsingContext,\n\t): void {\n\t\t// Concat the list of nodes\n\t\tthis.nodeIds = [...partials, this]\n\t\t\t.map((report) => [...report.nodeIds])\n\t\t\t.reduce((prev, cur) => prev.concat(...cur), []);\n\t\t// Concat the list of endpoints\n\t\tthis.endpoints = [...partials, this]\n\t\t\t.map((report) => [...report.endpoints])\n\t\t\t.reduce((prev, cur) => prev.concat(...cur), []);\n\t}\n\n\tpublic mergePartialCCsAsync(\n\t\tpartials: MultiChannelAssociationCCReport[],\n\t\t_ctx: CCParsingContext,\n\t): Promise<void> {\n\t\t// Concat the list of nodes\n\t\tthis.nodeIds = [...partials, this]\n\t\t\t.map((report) => [...report.nodeIds])\n\t\t\t.reduce((prev, cur) => prev.concat(...cur), []);\n\t\t// Concat the list of endpoints\n\t\tthis.endpoints = [...partials, this]\n\t\t\t.map((report) => [...report.endpoints])\n\t\t\t.reduce((prev, cur) => prev.concat(...cur), []);\n\t\treturn Promise.resolve();\n\t}\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tconst destinations = serializeMultiChannelAssociationDestination(\n\t\t\tthis.nodeIds,\n\t\t\tthis.endpoints,\n\t\t);\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([\n\t\t\t\tthis.groupId,\n\t\t\t\tthis.maxNodes,\n\t\t\t\tthis.reportsToFollow,\n\t\t\t]),\n\t\t\tdestinations,\n\t\t]);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"group id\": this.groupId,\n\t\t\t\t\"maximum # of nodes\": this.maxNodes,\n\t\t\t\t\"node ids\": this.nodeIds.join(\", \"),\n\t\t\t\tendpoints: endpointAddressesToString(this.endpoints),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelAssociationCCGetOptions {\n\tgroupId: number;\n}\n\n@CCCommand(MultiChannelAssociationCommand.Get)\n@expectedCCResponse(MultiChannelAssociationCCReport)\nexport class MultiChannelAssociationCCGet extends MultiChannelAssociationCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelAssociationCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.groupId < 1) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The group id must be positive!\",\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.groupId = options.groupId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelAssociationCCGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst groupId = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgroupId,\n\t\t});\n\t}\n\n\tpublic groupId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.groupId]);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { \"group id\": this.groupId },\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelAssociationCCSupportedGroupingsReportOptions {\n\tgroupCount: number;\n}\n\n@CCCommand(MultiChannelAssociationCommand.SupportedGroupingsReport)\n@ccValueProperty(\"groupCount\", MultiChannelAssociationCCValues.groupCount)\nexport class MultiChannelAssociationCCSupportedGroupingsReport\n\textends MultiChannelAssociationCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<\n\t\t\tMultiChannelAssociationCCSupportedGroupingsReportOptions\n\t\t>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.groupCount = options.groupCount;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelAssociationCCSupportedGroupingsReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst groupCount = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgroupCount,\n\t\t});\n\t}\n\n\tpublic readonly groupCount: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.groupCount]);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { \"group count\": this.groupCount },\n\t\t};\n\t}\n}\n\n@CCCommand(MultiChannelAssociationCommand.SupportedGroupingsGet)\n@expectedCCResponse(MultiChannelAssociationCCSupportedGroupingsReport)\nexport class MultiChannelAssociationCCSupportedGroupingsGet\n\textends MultiChannelAssociationCC\n{}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_safe", "endpoint"]
7
7
  }
@@ -307,7 +307,9 @@ export declare class MultiChannelCCEndPointFindReport extends MultiChannelCC {
307
307
  serialize(ctx: CCEncodingContext): Bytes;
308
308
  getPartialCCSessionId(): Record<string, any> | undefined;
309
309
  expectMoreMessages(): boolean;
310
+ /** @deprecated Use {@link mergePartialCCsAsync} instead */
310
311
  mergePartialCCs(partials: MultiChannelCCEndPointFindReport[], _ctx: CCParsingContext): void;
312
+ mergePartialCCsAsync(partials: MultiChannelCCEndPointFindReport[], _ctx: CCParsingContext): Promise<void>;
311
313
  toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
312
314
  }
313
315
  export interface MultiChannelCCEndPointFindOptions {
@@ -350,11 +352,15 @@ export interface MultiChannelCCCommandEncapsulationOptions {
350
352
  }
351
353
  export declare class MultiChannelCCCommandEncapsulation extends MultiChannelCC {
352
354
  constructor(options: WithAddress<MultiChannelCCCommandEncapsulationOptions>);
355
+ /** @deprecated Use {@link fromAsync} instead */
353
356
  static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelCCCommandEncapsulation;
357
+ static fromAsync(raw: CCRaw, ctx: CCParsingContext): Promise<MultiChannelCCCommandEncapsulation>;
354
358
  encapsulated: CommandClass;
355
359
  /** The destination end point (0-127) or an array of destination end points (1-7) */
356
360
  destination: MultiChannelCCDestination;
361
+ /** @deprecated Use {@link serializeAsync} instead */
357
362
  serialize(ctx: CCEncodingContext): Bytes;
363
+ serializeAsync(ctx: CCEncodingContext): Promise<Bytes>;
358
364
  toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
359
365
  protected computeEncapsulationOverhead(): number;
360
366
  }
@@ -384,9 +390,13 @@ export interface MultiChannelCCV1CommandEncapsulationOptions {
384
390
  }
385
391
  export declare class MultiChannelCCV1CommandEncapsulation extends MultiChannelCC {
386
392
  constructor(options: WithAddress<MultiChannelCCV1CommandEncapsulationOptions>);
393
+ /** @deprecated Use {@link fromAsync} instead */
387
394
  static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelCCV1CommandEncapsulation;
395
+ static fromAsync(raw: CCRaw, ctx: CCParsingContext): Promise<MultiChannelCCV1CommandEncapsulation>;
388
396
  encapsulated: CommandClass;
397
+ /** @deprecated Use {@link serializeAsync} instead */
389
398
  serialize(ctx: CCEncodingContext): Bytes;
399
+ serializeAsync(ctx: CCEncodingContext): Promise<Bytes>;
390
400
  protected computeEncapsulationOverhead(): number;
391
401
  toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
392
402
  }
@@ -837,9 +837,14 @@ let MultiChannelCCEndPointFindReport = (() => {
837
837
  expectMoreMessages() {
838
838
  return this.reportsToFollow > 0;
839
839
  }
840
+ /** @deprecated Use {@link mergePartialCCsAsync} instead */
840
841
  mergePartialCCs(partials, _ctx) {
841
842
  this.foundEndpoints = [...partials, this].map((report) => report.foundEndpoints).reduce((prev, cur) => prev.concat(...cur), []);
842
843
  }
844
+ mergePartialCCsAsync(partials, _ctx) {
845
+ this.foundEndpoints = [...partials, this].map((report) => report.foundEndpoints).reduce((prev, cur) => prev.concat(...cur), []);
846
+ return Promise.resolve();
847
+ }
843
848
  toLogEntry(ctx) {
844
849
  return {
845
850
  ...super.toLogEntry(ctx),
@@ -1042,6 +1047,7 @@ let MultiChannelCCCommandEncapsulation = (() => {
1042
1047
  }
1043
1048
  this.destination = options.destination;
1044
1049
  }
1050
+ /** @deprecated Use {@link fromAsync} instead */
1045
1051
  static from(raw, ctx) {
1046
1052
  (0, import_safe.validatePayload)(raw.payload.length >= 2);
1047
1053
  let endpointIndex;
@@ -1065,9 +1071,33 @@ let MultiChannelCCCommandEncapsulation = (() => {
1065
1071
  encapsulated
1066
1072
  });
1067
1073
  }
1074
+ static async fromAsync(raw, ctx) {
1075
+ (0, import_safe.validatePayload)(raw.payload.length >= 2);
1076
+ let endpointIndex;
1077
+ let destination;
1078
+ if (ctx.getDeviceConfig?.(ctx.sourceNodeId)?.compat?.treatDestinationEndpointAsSource) {
1079
+ endpointIndex = raw.payload[1] & 127;
1080
+ destination = 0;
1081
+ } else {
1082
+ endpointIndex = raw.payload[0] & 127;
1083
+ const isBitMask = !!(raw.payload[1] & 128);
1084
+ destination = raw.payload[1] & 127;
1085
+ if (isBitMask) {
1086
+ destination = (0, import_safe.parseBitMask)(import_safe2.Bytes.from([destination]));
1087
+ }
1088
+ }
1089
+ const encapsulated = await import_CommandClass.CommandClass.parseAsync(raw.payload.subarray(2), ctx);
1090
+ return new this({
1091
+ nodeId: ctx.sourceNodeId,
1092
+ endpointIndex,
1093
+ destination,
1094
+ encapsulated
1095
+ });
1096
+ }
1068
1097
  encapsulated;
1069
1098
  /** The destination end point (0-127) or an array of destination end points (1-7) */
1070
1099
  destination;
1100
+ /** @deprecated Use {@link serializeAsync} instead */
1071
1101
  serialize(ctx) {
1072
1102
  if (ctx.getDeviceConfig?.(this.nodeId)?.compat?.treatDestinationEndpointAsSource) {
1073
1103
  if (typeof this.destination === "number") {
@@ -1077,10 +1107,24 @@ let MultiChannelCCCommandEncapsulation = (() => {
1077
1107
  const destination = typeof this.destination === "number" ? this.destination & 127 : (0, import_safe.encodeBitMask)(this.destination, 7)[0] | 128;
1078
1108
  this.payload = import_safe2.Bytes.concat([
1079
1109
  import_safe2.Bytes.from([this.endpointIndex & 127, destination]),
1110
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1080
1111
  this.encapsulated.serialize(ctx)
1081
1112
  ]);
1082
1113
  return super.serialize(ctx);
1083
1114
  }
1115
+ async serializeAsync(ctx) {
1116
+ if (ctx.getDeviceConfig?.(this.nodeId)?.compat?.treatDestinationEndpointAsSource) {
1117
+ if (typeof this.destination === "number") {
1118
+ this.endpointIndex = this.destination;
1119
+ }
1120
+ }
1121
+ const destination = typeof this.destination === "number" ? this.destination & 127 : (0, import_safe.encodeBitMask)(this.destination, 7)[0] | 128;
1122
+ this.payload = import_safe2.Bytes.concat([
1123
+ import_safe2.Bytes.from([this.endpointIndex & 127, destination]),
1124
+ await this.encapsulated.serializeAsync(ctx)
1125
+ ]);
1126
+ return super.serializeAsync(ctx);
1127
+ }
1084
1128
  toLogEntry(ctx) {
1085
1129
  return {
1086
1130
  ...super.toLogEntry(ctx),
@@ -1216,6 +1260,7 @@ let MultiChannelCCV1CommandEncapsulation = (() => {
1216
1260
  this.encapsulated = options.encapsulated;
1217
1261
  this.endpointIndex = this.encapsulated.endpointIndex;
1218
1262
  }
1263
+ /** @deprecated Use {@link fromAsync} instead */
1219
1264
  static from(raw, ctx) {
1220
1265
  (0, import_safe.validatePayload)(raw.payload.length >= 1);
1221
1266
  const endpointIndex = raw.payload[0];
@@ -1227,14 +1272,34 @@ let MultiChannelCCV1CommandEncapsulation = (() => {
1227
1272
  encapsulated
1228
1273
  });
1229
1274
  }
1275
+ static async fromAsync(raw, ctx) {
1276
+ (0, import_safe.validatePayload)(raw.payload.length >= 1);
1277
+ const endpointIndex = raw.payload[0];
1278
+ const isV2withV1Header = raw.payload.length >= 2 && raw.payload[1] === 0;
1279
+ const encapsulated = await import_CommandClass.CommandClass.parseAsync(raw.payload.subarray(isV2withV1Header ? 2 : 1), ctx);
1280
+ return new this({
1281
+ nodeId: ctx.sourceNodeId,
1282
+ endpointIndex,
1283
+ encapsulated
1284
+ });
1285
+ }
1230
1286
  encapsulated;
1287
+ /** @deprecated Use {@link serializeAsync} instead */
1231
1288
  serialize(ctx) {
1232
1289
  this.payload = import_safe2.Bytes.concat([
1233
1290
  import_safe2.Bytes.from([this.endpointIndex]),
1291
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
1234
1292
  this.encapsulated.serialize(ctx)
1235
1293
  ]);
1236
1294
  return super.serialize(ctx);
1237
1295
  }
1296
+ async serializeAsync(ctx) {
1297
+ this.payload = import_safe2.Bytes.concat([
1298
+ import_safe2.Bytes.from([this.endpointIndex]),
1299
+ await this.encapsulated.serializeAsync(ctx)
1300
+ ]);
1301
+ return super.serializeAsync(ctx);
1302
+ }
1238
1303
  computeEncapsulationOverhead() {
1239
1304
  return super.computeEncapsulationOverhead() + 1;
1240
1305
  }