@zwave-js/cc 14.3.10 → 15.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. package/build/cjs/cc/AlarmSensorCC.d.ts +139 -57
  2. package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
  3. package/build/cjs/cc/AssociationCC.d.ts +178 -43
  4. package/build/cjs/cc/AssociationCC.js +0 -4
  5. package/build/cjs/cc/AssociationCC.js.map +2 -2
  6. package/build/cjs/cc/AssociationGroupInfoCC.d.ts +138 -38
  7. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  8. package/build/cjs/cc/BarrierOperatorCC.d.ts +275 -73
  9. package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
  10. package/build/cjs/cc/BasicCC.d.ts +316 -71
  11. package/build/cjs/cc/BasicCC.js.map +2 -2
  12. package/build/cjs/cc/BatteryCC.d.ts +759 -164
  13. package/build/cjs/cc/BatteryCC.js.map +2 -2
  14. package/build/cjs/cc/BinarySensorCC.d.ts +91 -26
  15. package/build/cjs/cc/BinarySensorCC.js.map +2 -2
  16. package/build/cjs/cc/BinarySwitchCC.d.ts +190 -38
  17. package/build/cjs/cc/BinarySwitchCC.js.map +2 -2
  18. package/build/cjs/cc/CRC16CC.d.ts +4 -8
  19. package/build/cjs/cc/CRC16CC.js +4 -27
  20. package/build/cjs/cc/CRC16CC.js.map +2 -2
  21. package/build/cjs/cc/CentralSceneCC.d.ts +272 -53
  22. package/build/cjs/cc/CentralSceneCC.js.map +2 -2
  23. package/build/cjs/cc/ClimateControlScheduleCC.d.ts +150 -37
  24. package/build/cjs/cc/ClimateControlScheduleCC.js.map +2 -2
  25. package/build/cjs/cc/ClockCC.d.ts +3 -3
  26. package/build/cjs/cc/ClockCC.js.map +2 -2
  27. package/build/cjs/cc/ColorSwitchCC.d.ts +423 -96
  28. package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
  29. package/build/cjs/cc/ConfigurationCC._validateArgs.js +1 -1
  30. package/build/cjs/cc/ConfigurationCC._validateArgs.js.map +1 -1
  31. package/build/cjs/cc/ConfigurationCC.d.ts +101 -37
  32. package/build/cjs/cc/ConfigurationCC.js +0 -8
  33. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  34. package/build/cjs/cc/DeviceResetLocallyCC.d.ts +1 -1
  35. package/build/cjs/cc/DeviceResetLocallyCC.js.map +2 -2
  36. package/build/cjs/cc/DoorLockCC._validateArgs.js +1 -1
  37. package/build/cjs/cc/DoorLockCC._validateArgs.js.map +1 -1
  38. package/build/cjs/cc/DoorLockCC.d.ts +1731 -419
  39. package/build/cjs/cc/DoorLockCC.js.map +2 -2
  40. package/build/cjs/cc/DoorLockLoggingCC.d.ts +64 -12
  41. package/build/cjs/cc/DoorLockLoggingCC.js.map +2 -2
  42. package/build/cjs/cc/EnergyProductionCC.d.ts +29 -14
  43. package/build/cjs/cc/EnergyProductionCC.js.map +2 -2
  44. package/build/cjs/cc/EntryControlCC.d.ts +308 -57
  45. package/build/cjs/cc/EntryControlCC.js.map +2 -2
  46. package/build/cjs/cc/FirmwareUpdateMetaDataCC._validateArgs.d.ts +2 -0
  47. package/build/cjs/cc/FirmwareUpdateMetaDataCC._validateArgs.js +26 -0
  48. package/build/cjs/cc/FirmwareUpdateMetaDataCC._validateArgs.js.map +1 -1
  49. package/build/cjs/cc/FirmwareUpdateMetaDataCC.d.ts +389 -64
  50. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +154 -8
  51. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
  52. package/build/cjs/cc/HumidityControlModeCC.d.ts +125 -27
  53. package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
  54. package/build/cjs/cc/HumidityControlOperatingStateCC.d.ts +64 -18
  55. package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +2 -2
  56. package/build/cjs/cc/HumidityControlSetpointCC.d.ts +116 -39
  57. package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
  58. package/build/cjs/cc/InclusionControllerCC.d.ts +4 -4
  59. package/build/cjs/cc/InclusionControllerCC.js.map +2 -2
  60. package/build/cjs/cc/IndicatorCC.d.ts +325 -83
  61. package/build/cjs/cc/IndicatorCC.js.map +2 -2
  62. package/build/cjs/cc/IrrigationCC.d.ts +2170 -683
  63. package/build/cjs/cc/IrrigationCC.js.map +2 -2
  64. package/build/cjs/cc/LanguageCC.d.ts +128 -26
  65. package/build/cjs/cc/LanguageCC.js.map +2 -2
  66. package/build/cjs/cc/LockCC.d.ts +64 -14
  67. package/build/cjs/cc/LockCC.js.map +2 -2
  68. package/build/cjs/cc/ManufacturerProprietaryCC.d.ts +2 -2
  69. package/build/cjs/cc/ManufacturerProprietaryCC.js.map +2 -2
  70. package/build/cjs/cc/ManufacturerSpecificCC.d.ts +219 -57
  71. package/build/cjs/cc/ManufacturerSpecificCC.js.map +2 -2
  72. package/build/cjs/cc/MeterCC.d.ts +364 -89
  73. package/build/cjs/cc/MeterCC.js.map +2 -2
  74. package/build/cjs/cc/MultiChannelAssociationCC.d.ts +138 -40
  75. package/build/cjs/cc/MultiChannelAssociationCC.js +0 -5
  76. package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
  77. package/build/cjs/cc/MultiChannelCC.d.ts +469 -99
  78. package/build/cjs/cc/MultiChannelCC.js +8 -72
  79. package/build/cjs/cc/MultiChannelCC.js.map +2 -2
  80. package/build/cjs/cc/MultiCommandCC.d.ts +4 -8
  81. package/build/cjs/cc/MultiCommandCC.js +4 -37
  82. package/build/cjs/cc/MultiCommandCC.js.map +2 -2
  83. package/build/cjs/cc/MultilevelSensorCC.d.ts +118 -33
  84. package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
  85. package/build/cjs/cc/MultilevelSwitchCC.d.ts +490 -125
  86. package/build/cjs/cc/MultilevelSwitchCC.js.map +2 -2
  87. package/build/cjs/cc/NodeNamingCC.d.ts +128 -26
  88. package/build/cjs/cc/NodeNamingCC.js.map +2 -2
  89. package/build/cjs/cc/NotificationCC.d.ts +603 -161
  90. package/build/cjs/cc/NotificationCC.js +12 -1
  91. package/build/cjs/cc/NotificationCC.js.map +2 -2
  92. package/build/cjs/cc/PowerlevelCC.d.ts +6 -6
  93. package/build/cjs/cc/PowerlevelCC.js.map +2 -2
  94. package/build/cjs/cc/ProtectionCC.d.ts +496 -94
  95. package/build/cjs/cc/ProtectionCC.js.map +2 -2
  96. package/build/cjs/cc/SceneActivationCC.d.ts +127 -28
  97. package/build/cjs/cc/SceneActivationCC.js.map +2 -2
  98. package/build/cjs/cc/SceneActuatorConfigurationCC.d.ts +52 -25
  99. package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +2 -2
  100. package/build/cjs/cc/SceneControllerConfigurationCC.d.ts +53 -25
  101. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
  102. package/build/cjs/cc/ScheduleEntryLockCC.d.ts +268 -64
  103. package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
  104. package/build/cjs/cc/Security2CC.d.ts +15 -21
  105. package/build/cjs/cc/Security2CC.js +32 -347
  106. package/build/cjs/cc/Security2CC.js.map +3 -3
  107. package/build/cjs/cc/SecurityCC.d.ts +12 -19
  108. package/build/cjs/cc/SecurityCC.js +12 -106
  109. package/build/cjs/cc/SecurityCC.js.map +2 -2
  110. package/build/cjs/cc/SoundSwitchCC.d.ts +253 -64
  111. package/build/cjs/cc/SoundSwitchCC.js.map +2 -2
  112. package/build/cjs/cc/SupervisionCC.d.ts +28 -16
  113. package/build/cjs/cc/SupervisionCC.js +4 -29
  114. package/build/cjs/cc/SupervisionCC.js.map +2 -2
  115. package/build/cjs/cc/ThermostatFanModeCC.d.ts +187 -38
  116. package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
  117. package/build/cjs/cc/ThermostatFanStateCC.d.ts +64 -18
  118. package/build/cjs/cc/ThermostatFanStateCC.js.map +2 -2
  119. package/build/cjs/cc/ThermostatModeCC.d.ts +189 -40
  120. package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
  121. package/build/cjs/cc/ThermostatOperatingStateCC.d.ts +65 -19
  122. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
  123. package/build/cjs/cc/ThermostatSetbackCC.d.ts +4 -4
  124. package/build/cjs/cc/ThermostatSetbackCC.js.map +2 -2
  125. package/build/cjs/cc/ThermostatSetpointCC.d.ts +116 -36
  126. package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
  127. package/build/cjs/cc/TimeCC.d.ts +6 -6
  128. package/build/cjs/cc/TimeCC.js.map +2 -2
  129. package/build/cjs/cc/TimeParametersCC.d.ts +63 -12
  130. package/build/cjs/cc/TimeParametersCC.js.map +2 -2
  131. package/build/cjs/cc/TransportServiceCC.d.ts +7 -12
  132. package/build/cjs/cc/TransportServiceCC.js +3 -20
  133. package/build/cjs/cc/TransportServiceCC.js.map +2 -2
  134. package/build/cjs/cc/UserCodeCC._validateArgs.js +1 -1
  135. package/build/cjs/cc/UserCodeCC._validateArgs.js.map +1 -1
  136. package/build/cjs/cc/UserCodeCC.d.ts +931 -176
  137. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  138. package/build/cjs/cc/VersionCC.d.ts +897 -185
  139. package/build/cjs/cc/VersionCC.js.map +2 -2
  140. package/build/cjs/cc/WakeUpCC.d.ts +190 -38
  141. package/build/cjs/cc/WakeUpCC.js.map +2 -2
  142. package/build/cjs/cc/WindowCoveringCC.d.ts +193 -103
  143. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  144. package/build/cjs/cc/ZWavePlusCC.d.ts +311 -51
  145. package/build/cjs/cc/ZWavePlusCC.js.map +2 -2
  146. package/build/cjs/cc/ZWaveProtocolCC.d.ts +28 -28
  147. package/build/cjs/cc/ZWaveProtocolCC.js.map +2 -2
  148. package/build/cjs/cc/manufacturerProprietary/FibaroCC.d.ts +4 -4
  149. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +2 -2
  150. package/build/cjs/index.d.ts +1 -0
  151. package/build/cjs/index.js.map +1 -1
  152. package/build/cjs/index_browser.d.ts +9 -0
  153. package/build/cjs/index_browser.js +41 -1
  154. package/build/cjs/index_browser.js.map +2 -2
  155. package/build/cjs/lib/API.d.ts +7 -5
  156. package/build/cjs/lib/API.js +1 -1
  157. package/build/cjs/lib/API.js.map +2 -2
  158. package/build/cjs/lib/CommandClass.d.ts +10 -21
  159. package/build/cjs/lib/CommandClass.js +51 -106
  160. package/build/cjs/lib/CommandClass.js.map +3 -3
  161. package/build/cjs/lib/CommandClassDecorators.d.ts +1 -1
  162. package/build/cjs/lib/CommandClassDecorators.js +3 -3
  163. package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
  164. package/build/cjs/lib/Values.d.ts +2 -2
  165. package/build/cjs/lib/Values.js.map +2 -2
  166. package/build/cjs/lib/traits.d.ts +94 -0
  167. package/build/cjs/lib/traits.js +17 -0
  168. package/build/cjs/lib/traits.js.map +7 -0
  169. package/build/cjs/lib/utils.d.ts +2 -2
  170. package/build/cjs/lib/utils.js.map +2 -2
  171. package/build/esm/cc/AlarmSensorCC.d.ts +139 -57
  172. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  173. package/build/esm/cc/AlarmSensorCC.js +0 -1
  174. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  175. package/build/esm/cc/AssociationCC.d.ts +178 -43
  176. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  177. package/build/esm/cc/AssociationCC.js +0 -13
  178. package/build/esm/cc/AssociationCC.js.map +1 -1
  179. package/build/esm/cc/AssociationGroupInfoCC.d.ts +138 -38
  180. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  181. package/build/esm/cc/AssociationGroupInfoCC.js +0 -6
  182. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  183. package/build/esm/cc/BarrierOperatorCC.d.ts +275 -73
  184. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  185. package/build/esm/cc/BarrierOperatorCC.js +0 -3
  186. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  187. package/build/esm/cc/BasicCC.d.ts +316 -71
  188. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  189. package/build/esm/cc/BasicCC.js +0 -2
  190. package/build/esm/cc/BasicCC.js.map +1 -1
  191. package/build/esm/cc/BatteryCC.d.ts +759 -164
  192. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  193. package/build/esm/cc/BatteryCC.js +1 -2
  194. package/build/esm/cc/BatteryCC.js.map +1 -1
  195. package/build/esm/cc/BinarySensorCC.d.ts +91 -26
  196. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  197. package/build/esm/cc/BinarySensorCC.js +0 -3
  198. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  199. package/build/esm/cc/BinarySwitchCC.d.ts +190 -38
  200. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  201. package/build/esm/cc/BinarySwitchCC.js +0 -2
  202. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  203. package/build/esm/cc/CRC16CC.d.ts +4 -8
  204. package/build/esm/cc/CRC16CC.d.ts.map +1 -1
  205. package/build/esm/cc/CRC16CC.js +4 -34
  206. package/build/esm/cc/CRC16CC.js.map +1 -1
  207. package/build/esm/cc/CentralSceneCC.d.ts +272 -53
  208. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  209. package/build/esm/cc/CentralSceneCC.js +0 -1
  210. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  211. package/build/esm/cc/ClimateControlScheduleCC.d.ts +150 -37
  212. package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
  213. package/build/esm/cc/ClimateControlScheduleCC.js +0 -3
  214. package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
  215. package/build/esm/cc/ClockCC.d.ts +3 -3
  216. package/build/esm/cc/ClockCC.d.ts.map +1 -1
  217. package/build/esm/cc/ClockCC.js +0 -1
  218. package/build/esm/cc/ClockCC.js.map +1 -1
  219. package/build/esm/cc/ColorSwitchCC.d.ts +423 -96
  220. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  221. package/build/esm/cc/ColorSwitchCC.js +0 -6
  222. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  223. package/build/esm/cc/ConfigurationCC._validateArgs.js +1 -1
  224. package/build/esm/cc/ConfigurationCC._validateArgs.js.map +1 -1
  225. package/build/esm/cc/ConfigurationCC.d.ts +101 -37
  226. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  227. package/build/esm/cc/ConfigurationCC.js +0 -25
  228. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  229. package/build/esm/cc/DeviceResetLocallyCC.d.ts +1 -1
  230. package/build/esm/cc/DeviceResetLocallyCC.d.ts.map +1 -1
  231. package/build/esm/cc/DeviceResetLocallyCC.js.map +1 -1
  232. package/build/esm/cc/DoorLockCC._validateArgs.js +1 -1
  233. package/build/esm/cc/DoorLockCC._validateArgs.js.map +1 -1
  234. package/build/esm/cc/DoorLockCC.d.ts +1731 -419
  235. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  236. package/build/esm/cc/DoorLockCC.js +0 -2
  237. package/build/esm/cc/DoorLockCC.js.map +1 -1
  238. package/build/esm/cc/DoorLockLoggingCC.d.ts +64 -12
  239. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
  240. package/build/esm/cc/DoorLockLoggingCC.js +0 -1
  241. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
  242. package/build/esm/cc/EnergyProductionCC.d.ts +29 -14
  243. package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
  244. package/build/esm/cc/EnergyProductionCC.js +0 -2
  245. package/build/esm/cc/EnergyProductionCC.js.map +1 -1
  246. package/build/esm/cc/EntryControlCC.d.ts +308 -57
  247. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  248. package/build/esm/cc/EntryControlCC.js +0 -1
  249. package/build/esm/cc/EntryControlCC.js.map +1 -1
  250. package/build/esm/cc/FirmwareUpdateMetaDataCC._validateArgs.d.ts +2 -0
  251. package/build/esm/cc/FirmwareUpdateMetaDataCC._validateArgs.d.ts.map +1 -1
  252. package/build/esm/cc/FirmwareUpdateMetaDataCC._validateArgs.js +20 -0
  253. package/build/esm/cc/FirmwareUpdateMetaDataCC._validateArgs.js.map +1 -1
  254. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts +389 -64
  255. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  256. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +158 -30
  257. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  258. package/build/esm/cc/HumidityControlModeCC.d.ts +125 -27
  259. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  260. package/build/esm/cc/HumidityControlModeCC.js +0 -1
  261. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  262. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts +64 -18
  263. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
  264. package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
  265. package/build/esm/cc/HumidityControlSetpointCC.d.ts +116 -39
  266. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  267. package/build/esm/cc/HumidityControlSetpointCC.js +0 -4
  268. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  269. package/build/esm/cc/InclusionControllerCC.d.ts +4 -4
  270. package/build/esm/cc/InclusionControllerCC.d.ts.map +1 -1
  271. package/build/esm/cc/InclusionControllerCC.js +0 -2
  272. package/build/esm/cc/InclusionControllerCC.js.map +1 -1
  273. package/build/esm/cc/IndicatorCC.d.ts +325 -83
  274. package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
  275. package/build/esm/cc/IndicatorCC.js +0 -7
  276. package/build/esm/cc/IndicatorCC.js.map +1 -1
  277. package/build/esm/cc/IrrigationCC.d.ts +2170 -683
  278. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  279. package/build/esm/cc/IrrigationCC.js +0 -9
  280. package/build/esm/cc/IrrigationCC.js.map +1 -1
  281. package/build/esm/cc/LanguageCC.d.ts +128 -26
  282. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  283. package/build/esm/cc/LanguageCC.js +0 -1
  284. package/build/esm/cc/LanguageCC.js.map +1 -1
  285. package/build/esm/cc/LockCC.d.ts +64 -14
  286. package/build/esm/cc/LockCC.d.ts.map +1 -1
  287. package/build/esm/cc/LockCC.js +0 -1
  288. package/build/esm/cc/LockCC.js.map +1 -1
  289. package/build/esm/cc/ManufacturerProprietaryCC.d.ts +2 -2
  290. package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
  291. package/build/esm/cc/ManufacturerProprietaryCC.js +0 -1
  292. package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
  293. package/build/esm/cc/ManufacturerSpecificCC.d.ts +219 -57
  294. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  295. package/build/esm/cc/ManufacturerSpecificCC.js +0 -2
  296. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  297. package/build/esm/cc/MeterCC.d.ts +364 -89
  298. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  299. package/build/esm/cc/MeterCC.js +0 -4
  300. package/build/esm/cc/MeterCC.js.map +1 -1
  301. package/build/esm/cc/MultiChannelAssociationCC.d.ts +138 -40
  302. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  303. package/build/esm/cc/MultiChannelAssociationCC.js +0 -16
  304. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  305. package/build/esm/cc/MultiChannelCC.d.ts +469 -99
  306. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  307. package/build/esm/cc/MultiChannelCC.js +8 -101
  308. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  309. package/build/esm/cc/MultiCommandCC.d.ts +4 -8
  310. package/build/esm/cc/MultiCommandCC.d.ts.map +1 -1
  311. package/build/esm/cc/MultiCommandCC.js +4 -38
  312. package/build/esm/cc/MultiCommandCC.js.map +1 -1
  313. package/build/esm/cc/MultilevelSensorCC.d.ts +118 -33
  314. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  315. package/build/esm/cc/MultilevelSensorCC.js +0 -5
  316. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  317. package/build/esm/cc/MultilevelSwitchCC.d.ts +490 -125
  318. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  319. package/build/esm/cc/MultilevelSwitchCC.js +0 -4
  320. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  321. package/build/esm/cc/NodeNamingCC.d.ts +128 -26
  322. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  323. package/build/esm/cc/NodeNamingCC.js +0 -2
  324. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  325. package/build/esm/cc/NotificationCC.d.ts +603 -161
  326. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  327. package/build/esm/cc/NotificationCC.js +18 -12
  328. package/build/esm/cc/NotificationCC.js.map +1 -1
  329. package/build/esm/cc/PowerlevelCC.d.ts +6 -6
  330. package/build/esm/cc/PowerlevelCC.d.ts.map +1 -1
  331. package/build/esm/cc/PowerlevelCC.js +0 -4
  332. package/build/esm/cc/PowerlevelCC.js.map +1 -1
  333. package/build/esm/cc/ProtectionCC.d.ts +496 -94
  334. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  335. package/build/esm/cc/ProtectionCC.js +0 -3
  336. package/build/esm/cc/ProtectionCC.js.map +1 -1
  337. package/build/esm/cc/SceneActivationCC.d.ts +127 -28
  338. package/build/esm/cc/SceneActivationCC.d.ts.map +1 -1
  339. package/build/esm/cc/SceneActivationCC.js +0 -1
  340. package/build/esm/cc/SceneActivationCC.js.map +1 -1
  341. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts +52 -25
  342. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -1
  343. package/build/esm/cc/SceneActuatorConfigurationCC.js +0 -2
  344. package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
  345. package/build/esm/cc/SceneControllerConfigurationCC.d.ts +53 -25
  346. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
  347. package/build/esm/cc/SceneControllerConfigurationCC.js +0 -2
  348. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  349. package/build/esm/cc/ScheduleEntryLockCC.d.ts +268 -64
  350. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  351. package/build/esm/cc/ScheduleEntryLockCC.js +0 -14
  352. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  353. package/build/esm/cc/Security2CC.d.ts +15 -21
  354. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  355. package/build/esm/cc/Security2CC.js +27 -475
  356. package/build/esm/cc/Security2CC.js.map +1 -1
  357. package/build/esm/cc/SecurityCC.d.ts +12 -19
  358. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  359. package/build/esm/cc/SecurityCC.js +13 -138
  360. package/build/esm/cc/SecurityCC.js.map +1 -1
  361. package/build/esm/cc/SoundSwitchCC.d.ts +253 -64
  362. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
  363. package/build/esm/cc/SoundSwitchCC.js +0 -7
  364. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  365. package/build/esm/cc/SupervisionCC.d.ts +28 -16
  366. package/build/esm/cc/SupervisionCC.d.ts.map +1 -1
  367. package/build/esm/cc/SupervisionCC.js +4 -34
  368. package/build/esm/cc/SupervisionCC.js.map +1 -1
  369. package/build/esm/cc/ThermostatFanModeCC.d.ts +187 -38
  370. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  371. package/build/esm/cc/ThermostatFanModeCC.js +0 -1
  372. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  373. package/build/esm/cc/ThermostatFanStateCC.d.ts +64 -18
  374. package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
  375. package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
  376. package/build/esm/cc/ThermostatModeCC.d.ts +189 -40
  377. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  378. package/build/esm/cc/ThermostatModeCC.js +0 -3
  379. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  380. package/build/esm/cc/ThermostatOperatingStateCC.d.ts +65 -19
  381. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  382. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  383. package/build/esm/cc/ThermostatSetbackCC.d.ts +4 -4
  384. package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -1
  385. package/build/esm/cc/ThermostatSetbackCC.js +0 -2
  386. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
  387. package/build/esm/cc/ThermostatSetpointCC.d.ts +116 -36
  388. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  389. package/build/esm/cc/ThermostatSetpointCC.js +0 -6
  390. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  391. package/build/esm/cc/TimeCC.d.ts +6 -6
  392. package/build/esm/cc/TimeCC.d.ts.map +1 -1
  393. package/build/esm/cc/TimeCC.js +0 -4
  394. package/build/esm/cc/TimeCC.js.map +1 -1
  395. package/build/esm/cc/TimeParametersCC.d.ts +63 -12
  396. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  397. package/build/esm/cc/TimeParametersCC.js +0 -1
  398. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  399. package/build/esm/cc/TransportServiceCC.d.ts +7 -12
  400. package/build/esm/cc/TransportServiceCC.d.ts.map +1 -1
  401. package/build/esm/cc/TransportServiceCC.js +5 -38
  402. package/build/esm/cc/TransportServiceCC.js.map +1 -1
  403. package/build/esm/cc/UserCodeCC._validateArgs.js +1 -1
  404. package/build/esm/cc/UserCodeCC._validateArgs.js.map +1 -1
  405. package/build/esm/cc/UserCodeCC.d.ts +931 -176
  406. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  407. package/build/esm/cc/UserCodeCC.js +0 -12
  408. package/build/esm/cc/UserCodeCC.js.map +1 -1
  409. package/build/esm/cc/VersionCC.d.ts +897 -185
  410. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  411. package/build/esm/cc/VersionCC.js +0 -4
  412. package/build/esm/cc/VersionCC.js.map +1 -1
  413. package/build/esm/cc/WakeUpCC.d.ts +190 -38
  414. package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
  415. package/build/esm/cc/WakeUpCC.js +0 -1
  416. package/build/esm/cc/WakeUpCC.js.map +1 -1
  417. package/build/esm/cc/WindowCoveringCC.d.ts +193 -103
  418. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  419. package/build/esm/cc/WindowCoveringCC.js +0 -5
  420. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  421. package/build/esm/cc/ZWavePlusCC.d.ts +311 -51
  422. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
  423. package/build/esm/cc/ZWavePlusCC.js +0 -1
  424. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  425. package/build/esm/cc/ZWaveProtocolCC.d.ts +28 -28
  426. package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -1
  427. package/build/esm/cc/ZWaveProtocolCC.js +0 -27
  428. package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
  429. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts +4 -4
  430. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
  431. package/build/esm/cc/manufacturerProprietary/FibaroCC.js +0 -3
  432. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  433. package/build/esm/index.d.ts +1 -0
  434. package/build/esm/index.d.ts.map +1 -1
  435. package/build/esm/index_browser.d.ts +9 -0
  436. package/build/esm/index_browser.d.ts.map +1 -1
  437. package/build/esm/index_browser.js +8 -1
  438. package/build/esm/index_browser.js.map +1 -1
  439. package/build/esm/lib/API.d.ts +7 -5
  440. package/build/esm/lib/API.d.ts.map +1 -1
  441. package/build/esm/lib/API.js +1 -1
  442. package/build/esm/lib/API.js.map +1 -1
  443. package/build/esm/lib/CommandClass.d.ts +10 -21
  444. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  445. package/build/esm/lib/CommandClass.js +8 -101
  446. package/build/esm/lib/CommandClass.js.map +1 -1
  447. package/build/esm/lib/CommandClassDecorators.d.ts +1 -1
  448. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
  449. package/build/esm/lib/CommandClassDecorators.js +1 -1
  450. package/build/esm/lib/CommandClassDecorators.js.map +1 -1
  451. package/build/esm/lib/Values.d.ts +2 -2
  452. package/build/esm/lib/Values.d.ts.map +1 -1
  453. package/build/esm/lib/Values.js.map +1 -1
  454. package/build/esm/lib/traits.d.ts +94 -0
  455. package/build/esm/lib/traits.d.ts.map +1 -0
  456. package/build/esm/lib/traits.js +2 -0
  457. package/build/esm/lib/traits.js.map +1 -0
  458. package/build/esm/lib/utils.d.ts +2 -2
  459. package/build/esm/lib/utils.d.ts.map +1 -1
  460. package/build/esm/lib/utils.js.map +1 -1
  461. package/package.json +13 -13
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/IndicatorCC.ts"],
4
- "sourcesContent": ["import {\n\tCommandClasses,\n\ttype EndpointId,\n\tIndicator,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tencodeBitMask,\n\tgetIndicatorProperty,\n\tparseBitMask,\n\tvalidatePayload,\n} from \"@zwave-js/core/safe\";\nimport type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetValueDB,\n} from \"@zwave-js/host/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { num2hex } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { clamp, roundTo } from \"alcalzone-shared/math\";\nimport { isArray } from \"alcalzone-shared/typeguards\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\ttype SetValueImplementation,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n\ttype RefreshValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { IndicatorCommand, type IndicatorTimeout } from \"../lib/_Types.js\";\n\nfunction isManufacturerDefinedIndicator(indicatorId: number): boolean {\n\treturn indicatorId >= 0x80 && indicatorId <= 0x9f;\n}\n\nconst timeoutStringRegex =\n\t/^(?:(?<hoursStr>\\d+)h)?(?:(?<minutesStr>\\d+)m)?(?:(?<secondsStr>\\d+(?:\\.\\d+)?)s)?$/i;\n\nfunction parseIndicatorTimeoutString(\n\ttext: string,\n): IndicatorTimeout | undefined {\n\tif (!text.length) return undefined;\n\t// Try to parse the numeric parts from a timeout\n\tconst match = timeoutStringRegex.exec(text);\n\tif (!match) return undefined;\n\tconst { hoursStr, minutesStr, secondsStr } = match.groups!;\n\tif (!hoursStr && !minutesStr && !secondsStr) return undefined;\n\n\tconst ret: IndicatorTimeout = {};\n\tif (hoursStr) {\n\t\tret.hours = clamp(parseInt(hoursStr, 10), 0, 255);\n\t}\n\tif (minutesStr) {\n\t\tret.minutes = clamp(parseInt(minutesStr, 10), 0, 255);\n\t}\n\tif (secondsStr) {\n\t\tret.seconds = clamp(roundTo(parseFloat(secondsStr), 2), 0, 59.99);\n\t}\n\n\treturn ret;\n}\n\nfunction indicatorObjectsToTimeout(\n\tvalues: IndicatorObject[],\n): IndicatorTimeout | undefined {\n\tconst timeoutValues = values.filter((v) =>\n\t\t[0x0a, 0x06, 0x07, 0x08].includes(v.propertyId)\n\t);\n\tif (!timeoutValues.length) return undefined;\n\n\tconst hours = (timeoutValues.find((v) => v.propertyId === 0x0a)?.value\n\t\t?? 0) as number;\n\tconst minutes = (timeoutValues.find((v) => v.propertyId === 0x06)?.value\n\t\t?? 0) as number;\n\tconst seconds = clamp(\n\t\t(timeoutValues.find((v) => v.propertyId === 0x07)\n\t\t\t?.value as number) ?? 0,\n\t\t0,\n\t\t59,\n\t)\n\t\t+ clamp(\n\t\t\t\t(timeoutValues.find((v) => v.propertyId === 0x08)\n\t\t\t\t\t?.value as number) ?? 0,\n\t\t\t\t0,\n\t\t\t\t99,\n\t\t\t)\n\t\t\t/ 100;\n\n\treturn {\n\t\thours,\n\t\tminutes,\n\t\tseconds,\n\t};\n}\n\nexport const IndicatorCCValues = Object.freeze({\n\t...V.defineStaticCCValues(CommandClasses.Indicator, {\n\t\t...V.staticProperty(\"supportedIndicatorIds\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\n\t\t...V.staticPropertyWithName(\n\t\t\t\"valueV1\",\n\t\t\t\"value\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt8,\n\t\t\t\tlabel: \"Indicator value\",\n\t\t\t\tccSpecific: {\n\t\t\t\t\tindicatorId: 0,\n\t\t\t\t},\n\t\t\t} as const,\n\t\t),\n\n\t\t// Convenience values for indicators that are split across multiple properties\n\t\t...V.staticProperty(\n\t\t\t\"identify\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\tlabel: \"Identify\",\n\t\t\t\tstates: {\n\t\t\t\t\ttrue: \"Identify\",\n\t\t\t\t},\n\t\t\t} as const,\n\t\t\t{ minVersion: 3 } as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"timeout\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.String,\n\t\t\t\tlabel: \"Timeout\",\n\t\t\t} as const,\n\t\t\t{ minVersion: 3 } as const,\n\t\t),\n\t}),\n\n\t...V.defineDynamicCCValues(CommandClasses.Indicator, {\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"supportedPropertyIDs\",\n\t\t\t\"supportedPropertyIDs\",\n\t\t\t(indicatorId: number) => indicatorId,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"supportedPropertyIDs\"\n\t\t\t\t&& typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"valueV2\",\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t\t(indicatorId: number, propertyId: number) => indicatorId,\n\t\t\t(indicatorId: number, propertyId: number) => propertyId,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\ttypeof property === \"number\" && typeof propertyKey === \"number\",\n\t\t\t// The metadata is highly dependent on the indicator and property\n\t\t\t// so this is just a baseline\n\t\t\t(indicatorId: number, propertyId: number) => ({\n\t\t\t\t...ValueMetadata.Any,\n\t\t\t\tccSpecific: {\n\t\t\t\t\tindicatorId,\n\t\t\t\t\tpropertyId,\n\t\t\t\t},\n\t\t\t}),\n\t\t\t{ minVersion: 2 } as const,\n\t\t),\n\n\t\t...V.dynamicPropertyWithName(\n\t\t\t\"indicatorDescription\",\n\t\t\t(indicatorId: number) => indicatorId,\n\t\t\t({ property }) => typeof property === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true, minVersion: 4 } as const,\n\t\t),\n\t}),\n});\n\n/**\n * Looks up the configured metadata for the given indicator and property\n */\nfunction getIndicatorMetadata(\n\tindicatorId: Indicator,\n\tpropertyId: number,\n\toverrideIndicatorLabel?: string,\n): ValueMetadata {\n\tconst label = overrideIndicatorLabel\n\t\t|| getIndicatorName(indicatorId);\n\tconst prop = getIndicatorProperty(propertyId);\n\tconst baseMetadata = IndicatorCCValues.valueV2(\n\t\tindicatorId,\n\t\tpropertyId,\n\t).meta;\n\tif (!label && !prop) {\n\t\treturn {\n\t\t\t...baseMetadata,\n\t\t\t...ValueMetadata.UInt8,\n\t\t};\n\t} else if (!prop) {\n\t\treturn {\n\t\t\t...baseMetadata,\n\t\t\t...ValueMetadata.UInt8,\n\t\t\tlabel,\n\t\t};\n\t} else {\n\t\tif (prop.type === \"boolean\") {\n\t\t\treturn {\n\t\t\t\t...baseMetadata,\n\t\t\t\t...ValueMetadata.Boolean,\n\t\t\t\tlabel: `${label} - ${prop.label}`,\n\t\t\t\tdescription: prop.description,\n\t\t\t\treadable: !prop.readonly,\n\t\t\t};\n\t\t} else {\n\t\t\t// UInt8\n\t\t\treturn {\n\t\t\t\t...baseMetadata,\n\t\t\t\t...ValueMetadata.UInt8,\n\t\t\t\tlabel: `${label} - ${prop.label}`,\n\t\t\t\tdescription: prop.description,\n\t\t\t\tmin: prop.min,\n\t\t\t\tmax: prop.max,\n\t\t\t\treadable: !prop.readonly,\n\t\t\t};\n\t\t}\n\t}\n}\n\nfunction getIndicatorName(\n\tindicatorId: number | undefined,\n): string {\n\tif (indicatorId) {\n\t\treturn `${num2hex(indicatorId)} (${\n\t\t\tindicatorId in Indicator ? Indicator[indicatorId] : \"Unknown\"\n\t\t})`;\n\t} else {\n\t\treturn \"0 (default)\";\n\t}\n}\n\nconst MAX_INDICATOR_OBJECTS = 31;\n\n@API(CommandClasses.Indicator)\nexport class IndicatorCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: IndicatorCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase IndicatorCommand.Get:\n\t\t\tcase IndicatorCommand.Report:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase IndicatorCommand.Set:\n\t\t\t\treturn true; // This is mandatory\n\t\t\tcase IndicatorCommand.SupportedGet:\n\t\t\tcase IndicatorCommand.SupportedReport:\n\t\t\t\treturn this.version >= 2 && this.isSinglecast();\n\t\t\tcase IndicatorCommand.DescriptionGet:\n\t\t\tcase IndicatorCommand.DescriptionReport:\n\t\t\t\treturn this.version >= 4 && this.isSinglecast();\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(\n\t\t\tthis: IndicatorCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t\tvalue,\n\t\t) {\n\t\t\tif (property === \"value\") {\n\t\t\t\t// V1 value\n\t\t\t\tif (typeof value !== \"number\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"number\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this.set(value);\n\t\t\t} else if (\n\t\t\t\ttypeof property === \"number\"\n\t\t\t\t&& typeof propertyKey === \"number\"\n\t\t\t) {\n\t\t\t\tconst indicatorId = property;\n\t\t\t\tconst propertyId = propertyKey;\n\t\t\t\tconst expectedType = getIndicatorMetadata(\n\t\t\t\t\tindicatorId,\n\t\t\t\t\tpropertyId,\n\t\t\t\t).type as \"number\" | \"boolean\";\n\n\t\t\t\t// V2+ value\n\t\t\t\tif (typeof value !== expectedType) {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\texpectedType,\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this.set([\n\t\t\t\t\t{\n\t\t\t\t\t\tindicatorId: property,\n\t\t\t\t\t\tpropertyId: propertyKey,\n\t\t\t\t\t\tvalue: value as any,\n\t\t\t\t\t},\n\t\t\t\t]);\n\t\t\t} else if (property === \"identify\") {\n\t\t\t\tif (typeof value !== \"boolean\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"boolean\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this.identify();\n\t\t\t} else {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: IndicatorCCAPI, { property }) {\n\t\t\tif (property === \"value\") return this.get();\n\t\t\tif (typeof property === \"number\") {\n\t\t\t\treturn this.get(property);\n\t\t\t}\n\n\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t};\n\t}\n\n\t@validateArgs()\n\tpublic async get(\n\t\tindicatorId?: number,\n\t): Promise<MaybeNotKnown<number | IndicatorObject[]>> {\n\t\tthis.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Get);\n\n\t\tconst cc = new IndicatorCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tindicatorId,\n\t\t});\n\t\tconst response = await this.host.sendCommand<IndicatorCCReport>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (!response) return;\n\t\tif (response.values) return response.values;\n\t\treturn response.indicator0Value!;\n\t}\n\n\t@validateArgs()\n\tpublic async set(\n\t\tvalue: number | IndicatorObject[],\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Set);\n\n\t\tif (this.version === 1 && typeof value !== \"number\") {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Node ${this.endpoint\n\t\t\t\t\t.nodeId as number} only supports IndicatorCC V1 which requires a single value to be set`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t} else if (\n\t\t\tthis.version >= 2\n\t\t\t&& isArray(value)\n\t\t\t&& value.length > MAX_INDICATOR_OBJECTS\n\t\t) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Only ${MAX_INDICATOR_OBJECTS} indicator values can be set at a time!`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\n\t\tconst cc = new IndicatorCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...(typeof value === \"number\" ? { value } : { values: value }),\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async sendReport(\n\t\toptions: IndicatorCCReportOptions,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tIndicatorCommand,\n\t\t\tIndicatorCommand.Report,\n\t\t);\n\n\t\tconst cc = new IndicatorCCReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async getSupported(indicatorId: number): Promise<\n\t\t| {\n\t\t\tindicatorId?: number;\n\t\t\tsupportedProperties: readonly number[];\n\t\t\tnextIndicatorId: number;\n\t\t}\n\t\t| undefined\n\t> {\n\t\tthis.assertSupportsCommand(\n\t\t\tIndicatorCommand,\n\t\t\tIndicatorCommand.SupportedGet,\n\t\t);\n\n\t\tconst cc = new IndicatorCCSupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tindicatorId,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tIndicatorCCSupportedReport\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\t// Include the actual indicator ID if 0x00 was requested\n\t\t\t\t...(indicatorId === 0x00\n\t\t\t\t\t? { indicatorId: response.indicatorId }\n\t\t\t\t\t: undefined),\n\t\t\t\tsupportedProperties: response.supportedProperties,\n\t\t\t\tnextIndicatorId: response.nextIndicatorId,\n\t\t\t};\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async reportSupported(\n\t\tindicatorId: number,\n\t\tsupportedProperties: readonly number[],\n\t\tnextIndicatorId: number,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tIndicatorCommand,\n\t\t\tIndicatorCommand.SupportedReport,\n\t\t);\n\n\t\tconst cc = new IndicatorCCSupportedReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tindicatorId,\n\t\t\tsupportedProperties,\n\t\t\tnextIndicatorId,\n\t\t});\n\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async reportDescription(\n\t\tindicatorId: number,\n\t\tdescription: string,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tIndicatorCommand,\n\t\t\tIndicatorCommand.DescriptionReport,\n\t\t);\n\n\t\tconst cc = new IndicatorCCDescriptionReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tindicatorId,\n\t\t\tdescription,\n\t\t});\n\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t/**\n\t * Instructs the node to identify itself. Available starting with V3 of this CC.\n\t */\n\tpublic async identify(): Promise<SupervisionResult | undefined> {\n\t\tif (this.version < 3) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`The identify command is only supported in Indicator CC version 3 and above`,\n\t\t\t\tZWaveErrorCodes.CC_NotSupported,\n\t\t\t);\n\t\t}\n\t\treturn this.set([\n\t\t\t{\n\t\t\t\tindicatorId: 0x50,\n\t\t\t\tpropertyId: 0x03,\n\t\t\t\tvalue: 0x08,\n\t\t\t},\n\t\t\t{\n\t\t\t\tindicatorId: 0x50,\n\t\t\t\tpropertyId: 0x04,\n\t\t\t\tvalue: 0x03,\n\t\t\t},\n\t\t\t{\n\t\t\t\tindicatorId: 0x50,\n\t\t\t\tpropertyId: 0x05,\n\t\t\t\tvalue: 0x06,\n\t\t\t},\n\t\t]);\n\t}\n\n\t/**\n\t * Set a timeout for a given indicator ID after which the indicator will be turned off.\n\t * @param timeout The timeout in one of the supported forms:\n\t * \t- a timeout string in the form `12h18m17.59s`. All parts (hours, minutes, seconds, hundredths) are optional, but must be specified in this order. An empty string will be treated like `undefined`.\n\t * \t- an object specifying the timeout parts. An empty object will be treated like `undefined`.\n\t * \t- `undefined` to disable the timeout.\n\t */\n\t@validateArgs()\n\tpublic async setTimeout(\n\t\tindicatorId: number,\n\t\ttimeout: IndicatorTimeout | string | undefined,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertPhysicalEndpoint(this.endpoint);\n\n\t\tif (this.version < 3) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`The setTimeout command is only supported in Indicator CC version 3 and above`,\n\t\t\t\tZWaveErrorCodes.CC_NotSupported,\n\t\t\t);\n\t\t}\n\n\t\tif (typeof timeout === \"string\") {\n\t\t\tif (timeout === \"\") {\n\t\t\t\ttimeout = undefined;\n\t\t\t} else {\n\t\t\t\tconst parsed = parseIndicatorTimeoutString(timeout);\n\t\t\t\tif (!parsed) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`The timeout string \"${timeout}\" is not valid`,\n\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\ttimeout = parsed;\n\t\t\t}\n\t\t}\n\n\t\tconst supportedPropertyIDs = IndicatorCC.getSupportedPropertyIDsCached(\n\t\t\tthis.host,\n\t\t\tthis.endpoint,\n\t\t\tindicatorId,\n\t\t);\n\n\t\tconst objects: IndicatorObject[] = [];\n\t\tif (timeout) {\n\t\t\tconst hours = timeout.hours ?? 0;\n\t\t\tconst minutes = timeout.minutes ?? 0;\n\t\t\tconst seconds = Math.floor(timeout.seconds ?? 0);\n\t\t\tconst hundredths = Math.round(((timeout.seconds ?? 0) % 1) * 100);\n\n\t\t\tif (hours) {\n\t\t\t\tif (!supportedPropertyIDs?.includes(0x0a)) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`The indicator ${indicatorId} does not support setting the timeout in hours`,\n\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tobjects.push({\n\t\t\t\t\tindicatorId,\n\t\t\t\t\tpropertyId: 0x0a,\n\t\t\t\t\tvalue: hours,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (minutes) {\n\t\t\t\tif (!supportedPropertyIDs?.includes(0x06)) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`The indicator ${indicatorId} does not support setting the timeout in minutes`,\n\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tobjects.push({\n\t\t\t\t\tindicatorId,\n\t\t\t\t\tpropertyId: 0x06,\n\t\t\t\t\tvalue: minutes,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (seconds) {\n\t\t\t\tif (!supportedPropertyIDs?.includes(0x07)) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`The indicator ${indicatorId} does not support setting the timeout in seconds`,\n\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tobjects.push({\n\t\t\t\t\tindicatorId,\n\t\t\t\t\tpropertyId: 0x07,\n\t\t\t\t\tvalue: seconds,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (hundredths) {\n\t\t\t\tif (!supportedPropertyIDs?.includes(0x08)) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`The indicator ${indicatorId} does not support setting the timeout in 1/100 seconds`,\n\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tobjects.push({\n\t\t\t\t\tindicatorId,\n\t\t\t\t\tpropertyId: 0x08,\n\t\t\t\t\tvalue: hundredths,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (!objects.length) {\n\t\t\tobjects.push(\n\t\t\t\t...(supportedPropertyIDs ?? []).map((p) => ({\n\t\t\t\t\tindicatorId,\n\t\t\t\t\tpropertyId: p,\n\t\t\t\t\tvalue: 0,\n\t\t\t\t})),\n\t\t\t);\n\t\t}\n\n\t\treturn this.set(objects);\n\t}\n\n\t/**\n\t * Returns the timeout after which the given indicator will be turned off.\n\t */\n\t@validateArgs()\n\tpublic async getTimeout(\n\t\tindicatorId: number,\n\t): Promise<MaybeNotKnown<IndicatorTimeout>> {\n\t\tconst values = await this.get(indicatorId);\n\t\tif (!isArray(values)) return;\n\n\t\treturn indicatorObjectsToTimeout(values);\n\t}\n\n\t@validateArgs()\n\tpublic async getDescription(\n\t\tindicatorId: number,\n\t): Promise<MaybeNotKnown<string>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tIndicatorCommand,\n\t\t\tIndicatorCommand.DescriptionGet,\n\t\t);\n\n\t\tconst cc = new IndicatorCCDescriptionGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tindicatorId,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tIndicatorCCDescriptionReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.description;\n\t}\n}\n\n@commandClass(CommandClasses.Indicator)\n@implementedVersion(4)\n@ccValues(IndicatorCCValues)\nexport class IndicatorCC extends CommandClass {\n\tdeclare ccCommand: IndicatorCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses.Indicator,\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\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\tif (api.version > 1) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"scanning supported indicator IDs...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\t// Query ID 0 to get the first supported ID\n\t\t\tlet curId = 0x00;\n\t\t\tconst supportedIndicatorIds: number[] = [];\n\t\t\tdo {\n\t\t\t\tconst supportedResponse = await api.getSupported(curId);\n\t\t\t\tif (!supportedResponse) {\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\"Time out while scanning supported indicator IDs, skipping interview...\",\n\t\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsupportedIndicatorIds.push(\n\t\t\t\t\tsupportedResponse.indicatorId ?? curId,\n\t\t\t\t);\n\t\t\t\tcurId = supportedResponse.nextIndicatorId;\n\t\t\t} while (curId !== 0x00);\n\n\t\t\t// The IDs are not stored by the report CCs so store them here once we have all of them\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tIndicatorCCValues.supportedIndicatorIds,\n\t\t\t\tsupportedIndicatorIds,\n\t\t\t);\n\t\t\tconst logMessage = `supported indicator IDs: ${\n\t\t\t\tsupportedIndicatorIds.join(\n\t\t\t\t\t\", \",\n\t\t\t\t)\n\t\t\t}`;\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: logMessage,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\n\t\t\tif (api.version >= 4) {\n\t\t\t\tconst manufacturerDefinedIndicatorIds = supportedIndicatorIds\n\t\t\t\t\t.filter((id) => isManufacturerDefinedIndicator(id));\n\t\t\t\tif (manufacturerDefinedIndicatorIds.length > 0) {\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\"retrieving description for manufacturer-defined indicator IDs...\",\n\t\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (const id of manufacturerDefinedIndicatorIds) {\n\t\t\t\t\t\tawait api.getDescription(id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Query current values\n\t\tawait this.refreshValues(ctx);\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses.Indicator,\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tif (api.version === 1) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"requesting current indicator value...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tawait api.get();\n\t\t} else {\n\t\t\tconst supportedIndicatorIds: number[] = this.getValue(\n\t\t\t\tctx,\n\t\t\t\tIndicatorCCValues.supportedIndicatorIds,\n\t\t\t) ?? [];\n\t\t\tfor (const indicatorId of supportedIndicatorIds) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `requesting current indicator value (id = ${\n\t\t\t\t\t\tnum2hex(\n\t\t\t\t\t\t\tindicatorId,\n\t\t\t\t\t\t)\n\t\t\t\t\t})...`,\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tawait api.get(indicatorId);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic translatePropertyKey(\n\t\tctx: GetValueDB,\n\t\tproperty: string | number,\n\t\tpropertyKey: string | number,\n\t): string | undefined {\n\t\tif (property === \"value\") {\n\t\t\t// CC version 1 only has a single value that doesn't need to be translated\n\t\t\treturn undefined;\n\t\t} else if (\n\t\t\ttypeof property === \"number\"\n\t\t\t&& typeof propertyKey === \"number\"\n\t\t) {\n\t\t\t// The indicator property is our property key\n\t\t\tconst prop = getIndicatorProperty(propertyKey);\n\t\t\tif (prop) return prop.label;\n\t\t}\n\t\treturn super.translatePropertyKey(ctx, property, propertyKey);\n\t}\n\n\tpublic translateProperty(\n\t\tctx: GetValueDB,\n\t\tproperty: string | number,\n\t\tpropertyKey?: string | number,\n\t): string {\n\t\tif (typeof property === \"number\" && typeof propertyKey === \"number\") {\n\t\t\t// The indicator corresponds to our property\n\t\t\tif (property in Indicator) return Indicator[property];\n\t\t}\n\t\treturn super.translateProperty(ctx, property, propertyKey);\n\t}\n\n\tprotected supportsV2Indicators(ctx: GetValueDB): boolean {\n\t\t// First test if there are any indicator ids defined\n\t\tconst supportedIndicatorIds = this.getValue<number[]>(\n\t\t\tctx,\n\t\t\tIndicatorCCValues.supportedIndicatorIds,\n\t\t);\n\t\tif (!supportedIndicatorIds?.length) return false;\n\t\t// Then test if there are any property ids defined\n\t\treturn supportedIndicatorIds.some(\n\t\t\t(indicatorId) =>\n\t\t\t\t!!this.getValue<number[]>(\n\t\t\t\t\tctx,\n\t\t\t\t\tIndicatorCCValues.supportedPropertyIDs(indicatorId),\n\t\t\t\t)?.length,\n\t\t);\n\t}\n\n\tpublic static getSupportedPropertyIDsCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tindicatorId: number,\n\t): MaybeNotKnown<number[]> {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tIndicatorCCValues.supportedPropertyIDs(indicatorId).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t);\n\t}\n}\n\n// @publicAPI\nexport interface IndicatorObject {\n\tindicatorId: number;\n\tpropertyId: number;\n\tvalue: number | boolean;\n}\n\n// @publicAPI\nexport type IndicatorCCSetOptions =\n\t| {\n\t\tvalue: number;\n\t}\n\t| {\n\t\tvalues: IndicatorObject[];\n\t};\n\n@CCCommand(IndicatorCommand.Set)\n@useSupervision()\nexport class IndicatorCCSet extends IndicatorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<IndicatorCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (\"value\" in options) {\n\t\t\tthis.indicator0Value = options.value;\n\t\t} else {\n\t\t\tthis.values = options.values;\n\t\t}\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCSet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\n\t\tconst objCount = raw.payload.length >= 2\n\t\t\t? raw.payload[1] & 0b11111\n\t\t\t: 0;\n\n\t\tif (objCount === 0) {\n\t\t\tconst indicator0Value = raw.payload[0];\n\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\tvalue: indicator0Value,\n\t\t\t});\n\t\t}\n\n\t\tvalidatePayload(raw.payload.length >= 2 + 3 * objCount);\n\n\t\tconst values: IndicatorObject[] = [];\n\t\tfor (let i = 0; i < objCount; i++) {\n\t\t\tconst offset = 2 + 3 * i;\n\t\t\tconst value: IndicatorObject = {\n\t\t\t\tindicatorId: raw.payload[offset],\n\t\t\t\tpropertyId: raw.payload[offset + 1],\n\t\t\t\tvalue: raw.payload[offset + 2],\n\t\t\t};\n\t\t\tvalues.push(value);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tvalues,\n\t\t});\n\t}\n\n\tpublic indicator0Value: number | undefined;\n\tpublic values: IndicatorObject[] | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tif (this.values != undefined) {\n\t\t\t// V2+\n\t\t\tthis.payload = Bytes.alloc(2 + 3 * this.values.length, 0);\n\t\t\t// Byte 0 is the legacy value\n\t\t\tconst objCount = this.values.length & MAX_INDICATOR_OBJECTS;\n\t\t\tthis.payload[1] = objCount;\n\t\t\tfor (let i = 0; i < objCount; i++) {\n\t\t\t\tconst offset = 2 + 3 * i;\n\t\t\t\tthis.payload[offset] = this.values[i].indicatorId;\n\t\t\t\tthis.payload[offset + 1] = this.values[i].propertyId;\n\t\t\t\tconst value = this.values[i].value;\n\t\t\t\tthis.payload[offset + 2] = value === true\n\t\t\t\t\t? 0xff\n\t\t\t\t\t: value === false\n\t\t\t\t\t? 0x00\n\t\t\t\t\t: value;\n\t\t\t}\n\t\t} else {\n\t\t\t// V1\n\t\t\tthis.payload = Bytes.from([this.indicator0Value ?? 0]);\n\t\t}\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {};\n\t\tif (this.indicator0Value != undefined) {\n\t\t\tmessage[\"indicator 0 value\"] = this.indicator0Value;\n\t\t}\n\t\tif (this.values != undefined) {\n\t\t\tmessage.values = `${\n\t\t\t\tthis.values\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(v) => `\n\u00B7 indicatorId: ${v.indicatorId}\n propertyId: ${v.propertyId}\n value: ${v.value}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\")\n\t\t\t}`;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type IndicatorCCReportOptions =\n\t| {\n\t\tvalue: number;\n\t}\n\t| {\n\t\tvalues: IndicatorObject[];\n\t};\n\n@CCCommand(IndicatorCommand.Report)\nexport class IndicatorCCReport extends IndicatorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<IndicatorCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tif (\"value\" in options) {\n\t\t\tthis.indicator0Value = options.value;\n\t\t} else if (\"values\" in options) {\n\t\t\tif (options.values.length > MAX_INDICATOR_OBJECTS) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`Only ${MAX_INDICATOR_OBJECTS} indicator values can be set at a time!`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.values = options.values;\n\t\t}\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\n\t\tconst objCount = raw.payload.length >= 2\n\t\t\t? raw.payload[1] & 0b11111\n\t\t\t: 0;\n\n\t\tif (objCount === 0) {\n\t\t\tconst indicator0Value = raw.payload[0];\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\tvalue: indicator0Value,\n\t\t\t});\n\t\t}\n\n\t\tvalidatePayload(raw.payload.length >= 2 + 3 * objCount);\n\n\t\tconst values: IndicatorObject[] = [];\n\t\tfor (let i = 0; i < objCount; i++) {\n\t\t\tconst offset = 2 + 3 * i;\n\t\t\tconst value: IndicatorObject = {\n\t\t\t\tindicatorId: raw.payload[offset],\n\t\t\t\tpropertyId: raw.payload[offset + 1],\n\t\t\t\tvalue: raw.payload[offset + 2],\n\t\t\t};\n\t\t\tvalues.push(value);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tvalues,\n\t\t});\n\n\t\t// TODO: Think if we want this:\n\n\t\t// // If not all Property IDs are included in the command for the actual Indicator ID,\n\t\t// // a controlling node MUST assume non-specified Property IDs values to be 0x00.\n\t\t// const indicatorId = this.values[0].indicatorId;\n\t\t// const supportedIndicatorProperties =\n\t\t// \tvalueDB.getValue<number[]>(\n\t\t// \t\tgetSupportedPropertyIDsValueID(\n\t\t// \t\t\tthis.endpointIndex,\n\t\t// \t\t\tindicatorId,\n\t\t// \t\t),\n\t\t// \t) ?? [];\n\t\t// // Find out which ones are missing\n\t\t// const missingIndicatorProperties = supportedIndicatorProperties.filter(\n\t\t// \tprop =>\n\t\t// \t\t!this.values!.find(({ propertyId }) => prop === propertyId),\n\t\t// );\n\t\t// // And assume they are 0 (false)\n\t\t// for (const missing of missingIndicatorProperties) {\n\t\t// \tthis.setIndicatorValue({\n\t\t// \t\tindicatorId,\n\t\t// \t\tpropertyId: missing,\n\t\t// \t\tvalue: 0,\n\t\t// \t});\n\t\t// }\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tif (this.indicator0Value != undefined) {\n\t\t\tif (!this.supportsV2Indicators(ctx)) {\n\t\t\t\t// Publish the value\n\t\t\t\tconst valueV1 = IndicatorCCValues.valueV1;\n\t\t\t\tthis.setMetadata(ctx, valueV1);\n\t\t\t\tthis.setValue(ctx, valueV1, this.indicator0Value);\n\t\t\t} else {\n\t\t\t\tif (this.isSinglecast()) {\n\t\t\t\t\t// Don't!\n\t\t\t\t\tctx.logNode(this.nodeId, {\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t`ignoring V1 indicator report because the node supports V2 indicators`,\n\t\t\t\t\t\tdirection: \"none\",\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (this.values) {\n\t\t\t// Store the simple values first\n\t\t\tfor (const value of this.values) {\n\t\t\t\tthis.setIndicatorValue(ctx, value);\n\t\t\t}\n\n\t\t\t// Then group values into the convenience properties\n\n\t\t\t// ... timeout\n\t\t\tconst timeout = indicatorObjectsToTimeout(this.values);\n\t\t\tif (timeout) {\n\t\t\t\tlet timeoutString = \"\";\n\t\t\t\tif (timeout?.hours) timeoutString += `${timeout.hours}h`;\n\t\t\t\tif (timeout?.minutes) timeoutString += `${timeout.minutes}m`;\n\t\t\t\tif (timeout?.seconds) timeoutString += `${timeout.seconds}s`;\n\n\t\t\t\tthis.setValue(\n\t\t\t\t\tctx,\n\t\t\t\t\tIndicatorCCValues.timeout,\n\t\t\t\t\ttimeoutString,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic readonly indicator0Value: number | undefined;\n\tpublic readonly values: IndicatorObject[] | undefined;\n\n\tprivate setIndicatorValue(\n\t\tctx: GetValueDB,\n\t\tvalue: IndicatorObject,\n\t): void {\n\t\t// Manufacturer-defined indicators may need a custom label\n\t\tconst overrideIndicatorLabel = isManufacturerDefinedIndicator(\n\t\t\t\tvalue.indicatorId,\n\t\t\t)\n\t\t\t? this.getValue<string>(\n\t\t\t\tctx,\n\t\t\t\tIndicatorCCValues.indicatorDescription(value.indicatorId),\n\t\t\t)\n\t\t\t: undefined;\n\n\t\tconst metadata = getIndicatorMetadata(\n\t\t\tvalue.indicatorId,\n\t\t\tvalue.propertyId,\n\t\t\toverrideIndicatorLabel,\n\t\t);\n\t\t// Some values need to be converted\n\t\tif (metadata.type === \"boolean\") {\n\t\t\tvalue.value = !!value.value;\n\t\t}\n\n\t\t// Publish the value\n\t\tconst valueV2 = IndicatorCCValues.valueV2(\n\t\t\tvalue.indicatorId,\n\t\t\tvalue.propertyId,\n\t\t);\n\t\tthis.setMetadata(ctx, valueV2, metadata);\n\t\tthis.setValue(ctx, valueV2, value.value);\n\t}\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tif (this.values != undefined) {\n\t\t\t// V2+\n\t\t\tthis.payload = Bytes.alloc(2 + 3 * this.values.length, 0);\n\t\t\t// Byte 0 is the legacy value\n\t\t\tconst objCount = this.values.length & MAX_INDICATOR_OBJECTS;\n\t\t\tthis.payload[1] = objCount;\n\t\t\tfor (let i = 0; i < objCount; i++) {\n\t\t\t\tconst offset = 2 + 3 * i;\n\t\t\t\tthis.payload[offset] = this.values[i].indicatorId;\n\t\t\t\tthis.payload[offset + 1] = this.values[i].propertyId;\n\t\t\t\tconst value = this.values[i].value;\n\t\t\t\tthis.payload[offset + 2] = value === true\n\t\t\t\t\t? 0xff\n\t\t\t\t\t: value === false\n\t\t\t\t\t? 0x00\n\t\t\t\t\t: value;\n\t\t\t}\n\t\t} else {\n\t\t\t// V1\n\t\t\tthis.payload = Bytes.from([this.indicator0Value ?? 0]);\n\t\t}\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {};\n\t\tif (this.indicator0Value != undefined) {\n\t\t\tmessage[\"indicator 0 value\"] = this.indicator0Value;\n\t\t}\n\t\tif (this.values != undefined) {\n\t\t\tmessage.values = `${\n\t\t\t\tthis.values\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(v) => `\n\u00B7 indicatorId: ${v.indicatorId}\n propertyId: ${v.propertyId}\n value: ${v.value}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\")\n\t\t\t}`;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface IndicatorCCGetOptions {\n\tindicatorId?: number;\n}\n\n@CCCommand(IndicatorCommand.Get)\n@expectedCCResponse(IndicatorCCReport)\nexport class IndicatorCCGet extends IndicatorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<IndicatorCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.indicatorId = options.indicatorId;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCGet {\n\t\tlet indicatorId: number | undefined;\n\n\t\tif (raw.payload.length > 0) {\n\t\t\tindicatorId = raw.payload[0];\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tindicatorId,\n\t\t});\n\t}\n\n\tpublic indicatorId: number | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tif (this.indicatorId != undefined) {\n\t\t\tthis.payload = Bytes.from([this.indicatorId]);\n\t\t}\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tindicator: getIndicatorName(this.indicatorId),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface IndicatorCCSupportedReportOptions {\n\tindicatorId: number;\n\tnextIndicatorId: number;\n\tsupportedProperties: readonly number[];\n}\n\n@CCCommand(IndicatorCommand.SupportedReport)\nexport class IndicatorCCSupportedReport extends IndicatorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<IndicatorCCSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.indicatorId = options.indicatorId;\n\t\tthis.nextIndicatorId = options.nextIndicatorId;\n\t\tthis.supportedProperties = options.supportedProperties;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): IndicatorCCSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst indicatorId = raw.payload[0];\n\t\tconst nextIndicatorId = raw.payload[1];\n\t\tconst bitMaskLength = raw.payload[2] & 0b11111;\n\t\tlet supportedProperties: readonly number[];\n\n\t\tif (bitMaskLength === 0) {\n\t\t\tsupportedProperties = [];\n\t\t} else {\n\t\t\tvalidatePayload(raw.payload.length >= 3 + bitMaskLength);\n\t\t\t// The bit mask starts at 0, but bit 0 is not used\n\t\t\tsupportedProperties = parseBitMask(\n\t\t\t\traw.payload.subarray(3, 3 + bitMaskLength),\n\t\t\t\t0,\n\t\t\t).filter((v) => v !== 0);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tindicatorId,\n\t\t\tnextIndicatorId,\n\t\t\tsupportedProperties,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tif (this.indicatorId !== 0x00) {\n\t\t\t// Remember which property IDs are supported\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tIndicatorCCValues.supportedPropertyIDs(this.indicatorId),\n\t\t\t\tthis.supportedProperties,\n\t\t\t);\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic readonly indicatorId: number;\n\tpublic readonly nextIndicatorId: number;\n\tpublic readonly supportedProperties: readonly number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tconst bitmask = this.supportedProperties.length > 0\n\t\t\t? encodeBitMask(this.supportedProperties, undefined, 0)\n\t\t\t: new Bytes();\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([\n\t\t\t\tthis.indicatorId,\n\t\t\t\tthis.nextIndicatorId,\n\t\t\t\tbitmask.length,\n\t\t\t]),\n\t\t\tbitmask,\n\t\t]);\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tindicator: getIndicatorName(this.indicatorId),\n\t\t\t\t\"supported properties\": `${\n\t\t\t\t\tthis.supportedProperties\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t(id) =>\n\t\t\t\t\t\t\t\tgetIndicatorProperty(id)?.label\n\t\t\t\t\t\t\t\t\t?? `Unknown (${num2hex(id)})`,\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\", \")\n\t\t\t\t}`,\n\t\t\t\t\"next indicator\": getIndicatorName(this.nextIndicatorId),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface IndicatorCCSupportedGetOptions {\n\tindicatorId: number;\n}\n\nfunction testResponseForIndicatorSupportedGet(\n\tsent: IndicatorCCSupportedGet,\n\treceived: IndicatorCCSupportedReport,\n) {\n\treturn sent.indicatorId === 0 || received.indicatorId === sent.indicatorId;\n}\n\n@CCCommand(IndicatorCommand.SupportedGet)\n@expectedCCResponse(\n\tIndicatorCCSupportedReport,\n\ttestResponseForIndicatorSupportedGet,\n)\nexport class IndicatorCCSupportedGet extends IndicatorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<IndicatorCCSupportedGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.indicatorId = options.indicatorId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): IndicatorCCSupportedGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst indicatorId = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tindicatorId,\n\t\t});\n\t}\n\n\tpublic indicatorId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.indicatorId]);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tindicator: getIndicatorName(this.indicatorId),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface IndicatorCCDescriptionReportOptions {\n\tindicatorId: number;\n\tdescription: string;\n}\n\n@CCCommand(IndicatorCommand.DescriptionReport)\nexport class IndicatorCCDescriptionReport extends IndicatorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<IndicatorCCDescriptionReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.indicatorId = options.indicatorId;\n\t\tthis.description = options.description;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): IndicatorCCDescriptionReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst indicatorId = raw.payload[0];\n\t\tconst descrptionLength = raw.payload[1];\n\t\tvalidatePayload(raw.payload.length >= 2 + descrptionLength);\n\t\tconst description: string = raw.payload\n\t\t\t.subarray(2, 2 + descrptionLength)\n\t\t\t.toString(\"utf8\");\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tindicatorId,\n\t\t\tdescription,\n\t\t});\n\t}\n\n\tpublic indicatorId: number;\n\tpublic description: string;\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tif (this.description) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tIndicatorCCValues.indicatorDescription(this.indicatorId),\n\t\t\t\tthis.description,\n\t\t\t);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tconst description = Bytes.from(this.description, \"utf8\");\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.indicatorId, description.length]),\n\t\t\tdescription,\n\t\t]);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"indicator ID\": this.indicatorId,\n\t\t\t\tdescription: this.description || \"(none)\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface IndicatorCCDescriptionGetOptions {\n\tindicatorId: number;\n}\n\nfunction testResponseForIndicatorDescriptionGet(\n\tsent: IndicatorCCDescriptionGet,\n\treceived: IndicatorCCDescriptionReport,\n) {\n\treturn received.indicatorId === sent.indicatorId;\n}\n\n@CCCommand(IndicatorCommand.DescriptionGet)\n@expectedCCResponse(\n\tIndicatorCCDescriptionReport,\n\ttestResponseForIndicatorDescriptionGet,\n)\nexport class IndicatorCCDescriptionGet extends IndicatorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<IndicatorCCDescriptionGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.indicatorId = options.indicatorId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): IndicatorCCDescriptionGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst indicatorId = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tindicatorId,\n\t\t});\n\t}\n\n\tpublic indicatorId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.indicatorId]);\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"indicator ID\": this.indicatorId,\n\t\t\t},\n\t\t};\n\t}\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { type CCEncodingContext, type CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype EndpointId,\n\ttype GetValueDB,\n\tIndicator,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tencodeBitMask,\n\tgetIndicatorProperty,\n\tparseBitMask,\n\tvalidatePayload,\n} from \"@zwave-js/core/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { num2hex } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { clamp, roundTo } from \"alcalzone-shared/math\";\nimport { isArray } from \"alcalzone-shared/typeguards\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\ttype SetValueImplementation,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n\ttype RefreshValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { IndicatorCommand, type IndicatorTimeout } from \"../lib/_Types.js\";\n\nfunction isManufacturerDefinedIndicator(indicatorId: number): boolean {\n\treturn indicatorId >= 0x80 && indicatorId <= 0x9f;\n}\n\nconst timeoutStringRegex =\n\t/^(?:(?<hoursStr>\\d+)h)?(?:(?<minutesStr>\\d+)m)?(?:(?<secondsStr>\\d+(?:\\.\\d+)?)s)?$/i;\n\nfunction parseIndicatorTimeoutString(\n\ttext: string,\n): IndicatorTimeout | undefined {\n\tif (!text.length) return undefined;\n\t// Try to parse the numeric parts from a timeout\n\tconst match = timeoutStringRegex.exec(text);\n\tif (!match) return undefined;\n\tconst { hoursStr, minutesStr, secondsStr } = match.groups!;\n\tif (!hoursStr && !minutesStr && !secondsStr) return undefined;\n\n\tconst ret: IndicatorTimeout = {};\n\tif (hoursStr) {\n\t\tret.hours = clamp(parseInt(hoursStr, 10), 0, 255);\n\t}\n\tif (minutesStr) {\n\t\tret.minutes = clamp(parseInt(minutesStr, 10), 0, 255);\n\t}\n\tif (secondsStr) {\n\t\tret.seconds = clamp(roundTo(parseFloat(secondsStr), 2), 0, 59.99);\n\t}\n\n\treturn ret;\n}\n\nfunction indicatorObjectsToTimeout(\n\tvalues: IndicatorObject[],\n): IndicatorTimeout | undefined {\n\tconst timeoutValues = values.filter((v) =>\n\t\t[0x0a, 0x06, 0x07, 0x08].includes(v.propertyId)\n\t);\n\tif (!timeoutValues.length) return undefined;\n\n\tconst hours = (timeoutValues.find((v) => v.propertyId === 0x0a)?.value\n\t\t?? 0) as number;\n\tconst minutes = (timeoutValues.find((v) => v.propertyId === 0x06)?.value\n\t\t?? 0) as number;\n\tconst seconds = clamp(\n\t\t(timeoutValues.find((v) => v.propertyId === 0x07)\n\t\t\t?.value as number) ?? 0,\n\t\t0,\n\t\t59,\n\t)\n\t\t+ clamp(\n\t\t\t\t(timeoutValues.find((v) => v.propertyId === 0x08)\n\t\t\t\t\t?.value as number) ?? 0,\n\t\t\t\t0,\n\t\t\t\t99,\n\t\t\t)\n\t\t\t/ 100;\n\n\treturn {\n\t\thours,\n\t\tminutes,\n\t\tseconds,\n\t};\n}\n\nexport const IndicatorCCValues = Object.freeze({\n\t...V.defineStaticCCValues(CommandClasses.Indicator, {\n\t\t...V.staticProperty(\"supportedIndicatorIds\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\n\t\t...V.staticPropertyWithName(\n\t\t\t\"valueV1\",\n\t\t\t\"value\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt8,\n\t\t\t\tlabel: \"Indicator value\",\n\t\t\t\tccSpecific: {\n\t\t\t\t\tindicatorId: 0,\n\t\t\t\t},\n\t\t\t} as const,\n\t\t),\n\n\t\t// Convenience values for indicators that are split across multiple properties\n\t\t...V.staticProperty(\n\t\t\t\"identify\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\tlabel: \"Identify\",\n\t\t\t\tstates: {\n\t\t\t\t\ttrue: \"Identify\",\n\t\t\t\t},\n\t\t\t} as const,\n\t\t\t{ minVersion: 3 } as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"timeout\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.String,\n\t\t\t\tlabel: \"Timeout\",\n\t\t\t} as const,\n\t\t\t{ minVersion: 3 } as const,\n\t\t),\n\t}),\n\n\t...V.defineDynamicCCValues(CommandClasses.Indicator, {\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"supportedPropertyIDs\",\n\t\t\t\"supportedPropertyIDs\",\n\t\t\t(indicatorId: number) => indicatorId,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"supportedPropertyIDs\"\n\t\t\t\t&& typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"valueV2\",\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t\t(indicatorId: number, propertyId: number) => indicatorId,\n\t\t\t(indicatorId: number, propertyId: number) => propertyId,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\ttypeof property === \"number\" && typeof propertyKey === \"number\",\n\t\t\t// The metadata is highly dependent on the indicator and property\n\t\t\t// so this is just a baseline\n\t\t\t(indicatorId: number, propertyId: number) => ({\n\t\t\t\t...ValueMetadata.Any,\n\t\t\t\tccSpecific: {\n\t\t\t\t\tindicatorId,\n\t\t\t\t\tpropertyId,\n\t\t\t\t},\n\t\t\t}),\n\t\t\t{ minVersion: 2 } as const,\n\t\t),\n\n\t\t...V.dynamicPropertyWithName(\n\t\t\t\"indicatorDescription\",\n\t\t\t(indicatorId: number) => indicatorId,\n\t\t\t({ property }) => typeof property === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true, minVersion: 4 } as const,\n\t\t),\n\t}),\n});\n\n/**\n * Looks up the configured metadata for the given indicator and property\n */\nfunction getIndicatorMetadata(\n\tindicatorId: Indicator,\n\tpropertyId: number,\n\toverrideIndicatorLabel?: string,\n): ValueMetadata {\n\tconst label = overrideIndicatorLabel\n\t\t|| getIndicatorName(indicatorId);\n\tconst prop = getIndicatorProperty(propertyId);\n\tconst baseMetadata = IndicatorCCValues.valueV2(\n\t\tindicatorId,\n\t\tpropertyId,\n\t).meta;\n\tif (!label && !prop) {\n\t\treturn {\n\t\t\t...baseMetadata,\n\t\t\t...ValueMetadata.UInt8,\n\t\t};\n\t} else if (!prop) {\n\t\treturn {\n\t\t\t...baseMetadata,\n\t\t\t...ValueMetadata.UInt8,\n\t\t\tlabel,\n\t\t};\n\t} else {\n\t\tif (prop.type === \"boolean\") {\n\t\t\treturn {\n\t\t\t\t...baseMetadata,\n\t\t\t\t...ValueMetadata.Boolean,\n\t\t\t\tlabel: `${label} - ${prop.label}`,\n\t\t\t\tdescription: prop.description,\n\t\t\t\treadable: !prop.readonly,\n\t\t\t};\n\t\t} else {\n\t\t\t// UInt8\n\t\t\treturn {\n\t\t\t\t...baseMetadata,\n\t\t\t\t...ValueMetadata.UInt8,\n\t\t\t\tlabel: `${label} - ${prop.label}`,\n\t\t\t\tdescription: prop.description,\n\t\t\t\tmin: prop.min,\n\t\t\t\tmax: prop.max,\n\t\t\t\treadable: !prop.readonly,\n\t\t\t};\n\t\t}\n\t}\n}\n\nfunction getIndicatorName(\n\tindicatorId: number | undefined,\n): string {\n\tif (indicatorId) {\n\t\treturn `${num2hex(indicatorId)} (${\n\t\t\tindicatorId in Indicator ? Indicator[indicatorId] : \"Unknown\"\n\t\t})`;\n\t} else {\n\t\treturn \"0 (default)\";\n\t}\n}\n\nconst MAX_INDICATOR_OBJECTS = 31;\n\n@API(CommandClasses.Indicator)\nexport class IndicatorCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: IndicatorCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase IndicatorCommand.Get:\n\t\t\tcase IndicatorCommand.Report:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase IndicatorCommand.Set:\n\t\t\t\treturn true; // This is mandatory\n\t\t\tcase IndicatorCommand.SupportedGet:\n\t\t\tcase IndicatorCommand.SupportedReport:\n\t\t\t\treturn this.version >= 2 && this.isSinglecast();\n\t\t\tcase IndicatorCommand.DescriptionGet:\n\t\t\tcase IndicatorCommand.DescriptionReport:\n\t\t\t\treturn this.version >= 4 && this.isSinglecast();\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(\n\t\t\tthis: IndicatorCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t\tvalue,\n\t\t) {\n\t\t\tif (property === \"value\") {\n\t\t\t\t// V1 value\n\t\t\t\tif (typeof value !== \"number\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"number\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this.set(value);\n\t\t\t} else if (\n\t\t\t\ttypeof property === \"number\"\n\t\t\t\t&& typeof propertyKey === \"number\"\n\t\t\t) {\n\t\t\t\tconst indicatorId = property;\n\t\t\t\tconst propertyId = propertyKey;\n\t\t\t\tconst expectedType = getIndicatorMetadata(\n\t\t\t\t\tindicatorId,\n\t\t\t\t\tpropertyId,\n\t\t\t\t).type as \"number\" | \"boolean\";\n\n\t\t\t\t// V2+ value\n\t\t\t\tif (typeof value !== expectedType) {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\texpectedType,\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this.set([\n\t\t\t\t\t{\n\t\t\t\t\t\tindicatorId: property,\n\t\t\t\t\t\tpropertyId: propertyKey,\n\t\t\t\t\t\tvalue: value as any,\n\t\t\t\t\t},\n\t\t\t\t]);\n\t\t\t} else if (property === \"identify\") {\n\t\t\t\tif (typeof value !== \"boolean\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"boolean\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this.identify();\n\t\t\t} else {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: IndicatorCCAPI, { property }) {\n\t\t\tif (property === \"value\") return this.get();\n\t\t\tif (typeof property === \"number\") {\n\t\t\t\treturn this.get(property);\n\t\t\t}\n\n\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t};\n\t}\n\n\t@validateArgs()\n\tpublic async get(\n\t\tindicatorId?: number,\n\t): Promise<MaybeNotKnown<number | IndicatorObject[]>> {\n\t\tthis.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Get);\n\n\t\tconst cc = new IndicatorCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tindicatorId,\n\t\t});\n\t\tconst response = await this.host.sendCommand<IndicatorCCReport>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (!response) return;\n\t\tif (response.values) return response.values;\n\t\treturn response.indicator0Value!;\n\t}\n\n\t@validateArgs()\n\tpublic async set(\n\t\tvalue: number | IndicatorObject[],\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Set);\n\n\t\tif (this.version === 1 && typeof value !== \"number\") {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Node ${this.endpoint\n\t\t\t\t\t.nodeId as number} only supports IndicatorCC V1 which requires a single value to be set`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t} else if (\n\t\t\tthis.version >= 2\n\t\t\t&& isArray(value)\n\t\t\t&& value.length > MAX_INDICATOR_OBJECTS\n\t\t) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Only ${MAX_INDICATOR_OBJECTS} indicator values can be set at a time!`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\n\t\tconst cc = new IndicatorCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...(typeof value === \"number\" ? { value } : { values: value }),\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async sendReport(\n\t\toptions: IndicatorCCReportOptions,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tIndicatorCommand,\n\t\t\tIndicatorCommand.Report,\n\t\t);\n\n\t\tconst cc = new IndicatorCCReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async getSupported(indicatorId: number): Promise<\n\t\t| {\n\t\t\tindicatorId?: number;\n\t\t\tsupportedProperties: readonly number[];\n\t\t\tnextIndicatorId: number;\n\t\t}\n\t\t| undefined\n\t> {\n\t\tthis.assertSupportsCommand(\n\t\t\tIndicatorCommand,\n\t\t\tIndicatorCommand.SupportedGet,\n\t\t);\n\n\t\tconst cc = new IndicatorCCSupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tindicatorId,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tIndicatorCCSupportedReport\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\t// Include the actual indicator ID if 0x00 was requested\n\t\t\t\t...(indicatorId === 0x00\n\t\t\t\t\t? { indicatorId: response.indicatorId }\n\t\t\t\t\t: undefined),\n\t\t\t\tsupportedProperties: response.supportedProperties,\n\t\t\t\tnextIndicatorId: response.nextIndicatorId,\n\t\t\t};\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async reportSupported(\n\t\tindicatorId: number,\n\t\tsupportedProperties: readonly number[],\n\t\tnextIndicatorId: number,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tIndicatorCommand,\n\t\t\tIndicatorCommand.SupportedReport,\n\t\t);\n\n\t\tconst cc = new IndicatorCCSupportedReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tindicatorId,\n\t\t\tsupportedProperties,\n\t\t\tnextIndicatorId,\n\t\t});\n\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async reportDescription(\n\t\tindicatorId: number,\n\t\tdescription: string,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tIndicatorCommand,\n\t\t\tIndicatorCommand.DescriptionReport,\n\t\t);\n\n\t\tconst cc = new IndicatorCCDescriptionReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tindicatorId,\n\t\t\tdescription,\n\t\t});\n\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t/**\n\t * Instructs the node to identify itself. Available starting with V3 of this CC.\n\t */\n\tpublic async identify(): Promise<SupervisionResult | undefined> {\n\t\tif (this.version < 3) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`The identify command is only supported in Indicator CC version 3 and above`,\n\t\t\t\tZWaveErrorCodes.CC_NotSupported,\n\t\t\t);\n\t\t}\n\t\treturn this.set([\n\t\t\t{\n\t\t\t\tindicatorId: 0x50,\n\t\t\t\tpropertyId: 0x03,\n\t\t\t\tvalue: 0x08,\n\t\t\t},\n\t\t\t{\n\t\t\t\tindicatorId: 0x50,\n\t\t\t\tpropertyId: 0x04,\n\t\t\t\tvalue: 0x03,\n\t\t\t},\n\t\t\t{\n\t\t\t\tindicatorId: 0x50,\n\t\t\t\tpropertyId: 0x05,\n\t\t\t\tvalue: 0x06,\n\t\t\t},\n\t\t]);\n\t}\n\n\t/**\n\t * Set a timeout for a given indicator ID after which the indicator will be turned off.\n\t * @param timeout The timeout in one of the supported forms:\n\t * \t- a timeout string in the form `12h18m17.59s`. All parts (hours, minutes, seconds, hundredths) are optional, but must be specified in this order. An empty string will be treated like `undefined`.\n\t * \t- an object specifying the timeout parts. An empty object will be treated like `undefined`.\n\t * \t- `undefined` to disable the timeout.\n\t */\n\t@validateArgs()\n\tpublic async setTimeout(\n\t\tindicatorId: number,\n\t\ttimeout: IndicatorTimeout | string | undefined,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertPhysicalEndpoint(this.endpoint);\n\n\t\tif (this.version < 3) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`The setTimeout command is only supported in Indicator CC version 3 and above`,\n\t\t\t\tZWaveErrorCodes.CC_NotSupported,\n\t\t\t);\n\t\t}\n\n\t\tif (typeof timeout === \"string\") {\n\t\t\tif (timeout === \"\") {\n\t\t\t\ttimeout = undefined;\n\t\t\t} else {\n\t\t\t\tconst parsed = parseIndicatorTimeoutString(timeout);\n\t\t\t\tif (!parsed) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`The timeout string \"${timeout}\" is not valid`,\n\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\ttimeout = parsed;\n\t\t\t}\n\t\t}\n\n\t\tconst supportedPropertyIDs = IndicatorCC.getSupportedPropertyIDsCached(\n\t\t\tthis.host,\n\t\t\tthis.endpoint,\n\t\t\tindicatorId,\n\t\t);\n\n\t\tconst objects: IndicatorObject[] = [];\n\t\tif (timeout) {\n\t\t\tconst hours = timeout.hours ?? 0;\n\t\t\tconst minutes = timeout.minutes ?? 0;\n\t\t\tconst seconds = Math.floor(timeout.seconds ?? 0);\n\t\t\tconst hundredths = Math.round(((timeout.seconds ?? 0) % 1) * 100);\n\n\t\t\tif (hours) {\n\t\t\t\tif (!supportedPropertyIDs?.includes(0x0a)) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`The indicator ${indicatorId} does not support setting the timeout in hours`,\n\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tobjects.push({\n\t\t\t\t\tindicatorId,\n\t\t\t\t\tpropertyId: 0x0a,\n\t\t\t\t\tvalue: hours,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (minutes) {\n\t\t\t\tif (!supportedPropertyIDs?.includes(0x06)) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`The indicator ${indicatorId} does not support setting the timeout in minutes`,\n\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tobjects.push({\n\t\t\t\t\tindicatorId,\n\t\t\t\t\tpropertyId: 0x06,\n\t\t\t\t\tvalue: minutes,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (seconds) {\n\t\t\t\tif (!supportedPropertyIDs?.includes(0x07)) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`The indicator ${indicatorId} does not support setting the timeout in seconds`,\n\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tobjects.push({\n\t\t\t\t\tindicatorId,\n\t\t\t\t\tpropertyId: 0x07,\n\t\t\t\t\tvalue: seconds,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (hundredths) {\n\t\t\t\tif (!supportedPropertyIDs?.includes(0x08)) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`The indicator ${indicatorId} does not support setting the timeout in 1/100 seconds`,\n\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tobjects.push({\n\t\t\t\t\tindicatorId,\n\t\t\t\t\tpropertyId: 0x08,\n\t\t\t\t\tvalue: hundredths,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (!objects.length) {\n\t\t\tobjects.push(\n\t\t\t\t...(supportedPropertyIDs ?? []).map((p) => ({\n\t\t\t\t\tindicatorId,\n\t\t\t\t\tpropertyId: p,\n\t\t\t\t\tvalue: 0,\n\t\t\t\t})),\n\t\t\t);\n\t\t}\n\n\t\treturn this.set(objects);\n\t}\n\n\t/**\n\t * Returns the timeout after which the given indicator will be turned off.\n\t */\n\t@validateArgs()\n\tpublic async getTimeout(\n\t\tindicatorId: number,\n\t): Promise<MaybeNotKnown<IndicatorTimeout>> {\n\t\tconst values = await this.get(indicatorId);\n\t\tif (!isArray(values)) return;\n\n\t\treturn indicatorObjectsToTimeout(values);\n\t}\n\n\t@validateArgs()\n\tpublic async getDescription(\n\t\tindicatorId: number,\n\t): Promise<MaybeNotKnown<string>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tIndicatorCommand,\n\t\t\tIndicatorCommand.DescriptionGet,\n\t\t);\n\n\t\tconst cc = new IndicatorCCDescriptionGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tindicatorId,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tIndicatorCCDescriptionReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.description;\n\t}\n}\n\n@commandClass(CommandClasses.Indicator)\n@implementedVersion(4)\n@ccValues(IndicatorCCValues)\nexport class IndicatorCC extends CommandClass {\n\tdeclare ccCommand: IndicatorCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses.Indicator,\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\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\tif (api.version > 1) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"scanning supported indicator IDs...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\t// Query ID 0 to get the first supported ID\n\t\t\tlet curId = 0x00;\n\t\t\tconst supportedIndicatorIds: number[] = [];\n\t\t\tdo {\n\t\t\t\tconst supportedResponse = await api.getSupported(curId);\n\t\t\t\tif (!supportedResponse) {\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\"Time out while scanning supported indicator IDs, skipping interview...\",\n\t\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsupportedIndicatorIds.push(\n\t\t\t\t\tsupportedResponse.indicatorId ?? curId,\n\t\t\t\t);\n\t\t\t\tcurId = supportedResponse.nextIndicatorId;\n\t\t\t} while (curId !== 0x00);\n\n\t\t\t// The IDs are not stored by the report CCs so store them here once we have all of them\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tIndicatorCCValues.supportedIndicatorIds,\n\t\t\t\tsupportedIndicatorIds,\n\t\t\t);\n\t\t\tconst logMessage = `supported indicator IDs: ${\n\t\t\t\tsupportedIndicatorIds.join(\n\t\t\t\t\t\", \",\n\t\t\t\t)\n\t\t\t}`;\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: logMessage,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\n\t\t\tif (api.version >= 4) {\n\t\t\t\tconst manufacturerDefinedIndicatorIds = supportedIndicatorIds\n\t\t\t\t\t.filter((id) => isManufacturerDefinedIndicator(id));\n\t\t\t\tif (manufacturerDefinedIndicatorIds.length > 0) {\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\"retrieving description for manufacturer-defined indicator IDs...\",\n\t\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (const id of manufacturerDefinedIndicatorIds) {\n\t\t\t\t\t\tawait api.getDescription(id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Query current values\n\t\tawait this.refreshValues(ctx);\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses.Indicator,\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tif (api.version === 1) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"requesting current indicator value...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tawait api.get();\n\t\t} else {\n\t\t\tconst supportedIndicatorIds: number[] = this.getValue(\n\t\t\t\tctx,\n\t\t\t\tIndicatorCCValues.supportedIndicatorIds,\n\t\t\t) ?? [];\n\t\t\tfor (const indicatorId of supportedIndicatorIds) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `requesting current indicator value (id = ${\n\t\t\t\t\t\tnum2hex(\n\t\t\t\t\t\t\tindicatorId,\n\t\t\t\t\t\t)\n\t\t\t\t\t})...`,\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tawait api.get(indicatorId);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic translatePropertyKey(\n\t\tctx: GetValueDB,\n\t\tproperty: string | number,\n\t\tpropertyKey: string | number,\n\t): string | undefined {\n\t\tif (property === \"value\") {\n\t\t\t// CC version 1 only has a single value that doesn't need to be translated\n\t\t\treturn undefined;\n\t\t} else if (\n\t\t\ttypeof property === \"number\"\n\t\t\t&& typeof propertyKey === \"number\"\n\t\t) {\n\t\t\t// The indicator property is our property key\n\t\t\tconst prop = getIndicatorProperty(propertyKey);\n\t\t\tif (prop) return prop.label;\n\t\t}\n\t\treturn super.translatePropertyKey(ctx, property, propertyKey);\n\t}\n\n\tpublic translateProperty(\n\t\tctx: GetValueDB,\n\t\tproperty: string | number,\n\t\tpropertyKey?: string | number,\n\t): string {\n\t\tif (typeof property === \"number\" && typeof propertyKey === \"number\") {\n\t\t\t// The indicator corresponds to our property\n\t\t\tif (property in Indicator) return Indicator[property];\n\t\t}\n\t\treturn super.translateProperty(ctx, property, propertyKey);\n\t}\n\n\tprotected supportsV2Indicators(ctx: GetValueDB): boolean {\n\t\t// First test if there are any indicator ids defined\n\t\tconst supportedIndicatorIds = this.getValue<number[]>(\n\t\t\tctx,\n\t\t\tIndicatorCCValues.supportedIndicatorIds,\n\t\t);\n\t\tif (!supportedIndicatorIds?.length) return false;\n\t\t// Then test if there are any property ids defined\n\t\treturn supportedIndicatorIds.some(\n\t\t\t(indicatorId) =>\n\t\t\t\t!!this.getValue<number[]>(\n\t\t\t\t\tctx,\n\t\t\t\t\tIndicatorCCValues.supportedPropertyIDs(indicatorId),\n\t\t\t\t)?.length,\n\t\t);\n\t}\n\n\tpublic static getSupportedPropertyIDsCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tindicatorId: number,\n\t): MaybeNotKnown<number[]> {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tIndicatorCCValues.supportedPropertyIDs(indicatorId).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t);\n\t}\n}\n\n// @publicAPI\nexport interface IndicatorObject {\n\tindicatorId: number;\n\tpropertyId: number;\n\tvalue: number | boolean;\n}\n\n// @publicAPI\nexport type IndicatorCCSetOptions =\n\t| {\n\t\tvalue: number;\n\t}\n\t| {\n\t\tvalues: IndicatorObject[];\n\t};\n\n@CCCommand(IndicatorCommand.Set)\n@useSupervision()\nexport class IndicatorCCSet extends IndicatorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<IndicatorCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (\"value\" in options) {\n\t\t\tthis.indicator0Value = options.value;\n\t\t} else {\n\t\t\tthis.values = options.values;\n\t\t}\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCSet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\n\t\tconst objCount = raw.payload.length >= 2\n\t\t\t? raw.payload[1] & 0b11111\n\t\t\t: 0;\n\n\t\tif (objCount === 0) {\n\t\t\tconst indicator0Value = raw.payload[0];\n\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\tvalue: indicator0Value,\n\t\t\t});\n\t\t}\n\n\t\tvalidatePayload(raw.payload.length >= 2 + 3 * objCount);\n\n\t\tconst values: IndicatorObject[] = [];\n\t\tfor (let i = 0; i < objCount; i++) {\n\t\t\tconst offset = 2 + 3 * i;\n\t\t\tconst value: IndicatorObject = {\n\t\t\t\tindicatorId: raw.payload[offset],\n\t\t\t\tpropertyId: raw.payload[offset + 1],\n\t\t\t\tvalue: raw.payload[offset + 2],\n\t\t\t};\n\t\t\tvalues.push(value);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tvalues,\n\t\t});\n\t}\n\n\tpublic indicator0Value: number | undefined;\n\tpublic values: IndicatorObject[] | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tif (this.values != undefined) {\n\t\t\t// V2+\n\t\t\tthis.payload = Bytes.alloc(2 + 3 * this.values.length, 0);\n\t\t\t// Byte 0 is the legacy value\n\t\t\tconst objCount = this.values.length & MAX_INDICATOR_OBJECTS;\n\t\t\tthis.payload[1] = objCount;\n\t\t\tfor (let i = 0; i < objCount; i++) {\n\t\t\t\tconst offset = 2 + 3 * i;\n\t\t\t\tthis.payload[offset] = this.values[i].indicatorId;\n\t\t\t\tthis.payload[offset + 1] = this.values[i].propertyId;\n\t\t\t\tconst value = this.values[i].value;\n\t\t\t\tthis.payload[offset + 2] = value === true\n\t\t\t\t\t? 0xff\n\t\t\t\t\t: value === false\n\t\t\t\t\t? 0x00\n\t\t\t\t\t: value;\n\t\t\t}\n\t\t} else {\n\t\t\t// V1\n\t\t\tthis.payload = Bytes.from([this.indicator0Value ?? 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\tif (this.indicator0Value != undefined) {\n\t\t\tmessage[\"indicator 0 value\"] = this.indicator0Value;\n\t\t}\n\t\tif (this.values != undefined) {\n\t\t\tmessage.values = `${\n\t\t\t\tthis.values\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(v) => `\n\u00B7 indicatorId: ${v.indicatorId}\n propertyId: ${v.propertyId}\n value: ${v.value}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\")\n\t\t\t}`;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type IndicatorCCReportOptions =\n\t| {\n\t\tvalue: number;\n\t}\n\t| {\n\t\tvalues: IndicatorObject[];\n\t};\n\n@CCCommand(IndicatorCommand.Report)\nexport class IndicatorCCReport extends IndicatorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<IndicatorCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tif (\"value\" in options) {\n\t\t\tthis.indicator0Value = options.value;\n\t\t} else if (\"values\" in options) {\n\t\t\tif (options.values.length > MAX_INDICATOR_OBJECTS) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`Only ${MAX_INDICATOR_OBJECTS} indicator values can be set at a time!`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.values = options.values;\n\t\t}\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\n\t\tconst objCount = raw.payload.length >= 2\n\t\t\t? raw.payload[1] & 0b11111\n\t\t\t: 0;\n\n\t\tif (objCount === 0) {\n\t\t\tconst indicator0Value = raw.payload[0];\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\tvalue: indicator0Value,\n\t\t\t});\n\t\t}\n\n\t\tvalidatePayload(raw.payload.length >= 2 + 3 * objCount);\n\n\t\tconst values: IndicatorObject[] = [];\n\t\tfor (let i = 0; i < objCount; i++) {\n\t\t\tconst offset = 2 + 3 * i;\n\t\t\tconst value: IndicatorObject = {\n\t\t\t\tindicatorId: raw.payload[offset],\n\t\t\t\tpropertyId: raw.payload[offset + 1],\n\t\t\t\tvalue: raw.payload[offset + 2],\n\t\t\t};\n\t\t\tvalues.push(value);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tvalues,\n\t\t});\n\n\t\t// TODO: Think if we want this:\n\n\t\t// // If not all Property IDs are included in the command for the actual Indicator ID,\n\t\t// // a controlling node MUST assume non-specified Property IDs values to be 0x00.\n\t\t// const indicatorId = this.values[0].indicatorId;\n\t\t// const supportedIndicatorProperties =\n\t\t// \tvalueDB.getValue<number[]>(\n\t\t// \t\tgetSupportedPropertyIDsValueID(\n\t\t// \t\t\tthis.endpointIndex,\n\t\t// \t\t\tindicatorId,\n\t\t// \t\t),\n\t\t// \t) ?? [];\n\t\t// // Find out which ones are missing\n\t\t// const missingIndicatorProperties = supportedIndicatorProperties.filter(\n\t\t// \tprop =>\n\t\t// \t\t!this.values!.find(({ propertyId }) => prop === propertyId),\n\t\t// );\n\t\t// // And assume they are 0 (false)\n\t\t// for (const missing of missingIndicatorProperties) {\n\t\t// \tthis.setIndicatorValue({\n\t\t// \t\tindicatorId,\n\t\t// \t\tpropertyId: missing,\n\t\t// \t\tvalue: 0,\n\t\t// \t});\n\t\t// }\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tif (this.indicator0Value != undefined) {\n\t\t\tif (!this.supportsV2Indicators(ctx)) {\n\t\t\t\t// Publish the value\n\t\t\t\tconst valueV1 = IndicatorCCValues.valueV1;\n\t\t\t\tthis.setMetadata(ctx, valueV1);\n\t\t\t\tthis.setValue(ctx, valueV1, this.indicator0Value);\n\t\t\t} else {\n\t\t\t\tif (this.isSinglecast()) {\n\t\t\t\t\t// Don't!\n\t\t\t\t\tctx.logNode(this.nodeId, {\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t`ignoring V1 indicator report because the node supports V2 indicators`,\n\t\t\t\t\t\tdirection: \"none\",\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (this.values) {\n\t\t\t// Store the simple values first\n\t\t\tfor (const value of this.values) {\n\t\t\t\tthis.setIndicatorValue(ctx, value);\n\t\t\t}\n\n\t\t\t// Then group values into the convenience properties\n\n\t\t\t// ... timeout\n\t\t\tconst timeout = indicatorObjectsToTimeout(this.values);\n\t\t\tif (timeout) {\n\t\t\t\tlet timeoutString = \"\";\n\t\t\t\tif (timeout?.hours) timeoutString += `${timeout.hours}h`;\n\t\t\t\tif (timeout?.minutes) timeoutString += `${timeout.minutes}m`;\n\t\t\t\tif (timeout?.seconds) timeoutString += `${timeout.seconds}s`;\n\n\t\t\t\tthis.setValue(\n\t\t\t\t\tctx,\n\t\t\t\t\tIndicatorCCValues.timeout,\n\t\t\t\t\ttimeoutString,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic readonly indicator0Value: number | undefined;\n\tpublic readonly values: IndicatorObject[] | undefined;\n\n\tprivate setIndicatorValue(\n\t\tctx: GetValueDB,\n\t\tvalue: IndicatorObject,\n\t): void {\n\t\t// Manufacturer-defined indicators may need a custom label\n\t\tconst overrideIndicatorLabel = isManufacturerDefinedIndicator(\n\t\t\t\tvalue.indicatorId,\n\t\t\t)\n\t\t\t? this.getValue<string>(\n\t\t\t\tctx,\n\t\t\t\tIndicatorCCValues.indicatorDescription(value.indicatorId),\n\t\t\t)\n\t\t\t: undefined;\n\n\t\tconst metadata = getIndicatorMetadata(\n\t\t\tvalue.indicatorId,\n\t\t\tvalue.propertyId,\n\t\t\toverrideIndicatorLabel,\n\t\t);\n\t\t// Some values need to be converted\n\t\tif (metadata.type === \"boolean\") {\n\t\t\tvalue.value = !!value.value;\n\t\t}\n\n\t\t// Publish the value\n\t\tconst valueV2 = IndicatorCCValues.valueV2(\n\t\t\tvalue.indicatorId,\n\t\t\tvalue.propertyId,\n\t\t);\n\t\tthis.setMetadata(ctx, valueV2, metadata);\n\t\tthis.setValue(ctx, valueV2, value.value);\n\t}\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tif (this.values != undefined) {\n\t\t\t// V2+\n\t\t\tthis.payload = Bytes.alloc(2 + 3 * this.values.length, 0);\n\t\t\t// Byte 0 is the legacy value\n\t\t\tconst objCount = this.values.length & MAX_INDICATOR_OBJECTS;\n\t\t\tthis.payload[1] = objCount;\n\t\t\tfor (let i = 0; i < objCount; i++) {\n\t\t\t\tconst offset = 2 + 3 * i;\n\t\t\t\tthis.payload[offset] = this.values[i].indicatorId;\n\t\t\t\tthis.payload[offset + 1] = this.values[i].propertyId;\n\t\t\t\tconst value = this.values[i].value;\n\t\t\t\tthis.payload[offset + 2] = value === true\n\t\t\t\t\t? 0xff\n\t\t\t\t\t: value === false\n\t\t\t\t\t? 0x00\n\t\t\t\t\t: value;\n\t\t\t}\n\t\t} else {\n\t\t\t// V1\n\t\t\tthis.payload = Bytes.from([this.indicator0Value ?? 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\tif (this.indicator0Value != undefined) {\n\t\t\tmessage[\"indicator 0 value\"] = this.indicator0Value;\n\t\t}\n\t\tif (this.values != undefined) {\n\t\t\tmessage.values = `${\n\t\t\t\tthis.values\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(v) => `\n\u00B7 indicatorId: ${v.indicatorId}\n propertyId: ${v.propertyId}\n value: ${v.value}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\")\n\t\t\t}`;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface IndicatorCCGetOptions {\n\tindicatorId?: number;\n}\n\n@CCCommand(IndicatorCommand.Get)\n@expectedCCResponse(IndicatorCCReport)\nexport class IndicatorCCGet extends IndicatorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<IndicatorCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.indicatorId = options.indicatorId;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCGet {\n\t\tlet indicatorId: number | undefined;\n\n\t\tif (raw.payload.length > 0) {\n\t\t\tindicatorId = raw.payload[0];\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tindicatorId,\n\t\t});\n\t}\n\n\tpublic indicatorId: number | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tif (this.indicatorId != undefined) {\n\t\t\tthis.payload = Bytes.from([this.indicatorId]);\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\tindicator: getIndicatorName(this.indicatorId),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface IndicatorCCSupportedReportOptions {\n\tindicatorId: number;\n\tnextIndicatorId: number;\n\tsupportedProperties: readonly number[];\n}\n\n@CCCommand(IndicatorCommand.SupportedReport)\nexport class IndicatorCCSupportedReport extends IndicatorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<IndicatorCCSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.indicatorId = options.indicatorId;\n\t\tthis.nextIndicatorId = options.nextIndicatorId;\n\t\tthis.supportedProperties = options.supportedProperties;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): IndicatorCCSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst indicatorId = raw.payload[0];\n\t\tconst nextIndicatorId = raw.payload[1];\n\t\tconst bitMaskLength = raw.payload[2] & 0b11111;\n\t\tlet supportedProperties: readonly number[];\n\n\t\tif (bitMaskLength === 0) {\n\t\t\tsupportedProperties = [];\n\t\t} else {\n\t\t\tvalidatePayload(raw.payload.length >= 3 + bitMaskLength);\n\t\t\t// The bit mask starts at 0, but bit 0 is not used\n\t\t\tsupportedProperties = parseBitMask(\n\t\t\t\traw.payload.subarray(3, 3 + bitMaskLength),\n\t\t\t\t0,\n\t\t\t).filter((v) => v !== 0);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tindicatorId,\n\t\t\tnextIndicatorId,\n\t\t\tsupportedProperties,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tif (this.indicatorId !== 0x00) {\n\t\t\t// Remember which property IDs are supported\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tIndicatorCCValues.supportedPropertyIDs(this.indicatorId),\n\t\t\t\tthis.supportedProperties,\n\t\t\t);\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic readonly indicatorId: number;\n\tpublic readonly nextIndicatorId: number;\n\tpublic readonly supportedProperties: readonly number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst bitmask = this.supportedProperties.length > 0\n\t\t\t? encodeBitMask(this.supportedProperties, undefined, 0)\n\t\t\t: new Bytes();\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([\n\t\t\t\tthis.indicatorId,\n\t\t\t\tthis.nextIndicatorId,\n\t\t\t\tbitmask.length,\n\t\t\t]),\n\t\t\tbitmask,\n\t\t]);\n\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\tindicator: getIndicatorName(this.indicatorId),\n\t\t\t\t\"supported properties\": `${\n\t\t\t\t\tthis.supportedProperties\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t(id) =>\n\t\t\t\t\t\t\t\tgetIndicatorProperty(id)?.label\n\t\t\t\t\t\t\t\t\t?? `Unknown (${num2hex(id)})`,\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\", \")\n\t\t\t\t}`,\n\t\t\t\t\"next indicator\": getIndicatorName(this.nextIndicatorId),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface IndicatorCCSupportedGetOptions {\n\tindicatorId: number;\n}\n\nfunction testResponseForIndicatorSupportedGet(\n\tsent: IndicatorCCSupportedGet,\n\treceived: IndicatorCCSupportedReport,\n) {\n\treturn sent.indicatorId === 0 || received.indicatorId === sent.indicatorId;\n}\n\n@CCCommand(IndicatorCommand.SupportedGet)\n@expectedCCResponse(\n\tIndicatorCCSupportedReport,\n\ttestResponseForIndicatorSupportedGet,\n)\nexport class IndicatorCCSupportedGet extends IndicatorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<IndicatorCCSupportedGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.indicatorId = options.indicatorId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): IndicatorCCSupportedGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst indicatorId = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tindicatorId,\n\t\t});\n\t}\n\n\tpublic indicatorId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.indicatorId]);\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\tindicator: getIndicatorName(this.indicatorId),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface IndicatorCCDescriptionReportOptions {\n\tindicatorId: number;\n\tdescription: string;\n}\n\n@CCCommand(IndicatorCommand.DescriptionReport)\nexport class IndicatorCCDescriptionReport extends IndicatorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<IndicatorCCDescriptionReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.indicatorId = options.indicatorId;\n\t\tthis.description = options.description;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): IndicatorCCDescriptionReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst indicatorId = raw.payload[0];\n\t\tconst descrptionLength = raw.payload[1];\n\t\tvalidatePayload(raw.payload.length >= 2 + descrptionLength);\n\t\tconst description: string = raw.payload\n\t\t\t.subarray(2, 2 + descrptionLength)\n\t\t\t.toString(\"utf8\");\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tindicatorId,\n\t\t\tdescription,\n\t\t});\n\t}\n\n\tpublic indicatorId: number;\n\tpublic description: string;\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tif (this.description) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tIndicatorCCValues.indicatorDescription(this.indicatorId),\n\t\t\t\tthis.description,\n\t\t\t);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst description = Bytes.from(this.description, \"utf8\");\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.indicatorId, description.length]),\n\t\t\tdescription,\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\"indicator ID\": this.indicatorId,\n\t\t\t\tdescription: this.description || \"(none)\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface IndicatorCCDescriptionGetOptions {\n\tindicatorId: number;\n}\n\nfunction testResponseForIndicatorDescriptionGet(\n\tsent: IndicatorCCDescriptionGet,\n\treceived: IndicatorCCDescriptionReport,\n) {\n\treturn received.indicatorId === sent.indicatorId;\n}\n\n@CCCommand(IndicatorCommand.DescriptionGet)\n@expectedCCResponse(\n\tIndicatorCCDescriptionReport,\n\ttestResponseForIndicatorDescriptionGet,\n)\nexport class IndicatorCCDescriptionGet extends IndicatorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<IndicatorCCDescriptionGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.indicatorId = options.indicatorId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): IndicatorCCDescriptionGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst indicatorId = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tindicatorId,\n\t\t});\n\t}\n\n\tpublic indicatorId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.indicatorId]);\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\"indicator ID\": this.indicatorId,\n\t\t\t},\n\t\t};\n\t}\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_safe"]
7
7
  }