@zwave-js/cc 15.25.1 → 15.25.2

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 (283) hide show
  1. package/build/cjs/cc/AlarmSensorCC.js +5 -3
  2. package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
  3. package/build/cjs/cc/AssociationCC.js +5 -2
  4. package/build/cjs/cc/AssociationCC.js.map +2 -2
  5. package/build/cjs/cc/AssociationGroupInfoCC.js +7 -2
  6. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  7. package/build/cjs/cc/BarrierOperatorCC.js +5 -3
  8. package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
  9. package/build/cjs/cc/BasicCC.js +3 -2
  10. package/build/cjs/cc/BasicCC.js.map +2 -2
  11. package/build/cjs/cc/BatteryCC.js +3 -2
  12. package/build/cjs/cc/BatteryCC.js.map +2 -2
  13. package/build/cjs/cc/BinarySensorCC.js +5 -3
  14. package/build/cjs/cc/BinarySensorCC.js.map +2 -2
  15. package/build/cjs/cc/BinarySwitchCC.js +3 -2
  16. package/build/cjs/cc/BinarySwitchCC.js.map +2 -2
  17. package/build/cjs/cc/CentralSceneCC.js +2 -1
  18. package/build/cjs/cc/CentralSceneCC.js.map +2 -2
  19. package/build/cjs/cc/ClockCC.js +3 -2
  20. package/build/cjs/cc/ClockCC.js.map +2 -2
  21. package/build/cjs/cc/ColorSwitchCC.js +5 -2
  22. package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
  23. package/build/cjs/cc/ConfigurationCC.js +5 -2
  24. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  25. package/build/cjs/cc/DoorLockCC.js +5 -3
  26. package/build/cjs/cc/DoorLockCC.js.map +2 -2
  27. package/build/cjs/cc/DoorLockLoggingCC.js +3 -2
  28. package/build/cjs/cc/DoorLockLoggingCC.js.map +2 -2
  29. package/build/cjs/cc/EnergyProductionCC.js +3 -2
  30. package/build/cjs/cc/EnergyProductionCC.js.map +2 -2
  31. package/build/cjs/cc/EntryControlCC.js +5 -3
  32. package/build/cjs/cc/EntryControlCC.js.map +2 -2
  33. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +2 -1
  34. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
  35. package/build/cjs/cc/HumidityControlModeCC.js +5 -3
  36. package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
  37. package/build/cjs/cc/HumidityControlOperatingStateCC.js +3 -2
  38. package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +2 -2
  39. package/build/cjs/cc/HumidityControlSetpointCC.js +5 -3
  40. package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
  41. package/build/cjs/cc/IndicatorCC.js +5 -2
  42. package/build/cjs/cc/IndicatorCC.js.map +2 -2
  43. package/build/cjs/cc/IrrigationCC.js +5 -2
  44. package/build/cjs/cc/IrrigationCC.js.map +2 -2
  45. package/build/cjs/cc/LanguageCC.js +3 -2
  46. package/build/cjs/cc/LanguageCC.js.map +2 -2
  47. package/build/cjs/cc/LockCC.js +3 -2
  48. package/build/cjs/cc/LockCC.js.map +2 -2
  49. package/build/cjs/cc/ManufacturerSpecificCC.js +4 -1
  50. package/build/cjs/cc/ManufacturerSpecificCC.js.map +2 -2
  51. package/build/cjs/cc/MeterCC.js +5 -3
  52. package/build/cjs/cc/MeterCC.js.map +2 -2
  53. package/build/cjs/cc/MultiChannelAssociationCC.js +5 -2
  54. package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
  55. package/build/cjs/cc/MultiChannelCC.js +2 -1
  56. package/build/cjs/cc/MultiChannelCC.js.map +2 -2
  57. package/build/cjs/cc/MultilevelSensorCC.js +5 -2
  58. package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
  59. package/build/cjs/cc/MultilevelSwitchCC.js +5 -3
  60. package/build/cjs/cc/MultilevelSwitchCC.js.map +2 -2
  61. package/build/cjs/cc/NodeNamingCC.js +3 -2
  62. package/build/cjs/cc/NodeNamingCC.js.map +2 -2
  63. package/build/cjs/cc/NotificationCC.js +7 -3
  64. package/build/cjs/cc/NotificationCC.js.map +2 -2
  65. package/build/cjs/cc/ProtectionCC.js +5 -3
  66. package/build/cjs/cc/ProtectionCC.js.map +2 -2
  67. package/build/cjs/cc/SceneControllerConfigurationCC.js +2 -1
  68. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
  69. package/build/cjs/cc/ScheduleEntryLockCC.js +2 -1
  70. package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
  71. package/build/cjs/cc/Security2CC.js +3 -2
  72. package/build/cjs/cc/Security2CC.js.map +2 -2
  73. package/build/cjs/cc/SecurityCC.js +2 -1
  74. package/build/cjs/cc/SecurityCC.js.map +2 -2
  75. package/build/cjs/cc/SoundSwitchCC.js +2 -1
  76. package/build/cjs/cc/SoundSwitchCC.js.map +2 -2
  77. package/build/cjs/cc/ThermostatFanModeCC.js +5 -3
  78. package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
  79. package/build/cjs/cc/ThermostatFanStateCC.js +3 -2
  80. package/build/cjs/cc/ThermostatFanStateCC.js.map +2 -2
  81. package/build/cjs/cc/ThermostatModeCC.js +5 -3
  82. package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
  83. package/build/cjs/cc/ThermostatOperatingStateCC.js +3 -2
  84. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
  85. package/build/cjs/cc/ThermostatSetbackCC.js +3 -2
  86. package/build/cjs/cc/ThermostatSetbackCC.js.map +2 -2
  87. package/build/cjs/cc/ThermostatSetpointCC.js +5 -2
  88. package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
  89. package/build/cjs/cc/TimeCC.js +2 -1
  90. package/build/cjs/cc/TimeCC.js.map +2 -2
  91. package/build/cjs/cc/TimeParametersCC.js +2 -1
  92. package/build/cjs/cc/TimeParametersCC.js.map +2 -2
  93. package/build/cjs/cc/UserCodeCC.js +4 -2
  94. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  95. package/build/cjs/cc/UserCredentialCC.js +5 -2
  96. package/build/cjs/cc/UserCredentialCC.js.map +2 -2
  97. package/build/cjs/cc/VersionCC.js +2 -1
  98. package/build/cjs/cc/VersionCC.js.map +2 -2
  99. package/build/cjs/cc/WakeUpCC.js +2 -1
  100. package/build/cjs/cc/WakeUpCC.js.map +2 -2
  101. package/build/cjs/cc/WindowCoveringCC.js +5 -2
  102. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  103. package/build/cjs/cc/ZWavePlusCC.js +2 -1
  104. package/build/cjs/cc/ZWavePlusCC.js.map +2 -2
  105. package/build/cjs/cc/manufacturerProprietary/Decorators.d.ts +1 -1
  106. package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +2 -2
  107. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +3 -2
  108. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +2 -2
  109. package/build/cjs/lib/API.js.map +2 -2
  110. package/build/cjs/lib/CommandClass.d.ts +2 -0
  111. package/build/cjs/lib/CommandClass.js.map +2 -2
  112. package/build/cjs/lib/CommandClassDecorators.d.ts +4 -4
  113. package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
  114. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  115. package/build/esm/cc/AlarmSensorCC.js +3 -1
  116. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  117. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  118. package/build/esm/cc/AssociationCC.js +3 -0
  119. package/build/esm/cc/AssociationCC.js.map +1 -1
  120. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  121. package/build/esm/cc/AssociationGroupInfoCC.js +6 -1
  122. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  123. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  124. package/build/esm/cc/BarrierOperatorCC.js +3 -1
  125. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  126. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  127. package/build/esm/cc/BasicCC.js +2 -1
  128. package/build/esm/cc/BasicCC.js.map +1 -1
  129. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  130. package/build/esm/cc/BatteryCC.js +2 -1
  131. package/build/esm/cc/BatteryCC.js.map +1 -1
  132. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  133. package/build/esm/cc/BinarySensorCC.js +3 -1
  134. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  135. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  136. package/build/esm/cc/BinarySwitchCC.js +2 -1
  137. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  138. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  139. package/build/esm/cc/CentralSceneCC.js +1 -0
  140. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  141. package/build/esm/cc/ClockCC.d.ts.map +1 -1
  142. package/build/esm/cc/ClockCC.js +2 -1
  143. package/build/esm/cc/ClockCC.js.map +1 -1
  144. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  145. package/build/esm/cc/ColorSwitchCC.js +3 -0
  146. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  147. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  148. package/build/esm/cc/ConfigurationCC.js +3 -0
  149. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  150. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  151. package/build/esm/cc/DoorLockCC.js +3 -1
  152. package/build/esm/cc/DoorLockCC.js.map +1 -1
  153. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
  154. package/build/esm/cc/DoorLockLoggingCC.js +2 -1
  155. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
  156. package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
  157. package/build/esm/cc/EnergyProductionCC.js +2 -1
  158. package/build/esm/cc/EnergyProductionCC.js.map +1 -1
  159. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  160. package/build/esm/cc/EntryControlCC.js +3 -1
  161. package/build/esm/cc/EntryControlCC.js.map +1 -1
  162. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  163. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +1 -0
  164. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  165. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  166. package/build/esm/cc/HumidityControlModeCC.js +3 -1
  167. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  168. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
  169. package/build/esm/cc/HumidityControlOperatingStateCC.js +2 -1
  170. package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
  171. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  172. package/build/esm/cc/HumidityControlSetpointCC.js +3 -1
  173. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  174. package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
  175. package/build/esm/cc/IndicatorCC.js +3 -0
  176. package/build/esm/cc/IndicatorCC.js.map +1 -1
  177. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  178. package/build/esm/cc/IrrigationCC.js +3 -0
  179. package/build/esm/cc/IrrigationCC.js.map +1 -1
  180. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  181. package/build/esm/cc/LanguageCC.js +2 -1
  182. package/build/esm/cc/LanguageCC.js.map +1 -1
  183. package/build/esm/cc/LockCC.d.ts.map +1 -1
  184. package/build/esm/cc/LockCC.js +2 -1
  185. package/build/esm/cc/LockCC.js.map +1 -1
  186. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  187. package/build/esm/cc/ManufacturerSpecificCC.js +4 -1
  188. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  189. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  190. package/build/esm/cc/MeterCC.js +3 -1
  191. package/build/esm/cc/MeterCC.js.map +1 -1
  192. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  193. package/build/esm/cc/MultiChannelAssociationCC.js +3 -0
  194. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  195. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  196. package/build/esm/cc/MultiChannelCC.js +1 -0
  197. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  198. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  199. package/build/esm/cc/MultilevelSensorCC.js +3 -0
  200. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  201. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  202. package/build/esm/cc/MultilevelSwitchCC.js +3 -1
  203. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  204. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  205. package/build/esm/cc/NodeNamingCC.js +2 -1
  206. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  207. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  208. package/build/esm/cc/NotificationCC.js +5 -1
  209. package/build/esm/cc/NotificationCC.js.map +1 -1
  210. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  211. package/build/esm/cc/ProtectionCC.js +3 -1
  212. package/build/esm/cc/ProtectionCC.js.map +1 -1
  213. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
  214. package/build/esm/cc/SceneControllerConfigurationCC.js +1 -0
  215. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  216. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  217. package/build/esm/cc/ScheduleEntryLockCC.js +1 -0
  218. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  219. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  220. package/build/esm/cc/Security2CC.js +2 -1
  221. package/build/esm/cc/Security2CC.js.map +1 -1
  222. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  223. package/build/esm/cc/SecurityCC.js +1 -0
  224. package/build/esm/cc/SecurityCC.js.map +1 -1
  225. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
  226. package/build/esm/cc/SoundSwitchCC.js +1 -0
  227. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  228. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  229. package/build/esm/cc/ThermostatFanModeCC.js +3 -1
  230. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  231. package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
  232. package/build/esm/cc/ThermostatFanStateCC.js +2 -1
  233. package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
  234. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  235. package/build/esm/cc/ThermostatModeCC.js +3 -1
  236. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  237. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  238. package/build/esm/cc/ThermostatOperatingStateCC.js +2 -1
  239. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  240. package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -1
  241. package/build/esm/cc/ThermostatSetbackCC.js +2 -1
  242. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
  243. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  244. package/build/esm/cc/ThermostatSetpointCC.js +3 -0
  245. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  246. package/build/esm/cc/TimeCC.d.ts.map +1 -1
  247. package/build/esm/cc/TimeCC.js +1 -0
  248. package/build/esm/cc/TimeCC.js.map +1 -1
  249. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  250. package/build/esm/cc/TimeParametersCC.js +1 -0
  251. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  252. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  253. package/build/esm/cc/UserCodeCC.js +2 -0
  254. package/build/esm/cc/UserCodeCC.js.map +1 -1
  255. package/build/esm/cc/UserCredentialCC.d.ts.map +1 -1
  256. package/build/esm/cc/UserCredentialCC.js +4 -1
  257. package/build/esm/cc/UserCredentialCC.js.map +1 -1
  258. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  259. package/build/esm/cc/VersionCC.js +1 -0
  260. package/build/esm/cc/VersionCC.js.map +1 -1
  261. package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
  262. package/build/esm/cc/WakeUpCC.js +1 -0
  263. package/build/esm/cc/WakeUpCC.js.map +1 -1
  264. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  265. package/build/esm/cc/WindowCoveringCC.js +3 -0
  266. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  267. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
  268. package/build/esm/cc/ZWavePlusCC.js +1 -0
  269. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  270. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts +1 -1
  271. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
  272. package/build/esm/cc/manufacturerProprietary/Decorators.js.map +1 -1
  273. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
  274. package/build/esm/cc/manufacturerProprietary/FibaroCC.js +2 -1
  275. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  276. package/build/esm/lib/API.js.map +1 -1
  277. package/build/esm/lib/CommandClass.d.ts +2 -0
  278. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  279. package/build/esm/lib/CommandClass.js.map +1 -1
  280. package/build/esm/lib/CommandClassDecorators.d.ts +4 -4
  281. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
  282. package/build/esm/lib/CommandClassDecorators.js.map +1 -1
  283. package/package.json +7 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/IndicatorCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./IndicatorCC._validateArgs.js\";\nconst { validateArgs_IndicatorCCAPI_get, validateArgs_IndicatorCCAPI_set, validateArgs_IndicatorCCAPI_sendReport, validateArgs_IndicatorCCAPI_getSupported, validateArgs_IndicatorCCAPI_reportSupported, validateArgs_IndicatorCCAPI_reportDescription, validateArgs_IndicatorCCAPI_setTimeout, validateArgs_IndicatorCCAPI_getTimeout, validateArgs_IndicatorCCAPI_getDescription } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, Indicator, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, type ValueID, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, getIndicatorProperty, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, num2hex } from \"@zwave-js/shared\";\nimport { clamp, roundTo } from \"alcalzone-shared/math\";\nimport { isArray } from \"alcalzone-shared/typeguards\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { IndicatorCommand, type IndicatorTimeout } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nfunction isManufacturerDefinedIndicator(indicatorId: number): boolean {\n return indicatorId >= 0x80 && indicatorId <= 0x9f;\n}\nconst timeoutStringRegex = /^(?:(?<hoursStr>\\d+)h)?(?:(?<minutesStr>\\d+)m)?(?:(?<secondsStr>\\d+(?:\\.\\d+)?)s)?$/i;\nconst MAX_INDICATOR_OBJECTS = 31;\nfunction parseIndicatorTimeoutString(text: string): IndicatorTimeout | undefined {\n if (!text.length)\n return undefined;\n // Try to parse the numeric parts from a timeout\n const match = timeoutStringRegex.exec(text);\n if (!match)\n return undefined;\n const { hoursStr, minutesStr, secondsStr } = match.groups!;\n if (!hoursStr && !minutesStr && !secondsStr)\n return undefined;\n const ret: IndicatorTimeout = {};\n if (hoursStr) {\n ret.hours = clamp(parseInt(hoursStr, 10), 0, 255);\n }\n if (minutesStr) {\n ret.minutes = clamp(parseInt(minutesStr, 10), 0, 255);\n }\n if (secondsStr) {\n ret.seconds = clamp(roundTo(parseFloat(secondsStr), 2), 0, 59.99);\n }\n return ret;\n}\nfunction groupByIndicatorId(values: IndicatorObject[]): Map<number, IndicatorObject[]> {\n const ret = new Map();\n for (const value of values) {\n if (!ret.has(value.indicatorId)) {\n ret.set(value.indicatorId, []);\n }\n ret.get(value.indicatorId)!.push(value);\n }\n return ret;\n}\nfunction indicatorObjectsToTimeout(values: IndicatorObject[]): IndicatorTimeout | undefined {\n const timeoutValues = values.filter((v) => [0x0a, 0x06, 0x07, 0x08].includes(v.propertyId));\n if (!timeoutValues.length)\n return undefined;\n const hours = (timeoutValues.find((v) => v.propertyId === 0x0a)?.value\n ?? 0) as number;\n const minutes = (timeoutValues.find((v) => v.propertyId === 0x06)?.value\n ?? 0) as number;\n const seconds = clamp((timeoutValues.find((v) => v.propertyId === 0x07)\n ?.value as number) ?? 0, 0, 59)\n + clamp((timeoutValues.find((v) => v.propertyId === 0x08)\n ?.value as number) ?? 0, 0, 99)\n / 100;\n return {\n hours,\n minutes,\n seconds,\n };\n}\nimport { IndicatorCCValues } from \"./_CCValues.generated.js\";\nexport { IndicatorCCValues };\n/**\n * Looks up the configured metadata for the given indicator and property\n */\nfunction getIndicatorMetadata(indicatorId: Indicator, propertyId: number, overrideIndicatorLabel?: string): ValueMetadata {\n const label = getIndicatorLabel(indicatorId, propertyId, overrideIndicatorLabel);\n const prop = getIndicatorProperty(propertyId);\n const baseMetadata = IndicatorCCValues.valueV2(indicatorId, propertyId).meta;\n if (!prop) {\n return {\n ...baseMetadata,\n ...ValueMetadata.UInt8,\n label,\n };\n }\n else {\n if (prop.type === \"boolean\") {\n return {\n ...baseMetadata,\n ...ValueMetadata.Boolean,\n label,\n description: prop.description,\n readable: !prop.readonly,\n };\n }\n else {\n // UInt8\n return {\n ...baseMetadata,\n ...ValueMetadata.UInt8,\n label,\n description: prop.description,\n min: prop.min,\n max: prop.max,\n readable: !prop.readonly,\n };\n }\n }\n}\nfunction getIndicatorName(indicatorId: number | undefined): string {\n if (indicatorId) {\n return getEnumMemberName(Indicator, indicatorId);\n }\n else {\n return \"Default\";\n }\n}\n/** Returns a user-friendly label for an indicator */\nfunction getIndicatorLabel(indicatorId: number, propertyId: number, overrideIndicatorLabel?: string, overridePropertyLabel?: string): string {\n const defaultName = overrideIndicatorLabel || getIndicatorName(indicatorId);\n // Without a defined property, we cannot suggest a better label\n const prop = getIndicatorProperty(propertyId);\n if (!prop)\n return defaultName;\n // For indicators that correspond to an LCD or buttons,\n // the indicator enum names are enough\n if (indicatorId >= Indicator[\"LCD backlight\"]\n && indicatorId <= Indicator[\"Button 12 indication\"]\n && (propertyId === 0x01 /* Multilevel */\n || propertyId === 0x02 /* Binary */\n || overridePropertyLabel) // custom property label\n ) {\n let ret: string = (Indicator as any)[indicatorId];\n // Append the overridden property label if it exists\n if (overridePropertyLabel) {\n ret += ` - ${overridePropertyLabel}`;\n }\n return ret;\n }\n // Default to the current behavior of <indicator name> - <property label>\n return `${defaultName} - ${overridePropertyLabel || prop.label}`;\n}\nexport function shouldExposeIndicatorValue(indicatorId: number, propertyId: number): boolean {\n // Many possible indicator values are not suitable to be exposed as CC values,\n // usually because they need to be set in groups.\n // Indicator properties that should be exposed are marked as such\n const prop = getIndicatorProperty(propertyId);\n if (prop && !prop.exposeAsValue) {\n return false;\n }\n // Unless we know better, expose anyways\n return true;\n}\n@API(CommandClasses.Indicator)\nexport class IndicatorCCAPI extends CCAPI {\n public supportsCommand(cmd: IndicatorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case IndicatorCommand.Get:\n case IndicatorCommand.Report:\n return this.isSinglecast();\n case IndicatorCommand.Set:\n return true; // This is mandatory\n case IndicatorCommand.SupportedGet:\n case IndicatorCommand.SupportedReport:\n return this.version >= 2 && this.isSinglecast();\n case IndicatorCommand.DescriptionGet:\n case IndicatorCommand.DescriptionReport:\n return this.version >= 4 && this.isSinglecast();\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: IndicatorCCAPI, { property, propertyKey }, value) {\n const valueId: ValueID = {\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property,\n propertyKey,\n };\n if (property === \"value\") {\n // V1 value\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.set(value);\n }\n else if (IndicatorCCValues.valueV2.is(valueId)) {\n const indicatorId = property as number;\n const propertyId = propertyKey as number;\n const expectedType = getIndicatorMetadata(indicatorId, propertyId).type as \"number\" | \"boolean\";\n // V2+ value\n if (typeof value !== expectedType) {\n throwWrongValueType(this.ccId, property, expectedType, typeof value);\n }\n return this.set([\n {\n indicatorId,\n propertyId,\n value: value as any,\n },\n ]);\n }\n else if (IndicatorCCValues.timeout.is(valueId)) {\n const indicatorId = property as number;\n if (typeof value !== \"string\") {\n throwWrongValueType(this.ccId, property, \"string\", typeof value);\n }\n return this.setTimeout(indicatorId, value);\n }\n else if (IndicatorCCValues.identify.is(valueId)) {\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"boolean\", typeof value);\n }\n return this.identify();\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: IndicatorCCAPI, { property }) {\n if (property === \"value\")\n return this.get();\n if (typeof property === \"number\") {\n return this.get(property);\n }\n throwUnsupportedProperty(this.ccId, property);\n };\n }\n @validateArgs_IndicatorCCAPI_get()\n public async get(indicatorId?: number): Promise<MaybeNotKnown<number | IndicatorObject[]>> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Get);\n const cc = new IndicatorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n });\n const response = await this.host.sendCommand<IndicatorCCReport>(cc, this.commandOptions);\n if (!response)\n return;\n if (response.values)\n return response.values;\n return response.indicator0Value!;\n }\n @validateArgs_IndicatorCCAPI_set()\n public async set(value: number | IndicatorObject[]): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Set);\n if (this.version === 1 && typeof value !== \"number\") {\n throw new ZWaveError(`Node ${this.endpoint\n .nodeId as number} only supports IndicatorCC V1 which requires a single value to be set`, ZWaveErrorCodes.Argument_Invalid);\n }\n else if (this.version >= 2\n && isArray(value)\n && value.length > MAX_INDICATOR_OBJECTS) {\n throw new ZWaveError(`Only ${MAX_INDICATOR_OBJECTS} indicator values can be set at a time!`, ZWaveErrorCodes.Argument_Invalid);\n }\n const cc = new IndicatorCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...(typeof value === \"number\" ? { value } : { values: value }),\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IndicatorCCAPI_sendReport()\n public async sendReport(options: IndicatorCCReportOptions): Promise<void> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Report);\n const cc = new IndicatorCCReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IndicatorCCAPI_getSupported()\n public async getSupported(indicatorId: number): Promise<{\n indicatorId?: number;\n supportedProperties: readonly number[];\n nextIndicatorId: number;\n } | undefined> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.SupportedGet);\n const cc = new IndicatorCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n });\n const response = await this.host.sendCommand<IndicatorCCSupportedReport>(cc, this.commandOptions);\n if (response) {\n return {\n // Include the actual indicator ID if 0x00 was requested\n ...(indicatorId === 0x00\n ? { indicatorId: response.indicatorId }\n : undefined),\n supportedProperties: response.supportedProperties,\n nextIndicatorId: response.nextIndicatorId,\n };\n }\n }\n @validateArgs_IndicatorCCAPI_reportSupported()\n public async reportSupported(indicatorId: number, supportedProperties: readonly number[], nextIndicatorId: number): Promise<void> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.SupportedReport);\n const cc = new IndicatorCCSupportedReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n supportedProperties,\n nextIndicatorId,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IndicatorCCAPI_reportDescription()\n public async reportDescription(indicatorId: number, description: string): Promise<void> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.DescriptionReport);\n const cc = new IndicatorCCDescriptionReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n description,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Instructs the node to identify itself. Available starting with V3 of this CC.\n */\n public async identify(): Promise<SupervisionResult | undefined> {\n if (this.version < 3) {\n throw new ZWaveError(`The identify command is only supported in Indicator CC version 3 and above`, ZWaveErrorCodes.CC_NotSupported);\n }\n return this.set([\n {\n indicatorId: 0x50,\n propertyId: 0x03,\n value: 0x08,\n },\n {\n indicatorId: 0x50,\n propertyId: 0x04,\n value: 0x03,\n },\n {\n indicatorId: 0x50,\n propertyId: 0x05,\n value: 0x06,\n },\n ]);\n }\n /**\n * Set a timeout for a given indicator ID after which the indicator will be turned off.\n * @param timeout The timeout in one of the supported forms:\n * \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- an object specifying the timeout parts. An empty object will be treated like `undefined`.\n * \t- `undefined` to disable the timeout.\n */\n @validateArgs_IndicatorCCAPI_setTimeout()\n public async setTimeout(indicatorId: number, timeout: IndicatorTimeout | string | undefined): Promise<SupervisionResult | undefined> {\n this.assertPhysicalEndpoint(this.endpoint);\n if (this.version < 3) {\n throw new ZWaveError(`The setTimeout command is only supported in Indicator CC version 3 and above`, ZWaveErrorCodes.CC_NotSupported);\n }\n if (typeof timeout === \"string\") {\n if (timeout === \"\") {\n timeout = undefined;\n }\n else {\n const parsed = parseIndicatorTimeoutString(timeout);\n if (!parsed) {\n throw new ZWaveError(`The timeout string \"${timeout}\" is not valid`, ZWaveErrorCodes.Argument_Invalid);\n }\n timeout = parsed;\n }\n }\n const supportedPropertyIDs = IndicatorCC.getSupportedPropertyIDsCached(this.host, this.endpoint, indicatorId);\n const objects: IndicatorObject[] = [];\n if (timeout) {\n const hours = timeout.hours ?? 0;\n const minutes = timeout.minutes ?? 0;\n const seconds = Math.floor(timeout.seconds ?? 0);\n const hundredths = Math.round(((timeout.seconds ?? 0) % 1) * 100);\n if (hours) {\n if (!supportedPropertyIDs?.includes(0x0a)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in hours`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x0a,\n value: hours,\n });\n }\n if (minutes) {\n if (!supportedPropertyIDs?.includes(0x06)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in minutes`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x06,\n value: minutes,\n });\n }\n if (seconds) {\n if (!supportedPropertyIDs?.includes(0x07)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in seconds`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x07,\n value: seconds,\n });\n }\n if (hundredths) {\n if (!supportedPropertyIDs?.includes(0x08)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in 1/100 seconds`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x08,\n value: hundredths,\n });\n }\n }\n if (!objects.length) {\n objects.push(...(supportedPropertyIDs ?? []).map((p) => ({\n indicatorId,\n propertyId: p,\n value: 0,\n })));\n }\n return this.set(objects);\n }\n /**\n * Returns the timeout after which the given indicator will be turned off.\n */\n @validateArgs_IndicatorCCAPI_getTimeout()\n public async getTimeout(indicatorId: number): Promise<MaybeNotKnown<IndicatorTimeout>> {\n const values = await this.get(indicatorId);\n if (!isArray(values))\n return;\n return indicatorObjectsToTimeout(values);\n }\n @validateArgs_IndicatorCCAPI_getDescription()\n public async getDescription(indicatorId: number): Promise<MaybeNotKnown<string>> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.DescriptionGet);\n const cc = new IndicatorCCDescriptionGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n });\n const response = await this.host.sendCommand<IndicatorCCDescriptionReport>(cc, this.commandOptions);\n return response?.description;\n }\n}\n@commandClass(CommandClasses.Indicator)\n@implementedVersion(4)\n@ccValues(IndicatorCCValues)\nexport class IndicatorCC extends CommandClass {\n declare ccCommand: IndicatorCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Indicator, ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n if (api.version > 1) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"scanning supported indicator IDs...\",\n direction: \"outbound\",\n });\n // Query ID 0 to get the first supported ID\n let curId = 0x00;\n const supportedIndicatorIds: number[] = [];\n do {\n const supportedResponse = await api.getSupported(curId);\n if (!supportedResponse) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Time out while scanning supported indicator IDs, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n if (supportedResponse.supportedProperties.length > 0) {\n supportedIndicatorIds.push(supportedResponse.indicatorId ?? curId);\n }\n curId = supportedResponse.nextIndicatorId;\n } while (curId !== 0x00);\n // The IDs are not stored by the report CCs so store them here once we have all of them\n this.setValue(ctx, IndicatorCCValues.supportedIndicatorIds, supportedIndicatorIds);\n const logMessage = `supported indicator IDs: ${supportedIndicatorIds.join(\", \")}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n if (api.version >= 4) {\n const manufacturerDefinedIndicatorIds = supportedIndicatorIds\n .filter((id) => isManufacturerDefinedIndicator(id));\n if (manufacturerDefinedIndicatorIds.length > 0) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"retrieving description for manufacturer-defined indicator IDs...\",\n direction: \"outbound\",\n });\n for (const [i, id] of manufacturerDefinedIndicatorIds\n .entries()) {\n await api.getDescription(id);\n node.reportInterviewProgress(i + 1, manufacturerDefinedIndicatorIds.length);\n }\n }\n }\n }\n // Query current values\n await this.refreshValues(ctx, {\n onProgress: (completed, total) => node.reportInterviewProgress(completed, total),\n });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Indicator, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n if (api.version === 1) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting current indicator value...\",\n direction: \"outbound\",\n });\n await api.get();\n }\n else {\n const supportedIndicatorIds: number[] = this.getValue(ctx, IndicatorCCValues.supportedIndicatorIds) ?? [];\n for (const [i, indicatorId] of supportedIndicatorIds.entries()) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `requesting current indicator value (id = ${num2hex(indicatorId)})...`,\n direction: \"outbound\",\n });\n await api.get(indicatorId);\n options?.onProgress?.(i + 1, supportedIndicatorIds.length);\n }\n }\n }\n public translatePropertyKey(ctx: GetValueDB, property: string | number, propertyKey: string | number): string | undefined {\n if (property === \"value\") {\n // CC version 1 only has a single value that doesn't need to be translated\n return undefined;\n }\n else if (typeof property === \"number\"\n && typeof propertyKey === \"number\") {\n // The indicator property is our property key\n const prop = getIndicatorProperty(propertyKey);\n if (prop)\n return prop.label;\n }\n else if (typeof property === \"number\"\n && propertyKey === \"timeout\") {\n return \"Timeout\";\n }\n return super.translatePropertyKey(ctx, property, propertyKey);\n }\n public translateProperty(ctx: GetValueDB, property: string | number, propertyKey?: string | number): string {\n if (typeof property === \"number\") {\n if (typeof propertyKey === \"number\" || propertyKey === \"timeout\") {\n // The indicator corresponds to our property\n if (property in Indicator)\n return Indicator[property];\n }\n }\n return super.translateProperty(ctx, property, propertyKey);\n }\n protected supportsV2Indicators(ctx: GetValueDB): boolean {\n // First test if there are any indicator ids defined\n const supportedIndicatorIds = this.getValue<number[]>(ctx, IndicatorCCValues.supportedIndicatorIds);\n if (!supportedIndicatorIds?.length)\n return false;\n // Then test if there are any property ids defined\n return supportedIndicatorIds.some((indicatorId) => !!this.getValue<number[]>(ctx, IndicatorCCValues.supportedPropertyIDs(indicatorId))?.length);\n }\n protected getManufacturerDefinedIndicatorLabel(ctx: GetValueDB, indicatorId: number): string | undefined {\n if (isManufacturerDefinedIndicator(indicatorId)) {\n return this.getValue(ctx, IndicatorCCValues.indicatorDescription(indicatorId));\n }\n }\n public static getSupportedPropertyIDsCached(ctx: GetValueDB, endpoint: EndpointId, indicatorId: number): MaybeNotKnown<number[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(IndicatorCCValues.supportedPropertyIDs(indicatorId).endpoint(endpoint.index));\n }\n}\n// @publicAPI\nexport interface IndicatorObject {\n indicatorId: number;\n propertyId: number;\n value: number | boolean;\n}\n// @publicAPI\nexport type IndicatorCCSetOptions = {\n value: number;\n} | {\n values: IndicatorObject[];\n};\n@CCCommand(IndicatorCommand.Set)\n@useSupervision()\nexport class IndicatorCCSet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCSetOptions>) {\n super(options);\n if (\"value\" in options) {\n this.indicator0Value = options.value;\n }\n else {\n this.values = options.values;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCSet {\n validatePayload(raw.payload.length >= 1);\n const objCount = raw.payload.length >= 2\n ? raw.payload[1] & 0b11111\n : 0;\n if (objCount === 0) {\n const indicator0Value = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n value: indicator0Value,\n });\n }\n validatePayload(raw.payload.length >= 2 + 3 * objCount);\n const values: IndicatorObject[] = [];\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n const value: IndicatorObject = {\n indicatorId: raw.payload[offset],\n propertyId: raw.payload[offset + 1],\n value: raw.payload[offset + 2],\n };\n values.push(value);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n values,\n });\n }\n public indicator0Value: number | undefined;\n public values: IndicatorObject[] | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.values != undefined) {\n // V2+\n this.payload = Bytes.alloc(2 + 3 * this.values.length, 0);\n // Byte 0 is the legacy value\n const objCount = this.values.length & MAX_INDICATOR_OBJECTS;\n this.payload[1] = objCount;\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n this.payload[offset] = this.values[i].indicatorId;\n this.payload[offset + 1] = this.values[i].propertyId;\n const value = this.values[i].value;\n this.payload[offset + 2] = value === true\n ? 0xff\n : value === false\n ? 0x00\n : value;\n }\n }\n else {\n // V1\n this.payload = Bytes.from([this.indicator0Value ?? 0]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.indicator0Value != undefined) {\n message[\"indicator 0 value\"] = this.indicator0Value;\n }\n if (this.values != undefined) {\n message.values = this.values\n .map((v) => `\n\u00B7 indicatorId: ${v.indicatorId}\n propertyId: ${v.propertyId}\n value: ${v.value}`)\n .join(\"\");\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport type IndicatorCCReportOptions = {\n value: number;\n} | {\n values: IndicatorObject[];\n};\n@CCCommand(IndicatorCommand.Report)\nexport class IndicatorCCReport extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCReportOptions>) {\n super(options);\n if (\"value\" in options) {\n this.indicator0Value = options.value;\n }\n else if (\"values\" in options) {\n if (options.values.length > MAX_INDICATOR_OBJECTS) {\n throw new ZWaveError(`Only ${MAX_INDICATOR_OBJECTS} indicator values can be set at a time!`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.values = options.values;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCReport {\n validatePayload(raw.payload.length >= 1);\n const objCount = raw.payload.length >= 2\n ? raw.payload[1] & 0b11111\n : 0;\n if (objCount === 0) {\n const indicator0Value = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n value: indicator0Value,\n });\n }\n validatePayload(raw.payload.length >= 2 + 3 * objCount);\n const values: IndicatorObject[] = [];\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n const value: IndicatorObject = {\n indicatorId: raw.payload[offset],\n propertyId: raw.payload[offset + 1],\n value: raw.payload[offset + 2],\n };\n values.push(value);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n values,\n });\n // TODO: Think if we want this:\n // // If not all Property IDs are included in the command for the actual Indicator ID,\n // // a controlling node MUST assume non-specified Property IDs values to be 0x00.\n // const indicatorId = this.values[0].indicatorId;\n // const supportedIndicatorProperties =\n // \tvalueDB.getValue<number[]>(\n // \t\tgetSupportedPropertyIDsValueID(\n // \t\t\tthis.endpointIndex,\n // \t\t\tindicatorId,\n // \t\t),\n // \t) ?? [];\n // // Find out which ones are missing\n // const missingIndicatorProperties = supportedIndicatorProperties.filter(\n // \tprop =>\n // \t\t!this.values!.find(({ propertyId }) => prop === propertyId),\n // );\n // // And assume they are 0 (false)\n // for (const missing of missingIndicatorProperties) {\n // \tthis.setIndicatorValue({\n // \t\tindicatorId,\n // \t\tpropertyId: missing,\n // \t\tvalue: 0,\n // \t});\n // }\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.indicator0Value != undefined) {\n if (!this.supportsV2Indicators(ctx)) {\n // Publish the value\n const valueV1 = IndicatorCCValues.valueV1;\n this.setMetadata(ctx, valueV1);\n this.setValue(ctx, valueV1, this.indicator0Value);\n }\n else {\n if (this.isSinglecast()) {\n // Don't!\n ctx.logNode(this.nodeId, {\n message: `ignoring V1 indicator report because the node supports V2 indicators`,\n direction: \"none\",\n endpoint: this.endpointIndex,\n });\n }\n }\n }\n else if (this.values) {\n // Store the simple values first\n for (const value of this.values) {\n this.setIndicatorValue(ctx, value);\n }\n // Then group values into the convenience properties\n const groupedValues = groupByIndicatorId(this.values);\n for (const [indicatorId, values] of groupedValues) {\n // Some devices report all properties it supports in every report,\n // even if it does not support all properties for the given indicator ID.\n // To avoid confusion, we need to filter out the unsupported properties\n const supportedPropertyIDs = this.getValue<number[]>(ctx, IndicatorCCValues.supportedPropertyIDs(indicatorId)) ?? [];\n const filteredValues = values.filter((v) => supportedPropertyIDs.includes(v.propertyId));\n const overrideIndicatorLabel = this\n .getManufacturerDefinedIndicatorLabel(ctx, indicatorId);\n // ... timeout\n const timeout = indicatorObjectsToTimeout(filteredValues);\n if (timeout) {\n let timeoutString = \"\";\n if (timeout?.hours)\n timeoutString += `${timeout.hours}h`;\n if (timeout?.minutes) {\n timeoutString += `${timeout.minutes}m`;\n }\n if (timeout?.seconds) {\n timeoutString += `${timeout.seconds}s`;\n }\n const timeoutValue = IndicatorCCValues.timeout(indicatorId);\n const metadata: ValueMetadata = {\n ...timeoutValue.meta,\n label: getIndicatorLabel(indicatorId, 0x06, // This is actually ignored, but pass a valid ID for clarity\n overrideIndicatorLabel, \"Timeout\"),\n };\n this.setMetadata(ctx, timeoutValue, metadata);\n this.setValue(ctx, timeoutValue, timeoutString);\n }\n }\n }\n return true;\n }\n public readonly indicator0Value: number | undefined;\n public readonly values: IndicatorObject[] | undefined;\n private setIndicatorValue(ctx: GetValueDB, value: IndicatorObject): void {\n // Manufacturer-defined indicators may need a custom label\n const overrideIndicatorLabel = this\n .getManufacturerDefinedIndicatorLabel(ctx, value.indicatorId);\n const metadata = getIndicatorMetadata(value.indicatorId, value.propertyId, overrideIndicatorLabel);\n // Some values need to be converted\n if (metadata.type === \"boolean\") {\n value.value = !!value.value;\n }\n // Only expose the value if it should be user-facing\n if (value.indicatorId === Indicator[\"Node Identify\"]) {\n return;\n }\n const prop = getIndicatorProperty(value.propertyId);\n if (!prop?.exposeAsValue)\n return;\n // And only if it is actually supported and not just reported by accident\n const supportedPropertyIDs = this.getValue<number[]>(ctx, IndicatorCCValues.supportedPropertyIDs(value.indicatorId)) ?? [];\n if (!supportedPropertyIDs.includes(value.propertyId))\n return;\n // Publish the value\n const valueV2 = IndicatorCCValues.valueV2(value.indicatorId, value.propertyId);\n this.setMetadata(ctx, valueV2, metadata);\n this.setValue(ctx, valueV2, value.value);\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.values != undefined) {\n // V2+\n this.payload = Bytes.alloc(2 + 3 * this.values.length, 0);\n // Byte 0 is the legacy value\n const objCount = this.values.length & MAX_INDICATOR_OBJECTS;\n this.payload[1] = objCount;\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n this.payload[offset] = this.values[i].indicatorId;\n this.payload[offset + 1] = this.values[i].propertyId;\n const value = this.values[i].value;\n this.payload[offset + 2] = value === true\n ? 0xff\n : value === false\n ? 0x00\n : value;\n }\n }\n else {\n // V1\n this.payload = Bytes.from([this.indicator0Value ?? 0]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.indicator0Value != undefined) {\n message[\"indicator 0 value\"] = this.indicator0Value;\n }\n if (this.values != undefined) {\n message.values = this.values\n .map((v) => `\n\u00B7 indicatorId: ${v.indicatorId}\n propertyId: ${v.propertyId}\n value: ${v.value}`)\n .join(\"\");\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCGetOptions {\n indicatorId?: number;\n}\n@CCCommand(IndicatorCommand.Get)\n@expectedCCResponse(IndicatorCCReport)\nexport class IndicatorCCGet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCGetOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCGet {\n let indicatorId: number | undefined;\n if (raw.payload.length > 0) {\n indicatorId = raw.payload[0];\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n });\n }\n public indicatorId: number | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.indicatorId != undefined) {\n this.payload = Bytes.from([this.indicatorId]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n indicator: getIndicatorName(this.indicatorId),\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCSupportedReportOptions {\n indicatorId: number;\n nextIndicatorId: number;\n supportedProperties: readonly number[];\n}\n@CCCommand(IndicatorCommand.SupportedReport)\nexport class IndicatorCCSupportedReport extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCSupportedReportOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n this.nextIndicatorId = options.nextIndicatorId;\n this.supportedProperties = options.supportedProperties;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCSupportedReport {\n validatePayload(raw.payload.length >= 3);\n const indicatorId = raw.payload[0];\n const nextIndicatorId = raw.payload[1];\n const bitMaskLength = raw.payload[2] & 0b11111;\n let supportedProperties: readonly number[];\n if (bitMaskLength === 0) {\n supportedProperties = [];\n }\n else {\n validatePayload(raw.payload.length >= 3 + bitMaskLength);\n // The bit mask starts at 0, but bit 0 is not used\n supportedProperties = parseBitMask(raw.payload.subarray(3, 3 + bitMaskLength), 0).filter((v) => v !== 0);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n nextIndicatorId,\n supportedProperties,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.indicatorId !== 0x00) {\n // Remember which property IDs are supported\n this.setValue(ctx, IndicatorCCValues.supportedPropertyIDs(this.indicatorId), this.supportedProperties);\n }\n return true;\n }\n public readonly indicatorId: number;\n public readonly nextIndicatorId: number;\n public readonly supportedProperties: readonly number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const bitmask = this.supportedProperties.length > 0\n ? encodeBitMask(this.supportedProperties, undefined, 0)\n : new Bytes();\n this.payload = Bytes.concat([\n [\n this.indicatorId,\n this.nextIndicatorId,\n bitmask.length,\n ],\n bitmask,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n indicator: getIndicatorName(this.indicatorId),\n \"supported properties\": this.supportedProperties\n .map((id) => getIndicatorProperty(id)?.label\n ?? `Unknown (${num2hex(id)})`)\n .join(\", \"),\n \"next indicator\": getIndicatorName(this.nextIndicatorId),\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCSupportedGetOptions {\n indicatorId: number;\n}\nfunction testResponseForIndicatorSupportedGet(sent: IndicatorCCSupportedGet, received: IndicatorCCSupportedReport) {\n return sent.indicatorId === 0 || received.indicatorId === sent.indicatorId;\n}\n@CCCommand(IndicatorCommand.SupportedGet)\n@expectedCCResponse(IndicatorCCSupportedReport, testResponseForIndicatorSupportedGet)\nexport class IndicatorCCSupportedGet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCSupportedGetOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCSupportedGet {\n validatePayload(raw.payload.length >= 1);\n const indicatorId = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n });\n }\n public indicatorId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.indicatorId]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n indicator: getIndicatorName(this.indicatorId),\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCDescriptionReportOptions {\n indicatorId: number;\n description: string;\n}\n@CCCommand(IndicatorCommand.DescriptionReport)\nexport class IndicatorCCDescriptionReport extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCDescriptionReportOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n this.description = options.description;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCDescriptionReport {\n validatePayload(raw.payload.length >= 2);\n const indicatorId = raw.payload[0];\n const descrptionLength = raw.payload[1];\n validatePayload(raw.payload.length >= 2 + descrptionLength);\n const description: string = raw.payload\n .subarray(2, 2 + descrptionLength)\n .toString(\"utf8\");\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n description,\n });\n }\n public indicatorId: number;\n public description: string;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.description) {\n this.setValue(ctx, IndicatorCCValues.indicatorDescription(this.indicatorId), this.description);\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const description = Bytes.from(this.description, \"utf8\");\n this.payload = Bytes.concat([\n [this.indicatorId, description.length],\n description,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"indicator ID\": this.indicatorId,\n description: this.description || \"(none)\",\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCDescriptionGetOptions {\n indicatorId: number;\n}\nfunction testResponseForIndicatorDescriptionGet(sent: IndicatorCCDescriptionGet, received: IndicatorCCDescriptionReport) {\n return received.indicatorId === sent.indicatorId;\n}\n@CCCommand(IndicatorCommand.DescriptionGet)\n@expectedCCResponse(IndicatorCCDescriptionReport, testResponseForIndicatorDescriptionGet)\nexport class IndicatorCCDescriptionGet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCDescriptionGetOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCDescriptionGet {\n validatePayload(raw.payload.length >= 1);\n const indicatorId = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n });\n }\n public indicatorId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.indicatorId]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"indicator ID\": this.indicatorId,\n },\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./IndicatorCC._validateArgs.js\";\nconst { validateArgs_IndicatorCCAPI_get, validateArgs_IndicatorCCAPI_set, validateArgs_IndicatorCCAPI_sendReport, validateArgs_IndicatorCCAPI_getSupported, validateArgs_IndicatorCCAPI_reportSupported, validateArgs_IndicatorCCAPI_reportDescription, validateArgs_IndicatorCCAPI_setTimeout, validateArgs_IndicatorCCAPI_getTimeout, validateArgs_IndicatorCCAPI_getDescription } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, Indicator, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, type ValueID, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, getIndicatorProperty, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, num2hex } from \"@zwave-js/shared\";\nimport { clamp, roundTo } from \"alcalzone-shared/math\";\nimport { isArray } from \"alcalzone-shared/typeguards\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { IndicatorCommand, type IndicatorTimeout } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nfunction isManufacturerDefinedIndicator(indicatorId: number): boolean {\n return indicatorId >= 0x80 && indicatorId <= 0x9f;\n}\nconst timeoutStringRegex = /^(?:(?<hoursStr>\\d+)h)?(?:(?<minutesStr>\\d+)m)?(?:(?<secondsStr>\\d+(?:\\.\\d+)?)s)?$/i;\nconst MAX_INDICATOR_OBJECTS = 31;\nfunction parseIndicatorTimeoutString(text: string): IndicatorTimeout | undefined {\n if (!text.length)\n return undefined;\n // Try to parse the numeric parts from a timeout\n const match = timeoutStringRegex.exec(text);\n if (!match)\n return undefined;\n const { hoursStr, minutesStr, secondsStr } = match.groups!;\n if (!hoursStr && !minutesStr && !secondsStr)\n return undefined;\n const ret: IndicatorTimeout = {};\n if (hoursStr) {\n ret.hours = clamp(parseInt(hoursStr, 10), 0, 255);\n }\n if (minutesStr) {\n ret.minutes = clamp(parseInt(minutesStr, 10), 0, 255);\n }\n if (secondsStr) {\n ret.seconds = clamp(roundTo(parseFloat(secondsStr), 2), 0, 59.99);\n }\n return ret;\n}\nfunction groupByIndicatorId(values: IndicatorObject[]): Map<number, IndicatorObject[]> {\n const ret = new Map();\n for (const value of values) {\n if (!ret.has(value.indicatorId)) {\n ret.set(value.indicatorId, []);\n }\n ret.get(value.indicatorId)!.push(value);\n }\n return ret;\n}\nfunction indicatorObjectsToTimeout(values: IndicatorObject[]): IndicatorTimeout | undefined {\n const timeoutValues = values.filter((v) => [0x0a, 0x06, 0x07, 0x08].includes(v.propertyId));\n if (!timeoutValues.length)\n return undefined;\n const hours = (timeoutValues.find((v) => v.propertyId === 0x0a)?.value\n ?? 0) as number;\n const minutes = (timeoutValues.find((v) => v.propertyId === 0x06)?.value\n ?? 0) as number;\n const seconds = clamp((timeoutValues.find((v) => v.propertyId === 0x07)\n ?.value as number) ?? 0, 0, 59)\n + clamp((timeoutValues.find((v) => v.propertyId === 0x08)\n ?.value as number) ?? 0, 0, 99)\n / 100;\n return {\n hours,\n minutes,\n seconds,\n };\n}\nimport { IndicatorCCValues } from \"./_CCValues.generated.js\";\nexport { IndicatorCCValues };\n/**\n * Looks up the configured metadata for the given indicator and property\n */\nfunction getIndicatorMetadata(indicatorId: Indicator, propertyId: number, overrideIndicatorLabel?: string): ValueMetadata {\n const label = getIndicatorLabel(indicatorId, propertyId, overrideIndicatorLabel);\n const prop = getIndicatorProperty(propertyId);\n const baseMetadata = IndicatorCCValues.valueV2(indicatorId, propertyId).meta;\n if (!prop) {\n return {\n ...baseMetadata,\n ...ValueMetadata.UInt8,\n label,\n };\n }\n else {\n if (prop.type === \"boolean\") {\n return {\n ...baseMetadata,\n ...ValueMetadata.Boolean,\n label,\n description: prop.description,\n readable: !prop.readonly,\n };\n }\n else {\n // UInt8\n return {\n ...baseMetadata,\n ...ValueMetadata.UInt8,\n label,\n description: prop.description,\n min: prop.min,\n max: prop.max,\n readable: !prop.readonly,\n };\n }\n }\n}\nfunction getIndicatorName(indicatorId: number | undefined): string {\n if (indicatorId) {\n return getEnumMemberName(Indicator, indicatorId);\n }\n else {\n return \"Default\";\n }\n}\n/** Returns a user-friendly label for an indicator */\nfunction getIndicatorLabel(indicatorId: number, propertyId: number, overrideIndicatorLabel?: string, overridePropertyLabel?: string): string {\n const defaultName = overrideIndicatorLabel || getIndicatorName(indicatorId);\n // Without a defined property, we cannot suggest a better label\n const prop = getIndicatorProperty(propertyId);\n if (!prop)\n return defaultName;\n // For indicators that correspond to an LCD or buttons,\n // the indicator enum names are enough\n if (indicatorId >= Indicator[\"LCD backlight\"]\n && indicatorId <= Indicator[\"Button 12 indication\"]\n && (propertyId === 0x01 /* Multilevel */\n || propertyId === 0x02 /* Binary */\n || overridePropertyLabel) // custom property label\n ) {\n let ret: string = (Indicator as any)[indicatorId];\n // Append the overridden property label if it exists\n if (overridePropertyLabel) {\n ret += ` - ${overridePropertyLabel}`;\n }\n return ret;\n }\n // Default to the current behavior of <indicator name> - <property label>\n return `${defaultName} - ${overridePropertyLabel || prop.label}`;\n}\nexport function shouldExposeIndicatorValue(indicatorId: number, propertyId: number): boolean {\n // Many possible indicator values are not suitable to be exposed as CC values,\n // usually because they need to be set in groups.\n // Indicator properties that should be exposed are marked as such\n const prop = getIndicatorProperty(propertyId);\n if (prop && !prop.exposeAsValue) {\n return false;\n }\n // Unless we know better, expose anyways\n return true;\n}\n@API(CommandClasses.Indicator)\nexport class IndicatorCCAPI extends CCAPI {\n public supportsCommand(cmd: IndicatorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case IndicatorCommand.Get:\n case IndicatorCommand.Report:\n return this.isSinglecast();\n case IndicatorCommand.Set:\n return true; // This is mandatory\n case IndicatorCommand.SupportedGet:\n case IndicatorCommand.SupportedReport:\n return this.version >= 2 && this.isSinglecast();\n case IndicatorCommand.DescriptionGet:\n case IndicatorCommand.DescriptionReport:\n return this.version >= 4 && this.isSinglecast();\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: IndicatorCCAPI, { property, propertyKey }, value) {\n const valueId: ValueID = {\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property,\n propertyKey,\n };\n if (property === \"value\") {\n // V1 value\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.set(value);\n }\n else if (IndicatorCCValues.valueV2.is(valueId)) {\n const indicatorId = property as number;\n const propertyId = propertyKey as number;\n const expectedType = getIndicatorMetadata(indicatorId, propertyId).type as \"number\" | \"boolean\";\n // V2+ value\n if (typeof value !== expectedType) {\n throwWrongValueType(this.ccId, property, expectedType, typeof value);\n }\n return this.set([\n {\n indicatorId,\n propertyId,\n value: value as any,\n },\n ]);\n }\n else if (IndicatorCCValues.timeout.is(valueId)) {\n const indicatorId = property as number;\n if (typeof value !== \"string\") {\n throwWrongValueType(this.ccId, property, \"string\", typeof value);\n }\n return this.setTimeout(indicatorId, value);\n }\n else if (IndicatorCCValues.identify.is(valueId)) {\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"boolean\", typeof value);\n }\n return this.identify();\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: IndicatorCCAPI, { property }) {\n if (property === \"value\")\n return this.get();\n if (typeof property === \"number\") {\n return this.get(property);\n }\n throwUnsupportedProperty(this.ccId, property);\n };\n }\n @validateArgs_IndicatorCCAPI_get()\n public async get(indicatorId?: number): Promise<MaybeNotKnown<number | IndicatorObject[]>> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Get);\n const cc = new IndicatorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n });\n const response = await this.host.sendCommand<IndicatorCCReport>(cc, this.commandOptions);\n if (!response)\n return;\n if (response.values)\n return response.values;\n return response.indicator0Value!;\n }\n @validateArgs_IndicatorCCAPI_set()\n public async set(value: number | IndicatorObject[]): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Set);\n if (this.version === 1 && typeof value !== \"number\") {\n throw new ZWaveError(`Node ${this.endpoint\n .nodeId as number} only supports IndicatorCC V1 which requires a single value to be set`, ZWaveErrorCodes.Argument_Invalid);\n }\n else if (this.version >= 2\n && isArray(value)\n && value.length > MAX_INDICATOR_OBJECTS) {\n throw new ZWaveError(`Only ${MAX_INDICATOR_OBJECTS} indicator values can be set at a time!`, ZWaveErrorCodes.Argument_Invalid);\n }\n const cc = new IndicatorCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...(typeof value === \"number\" ? { value } : { values: value }),\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IndicatorCCAPI_sendReport()\n public async sendReport(options: IndicatorCCReportOptions): Promise<void> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Report);\n const cc = new IndicatorCCReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IndicatorCCAPI_getSupported()\n public async getSupported(indicatorId: number): Promise<{\n indicatorId?: number;\n supportedProperties: readonly number[];\n nextIndicatorId: number;\n } | undefined> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.SupportedGet);\n const cc = new IndicatorCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n });\n const response = await this.host.sendCommand<IndicatorCCSupportedReport>(cc, this.commandOptions);\n if (response) {\n return {\n // Include the actual indicator ID if 0x00 was requested\n ...(indicatorId === 0x00\n ? { indicatorId: response.indicatorId }\n : undefined),\n supportedProperties: response.supportedProperties,\n nextIndicatorId: response.nextIndicatorId,\n };\n }\n }\n @validateArgs_IndicatorCCAPI_reportSupported()\n public async reportSupported(indicatorId: number, supportedProperties: readonly number[], nextIndicatorId: number): Promise<void> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.SupportedReport);\n const cc = new IndicatorCCSupportedReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n supportedProperties,\n nextIndicatorId,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IndicatorCCAPI_reportDescription()\n public async reportDescription(indicatorId: number, description: string): Promise<void> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.DescriptionReport);\n const cc = new IndicatorCCDescriptionReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n description,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Instructs the node to identify itself. Available starting with V3 of this CC.\n */\n public async identify(): Promise<SupervisionResult | undefined> {\n if (this.version < 3) {\n throw new ZWaveError(`The identify command is only supported in Indicator CC version 3 and above`, ZWaveErrorCodes.CC_NotSupported);\n }\n return this.set([\n {\n indicatorId: 0x50,\n propertyId: 0x03,\n value: 0x08,\n },\n {\n indicatorId: 0x50,\n propertyId: 0x04,\n value: 0x03,\n },\n {\n indicatorId: 0x50,\n propertyId: 0x05,\n value: 0x06,\n },\n ]);\n }\n /**\n * Set a timeout for a given indicator ID after which the indicator will be turned off.\n * @param timeout The timeout in one of the supported forms:\n * \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- an object specifying the timeout parts. An empty object will be treated like `undefined`.\n * \t- `undefined` to disable the timeout.\n */\n @validateArgs_IndicatorCCAPI_setTimeout()\n public async setTimeout(indicatorId: number, timeout: IndicatorTimeout | string | undefined): Promise<SupervisionResult | undefined> {\n this.assertPhysicalEndpoint(this.endpoint);\n if (this.version < 3) {\n throw new ZWaveError(`The setTimeout command is only supported in Indicator CC version 3 and above`, ZWaveErrorCodes.CC_NotSupported);\n }\n if (typeof timeout === \"string\") {\n if (timeout === \"\") {\n timeout = undefined;\n }\n else {\n const parsed = parseIndicatorTimeoutString(timeout);\n if (!parsed) {\n throw new ZWaveError(`The timeout string \"${timeout}\" is not valid`, ZWaveErrorCodes.Argument_Invalid);\n }\n timeout = parsed;\n }\n }\n const supportedPropertyIDs = IndicatorCC.getSupportedPropertyIDsCached(this.host, this.endpoint, indicatorId);\n const objects: IndicatorObject[] = [];\n if (timeout) {\n const hours = timeout.hours ?? 0;\n const minutes = timeout.minutes ?? 0;\n const seconds = Math.floor(timeout.seconds ?? 0);\n const hundredths = Math.round(((timeout.seconds ?? 0) % 1) * 100);\n if (hours) {\n if (!supportedPropertyIDs?.includes(0x0a)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in hours`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x0a,\n value: hours,\n });\n }\n if (minutes) {\n if (!supportedPropertyIDs?.includes(0x06)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in minutes`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x06,\n value: minutes,\n });\n }\n if (seconds) {\n if (!supportedPropertyIDs?.includes(0x07)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in seconds`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x07,\n value: seconds,\n });\n }\n if (hundredths) {\n if (!supportedPropertyIDs?.includes(0x08)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in 1/100 seconds`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x08,\n value: hundredths,\n });\n }\n }\n if (!objects.length) {\n objects.push(...(supportedPropertyIDs ?? []).map((p) => ({\n indicatorId,\n propertyId: p,\n value: 0,\n })));\n }\n return this.set(objects);\n }\n /**\n * Returns the timeout after which the given indicator will be turned off.\n */\n @validateArgs_IndicatorCCAPI_getTimeout()\n public async getTimeout(indicatorId: number): Promise<MaybeNotKnown<IndicatorTimeout>> {\n const values = await this.get(indicatorId);\n if (!isArray(values))\n return;\n return indicatorObjectsToTimeout(values);\n }\n @validateArgs_IndicatorCCAPI_getDescription()\n public async getDescription(indicatorId: number): Promise<MaybeNotKnown<string>> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.DescriptionGet);\n const cc = new IndicatorCCDescriptionGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n });\n const response = await this.host.sendCommand<IndicatorCCDescriptionReport>(cc, this.commandOptions);\n return response?.description;\n }\n}\n@commandClass(CommandClasses.Indicator)\n@implementedVersion(4)\n@ccValues(IndicatorCCValues)\nexport class IndicatorCC extends CommandClass {\n declare ccCommand: IndicatorCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Indicator, ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n if (api.version > 1) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"scanning supported indicator IDs...\",\n direction: \"outbound\",\n });\n // Query ID 0 to get the first supported ID\n let curId = 0x00;\n const supportedIndicatorIds: number[] = [];\n do {\n const supportedResponse = await api.getSupported(curId);\n if (!supportedResponse) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Time out while scanning supported indicator IDs, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n if (supportedResponse.supportedProperties.length > 0) {\n supportedIndicatorIds.push(supportedResponse.indicatorId ?? curId);\n }\n curId = supportedResponse.nextIndicatorId;\n } while (curId !== 0x00);\n // The IDs are not stored by the report CCs so store them here once we have all of them\n this.setValue(ctx, IndicatorCCValues.supportedIndicatorIds, supportedIndicatorIds);\n const logMessage = `supported indicator IDs: ${supportedIndicatorIds.join(\", \")}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n if (api.version >= 4) {\n const manufacturerDefinedIndicatorIds = supportedIndicatorIds\n .filter((id) => isManufacturerDefinedIndicator(id));\n if (manufacturerDefinedIndicatorIds.length > 0) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"retrieving description for manufacturer-defined indicator IDs...\",\n direction: \"outbound\",\n });\n for (const [i, id] of manufacturerDefinedIndicatorIds\n .entries()) {\n await api.getDescription(id);\n node.reportInterviewProgress(i + 1, manufacturerDefinedIndicatorIds.length);\n }\n }\n }\n }\n // Query current values\n await this.refreshValues(ctx, {\n tag: \"interview\",\n onProgress: (completed, total) => node.reportInterviewProgress(completed, total),\n });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Indicator, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n if (api.version === 1) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting current indicator value...\",\n direction: \"outbound\",\n });\n await api.get();\n }\n else {\n const supportedIndicatorIds: number[] = this.getValue(ctx, IndicatorCCValues.supportedIndicatorIds) ?? [];\n for (const [i, indicatorId] of supportedIndicatorIds.entries()) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `requesting current indicator value (id = ${num2hex(indicatorId)})...`,\n direction: \"outbound\",\n });\n await api.get(indicatorId);\n options?.onProgress?.(i + 1, supportedIndicatorIds.length);\n }\n }\n }\n public translatePropertyKey(ctx: GetValueDB, property: string | number, propertyKey: string | number): string | undefined {\n if (property === \"value\") {\n // CC version 1 only has a single value that doesn't need to be translated\n return undefined;\n }\n else if (typeof property === \"number\"\n && typeof propertyKey === \"number\") {\n // The indicator property is our property key\n const prop = getIndicatorProperty(propertyKey);\n if (prop)\n return prop.label;\n }\n else if (typeof property === \"number\"\n && propertyKey === \"timeout\") {\n return \"Timeout\";\n }\n return super.translatePropertyKey(ctx, property, propertyKey);\n }\n public translateProperty(ctx: GetValueDB, property: string | number, propertyKey?: string | number): string {\n if (typeof property === \"number\") {\n if (typeof propertyKey === \"number\" || propertyKey === \"timeout\") {\n // The indicator corresponds to our property\n if (property in Indicator)\n return Indicator[property];\n }\n }\n return super.translateProperty(ctx, property, propertyKey);\n }\n protected supportsV2Indicators(ctx: GetValueDB): boolean {\n // First test if there are any indicator ids defined\n const supportedIndicatorIds = this.getValue<number[]>(ctx, IndicatorCCValues.supportedIndicatorIds);\n if (!supportedIndicatorIds?.length)\n return false;\n // Then test if there are any property ids defined\n return supportedIndicatorIds.some((indicatorId) => !!this.getValue<number[]>(ctx, IndicatorCCValues.supportedPropertyIDs(indicatorId))?.length);\n }\n protected getManufacturerDefinedIndicatorLabel(ctx: GetValueDB, indicatorId: number): string | undefined {\n if (isManufacturerDefinedIndicator(indicatorId)) {\n return this.getValue(ctx, IndicatorCCValues.indicatorDescription(indicatorId));\n }\n }\n public static getSupportedPropertyIDsCached(ctx: GetValueDB, endpoint: EndpointId, indicatorId: number): MaybeNotKnown<number[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(IndicatorCCValues.supportedPropertyIDs(indicatorId).endpoint(endpoint.index));\n }\n}\n// @publicAPI\nexport interface IndicatorObject {\n indicatorId: number;\n propertyId: number;\n value: number | boolean;\n}\n// @publicAPI\nexport type IndicatorCCSetOptions = {\n value: number;\n} | {\n values: IndicatorObject[];\n};\n@CCCommand(IndicatorCommand.Set)\n@useSupervision()\nexport class IndicatorCCSet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCSetOptions>) {\n super(options);\n if (\"value\" in options) {\n this.indicator0Value = options.value;\n }\n else {\n this.values = options.values;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCSet {\n validatePayload(raw.payload.length >= 1);\n const objCount = raw.payload.length >= 2\n ? raw.payload[1] & 0b11111\n : 0;\n if (objCount === 0) {\n const indicator0Value = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n value: indicator0Value,\n });\n }\n validatePayload(raw.payload.length >= 2 + 3 * objCount);\n const values: IndicatorObject[] = [];\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n const value: IndicatorObject = {\n indicatorId: raw.payload[offset],\n propertyId: raw.payload[offset + 1],\n value: raw.payload[offset + 2],\n };\n values.push(value);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n values,\n });\n }\n public indicator0Value: number | undefined;\n public values: IndicatorObject[] | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.values != undefined) {\n // V2+\n this.payload = Bytes.alloc(2 + 3 * this.values.length, 0);\n // Byte 0 is the legacy value\n const objCount = this.values.length & MAX_INDICATOR_OBJECTS;\n this.payload[1] = objCount;\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n this.payload[offset] = this.values[i].indicatorId;\n this.payload[offset + 1] = this.values[i].propertyId;\n const value = this.values[i].value;\n this.payload[offset + 2] = value === true\n ? 0xff\n : value === false\n ? 0x00\n : value;\n }\n }\n else {\n // V1\n this.payload = Bytes.from([this.indicator0Value ?? 0]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.indicator0Value != undefined) {\n message[\"indicator 0 value\"] = this.indicator0Value;\n }\n if (this.values != undefined) {\n message.values = this.values\n .map((v) => `\n\u00B7 indicatorId: ${v.indicatorId}\n propertyId: ${v.propertyId}\n value: ${v.value}`)\n .join(\"\");\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport type IndicatorCCReportOptions = {\n value: number;\n} | {\n values: IndicatorObject[];\n};\n@CCCommand(IndicatorCommand.Report)\nexport class IndicatorCCReport extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCReportOptions>) {\n super(options);\n if (\"value\" in options) {\n this.indicator0Value = options.value;\n }\n else if (\"values\" in options) {\n if (options.values.length > MAX_INDICATOR_OBJECTS) {\n throw new ZWaveError(`Only ${MAX_INDICATOR_OBJECTS} indicator values can be set at a time!`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.values = options.values;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCReport {\n validatePayload(raw.payload.length >= 1);\n const objCount = raw.payload.length >= 2\n ? raw.payload[1] & 0b11111\n : 0;\n if (objCount === 0) {\n const indicator0Value = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n value: indicator0Value,\n });\n }\n validatePayload(raw.payload.length >= 2 + 3 * objCount);\n const values: IndicatorObject[] = [];\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n const value: IndicatorObject = {\n indicatorId: raw.payload[offset],\n propertyId: raw.payload[offset + 1],\n value: raw.payload[offset + 2],\n };\n values.push(value);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n values,\n });\n // TODO: Think if we want this:\n // // If not all Property IDs are included in the command for the actual Indicator ID,\n // // a controlling node MUST assume non-specified Property IDs values to be 0x00.\n // const indicatorId = this.values[0].indicatorId;\n // const supportedIndicatorProperties =\n // \tvalueDB.getValue<number[]>(\n // \t\tgetSupportedPropertyIDsValueID(\n // \t\t\tthis.endpointIndex,\n // \t\t\tindicatorId,\n // \t\t),\n // \t) ?? [];\n // // Find out which ones are missing\n // const missingIndicatorProperties = supportedIndicatorProperties.filter(\n // \tprop =>\n // \t\t!this.values!.find(({ propertyId }) => prop === propertyId),\n // );\n // // And assume they are 0 (false)\n // for (const missing of missingIndicatorProperties) {\n // \tthis.setIndicatorValue({\n // \t\tindicatorId,\n // \t\tpropertyId: missing,\n // \t\tvalue: 0,\n // \t});\n // }\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.indicator0Value != undefined) {\n if (!this.supportsV2Indicators(ctx)) {\n // Publish the value\n const valueV1 = IndicatorCCValues.valueV1;\n this.setMetadata(ctx, valueV1);\n this.setValue(ctx, valueV1, this.indicator0Value);\n }\n else {\n if (this.isSinglecast()) {\n // Don't!\n ctx.logNode(this.nodeId, {\n message: `ignoring V1 indicator report because the node supports V2 indicators`,\n direction: \"none\",\n endpoint: this.endpointIndex,\n });\n }\n }\n }\n else if (this.values) {\n // Store the simple values first\n for (const value of this.values) {\n this.setIndicatorValue(ctx, value);\n }\n // Then group values into the convenience properties\n const groupedValues = groupByIndicatorId(this.values);\n for (const [indicatorId, values] of groupedValues) {\n // Some devices report all properties it supports in every report,\n // even if it does not support all properties for the given indicator ID.\n // To avoid confusion, we need to filter out the unsupported properties\n const supportedPropertyIDs = this.getValue<number[]>(ctx, IndicatorCCValues.supportedPropertyIDs(indicatorId)) ?? [];\n const filteredValues = values.filter((v) => supportedPropertyIDs.includes(v.propertyId));\n const overrideIndicatorLabel = this\n .getManufacturerDefinedIndicatorLabel(ctx, indicatorId);\n // ... timeout\n const timeout = indicatorObjectsToTimeout(filteredValues);\n if (timeout) {\n let timeoutString = \"\";\n if (timeout?.hours)\n timeoutString += `${timeout.hours}h`;\n if (timeout?.minutes) {\n timeoutString += `${timeout.minutes}m`;\n }\n if (timeout?.seconds) {\n timeoutString += `${timeout.seconds}s`;\n }\n const timeoutValue = IndicatorCCValues.timeout(indicatorId);\n const metadata: ValueMetadata = {\n ...timeoutValue.meta,\n label: getIndicatorLabel(indicatorId, 0x06, // This is actually ignored, but pass a valid ID for clarity\n overrideIndicatorLabel, \"Timeout\"),\n };\n this.setMetadata(ctx, timeoutValue, metadata);\n this.setValue(ctx, timeoutValue, timeoutString);\n }\n }\n }\n return true;\n }\n public readonly indicator0Value: number | undefined;\n public readonly values: IndicatorObject[] | undefined;\n private setIndicatorValue(ctx: GetValueDB, value: IndicatorObject): void {\n // Manufacturer-defined indicators may need a custom label\n const overrideIndicatorLabel = this\n .getManufacturerDefinedIndicatorLabel(ctx, value.indicatorId);\n const metadata = getIndicatorMetadata(value.indicatorId, value.propertyId, overrideIndicatorLabel);\n // Some values need to be converted\n if (metadata.type === \"boolean\") {\n value.value = !!value.value;\n }\n // Only expose the value if it should be user-facing\n if (value.indicatorId === Indicator[\"Node Identify\"]) {\n return;\n }\n const prop = getIndicatorProperty(value.propertyId);\n if (!prop?.exposeAsValue)\n return;\n // And only if it is actually supported and not just reported by accident\n const supportedPropertyIDs = this.getValue<number[]>(ctx, IndicatorCCValues.supportedPropertyIDs(value.indicatorId)) ?? [];\n if (!supportedPropertyIDs.includes(value.propertyId))\n return;\n // Publish the value\n const valueV2 = IndicatorCCValues.valueV2(value.indicatorId, value.propertyId);\n this.setMetadata(ctx, valueV2, metadata);\n this.setValue(ctx, valueV2, value.value);\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.values != undefined) {\n // V2+\n this.payload = Bytes.alloc(2 + 3 * this.values.length, 0);\n // Byte 0 is the legacy value\n const objCount = this.values.length & MAX_INDICATOR_OBJECTS;\n this.payload[1] = objCount;\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n this.payload[offset] = this.values[i].indicatorId;\n this.payload[offset + 1] = this.values[i].propertyId;\n const value = this.values[i].value;\n this.payload[offset + 2] = value === true\n ? 0xff\n : value === false\n ? 0x00\n : value;\n }\n }\n else {\n // V1\n this.payload = Bytes.from([this.indicator0Value ?? 0]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.indicator0Value != undefined) {\n message[\"indicator 0 value\"] = this.indicator0Value;\n }\n if (this.values != undefined) {\n message.values = this.values\n .map((v) => `\n\u00B7 indicatorId: ${v.indicatorId}\n propertyId: ${v.propertyId}\n value: ${v.value}`)\n .join(\"\");\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCGetOptions {\n indicatorId?: number;\n}\n@CCCommand(IndicatorCommand.Get)\n@expectedCCResponse(IndicatorCCReport)\nexport class IndicatorCCGet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCGetOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCGet {\n let indicatorId: number | undefined;\n if (raw.payload.length > 0) {\n indicatorId = raw.payload[0];\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n });\n }\n public indicatorId: number | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.indicatorId != undefined) {\n this.payload = Bytes.from([this.indicatorId]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n indicator: getIndicatorName(this.indicatorId),\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCSupportedReportOptions {\n indicatorId: number;\n nextIndicatorId: number;\n supportedProperties: readonly number[];\n}\n@CCCommand(IndicatorCommand.SupportedReport)\nexport class IndicatorCCSupportedReport extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCSupportedReportOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n this.nextIndicatorId = options.nextIndicatorId;\n this.supportedProperties = options.supportedProperties;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCSupportedReport {\n validatePayload(raw.payload.length >= 3);\n const indicatorId = raw.payload[0];\n const nextIndicatorId = raw.payload[1];\n const bitMaskLength = raw.payload[2] & 0b11111;\n let supportedProperties: readonly number[];\n if (bitMaskLength === 0) {\n supportedProperties = [];\n }\n else {\n validatePayload(raw.payload.length >= 3 + bitMaskLength);\n // The bit mask starts at 0, but bit 0 is not used\n supportedProperties = parseBitMask(raw.payload.subarray(3, 3 + bitMaskLength), 0).filter((v) => v !== 0);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n nextIndicatorId,\n supportedProperties,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.indicatorId !== 0x00) {\n // Remember which property IDs are supported\n this.setValue(ctx, IndicatorCCValues.supportedPropertyIDs(this.indicatorId), this.supportedProperties);\n }\n return true;\n }\n public readonly indicatorId: number;\n public readonly nextIndicatorId: number;\n public readonly supportedProperties: readonly number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const bitmask = this.supportedProperties.length > 0\n ? encodeBitMask(this.supportedProperties, undefined, 0)\n : new Bytes();\n this.payload = Bytes.concat([\n [\n this.indicatorId,\n this.nextIndicatorId,\n bitmask.length,\n ],\n bitmask,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n indicator: getIndicatorName(this.indicatorId),\n \"supported properties\": this.supportedProperties\n .map((id) => getIndicatorProperty(id)?.label\n ?? `Unknown (${num2hex(id)})`)\n .join(\", \"),\n \"next indicator\": getIndicatorName(this.nextIndicatorId),\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCSupportedGetOptions {\n indicatorId: number;\n}\nfunction testResponseForIndicatorSupportedGet(sent: IndicatorCCSupportedGet, received: IndicatorCCSupportedReport) {\n return sent.indicatorId === 0 || received.indicatorId === sent.indicatorId;\n}\n@CCCommand(IndicatorCommand.SupportedGet)\n@expectedCCResponse(IndicatorCCSupportedReport, testResponseForIndicatorSupportedGet)\nexport class IndicatorCCSupportedGet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCSupportedGetOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCSupportedGet {\n validatePayload(raw.payload.length >= 1);\n const indicatorId = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n });\n }\n public indicatorId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.indicatorId]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n indicator: getIndicatorName(this.indicatorId),\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCDescriptionReportOptions {\n indicatorId: number;\n description: string;\n}\n@CCCommand(IndicatorCommand.DescriptionReport)\nexport class IndicatorCCDescriptionReport extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCDescriptionReportOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n this.description = options.description;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCDescriptionReport {\n validatePayload(raw.payload.length >= 2);\n const indicatorId = raw.payload[0];\n const descrptionLength = raw.payload[1];\n validatePayload(raw.payload.length >= 2 + descrptionLength);\n const description: string = raw.payload\n .subarray(2, 2 + descrptionLength)\n .toString(\"utf8\");\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n description,\n });\n }\n public indicatorId: number;\n public description: string;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.description) {\n this.setValue(ctx, IndicatorCCValues.indicatorDescription(this.indicatorId), this.description);\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const description = Bytes.from(this.description, \"utf8\");\n this.payload = Bytes.concat([\n [this.indicatorId, description.length],\n description,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"indicator ID\": this.indicatorId,\n description: this.description || \"(none)\",\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCDescriptionGetOptions {\n indicatorId: number;\n}\nfunction testResponseForIndicatorDescriptionGet(sent: IndicatorCCDescriptionGet, received: IndicatorCCDescriptionReport) {\n return received.indicatorId === sent.indicatorId;\n}\n@CCCommand(IndicatorCommand.DescriptionGet)\n@expectedCCResponse(IndicatorCCDescriptionReport, testResponseForIndicatorDescriptionGet)\nexport class IndicatorCCDescriptionGet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCDescriptionGetOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCDescriptionGet {\n validatePayload(raw.payload.length >= 1);\n const indicatorId = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n });\n }\n public indicatorId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.indicatorId]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"indicator ID\": this.indicatorId,\n },\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -501,7 +501,8 @@ let IrrigationCC = (() => {
501
501
  const node = this.getNode(ctx);
502
502
  const endpoint = this.getEndpoint(ctx);
503
503
  const api = import_API.CCAPI.create(import_core.CommandClasses.Irrigation, ctx, endpoint).withOptions({
504
- priority: import_core.MessagePriority.NodeQuery
504
+ priority: import_core.MessagePriority.NodeQuery,
505
+ tag: "interview"
505
506
  });
506
507
  ctx.logNode(node.id, {
507
508
  endpoint: this.endpointIndex,
@@ -538,6 +539,7 @@ max. valve table size: ${systemInfo.maxValveTableSize}`;
538
539
  }
539
540
  this.ensureMetadata(ctx, import_CCValues_generated.IrrigationCCValues.shutoffSystem);
540
541
  await this.refreshValues(ctx, {
542
+ tag: "interview",
541
543
  onProgress: /* @__PURE__ */ __name((completed, total) => node.reportInterviewProgress(completed, total), "onProgress")
542
544
  });
543
545
  this.setInterviewComplete(ctx, true);
@@ -546,7 +548,8 @@ max. valve table size: ${systemInfo.maxValveTableSize}`;
546
548
  const node = this.getNode(ctx);
547
549
  const endpoint = this.getEndpoint(ctx);
548
550
  const api = import_API.CCAPI.create(import_core.CommandClasses.Irrigation, ctx, endpoint).withOptions({
549
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
551
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
552
+ tag: options?.tag
550
553
  });
551
554
  ctx.logNode(node.id, {
552
555
  endpoint: this.endpointIndex,