@zwave-js/cc 14.0.0-beta.1 → 14.0.0-beta.4

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 (922) hide show
  1. package/build/cjs/cc/AlarmSensorCC.d.ts +194 -0
  2. package/build/cjs/cc/AlarmSensorCC.js +395 -0
  3. package/build/cjs/cc/AlarmSensorCC.js.map +7 -0
  4. package/build/cjs/cc/AssociationCC.d.ts +253 -0
  5. package/build/cjs/cc/AssociationCC.js +711 -0
  6. package/build/cjs/cc/AssociationCC.js.map +7 -0
  7. package/build/cjs/cc/AssociationGroupInfoCC.d.ts +230 -0
  8. package/build/cjs/cc/AssociationGroupInfoCC.js +746 -0
  9. package/build/cjs/cc/AssociationGroupInfoCC.js.map +7 -0
  10. package/build/cjs/cc/BarrierOperatorCC.d.ts +243 -0
  11. package/build/cjs/cc/BarrierOperatorCC.js +582 -0
  12. package/build/cjs/cc/BarrierOperatorCC.js.map +7 -0
  13. package/build/cjs/cc/BasicCC.d.ts +191 -0
  14. package/build/cjs/cc/BasicCC.js +384 -0
  15. package/build/cjs/cc/BasicCC.js.map +7 -0
  16. package/build/cjs/cc/BatteryCC.d.ts +406 -0
  17. package/build/cjs/cc/BatteryCC.js +508 -0
  18. package/build/cjs/cc/BatteryCC.js.map +7 -0
  19. package/build/cjs/cc/BinarySensorCC.d.ts +122 -0
  20. package/build/cjs/cc/BinarySensorCC.js +431 -0
  21. package/build/cjs/cc/BinarySensorCC.js.map +7 -0
  22. package/build/cjs/cc/BinarySwitchCC.d.ts +139 -0
  23. package/build/cjs/cc/BinarySwitchCC.js +378 -0
  24. package/build/cjs/cc/BinarySwitchCC.js.map +7 -0
  25. package/build/cjs/cc/CRC16CC.d.ts +29 -0
  26. package/build/cjs/cc/CRC16CC.js +133 -0
  27. package/build/cjs/cc/CRC16CC.js.map +7 -0
  28. package/build/cjs/cc/CentralSceneCC.d.ts +210 -0
  29. package/build/cjs/cc/CentralSceneCC.js +449 -0
  30. package/build/cjs/cc/CentralSceneCC.js.map +7 -0
  31. package/build/cjs/cc/ClimateControlScheduleCC.d.ts +177 -0
  32. package/build/cjs/cc/ClimateControlScheduleCC.js +480 -0
  33. package/build/cjs/cc/ClimateControlScheduleCC.js.map +7 -0
  34. package/build/cjs/cc/ClockCC.d.ts +47 -0
  35. package/build/cjs/cc/ClockCC.js +226 -0
  36. package/build/cjs/cc/ClockCC.js.map +7 -0
  37. package/build/cjs/cc/ColorSwitchCC.d.ts +339 -0
  38. package/build/cjs/cc/ColorSwitchCC.js +1117 -0
  39. package/build/cjs/cc/ColorSwitchCC.js.map +7 -0
  40. package/build/cjs/cc/ConfigurationCC.d.ts +396 -0
  41. package/build/cjs/cc/ConfigurationCC.js +2230 -0
  42. package/build/cjs/cc/ConfigurationCC.js.map +7 -0
  43. package/build/cjs/cc/DeviceResetLocallyCC.d.ts +17 -0
  44. package/build/cjs/cc/DeviceResetLocallyCC.js +92 -0
  45. package/build/cjs/cc/DeviceResetLocallyCC.js.map +7 -0
  46. package/build/cjs/cc/DoorLockCC.d.ts +837 -0
  47. package/build/cjs/cc/DoorLockCC.js +1239 -0
  48. package/build/cjs/cc/DoorLockCC.js.map +7 -0
  49. package/build/cjs/cc/DoorLockLoggingCC.d.ts +77 -0
  50. package/build/cjs/cc/DoorLockLoggingCC.js +343 -0
  51. package/build/cjs/cc/DoorLockLoggingCC.js.map +7 -0
  52. package/build/cjs/cc/EnergyProductionCC.d.ts +77 -0
  53. package/build/cjs/cc/EnergyProductionCC.js +240 -0
  54. package/build/cjs/cc/EnergyProductionCC.js.map +7 -0
  55. package/build/cjs/cc/EntryControlCC.d.ts +231 -0
  56. package/build/cjs/cc/EntryControlCC.js +593 -0
  57. package/build/cjs/cc/EntryControlCC.js.map +7 -0
  58. package/build/cjs/cc/FirmwareUpdateMetaDataCC.d.ts +359 -0
  59. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +1122 -0
  60. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +7 -0
  61. package/build/cjs/cc/HailCC.d.ts +6 -0
  62. package/build/cjs/cc/HailCC.js +45 -0
  63. package/build/cjs/cc/HailCC.js.map +7 -0
  64. package/build/cjs/cc/HumidityControlModeCC.d.ts +111 -0
  65. package/build/cjs/cc/HumidityControlModeCC.js +323 -0
  66. package/build/cjs/cc/HumidityControlModeCC.js.map +7 -0
  67. package/build/cjs/cc/HumidityControlOperatingStateCC.d.ts +60 -0
  68. package/build/cjs/cc/HumidityControlOperatingStateCC.js +164 -0
  69. package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +7 -0
  70. package/build/cjs/cc/HumidityControlSetpointCC.d.ts +209 -0
  71. package/build/cjs/cc/HumidityControlSetpointCC.js +634 -0
  72. package/build/cjs/cc/HumidityControlSetpointCC.js.map +7 -0
  73. package/build/cjs/cc/InclusionControllerCC.d.ts +42 -0
  74. package/build/cjs/cc/InclusionControllerCC.js +160 -0
  75. package/build/cjs/cc/InclusionControllerCC.js.map +7 -0
  76. package/build/cjs/cc/IndicatorCC.d.ts +338 -0
  77. package/build/cjs/cc/IndicatorCC.js +1234 -0
  78. package/build/cjs/cc/IndicatorCC.js.map +7 -0
  79. package/build/cjs/cc/IrrigationCC.d.ts +1496 -0
  80. package/build/cjs/cc/IrrigationCC.js +1978 -0
  81. package/build/cjs/cc/IrrigationCC.js.map +7 -0
  82. package/build/cjs/cc/LanguageCC.d.ts +101 -0
  83. package/build/cjs/cc/LanguageCC.js +267 -0
  84. package/build/cjs/cc/LanguageCC.js.map +7 -0
  85. package/build/cjs/cc/LockCC.d.ts +73 -0
  86. package/build/cjs/cc/LockCC.js +222 -0
  87. package/build/cjs/cc/LockCC.js.map +7 -0
  88. package/build/cjs/cc/ManufacturerProprietaryCC.d.ts +32 -0
  89. package/build/cjs/cc/ManufacturerProprietaryCC.js +209 -0
  90. package/build/cjs/cc/ManufacturerProprietaryCC.js.map +7 -0
  91. package/build/cjs/cc/ManufacturerSpecificCC.d.ts +171 -0
  92. package/build/cjs/cc/ManufacturerSpecificCC.js +334 -0
  93. package/build/cjs/cc/ManufacturerSpecificCC.js.map +7 -0
  94. package/build/cjs/cc/MeterCC.d.ts +318 -0
  95. package/build/cjs/cc/MeterCC.js +1235 -0
  96. package/build/cjs/cc/MeterCC.js.map +7 -0
  97. package/build/cjs/cc/MultiChannelAssociationCC.d.ts +241 -0
  98. package/build/cjs/cc/MultiChannelAssociationCC.js +956 -0
  99. package/build/cjs/cc/MultiChannelAssociationCC.js.map +7 -0
  100. package/build/cjs/cc/MultiChannelCC.d.ts +394 -0
  101. package/build/cjs/cc/MultiChannelCC.js +1050 -0
  102. package/build/cjs/cc/MultiChannelCC.js.map +7 -0
  103. package/build/cjs/cc/MultiCommandCC.d.ts +27 -0
  104. package/build/cjs/cc/MultiCommandCC.js +159 -0
  105. package/build/cjs/cc/MultiCommandCC.js.map +7 -0
  106. package/build/cjs/cc/MultilevelSensorCC.d.ts +185 -0
  107. package/build/cjs/cc/MultilevelSensorCC.js +716 -0
  108. package/build/cjs/cc/MultilevelSensorCC.js.map +7 -0
  109. package/build/cjs/cc/MultilevelSwitchCC.d.ts +357 -0
  110. package/build/cjs/cc/MultilevelSwitchCC.js +780 -0
  111. package/build/cjs/cc/MultilevelSwitchCC.js.map +7 -0
  112. package/build/cjs/cc/NoOperationCC.d.ts +9 -0
  113. package/build/cjs/cc/NoOperationCC.js +64 -0
  114. package/build/cjs/cc/NoOperationCC.js.map +7 -0
  115. package/build/cjs/cc/NodeNamingCC.d.ts +118 -0
  116. package/build/cjs/cc/NodeNamingCC.js +364 -0
  117. package/build/cjs/cc/NodeNamingCC.js.map +7 -0
  118. package/build/cjs/cc/NotificationCC.d.ts +479 -0
  119. package/build/cjs/cc/NotificationCC.js +1245 -0
  120. package/build/cjs/cc/NotificationCC.js.map +7 -0
  121. package/build/cjs/cc/PowerlevelCC.d.ts +82 -0
  122. package/build/cjs/cc/PowerlevelCC.js +510 -0
  123. package/build/cjs/cc/PowerlevelCC.js.map +7 -0
  124. package/build/cjs/cc/ProtectionCC.d.ts +325 -0
  125. package/build/cjs/cc/ProtectionCC.js +667 -0
  126. package/build/cjs/cc/ProtectionCC.js.map +7 -0
  127. package/build/cjs/cc/SceneActivationCC.d.ts +89 -0
  128. package/build/cjs/cc/SceneActivationCC.js +193 -0
  129. package/build/cjs/cc/SceneActivationCC.js.map +7 -0
  130. package/build/cjs/cc/SceneActuatorConfigurationCC.d.ts +120 -0
  131. package/build/cjs/cc/SceneActuatorConfigurationCC.js +370 -0
  132. package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +7 -0
  133. package/build/cjs/cc/SceneControllerConfigurationCC.d.ts +129 -0
  134. package/build/cjs/cc/SceneControllerConfigurationCC.js +423 -0
  135. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +7 -0
  136. package/build/cjs/cc/ScheduleEntryLockCC.d.ts +434 -0
  137. package/build/cjs/cc/ScheduleEntryLockCC.js +1763 -0
  138. package/build/cjs/cc/ScheduleEntryLockCC.js.map +7 -0
  139. package/build/cjs/cc/Security2CC.d.ts +251 -0
  140. package/build/cjs/cc/Security2CC.js +1589 -0
  141. package/build/cjs/cc/Security2CC.js.map +7 -0
  142. package/build/cjs/cc/SecurityCC.d.ts +128 -0
  143. package/build/cjs/cc/SecurityCC.js +757 -0
  144. package/build/cjs/cc/SecurityCC.js.map +7 -0
  145. package/build/cjs/cc/SoundSwitchCC.d.ts +232 -0
  146. package/build/cjs/cc/SoundSwitchCC.js +661 -0
  147. package/build/cjs/cc/SoundSwitchCC.js.map +7 -0
  148. package/build/cjs/cc/SupervisionCC.d.ts +104 -0
  149. package/build/cjs/cc/SupervisionCC.js +308 -0
  150. package/build/cjs/cc/SupervisionCC.js.map +7 -0
  151. package/build/cjs/cc/ThermostatFanModeCC.d.ts +141 -0
  152. package/build/cjs/cc/ThermostatFanModeCC.js +372 -0
  153. package/build/cjs/cc/ThermostatFanModeCC.js.map +7 -0
  154. package/build/cjs/cc/ThermostatFanStateCC.d.ts +60 -0
  155. package/build/cjs/cc/ThermostatFanStateCC.js +166 -0
  156. package/build/cjs/cc/ThermostatFanStateCC.js.map +7 -0
  157. package/build/cjs/cc/ThermostatModeCC.d.ts +150 -0
  158. package/build/cjs/cc/ThermostatModeCC.js +436 -0
  159. package/build/cjs/cc/ThermostatModeCC.js.map +7 -0
  160. package/build/cjs/cc/ThermostatOperatingStateCC.d.ts +61 -0
  161. package/build/cjs/cc/ThermostatOperatingStateCC.js +162 -0
  162. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +7 -0
  163. package/build/cjs/cc/ThermostatSetbackCC.d.ts +46 -0
  164. package/build/cjs/cc/ThermostatSetbackCC.js +262 -0
  165. package/build/cjs/cc/ThermostatSetbackCC.js.map +7 -0
  166. package/build/cjs/cc/ThermostatSetpointCC.d.ts +197 -0
  167. package/build/cjs/cc/ThermostatSetpointCC.js +638 -0
  168. package/build/cjs/cc/ThermostatSetpointCC.js.map +7 -0
  169. package/build/cjs/cc/TimeCC.d.ts +88 -0
  170. package/build/cjs/cc/TimeCC.js +473 -0
  171. package/build/cjs/cc/TimeCC.js.map +7 -0
  172. package/build/cjs/cc/TimeParametersCC.d.ts +72 -0
  173. package/build/cjs/cc/TimeParametersCC.js +313 -0
  174. package/build/cjs/cc/TimeParametersCC.js.map +7 -0
  175. package/build/cjs/cc/TransportServiceCC.d.ts +107 -0
  176. package/build/cjs/cc/TransportServiceCC.js +404 -0
  177. package/build/cjs/cc/TransportServiceCC.js.map +7 -0
  178. package/build/cjs/cc/UserCodeCC.d.ts +683 -0
  179. package/build/cjs/cc/UserCodeCC.js +1620 -0
  180. package/build/cjs/cc/UserCodeCC.js.map +7 -0
  181. package/build/cjs/cc/VersionCC.d.ts +469 -0
  182. package/build/cjs/cc/VersionCC.js +828 -0
  183. package/build/cjs/cc/VersionCC.js.map +7 -0
  184. package/build/cjs/cc/WakeUpCC.d.ts +150 -0
  185. package/build/cjs/cc/WakeUpCC.js +456 -0
  186. package/build/cjs/cc/WakeUpCC.js.map +7 -0
  187. package/build/cjs/cc/WindowCoveringCC.d.ts +315 -0
  188. package/build/cjs/cc/WindowCoveringCC.js +776 -0
  189. package/build/cjs/cc/WindowCoveringCC.js.map +7 -0
  190. package/build/cjs/cc/ZWaveLongRangeCC.d.ts +4 -0
  191. package/build/cjs/cc/ZWaveLongRangeCC.js +43 -0
  192. package/build/cjs/cc/ZWaveLongRangeCC.js.map +7 -0
  193. package/build/cjs/cc/ZWavePlusCC.d.ts +163 -0
  194. package/build/cjs/cc/ZWavePlusCC.js +288 -0
  195. package/build/cjs/cc/ZWavePlusCC.js.map +7 -0
  196. package/build/cjs/cc/ZWaveProtocolCC.d.ts +344 -0
  197. package/build/cjs/cc/ZWaveProtocolCC.js +1071 -0
  198. package/build/cjs/cc/ZWaveProtocolCC.js.map +7 -0
  199. package/build/cjs/cc/index.d.ts +132 -0
  200. package/build/cjs/cc/index.js +1180 -0
  201. package/build/cjs/cc/index.js.map +7 -0
  202. package/build/cjs/cc/manufacturerProprietary/Decorators.d.ts +64 -0
  203. package/build/cjs/cc/manufacturerProprietary/Decorators.js +76 -0
  204. package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +7 -0
  205. package/build/cjs/cc/manufacturerProprietary/FibaroCC.d.ts +79 -0
  206. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +412 -0
  207. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +7 -0
  208. package/build/cjs/index.d.ts +15 -0
  209. package/build/cjs/index.js +77 -0
  210. package/build/cjs/index.js.map +7 -0
  211. package/build/cjs/index_safe.d.ts +3 -0
  212. package/build/cjs/index_safe.js +25 -0
  213. package/build/cjs/index_safe.js.map +7 -0
  214. package/build/cjs/lib/API.d.ts +271 -0
  215. package/build/cjs/lib/API.js +413 -0
  216. package/build/cjs/lib/API.js.map +7 -0
  217. package/build/cjs/lib/CommandClass.d.ts +234 -0
  218. package/build/cjs/lib/CommandClass.js +692 -0
  219. package/build/cjs/lib/CommandClass.js.map +7 -0
  220. package/build/cjs/lib/CommandClassDecorators.d.ts +112 -0
  221. package/build/cjs/lib/CommandClassDecorators.js +182 -0
  222. package/build/cjs/lib/CommandClassDecorators.js.map +7 -0
  223. package/build/cjs/lib/EncapsulatingCommandClass.d.ts +22 -0
  224. package/build/cjs/lib/EncapsulatingCommandClass.js +71 -0
  225. package/build/cjs/lib/EncapsulatingCommandClass.js.map +7 -0
  226. package/build/cjs/lib/ICommandClassContainer.js +17 -0
  227. package/build/cjs/lib/ICommandClassContainer.js.map +7 -0
  228. package/build/cjs/lib/NotificationEventPayload.d.ts +10 -0
  229. package/build/cjs/lib/NotificationEventPayload.js +31 -0
  230. package/build/cjs/lib/NotificationEventPayload.js.map +7 -0
  231. package/build/cjs/lib/Security2/Extension.js +333 -0
  232. package/build/cjs/lib/Security2/Extension.js.map +7 -0
  233. package/build/cjs/lib/Security2/shared.js +69 -0
  234. package/build/cjs/lib/Security2/shared.js.map +7 -0
  235. package/build/cjs/lib/SetValueResult.js +65 -0
  236. package/build/cjs/lib/SetValueResult.js.map +7 -0
  237. package/build/cjs/lib/Values.d.ts +223 -0
  238. package/build/cjs/lib/Values.js +191 -0
  239. package/build/cjs/lib/Values.js.map +7 -0
  240. package/build/cjs/lib/_Types.js +1676 -0
  241. package/build/cjs/lib/_Types.js.map +7 -0
  242. package/build/cjs/lib/serializers.d.ts +34 -0
  243. package/build/cjs/lib/serializers.js +110 -0
  244. package/build/cjs/lib/serializers.js.map +7 -0
  245. package/build/cjs/lib/utils.d.ts +17 -0
  246. package/build/cjs/lib/utils.js +678 -0
  247. package/build/cjs/lib/utils.js.map +7 -0
  248. package/build/cjs/package.json +3 -0
  249. package/build/esm/cc/AlarmSensorCC.d.ts +194 -0
  250. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -0
  251. package/build/esm/cc/AlarmSensorCC.js +392 -0
  252. package/build/esm/cc/AlarmSensorCC.js.map +1 -0
  253. package/build/esm/cc/AssociationCC.d.ts +253 -0
  254. package/build/esm/cc/AssociationCC.d.ts.map +1 -0
  255. package/build/esm/cc/AssociationCC.js +706 -0
  256. package/build/esm/cc/AssociationCC.js.map +1 -0
  257. package/build/esm/cc/AssociationGroupInfoCC.d.ts +230 -0
  258. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -0
  259. package/build/esm/cc/AssociationGroupInfoCC.js +769 -0
  260. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -0
  261. package/build/esm/cc/BarrierOperatorCC.d.ts +243 -0
  262. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -0
  263. package/build/esm/cc/BarrierOperatorCC.js +610 -0
  264. package/build/esm/cc/BarrierOperatorCC.js.map +1 -0
  265. package/build/esm/cc/BasicCC.d.ts +191 -0
  266. package/build/esm/cc/BasicCC.d.ts.map +1 -0
  267. package/build/esm/cc/BasicCC.js +390 -0
  268. package/build/esm/cc/BasicCC.js.map +1 -0
  269. package/build/esm/cc/BatteryCC.d.ts +406 -0
  270. package/build/esm/cc/BatteryCC.d.ts.map +1 -0
  271. package/build/esm/cc/BatteryCC.js +513 -0
  272. package/build/esm/cc/BatteryCC.js.map +1 -0
  273. package/build/esm/cc/BinarySensorCC.d.ts +122 -0
  274. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -0
  275. package/build/esm/cc/BinarySensorCC.js +417 -0
  276. package/build/esm/cc/BinarySensorCC.js.map +1 -0
  277. package/build/esm/cc/BinarySwitchCC.d.ts +139 -0
  278. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -0
  279. package/build/esm/cc/BinarySwitchCC.js +362 -0
  280. package/build/esm/cc/BinarySwitchCC.js.map +1 -0
  281. package/build/esm/cc/CRC16CC.d.ts +29 -0
  282. package/build/esm/cc/CRC16CC.d.ts.map +1 -0
  283. package/build/esm/cc/CRC16CC.js +123 -0
  284. package/build/esm/cc/CRC16CC.js.map +1 -0
  285. package/build/esm/cc/CentralSceneCC.d.ts +210 -0
  286. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -0
  287. package/build/esm/cc/CentralSceneCC.js +427 -0
  288. package/build/esm/cc/CentralSceneCC.js.map +1 -0
  289. package/build/esm/cc/ClimateControlScheduleCC.d.ts +177 -0
  290. package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -0
  291. package/build/esm/cc/ClimateControlScheduleCC.js +466 -0
  292. package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -0
  293. package/build/esm/cc/ClockCC.d.ts +47 -0
  294. package/build/esm/cc/ClockCC.d.ts.map +1 -0
  295. package/build/esm/cc/ClockCC.js +205 -0
  296. package/build/esm/cc/ClockCC.js.map +1 -0
  297. package/build/esm/cc/ColorSwitchCC.d.ts +339 -0
  298. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -0
  299. package/build/esm/cc/ColorSwitchCC.js +1149 -0
  300. package/build/esm/cc/ColorSwitchCC.js.map +1 -0
  301. package/build/esm/cc/ConfigurationCC.d.ts +396 -0
  302. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -0
  303. package/build/esm/cc/ConfigurationCC.js +2454 -0
  304. package/build/esm/cc/ConfigurationCC.js.map +1 -0
  305. package/build/esm/cc/DeviceResetLocallyCC.d.ts +17 -0
  306. package/build/esm/cc/DeviceResetLocallyCC.d.ts.map +1 -0
  307. package/build/esm/cc/DeviceResetLocallyCC.js +73 -0
  308. package/build/esm/cc/DeviceResetLocallyCC.js.map +1 -0
  309. package/build/esm/cc/DoorLockCC.d.ts +837 -0
  310. package/build/esm/cc/DoorLockCC.d.ts.map +1 -0
  311. package/build/esm/cc/DoorLockCC.js +1270 -0
  312. package/build/esm/cc/DoorLockCC.js.map +1 -0
  313. package/build/esm/cc/DoorLockLoggingCC.d.ts +77 -0
  314. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -0
  315. package/build/esm/cc/DoorLockLoggingCC.js +316 -0
  316. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -0
  317. package/build/esm/cc/EnergyProductionCC.d.ts +77 -0
  318. package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -0
  319. package/build/esm/cc/EnergyProductionCC.js +213 -0
  320. package/build/esm/cc/EnergyProductionCC.js.map +1 -0
  321. package/build/esm/cc/EntryControlCC.d.ts +231 -0
  322. package/build/esm/cc/EntryControlCC.d.ts.map +1 -0
  323. package/build/esm/cc/EntryControlCC.js +581 -0
  324. package/build/esm/cc/EntryControlCC.js.map +1 -0
  325. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts +359 -0
  326. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -0
  327. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +1142 -0
  328. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -0
  329. package/build/esm/cc/HailCC.d.ts +6 -0
  330. package/build/esm/cc/HailCC.d.ts.map +1 -0
  331. package/build/esm/cc/HailCC.js +21 -0
  332. package/build/esm/cc/HailCC.js.map +1 -0
  333. package/build/esm/cc/HumidityControlModeCC.d.ts +111 -0
  334. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -0
  335. package/build/esm/cc/HumidityControlModeCC.js +305 -0
  336. package/build/esm/cc/HumidityControlModeCC.js.map +1 -0
  337. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts +60 -0
  338. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -0
  339. package/build/esm/cc/HumidityControlOperatingStateCC.js +137 -0
  340. package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -0
  341. package/build/esm/cc/HumidityControlSetpointCC.d.ts +209 -0
  342. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -0
  343. package/build/esm/cc/HumidityControlSetpointCC.js +645 -0
  344. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -0
  345. package/build/esm/cc/InclusionControllerCC.d.ts +42 -0
  346. package/build/esm/cc/InclusionControllerCC.d.ts.map +1 -0
  347. package/build/esm/cc/InclusionControllerCC.js +133 -0
  348. package/build/esm/cc/InclusionControllerCC.js.map +1 -0
  349. package/build/esm/cc/IndicatorCC.d.ts +338 -0
  350. package/build/esm/cc/IndicatorCC.d.ts.map +1 -0
  351. package/build/esm/cc/IndicatorCC.js +1317 -0
  352. package/build/esm/cc/IndicatorCC.js.map +1 -0
  353. package/build/esm/cc/IrrigationCC.d.ts +1496 -0
  354. package/build/esm/cc/IrrigationCC.d.ts.map +1 -0
  355. package/build/esm/cc/IrrigationCC.js +2038 -0
  356. package/build/esm/cc/IrrigationCC.js.map +1 -0
  357. package/build/esm/cc/LanguageCC.d.ts +101 -0
  358. package/build/esm/cc/LanguageCC.d.ts.map +1 -0
  359. package/build/esm/cc/LanguageCC.js +243 -0
  360. package/build/esm/cc/LanguageCC.js.map +1 -0
  361. package/build/esm/cc/LockCC.d.ts +73 -0
  362. package/build/esm/cc/LockCC.d.ts.map +1 -0
  363. package/build/esm/cc/LockCC.js +197 -0
  364. package/build/esm/cc/LockCC.js.map +1 -0
  365. package/build/esm/cc/ManufacturerProprietaryCC.d.ts +32 -0
  366. package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -0
  367. package/build/esm/cc/ManufacturerProprietaryCC.js +201 -0
  368. package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -0
  369. package/build/esm/cc/ManufacturerSpecificCC.d.ts +171 -0
  370. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -0
  371. package/build/esm/cc/ManufacturerSpecificCC.js +315 -0
  372. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -0
  373. package/build/esm/cc/MeterCC.d.ts +318 -0
  374. package/build/esm/cc/MeterCC.d.ts.map +1 -0
  375. package/build/esm/cc/MeterCC.js +1308 -0
  376. package/build/esm/cc/MeterCC.js.map +1 -0
  377. package/build/esm/cc/MultiChannelAssociationCC.d.ts +241 -0
  378. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -0
  379. package/build/esm/cc/MultiChannelAssociationCC.js +981 -0
  380. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -0
  381. package/build/esm/cc/MultiChannelCC.d.ts +394 -0
  382. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -0
  383. package/build/esm/cc/MultiChannelCC.js +1127 -0
  384. package/build/esm/cc/MultiChannelCC.js.map +1 -0
  385. package/build/esm/cc/MultiCommandCC.d.ts +27 -0
  386. package/build/esm/cc/MultiCommandCC.d.ts.map +1 -0
  387. package/build/esm/cc/MultiCommandCC.js +142 -0
  388. package/build/esm/cc/MultiCommandCC.js.map +1 -0
  389. package/build/esm/cc/MultilevelSensorCC.d.ts +185 -0
  390. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -0
  391. package/build/esm/cc/MultilevelSensorCC.js +753 -0
  392. package/build/esm/cc/MultilevelSensorCC.js.map +1 -0
  393. package/build/esm/cc/MultilevelSwitchCC.d.ts +357 -0
  394. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -0
  395. package/build/esm/cc/MultilevelSwitchCC.js +810 -0
  396. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -0
  397. package/build/esm/cc/NoOperationCC.d.ts +9 -0
  398. package/build/esm/cc/NoOperationCC.d.ts.map +1 -0
  399. package/build/esm/cc/NoOperationCC.js +39 -0
  400. package/build/esm/cc/NoOperationCC.js.map +1 -0
  401. package/build/esm/cc/NodeNamingCC.d.ts +118 -0
  402. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -0
  403. package/build/esm/cc/NodeNamingCC.js +345 -0
  404. package/build/esm/cc/NodeNamingCC.js.map +1 -0
  405. package/build/esm/cc/NotificationCC.d.ts +479 -0
  406. package/build/esm/cc/NotificationCC.d.ts.map +1 -0
  407. package/build/esm/cc/NotificationCC.js +1350 -0
  408. package/build/esm/cc/NotificationCC.js.map +1 -0
  409. package/build/esm/cc/PowerlevelCC.d.ts +82 -0
  410. package/build/esm/cc/PowerlevelCC.d.ts.map +1 -0
  411. package/build/esm/cc/PowerlevelCC.js +485 -0
  412. package/build/esm/cc/PowerlevelCC.js.map +1 -0
  413. package/build/esm/cc/ProtectionCC.d.ts +325 -0
  414. package/build/esm/cc/ProtectionCC.d.ts.map +1 -0
  415. package/build/esm/cc/ProtectionCC.js +669 -0
  416. package/build/esm/cc/ProtectionCC.js.map +1 -0
  417. package/build/esm/cc/SceneActivationCC.d.ts +89 -0
  418. package/build/esm/cc/SceneActivationCC.d.ts.map +1 -0
  419. package/build/esm/cc/SceneActivationCC.js +166 -0
  420. package/build/esm/cc/SceneActivationCC.js.map +1 -0
  421. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts +120 -0
  422. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -0
  423. package/build/esm/cc/SceneActuatorConfigurationCC.js +374 -0
  424. package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -0
  425. package/build/esm/cc/SceneControllerConfigurationCC.d.ts +129 -0
  426. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -0
  427. package/build/esm/cc/SceneControllerConfigurationCC.js +446 -0
  428. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -0
  429. package/build/esm/cc/ScheduleEntryLockCC.d.ts +434 -0
  430. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -0
  431. package/build/esm/cc/ScheduleEntryLockCC.js +1826 -0
  432. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -0
  433. package/build/esm/cc/Security2CC.d.ts +251 -0
  434. package/build/esm/cc/Security2CC.d.ts.map +1 -0
  435. package/build/esm/cc/Security2CC.js +1814 -0
  436. package/build/esm/cc/Security2CC.js.map +1 -0
  437. package/build/esm/cc/SecurityCC.d.ts +128 -0
  438. package/build/esm/cc/SecurityCC.d.ts.map +1 -0
  439. package/build/esm/cc/SecurityCC.js +800 -0
  440. package/build/esm/cc/SecurityCC.js.map +1 -0
  441. package/build/esm/cc/SoundSwitchCC.d.ts +232 -0
  442. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -0
  443. package/build/esm/cc/SoundSwitchCC.js +633 -0
  444. package/build/esm/cc/SoundSwitchCC.js.map +1 -0
  445. package/build/esm/cc/SupervisionCC.d.ts +104 -0
  446. package/build/esm/cc/SupervisionCC.d.ts.map +1 -0
  447. package/build/esm/cc/SupervisionCC.js +319 -0
  448. package/build/esm/cc/SupervisionCC.js.map +1 -0
  449. package/build/esm/cc/ThermostatFanModeCC.d.ts +141 -0
  450. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -0
  451. package/build/esm/cc/ThermostatFanModeCC.js +359 -0
  452. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -0
  453. package/build/esm/cc/ThermostatFanStateCC.d.ts +60 -0
  454. package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -0
  455. package/build/esm/cc/ThermostatFanStateCC.js +139 -0
  456. package/build/esm/cc/ThermostatFanStateCC.js.map +1 -0
  457. package/build/esm/cc/ThermostatModeCC.d.ts +150 -0
  458. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -0
  459. package/build/esm/cc/ThermostatModeCC.js +426 -0
  460. package/build/esm/cc/ThermostatModeCC.js.map +1 -0
  461. package/build/esm/cc/ThermostatOperatingStateCC.d.ts +61 -0
  462. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -0
  463. package/build/esm/cc/ThermostatOperatingStateCC.js +135 -0
  464. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -0
  465. package/build/esm/cc/ThermostatSetbackCC.d.ts +46 -0
  466. package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -0
  467. package/build/esm/cc/ThermostatSetbackCC.js +244 -0
  468. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -0
  469. package/build/esm/cc/ThermostatSetpointCC.d.ts +197 -0
  470. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -0
  471. package/build/esm/cc/ThermostatSetpointCC.js +655 -0
  472. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -0
  473. package/build/esm/cc/TimeCC.d.ts +88 -0
  474. package/build/esm/cc/TimeCC.d.ts.map +1 -0
  475. package/build/esm/cc/TimeCC.js +451 -0
  476. package/build/esm/cc/TimeCC.js.map +1 -0
  477. package/build/esm/cc/TimeParametersCC.d.ts +72 -0
  478. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -0
  479. package/build/esm/cc/TimeParametersCC.js +300 -0
  480. package/build/esm/cc/TimeParametersCC.js.map +1 -0
  481. package/build/esm/cc/TransportServiceCC.d.ts +107 -0
  482. package/build/esm/cc/TransportServiceCC.d.ts.map +1 -0
  483. package/build/esm/cc/TransportServiceCC.js +422 -0
  484. package/build/esm/cc/TransportServiceCC.js.map +1 -0
  485. package/build/esm/cc/UserCodeCC.d.ts +683 -0
  486. package/build/esm/cc/UserCodeCC.d.ts.map +1 -0
  487. package/build/esm/cc/UserCodeCC.js +1695 -0
  488. package/build/esm/cc/UserCodeCC.js.map +1 -0
  489. package/build/esm/cc/VersionCC.d.ts +469 -0
  490. package/build/esm/cc/VersionCC.d.ts.map +1 -0
  491. package/build/esm/cc/VersionCC.js +862 -0
  492. package/build/esm/cc/VersionCC.js.map +1 -0
  493. package/build/esm/cc/WakeUpCC.d.ts +150 -0
  494. package/build/esm/cc/WakeUpCC.d.ts.map +1 -0
  495. package/build/esm/cc/WakeUpCC.js +438 -0
  496. package/build/esm/cc/WakeUpCC.js.map +1 -0
  497. package/build/esm/cc/WindowCoveringCC.d.ts +315 -0
  498. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -0
  499. package/build/esm/cc/WindowCoveringCC.js +780 -0
  500. package/build/esm/cc/WindowCoveringCC.js.map +1 -0
  501. package/build/esm/cc/ZWaveLongRangeCC.d.ts +4 -0
  502. package/build/esm/cc/ZWaveLongRangeCC.d.ts.map +1 -0
  503. package/build/esm/cc/ZWaveLongRangeCC.js +17 -0
  504. package/build/esm/cc/ZWaveLongRangeCC.js.map +1 -0
  505. package/build/esm/cc/ZWavePlusCC.d.ts +163 -0
  506. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -0
  507. package/build/esm/cc/ZWavePlusCC.js +267 -0
  508. package/build/esm/cc/ZWavePlusCC.js.map +1 -0
  509. package/build/esm/cc/ZWaveProtocolCC.d.ts +344 -0
  510. package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -0
  511. package/build/esm/cc/ZWaveProtocolCC.js +1030 -0
  512. package/build/esm/cc/ZWaveProtocolCC.js.map +1 -0
  513. package/build/esm/cc/index.d.ts +132 -0
  514. package/build/esm/cc/index.d.ts.map +1 -0
  515. package/build/esm/cc/index.js +71 -0
  516. package/build/esm/cc/index.js.map +1 -0
  517. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts +64 -0
  518. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -0
  519. package/build/esm/cc/manufacturerProprietary/Decorators.js +79 -0
  520. package/build/esm/cc/manufacturerProprietary/Decorators.js.map +1 -0
  521. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts +79 -0
  522. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -0
  523. package/build/esm/cc/manufacturerProprietary/FibaroCC.js +385 -0
  524. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -0
  525. package/build/esm/index.d.ts +15 -0
  526. package/build/esm/index.d.ts.map +1 -0
  527. package/build/esm/index.js +14 -0
  528. package/build/esm/index.js.map +1 -0
  529. package/build/esm/index_safe.d.ts +3 -0
  530. package/build/esm/index_safe.d.ts.map +1 -0
  531. package/build/esm/index_safe.js +4 -0
  532. package/build/esm/index_safe.js.map +1 -0
  533. package/build/esm/lib/API.d.ts +271 -0
  534. package/build/esm/lib/API.d.ts.map +1 -0
  535. package/build/esm/lib/API.js +448 -0
  536. package/build/esm/lib/API.js.map +1 -0
  537. package/build/esm/lib/CommandClass.d.ts +234 -0
  538. package/build/esm/lib/CommandClass.d.ts.map +1 -0
  539. package/build/esm/lib/CommandClass.js +781 -0
  540. package/build/esm/lib/CommandClass.js.map +1 -0
  541. package/build/esm/lib/CommandClassDecorators.d.ts +112 -0
  542. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -0
  543. package/build/esm/lib/CommandClassDecorators.js +229 -0
  544. package/build/esm/lib/CommandClassDecorators.js.map +1 -0
  545. package/build/esm/lib/EncapsulatingCommandClass.d.ts +22 -0
  546. package/build/esm/lib/EncapsulatingCommandClass.d.ts.map +1 -0
  547. package/build/esm/lib/EncapsulatingCommandClass.js +56 -0
  548. package/build/esm/lib/EncapsulatingCommandClass.js.map +1 -0
  549. package/build/esm/lib/ICommandClassContainer.d.ts +2 -0
  550. package/build/esm/lib/ICommandClassContainer.d.ts.map +1 -0
  551. package/build/esm/lib/ICommandClassContainer.js +2 -0
  552. package/build/esm/lib/ICommandClassContainer.js.map +1 -0
  553. package/build/esm/lib/NotificationEventPayload.d.ts +10 -0
  554. package/build/esm/lib/NotificationEventPayload.d.ts.map +1 -0
  555. package/build/esm/lib/NotificationEventPayload.js +7 -0
  556. package/build/esm/lib/NotificationEventPayload.js.map +1 -0
  557. package/build/esm/lib/Security2/Extension.d.ts +106 -0
  558. package/build/esm/lib/Security2/Extension.d.ts.map +1 -0
  559. package/build/esm/lib/Security2/Extension.js +296 -0
  560. package/build/esm/lib/Security2/Extension.js.map +1 -0
  561. package/build/esm/lib/Security2/shared.d.ts +37 -0
  562. package/build/esm/lib/Security2/shared.d.ts.map +1 -0
  563. package/build/esm/lib/Security2/shared.js +40 -0
  564. package/build/esm/lib/Security2/shared.js.map +1 -0
  565. package/build/esm/lib/SetValueResult.d.ts +55 -0
  566. package/build/esm/lib/SetValueResult.d.ts.map +1 -0
  567. package/build/esm/lib/SetValueResult.js +53 -0
  568. package/build/esm/lib/SetValueResult.js.map +1 -0
  569. package/build/esm/lib/Values.d.ts +223 -0
  570. package/build/esm/lib/Values.d.ts.map +1 -0
  571. package/build/esm/lib/Values.js +169 -0
  572. package/build/esm/lib/Values.js.map +1 -0
  573. package/build/esm/lib/_Types.d.ts +1461 -0
  574. package/build/esm/lib/_Types.d.ts.map +1 -0
  575. package/build/esm/lib/_Types.js +1432 -0
  576. package/build/esm/lib/_Types.js.map +1 -0
  577. package/build/esm/lib/serializers.d.ts +34 -0
  578. package/build/esm/lib/serializers.d.ts.map +1 -0
  579. package/build/esm/lib/serializers.js +98 -0
  580. package/build/esm/lib/serializers.js.map +1 -0
  581. package/build/esm/lib/utils.d.ts +17 -0
  582. package/build/esm/lib/utils.d.ts.map +1 -0
  583. package/build/esm/lib/utils.js +847 -0
  584. package/build/esm/lib/utils.js.map +1 -0
  585. package/build/esm/package.json +3 -0
  586. package/package.json +28 -23
  587. package/build/cc/AlarmSensorCC.d.ts +0 -194
  588. package/build/cc/AlarmSensorCC.d.ts.map +0 -1
  589. package/build/cc/AlarmSensorCC.js +0 -395
  590. package/build/cc/AlarmSensorCC.js.map +0 -1
  591. package/build/cc/AssociationCC.d.ts +0 -253
  592. package/build/cc/AssociationCC.d.ts.map +0 -1
  593. package/build/cc/AssociationCC.js +0 -732
  594. package/build/cc/AssociationCC.js.map +0 -1
  595. package/build/cc/AssociationGroupInfoCC.d.ts +0 -230
  596. package/build/cc/AssociationGroupInfoCC.d.ts.map +0 -1
  597. package/build/cc/AssociationGroupInfoCC.js +0 -772
  598. package/build/cc/AssociationGroupInfoCC.js.map +0 -1
  599. package/build/cc/BarrierOperatorCC.d.ts +0 -243
  600. package/build/cc/BarrierOperatorCC.d.ts.map +0 -1
  601. package/build/cc/BarrierOperatorCC.js +0 -613
  602. package/build/cc/BarrierOperatorCC.js.map +0 -1
  603. package/build/cc/BasicCC.d.ts +0 -191
  604. package/build/cc/BasicCC.d.ts.map +0 -1
  605. package/build/cc/BasicCC.js +0 -393
  606. package/build/cc/BasicCC.js.map +0 -1
  607. package/build/cc/BatteryCC.d.ts +0 -406
  608. package/build/cc/BatteryCC.d.ts.map +0 -1
  609. package/build/cc/BatteryCC.js +0 -516
  610. package/build/cc/BatteryCC.js.map +0 -1
  611. package/build/cc/BinarySensorCC.d.ts +0 -122
  612. package/build/cc/BinarySensorCC.d.ts.map +0 -1
  613. package/build/cc/BinarySensorCC.js +0 -420
  614. package/build/cc/BinarySensorCC.js.map +0 -1
  615. package/build/cc/BinarySwitchCC.d.ts +0 -139
  616. package/build/cc/BinarySwitchCC.d.ts.map +0 -1
  617. package/build/cc/BinarySwitchCC.js +0 -365
  618. package/build/cc/BinarySwitchCC.js.map +0 -1
  619. package/build/cc/CRC16CC.d.ts +0 -29
  620. package/build/cc/CRC16CC.d.ts.map +0 -1
  621. package/build/cc/CRC16CC.js +0 -126
  622. package/build/cc/CRC16CC.js.map +0 -1
  623. package/build/cc/CentralSceneCC.d.ts +0 -210
  624. package/build/cc/CentralSceneCC.d.ts.map +0 -1
  625. package/build/cc/CentralSceneCC.js +0 -453
  626. package/build/cc/CentralSceneCC.js.map +0 -1
  627. package/build/cc/ClimateControlScheduleCC.d.ts +0 -177
  628. package/build/cc/ClimateControlScheduleCC.d.ts.map +0 -1
  629. package/build/cc/ClimateControlScheduleCC.js +0 -469
  630. package/build/cc/ClimateControlScheduleCC.js.map +0 -1
  631. package/build/cc/ClockCC.d.ts +0 -47
  632. package/build/cc/ClockCC.d.ts.map +0 -1
  633. package/build/cc/ClockCC.js +0 -208
  634. package/build/cc/ClockCC.js.map +0 -1
  635. package/build/cc/ColorSwitchCC.d.ts +0 -339
  636. package/build/cc/ColorSwitchCC.d.ts.map +0 -1
  637. package/build/cc/ColorSwitchCC.js +0 -1152
  638. package/build/cc/ColorSwitchCC.js.map +0 -1
  639. package/build/cc/ConfigurationCC.d.ts +0 -396
  640. package/build/cc/ConfigurationCC.d.ts.map +0 -1
  641. package/build/cc/ConfigurationCC.js +0 -2458
  642. package/build/cc/ConfigurationCC.js.map +0 -1
  643. package/build/cc/DeviceResetLocallyCC.d.ts +0 -17
  644. package/build/cc/DeviceResetLocallyCC.d.ts.map +0 -1
  645. package/build/cc/DeviceResetLocallyCC.js +0 -76
  646. package/build/cc/DeviceResetLocallyCC.js.map +0 -1
  647. package/build/cc/DoorLockCC.d.ts +0 -837
  648. package/build/cc/DoorLockCC.d.ts.map +0 -1
  649. package/build/cc/DoorLockCC.js +0 -1273
  650. package/build/cc/DoorLockCC.js.map +0 -1
  651. package/build/cc/DoorLockLoggingCC.d.ts +0 -77
  652. package/build/cc/DoorLockLoggingCC.d.ts.map +0 -1
  653. package/build/cc/DoorLockLoggingCC.js +0 -319
  654. package/build/cc/DoorLockLoggingCC.js.map +0 -1
  655. package/build/cc/EnergyProductionCC.d.ts +0 -77
  656. package/build/cc/EnergyProductionCC.d.ts.map +0 -1
  657. package/build/cc/EnergyProductionCC.js +0 -216
  658. package/build/cc/EnergyProductionCC.js.map +0 -1
  659. package/build/cc/EntryControlCC.d.ts +0 -231
  660. package/build/cc/EntryControlCC.d.ts.map +0 -1
  661. package/build/cc/EntryControlCC.js +0 -607
  662. package/build/cc/EntryControlCC.js.map +0 -1
  663. package/build/cc/FirmwareUpdateMetaDataCC.d.ts +0 -359
  664. package/build/cc/FirmwareUpdateMetaDataCC.d.ts.map +0 -1
  665. package/build/cc/FirmwareUpdateMetaDataCC.js +0 -1145
  666. package/build/cc/FirmwareUpdateMetaDataCC.js.map +0 -1
  667. package/build/cc/HailCC.d.ts +0 -6
  668. package/build/cc/HailCC.d.ts.map +0 -1
  669. package/build/cc/HailCC.js +0 -24
  670. package/build/cc/HailCC.js.map +0 -1
  671. package/build/cc/HumidityControlModeCC.d.ts +0 -111
  672. package/build/cc/HumidityControlModeCC.d.ts.map +0 -1
  673. package/build/cc/HumidityControlModeCC.js +0 -308
  674. package/build/cc/HumidityControlModeCC.js.map +0 -1
  675. package/build/cc/HumidityControlOperatingStateCC.d.ts +0 -60
  676. package/build/cc/HumidityControlOperatingStateCC.d.ts.map +0 -1
  677. package/build/cc/HumidityControlOperatingStateCC.js +0 -140
  678. package/build/cc/HumidityControlOperatingStateCC.js.map +0 -1
  679. package/build/cc/HumidityControlSetpointCC.d.ts +0 -209
  680. package/build/cc/HumidityControlSetpointCC.d.ts.map +0 -1
  681. package/build/cc/HumidityControlSetpointCC.js +0 -648
  682. package/build/cc/HumidityControlSetpointCC.js.map +0 -1
  683. package/build/cc/InclusionControllerCC.d.ts +0 -42
  684. package/build/cc/InclusionControllerCC.d.ts.map +0 -1
  685. package/build/cc/InclusionControllerCC.js +0 -136
  686. package/build/cc/InclusionControllerCC.js.map +0 -1
  687. package/build/cc/IndicatorCC.d.ts +0 -338
  688. package/build/cc/IndicatorCC.d.ts.map +0 -1
  689. package/build/cc/IndicatorCC.js +0 -1320
  690. package/build/cc/IndicatorCC.js.map +0 -1
  691. package/build/cc/IrrigationCC.d.ts +0 -1496
  692. package/build/cc/IrrigationCC.d.ts.map +0 -1
  693. package/build/cc/IrrigationCC.js +0 -2041
  694. package/build/cc/IrrigationCC.js.map +0 -1
  695. package/build/cc/LanguageCC.d.ts +0 -101
  696. package/build/cc/LanguageCC.d.ts.map +0 -1
  697. package/build/cc/LanguageCC.js +0 -246
  698. package/build/cc/LanguageCC.js.map +0 -1
  699. package/build/cc/LockCC.d.ts +0 -73
  700. package/build/cc/LockCC.d.ts.map +0 -1
  701. package/build/cc/LockCC.js +0 -200
  702. package/build/cc/LockCC.js.map +0 -1
  703. package/build/cc/ManufacturerProprietaryCC.d.ts +0 -32
  704. package/build/cc/ManufacturerProprietaryCC.d.ts.map +0 -1
  705. package/build/cc/ManufacturerProprietaryCC.js +0 -204
  706. package/build/cc/ManufacturerProprietaryCC.js.map +0 -1
  707. package/build/cc/ManufacturerSpecificCC.d.ts +0 -171
  708. package/build/cc/ManufacturerSpecificCC.d.ts.map +0 -1
  709. package/build/cc/ManufacturerSpecificCC.js +0 -318
  710. package/build/cc/ManufacturerSpecificCC.js.map +0 -1
  711. package/build/cc/MeterCC.d.ts +0 -318
  712. package/build/cc/MeterCC.d.ts.map +0 -1
  713. package/build/cc/MeterCC.js +0 -1312
  714. package/build/cc/MeterCC.js.map +0 -1
  715. package/build/cc/MultiChannelAssociationCC.d.ts +0 -241
  716. package/build/cc/MultiChannelAssociationCC.d.ts.map +0 -1
  717. package/build/cc/MultiChannelAssociationCC.js +0 -1007
  718. package/build/cc/MultiChannelAssociationCC.js.map +0 -1
  719. package/build/cc/MultiChannelCC.d.ts +0 -394
  720. package/build/cc/MultiChannelCC.d.ts.map +0 -1
  721. package/build/cc/MultiChannelCC.js +0 -1130
  722. package/build/cc/MultiChannelCC.js.map +0 -1
  723. package/build/cc/MultiCommandCC.d.ts +0 -27
  724. package/build/cc/MultiCommandCC.d.ts.map +0 -1
  725. package/build/cc/MultiCommandCC.js +0 -145
  726. package/build/cc/MultiCommandCC.js.map +0 -1
  727. package/build/cc/MultilevelSensorCC.d.ts +0 -185
  728. package/build/cc/MultilevelSensorCC.d.ts.map +0 -1
  729. package/build/cc/MultilevelSensorCC.js +0 -756
  730. package/build/cc/MultilevelSensorCC.js.map +0 -1
  731. package/build/cc/MultilevelSwitchCC.d.ts +0 -357
  732. package/build/cc/MultilevelSwitchCC.d.ts.map +0 -1
  733. package/build/cc/MultilevelSwitchCC.js +0 -813
  734. package/build/cc/MultilevelSwitchCC.js.map +0 -1
  735. package/build/cc/NoOperationCC.d.ts +0 -9
  736. package/build/cc/NoOperationCC.d.ts.map +0 -1
  737. package/build/cc/NoOperationCC.js +0 -42
  738. package/build/cc/NoOperationCC.js.map +0 -1
  739. package/build/cc/NodeNamingCC.d.ts +0 -118
  740. package/build/cc/NodeNamingCC.d.ts.map +0 -1
  741. package/build/cc/NodeNamingCC.js +0 -348
  742. package/build/cc/NodeNamingCC.js.map +0 -1
  743. package/build/cc/NotificationCC.d.ts +0 -479
  744. package/build/cc/NotificationCC.d.ts.map +0 -1
  745. package/build/cc/NotificationCC.js +0 -1379
  746. package/build/cc/NotificationCC.js.map +0 -1
  747. package/build/cc/PowerlevelCC.d.ts +0 -82
  748. package/build/cc/PowerlevelCC.d.ts.map +0 -1
  749. package/build/cc/PowerlevelCC.js +0 -488
  750. package/build/cc/PowerlevelCC.js.map +0 -1
  751. package/build/cc/ProtectionCC.d.ts +0 -325
  752. package/build/cc/ProtectionCC.d.ts.map +0 -1
  753. package/build/cc/ProtectionCC.js +0 -672
  754. package/build/cc/ProtectionCC.js.map +0 -1
  755. package/build/cc/SceneActivationCC.d.ts +0 -89
  756. package/build/cc/SceneActivationCC.d.ts.map +0 -1
  757. package/build/cc/SceneActivationCC.js +0 -169
  758. package/build/cc/SceneActivationCC.js.map +0 -1
  759. package/build/cc/SceneActuatorConfigurationCC.d.ts +0 -120
  760. package/build/cc/SceneActuatorConfigurationCC.d.ts.map +0 -1
  761. package/build/cc/SceneActuatorConfigurationCC.js +0 -377
  762. package/build/cc/SceneActuatorConfigurationCC.js.map +0 -1
  763. package/build/cc/SceneControllerConfigurationCC.d.ts +0 -129
  764. package/build/cc/SceneControllerConfigurationCC.d.ts.map +0 -1
  765. package/build/cc/SceneControllerConfigurationCC.js +0 -449
  766. package/build/cc/SceneControllerConfigurationCC.js.map +0 -1
  767. package/build/cc/ScheduleEntryLockCC.d.ts +0 -434
  768. package/build/cc/ScheduleEntryLockCC.d.ts.map +0 -1
  769. package/build/cc/ScheduleEntryLockCC.js +0 -1829
  770. package/build/cc/ScheduleEntryLockCC.js.map +0 -1
  771. package/build/cc/Security2CC.d.ts +0 -251
  772. package/build/cc/Security2CC.d.ts.map +0 -1
  773. package/build/cc/Security2CC.js +0 -1817
  774. package/build/cc/Security2CC.js.map +0 -1
  775. package/build/cc/SecurityCC.d.ts +0 -128
  776. package/build/cc/SecurityCC.d.ts.map +0 -1
  777. package/build/cc/SecurityCC.js +0 -803
  778. package/build/cc/SecurityCC.js.map +0 -1
  779. package/build/cc/SoundSwitchCC.d.ts +0 -232
  780. package/build/cc/SoundSwitchCC.d.ts.map +0 -1
  781. package/build/cc/SoundSwitchCC.js +0 -636
  782. package/build/cc/SoundSwitchCC.js.map +0 -1
  783. package/build/cc/SupervisionCC.d.ts +0 -104
  784. package/build/cc/SupervisionCC.d.ts.map +0 -1
  785. package/build/cc/SupervisionCC.js +0 -322
  786. package/build/cc/SupervisionCC.js.map +0 -1
  787. package/build/cc/ThermostatFanModeCC.d.ts +0 -141
  788. package/build/cc/ThermostatFanModeCC.d.ts.map +0 -1
  789. package/build/cc/ThermostatFanModeCC.js +0 -362
  790. package/build/cc/ThermostatFanModeCC.js.map +0 -1
  791. package/build/cc/ThermostatFanStateCC.d.ts +0 -60
  792. package/build/cc/ThermostatFanStateCC.d.ts.map +0 -1
  793. package/build/cc/ThermostatFanStateCC.js +0 -142
  794. package/build/cc/ThermostatFanStateCC.js.map +0 -1
  795. package/build/cc/ThermostatModeCC.d.ts +0 -150
  796. package/build/cc/ThermostatModeCC.d.ts.map +0 -1
  797. package/build/cc/ThermostatModeCC.js +0 -429
  798. package/build/cc/ThermostatModeCC.js.map +0 -1
  799. package/build/cc/ThermostatOperatingStateCC.d.ts +0 -61
  800. package/build/cc/ThermostatOperatingStateCC.d.ts.map +0 -1
  801. package/build/cc/ThermostatOperatingStateCC.js +0 -138
  802. package/build/cc/ThermostatOperatingStateCC.js.map +0 -1
  803. package/build/cc/ThermostatSetbackCC.d.ts +0 -46
  804. package/build/cc/ThermostatSetbackCC.d.ts.map +0 -1
  805. package/build/cc/ThermostatSetbackCC.js +0 -247
  806. package/build/cc/ThermostatSetbackCC.js.map +0 -1
  807. package/build/cc/ThermostatSetpointCC.d.ts +0 -197
  808. package/build/cc/ThermostatSetpointCC.d.ts.map +0 -1
  809. package/build/cc/ThermostatSetpointCC.js +0 -658
  810. package/build/cc/ThermostatSetpointCC.js.map +0 -1
  811. package/build/cc/TimeCC.d.ts +0 -88
  812. package/build/cc/TimeCC.d.ts.map +0 -1
  813. package/build/cc/TimeCC.js +0 -454
  814. package/build/cc/TimeCC.js.map +0 -1
  815. package/build/cc/TimeParametersCC.d.ts +0 -72
  816. package/build/cc/TimeParametersCC.d.ts.map +0 -1
  817. package/build/cc/TimeParametersCC.js +0 -303
  818. package/build/cc/TimeParametersCC.js.map +0 -1
  819. package/build/cc/TransportServiceCC.d.ts +0 -107
  820. package/build/cc/TransportServiceCC.d.ts.map +0 -1
  821. package/build/cc/TransportServiceCC.js +0 -426
  822. package/build/cc/TransportServiceCC.js.map +0 -1
  823. package/build/cc/UserCodeCC.d.ts +0 -683
  824. package/build/cc/UserCodeCC.d.ts.map +0 -1
  825. package/build/cc/UserCodeCC.js +0 -1699
  826. package/build/cc/UserCodeCC.js.map +0 -1
  827. package/build/cc/VersionCC.d.ts +0 -469
  828. package/build/cc/VersionCC.d.ts.map +0 -1
  829. package/build/cc/VersionCC.js +0 -865
  830. package/build/cc/VersionCC.js.map +0 -1
  831. package/build/cc/WakeUpCC.d.ts +0 -150
  832. package/build/cc/WakeUpCC.d.ts.map +0 -1
  833. package/build/cc/WakeUpCC.js +0 -441
  834. package/build/cc/WakeUpCC.js.map +0 -1
  835. package/build/cc/WindowCoveringCC.d.ts +0 -315
  836. package/build/cc/WindowCoveringCC.d.ts.map +0 -1
  837. package/build/cc/WindowCoveringCC.js +0 -783
  838. package/build/cc/WindowCoveringCC.js.map +0 -1
  839. package/build/cc/ZWaveLongRangeCC.d.ts +0 -4
  840. package/build/cc/ZWaveLongRangeCC.d.ts.map +0 -1
  841. package/build/cc/ZWaveLongRangeCC.js +0 -20
  842. package/build/cc/ZWaveLongRangeCC.js.map +0 -1
  843. package/build/cc/ZWavePlusCC.d.ts +0 -163
  844. package/build/cc/ZWavePlusCC.d.ts.map +0 -1
  845. package/build/cc/ZWavePlusCC.js +0 -270
  846. package/build/cc/ZWavePlusCC.js.map +0 -1
  847. package/build/cc/ZWaveProtocolCC.d.ts +0 -344
  848. package/build/cc/ZWaveProtocolCC.d.ts.map +0 -1
  849. package/build/cc/ZWaveProtocolCC.js +0 -1033
  850. package/build/cc/ZWaveProtocolCC.js.map +0 -1
  851. package/build/cc/index.d.ts +0 -132
  852. package/build/cc/index.d.ts.map +0 -1
  853. package/build/cc/index.js +0 -627
  854. package/build/cc/index.js.map +0 -1
  855. package/build/cc/manufacturerProprietary/Decorators.d.ts +0 -64
  856. package/build/cc/manufacturerProprietary/Decorators.d.ts.map +0 -1
  857. package/build/cc/manufacturerProprietary/Decorators.js +0 -83
  858. package/build/cc/manufacturerProprietary/Decorators.js.map +0 -1
  859. package/build/cc/manufacturerProprietary/FibaroCC.d.ts +0 -79
  860. package/build/cc/manufacturerProprietary/FibaroCC.d.ts.map +0 -1
  861. package/build/cc/manufacturerProprietary/FibaroCC.js +0 -392
  862. package/build/cc/manufacturerProprietary/FibaroCC.js.map +0 -1
  863. package/build/index.d.ts +0 -15
  864. package/build/index.d.ts.map +0 -1
  865. package/build/index.js +0 -52
  866. package/build/index.js.map +0 -1
  867. package/build/index_safe.d.ts +0 -3
  868. package/build/index_safe.d.ts.map +0 -1
  869. package/build/index_safe.js +0 -20
  870. package/build/index_safe.js.map +0 -1
  871. package/build/lib/API.d.ts +0 -271
  872. package/build/lib/API.d.ts.map +0 -1
  873. package/build/lib/API.js +0 -458
  874. package/build/lib/API.js.map +0 -1
  875. package/build/lib/CommandClass.d.ts +0 -234
  876. package/build/lib/CommandClass.d.ts.map +0 -1
  877. package/build/lib/CommandClass.js +0 -788
  878. package/build/lib/CommandClass.js.map +0 -1
  879. package/build/lib/CommandClassDecorators.d.ts +0 -112
  880. package/build/lib/CommandClassDecorators.d.ts.map +0 -1
  881. package/build/lib/CommandClassDecorators.js +0 -243
  882. package/build/lib/CommandClassDecorators.js.map +0 -1
  883. package/build/lib/EncapsulatingCommandClass.d.ts +0 -22
  884. package/build/lib/EncapsulatingCommandClass.d.ts.map +0 -1
  885. package/build/lib/EncapsulatingCommandClass.js +0 -61
  886. package/build/lib/EncapsulatingCommandClass.js.map +0 -1
  887. package/build/lib/ICommandClassContainer.d.ts.map +0 -1
  888. package/build/lib/ICommandClassContainer.js +0 -3
  889. package/build/lib/ICommandClassContainer.js.map +0 -1
  890. package/build/lib/NotificationEventPayload.d.ts +0 -10
  891. package/build/lib/NotificationEventPayload.d.ts.map +0 -1
  892. package/build/lib/NotificationEventPayload.js +0 -10
  893. package/build/lib/NotificationEventPayload.js.map +0 -1
  894. package/build/lib/Security2/Extension.d.ts.map +0 -1
  895. package/build/lib/Security2/Extension.js +0 -303
  896. package/build/lib/Security2/Extension.js.map +0 -1
  897. package/build/lib/Security2/shared.d.ts.map +0 -1
  898. package/build/lib/Security2/shared.js +0 -43
  899. package/build/lib/Security2/shared.js.map +0 -1
  900. package/build/lib/SetValueResult.d.ts.map +0 -1
  901. package/build/lib/SetValueResult.js +0 -60
  902. package/build/lib/SetValueResult.js.map +0 -1
  903. package/build/lib/Values.d.ts +0 -223
  904. package/build/lib/Values.d.ts.map +0 -1
  905. package/build/lib/Values.js +0 -172
  906. package/build/lib/Values.js.map +0 -1
  907. package/build/lib/_Types.d.ts.map +0 -1
  908. package/build/lib/_Types.js +0 -1443
  909. package/build/lib/_Types.js.map +0 -1
  910. package/build/lib/serializers.d.ts +0 -34
  911. package/build/lib/serializers.d.ts.map +0 -1
  912. package/build/lib/serializers.js +0 -107
  913. package/build/lib/serializers.js.map +0 -1
  914. package/build/lib/utils.d.ts +0 -17
  915. package/build/lib/utils.d.ts.map +0 -1
  916. package/build/lib/utils.js +0 -860
  917. package/build/lib/utils.js.map +0 -1
  918. /package/build/{lib → cjs/lib}/ICommandClassContainer.d.ts +0 -0
  919. /package/build/{lib → cjs/lib}/Security2/Extension.d.ts +0 -0
  920. /package/build/{lib → cjs/lib}/Security2/shared.d.ts +0 -0
  921. /package/build/{lib → cjs/lib}/SetValueResult.d.ts +0 -0
  922. /package/build/{lib → cjs/lib}/_Types.d.ts +0 -0
@@ -0,0 +1,847 @@
1
+ import { CommandClasses, NOT_KNOWN, SecurityClass, ZWaveError, ZWaveErrorCodes, actuatorCCs, getCCName, isActuatorCC, isLongRangeNodeId, isSensorCC, } from "@zwave-js/core/safe";
2
+ import { ObjectKeyMap, getEnumMemberName, } from "@zwave-js/shared/safe";
3
+ import { distinct } from "alcalzone-shared/arrays/index.js";
4
+ import { AssociationCC, AssociationCCValues } from "../cc/AssociationCC.js";
5
+ import { AssociationGroupInfoCC } from "../cc/AssociationGroupInfoCC.js";
6
+ import { MultiChannelAssociationCC } from "../cc/MultiChannelAssociationCC.js";
7
+ import { CCAPI } from "./API.js";
8
+ import { AssociationCheckResult, AssociationGroupInfoProfile, } from "./_Types.js";
9
+ export function getAssociations(ctx, endpoint) {
10
+ const ret = new Map();
11
+ if (endpoint.supportsCC(CommandClasses.Association)) {
12
+ const destinations = AssociationCC.getAllDestinationsCached(ctx, endpoint);
13
+ for (const [groupId, assocs] of destinations) {
14
+ ret.set(groupId, assocs);
15
+ }
16
+ }
17
+ else {
18
+ throw new ZWaveError(`Node ${endpoint.nodeId}${endpoint.index > 0 ? `, endpoint ${endpoint.index}` : ""} does not support associations!`, ZWaveErrorCodes.CC_NotSupported);
19
+ }
20
+ // Merge the "normal" destinations with multi channel destinations
21
+ if (endpoint.supportsCC(CommandClasses["Multi Channel Association"])) {
22
+ const destinations = MultiChannelAssociationCC.getAllDestinationsCached(ctx, endpoint);
23
+ for (const [groupId, assocs] of destinations) {
24
+ if (ret.has(groupId)) {
25
+ const normalAssociations = ret.get(groupId);
26
+ ret.set(groupId, [
27
+ ...normalAssociations,
28
+ // Eliminate potential duplicates
29
+ ...assocs.filter((a1) => !normalAssociations.some((a2) => a1.nodeId === a2.nodeId
30
+ && a1.endpoint === a2.endpoint)),
31
+ ]);
32
+ }
33
+ else {
34
+ ret.set(groupId, assocs);
35
+ }
36
+ }
37
+ }
38
+ return ret;
39
+ }
40
+ export function getAllAssociations(ctx, node) {
41
+ const ret = new ObjectKeyMap();
42
+ for (const endpoint of node.getAllEndpoints()) {
43
+ const address = {
44
+ nodeId: node.id,
45
+ endpoint: endpoint.index,
46
+ };
47
+ if (endpoint.supportsCC(CommandClasses.Association)) {
48
+ ret.set(address, getAssociations(ctx, endpoint));
49
+ }
50
+ }
51
+ return ret;
52
+ }
53
+ export function checkAssociation(ctx, endpoint, group, destination) {
54
+ // Check that the target endpoint exists except when adding an association to the controller
55
+ const targetNode = ctx.getNodeOrThrow(destination.nodeId);
56
+ const targetEndpoint = destination.nodeId === ctx.ownNodeId
57
+ ? targetNode
58
+ : targetNode.getEndpointOrThrow(destination.endpoint ?? 0);
59
+ if (!endpoint.supportsCC(CommandClasses.Association)
60
+ && !endpoint.supportsCC(CommandClasses["Multi Channel Association"])) {
61
+ throw new ZWaveError(`Node ${endpoint.nodeId}${endpoint.index > 0 ? `, endpoint ${endpoint.index}` : ""} does not support associations!`, ZWaveErrorCodes.CC_NotSupported);
62
+ }
63
+ // Associations to and from ZWLR devices are not allowed
64
+ if (isLongRangeNodeId(destination.nodeId)) {
65
+ return AssociationCheckResult.Forbidden_DestinationIsLongRange;
66
+ }
67
+ else if (isLongRangeNodeId(endpoint.nodeId)) {
68
+ // Except the lifeline back to the host
69
+ if (group !== 1 || destination.nodeId !== ctx.ownNodeId) {
70
+ return AssociationCheckResult.Forbidden_SourceIsLongRange;
71
+ }
72
+ }
73
+ // The following checks don't apply to Lifeline associations
74
+ if (destination.nodeId === ctx.ownNodeId) {
75
+ return AssociationCheckResult.OK;
76
+ }
77
+ // Disallow self-associations
78
+ if (destination.nodeId === endpoint.nodeId) {
79
+ return AssociationCheckResult.Forbidden_SelfAssociation;
80
+ }
81
+ // For Association version 1 and version 2 / MCA version 1-3:
82
+ // A controlling node MUST NOT associate Node A to a Node B destination
83
+ // if Node A and Node B’s highest Security Class are not identical.
84
+ // For Association version 3 / MCA version 4:
85
+ // A controlling node MUST NOT associate Node A to a Node B destination
86
+ // if Node A was not granted Node B’s highest Security Class.
87
+ const sourceNode = ctx.getNode(endpoint.nodeId);
88
+ let securityClassMustMatch;
89
+ if (destination.endpoint == undefined) {
90
+ // "normal" association
91
+ const sourceNodeCCVersion = endpoint.getCCVersion(CommandClasses.Association);
92
+ securityClassMustMatch = sourceNodeCCVersion < 3;
93
+ }
94
+ else {
95
+ // multi channel association
96
+ const sourceNodeCCVersion = endpoint.getCCVersion(CommandClasses["Multi Channel Association"]);
97
+ securityClassMustMatch = sourceNodeCCVersion < 4;
98
+ }
99
+ const sourceSecurityClass = sourceNode.getHighestSecurityClass();
100
+ const targetSecurityClass = targetNode.getHighestSecurityClass();
101
+ // If the security classes are unknown, all bets are off
102
+ if (sourceSecurityClass != undefined && targetSecurityClass != undefined) {
103
+ if (securityClassMustMatch
104
+ && sourceSecurityClass !== targetSecurityClass) {
105
+ return AssociationCheckResult.Forbidden_SecurityClassMismatch;
106
+ }
107
+ else if (
108
+ // Commands to insecure nodes are allowed
109
+ targetSecurityClass !== SecurityClass.None
110
+ // Otherwise, the sender must know the target's highest key
111
+ && !securityClassMustMatch
112
+ && !sourceNode.hasSecurityClass(targetSecurityClass)) {
113
+ return AssociationCheckResult
114
+ .Forbidden_DestinationSecurityClassNotGranted;
115
+ }
116
+ }
117
+ // SDS14223:
118
+ // A controlling node MUST NOT associate Node A to a Node B destination that does not support
119
+ // the Command Class that the Node A will be controlling
120
+ //
121
+ // To determine this, the node must support the AGI CC or we have no way of knowing which
122
+ // CCs the node will control
123
+ if (!endpoint.supportsCC(CommandClasses["Association Group Information"])) {
124
+ return AssociationCheckResult.OK;
125
+ }
126
+ const groupCommandList = AssociationGroupInfoCC.getIssuedCommandsCached(ctx, endpoint, group);
127
+ if (!groupCommandList || !groupCommandList.size) {
128
+ // We don't know which CCs this group controls, just allow it
129
+ return AssociationCheckResult.OK;
130
+ }
131
+ const groupCCs = [...groupCommandList.keys()];
132
+ // A controlling node MAY create an association to a destination supporting an
133
+ // actuator Command Class if the actual association group sends Basic Control Command Class.
134
+ if (groupCCs.includes(CommandClasses.Basic)
135
+ && actuatorCCs.some((cc) => targetEndpoint?.supportsCC(cc))) {
136
+ return AssociationCheckResult.OK;
137
+ }
138
+ // Enforce that at least one issued CC is supported
139
+ if (groupCCs.some((cc) => targetEndpoint?.supportsCC(cc))) {
140
+ return AssociationCheckResult.OK;
141
+ }
142
+ else {
143
+ return AssociationCheckResult.Forbidden_NoSupportedCCs;
144
+ }
145
+ }
146
+ export function getAssociationGroups(ctx, endpoint) {
147
+ // Check whether we have multi channel support or not
148
+ let assocInstance;
149
+ let mcInstance;
150
+ if (endpoint.supportsCC(CommandClasses.Association)) {
151
+ assocInstance = AssociationCC;
152
+ }
153
+ else {
154
+ throw new ZWaveError(`Node ${endpoint.nodeId}${endpoint.index > 0 ? `, endpoint ${endpoint.index}` : ""} does not support associations!`, ZWaveErrorCodes.CC_NotSupported);
155
+ }
156
+ if (endpoint.supportsCC(CommandClasses["Multi Channel Association"])) {
157
+ mcInstance = MultiChannelAssociationCC;
158
+ }
159
+ const assocGroupCount = assocInstance.getGroupCountCached(ctx, endpoint)
160
+ ?? 0;
161
+ const mcGroupCount = mcInstance?.getGroupCountCached(ctx, endpoint)
162
+ ?? 0;
163
+ const groupCount = Math.max(assocGroupCount, mcGroupCount);
164
+ const deviceConfig = ctx.getDeviceConfig?.(endpoint.nodeId);
165
+ const ret = new Map();
166
+ if (endpoint.supportsCC(CommandClasses["Association Group Information"])) {
167
+ // We can read all information we need from the AGI CC
168
+ const agiInstance = AssociationGroupInfoCC;
169
+ for (let group = 1; group <= groupCount; group++) {
170
+ const assocConfig = deviceConfig?.getAssociationConfigForEndpoint(endpoint.index, group);
171
+ const multiChannel = !!mcInstance && group <= mcGroupCount;
172
+ ret.set(group, {
173
+ maxNodes: (multiChannel
174
+ ? mcInstance
175
+ : assocInstance).getMaxNodesCached(ctx, endpoint, group) || 1,
176
+ // AGI implies Z-Wave+ where group 1 is the lifeline
177
+ isLifeline: group === 1,
178
+ label:
179
+ // prefer the configured label if we have one
180
+ assocConfig?.label
181
+ // the ones reported by AGI are sometimes pretty bad
182
+ ?? agiInstance.getGroupNameCached(ctx, endpoint, group)
183
+ // but still better than "unnamed"
184
+ ?? `Unnamed group ${group}`,
185
+ multiChannel,
186
+ profile: agiInstance.getGroupProfileCached(ctx, endpoint, group),
187
+ issuedCommands: agiInstance.getIssuedCommandsCached(ctx, endpoint, group),
188
+ });
189
+ }
190
+ }
191
+ else {
192
+ // we need to consult the device config
193
+ for (let group = 1; group <= groupCount; group++) {
194
+ const assocConfig = deviceConfig?.getAssociationConfigForEndpoint(endpoint.index, group);
195
+ const multiChannel = !!mcInstance && group <= mcGroupCount;
196
+ ret.set(group, {
197
+ maxNodes: (multiChannel
198
+ ? mcInstance
199
+ : assocInstance).getMaxNodesCached(ctx, endpoint, group)
200
+ || assocConfig?.maxNodes
201
+ || 1,
202
+ isLifeline: assocConfig?.isLifeline ?? group === 1,
203
+ label: assocConfig?.label ?? `Unnamed group ${group}`,
204
+ multiChannel,
205
+ });
206
+ }
207
+ }
208
+ return ret;
209
+ }
210
+ export function getAllAssociationGroups(ctx, node) {
211
+ const ret = new Map();
212
+ for (const endpoint of node.getAllEndpoints()) {
213
+ if (endpoint.supportsCC(CommandClasses.Association)) {
214
+ ret.set(endpoint.index, getAssociationGroups(ctx, endpoint));
215
+ }
216
+ }
217
+ return ret;
218
+ }
219
+ export async function addAssociations(ctx, endpoint, group, destinations) {
220
+ const nodeAndEndpointString = `${endpoint.nodeId}${endpoint.index > 0 ? `, endpoint ${endpoint.index}` : ""}`;
221
+ // Check whether we should add any associations the device does not have support for
222
+ let assocInstance;
223
+ let mcInstance;
224
+ // Split associations into conventional and endpoint associations
225
+ const nodeAssociations = distinct(destinations
226
+ .filter((a) => a.endpoint == undefined)
227
+ .map((a) => a.nodeId));
228
+ const endpointAssociations = destinations.filter((a) => a.endpoint != undefined);
229
+ if (endpoint.supportsCC(CommandClasses.Association)) {
230
+ assocInstance = AssociationCC;
231
+ }
232
+ else if (nodeAssociations.length > 0) {
233
+ throw new ZWaveError(`Node ${nodeAndEndpointString} does not support associations!`, ZWaveErrorCodes.CC_NotSupported);
234
+ }
235
+ if (endpoint.supportsCC(CommandClasses["Multi Channel Association"])) {
236
+ mcInstance = MultiChannelAssociationCC;
237
+ }
238
+ else if (endpointAssociations.length > 0) {
239
+ throw new ZWaveError(`Node ${nodeAndEndpointString} does not support multi channel associations!`, ZWaveErrorCodes.CC_NotSupported);
240
+ }
241
+ // Disallow associating a node with itself. This is technically checked as part of
242
+ // checkAssociations, but here we provide a better error message.
243
+ const selfAssociations = destinations.filter((d) => d.nodeId === endpoint.nodeId);
244
+ if (selfAssociations.length > 0) {
245
+ throw new ZWaveError(`Associating a node with itself is not allowed!`, ZWaveErrorCodes.AssociationCC_NotAllowed, selfAssociations.map((a) => ({
246
+ ...a,
247
+ checkResult: AssociationCheckResult.Forbidden_SelfAssociation,
248
+ })));
249
+ }
250
+ const assocGroupCount = assocInstance?.getGroupCountCached(ctx, endpoint)
251
+ ?? 0;
252
+ const mcGroupCount = mcInstance?.getGroupCountCached(ctx, endpoint)
253
+ ?? 0;
254
+ const groupCount = Math.max(assocGroupCount, mcGroupCount);
255
+ if (group > groupCount) {
256
+ throw new ZWaveError(`Group ${group} does not exist on node ${nodeAndEndpointString}`, ZWaveErrorCodes.AssociationCC_InvalidGroup);
257
+ }
258
+ const deviceConfig = ctx.getDeviceConfig?.(endpoint.nodeId);
259
+ const groupIsMultiChannel = !!mcInstance
260
+ && group <= mcGroupCount
261
+ && deviceConfig?.associations?.get(group)?.multiChannel !== false;
262
+ if (groupIsMultiChannel) {
263
+ // Check that all associations are allowed
264
+ const disallowedAssociations = destinations.map((a) => ({
265
+ ...a,
266
+ checkResult: checkAssociation(ctx, endpoint, group, a),
267
+ })).filter(({ checkResult }) => checkResult !== AssociationCheckResult.OK);
268
+ if (disallowedAssociations.length) {
269
+ let message = `The following associations are not allowed:`;
270
+ message += disallowedAssociations
271
+ .map((a) => `\n· Node ${a.nodeId}${a.endpoint ? `, endpoint ${a.endpoint}` : ""}: ${getEnumMemberName(AssociationCheckResult, a.checkResult).replace("Forbidden_", "")}`)
272
+ .join("");
273
+ throw new ZWaveError(message, ZWaveErrorCodes.AssociationCC_NotAllowed, disallowedAssociations);
274
+ }
275
+ // And add them
276
+ const api = CCAPI.create(CommandClasses["Multi Channel Association"], ctx, endpoint);
277
+ await api.addDestinations({
278
+ groupId: group,
279
+ nodeIds: nodeAssociations,
280
+ endpoints: endpointAssociations,
281
+ });
282
+ // Refresh the association list
283
+ await api.getGroup(group);
284
+ }
285
+ else {
286
+ // Although the node supports multi channel associations, this group only supports "normal" associations
287
+ if (destinations.some((a) => a.endpoint != undefined)) {
288
+ throw new ZWaveError(`Node ${nodeAndEndpointString}, group ${group} does not support multi channel associations!`, ZWaveErrorCodes.CC_NotSupported);
289
+ }
290
+ // Check that all associations are allowed
291
+ const disallowedAssociations = destinations.map((a) => ({
292
+ ...a,
293
+ checkResult: checkAssociation(ctx, endpoint, group, a),
294
+ })).filter(({ checkResult }) => checkResult !== AssociationCheckResult.OK);
295
+ if (disallowedAssociations.length) {
296
+ let message = `The associations to the following nodes are not allowed`;
297
+ message += disallowedAssociations
298
+ .map((a) => `\n· Node ${a.nodeId}: ${getEnumMemberName(AssociationCheckResult, a.checkResult).replace("Forbidden_", "")}`)
299
+ .join("");
300
+ throw new ZWaveError(message, ZWaveErrorCodes.AssociationCC_NotAllowed, disallowedAssociations);
301
+ }
302
+ const api = CCAPI.create(CommandClasses.Association, ctx, endpoint);
303
+ await api.addNodeIds(group, ...destinations.map((a) => a.nodeId));
304
+ // Refresh the association list
305
+ await api.getGroup(group);
306
+ }
307
+ }
308
+ export async function removeAssociations(ctx, endpoint, group, destinations) {
309
+ const nodeAndEndpointString = `${endpoint.nodeId}${endpoint.index > 0 ? `, endpoint ${endpoint.index}` : ""}`;
310
+ // Split associations into conventional and endpoint associations
311
+ const nodeAssociations = distinct(destinations
312
+ .filter((a) => a.endpoint == undefined)
313
+ .map((a) => a.nodeId));
314
+ const endpointAssociations = destinations.filter((a) => a.endpoint != undefined);
315
+ // Removing associations is not either/or - we could have a device with duplicated associations between
316
+ // Association CC and Multi Channel Association CC
317
+ // Figure out what we need to use to remove the associations
318
+ let groupExistsAsMultiChannel = false;
319
+ let groupExistsAsNodeAssociation = false;
320
+ let mcInstance;
321
+ let assocInstance;
322
+ // To remove a multi channel association, we need to make sure that the group exists
323
+ // and the node supports multi channel associations
324
+ if (endpoint.supportsCC(CommandClasses["Multi Channel Association"])) {
325
+ mcInstance = MultiChannelAssociationCC;
326
+ if (group <= mcInstance.getGroupCountCached(ctx, endpoint)) {
327
+ groupExistsAsMultiChannel = true;
328
+ }
329
+ }
330
+ else if (endpointAssociations.length > 0) {
331
+ throw new ZWaveError(`Node ${nodeAndEndpointString} does not support multi channel associations!`, ZWaveErrorCodes.CC_NotSupported);
332
+ }
333
+ // To remove a normal association, we need to make sure that the group exists either as a normal association
334
+ // or as a multi channel association
335
+ if (endpoint.supportsCC(CommandClasses.Association)) {
336
+ assocInstance = AssociationCC;
337
+ if (group <= assocInstance.getGroupCountCached(ctx, endpoint)) {
338
+ groupExistsAsNodeAssociation = true;
339
+ }
340
+ }
341
+ if (!mcInstance && !assocInstance) {
342
+ throw new ZWaveError(`Node ${nodeAndEndpointString} does not support associations!`, ZWaveErrorCodes.CC_NotSupported);
343
+ }
344
+ // Ensure the group exists and can be used
345
+ if (!groupExistsAsMultiChannel && !groupExistsAsNodeAssociation) {
346
+ throw new ZWaveError(` Association group ${group} does not exist for node ${nodeAndEndpointString}`, ZWaveErrorCodes.AssociationCC_InvalidGroup);
347
+ }
348
+ if (endpointAssociations.length > 0 && !groupExistsAsMultiChannel) {
349
+ throw new ZWaveError(`Node ${nodeAndEndpointString}, association group ${group} does not support multi channel associations!`, ZWaveErrorCodes.AssociationCC_InvalidGroup);
350
+ }
351
+ // Even if we only remove node associations, we use both CCs since it has been found that some
352
+ // devices do not correctly share the node list between the two commands
353
+ if (assocInstance
354
+ && nodeAssociations.length > 0
355
+ && groupExistsAsNodeAssociation) {
356
+ const api = CCAPI.create(CommandClasses.Association, ctx, endpoint);
357
+ await api.removeNodeIds({
358
+ groupId: group,
359
+ nodeIds: nodeAssociations,
360
+ });
361
+ // Refresh the association list
362
+ await api.getGroup(group);
363
+ }
364
+ if (mcInstance && groupExistsAsMultiChannel) {
365
+ const api = CCAPI.create(CommandClasses["Multi Channel Association"], ctx, endpoint);
366
+ await api.removeDestinations({
367
+ groupId: group,
368
+ nodeIds: nodeAssociations,
369
+ endpoints: endpointAssociations,
370
+ });
371
+ // Refresh the multi channel association list
372
+ await api.getGroup(group);
373
+ }
374
+ }
375
+ export function getLifelineGroupIds(ctx, endpoint) {
376
+ // For now only support this for the root endpoint - i.e. node
377
+ if (endpoint.index > 0)
378
+ return [];
379
+ // Some nodes define multiple lifeline groups, so we need to assign us to
380
+ // all of them
381
+ const lifelineGroups = [];
382
+ // If the target node supports Z-Wave+ info that means the lifeline MUST be group #1
383
+ if (endpoint.supportsCC(CommandClasses["Z-Wave Plus Info"])) {
384
+ lifelineGroups.push(1);
385
+ }
386
+ // We have a device config file that tells us which (additional) association to assign
387
+ let associations;
388
+ const deviceConfig = ctx.getDeviceConfig?.(endpoint.nodeId);
389
+ if (endpoint.index === 0) {
390
+ // The root endpoint's associations may be configured separately or as part of "endpoints"
391
+ associations = deviceConfig?.associations
392
+ ?? deviceConfig?.endpoints?.get(0)?.associations;
393
+ }
394
+ else {
395
+ // The other endpoints can only have a configuration as part of "endpoints"
396
+ associations = deviceConfig?.endpoints?.get(endpoint.index)?.associations;
397
+ }
398
+ if (associations?.size) {
399
+ lifelineGroups.push(...[...associations.values()]
400
+ .filter((a) => a.isLifeline)
401
+ .map((a) => a.groupId));
402
+ }
403
+ return distinct(lifelineGroups).sort();
404
+ }
405
+ export async function configureLifelineAssociations(ctx, endpoint) {
406
+ // Assign the controller to all lifeline groups
407
+ const ownNodeId = ctx.ownNodeId;
408
+ const node = ctx.getNodeOrThrow(endpoint.nodeId);
409
+ const valueDB = ctx.getValueDB(node.id);
410
+ const deviceConfig = ctx.getDeviceConfig?.(node.id);
411
+ // We check if a node supports Multi Channel CC before creating Multi Channel Lifeline Associations (#1109)
412
+ const nodeSupportsMultiChannel = node.supportsCC(CommandClasses["Multi Channel"]);
413
+ let assocInstance;
414
+ const assocAPI = CCAPI.create(CommandClasses.Association, ctx, endpoint);
415
+ if (endpoint.supportsCC(CommandClasses.Association)) {
416
+ assocInstance = AssociationCC;
417
+ }
418
+ let mcInstance;
419
+ let mcGroupCount = 0;
420
+ const mcAPI = CCAPI.create(CommandClasses["Multi Channel Association"], ctx, endpoint);
421
+ if (endpoint.supportsCC(CommandClasses["Multi Channel Association"])) {
422
+ mcInstance = MultiChannelAssociationCC;
423
+ mcGroupCount = mcInstance.getGroupCountCached(ctx, endpoint) ?? 0;
424
+ }
425
+ const lifelineGroups = getLifelineGroupIds(ctx, node);
426
+ if (lifelineGroups.length === 0) {
427
+ // We can look for the General Lifeline AGI profile as a last resort
428
+ if (endpoint.supportsCC(CommandClasses["Association Group Information"])) {
429
+ const agiAPI = CCAPI.create(CommandClasses["Association Group Information"], ctx, endpoint);
430
+ // The lifeline MUST be group 1
431
+ const lifeline = await agiAPI
432
+ .getGroupInfo(1, true)
433
+ .catch(() => undefined);
434
+ if (lifeline?.profile
435
+ === AssociationGroupInfoProfile["General: Lifeline"]) {
436
+ lifelineGroups.push(1);
437
+ }
438
+ }
439
+ }
440
+ if (lifelineGroups.length === 0) {
441
+ ctx.logNode(node.id, {
442
+ endpoint: endpoint.index,
443
+ message: "No information about Lifeline associations, cannot assign ourselves!",
444
+ level: "warn",
445
+ });
446
+ // Remember that we have NO lifeline association
447
+ valueDB.setValue(AssociationCCValues.hasLifeline.endpoint(endpoint.index), false);
448
+ return;
449
+ }
450
+ ctx.logNode(node.id, {
451
+ endpoint: endpoint.index,
452
+ message: `Checking/assigning lifeline groups: ${lifelineGroups.join(", ")}
453
+ supports classic associations: ${!!assocInstance}
454
+ supports multi channel associations: ${!!mcInstance}`,
455
+ });
456
+ for (const group of lifelineGroups) {
457
+ const groupSupportsMultiChannelAssociation = group <= mcGroupCount;
458
+ const assocConfig = deviceConfig?.getAssociationConfigForEndpoint(endpoint.index, group);
459
+ const mustUseNodeAssociation = !groupSupportsMultiChannelAssociation
460
+ || !nodeSupportsMultiChannel
461
+ || assocConfig?.multiChannel === false;
462
+ let mustUseMultiChannelAssociation = false;
463
+ if (groupSupportsMultiChannelAssociation && nodeSupportsMultiChannel) {
464
+ if (assocConfig?.multiChannel === true) {
465
+ mustUseMultiChannelAssociation = true;
466
+ }
467
+ else if (endpoint.index === 0) {
468
+ // If the node has multiple endpoints but none of the extra ones support associations,
469
+ // the root endpoints needs a Multi Channel Association
470
+ const allEndpoints = node.getAllEndpoints();
471
+ if (allEndpoints.length > 1
472
+ && allEndpoints
473
+ .filter((e) => e.index !== endpoint.index)
474
+ .every((e) => !e.supportsCC(CommandClasses.Association)
475
+ && !e.supportsCC(CommandClasses["Multi Channel Association"]))) {
476
+ mustUseMultiChannelAssociation = true;
477
+ }
478
+ }
479
+ }
480
+ ctx.logNode(node.id, {
481
+ endpoint: endpoint.index,
482
+ message: `Configuring lifeline group #${group}:
483
+ group supports multi channel: ${groupSupportsMultiChannelAssociation}
484
+ configured strategy: ${assocConfig?.multiChannel ?? "auto"}
485
+ must use node association: ${mustUseNodeAssociation}
486
+ must use endpoint association: ${mustUseMultiChannelAssociation}`,
487
+ });
488
+ // Figure out which associations exist and may need to be removed
489
+ const isAssignedAsNodeAssociation = (endpoint) => {
490
+ if (groupSupportsMultiChannelAssociation && mcInstance) {
491
+ if (
492
+ // Only consider a group if it doesn't share its associations with the root endpoint
493
+ mcInstance.getMaxNodesCached(ctx, endpoint, group)
494
+ > 0
495
+ && !!mcInstance
496
+ .getAllDestinationsCached(ctx, endpoint)
497
+ .get(group)
498
+ ?.some((addr) => addr.nodeId === ownNodeId
499
+ && addr.endpoint == undefined)) {
500
+ return true;
501
+ }
502
+ }
503
+ if (assocInstance) {
504
+ if (
505
+ // Only consider a group if it doesn't share its associations with the root endpoint
506
+ assocInstance.getMaxNodesCached(ctx, endpoint, group)
507
+ > 0
508
+ && !!assocInstance
509
+ .getAllDestinationsCached(ctx, endpoint)
510
+ .get(group)
511
+ ?.some((addr) => addr.nodeId === ownNodeId)) {
512
+ return true;
513
+ }
514
+ }
515
+ return false;
516
+ };
517
+ const isAssignedAsEndpointAssociation = (endpoint) => {
518
+ if (mcInstance) {
519
+ if (
520
+ // Only consider a group if it doesn't share its associations with the root endpoint
521
+ mcInstance.getMaxNodesCached(ctx, endpoint, group)
522
+ > 0
523
+ && mcInstance
524
+ .getAllDestinationsCached(ctx, endpoint)
525
+ .get(group)
526
+ ?.some((addr) => addr.nodeId === ownNodeId
527
+ && addr.endpoint === 0)) {
528
+ return true;
529
+ }
530
+ }
531
+ return false;
532
+ };
533
+ // If the node was used with other controller software, there might be
534
+ // invalid lifeline associations which cause reporting problems
535
+ const invalidEndpointAssociations = mcInstance
536
+ ?.getAllDestinationsCached(ctx, endpoint)
537
+ .get(group)
538
+ ?.filter((addr) => addr.nodeId === ownNodeId
539
+ && addr.endpoint != undefined
540
+ && addr.endpoint !== 0) ?? [];
541
+ // Clean them up first
542
+ if (invalidEndpointAssociations.length > 0
543
+ && mcAPI.isSupported()
544
+ && groupSupportsMultiChannelAssociation) {
545
+ ctx.logNode(node.id, {
546
+ endpoint: endpoint.index,
547
+ message: `Found invalid lifeline associations in group #${group}, removing them...`,
548
+ direction: "outbound",
549
+ });
550
+ await mcAPI.removeDestinations({
551
+ groupId: group,
552
+ endpoints: invalidEndpointAssociations,
553
+ });
554
+ // refresh the associations - don't trust that it worked
555
+ await mcAPI.getGroup(group);
556
+ }
557
+ // Assigning the correct lifelines depends on the association kind, source endpoint and the desired strategy:
558
+ //
559
+ // When `mustUseMultiChannelAssociation` is `true` - Use a multi channel association (if possible), no fallback
560
+ // When `mustUseNodeAssociation` is `true` - Use a node association (if possible), no fallback
561
+ // Otherwise:
562
+ // 1. Try a node association on the current endpoint/root
563
+ // 2. If Association CC is not supported, try assigning a node association with the Multi Channel Association CC
564
+ // 3. If that did not work, fall back to a multi channel association (target endpoint 0)
565
+ // 4. If that did not work either, the endpoint index is >0 and the node is Z-Wave+:
566
+ // Fall back to a multi channel association (target endpoint 0) on the root, if it doesn't have one yet.
567
+ let hasLifeline = false;
568
+ // First try: node association
569
+ if (!mustUseMultiChannelAssociation) {
570
+ if (isAssignedAsNodeAssociation(endpoint)) {
571
+ // We already have the correct association
572
+ hasLifeline = true;
573
+ ctx.logNode(node.id, {
574
+ endpoint: endpoint.index,
575
+ message: `Lifeline group #${group} is already assigned with a node association`,
576
+ direction: "none",
577
+ });
578
+ }
579
+ else if (assocAPI.isSupported()
580
+ // Some endpoint groups don't support having any destinations because they are shared with the root
581
+ && assocInstance.getMaxNodesCached(ctx, endpoint, group)
582
+ > 0) {
583
+ // We can use a node association, but first remove any possible endpoint associations
584
+ ctx.logNode(node.id, {
585
+ endpoint: endpoint.index,
586
+ message: `Assigning lifeline group #${group} with a node association via Association CC...`,
587
+ direction: "outbound",
588
+ });
589
+ if (isAssignedAsEndpointAssociation(endpoint)
590
+ && mcAPI.isSupported()) {
591
+ await mcAPI.removeDestinations({
592
+ groupId: group,
593
+ endpoints: [{ nodeId: ownNodeId, endpoint: 0 }],
594
+ });
595
+ // refresh the associations - don't trust that it worked
596
+ await mcAPI.getGroup(group);
597
+ }
598
+ await assocAPI.addNodeIds(group, ownNodeId);
599
+ // refresh the associations - don't trust that it worked
600
+ const groupReport = await assocAPI.getGroup(group);
601
+ hasLifeline = !!groupReport?.nodeIds.includes(ownNodeId);
602
+ if (hasLifeline) {
603
+ ctx.logNode(node.id, {
604
+ endpoint: endpoint.index,
605
+ message: `Lifeline group #${group} was assigned with a node association via Association CC`,
606
+ direction: "none",
607
+ });
608
+ }
609
+ else {
610
+ ctx.logNode(node.id, {
611
+ endpoint: endpoint.index,
612
+ message: `Assigning lifeline group #${group} with a node association via Association CC did not work`,
613
+ direction: "none",
614
+ });
615
+ }
616
+ }
617
+ // Second try: Node association using the Multi Channel Association CC
618
+ if (!hasLifeline
619
+ && mcAPI.isSupported()
620
+ && mcInstance.getMaxNodesCached(ctx, endpoint, group) > 0) {
621
+ // We can use a node association, but first remove any possible endpoint associations
622
+ ctx.logNode(node.id, {
623
+ endpoint: endpoint.index,
624
+ message: `Assigning lifeline group #${group} with a node association via Multi Channel Association CC...`,
625
+ direction: "outbound",
626
+ });
627
+ if (isAssignedAsEndpointAssociation(endpoint)) {
628
+ await mcAPI.removeDestinations({
629
+ groupId: group,
630
+ endpoints: [{ nodeId: ownNodeId, endpoint: 0 }],
631
+ });
632
+ }
633
+ await mcAPI.addDestinations({
634
+ groupId: group,
635
+ nodeIds: [ownNodeId],
636
+ });
637
+ // refresh the associations - don't trust that it worked
638
+ const groupReport = await mcAPI.getGroup(group);
639
+ hasLifeline = !!groupReport?.nodeIds.includes(ownNodeId);
640
+ if (hasLifeline) {
641
+ ctx.logNode(node.id, {
642
+ endpoint: endpoint.index,
643
+ message: `Lifeline group #${group} was assigned with a node association via Multi Channel Association CC`,
644
+ direction: "none",
645
+ });
646
+ }
647
+ else {
648
+ ctx.logNode(node.id, {
649
+ endpoint: endpoint.index,
650
+ message: `Assigning lifeline group #${group} with a node association via Multi Channel Association CC did not work`,
651
+ direction: "none",
652
+ });
653
+ }
654
+ }
655
+ }
656
+ // Third try: Use an endpoint association (target endpoint 0)
657
+ // This is only supported starting in Multi Channel Association CC V3
658
+ if (!hasLifeline && !mustUseNodeAssociation) {
659
+ if (isAssignedAsEndpointAssociation(endpoint)) {
660
+ // We already have the correct association
661
+ hasLifeline = true;
662
+ ctx.logNode(node.id, {
663
+ endpoint: endpoint.index,
664
+ message: `Lifeline group #${group} is already assigned with an endpoint association`,
665
+ direction: "none",
666
+ });
667
+ }
668
+ else if (mcAPI.isSupported()
669
+ && mcAPI.version >= 3
670
+ && mcInstance.getMaxNodesCached(ctx, endpoint, group) > 0) {
671
+ // We can use a multi channel association, but first remove any possible node associations
672
+ ctx.logNode(node.id, {
673
+ endpoint: endpoint.index,
674
+ message: `Assigning lifeline group #${group} with a multi channel association...`,
675
+ direction: "outbound",
676
+ });
677
+ if (isAssignedAsNodeAssociation(endpoint)) {
678
+ // It has been found that some devices don't correctly share the node associations between
679
+ // Association CC and Multi Channel Association CC, so we remove the nodes from both lists
680
+ await mcAPI.removeDestinations({
681
+ groupId: group,
682
+ nodeIds: [ownNodeId],
683
+ });
684
+ if (assocAPI.isSupported()) {
685
+ await assocAPI.removeNodeIds({
686
+ groupId: group,
687
+ nodeIds: [ownNodeId],
688
+ });
689
+ // refresh the associations - don't trust that it worked
690
+ await assocAPI.getGroup(group);
691
+ }
692
+ }
693
+ await mcAPI.addDestinations({
694
+ groupId: group,
695
+ endpoints: [{ nodeId: ownNodeId, endpoint: 0 }],
696
+ });
697
+ // refresh the associations - don't trust that it worked
698
+ const groupReport = await mcAPI.getGroup(group);
699
+ hasLifeline = !!groupReport?.endpoints.some((a) => a.nodeId === ownNodeId && a.endpoint === 0);
700
+ if (hasLifeline) {
701
+ ctx.logNode(node.id, {
702
+ endpoint: endpoint.index,
703
+ message: `Lifeline group #${group} was assigned with a multi channel association`,
704
+ direction: "none",
705
+ });
706
+ }
707
+ else {
708
+ ctx.logNode(node.id, {
709
+ endpoint: endpoint.index,
710
+ message: `Assigning lifeline group #${group} with a multi channel association did not work`,
711
+ direction: "none",
712
+ });
713
+ }
714
+ }
715
+ }
716
+ // Last attempt (actual Z-Wave+ Lifelines only): Try a multi channel association on the root.
717
+ // Endpoint interviews happen AFTER the root interview, so this enables us to overwrite what
718
+ // we previously configured on the root.
719
+ if (!hasLifeline
720
+ && group === 1
721
+ && node.supportsCC(CommandClasses["Z-Wave Plus Info"])
722
+ && endpoint.index > 0) {
723
+ // But first check if the root may have a multi channel association
724
+ const rootAssocConfig = deviceConfig
725
+ ?.getAssociationConfigForEndpoint(0, group);
726
+ const rootMustUseNodeAssociation = !nodeSupportsMultiChannel
727
+ || rootAssocConfig?.multiChannel === false;
728
+ ctx.logNode(node.id, {
729
+ endpoint: endpoint.index,
730
+ message: `Checking root device for fallback assignment of lifeline group #${group}:
731
+ root supports multi channel: ${nodeSupportsMultiChannel}
732
+ configured strategy: ${rootAssocConfig?.multiChannel ?? "auto"}
733
+ must use node association: ${rootMustUseNodeAssociation}`,
734
+ });
735
+ if (!rootMustUseNodeAssociation) {
736
+ if (isAssignedAsEndpointAssociation(node)) {
737
+ // We already have the correct association
738
+ hasLifeline = true;
739
+ ctx.logNode(node.id, {
740
+ endpoint: endpoint.index,
741
+ message: `Lifeline group #${group} is already assigned with a multi channel association on the root device`,
742
+ direction: "none",
743
+ });
744
+ }
745
+ else {
746
+ const rootMCAPI = CCAPI.create(CommandClasses["Multi Channel Association"], ctx, node);
747
+ const rootAssocAPI = CCAPI.create(CommandClasses.Association, ctx, node);
748
+ if (rootMCAPI.isSupported()) {
749
+ ctx.logNode(node.id, {
750
+ endpoint: endpoint.index,
751
+ message: `Assigning lifeline group #${group} with a multi channel association on the root device...`,
752
+ direction: "outbound",
753
+ });
754
+ // Clean up node associations because they might prevent us from adding the endpoint association
755
+ if (isAssignedAsNodeAssociation(node)) {
756
+ // It has been found that some devices don't correctly share the node associations between
757
+ // Association CC and Multi Channel Association CC, so we remove the nodes from both lists
758
+ await rootMCAPI.removeDestinations({
759
+ groupId: group,
760
+ nodeIds: [ownNodeId],
761
+ });
762
+ if (rootAssocAPI.isSupported()) {
763
+ await rootAssocAPI.removeNodeIds({
764
+ groupId: group,
765
+ nodeIds: [ownNodeId],
766
+ });
767
+ // refresh the associations - don't trust that it worked
768
+ await rootAssocAPI.getGroup(group);
769
+ }
770
+ }
771
+ await rootMCAPI.addDestinations({
772
+ groupId: group,
773
+ endpoints: [{ nodeId: ownNodeId, endpoint: 0 }],
774
+ });
775
+ // refresh the associations - don't trust that it worked
776
+ const groupReport = await rootMCAPI.getGroup(group);
777
+ hasLifeline = !!groupReport?.endpoints.some((a) => a.nodeId === ownNodeId && a.endpoint === 0);
778
+ }
779
+ }
780
+ }
781
+ }
782
+ if (!hasLifeline) {
783
+ ctx.logNode(node.id, {
784
+ endpoint: endpoint.index,
785
+ message: `All attempts to assign lifeline group #${group} failed, skipping...`,
786
+ direction: "none",
787
+ level: "warn",
788
+ });
789
+ }
790
+ }
791
+ // Remember that we did the association assignment
792
+ valueDB.setValue(AssociationCCValues.hasLifeline.endpoint(endpoint.index), true);
793
+ }
794
+ export async function assignLifelineIssueingCommand(ctx, endpoint, ccId, ccCommand) {
795
+ const node = ctx.getNodeOrThrow(endpoint.nodeId);
796
+ if (node.supportsCC(CommandClasses["Association Group Information"])
797
+ && (node.supportsCC(CommandClasses.Association)
798
+ || node.supportsCC(CommandClasses["Multi Channel Association"]))) {
799
+ const groupsIssueingNotifications = AssociationGroupInfoCC
800
+ .findGroupsForIssuedCommand(ctx, node, ccId, ccCommand);
801
+ if (groupsIssueingNotifications.length > 0) {
802
+ // We always grab the first group - usually it should be the lifeline
803
+ const groupId = groupsIssueingNotifications[0];
804
+ const existingAssociations = getAssociations(ctx, node).get(groupId)
805
+ ?? [];
806
+ if (!existingAssociations.some((a) => a.nodeId === ctx.ownNodeId)) {
807
+ ctx.logNode(node.id, {
808
+ endpoint: endpoint.index,
809
+ message: `Configuring associations to receive ${getCCName(ccId)} commands...`,
810
+ direction: "outbound",
811
+ });
812
+ await addAssociations(ctx, node, groupId, [
813
+ { nodeId: ctx.ownNodeId },
814
+ ]);
815
+ }
816
+ }
817
+ }
818
+ }
819
+ export function doesAnyLifelineSendActuatorOrSensorReports(ctx, node) {
820
+ // No association support means no unsolicited reports
821
+ if (!node.supportsCC(CommandClasses.Association)
822
+ && !node.supportsCC(CommandClasses["Multi Channel Association"])) {
823
+ return false;
824
+ }
825
+ // No AGI support means we cannot know
826
+ if (!node.supportsCC(CommandClasses["Association Group Information"])) {
827
+ return NOT_KNOWN;
828
+ }
829
+ // Lifeline group IDs include the ones we added via a config file, so they may not be considered true lifelines
830
+ const lifelineGroupIds = getLifelineGroupIds(ctx, node);
831
+ // If any potential lifeline group has the "General: Lifeline" profile, the node MUST send unsolicited reports that way
832
+ if (lifelineGroupIds.some((id) => AssociationGroupInfoCC.getGroupProfileCached(ctx, node, id) === AssociationGroupInfoProfile["General: Lifeline"])) {
833
+ return true;
834
+ }
835
+ // Otherwise check if any of the groups sends any actuator or sensor commands. We'll assume that those are reports
836
+ for (const groupId of lifelineGroupIds) {
837
+ const issuedCommands = AssociationGroupInfoCC.getIssuedCommandsCached(ctx, node, groupId);
838
+ if (!issuedCommands)
839
+ continue;
840
+ const commands = [...issuedCommands.keys()];
841
+ if (commands.some((c) => isActuatorCC(c) || isSensorCC(c))) {
842
+ return true;
843
+ }
844
+ }
845
+ return false;
846
+ }
847
+ //# sourceMappingURL=utils.js.map