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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/build/cjs/cc/AlarmSensorCC.d.ts +79 -161
  2. package/build/cjs/cc/AlarmSensorCC.js +12 -50
  3. package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
  4. package/build/cjs/cc/AssociationCC.d.ts +63 -199
  5. package/build/cjs/cc/AssociationCC.js +9 -22
  6. package/build/cjs/cc/AssociationCC.js.map +2 -2
  7. package/build/cjs/cc/AssociationGroupInfoCC.d.ts +66 -166
  8. package/build/cjs/cc/AssociationGroupInfoCC.js +11 -22
  9. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  10. package/build/cjs/cc/BarrierOperatorCC.d.ts +86 -294
  11. package/build/cjs/cc/BarrierOperatorCC.js +12 -44
  12. package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
  13. package/build/cjs/cc/BasicCC.d.ts +85 -331
  14. package/build/cjs/cc/BasicCC.js +15 -46
  15. package/build/cjs/cc/BasicCC.js.map +2 -2
  16. package/build/cjs/cc/BatteryCC.d.ts +237 -835
  17. package/build/cjs/cc/BatteryCC.js +7 -84
  18. package/build/cjs/cc/BatteryCC.js.map +2 -2
  19. package/build/cjs/cc/BinarySensorCC.d.ts +34 -99
  20. package/build/cjs/cc/BinarySensorCC.js +9 -29
  21. package/build/cjs/cc/BinarySensorCC.js.map +2 -2
  22. package/build/cjs/cc/BinarySwitchCC.d.ts +45 -197
  23. package/build/cjs/cc/BinarySwitchCC.js +6 -22
  24. package/build/cjs/cc/BinarySwitchCC.js.map +2 -2
  25. package/build/cjs/cc/CentralSceneCC.d.ts +77 -296
  26. package/build/cjs/cc/CentralSceneCC.js +7 -30
  27. package/build/cjs/cc/CentralSceneCC.js.map +2 -2
  28. package/build/cjs/cc/ClimateControlScheduleCC.d.ts +45 -160
  29. package/build/cjs/cc/ClimateControlScheduleCC.js +5 -24
  30. package/build/cjs/cc/ClimateControlScheduleCC.js.map +2 -2
  31. package/build/cjs/cc/ColorSwitchCC.d.ts +130 -457
  32. package/build/cjs/cc/ColorSwitchCC.js +23 -75
  33. package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
  34. package/build/cjs/cc/ConfigurationCC.d.ts +32 -100
  35. package/build/cjs/cc/ConfigurationCC.js +11 -31
  36. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  37. package/build/cjs/cc/DoorLockCC.d.ts +512 -1823
  38. package/build/cjs/cc/DoorLockCC.js +51 -156
  39. package/build/cjs/cc/DoorLockCC.js.map +2 -2
  40. package/build/cjs/cc/DoorLockLoggingCC.d.ts +11 -63
  41. package/build/cjs/cc/DoorLockLoggingCC.js +4 -8
  42. package/build/cjs/cc/DoorLockLoggingCC.js.map +2 -2
  43. package/build/cjs/cc/EnergyProductionCC.d.ts +14 -29
  44. package/build/cjs/cc/EnergyProductionCC.js +5 -17
  45. package/build/cjs/cc/EnergyProductionCC.js.map +2 -2
  46. package/build/cjs/cc/EntryControlCC.d.ts +73 -324
  47. package/build/cjs/cc/EntryControlCC.js +9 -36
  48. package/build/cjs/cc/EntryControlCC.js.map +2 -2
  49. package/build/cjs/cc/FirmwareUpdateMetaDataCC.d.ts +78 -390
  50. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +5 -26
  51. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
  52. package/build/cjs/cc/HumidityControlModeCC.d.ts +31 -131
  53. package/build/cjs/cc/HumidityControlModeCC.js +6 -15
  54. package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
  55. package/build/cjs/cc/HumidityControlOperatingStateCC.d.ts +17 -65
  56. package/build/cjs/cc/HumidityControlOperatingStateCC.js +4 -12
  57. package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +2 -2
  58. package/build/cjs/cc/HumidityControlSetpointCC.d.ts +51 -128
  59. package/build/cjs/cc/HumidityControlSetpointCC.js +10 -28
  60. package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
  61. package/build/cjs/cc/IndicatorCC.d.ts +123 -365
  62. package/build/cjs/cc/IndicatorCC.js +15 -61
  63. package/build/cjs/cc/IndicatorCC.js.map +2 -2
  64. package/build/cjs/cc/IrrigationCC.d.ts +826 -2317
  65. package/build/cjs/cc/IrrigationCC.js +29 -233
  66. package/build/cjs/cc/IrrigationCC.js.map +2 -2
  67. package/build/cjs/cc/LanguageCC.d.ts +31 -133
  68. package/build/cjs/cc/LanguageCC.js +4 -15
  69. package/build/cjs/cc/LanguageCC.js.map +2 -2
  70. package/build/cjs/cc/LockCC.d.ts +14 -64
  71. package/build/cjs/cc/LockCC.js +4 -12
  72. package/build/cjs/cc/LockCC.js.map +2 -2
  73. package/build/cjs/cc/ManufacturerProprietaryCC.js.map +2 -2
  74. package/build/cjs/cc/ManufacturerSpecificCC.d.ts +77 -239
  75. package/build/cjs/cc/ManufacturerSpecificCC.js +5 -26
  76. package/build/cjs/cc/ManufacturerSpecificCC.js.map +2 -2
  77. package/build/cjs/cc/MeterCC.d.ts +119 -393
  78. package/build/cjs/cc/MeterCC.js +25 -69
  79. package/build/cjs/cc/MeterCC.js.map +2 -2
  80. package/build/cjs/cc/MultiChannelAssociationCC.d.ts +66 -166
  81. package/build/cjs/cc/MultiChannelAssociationCC.js +10 -23
  82. package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
  83. package/build/cjs/cc/MultiChannelCC.d.ts +119 -499
  84. package/build/cjs/cc/MultiChannelCC.js +18 -46
  85. package/build/cjs/cc/MultiChannelCC.js.map +2 -2
  86. package/build/cjs/cc/MultilevelSensorCC.d.ts +46 -130
  87. package/build/cjs/cc/MultilevelSensorCC.js +12 -33
  88. package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
  89. package/build/cjs/cc/MultilevelSwitchCC.d.ts +160 -525
  90. package/build/cjs/cc/MultilevelSwitchCC.js +13 -107
  91. package/build/cjs/cc/MultilevelSwitchCC.js.map +2 -2
  92. package/build/cjs/cc/NodeNamingCC.d.ts +33 -135
  93. package/build/cjs/cc/NodeNamingCC.js +5 -16
  94. package/build/cjs/cc/NodeNamingCC.js.map +2 -2
  95. package/build/cjs/cc/NotificationCC.d.ts +262 -702
  96. package/build/cjs/cc/NotificationCC.js +29 -112
  97. package/build/cjs/cc/NotificationCC.js.map +2 -2
  98. package/build/cjs/cc/ProtectionCC.d.ts +118 -524
  99. package/build/cjs/cc/ProtectionCC.js +15 -50
  100. package/build/cjs/cc/ProtectionCC.js.map +2 -2
  101. package/build/cjs/cc/SceneActivationCC.d.ts +33 -132
  102. package/build/cjs/cc/SceneActivationCC.js +4 -17
  103. package/build/cjs/cc/SceneActivationCC.js.map +2 -2
  104. package/build/cjs/cc/SceneActuatorConfigurationCC.d.ts +34 -61
  105. package/build/cjs/cc/SceneActuatorConfigurationCC.js +9 -21
  106. package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +2 -2
  107. package/build/cjs/cc/SceneControllerConfigurationCC.d.ts +34 -61
  108. package/build/cjs/cc/SceneControllerConfigurationCC.js +10 -22
  109. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
  110. package/build/cjs/cc/ScheduleEntryLockCC.d.ts +95 -299
  111. package/build/cjs/cc/ScheduleEntryLockCC.js +13 -30
  112. package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
  113. package/build/cjs/cc/SoundSwitchCC.d.ts +72 -261
  114. package/build/cjs/cc/SoundSwitchCC.js +11 -43
  115. package/build/cjs/cc/SoundSwitchCC.js.map +2 -2
  116. package/build/cjs/cc/SupervisionCC.d.ts +17 -33
  117. package/build/cjs/cc/SupervisionCC.js +4 -9
  118. package/build/cjs/cc/SupervisionCC.js.map +2 -2
  119. package/build/cjs/cc/ThermostatFanModeCC.d.ts +44 -195
  120. package/build/cjs/cc/ThermostatFanModeCC.js +8 -21
  121. package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
  122. package/build/cjs/cc/ThermostatFanStateCC.d.ts +17 -65
  123. package/build/cjs/cc/ThermostatFanStateCC.js +4 -12
  124. package/build/cjs/cc/ThermostatFanStateCC.js.map +2 -2
  125. package/build/cjs/cc/ThermostatModeCC.d.ts +44 -195
  126. package/build/cjs/cc/ThermostatModeCC.js +8 -21
  127. package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
  128. package/build/cjs/cc/ThermostatOperatingStateCC.d.ts +17 -65
  129. package/build/cjs/cc/ThermostatOperatingStateCC.js +4 -12
  130. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
  131. package/build/cjs/cc/ThermostatSetpointCC.d.ts +49 -129
  132. package/build/cjs/cc/ThermostatSetpointCC.js +10 -25
  133. package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
  134. package/build/cjs/cc/TimeParametersCC.d.ts +12 -63
  135. package/build/cjs/cc/TimeParametersCC.js +4 -11
  136. package/build/cjs/cc/TimeParametersCC.js.map +2 -2
  137. package/build/cjs/cc/UserCodeCC.d.ts +311 -1066
  138. package/build/cjs/cc/UserCodeCC.js +33 -98
  139. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  140. package/build/cjs/cc/VersionCC.d.ts +289 -1003
  141. package/build/cjs/cc/VersionCC.js +7 -98
  142. package/build/cjs/cc/VersionCC.js.map +2 -2
  143. package/build/cjs/cc/WakeUpCC.d.ts +49 -201
  144. package/build/cjs/cc/WakeUpCC.js +6 -26
  145. package/build/cjs/cc/WakeUpCC.js.map +2 -2
  146. package/build/cjs/cc/WindowCoveringCC.d.ts +126 -220
  147. package/build/cjs/cc/WindowCoveringCC.js +16 -128
  148. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  149. package/build/cjs/cc/ZWavePlusCC.d.ts +69 -329
  150. package/build/cjs/cc/ZWavePlusCC.js +4 -25
  151. package/build/cjs/cc/ZWavePlusCC.js.map +2 -2
  152. package/build/cjs/cc/_CCValues.generated.d.ts +15814 -0
  153. package/build/cjs/cc/_CCValues.generated.js +8723 -0
  154. package/build/cjs/cc/_CCValues.generated.js.map +7 -0
  155. package/build/cjs/lib/CCValueUtils.d.ts +14 -0
  156. package/build/cjs/lib/CCValueUtils.js +93 -0
  157. package/build/cjs/lib/CCValueUtils.js.map +7 -0
  158. package/build/cjs/lib/Values.d.ts +6 -105
  159. package/build/cjs/lib/Values.js +13 -107
  160. package/build/cjs/lib/Values.js.map +3 -3
  161. package/build/esm/cc/AlarmSensorCC.d.ts +79 -161
  162. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  163. package/build/esm/cc/AlarmSensorCC.js +2 -39
  164. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  165. package/build/esm/cc/AssociationCC.d.ts +63 -199
  166. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  167. package/build/esm/cc/AssociationCC.js +2 -14
  168. package/build/esm/cc/AssociationCC.js.map +1 -1
  169. package/build/esm/cc/AssociationGroupInfoCC.d.ts +66 -166
  170. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  171. package/build/esm/cc/AssociationGroupInfoCC.js +2 -13
  172. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  173. package/build/esm/cc/BarrierOperatorCC.d.ts +86 -294
  174. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  175. package/build/esm/cc/BarrierOperatorCC.js +2 -34
  176. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  177. package/build/esm/cc/BasicCC.d.ts +85 -331
  178. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  179. package/build/esm/cc/BasicCC.js +2 -32
  180. package/build/esm/cc/BasicCC.js.map +1 -1
  181. package/build/esm/cc/BatteryCC.d.ts +237 -835
  182. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  183. package/build/esm/cc/BatteryCC.js +2 -78
  184. package/build/esm/cc/BatteryCC.js.map +1 -1
  185. package/build/esm/cc/BinarySensorCC.d.ts +34 -99
  186. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  187. package/build/esm/cc/BinarySensorCC.js +2 -16
  188. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  189. package/build/esm/cc/BinarySwitchCC.d.ts +45 -197
  190. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  191. package/build/esm/cc/BinarySwitchCC.js +2 -17
  192. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  193. package/build/esm/cc/CentralSceneCC.d.ts +77 -296
  194. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  195. package/build/esm/cc/CentralSceneCC.js +2 -26
  196. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  197. package/build/esm/cc/ClimateControlScheduleCC.d.ts +45 -160
  198. package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
  199. package/build/esm/cc/ClimateControlScheduleCC.js +2 -23
  200. package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
  201. package/build/esm/cc/ColorSwitchCC.d.ts +130 -457
  202. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  203. package/build/esm/cc/ColorSwitchCC.js +2 -52
  204. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  205. package/build/esm/cc/ConfigurationCC.d.ts +32 -100
  206. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  207. package/build/esm/cc/ConfigurationCC.js +2 -15
  208. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  209. package/build/esm/cc/DoorLockCC.d.ts +512 -1823
  210. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  211. package/build/esm/cc/DoorLockCC.js +9 -127
  212. package/build/esm/cc/DoorLockCC.js.map +1 -1
  213. package/build/esm/cc/DoorLockLoggingCC.d.ts +11 -63
  214. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
  215. package/build/esm/cc/DoorLockLoggingCC.js +2 -5
  216. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
  217. package/build/esm/cc/EnergyProductionCC.d.ts +14 -29
  218. package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
  219. package/build/esm/cc/EnergyProductionCC.js +2 -13
  220. package/build/esm/cc/EnergyProductionCC.js.map +1 -1
  221. package/build/esm/cc/EntryControlCC.d.ts +73 -324
  222. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  223. package/build/esm/cc/EntryControlCC.js +2 -28
  224. package/build/esm/cc/EntryControlCC.js.map +1 -1
  225. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts +78 -390
  226. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  227. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +2 -23
  228. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  229. package/build/esm/cc/HumidityControlModeCC.d.ts +31 -131
  230. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  231. package/build/esm/cc/HumidityControlModeCC.js +2 -10
  232. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  233. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts +17 -65
  234. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
  235. package/build/esm/cc/HumidityControlOperatingStateCC.js +2 -9
  236. package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
  237. package/build/esm/cc/HumidityControlSetpointCC.d.ts +51 -128
  238. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  239. package/build/esm/cc/HumidityControlSetpointCC.js +2 -19
  240. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  241. package/build/esm/cc/IndicatorCC.d.ts +123 -365
  242. package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
  243. package/build/esm/cc/IndicatorCC.js +2 -43
  244. package/build/esm/cc/IndicatorCC.js.map +1 -1
  245. package/build/esm/cc/IrrigationCC.d.ts +826 -2317
  246. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  247. package/build/esm/cc/IrrigationCC.js +3 -222
  248. package/build/esm/cc/IrrigationCC.js.map +1 -1
  249. package/build/esm/cc/LanguageCC.d.ts +31 -133
  250. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  251. package/build/esm/cc/LanguageCC.js +2 -12
  252. package/build/esm/cc/LanguageCC.js.map +1 -1
  253. package/build/esm/cc/LockCC.d.ts +14 -64
  254. package/build/esm/cc/LockCC.d.ts.map +1 -1
  255. package/build/esm/cc/LockCC.js +2 -9
  256. package/build/esm/cc/LockCC.js.map +1 -1
  257. package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
  258. package/build/esm/cc/ManufacturerProprietaryCC.js +0 -1
  259. package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
  260. package/build/esm/cc/ManufacturerSpecificCC.d.ts +77 -239
  261. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  262. package/build/esm/cc/ManufacturerSpecificCC.js +2 -24
  263. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  264. package/build/esm/cc/MeterCC.d.ts +119 -393
  265. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  266. package/build/esm/cc/MeterCC.js +3 -49
  267. package/build/esm/cc/MeterCC.js.map +1 -1
  268. package/build/esm/cc/MultiChannelAssociationCC.d.ts +66 -166
  269. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  270. package/build/esm/cc/MultiChannelAssociationCC.js +2 -14
  271. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  272. package/build/esm/cc/MultiChannelCC.d.ts +119 -499
  273. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  274. package/build/esm/cc/MultiChannelCC.js +2 -30
  275. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  276. package/build/esm/cc/MultilevelSensorCC.d.ts +46 -130
  277. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  278. package/build/esm/cc/MultilevelSensorCC.js +2 -22
  279. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  280. package/build/esm/cc/MultilevelSwitchCC.d.ts +160 -525
  281. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  282. package/build/esm/cc/MultilevelSwitchCC.js +5 -101
  283. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  284. package/build/esm/cc/NodeNamingCC.d.ts +33 -135
  285. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  286. package/build/esm/cc/NodeNamingCC.js +2 -12
  287. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  288. package/build/esm/cc/NotificationCC.d.ts +262 -702
  289. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  290. package/build/esm/cc/NotificationCC.js +3 -85
  291. package/build/esm/cc/NotificationCC.js.map +1 -1
  292. package/build/esm/cc/ProtectionCC.d.ts +118 -524
  293. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  294. package/build/esm/cc/ProtectionCC.js +2 -36
  295. package/build/esm/cc/ProtectionCC.js.map +1 -1
  296. package/build/esm/cc/SceneActivationCC.d.ts +33 -132
  297. package/build/esm/cc/SceneActivationCC.d.ts.map +1 -1
  298. package/build/esm/cc/SceneActivationCC.js +2 -14
  299. package/build/esm/cc/SceneActivationCC.js.map +1 -1
  300. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts +34 -61
  301. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -1
  302. package/build/esm/cc/SceneActuatorConfigurationCC.js +2 -14
  303. package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
  304. package/build/esm/cc/SceneControllerConfigurationCC.d.ts +34 -61
  305. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
  306. package/build/esm/cc/SceneControllerConfigurationCC.js +2 -14
  307. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  308. package/build/esm/cc/ScheduleEntryLockCC.d.ts +95 -299
  309. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  310. package/build/esm/cc/ScheduleEntryLockCC.js +2 -17
  311. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  312. package/build/esm/cc/SoundSwitchCC.d.ts +72 -261
  313. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
  314. package/build/esm/cc/SoundSwitchCC.js +2 -33
  315. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  316. package/build/esm/cc/SupervisionCC.d.ts +17 -33
  317. package/build/esm/cc/SupervisionCC.d.ts.map +1 -1
  318. package/build/esm/cc/SupervisionCC.js +2 -7
  319. package/build/esm/cc/SupervisionCC.js.map +1 -1
  320. package/build/esm/cc/ThermostatFanModeCC.d.ts +44 -195
  321. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  322. package/build/esm/cc/ThermostatFanModeCC.js +2 -14
  323. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  324. package/build/esm/cc/ThermostatFanStateCC.d.ts +17 -65
  325. package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
  326. package/build/esm/cc/ThermostatFanStateCC.js +2 -9
  327. package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
  328. package/build/esm/cc/ThermostatModeCC.d.ts +44 -195
  329. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  330. package/build/esm/cc/ThermostatModeCC.js +2 -14
  331. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  332. package/build/esm/cc/ThermostatOperatingStateCC.d.ts +17 -65
  333. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  334. package/build/esm/cc/ThermostatOperatingStateCC.js +2 -9
  335. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  336. package/build/esm/cc/ThermostatSetpointCC.d.ts +49 -129
  337. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  338. package/build/esm/cc/ThermostatSetpointCC.js +2 -16
  339. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  340. package/build/esm/cc/TimeParametersCC.d.ts +12 -63
  341. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  342. package/build/esm/cc/TimeParametersCC.js +2 -8
  343. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  344. package/build/esm/cc/UserCodeCC.d.ts +311 -1066
  345. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  346. package/build/esm/cc/UserCodeCC.js +2 -60
  347. package/build/esm/cc/UserCodeCC.js.map +1 -1
  348. package/build/esm/cc/VersionCC.d.ts +289 -1003
  349. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  350. package/build/esm/cc/VersionCC.js +2 -92
  351. package/build/esm/cc/VersionCC.js.map +1 -1
  352. package/build/esm/cc/WakeUpCC.d.ts +49 -201
  353. package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
  354. package/build/esm/cc/WakeUpCC.js +2 -21
  355. package/build/esm/cc/WakeUpCC.js.map +1 -1
  356. package/build/esm/cc/WindowCoveringCC.d.ts +126 -220
  357. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  358. package/build/esm/cc/WindowCoveringCC.js +3 -103
  359. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  360. package/build/esm/cc/ZWavePlusCC.d.ts +69 -329
  361. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
  362. package/build/esm/cc/ZWavePlusCC.js +2 -25
  363. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  364. package/build/esm/cc/_CCValues.generated.d.ts +15814 -0
  365. package/build/esm/cc/_CCValues.generated.d.ts.map +1 -0
  366. package/build/esm/cc/_CCValues.generated.js +9187 -0
  367. package/build/esm/cc/_CCValues.generated.js.map +1 -0
  368. package/build/esm/lib/CCValueUtils.d.ts +14 -0
  369. package/build/esm/lib/CCValueUtils.d.ts.map +1 -0
  370. package/build/esm/lib/CCValueUtils.js +62 -0
  371. package/build/esm/lib/CCValueUtils.js.map +1 -0
  372. package/build/esm/lib/Values.d.ts +6 -105
  373. package/build/esm/lib/Values.d.ts.map +1 -1
  374. package/build/esm/lib/Values.js +7 -104
  375. package/build/esm/lib/Values.js.map +1 -1
  376. package/package.json +9 -7
@@ -38,7 +38,7 @@ __export(IndicatorCC_exports, {
38
38
  IndicatorCCSet: () => IndicatorCCSet,
39
39
  IndicatorCCSupportedGet: () => IndicatorCCSupportedGet,
40
40
  IndicatorCCSupportedReport: () => IndicatorCCSupportedReport,
41
- IndicatorCCValues: () => IndicatorCCValues
41
+ IndicatorCCValues: () => import_CCValues_generated.IndicatorCCValues
42
42
  });
43
43
  module.exports = __toCommonJS(IndicatorCC_exports);
44
44
  var __validateArgs = __toESM(require("./IndicatorCC._validateArgs.js"), 1);
@@ -52,6 +52,7 @@ var import_CommandClass = require("../lib/CommandClass.js");
52
52
  var import_CommandClassDecorators = require("../lib/CommandClassDecorators.js");
53
53
  var import_Values = require("../lib/Values.js");
54
54
  var import_Types = require("../lib/_Types.js");
55
+ var import_CCValues_generated = require("./_CCValues.generated.js");
55
56
  var __runInitializers = function(thisArg, initializers, value) {
56
57
  var useValue = arguments.length > 2;
57
58
  for (var i = 0; i < initializers.length; i++) {
@@ -134,57 +135,10 @@ function indicatorObjectsToTimeout(values) {
134
135
  };
135
136
  }
136
137
  __name(indicatorObjectsToTimeout, "indicatorObjectsToTimeout");
137
- const IndicatorCCValues = Object.freeze({
138
- ...import_Values.V.defineStaticCCValues(import_safe.CommandClasses.Indicator, {
139
- ...import_Values.V.staticProperty("supportedIndicatorIds", void 0, {
140
- internal: true
141
- }),
142
- ...import_Values.V.staticPropertyWithName("valueV1", "value", {
143
- ...import_safe.ValueMetadata.UInt8,
144
- label: "Indicator value",
145
- ccSpecific: {
146
- indicatorId: 0
147
- }
148
- }),
149
- // Convenience values for indicators that are split across multiple properties
150
- ...import_Values.V.staticProperty("identify", {
151
- ...import_safe.ValueMetadata.WriteOnlyBoolean,
152
- label: "Identify",
153
- states: {
154
- true: "Identify"
155
- }
156
- }, { minVersion: 3 }),
157
- ...import_Values.V.staticProperty("timeout", {
158
- ...import_safe.ValueMetadata.String,
159
- label: "Timeout"
160
- }, { minVersion: 3 })
161
- }),
162
- ...import_Values.V.defineDynamicCCValues(import_safe.CommandClasses.Indicator, {
163
- ...import_Values.V.dynamicPropertyAndKeyWithName("supportedPropertyIDs", "supportedPropertyIDs", (indicatorId) => indicatorId, ({ property, propertyKey }) => property === "supportedPropertyIDs" && typeof propertyKey === "number", void 0, { internal: true }),
164
- ...import_Values.V.dynamicPropertyAndKeyWithName(
165
- "valueV2",
166
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
167
- (indicatorId, propertyId) => indicatorId,
168
- (indicatorId, propertyId) => propertyId,
169
- ({ property, propertyKey }) => typeof property === "number" && typeof propertyKey === "number",
170
- // The metadata is highly dependent on the indicator and property
171
- // so this is just a baseline
172
- (indicatorId, propertyId) => ({
173
- ...import_safe.ValueMetadata.Any,
174
- ccSpecific: {
175
- indicatorId,
176
- propertyId
177
- }
178
- }),
179
- { minVersion: 2 }
180
- ),
181
- ...import_Values.V.dynamicPropertyWithName("indicatorDescription", (indicatorId) => indicatorId, ({ property }) => typeof property === "number", void 0, { internal: true, minVersion: 4 })
182
- })
183
- });
184
138
  function getIndicatorMetadata(indicatorId, propertyId, overrideIndicatorLabel) {
185
139
  const label = overrideIndicatorLabel || getIndicatorName(indicatorId);
186
140
  const prop = (0, import_safe.getIndicatorProperty)(propertyId);
187
- const baseMetadata = IndicatorCCValues.valueV2(indicatorId, propertyId).meta;
141
+ const baseMetadata = import_CCValues_generated.IndicatorCCValues.valueV2(indicatorId, propertyId).meta;
188
142
  if (!label && !prop) {
189
143
  return {
190
144
  ...baseMetadata,
@@ -541,7 +495,7 @@ let IndicatorCCAPI = (() => {
541
495
  return IndicatorCCAPI2 = _classThis;
542
496
  })();
543
497
  let IndicatorCC = (() => {
544
- let _classDecorators = [(0, import_CommandClassDecorators.commandClass)(import_safe.CommandClasses.Indicator), (0, import_CommandClassDecorators.implementedVersion)(4), (0, import_CommandClassDecorators.ccValues)(IndicatorCCValues)];
498
+ let _classDecorators = [(0, import_CommandClassDecorators.commandClass)(import_safe.CommandClasses.Indicator), (0, import_CommandClassDecorators.implementedVersion)(4), (0, import_CommandClassDecorators.ccValues)(import_CCValues_generated.IndicatorCCValues)];
545
499
  let _classDescriptor;
546
500
  let _classExtraInitializers = [];
547
501
  let _classThis;
@@ -592,7 +546,7 @@ let IndicatorCC = (() => {
592
546
  supportedIndicatorIds.push(supportedResponse.indicatorId ?? curId);
593
547
  curId = supportedResponse.nextIndicatorId;
594
548
  } while (curId !== 0);
595
- this.setValue(ctx, IndicatorCCValues.supportedIndicatorIds, supportedIndicatorIds);
549
+ this.setValue(ctx, import_CCValues_generated.IndicatorCCValues.supportedIndicatorIds, supportedIndicatorIds);
596
550
  const logMessage = `supported indicator IDs: ${supportedIndicatorIds.join(", ")}`;
597
551
  ctx.logNode(node.id, {
598
552
  endpoint: this.endpointIndex,
@@ -630,7 +584,7 @@ let IndicatorCC = (() => {
630
584
  });
631
585
  await api.get();
632
586
  } else {
633
- const supportedIndicatorIds = this.getValue(ctx, IndicatorCCValues.supportedIndicatorIds) ?? [];
587
+ const supportedIndicatorIds = this.getValue(ctx, import_CCValues_generated.IndicatorCCValues.supportedIndicatorIds) ?? [];
634
588
  for (const indicatorId of supportedIndicatorIds) {
635
589
  ctx.logNode(node.id, {
636
590
  endpoint: this.endpointIndex,
@@ -659,13 +613,13 @@ let IndicatorCC = (() => {
659
613
  return super.translateProperty(ctx, property, propertyKey);
660
614
  }
661
615
  supportsV2Indicators(ctx) {
662
- const supportedIndicatorIds = this.getValue(ctx, IndicatorCCValues.supportedIndicatorIds);
616
+ const supportedIndicatorIds = this.getValue(ctx, import_CCValues_generated.IndicatorCCValues.supportedIndicatorIds);
663
617
  if (!supportedIndicatorIds?.length)
664
618
  return false;
665
- return supportedIndicatorIds.some((indicatorId) => !!this.getValue(ctx, IndicatorCCValues.supportedPropertyIDs(indicatorId))?.length);
619
+ return supportedIndicatorIds.some((indicatorId) => !!this.getValue(ctx, import_CCValues_generated.IndicatorCCValues.supportedPropertyIDs(indicatorId))?.length);
666
620
  }
667
621
  static getSupportedPropertyIDsCached(ctx, endpoint, indicatorId) {
668
- return ctx.getValueDB(endpoint.nodeId).getValue(IndicatorCCValues.supportedPropertyIDs(indicatorId).endpoint(endpoint.index));
622
+ return ctx.getValueDB(endpoint.nodeId).getValue(import_CCValues_generated.IndicatorCCValues.supportedPropertyIDs(indicatorId).endpoint(endpoint.index));
669
623
  }
670
624
  };
671
625
  return IndicatorCC2 = _classThis;
@@ -824,7 +778,7 @@ let IndicatorCCReport = (() => {
824
778
  return false;
825
779
  if (this.indicator0Value != void 0) {
826
780
  if (!this.supportsV2Indicators(ctx)) {
827
- const valueV1 = IndicatorCCValues.valueV1;
781
+ const valueV1 = import_CCValues_generated.IndicatorCCValues.valueV1;
828
782
  this.setMetadata(ctx, valueV1);
829
783
  this.setValue(ctx, valueV1, this.indicator0Value);
830
784
  } else {
@@ -849,7 +803,7 @@ let IndicatorCCReport = (() => {
849
803
  timeoutString += `${timeout.minutes}m`;
850
804
  if (timeout?.seconds)
851
805
  timeoutString += `${timeout.seconds}s`;
852
- this.setValue(ctx, IndicatorCCValues.timeout, timeoutString);
806
+ this.setValue(ctx, import_CCValues_generated.IndicatorCCValues.timeout, timeoutString);
853
807
  }
854
808
  }
855
809
  return true;
@@ -857,12 +811,12 @@ let IndicatorCCReport = (() => {
857
811
  indicator0Value;
858
812
  values;
859
813
  setIndicatorValue(ctx, value) {
860
- const overrideIndicatorLabel = isManufacturerDefinedIndicator(value.indicatorId) ? this.getValue(ctx, IndicatorCCValues.indicatorDescription(value.indicatorId)) : void 0;
814
+ const overrideIndicatorLabel = isManufacturerDefinedIndicator(value.indicatorId) ? this.getValue(ctx, import_CCValues_generated.IndicatorCCValues.indicatorDescription(value.indicatorId)) : void 0;
861
815
  const metadata = getIndicatorMetadata(value.indicatorId, value.propertyId, overrideIndicatorLabel);
862
816
  if (metadata.type === "boolean") {
863
817
  value.value = !!value.value;
864
818
  }
865
- const valueV2 = IndicatorCCValues.valueV2(value.indicatorId, value.propertyId);
819
+ const valueV2 = import_CCValues_generated.IndicatorCCValues.valueV2(value.indicatorId, value.propertyId);
866
820
  this.setMetadata(ctx, valueV2, metadata);
867
821
  this.setValue(ctx, valueV2, value.value);
868
822
  }
@@ -1003,7 +957,7 @@ let IndicatorCCSupportedReport = (() => {
1003
957
  if (!super.persistValues(ctx))
1004
958
  return false;
1005
959
  if (this.indicatorId !== 0) {
1006
- this.setValue(ctx, IndicatorCCValues.supportedPropertyIDs(this.indicatorId), this.supportedProperties);
960
+ this.setValue(ctx, import_CCValues_generated.IndicatorCCValues.supportedPropertyIDs(this.indicatorId), this.supportedProperties);
1007
961
  }
1008
962
  return true;
1009
963
  }
@@ -1130,7 +1084,7 @@ let IndicatorCCDescriptionReport = (() => {
1130
1084
  if (!super.persistValues(ctx))
1131
1085
  return false;
1132
1086
  if (this.description) {
1133
- this.setValue(ctx, IndicatorCCValues.indicatorDescription(this.indicatorId), this.description);
1087
+ this.setValue(ctx, import_CCValues_generated.IndicatorCCValues.indicatorDescription(this.indicatorId), this.description);
1134
1088
  }
1135
1089
  return true;
1136
1090
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/IndicatorCC.ts"],
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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",
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 = V.defineCCValues(CommandClasses.Indicator, {\n\t...V.staticProperty(\"supportedIndicatorIds\", undefined, {\n\t\tinternal: true,\n\t}),\n\t...V.staticPropertyWithName(\n\t\t\"valueV1\",\n\t\t\"value\",\n\t\t{\n\t\t\t...ValueMetadata.UInt8,\n\t\t\tlabel: \"Indicator value\",\n\t\t\tccSpecific: {\n\t\t\t\tindicatorId: 0,\n\t\t\t},\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"identify\",\n\t\t{\n\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\tlabel: \"Identify\",\n\t\t\tstates: {\n\t\t\t\ttrue: \"Identify\",\n\t\t\t},\n\t\t} as const,\n\t\t{ minVersion: 3 } as const,\n\t),\n\t...V.staticProperty(\n\t\t\"timeout\",\n\t\t{\n\t\t\t...ValueMetadata.String,\n\t\t\tlabel: \"Timeout\",\n\t\t} as const,\n\t\t{ minVersion: 3 } as const,\n\t),\n\t...V.dynamicPropertyAndKeyWithName(\n\t\t\"supportedPropertyIDs\",\n\t\t\"supportedPropertyIDs\",\n\t\t(indicatorId: number) => indicatorId,\n\t\t({ property, propertyKey }) =>\n\t\t\tproperty === \"supportedPropertyIDs\"\n\t\t\t&& typeof propertyKey === \"number\",\n\t\tundefined,\n\t\t{ internal: true },\n\t),\n\t...V.dynamicPropertyAndKeyWithName(\n\t\t\"valueV2\",\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t(indicatorId: number, propertyId: number) => indicatorId,\n\t\t(indicatorId: number, propertyId: number) => propertyId,\n\t\t({ property, propertyKey }) =>\n\t\t\ttypeof property === \"number\" && typeof propertyKey === \"number\",\n\t\t// The metadata is highly dependent on the indicator and property\n\t\t// so this is just a baseline\n\t\t(indicatorId: number, propertyId: number) => ({\n\t\t\t...ValueMetadata.Any,\n\t\t\tccSpecific: {\n\t\t\t\tindicatorId,\n\t\t\t\tpropertyId,\n\t\t\t},\n\t\t}),\n\t\t{ minVersion: 2 } as const,\n\t),\n\t...V.dynamicPropertyWithName(\n\t\t\"indicatorDescription\",\n\t\t(indicatorId: number) => indicatorId,\n\t\t({ property }) => typeof property === \"number\",\n\t\tundefined,\n\t\t{ internal: true, minVersion: 4 } as const,\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
  }