@zwave-js/cc 15.20.1 → 15.21.1

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 (679) hide show
  1. package/build/cjs/cc/AlarmSensorCC._validateArgs.js.map +2 -2
  2. package/build/cjs/cc/AlarmSensorCC.d.ts +4 -131
  3. package/build/cjs/cc/AlarmSensorCC.js +1 -2
  4. package/build/cjs/cc/AlarmSensorCC.js.map +3 -3
  5. package/build/cjs/cc/ApplicationStatusCC.d.ts +1 -1
  6. package/build/cjs/cc/ApplicationStatusCC.js.map +3 -3
  7. package/build/cjs/cc/AssociationCC._validateArgs.js.map +2 -2
  8. package/build/cjs/cc/AssociationCC.d.ts +3 -109
  9. package/build/cjs/cc/AssociationCC.js +0 -1
  10. package/build/cjs/cc/AssociationCC.js.map +3 -3
  11. package/build/cjs/cc/AssociationGroupInfoCC._validateArgs.js.map +2 -2
  12. package/build/cjs/cc/AssociationGroupInfoCC.d.ts +3 -112
  13. package/build/cjs/cc/AssociationGroupInfoCC.js +0 -1
  14. package/build/cjs/cc/AssociationGroupInfoCC.js.map +3 -3
  15. package/build/cjs/cc/BarrierOperatorCC._validateArgs.js.map +2 -2
  16. package/build/cjs/cc/BarrierOperatorCC.d.ts +4 -148
  17. package/build/cjs/cc/BarrierOperatorCC.js +1 -2
  18. package/build/cjs/cc/BarrierOperatorCC.js.map +3 -3
  19. package/build/cjs/cc/BasicCC._validateArgs.js.map +2 -2
  20. package/build/cjs/cc/BasicCC.d.ts +4 -143
  21. package/build/cjs/cc/BasicCC.js +0 -1
  22. package/build/cjs/cc/BasicCC.js.map +3 -3
  23. package/build/cjs/cc/BasicWindowCoveringCC._validateArgs.js.map +2 -2
  24. package/build/cjs/cc/BasicWindowCoveringCC.d.ts +3 -63
  25. package/build/cjs/cc/BasicWindowCoveringCC.js +2 -3
  26. package/build/cjs/cc/BasicWindowCoveringCC.js.map +3 -3
  27. package/build/cjs/cc/BatteryCC.d.ts +4 -305
  28. package/build/cjs/cc/BatteryCC.js +39 -15
  29. package/build/cjs/cc/BatteryCC.js.map +3 -3
  30. package/build/cjs/cc/BinarySensorCC._validateArgs.js.map +2 -2
  31. package/build/cjs/cc/BinarySensorCC.d.ts +4 -59
  32. package/build/cjs/cc/BinarySensorCC.js +12 -3
  33. package/build/cjs/cc/BinarySensorCC.js.map +3 -3
  34. package/build/cjs/cc/BinarySwitchCC._validateArgs.js.map +2 -2
  35. package/build/cjs/cc/BinarySwitchCC.d.ts +4 -83
  36. package/build/cjs/cc/BinarySwitchCC.js +0 -1
  37. package/build/cjs/cc/BinarySwitchCC.js.map +3 -3
  38. package/build/cjs/cc/CRC16CC.d.ts +1 -1
  39. package/build/cjs/cc/CRC16CC.js.map +3 -3
  40. package/build/cjs/cc/CentralSceneCC._validateArgs.js.map +2 -2
  41. package/build/cjs/cc/CentralSceneCC.d.ts +3 -136
  42. package/build/cjs/cc/CentralSceneCC.js +0 -1
  43. package/build/cjs/cc/CentralSceneCC.js.map +3 -3
  44. package/build/cjs/cc/ClimateControlScheduleCC._validateArgs.js.map +2 -2
  45. package/build/cjs/cc/ClimateControlScheduleCC.d.ts +4 -87
  46. package/build/cjs/cc/ClimateControlScheduleCC.js +3 -4
  47. package/build/cjs/cc/ClimateControlScheduleCC.js.map +3 -3
  48. package/build/cjs/cc/ClockCC._validateArgs.js.map +2 -2
  49. package/build/cjs/cc/ClockCC.d.ts +1 -1
  50. package/build/cjs/cc/ClockCC.js +1 -1
  51. package/build/cjs/cc/ClockCC.js.map +3 -3
  52. package/build/cjs/cc/ColorSwitchCC._validateArgs.js.map +2 -2
  53. package/build/cjs/cc/ColorSwitchCC.d.ts +4 -227
  54. package/build/cjs/cc/ColorSwitchCC.js +3 -3
  55. package/build/cjs/cc/ColorSwitchCC.js.map +3 -3
  56. package/build/cjs/cc/ConfigurationCC._validateArgs.js.map +2 -2
  57. package/build/cjs/cc/ConfigurationCC.d.ts +9 -60
  58. package/build/cjs/cc/ConfigurationCC.js +71 -59
  59. package/build/cjs/cc/ConfigurationCC.js.map +3 -3
  60. package/build/cjs/cc/DeviceResetLocallyCC.d.ts +1 -1
  61. package/build/cjs/cc/DeviceResetLocallyCC.js.map +3 -3
  62. package/build/cjs/cc/DoorLockCC._validateArgs.js.map +2 -2
  63. package/build/cjs/cc/DoorLockCC.d.ts +4 -688
  64. package/build/cjs/cc/DoorLockCC.js +1 -2
  65. package/build/cjs/cc/DoorLockCC.js.map +3 -3
  66. package/build/cjs/cc/DoorLockLoggingCC._validateArgs.js.map +2 -2
  67. package/build/cjs/cc/DoorLockLoggingCC.d.ts +4 -29
  68. package/build/cjs/cc/DoorLockLoggingCC.js +0 -1
  69. package/build/cjs/cc/DoorLockLoggingCC.js.map +3 -3
  70. package/build/cjs/cc/EnergyProductionCC._validateArgs.js.map +2 -2
  71. package/build/cjs/cc/EnergyProductionCC.d.ts +4 -33
  72. package/build/cjs/cc/EnergyProductionCC.js +1 -2
  73. package/build/cjs/cc/EnergyProductionCC.js.map +3 -3
  74. package/build/cjs/cc/EntryControlCC._validateArgs.js.map +2 -2
  75. package/build/cjs/cc/EntryControlCC.d.ts +3 -137
  76. package/build/cjs/cc/EntryControlCC.js +0 -1
  77. package/build/cjs/cc/EntryControlCC.js.map +3 -3
  78. package/build/cjs/cc/FirmwareUpdateMetaDataCC._validateArgs.js.map +2 -2
  79. package/build/cjs/cc/FirmwareUpdateMetaDataCC.d.ts +4 -154
  80. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +0 -1
  81. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +3 -3
  82. package/build/cjs/cc/HailCC.js.map +3 -3
  83. package/build/cjs/cc/HumidityControlModeCC._validateArgs.js.map +2 -2
  84. package/build/cjs/cc/HumidityControlModeCC.d.ts +4 -58
  85. package/build/cjs/cc/HumidityControlModeCC.js +1 -2
  86. package/build/cjs/cc/HumidityControlModeCC.js.map +3 -3
  87. package/build/cjs/cc/HumidityControlOperatingStateCC.d.ts +4 -33
  88. package/build/cjs/cc/HumidityControlOperatingStateCC.js +0 -1
  89. package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +3 -3
  90. package/build/cjs/cc/HumidityControlSetpointCC._validateArgs.js.map +2 -2
  91. package/build/cjs/cc/HumidityControlSetpointCC.d.ts +4 -92
  92. package/build/cjs/cc/HumidityControlSetpointCC.js +0 -1
  93. package/build/cjs/cc/HumidityControlSetpointCC.js.map +3 -3
  94. package/build/cjs/cc/InclusionControllerCC.d.ts +1 -1
  95. package/build/cjs/cc/InclusionControllerCC.js.map +3 -3
  96. package/build/cjs/cc/IndicatorCC._validateArgs.js.map +2 -2
  97. package/build/cjs/cc/IndicatorCC.d.ts +4 -207
  98. package/build/cjs/cc/IndicatorCC.js +0 -1
  99. package/build/cjs/cc/IndicatorCC.js.map +3 -3
  100. package/build/cjs/cc/IrrigationCC._validateArgs.js.map +2 -2
  101. package/build/cjs/cc/IrrigationCC.d.ts +4 -1186
  102. package/build/cjs/cc/IrrigationCC.js +1 -3
  103. package/build/cjs/cc/IrrigationCC.js.map +3 -3
  104. package/build/cjs/cc/LanguageCC._validateArgs.js.map +2 -2
  105. package/build/cjs/cc/LanguageCC.d.ts +4 -56
  106. package/build/cjs/cc/LanguageCC.js +0 -1
  107. package/build/cjs/cc/LanguageCC.js.map +3 -3
  108. package/build/cjs/cc/LockCC._validateArgs.js.map +2 -2
  109. package/build/cjs/cc/LockCC.d.ts +4 -31
  110. package/build/cjs/cc/LockCC.js +0 -1
  111. package/build/cjs/cc/LockCC.js.map +3 -3
  112. package/build/cjs/cc/ManufacturerProprietaryCC._validateArgs.js.map +2 -2
  113. package/build/cjs/cc/ManufacturerProprietaryCC.d.ts +1 -1
  114. package/build/cjs/cc/ManufacturerProprietaryCC.js.map +3 -3
  115. package/build/cjs/cc/ManufacturerSpecificCC._validateArgs.js.map +2 -2
  116. package/build/cjs/cc/ManufacturerSpecificCC.d.ts +3 -116
  117. package/build/cjs/cc/ManufacturerSpecificCC.js +0 -1
  118. package/build/cjs/cc/ManufacturerSpecificCC.js.map +3 -3
  119. package/build/cjs/cc/MeterCC._validateArgs.js.map +2 -2
  120. package/build/cjs/cc/MeterCC.d.ts +4 -203
  121. package/build/cjs/cc/MeterCC.js +0 -2
  122. package/build/cjs/cc/MeterCC.js.map +3 -3
  123. package/build/cjs/cc/MultiChannelAssociationCC._validateArgs.js.map +2 -2
  124. package/build/cjs/cc/MultiChannelAssociationCC.d.ts +3 -112
  125. package/build/cjs/cc/MultiChannelAssociationCC.js +0 -1
  126. package/build/cjs/cc/MultiChannelAssociationCC.js.map +3 -3
  127. package/build/cjs/cc/MultiChannelCC._validateArgs.js.map +2 -2
  128. package/build/cjs/cc/MultiChannelCC.d.ts +3 -207
  129. package/build/cjs/cc/MultiChannelCC.js +0 -1
  130. package/build/cjs/cc/MultiChannelCC.js.map +3 -3
  131. package/build/cjs/cc/MultiCommandCC._validateArgs.js.map +2 -2
  132. package/build/cjs/cc/MultiCommandCC.d.ts +1 -1
  133. package/build/cjs/cc/MultiCommandCC.js.map +3 -3
  134. package/build/cjs/cc/MultilevelSensorCC._validateArgs.js.map +2 -2
  135. package/build/cjs/cc/MultilevelSensorCC.d.ts +4 -84
  136. package/build/cjs/cc/MultilevelSensorCC.js +0 -1
  137. package/build/cjs/cc/MultilevelSensorCC.js.map +3 -3
  138. package/build/cjs/cc/MultilevelSwitchCC._validateArgs.js.map +2 -2
  139. package/build/cjs/cc/MultilevelSwitchCC.d.ts +5 -264
  140. package/build/cjs/cc/MultilevelSwitchCC.js +34 -1
  141. package/build/cjs/cc/MultilevelSwitchCC.js.map +3 -3
  142. package/build/cjs/cc/NoOperationCC.js.map +3 -3
  143. package/build/cjs/cc/NodeNamingCC._validateArgs.js.map +2 -2
  144. package/build/cjs/cc/NodeNamingCC.d.ts +8 -58
  145. package/build/cjs/cc/NodeNamingCC.js +48 -25
  146. package/build/cjs/cc/NodeNamingCC.js.map +3 -3
  147. package/build/cjs/cc/NotificationCC._validateArgs.js.map +2 -2
  148. package/build/cjs/cc/NotificationCC.d.ts +5 -357
  149. package/build/cjs/cc/NotificationCC.js +2 -2
  150. package/build/cjs/cc/NotificationCC.js.map +3 -3
  151. package/build/cjs/cc/PowerlevelCC._validateArgs.js.map +2 -2
  152. package/build/cjs/cc/PowerlevelCC.d.ts +1 -1
  153. package/build/cjs/cc/PowerlevelCC.js +2 -2
  154. package/build/cjs/cc/PowerlevelCC.js.map +3 -3
  155. package/build/cjs/cc/ProtectionCC._validateArgs.js.map +2 -2
  156. package/build/cjs/cc/ProtectionCC.d.ts +4 -212
  157. package/build/cjs/cc/ProtectionCC.js +1 -2
  158. package/build/cjs/cc/ProtectionCC.js.map +3 -3
  159. package/build/cjs/cc/SceneActivationCC._validateArgs.js.map +2 -2
  160. package/build/cjs/cc/SceneActivationCC.d.ts +4 -59
  161. package/build/cjs/cc/SceneActivationCC.js +0 -1
  162. package/build/cjs/cc/SceneActivationCC.js.map +3 -3
  163. package/build/cjs/cc/SceneActuatorConfigurationCC._validateArgs.js.map +2 -2
  164. package/build/cjs/cc/SceneActuatorConfigurationCC.d.ts +4 -65
  165. package/build/cjs/cc/SceneActuatorConfigurationCC.js +0 -1
  166. package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +3 -3
  167. package/build/cjs/cc/SceneControllerConfigurationCC._validateArgs.js.map +2 -2
  168. package/build/cjs/cc/SceneControllerConfigurationCC.d.ts +3 -64
  169. package/build/cjs/cc/SceneControllerConfigurationCC.js +0 -1
  170. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +3 -3
  171. package/build/cjs/cc/ScheduleEntryLockCC._validateArgs.js.map +2 -2
  172. package/build/cjs/cc/ScheduleEntryLockCC.d.ts +4 -163
  173. package/build/cjs/cc/ScheduleEntryLockCC.js +0 -1
  174. package/build/cjs/cc/ScheduleEntryLockCC.js.map +3 -3
  175. package/build/cjs/cc/Security2CC.d.ts +1 -1
  176. package/build/cjs/cc/Security2CC.js.map +3 -3
  177. package/build/cjs/cc/SecurityCC.d.ts +4 -2
  178. package/build/cjs/cc/SecurityCC.js.map +3 -3
  179. package/build/cjs/cc/SoundSwitchCC._validateArgs.js.map +2 -2
  180. package/build/cjs/cc/SoundSwitchCC.d.ts +4 -123
  181. package/build/cjs/cc/SoundSwitchCC.js +6 -2
  182. package/build/cjs/cc/SoundSwitchCC.js.map +3 -3
  183. package/build/cjs/cc/SupervisionCC.d.ts +3 -31
  184. package/build/cjs/cc/SupervisionCC.js +4 -2
  185. package/build/cjs/cc/SupervisionCC.js.map +3 -3
  186. package/build/cjs/cc/ThermostatFanModeCC._validateArgs.js.map +2 -2
  187. package/build/cjs/cc/ThermostatFanModeCC.d.ts +4 -84
  188. package/build/cjs/cc/ThermostatFanModeCC.js +1 -2
  189. package/build/cjs/cc/ThermostatFanModeCC.js.map +3 -3
  190. package/build/cjs/cc/ThermostatFanStateCC.d.ts +4 -33
  191. package/build/cjs/cc/ThermostatFanStateCC.js +0 -1
  192. package/build/cjs/cc/ThermostatFanStateCC.js.map +3 -3
  193. package/build/cjs/cc/ThermostatModeCC._validateArgs.js.map +2 -2
  194. package/build/cjs/cc/ThermostatModeCC.d.ts +4 -84
  195. package/build/cjs/cc/ThermostatModeCC.js +1 -2
  196. package/build/cjs/cc/ThermostatModeCC.js.map +3 -3
  197. package/build/cjs/cc/ThermostatOperatingStateCC.d.ts +4 -33
  198. package/build/cjs/cc/ThermostatOperatingStateCC.js +0 -1
  199. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +3 -3
  200. package/build/cjs/cc/ThermostatSetbackCC._validateArgs.js.map +2 -2
  201. package/build/cjs/cc/ThermostatSetbackCC.d.ts +1 -1
  202. package/build/cjs/cc/ThermostatSetbackCC.js.map +3 -3
  203. package/build/cjs/cc/ThermostatSetpointCC._validateArgs.js.map +2 -2
  204. package/build/cjs/cc/ThermostatSetpointCC.d.ts +5 -90
  205. package/build/cjs/cc/ThermostatSetpointCC.js +0 -1
  206. package/build/cjs/cc/ThermostatSetpointCC.js.map +3 -3
  207. package/build/cjs/cc/TimeCC._validateArgs.js.map +2 -2
  208. package/build/cjs/cc/TimeCC.d.ts +2 -2
  209. package/build/cjs/cc/TimeCC.js.map +3 -3
  210. package/build/cjs/cc/TimeParametersCC._validateArgs.js.map +2 -2
  211. package/build/cjs/cc/TimeParametersCC.d.ts +4 -30
  212. package/build/cjs/cc/TimeParametersCC.js +0 -1
  213. package/build/cjs/cc/TimeParametersCC.js.map +3 -3
  214. package/build/cjs/cc/TransportServiceCC.d.ts +1 -1
  215. package/build/cjs/cc/TransportServiceCC.js.map +3 -3
  216. package/build/cjs/cc/UserCodeCC._validateArgs.js.map +2 -2
  217. package/build/cjs/cc/UserCodeCC.d.ts +4 -415
  218. package/build/cjs/cc/UserCodeCC.js +1 -2
  219. package/build/cjs/cc/UserCodeCC.js.map +3 -3
  220. package/build/cjs/cc/VersionCC._validateArgs.js.map +2 -2
  221. package/build/cjs/cc/VersionCC.d.ts +3 -367
  222. package/build/cjs/cc/VersionCC.js +0 -1
  223. package/build/cjs/cc/VersionCC.js.map +3 -3
  224. package/build/cjs/cc/WakeUpCC._validateArgs.js.map +2 -2
  225. package/build/cjs/cc/WakeUpCC.d.ts +4 -83
  226. package/build/cjs/cc/WakeUpCC.js +11 -4
  227. package/build/cjs/cc/WakeUpCC.js.map +3 -3
  228. package/build/cjs/cc/WindowCoveringCC._validateArgs.js.map +2 -2
  229. package/build/cjs/cc/WindowCoveringCC.d.ts +4 -207
  230. package/build/cjs/cc/WindowCoveringCC.js +3 -5
  231. package/build/cjs/cc/WindowCoveringCC.js.map +3 -3
  232. package/build/cjs/cc/ZWaveLongRangeCC.js.map +3 -3
  233. package/build/cjs/cc/ZWavePlusCC._validateArgs.js.map +2 -2
  234. package/build/cjs/cc/ZWavePlusCC.d.ts +4 -129
  235. package/build/cjs/cc/ZWavePlusCC.js +0 -1
  236. package/build/cjs/cc/ZWavePlusCC.js.map +3 -3
  237. package/build/cjs/cc/ZWaveProtocolCC.d.ts +1 -1
  238. package/build/cjs/cc/ZWaveProtocolCC.js.map +3 -3
  239. package/build/cjs/cc/_CCValues.generated.js.map +1 -1
  240. package/build/cjs/cc/index.js.map +1 -1
  241. package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +1 -1
  242. package/build/cjs/cc/manufacturerProprietary/FibaroCC._validateArgs.js.map +2 -2
  243. package/build/cjs/cc/manufacturerProprietary/FibaroCC.d.ts +1 -1
  244. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +3 -3
  245. package/build/cjs/index.js.map +1 -1
  246. package/build/cjs/index_browser.js.map +1 -1
  247. package/build/cjs/index_safe.js.map +1 -1
  248. package/build/cjs/lib/API.d.ts +3 -135
  249. package/build/cjs/lib/API.js.map +3 -3
  250. package/build/cjs/lib/CCValueUtils.js.map +1 -1
  251. package/build/cjs/lib/CommandClass.d.ts +1 -1
  252. package/build/cjs/lib/CommandClass.js.map +3 -3
  253. package/build/cjs/lib/CommandClassDecorators.js.map +1 -1
  254. package/build/cjs/lib/EncapsulatingCommandClass.js.map +1 -1
  255. package/build/cjs/lib/NotificationEventPayload.js.map +1 -1
  256. package/build/cjs/lib/Security2/Extension.js.map +1 -1
  257. package/build/cjs/lib/Security2/shared.js.map +1 -1
  258. package/build/cjs/lib/SetValueResult.js.map +1 -1
  259. package/build/cjs/lib/Values.js.map +1 -1
  260. package/build/cjs/lib/_CCAPI.generated.d.ts +136 -0
  261. package/build/cjs/lib/_CCAPI.generated.js +17 -0
  262. package/build/cjs/lib/_CCAPI.generated.js.map +7 -0
  263. package/build/cjs/lib/_Types.js.map +1 -1
  264. package/build/cjs/lib/serializers.js.map +1 -1
  265. package/build/cjs/lib/utils.js.map +1 -1
  266. package/build/esm/cc/AlarmSensorCC._validateArgs.d.ts.map +1 -1
  267. package/build/esm/cc/AlarmSensorCC._validateArgs.js.map +1 -1
  268. package/build/esm/cc/AlarmSensorCC.d.ts +4 -131
  269. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  270. package/build/esm/cc/AlarmSensorCC.js +2 -3
  271. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  272. package/build/esm/cc/ApplicationStatusCC.d.ts +1 -1
  273. package/build/esm/cc/ApplicationStatusCC.d.ts.map +1 -1
  274. package/build/esm/cc/ApplicationStatusCC.js.map +1 -1
  275. package/build/esm/cc/AssociationCC._validateArgs.d.ts.map +1 -1
  276. package/build/esm/cc/AssociationCC._validateArgs.js.map +1 -1
  277. package/build/esm/cc/AssociationCC.d.ts +3 -109
  278. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  279. package/build/esm/cc/AssociationCC.js +0 -1
  280. package/build/esm/cc/AssociationCC.js.map +1 -1
  281. package/build/esm/cc/AssociationGroupInfoCC._validateArgs.d.ts.map +1 -1
  282. package/build/esm/cc/AssociationGroupInfoCC._validateArgs.js.map +1 -1
  283. package/build/esm/cc/AssociationGroupInfoCC.d.ts +3 -112
  284. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  285. package/build/esm/cc/AssociationGroupInfoCC.js +12 -13
  286. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  287. package/build/esm/cc/BarrierOperatorCC._validateArgs.d.ts.map +1 -1
  288. package/build/esm/cc/BarrierOperatorCC._validateArgs.js.map +1 -1
  289. package/build/esm/cc/BarrierOperatorCC.d.ts +4 -148
  290. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  291. package/build/esm/cc/BarrierOperatorCC.js +2 -3
  292. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  293. package/build/esm/cc/BasicCC._validateArgs.d.ts.map +1 -1
  294. package/build/esm/cc/BasicCC._validateArgs.js.map +1 -1
  295. package/build/esm/cc/BasicCC.d.ts +4 -143
  296. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  297. package/build/esm/cc/BasicCC.js +1 -2
  298. package/build/esm/cc/BasicCC.js.map +1 -1
  299. package/build/esm/cc/BasicWindowCoveringCC._validateArgs.d.ts.map +1 -1
  300. package/build/esm/cc/BasicWindowCoveringCC._validateArgs.js.map +1 -1
  301. package/build/esm/cc/BasicWindowCoveringCC.d.ts +3 -63
  302. package/build/esm/cc/BasicWindowCoveringCC.d.ts.map +1 -1
  303. package/build/esm/cc/BasicWindowCoveringCC.js +5 -6
  304. package/build/esm/cc/BasicWindowCoveringCC.js.map +1 -1
  305. package/build/esm/cc/BatteryCC.d.ts +4 -305
  306. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  307. package/build/esm/cc/BatteryCC.js +67 -26
  308. package/build/esm/cc/BatteryCC.js.map +1 -1
  309. package/build/esm/cc/BinarySensorCC._validateArgs.d.ts.map +1 -1
  310. package/build/esm/cc/BinarySensorCC._validateArgs.js.map +1 -1
  311. package/build/esm/cc/BinarySensorCC.d.ts +4 -59
  312. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  313. package/build/esm/cc/BinarySensorCC.js +24 -4
  314. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  315. package/build/esm/cc/BinarySwitchCC._validateArgs.d.ts.map +1 -1
  316. package/build/esm/cc/BinarySwitchCC._validateArgs.js.map +1 -1
  317. package/build/esm/cc/BinarySwitchCC.d.ts +4 -83
  318. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  319. package/build/esm/cc/BinarySwitchCC.js +1 -2
  320. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  321. package/build/esm/cc/CRC16CC.d.ts +1 -1
  322. package/build/esm/cc/CRC16CC.d.ts.map +1 -1
  323. package/build/esm/cc/CRC16CC.js.map +1 -1
  324. package/build/esm/cc/CentralSceneCC._validateArgs.d.ts.map +1 -1
  325. package/build/esm/cc/CentralSceneCC._validateArgs.js.map +1 -1
  326. package/build/esm/cc/CentralSceneCC.d.ts +3 -136
  327. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  328. package/build/esm/cc/CentralSceneCC.js +5 -6
  329. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  330. package/build/esm/cc/ClimateControlScheduleCC._validateArgs.d.ts.map +1 -1
  331. package/build/esm/cc/ClimateControlScheduleCC._validateArgs.js.map +1 -1
  332. package/build/esm/cc/ClimateControlScheduleCC.d.ts +4 -87
  333. package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
  334. package/build/esm/cc/ClimateControlScheduleCC.js +4 -5
  335. package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
  336. package/build/esm/cc/ClockCC._validateArgs.d.ts.map +1 -1
  337. package/build/esm/cc/ClockCC._validateArgs.js.map +1 -1
  338. package/build/esm/cc/ClockCC.d.ts +1 -1
  339. package/build/esm/cc/ClockCC.d.ts.map +1 -1
  340. package/build/esm/cc/ClockCC.js +1 -1
  341. package/build/esm/cc/ClockCC.js.map +1 -1
  342. package/build/esm/cc/ColorSwitchCC._validateArgs.d.ts.map +1 -1
  343. package/build/esm/cc/ColorSwitchCC._validateArgs.js.map +1 -1
  344. package/build/esm/cc/ColorSwitchCC.d.ts +4 -227
  345. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  346. package/build/esm/cc/ColorSwitchCC.js +8 -8
  347. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  348. package/build/esm/cc/ConfigurationCC._validateArgs.d.ts.map +1 -1
  349. package/build/esm/cc/ConfigurationCC._validateArgs.js.map +1 -1
  350. package/build/esm/cc/ConfigurationCC.d.ts +9 -60
  351. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  352. package/build/esm/cc/ConfigurationCC.js +94 -76
  353. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  354. package/build/esm/cc/DeviceResetLocallyCC.d.ts +1 -1
  355. package/build/esm/cc/DeviceResetLocallyCC.d.ts.map +1 -1
  356. package/build/esm/cc/DeviceResetLocallyCC.js.map +1 -1
  357. package/build/esm/cc/DoorLockCC._validateArgs.d.ts.map +1 -1
  358. package/build/esm/cc/DoorLockCC._validateArgs.js.map +1 -1
  359. package/build/esm/cc/DoorLockCC.d.ts +4 -688
  360. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  361. package/build/esm/cc/DoorLockCC.js +14 -15
  362. package/build/esm/cc/DoorLockCC.js.map +1 -1
  363. package/build/esm/cc/DoorLockLoggingCC._validateArgs.d.ts.map +1 -1
  364. package/build/esm/cc/DoorLockLoggingCC._validateArgs.js.map +1 -1
  365. package/build/esm/cc/DoorLockLoggingCC.d.ts +4 -29
  366. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
  367. package/build/esm/cc/DoorLockLoggingCC.js +0 -1
  368. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
  369. package/build/esm/cc/EnergyProductionCC._validateArgs.d.ts.map +1 -1
  370. package/build/esm/cc/EnergyProductionCC._validateArgs.js.map +1 -1
  371. package/build/esm/cc/EnergyProductionCC.d.ts +4 -33
  372. package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
  373. package/build/esm/cc/EnergyProductionCC.js +2 -3
  374. package/build/esm/cc/EnergyProductionCC.js.map +1 -1
  375. package/build/esm/cc/EntryControlCC._validateArgs.d.ts.map +1 -1
  376. package/build/esm/cc/EntryControlCC._validateArgs.js.map +1 -1
  377. package/build/esm/cc/EntryControlCC.d.ts +3 -137
  378. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  379. package/build/esm/cc/EntryControlCC.js +1 -2
  380. package/build/esm/cc/EntryControlCC.js.map +1 -1
  381. package/build/esm/cc/FirmwareUpdateMetaDataCC._validateArgs.d.ts.map +1 -1
  382. package/build/esm/cc/FirmwareUpdateMetaDataCC._validateArgs.js.map +1 -1
  383. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts +4 -154
  384. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  385. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +0 -1
  386. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  387. package/build/esm/cc/HailCC.d.ts.map +1 -1
  388. package/build/esm/cc/HailCC.js.map +1 -1
  389. package/build/esm/cc/HumidityControlModeCC._validateArgs.d.ts.map +1 -1
  390. package/build/esm/cc/HumidityControlModeCC._validateArgs.js.map +1 -1
  391. package/build/esm/cc/HumidityControlModeCC.d.ts +4 -58
  392. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  393. package/build/esm/cc/HumidityControlModeCC.js +2 -3
  394. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  395. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts +4 -33
  396. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
  397. package/build/esm/cc/HumidityControlOperatingStateCC.js +1 -2
  398. package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
  399. package/build/esm/cc/HumidityControlSetpointCC._validateArgs.d.ts.map +1 -1
  400. package/build/esm/cc/HumidityControlSetpointCC._validateArgs.js.map +1 -1
  401. package/build/esm/cc/HumidityControlSetpointCC.d.ts +4 -92
  402. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  403. package/build/esm/cc/HumidityControlSetpointCC.js +1 -2
  404. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  405. package/build/esm/cc/InclusionControllerCC.d.ts +1 -1
  406. package/build/esm/cc/InclusionControllerCC.d.ts.map +1 -1
  407. package/build/esm/cc/InclusionControllerCC.js.map +1 -1
  408. package/build/esm/cc/IndicatorCC._validateArgs.d.ts.map +1 -1
  409. package/build/esm/cc/IndicatorCC._validateArgs.js.map +1 -1
  410. package/build/esm/cc/IndicatorCC.d.ts +4 -207
  411. package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
  412. package/build/esm/cc/IndicatorCC.js +0 -1
  413. package/build/esm/cc/IndicatorCC.js.map +1 -1
  414. package/build/esm/cc/IrrigationCC._validateArgs.d.ts.map +1 -1
  415. package/build/esm/cc/IrrigationCC._validateArgs.js.map +1 -1
  416. package/build/esm/cc/IrrigationCC.d.ts +4 -1186
  417. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  418. package/build/esm/cc/IrrigationCC.js +6 -8
  419. package/build/esm/cc/IrrigationCC.js.map +1 -1
  420. package/build/esm/cc/LanguageCC._validateArgs.d.ts.map +1 -1
  421. package/build/esm/cc/LanguageCC._validateArgs.js.map +1 -1
  422. package/build/esm/cc/LanguageCC.d.ts +4 -56
  423. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  424. package/build/esm/cc/LanguageCC.js +1 -2
  425. package/build/esm/cc/LanguageCC.js.map +1 -1
  426. package/build/esm/cc/LockCC._validateArgs.d.ts.map +1 -1
  427. package/build/esm/cc/LockCC._validateArgs.js.map +1 -1
  428. package/build/esm/cc/LockCC.d.ts +4 -31
  429. package/build/esm/cc/LockCC.d.ts.map +1 -1
  430. package/build/esm/cc/LockCC.js +1 -2
  431. package/build/esm/cc/LockCC.js.map +1 -1
  432. package/build/esm/cc/ManufacturerProprietaryCC._validateArgs.d.ts.map +1 -1
  433. package/build/esm/cc/ManufacturerProprietaryCC._validateArgs.js.map +1 -1
  434. package/build/esm/cc/ManufacturerProprietaryCC.d.ts +1 -1
  435. package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
  436. package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
  437. package/build/esm/cc/ManufacturerSpecificCC._validateArgs.d.ts.map +1 -1
  438. package/build/esm/cc/ManufacturerSpecificCC._validateArgs.js.map +1 -1
  439. package/build/esm/cc/ManufacturerSpecificCC.d.ts +3 -116
  440. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  441. package/build/esm/cc/ManufacturerSpecificCC.js +1 -2
  442. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  443. package/build/esm/cc/MeterCC._validateArgs.d.ts.map +1 -1
  444. package/build/esm/cc/MeterCC._validateArgs.js.map +1 -1
  445. package/build/esm/cc/MeterCC.d.ts +4 -203
  446. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  447. package/build/esm/cc/MeterCC.js +17 -19
  448. package/build/esm/cc/MeterCC.js.map +1 -1
  449. package/build/esm/cc/MultiChannelAssociationCC._validateArgs.d.ts.map +1 -1
  450. package/build/esm/cc/MultiChannelAssociationCC._validateArgs.js.map +1 -1
  451. package/build/esm/cc/MultiChannelAssociationCC.d.ts +3 -112
  452. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  453. package/build/esm/cc/MultiChannelAssociationCC.js +4 -5
  454. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  455. package/build/esm/cc/MultiChannelCC._validateArgs.d.ts.map +1 -1
  456. package/build/esm/cc/MultiChannelCC._validateArgs.js.map +1 -1
  457. package/build/esm/cc/MultiChannelCC.d.ts +3 -207
  458. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  459. package/build/esm/cc/MultiChannelCC.js +9 -10
  460. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  461. package/build/esm/cc/MultiCommandCC._validateArgs.d.ts.map +1 -1
  462. package/build/esm/cc/MultiCommandCC._validateArgs.js.map +1 -1
  463. package/build/esm/cc/MultiCommandCC.d.ts +1 -1
  464. package/build/esm/cc/MultiCommandCC.d.ts.map +1 -1
  465. package/build/esm/cc/MultiCommandCC.js.map +1 -1
  466. package/build/esm/cc/MultilevelSensorCC._validateArgs.d.ts.map +1 -1
  467. package/build/esm/cc/MultilevelSensorCC._validateArgs.js.map +1 -1
  468. package/build/esm/cc/MultilevelSensorCC.d.ts +4 -84
  469. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  470. package/build/esm/cc/MultilevelSensorCC.js +1 -2
  471. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  472. package/build/esm/cc/MultilevelSwitchCC._validateArgs.d.ts.map +1 -1
  473. package/build/esm/cc/MultilevelSwitchCC._validateArgs.js.map +1 -1
  474. package/build/esm/cc/MultilevelSwitchCC.d.ts +5 -264
  475. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  476. package/build/esm/cc/MultilevelSwitchCC.js +44 -6
  477. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  478. package/build/esm/cc/NoOperationCC.d.ts.map +1 -1
  479. package/build/esm/cc/NoOperationCC.js.map +1 -1
  480. package/build/esm/cc/NodeNamingCC._validateArgs.d.ts.map +1 -1
  481. package/build/esm/cc/NodeNamingCC._validateArgs.js.map +1 -1
  482. package/build/esm/cc/NodeNamingCC.d.ts +8 -58
  483. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  484. package/build/esm/cc/NodeNamingCC.js +49 -38
  485. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  486. package/build/esm/cc/NotificationCC._validateArgs.d.ts.map +1 -1
  487. package/build/esm/cc/NotificationCC._validateArgs.js.map +1 -1
  488. package/build/esm/cc/NotificationCC.d.ts +5 -357
  489. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  490. package/build/esm/cc/NotificationCC.js +9 -9
  491. package/build/esm/cc/NotificationCC.js.map +1 -1
  492. package/build/esm/cc/PowerlevelCC._validateArgs.d.ts.map +1 -1
  493. package/build/esm/cc/PowerlevelCC._validateArgs.js.map +1 -1
  494. package/build/esm/cc/PowerlevelCC.d.ts +1 -1
  495. package/build/esm/cc/PowerlevelCC.d.ts.map +1 -1
  496. package/build/esm/cc/PowerlevelCC.js +2 -2
  497. package/build/esm/cc/PowerlevelCC.js.map +1 -1
  498. package/build/esm/cc/ProtectionCC._validateArgs.d.ts.map +1 -1
  499. package/build/esm/cc/ProtectionCC._validateArgs.js.map +1 -1
  500. package/build/esm/cc/ProtectionCC.d.ts +4 -212
  501. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  502. package/build/esm/cc/ProtectionCC.js +2 -3
  503. package/build/esm/cc/ProtectionCC.js.map +1 -1
  504. package/build/esm/cc/SceneActivationCC._validateArgs.d.ts.map +1 -1
  505. package/build/esm/cc/SceneActivationCC._validateArgs.js.map +1 -1
  506. package/build/esm/cc/SceneActivationCC.d.ts +4 -59
  507. package/build/esm/cc/SceneActivationCC.d.ts.map +1 -1
  508. package/build/esm/cc/SceneActivationCC.js +1 -2
  509. package/build/esm/cc/SceneActivationCC.js.map +1 -1
  510. package/build/esm/cc/SceneActuatorConfigurationCC._validateArgs.d.ts.map +1 -1
  511. package/build/esm/cc/SceneActuatorConfigurationCC._validateArgs.js.map +1 -1
  512. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts +4 -65
  513. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -1
  514. package/build/esm/cc/SceneActuatorConfigurationCC.js +2 -3
  515. package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
  516. package/build/esm/cc/SceneControllerConfigurationCC._validateArgs.d.ts.map +1 -1
  517. package/build/esm/cc/SceneControllerConfigurationCC._validateArgs.js.map +1 -1
  518. package/build/esm/cc/SceneControllerConfigurationCC.d.ts +3 -64
  519. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
  520. package/build/esm/cc/SceneControllerConfigurationCC.js +1 -2
  521. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  522. package/build/esm/cc/ScheduleEntryLockCC._validateArgs.d.ts.map +1 -1
  523. package/build/esm/cc/ScheduleEntryLockCC._validateArgs.js.map +1 -1
  524. package/build/esm/cc/ScheduleEntryLockCC.d.ts +4 -163
  525. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  526. package/build/esm/cc/ScheduleEntryLockCC.js +0 -1
  527. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  528. package/build/esm/cc/Security2CC.d.ts +1 -1
  529. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  530. package/build/esm/cc/Security2CC.js +2 -2
  531. package/build/esm/cc/Security2CC.js.map +1 -1
  532. package/build/esm/cc/SecurityCC.d.ts +4 -2
  533. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  534. package/build/esm/cc/SecurityCC.js +2 -2
  535. package/build/esm/cc/SecurityCC.js.map +1 -1
  536. package/build/esm/cc/SoundSwitchCC._validateArgs.d.ts.map +1 -1
  537. package/build/esm/cc/SoundSwitchCC._validateArgs.js.map +1 -1
  538. package/build/esm/cc/SoundSwitchCC.d.ts +4 -123
  539. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
  540. package/build/esm/cc/SoundSwitchCC.js +7 -3
  541. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  542. package/build/esm/cc/SupervisionCC.d.ts +3 -31
  543. package/build/esm/cc/SupervisionCC.d.ts.map +1 -1
  544. package/build/esm/cc/SupervisionCC.js +9 -7
  545. package/build/esm/cc/SupervisionCC.js.map +1 -1
  546. package/build/esm/cc/ThermostatFanModeCC._validateArgs.d.ts.map +1 -1
  547. package/build/esm/cc/ThermostatFanModeCC._validateArgs.js.map +1 -1
  548. package/build/esm/cc/ThermostatFanModeCC.d.ts +4 -84
  549. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  550. package/build/esm/cc/ThermostatFanModeCC.js +4 -5
  551. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  552. package/build/esm/cc/ThermostatFanStateCC.d.ts +4 -33
  553. package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
  554. package/build/esm/cc/ThermostatFanStateCC.js +1 -2
  555. package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
  556. package/build/esm/cc/ThermostatModeCC._validateArgs.d.ts.map +1 -1
  557. package/build/esm/cc/ThermostatModeCC._validateArgs.js.map +1 -1
  558. package/build/esm/cc/ThermostatModeCC.d.ts +4 -84
  559. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  560. package/build/esm/cc/ThermostatModeCC.js +2 -3
  561. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  562. package/build/esm/cc/ThermostatOperatingStateCC.d.ts +4 -33
  563. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  564. package/build/esm/cc/ThermostatOperatingStateCC.js +1 -2
  565. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  566. package/build/esm/cc/ThermostatSetbackCC._validateArgs.d.ts.map +1 -1
  567. package/build/esm/cc/ThermostatSetbackCC._validateArgs.js.map +1 -1
  568. package/build/esm/cc/ThermostatSetbackCC.d.ts +1 -1
  569. package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -1
  570. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
  571. package/build/esm/cc/ThermostatSetpointCC._validateArgs.d.ts.map +1 -1
  572. package/build/esm/cc/ThermostatSetpointCC._validateArgs.js.map +1 -1
  573. package/build/esm/cc/ThermostatSetpointCC.d.ts +5 -90
  574. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  575. package/build/esm/cc/ThermostatSetpointCC.js +1 -2
  576. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  577. package/build/esm/cc/TimeCC._validateArgs.d.ts.map +1 -1
  578. package/build/esm/cc/TimeCC._validateArgs.js.map +1 -1
  579. package/build/esm/cc/TimeCC.d.ts +2 -2
  580. package/build/esm/cc/TimeCC.d.ts.map +1 -1
  581. package/build/esm/cc/TimeCC.js.map +1 -1
  582. package/build/esm/cc/TimeParametersCC._validateArgs.d.ts.map +1 -1
  583. package/build/esm/cc/TimeParametersCC._validateArgs.js.map +1 -1
  584. package/build/esm/cc/TimeParametersCC.d.ts +4 -30
  585. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  586. package/build/esm/cc/TimeParametersCC.js +1 -2
  587. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  588. package/build/esm/cc/TransportServiceCC.d.ts +1 -1
  589. package/build/esm/cc/TransportServiceCC.d.ts.map +1 -1
  590. package/build/esm/cc/TransportServiceCC.js +2 -2
  591. package/build/esm/cc/TransportServiceCC.js.map +1 -1
  592. package/build/esm/cc/UserCodeCC._validateArgs.d.ts.map +1 -1
  593. package/build/esm/cc/UserCodeCC._validateArgs.js.map +1 -1
  594. package/build/esm/cc/UserCodeCC.d.ts +4 -415
  595. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  596. package/build/esm/cc/UserCodeCC.js +17 -18
  597. package/build/esm/cc/UserCodeCC.js.map +1 -1
  598. package/build/esm/cc/VersionCC._validateArgs.d.ts.map +1 -1
  599. package/build/esm/cc/VersionCC._validateArgs.js.map +1 -1
  600. package/build/esm/cc/VersionCC.d.ts +3 -367
  601. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  602. package/build/esm/cc/VersionCC.js +1 -2
  603. package/build/esm/cc/VersionCC.js.map +1 -1
  604. package/build/esm/cc/WakeUpCC._validateArgs.d.ts.map +1 -1
  605. package/build/esm/cc/WakeUpCC._validateArgs.js.map +1 -1
  606. package/build/esm/cc/WakeUpCC.d.ts +4 -83
  607. package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
  608. package/build/esm/cc/WakeUpCC.js +10 -3
  609. package/build/esm/cc/WakeUpCC.js.map +1 -1
  610. package/build/esm/cc/WindowCoveringCC._validateArgs.d.ts.map +1 -1
  611. package/build/esm/cc/WindowCoveringCC._validateArgs.js.map +1 -1
  612. package/build/esm/cc/WindowCoveringCC.d.ts +4 -207
  613. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  614. package/build/esm/cc/WindowCoveringCC.js +6 -8
  615. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  616. package/build/esm/cc/ZWaveLongRangeCC.d.ts.map +1 -1
  617. package/build/esm/cc/ZWaveLongRangeCC.js.map +1 -1
  618. package/build/esm/cc/ZWavePlusCC._validateArgs.d.ts.map +1 -1
  619. package/build/esm/cc/ZWavePlusCC._validateArgs.js.map +1 -1
  620. package/build/esm/cc/ZWavePlusCC.d.ts +4 -129
  621. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
  622. package/build/esm/cc/ZWavePlusCC.js +0 -1
  623. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  624. package/build/esm/cc/ZWaveProtocolCC.d.ts +1 -1
  625. package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -1
  626. package/build/esm/cc/ZWaveProtocolCC.js +4 -4
  627. package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
  628. package/build/esm/cc/_CCValues.generated.d.ts.map +1 -1
  629. package/build/esm/cc/_CCValues.generated.js.map +1 -1
  630. package/build/esm/cc/index.d.ts.map +1 -1
  631. package/build/esm/cc/index.js.map +1 -1
  632. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
  633. package/build/esm/cc/manufacturerProprietary/Decorators.js.map +1 -1
  634. package/build/esm/cc/manufacturerProprietary/FibaroCC._validateArgs.d.ts.map +1 -1
  635. package/build/esm/cc/manufacturerProprietary/FibaroCC._validateArgs.js.map +1 -1
  636. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts +1 -1
  637. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
  638. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  639. package/build/esm/index.d.ts.map +1 -1
  640. package/build/esm/index.js.map +1 -1
  641. package/build/esm/index_browser.d.ts.map +1 -1
  642. package/build/esm/index_browser.js.map +1 -1
  643. package/build/esm/index_safe.d.ts.map +1 -1
  644. package/build/esm/index_safe.js.map +1 -1
  645. package/build/esm/lib/API.d.ts +3 -135
  646. package/build/esm/lib/API.d.ts.map +1 -1
  647. package/build/esm/lib/API.js.map +1 -1
  648. package/build/esm/lib/CCValueUtils.d.ts.map +1 -1
  649. package/build/esm/lib/CCValueUtils.js.map +1 -1
  650. package/build/esm/lib/CommandClass.d.ts +1 -1
  651. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  652. package/build/esm/lib/CommandClass.js.map +1 -1
  653. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
  654. package/build/esm/lib/CommandClassDecorators.js.map +1 -1
  655. package/build/esm/lib/EncapsulatingCommandClass.d.ts.map +1 -1
  656. package/build/esm/lib/EncapsulatingCommandClass.js.map +1 -1
  657. package/build/esm/lib/NotificationEventPayload.d.ts.map +1 -1
  658. package/build/esm/lib/NotificationEventPayload.js.map +1 -1
  659. package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
  660. package/build/esm/lib/Security2/Extension.js.map +1 -1
  661. package/build/esm/lib/Security2/shared.d.ts.map +1 -1
  662. package/build/esm/lib/Security2/shared.js.map +1 -1
  663. package/build/esm/lib/SetValueResult.d.ts.map +1 -1
  664. package/build/esm/lib/SetValueResult.js.map +1 -1
  665. package/build/esm/lib/Values.d.ts.map +1 -1
  666. package/build/esm/lib/Values.js.map +1 -1
  667. package/build/esm/lib/_CCAPI.generated.d.ts +136 -0
  668. package/build/esm/lib/_CCAPI.generated.d.ts.map +1 -0
  669. package/build/esm/lib/_CCAPI.generated.js +4 -0
  670. package/build/esm/lib/_CCAPI.generated.js.map +1 -0
  671. package/build/esm/lib/_Types.d.ts.map +1 -1
  672. package/build/esm/lib/_Types.js.map +1 -1
  673. package/build/esm/lib/serializers.d.ts.map +1 -1
  674. package/build/esm/lib/serializers.js.map +1 -1
  675. package/build/esm/lib/traits.d.ts.map +1 -1
  676. package/build/esm/lib/traits.js.map +1 -1
  677. package/build/esm/lib/utils.d.ts.map +1 -1
  678. package/build/esm/lib/utils.js.map +1 -1
  679. package/package.json +11 -11
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/cc/MultiChannelCC.ts"],
4
- "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\ttype ApplicationNodeInformation,\n\tCommandClasses,\n\ttype GenericDeviceClass,\n\ttype GetNode,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype NodeId,\n\ttype SpecificDeviceClass,\n\ttype SupportsCC,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tencodeApplicationNodeInformation,\n\tencodeBitMask,\n\tgetCCName,\n\tgetGenericDeviceClass,\n\tgetSpecificDeviceClass,\n\tparseApplicationNodeInformation,\n\tparseBitMask,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { distinct } from \"alcalzone-shared/arrays\";\nimport { CCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n\tgetEffectiveCCVersion,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\nimport {\n\tisEncapsulatingCommandClass,\n\tisMultiEncapsulatingCommandClass,\n} from \"../lib/EncapsulatingCommandClass.js\";\nimport { V } from \"../lib/Values.js\";\nimport { MultiChannelCommand } from \"../lib/_Types.js\";\n\n// TODO: Handle removal reports of dynamic endpoints\n\nexport const MultiChannelCCValues = V.defineCCValues(\n\tCommandClasses[\"Multi Channel\"],\n\t{\n\t\t...V.staticProperty(\"endpointIndizes\", undefined, {\n\t\t\tinternal: true,\n\t\t\tsupportsEndpoints: false,\n\t\t}),\n\t\t...V.staticPropertyWithName(\n\t\t\t\"individualEndpointCount\",\n\t\t\t\"individualCount\",\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tinternal: true,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t},\n\t\t),\n\t\t...V.staticPropertyWithName(\n\t\t\t\"aggregatedEndpointCount\",\n\t\t\t\"aggregatedCount\",\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tinternal: true,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t},\n\t\t),\n\t\t...V.staticPropertyWithName(\n\t\t\t\"endpointCountIsDynamic\",\n\t\t\t\"countIsDynamic\",\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tinternal: true,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t},\n\t\t),\n\t\t...V.staticPropertyWithName(\n\t\t\t\"endpointsHaveIdenticalCapabilities\",\n\t\t\t\"identicalCapabilities\",\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tinternal: true,\n\t\t\t\tsupportsEndpoints: false,\n\t\t\t},\n\t\t),\n\t\t...V.staticPropertyWithName(\n\t\t\t\"endpointCCs\",\n\t\t\t\"commandClasses\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\t\t...V.staticPropertyWithName(\n\t\t\t\"endpointDeviceClass\",\n\t\t\t\"deviceClass\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"aggregatedEndpointMembers\",\n\t\t\t\"members\",\n\t\t\t(endpointIndex: number) => endpointIndex,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"members\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\t},\n);\n\n// @noSetValueAPI\n\n/**\n * Many devices unnecessarily use endpoints when they could (or do) provide all functionality via the root device.\n * This function gives an estimate if this is the case (i.e. all endpoints have a different device class)\n */\nfunction areEndpointsUnnecessary(\n\tctx: GetValueDB,\n\tnodeId: number,\n\tendpointIndizes: number[],\n): boolean {\n\t// Gather all device classes\n\tconst deviceClasses = new Map<\n\t\tnumber,\n\t\t{\n\t\t\tgeneric: number;\n\t\t\tspecific: number;\n\t\t}\n\t>();\n\tfor (const endpoint of endpointIndizes) {\n\t\tconst devClassValueId = MultiChannelCCValues.endpointDeviceClass\n\t\t\t.endpoint(endpoint);\n\t\tconst deviceClass = ctx.getValueDB(nodeId).getValue<{\n\t\t\tgeneric: number;\n\t\t\tspecific: number;\n\t\t}>(devClassValueId);\n\t\tif (deviceClass) {\n\t\t\tdeviceClasses.set(endpoint, {\n\t\t\t\tgeneric: deviceClass.generic,\n\t\t\t\tspecific: deviceClass.specific,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Endpoints may be useless if all of them have different device classes\n\tconst distinctDeviceClasses = distinct(\n\t\t[...deviceClasses.values()].map(\n\t\t\t({ generic, specific }) => generic * 256 + specific,\n\t\t),\n\t);\n\tif (distinctDeviceClasses.length !== endpointIndizes.length) {\n\t\t// There are endpoints with the same device class, so they are not unnecessary\n\t\treturn false;\n\t}\n\n\t// Endpoints are necessary if more than 1 of them has a switch-type device class\n\tconst switchTypeDeviceClasses = new Set([\n\t\t0x10, // Binary Switch\n\t\t0x11, // Multilevel Switch\n\t\t0x12, // Remote Switch\n\t\t0x13, // Toggle Switch\n\t]);\n\tconst numSwitchEndpoints = [...deviceClasses.values()].filter(\n\t\t({ generic }) => switchTypeDeviceClasses.has(generic),\n\t).length;\n\tif (numSwitchEndpoints > 1) return false;\n\n\treturn true;\n}\n\n@API(CommandClasses[\"Multi Channel\"])\nexport class MultiChannelCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: MultiChannelCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\t// Legacy commands:\n\t\t\tcase MultiChannelCommand.GetV1:\n\t\t\t\treturn this.isSinglecast() && this.version === 1;\n\t\t\tcase MultiChannelCommand.CommandEncapsulationV1:\n\t\t\t\treturn this.version === 1;\n\n\t\t\t// The specs start at version 3 but according to OZW,\n\t\t\t// these do seem to be supported in version 2\n\t\t\tcase MultiChannelCommand.EndPointGet:\n\t\t\tcase MultiChannelCommand.CapabilityGet:\n\t\t\t\treturn this.version >= 2 && this.isSinglecast();\n\t\t\tcase MultiChannelCommand.CommandEncapsulation:\n\t\t\t\treturn this.version >= 2;\n\t\t\tcase MultiChannelCommand.EndPointFind:\n\t\t\t\treturn this.version >= 3 && this.isSinglecast();\n\t\t\tcase MultiChannelCommand.AggregatedMembersGet:\n\t\t\t\treturn this.version >= 4 && this.isSinglecast();\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic async getEndpoints() {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelCommand,\n\t\t\tMultiChannelCommand.EndPointGet,\n\t\t);\n\n\t\tconst cc = new MultiChannelCCEndPointGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultiChannelCCEndPointReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn {\n\t\t\t\tisDynamicEndpointCount: response.countIsDynamic,\n\t\t\t\tidenticalCapabilities: response.identicalCapabilities,\n\t\t\t\tindividualEndpointCount: response.individualCount,\n\t\t\t\taggregatedEndpointCount: response.aggregatedCount,\n\t\t\t};\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async getEndpointCapabilities(\n\t\tendpoint: number,\n\t): Promise<MaybeNotKnown<EndpointCapability>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelCommand,\n\t\t\tMultiChannelCommand.CapabilityGet,\n\t\t);\n\n\t\tconst cc = new MultiChannelCCCapabilityGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\trequestedEndpoint: endpoint,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultiChannelCCCapabilityReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\tconst generic = getGenericDeviceClass(\n\t\t\t\tresponse.genericDeviceClass,\n\t\t\t);\n\t\t\tconst specific = getSpecificDeviceClass(\n\t\t\t\tresponse.genericDeviceClass,\n\t\t\t\tresponse.specificDeviceClass,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tisDynamic: response.isDynamic,\n\t\t\t\twasRemoved: response.wasRemoved,\n\t\t\t\tsupportedCCs: response.supportedCCs,\n\t\t\t\tgeneric,\n\t\t\t\tspecific,\n\t\t\t};\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async findEndpoints(\n\t\tgenericClass: number,\n\t\tspecificClass: number,\n\t): Promise<MaybeNotKnown<readonly number[]>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelCommand,\n\t\t\tMultiChannelCommand.EndPointFind,\n\t\t);\n\n\t\tconst cc = new MultiChannelCCEndPointFind({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tgenericClass,\n\t\t\tspecificClass,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultiChannelCCEndPointFindReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.foundEndpoints;\n\t}\n\n\t@validateArgs()\n\tpublic async getAggregatedMembers(\n\t\tendpoint: number,\n\t): Promise<MaybeNotKnown<readonly number[]>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelCommand,\n\t\t\tMultiChannelCommand.AggregatedMembersGet,\n\t\t);\n\n\t\tconst cc = new MultiChannelCCAggregatedMembersGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\trequestedEndpoint: endpoint,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultiChannelCCAggregatedMembersReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.members;\n\t}\n\n\t// Encapsulation is used internally and too frequently that we\n\t// want to pay the cost of validating each call\n\t// eslint-disable-next-line @zwave-js/ccapi-validate-args\n\tpublic async sendEncapsulated(\n\t\toptions: MultiChannelCCCommandEncapsulationOptions,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelCommand,\n\t\t\tMultiChannelCommand.CommandEncapsulation,\n\t\t);\n\n\t\tconst cc = new MultiChannelCCCommandEncapsulation({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\t...options,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async getEndpointCountV1(\n\t\tccId: CommandClasses,\n\t): Promise<MaybeNotKnown<number>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelCommand,\n\t\t\tMultiChannelCommand.GetV1,\n\t\t);\n\n\t\tconst cc = new MultiChannelCCV1Get({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\trequestedCC: ccId,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultiChannelCCV1Report\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.endpointCount;\n\t}\n\n\t// Encapsulation is used internally and too frequently that we\n\t// want to pay the cost of validating each call\n\t// eslint-disable-next-line @zwave-js/ccapi-validate-args\n\tpublic async sendEncapsulatedV1(encapsulated: CommandClass): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiChannelCommand,\n\t\t\tMultiChannelCommand.CommandEncapsulationV1,\n\t\t);\n\n\t\tconst cc = new MultiChannelCCV1CommandEncapsulation({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tencapsulated,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\nexport interface EndpointCapability {\n\tgeneric: GenericDeviceClass;\n\tspecific: SpecificDeviceClass;\n\tsupportedCCs: CommandClasses[];\n\tisDynamic: boolean;\n\twasRemoved: boolean;\n}\n\n@commandClass(CommandClasses[\"Multi Channel\"])\n@implementedVersion(4)\n@ccValues(MultiChannelCCValues)\nexport class MultiChannelCC extends CommandClass {\n\tdeclare ccCommand: MultiChannelCommand;\n\n\t/** Tests if a command targets a specific endpoint and thus requires encapsulation */\n\tpublic static requiresEncapsulation(cc: CommandClass): boolean {\n\t\treturn (\n\t\t\tcc.endpointIndex !== 0\n\t\t\t&& !(cc instanceof MultiChannelCCCommandEncapsulation)\n\t\t\t&& !(cc instanceof MultiChannelCCV1CommandEncapsulation)\n\t\t);\n\t}\n\n\t/** Encapsulates a command that targets a specific endpoint, with version 2+ of the Multi Channel CC */\n\tpublic static encapsulate(\n\t\tcc: CommandClass,\n\t): MultiChannelCCCommandEncapsulation {\n\t\tconst ret = new MultiChannelCCCommandEncapsulation({\n\t\t\tnodeId: cc.nodeId,\n\t\t\tencapsulated: cc,\n\t\t\tdestination: cc.endpointIndex,\n\t\t});\n\n\t\t// Copy the encapsulation flags from the encapsulated command\n\t\tret.encapsulationFlags = cc.encapsulationFlags;\n\n\t\treturn ret;\n\t}\n\n\t/** Encapsulates a command that targets a specific endpoint, with version 1 of the Multi Channel CC */\n\tpublic static encapsulateV1(\n\t\tcc: CommandClass,\n\t): MultiChannelCCV1CommandEncapsulation {\n\t\tconst ret = new MultiChannelCCV1CommandEncapsulation({\n\t\t\tnodeId: cc.nodeId,\n\t\t\tendpointIndex: cc.endpointIndex,\n\t\t\tencapsulated: cc,\n\t\t});\n\n\t\t// Copy the encapsulation flags from the encapsulated command\n\t\tret.encapsulationFlags = cc.encapsulationFlags;\n\n\t\treturn ret;\n\t}\n\n\tpublic skipEndpointInterview(): boolean {\n\t\t// The endpoints are discovered by querying the root device\n\t\treturn true;\n\t}\n\n\tpublic async interview(ctx: InterviewContext): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\n\t\tconst removeEndpoints = ctx.getDeviceConfig?.(node.id)?.compat\n\t\t\t?.removeEndpoints;\n\t\tif (removeEndpoints === \"*\") {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`Skipping ${this.ccName} interview b/c all endpoints are ignored by the device config file...`,\n\t\t\t\tdirection: \"none\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\t// Special interview procedure for legacy nodes\n\t\tconst ccVersion = getEffectiveCCVersion(ctx, this);\n\t\tif (ccVersion === 1) return this.interviewV1(ctx);\n\n\t\tconst endpoint = node.getEndpoint(this.endpointIndex)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Multi Channel\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\t\tconst valueDB = this.getValueDB(ctx);\n\n\t\t// Step 1: Retrieve general information about end points\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"querying device endpoint information...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst multiResponse = await api.getEndpoints();\n\t\tif (!multiResponse) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t\"Querying device endpoint information timed out, aborting interview...\",\n\t\t\t\tlevel: \"warn\",\n\t\t\t});\n\t\t\treturn this.throwMissingCriticalInterviewResponse();\n\t\t}\n\n\t\tlet logMessage = `received response for device endpoints:\nendpoint count (individual): ${multiResponse.individualEndpointCount}\ncount is dynamic: ${multiResponse.isDynamicEndpointCount}\nidentical capabilities: ${multiResponse.identicalCapabilities}`;\n\t\tif (multiResponse.aggregatedEndpointCount != undefined) {\n\t\t\tlogMessage +=\n\t\t\t\t`\\nendpoint count (aggregated): ${multiResponse.aggregatedEndpointCount}`;\n\t\t}\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: logMessage,\n\t\t\tdirection: \"inbound\",\n\t\t});\n\n\t\tlet allEndpoints: number[] = [];\n\t\tconst addSequentialEndpoints = (): void => {\n\t\t\tfor (\n\t\t\t\tlet i = 1;\n\t\t\t\ti\n\t\t\t\t\t<= multiResponse.individualEndpointCount\n\t\t\t\t\t\t+ (multiResponse.aggregatedEndpointCount ?? 0);\n\t\t\t\ti++\n\t\t\t) {\n\t\t\t\tallEndpoints.push(i);\n\t\t\t}\n\t\t};\n\t\tif (api.supportsCommand(MultiChannelCommand.EndPointFind)) {\n\t\t\t// Step 2a: Find all endpoints\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"querying all endpoints...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\n\t\t\tconst foundEndpoints = await api.findEndpoints(0xff, 0xff);\n\t\t\tif (foundEndpoints) allEndpoints.push(...foundEndpoints);\n\t\t\tif (!allEndpoints.length) {\n\t\t\t\t// Create a sequential list of endpoints\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`Endpoint query returned no results, assuming that endpoints are sequential`,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t\taddSequentialEndpoints();\n\t\t\t} else {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `received endpoints: ${\n\t\t\t\t\t\tallEndpoints\n\t\t\t\t\t\t\t.map(String)\n\t\t\t\t\t\t\t.join(\", \")\n\t\t\t\t\t}`,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\t// Step 2b: Assume that the endpoints are in sequential order\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`does not support EndPointFind, assuming that endpoints are sequential`,\n\t\t\t\tdirection: \"none\",\n\t\t\t});\n\t\t\taddSequentialEndpoints();\n\t\t}\n\n\t\t// Step 2.5: remove ignored endpoints\n\t\tif (removeEndpoints?.length) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`The following endpoints are ignored through the config file: ${\n\t\t\t\t\t\tremoveEndpoints.join(\", \")\n\t\t\t\t\t}`,\n\t\t\t\tdirection: \"none\",\n\t\t\t});\n\t\t\tallEndpoints = allEndpoints.filter(\n\t\t\t\t(e) => !removeEndpoints.includes(e),\n\t\t\t);\n\t\t}\n\n\t\t// Step 3: Query endpoints\n\t\tlet hasQueriedCapabilities = false;\n\t\tfor (const endpoint of allEndpoints) {\n\t\t\tif (\n\t\t\t\tendpoint > multiResponse.individualEndpointCount\n\t\t\t\t&& ccVersion >= 4\n\t\t\t) {\n\t\t\t\t// Find members of aggregated end point\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`querying members of aggregated endpoint #${endpoint}...`,\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tconst members = await api.getAggregatedMembers(endpoint);\n\t\t\t\tif (members) {\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t`aggregated endpoint #${endpoint} has members ${\n\t\t\t\t\t\t\t\tmembers\n\t\t\t\t\t\t\t\t\t.map(String)\n\t\t\t\t\t\t\t\t\t.join(\", \")\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// When the device reports identical capabilities for all endpoints,\n\t\t\t// we don't need to query them all\n\t\t\tif (multiResponse.identicalCapabilities && hasQueriedCapabilities) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`all endpoints identical, skipping capability query for endpoint #${endpoint}...`,\n\t\t\t\t\tdirection: \"none\",\n\t\t\t\t});\n\n\t\t\t\t// copy the capabilities from the first endpoint\n\t\t\t\tconst devClass = valueDB.getValue(\n\t\t\t\t\tMultiChannelCCValues.endpointDeviceClass.endpoint(\n\t\t\t\t\t\tallEndpoints[0],\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tvalueDB.setValue(\n\t\t\t\t\tMultiChannelCCValues.endpointDeviceClass.endpoint(endpoint),\n\t\t\t\t\tdevClass,\n\t\t\t\t);\n\t\t\t\tconst ep1Caps = valueDB.getValue<CommandClasses[]>(\n\t\t\t\t\tMultiChannelCCValues.endpointCCs.endpoint(allEndpoints[0]),\n\t\t\t\t)!;\n\t\t\t\tvalueDB.setValue(\n\t\t\t\t\tMultiChannelCCValues.endpointCCs.endpoint(endpoint),\n\t\t\t\t\t[...ep1Caps],\n\t\t\t\t);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: `querying capabilities for endpoint #${endpoint}...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst caps = await api.getEndpointCapabilities(endpoint);\n\t\t\tif (caps) {\n\t\t\t\thasQueriedCapabilities = true;\n\t\t\t\tlogMessage =\n\t\t\t\t\t`received response for endpoint capabilities (#${endpoint}):\ngeneric device class: ${caps.generic.label}\nspecific device class: ${caps.specific.label}\nis dynamic end point: ${caps.isDynamic}\nsupported CCs:`;\n\t\t\t\tfor (const cc of caps.supportedCCs) {\n\t\t\t\t\tlogMessage += `\\n \u00B7 ${getCCName(cc)}`;\n\t\t\t\t}\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`Querying endpoint #${endpoint} capabilities timed out, aborting interview...`,\n\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t});\n\t\t\t\treturn this.throwMissingCriticalInterviewResponse();\n\t\t\t}\n\t\t}\n\n\t\t// Now that all endpoints have been interviewed, remember which ones are there\n\t\t// But first figure out if they seem unnecessary and if they do, which ones should be preserved\n\t\tif (\n\t\t\t!multiResponse.identicalCapabilities\n\t\t\t&& areEndpointsUnnecessary(ctx, node.id, allEndpoints)\n\t\t) {\n\t\t\tconst preserve = ctx.getDeviceConfig?.(node.id)?.compat\n\t\t\t\t?.preserveEndpoints;\n\t\t\tif (!preserve) {\n\t\t\t\tallEndpoints = [];\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`Endpoints seem unnecessary b/c they have different device classes, ignoring all...`,\n\t\t\t\t});\n\t\t\t} else if (preserve === \"*\") {\n\t\t\t\t// preserve all endpoints, do nothing\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`Endpoints seem unnecessary, but are configured to be preserved.`,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tallEndpoints = allEndpoints.filter((ep) =>\n\t\t\t\t\tpreserve.includes(ep)\n\t\t\t\t);\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tmessage: `Endpoints seem unnecessary, but endpoints ${\n\t\t\t\t\t\tallEndpoints.join(\n\t\t\t\t\t\t\t\", \",\n\t\t\t\t\t\t)\n\t\t\t\t\t} are configured to be preserved.`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis.setValue(\n\t\t\tctx,\n\t\t\tMultiChannelCCValues.endpointIndizes,\n\t\t\tallEndpoints,\n\t\t);\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tprivate async interviewV1(ctx: InterviewContext): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst removeEndpoints = ctx.getDeviceConfig?.(node.id)?.compat\n\t\t\t?.removeEndpoints;\n\t\tif (removeEndpoints === \"*\") {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`Skipping ${this.ccName} interview b/c all endpoints are ignored by the device config file...`,\n\t\t\t\tdirection: \"none\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Multi Channel\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t);\n\t\tconst valueDB = this.getValueDB(ctx);\n\n\t\t// V1 works the opposite way - we scan all CCs and remember how many\n\t\t// endpoints they have\n\t\tconst supportedCCs = [...node.getCCs()]\n\t\t\t// Don't query CCs the node only controls\n\t\t\t.filter(([, info]) => info.isSupported)\n\t\t\t.map(([cc]) => cc)\n\t\t\t// Don't query CCs that want to skip the endpoint interview\n\t\t\t.filter(\n\t\t\t\t(cc) =>\n\t\t\t\t\t!CommandClass.createInstanceUnchecked(\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tcc,\n\t\t\t\t\t)?.skipEndpointInterview(),\n\t\t\t);\n\t\tconst endpointCounts = new Map<CommandClasses, number>();\n\t\tfor (const ccId of supportedCCs) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tmessage: `Querying endpoint count for CommandClass ${\n\t\t\t\t\tgetCCName(\n\t\t\t\t\t\tccId,\n\t\t\t\t\t)\n\t\t\t\t}...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst endpointCount = await api.getEndpointCountV1(ccId);\n\t\t\tif (endpointCount != undefined) {\n\t\t\t\tendpointCounts.set(ccId, endpointCount);\n\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tmessage: `CommandClass ${\n\t\t\t\t\t\tgetCCName(\n\t\t\t\t\t\t\tccId,\n\t\t\t\t\t\t)\n\t\t\t\t\t} has ${endpointCount} endpoints`,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Store the collected information\n\t\t// We have only individual and no dynamic and no aggregated endpoints\n\t\tconst numEndpoints = Math.max(...endpointCounts.values());\n\t\tthis.setValue(\n\t\t\tctx,\n\t\t\tMultiChannelCCValues.endpointCountIsDynamic,\n\t\t\tfalse,\n\t\t);\n\t\tthis.setValue(\n\t\t\tctx,\n\t\t\tMultiChannelCCValues.aggregatedEndpointCount,\n\t\t\t0,\n\t\t);\n\t\tthis.setValue(\n\t\t\tctx,\n\t\t\tMultiChannelCCValues.individualEndpointCount,\n\t\t\tnumEndpoints,\n\t\t);\n\t\t// Since we queried all CCs separately, we can assume that all\n\t\t// endpoints have different capabilities\n\t\tthis.setValue(\n\t\t\tctx,\n\t\t\tMultiChannelCCValues.endpointsHaveIdenticalCapabilities,\n\t\t\tfalse,\n\t\t);\n\n\t\tif (removeEndpoints?.length) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`The following endpoints are ignored through the config file: ${\n\t\t\t\t\t\tremoveEndpoints.join(\", \")\n\t\t\t\t\t}`,\n\t\t\t\tdirection: \"none\",\n\t\t\t});\n\t\t}\n\n\t\tconst allEndpoints: number[] = [];\n\t\tfor (let endpoint = 1; endpoint <= numEndpoints; endpoint++) {\n\t\t\t// Skip this endpoint if flagged for removal\n\t\t\tif (!removeEndpoints?.includes(endpoint)) {\n\t\t\t\t// Check which CCs exist on this endpoint\n\t\t\t\tconst endpointCCs = [...endpointCounts.entries()]\n\t\t\t\t\t.filter(([, ccEndpoints]) => ccEndpoints >= endpoint)\n\t\t\t\t\t.map(([ccId]) => ccId);\n\t\t\t\t// And store it per endpoint\n\t\t\t\tvalueDB.setValue(\n\t\t\t\t\tMultiChannelCCValues.endpointCCs.endpoint(endpoint),\n\t\t\t\t\tendpointCCs,\n\t\t\t\t);\n\t\t\t\tallEndpoints.push(endpoint);\n\t\t\t}\n\t\t}\n\t\tthis.setValue(\n\t\t\tctx,\n\t\t\tMultiChannelCCValues.endpointIndizes,\n\t\t\tallEndpoints,\n\t\t);\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelCCEndPointReportOptions {\n\tcountIsDynamic: boolean;\n\tidenticalCapabilities: boolean;\n\tindividualCount: number;\n\taggregatedCount?: number;\n}\n\n@CCCommand(MultiChannelCommand.EndPointReport)\n@ccValueProperty(\"countIsDynamic\", MultiChannelCCValues.endpointCountIsDynamic)\n@ccValueProperty(\n\t\"identicalCapabilities\",\n\tMultiChannelCCValues.endpointsHaveIdenticalCapabilities,\n)\n@ccValueProperty(\n\t\"individualCount\",\n\tMultiChannelCCValues.individualEndpointCount,\n)\n@ccValueProperty(\n\t\"aggregatedCount\",\n\tMultiChannelCCValues.aggregatedEndpointCount,\n)\nexport class MultiChannelCCEndPointReport extends MultiChannelCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelCCEndPointReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.countIsDynamic = options.countIsDynamic;\n\t\tthis.identicalCapabilities = options.identicalCapabilities;\n\t\tthis.individualCount = options.individualCount;\n\t\tthis.aggregatedCount = options.aggregatedCount;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelCCEndPointReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst countIsDynamic = !!(raw.payload[0] & 0b10000000);\n\t\tconst identicalCapabilities = !!(raw.payload[0] & 0b01000000);\n\t\tconst individualCount = raw.payload[1] & 0b01111111;\n\t\tlet aggregatedCount: MaybeNotKnown<number>;\n\n\t\tif (raw.payload.length >= 3) {\n\t\t\taggregatedCount = raw.payload[2] & 0b01111111;\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tcountIsDynamic,\n\t\t\tidenticalCapabilities,\n\t\t\tindividualCount,\n\t\t\taggregatedCount,\n\t\t});\n\t}\n\n\tpublic countIsDynamic: boolean;\n\n\tpublic identicalCapabilities: boolean;\n\n\tpublic individualCount: number;\n\n\tpublic aggregatedCount: MaybeNotKnown<number>;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\t(this.countIsDynamic ? 0b10000000 : 0)\n\t\t\t| (this.identicalCapabilities ? 0b01000000 : 0),\n\t\t\tthis.individualCount & 0b01111111,\n\t\t\tthis.aggregatedCount ?? 0,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"endpoint count (individual)\": this.individualCount,\n\t\t\t\"count is dynamic\": this.countIsDynamic,\n\t\t\t\"identical capabilities\": this.identicalCapabilities,\n\t\t};\n\t\tif (this.aggregatedCount != undefined) {\n\t\t\tmessage[\"endpoint count (aggregated)\"] = this.aggregatedCount;\n\t\t}\n\t\tconst ret = {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t\treturn ret;\n\t}\n}\n\n@CCCommand(MultiChannelCommand.EndPointGet)\n@expectedCCResponse(MultiChannelCCEndPointReport)\nexport class MultiChannelCCEndPointGet extends MultiChannelCC {}\n\n// @publicAPI\nexport interface MultiChannelCCCapabilityReportOptions {\n\tendpointIndex: number;\n\tgenericDeviceClass: number;\n\tspecificDeviceClass: number;\n\tsupportedCCs: CommandClasses[];\n\tisDynamic: boolean;\n\twasRemoved: boolean;\n}\n\n@CCCommand(MultiChannelCommand.CapabilityReport)\nexport class MultiChannelCCCapabilityReport extends MultiChannelCC\n\timplements ApplicationNodeInformation\n{\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelCCCapabilityReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.endpointIndex = options.endpointIndex;\n\t\tthis.genericDeviceClass = options.genericDeviceClass;\n\t\tthis.specificDeviceClass = options.specificDeviceClass;\n\t\tthis.supportedCCs = options.supportedCCs;\n\t\tthis.isDynamic = options.isDynamic;\n\t\tthis.wasRemoved = options.wasRemoved;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelCCCapabilityReport {\n\t\t// Only validate the bytes we expect to see here\n\t\t// parseApplicationNodeInformation does its own validation\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst endpointIndex = raw.payload[0] & 0b01111111;\n\t\tconst isDynamic = !!(raw.payload[0] & 0b10000000);\n\t\tconst NIF = parseApplicationNodeInformation(\n\t\t\traw.payload.subarray(1),\n\t\t);\n\t\tconst genericDeviceClass = NIF.genericDeviceClass;\n\t\tconst specificDeviceClass = NIF.specificDeviceClass;\n\t\tconst supportedCCs: CommandClasses[] = NIF.supportedCCs;\n\n\t\t// Removal reports have very specific information\n\t\tconst wasRemoved: boolean = isDynamic\n\t\t\t&& genericDeviceClass === 0xff // \"Non-Interoperable\"\n\t\t\t&& specificDeviceClass === 0x00;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tendpointIndex,\n\t\t\tisDynamic,\n\t\t\tgenericDeviceClass,\n\t\t\tspecificDeviceClass,\n\t\t\tsupportedCCs,\n\t\t\twasRemoved,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tconst deviceClassValue = MultiChannelCCValues.endpointDeviceClass;\n\t\tconst ccsValue = MultiChannelCCValues.endpointCCs;\n\n\t\tif (this.wasRemoved) {\n\t\t\tthis.removeValue(ctx, deviceClassValue);\n\t\t\tthis.removeValue(ctx, ccsValue);\n\t\t} else {\n\t\t\tthis.setValue(ctx, deviceClassValue, {\n\t\t\t\tgeneric: this.genericDeviceClass,\n\t\t\t\tspecific: this.specificDeviceClass,\n\t\t\t});\n\t\t\tthis.setValue(ctx, ccsValue, this.supportedCCs);\n\t\t}\n\t\treturn true;\n\t}\n\n\t// The endpoint index must be overridden to be able to attribute the information to the correct endpoint\n\tpublic readonly genericDeviceClass: number;\n\tpublic readonly specificDeviceClass: number;\n\tpublic readonly supportedCCs: CommandClasses[];\n\tpublic readonly isDynamic: boolean;\n\tpublic readonly wasRemoved: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\t[\n\t\t\t\t(this.endpointIndex & 0b01111111)\n\t\t\t\t| (this.isDynamic ? 0b10000000 : 0),\n\t\t\t],\n\t\t\tencodeApplicationNodeInformation(this),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"endpoint index\": this.endpointIndex,\n\t\t\t\t\"generic device class\": getGenericDeviceClass(\n\t\t\t\t\tthis.genericDeviceClass,\n\t\t\t\t).label,\n\t\t\t\t\"specific device class\": getSpecificDeviceClass(\n\t\t\t\t\tthis.genericDeviceClass,\n\t\t\t\t\tthis.specificDeviceClass,\n\t\t\t\t).label,\n\t\t\t\t\"is dynamic end point\": this.isDynamic,\n\t\t\t\t\"supported CCs\": this.supportedCCs\n\t\t\t\t\t.map((cc) => `\\n\u00B7 ${getCCName(cc)}`)\n\t\t\t\t\t.join(\"\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelCCCapabilityGetOptions {\n\trequestedEndpoint: number;\n}\n\nfunction testResponseForMultiChannelCapabilityGet(\n\tsent: MultiChannelCCCapabilityGet,\n\treceived: MultiChannelCCCapabilityReport,\n) {\n\treturn received.endpointIndex === sent.requestedEndpoint;\n}\n\n@CCCommand(MultiChannelCommand.CapabilityGet)\n@expectedCCResponse(\n\tMultiChannelCCCapabilityReport,\n\ttestResponseForMultiChannelCapabilityGet,\n)\nexport class MultiChannelCCCapabilityGet extends MultiChannelCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelCCCapabilityGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.requestedEndpoint = options.requestedEndpoint;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelCCCapabilityGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst requestedEndpoint = raw.payload[0] & 0b01111111;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trequestedEndpoint,\n\t\t});\n\t}\n\n\tpublic requestedEndpoint: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.requestedEndpoint & 0b01111111]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { endpoint: this.requestedEndpoint },\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelCCEndPointFindReportOptions {\n\tgenericClass: number;\n\tspecificClass: number;\n\tfoundEndpoints: number[];\n\treportsToFollow: number;\n}\n\n@CCCommand(MultiChannelCommand.EndPointFindReport)\nexport class MultiChannelCCEndPointFindReport extends MultiChannelCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelCCEndPointFindReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.genericClass = options.genericClass;\n\t\tthis.specificClass = options.specificClass;\n\t\tthis.foundEndpoints = options.foundEndpoints;\n\t\tthis.reportsToFollow = options.reportsToFollow;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelCCEndPointFindReport {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst reportsToFollow = raw.payload[0];\n\t\tconst genericClass = raw.payload[1];\n\t\tconst specificClass = raw.payload[2];\n\n\t\t// Some devices omit the endpoint list although that is not allowed in the specs\n\t\t// therefore don't validatePayload here.\n\t\tconst foundEndpoints = [...raw.payload.subarray(3)]\n\t\t\t.map((e) => e & 0b01111111)\n\t\t\t.filter((e) => e !== 0);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\treportsToFollow,\n\t\t\tgenericClass,\n\t\t\tspecificClass,\n\t\t\tfoundEndpoints,\n\t\t});\n\t}\n\n\tpublic genericClass: number;\n\tpublic specificClass: number;\n\tpublic foundEndpoints: number[];\n\tpublic reportsToFollow: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\t[\n\t\t\t\tthis.reportsToFollow,\n\t\t\t\tthis.genericClass,\n\t\t\t\tthis.specificClass,\n\t\t\t],\n\t\t\tBytes.from(this.foundEndpoints.map((e) => e & 0b01111111)),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic getPartialCCSessionId(): Record<string, any> | undefined {\n\t\t// Distinguish sessions by the requested device classes\n\t\treturn {\n\t\t\tgenericClass: this.genericClass,\n\t\t\tspecificClass: this.specificClass,\n\t\t};\n\t}\n\n\tpublic expectMoreMessages(): boolean {\n\t\treturn this.reportsToFollow > 0;\n\t}\n\n\tpublic mergePartialCCs(\n\t\tpartials: MultiChannelCCEndPointFindReport[],\n\t\t_ctx: CCParsingContext,\n\t): Promise<void> {\n\t\t// Concat the list of end points\n\t\tthis.foundEndpoints = [...partials, this]\n\t\t\t.map((report) => report.foundEndpoints)\n\t\t\t.reduce((prev, cur) => prev.concat(...cur), []);\n\t\treturn Promise.resolve();\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"generic device class\": getGenericDeviceClass(\n\t\t\t\t\tthis.genericClass,\n\t\t\t\t).label,\n\t\t\t\t\"specific device class\": getSpecificDeviceClass(\n\t\t\t\t\tthis.genericClass,\n\t\t\t\t\tthis.specificClass,\n\t\t\t\t).label,\n\t\t\t\t\"found endpoints\": this.foundEndpoints.join(\", \"),\n\t\t\t\t\"# of reports to follow\": this.reportsToFollow,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelCCEndPointFindOptions {\n\tgenericClass: number;\n\tspecificClass: number;\n}\n\n@CCCommand(MultiChannelCommand.EndPointFind)\n@expectedCCResponse(MultiChannelCCEndPointFindReport)\nexport class MultiChannelCCEndPointFind extends MultiChannelCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelCCEndPointFindOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.genericClass = options.genericClass;\n\t\tthis.specificClass = options.specificClass;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelCCEndPointFind {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst genericClass = raw.payload[0];\n\t\tconst specificClass = raw.payload[1];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgenericClass,\n\t\t\tspecificClass,\n\t\t});\n\t}\n\n\tpublic genericClass: number;\n\tpublic specificClass: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.genericClass, this.specificClass]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"generic device class\":\n\t\t\t\t\tgetGenericDeviceClass(this.genericClass).label,\n\t\t\t\t\"specific device class\": getSpecificDeviceClass(\n\t\t\t\t\tthis.genericClass,\n\t\t\t\t\tthis.specificClass,\n\t\t\t\t).label,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelCCAggregatedMembersReportOptions {\n\taggregatedEndpointIndex: number;\n\tmembers: number[];\n}\n\n@CCCommand(MultiChannelCommand.AggregatedMembersReport)\n@ccValueProperty(\n\t\"members\",\n\tMultiChannelCCValues.aggregatedEndpointMembers,\n\t(self) => [self.aggregatedEndpointIndex],\n)\nexport class MultiChannelCCAggregatedMembersReport extends MultiChannelCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelCCAggregatedMembersReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.aggregatedEndpointIndex = options.aggregatedEndpointIndex;\n\t\tthis.members = options.members;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelCCAggregatedMembersReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst aggregatedEndpointIndex = raw.payload[0] & 0b0111_1111;\n\t\tconst bitMaskLength = raw.payload[1];\n\t\tvalidatePayload(raw.payload.length >= 2 + bitMaskLength);\n\t\tconst bitMask = raw.payload.subarray(2, 2 + bitMaskLength);\n\t\tconst members = parseBitMask(bitMask);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\taggregatedEndpointIndex,\n\t\t\tmembers,\n\t\t});\n\t}\n\n\tpublic readonly aggregatedEndpointIndex: number;\n\n\tpublic readonly members: readonly number[];\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"aggregated endpoint\": this.aggregatedEndpointIndex,\n\t\t\t\tmembers: this.members.join(\", \"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelCCAggregatedMembersGetOptions {\n\trequestedEndpoint: number;\n}\n\n@CCCommand(MultiChannelCommand.AggregatedMembersGet)\n@expectedCCResponse(MultiChannelCCAggregatedMembersReport)\nexport class MultiChannelCCAggregatedMembersGet extends MultiChannelCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelCCAggregatedMembersGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.requestedEndpoint = options.requestedEndpoint;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): MultiChannelCCAggregatedMembersGet {\n\t\t// TODO: Deserialize payload\n\t\tthrow new ZWaveError(\n\t\t\t`${this.name}: deserialization not implemented`,\n\t\t\tZWaveErrorCodes.Deserialization_NotImplemented,\n\t\t);\n\n\t\t// return new MultiChannelCCAggregatedMembersGet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic requestedEndpoint: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.requestedEndpoint & 0b0111_1111]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { endpoint: this.requestedEndpoint },\n\t\t};\n\t}\n}\n\ntype MultiChannelCCDestination = number | (1 | 2 | 3 | 4 | 5 | 6 | 7)[];\n\n// @publicAPI\nexport interface MultiChannelCCCommandEncapsulationOptions {\n\tencapsulated: CommandClass;\n\tdestination: MultiChannelCCDestination;\n}\n\n// SDS13783: A receiving node MAY respond to a Multi Channel encapsulated command if the Destination\n// End Point field specifies a single End Point. In that case, the response MUST be Multi Channel\n// encapsulated.\n// A receiving node MUST NOT respond to a Multi Channel encapsulated command if the\n// Destination End Point field specifies multiple End Points via bit mask addressing.\n\nfunction getCCResponseForCommandEncapsulation(\n\tctx: GetNode<NodeId & SupportsCC>,\n\tsent: MultiChannelCCCommandEncapsulation,\n) {\n\tif (\n\t\ttypeof sent.destination === \"number\"\n\t\t&& sent.encapsulated.expectsCCResponse(ctx)\n\t) {\n\t\t// Allow both versions of the encapsulation command\n\t\t// Our implementation check is a bit too strict, so change the return type\n\t\treturn [\n\t\t\tMultiChannelCCCommandEncapsulation,\n\t\t\tMultiChannelCCV1CommandEncapsulation,\n\t\t] as any as (typeof MultiChannelCCCommandEncapsulation)[];\n\t}\n}\n\nfunction testResponseForCommandEncapsulation(\n\tsent: MultiChannelCCCommandEncapsulation,\n\treceived:\n\t\t| MultiChannelCCCommandEncapsulation\n\t\t| MultiChannelCCV1CommandEncapsulation,\n) {\n\tif (\n\t\ttypeof sent.destination === \"number\"\n\t\t&& sent.destination === received.endpointIndex\n\t) {\n\t\treturn \"checkEncapsulated\";\n\t}\n\treturn false;\n}\n\n@CCCommand(MultiChannelCommand.CommandEncapsulation)\n@expectedCCResponse(\n\tgetCCResponseForCommandEncapsulation,\n\ttestResponseForCommandEncapsulation,\n)\nexport class MultiChannelCCCommandEncapsulation extends MultiChannelCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelCCCommandEncapsulationOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.encapsulated = options.encapsulated;\n\t\tthis.encapsulated.encapsulatingCC = this as any;\n\t\t// Propagate the endpoint index all the way down\n\t\tlet cur: CommandClass = this;\n\t\twhile (cur) {\n\t\t\tif (isMultiEncapsulatingCommandClass(cur)) {\n\t\t\t\tfor (const cc of cur.encapsulated) {\n\t\t\t\t\tcc.endpointIndex = this.endpointIndex;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t} else if (isEncapsulatingCommandClass(cur)) {\n\t\t\t\tcur.encapsulated.endpointIndex = this.endpointIndex;\n\t\t\t\tcur = cur.encapsulated;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.destination = options.destination;\n\t}\n\n\tpublic static async from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): Promise<MultiChannelCCCommandEncapsulation> {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\n\t\tlet endpointIndex: number;\n\t\tlet destination: MultiChannelCCDestination;\n\n\t\tif (\n\t\t\tctx.getDeviceConfig?.(ctx.sourceNodeId)\n\t\t\t\t?.compat?.treatDestinationEndpointAsSource\n\t\t) {\n\t\t\t// This device incorrectly uses the destination field to indicate the source endpoint\n\t\t\tendpointIndex = raw.payload[1] & 0b0111_1111;\n\t\t\tdestination = 0;\n\t\t} else {\n\t\t\t// Parse normally\n\t\t\tendpointIndex = raw.payload[0] & 0b0111_1111;\n\t\t\tconst isBitMask = !!(raw.payload[1] & 0b1000_0000);\n\t\t\tdestination = raw.payload[1] & 0b0111_1111;\n\t\t\tif (isBitMask) {\n\t\t\t\tdestination = parseBitMask(\n\t\t\t\t\tBytes.from([destination]),\n\t\t\t\t) as any;\n\t\t\t}\n\t\t}\n\t\t// No need to validate further, each CC does it for itself\n\t\tconst encapsulated = await CommandClass.parse(\n\t\t\traw.payload.subarray(2),\n\t\t\tctx,\n\t\t);\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tendpointIndex,\n\t\t\tdestination,\n\t\t\tencapsulated,\n\t\t});\n\t}\n\n\tpublic encapsulated: CommandClass;\n\t/** The destination end point (0-127) or an array of destination end points (1-7) */\n\tpublic destination: MultiChannelCCDestination;\n\n\tpublic async serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tif (\n\t\t\tctx.getDeviceConfig?.(this.nodeId as number)?.compat\n\t\t\t\t?.treatDestinationEndpointAsSource\n\t\t) {\n\t\t\t// This device incorrectly responds from the endpoint we've passed as our source endpoint\n\t\t\tif (typeof this.destination === \"number\") {\n\t\t\t\tthis.endpointIndex = this.destination;\n\t\t\t}\n\t\t}\n\n\t\tconst destination = typeof this.destination === \"number\"\n\t\t\t// The destination is a single number\n\t\t\t? this.destination & 0b0111_1111\n\t\t\t// The destination is a bit mask\n\t\t\t: encodeBitMask(this.destination, 7)[0] | 0b1000_0000;\n\t\tthis.payload = Bytes.concat([\n\t\t\t[this.endpointIndex & 0b0111_1111, destination],\n\t\t\tawait this.encapsulated.serialize(ctx),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tsource: this.endpointIndex,\n\t\t\t\tdestination: typeof this.destination === \"number\"\n\t\t\t\t\t? this.destination\n\t\t\t\t\t: this.destination.join(\", \"),\n\t\t\t},\n\t\t};\n\t}\n\n\tprotected computeEncapsulationOverhead(): number {\n\t\t// Multi Channel CC adds two bytes for the source and destination endpoint\n\t\treturn super.computeEncapsulationOverhead() + 2;\n\t}\n}\n\n// @publicAPI\nexport interface MultiChannelCCV1ReportOptions {\n\trequestedCC: CommandClasses;\n\tendpointCount: number;\n}\n\n@CCCommand(MultiChannelCommand.ReportV1)\nexport class MultiChannelCCV1Report extends MultiChannelCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelCCV1ReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.requestedCC = options.requestedCC;\n\t\tthis.endpointCount = options.endpointCount;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelCCV1Report {\n\t\t// V1 won't be extended in the future, so do an exact check\n\t\tvalidatePayload(raw.payload.length === 2);\n\t\tconst requestedCC: CommandClasses = raw.payload[0];\n\t\tconst endpointCount = raw.payload[1];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trequestedCC,\n\t\t\tendpointCount,\n\t\t});\n\t}\n\n\tpublic readonly requestedCC: CommandClasses;\n\tpublic readonly endpointCount: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.requestedCC,\n\t\t\tthis.endpointCount,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tCC: getCCName(this.requestedCC),\n\t\t\t\t\"# of endpoints\": this.endpointCount,\n\t\t\t},\n\t\t};\n\t}\n}\n\nfunction testResponseForMultiChannelV1Get(\n\tsent: MultiChannelCCV1Get,\n\treceived: MultiChannelCCV1Report,\n) {\n\treturn sent.requestedCC === received.requestedCC;\n}\n\n// @publicAPI\nexport interface MultiChannelCCV1GetOptions {\n\trequestedCC: CommandClasses;\n}\n\n@CCCommand(MultiChannelCommand.GetV1)\n@expectedCCResponse(MultiChannelCCV1Report, testResponseForMultiChannelV1Get)\nexport class MultiChannelCCV1Get extends MultiChannelCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelCCV1GetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.requestedCC = options.requestedCC;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultiChannelCCV1Get {\n\t\t// V1 won't be extended in the future, so do an exact check\n\t\tvalidatePayload(raw.payload.length === 1);\n\t\tconst requestedCC: CommandClasses = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trequestedCC,\n\t\t});\n\t}\n\n\tpublic requestedCC: CommandClasses;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.requestedCC]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { CC: getCCName(this.requestedCC) },\n\t\t};\n\t}\n}\n\nfunction getResponseForV1CommandEncapsulation(\n\tctx: GetNode<NodeId & SupportsCC>,\n\tsent: MultiChannelCCV1CommandEncapsulation,\n) {\n\tif (sent.encapsulated.expectsCCResponse(ctx)) {\n\t\treturn MultiChannelCCV1CommandEncapsulation;\n\t}\n}\n\nfunction testResponseForV1CommandEncapsulation(\n\tsent: MultiChannelCCV1CommandEncapsulation,\n\treceived: MultiChannelCCV1CommandEncapsulation,\n) {\n\tif (sent.endpointIndex === received.endpointIndex) {\n\t\treturn \"checkEncapsulated\";\n\t}\n\treturn false;\n}\n\n// @publicAPI\nexport interface MultiChannelCCV1CommandEncapsulationOptions {\n\tencapsulated: CommandClass;\n}\n\n@CCCommand(MultiChannelCommand.CommandEncapsulationV1)\n@expectedCCResponse(\n\tgetResponseForV1CommandEncapsulation,\n\ttestResponseForV1CommandEncapsulation,\n)\nexport class MultiChannelCCV1CommandEncapsulation extends MultiChannelCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiChannelCCV1CommandEncapsulationOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.encapsulated = options.encapsulated;\n\t\tthis.encapsulated.encapsulatingCC = this as any;\n\t\t// Propagate the endpoint index all the way down\n\t\tlet cur: CommandClass = this;\n\t\twhile (cur) {\n\t\t\tif (isMultiEncapsulatingCommandClass(cur)) {\n\t\t\t\tfor (const cc of cur.encapsulated) {\n\t\t\t\t\tcc.endpointIndex = this.endpointIndex;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t} else if (isEncapsulatingCommandClass(cur)) {\n\t\t\t\tcur.encapsulated.endpointIndex = this.endpointIndex;\n\t\t\t\tcur = cur.encapsulated;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic static async from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): Promise<MultiChannelCCV1CommandEncapsulation> {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst endpointIndex = raw.payload[0];\n\n\t\t// Some devices send invalid reports, i.e. MultiChannelCCV1CommandEncapsulation, but with V2+ binary format\n\t\t// This would be a NoOp CC, but it makes no sense to encapsulate that.\n\t\tconst isV2withV1Header = raw.payload.length >= 2\n\t\t\t&& raw.payload[1] === 0x00;\n\n\t\t// No need to validate further, each CC does it for itself\n\t\tconst encapsulated = await CommandClass.parse(\n\t\t\traw.payload.subarray(isV2withV1Header ? 2 : 1),\n\t\t\tctx,\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tendpointIndex,\n\t\t\tencapsulated,\n\t\t});\n\t}\n\n\tpublic encapsulated!: CommandClass;\n\n\tpublic async serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\t[this.endpointIndex],\n\t\t\tawait this.encapsulated.serialize(ctx),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tprotected computeEncapsulationOverhead(): number {\n\t\t// Multi Channel CC V1 adds one byte for the endpoint index\n\t\treturn super.computeEncapsulationOverhead() + 1;\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { source: this.endpointIndex },\n\t\t};\n\t}\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../../../src_gen/cc/MultiChannelCC.ts"],
4
+ "sourcesContent": ["import * as __validateArgs from \"./MultiChannelCC._validateArgs.js\";\nconst { validateArgs_MultiChannelCCAPI_getEndpointCapabilities, validateArgs_MultiChannelCCAPI_findEndpoints, validateArgs_MultiChannelCCAPI_getAggregatedMembers, validateArgs_MultiChannelCCAPI_getEndpointCountV1 } = __validateArgs;\nimport { type ApplicationNodeInformation, CommandClasses, type GenericDeviceClass, type GetNode, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type NodeId, type SpecificDeviceClass, type SupportsCC, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeApplicationNodeInformation, encodeBitMask, getCCName, getGenericDeviceClass, getSpecificDeviceClass, parseApplicationNodeInformation, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\nimport { distinct } from \"alcalzone-shared/arrays\";\nimport { CCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, getEffectiveCCVersion, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { isEncapsulatingCommandClass, isMultiEncapsulatingCommandClass, } from \"../lib/EncapsulatingCommandClass.js\";\nimport { V } from \"../lib/Values.js\";\nimport { MultiChannelCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { MultiChannelCCValues } from \"./_CCValues.generated.js\";\nexport { MultiChannelCCValues };\n// @noSetValueAPI\n/**\n * Many devices unnecessarily use endpoints when they could (or do) provide all functionality via the root device.\n * This function gives an estimate if this is the case (i.e. all endpoints have a different device class)\n */\nfunction areEndpointsUnnecessary(ctx: GetValueDB, nodeId: number, endpointIndizes: number[]): boolean {\n // Gather all device classes\n const deviceClasses = new Map<number, {\n generic: number;\n specific: number;\n }>();\n for (const endpoint of endpointIndizes) {\n const devClassValueId = MultiChannelCCValues.endpointDeviceClass\n .endpoint(endpoint);\n const deviceClass = ctx.getValueDB(nodeId).getValue<{\n generic: number;\n specific: number;\n }>(devClassValueId);\n if (deviceClass) {\n deviceClasses.set(endpoint, {\n generic: deviceClass.generic,\n specific: deviceClass.specific,\n });\n }\n }\n // Endpoints may be useless if all of them have different device classes\n const distinctDeviceClasses = distinct([...deviceClasses.values()].map(({ generic, specific }) => generic * 256 + specific));\n if (distinctDeviceClasses.length !== endpointIndizes.length) {\n // There are endpoints with the same device class, so they are not unnecessary\n return false;\n }\n // Endpoints are necessary if more than 1 of them has a switch-type device class\n const switchTypeDeviceClasses = new Set([\n 0x10, // Binary Switch\n 0x11, // Multilevel Switch\n 0x12, // Remote Switch\n 0x13, // Toggle Switch\n ]);\n const numSwitchEndpoints = [...deviceClasses.values()].filter(({ generic }) => switchTypeDeviceClasses.has(generic)).length;\n if (numSwitchEndpoints > 1)\n return false;\n return true;\n}\n@API(CommandClasses[\"Multi Channel\"])\nexport class MultiChannelCCAPI extends CCAPI {\n public supportsCommand(cmd: MultiChannelCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n // Legacy commands:\n case MultiChannelCommand.GetV1:\n return this.isSinglecast() && this.version === 1;\n case MultiChannelCommand.CommandEncapsulationV1:\n return this.version === 1;\n // The specs start at version 3 but according to OZW,\n // these do seem to be supported in version 2\n case MultiChannelCommand.EndPointGet:\n case MultiChannelCommand.CapabilityGet:\n return this.version >= 2 && this.isSinglecast();\n case MultiChannelCommand.CommandEncapsulation:\n return this.version >= 2;\n case MultiChannelCommand.EndPointFind:\n return this.version >= 3 && this.isSinglecast();\n case MultiChannelCommand.AggregatedMembersGet:\n return this.version >= 4 && this.isSinglecast();\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getEndpoints() {\n this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.EndPointGet);\n const cc = new MultiChannelCCEndPointGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<MultiChannelCCEndPointReport>(cc, this.commandOptions);\n if (response) {\n return {\n isDynamicEndpointCount: response.countIsDynamic,\n identicalCapabilities: response.identicalCapabilities,\n individualEndpointCount: response.individualCount,\n aggregatedEndpointCount: response.aggregatedCount,\n };\n }\n }\n @validateArgs_MultiChannelCCAPI_getEndpointCapabilities()\n public async getEndpointCapabilities(endpoint: number): Promise<MaybeNotKnown<EndpointCapability>> {\n this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.CapabilityGet);\n const cc = new MultiChannelCCCapabilityGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n requestedEndpoint: endpoint,\n });\n const response = await this.host.sendCommand<MultiChannelCCCapabilityReport>(cc, this.commandOptions);\n if (response) {\n const generic = getGenericDeviceClass(response.genericDeviceClass);\n const specific = getSpecificDeviceClass(response.genericDeviceClass, response.specificDeviceClass);\n return {\n isDynamic: response.isDynamic,\n wasRemoved: response.wasRemoved,\n supportedCCs: response.supportedCCs,\n generic,\n specific,\n };\n }\n }\n @validateArgs_MultiChannelCCAPI_findEndpoints()\n public async findEndpoints(genericClass: number, specificClass: number): Promise<MaybeNotKnown<readonly number[]>> {\n this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.EndPointFind);\n const cc = new MultiChannelCCEndPointFind({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n genericClass,\n specificClass,\n });\n const response = await this.host.sendCommand<MultiChannelCCEndPointFindReport>(cc, this.commandOptions);\n return response?.foundEndpoints;\n }\n @validateArgs_MultiChannelCCAPI_getAggregatedMembers()\n public async getAggregatedMembers(endpoint: number): Promise<MaybeNotKnown<readonly number[]>> {\n this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.AggregatedMembersGet);\n const cc = new MultiChannelCCAggregatedMembersGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n requestedEndpoint: endpoint,\n });\n const response = await this.host.sendCommand<MultiChannelCCAggregatedMembersReport>(cc, this.commandOptions);\n return response?.members;\n }\n // Encapsulation is used internally and too frequently that we\n // want to pay the cost of validating each call\n // eslint-disable-next-line @zwave-js/ccapi-validate-args\n public async sendEncapsulated(options: MultiChannelCCCommandEncapsulationOptions): Promise<void> {\n this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.CommandEncapsulation);\n const cc = new MultiChannelCCCommandEncapsulation({\n nodeId: this.endpoint.nodeId,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_MultiChannelCCAPI_getEndpointCountV1()\n public async getEndpointCountV1(ccId: CommandClasses): Promise<MaybeNotKnown<number>> {\n this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.GetV1);\n const cc = new MultiChannelCCV1Get({\n nodeId: this.endpoint.nodeId,\n requestedCC: ccId,\n });\n const response = await this.host.sendCommand<MultiChannelCCV1Report>(cc, this.commandOptions);\n return response?.endpointCount;\n }\n // Encapsulation is used internally and too frequently that we\n // want to pay the cost of validating each call\n // eslint-disable-next-line @zwave-js/ccapi-validate-args\n public async sendEncapsulatedV1(encapsulated: CommandClass): Promise<void> {\n this.assertSupportsCommand(MultiChannelCommand, MultiChannelCommand.CommandEncapsulationV1);\n const cc = new MultiChannelCCV1CommandEncapsulation({\n nodeId: this.endpoint.nodeId,\n encapsulated,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n}\nexport interface EndpointCapability {\n generic: GenericDeviceClass;\n specific: SpecificDeviceClass;\n supportedCCs: CommandClasses[];\n isDynamic: boolean;\n wasRemoved: boolean;\n}\n@commandClass(CommandClasses[\"Multi Channel\"])\n@implementedVersion(4)\n@ccValues(MultiChannelCCValues)\nexport class MultiChannelCC extends CommandClass {\n declare ccCommand: MultiChannelCommand;\n /** Tests if a command targets a specific endpoint and thus requires encapsulation */\n public static requiresEncapsulation(cc: CommandClass): boolean {\n return (cc.endpointIndex !== 0\n && !(cc instanceof MultiChannelCCCommandEncapsulation)\n && !(cc instanceof MultiChannelCCV1CommandEncapsulation));\n }\n /** Encapsulates a command that targets a specific endpoint, with version 2+ of the Multi Channel CC */\n public static encapsulate(cc: CommandClass): MultiChannelCCCommandEncapsulation {\n const ret = new MultiChannelCCCommandEncapsulation({\n nodeId: cc.nodeId,\n encapsulated: cc,\n destination: cc.endpointIndex,\n });\n // Copy the encapsulation flags from the encapsulated command\n ret.encapsulationFlags = cc.encapsulationFlags;\n return ret;\n }\n /** Encapsulates a command that targets a specific endpoint, with version 1 of the Multi Channel CC */\n public static encapsulateV1(cc: CommandClass): MultiChannelCCV1CommandEncapsulation {\n const ret = new MultiChannelCCV1CommandEncapsulation({\n nodeId: cc.nodeId,\n endpointIndex: cc.endpointIndex,\n encapsulated: cc,\n });\n // Copy the encapsulation flags from the encapsulated command\n ret.encapsulationFlags = cc.encapsulationFlags;\n return ret;\n }\n public skipEndpointInterview(): boolean {\n // The endpoints are discovered by querying the root device\n return true;\n }\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const removeEndpoints = ctx.getDeviceConfig?.(node.id)?.compat\n ?.removeEndpoints;\n if (removeEndpoints === \"*\") {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Skipping ${this.ccName} interview b/c all endpoints are ignored by the device config file...`,\n direction: \"none\",\n });\n return;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // Special interview procedure for legacy nodes\n const ccVersion = getEffectiveCCVersion(ctx, this);\n if (ccVersion === 1)\n return this.interviewV1(ctx);\n const endpoint = node.getEndpoint(this.endpointIndex)!;\n const api = CCAPI.create(CommandClasses[\"Multi Channel\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n const valueDB = this.getValueDB(ctx);\n // Step 1: Retrieve general information about end points\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying device endpoint information...\",\n direction: \"outbound\",\n });\n const multiResponse = await api.getEndpoints();\n if (!multiResponse) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying device endpoint information timed out, aborting interview...\",\n level: \"warn\",\n });\n return this.throwMissingCriticalInterviewResponse();\n }\n let logMessage = `received response for device endpoints:\nendpoint count (individual): ${multiResponse.individualEndpointCount}\ncount is dynamic: ${multiResponse.isDynamicEndpointCount}\nidentical capabilities: ${multiResponse.identicalCapabilities}`;\n if (multiResponse.aggregatedEndpointCount != undefined) {\n logMessage +=\n `\\nendpoint count (aggregated): ${multiResponse.aggregatedEndpointCount}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n let allEndpoints: number[] = [];\n const addSequentialEndpoints = (): void => {\n for (let i = 1; i\n <= multiResponse.individualEndpointCount\n + (multiResponse.aggregatedEndpointCount ?? 0); i++) {\n allEndpoints.push(i);\n }\n };\n if (api.supportsCommand(MultiChannelCommand.EndPointFind)) {\n // Step 2a: Find all endpoints\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying all endpoints...\",\n direction: \"outbound\",\n });\n const foundEndpoints = await api.findEndpoints(0xff, 0xff);\n if (foundEndpoints)\n allEndpoints.push(...foundEndpoints);\n if (!allEndpoints.length) {\n // Create a sequential list of endpoints\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Endpoint query returned no results, assuming that endpoints are sequential`,\n direction: \"inbound\",\n });\n addSequentialEndpoints();\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received endpoints: ${allEndpoints\n .map(String)\n .join(\", \")}`,\n direction: \"inbound\",\n });\n }\n }\n else {\n // Step 2b: Assume that the endpoints are in sequential order\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `does not support EndPointFind, assuming that endpoints are sequential`,\n direction: \"none\",\n });\n addSequentialEndpoints();\n }\n // Step 2.5: remove ignored endpoints\n if (removeEndpoints?.length) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `The following endpoints are ignored through the config file: ${removeEndpoints.join(\", \")}`,\n direction: \"none\",\n });\n allEndpoints = allEndpoints.filter((e) => !removeEndpoints.includes(e));\n }\n // Step 3: Query endpoints\n let hasQueriedCapabilities = false;\n for (const endpoint of allEndpoints) {\n if (endpoint > multiResponse.individualEndpointCount\n && ccVersion >= 4) {\n // Find members of aggregated end point\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying members of aggregated endpoint #${endpoint}...`,\n direction: \"outbound\",\n });\n const members = await api.getAggregatedMembers(endpoint);\n if (members) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `aggregated endpoint #${endpoint} has members ${members\n .map(String)\n .join(\", \")}`,\n direction: \"inbound\",\n });\n }\n }\n // When the device reports identical capabilities for all endpoints,\n // we don't need to query them all\n if (multiResponse.identicalCapabilities && hasQueriedCapabilities) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `all endpoints identical, skipping capability query for endpoint #${endpoint}...`,\n direction: \"none\",\n });\n // copy the capabilities from the first endpoint\n const devClass = valueDB.getValue(MultiChannelCCValues.endpointDeviceClass.endpoint(allEndpoints[0]));\n valueDB.setValue(MultiChannelCCValues.endpointDeviceClass.endpoint(endpoint), devClass);\n const ep1Caps = valueDB.getValue<CommandClasses[]>(MultiChannelCCValues.endpointCCs.endpoint(allEndpoints[0]))!;\n valueDB.setValue(MultiChannelCCValues.endpointCCs.endpoint(endpoint), [...ep1Caps]);\n continue;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying capabilities for endpoint #${endpoint}...`,\n direction: \"outbound\",\n });\n const caps = await api.getEndpointCapabilities(endpoint);\n if (caps) {\n hasQueriedCapabilities = true;\n logMessage =\n `received response for endpoint capabilities (#${endpoint}):\ngeneric device class: ${caps.generic.label}\nspecific device class: ${caps.specific.label}\nis dynamic end point: ${caps.isDynamic}\nsupported CCs:`;\n for (const cc of caps.supportedCCs) {\n logMessage += `\\n \u00B7 ${getCCName(cc)}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Querying endpoint #${endpoint} capabilities timed out, aborting interview...`,\n level: \"warn\",\n });\n return this.throwMissingCriticalInterviewResponse();\n }\n }\n // Now that all endpoints have been interviewed, remember which ones are there\n // But first figure out if they seem unnecessary and if they do, which ones should be preserved\n if (!multiResponse.identicalCapabilities\n && areEndpointsUnnecessary(ctx, node.id, allEndpoints)) {\n const preserve = ctx.getDeviceConfig?.(node.id)?.compat\n ?.preserveEndpoints;\n if (!preserve) {\n allEndpoints = [];\n ctx.logNode(node.id, {\n message: `Endpoints seem unnecessary b/c they have different device classes, ignoring all...`,\n });\n }\n else if (preserve === \"*\") {\n // preserve all endpoints, do nothing\n ctx.logNode(node.id, {\n message: `Endpoints seem unnecessary, but are configured to be preserved.`,\n });\n }\n else {\n allEndpoints = allEndpoints.filter((ep) => preserve.includes(ep));\n ctx.logNode(node.id, {\n message: `Endpoints seem unnecessary, but endpoints ${allEndpoints.join(\", \")} are configured to be preserved.`,\n });\n }\n }\n this.setValue(ctx, MultiChannelCCValues.endpointIndizes, allEndpoints);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n private async interviewV1(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const removeEndpoints = ctx.getDeviceConfig?.(node.id)?.compat\n ?.removeEndpoints;\n if (removeEndpoints === \"*\") {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Skipping ${this.ccName} interview b/c all endpoints are ignored by the device config file...`,\n direction: \"none\",\n });\n return;\n }\n const api = CCAPI.create(CommandClasses[\"Multi Channel\"], ctx, endpoint);\n const valueDB = this.getValueDB(ctx);\n // V1 works the opposite way - we scan all CCs and remember how many\n // endpoints they have\n const supportedCCs = [...node.getCCs()]\n // Don't query CCs the node only controls\n .filter(([, info]) => info.isSupported)\n .map(([cc]) => cc)\n // Don't query CCs that want to skip the endpoint interview\n .filter((cc) => !CommandClass.createInstanceUnchecked(node, cc)?.skipEndpointInterview());\n const endpointCounts = new Map<CommandClasses, number>();\n for (const ccId of supportedCCs) {\n ctx.logNode(node.id, {\n message: `Querying endpoint count for CommandClass ${getCCName(ccId)}...`,\n direction: \"outbound\",\n });\n const endpointCount = await api.getEndpointCountV1(ccId);\n if (endpointCount != undefined) {\n endpointCounts.set(ccId, endpointCount);\n ctx.logNode(node.id, {\n message: `CommandClass ${getCCName(ccId)} has ${endpointCount} endpoints`,\n direction: \"inbound\",\n });\n }\n }\n // Store the collected information\n // We have only individual and no dynamic and no aggregated endpoints\n const numEndpoints = Math.max(...endpointCounts.values());\n this.setValue(ctx, MultiChannelCCValues.endpointCountIsDynamic, false);\n this.setValue(ctx, MultiChannelCCValues.aggregatedEndpointCount, 0);\n this.setValue(ctx, MultiChannelCCValues.individualEndpointCount, numEndpoints);\n // Since we queried all CCs separately, we can assume that all\n // endpoints have different capabilities\n this.setValue(ctx, MultiChannelCCValues.endpointsHaveIdenticalCapabilities, false);\n if (removeEndpoints?.length) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `The following endpoints are ignored through the config file: ${removeEndpoints.join(\", \")}`,\n direction: \"none\",\n });\n }\n const allEndpoints: number[] = [];\n for (let endpoint = 1; endpoint <= numEndpoints; endpoint++) {\n // Skip this endpoint if flagged for removal\n if (!removeEndpoints?.includes(endpoint)) {\n // Check which CCs exist on this endpoint\n const endpointCCs = [...endpointCounts.entries()]\n .filter(([, ccEndpoints]) => ccEndpoints >= endpoint)\n .map(([ccId]) => ccId);\n // And store it per endpoint\n valueDB.setValue(MultiChannelCCValues.endpointCCs.endpoint(endpoint), endpointCCs);\n allEndpoints.push(endpoint);\n }\n }\n this.setValue(ctx, MultiChannelCCValues.endpointIndizes, allEndpoints);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n}\n// @publicAPI\nexport interface MultiChannelCCEndPointReportOptions {\n countIsDynamic: boolean;\n identicalCapabilities: boolean;\n individualCount: number;\n aggregatedCount?: number;\n}\n@CCCommand(MultiChannelCommand.EndPointReport)\n@ccValueProperty(\"countIsDynamic\", MultiChannelCCValues.endpointCountIsDynamic)\n@ccValueProperty(\"identicalCapabilities\", MultiChannelCCValues.endpointsHaveIdenticalCapabilities)\n@ccValueProperty(\"individualCount\", MultiChannelCCValues.individualEndpointCount)\n@ccValueProperty(\"aggregatedCount\", MultiChannelCCValues.aggregatedEndpointCount)\nexport class MultiChannelCCEndPointReport extends MultiChannelCC {\n public constructor(options: WithAddress<MultiChannelCCEndPointReportOptions>) {\n super(options);\n this.countIsDynamic = options.countIsDynamic;\n this.identicalCapabilities = options.identicalCapabilities;\n this.individualCount = options.individualCount;\n this.aggregatedCount = options.aggregatedCount;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelCCEndPointReport {\n validatePayload(raw.payload.length >= 2);\n const countIsDynamic = !!(raw.payload[0] & 0b10000000);\n const identicalCapabilities = !!(raw.payload[0] & 0b01000000);\n const individualCount = raw.payload[1] & 0b01111111;\n let aggregatedCount: MaybeNotKnown<number>;\n if (raw.payload.length >= 3) {\n aggregatedCount = raw.payload[2] & 0b01111111;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n countIsDynamic,\n identicalCapabilities,\n individualCount,\n aggregatedCount,\n });\n }\n public countIsDynamic: boolean;\n public identicalCapabilities: boolean;\n public individualCount: number;\n public aggregatedCount: MaybeNotKnown<number>;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n (this.countIsDynamic ? 0b10000000 : 0)\n | (this.identicalCapabilities ? 0b01000000 : 0),\n this.individualCount & 0b01111111,\n this.aggregatedCount ?? 0,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"endpoint count (individual)\": this.individualCount,\n \"count is dynamic\": this.countIsDynamic,\n \"identical capabilities\": this.identicalCapabilities,\n };\n if (this.aggregatedCount != undefined) {\n message[\"endpoint count (aggregated)\"] = this.aggregatedCount;\n }\n const ret = {\n ...super.toLogEntry(ctx),\n message,\n };\n return ret;\n }\n}\n@CCCommand(MultiChannelCommand.EndPointGet)\n@expectedCCResponse(MultiChannelCCEndPointReport)\nexport class MultiChannelCCEndPointGet extends MultiChannelCC {\n}\n// @publicAPI\nexport interface MultiChannelCCCapabilityReportOptions {\n endpointIndex: number;\n genericDeviceClass: number;\n specificDeviceClass: number;\n supportedCCs: CommandClasses[];\n isDynamic: boolean;\n wasRemoved: boolean;\n}\n@CCCommand(MultiChannelCommand.CapabilityReport)\nexport class MultiChannelCCCapabilityReport extends MultiChannelCC implements ApplicationNodeInformation {\n public constructor(options: WithAddress<MultiChannelCCCapabilityReportOptions>) {\n super(options);\n this.endpointIndex = options.endpointIndex;\n this.genericDeviceClass = options.genericDeviceClass;\n this.specificDeviceClass = options.specificDeviceClass;\n this.supportedCCs = options.supportedCCs;\n this.isDynamic = options.isDynamic;\n this.wasRemoved = options.wasRemoved;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelCCCapabilityReport {\n // Only validate the bytes we expect to see here\n // parseApplicationNodeInformation does its own validation\n validatePayload(raw.payload.length >= 1);\n const endpointIndex = raw.payload[0] & 0b01111111;\n const isDynamic = !!(raw.payload[0] & 0b10000000);\n const NIF = parseApplicationNodeInformation(raw.payload.subarray(1));\n const genericDeviceClass = NIF.genericDeviceClass;\n const specificDeviceClass = NIF.specificDeviceClass;\n const supportedCCs: CommandClasses[] = NIF.supportedCCs;\n // Removal reports have very specific information\n const wasRemoved: boolean = isDynamic\n && genericDeviceClass === 0xff // \"Non-Interoperable\"\n && specificDeviceClass === 0x00;\n return new this({\n nodeId: ctx.sourceNodeId,\n endpointIndex,\n isDynamic,\n genericDeviceClass,\n specificDeviceClass,\n supportedCCs,\n wasRemoved,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const deviceClassValue = MultiChannelCCValues.endpointDeviceClass;\n const ccsValue = MultiChannelCCValues.endpointCCs;\n if (this.wasRemoved) {\n this.removeValue(ctx, deviceClassValue);\n this.removeValue(ctx, ccsValue);\n }\n else {\n this.setValue(ctx, deviceClassValue, {\n generic: this.genericDeviceClass,\n specific: this.specificDeviceClass,\n });\n this.setValue(ctx, ccsValue, this.supportedCCs);\n }\n return true;\n }\n // The endpoint index must be overridden to be able to attribute the information to the correct endpoint\n public readonly genericDeviceClass: number;\n public readonly specificDeviceClass: number;\n public readonly supportedCCs: CommandClasses[];\n public readonly isDynamic: boolean;\n public readonly wasRemoved: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [\n (this.endpointIndex & 0b01111111)\n | (this.isDynamic ? 0b10000000 : 0),\n ],\n encodeApplicationNodeInformation(this),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"endpoint index\": this.endpointIndex,\n \"generic device class\": getGenericDeviceClass(this.genericDeviceClass).label,\n \"specific device class\": getSpecificDeviceClass(this.genericDeviceClass, this.specificDeviceClass).label,\n \"is dynamic end point\": this.isDynamic,\n \"supported CCs\": this.supportedCCs\n .map((cc) => `\\n\u00B7 ${getCCName(cc)}`)\n .join(\"\"),\n },\n };\n }\n}\n// @publicAPI\nexport interface MultiChannelCCCapabilityGetOptions {\n requestedEndpoint: number;\n}\nfunction testResponseForMultiChannelCapabilityGet(sent: MultiChannelCCCapabilityGet, received: MultiChannelCCCapabilityReport) {\n return received.endpointIndex === sent.requestedEndpoint;\n}\n@CCCommand(MultiChannelCommand.CapabilityGet)\n@expectedCCResponse(MultiChannelCCCapabilityReport, testResponseForMultiChannelCapabilityGet)\nexport class MultiChannelCCCapabilityGet extends MultiChannelCC {\n public constructor(options: WithAddress<MultiChannelCCCapabilityGetOptions>) {\n super(options);\n this.requestedEndpoint = options.requestedEndpoint;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelCCCapabilityGet {\n validatePayload(raw.payload.length >= 1);\n const requestedEndpoint = raw.payload[0] & 0b01111111;\n return new this({\n nodeId: ctx.sourceNodeId,\n requestedEndpoint,\n });\n }\n public requestedEndpoint: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.requestedEndpoint & 0b01111111]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { endpoint: this.requestedEndpoint },\n };\n }\n}\n// @publicAPI\nexport interface MultiChannelCCEndPointFindReportOptions {\n genericClass: number;\n specificClass: number;\n foundEndpoints: number[];\n reportsToFollow: number;\n}\n@CCCommand(MultiChannelCommand.EndPointFindReport)\nexport class MultiChannelCCEndPointFindReport extends MultiChannelCC {\n public constructor(options: WithAddress<MultiChannelCCEndPointFindReportOptions>) {\n super(options);\n this.genericClass = options.genericClass;\n this.specificClass = options.specificClass;\n this.foundEndpoints = options.foundEndpoints;\n this.reportsToFollow = options.reportsToFollow;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelCCEndPointFindReport {\n validatePayload(raw.payload.length >= 3);\n const reportsToFollow = raw.payload[0];\n const genericClass = raw.payload[1];\n const specificClass = raw.payload[2];\n // Some devices omit the endpoint list although that is not allowed in the specs\n // therefore don't validatePayload here.\n const foundEndpoints = [...raw.payload.subarray(3)]\n .map((e) => e & 0b01111111)\n .filter((e) => e !== 0);\n return new this({\n nodeId: ctx.sourceNodeId,\n reportsToFollow,\n genericClass,\n specificClass,\n foundEndpoints,\n });\n }\n public genericClass: number;\n public specificClass: number;\n public foundEndpoints: number[];\n public reportsToFollow: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [\n this.reportsToFollow,\n this.genericClass,\n this.specificClass,\n ],\n Bytes.from(this.foundEndpoints.map((e) => e & 0b01111111)),\n ]);\n return super.serialize(ctx);\n }\n public getPartialCCSessionId(): Record<string, any> | undefined {\n // Distinguish sessions by the requested device classes\n return {\n genericClass: this.genericClass,\n specificClass: this.specificClass,\n };\n }\n public expectMoreMessages(): boolean {\n return this.reportsToFollow > 0;\n }\n public mergePartialCCs(partials: MultiChannelCCEndPointFindReport[], _ctx: CCParsingContext): Promise<void> {\n // Concat the list of end points\n this.foundEndpoints = [...partials, this]\n .map((report) => report.foundEndpoints)\n .reduce((prev, cur) => prev.concat(...cur), []);\n return Promise.resolve();\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"generic device class\": getGenericDeviceClass(this.genericClass).label,\n \"specific device class\": getSpecificDeviceClass(this.genericClass, this.specificClass).label,\n \"found endpoints\": this.foundEndpoints.join(\", \"),\n \"# of reports to follow\": this.reportsToFollow,\n },\n };\n }\n}\n// @publicAPI\nexport interface MultiChannelCCEndPointFindOptions {\n genericClass: number;\n specificClass: number;\n}\n@CCCommand(MultiChannelCommand.EndPointFind)\n@expectedCCResponse(MultiChannelCCEndPointFindReport)\nexport class MultiChannelCCEndPointFind extends MultiChannelCC {\n public constructor(options: WithAddress<MultiChannelCCEndPointFindOptions>) {\n super(options);\n this.genericClass = options.genericClass;\n this.specificClass = options.specificClass;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelCCEndPointFind {\n validatePayload(raw.payload.length >= 2);\n const genericClass = raw.payload[0];\n const specificClass = raw.payload[1];\n return new this({\n nodeId: ctx.sourceNodeId,\n genericClass,\n specificClass,\n });\n }\n public genericClass: number;\n public specificClass: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.genericClass, this.specificClass]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"generic device class\": getGenericDeviceClass(this.genericClass).label,\n \"specific device class\": getSpecificDeviceClass(this.genericClass, this.specificClass).label,\n },\n };\n }\n}\n// @publicAPI\nexport interface MultiChannelCCAggregatedMembersReportOptions {\n aggregatedEndpointIndex: number;\n members: number[];\n}\n@CCCommand(MultiChannelCommand.AggregatedMembersReport)\n@ccValueProperty(\"members\", MultiChannelCCValues.aggregatedEndpointMembers, (self) => [self.aggregatedEndpointIndex])\nexport class MultiChannelCCAggregatedMembersReport extends MultiChannelCC {\n public constructor(options: WithAddress<MultiChannelCCAggregatedMembersReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.aggregatedEndpointIndex = options.aggregatedEndpointIndex;\n this.members = options.members;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelCCAggregatedMembersReport {\n validatePayload(raw.payload.length >= 2);\n const aggregatedEndpointIndex = raw.payload[0] & 127;\n const bitMaskLength = raw.payload[1];\n validatePayload(raw.payload.length >= 2 + bitMaskLength);\n const bitMask = raw.payload.subarray(2, 2 + bitMaskLength);\n const members = parseBitMask(bitMask);\n return new this({\n nodeId: ctx.sourceNodeId,\n aggregatedEndpointIndex,\n members,\n });\n }\n public readonly aggregatedEndpointIndex: number;\n public readonly members: readonly number[];\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"aggregated endpoint\": this.aggregatedEndpointIndex,\n members: this.members.join(\", \"),\n },\n };\n }\n}\n// @publicAPI\nexport interface MultiChannelCCAggregatedMembersGetOptions {\n requestedEndpoint: number;\n}\n@CCCommand(MultiChannelCommand.AggregatedMembersGet)\n@expectedCCResponse(MultiChannelCCAggregatedMembersReport)\nexport class MultiChannelCCAggregatedMembersGet extends MultiChannelCC {\n public constructor(options: WithAddress<MultiChannelCCAggregatedMembersGetOptions>) {\n super(options);\n this.requestedEndpoint = options.requestedEndpoint;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): MultiChannelCCAggregatedMembersGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new MultiChannelCCAggregatedMembersGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public requestedEndpoint: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.requestedEndpoint & 127]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { endpoint: this.requestedEndpoint },\n };\n }\n}\ntype MultiChannelCCDestination = number | (1 | 2 | 3 | 4 | 5 | 6 | 7)[];\n// @publicAPI\nexport interface MultiChannelCCCommandEncapsulationOptions {\n encapsulated: CommandClass;\n destination: MultiChannelCCDestination;\n}\n// SDS13783: A receiving node MAY respond to a Multi Channel encapsulated command if the Destination\n// End Point field specifies a single End Point. In that case, the response MUST be Multi Channel\n// encapsulated.\n// A receiving node MUST NOT respond to a Multi Channel encapsulated command if the\n// Destination End Point field specifies multiple End Points via bit mask addressing.\nfunction getCCResponseForCommandEncapsulation(ctx: GetNode<NodeId & SupportsCC>, sent: MultiChannelCCCommandEncapsulation) {\n if (typeof sent.destination === \"number\"\n && sent.encapsulated.expectsCCResponse(ctx)) {\n // Allow both versions of the encapsulation command\n // Our implementation check is a bit too strict, so change the return type\n return [\n MultiChannelCCCommandEncapsulation,\n MultiChannelCCV1CommandEncapsulation,\n ] as any as (typeof MultiChannelCCCommandEncapsulation)[];\n }\n}\nfunction testResponseForCommandEncapsulation(sent: MultiChannelCCCommandEncapsulation, received: MultiChannelCCCommandEncapsulation | MultiChannelCCV1CommandEncapsulation) {\n if (typeof sent.destination === \"number\"\n && sent.destination === received.endpointIndex) {\n return \"checkEncapsulated\";\n }\n return false;\n}\n@CCCommand(MultiChannelCommand.CommandEncapsulation)\n@expectedCCResponse(getCCResponseForCommandEncapsulation, testResponseForCommandEncapsulation)\nexport class MultiChannelCCCommandEncapsulation extends MultiChannelCC {\n public constructor(options: WithAddress<MultiChannelCCCommandEncapsulationOptions>) {\n super(options);\n this.encapsulated = options.encapsulated;\n this.encapsulated.encapsulatingCC = this as any;\n // Propagate the endpoint index all the way down\n let cur: CommandClass = this;\n while (cur) {\n if (isMultiEncapsulatingCommandClass(cur)) {\n for (const cc of cur.encapsulated) {\n cc.endpointIndex = this.endpointIndex;\n }\n break;\n }\n else if (isEncapsulatingCommandClass(cur)) {\n cur.encapsulated.endpointIndex = this.endpointIndex;\n cur = cur.encapsulated;\n }\n else {\n break;\n }\n }\n this.destination = options.destination;\n }\n public static async from(raw: CCRaw, ctx: CCParsingContext): Promise<MultiChannelCCCommandEncapsulation> {\n validatePayload(raw.payload.length >= 2);\n let endpointIndex: number;\n let destination: MultiChannelCCDestination;\n if (ctx.getDeviceConfig?.(ctx.sourceNodeId)\n ?.compat?.treatDestinationEndpointAsSource) {\n // This device incorrectly uses the destination field to indicate the source endpoint\n endpointIndex = raw.payload[1] & 127;\n destination = 0;\n }\n else {\n // Parse normally\n endpointIndex = raw.payload[0] & 127;\n const isBitMask = !!(raw.payload[1] & 128);\n destination = raw.payload[1] & 127;\n if (isBitMask) {\n destination = parseBitMask(Bytes.from([destination])) as any;\n }\n }\n // No need to validate further, each CC does it for itself\n const encapsulated = await CommandClass.parse(raw.payload.subarray(2), ctx);\n return new this({\n nodeId: ctx.sourceNodeId,\n endpointIndex,\n destination,\n encapsulated,\n });\n }\n public encapsulated: CommandClass;\n /** The destination end point (0-127) or an array of destination end points (1-7) */\n public destination: MultiChannelCCDestination;\n public async serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (ctx.getDeviceConfig?.(this.nodeId as number)?.compat\n ?.treatDestinationEndpointAsSource) {\n // This device incorrectly responds from the endpoint we've passed as our source endpoint\n if (typeof this.destination === \"number\") {\n this.endpointIndex = this.destination;\n }\n }\n const destination = typeof this.destination === \"number\"\n // The destination is a single number\n ? this.destination & 127\n // The destination is a bit mask\n : encodeBitMask(this.destination, 7)[0] | 128;\n this.payload = Bytes.concat([\n [this.endpointIndex & 127, destination],\n await this.encapsulated.serialize(ctx),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n source: this.endpointIndex,\n destination: typeof this.destination === \"number\"\n ? this.destination\n : this.destination.join(\", \"),\n },\n };\n }\n protected computeEncapsulationOverhead(): number {\n // Multi Channel CC adds two bytes for the source and destination endpoint\n return super.computeEncapsulationOverhead() + 2;\n }\n}\n// @publicAPI\nexport interface MultiChannelCCV1ReportOptions {\n requestedCC: CommandClasses;\n endpointCount: number;\n}\n@CCCommand(MultiChannelCommand.ReportV1)\nexport class MultiChannelCCV1Report extends MultiChannelCC {\n public constructor(options: WithAddress<MultiChannelCCV1ReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.requestedCC = options.requestedCC;\n this.endpointCount = options.endpointCount;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelCCV1Report {\n // V1 won't be extended in the future, so do an exact check\n validatePayload(raw.payload.length === 2);\n const requestedCC: CommandClasses = raw.payload[0];\n const endpointCount = raw.payload[1];\n return new this({\n nodeId: ctx.sourceNodeId,\n requestedCC,\n endpointCount,\n });\n }\n public readonly requestedCC: CommandClasses;\n public readonly endpointCount: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.requestedCC,\n this.endpointCount,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n CC: getCCName(this.requestedCC),\n \"# of endpoints\": this.endpointCount,\n },\n };\n }\n}\nfunction testResponseForMultiChannelV1Get(sent: MultiChannelCCV1Get, received: MultiChannelCCV1Report) {\n return sent.requestedCC === received.requestedCC;\n}\n// @publicAPI\nexport interface MultiChannelCCV1GetOptions {\n requestedCC: CommandClasses;\n}\n@CCCommand(MultiChannelCommand.GetV1)\n@expectedCCResponse(MultiChannelCCV1Report, testResponseForMultiChannelV1Get)\nexport class MultiChannelCCV1Get extends MultiChannelCC {\n public constructor(options: WithAddress<MultiChannelCCV1GetOptions>) {\n super(options);\n this.requestedCC = options.requestedCC;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MultiChannelCCV1Get {\n // V1 won't be extended in the future, so do an exact check\n validatePayload(raw.payload.length === 1);\n const requestedCC: CommandClasses = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n requestedCC,\n });\n }\n public requestedCC: CommandClasses;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.requestedCC]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { CC: getCCName(this.requestedCC) },\n };\n }\n}\nfunction getResponseForV1CommandEncapsulation(ctx: GetNode<NodeId & SupportsCC>, sent: MultiChannelCCV1CommandEncapsulation) {\n if (sent.encapsulated.expectsCCResponse(ctx)) {\n return MultiChannelCCV1CommandEncapsulation;\n }\n}\nfunction testResponseForV1CommandEncapsulation(sent: MultiChannelCCV1CommandEncapsulation, received: MultiChannelCCV1CommandEncapsulation) {\n if (sent.endpointIndex === received.endpointIndex) {\n return \"checkEncapsulated\";\n }\n return false;\n}\n// @publicAPI\nexport interface MultiChannelCCV1CommandEncapsulationOptions {\n encapsulated: CommandClass;\n}\n@CCCommand(MultiChannelCommand.CommandEncapsulationV1)\n@expectedCCResponse(getResponseForV1CommandEncapsulation, testResponseForV1CommandEncapsulation)\nexport class MultiChannelCCV1CommandEncapsulation extends MultiChannelCC {\n public constructor(options: WithAddress<MultiChannelCCV1CommandEncapsulationOptions>) {\n super(options);\n this.encapsulated = options.encapsulated;\n this.encapsulated.encapsulatingCC = this as any;\n // Propagate the endpoint index all the way down\n let cur: CommandClass = this;\n while (cur) {\n if (isMultiEncapsulatingCommandClass(cur)) {\n for (const cc of cur.encapsulated) {\n cc.endpointIndex = this.endpointIndex;\n }\n break;\n }\n else if (isEncapsulatingCommandClass(cur)) {\n cur.encapsulated.endpointIndex = this.endpointIndex;\n cur = cur.encapsulated;\n }\n else {\n break;\n }\n }\n }\n public static async from(raw: CCRaw, ctx: CCParsingContext): Promise<MultiChannelCCV1CommandEncapsulation> {\n validatePayload(raw.payload.length >= 1);\n const endpointIndex = raw.payload[0];\n // Some devices send invalid reports, i.e. MultiChannelCCV1CommandEncapsulation, but with V2+ binary format\n // This would be a NoOp CC, but it makes no sense to encapsulate that.\n const isV2withV1Header = raw.payload.length >= 2\n && raw.payload[1] === 0x00;\n // No need to validate further, each CC does it for itself\n const encapsulated = await CommandClass.parse(raw.payload.subarray(isV2withV1Header ? 2 : 1), ctx);\n return new this({\n nodeId: ctx.sourceNodeId,\n endpointIndex,\n encapsulated,\n });\n }\n public encapsulated!: CommandClass;\n public async serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.endpointIndex],\n await this.encapsulated.serialize(ctx),\n ]);\n return super.serialize(ctx);\n }\n protected computeEncapsulationOverhead(): number {\n // Multi Channel CC V1 adds one byte for the endpoint index\n return super.computeEncapsulationOverhead() + 1;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { source: this.endpointIndex },\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["endpoint"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/cc/MultiCommandCC._validateArgs.ts"],
4
- "sourcesContent": [null],
3
+ "sources": ["../../../src_gen/cc/MultiCommandCC._validateArgs.ts"],
4
+ "sourcesContent": ["import { CommandClass } from \"../lib/CommandClass.js\";\nimport * as v from \"@zwave-js/core/validation\";\n\nexport function validateArgs_MultiCommandCCAPI_send() {\n\treturn <T extends Function>(__decoratedMethod: T, { kind }: ClassMethodDecoratorContext): T | void => {\n\t\tif (kind === \"method\") {\n\t\t\treturn function send(this: any, commands: unknown) {\n\t\t\t\tv.assert(\n\t\t\t\t\tv.array({ kind: \"parameter\", name: \"commands\" }, 'CommandClass', v.class({ kind: \"item\", name: \"commands\" }, \"CommandClass\", CommandClass))(commands),\n\t\t\t\t);\n\t\t\t\treturn __decoratedMethod.call(this, commands);\n\t\t\t} as unknown as T;\n\t\t}\n\t};\n}"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,0BAA6B;AAC7B,QAAmB;AAEb,SAAU,sCAAmC;AAClD,SAAO,CAAqB,mBAAsB,EAAE,KAAI,MAA6C;AACpG,QAAI,SAAS,UAAU;AACtB,aAAO,gCAAS,KAAgB,UAAiB;AAChD,UAAE,OACD,EAAE,MAAM,EAAE,MAAM,aAAa,MAAM,WAAU,GAAI,gBAAgB,EAAE,MAAM,EAAE,MAAM,QAAQ,MAAM,WAAU,GAAI,gBAAgB,gCAAY,CAAC,EAAE,QAAQ,CAAC;AAEtJ,eAAO,kBAAkB,KAAK,MAAM,QAAQ;MAC7C,GALO;IAMR;EACD;AACD;AAXgB;",
6
6
  "names": []
7
7
  }
@@ -1,9 +1,9 @@
1
- import type { CCEncodingContext, CCParsingContext } from "@zwave-js/cc";
2
1
  import { type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type WithAddress } from "@zwave-js/core";
3
2
  import { Bytes } from "@zwave-js/shared";
4
3
  import { CCAPI } from "../lib/API.js";
5
4
  import { type CCRaw, CommandClass } from "../lib/CommandClass.js";
6
5
  import { MultiCommandCommand } from "../lib/_Types.js";
6
+ import type { CCEncodingContext, CCParsingContext } from "../lib/traits.js";
7
7
  export declare class MultiCommandCCAPI extends CCAPI {
8
8
  supportsCommand(_cmd: MultiCommandCommand): MaybeNotKnown<boolean>;
9
9
  send(commands: CommandClass[]): Promise<void>;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/cc/MultiCommandCC.ts"],
4
- "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\tEncapsulationFlags,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\ttype WithAddress,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass } from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tcommandClass,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\nimport { MultiCommandCommand } from \"../lib/_Types.js\";\n\n// TODO: Handle this command when received\n\n// @noSetValueAPI This CC has no set-type commands\n// @noInterview This CC only has a single encapsulation command\n\n@API(CommandClasses[\"Multi Command\"])\nexport class MultiCommandCCAPI extends CCAPI {\n\tpublic supportsCommand(_cmd: MultiCommandCommand): MaybeNotKnown<boolean> {\n\t\t// switch (cmd) {\n\t\t// \tcase MultiCommandCommand.CommandEncapsulation:\n\t\treturn true; // This is mandatory\n\t\t// }\n\t\t// return super.supportsCommand(cmd);\n\t}\n\n\t@validateArgs()\n\tpublic async send(commands: CommandClass[]): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultiCommandCommand,\n\t\t\tMultiCommandCommand.CommandEncapsulation,\n\t\t);\n\n\t\t// FIXME: This should not be on the API but rather on the applHost level\n\t\tconst cc = new MultiCommandCCCommandEncapsulation({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tencapsulated: commands,\n\t\t});\n\t\tcc.endpointIndex = this.endpoint.index;\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses[\"Multi Command\"])\n@implementedVersion(1)\nexport class MultiCommandCC extends CommandClass {\n\tdeclare ccCommand: MultiCommandCommand;\n\n\t/** Tests if a command targets a specific endpoint and thus requires encapsulation */\n\tpublic static requiresEncapsulation(cc: CommandClass): boolean {\n\t\treturn (\n\t\t\tcc.endpointIndex !== 0\n\t\t\t&& !(cc instanceof MultiCommandCCCommandEncapsulation)\n\t\t);\n\t}\n\n\tpublic static encapsulate(\n\t\tCCs: CommandClass[],\n\t): MultiCommandCCCommandEncapsulation {\n\t\tconst ret = new MultiCommandCCCommandEncapsulation({\n\t\t\tnodeId: CCs[0].nodeId,\n\t\t\tencapsulated: CCs,\n\t\t});\n\n\t\t// Copy the \"sum\" of the encapsulation flags from the encapsulated CCs\n\t\tfor (\n\t\t\tconst flag of [\n\t\t\t\tEncapsulationFlags.Supervision,\n\t\t\t\tEncapsulationFlags.Security,\n\t\t\t\tEncapsulationFlags.CRC16,\n\t\t\t] as const\n\t\t) {\n\t\t\tret.toggleEncapsulationFlag(\n\t\t\t\tflag,\n\t\t\t\tCCs.some((cc) => cc.encapsulationFlags & flag),\n\t\t\t);\n\t\t}\n\n\t\treturn ret;\n\t}\n}\n\n// @publicAPI\nexport interface MultiCommandCCCommandEncapsulationOptions {\n\tencapsulated: CommandClass[];\n}\n\n@CCCommand(MultiCommandCommand.CommandEncapsulation)\n// When sending commands encapsulated in this CC, responses to GET-type commands likely won't be encapsulated\nexport class MultiCommandCCCommandEncapsulation extends MultiCommandCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultiCommandCCCommandEncapsulationOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.encapsulated = options.encapsulated;\n\t\tfor (const cc of options.encapsulated) {\n\t\t\tcc.encapsulatingCC = this as any;\n\t\t\t// Multi Command CC is inside Multi Channel CC, so the endpoint must be copied\n\t\t\tcc.endpointIndex = this.endpointIndex;\n\t\t}\n\t}\n\n\tpublic static async from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): Promise<MultiCommandCCCommandEncapsulation> {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst numCommands = raw.payload[0];\n\t\tconst encapsulated: CommandClass[] = [];\n\t\tlet offset = 1;\n\t\tfor (let i = 0; i < numCommands; i++) {\n\t\t\tvalidatePayload(raw.payload.length >= offset + 1);\n\t\t\tconst cmdLength = raw.payload[offset];\n\t\t\tvalidatePayload(raw.payload.length >= offset + 1 + cmdLength);\n\t\t\tencapsulated.push(\n\t\t\t\tawait CommandClass.parse(\n\t\t\t\t\traw.payload.subarray(\n\t\t\t\t\t\toffset + 1,\n\t\t\t\t\t\toffset + 1 + cmdLength,\n\t\t\t\t\t),\n\t\t\t\t\tctx,\n\t\t\t\t),\n\t\t\t);\n\t\t\toffset += 1 + cmdLength;\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tencapsulated,\n\t\t});\n\t}\n\n\tpublic encapsulated: CommandClass[];\n\n\tpublic async serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst buffers: Bytes[] = [];\n\t\tbuffers.push(Bytes.from([this.encapsulated.length]));\n\t\tfor (const cmd of this.encapsulated) {\n\t\t\tconst cmdBuffer = await cmd.serialize(ctx);\n\t\t\tbuffers.push(Bytes.from([cmdBuffer.length]));\n\t\t\tbuffers.push(cmdBuffer);\n\t\t}\n\t\tthis.payload = Bytes.concat(buffers);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\t// Hide the default payload line\n\t\t\tmessage: undefined,\n\t\t};\n\t}\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../../../src_gen/cc/MultiCommandCC.ts"],
4
+ "sourcesContent": ["import * as __validateArgs from \"./MultiCommandCC._validateArgs.js\";\nconst { validateArgs_MultiCommandCCAPI_send } = __validateArgs;\nimport { CommandClasses, EncapsulationFlags, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type WithAddress, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\nimport { CCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, commandClass, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { MultiCommandCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\n// TODO: Handle this command when received\n// @noSetValueAPI This CC has no set-type commands\n// @noInterview This CC only has a single encapsulation command\n@API(CommandClasses[\"Multi Command\"])\nexport class MultiCommandCCAPI extends CCAPI {\n public supportsCommand(_cmd: MultiCommandCommand): MaybeNotKnown<boolean> {\n // switch (cmd) {\n // \tcase MultiCommandCommand.CommandEncapsulation:\n return true; // This is mandatory\n // }\n // return super.supportsCommand(cmd);\n }\n @validateArgs_MultiCommandCCAPI_send()\n public async send(commands: CommandClass[]): Promise<void> {\n this.assertSupportsCommand(MultiCommandCommand, MultiCommandCommand.CommandEncapsulation);\n // FIXME: This should not be on the API but rather on the applHost level\n const cc = new MultiCommandCCCommandEncapsulation({\n nodeId: this.endpoint.nodeId,\n encapsulated: commands,\n });\n cc.endpointIndex = this.endpoint.index;\n await this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Multi Command\"])\n@implementedVersion(1)\nexport class MultiCommandCC extends CommandClass {\n declare ccCommand: MultiCommandCommand;\n /** Tests if a command targets a specific endpoint and thus requires encapsulation */\n public static requiresEncapsulation(cc: CommandClass): boolean {\n return (cc.endpointIndex !== 0\n && !(cc instanceof MultiCommandCCCommandEncapsulation));\n }\n public static encapsulate(CCs: CommandClass[]): MultiCommandCCCommandEncapsulation {\n const ret = new MultiCommandCCCommandEncapsulation({\n nodeId: CCs[0].nodeId,\n encapsulated: CCs,\n });\n // Copy the \"sum\" of the encapsulation flags from the encapsulated CCs\n for (const flag of [\n EncapsulationFlags.Supervision,\n EncapsulationFlags.Security,\n EncapsulationFlags.CRC16,\n ] as const) {\n ret.toggleEncapsulationFlag(flag, CCs.some((cc) => cc.encapsulationFlags & flag));\n }\n return ret;\n }\n}\n// @publicAPI\nexport interface MultiCommandCCCommandEncapsulationOptions {\n encapsulated: CommandClass[];\n}\n@CCCommand(MultiCommandCommand.CommandEncapsulation)\n// When sending commands encapsulated in this CC, responses to GET-type commands likely won't be encapsulated\nexport class MultiCommandCCCommandEncapsulation extends MultiCommandCC {\n public constructor(options: WithAddress<MultiCommandCCCommandEncapsulationOptions>) {\n super(options);\n this.encapsulated = options.encapsulated;\n for (const cc of options.encapsulated) {\n cc.encapsulatingCC = this as any;\n // Multi Command CC is inside Multi Channel CC, so the endpoint must be copied\n cc.endpointIndex = this.endpointIndex;\n }\n }\n public static async from(raw: CCRaw, ctx: CCParsingContext): Promise<MultiCommandCCCommandEncapsulation> {\n validatePayload(raw.payload.length >= 1);\n const numCommands = raw.payload[0];\n const encapsulated: CommandClass[] = [];\n let offset = 1;\n for (let i = 0; i < numCommands; i++) {\n validatePayload(raw.payload.length >= offset + 1);\n const cmdLength = raw.payload[offset];\n validatePayload(raw.payload.length >= offset + 1 + cmdLength);\n encapsulated.push(await CommandClass.parse(raw.payload.subarray(offset + 1, offset + 1 + cmdLength), ctx));\n offset += 1 + cmdLength;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n encapsulated,\n });\n }\n public encapsulated: CommandClass[];\n public async serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const buffers: Bytes[] = [];\n buffers.push(Bytes.from([this.encapsulated.length]));\n for (const cmd of this.encapsulated) {\n const cmdBuffer = await cmd.serialize(ctx);\n buffers.push(Bytes.from([cmdBuffer.length]));\n buffers.push(cmdBuffer);\n }\n this.payload = Bytes.concat(buffers);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n // Hide the default payload line\n message: undefined,\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/cc/MultilevelSensorCC._validateArgs.ts"],
4
- "sourcesContent": [null],
3
+ "sources": ["../../../src_gen/cc/MultilevelSensorCC._validateArgs.ts"],
4
+ "sourcesContent": ["import * as v from \"@zwave-js/core/validation\";\n\nexport function validateArgs_MultilevelSensorCCAPI_get() {\n\treturn <T extends Function>(__decoratedMethod: T, { kind }: ClassMethodDecoratorContext): T | void => {\n\t\tif (kind === \"method\") {\n\t\t\treturn function get(this: any, sensorType: unknown, scale: unknown) {\n\t\t\t\tv.assert(\n\t\t\t\t\tv.optional({ kind: \"parameter\", name: \"sensorType\" }, v.primitive({ kind: \"parameter\", name: \"sensorType\" }, \"number\"))(sensorType),\n\n\t\t\t\t\tv.optional({ kind: \"parameter\", name: \"scale\" }, v.primitive({ kind: \"parameter\", name: \"scale\" }, \"number\"))(scale),\n\t\t\t\t);\n\t\t\t\treturn __decoratedMethod.call(this, sensorType, scale);\n\t\t\t} as unknown as T;\n\t\t}\n\t};\n}\n\nexport function validateArgs_MultilevelSensorCCAPI_getSupportedScales() {\n\treturn <T extends Function>(__decoratedMethod: T, { kind }: ClassMethodDecoratorContext): T | void => {\n\t\tif (kind === \"method\") {\n\t\t\treturn function getSupportedScales(this: any, sensorType: unknown) {\n\t\t\t\tv.assert(\n\t\t\t\t\tv.primitive({ kind: \"parameter\", name: \"sensorType\" }, \"number\")(sensorType),\n\t\t\t\t);\n\t\t\t\treturn __decoratedMethod.call(this, sensorType);\n\t\t\t} as unknown as T;\n\t\t}\n\t};\n}\n\nexport function validateArgs_MultilevelSensorCCAPI_sendReport() {\n\treturn <T extends Function>(__decoratedMethod: T, { kind }: ClassMethodDecoratorContext): T | void => {\n\t\tif (kind === \"method\") {\n\t\t\treturn function sendReport(this: any, sensorType: unknown, scale: unknown, value: unknown) {\n\t\t\t\tv.assert(\n\t\t\t\t\tv.primitive({ kind: \"parameter\", name: \"sensorType\" }, \"number\")(sensorType),\n\n\t\t\t\t\tv.oneOf({ kind: \"parameter\", name: \"scale\" }, undefined, v.primitive({ kind: \"parameter\", name: \"scale\" }, \"number\"), v.object({ kind: \"parameter\", name: \"scale\" }, 'Scale', { \"key\": v.primitive({ kind: \"property\", name: \"key\" }, \"number\") }))(scale),\n\n\t\t\t\t\tv.primitive({ kind: \"parameter\", name: \"value\" }, \"number\")(value),\n\t\t\t\t);\n\t\t\t\treturn __decoratedMethod.call(this, sensorType, scale, value);\n\t\t\t} as unknown as T;\n\t\t}\n\t};\n}"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;AAAA,QAAmB;AAEb,SAAU,yCAAsC;AACrD,SAAO,CAAqB,mBAAsB,EAAE,KAAI,MAA6C;AACpG,QAAI,SAAS,UAAU;AACtB,aAAO,gCAAS,IAAe,YAAqB,OAAc;AACjE,UAAE,OACD,EAAE,SAAS,EAAE,MAAM,aAAa,MAAM,aAAY,GAAI,EAAE,UAAU,EAAE,MAAM,aAAa,MAAM,aAAY,GAAI,QAAQ,CAAC,EAAE,UAAU,GAElI,EAAE,SAAS,EAAE,MAAM,aAAa,MAAM,QAAO,GAAI,EAAE,UAAU,EAAE,MAAM,aAAa,MAAM,QAAO,GAAI,QAAQ,CAAC,EAAE,KAAK,CAAC;AAErH,eAAO,kBAAkB,KAAK,MAAM,YAAY,KAAK;MACtD,GAPO;IAQR;EACD;AACD;AAbgB;AAeV,SAAU,wDAAqD;AACpE,SAAO,CAAqB,mBAAsB,EAAE,KAAI,MAA6C;AACpG,QAAI,SAAS,UAAU;AACtB,aAAO,gCAAS,mBAA8B,YAAmB;AAChE,UAAE,OACD,EAAE,UAAU,EAAE,MAAM,aAAa,MAAM,aAAY,GAAI,QAAQ,EAAE,UAAU,CAAC;AAE7E,eAAO,kBAAkB,KAAK,MAAM,UAAU;MAC/C,GALO;IAMR;EACD;AACD;AAXgB;AAaV,SAAU,gDAA6C;AAC5D,SAAO,CAAqB,mBAAsB,EAAE,KAAI,MAA6C;AACpG,QAAI,SAAS,UAAU;AACtB,aAAO,gCAAS,WAAsB,YAAqB,OAAgB,OAAc;AACxF,UAAE,OACD,EAAE,UAAU,EAAE,MAAM,aAAa,MAAM,aAAY,GAAI,QAAQ,EAAE,UAAU,GAE3E,EAAE,MAAM,EAAE,MAAM,aAAa,MAAM,QAAO,GAAI,QAAW,EAAE,UAAU,EAAE,MAAM,aAAa,MAAM,QAAO,GAAI,QAAQ,GAAG,EAAE,OAAO,EAAE,MAAM,aAAa,MAAM,QAAO,GAAI,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,MAAM,MAAK,GAAI,QAAQ,EAAC,CAAE,CAAC,EAAE,KAAK,GAEzP,EAAE,UAAU,EAAE,MAAM,aAAa,MAAM,QAAO,GAAI,QAAQ,EAAE,KAAK,CAAC;AAEnE,eAAO,kBAAkB,KAAK,MAAM,YAAY,OAAO,KAAK;MAC7D,GATO;IAUR;EACD;AACD;AAfgB;",
6
6
  "names": []
7
7
  }
@@ -1,92 +1,12 @@
1
- import type { CCEncodingContext, CCParsingContext } from "@zwave-js/cc";
2
1
  import type { GetDeviceConfig } from "@zwave-js/config";
3
- import { CommandClasses, type ControlsCC, type EndpointId, type GetEndpoint, type GetNode, type GetSupportedCCVersion, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type NodeId, type Scale, type SinglecastCC, type SupervisionResult, type SupportsCC, type ValueID, type WithAddress } from "@zwave-js/core";
2
+ import { type ControlsCC, type EndpointId, type GetEndpoint, type GetNode, type GetSupportedCCVersion, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type NodeId, type Scale, type SinglecastCC, type SupervisionResult, type SupportsCC, type WithAddress } from "@zwave-js/core";
4
3
  import { type AllOrNone, Bytes } from "@zwave-js/shared";
5
4
  import { POLL_VALUE, PhysicalCCAPI, type PollValueImplementation } from "../lib/API.js";
6
5
  import { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext } from "../lib/CommandClass.js";
7
6
  import { MultilevelSensorCommand, type MultilevelSensorValue } from "../lib/_Types.js";
8
- export declare const MultilevelSensorCCValues: Readonly<{
9
- supportedSensorTypes: {
10
- id: {
11
- readonly commandClass: (typeof CommandClasses)["Multilevel Sensor"];
12
- readonly property: "supportedSensorTypes";
13
- };
14
- endpoint: (endpoint?: number) => {
15
- readonly commandClass: (typeof CommandClasses)["Multilevel Sensor"];
16
- readonly endpoint: number;
17
- readonly property: "supportedSensorTypes";
18
- };
19
- is: (valueId: ValueID) => boolean;
20
- readonly meta: Readonly<{
21
- readonly type: "any";
22
- readonly readable: true;
23
- readonly writeable: true;
24
- }>;
25
- options: {
26
- readonly internal: true;
27
- readonly minVersion: 1;
28
- readonly secret: false;
29
- readonly stateful: true;
30
- readonly supportsEndpoints: true;
31
- readonly autoCreate: true;
32
- };
33
- };
34
- supportedScales: ((sensorType: number) => {
35
- id: {
36
- readonly commandClass: (typeof CommandClasses)["Multilevel Sensor"];
37
- readonly property: "supportedScales";
38
- readonly propertyKey: number;
39
- };
40
- endpoint: (endpoint?: number) => {
41
- readonly commandClass: (typeof CommandClasses)["Multilevel Sensor"];
42
- readonly endpoint: number;
43
- readonly property: "supportedScales";
44
- readonly propertyKey: number;
45
- };
46
- readonly meta: Readonly<{
47
- readonly type: "any";
48
- readonly readable: true;
49
- readonly writeable: true;
50
- }>;
51
- }) & {
52
- is: (valueId: ValueID) => boolean;
53
- options: {
54
- readonly internal: true;
55
- readonly minVersion: 1;
56
- readonly secret: false;
57
- readonly stateful: true;
58
- readonly supportsEndpoints: true;
59
- readonly autoCreate: true;
60
- };
61
- };
62
- value: ((sensorTypeName: string) => {
63
- id: {
64
- readonly commandClass: (typeof CommandClasses)["Multilevel Sensor"];
65
- readonly property: string;
66
- };
67
- endpoint: (endpoint?: number) => {
68
- readonly commandClass: (typeof CommandClasses)["Multilevel Sensor"];
69
- readonly endpoint: number;
70
- readonly property: string;
71
- };
72
- readonly meta: {
73
- readonly label: string;
74
- readonly writeable: false;
75
- readonly type: "number";
76
- readonly readable: true;
77
- };
78
- }) & {
79
- is: (valueId: ValueID) => boolean;
80
- options: {
81
- readonly internal: false;
82
- readonly minVersion: 1;
83
- readonly secret: false;
84
- readonly stateful: true;
85
- readonly supportsEndpoints: true;
86
- readonly autoCreate: true;
87
- };
88
- };
89
- }>;
7
+ import type { CCEncodingContext, CCParsingContext } from "../lib/traits.js";
8
+ import { MultilevelSensorCCValues } from "./_CCValues.generated.js";
9
+ export { MultilevelSensorCCValues };
90
10
  export declare class MultilevelSensorCCAPI extends PhysicalCCAPI {
91
11
  supportsCommand(cmd: MultilevelSensorCommand): MaybeNotKnown<boolean>;
92
12
  protected get [POLL_VALUE](): PollValueImplementation;
@@ -46,7 +46,6 @@ var import_shared = require("@zwave-js/shared");
46
46
  var import_API = require("../lib/API.js");
47
47
  var import_CommandClass = require("../lib/CommandClass.js");
48
48
  var import_CommandClassDecorators = require("../lib/CommandClassDecorators.js");
49
- var import_Values = require("../lib/Values.js");
50
49
  var import_Types = require("../lib/_Types.js");
51
50
  var import_CCValues_generated = require("./_CCValues.generated.js");
52
51
  var __runInitializers = function(thisArg, initializers, value) {