@zwave-js/cc 15.25.0 → 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
@@ -156,14 +156,15 @@ let LockCC = (() => {
156
156
  message: `Interviewing ${this.ccName}...`,
157
157
  direction: "none"
158
158
  });
159
- await this.refreshValues(ctx);
159
+ await this.refreshValues(ctx, { tag: "interview" });
160
160
  this.setInterviewComplete(ctx, true);
161
161
  }
162
162
  async refreshValues(ctx, options) {
163
163
  const node = this.getNode(ctx);
164
164
  const endpoint = this.getEndpoint(ctx);
165
165
  const api = import_API.CCAPI.create(import_core.CommandClasses.Lock, ctx, endpoint).withOptions({
166
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
166
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
167
+ tag: options?.tag
167
168
  });
168
169
  ctx.logNode(node.id, {
169
170
  message: "requesting current lock state...",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/LockCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./LockCC._validateArgs.js\";\nconst { validateArgs_LockCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type SupervisionResult, ValueMetadata, type WithAddress, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { LockCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { LockCCValues } from \"./_CCValues.generated.js\";\nexport { LockCCValues };\n@API(CommandClasses.Lock)\nexport class LockCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: LockCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case LockCommand.Get:\n case LockCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n public async get(): Promise<MaybeNotKnown<boolean>> {\n this.assertSupportsCommand(LockCommand, LockCommand.Get);\n const cc = new LockCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<LockCCReport>(cc, this.commandOptions);\n return response?.locked;\n }\n /**\n * Locks or unlocks the lock\n * @param locked Whether the lock should be locked\n */\n @validateArgs_LockCCAPI_set()\n public async set(locked: boolean): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(LockCommand, LockCommand.Set);\n const cc = new LockCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n locked,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: LockCCAPI, { property }, value) {\n if (property !== \"locked\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"boolean\", typeof value);\n }\n const result = await this.set(value);\n // Verify the current value after a delay, unless the command was supervised and successful\n if (!supervisedCommandSucceeded(result)) {\n this.schedulePoll({ property }, value);\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: LockCCAPI, { property }) {\n if (property === \"locked\")\n return this.get();\n throwUnsupportedProperty(this.ccId, property);\n };\n }\n}\n@commandClass(CommandClasses.Lock)\n@implementedVersion(1)\n@ccValues(LockCCValues)\nexport class LockCC extends CommandClass {\n declare ccCommand: LockCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx);\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.Lock, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n message: \"requesting current lock state...\",\n direction: \"outbound\",\n });\n const locked = await api.get();\n const logMessage = `the lock is ${locked ? \"locked\" : \"unlocked\"}`;\n ctx.logNode(node.id, {\n message: logMessage,\n direction: \"inbound\",\n });\n }\n}\n// @publicAPI\nexport interface LockCCSetOptions {\n locked: boolean;\n}\n@CCCommand(LockCommand.Set)\n@useSupervision()\nexport class LockCCSet extends LockCC {\n public constructor(options: WithAddress<LockCCSetOptions>) {\n super(options);\n this.locked = options.locked;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): LockCCSet {\n validatePayload(raw.payload.length >= 1);\n const locked = raw.payload[0] === 1;\n return new this({\n nodeId: ctx.sourceNodeId,\n locked,\n });\n }\n public locked: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.locked ? 1 : 0]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { locked: this.locked },\n };\n }\n}\n// @publicAPI\nexport interface LockCCReportOptions {\n locked: boolean;\n}\n@CCCommand(LockCommand.Report)\n@ccValueProperty(\"locked\", LockCCValues.locked)\nexport class LockCCReport extends LockCC {\n public constructor(options: WithAddress<LockCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.locked = options.locked;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): LockCCReport {\n validatePayload(raw.payload.length >= 1);\n const locked = raw.payload[0] === 1;\n return new this({\n nodeId: ctx.sourceNodeId,\n locked,\n });\n }\n public readonly locked: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.locked ? 1 : 0]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { locked: this.locked },\n };\n }\n}\n@CCCommand(LockCommand.Get)\n@expectedCCResponse(LockCCReport)\nexport class LockCCGet extends LockCC {\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./LockCC._validateArgs.js\";\nconst { validateArgs_LockCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type SupervisionResult, ValueMetadata, type WithAddress, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { LockCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { LockCCValues } from \"./_CCValues.generated.js\";\nexport { LockCCValues };\n@API(CommandClasses.Lock)\nexport class LockCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: LockCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case LockCommand.Get:\n case LockCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n public async get(): Promise<MaybeNotKnown<boolean>> {\n this.assertSupportsCommand(LockCommand, LockCommand.Get);\n const cc = new LockCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<LockCCReport>(cc, this.commandOptions);\n return response?.locked;\n }\n /**\n * Locks or unlocks the lock\n * @param locked Whether the lock should be locked\n */\n @validateArgs_LockCCAPI_set()\n public async set(locked: boolean): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(LockCommand, LockCommand.Set);\n const cc = new LockCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n locked,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: LockCCAPI, { property }, value) {\n if (property !== \"locked\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"boolean\", typeof value);\n }\n const result = await this.set(value);\n // Verify the current value after a delay, unless the command was supervised and successful\n if (!supervisedCommandSucceeded(result)) {\n this.schedulePoll({ property }, value);\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: LockCCAPI, { property }) {\n if (property === \"locked\")\n return this.get();\n throwUnsupportedProperty(this.ccId, property);\n };\n }\n}\n@commandClass(CommandClasses.Lock)\n@implementedVersion(1)\n@ccValues(LockCCValues)\nexport class LockCC extends CommandClass {\n declare ccCommand: LockCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx, { tag: \"interview\" });\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.Lock, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n ctx.logNode(node.id, {\n message: \"requesting current lock state...\",\n direction: \"outbound\",\n });\n const locked = await api.get();\n const logMessage = `the lock is ${locked ? \"locked\" : \"unlocked\"}`;\n ctx.logNode(node.id, {\n message: logMessage,\n direction: \"inbound\",\n });\n }\n}\n// @publicAPI\nexport interface LockCCSetOptions {\n locked: boolean;\n}\n@CCCommand(LockCommand.Set)\n@useSupervision()\nexport class LockCCSet extends LockCC {\n public constructor(options: WithAddress<LockCCSetOptions>) {\n super(options);\n this.locked = options.locked;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): LockCCSet {\n validatePayload(raw.payload.length >= 1);\n const locked = raw.payload[0] === 1;\n return new this({\n nodeId: ctx.sourceNodeId,\n locked,\n });\n }\n public locked: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.locked ? 1 : 0]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { locked: this.locked },\n };\n }\n}\n// @publicAPI\nexport interface LockCCReportOptions {\n locked: boolean;\n}\n@CCCommand(LockCommand.Report)\n@ccValueProperty(\"locked\", LockCCValues.locked)\nexport class LockCCReport extends LockCC {\n public constructor(options: WithAddress<LockCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.locked = options.locked;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): LockCCReport {\n validatePayload(raw.payload.length >= 1);\n const locked = raw.payload[0] === 1;\n return new this({\n nodeId: ctx.sourceNodeId,\n locked,\n });\n }\n public readonly locked: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.locked ? 1 : 0]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: { locked: this.locked },\n };\n }\n}\n@CCCommand(LockCommand.Get)\n@expectedCCResponse(LockCCReport)\nexport class LockCCGet extends LockCC {\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -155,7 +155,10 @@ let ManufacturerSpecificCC = (() => {
155
155
  async interview(ctx) {
156
156
  const node = this.getNode(ctx);
157
157
  const endpoint = this.getEndpoint(ctx);
158
- const api = import_API.CCAPI.create(import_core.CommandClasses["Manufacturer Specific"], ctx, endpoint).withOptions({ priority: import_core.MessagePriority.NodeQuery });
158
+ const api = import_API.CCAPI.create(import_core.CommandClasses["Manufacturer Specific"], ctx, endpoint).withOptions({
159
+ priority: import_core.MessagePriority.NodeQuery,
160
+ tag: "interview"
161
+ });
159
162
  if (node.id !== ctx.ownNodeId) {
160
163
  ctx.logNode(node.id, {
161
164
  endpoint: this.endpointIndex,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/ManufacturerSpecificCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./ManufacturerSpecificCC._validateArgs.js\";\nconst { validateArgs_ManufacturerSpecificCCAPI_deviceSpecificGet, validateArgs_ManufacturerSpecificCCAPI_sendReport } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, num2hex, pick } from \"@zwave-js/shared\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { DeviceIdType, ManufacturerSpecificCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ManufacturerSpecificCCValues } from \"./_CCValues.generated.js\";\nexport { ManufacturerSpecificCCValues };\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses[\"Manufacturer Specific\"])\nexport class ManufacturerSpecificCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: ManufacturerSpecificCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ManufacturerSpecificCommand.Get:\n case ManufacturerSpecificCommand.Report:\n return true; // This is mandatory\n case ManufacturerSpecificCommand.DeviceSpecificGet:\n case ManufacturerSpecificCommand.DeviceSpecificReport:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ManufacturerSpecificCommand, ManufacturerSpecificCommand.Get);\n const cc = new ManufacturerSpecificCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ManufacturerSpecificCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"manufacturerId\",\n \"productType\",\n \"productId\",\n ]);\n }\n }\n @validateArgs_ManufacturerSpecificCCAPI_deviceSpecificGet()\n public async deviceSpecificGet(deviceIdType: DeviceIdType): Promise<MaybeNotKnown<string>> {\n this.assertSupportsCommand(ManufacturerSpecificCommand, ManufacturerSpecificCommand.DeviceSpecificGet);\n const cc = new ManufacturerSpecificCCDeviceSpecificGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n deviceIdType,\n });\n const response = await this.host.sendCommand<ManufacturerSpecificCCDeviceSpecificReport>(cc, this.commandOptions);\n return response?.deviceId;\n }\n @validateArgs_ManufacturerSpecificCCAPI_sendReport()\n public async sendReport(options: ManufacturerSpecificCCReportOptions): Promise<void> {\n this.assertSupportsCommand(ManufacturerSpecificCommand, ManufacturerSpecificCommand.Report);\n const cc = new ManufacturerSpecificCCReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Manufacturer Specific\"])\n@implementedVersion(2)\n@ccValues(ManufacturerSpecificCCValues)\nexport class ManufacturerSpecificCC extends CommandClass {\n declare ccCommand: ManufacturerSpecificCommand;\n public determineRequiredCCInterviews(): readonly CommandClasses[] {\n // The Manufacturer Specific CC MUST be interviewed first\n return [];\n }\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[\"Manufacturer Specific\"], ctx, endpoint).withOptions({ priority: MessagePriority.NodeQuery });\n if (node.id !== ctx.ownNodeId) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying manufacturer information...\",\n direction: \"outbound\",\n });\n const mfResp = await api.get();\n if (mfResp) {\n const logMessage = `received response for manufacturer information:\n manufacturer: ${ctx.lookupManufacturer(mfResp.manufacturerId)\n || \"unknown\"} (${num2hex(mfResp.manufacturerId)})\n product type: ${num2hex(mfResp.productType)}\n product id: ${num2hex(mfResp.productId)}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n}\n// @publicAPI\nexport interface ManufacturerSpecificCCReportOptions {\n manufacturerId: number;\n productType: number;\n productId: number;\n}\n@CCCommand(ManufacturerSpecificCommand.Report)\n@ccValueProperty(\"manufacturerId\", ManufacturerSpecificCCValues.manufacturerId)\n@ccValueProperty(\"productType\", ManufacturerSpecificCCValues.productType)\n@ccValueProperty(\"productId\", ManufacturerSpecificCCValues.productId)\nexport class ManufacturerSpecificCCReport extends ManufacturerSpecificCC {\n public constructor(options: WithAddress<ManufacturerSpecificCCReportOptions>) {\n super(options);\n this.manufacturerId = options.manufacturerId;\n this.productType = options.productType;\n this.productId = options.productId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ManufacturerSpecificCCReport {\n validatePayload(raw.payload.length >= 6);\n const manufacturerId = raw.payload.readUInt16BE(0);\n const productType = raw.payload.readUInt16BE(2);\n const productId = raw.payload.readUInt16BE(4);\n return new this({\n nodeId: ctx.sourceNodeId,\n manufacturerId,\n productType,\n productId,\n });\n }\n public readonly manufacturerId: number;\n public readonly productType: number;\n public readonly productId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = new Bytes(6);\n this.payload.writeUInt16BE(this.manufacturerId, 0);\n this.payload.writeUInt16BE(this.productType, 2);\n this.payload.writeUInt16BE(this.productId, 4);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"manufacturer id\": num2hex(this.manufacturerId),\n \"product type\": num2hex(this.productType),\n \"product id\": num2hex(this.productId),\n },\n };\n }\n}\n@CCCommand(ManufacturerSpecificCommand.Get)\n@expectedCCResponse(ManufacturerSpecificCCReport)\nexport class ManufacturerSpecificCCGet extends ManufacturerSpecificCC {\n}\n// @publicAPI\nexport interface ManufacturerSpecificCCDeviceSpecificReportOptions {\n type: DeviceIdType;\n deviceId: string;\n}\n@CCCommand(ManufacturerSpecificCommand.DeviceSpecificReport)\n@ccValueProperty(\"deviceId\", ManufacturerSpecificCCValues.deviceId, (self) => [self.type])\nexport class ManufacturerSpecificCCDeviceSpecificReport extends ManufacturerSpecificCC {\n public constructor(options: WithAddress<ManufacturerSpecificCCDeviceSpecificReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.type = options.type;\n this.deviceId = options.deviceId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ManufacturerSpecificCCDeviceSpecificReport {\n validatePayload(raw.payload.length >= 2);\n const type: DeviceIdType = raw.payload[0] & 0b111;\n const dataFormat = raw.payload[1] >>> 5;\n const dataLength = raw.payload[1] & 0b11111;\n validatePayload(dataLength > 0, raw.payload.length >= 2 + dataLength);\n const deviceIdData = raw.payload.subarray(2, 2 + dataLength);\n const deviceId: string = dataFormat === 0\n ? deviceIdData.toString(\"utf8\")\n : \"0x\" + deviceIdData.toString(\"hex\");\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n deviceId,\n });\n }\n public readonly type: DeviceIdType;\n public readonly deviceId: string;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"device id type\": getEnumMemberName(DeviceIdType, this.type),\n \"device id\": this.deviceId,\n },\n };\n }\n}\n// @publicAPI\nexport interface ManufacturerSpecificCCDeviceSpecificGetOptions {\n deviceIdType: DeviceIdType;\n}\n@CCCommand(ManufacturerSpecificCommand.DeviceSpecificGet)\n@expectedCCResponse(ManufacturerSpecificCCDeviceSpecificReport)\nexport class ManufacturerSpecificCCDeviceSpecificGet extends ManufacturerSpecificCC {\n public constructor(options: WithAddress<ManufacturerSpecificCCDeviceSpecificGetOptions>) {\n super(options);\n this.deviceIdType = options.deviceIdType;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): ManufacturerSpecificCCDeviceSpecificGet {\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new ManufacturerSpecificCCDeviceSpecificGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public deviceIdType: DeviceIdType;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([(this.deviceIdType || 0) & 0b111]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"device id type\": getEnumMemberName(DeviceIdType, this.deviceIdType),\n },\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./ManufacturerSpecificCC._validateArgs.js\";\nconst { validateArgs_ManufacturerSpecificCCAPI_deviceSpecificGet, validateArgs_ManufacturerSpecificCCAPI_sendReport } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, num2hex, pick } from \"@zwave-js/shared\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { DeviceIdType, ManufacturerSpecificCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ManufacturerSpecificCCValues } from \"./_CCValues.generated.js\";\nexport { ManufacturerSpecificCCValues };\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses[\"Manufacturer Specific\"])\nexport class ManufacturerSpecificCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: ManufacturerSpecificCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ManufacturerSpecificCommand.Get:\n case ManufacturerSpecificCommand.Report:\n return true; // This is mandatory\n case ManufacturerSpecificCommand.DeviceSpecificGet:\n case ManufacturerSpecificCommand.DeviceSpecificReport:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ManufacturerSpecificCommand, ManufacturerSpecificCommand.Get);\n const cc = new ManufacturerSpecificCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ManufacturerSpecificCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"manufacturerId\",\n \"productType\",\n \"productId\",\n ]);\n }\n }\n @validateArgs_ManufacturerSpecificCCAPI_deviceSpecificGet()\n public async deviceSpecificGet(deviceIdType: DeviceIdType): Promise<MaybeNotKnown<string>> {\n this.assertSupportsCommand(ManufacturerSpecificCommand, ManufacturerSpecificCommand.DeviceSpecificGet);\n const cc = new ManufacturerSpecificCCDeviceSpecificGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n deviceIdType,\n });\n const response = await this.host.sendCommand<ManufacturerSpecificCCDeviceSpecificReport>(cc, this.commandOptions);\n return response?.deviceId;\n }\n @validateArgs_ManufacturerSpecificCCAPI_sendReport()\n public async sendReport(options: ManufacturerSpecificCCReportOptions): Promise<void> {\n this.assertSupportsCommand(ManufacturerSpecificCommand, ManufacturerSpecificCommand.Report);\n const cc = new ManufacturerSpecificCCReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Manufacturer Specific\"])\n@implementedVersion(2)\n@ccValues(ManufacturerSpecificCCValues)\nexport class ManufacturerSpecificCC extends CommandClass {\n declare ccCommand: ManufacturerSpecificCommand;\n public determineRequiredCCInterviews(): readonly CommandClasses[] {\n // The Manufacturer Specific CC MUST be interviewed first\n return [];\n }\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[\"Manufacturer Specific\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n if (node.id !== ctx.ownNodeId) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying manufacturer information...\",\n direction: \"outbound\",\n });\n const mfResp = await api.get();\n if (mfResp) {\n const logMessage = `received response for manufacturer information:\n manufacturer: ${ctx.lookupManufacturer(mfResp.manufacturerId)\n || \"unknown\"} (${num2hex(mfResp.manufacturerId)})\n product type: ${num2hex(mfResp.productType)}\n product id: ${num2hex(mfResp.productId)}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n}\n// @publicAPI\nexport interface ManufacturerSpecificCCReportOptions {\n manufacturerId: number;\n productType: number;\n productId: number;\n}\n@CCCommand(ManufacturerSpecificCommand.Report)\n@ccValueProperty(\"manufacturerId\", ManufacturerSpecificCCValues.manufacturerId)\n@ccValueProperty(\"productType\", ManufacturerSpecificCCValues.productType)\n@ccValueProperty(\"productId\", ManufacturerSpecificCCValues.productId)\nexport class ManufacturerSpecificCCReport extends ManufacturerSpecificCC {\n public constructor(options: WithAddress<ManufacturerSpecificCCReportOptions>) {\n super(options);\n this.manufacturerId = options.manufacturerId;\n this.productType = options.productType;\n this.productId = options.productId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ManufacturerSpecificCCReport {\n validatePayload(raw.payload.length >= 6);\n const manufacturerId = raw.payload.readUInt16BE(0);\n const productType = raw.payload.readUInt16BE(2);\n const productId = raw.payload.readUInt16BE(4);\n return new this({\n nodeId: ctx.sourceNodeId,\n manufacturerId,\n productType,\n productId,\n });\n }\n public readonly manufacturerId: number;\n public readonly productType: number;\n public readonly productId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = new Bytes(6);\n this.payload.writeUInt16BE(this.manufacturerId, 0);\n this.payload.writeUInt16BE(this.productType, 2);\n this.payload.writeUInt16BE(this.productId, 4);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"manufacturer id\": num2hex(this.manufacturerId),\n \"product type\": num2hex(this.productType),\n \"product id\": num2hex(this.productId),\n },\n };\n }\n}\n@CCCommand(ManufacturerSpecificCommand.Get)\n@expectedCCResponse(ManufacturerSpecificCCReport)\nexport class ManufacturerSpecificCCGet extends ManufacturerSpecificCC {\n}\n// @publicAPI\nexport interface ManufacturerSpecificCCDeviceSpecificReportOptions {\n type: DeviceIdType;\n deviceId: string;\n}\n@CCCommand(ManufacturerSpecificCommand.DeviceSpecificReport)\n@ccValueProperty(\"deviceId\", ManufacturerSpecificCCValues.deviceId, (self) => [self.type])\nexport class ManufacturerSpecificCCDeviceSpecificReport extends ManufacturerSpecificCC {\n public constructor(options: WithAddress<ManufacturerSpecificCCDeviceSpecificReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.type = options.type;\n this.deviceId = options.deviceId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ManufacturerSpecificCCDeviceSpecificReport {\n validatePayload(raw.payload.length >= 2);\n const type: DeviceIdType = raw.payload[0] & 0b111;\n const dataFormat = raw.payload[1] >>> 5;\n const dataLength = raw.payload[1] & 0b11111;\n validatePayload(dataLength > 0, raw.payload.length >= 2 + dataLength);\n const deviceIdData = raw.payload.subarray(2, 2 + dataLength);\n const deviceId: string = dataFormat === 0\n ? deviceIdData.toString(\"utf8\")\n : \"0x\" + deviceIdData.toString(\"hex\");\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n deviceId,\n });\n }\n public readonly type: DeviceIdType;\n public readonly deviceId: string;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"device id type\": getEnumMemberName(DeviceIdType, this.type),\n \"device id\": this.deviceId,\n },\n };\n }\n}\n// @publicAPI\nexport interface ManufacturerSpecificCCDeviceSpecificGetOptions {\n deviceIdType: DeviceIdType;\n}\n@CCCommand(ManufacturerSpecificCommand.DeviceSpecificGet)\n@expectedCCResponse(ManufacturerSpecificCCDeviceSpecificReport)\nexport class ManufacturerSpecificCCDeviceSpecificGet extends ManufacturerSpecificCC {\n public constructor(options: WithAddress<ManufacturerSpecificCCDeviceSpecificGetOptions>) {\n super(options);\n this.deviceIdType = options.deviceIdType;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): ManufacturerSpecificCCDeviceSpecificGet {\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new ManufacturerSpecificCCDeviceSpecificGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public deviceIdType: DeviceIdType;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([(this.deviceIdType || 0) & 0b111]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"device id type\": getEnumMemberName(DeviceIdType, this.deviceIdType),\n },\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -333,7 +333,6 @@ let MeterCCAPI = (() => {
333
333
  } else {
334
334
  return this.reset();
335
335
  }
336
- return void 0;
337
336
  };
338
337
  }
339
338
  [import_API.SET_VALUE_HOOKS] = ((0, import_tslib.__runInitializers)(this, _instanceExtraInitializers), ({ property, propertyKey }, _value, _options) => {
@@ -415,7 +414,8 @@ let MeterCC = (() => {
415
414
  const node = this.getNode(ctx);
416
415
  const endpoint = this.getEndpoint(ctx);
417
416
  const api = import_API.CCAPI.create(import_core.CommandClasses.Meter, ctx, endpoint).withOptions({
418
- priority: import_core.MessagePriority.NodeQuery
417
+ priority: import_core.MessagePriority.NodeQuery,
418
+ tag: "interview"
419
419
  });
420
420
  ctx.logNode(node.id, {
421
421
  endpoint: this.endpointIndex,
@@ -452,6 +452,7 @@ supports reset: ${suppResp.supportsReset}`;
452
452
  }
453
453
  }
454
454
  await this.refreshValues(ctx, {
455
+ tag: "interview",
455
456
  onProgress: /* @__PURE__ */ __name((completed, total) => node.reportInterviewProgress(completed, total), "onProgress")
456
457
  });
457
458
  this.setInterviewComplete(ctx, true);
@@ -460,7 +461,8 @@ supports reset: ${suppResp.supportsReset}`;
460
461
  const node = this.getNode(ctx);
461
462
  const endpoint = this.getEndpoint(ctx);
462
463
  const api = import_API.CCAPI.create(import_core.CommandClasses.Meter, ctx, endpoint).withOptions({
463
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
464
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
465
+ tag: options?.tag
464
466
  });
465
467
  if (api.version === 1) {
466
468
  ctx.logNode(node.id, {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/MeterCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./MeterCC._validateArgs.js\";\nconst { validateArgs_MeterCCAPI_get, validateArgs_MeterCCAPI_sendReport, validateArgs_MeterCCAPI_getAll, validateArgs_MeterCCAPI_sendSupportedReport, validateArgs_MeterCCAPI_reset } = __validateArgs;\nimport type { GetDeviceConfig } from \"@zwave-js/config\";\nimport { CommandClasses, type ControlsCC, type EndpointId, type FloatParameters, type GetEndpoint, type GetNode, type GetSupportedCCVersion, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type NodeId, type SinglecastCC, type SupervisionResult, type SupportsCC, UNKNOWN_STATE, ValueMetadata, type WithAddress, encodeBitMask, encodeFloatWithScale, getFloatParameters, getMeter, getMeterName, getMeterScale, getUnknownMeterScale, parseBitMask, parseFloatWithScale, timespan, validatePayload, } from \"@zwave-js/core\";\nimport { type AllOrNone, Bytes, type BytesView, getEnumMemberName, num2hex, pick, } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, throwMissingPropertyKey, throwUnsupportedProperty, throwUnsupportedPropertyKey, throwWrongValueType, } from \"../lib/API.js\";\nimport { meterTypesToPropertyKey } from \"../lib/CCValueUtils.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, getEffectiveCCVersion, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, getCommandClass, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { MeterCommand, type MeterReading, RateType } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { MeterCCValues } from \"./_CCValues.generated.js\";\nexport { MeterCCValues };\nfunction splitPropertyKey(key: number): {\n meterType: number;\n rateType: RateType;\n scale: number;\n} {\n return {\n rateType: key & 0xff,\n scale: (key >>> 8) & 0xff,\n meterType: key >>> 16,\n };\n}\nfunction getValueLabel(meterType: number, scale: number, rateType: RateType, suffix?: string): string {\n let ret = getMeterName(meterType);\n const scaleLabel = (getMeterScale(meterType, scale) ?? getUnknownMeterScale(scale)).label;\n switch (rateType) {\n case RateType.Consumed:\n ret += ` Consumption [${scaleLabel}]`;\n break;\n case RateType.Produced:\n ret += ` Production [${scaleLabel}]`;\n break;\n default:\n ret += ` [${scaleLabel}]`;\n }\n if (suffix) {\n ret += ` (${suffix})`;\n }\n return ret;\n}\nfunction parseMeterValueAndInfo(data: BytesView, offset: number): {\n type: number;\n rateType: RateType;\n scale1: number;\n value: number;\n bytesRead: number;\n} {\n validatePayload(data.length >= offset + 1);\n const type = data[offset] & 31;\n const rateType = (data[offset] & 96) >>> 5;\n const scale1Bit2 = (data[offset] & 128) >>> 7;\n const { scale: scale1Bits10, value, bytesRead, } = parseFloatWithScale(data.subarray(offset + 1));\n return {\n type,\n rateType,\n // The scale is composed of two fields\n scale1: (scale1Bit2 << 2) | scale1Bits10,\n value,\n // We've read one byte more than the float contains\n bytesRead: bytesRead + 1,\n };\n}\nfunction encodeMeterValueAndInfo(type: number, rateType: RateType, scale: number, value: number): {\n data: Bytes;\n floatParams: FloatParameters;\n scale2: number | undefined;\n} {\n // We need at least 2 bytes\n const scale1 = scale >= 7 ? 7 : scale & 0b111;\n const scale1Bits10 = scale1 & 0b11;\n const scale1Bit2 = scale1 >>> 2;\n const scale2 = scale >= 7 ? scale - 7 : undefined;\n const typeByte = (type & 31)\n | ((rateType & 0b11) << 5)\n | (scale1Bit2 << 7);\n const floatParams = getFloatParameters(value);\n const valueBytes = encodeFloatWithScale(value, scale1Bits10, floatParams);\n return {\n data: Bytes.concat([[typeByte], valueBytes]),\n floatParams: pick(floatParams, [\"precision\", \"size\"]),\n scale2,\n };\n}\nfunction parseScale(scale1: number, data: BytesView, scale2Offset: number): number {\n if (scale1 === 7) {\n validatePayload(data.length >= scale2Offset + 1);\n const scale2 = data[scale2Offset];\n return scale1 + scale2;\n }\n else {\n return scale1;\n }\n}\nexport function isAccumulatedValue(meterType: number, scale: number): boolean {\n // FIXME: We should probably move the meter definitions into code\n switch (meterType) {\n case 0x01: // Electric\n return (\n // kVarh\n // Pulse count\n scale === 0x00 // kWh\n || scale === 0x01 // kVAh\n || scale === 0x03\n || scale === 0x08);\n case 0x02: // Gas\n return (\n // Pulse count\n // ft\u00B3\n scale === 0x00 // m\u00B3\n || scale === 0x01\n || scale === 0x03);\n case 0x03: // Water\n return (\n // Pulse count\n // US gallons\n scale === 0x00 // m\u00B3\n || scale === 0x01 // ft\u00B3\n || scale === 0x02\n || scale === 0x03);\n case 0x04: // Heating\n return scale === 0x00; // kWh\n case 0x05: // Cooling\n return scale === 0x00; // kWh\n }\n return false;\n}\n@API(CommandClasses.Meter)\nexport class MeterCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: MeterCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case MeterCommand.Get:\n case MeterCommand.Report:\n return true; // This is mandatory\n case MeterCommand.SupportedGet:\n case MeterCommand.SupportedReport:\n return this.version >= 2;\n case MeterCommand.Reset: {\n const ret = this.tryGetValueDB()?.getValue<boolean>({\n commandClass: getCommandClass(this),\n endpoint: this.endpoint.index,\n property: \"supportsReset\",\n });\n return ret === true;\n }\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: MeterCCAPI, { property, propertyKey }) {\n switch (property) {\n case \"value\":\n case \"previousValue\":\n case \"deltaTime\": {\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n else if (typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n const { rateType, scale } = splitPropertyKey(propertyKey);\n return (await this.get({\n rateType,\n scale,\n }))?.[property];\n }\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n @validateArgs_MeterCCAPI_get()\n public async get(options?: MeterCCGetOptions): Promise<MeterReading | undefined> {\n this.assertSupportsCommand(MeterCommand, MeterCommand.Get);\n const cc = new MeterCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n const response = await this.host.sendCommand<MeterCCReport>(cc, this.commandOptions);\n if (response) {\n return {\n type: response.type,\n scale: getMeterScale(response.type, response.scale)\n ?? getUnknownMeterScale(response.scale),\n ...pick(response, [\n \"value\",\n \"previousValue\",\n \"rateType\",\n \"deltaTime\",\n ]),\n };\n }\n }\n @validateArgs_MeterCCAPI_sendReport()\n public async sendReport(options: MeterCCReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MeterCommand, MeterCommand.Report);\n const cc = new MeterCCReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_MeterCCAPI_getAll()\n public async getAll(accumulatedOnly: boolean = false): Promise<MeterReading[]> {\n const valueDB = this.tryGetValueDB();\n if (this.version >= 2) {\n const meterType = valueDB?.getValue<number>(MeterCCValues.type.endpoint(this.endpoint.index));\n const supportedScales = valueDB?.getValue<number[]>(MeterCCValues.supportedScales.endpoint(this.endpoint.index)) ?? [];\n const supportedRateTypes = valueDB?.getValue<RateType[]>(MeterCCValues.supportedRateTypes.endpoint(this.endpoint.index)) ?? [];\n const rateTypes = supportedRateTypes.length\n ? supportedRateTypes\n : [undefined];\n const ret = [];\n for (const rateType of rateTypes) {\n for (const scale of supportedScales) {\n // Skip non-accumulated values if requested\n if (accumulatedOnly\n && meterType != undefined\n && !isAccumulatedValue(meterType, scale)) {\n continue;\n }\n const response = await this.get({\n scale,\n rateType,\n });\n if (response)\n ret.push(response);\n }\n }\n return ret;\n }\n else {\n const response = await this.get();\n return response ? [response] : [];\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getSupported() {\n this.assertSupportsCommand(MeterCommand, MeterCommand.SupportedGet);\n const cc = new MeterCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<MeterCCSupportedReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"type\",\n \"supportsReset\",\n \"supportedScales\",\n \"supportedRateTypes\",\n ]);\n }\n }\n @validateArgs_MeterCCAPI_sendSupportedReport()\n public async sendSupportedReport(options: MeterCCSupportedReportOptions): Promise<void> {\n this.assertSupportsCommand(MeterCommand, MeterCommand.SupportedReport);\n const cc = new MeterCCSupportedReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_MeterCCAPI_reset()\n public async reset(options?: MeterCCResetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MeterCommand, MeterCommand.Reset);\n const cc = new MeterCCReset({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: MeterCCAPI, { property, propertyKey }, value) {\n if (property !== \"reset\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n else if (propertyKey != undefined\n && typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n else if (value !== true) {\n throwWrongValueType(this.ccId, property, \"true\", value === false ? \"false\" : typeof value);\n }\n if (typeof propertyKey === \"number\") {\n const { meterType, scale, rateType } = splitPropertyKey(propertyKey);\n return this.reset({\n type: meterType,\n scale,\n rateType,\n targetValue: 0,\n });\n }\n else {\n return this.reset();\n }\n return undefined;\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property, propertyKey }, _value, _options) => {\n if (property !== \"reset\")\n return;\n if (typeof propertyKey === \"number\") {\n // Reset single\n const { meterType, rateType, scale } = splitPropertyKey(propertyKey);\n const readingValueId = MeterCCValues.value(meterType, rateType, scale).endpoint(this.endpoint.index);\n return {\n optimisticallyUpdateRelatedValues: (supervisedAndSuccessful) => {\n if (!supervisedAndSuccessful)\n return;\n // After resetting a single reading with supervision, store zero\n // in the corresponding value\n const valueDB = this.tryGetValueDB();\n if (!valueDB)\n return;\n if (isAccumulatedValue(meterType, scale)) {\n valueDB.setValue({\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property,\n propertyKey,\n }, 0);\n }\n },\n verifyChanges: () => {\n this.schedulePoll(readingValueId, 0, { transition: \"fast\" });\n },\n };\n }\n else {\n // Reset all\n const valueDB = this.tryGetValueDB();\n if (!valueDB)\n return;\n const accumulatedValues = valueDB.findValues((vid) => vid.commandClass === this.ccId\n && vid.endpoint === this.endpoint.index\n && MeterCCValues.value.is(vid)).filter(({ propertyKey }) => {\n if (typeof propertyKey !== \"number\")\n return false;\n const { meterType, scale } = splitPropertyKey(propertyKey);\n return isAccumulatedValue(meterType, scale);\n });\n return {\n optimisticallyUpdateRelatedValues: (supervisedAndSuccessful) => {\n if (!supervisedAndSuccessful)\n return;\n // After setting the reset all value with supervision,\n // reset all accumulated values, since we know they are now zero.\n for (const value of accumulatedValues) {\n valueDB.setValue(value, 0);\n }\n },\n verifyChanges: () => {\n // Poll all accumulated values, unless they were updated by the device\n for (const valueID of accumulatedValues) {\n this.schedulePoll(valueID, 0, { transition: \"fast\" });\n }\n },\n };\n }\n };\n}\n@commandClass(CommandClasses.Meter)\n@implementedVersion(6)\n@ccValues(MeterCCValues)\nexport class MeterCC extends CommandClass {\n declare ccCommand: MeterCommand;\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.Meter, 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 >= 2) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying meter support...\",\n direction: \"outbound\",\n });\n const suppResp = await api.getSupported();\n if (suppResp) {\n const logMessage = `received meter support:\ntype: ${getMeterName(suppResp.type)}\nsupported scales: ${suppResp.supportedScales\n .map((s) => (getMeterScale(suppResp.type, s)\n ?? getUnknownMeterScale(s)).label)\n .map((label) => `\\n\u00B7 ${label}`)\n .join(\"\")}\nsupported rate types: ${suppResp.supportedRateTypes\n .map((rt) => getEnumMemberName(RateType, rt))\n .map((label) => `\\n\u00B7 ${label}`)\n .join(\"\")}\nsupports reset: ${suppResp.supportsReset}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying meter support timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n }\n // Query current meter 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.Meter, 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: `querying default meter value...`,\n direction: \"outbound\",\n });\n await api.get();\n }\n else {\n const type: number = this.getValue(ctx, MeterCCValues.type)\n ?? 0;\n const supportedScales: readonly number[] = this.getValue(ctx, MeterCCValues.supportedScales) ?? [];\n const supportedRateTypes: readonly RateType[] = this.getValue(ctx, MeterCCValues.supportedRateTypes) ?? [];\n const rateTypes = supportedRateTypes.length\n ? supportedRateTypes\n : [undefined];\n const total = rateTypes.length * supportedScales.length;\n let completed = 0;\n for (const rateType of rateTypes) {\n for (const scale of supportedScales) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying meter value (type = ${getMeterName(type)}, scale = ${(getMeterScale(type, scale)\n ?? getUnknownMeterScale(scale)).label}${rateType != undefined\n ? `, rate type = ${getEnumMemberName(RateType, rateType)}`\n : \"\"})...`,\n direction: \"outbound\",\n });\n await api.get({ scale, rateType });\n options?.onProgress?.(++completed, total);\n }\n }\n }\n }\n public shouldRefreshValues(this: SinglecastCC<this>, ctx: GetValueDB & GetSupportedCCVersion & GetDeviceConfig & GetNode<NodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>>): boolean {\n // Poll the device when all of the supported values were last updated longer than 6 hours ago.\n // This may lead to some values not being updated, but the user may have disabled some unnecessary\n // reports to reduce traffic.\n const valueDB = ctx.tryGetValueDB(this.nodeId);\n if (!valueDB)\n return true;\n const values = this.getDefinedValueIDs(ctx).filter((v) => MeterCCValues.value.is(v));\n return values.every((v) => {\n const lastUpdated = valueDB.getTimestamp(v);\n return (lastUpdated == undefined\n || Date.now() - lastUpdated > timespan.hours(6));\n });\n }\n /**\n * Returns which type this meter has.\n * This only works AFTER the interview process\n */\n public static getMeterTypeCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<number> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(MeterCCValues.type.endpoint(endpoint.index));\n }\n /**\n * Returns which scales are supported by this meter.\n * This only works AFTER the interview process\n */\n public static getSupportedScalesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<number[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(MeterCCValues.supportedScales.endpoint(endpoint.index));\n }\n /**\n * Returns whether reset is supported by this meter.\n * This only works AFTER the interview process\n */\n public static supportsResetCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<boolean> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(MeterCCValues.supportsReset.endpoint(endpoint.index));\n }\n /**\n * Returns which rate types are supported by this meter.\n * This only works AFTER the interview process\n */\n public static getSupportedRateTypesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<RateType[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(MeterCCValues.supportedRateTypes.endpoint(endpoint.index));\n }\n public translatePropertyKey(ctx: GetValueDB, property: string | number, propertyKey: string | number): string | undefined {\n if (property === \"value\" && typeof propertyKey === \"number\") {\n const { meterType, rateType, scale } = splitPropertyKey(propertyKey);\n let ret: string;\n if (meterType !== 0) {\n ret = `${getMeterName(meterType)}_${(getMeterScale(meterType, scale)\n ?? getUnknownMeterScale(scale)).label}`;\n }\n else {\n ret = \"default\";\n }\n if (rateType !== RateType.Unspecified) {\n ret += \"_\" + getEnumMemberName(RateType, rateType);\n }\n return ret;\n }\n else if (property === \"reset\" && typeof propertyKey === \"number\") {\n return getMeterName(propertyKey);\n }\n return super.translatePropertyKey(ctx, property, propertyKey);\n }\n}\n// @publicAPI\nexport interface MeterCCReportOptions {\n type: number;\n scale: number;\n value: number;\n previousValue?: MaybeNotKnown<number>;\n rateType?: RateType;\n deltaTime?: MaybeUnknown<number>;\n}\n@CCCommand(MeterCommand.Report)\nexport class MeterCCReport extends MeterCC {\n public constructor(options: WithAddress<MeterCCReportOptions>) {\n super(options);\n this.type = options.type;\n this.scale = options.scale;\n this.value = options.value;\n this.previousValue = options.previousValue;\n this.rateType = options.rateType ?? RateType.Unspecified;\n this.deltaTime = options.deltaTime ?? UNKNOWN_STATE;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MeterCCReport {\n const { type, rateType, scale1, value, bytesRead } = parseMeterValueAndInfo(raw.payload, 0);\n let offset = bytesRead;\n const floatSize = bytesRead - 2;\n let deltaTime: MaybeUnknown<number>;\n let previousValue: MaybeNotKnown<number>;\n if (raw.payload.length >= offset + 2) {\n deltaTime = raw.payload.readUInt16BE(offset);\n offset += 2;\n if (deltaTime === 0xffff) {\n deltaTime = UNKNOWN_STATE;\n }\n if (\n // Previous value is included only if delta time is not 0\n deltaTime !== 0\n && raw.payload.length >= offset + floatSize) {\n const { value: prevValue } = parseFloatWithScale(\n // This float is split in the payload\n Bytes.concat([\n [raw.payload[1]],\n raw.payload.subarray(offset),\n ]));\n offset += floatSize;\n previousValue = prevValue;\n }\n }\n else {\n // 0 means that no previous value is included\n deltaTime = 0;\n }\n const scale = parseScale(scale1, raw.payload, offset);\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n rateType,\n value,\n deltaTime,\n previousValue,\n scale,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const ccVersion = getEffectiveCCVersion(ctx, this);\n const meter = getMeter(this.type);\n const scale = getMeterScale(this.type, this.scale)\n ?? getUnknownMeterScale(this.scale);\n // Filter out unknown meter types and scales, unless the strict validation is disabled\n const measurementValidation = !ctx.getDeviceConfig?.(this.nodeId as number)?.compat?.disableStrictMeasurementValidation;\n if (measurementValidation) {\n validatePayload.withReason(`Unknown meter type ${num2hex(this.type)} or corrupted data`)(!!meter);\n validatePayload.withReason(`Unknown meter scale ${num2hex(this.scale)} or corrupted data`)(scale.label !== getUnknownMeterScale(this.scale).label);\n // Filter out unsupported meter types, scales and rate types if possible\n if (ccVersion >= 2) {\n const expectedType = this.getValue<number>(ctx, MeterCCValues.type);\n if (expectedType != undefined) {\n validatePayload.withReason(\"Unexpected meter type or corrupted data\")(this.type === expectedType);\n }\n const supportedScales = this.getValue<number[]>(ctx, MeterCCValues.supportedScales);\n if (supportedScales?.length) {\n validatePayload.withReason(`Unsupported meter scale ${scale.label} or corrupted data`)(supportedScales.includes(this.scale));\n }\n const supportedRateTypes = this.getValue<RateType[]>(ctx, MeterCCValues.supportedRateTypes);\n if (supportedRateTypes?.length) {\n validatePayload.withReason(`Unsupported rate type ${getEnumMemberName(RateType, this.rateType)} or corrupted data`)(supportedRateTypes.includes(this.rateType));\n }\n }\n }\n const valueValue = MeterCCValues.value(this.type, this.rateType, this.scale);\n this.setMetadata(ctx, valueValue, {\n ...valueValue.meta,\n label: getValueLabel(this.type, this.scale, this.rateType),\n unit: scale.unit,\n ccSpecific: {\n meterType: this.type,\n scale: this.scale,\n rateType: this.rateType,\n },\n });\n this.setValue(ctx, valueValue, this.value);\n return true;\n }\n public type: number;\n public scale: number;\n public value: number;\n public previousValue: MaybeNotKnown<number>;\n public rateType: RateType;\n public deltaTime: MaybeUnknown<number>;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const { data: typeAndValue, floatParams, scale2 } = encodeMeterValueAndInfo(this.type, this.rateType, this.scale, this.value);\n const deltaTime = this.deltaTime ?? 0xffff;\n const deltaTimeBytes = new Bytes(2);\n deltaTimeBytes.writeUInt16BE(deltaTime, 0);\n this.payload = Bytes.concat([\n typeAndValue,\n deltaTimeBytes,\n ]);\n if (this.deltaTime !== 0 && this.previousValue != undefined) {\n // Encode the float, but only keep the value bytes\n const prevValueBytes = encodeFloatWithScale(this.previousValue, 0, // we discard the scale anyways\n floatParams).subarray(1);\n this.payload = Bytes.concat([\n this.payload,\n prevValueBytes,\n ]);\n }\n if (scale2 != undefined) {\n this.payload = Bytes.concat([\n this.payload,\n [scale2],\n ]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const scale = getMeterScale(this.type, this.scale)\n ?? getUnknownMeterScale(this.scale);\n const message: MessageRecord = {\n \"meter type\": getMeterName(this.type),\n scale: scale.label,\n \"rate type\": getEnumMemberName(RateType, this.rateType),\n value: this.value,\n };\n if (this.deltaTime !== UNKNOWN_STATE) {\n message[\"time delta\"] = `${this.deltaTime} seconds`;\n }\n if (this.previousValue != undefined) {\n message[\"prev. value\"] = this.previousValue;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\nfunction testResponseForMeterGet(sent: MeterCCGet, received: MeterCCReport) {\n // We expect a Meter Report that matches the requested scale and rate type\n // (if they were requested)\n return ((sent.scale == undefined || sent.scale === received.scale)\n && (sent.rateType == undefined || sent.rateType == received.rateType));\n}\n// @publicAPI\nexport interface MeterCCGetOptions {\n scale?: number;\n rateType?: RateType;\n}\n@CCCommand(MeterCommand.Get)\n@expectedCCResponse(MeterCCReport, testResponseForMeterGet)\nexport class MeterCCGet extends MeterCC {\n public constructor(options: WithAddress<MeterCCGetOptions>) {\n super(options);\n this.rateType = options.rateType;\n this.scale = options.scale;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MeterCCGet {\n let rateType: RateType | undefined;\n let scale: number | undefined;\n if (raw.payload.length >= 1) {\n rateType = (raw.payload[0] & 192) >>> 6;\n scale = (raw.payload[0] & 56) >>> 3;\n if (scale === 7) {\n validatePayload(raw.payload.length >= 2);\n scale += raw.payload[1];\n }\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n rateType,\n scale,\n });\n }\n public rateType: RateType | undefined;\n public scale: number | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n let scale1: number;\n let scale2: number | undefined;\n let bufferLength = 0;\n const ccVersion = getEffectiveCCVersion(ctx, this);\n if (this.scale == undefined) {\n scale1 = 0;\n }\n else if (ccVersion >= 4 && this.scale >= 7) {\n scale1 = 7;\n scale2 = this.scale >>> 3;\n bufferLength = 2;\n }\n else if (ccVersion >= 3) {\n scale1 = this.scale & 0b111;\n bufferLength = 1;\n }\n else if (ccVersion >= 2) {\n scale1 = this.scale & 0b11;\n bufferLength = 1;\n }\n else {\n scale1 = 0;\n }\n let rateTypeFlags = 0;\n if (ccVersion >= 4 && this.rateType != undefined) {\n rateTypeFlags = this.rateType & 0b11;\n bufferLength = Math.max(bufferLength, 1);\n }\n this.payload = Bytes.alloc(bufferLength, 0);\n this.payload[0] = (rateTypeFlags << 6) | (scale1 << 3);\n if (scale2)\n this.payload[1] = scale2;\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.rateType != undefined) {\n message[\"rate type\"] = getEnumMemberName(RateType, this.rateType);\n }\n if (this.scale != undefined) {\n if (ctx) {\n // Try to lookup the meter type to translate the scale\n const type = this.getValue<number>(ctx, MeterCCValues.type);\n if (type != undefined) {\n message.scale = (getMeterScale(type, this.scale)\n ?? getUnknownMeterScale(this.scale)).label;\n }\n }\n else {\n message.scale = this.scale;\n }\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface MeterCCSupportedReportOptions {\n type: number;\n supportsReset: boolean;\n supportedScales: readonly number[];\n supportedRateTypes: readonly RateType[];\n}\n@CCCommand(MeterCommand.SupportedReport)\n@ccValueProperty(\"type\", MeterCCValues.type)\n@ccValueProperty(\"supportsReset\", MeterCCValues.supportsReset)\n@ccValueProperty(\"supportedScales\", MeterCCValues.supportedScales)\n@ccValueProperty(\"supportedRateTypes\", MeterCCValues.supportedRateTypes)\nexport class MeterCCSupportedReport extends MeterCC {\n public constructor(options: WithAddress<MeterCCSupportedReportOptions>) {\n super(options);\n this.type = options.type;\n this.supportsReset = options.supportsReset;\n this.supportedScales = options.supportedScales;\n this.supportedRateTypes = options.supportedRateTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MeterCCSupportedReport {\n validatePayload(raw.payload.length >= 2);\n const type = raw.payload[0] & 31;\n const supportsReset = !!(raw.payload[0] & 128);\n const hasMoreScales = !!(raw.payload[1] & 128);\n let supportedScales: number[] | undefined;\n if (hasMoreScales) {\n // The bitmask is spread out\n validatePayload(raw.payload.length >= 3);\n const extraBytes = raw.payload[2];\n validatePayload(raw.payload.length >= 3 + extraBytes);\n // The bitmask is the original payload byte plus all following bytes\n // Since the first byte only has 7 bits, we need to reduce all following bits by 1\n supportedScales = parseBitMask(Bytes.concat([\n [raw.payload[1] & 127],\n raw.payload.subarray(3, 3 + extraBytes),\n ]), 0).map((scale) => (scale >= 8 ? scale - 1 : scale));\n }\n else {\n // only 7 bits in the bitmask. Bit 7 is 0, so no need to mask it out\n supportedScales = parseBitMask(Bytes.from([raw.payload[1]]), 0);\n }\n // This is only present in V4+\n const supportedRateTypes: RateType[] = parseBitMask(Bytes.from([(raw.payload[0] & 96) >>> 5]), 1);\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n supportsReset,\n supportedScales,\n supportedRateTypes,\n });\n }\n public readonly type: number;\n public readonly supportsReset: boolean;\n public readonly supportedScales: readonly number[];\n public readonly supportedRateTypes: readonly RateType[];\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (!this.supportsReset)\n return true;\n const ccVersion = getEffectiveCCVersion(ctx, this);\n // Create reset values\n if (ccVersion < 6) {\n this.ensureMetadata(ctx, MeterCCValues.resetAll);\n }\n else {\n for (const scale of this.supportedScales) {\n // Only accumulated values can be reset\n if (!isAccumulatedValue(this.type, scale))\n continue;\n for (const rateType of this.supportedRateTypes) {\n const resetSingleValue = MeterCCValues.resetSingle(this.type, rateType, scale);\n this.ensureMetadata(ctx, resetSingleValue, {\n ...resetSingleValue.meta,\n label: `Reset ${getValueLabel(this.type, scale, rateType)}`,\n });\n }\n }\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const typeByte = (this.type & 31)\n | (this.supportedRateTypes.includes(RateType.Consumed)\n ? 32\n : 0)\n | (this.supportedRateTypes.includes(RateType.Produced)\n ? 64\n : 0)\n | (this.supportsReset ? 128 : 0);\n const supportedScales = encodeBitMask(this.supportedScales, undefined, \n // The first byte only has 7 bits for the bitmask,\n // so we add a fake bit for the value -1 and later shift\n // the first byte one to the right\n -1);\n const scalesByte1 = (supportedScales[0] >>> 1)\n | (supportedScales.length > 1 ? 128 : 0);\n this.payload = Bytes.from([\n typeByte,\n scalesByte1,\n ]);\n if (supportedScales.length > 1) {\n this.payload = Bytes.concat([\n this.payload,\n [supportedScales.length - 1],\n Bytes.from(supportedScales.subarray(1)),\n ]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"meter type\": getMeterName(this.type),\n \"supports reset\": this.supportsReset,\n \"supported scales\": this.supportedScales\n .map((scale) => `\n\u00B7 ${(getMeterScale(this.type, scale) ?? getUnknownMeterScale(scale)).label}`)\n .join(\"\"),\n \"supported rate types\": this.supportedRateTypes\n .map((rt) => getEnumMemberName(RateType, rt))\n .join(\", \"),\n };\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(MeterCommand.SupportedGet)\n@expectedCCResponse(MeterCCSupportedReport)\nexport class MeterCCSupportedGet extends MeterCC {\n}\n// @publicAPI\nexport type MeterCCResetOptions = AllOrNone<{\n type: number;\n scale: number;\n rateType: RateType;\n targetValue: number;\n}>;\n@CCCommand(MeterCommand.Reset)\n@useSupervision()\nexport class MeterCCReset extends MeterCC {\n public constructor(options: WithAddress<MeterCCResetOptions>) {\n super(options);\n this.type = options.type;\n this.scale = options.scale;\n this.rateType = options.rateType;\n this.targetValue = options.targetValue;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MeterCCReset {\n if (raw.payload.length === 0) {\n return new this({\n nodeId: ctx.sourceNodeId,\n });\n }\n const { type, rateType, scale1, value: targetValue, bytesRead: scale2Offset, } = parseMeterValueAndInfo(raw.payload, 0);\n const scale = parseScale(scale1, raw.payload, scale2Offset);\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n rateType,\n targetValue,\n scale,\n });\n }\n public type: number | undefined;\n public scale: number | undefined;\n public rateType: RateType | undefined;\n public targetValue: number | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.type != undefined\n && this.scale != undefined\n && this.rateType != undefined\n && this.targetValue != undefined) {\n const { data: typeAndValue, scale2 } = encodeMeterValueAndInfo(this.type, this.rateType, this.scale, this.targetValue);\n this.payload = typeAndValue;\n if (scale2 != undefined) {\n this.payload = Bytes.concat([\n this.payload,\n [scale2],\n ]);\n }\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.type != undefined) {\n message.type = getMeterName(this.type);\n }\n if (this.rateType != undefined) {\n message[\"rate type\"] = getEnumMemberName(RateType, this.rateType);\n }\n if (this.type != undefined && this.scale != undefined) {\n message.scale = (getMeterScale(this.type, this.scale)\n ?? getUnknownMeterScale(this.scale)).label;\n }\n if (this.targetValue != undefined) {\n message[\"target value\"] = this.targetValue;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./MeterCC._validateArgs.js\";\nconst { validateArgs_MeterCCAPI_get, validateArgs_MeterCCAPI_sendReport, validateArgs_MeterCCAPI_getAll, validateArgs_MeterCCAPI_sendSupportedReport, validateArgs_MeterCCAPI_reset } = __validateArgs;\nimport type { GetDeviceConfig } from \"@zwave-js/config\";\nimport { CommandClasses, type ControlsCC, type EndpointId, type FloatParameters, type GetEndpoint, type GetNode, type GetSupportedCCVersion, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type NodeId, type SinglecastCC, type SupervisionResult, type SupportsCC, UNKNOWN_STATE, ValueMetadata, type WithAddress, encodeBitMask, encodeFloatWithScale, getFloatParameters, getMeter, getMeterName, getMeterScale, getUnknownMeterScale, parseBitMask, parseFloatWithScale, timespan, validatePayload, } from \"@zwave-js/core\";\nimport { type AllOrNone, Bytes, type BytesView, getEnumMemberName, num2hex, pick, } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, throwMissingPropertyKey, throwUnsupportedProperty, throwUnsupportedPropertyKey, throwWrongValueType, } from \"../lib/API.js\";\nimport { meterTypesToPropertyKey } from \"../lib/CCValueUtils.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, getEffectiveCCVersion, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, getCommandClass, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { MeterCommand, type MeterReading, RateType } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { MeterCCValues } from \"./_CCValues.generated.js\";\nexport { MeterCCValues };\nfunction splitPropertyKey(key: number): {\n meterType: number;\n rateType: RateType;\n scale: number;\n} {\n return {\n rateType: key & 0xff,\n scale: (key >>> 8) & 0xff,\n meterType: key >>> 16,\n };\n}\nfunction getValueLabel(meterType: number, scale: number, rateType: RateType, suffix?: string): string {\n let ret = getMeterName(meterType);\n const scaleLabel = (getMeterScale(meterType, scale) ?? getUnknownMeterScale(scale)).label;\n switch (rateType) {\n case RateType.Consumed:\n ret += ` Consumption [${scaleLabel}]`;\n break;\n case RateType.Produced:\n ret += ` Production [${scaleLabel}]`;\n break;\n default:\n ret += ` [${scaleLabel}]`;\n }\n if (suffix) {\n ret += ` (${suffix})`;\n }\n return ret;\n}\nfunction parseMeterValueAndInfo(data: BytesView, offset: number): {\n type: number;\n rateType: RateType;\n scale1: number;\n value: number;\n bytesRead: number;\n} {\n validatePayload(data.length >= offset + 1);\n const type = data[offset] & 31;\n const rateType = (data[offset] & 96) >>> 5;\n const scale1Bit2 = (data[offset] & 128) >>> 7;\n const { scale: scale1Bits10, value, bytesRead, } = parseFloatWithScale(data.subarray(offset + 1));\n return {\n type,\n rateType,\n // The scale is composed of two fields\n scale1: (scale1Bit2 << 2) | scale1Bits10,\n value,\n // We've read one byte more than the float contains\n bytesRead: bytesRead + 1,\n };\n}\nfunction encodeMeterValueAndInfo(type: number, rateType: RateType, scale: number, value: number): {\n data: Bytes;\n floatParams: FloatParameters;\n scale2: number | undefined;\n} {\n // We need at least 2 bytes\n const scale1 = scale >= 7 ? 7 : scale & 0b111;\n const scale1Bits10 = scale1 & 0b11;\n const scale1Bit2 = scale1 >>> 2;\n const scale2 = scale >= 7 ? scale - 7 : undefined;\n const typeByte = (type & 31)\n | ((rateType & 0b11) << 5)\n | (scale1Bit2 << 7);\n const floatParams = getFloatParameters(value);\n const valueBytes = encodeFloatWithScale(value, scale1Bits10, floatParams);\n return {\n data: Bytes.concat([[typeByte], valueBytes]),\n floatParams: pick(floatParams, [\"precision\", \"size\"]),\n scale2,\n };\n}\nfunction parseScale(scale1: number, data: BytesView, scale2Offset: number): number {\n if (scale1 === 7) {\n validatePayload(data.length >= scale2Offset + 1);\n const scale2 = data[scale2Offset];\n return scale1 + scale2;\n }\n else {\n return scale1;\n }\n}\nexport function isAccumulatedValue(meterType: number, scale: number): boolean {\n // FIXME: We should probably move the meter definitions into code\n switch (meterType) {\n case 0x01: // Electric\n return (\n // kVarh\n // Pulse count\n scale === 0x00 // kWh\n || scale === 0x01 // kVAh\n || scale === 0x03\n || scale === 0x08);\n case 0x02: // Gas\n return (\n // Pulse count\n // ft\u00B3\n scale === 0x00 // m\u00B3\n || scale === 0x01\n || scale === 0x03);\n case 0x03: // Water\n return (\n // Pulse count\n // US gallons\n scale === 0x00 // m\u00B3\n || scale === 0x01 // ft\u00B3\n || scale === 0x02\n || scale === 0x03);\n case 0x04: // Heating\n return scale === 0x00; // kWh\n case 0x05: // Cooling\n return scale === 0x00; // kWh\n }\n return false;\n}\n@API(CommandClasses.Meter)\nexport class MeterCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: MeterCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case MeterCommand.Get:\n case MeterCommand.Report:\n return true; // This is mandatory\n case MeterCommand.SupportedGet:\n case MeterCommand.SupportedReport:\n return this.version >= 2;\n case MeterCommand.Reset: {\n const ret = this.tryGetValueDB()?.getValue<boolean>({\n commandClass: getCommandClass(this),\n endpoint: this.endpoint.index,\n property: \"supportsReset\",\n });\n return ret === true;\n }\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: MeterCCAPI, { property, propertyKey }) {\n switch (property) {\n case \"value\":\n case \"previousValue\":\n case \"deltaTime\": {\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n else if (typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n const { rateType, scale } = splitPropertyKey(propertyKey);\n return (await this.get({\n rateType,\n scale,\n }))?.[property];\n }\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n @validateArgs_MeterCCAPI_get()\n public async get(options?: MeterCCGetOptions): Promise<MeterReading | undefined> {\n this.assertSupportsCommand(MeterCommand, MeterCommand.Get);\n const cc = new MeterCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n const response = await this.host.sendCommand<MeterCCReport>(cc, this.commandOptions);\n if (response) {\n return {\n type: response.type,\n scale: getMeterScale(response.type, response.scale)\n ?? getUnknownMeterScale(response.scale),\n ...pick(response, [\n \"value\",\n \"previousValue\",\n \"rateType\",\n \"deltaTime\",\n ]),\n };\n }\n }\n @validateArgs_MeterCCAPI_sendReport()\n public async sendReport(options: MeterCCReportOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MeterCommand, MeterCommand.Report);\n const cc = new MeterCCReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_MeterCCAPI_getAll()\n public async getAll(accumulatedOnly: boolean = false): Promise<MeterReading[]> {\n const valueDB = this.tryGetValueDB();\n if (this.version >= 2) {\n const meterType = valueDB?.getValue<number>(MeterCCValues.type.endpoint(this.endpoint.index));\n const supportedScales = valueDB?.getValue<number[]>(MeterCCValues.supportedScales.endpoint(this.endpoint.index)) ?? [];\n const supportedRateTypes = valueDB?.getValue<RateType[]>(MeterCCValues.supportedRateTypes.endpoint(this.endpoint.index)) ?? [];\n const rateTypes = supportedRateTypes.length\n ? supportedRateTypes\n : [undefined];\n const ret = [];\n for (const rateType of rateTypes) {\n for (const scale of supportedScales) {\n // Skip non-accumulated values if requested\n if (accumulatedOnly\n && meterType != undefined\n && !isAccumulatedValue(meterType, scale)) {\n continue;\n }\n const response = await this.get({\n scale,\n rateType,\n });\n if (response)\n ret.push(response);\n }\n }\n return ret;\n }\n else {\n const response = await this.get();\n return response ? [response] : [];\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getSupported() {\n this.assertSupportsCommand(MeterCommand, MeterCommand.SupportedGet);\n const cc = new MeterCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<MeterCCSupportedReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"type\",\n \"supportsReset\",\n \"supportedScales\",\n \"supportedRateTypes\",\n ]);\n }\n }\n @validateArgs_MeterCCAPI_sendSupportedReport()\n public async sendSupportedReport(options: MeterCCSupportedReportOptions): Promise<void> {\n this.assertSupportsCommand(MeterCommand, MeterCommand.SupportedReport);\n const cc = new MeterCCSupportedReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_MeterCCAPI_reset()\n public async reset(options?: MeterCCResetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(MeterCommand, MeterCommand.Reset);\n const cc = new MeterCCReset({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: MeterCCAPI, { property, propertyKey }, value) {\n if (property !== \"reset\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n else if (propertyKey != undefined\n && typeof propertyKey !== \"number\") {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n else if (value !== true) {\n throwWrongValueType(this.ccId, property, \"true\", value === false ? \"false\" : typeof value);\n }\n if (typeof propertyKey === \"number\") {\n const { meterType, scale, rateType } = splitPropertyKey(propertyKey);\n return this.reset({\n type: meterType,\n scale,\n rateType,\n targetValue: 0,\n });\n }\n else {\n return this.reset();\n }\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property, propertyKey }, _value, _options) => {\n if (property !== \"reset\")\n return;\n if (typeof propertyKey === \"number\") {\n // Reset single\n const { meterType, rateType, scale } = splitPropertyKey(propertyKey);\n const readingValueId = MeterCCValues.value(meterType, rateType, scale).endpoint(this.endpoint.index);\n return {\n optimisticallyUpdateRelatedValues: (supervisedAndSuccessful) => {\n if (!supervisedAndSuccessful)\n return;\n // After resetting a single reading with supervision, store zero\n // in the corresponding value\n const valueDB = this.tryGetValueDB();\n if (!valueDB)\n return;\n if (isAccumulatedValue(meterType, scale)) {\n valueDB.setValue({\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property,\n propertyKey,\n }, 0);\n }\n },\n verifyChanges: () => {\n this.schedulePoll(readingValueId, 0, { transition: \"fast\" });\n },\n };\n }\n else {\n // Reset all\n const valueDB = this.tryGetValueDB();\n if (!valueDB)\n return;\n const accumulatedValues = valueDB.findValues((vid) => vid.commandClass === this.ccId\n && vid.endpoint === this.endpoint.index\n && MeterCCValues.value.is(vid)).filter(({ propertyKey }) => {\n if (typeof propertyKey !== \"number\")\n return false;\n const { meterType, scale } = splitPropertyKey(propertyKey);\n return isAccumulatedValue(meterType, scale);\n });\n return {\n optimisticallyUpdateRelatedValues: (supervisedAndSuccessful) => {\n if (!supervisedAndSuccessful)\n return;\n // After setting the reset all value with supervision,\n // reset all accumulated values, since we know they are now zero.\n for (const value of accumulatedValues) {\n valueDB.setValue(value, 0);\n }\n },\n verifyChanges: () => {\n // Poll all accumulated values, unless they were updated by the device\n for (const valueID of accumulatedValues) {\n this.schedulePoll(valueID, 0, { transition: \"fast\" });\n }\n },\n };\n }\n };\n}\n@commandClass(CommandClasses.Meter)\n@implementedVersion(6)\n@ccValues(MeterCCValues)\nexport class MeterCC extends CommandClass {\n declare ccCommand: MeterCommand;\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.Meter, 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 >= 2) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying meter support...\",\n direction: \"outbound\",\n });\n const suppResp = await api.getSupported();\n if (suppResp) {\n const logMessage = `received meter support:\ntype: ${getMeterName(suppResp.type)}\nsupported scales: ${suppResp.supportedScales\n .map((s) => (getMeterScale(suppResp.type, s)\n ?? getUnknownMeterScale(s)).label)\n .map((label) => `\\n\u00B7 ${label}`)\n .join(\"\")}\nsupported rate types: ${suppResp.supportedRateTypes\n .map((rt) => getEnumMemberName(RateType, rt))\n .map((label) => `\\n\u00B7 ${label}`)\n .join(\"\")}\nsupports reset: ${suppResp.supportsReset}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying meter support timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n }\n // Query current meter 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.Meter, 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: `querying default meter value...`,\n direction: \"outbound\",\n });\n await api.get();\n }\n else {\n const type: number = this.getValue(ctx, MeterCCValues.type)\n ?? 0;\n const supportedScales: readonly number[] = this.getValue(ctx, MeterCCValues.supportedScales) ?? [];\n const supportedRateTypes: readonly RateType[] = this.getValue(ctx, MeterCCValues.supportedRateTypes) ?? [];\n const rateTypes = supportedRateTypes.length\n ? supportedRateTypes\n : [undefined];\n const total = rateTypes.length * supportedScales.length;\n let completed = 0;\n for (const rateType of rateTypes) {\n for (const scale of supportedScales) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `querying meter value (type = ${getMeterName(type)}, scale = ${(getMeterScale(type, scale)\n ?? getUnknownMeterScale(scale)).label}${rateType != undefined\n ? `, rate type = ${getEnumMemberName(RateType, rateType)}`\n : \"\"})...`,\n direction: \"outbound\",\n });\n await api.get({ scale, rateType });\n options?.onProgress?.(++completed, total);\n }\n }\n }\n }\n public shouldRefreshValues(this: SinglecastCC<this>, ctx: GetValueDB & GetSupportedCCVersion & GetDeviceConfig & GetNode<NodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>>): boolean {\n // Poll the device when all of the supported values were last updated longer than 6 hours ago.\n // This may lead to some values not being updated, but the user may have disabled some unnecessary\n // reports to reduce traffic.\n const valueDB = ctx.tryGetValueDB(this.nodeId);\n if (!valueDB)\n return true;\n const values = this.getDefinedValueIDs(ctx).filter((v) => MeterCCValues.value.is(v));\n return values.every((v) => {\n const lastUpdated = valueDB.getTimestamp(v);\n return (lastUpdated == undefined\n || Date.now() - lastUpdated > timespan.hours(6));\n });\n }\n /**\n * Returns which type this meter has.\n * This only works AFTER the interview process\n */\n public static getMeterTypeCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<number> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(MeterCCValues.type.endpoint(endpoint.index));\n }\n /**\n * Returns which scales are supported by this meter.\n * This only works AFTER the interview process\n */\n public static getSupportedScalesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<number[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(MeterCCValues.supportedScales.endpoint(endpoint.index));\n }\n /**\n * Returns whether reset is supported by this meter.\n * This only works AFTER the interview process\n */\n public static supportsResetCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<boolean> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(MeterCCValues.supportsReset.endpoint(endpoint.index));\n }\n /**\n * Returns which rate types are supported by this meter.\n * This only works AFTER the interview process\n */\n public static getSupportedRateTypesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<RateType[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(MeterCCValues.supportedRateTypes.endpoint(endpoint.index));\n }\n public translatePropertyKey(ctx: GetValueDB, property: string | number, propertyKey: string | number): string | undefined {\n if (property === \"value\" && typeof propertyKey === \"number\") {\n const { meterType, rateType, scale } = splitPropertyKey(propertyKey);\n let ret: string;\n if (meterType !== 0) {\n ret = `${getMeterName(meterType)}_${(getMeterScale(meterType, scale)\n ?? getUnknownMeterScale(scale)).label}`;\n }\n else {\n ret = \"default\";\n }\n if (rateType !== RateType.Unspecified) {\n ret += \"_\" + getEnumMemberName(RateType, rateType);\n }\n return ret;\n }\n else if (property === \"reset\" && typeof propertyKey === \"number\") {\n return getMeterName(propertyKey);\n }\n return super.translatePropertyKey(ctx, property, propertyKey);\n }\n}\n// @publicAPI\nexport interface MeterCCReportOptions {\n type: number;\n scale: number;\n value: number;\n previousValue?: MaybeNotKnown<number>;\n rateType?: RateType;\n deltaTime?: MaybeUnknown<number>;\n}\n@CCCommand(MeterCommand.Report)\nexport class MeterCCReport extends MeterCC {\n public constructor(options: WithAddress<MeterCCReportOptions>) {\n super(options);\n this.type = options.type;\n this.scale = options.scale;\n this.value = options.value;\n this.previousValue = options.previousValue;\n this.rateType = options.rateType ?? RateType.Unspecified;\n this.deltaTime = options.deltaTime ?? UNKNOWN_STATE;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MeterCCReport {\n const { type, rateType, scale1, value, bytesRead } = parseMeterValueAndInfo(raw.payload, 0);\n let offset = bytesRead;\n const floatSize = bytesRead - 2;\n let deltaTime: MaybeUnknown<number>;\n let previousValue: MaybeNotKnown<number>;\n if (raw.payload.length >= offset + 2) {\n deltaTime = raw.payload.readUInt16BE(offset);\n offset += 2;\n if (deltaTime === 0xffff) {\n deltaTime = UNKNOWN_STATE;\n }\n if (\n // Previous value is included only if delta time is not 0\n deltaTime !== 0\n && raw.payload.length >= offset + floatSize) {\n const { value: prevValue } = parseFloatWithScale(\n // This float is split in the payload\n Bytes.concat([\n [raw.payload[1]],\n raw.payload.subarray(offset),\n ]));\n offset += floatSize;\n previousValue = prevValue;\n }\n }\n else {\n // 0 means that no previous value is included\n deltaTime = 0;\n }\n const scale = parseScale(scale1, raw.payload, offset);\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n rateType,\n value,\n deltaTime,\n previousValue,\n scale,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n const ccVersion = getEffectiveCCVersion(ctx, this);\n const meter = getMeter(this.type);\n const scale = getMeterScale(this.type, this.scale)\n ?? getUnknownMeterScale(this.scale);\n // Filter out unknown meter types and scales, unless the strict validation is disabled\n const measurementValidation = !ctx.getDeviceConfig?.(this.nodeId as number)?.compat?.disableStrictMeasurementValidation;\n if (measurementValidation) {\n validatePayload.withReason(`Unknown meter type ${num2hex(this.type)} or corrupted data`)(!!meter);\n validatePayload.withReason(`Unknown meter scale ${num2hex(this.scale)} or corrupted data`)(scale.label !== getUnknownMeterScale(this.scale).label);\n // Filter out unsupported meter types, scales and rate types if possible\n if (ccVersion >= 2) {\n const expectedType = this.getValue<number>(ctx, MeterCCValues.type);\n if (expectedType != undefined) {\n validatePayload.withReason(\"Unexpected meter type or corrupted data\")(this.type === expectedType);\n }\n const supportedScales = this.getValue<number[]>(ctx, MeterCCValues.supportedScales);\n if (supportedScales?.length) {\n validatePayload.withReason(`Unsupported meter scale ${scale.label} or corrupted data`)(supportedScales.includes(this.scale));\n }\n const supportedRateTypes = this.getValue<RateType[]>(ctx, MeterCCValues.supportedRateTypes);\n if (supportedRateTypes?.length) {\n validatePayload.withReason(`Unsupported rate type ${getEnumMemberName(RateType, this.rateType)} or corrupted data`)(supportedRateTypes.includes(this.rateType));\n }\n }\n }\n const valueValue = MeterCCValues.value(this.type, this.rateType, this.scale);\n this.setMetadata(ctx, valueValue, {\n ...valueValue.meta,\n label: getValueLabel(this.type, this.scale, this.rateType),\n unit: scale.unit,\n ccSpecific: {\n meterType: this.type,\n scale: this.scale,\n rateType: this.rateType,\n },\n });\n this.setValue(ctx, valueValue, this.value);\n return true;\n }\n public type: number;\n public scale: number;\n public value: number;\n public previousValue: MaybeNotKnown<number>;\n public rateType: RateType;\n public deltaTime: MaybeUnknown<number>;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const { data: typeAndValue, floatParams, scale2 } = encodeMeterValueAndInfo(this.type, this.rateType, this.scale, this.value);\n const deltaTime = this.deltaTime ?? 0xffff;\n const deltaTimeBytes = new Bytes(2);\n deltaTimeBytes.writeUInt16BE(deltaTime, 0);\n this.payload = Bytes.concat([\n typeAndValue,\n deltaTimeBytes,\n ]);\n if (this.deltaTime !== 0 && this.previousValue != undefined) {\n // Encode the float, but only keep the value bytes\n const prevValueBytes = encodeFloatWithScale(this.previousValue, 0, // we discard the scale anyways\n floatParams).subarray(1);\n this.payload = Bytes.concat([\n this.payload,\n prevValueBytes,\n ]);\n }\n if (scale2 != undefined) {\n this.payload = Bytes.concat([\n this.payload,\n [scale2],\n ]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const scale = getMeterScale(this.type, this.scale)\n ?? getUnknownMeterScale(this.scale);\n const message: MessageRecord = {\n \"meter type\": getMeterName(this.type),\n scale: scale.label,\n \"rate type\": getEnumMemberName(RateType, this.rateType),\n value: this.value,\n };\n if (this.deltaTime !== UNKNOWN_STATE) {\n message[\"time delta\"] = `${this.deltaTime} seconds`;\n }\n if (this.previousValue != undefined) {\n message[\"prev. value\"] = this.previousValue;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\nfunction testResponseForMeterGet(sent: MeterCCGet, received: MeterCCReport) {\n // We expect a Meter Report that matches the requested scale and rate type\n // (if they were requested)\n return ((sent.scale == undefined || sent.scale === received.scale)\n && (sent.rateType == undefined || sent.rateType == received.rateType));\n}\n// @publicAPI\nexport interface MeterCCGetOptions {\n scale?: number;\n rateType?: RateType;\n}\n@CCCommand(MeterCommand.Get)\n@expectedCCResponse(MeterCCReport, testResponseForMeterGet)\nexport class MeterCCGet extends MeterCC {\n public constructor(options: WithAddress<MeterCCGetOptions>) {\n super(options);\n this.rateType = options.rateType;\n this.scale = options.scale;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MeterCCGet {\n let rateType: RateType | undefined;\n let scale: number | undefined;\n if (raw.payload.length >= 1) {\n rateType = (raw.payload[0] & 192) >>> 6;\n scale = (raw.payload[0] & 56) >>> 3;\n if (scale === 7) {\n validatePayload(raw.payload.length >= 2);\n scale += raw.payload[1];\n }\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n rateType,\n scale,\n });\n }\n public rateType: RateType | undefined;\n public scale: number | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n let scale1: number;\n let scale2: number | undefined;\n let bufferLength = 0;\n const ccVersion = getEffectiveCCVersion(ctx, this);\n if (this.scale == undefined) {\n scale1 = 0;\n }\n else if (ccVersion >= 4 && this.scale >= 7) {\n scale1 = 7;\n scale2 = this.scale >>> 3;\n bufferLength = 2;\n }\n else if (ccVersion >= 3) {\n scale1 = this.scale & 0b111;\n bufferLength = 1;\n }\n else if (ccVersion >= 2) {\n scale1 = this.scale & 0b11;\n bufferLength = 1;\n }\n else {\n scale1 = 0;\n }\n let rateTypeFlags = 0;\n if (ccVersion >= 4 && this.rateType != undefined) {\n rateTypeFlags = this.rateType & 0b11;\n bufferLength = Math.max(bufferLength, 1);\n }\n this.payload = Bytes.alloc(bufferLength, 0);\n this.payload[0] = (rateTypeFlags << 6) | (scale1 << 3);\n if (scale2)\n this.payload[1] = scale2;\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.rateType != undefined) {\n message[\"rate type\"] = getEnumMemberName(RateType, this.rateType);\n }\n if (this.scale != undefined) {\n if (ctx) {\n // Try to lookup the meter type to translate the scale\n const type = this.getValue<number>(ctx, MeterCCValues.type);\n if (type != undefined) {\n message.scale = (getMeterScale(type, this.scale)\n ?? getUnknownMeterScale(this.scale)).label;\n }\n }\n else {\n message.scale = this.scale;\n }\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface MeterCCSupportedReportOptions {\n type: number;\n supportsReset: boolean;\n supportedScales: readonly number[];\n supportedRateTypes: readonly RateType[];\n}\n@CCCommand(MeterCommand.SupportedReport)\n@ccValueProperty(\"type\", MeterCCValues.type)\n@ccValueProperty(\"supportsReset\", MeterCCValues.supportsReset)\n@ccValueProperty(\"supportedScales\", MeterCCValues.supportedScales)\n@ccValueProperty(\"supportedRateTypes\", MeterCCValues.supportedRateTypes)\nexport class MeterCCSupportedReport extends MeterCC {\n public constructor(options: WithAddress<MeterCCSupportedReportOptions>) {\n super(options);\n this.type = options.type;\n this.supportsReset = options.supportsReset;\n this.supportedScales = options.supportedScales;\n this.supportedRateTypes = options.supportedRateTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MeterCCSupportedReport {\n validatePayload(raw.payload.length >= 2);\n const type = raw.payload[0] & 31;\n const supportsReset = !!(raw.payload[0] & 128);\n const hasMoreScales = !!(raw.payload[1] & 128);\n let supportedScales: number[] | undefined;\n if (hasMoreScales) {\n // The bitmask is spread out\n validatePayload(raw.payload.length >= 3);\n const extraBytes = raw.payload[2];\n validatePayload(raw.payload.length >= 3 + extraBytes);\n // The bitmask is the original payload byte plus all following bytes\n // Since the first byte only has 7 bits, we need to reduce all following bits by 1\n supportedScales = parseBitMask(Bytes.concat([\n [raw.payload[1] & 127],\n raw.payload.subarray(3, 3 + extraBytes),\n ]), 0).map((scale) => (scale >= 8 ? scale - 1 : scale));\n }\n else {\n // only 7 bits in the bitmask. Bit 7 is 0, so no need to mask it out\n supportedScales = parseBitMask(Bytes.from([raw.payload[1]]), 0);\n }\n // This is only present in V4+\n const supportedRateTypes: RateType[] = parseBitMask(Bytes.from([(raw.payload[0] & 96) >>> 5]), 1);\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n supportsReset,\n supportedScales,\n supportedRateTypes,\n });\n }\n public readonly type: number;\n public readonly supportsReset: boolean;\n public readonly supportedScales: readonly number[];\n public readonly supportedRateTypes: readonly RateType[];\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (!this.supportsReset)\n return true;\n const ccVersion = getEffectiveCCVersion(ctx, this);\n // Create reset values\n if (ccVersion < 6) {\n this.ensureMetadata(ctx, MeterCCValues.resetAll);\n }\n else {\n for (const scale of this.supportedScales) {\n // Only accumulated values can be reset\n if (!isAccumulatedValue(this.type, scale))\n continue;\n for (const rateType of this.supportedRateTypes) {\n const resetSingleValue = MeterCCValues.resetSingle(this.type, rateType, scale);\n this.ensureMetadata(ctx, resetSingleValue, {\n ...resetSingleValue.meta,\n label: `Reset ${getValueLabel(this.type, scale, rateType)}`,\n });\n }\n }\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const typeByte = (this.type & 31)\n | (this.supportedRateTypes.includes(RateType.Consumed)\n ? 32\n : 0)\n | (this.supportedRateTypes.includes(RateType.Produced)\n ? 64\n : 0)\n | (this.supportsReset ? 128 : 0);\n const supportedScales = encodeBitMask(this.supportedScales, undefined, \n // The first byte only has 7 bits for the bitmask,\n // so we add a fake bit for the value -1 and later shift\n // the first byte one to the right\n -1);\n const scalesByte1 = (supportedScales[0] >>> 1)\n | (supportedScales.length > 1 ? 128 : 0);\n this.payload = Bytes.from([\n typeByte,\n scalesByte1,\n ]);\n if (supportedScales.length > 1) {\n this.payload = Bytes.concat([\n this.payload,\n [supportedScales.length - 1],\n Bytes.from(supportedScales.subarray(1)),\n ]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"meter type\": getMeterName(this.type),\n \"supports reset\": this.supportsReset,\n \"supported scales\": this.supportedScales\n .map((scale) => `\n\u00B7 ${(getMeterScale(this.type, scale) ?? getUnknownMeterScale(scale)).label}`)\n .join(\"\"),\n \"supported rate types\": this.supportedRateTypes\n .map((rt) => getEnumMemberName(RateType, rt))\n .join(\", \"),\n };\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(MeterCommand.SupportedGet)\n@expectedCCResponse(MeterCCSupportedReport)\nexport class MeterCCSupportedGet extends MeterCC {\n}\n// @publicAPI\nexport type MeterCCResetOptions = AllOrNone<{\n type: number;\n scale: number;\n rateType: RateType;\n targetValue: number;\n}>;\n@CCCommand(MeterCommand.Reset)\n@useSupervision()\nexport class MeterCCReset extends MeterCC {\n public constructor(options: WithAddress<MeterCCResetOptions>) {\n super(options);\n this.type = options.type;\n this.scale = options.scale;\n this.rateType = options.rateType;\n this.targetValue = options.targetValue;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): MeterCCReset {\n if (raw.payload.length === 0) {\n return new this({\n nodeId: ctx.sourceNodeId,\n });\n }\n const { type, rateType, scale1, value: targetValue, bytesRead: scale2Offset, } = parseMeterValueAndInfo(raw.payload, 0);\n const scale = parseScale(scale1, raw.payload, scale2Offset);\n return new this({\n nodeId: ctx.sourceNodeId,\n type,\n rateType,\n targetValue,\n scale,\n });\n }\n public type: number | undefined;\n public scale: number | undefined;\n public rateType: RateType | undefined;\n public targetValue: number | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.type != undefined\n && this.scale != undefined\n && this.rateType != undefined\n && this.targetValue != undefined) {\n const { data: typeAndValue, scale2 } = encodeMeterValueAndInfo(this.type, this.rateType, this.scale, this.targetValue);\n this.payload = typeAndValue;\n if (scale2 != undefined) {\n this.payload = Bytes.concat([\n this.payload,\n [scale2],\n ]);\n }\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.type != undefined) {\n message.type = getMeterName(this.type);\n }\n if (this.rateType != undefined) {\n message[\"rate type\"] = getEnumMemberName(RateType, this.rateType);\n }\n if (this.type != undefined && this.scale != undefined) {\n message.scale = (getMeterScale(this.type, this.scale)\n ?? getUnknownMeterScale(this.scale)).label;\n }\n if (this.targetValue != undefined) {\n message[\"target value\"] = this.targetValue;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["propertyKey"]
7
7
  }
@@ -357,6 +357,7 @@ let MultiChannelAssociationCC = (() => {
357
357
  return;
358
358
  }
359
359
  await this.refreshValues(ctx, {
360
+ tag: "interview",
360
361
  onProgress: /* @__PURE__ */ __name((completed, total) => node.reportInterviewProgress(completed, total), "onProgress")
361
362
  });
362
363
  await ccUtils.configureLifelineAssociations(ctx, endpoint);
@@ -366,10 +367,12 @@ let MultiChannelAssociationCC = (() => {
366
367
  const node = this.getNode(ctx);
367
368
  const endpoint = this.getEndpoint(ctx);
368
369
  const mcAPI = import_API.CCAPI.create(import_core.CommandClasses["Multi Channel Association"], ctx, endpoint).withOptions({
369
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
370
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
371
+ tag: options?.tag
370
372
  });
371
373
  const assocAPI = import_API.CCAPI.create(import_core.CommandClasses.Association, ctx, endpoint).withOptions({
372
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
374
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
375
+ tag: options?.tag
373
376
  });
374
377
  const mcGroupCount = this.getValue(ctx, import_CCValues_generated.MultiChannelAssociationCCValues.groupCount) ?? 0;
375
378
  const assocGroupCount = this.getValue(ctx, import_AssociationCC.AssociationCCValues.groupCount) || mcGroupCount;