@zwave-js/cc 14.0.0-beta.4 → 14.0.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 (331) hide show
  1. package/build/cjs/cc/AlarmSensorCC.js +381 -266
  2. package/build/cjs/cc/AlarmSensorCC.js.map +3 -3
  3. package/build/cjs/cc/AssociationCC.js +669 -503
  4. package/build/cjs/cc/AssociationCC.js.map +3 -3
  5. package/build/cjs/cc/AssociationGroupInfoCC.js +633 -492
  6. package/build/cjs/cc/AssociationGroupInfoCC.js.map +3 -3
  7. package/build/cjs/cc/BarrierOperatorCC.js +595 -429
  8. package/build/cjs/cc/BarrierOperatorCC.js.map +3 -3
  9. package/build/cjs/cc/BasicCC.js +354 -260
  10. package/build/cjs/cc/BasicCC.js.map +3 -3
  11. package/build/cjs/cc/BatteryCC.js +427 -345
  12. package/build/cjs/cc/BatteryCC.js.map +3 -3
  13. package/build/cjs/cc/BinarySensorCC.js +391 -276
  14. package/build/cjs/cc/BinarySensorCC.js.map +3 -3
  15. package/build/cjs/cc/BinarySwitchCC.js +347 -253
  16. package/build/cjs/cc/BinarySwitchCC.js.map +3 -3
  17. package/build/cjs/cc/CRC16CC.js +160 -85
  18. package/build/cjs/cc/CRC16CC.js.map +3 -3
  19. package/build/cjs/cc/CentralSceneCC.js +459 -324
  20. package/build/cjs/cc/CentralSceneCC.js.map +3 -3
  21. package/build/cjs/cc/ClimateControlScheduleCC.js +459 -293
  22. package/build/cjs/cc/ClimateControlScheduleCC.js.map +3 -3
  23. package/build/cjs/cc/ClockCC.js +254 -150
  24. package/build/cjs/cc/ClockCC.js.map +3 -3
  25. package/build/cjs/cc/ColorSwitchCC.js +758 -610
  26. package/build/cjs/cc/ColorSwitchCC.js.map +3 -3
  27. package/build/cjs/cc/ConfigurationCC.js +1700 -1453
  28. package/build/cjs/cc/ConfigurationCC.js.map +3 -3
  29. package/build/cjs/cc/DeviceResetLocallyCC.js +125 -49
  30. package/build/cjs/cc/DeviceResetLocallyCC.js.map +3 -3
  31. package/build/cjs/cc/DoorLockCC.js +904 -777
  32. package/build/cjs/cc/DoorLockCC.js.map +3 -3
  33. package/build/cjs/cc/DoorLockLoggingCC.js +321 -206
  34. package/build/cjs/cc/DoorLockLoggingCC.js.map +3 -3
  35. package/build/cjs/cc/EnergyProductionCC.js +249 -160
  36. package/build/cjs/cc/EnergyProductionCC.js.map +3 -3
  37. package/build/cjs/cc/EntryControlCC.js +619 -458
  38. package/build/cjs/cc/EntryControlCC.js.map +3 -3
  39. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +898 -698
  40. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +3 -3
  41. package/build/cjs/cc/HailCC.js +57 -11
  42. package/build/cjs/cc/HailCC.js.map +2 -2
  43. package/build/cjs/cc/HumidityControlModeCC.js +359 -233
  44. package/build/cjs/cc/HumidityControlModeCC.js.map +3 -3
  45. package/build/cjs/cc/HumidityControlOperatingStateCC.js +189 -103
  46. package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +3 -3
  47. package/build/cjs/cc/HumidityControlSetpointCC.js +682 -495
  48. package/build/cjs/cc/HumidityControlSetpointCC.js.map +3 -3
  49. package/build/cjs/cc/InclusionControllerCC.js +205 -114
  50. package/build/cjs/cc/InclusionControllerCC.js.map +3 -3
  51. package/build/cjs/cc/IndicatorCC.js +897 -736
  52. package/build/cjs/cc/IndicatorCC.js.map +3 -3
  53. package/build/cjs/cc/IrrigationCC.js +1651 -1405
  54. package/build/cjs/cc/IrrigationCC.js.map +3 -3
  55. package/build/cjs/cc/LanguageCC.js +268 -171
  56. package/build/cjs/cc/LanguageCC.js.map +3 -3
  57. package/build/cjs/cc/LockCC.js +254 -154
  58. package/build/cjs/cc/LockCC.js.map +3 -3
  59. package/build/cjs/cc/ManufacturerProprietaryCC.js +189 -129
  60. package/build/cjs/cc/ManufacturerProprietaryCC.js.map +2 -2
  61. package/build/cjs/cc/ManufacturerSpecificCC.js +319 -213
  62. package/build/cjs/cc/ManufacturerSpecificCC.js.map +3 -3
  63. package/build/cjs/cc/MeterCC.js +827 -707
  64. package/build/cjs/cc/MeterCC.js.map +3 -3
  65. package/build/cjs/cc/MultiChannelAssociationCC.js +612 -478
  66. package/build/cjs/cc/MultiChannelAssociationCC.js.map +3 -3
  67. package/build/cjs/cc/MultiChannelCC.js +1037 -819
  68. package/build/cjs/cc/MultiChannelCC.js.map +3 -3
  69. package/build/cjs/cc/MultiCommandCC.js +172 -97
  70. package/build/cjs/cc/MultiCommandCC.js.map +3 -3
  71. package/build/cjs/cc/MultilevelSensorCC.js +589 -449
  72. package/build/cjs/cc/MultilevelSensorCC.js.map +3 -3
  73. package/build/cjs/cc/MultilevelSwitchCC.js +587 -439
  74. package/build/cjs/cc/MultilevelSwitchCC.js.map +3 -3
  75. package/build/cjs/cc/NoOperationCC.js +89 -27
  76. package/build/cjs/cc/NoOperationCC.js.map +2 -2
  77. package/build/cjs/cc/NodeNamingCC.js +417 -277
  78. package/build/cjs/cc/NodeNamingCC.js.map +3 -3
  79. package/build/cjs/cc/NotificationCC.js +972 -818
  80. package/build/cjs/cc/NotificationCC.js.map +3 -3
  81. package/build/cjs/cc/PowerlevelCC.js +450 -303
  82. package/build/cjs/cc/PowerlevelCC.js.map +3 -3
  83. package/build/cjs/cc/ProtectionCC.js +686 -494
  84. package/build/cjs/cc/ProtectionCC.js.map +3 -3
  85. package/build/cjs/cc/SceneActivationCC.js +165 -97
  86. package/build/cjs/cc/SceneActivationCC.js.map +3 -3
  87. package/build/cjs/cc/SceneActuatorConfigurationCC.js +346 -243
  88. package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +3 -3
  89. package/build/cjs/cc/SceneControllerConfigurationCC.js +401 -298
  90. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +3 -3
  91. package/build/cjs/cc/ScheduleEntryLockCC.js +1552 -1272
  92. package/build/cjs/cc/ScheduleEntryLockCC.js.map +3 -3
  93. package/build/cjs/cc/Security2CC.js +1483 -1219
  94. package/build/cjs/cc/Security2CC.js.map +3 -3
  95. package/build/cjs/cc/SecurityCC.js +839 -619
  96. package/build/cjs/cc/SecurityCC.js.map +3 -3
  97. package/build/cjs/cc/SoundSwitchCC.js +707 -515
  98. package/build/cjs/cc/SoundSwitchCC.js.map +3 -3
  99. package/build/cjs/cc/SupervisionCC.js +327 -237
  100. package/build/cjs/cc/SupervisionCC.js.map +3 -3
  101. package/build/cjs/cc/ThermostatFanModeCC.js +386 -263
  102. package/build/cjs/cc/ThermostatFanModeCC.js.map +3 -3
  103. package/build/cjs/cc/ThermostatFanStateCC.js +192 -106
  104. package/build/cjs/cc/ThermostatFanStateCC.js.map +3 -3
  105. package/build/cjs/cc/ThermostatModeCC.js +425 -302
  106. package/build/cjs/cc/ThermostatModeCC.js.map +3 -3
  107. package/build/cjs/cc/ThermostatOperatingStateCC.js +188 -102
  108. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +3 -3
  109. package/build/cjs/cc/ThermostatSetbackCC.js +277 -173
  110. package/build/cjs/cc/ThermostatSetbackCC.js.map +3 -3
  111. package/build/cjs/cc/ThermostatSetpointCC.js +645 -491
  112. package/build/cjs/cc/ThermostatSetpointCC.js.map +3 -3
  113. package/build/cjs/cc/TimeCC.js +515 -353
  114. package/build/cjs/cc/TimeCC.js.map +3 -3
  115. package/build/cjs/cc/TimeParametersCC.js +302 -202
  116. package/build/cjs/cc/TimeParametersCC.js.map +3 -3
  117. package/build/cjs/cc/TransportServiceCC.js +433 -315
  118. package/build/cjs/cc/TransportServiceCC.js.map +3 -3
  119. package/build/cjs/cc/UserCodeCC.js +1385 -1102
  120. package/build/cjs/cc/UserCodeCC.js.map +3 -3
  121. package/build/cjs/cc/VersionCC.js +696 -562
  122. package/build/cjs/cc/VersionCC.js.map +3 -3
  123. package/build/cjs/cc/WakeUpCC.js +499 -346
  124. package/build/cjs/cc/WakeUpCC.js.map +3 -3
  125. package/build/cjs/cc/WindowCoveringCC.js +626 -478
  126. package/build/cjs/cc/WindowCoveringCC.js.map +3 -3
  127. package/build/cjs/cc/ZWaveLongRangeCC.js +57 -10
  128. package/build/cjs/cc/ZWaveLongRangeCC.js.map +2 -2
  129. package/build/cjs/cc/ZWavePlusCC.js +233 -159
  130. package/build/cjs/cc/ZWavePlusCC.js.map +3 -3
  131. package/build/cjs/cc/ZWaveProtocolCC.js +1515 -948
  132. package/build/cjs/cc/ZWaveProtocolCC.js.map +3 -3
  133. package/build/cjs/cc/manufacturerProprietary/Decorators.d.ts +4 -4
  134. package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +1 -1
  135. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +395 -274
  136. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +3 -3
  137. package/build/cjs/lib/CommandClassDecorators.d.ts +11 -15
  138. package/build/cjs/lib/CommandClassDecorators.js +19 -20
  139. package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
  140. package/build/cjs/lib/Security2/Extension.d.ts +1 -1
  141. package/build/cjs/lib/Security2/Extension.js +217 -126
  142. package/build/cjs/lib/Security2/Extension.js.map +3 -3
  143. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  144. package/build/esm/cc/AlarmSensorCC.js +389 -291
  145. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  146. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  147. package/build/esm/cc/AssociationCC.js +678 -537
  148. package/build/esm/cc/AssociationCC.js.map +1 -1
  149. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  150. package/build/esm/cc/AssociationGroupInfoCC.js +659 -539
  151. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  152. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  153. package/build/esm/cc/BarrierOperatorCC.js +634 -493
  154. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  155. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  156. package/build/esm/cc/BasicCC.js +380 -302
  157. package/build/esm/cc/BasicCC.js.map +1 -1
  158. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  159. package/build/esm/cc/BatteryCC.js +449 -384
  160. package/build/esm/cc/BatteryCC.js.map +1 -1
  161. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  162. package/build/esm/cc/BinarySensorCC.js +395 -297
  163. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  164. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  165. package/build/esm/cc/BinarySwitchCC.js +353 -274
  166. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  167. package/build/esm/cc/CRC16CC.js +162 -98
  168. package/build/esm/cc/CRC16CC.js.map +1 -1
  169. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  170. package/build/esm/cc/CentralSceneCC.js +465 -351
  171. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  172. package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
  173. package/build/esm/cc/ClimateControlScheduleCC.js +454 -313
  174. package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
  175. package/build/esm/cc/ClockCC.js +248 -159
  176. package/build/esm/cc/ClockCC.js.map +1 -1
  177. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  178. package/build/esm/cc/ColorSwitchCC.js +802 -677
  179. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  180. package/build/esm/cc/ConfigurationCC.js +1899 -1687
  181. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  182. package/build/esm/cc/DeviceResetLocallyCC.js +124 -59
  183. package/build/esm/cc/DeviceResetLocallyCC.js.map +1 -1
  184. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  185. package/build/esm/cc/DoorLockCC.js +951 -849
  186. package/build/esm/cc/DoorLockCC.js.map +1 -1
  187. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
  188. package/build/esm/cc/DoorLockLoggingCC.js +316 -218
  189. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
  190. package/build/esm/cc/EnergyProductionCC.js +240 -164
  191. package/build/esm/cc/EnergyProductionCC.js.map +1 -1
  192. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  193. package/build/esm/cc/EntryControlCC.js +629 -493
  194. package/build/esm/cc/EntryControlCC.js.map +1 -1
  195. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  196. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +938 -769
  197. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  198. package/build/esm/cc/HailCC.js +51 -12
  199. package/build/esm/cc/HailCC.js.map +1 -1
  200. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  201. package/build/esm/cc/HumidityControlModeCC.js +357 -250
  202. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  203. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
  204. package/build/esm/cc/HumidityControlOperatingStateCC.js +182 -109
  205. package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
  206. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  207. package/build/esm/cc/HumidityControlSetpointCC.js +706 -546
  208. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  209. package/build/esm/cc/InclusionControllerCC.js +197 -119
  210. package/build/esm/cc/InclusionControllerCC.js.map +1 -1
  211. package/build/esm/cc/IndicatorCC.js +973 -835
  212. package/build/esm/cc/IndicatorCC.js.map +1 -1
  213. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  214. package/build/esm/cc/IrrigationCC.js +1697 -1496
  215. package/build/esm/cc/IrrigationCC.js.map +1 -1
  216. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  217. package/build/esm/cc/LanguageCC.js +266 -184
  218. package/build/esm/cc/LanguageCC.js.map +1 -1
  219. package/build/esm/cc/LockCC.d.ts.map +1 -1
  220. package/build/esm/cc/LockCC.js +247 -162
  221. package/build/esm/cc/LockCC.js.map +1 -1
  222. package/build/esm/cc/ManufacturerProprietaryCC.js +192 -141
  223. package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
  224. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  225. package/build/esm/cc/ManufacturerSpecificCC.js +312 -223
  226. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  227. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  228. package/build/esm/cc/MeterCC.js +896 -795
  229. package/build/esm/cc/MeterCC.js.map +1 -1
  230. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  231. package/build/esm/cc/MultiChannelAssociationCC.js +631 -518
  232. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  233. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  234. package/build/esm/cc/MultiChannelCC.js +1106 -921
  235. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  236. package/build/esm/cc/MultiCommandCC.js +166 -102
  237. package/build/esm/cc/MultiCommandCC.js.map +1 -1
  238. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  239. package/build/esm/cc/MultilevelSensorCC.js +616 -497
  240. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  241. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  242. package/build/esm/cc/MultilevelSwitchCC.js +621 -496
  243. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  244. package/build/esm/cc/NoOperationCC.js +82 -29
  245. package/build/esm/cc/NoOperationCC.js.map +1 -1
  246. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  247. package/build/esm/cc/NodeNamingCC.js +413 -294
  248. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  249. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  250. package/build/esm/cc/NotificationCC.js +1097 -966
  251. package/build/esm/cc/NotificationCC.js.map +1 -1
  252. package/build/esm/cc/PowerlevelCC.js +437 -311
  253. package/build/esm/cc/PowerlevelCC.js.map +1 -1
  254. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  255. package/build/esm/cc/ProtectionCC.js +704 -543
  256. package/build/esm/cc/ProtectionCC.js.map +1 -1
  257. package/build/esm/cc/SceneActivationCC.d.ts.map +1 -1
  258. package/build/esm/cc/SceneActivationCC.js +157 -100
  259. package/build/esm/cc/SceneActivationCC.js.map +1 -1
  260. package/build/esm/cc/SceneActuatorConfigurationCC.js +357 -269
  261. package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
  262. package/build/esm/cc/SceneControllerConfigurationCC.js +434 -346
  263. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  264. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  265. package/build/esm/cc/ScheduleEntryLockCC.js +1596 -1357
  266. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  267. package/build/esm/cc/Security2CC.js +1633 -1406
  268. package/build/esm/cc/Security2CC.js.map +1 -1
  269. package/build/esm/cc/SecurityCC.js +876 -687
  270. package/build/esm/cc/SecurityCC.js.map +1 -1
  271. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
  272. package/build/esm/cc/SoundSwitchCC.js +689 -526
  273. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  274. package/build/esm/cc/SupervisionCC.js +349 -272
  275. package/build/esm/cc/SupervisionCC.js.map +1 -1
  276. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  277. package/build/esm/cc/ThermostatFanModeCC.js +388 -284
  278. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  279. package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
  280. package/build/esm/cc/ThermostatFanStateCC.js +184 -111
  281. package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
  282. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  283. package/build/esm/cc/ThermostatModeCC.js +435 -331
  284. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  285. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  286. package/build/esm/cc/ThermostatOperatingStateCC.js +180 -107
  287. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  288. package/build/esm/cc/ThermostatSetbackCC.js +274 -185
  289. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
  290. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  291. package/build/esm/cc/ThermostatSetpointCC.js +674 -543
  292. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  293. package/build/esm/cc/TimeCC.js +499 -360
  294. package/build/esm/cc/TimeCC.js.map +1 -1
  295. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  296. package/build/esm/cc/TimeParametersCC.js +296 -211
  297. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  298. package/build/esm/cc/TransportServiceCC.js +464 -363
  299. package/build/esm/cc/TransportServiceCC.js.map +1 -1
  300. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  301. package/build/esm/cc/UserCodeCC.js +1443 -1205
  302. package/build/esm/cc/UserCodeCC.js.map +1 -1
  303. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  304. package/build/esm/cc/VersionCC.js +744 -635
  305. package/build/esm/cc/VersionCC.js.map +1 -1
  306. package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
  307. package/build/esm/cc/WakeUpCC.js +494 -364
  308. package/build/esm/cc/WakeUpCC.js.map +1 -1
  309. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  310. package/build/esm/cc/WindowCoveringCC.js +655 -530
  311. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  312. package/build/esm/cc/ZWaveLongRangeCC.js +51 -11
  313. package/build/esm/cc/ZWaveLongRangeCC.js.map +1 -1
  314. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
  315. package/build/esm/cc/ZWavePlusCC.js +223 -162
  316. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  317. package/build/esm/cc/ZWaveProtocolCC.js +1443 -953
  318. package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
  319. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts +4 -4
  320. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
  321. package/build/esm/cc/manufacturerProprietary/FibaroCC.js +390 -286
  322. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  323. package/build/esm/lib/CommandClassDecorators.d.ts +11 -15
  324. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
  325. package/build/esm/lib/CommandClassDecorators.js +24 -24
  326. package/build/esm/lib/CommandClassDecorators.js.map +1 -1
  327. package/build/esm/lib/Security2/Extension.d.ts +1 -1
  328. package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
  329. package/build/esm/lib/Security2/Extension.js +207 -123
  330. package/build/esm/lib/Security2/Extension.js.map +1 -1
  331. package/package.json +6 -6
@@ -1,10 +1,37 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
6
34
  };
7
- var MultiChannelCCEndPointReport_1, MultiChannelCCCapabilityReport_1, MultiChannelCCCapabilityGet_1, MultiChannelCCEndPointFindReport_1, MultiChannelCCEndPointFind_1, MultiChannelCCAggregatedMembersReport_1, MultiChannelCCCommandEncapsulation_1, MultiChannelCCV1Report_1, MultiChannelCCV1CommandEncapsulation_1;
8
35
  function __assertType(argName, typeName, boundHasError) {
9
36
  const { ZWaveError, ZWaveErrorCodes } = require("@zwave-js/core");
10
37
  if (boundHasError()) {
@@ -22,7 +49,7 @@ import { Bytes } from "@zwave-js/shared/safe";
22
49
  import { distinct } from "alcalzone-shared/arrays/index.js";
23
50
  import { CCAPI } from "../lib/API.js";
24
51
  import { CommandClass, getEffectiveCCVersion, } from "../lib/CommandClass.js";
25
- import { API, CCCommand, ccValue, ccValues, commandClass, expectedCCResponse, implementedVersion, } from "../lib/CommandClassDecorators.js";
52
+ import { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from "../lib/CommandClassDecorators.js";
26
53
  import { isEncapsulatingCommandClass, isMultiEncapsulatingCommandClass, } from "../lib/EncapsulatingCommandClass.js";
27
54
  import { V } from "../lib/Values.js";
28
55
  import { MultiChannelCommand } from "../lib/_Types.js";
@@ -93,795 +120,904 @@ function areEndpointsUnnecessary(ctx, nodeId, endpointIndizes) {
93
120
  return false;
94
121
  return true;
95
122
  }
96
- let MultiChannelCCAPI = class MultiChannelCCAPI extends CCAPI {
97
- supportsCommand(cmd) {
98
- switch (cmd) {
99
- // Legacy commands:
100
- case MultiChannelCommand.GetV1:
101
- return this.isSinglecast() && this.version === 1;
102
- case MultiChannelCommand.CommandEncapsulationV1:
103
- return this.version === 1;
104
- // The specs start at version 3 but according to OZW,
105
- // these do seem to be supported in version 2
106
- case MultiChannelCommand.EndPointGet:
107
- case MultiChannelCommand.CapabilityGet:
108
- return this.version >= 2 && this.isSinglecast();
109
- case MultiChannelCommand.CommandEncapsulation:
110
- return this.version >= 2;
111
- case MultiChannelCommand.EndPointFind:
112
- return this.version >= 3 && this.isSinglecast();
113
- case MultiChannelCommand.AggregatedMembersGet:
114
- return this.version >= 4 && this.isSinglecast();
115
- }
116
- return super.supportsCommand(cmd);
117
- }
118
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
119
- async getEndpoints() {
120
- this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.EndPointGet);
121
- const cc = new MultiChannelCCEndPointGet({
122
- nodeId: this.endpoint.nodeId,
123
- endpointIndex: this.endpoint.index,
124
- });
125
- const response = await this.host.sendCommand(cc, this.commandOptions);
126
- if (response) {
127
- return {
128
- isDynamicEndpointCount: response.countIsDynamic,
129
- identicalCapabilities: response.identicalCapabilities,
130
- individualEndpointCount: response.individualCount,
131
- aggregatedEndpointCount: response.aggregatedCount,
132
- };
123
+ let MultiChannelCCAPI = (() => {
124
+ let _classDecorators = [API(CommandClasses["Multi Channel"])];
125
+ let _classDescriptor;
126
+ let _classExtraInitializers = [];
127
+ let _classThis;
128
+ let _classSuper = CCAPI;
129
+ var MultiChannelCCAPI = class extends _classSuper {
130
+ static { _classThis = this; }
131
+ static {
132
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
133
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
134
+ MultiChannelCCAPI = _classThis = _classDescriptor.value;
135
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
136
+ __runInitializers(_classThis, _classExtraInitializers);
133
137
  }
134
- }
135
- async getEndpointCapabilities(endpoint) {
136
- __assertType("endpoint", "number", __assertType__number.bind(void 0, endpoint));
137
- this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.CapabilityGet);
138
- const cc = new MultiChannelCCCapabilityGet({
139
- nodeId: this.endpoint.nodeId,
140
- endpointIndex: this.endpoint.index,
141
- requestedEndpoint: endpoint,
142
- });
143
- const response = await this.host.sendCommand(cc, this.commandOptions);
144
- if (response) {
145
- const generic = getGenericDeviceClass(response.genericDeviceClass);
146
- const specific = getSpecificDeviceClass(response.genericDeviceClass, response.specificDeviceClass);
147
- return {
148
- isDynamic: response.isDynamic,
149
- wasRemoved: response.wasRemoved,
150
- supportedCCs: response.supportedCCs,
151
- generic,
152
- specific,
153
- };
138
+ supportsCommand(cmd) {
139
+ switch (cmd) {
140
+ // Legacy commands:
141
+ case MultiChannelCommand.GetV1:
142
+ return this.isSinglecast() && this.version === 1;
143
+ case MultiChannelCommand.CommandEncapsulationV1:
144
+ return this.version === 1;
145
+ // The specs start at version 3 but according to OZW,
146
+ // these do seem to be supported in version 2
147
+ case MultiChannelCommand.EndPointGet:
148
+ case MultiChannelCommand.CapabilityGet:
149
+ return this.version >= 2 && this.isSinglecast();
150
+ case MultiChannelCommand.CommandEncapsulation:
151
+ return this.version >= 2;
152
+ case MultiChannelCommand.EndPointFind:
153
+ return this.version >= 3 && this.isSinglecast();
154
+ case MultiChannelCommand.AggregatedMembersGet:
155
+ return this.version >= 4 && this.isSinglecast();
156
+ }
157
+ return super.supportsCommand(cmd);
154
158
  }
155
- }
156
- async findEndpoints(genericClass, specificClass) {
157
- __assertType("genericClass", "number", __assertType__number.bind(void 0, genericClass));
158
- __assertType("specificClass", "number", __assertType__number.bind(void 0, specificClass));
159
- this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.EndPointFind);
160
- const cc = new MultiChannelCCEndPointFind({
161
- nodeId: this.endpoint.nodeId,
162
- endpointIndex: this.endpoint.index,
163
- genericClass,
164
- specificClass,
165
- });
166
- const response = await this.host.sendCommand(cc, this.commandOptions);
167
- return response?.foundEndpoints;
168
- }
169
- async getAggregatedMembers(endpoint) {
170
- __assertType("endpoint", "number", __assertType__number.bind(void 0, endpoint));
171
- this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.AggregatedMembersGet);
172
- const cc = new MultiChannelCCAggregatedMembersGet({
173
- nodeId: this.endpoint.nodeId,
174
- endpointIndex: this.endpoint.index,
175
- requestedEndpoint: endpoint,
176
- });
177
- const response = await this.host.sendCommand(cc, this.commandOptions);
178
- return response?.members;
179
- }
180
- // Encapsulation is used internally and too frequently that we
181
- // want to pay the cost of validating each call
182
- // eslint-disable-next-line @zwave-js/ccapi-validate-args
183
- async sendEncapsulated(options) {
184
- this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.CommandEncapsulation);
185
- const cc = new MultiChannelCCCommandEncapsulation({
186
- nodeId: this.endpoint.nodeId,
187
- ...options,
188
- });
189
- await this.host.sendCommand(cc, this.commandOptions);
190
- }
191
- async getEndpointCountV1(ccId) {
192
- __assertType("ccId", "CommandClasses", __assertType__number.bind(void 0, ccId));
193
- this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.GetV1);
194
- const cc = new MultiChannelCCV1Get({
195
- nodeId: this.endpoint.nodeId,
196
- requestedCC: ccId,
197
- });
198
- const response = await this.host.sendCommand(cc, this.commandOptions);
199
- return response?.endpointCount;
200
- }
201
- // Encapsulation is used internally and too frequently that we
202
- // want to pay the cost of validating each call
203
- // eslint-disable-next-line @zwave-js/ccapi-validate-args
204
- async sendEncapsulatedV1(encapsulated) {
205
- this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.CommandEncapsulationV1);
206
- const cc = new MultiChannelCCV1CommandEncapsulation({
207
- nodeId: this.endpoint.nodeId,
208
- encapsulated,
209
- });
210
- await this.host.sendCommand(cc, this.commandOptions);
211
- }
212
- };
213
- MultiChannelCCAPI = __decorate([
214
- API(CommandClasses["Multi Channel"])
215
- ], MultiChannelCCAPI);
159
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
160
+ async getEndpoints() {
161
+ this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.EndPointGet);
162
+ const cc = new MultiChannelCCEndPointGet({
163
+ nodeId: this.endpoint.nodeId,
164
+ endpointIndex: this.endpoint.index,
165
+ });
166
+ const response = await this.host.sendCommand(cc, this.commandOptions);
167
+ if (response) {
168
+ return {
169
+ isDynamicEndpointCount: response.countIsDynamic,
170
+ identicalCapabilities: response.identicalCapabilities,
171
+ individualEndpointCount: response.individualCount,
172
+ aggregatedEndpointCount: response.aggregatedCount,
173
+ };
174
+ }
175
+ }
176
+ async getEndpointCapabilities(endpoint) {
177
+ __assertType("endpoint", "number", __assertType__number.bind(void 0, endpoint));
178
+ this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.CapabilityGet);
179
+ const cc = new MultiChannelCCCapabilityGet({
180
+ nodeId: this.endpoint.nodeId,
181
+ endpointIndex: this.endpoint.index,
182
+ requestedEndpoint: endpoint,
183
+ });
184
+ const response = await this.host.sendCommand(cc, this.commandOptions);
185
+ if (response) {
186
+ const generic = getGenericDeviceClass(response.genericDeviceClass);
187
+ const specific = getSpecificDeviceClass(response.genericDeviceClass, response.specificDeviceClass);
188
+ return {
189
+ isDynamic: response.isDynamic,
190
+ wasRemoved: response.wasRemoved,
191
+ supportedCCs: response.supportedCCs,
192
+ generic,
193
+ specific,
194
+ };
195
+ }
196
+ }
197
+ async findEndpoints(genericClass, specificClass) {
198
+ __assertType("genericClass", "number", __assertType__number.bind(void 0, genericClass));
199
+ __assertType("specificClass", "number", __assertType__number.bind(void 0, specificClass));
200
+ this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.EndPointFind);
201
+ const cc = new MultiChannelCCEndPointFind({
202
+ nodeId: this.endpoint.nodeId,
203
+ endpointIndex: this.endpoint.index,
204
+ genericClass,
205
+ specificClass,
206
+ });
207
+ const response = await this.host.sendCommand(cc, this.commandOptions);
208
+ return response?.foundEndpoints;
209
+ }
210
+ async getAggregatedMembers(endpoint) {
211
+ __assertType("endpoint", "number", __assertType__number.bind(void 0, endpoint));
212
+ this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.AggregatedMembersGet);
213
+ const cc = new MultiChannelCCAggregatedMembersGet({
214
+ nodeId: this.endpoint.nodeId,
215
+ endpointIndex: this.endpoint.index,
216
+ requestedEndpoint: endpoint,
217
+ });
218
+ const response = await this.host.sendCommand(cc, this.commandOptions);
219
+ return response?.members;
220
+ }
221
+ // Encapsulation is used internally and too frequently that we
222
+ // want to pay the cost of validating each call
223
+ // eslint-disable-next-line @zwave-js/ccapi-validate-args
224
+ async sendEncapsulated(options) {
225
+ this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.CommandEncapsulation);
226
+ const cc = new MultiChannelCCCommandEncapsulation({
227
+ nodeId: this.endpoint.nodeId,
228
+ ...options,
229
+ });
230
+ await this.host.sendCommand(cc, this.commandOptions);
231
+ }
232
+ async getEndpointCountV1(ccId) {
233
+ __assertType("ccId", "CommandClasses", __assertType__number.bind(void 0, ccId));
234
+ this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.GetV1);
235
+ const cc = new MultiChannelCCV1Get({
236
+ nodeId: this.endpoint.nodeId,
237
+ requestedCC: ccId,
238
+ });
239
+ const response = await this.host.sendCommand(cc, this.commandOptions);
240
+ return response?.endpointCount;
241
+ }
242
+ // Encapsulation is used internally and too frequently that we
243
+ // want to pay the cost of validating each call
244
+ // eslint-disable-next-line @zwave-js/ccapi-validate-args
245
+ async sendEncapsulatedV1(encapsulated) {
246
+ this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.CommandEncapsulationV1);
247
+ const cc = new MultiChannelCCV1CommandEncapsulation({
248
+ nodeId: this.endpoint.nodeId,
249
+ encapsulated,
250
+ });
251
+ await this.host.sendCommand(cc, this.commandOptions);
252
+ }
253
+ };
254
+ return MultiChannelCCAPI = _classThis;
255
+ })();
216
256
  export { MultiChannelCCAPI };
217
- let MultiChannelCC = class MultiChannelCC extends CommandClass {
218
- /** Tests if a command targets a specific endpoint and thus requires encapsulation */
219
- static requiresEncapsulation(cc) {
220
- return (cc.endpointIndex !== 0
221
- && !(cc instanceof MultiChannelCCCommandEncapsulation)
222
- && !(cc instanceof MultiChannelCCV1CommandEncapsulation));
223
- }
224
- /** Encapsulates a command that targets a specific endpoint, with version 2+ of the Multi Channel CC */
225
- static encapsulate(cc) {
226
- const ret = new MultiChannelCCCommandEncapsulation({
227
- nodeId: cc.nodeId,
228
- encapsulated: cc,
229
- destination: cc.endpointIndex,
230
- });
231
- // Copy the encapsulation flags from the encapsulated command
232
- ret.encapsulationFlags = cc.encapsulationFlags;
233
- return ret;
234
- }
235
- /** Encapsulates a command that targets a specific endpoint, with version 1 of the Multi Channel CC */
236
- static encapsulateV1(cc) {
237
- const ret = new MultiChannelCCV1CommandEncapsulation({
238
- nodeId: cc.nodeId,
239
- encapsulated: cc,
240
- });
241
- // Copy the encapsulation flags from the encapsulated command
242
- ret.encapsulationFlags = cc.encapsulationFlags;
243
- return ret;
244
- }
245
- skipEndpointInterview() {
246
- // The endpoints are discovered by querying the root device
247
- return true;
248
- }
249
- async interview(ctx) {
250
- const node = this.getNode(ctx);
251
- const removeEndpoints = ctx.getDeviceConfig?.(node.id)?.compat
252
- ?.removeEndpoints;
253
- if (removeEndpoints === "*") {
257
+ let MultiChannelCC = (() => {
258
+ let _classDecorators = [commandClass(CommandClasses["Multi Channel"]), implementedVersion(4), ccValues(MultiChannelCCValues)];
259
+ let _classDescriptor;
260
+ let _classExtraInitializers = [];
261
+ let _classThis;
262
+ let _classSuper = CommandClass;
263
+ var MultiChannelCC = class extends _classSuper {
264
+ static { _classThis = this; }
265
+ static {
266
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
267
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
268
+ MultiChannelCC = _classThis = _classDescriptor.value;
269
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
270
+ __runInitializers(_classThis, _classExtraInitializers);
271
+ }
272
+ /** Tests if a command targets a specific endpoint and thus requires encapsulation */
273
+ static requiresEncapsulation(cc) {
274
+ return (cc.endpointIndex !== 0
275
+ && !(cc instanceof MultiChannelCCCommandEncapsulation)
276
+ && !(cc instanceof MultiChannelCCV1CommandEncapsulation));
277
+ }
278
+ /** Encapsulates a command that targets a specific endpoint, with version 2+ of the Multi Channel CC */
279
+ static encapsulate(cc) {
280
+ const ret = new MultiChannelCCCommandEncapsulation({
281
+ nodeId: cc.nodeId,
282
+ encapsulated: cc,
283
+ destination: cc.endpointIndex,
284
+ });
285
+ // Copy the encapsulation flags from the encapsulated command
286
+ ret.encapsulationFlags = cc.encapsulationFlags;
287
+ return ret;
288
+ }
289
+ /** Encapsulates a command that targets a specific endpoint, with version 1 of the Multi Channel CC */
290
+ static encapsulateV1(cc) {
291
+ const ret = new MultiChannelCCV1CommandEncapsulation({
292
+ nodeId: cc.nodeId,
293
+ encapsulated: cc,
294
+ });
295
+ // Copy the encapsulation flags from the encapsulated command
296
+ ret.encapsulationFlags = cc.encapsulationFlags;
297
+ return ret;
298
+ }
299
+ skipEndpointInterview() {
300
+ // The endpoints are discovered by querying the root device
301
+ return true;
302
+ }
303
+ async interview(ctx) {
304
+ const node = this.getNode(ctx);
305
+ const removeEndpoints = ctx.getDeviceConfig?.(node.id)?.compat
306
+ ?.removeEndpoints;
307
+ if (removeEndpoints === "*") {
308
+ ctx.logNode(node.id, {
309
+ endpoint: this.endpointIndex,
310
+ message: `Skipping ${this.ccName} interview b/c all endpoints are ignored by the device config file...`,
311
+ direction: "none",
312
+ });
313
+ return;
314
+ }
254
315
  ctx.logNode(node.id, {
255
316
  endpoint: this.endpointIndex,
256
- message: `Skipping ${this.ccName} interview b/c all endpoints are ignored by the device config file...`,
317
+ message: `Interviewing ${this.ccName}...`,
257
318
  direction: "none",
258
319
  });
259
- return;
260
- }
261
- ctx.logNode(node.id, {
262
- endpoint: this.endpointIndex,
263
- message: `Interviewing ${this.ccName}...`,
264
- direction: "none",
265
- });
266
- // Special interview procedure for legacy nodes
267
- const ccVersion = getEffectiveCCVersion(ctx, this);
268
- if (ccVersion === 1)
269
- return this.interviewV1(ctx);
270
- const endpoint = node.getEndpoint(this.endpointIndex);
271
- const api = CCAPI.create(CommandClasses["Multi Channel"], ctx, endpoint).withOptions({
272
- priority: MessagePriority.NodeQuery,
273
- });
274
- const valueDB = this.getValueDB(ctx);
275
- // Step 1: Retrieve general information about end points
276
- ctx.logNode(node.id, {
277
- endpoint: this.endpointIndex,
278
- message: "querying device endpoint information...",
279
- direction: "outbound",
280
- });
281
- const multiResponse = await api.getEndpoints();
282
- if (!multiResponse) {
283
- ctx.logNode(node.id, {
284
- endpoint: this.endpointIndex,
285
- message: "Querying device endpoint information timed out, aborting interview...",
286
- level: "warn",
320
+ // Special interview procedure for legacy nodes
321
+ const ccVersion = getEffectiveCCVersion(ctx, this);
322
+ if (ccVersion === 1)
323
+ return this.interviewV1(ctx);
324
+ const endpoint = node.getEndpoint(this.endpointIndex);
325
+ const api = CCAPI.create(CommandClasses["Multi Channel"], ctx, endpoint).withOptions({
326
+ priority: MessagePriority.NodeQuery,
287
327
  });
288
- return this.throwMissingCriticalInterviewResponse();
289
- }
290
- let logMessage = `received response for device endpoints:
291
- endpoint count (individual): ${multiResponse.individualEndpointCount}
292
- count is dynamic: ${multiResponse.isDynamicEndpointCount}
293
- identical capabilities: ${multiResponse.identicalCapabilities}`;
294
- if (multiResponse.aggregatedEndpointCount != undefined) {
295
- logMessage +=
296
- `\nendpoint count (aggregated): ${multiResponse.aggregatedEndpointCount}`;
297
- }
298
- ctx.logNode(node.id, {
299
- endpoint: this.endpointIndex,
300
- message: logMessage,
301
- direction: "inbound",
302
- });
303
- let allEndpoints = [];
304
- const addSequentialEndpoints = () => {
305
- for (let i = 1; i
306
- <= multiResponse.individualEndpointCount
307
- + (multiResponse.aggregatedEndpointCount ?? 0); i++) {
308
- allEndpoints.push(i);
309
- }
310
- };
311
- if (api.supportsCommand(MultiChannelCommand.EndPointFind)) {
312
- // Step 2a: Find all endpoints
328
+ const valueDB = this.getValueDB(ctx);
329
+ // Step 1: Retrieve general information about end points
313
330
  ctx.logNode(node.id, {
314
331
  endpoint: this.endpointIndex,
315
- message: "querying all endpoints...",
332
+ message: "querying device endpoint information...",
316
333
  direction: "outbound",
317
334
  });
318
- const foundEndpoints = await api.findEndpoints(0xff, 0xff);
319
- if (foundEndpoints)
320
- allEndpoints.push(...foundEndpoints);
321
- if (!allEndpoints.length) {
322
- // Create a sequential list of endpoints
335
+ const multiResponse = await api.getEndpoints();
336
+ if (!multiResponse) {
323
337
  ctx.logNode(node.id, {
324
338
  endpoint: this.endpointIndex,
325
- message: `Endpoint query returned no results, assuming that endpoints are sequential`,
326
- direction: "inbound",
339
+ message: "Querying device endpoint information timed out, aborting interview...",
340
+ level: "warn",
327
341
  });
328
- addSequentialEndpoints();
342
+ return this.throwMissingCriticalInterviewResponse();
329
343
  }
330
- else {
331
- ctx.logNode(node.id, {
332
- endpoint: this.endpointIndex,
333
- message: `received endpoints: ${allEndpoints
334
- .map(String)
335
- .join(", ")}`,
336
- direction: "inbound",
337
- });
344
+ let logMessage = `received response for device endpoints:
345
+ endpoint count (individual): ${multiResponse.individualEndpointCount}
346
+ count is dynamic: ${multiResponse.isDynamicEndpointCount}
347
+ identical capabilities: ${multiResponse.identicalCapabilities}`;
348
+ if (multiResponse.aggregatedEndpointCount != undefined) {
349
+ logMessage +=
350
+ `\nendpoint count (aggregated): ${multiResponse.aggregatedEndpointCount}`;
338
351
  }
339
- }
340
- else {
341
- // Step 2b: Assume that the endpoints are in sequential order
342
352
  ctx.logNode(node.id, {
343
353
  endpoint: this.endpointIndex,
344
- message: `does not support EndPointFind, assuming that endpoints are sequential`,
345
- direction: "none",
354
+ message: logMessage,
355
+ direction: "inbound",
346
356
  });
347
- addSequentialEndpoints();
348
- }
349
- // Step 2.5: remove ignored endpoints
350
- if (removeEndpoints?.length) {
351
- ctx.logNode(node.id, {
352
- endpoint: this.endpointIndex,
353
- message: `The following endpoints are ignored through the config file: ${removeEndpoints.join(", ")}`,
354
- direction: "none",
355
- });
356
- allEndpoints = allEndpoints.filter((e) => !removeEndpoints.includes(e));
357
- }
358
- // Step 3: Query endpoints
359
- let hasQueriedCapabilities = false;
360
- for (const endpoint of allEndpoints) {
361
- if (endpoint > multiResponse.individualEndpointCount
362
- && ccVersion >= 4) {
363
- // Find members of aggregated end point
357
+ let allEndpoints = [];
358
+ const addSequentialEndpoints = () => {
359
+ for (let i = 1; i
360
+ <= multiResponse.individualEndpointCount
361
+ + (multiResponse.aggregatedEndpointCount ?? 0); i++) {
362
+ allEndpoints.push(i);
363
+ }
364
+ };
365
+ if (api.supportsCommand(MultiChannelCommand.EndPointFind)) {
366
+ // Step 2a: Find all endpoints
364
367
  ctx.logNode(node.id, {
365
368
  endpoint: this.endpointIndex,
366
- message: `querying members of aggregated endpoint #${endpoint}...`,
369
+ message: "querying all endpoints...",
367
370
  direction: "outbound",
368
371
  });
369
- const members = await api.getAggregatedMembers(endpoint);
370
- if (members) {
372
+ const foundEndpoints = await api.findEndpoints(0xff, 0xff);
373
+ if (foundEndpoints)
374
+ allEndpoints.push(...foundEndpoints);
375
+ if (!allEndpoints.length) {
376
+ // Create a sequential list of endpoints
371
377
  ctx.logNode(node.id, {
372
378
  endpoint: this.endpointIndex,
373
- message: `aggregated endpoint #${endpoint} has members ${members
379
+ message: `Endpoint query returned no results, assuming that endpoints are sequential`,
380
+ direction: "inbound",
381
+ });
382
+ addSequentialEndpoints();
383
+ }
384
+ else {
385
+ ctx.logNode(node.id, {
386
+ endpoint: this.endpointIndex,
387
+ message: `received endpoints: ${allEndpoints
374
388
  .map(String)
375
389
  .join(", ")}`,
376
390
  direction: "inbound",
377
391
  });
378
392
  }
379
393
  }
380
- // When the device reports identical capabilities for all endpoints,
381
- // we don't need to query them all
382
- if (multiResponse.identicalCapabilities && hasQueriedCapabilities) {
394
+ else {
395
+ // Step 2b: Assume that the endpoints are in sequential order
383
396
  ctx.logNode(node.id, {
384
397
  endpoint: this.endpointIndex,
385
- message: `all endpoints identical, skipping capability query for endpoint #${endpoint}...`,
398
+ message: `does not support EndPointFind, assuming that endpoints are sequential`,
386
399
  direction: "none",
387
400
  });
388
- // copy the capabilities from the first endpoint
389
- const devClass = valueDB.getValue(MultiChannelCCValues.endpointDeviceClass.endpoint(allEndpoints[0]));
390
- valueDB.setValue(MultiChannelCCValues.endpointDeviceClass.endpoint(endpoint), devClass);
391
- const ep1Caps = valueDB.getValue(MultiChannelCCValues.endpointCCs.endpoint(allEndpoints[0]));
392
- valueDB.setValue(MultiChannelCCValues.endpointCCs.endpoint(endpoint), [...ep1Caps]);
393
- continue;
401
+ addSequentialEndpoints();
394
402
  }
395
- ctx.logNode(node.id, {
396
- endpoint: this.endpointIndex,
397
- message: `querying capabilities for endpoint #${endpoint}...`,
398
- direction: "outbound",
399
- });
400
- const caps = await api.getEndpointCapabilities(endpoint);
401
- if (caps) {
402
- hasQueriedCapabilities = true;
403
- logMessage =
404
- `received response for endpoint capabilities (#${endpoint}):
405
- generic device class: ${caps.generic.label}
406
- specific device class: ${caps.specific.label}
407
- is dynamic end point: ${caps.isDynamic}
408
- supported CCs:`;
409
- for (const cc of caps.supportedCCs) {
410
- logMessage += `\n · ${getCCName(cc)}`;
411
- }
403
+ // Step 2.5: remove ignored endpoints
404
+ if (removeEndpoints?.length) {
412
405
  ctx.logNode(node.id, {
413
406
  endpoint: this.endpointIndex,
414
- message: logMessage,
415
- direction: "inbound",
407
+ message: `The following endpoints are ignored through the config file: ${removeEndpoints.join(", ")}`,
408
+ direction: "none",
416
409
  });
410
+ allEndpoints = allEndpoints.filter((e) => !removeEndpoints.includes(e));
417
411
  }
418
- else {
412
+ // Step 3: Query endpoints
413
+ let hasQueriedCapabilities = false;
414
+ for (const endpoint of allEndpoints) {
415
+ if (endpoint > multiResponse.individualEndpointCount
416
+ && ccVersion >= 4) {
417
+ // Find members of aggregated end point
418
+ ctx.logNode(node.id, {
419
+ endpoint: this.endpointIndex,
420
+ message: `querying members of aggregated endpoint #${endpoint}...`,
421
+ direction: "outbound",
422
+ });
423
+ const members = await api.getAggregatedMembers(endpoint);
424
+ if (members) {
425
+ ctx.logNode(node.id, {
426
+ endpoint: this.endpointIndex,
427
+ message: `aggregated endpoint #${endpoint} has members ${members
428
+ .map(String)
429
+ .join(", ")}`,
430
+ direction: "inbound",
431
+ });
432
+ }
433
+ }
434
+ // When the device reports identical capabilities for all endpoints,
435
+ // we don't need to query them all
436
+ if (multiResponse.identicalCapabilities && hasQueriedCapabilities) {
437
+ ctx.logNode(node.id, {
438
+ endpoint: this.endpointIndex,
439
+ message: `all endpoints identical, skipping capability query for endpoint #${endpoint}...`,
440
+ direction: "none",
441
+ });
442
+ // copy the capabilities from the first endpoint
443
+ const devClass = valueDB.getValue(MultiChannelCCValues.endpointDeviceClass.endpoint(allEndpoints[0]));
444
+ valueDB.setValue(MultiChannelCCValues.endpointDeviceClass.endpoint(endpoint), devClass);
445
+ const ep1Caps = valueDB.getValue(MultiChannelCCValues.endpointCCs.endpoint(allEndpoints[0]));
446
+ valueDB.setValue(MultiChannelCCValues.endpointCCs.endpoint(endpoint), [...ep1Caps]);
447
+ continue;
448
+ }
419
449
  ctx.logNode(node.id, {
420
450
  endpoint: this.endpointIndex,
421
- message: `Querying endpoint #${endpoint} capabilities timed out, aborting interview...`,
422
- level: "warn",
451
+ message: `querying capabilities for endpoint #${endpoint}...`,
452
+ direction: "outbound",
423
453
  });
424
- return this.throwMissingCriticalInterviewResponse();
454
+ const caps = await api.getEndpointCapabilities(endpoint);
455
+ if (caps) {
456
+ hasQueriedCapabilities = true;
457
+ logMessage =
458
+ `received response for endpoint capabilities (#${endpoint}):
459
+ generic device class: ${caps.generic.label}
460
+ specific device class: ${caps.specific.label}
461
+ is dynamic end point: ${caps.isDynamic}
462
+ supported CCs:`;
463
+ for (const cc of caps.supportedCCs) {
464
+ logMessage += `\n · ${getCCName(cc)}`;
465
+ }
466
+ ctx.logNode(node.id, {
467
+ endpoint: this.endpointIndex,
468
+ message: logMessage,
469
+ direction: "inbound",
470
+ });
471
+ }
472
+ else {
473
+ ctx.logNode(node.id, {
474
+ endpoint: this.endpointIndex,
475
+ message: `Querying endpoint #${endpoint} capabilities timed out, aborting interview...`,
476
+ level: "warn",
477
+ });
478
+ return this.throwMissingCriticalInterviewResponse();
479
+ }
425
480
  }
426
- }
427
- // Now that all endpoints have been interviewed, remember which ones are there
428
- // But first figure out if they seem unnecessary and if they do, which ones should be preserved
429
- if (!multiResponse.identicalCapabilities
430
- && areEndpointsUnnecessary(ctx, node.id, allEndpoints)) {
431
- const preserve = ctx.getDeviceConfig?.(node.id)?.compat
432
- ?.preserveEndpoints;
433
- if (!preserve) {
434
- allEndpoints = [];
435
- ctx.logNode(node.id, {
436
- message: `Endpoints seem unnecessary b/c they have different device classes, ignoring all...`,
437
- });
481
+ // Now that all endpoints have been interviewed, remember which ones are there
482
+ // But first figure out if they seem unnecessary and if they do, which ones should be preserved
483
+ if (!multiResponse.identicalCapabilities
484
+ && areEndpointsUnnecessary(ctx, node.id, allEndpoints)) {
485
+ const preserve = ctx.getDeviceConfig?.(node.id)?.compat
486
+ ?.preserveEndpoints;
487
+ if (!preserve) {
488
+ allEndpoints = [];
489
+ ctx.logNode(node.id, {
490
+ message: `Endpoints seem unnecessary b/c they have different device classes, ignoring all...`,
491
+ });
492
+ }
493
+ else if (preserve === "*") {
494
+ // preserve all endpoints, do nothing
495
+ ctx.logNode(node.id, {
496
+ message: `Endpoints seem unnecessary, but are configured to be preserved.`,
497
+ });
498
+ }
499
+ else {
500
+ allEndpoints = allEndpoints.filter((ep) => preserve.includes(ep));
501
+ ctx.logNode(node.id, {
502
+ message: `Endpoints seem unnecessary, but endpoints ${allEndpoints.join(", ")} are configured to be preserved.`,
503
+ });
504
+ }
438
505
  }
439
- else if (preserve === "*") {
440
- // preserve all endpoints, do nothing
506
+ this.setValue(ctx, MultiChannelCCValues.endpointIndizes, allEndpoints);
507
+ // Remember that the interview is complete
508
+ this.setInterviewComplete(ctx, true);
509
+ }
510
+ async interviewV1(ctx) {
511
+ const node = this.getNode(ctx);
512
+ const endpoint = this.getEndpoint(ctx);
513
+ const api = CCAPI.create(CommandClasses["Multi Channel"], ctx, endpoint);
514
+ const valueDB = this.getValueDB(ctx);
515
+ // V1 works the opposite way - we scan all CCs and remember how many
516
+ // endpoints they have
517
+ const supportedCCs = [...node.getCCs()]
518
+ // Don't query CCs the node only controls
519
+ .filter(([, info]) => info.isSupported)
520
+ .map(([cc]) => cc)
521
+ // Don't query CCs that want to skip the endpoint interview
522
+ .filter((cc) => !CommandClass.createInstanceUnchecked(node, cc)?.skipEndpointInterview());
523
+ const endpointCounts = new Map();
524
+ for (const ccId of supportedCCs) {
441
525
  ctx.logNode(node.id, {
442
- message: `Endpoints seem unnecessary, but are configured to be preserved.`,
526
+ message: `Querying endpoint count for CommandClass ${getCCName(ccId)}...`,
527
+ direction: "outbound",
443
528
  });
529
+ const endpointCount = await api.getEndpointCountV1(ccId);
530
+ if (endpointCount != undefined) {
531
+ endpointCounts.set(ccId, endpointCount);
532
+ ctx.logNode(node.id, {
533
+ message: `CommandClass ${getCCName(ccId)} has ${endpointCount} endpoints`,
534
+ direction: "inbound",
535
+ });
536
+ }
444
537
  }
445
- else {
446
- allEndpoints = allEndpoints.filter((ep) => preserve.includes(ep));
447
- ctx.logNode(node.id, {
448
- message: `Endpoints seem unnecessary, but endpoints ${allEndpoints.join(", ")} are configured to be preserved.`,
449
- });
538
+ // Store the collected information
539
+ // We have only individual and no dynamic and no aggregated endpoints
540
+ const numEndpoints = Math.max(...endpointCounts.values());
541
+ this.setValue(ctx, MultiChannelCCValues.endpointCountIsDynamic, false);
542
+ this.setValue(ctx, MultiChannelCCValues.aggregatedEndpointCount, 0);
543
+ this.setValue(ctx, MultiChannelCCValues.individualEndpointCount, numEndpoints);
544
+ // Since we queried all CCs separately, we can assume that all
545
+ // endpoints have different capabilities
546
+ this.setValue(ctx, MultiChannelCCValues.endpointsHaveIdenticalCapabilities, false);
547
+ for (let endpoint = 1; endpoint <= numEndpoints; endpoint++) {
548
+ // Check which CCs exist on this endpoint
549
+ const endpointCCs = [...endpointCounts.entries()]
550
+ .filter(([, ccEndpoints]) => ccEndpoints >= endpoint)
551
+ .map(([ccId]) => ccId);
552
+ // And store it per endpoint
553
+ valueDB.setValue(MultiChannelCCValues.endpointCCs.endpoint(endpoint), endpointCCs);
450
554
  }
555
+ // Remember that the interview is complete
556
+ this.setInterviewComplete(ctx, true);
451
557
  }
452
- this.setValue(ctx, MultiChannelCCValues.endpointIndizes, allEndpoints);
453
- // Remember that the interview is complete
454
- this.setInterviewComplete(ctx, true);
455
- }
456
- async interviewV1(ctx) {
457
- const node = this.getNode(ctx);
458
- const endpoint = this.getEndpoint(ctx);
459
- const api = CCAPI.create(CommandClasses["Multi Channel"], ctx, endpoint);
460
- const valueDB = this.getValueDB(ctx);
461
- // V1 works the opposite way - we scan all CCs and remember how many
462
- // endpoints they have
463
- const supportedCCs = [...node.getCCs()]
464
- // Don't query CCs the node only controls
465
- .filter(([, info]) => info.isSupported)
466
- .map(([cc]) => cc)
467
- // Don't query CCs that want to skip the endpoint interview
468
- .filter((cc) => !CommandClass.createInstanceUnchecked(node, cc)?.skipEndpointInterview());
469
- const endpointCounts = new Map();
470
- for (const ccId of supportedCCs) {
471
- ctx.logNode(node.id, {
472
- message: `Querying endpoint count for CommandClass ${getCCName(ccId)}...`,
473
- direction: "outbound",
558
+ };
559
+ return MultiChannelCC = _classThis;
560
+ })();
561
+ export { MultiChannelCC };
562
+ let MultiChannelCCEndPointReport = (() => {
563
+ let _classDecorators = [CCCommand(MultiChannelCommand.EndPointReport), ccValueProperty("countIsDynamic", MultiChannelCCValues.endpointCountIsDynamic), ccValueProperty("identicalCapabilities", MultiChannelCCValues.endpointsHaveIdenticalCapabilities), ccValueProperty("individualCount", MultiChannelCCValues.individualEndpointCount), ccValueProperty("aggregatedCount", MultiChannelCCValues.aggregatedEndpointCount)];
564
+ let _classDescriptor;
565
+ let _classExtraInitializers = [];
566
+ let _classThis;
567
+ let _classSuper = MultiChannelCC;
568
+ var MultiChannelCCEndPointReport = class extends _classSuper {
569
+ static { _classThis = this; }
570
+ static {
571
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
572
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
573
+ MultiChannelCCEndPointReport = _classThis = _classDescriptor.value;
574
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
575
+ __runInitializers(_classThis, _classExtraInitializers);
576
+ }
577
+ constructor(options) {
578
+ super(options);
579
+ this.countIsDynamic = options.countIsDynamic;
580
+ this.identicalCapabilities = options.identicalCapabilities;
581
+ this.individualCount = options.individualCount;
582
+ this.aggregatedCount = options.aggregatedCount;
583
+ }
584
+ static from(raw, ctx) {
585
+ validatePayload(raw.payload.length >= 2);
586
+ const countIsDynamic = !!(raw.payload[0] & 0b10000000);
587
+ const identicalCapabilities = !!(raw.payload[0] & 0b01000000);
588
+ const individualCount = raw.payload[1] & 0b01111111;
589
+ let aggregatedCount;
590
+ if (raw.payload.length >= 3) {
591
+ aggregatedCount = raw.payload[2] & 0b01111111;
592
+ }
593
+ return new this({
594
+ nodeId: ctx.sourceNodeId,
595
+ countIsDynamic,
596
+ identicalCapabilities,
597
+ individualCount,
598
+ aggregatedCount,
474
599
  });
475
- const endpointCount = await api.getEndpointCountV1(ccId);
476
- if (endpointCount != undefined) {
477
- endpointCounts.set(ccId, endpointCount);
478
- ctx.logNode(node.id, {
479
- message: `CommandClass ${getCCName(ccId)} has ${endpointCount} endpoints`,
480
- direction: "inbound",
481
- });
600
+ }
601
+ countIsDynamic;
602
+ identicalCapabilities;
603
+ individualCount;
604
+ aggregatedCount;
605
+ serialize(ctx) {
606
+ this.payload = Bytes.from([
607
+ (this.countIsDynamic ? 0b10000000 : 0)
608
+ | (this.identicalCapabilities ? 0b01000000 : 0),
609
+ this.individualCount & 0b01111111,
610
+ this.aggregatedCount ?? 0,
611
+ ]);
612
+ return super.serialize(ctx);
613
+ }
614
+ toLogEntry(ctx) {
615
+ const message = {
616
+ "endpoint count (individual)": this.individualCount,
617
+ "count is dynamic": this.countIsDynamic,
618
+ "identical capabilities": this.identicalCapabilities,
619
+ };
620
+ if (this.aggregatedCount != undefined) {
621
+ message["endpoint count (aggregated)"] = this.aggregatedCount;
482
622
  }
623
+ const ret = {
624
+ ...super.toLogEntry(ctx),
625
+ message,
626
+ };
627
+ return ret;
483
628
  }
484
- // Store the collected information
485
- // We have only individual and no dynamic and no aggregated endpoints
486
- const numEndpoints = Math.max(...endpointCounts.values());
487
- this.setValue(ctx, MultiChannelCCValues.endpointCountIsDynamic, false);
488
- this.setValue(ctx, MultiChannelCCValues.aggregatedEndpointCount, 0);
489
- this.setValue(ctx, MultiChannelCCValues.individualEndpointCount, numEndpoints);
490
- // Since we queried all CCs separately, we can assume that all
491
- // endpoints have different capabilities
492
- this.setValue(ctx, MultiChannelCCValues.endpointsHaveIdenticalCapabilities, false);
493
- for (let endpoint = 1; endpoint <= numEndpoints; endpoint++) {
494
- // Check which CCs exist on this endpoint
495
- const endpointCCs = [...endpointCounts.entries()]
496
- .filter(([, ccEndpoints]) => ccEndpoints >= endpoint)
497
- .map(([ccId]) => ccId);
498
- // And store it per endpoint
499
- valueDB.setValue(MultiChannelCCValues.endpointCCs.endpoint(endpoint), endpointCCs);
500
- }
501
- // Remember that the interview is complete
502
- this.setInterviewComplete(ctx, true);
503
- }
504
- };
505
- MultiChannelCC = __decorate([
506
- commandClass(CommandClasses["Multi Channel"]),
507
- implementedVersion(4),
508
- ccValues(MultiChannelCCValues)
509
- ], MultiChannelCC);
510
- export { MultiChannelCC };
511
- let MultiChannelCCEndPointReport = MultiChannelCCEndPointReport_1 = class MultiChannelCCEndPointReport extends MultiChannelCC {
512
- constructor(options) {
513
- super(options);
514
- this.countIsDynamic = options.countIsDynamic;
515
- this.identicalCapabilities = options.identicalCapabilities;
516
- this.individualCount = options.individualCount;
517
- this.aggregatedCount = options.aggregatedCount;
518
- }
519
- static from(raw, ctx) {
520
- validatePayload(raw.payload.length >= 2);
521
- const countIsDynamic = !!(raw.payload[0] & 0b10000000);
522
- const identicalCapabilities = !!(raw.payload[0] & 0b01000000);
523
- const individualCount = raw.payload[1] & 0b01111111;
524
- let aggregatedCount;
525
- if (raw.payload.length >= 3) {
526
- aggregatedCount = raw.payload[2] & 0b01111111;
527
- }
528
- return new MultiChannelCCEndPointReport_1({
529
- nodeId: ctx.sourceNodeId,
530
- countIsDynamic,
531
- identicalCapabilities,
532
- individualCount,
533
- aggregatedCount,
534
- });
535
- }
536
- countIsDynamic;
537
- identicalCapabilities;
538
- individualCount;
539
- aggregatedCount;
540
- serialize(ctx) {
541
- this.payload = Bytes.from([
542
- (this.countIsDynamic ? 0b10000000 : 0)
543
- | (this.identicalCapabilities ? 0b01000000 : 0),
544
- this.individualCount & 0b01111111,
545
- this.aggregatedCount ?? 0,
546
- ]);
547
- return super.serialize(ctx);
548
- }
549
- toLogEntry(ctx) {
550
- const message = {
551
- "endpoint count (individual)": this.individualCount,
552
- "count is dynamic": this.countIsDynamic,
553
- "identical capabilities": this.identicalCapabilities,
554
- };
555
- if (this.aggregatedCount != undefined) {
556
- message["endpoint count (aggregated)"] = this.aggregatedCount;
557
- }
558
- const ret = {
559
- ...super.toLogEntry(ctx),
560
- message,
561
- };
562
- return ret;
563
- }
564
- };
565
- __decorate([
566
- ccValue(MultiChannelCCValues.endpointCountIsDynamic)
567
- ], MultiChannelCCEndPointReport.prototype, "countIsDynamic", void 0);
568
- __decorate([
569
- ccValue(MultiChannelCCValues.endpointsHaveIdenticalCapabilities)
570
- ], MultiChannelCCEndPointReport.prototype, "identicalCapabilities", void 0);
571
- __decorate([
572
- ccValue(MultiChannelCCValues.individualEndpointCount)
573
- ], MultiChannelCCEndPointReport.prototype, "individualCount", void 0);
574
- __decorate([
575
- ccValue(MultiChannelCCValues.aggregatedEndpointCount)
576
- ], MultiChannelCCEndPointReport.prototype, "aggregatedCount", void 0);
577
- MultiChannelCCEndPointReport = MultiChannelCCEndPointReport_1 = __decorate([
578
- CCCommand(MultiChannelCommand.EndPointReport)
579
- ], MultiChannelCCEndPointReport);
629
+ };
630
+ return MultiChannelCCEndPointReport = _classThis;
631
+ })();
580
632
  export { MultiChannelCCEndPointReport };
581
- let MultiChannelCCEndPointGet = class MultiChannelCCEndPointGet extends MultiChannelCC {
582
- };
583
- MultiChannelCCEndPointGet = __decorate([
584
- CCCommand(MultiChannelCommand.EndPointGet),
585
- expectedCCResponse(MultiChannelCCEndPointReport)
586
- ], MultiChannelCCEndPointGet);
633
+ let MultiChannelCCEndPointGet = (() => {
634
+ let _classDecorators = [CCCommand(MultiChannelCommand.EndPointGet), expectedCCResponse(MultiChannelCCEndPointReport)];
635
+ let _classDescriptor;
636
+ let _classExtraInitializers = [];
637
+ let _classThis;
638
+ let _classSuper = MultiChannelCC;
639
+ var MultiChannelCCEndPointGet = class extends _classSuper {
640
+ static { _classThis = this; }
641
+ static {
642
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
643
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
644
+ MultiChannelCCEndPointGet = _classThis = _classDescriptor.value;
645
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
646
+ __runInitializers(_classThis, _classExtraInitializers);
647
+ }
648
+ };
649
+ return MultiChannelCCEndPointGet = _classThis;
650
+ })();
587
651
  export { MultiChannelCCEndPointGet };
588
- let MultiChannelCCCapabilityReport = MultiChannelCCCapabilityReport_1 = class MultiChannelCCCapabilityReport extends MultiChannelCC {
589
- constructor(options) {
590
- super(options);
591
- this.endpointIndex = options.endpointIndex;
592
- this.genericDeviceClass = options.genericDeviceClass;
593
- this.specificDeviceClass = options.specificDeviceClass;
594
- this.supportedCCs = options.supportedCCs;
595
- this.isDynamic = options.isDynamic;
596
- this.wasRemoved = options.wasRemoved;
597
- }
598
- static from(raw, ctx) {
599
- // Only validate the bytes we expect to see here
600
- // parseApplicationNodeInformation does its own validation
601
- validatePayload(raw.payload.length >= 1);
602
- const endpointIndex = raw.payload[0] & 0b01111111;
603
- const isDynamic = !!(raw.payload[0] & 0b10000000);
604
- const NIF = parseApplicationNodeInformation(raw.payload.subarray(1));
605
- const genericDeviceClass = NIF.genericDeviceClass;
606
- const specificDeviceClass = NIF.specificDeviceClass;
607
- const supportedCCs = NIF.supportedCCs;
608
- // Removal reports have very specific information
609
- const wasRemoved = isDynamic
610
- && genericDeviceClass === 0xff // "Non-Interoperable"
611
- && specificDeviceClass === 0x00;
612
- return new MultiChannelCCCapabilityReport_1({
613
- nodeId: ctx.sourceNodeId,
614
- endpointIndex,
615
- isDynamic,
616
- genericDeviceClass,
617
- specificDeviceClass,
618
- supportedCCs,
619
- wasRemoved,
620
- });
621
- }
622
- persistValues(ctx) {
623
- if (!super.persistValues(ctx))
624
- return false;
625
- const deviceClassValue = MultiChannelCCValues.endpointDeviceClass;
626
- const ccsValue = MultiChannelCCValues.endpointCCs;
627
- if (this.wasRemoved) {
628
- this.removeValue(ctx, deviceClassValue);
629
- this.removeValue(ctx, ccsValue);
630
- }
631
- else {
632
- this.setValue(ctx, deviceClassValue, {
633
- generic: this.genericDeviceClass,
634
- specific: this.specificDeviceClass,
652
+ let MultiChannelCCCapabilityReport = (() => {
653
+ let _classDecorators = [CCCommand(MultiChannelCommand.CapabilityReport)];
654
+ let _classDescriptor;
655
+ let _classExtraInitializers = [];
656
+ let _classThis;
657
+ let _classSuper = MultiChannelCC;
658
+ var MultiChannelCCCapabilityReport = class extends _classSuper {
659
+ static { _classThis = this; }
660
+ static {
661
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
662
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
663
+ MultiChannelCCCapabilityReport = _classThis = _classDescriptor.value;
664
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
665
+ __runInitializers(_classThis, _classExtraInitializers);
666
+ }
667
+ constructor(options) {
668
+ super(options);
669
+ this.endpointIndex = options.endpointIndex;
670
+ this.genericDeviceClass = options.genericDeviceClass;
671
+ this.specificDeviceClass = options.specificDeviceClass;
672
+ this.supportedCCs = options.supportedCCs;
673
+ this.isDynamic = options.isDynamic;
674
+ this.wasRemoved = options.wasRemoved;
675
+ }
676
+ static from(raw, ctx) {
677
+ // Only validate the bytes we expect to see here
678
+ // parseApplicationNodeInformation does its own validation
679
+ validatePayload(raw.payload.length >= 1);
680
+ const endpointIndex = raw.payload[0] & 0b01111111;
681
+ const isDynamic = !!(raw.payload[0] & 0b10000000);
682
+ const NIF = parseApplicationNodeInformation(raw.payload.subarray(1));
683
+ const genericDeviceClass = NIF.genericDeviceClass;
684
+ const specificDeviceClass = NIF.specificDeviceClass;
685
+ const supportedCCs = NIF.supportedCCs;
686
+ // Removal reports have very specific information
687
+ const wasRemoved = isDynamic
688
+ && genericDeviceClass === 0xff // "Non-Interoperable"
689
+ && specificDeviceClass === 0x00;
690
+ return new this({
691
+ nodeId: ctx.sourceNodeId,
692
+ endpointIndex,
693
+ isDynamic,
694
+ genericDeviceClass,
695
+ specificDeviceClass,
696
+ supportedCCs,
697
+ wasRemoved,
635
698
  });
636
- this.setValue(ctx, ccsValue, this.supportedCCs);
637
699
  }
638
- return true;
639
- }
640
- // The endpoint index must be overridden to be able to attribute the information to the correct endpoint
641
- genericDeviceClass;
642
- specificDeviceClass;
643
- supportedCCs;
644
- isDynamic;
645
- wasRemoved;
646
- serialize(ctx) {
647
- this.payload = Bytes.concat([
648
- Bytes.from([
649
- (this.endpointIndex & 0b01111111)
650
- | (this.isDynamic ? 0b10000000 : 0),
651
- ]),
652
- encodeApplicationNodeInformation(this),
653
- ]);
654
- return super.serialize(ctx);
655
- }
656
- toLogEntry(ctx) {
657
- return {
658
- ...super.toLogEntry(ctx),
659
- message: {
660
- "endpoint index": this.endpointIndex,
661
- "generic device class": getGenericDeviceClass(this.genericDeviceClass).label,
662
- "specific device class": getSpecificDeviceClass(this.genericDeviceClass, this.specificDeviceClass).label,
663
- "is dynamic end point": this.isDynamic,
664
- "supported CCs": this.supportedCCs
665
- .map((cc) => `\n· ${getCCName(cc)}`)
666
- .join(""),
667
- },
668
- };
669
- }
670
- };
671
- MultiChannelCCCapabilityReport = MultiChannelCCCapabilityReport_1 = __decorate([
672
- CCCommand(MultiChannelCommand.CapabilityReport)
673
- ], MultiChannelCCCapabilityReport);
700
+ persistValues(ctx) {
701
+ if (!super.persistValues(ctx))
702
+ return false;
703
+ const deviceClassValue = MultiChannelCCValues.endpointDeviceClass;
704
+ const ccsValue = MultiChannelCCValues.endpointCCs;
705
+ if (this.wasRemoved) {
706
+ this.removeValue(ctx, deviceClassValue);
707
+ this.removeValue(ctx, ccsValue);
708
+ }
709
+ else {
710
+ this.setValue(ctx, deviceClassValue, {
711
+ generic: this.genericDeviceClass,
712
+ specific: this.specificDeviceClass,
713
+ });
714
+ this.setValue(ctx, ccsValue, this.supportedCCs);
715
+ }
716
+ return true;
717
+ }
718
+ // The endpoint index must be overridden to be able to attribute the information to the correct endpoint
719
+ genericDeviceClass;
720
+ specificDeviceClass;
721
+ supportedCCs;
722
+ isDynamic;
723
+ wasRemoved;
724
+ serialize(ctx) {
725
+ this.payload = Bytes.concat([
726
+ Bytes.from([
727
+ (this.endpointIndex & 0b01111111)
728
+ | (this.isDynamic ? 0b10000000 : 0),
729
+ ]),
730
+ encodeApplicationNodeInformation(this),
731
+ ]);
732
+ return super.serialize(ctx);
733
+ }
734
+ toLogEntry(ctx) {
735
+ return {
736
+ ...super.toLogEntry(ctx),
737
+ message: {
738
+ "endpoint index": this.endpointIndex,
739
+ "generic device class": getGenericDeviceClass(this.genericDeviceClass).label,
740
+ "specific device class": getSpecificDeviceClass(this.genericDeviceClass, this.specificDeviceClass).label,
741
+ "is dynamic end point": this.isDynamic,
742
+ "supported CCs": this.supportedCCs
743
+ .map((cc) => `\n· ${getCCName(cc)}`)
744
+ .join(""),
745
+ },
746
+ };
747
+ }
748
+ };
749
+ return MultiChannelCCCapabilityReport = _classThis;
750
+ })();
674
751
  export { MultiChannelCCCapabilityReport };
675
752
  function testResponseForMultiChannelCapabilityGet(sent, received) {
676
753
  return received.endpointIndex === sent.requestedEndpoint;
677
754
  }
678
- let MultiChannelCCCapabilityGet = MultiChannelCCCapabilityGet_1 = class MultiChannelCCCapabilityGet extends MultiChannelCC {
679
- constructor(options) {
680
- super(options);
681
- this.requestedEndpoint = options.requestedEndpoint;
682
- }
683
- static from(raw, ctx) {
684
- validatePayload(raw.payload.length >= 1);
685
- const requestedEndpoint = raw.payload[0] & 0b01111111;
686
- return new MultiChannelCCCapabilityGet_1({
687
- nodeId: ctx.sourceNodeId,
688
- requestedEndpoint,
689
- });
690
- }
691
- requestedEndpoint;
692
- serialize(ctx) {
693
- this.payload = Bytes.from([this.requestedEndpoint & 0b01111111]);
694
- return super.serialize(ctx);
695
- }
696
- toLogEntry(ctx) {
697
- return {
698
- ...super.toLogEntry(ctx),
699
- message: { endpoint: this.requestedEndpoint },
700
- };
701
- }
702
- };
703
- MultiChannelCCCapabilityGet = MultiChannelCCCapabilityGet_1 = __decorate([
704
- CCCommand(MultiChannelCommand.CapabilityGet),
705
- expectedCCResponse(MultiChannelCCCapabilityReport, testResponseForMultiChannelCapabilityGet)
706
- ], MultiChannelCCCapabilityGet);
755
+ let MultiChannelCCCapabilityGet = (() => {
756
+ let _classDecorators = [CCCommand(MultiChannelCommand.CapabilityGet), expectedCCResponse(MultiChannelCCCapabilityReport, testResponseForMultiChannelCapabilityGet)];
757
+ let _classDescriptor;
758
+ let _classExtraInitializers = [];
759
+ let _classThis;
760
+ let _classSuper = MultiChannelCC;
761
+ var MultiChannelCCCapabilityGet = class extends _classSuper {
762
+ static { _classThis = this; }
763
+ static {
764
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
765
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
766
+ MultiChannelCCCapabilityGet = _classThis = _classDescriptor.value;
767
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
768
+ __runInitializers(_classThis, _classExtraInitializers);
769
+ }
770
+ constructor(options) {
771
+ super(options);
772
+ this.requestedEndpoint = options.requestedEndpoint;
773
+ }
774
+ static from(raw, ctx) {
775
+ validatePayload(raw.payload.length >= 1);
776
+ const requestedEndpoint = raw.payload[0] & 0b01111111;
777
+ return new this({
778
+ nodeId: ctx.sourceNodeId,
779
+ requestedEndpoint,
780
+ });
781
+ }
782
+ requestedEndpoint;
783
+ serialize(ctx) {
784
+ this.payload = Bytes.from([this.requestedEndpoint & 0b01111111]);
785
+ return super.serialize(ctx);
786
+ }
787
+ toLogEntry(ctx) {
788
+ return {
789
+ ...super.toLogEntry(ctx),
790
+ message: { endpoint: this.requestedEndpoint },
791
+ };
792
+ }
793
+ };
794
+ return MultiChannelCCCapabilityGet = _classThis;
795
+ })();
707
796
  export { MultiChannelCCCapabilityGet };
708
- let MultiChannelCCEndPointFindReport = MultiChannelCCEndPointFindReport_1 = class MultiChannelCCEndPointFindReport extends MultiChannelCC {
709
- constructor(options) {
710
- super(options);
711
- this.genericClass = options.genericClass;
712
- this.specificClass = options.specificClass;
713
- this.foundEndpoints = options.foundEndpoints;
714
- this.reportsToFollow = options.reportsToFollow;
715
- }
716
- static from(raw, ctx) {
717
- validatePayload(raw.payload.length >= 3);
718
- const reportsToFollow = raw.payload[0];
719
- const genericClass = raw.payload[1];
720
- const specificClass = raw.payload[2];
721
- // Some devices omit the endpoint list although that is not allowed in the specs
722
- // therefore don't validatePayload here.
723
- const foundEndpoints = [...raw.payload.subarray(3)]
724
- .map((e) => e & 0b01111111)
725
- .filter((e) => e !== 0);
726
- return new MultiChannelCCEndPointFindReport_1({
727
- nodeId: ctx.sourceNodeId,
728
- reportsToFollow,
729
- genericClass,
730
- specificClass,
731
- foundEndpoints,
732
- });
733
- }
734
- genericClass;
735
- specificClass;
736
- foundEndpoints;
737
- reportsToFollow;
738
- serialize(ctx) {
739
- this.payload = Bytes.concat([
740
- Bytes.from([
741
- this.reportsToFollow,
742
- this.genericClass,
743
- this.specificClass,
744
- ]),
745
- Bytes.from(this.foundEndpoints.map((e) => e & 0b01111111)),
746
- ]);
747
- return super.serialize(ctx);
748
- }
749
- getPartialCCSessionId() {
750
- // Distinguish sessions by the requested device classes
751
- return {
752
- genericClass: this.genericClass,
753
- specificClass: this.specificClass,
754
- };
755
- }
756
- expectMoreMessages() {
757
- return this.reportsToFollow > 0;
758
- }
759
- mergePartialCCs(partials, _ctx) {
760
- // Concat the list of end points
761
- this.foundEndpoints = [...partials, this]
762
- .map((report) => report.foundEndpoints)
763
- .reduce((prev, cur) => prev.concat(...cur), []);
764
- }
765
- toLogEntry(ctx) {
766
- return {
767
- ...super.toLogEntry(ctx),
768
- message: {
769
- "generic device class": getGenericDeviceClass(this.genericClass).label,
770
- "specific device class": getSpecificDeviceClass(this.genericClass, this.specificClass).label,
771
- "found endpoints": this.foundEndpoints.join(", "),
772
- "# of reports to follow": this.reportsToFollow,
773
- },
774
- };
775
- }
776
- };
777
- MultiChannelCCEndPointFindReport = MultiChannelCCEndPointFindReport_1 = __decorate([
778
- CCCommand(MultiChannelCommand.EndPointFindReport)
779
- ], MultiChannelCCEndPointFindReport);
797
+ let MultiChannelCCEndPointFindReport = (() => {
798
+ let _classDecorators = [CCCommand(MultiChannelCommand.EndPointFindReport)];
799
+ let _classDescriptor;
800
+ let _classExtraInitializers = [];
801
+ let _classThis;
802
+ let _classSuper = MultiChannelCC;
803
+ var MultiChannelCCEndPointFindReport = class extends _classSuper {
804
+ static { _classThis = this; }
805
+ static {
806
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
807
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
808
+ MultiChannelCCEndPointFindReport = _classThis = _classDescriptor.value;
809
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
810
+ __runInitializers(_classThis, _classExtraInitializers);
811
+ }
812
+ constructor(options) {
813
+ super(options);
814
+ this.genericClass = options.genericClass;
815
+ this.specificClass = options.specificClass;
816
+ this.foundEndpoints = options.foundEndpoints;
817
+ this.reportsToFollow = options.reportsToFollow;
818
+ }
819
+ static from(raw, ctx) {
820
+ validatePayload(raw.payload.length >= 3);
821
+ const reportsToFollow = raw.payload[0];
822
+ const genericClass = raw.payload[1];
823
+ const specificClass = raw.payload[2];
824
+ // Some devices omit the endpoint list although that is not allowed in the specs
825
+ // therefore don't validatePayload here.
826
+ const foundEndpoints = [...raw.payload.subarray(3)]
827
+ .map((e) => e & 0b01111111)
828
+ .filter((e) => e !== 0);
829
+ return new this({
830
+ nodeId: ctx.sourceNodeId,
831
+ reportsToFollow,
832
+ genericClass,
833
+ specificClass,
834
+ foundEndpoints,
835
+ });
836
+ }
837
+ genericClass;
838
+ specificClass;
839
+ foundEndpoints;
840
+ reportsToFollow;
841
+ serialize(ctx) {
842
+ this.payload = Bytes.concat([
843
+ Bytes.from([
844
+ this.reportsToFollow,
845
+ this.genericClass,
846
+ this.specificClass,
847
+ ]),
848
+ Bytes.from(this.foundEndpoints.map((e) => e & 0b01111111)),
849
+ ]);
850
+ return super.serialize(ctx);
851
+ }
852
+ getPartialCCSessionId() {
853
+ // Distinguish sessions by the requested device classes
854
+ return {
855
+ genericClass: this.genericClass,
856
+ specificClass: this.specificClass,
857
+ };
858
+ }
859
+ expectMoreMessages() {
860
+ return this.reportsToFollow > 0;
861
+ }
862
+ mergePartialCCs(partials, _ctx) {
863
+ // Concat the list of end points
864
+ this.foundEndpoints = [...partials, this]
865
+ .map((report) => report.foundEndpoints)
866
+ .reduce((prev, cur) => prev.concat(...cur), []);
867
+ }
868
+ toLogEntry(ctx) {
869
+ return {
870
+ ...super.toLogEntry(ctx),
871
+ message: {
872
+ "generic device class": getGenericDeviceClass(this.genericClass).label,
873
+ "specific device class": getSpecificDeviceClass(this.genericClass, this.specificClass).label,
874
+ "found endpoints": this.foundEndpoints.join(", "),
875
+ "# of reports to follow": this.reportsToFollow,
876
+ },
877
+ };
878
+ }
879
+ };
880
+ return MultiChannelCCEndPointFindReport = _classThis;
881
+ })();
780
882
  export { MultiChannelCCEndPointFindReport };
781
- let MultiChannelCCEndPointFind = MultiChannelCCEndPointFind_1 = class MultiChannelCCEndPointFind extends MultiChannelCC {
782
- constructor(options) {
783
- super(options);
784
- this.genericClass = options.genericClass;
785
- this.specificClass = options.specificClass;
786
- }
787
- static from(raw, ctx) {
788
- validatePayload(raw.payload.length >= 2);
789
- const genericClass = raw.payload[0];
790
- const specificClass = raw.payload[1];
791
- return new MultiChannelCCEndPointFind_1({
792
- nodeId: ctx.sourceNodeId,
793
- genericClass,
794
- specificClass,
795
- });
796
- }
797
- genericClass;
798
- specificClass;
799
- serialize(ctx) {
800
- this.payload = Bytes.from([this.genericClass, this.specificClass]);
801
- return super.serialize(ctx);
802
- }
803
- toLogEntry(ctx) {
804
- return {
805
- ...super.toLogEntry(ctx),
806
- message: {
807
- "generic device class": getGenericDeviceClass(this.genericClass).label,
808
- "specific device class": getSpecificDeviceClass(this.genericClass, this.specificClass).label,
809
- },
810
- };
811
- }
812
- };
813
- MultiChannelCCEndPointFind = MultiChannelCCEndPointFind_1 = __decorate([
814
- CCCommand(MultiChannelCommand.EndPointFind),
815
- expectedCCResponse(MultiChannelCCEndPointFindReport)
816
- ], MultiChannelCCEndPointFind);
883
+ let MultiChannelCCEndPointFind = (() => {
884
+ let _classDecorators = [CCCommand(MultiChannelCommand.EndPointFind), expectedCCResponse(MultiChannelCCEndPointFindReport)];
885
+ let _classDescriptor;
886
+ let _classExtraInitializers = [];
887
+ let _classThis;
888
+ let _classSuper = MultiChannelCC;
889
+ var MultiChannelCCEndPointFind = class extends _classSuper {
890
+ static { _classThis = this; }
891
+ static {
892
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
893
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
894
+ MultiChannelCCEndPointFind = _classThis = _classDescriptor.value;
895
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
896
+ __runInitializers(_classThis, _classExtraInitializers);
897
+ }
898
+ constructor(options) {
899
+ super(options);
900
+ this.genericClass = options.genericClass;
901
+ this.specificClass = options.specificClass;
902
+ }
903
+ static from(raw, ctx) {
904
+ validatePayload(raw.payload.length >= 2);
905
+ const genericClass = raw.payload[0];
906
+ const specificClass = raw.payload[1];
907
+ return new this({
908
+ nodeId: ctx.sourceNodeId,
909
+ genericClass,
910
+ specificClass,
911
+ });
912
+ }
913
+ genericClass;
914
+ specificClass;
915
+ serialize(ctx) {
916
+ this.payload = Bytes.from([this.genericClass, this.specificClass]);
917
+ return super.serialize(ctx);
918
+ }
919
+ toLogEntry(ctx) {
920
+ return {
921
+ ...super.toLogEntry(ctx),
922
+ message: {
923
+ "generic device class": getGenericDeviceClass(this.genericClass).label,
924
+ "specific device class": getSpecificDeviceClass(this.genericClass, this.specificClass).label,
925
+ },
926
+ };
927
+ }
928
+ };
929
+ return MultiChannelCCEndPointFind = _classThis;
930
+ })();
817
931
  export { MultiChannelCCEndPointFind };
818
- let MultiChannelCCAggregatedMembersReport = MultiChannelCCAggregatedMembersReport_1 = class MultiChannelCCAggregatedMembersReport extends MultiChannelCC {
819
- constructor(options) {
820
- super(options);
821
- // TODO: Check implementation:
822
- this.aggregatedEndpointIndex = options.aggregatedEndpointIndex;
823
- this.members = options.members;
824
- }
825
- static from(raw, ctx) {
826
- validatePayload(raw.payload.length >= 2);
827
- const aggregatedEndpointIndex = raw.payload[0] & 0b0111_1111;
828
- const bitMaskLength = raw.payload[1];
829
- validatePayload(raw.payload.length >= 2 + bitMaskLength);
830
- const bitMask = raw.payload.subarray(2, 2 + bitMaskLength);
831
- const members = parseBitMask(bitMask);
832
- return new MultiChannelCCAggregatedMembersReport_1({
833
- nodeId: ctx.sourceNodeId,
834
- aggregatedEndpointIndex,
835
- members,
836
- });
837
- }
838
- aggregatedEndpointIndex;
839
- members;
840
- toLogEntry(ctx) {
841
- return {
842
- ...super.toLogEntry(ctx),
843
- message: {
844
- "aggregated endpoint": this.aggregatedEndpointIndex,
845
- members: this.members.join(", "),
846
- },
847
- };
848
- }
849
- };
850
- __decorate([
851
- ccValue(MultiChannelCCValues.aggregatedEndpointMembers, (self) => [self.aggregatedEndpointIndex])
852
- ], MultiChannelCCAggregatedMembersReport.prototype, "members", void 0);
853
- MultiChannelCCAggregatedMembersReport = MultiChannelCCAggregatedMembersReport_1 = __decorate([
854
- CCCommand(MultiChannelCommand.AggregatedMembersReport)
855
- ], MultiChannelCCAggregatedMembersReport);
932
+ let MultiChannelCCAggregatedMembersReport = (() => {
933
+ let _classDecorators = [CCCommand(MultiChannelCommand.AggregatedMembersReport), ccValueProperty("members", MultiChannelCCValues.aggregatedEndpointMembers, (self) => [self.aggregatedEndpointIndex])];
934
+ let _classDescriptor;
935
+ let _classExtraInitializers = [];
936
+ let _classThis;
937
+ let _classSuper = MultiChannelCC;
938
+ var MultiChannelCCAggregatedMembersReport = class extends _classSuper {
939
+ static { _classThis = this; }
940
+ static {
941
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
942
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
943
+ MultiChannelCCAggregatedMembersReport = _classThis = _classDescriptor.value;
944
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
945
+ __runInitializers(_classThis, _classExtraInitializers);
946
+ }
947
+ constructor(options) {
948
+ super(options);
949
+ // TODO: Check implementation:
950
+ this.aggregatedEndpointIndex = options.aggregatedEndpointIndex;
951
+ this.members = options.members;
952
+ }
953
+ static from(raw, ctx) {
954
+ validatePayload(raw.payload.length >= 2);
955
+ const aggregatedEndpointIndex = raw.payload[0] & 0b0111_1111;
956
+ const bitMaskLength = raw.payload[1];
957
+ validatePayload(raw.payload.length >= 2 + bitMaskLength);
958
+ const bitMask = raw.payload.subarray(2, 2 + bitMaskLength);
959
+ const members = parseBitMask(bitMask);
960
+ return new this({
961
+ nodeId: ctx.sourceNodeId,
962
+ aggregatedEndpointIndex,
963
+ members,
964
+ });
965
+ }
966
+ aggregatedEndpointIndex;
967
+ members;
968
+ toLogEntry(ctx) {
969
+ return {
970
+ ...super.toLogEntry(ctx),
971
+ message: {
972
+ "aggregated endpoint": this.aggregatedEndpointIndex,
973
+ members: this.members.join(", "),
974
+ },
975
+ };
976
+ }
977
+ };
978
+ return MultiChannelCCAggregatedMembersReport = _classThis;
979
+ })();
856
980
  export { MultiChannelCCAggregatedMembersReport };
857
- let MultiChannelCCAggregatedMembersGet = class MultiChannelCCAggregatedMembersGet extends MultiChannelCC {
858
- constructor(options) {
859
- super(options);
860
- this.requestedEndpoint = options.requestedEndpoint;
861
- }
862
- static from(_raw, _ctx) {
863
- // TODO: Deserialize payload
864
- throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);
865
- // return new MultiChannelCCAggregatedMembersGet({
866
- // nodeId: ctx.sourceNodeId,
867
- // });
868
- }
869
- requestedEndpoint;
870
- serialize(ctx) {
871
- this.payload = Bytes.from([this.requestedEndpoint & 0b0111_1111]);
872
- return super.serialize(ctx);
873
- }
874
- toLogEntry(ctx) {
875
- return {
876
- ...super.toLogEntry(ctx),
877
- message: { endpoint: this.requestedEndpoint },
878
- };
879
- }
880
- };
881
- MultiChannelCCAggregatedMembersGet = __decorate([
882
- CCCommand(MultiChannelCommand.AggregatedMembersGet),
883
- expectedCCResponse(MultiChannelCCAggregatedMembersReport)
884
- ], MultiChannelCCAggregatedMembersGet);
981
+ let MultiChannelCCAggregatedMembersGet = (() => {
982
+ let _classDecorators = [CCCommand(MultiChannelCommand.AggregatedMembersGet), expectedCCResponse(MultiChannelCCAggregatedMembersReport)];
983
+ let _classDescriptor;
984
+ let _classExtraInitializers = [];
985
+ let _classThis;
986
+ let _classSuper = MultiChannelCC;
987
+ var MultiChannelCCAggregatedMembersGet = class extends _classSuper {
988
+ static { _classThis = this; }
989
+ static {
990
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
991
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
992
+ MultiChannelCCAggregatedMembersGet = _classThis = _classDescriptor.value;
993
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
994
+ __runInitializers(_classThis, _classExtraInitializers);
995
+ }
996
+ constructor(options) {
997
+ super(options);
998
+ this.requestedEndpoint = options.requestedEndpoint;
999
+ }
1000
+ static from(_raw, _ctx) {
1001
+ // TODO: Deserialize payload
1002
+ throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);
1003
+ // return new MultiChannelCCAggregatedMembersGet({
1004
+ // nodeId: ctx.sourceNodeId,
1005
+ // });
1006
+ }
1007
+ requestedEndpoint;
1008
+ serialize(ctx) {
1009
+ this.payload = Bytes.from([this.requestedEndpoint & 0b0111_1111]);
1010
+ return super.serialize(ctx);
1011
+ }
1012
+ toLogEntry(ctx) {
1013
+ return {
1014
+ ...super.toLogEntry(ctx),
1015
+ message: { endpoint: this.requestedEndpoint },
1016
+ };
1017
+ }
1018
+ };
1019
+ return MultiChannelCCAggregatedMembersGet = _classThis;
1020
+ })();
885
1021
  export { MultiChannelCCAggregatedMembersGet };
886
1022
  // SDS13783: A receiving node MAY respond to a Multi Channel encapsulated command if the Destination
887
1023
  // End Point field specifies a single End Point. In that case, the response MUST be Multi Channel
@@ -906,166 +1042,203 @@ function testResponseForCommandEncapsulation(sent, received) {
906
1042
  }
907
1043
  return false;
908
1044
  }
909
- let MultiChannelCCCommandEncapsulation = MultiChannelCCCommandEncapsulation_1 = class MultiChannelCCCommandEncapsulation extends MultiChannelCC {
910
- constructor(options) {
911
- super(options);
912
- this.encapsulated = options.encapsulated;
913
- this.encapsulated.encapsulatingCC = this;
914
- // Propagate the endpoint index all the way down
915
- let cur = this;
916
- while (cur) {
917
- if (isMultiEncapsulatingCommandClass(cur)) {
918
- for (const cc of cur.encapsulated) {
919
- cc.endpointIndex = this.endpointIndex;
1045
+ let MultiChannelCCCommandEncapsulation = (() => {
1046
+ let _classDecorators = [CCCommand(MultiChannelCommand.CommandEncapsulation), expectedCCResponse(getCCResponseForCommandEncapsulation, testResponseForCommandEncapsulation)];
1047
+ let _classDescriptor;
1048
+ let _classExtraInitializers = [];
1049
+ let _classThis;
1050
+ let _classSuper = MultiChannelCC;
1051
+ var MultiChannelCCCommandEncapsulation = class extends _classSuper {
1052
+ static { _classThis = this; }
1053
+ static {
1054
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
1055
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
1056
+ MultiChannelCCCommandEncapsulation = _classThis = _classDescriptor.value;
1057
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
1058
+ __runInitializers(_classThis, _classExtraInitializers);
1059
+ }
1060
+ constructor(options) {
1061
+ super(options);
1062
+ this.encapsulated = options.encapsulated;
1063
+ this.encapsulated.encapsulatingCC = this;
1064
+ // Propagate the endpoint index all the way down
1065
+ let cur = this;
1066
+ while (cur) {
1067
+ if (isMultiEncapsulatingCommandClass(cur)) {
1068
+ for (const cc of cur.encapsulated) {
1069
+ cc.endpointIndex = this.endpointIndex;
1070
+ }
1071
+ break;
1072
+ }
1073
+ else if (isEncapsulatingCommandClass(cur)) {
1074
+ cur.encapsulated.endpointIndex = this.endpointIndex;
1075
+ cur = cur.encapsulated;
1076
+ }
1077
+ else {
1078
+ break;
920
1079
  }
921
- break;
922
1080
  }
923
- else if (isEncapsulatingCommandClass(cur)) {
924
- cur.encapsulated.endpointIndex = this.endpointIndex;
925
- cur = cur.encapsulated;
1081
+ this.destination = options.destination;
1082
+ }
1083
+ static from(raw, ctx) {
1084
+ validatePayload(raw.payload.length >= 2);
1085
+ let endpointIndex;
1086
+ let destination;
1087
+ if (ctx.getDeviceConfig?.(ctx.sourceNodeId)
1088
+ ?.compat?.treatDestinationEndpointAsSource) {
1089
+ // This device incorrectly uses the destination field to indicate the source endpoint
1090
+ endpointIndex = raw.payload[1] & 0b0111_1111;
1091
+ destination = 0;
926
1092
  }
927
1093
  else {
928
- break;
1094
+ // Parse normally
1095
+ endpointIndex = raw.payload[0] & 0b0111_1111;
1096
+ const isBitMask = !!(raw.payload[1] & 0b1000_0000);
1097
+ destination = raw.payload[1] & 0b0111_1111;
1098
+ if (isBitMask) {
1099
+ destination = parseBitMask(Bytes.from([destination]));
1100
+ }
929
1101
  }
1102
+ // No need to validate further, each CC does it for itself
1103
+ const encapsulated = CommandClass.parse(raw.payload.subarray(2), ctx);
1104
+ return new this({
1105
+ nodeId: ctx.sourceNodeId,
1106
+ endpointIndex,
1107
+ destination,
1108
+ encapsulated,
1109
+ });
930
1110
  }
931
- this.destination = options.destination;
932
- }
933
- static from(raw, ctx) {
934
- validatePayload(raw.payload.length >= 2);
935
- let endpointIndex;
936
- let destination;
937
- if (ctx.getDeviceConfig?.(ctx.sourceNodeId)
938
- ?.compat?.treatDestinationEndpointAsSource) {
939
- // This device incorrectly uses the destination field to indicate the source endpoint
940
- endpointIndex = raw.payload[1] & 0b0111_1111;
941
- destination = 0;
942
- }
943
- else {
944
- // Parse normally
945
- endpointIndex = raw.payload[0] & 0b0111_1111;
946
- const isBitMask = !!(raw.payload[1] & 0b1000_0000);
947
- destination = raw.payload[1] & 0b0111_1111;
948
- if (isBitMask) {
949
- destination = parseBitMask(Bytes.from([destination]));
1111
+ encapsulated;
1112
+ /** The destination end point (0-127) or an array of destination end points (1-7) */
1113
+ destination;
1114
+ serialize(ctx) {
1115
+ if (ctx.getDeviceConfig?.(this.nodeId)?.compat
1116
+ ?.treatDestinationEndpointAsSource) {
1117
+ // This device incorrectly responds from the endpoint we've passed as our source endpoint
1118
+ if (typeof this.destination === "number") {
1119
+ this.endpointIndex = this.destination;
1120
+ }
950
1121
  }
1122
+ const destination = typeof this.destination === "number"
1123
+ // The destination is a single number
1124
+ ? this.destination & 0b0111_1111
1125
+ // The destination is a bit mask
1126
+ : encodeBitMask(this.destination, 7)[0] | 0b1000_0000;
1127
+ this.payload = Bytes.concat([
1128
+ Bytes.from([this.endpointIndex & 0b0111_1111, destination]),
1129
+ this.encapsulated.serialize(ctx),
1130
+ ]);
1131
+ return super.serialize(ctx);
951
1132
  }
952
- // No need to validate further, each CC does it for itself
953
- const encapsulated = CommandClass.parse(raw.payload.subarray(2), ctx);
954
- return new MultiChannelCCCommandEncapsulation_1({
955
- nodeId: ctx.sourceNodeId,
956
- endpointIndex,
957
- destination,
958
- encapsulated,
959
- });
960
- }
961
- encapsulated;
962
- /** The destination end point (0-127) or an array of destination end points (1-7) */
963
- destination;
964
- serialize(ctx) {
965
- if (ctx.getDeviceConfig?.(this.nodeId)?.compat
966
- ?.treatDestinationEndpointAsSource) {
967
- // This device incorrectly responds from the endpoint we've passed as our source endpoint
968
- if (typeof this.destination === "number") {
969
- this.endpointIndex = this.destination;
970
- }
1133
+ toLogEntry(ctx) {
1134
+ return {
1135
+ ...super.toLogEntry(ctx),
1136
+ message: {
1137
+ source: this.endpointIndex,
1138
+ destination: typeof this.destination === "number"
1139
+ ? this.destination
1140
+ : this.destination.join(", "),
1141
+ },
1142
+ };
971
1143
  }
972
- const destination = typeof this.destination === "number"
973
- // The destination is a single number
974
- ? this.destination & 0b0111_1111
975
- // The destination is a bit mask
976
- : encodeBitMask(this.destination, 7)[0] | 0b1000_0000;
977
- this.payload = Bytes.concat([
978
- Bytes.from([this.endpointIndex & 0b0111_1111, destination]),
979
- this.encapsulated.serialize(ctx),
980
- ]);
981
- return super.serialize(ctx);
982
- }
983
- toLogEntry(ctx) {
984
- return {
985
- ...super.toLogEntry(ctx),
986
- message: {
987
- source: this.endpointIndex,
988
- destination: typeof this.destination === "number"
989
- ? this.destination
990
- : this.destination.join(", "),
991
- },
992
- };
993
- }
994
- computeEncapsulationOverhead() {
995
- // Multi Channel CC adds two bytes for the source and destination endpoint
996
- return super.computeEncapsulationOverhead() + 2;
997
- }
998
- };
999
- MultiChannelCCCommandEncapsulation = MultiChannelCCCommandEncapsulation_1 = __decorate([
1000
- CCCommand(MultiChannelCommand.CommandEncapsulation),
1001
- expectedCCResponse(getCCResponseForCommandEncapsulation, testResponseForCommandEncapsulation)
1002
- ], MultiChannelCCCommandEncapsulation);
1144
+ computeEncapsulationOverhead() {
1145
+ // Multi Channel CC adds two bytes for the source and destination endpoint
1146
+ return super.computeEncapsulationOverhead() + 2;
1147
+ }
1148
+ };
1149
+ return MultiChannelCCCommandEncapsulation = _classThis;
1150
+ })();
1003
1151
  export { MultiChannelCCCommandEncapsulation };
1004
- let MultiChannelCCV1Report = MultiChannelCCV1Report_1 = class MultiChannelCCV1Report extends MultiChannelCC {
1005
- constructor(options) {
1006
- super(options);
1007
- // TODO: Check implementation:
1008
- this.requestedCC = options.requestedCC;
1009
- this.endpointCount = options.endpointCount;
1010
- }
1011
- static from(raw, ctx) {
1012
- // V1 won't be extended in the future, so do an exact check
1013
- validatePayload(raw.payload.length === 2);
1014
- const requestedCC = raw.payload[0];
1015
- const endpointCount = raw.payload[1];
1016
- return new MultiChannelCCV1Report_1({
1017
- nodeId: ctx.sourceNodeId,
1018
- requestedCC,
1019
- endpointCount,
1020
- });
1021
- }
1022
- requestedCC;
1023
- endpointCount;
1024
- toLogEntry(ctx) {
1025
- return {
1026
- ...super.toLogEntry(ctx),
1027
- message: {
1028
- CC: getCCName(this.requestedCC),
1029
- "# of endpoints": this.endpointCount,
1030
- },
1031
- };
1032
- }
1033
- };
1034
- MultiChannelCCV1Report = MultiChannelCCV1Report_1 = __decorate([
1035
- CCCommand(MultiChannelCommand.ReportV1)
1036
- ], MultiChannelCCV1Report);
1152
+ let MultiChannelCCV1Report = (() => {
1153
+ let _classDecorators = [CCCommand(MultiChannelCommand.ReportV1)];
1154
+ let _classDescriptor;
1155
+ let _classExtraInitializers = [];
1156
+ let _classThis;
1157
+ let _classSuper = MultiChannelCC;
1158
+ var MultiChannelCCV1Report = class extends _classSuper {
1159
+ static { _classThis = this; }
1160
+ static {
1161
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
1162
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
1163
+ MultiChannelCCV1Report = _classThis = _classDescriptor.value;
1164
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
1165
+ __runInitializers(_classThis, _classExtraInitializers);
1166
+ }
1167
+ constructor(options) {
1168
+ super(options);
1169
+ // TODO: Check implementation:
1170
+ this.requestedCC = options.requestedCC;
1171
+ this.endpointCount = options.endpointCount;
1172
+ }
1173
+ static from(raw, ctx) {
1174
+ // V1 won't be extended in the future, so do an exact check
1175
+ validatePayload(raw.payload.length === 2);
1176
+ const requestedCC = raw.payload[0];
1177
+ const endpointCount = raw.payload[1];
1178
+ return new this({
1179
+ nodeId: ctx.sourceNodeId,
1180
+ requestedCC,
1181
+ endpointCount,
1182
+ });
1183
+ }
1184
+ requestedCC;
1185
+ endpointCount;
1186
+ toLogEntry(ctx) {
1187
+ return {
1188
+ ...super.toLogEntry(ctx),
1189
+ message: {
1190
+ CC: getCCName(this.requestedCC),
1191
+ "# of endpoints": this.endpointCount,
1192
+ },
1193
+ };
1194
+ }
1195
+ };
1196
+ return MultiChannelCCV1Report = _classThis;
1197
+ })();
1037
1198
  export { MultiChannelCCV1Report };
1038
1199
  function testResponseForMultiChannelV1Get(sent, received) {
1039
1200
  return sent.requestedCC === received.requestedCC;
1040
1201
  }
1041
- let MultiChannelCCV1Get = class MultiChannelCCV1Get extends MultiChannelCC {
1042
- constructor(options) {
1043
- super(options);
1044
- this.requestedCC = options.requestedCC;
1045
- }
1046
- static from(_raw, _ctx) {
1047
- // TODO: Deserialize payload
1048
- throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);
1049
- // return new MultiChannelCCV1Get({
1050
- // nodeId: ctx.sourceNodeId,
1051
- // });
1052
- }
1053
- requestedCC;
1054
- serialize(ctx) {
1055
- this.payload = Bytes.from([this.requestedCC]);
1056
- return super.serialize(ctx);
1057
- }
1058
- toLogEntry(ctx) {
1059
- return {
1060
- ...super.toLogEntry(ctx),
1061
- message: { CC: getCCName(this.requestedCC) },
1062
- };
1063
- }
1064
- };
1065
- MultiChannelCCV1Get = __decorate([
1066
- CCCommand(MultiChannelCommand.GetV1),
1067
- expectedCCResponse(MultiChannelCCV1Report, testResponseForMultiChannelV1Get)
1068
- ], MultiChannelCCV1Get);
1202
+ let MultiChannelCCV1Get = (() => {
1203
+ let _classDecorators = [CCCommand(MultiChannelCommand.GetV1), expectedCCResponse(MultiChannelCCV1Report, testResponseForMultiChannelV1Get)];
1204
+ let _classDescriptor;
1205
+ let _classExtraInitializers = [];
1206
+ let _classThis;
1207
+ let _classSuper = MultiChannelCC;
1208
+ var MultiChannelCCV1Get = class extends _classSuper {
1209
+ static { _classThis = this; }
1210
+ static {
1211
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
1212
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
1213
+ MultiChannelCCV1Get = _classThis = _classDescriptor.value;
1214
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
1215
+ __runInitializers(_classThis, _classExtraInitializers);
1216
+ }
1217
+ constructor(options) {
1218
+ super(options);
1219
+ this.requestedCC = options.requestedCC;
1220
+ }
1221
+ static from(_raw, _ctx) {
1222
+ // TODO: Deserialize payload
1223
+ throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);
1224
+ // return new MultiChannelCCV1Get({
1225
+ // nodeId: ctx.sourceNodeId,
1226
+ // });
1227
+ }
1228
+ requestedCC;
1229
+ serialize(ctx) {
1230
+ this.payload = Bytes.from([this.requestedCC]);
1231
+ return super.serialize(ctx);
1232
+ }
1233
+ toLogEntry(ctx) {
1234
+ return {
1235
+ ...super.toLogEntry(ctx),
1236
+ message: { CC: getCCName(this.requestedCC) },
1237
+ };
1238
+ }
1239
+ };
1240
+ return MultiChannelCCV1Get = _classThis;
1241
+ })();
1069
1242
  export { MultiChannelCCV1Get };
1070
1243
  function getResponseForV1CommandEncapsulation(sent) {
1071
1244
  if (sent.encapsulated.expectsCCResponse()) {
@@ -1078,50 +1251,62 @@ function testResponseForV1CommandEncapsulation(sent, received) {
1078
1251
  }
1079
1252
  return false;
1080
1253
  }
1081
- let MultiChannelCCV1CommandEncapsulation = MultiChannelCCV1CommandEncapsulation_1 = class MultiChannelCCV1CommandEncapsulation extends MultiChannelCC {
1082
- constructor(options) {
1083
- super(options);
1084
- this.encapsulated = options.encapsulated;
1085
- // No need to distinguish between source and destination in V1
1086
- this.endpointIndex = this.encapsulated.endpointIndex;
1087
- }
1088
- static from(raw, ctx) {
1089
- validatePayload(raw.payload.length >= 1);
1090
- const endpointIndex = raw.payload[0];
1091
- // Some devices send invalid reports, i.e. MultiChannelCCV1CommandEncapsulation, but with V2+ binary format
1092
- // This would be a NoOp CC, but it makes no sense to encapsulate that.
1093
- const isV2withV1Header = raw.payload.length >= 2
1094
- && raw.payload[1] === 0x00;
1095
- // No need to validate further, each CC does it for itself
1096
- const encapsulated = CommandClass.parse(raw.payload.subarray(isV2withV1Header ? 2 : 1), ctx);
1097
- return new MultiChannelCCV1CommandEncapsulation_1({
1098
- nodeId: ctx.sourceNodeId,
1099
- endpointIndex,
1100
- encapsulated,
1101
- });
1102
- }
1103
- encapsulated;
1104
- serialize(ctx) {
1105
- this.payload = Bytes.concat([
1106
- Bytes.from([this.endpointIndex]),
1107
- this.encapsulated.serialize(ctx),
1108
- ]);
1109
- return super.serialize(ctx);
1110
- }
1111
- computeEncapsulationOverhead() {
1112
- // Multi Channel CC V1 adds one byte for the endpoint index
1113
- return super.computeEncapsulationOverhead() + 1;
1114
- }
1115
- toLogEntry(ctx) {
1116
- return {
1117
- ...super.toLogEntry(ctx),
1118
- message: { source: this.endpointIndex },
1119
- };
1120
- }
1121
- };
1122
- MultiChannelCCV1CommandEncapsulation = MultiChannelCCV1CommandEncapsulation_1 = __decorate([
1123
- CCCommand(MultiChannelCommand.CommandEncapsulationV1),
1124
- expectedCCResponse(getResponseForV1CommandEncapsulation, testResponseForV1CommandEncapsulation)
1125
- ], MultiChannelCCV1CommandEncapsulation);
1254
+ let MultiChannelCCV1CommandEncapsulation = (() => {
1255
+ let _classDecorators = [CCCommand(MultiChannelCommand.CommandEncapsulationV1), expectedCCResponse(getResponseForV1CommandEncapsulation, testResponseForV1CommandEncapsulation)];
1256
+ let _classDescriptor;
1257
+ let _classExtraInitializers = [];
1258
+ let _classThis;
1259
+ let _classSuper = MultiChannelCC;
1260
+ var MultiChannelCCV1CommandEncapsulation = class extends _classSuper {
1261
+ static { _classThis = this; }
1262
+ static {
1263
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
1264
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
1265
+ MultiChannelCCV1CommandEncapsulation = _classThis = _classDescriptor.value;
1266
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
1267
+ __runInitializers(_classThis, _classExtraInitializers);
1268
+ }
1269
+ constructor(options) {
1270
+ super(options);
1271
+ this.encapsulated = options.encapsulated;
1272
+ // No need to distinguish between source and destination in V1
1273
+ this.endpointIndex = this.encapsulated.endpointIndex;
1274
+ }
1275
+ static from(raw, ctx) {
1276
+ validatePayload(raw.payload.length >= 1);
1277
+ const endpointIndex = raw.payload[0];
1278
+ // Some devices send invalid reports, i.e. MultiChannelCCV1CommandEncapsulation, but with V2+ binary format
1279
+ // This would be a NoOp CC, but it makes no sense to encapsulate that.
1280
+ const isV2withV1Header = raw.payload.length >= 2
1281
+ && raw.payload[1] === 0x00;
1282
+ // No need to validate further, each CC does it for itself
1283
+ const encapsulated = CommandClass.parse(raw.payload.subarray(isV2withV1Header ? 2 : 1), ctx);
1284
+ return new this({
1285
+ nodeId: ctx.sourceNodeId,
1286
+ endpointIndex,
1287
+ encapsulated,
1288
+ });
1289
+ }
1290
+ encapsulated;
1291
+ serialize(ctx) {
1292
+ this.payload = Bytes.concat([
1293
+ Bytes.from([this.endpointIndex]),
1294
+ this.encapsulated.serialize(ctx),
1295
+ ]);
1296
+ return super.serialize(ctx);
1297
+ }
1298
+ computeEncapsulationOverhead() {
1299
+ // Multi Channel CC V1 adds one byte for the endpoint index
1300
+ return super.computeEncapsulationOverhead() + 1;
1301
+ }
1302
+ toLogEntry(ctx) {
1303
+ return {
1304
+ ...super.toLogEntry(ctx),
1305
+ message: { source: this.endpointIndex },
1306
+ };
1307
+ }
1308
+ };
1309
+ return MultiChannelCCV1CommandEncapsulation = _classThis;
1310
+ })();
1126
1311
  export { MultiChannelCCV1CommandEncapsulation };
1127
1312
  //# sourceMappingURL=MultiChannelCC.js.map