@zwave-js/cc 15.1.1 → 15.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) hide show
  1. package/build/cjs/cc/AlarmSensorCC.d.ts +7 -7
  2. package/build/cjs/cc/AlarmSensorCC.js +22 -23
  3. package/build/cjs/cc/AlarmSensorCC.js.map +3 -3
  4. package/build/cjs/cc/AssociationCC.d.ts +8 -9
  5. package/build/cjs/cc/AssociationCC.js +29 -29
  6. package/build/cjs/cc/AssociationCC.js.map +3 -3
  7. package/build/cjs/cc/AssociationGroupInfoCC.d.ts +7 -7
  8. package/build/cjs/cc/AssociationGroupInfoCC.js +31 -32
  9. package/build/cjs/cc/AssociationGroupInfoCC.js.map +3 -3
  10. package/build/cjs/cc/BarrierOperatorCC.d.ts +8 -8
  11. package/build/cjs/cc/BarrierOperatorCC.js +35 -36
  12. package/build/cjs/cc/BarrierOperatorCC.js.map +3 -3
  13. package/build/cjs/cc/BasicCC.d.ts +4 -4
  14. package/build/cjs/cc/BasicCC.js +23 -24
  15. package/build/cjs/cc/BasicCC.js.map +3 -3
  16. package/build/cjs/cc/BasicWindowCoveringCC._validateArgs.d.ts +3 -0
  17. package/build/cjs/cc/BasicWindowCoveringCC._validateArgs.js +64 -0
  18. package/build/cjs/cc/BasicWindowCoveringCC._validateArgs.js.map +7 -0
  19. package/build/cjs/cc/BasicWindowCoveringCC.d.ts +90 -0
  20. package/build/cjs/cc/BasicWindowCoveringCC.js +273 -0
  21. package/build/cjs/cc/BasicWindowCoveringCC.js.map +7 -0
  22. package/build/cjs/cc/BatteryCC.d.ts +4 -7
  23. package/build/cjs/cc/BatteryCC.js +18 -20
  24. package/build/cjs/cc/BatteryCC.js.map +3 -3
  25. package/build/cjs/cc/BinarySensorCC.d.ts +5 -5
  26. package/build/cjs/cc/BinarySensorCC.js +20 -21
  27. package/build/cjs/cc/BinarySensorCC.js.map +3 -3
  28. package/build/cjs/cc/BinarySwitchCC._validateArgs.js +2 -2
  29. package/build/cjs/cc/BinarySwitchCC.d.ts +6 -6
  30. package/build/cjs/cc/BinarySwitchCC.js +26 -26
  31. package/build/cjs/cc/BinarySwitchCC.js.map +3 -3
  32. package/build/cjs/cc/CRC16CC.d.ts +3 -3
  33. package/build/cjs/cc/CRC16CC.js +15 -15
  34. package/build/cjs/cc/CRC16CC.js.map +3 -3
  35. package/build/cjs/cc/CentralSceneCC.d.ts +8 -8
  36. package/build/cjs/cc/CentralSceneCC.js +23 -24
  37. package/build/cjs/cc/CentralSceneCC.js.map +3 -3
  38. package/build/cjs/cc/ClimateControlScheduleCC.d.ts +6 -6
  39. package/build/cjs/cc/ClimateControlScheduleCC.js +19 -20
  40. package/build/cjs/cc/ClimateControlScheduleCC.js.map +3 -3
  41. package/build/cjs/cc/ClockCC.d.ts +3 -4
  42. package/build/cjs/cc/ClockCC.js +13 -14
  43. package/build/cjs/cc/ClockCC.js.map +3 -3
  44. package/build/cjs/cc/ColorSwitchCC.d.ts +3 -4
  45. package/build/cjs/cc/ColorSwitchCC.js +22 -24
  46. package/build/cjs/cc/ColorSwitchCC.js.map +3 -3
  47. package/build/cjs/cc/ConfigurationCC.d.ts +3 -3
  48. package/build/cjs/cc/ConfigurationCC.js +114 -115
  49. package/build/cjs/cc/ConfigurationCC.js.map +3 -3
  50. package/build/cjs/cc/DeviceResetLocallyCC.d.ts +2 -2
  51. package/build/cjs/cc/DeviceResetLocallyCC.js +5 -5
  52. package/build/cjs/cc/DeviceResetLocallyCC.js.map +1 -1
  53. package/build/cjs/cc/DoorLockCC.d.ts +29 -29
  54. package/build/cjs/cc/DoorLockCC.js +39 -40
  55. package/build/cjs/cc/DoorLockCC.js.map +3 -3
  56. package/build/cjs/cc/DoorLockLoggingCC.d.ts +4 -4
  57. package/build/cjs/cc/DoorLockLoggingCC.js +13 -14
  58. package/build/cjs/cc/DoorLockLoggingCC.js.map +3 -3
  59. package/build/cjs/cc/EnergyProductionCC.d.ts +2 -3
  60. package/build/cjs/cc/EnergyProductionCC.js.map +2 -2
  61. package/build/cjs/cc/EntryControlCC.d.ts +8 -8
  62. package/build/cjs/cc/EntryControlCC.js +41 -42
  63. package/build/cjs/cc/EntryControlCC.js.map +3 -3
  64. package/build/cjs/cc/FirmwareUpdateMetaDataCC.d.ts +9 -10
  65. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +52 -53
  66. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +3 -3
  67. package/build/cjs/cc/HailCC.js +2 -2
  68. package/build/cjs/cc/HailCC.js.map +1 -1
  69. package/build/cjs/cc/HumidityControlModeCC.d.ts +5 -5
  70. package/build/cjs/cc/HumidityControlModeCC.js +20 -21
  71. package/build/cjs/cc/HumidityControlModeCC.js.map +3 -3
  72. package/build/cjs/cc/HumidityControlOperatingStateCC.d.ts +3 -3
  73. package/build/cjs/cc/HumidityControlOperatingStateCC.js +9 -9
  74. package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +3 -3
  75. package/build/cjs/cc/HumidityControlSetpointCC.d.ts +6 -6
  76. package/build/cjs/cc/HumidityControlSetpointCC.js +43 -44
  77. package/build/cjs/cc/HumidityControlSetpointCC.js.map +3 -3
  78. package/build/cjs/cc/InclusionControllerCC.d.ts +2 -3
  79. package/build/cjs/cc/InclusionControllerCC.js.map +2 -2
  80. package/build/cjs/cc/IndicatorCC.d.ts +3 -3
  81. package/build/cjs/cc/IndicatorCC.js +50 -52
  82. package/build/cjs/cc/IndicatorCC.js.map +3 -3
  83. package/build/cjs/cc/IrrigationCC.d.ts +3 -3
  84. package/build/cjs/cc/IrrigationCC.js +74 -75
  85. package/build/cjs/cc/IrrigationCC.js.map +3 -3
  86. package/build/cjs/cc/LanguageCC.d.ts +5 -6
  87. package/build/cjs/cc/LanguageCC.js +14 -15
  88. package/build/cjs/cc/LanguageCC.js.map +3 -3
  89. package/build/cjs/cc/LockCC.d.ts +4 -4
  90. package/build/cjs/cc/LockCC.js +10 -10
  91. package/build/cjs/cc/LockCC.js.map +3 -3
  92. package/build/cjs/cc/ManufacturerProprietaryCC.d.ts +3 -3
  93. package/build/cjs/cc/ManufacturerProprietaryCC.js +10 -10
  94. package/build/cjs/cc/ManufacturerProprietaryCC.js.map +3 -3
  95. package/build/cjs/cc/ManufacturerSpecificCC.d.ts +7 -8
  96. package/build/cjs/cc/ManufacturerSpecificCC.js +20 -21
  97. package/build/cjs/cc/ManufacturerSpecificCC.js.map +3 -3
  98. package/build/cjs/cc/MeterCC.d.ts +4 -6
  99. package/build/cjs/cc/MeterCC.js +52 -54
  100. package/build/cjs/cc/MeterCC.js.map +3 -3
  101. package/build/cjs/cc/MultiChannelAssociationCC.d.ts +7 -8
  102. package/build/cjs/cc/MultiChannelAssociationCC.js +34 -35
  103. package/build/cjs/cc/MultiChannelAssociationCC.js.map +3 -3
  104. package/build/cjs/cc/MultiChannelCC.d.ts +11 -11
  105. package/build/cjs/cc/MultiChannelCC.js +53 -53
  106. package/build/cjs/cc/MultiChannelCC.js.map +3 -3
  107. package/build/cjs/cc/MultiCommandCC.d.ts +3 -3
  108. package/build/cjs/cc/MultiCommandCC.js +13 -13
  109. package/build/cjs/cc/MultiCommandCC.js.map +3 -3
  110. package/build/cjs/cc/MultilevelSensorCC.d.ts +4 -7
  111. package/build/cjs/cc/MultilevelSensorCC.js +26 -28
  112. package/build/cjs/cc/MultilevelSensorCC.js.map +3 -3
  113. package/build/cjs/cc/MultilevelSwitchCC._validateArgs.js +3 -3
  114. package/build/cjs/cc/MultilevelSwitchCC.d.ts +13 -13
  115. package/build/cjs/cc/MultilevelSwitchCC.js +36 -37
  116. package/build/cjs/cc/MultilevelSwitchCC.js.map +3 -3
  117. package/build/cjs/cc/NoOperationCC.js +4 -4
  118. package/build/cjs/cc/NoOperationCC.js.map +1 -1
  119. package/build/cjs/cc/NodeNamingCC.d.ts +5 -5
  120. package/build/cjs/cc/NodeNamingCC.js +20 -20
  121. package/build/cjs/cc/NodeNamingCC.js.map +3 -3
  122. package/build/cjs/cc/NotificationCC.d.ts +4 -5
  123. package/build/cjs/cc/NotificationCC.js +66 -68
  124. package/build/cjs/cc/NotificationCC.js.map +3 -3
  125. package/build/cjs/cc/PowerlevelCC.d.ts +3 -3
  126. package/build/cjs/cc/PowerlevelCC.js +25 -26
  127. package/build/cjs/cc/PowerlevelCC.js.map +3 -3
  128. package/build/cjs/cc/ProtectionCC._validateArgs.js +2 -2
  129. package/build/cjs/cc/ProtectionCC.d.ts +11 -11
  130. package/build/cjs/cc/ProtectionCC.js +35 -36
  131. package/build/cjs/cc/ProtectionCC.js.map +3 -3
  132. package/build/cjs/cc/SceneActivationCC._validateArgs.js +2 -2
  133. package/build/cjs/cc/SceneActivationCC.d.ts +5 -6
  134. package/build/cjs/cc/SceneActivationCC.js +10 -10
  135. package/build/cjs/cc/SceneActivationCC.js.map +3 -3
  136. package/build/cjs/cc/SceneActuatorConfigurationCC._validateArgs.js +2 -2
  137. package/build/cjs/cc/SceneActuatorConfigurationCC.d.ts +5 -5
  138. package/build/cjs/cc/SceneActuatorConfigurationCC.js +19 -20
  139. package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +3 -3
  140. package/build/cjs/cc/SceneControllerConfigurationCC._validateArgs.js +2 -2
  141. package/build/cjs/cc/SceneControllerConfigurationCC.d.ts +6 -6
  142. package/build/cjs/cc/SceneControllerConfigurationCC.js +25 -26
  143. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +3 -3
  144. package/build/cjs/cc/ScheduleEntryLockCC.d.ts +2 -3
  145. package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
  146. package/build/cjs/cc/Security2CC.d.ts +3 -4
  147. package/build/cjs/cc/Security2CC.js +60 -62
  148. package/build/cjs/cc/Security2CC.js.map +3 -3
  149. package/build/cjs/cc/SecurityCC.d.ts +3 -4
  150. package/build/cjs/cc/SecurityCC.js +25 -26
  151. package/build/cjs/cc/SecurityCC.js.map +3 -3
  152. package/build/cjs/cc/SoundSwitchCC.d.ts +7 -7
  153. package/build/cjs/cc/SoundSwitchCC.js +28 -29
  154. package/build/cjs/cc/SoundSwitchCC.js.map +3 -3
  155. package/build/cjs/cc/SupervisionCC.d.ts +4 -4
  156. package/build/cjs/cc/SupervisionCC.js +28 -29
  157. package/build/cjs/cc/SupervisionCC.js.map +3 -3
  158. package/build/cjs/cc/ThermostatFanModeCC.d.ts +6 -6
  159. package/build/cjs/cc/ThermostatFanModeCC.js +21 -22
  160. package/build/cjs/cc/ThermostatFanModeCC.js.map +3 -3
  161. package/build/cjs/cc/ThermostatFanStateCC.d.ts +3 -3
  162. package/build/cjs/cc/ThermostatFanStateCC.js +9 -9
  163. package/build/cjs/cc/ThermostatFanStateCC.js.map +3 -3
  164. package/build/cjs/cc/ThermostatModeCC.d.ts +6 -6
  165. package/build/cjs/cc/ThermostatModeCC.js +30 -31
  166. package/build/cjs/cc/ThermostatModeCC.js.map +3 -3
  167. package/build/cjs/cc/ThermostatOperatingStateCC.d.ts +3 -4
  168. package/build/cjs/cc/ThermostatOperatingStateCC.js +9 -9
  169. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +3 -3
  170. package/build/cjs/cc/ThermostatSetbackCC.d.ts +3 -3
  171. package/build/cjs/cc/ThermostatSetbackCC.js +14 -15
  172. package/build/cjs/cc/ThermostatSetbackCC.js.map +3 -3
  173. package/build/cjs/cc/ThermostatSetpointCC.d.ts +6 -6
  174. package/build/cjs/cc/ThermostatSetpointCC.js +48 -49
  175. package/build/cjs/cc/ThermostatSetpointCC.js.map +3 -3
  176. package/build/cjs/cc/TimeCC.d.ts +3 -4
  177. package/build/cjs/cc/TimeCC.js +9 -10
  178. package/build/cjs/cc/TimeCC.js.map +3 -3
  179. package/build/cjs/cc/TimeParametersCC.d.ts +3 -4
  180. package/build/cjs/cc/TimeParametersCC.js +2 -2
  181. package/build/cjs/cc/TimeParametersCC.js.map +2 -2
  182. package/build/cjs/cc/TransportServiceCC.d.ts +3 -3
  183. package/build/cjs/cc/TransportServiceCC.js +44 -45
  184. package/build/cjs/cc/TransportServiceCC.js.map +3 -3
  185. package/build/cjs/cc/UserCodeCC.d.ts +19 -19
  186. package/build/cjs/cc/UserCodeCC.js +102 -103
  187. package/build/cjs/cc/UserCodeCC.js.map +3 -3
  188. package/build/cjs/cc/VersionCC.d.ts +17 -17
  189. package/build/cjs/cc/VersionCC.js +46 -47
  190. package/build/cjs/cc/VersionCC.js.map +3 -3
  191. package/build/cjs/cc/WakeUpCC.d.ts +6 -6
  192. package/build/cjs/cc/WakeUpCC.js +16 -17
  193. package/build/cjs/cc/WakeUpCC.js.map +3 -3
  194. package/build/cjs/cc/WindowCoveringCC.d.ts +3 -4
  195. package/build/cjs/cc/WindowCoveringCC.js +17 -18
  196. package/build/cjs/cc/WindowCoveringCC.js.map +3 -3
  197. package/build/cjs/cc/ZWavePlusCC.d.ts +8 -8
  198. package/build/cjs/cc/ZWavePlusCC.js +15 -16
  199. package/build/cjs/cc/ZWavePlusCC.js.map +3 -3
  200. package/build/cjs/cc/ZWaveProtocolCC.d.ts +2 -2
  201. package/build/cjs/cc/ZWaveProtocolCC.js +35 -35
  202. package/build/cjs/cc/ZWaveProtocolCC.js.map +2 -2
  203. package/build/cjs/cc/_CCValues.generated.d.ts +124 -0
  204. package/build/cjs/cc/_CCValues.generated.js +93 -26
  205. package/build/cjs/cc/_CCValues.generated.js.map +3 -3
  206. package/build/cjs/cc/index.d.ts +2 -0
  207. package/build/cjs/cc/index.js +9 -0
  208. package/build/cjs/cc/index.js.map +2 -2
  209. package/build/cjs/cc/manufacturerProprietary/FibaroCC.d.ts +3 -3
  210. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +14 -14
  211. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  212. package/build/cjs/lib/API.d.ts +5 -3
  213. package/build/cjs/lib/API.js.map +2 -2
  214. package/build/cjs/lib/CommandClass.d.ts +5 -6
  215. package/build/cjs/lib/CommandClass.js +45 -45
  216. package/build/cjs/lib/CommandClass.js.map +3 -3
  217. package/build/cjs/lib/CommandClassDecorators.d.ts +2 -2
  218. package/build/cjs/lib/CommandClassDecorators.js +3 -3
  219. package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
  220. package/build/cjs/lib/Security2/Extension.d.ts +2 -2
  221. package/build/cjs/lib/Security2/Extension.js +17 -17
  222. package/build/cjs/lib/Security2/Extension.js.map +3 -3
  223. package/build/cjs/lib/SetValueResult.d.ts +1 -1
  224. package/build/cjs/lib/SetValueResult.js.map +1 -1
  225. package/build/cjs/lib/Values.d.ts +3 -3
  226. package/build/cjs/lib/Values.js +6 -6
  227. package/build/cjs/lib/Values.js.map +2 -2
  228. package/build/cjs/lib/_Types.d.ts +6 -2
  229. package/build/cjs/lib/_Types.js +10 -3
  230. package/build/cjs/lib/_Types.js.map +3 -3
  231. package/build/cjs/lib/serializers.d.ts +1 -1
  232. package/build/cjs/lib/serializers.js +5 -5
  233. package/build/cjs/lib/serializers.js.map +2 -2
  234. package/build/cjs/lib/traits.d.ts +2 -2
  235. package/build/cjs/lib/utils.d.ts +2 -2
  236. package/build/cjs/lib/utils.js +60 -60
  237. package/build/cjs/lib/utils.js.map +3 -3
  238. package/build/esm/cc/AlarmSensorCC.d.ts +7 -7
  239. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  240. package/build/esm/cc/AlarmSensorCC.js +2 -3
  241. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  242. package/build/esm/cc/AssociationCC.d.ts +8 -9
  243. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  244. package/build/esm/cc/AssociationCC.js +2 -2
  245. package/build/esm/cc/AssociationCC.js.map +1 -1
  246. package/build/esm/cc/AssociationGroupInfoCC.d.ts +7 -7
  247. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  248. package/build/esm/cc/AssociationGroupInfoCC.js +2 -3
  249. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  250. package/build/esm/cc/BarrierOperatorCC.d.ts +8 -8
  251. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  252. package/build/esm/cc/BarrierOperatorCC.js +2 -3
  253. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  254. package/build/esm/cc/BasicCC.d.ts +4 -4
  255. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  256. package/build/esm/cc/BasicCC.js +2 -3
  257. package/build/esm/cc/BasicCC.js.map +1 -1
  258. package/build/esm/cc/BasicWindowCoveringCC._validateArgs.d.ts +3 -0
  259. package/build/esm/cc/BasicWindowCoveringCC._validateArgs.d.ts.map +1 -0
  260. package/build/esm/cc/BasicWindowCoveringCC._validateArgs.js +22 -0
  261. package/build/esm/cc/BasicWindowCoveringCC._validateArgs.js.map +1 -0
  262. package/build/esm/cc/BasicWindowCoveringCC.d.ts +90 -0
  263. package/build/esm/cc/BasicWindowCoveringCC.d.ts.map +1 -0
  264. package/build/esm/cc/BasicWindowCoveringCC.js +215 -0
  265. package/build/esm/cc/BasicWindowCoveringCC.js.map +1 -0
  266. package/build/esm/cc/BatteryCC.d.ts +4 -7
  267. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  268. package/build/esm/cc/BatteryCC.js +2 -4
  269. package/build/esm/cc/BatteryCC.js.map +1 -1
  270. package/build/esm/cc/BinarySensorCC.d.ts +5 -5
  271. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  272. package/build/esm/cc/BinarySensorCC.js +2 -3
  273. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  274. package/build/esm/cc/BinarySwitchCC._validateArgs.js +1 -1
  275. package/build/esm/cc/BinarySwitchCC._validateArgs.js.map +1 -1
  276. package/build/esm/cc/BinarySwitchCC.d.ts +6 -6
  277. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  278. package/build/esm/cc/BinarySwitchCC.js +2 -2
  279. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  280. package/build/esm/cc/CRC16CC.d.ts +3 -3
  281. package/build/esm/cc/CRC16CC.d.ts.map +1 -1
  282. package/build/esm/cc/CRC16CC.js +2 -2
  283. package/build/esm/cc/CRC16CC.js.map +1 -1
  284. package/build/esm/cc/CentralSceneCC.d.ts +8 -8
  285. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  286. package/build/esm/cc/CentralSceneCC.js +2 -3
  287. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  288. package/build/esm/cc/ClimateControlScheduleCC.d.ts +6 -6
  289. package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
  290. package/build/esm/cc/ClimateControlScheduleCC.js +2 -3
  291. package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
  292. package/build/esm/cc/ClockCC.d.ts +3 -4
  293. package/build/esm/cc/ClockCC.d.ts.map +1 -1
  294. package/build/esm/cc/ClockCC.js +2 -3
  295. package/build/esm/cc/ClockCC.js.map +1 -1
  296. package/build/esm/cc/ColorSwitchCC.d.ts +3 -4
  297. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  298. package/build/esm/cc/ColorSwitchCC.js +2 -4
  299. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  300. package/build/esm/cc/ConfigurationCC.d.ts +3 -3
  301. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  302. package/build/esm/cc/ConfigurationCC.js +2 -3
  303. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  304. package/build/esm/cc/DeviceResetLocallyCC.d.ts +2 -2
  305. package/build/esm/cc/DeviceResetLocallyCC.d.ts.map +1 -1
  306. package/build/esm/cc/DeviceResetLocallyCC.js +1 -1
  307. package/build/esm/cc/DeviceResetLocallyCC.js.map +1 -1
  308. package/build/esm/cc/DoorLockCC.d.ts +29 -29
  309. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  310. package/build/esm/cc/DoorLockCC.js +2 -3
  311. package/build/esm/cc/DoorLockCC.js.map +1 -1
  312. package/build/esm/cc/DoorLockLoggingCC.d.ts +4 -4
  313. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
  314. package/build/esm/cc/DoorLockLoggingCC.js +2 -3
  315. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
  316. package/build/esm/cc/EnergyProductionCC.d.ts +2 -3
  317. package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
  318. package/build/esm/cc/EnergyProductionCC.js.map +1 -1
  319. package/build/esm/cc/EntryControlCC.d.ts +8 -8
  320. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  321. package/build/esm/cc/EntryControlCC.js +2 -3
  322. package/build/esm/cc/EntryControlCC.js.map +1 -1
  323. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts +9 -10
  324. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  325. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +2 -3
  326. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  327. package/build/esm/cc/HailCC.js +1 -1
  328. package/build/esm/cc/HailCC.js.map +1 -1
  329. package/build/esm/cc/HumidityControlModeCC.d.ts +5 -5
  330. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  331. package/build/esm/cc/HumidityControlModeCC.js +2 -3
  332. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  333. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts +3 -3
  334. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
  335. package/build/esm/cc/HumidityControlOperatingStateCC.js +2 -2
  336. package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
  337. package/build/esm/cc/HumidityControlSetpointCC.d.ts +6 -6
  338. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  339. package/build/esm/cc/HumidityControlSetpointCC.js +2 -3
  340. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  341. package/build/esm/cc/InclusionControllerCC.d.ts +2 -3
  342. package/build/esm/cc/InclusionControllerCC.d.ts.map +1 -1
  343. package/build/esm/cc/InclusionControllerCC.js.map +1 -1
  344. package/build/esm/cc/IndicatorCC.d.ts +3 -3
  345. package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
  346. package/build/esm/cc/IndicatorCC.js +2 -4
  347. package/build/esm/cc/IndicatorCC.js.map +1 -1
  348. package/build/esm/cc/IrrigationCC.d.ts +3 -3
  349. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  350. package/build/esm/cc/IrrigationCC.js +2 -3
  351. package/build/esm/cc/IrrigationCC.js.map +1 -1
  352. package/build/esm/cc/LanguageCC.d.ts +5 -6
  353. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  354. package/build/esm/cc/LanguageCC.js +2 -3
  355. package/build/esm/cc/LanguageCC.js.map +1 -1
  356. package/build/esm/cc/LockCC.d.ts +4 -4
  357. package/build/esm/cc/LockCC.d.ts.map +1 -1
  358. package/build/esm/cc/LockCC.js +2 -2
  359. package/build/esm/cc/LockCC.js.map +1 -1
  360. package/build/esm/cc/ManufacturerProprietaryCC.d.ts +3 -3
  361. package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
  362. package/build/esm/cc/ManufacturerProprietaryCC.js +2 -2
  363. package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
  364. package/build/esm/cc/ManufacturerSpecificCC.d.ts +7 -8
  365. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  366. package/build/esm/cc/ManufacturerSpecificCC.js +2 -3
  367. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  368. package/build/esm/cc/MeterCC.d.ts +4 -6
  369. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  370. package/build/esm/cc/MeterCC.js +2 -4
  371. package/build/esm/cc/MeterCC.js.map +1 -1
  372. package/build/esm/cc/MultiChannelAssociationCC.d.ts +7 -8
  373. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  374. package/build/esm/cc/MultiChannelAssociationCC.js +2 -3
  375. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  376. package/build/esm/cc/MultiChannelCC.d.ts +11 -11
  377. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  378. package/build/esm/cc/MultiChannelCC.js +2 -2
  379. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  380. package/build/esm/cc/MultiCommandCC.d.ts +3 -3
  381. package/build/esm/cc/MultiCommandCC.d.ts.map +1 -1
  382. package/build/esm/cc/MultiCommandCC.js +2 -2
  383. package/build/esm/cc/MultiCommandCC.js.map +1 -1
  384. package/build/esm/cc/MultilevelSensorCC.d.ts +4 -7
  385. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  386. package/build/esm/cc/MultilevelSensorCC.js +2 -4
  387. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  388. package/build/esm/cc/MultilevelSwitchCC._validateArgs.js +1 -1
  389. package/build/esm/cc/MultilevelSwitchCC._validateArgs.js.map +1 -1
  390. package/build/esm/cc/MultilevelSwitchCC.d.ts +13 -13
  391. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  392. package/build/esm/cc/MultilevelSwitchCC.js +2 -3
  393. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  394. package/build/esm/cc/NoOperationCC.js +1 -1
  395. package/build/esm/cc/NoOperationCC.js.map +1 -1
  396. package/build/esm/cc/NodeNamingCC.d.ts +5 -5
  397. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  398. package/build/esm/cc/NodeNamingCC.js +2 -2
  399. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  400. package/build/esm/cc/NotificationCC.d.ts +4 -5
  401. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  402. package/build/esm/cc/NotificationCC.js +2 -4
  403. package/build/esm/cc/NotificationCC.js.map +1 -1
  404. package/build/esm/cc/PowerlevelCC.d.ts +3 -3
  405. package/build/esm/cc/PowerlevelCC.d.ts.map +1 -1
  406. package/build/esm/cc/PowerlevelCC.js +2 -3
  407. package/build/esm/cc/PowerlevelCC.js.map +1 -1
  408. package/build/esm/cc/ProtectionCC._validateArgs.js +1 -1
  409. package/build/esm/cc/ProtectionCC._validateArgs.js.map +1 -1
  410. package/build/esm/cc/ProtectionCC.d.ts +11 -11
  411. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  412. package/build/esm/cc/ProtectionCC.js +2 -3
  413. package/build/esm/cc/ProtectionCC.js.map +1 -1
  414. package/build/esm/cc/SceneActivationCC._validateArgs.js +1 -1
  415. package/build/esm/cc/SceneActivationCC._validateArgs.js.map +1 -1
  416. package/build/esm/cc/SceneActivationCC.d.ts +5 -6
  417. package/build/esm/cc/SceneActivationCC.d.ts.map +1 -1
  418. package/build/esm/cc/SceneActivationCC.js +2 -2
  419. package/build/esm/cc/SceneActivationCC.js.map +1 -1
  420. package/build/esm/cc/SceneActuatorConfigurationCC._validateArgs.js +1 -1
  421. package/build/esm/cc/SceneActuatorConfigurationCC._validateArgs.js.map +1 -1
  422. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts +5 -5
  423. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -1
  424. package/build/esm/cc/SceneActuatorConfigurationCC.js +2 -3
  425. package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
  426. package/build/esm/cc/SceneControllerConfigurationCC._validateArgs.js +1 -1
  427. package/build/esm/cc/SceneControllerConfigurationCC._validateArgs.js.map +1 -1
  428. package/build/esm/cc/SceneControllerConfigurationCC.d.ts +6 -6
  429. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
  430. package/build/esm/cc/SceneControllerConfigurationCC.js +2 -3
  431. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  432. package/build/esm/cc/ScheduleEntryLockCC.d.ts +2 -3
  433. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  434. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  435. package/build/esm/cc/Security2CC.d.ts +3 -4
  436. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  437. package/build/esm/cc/Security2CC.js +2 -4
  438. package/build/esm/cc/Security2CC.js.map +1 -1
  439. package/build/esm/cc/SecurityCC.d.ts +3 -4
  440. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  441. package/build/esm/cc/SecurityCC.js +1 -2
  442. package/build/esm/cc/SecurityCC.js.map +1 -1
  443. package/build/esm/cc/SoundSwitchCC.d.ts +7 -7
  444. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
  445. package/build/esm/cc/SoundSwitchCC.js +2 -3
  446. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  447. package/build/esm/cc/SupervisionCC.d.ts +4 -4
  448. package/build/esm/cc/SupervisionCC.d.ts.map +1 -1
  449. package/build/esm/cc/SupervisionCC.js +2 -3
  450. package/build/esm/cc/SupervisionCC.js.map +1 -1
  451. package/build/esm/cc/ThermostatFanModeCC.d.ts +6 -6
  452. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  453. package/build/esm/cc/ThermostatFanModeCC.js +2 -3
  454. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  455. package/build/esm/cc/ThermostatFanStateCC.d.ts +3 -3
  456. package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
  457. package/build/esm/cc/ThermostatFanStateCC.js +2 -2
  458. package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
  459. package/build/esm/cc/ThermostatModeCC.d.ts +6 -6
  460. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  461. package/build/esm/cc/ThermostatModeCC.js +2 -3
  462. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  463. package/build/esm/cc/ThermostatOperatingStateCC.d.ts +3 -4
  464. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  465. package/build/esm/cc/ThermostatOperatingStateCC.js +2 -2
  466. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  467. package/build/esm/cc/ThermostatSetbackCC.d.ts +3 -3
  468. package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -1
  469. package/build/esm/cc/ThermostatSetbackCC.js +2 -3
  470. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
  471. package/build/esm/cc/ThermostatSetpointCC.d.ts +6 -6
  472. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  473. package/build/esm/cc/ThermostatSetpointCC.js +2 -3
  474. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  475. package/build/esm/cc/TimeCC.d.ts +3 -4
  476. package/build/esm/cc/TimeCC.d.ts.map +1 -1
  477. package/build/esm/cc/TimeCC.js +1 -2
  478. package/build/esm/cc/TimeCC.js.map +1 -1
  479. package/build/esm/cc/TimeParametersCC.d.ts +3 -4
  480. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  481. package/build/esm/cc/TimeParametersCC.js +1 -1
  482. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  483. package/build/esm/cc/TransportServiceCC.d.ts +3 -3
  484. package/build/esm/cc/TransportServiceCC.d.ts.map +1 -1
  485. package/build/esm/cc/TransportServiceCC.js +2 -3
  486. package/build/esm/cc/TransportServiceCC.js.map +1 -1
  487. package/build/esm/cc/UserCodeCC.d.ts +19 -19
  488. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  489. package/build/esm/cc/UserCodeCC.js +2 -3
  490. package/build/esm/cc/UserCodeCC.js.map +1 -1
  491. package/build/esm/cc/VersionCC.d.ts +17 -17
  492. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  493. package/build/esm/cc/VersionCC.js +2 -3
  494. package/build/esm/cc/VersionCC.js.map +1 -1
  495. package/build/esm/cc/WakeUpCC.d.ts +6 -6
  496. package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
  497. package/build/esm/cc/WakeUpCC.js +2 -3
  498. package/build/esm/cc/WakeUpCC.js.map +1 -1
  499. package/build/esm/cc/WindowCoveringCC.d.ts +3 -4
  500. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  501. package/build/esm/cc/WindowCoveringCC.js +1 -2
  502. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  503. package/build/esm/cc/ZWavePlusCC.d.ts +8 -8
  504. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
  505. package/build/esm/cc/ZWavePlusCC.js +2 -3
  506. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  507. package/build/esm/cc/ZWaveProtocolCC.d.ts +2 -2
  508. package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -1
  509. package/build/esm/cc/ZWaveProtocolCC.js +1 -1
  510. package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
  511. package/build/esm/cc/_CCValues.generated.d.ts +124 -0
  512. package/build/esm/cc/_CCValues.generated.d.ts.map +1 -1
  513. package/build/esm/cc/_CCValues.generated.js +75 -4
  514. package/build/esm/cc/_CCValues.generated.js.map +1 -1
  515. package/build/esm/cc/index.d.ts +2 -0
  516. package/build/esm/cc/index.d.ts.map +1 -1
  517. package/build/esm/cc/index.js +1 -0
  518. package/build/esm/cc/index.js.map +1 -1
  519. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts +3 -3
  520. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
  521. package/build/esm/cc/manufacturerProprietary/FibaroCC.js +1 -1
  522. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  523. package/build/esm/lib/API.d.ts +5 -3
  524. package/build/esm/lib/API.d.ts.map +1 -1
  525. package/build/esm/lib/API.js.map +1 -1
  526. package/build/esm/lib/CommandClass.d.ts +5 -6
  527. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  528. package/build/esm/lib/CommandClass.js +2 -2
  529. package/build/esm/lib/CommandClass.js.map +1 -1
  530. package/build/esm/lib/CommandClassDecorators.d.ts +2 -2
  531. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
  532. package/build/esm/lib/CommandClassDecorators.js +1 -1
  533. package/build/esm/lib/CommandClassDecorators.js.map +1 -1
  534. package/build/esm/lib/Security2/Extension.d.ts +2 -2
  535. package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
  536. package/build/esm/lib/Security2/Extension.js +2 -2
  537. package/build/esm/lib/Security2/Extension.js.map +1 -1
  538. package/build/esm/lib/SetValueResult.d.ts +1 -1
  539. package/build/esm/lib/SetValueResult.d.ts.map +1 -1
  540. package/build/esm/lib/Values.d.ts +3 -3
  541. package/build/esm/lib/Values.d.ts.map +1 -1
  542. package/build/esm/lib/Values.js +1 -1
  543. package/build/esm/lib/Values.js.map +1 -1
  544. package/build/esm/lib/_Types.d.ts +6 -2
  545. package/build/esm/lib/_Types.d.ts.map +1 -1
  546. package/build/esm/lib/_Types.js +6 -1
  547. package/build/esm/lib/_Types.js.map +1 -1
  548. package/build/esm/lib/serializers.d.ts +1 -1
  549. package/build/esm/lib/serializers.d.ts.map +1 -1
  550. package/build/esm/lib/serializers.js +1 -1
  551. package/build/esm/lib/serializers.js.map +1 -1
  552. package/build/esm/lib/traits.d.ts +2 -2
  553. package/build/esm/lib/traits.d.ts.map +1 -1
  554. package/build/esm/lib/utils.d.ts +2 -2
  555. package/build/esm/lib/utils.d.ts.map +1 -1
  556. package/build/esm/lib/utils.js +2 -2
  557. package/build/esm/lib/utils.js.map +1 -1
  558. package/package.json +6 -6
@@ -42,9 +42,7 @@ __export(MultilevelSensorCC_exports, {
42
42
  module.exports = __toCommonJS(MultilevelSensorCC_exports);
43
43
  var __validateArgs = __toESM(require("./MultilevelSensorCC._validateArgs.js"), 1);
44
44
  var import_core = require("@zwave-js/core");
45
- var import_safe = require("@zwave-js/core/safe");
46
- var import_safe2 = require("@zwave-js/shared/safe");
47
- var import_safe3 = require("@zwave-js/shared/safe");
45
+ var import_shared = require("@zwave-js/shared");
48
46
  var import_API = require("../lib/API.js");
49
47
  var import_CommandClass = require("../lib/CommandClass.js");
50
48
  var import_CommandClassDecorators = require("../lib/CommandClassDecorators.js");
@@ -157,7 +155,7 @@ function getPreferredSensorScale(ctx, nodeId, endpointIndex, sensorType, support
157
155
  }
158
156
  __name(getPreferredSensorScale, "getPreferredSensorScale");
159
157
  let MultilevelSensorCCAPI = (() => {
160
- let _classDecorators = [(0, import_CommandClassDecorators.API)(import_safe.CommandClasses["Multilevel Sensor"])];
158
+ let _classDecorators = [(0, import_CommandClassDecorators.API)(import_core.CommandClasses["Multilevel Sensor"])];
161
159
  let _classDescriptor;
162
160
  let _classExtraInitializers = [];
163
161
  let _classThis;
@@ -201,7 +199,7 @@ let MultilevelSensorCCAPI = (() => {
201
199
  get [import_API.POLL_VALUE]() {
202
200
  return async function({ property }) {
203
201
  const valueId = {
204
- commandClass: import_safe.CommandClasses["Multilevel Sensor"],
202
+ commandClass: import_core.CommandClasses["Multilevel Sensor"],
205
203
  endpoint: this.endpoint.index,
206
204
  property
207
205
  };
@@ -288,7 +286,7 @@ let MultilevelSensorCCAPI = (() => {
288
286
  return MultilevelSensorCCAPI2 = _classThis;
289
287
  })();
290
288
  let MultilevelSensorCC = (() => {
291
- let _classDecorators = [(0, import_CommandClassDecorators.commandClass)(import_safe.CommandClasses["Multilevel Sensor"]), (0, import_CommandClassDecorators.implementedVersion)(11), (0, import_CommandClassDecorators.ccValues)(import_CCValues_generated.MultilevelSensorCCValues)];
289
+ let _classDecorators = [(0, import_CommandClassDecorators.commandClass)(import_core.CommandClasses["Multilevel Sensor"]), (0, import_CommandClassDecorators.implementedVersion)(11), (0, import_CommandClassDecorators.ccValues)(import_CCValues_generated.MultilevelSensorCCValues)];
292
290
  let _classDescriptor;
293
291
  let _classExtraInitializers = [];
294
292
  let _classThis;
@@ -310,8 +308,8 @@ let MultilevelSensorCC = (() => {
310
308
  async interview(ctx) {
311
309
  const node = this.getNode(ctx);
312
310
  const endpoint = this.getEndpoint(ctx);
313
- const api = import_API.CCAPI.create(import_safe.CommandClasses["Multilevel Sensor"], ctx, endpoint).withOptions({
314
- priority: import_safe.MessagePriority.NodeQuery
311
+ const api = import_API.CCAPI.create(import_core.CommandClasses["Multilevel Sensor"], ctx, endpoint).withOptions({
312
+ priority: import_core.MessagePriority.NodeQuery
315
313
  });
316
314
  ctx.logNode(node.id, {
317
315
  endpoint: this.endpointIndex,
@@ -370,8 +368,8 @@ let MultilevelSensorCC = (() => {
370
368
  async refreshValues(ctx) {
371
369
  const node = this.getNode(ctx);
372
370
  const endpoint = this.getEndpoint(ctx);
373
- const api = import_API.CCAPI.create(import_safe.CommandClasses["Multilevel Sensor"], ctx, endpoint).withOptions({
374
- priority: import_safe.MessagePriority.NodeQuery
371
+ const api = import_API.CCAPI.create(import_core.CommandClasses["Multilevel Sensor"], ctx, endpoint).withOptions({
372
+ priority: import_core.MessagePriority.NodeQuery
375
373
  });
376
374
  const valueDB = this.getValueDB(ctx);
377
375
  if (api.version <= 4) {
@@ -478,9 +476,9 @@ let MultilevelSensorCCReport = (() => {
478
476
  this.scale = typeof options.scale === "number" ? options.scale : options.scale.key;
479
477
  }
480
478
  static from(raw, ctx) {
481
- (0, import_safe.validatePayload)(raw.payload.length >= 1);
479
+ (0, import_core.validatePayload)(raw.payload.length >= 1);
482
480
  const type = raw.payload[0];
483
- const { value, scale } = (0, import_safe.parseFloatWithScale)(raw.payload.subarray(1));
481
+ const { value, scale } = (0, import_core.parseFloatWithScale)(raw.payload.subarray(1));
484
482
  return new this({
485
483
  nodeId: ctx.sourceNodeId,
486
484
  type,
@@ -499,15 +497,15 @@ let MultilevelSensorCCReport = (() => {
499
497
  if (ccVersion >= 5) {
500
498
  const supportedSensorTypes = this.getValue(ctx, import_CCValues_generated.MultilevelSensorCCValues.supportedSensorTypes);
501
499
  if (supportedSensorTypes?.length) {
502
- import_safe.validatePayload.withReason(`Unsupported sensor type ${(0, import_core.getSensorName)(this.type)} or corrupted data`)(supportedSensorTypes.includes(this.type));
500
+ import_core.validatePayload.withReason(`Unsupported sensor type ${(0, import_core.getSensorName)(this.type)} or corrupted data`)(supportedSensorTypes.includes(this.type));
503
501
  }
504
502
  const supportedScales = this.getValue(ctx, import_CCValues_generated.MultilevelSensorCCValues.supportedScales(this.type));
505
503
  if (supportedScales?.length) {
506
- import_safe.validatePayload.withReason(`Unsupported scale ${scale.label} or corrupted data`)(supportedScales.includes(scale.key));
504
+ import_core.validatePayload.withReason(`Unsupported scale ${scale.label} or corrupted data`)(supportedScales.includes(scale.key));
507
505
  }
508
506
  } else {
509
- import_safe.validatePayload.withReason(`Unknown sensor type ${(0, import_safe3.num2hex)(this.type)} or corrupted data`)(!!sensor);
510
- import_safe.validatePayload.withReason(`Unknown scale ${(0, import_safe3.num2hex)(this.scale)} or corrupted data`)(scale.label !== (0, import_core.getUnknownScale)(this.scale).label);
507
+ import_core.validatePayload.withReason(`Unknown sensor type ${(0, import_shared.num2hex)(this.type)} or corrupted data`)(!!sensor);
508
+ import_core.validatePayload.withReason(`Unknown scale ${(0, import_shared.num2hex)(this.scale)} or corrupted data`)(scale.label !== (0, import_core.getUnknownScale)(this.scale).label);
511
509
  }
512
510
  }
513
511
  const sensorName = (0, import_core.getSensorName)(this.type);
@@ -527,9 +525,9 @@ let MultilevelSensorCCReport = (() => {
527
525
  scale;
528
526
  value;
529
527
  serialize(ctx) {
530
- this.payload = import_safe2.Bytes.concat([
531
- import_safe2.Bytes.from([this.type]),
532
- (0, import_safe.encodeFloatWithScale)(this.value, this.scale)
528
+ this.payload = import_shared.Bytes.concat([
529
+ import_shared.Bytes.from([this.type]),
530
+ (0, import_core.encodeFloatWithScale)(this.value, this.scale)
533
531
  ]);
534
532
  return super.serialize(ctx);
535
533
  }
@@ -595,7 +593,7 @@ let MultilevelSensorCCGet = (() => {
595
593
  scale;
596
594
  serialize(ctx) {
597
595
  if (this.sensorType != void 0 && this.scale != void 0) {
598
- this.payload = import_safe2.Bytes.from([
596
+ this.payload = import_shared.Bytes.from([
599
597
  this.sensorType,
600
598
  (this.scale & 3) << 3
601
599
  ]);
@@ -643,8 +641,8 @@ let MultilevelSensorCCSupportedSensorReport = (() => {
643
641
  this.supportedSensorTypes = options.supportedSensorTypes;
644
642
  }
645
643
  static from(raw, ctx) {
646
- (0, import_safe.validatePayload)(raw.payload.length >= 1);
647
- const supportedSensorTypes = (0, import_safe.parseBitMask)(raw.payload);
644
+ (0, import_core.validatePayload)(raw.payload.length >= 1);
645
+ const supportedSensorTypes = (0, import_core.parseBitMask)(raw.payload);
648
646
  return new this({
649
647
  nodeId: ctx.sourceNodeId,
650
648
  supportedSensorTypes
@@ -717,9 +715,9 @@ let MultilevelSensorCCSupportedScaleReport = (() => {
717
715
  this.supportedScales = options.supportedScales;
718
716
  }
719
717
  static from(raw, ctx) {
720
- (0, import_safe.validatePayload)(raw.payload.length >= 2);
718
+ (0, import_core.validatePayload)(raw.payload.length >= 2);
721
719
  const sensorType = raw.payload[0];
722
- const supportedScales = (0, import_safe.parseBitMask)(import_safe2.Bytes.from([raw.payload[1] & 15]), 0);
720
+ const supportedScales = (0, import_core.parseBitMask)(import_shared.Bytes.from([raw.payload[1] & 15]), 0);
723
721
  return new this({
724
722
  nodeId: ctx.sourceNodeId,
725
723
  sensorType,
@@ -729,8 +727,8 @@ let MultilevelSensorCCSupportedScaleReport = (() => {
729
727
  sensorType;
730
728
  supportedScales;
731
729
  serialize(ctx) {
732
- this.payload = import_safe2.Bytes.concat([
733
- import_safe2.Bytes.from([this.sensorType]),
730
+ this.payload = import_shared.Bytes.concat([
731
+ import_shared.Bytes.from([this.sensorType]),
734
732
  (0, import_core.encodeBitMask)(this.supportedScales, 4, 0)
735
733
  ]);
736
734
  return super.serialize(ctx);
@@ -773,7 +771,7 @@ let MultilevelSensorCCGetSupportedScale = (() => {
773
771
  this.sensorType = options.sensorType;
774
772
  }
775
773
  static from(raw, ctx) {
776
- (0, import_safe.validatePayload)(raw.payload.length >= 1);
774
+ (0, import_core.validatePayload)(raw.payload.length >= 1);
777
775
  const sensorType = raw.payload[0];
778
776
  return new this({
779
777
  nodeId: ctx.sourceNodeId,
@@ -782,7 +780,7 @@ let MultilevelSensorCCGetSupportedScale = (() => {
782
780
  }
783
781
  sensorType;
784
782
  serialize(ctx) {
785
- this.payload = import_safe2.Bytes.from([this.sensorType]);
783
+ this.payload = import_shared.Bytes.from([this.sensorType]);
786
784
  return super.serialize(ctx);
787
785
  }
788
786
  toLogEntry(ctx) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/MultilevelSensorCC.ts"],
4
- "sourcesContent": ["import { type CCEncodingContext, type CCParsingContext } from \"@zwave-js/cc\";\nimport { type GetDeviceConfig } from \"@zwave-js/config\";\nimport {\n\ttype GetNode,\n\ttype GetSupportedCCVersion,\n\ttype GetValueDB,\n\ttype LogNode,\n\ttype WithAddress,\n\tencodeBitMask,\n\tgetSensor,\n\tgetSensorName,\n\tgetSensorScale,\n\tgetUnknownScale,\n\ttimespan,\n} from \"@zwave-js/core\";\nimport type {\n\tControlsCC,\n\tEndpointId,\n\tGetEndpoint,\n\tMessageOrCCLogEntry,\n\tMessageRecord,\n\tNodeId,\n\tScale,\n\tSinglecastCC,\n\tSupervisionResult,\n\tSupportsCC,\n\tValueID,\n} from \"@zwave-js/core/safe\";\nimport {\n\tCommandClasses,\n\ttype MaybeNotKnown,\n\tMessagePriority,\n\tValueMetadata,\n\tencodeFloatWithScale,\n\tparseBitMask,\n\tparseFloatWithScale,\n\tvalidatePayload,\n} from \"@zwave-js/core/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { type AllOrNone, num2hex } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\tPhysicalCCAPI,\n\ttype PollValueImplementation,\n\tthrowUnsupportedProperty,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\ttype CCResponsePredicate,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n\ttype RefreshValuesContext,\n\tgetEffectiveCCVersion,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\tMultilevelSensorCommand,\n\ttype MultilevelSensorValue,\n} from \"../lib/_Types.js\";\nimport { type GetUserPreferences } from \"../lib/traits.js\";\n\nexport const MultilevelSensorCCValues = V.defineCCValues(\n\tCommandClasses[\"Multilevel Sensor\"],\n\t{\n\t\t...V.staticProperty(\"supportedSensorTypes\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"supportedScales\",\n\t\t\t\"supportedScales\",\n\t\t\t(sensorType: number) => sensorType,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"supportedScales\"\n\t\t\t\t&& typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\t\t...V.dynamicPropertyWithName(\n\t\t\t\"value\",\n\t\t\t// This should have been the sensor type, but it is too late to change now\n\t\t\t// Maybe we can migrate this without breaking in the future\n\t\t\t(sensorTypeName: string) => sensorTypeName,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\ttypeof property === \"string\"\n\t\t\t\t&& property !== \"supportedSensorTypes\"\n\t\t\t\t&& property !== \"supportedScales\"\n\t\t\t\t&& propertyKey == undefined,\n\t\t\t(sensorTypeName: string) => ({\n\t\t\t\t// Just the base metadata, to be extended using a config manager\n\t\t\t\t...ValueMetadata.ReadOnlyNumber,\n\t\t\t\tlabel: sensorTypeName,\n\t\t\t} as const),\n\t\t),\n\t},\n);\n\n/**\n * Determine the scale to use to query a sensor reading. Uses the user-preferred scale if given,\n * followed by the most recently used scale, otherwile falls back to the first supported one.\n */\nfunction getPreferredSensorScale(\n\tctx: GetValueDB & GetUserPreferences & LogNode,\n\tnodeId: number,\n\tendpointIndex: number,\n\tsensorType: number,\n\tsupportedScales: readonly number[],\n): number {\n\tconst preferences = ctx.getUserPreferences();\n\tconst sensor = getSensor(sensorType);\n\t// If the sensor type is unknown, we have no default. Use the user-provided scale or 0\n\tif (!sensor) {\n\t\tconst preferred = preferences?.scales[sensorType];\n\t\t// We cannot look up strings for unknown sensor types, so this must be a number or we use the fallback\n\t\tif (typeof preferred !== \"number\") return 0;\n\t\treturn preferred;\n\t}\n\n\t// Look up the preference for the scale\n\tlet preferred: number | string | undefined;\n\t// Named scales apply to multiple sensor types. To be able to override the scale for single types\n\t// we need to look at the preferences by sensor type first\n\tpreferred = preferences?.scales[sensorType];\n\t// If the scale is named, we can then try to use the named preference\n\tconst scaleGroupName = sensor.scaleGroupName;\n\tif (preferred == undefined && scaleGroupName) {\n\t\tpreferred = preferences?.scales[scaleGroupName];\n\t}\n\t// Then attempt reading the scale from the corresponding value\n\tif (preferred == undefined) {\n\t\tconst sensorName = getSensorName(sensorType);\n\t\tconst sensorValue = MultilevelSensorCCValues.value(sensorName);\n\t\tconst metadata = ctx\n\t\t\t.tryGetValueDB(nodeId)\n\t\t\t?.getMetadata(sensorValue.endpoint(endpointIndex));\n\t\tconst scale = metadata?.ccSpecific?.scale;\n\t\tif (typeof scale === \"number\" && supportedScales.includes(scale)) {\n\t\t\tpreferred = scale;\n\t\t\tctx.logNode(nodeId, {\n\t\t\t\tendpoint: endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`No scale preference for sensor type ${sensorType}, using the last-used scale ${preferred}`,\n\t\t\t});\n\t\t}\n\t}\n\t// Then fall back to the first supported scale\n\tif (preferred == undefined) {\n\t\tpreferred = supportedScales[0] ?? 0;\n\t\tctx.logNode(nodeId, {\n\t\t\tendpoint: endpointIndex,\n\t\t\tmessage:\n\t\t\t\t`No scale preference for sensor type ${sensorType}, using the first supported scale ${preferred}`,\n\t\t});\n\t\treturn preferred;\n\t}\n\n\t// If the scale name or unit was given, try to look it up\n\tif (typeof preferred === \"string\") {\n\t\tfor (const [key, scale] of Object.entries(sensor.scales)) {\n\t\t\tif (scale.label === preferred || scale.unit === preferred) {\n\t\t\t\tpreferred = parseInt(key, 10);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (typeof preferred === \"string\") {\n\t\t// Looking up failed\n\t\tctx.logNode(nodeId, {\n\t\t\tendpoint: endpointIndex,\n\t\t\tmessage:\n\t\t\t\t`Preferred scale \"${preferred}\" for sensor type ${sensorType} not found, using the first supported scale ${\n\t\t\t\t\tsupportedScales[0] ?? 0\n\t\t\t\t}`,\n\t\t});\n\t\treturn supportedScales[0] ?? 0;\n\t}\n\n\t// We have a numeric scale key, nothing to look up. Make sure it is supported though\n\tif (!supportedScales.length) {\n\t\t// No info about supported scales, just use the preferred one\n\t\treturn preferred;\n\t} else if (!supportedScales.includes(preferred)) {\n\t\tctx.logNode(nodeId, {\n\t\t\tendpoint: endpointIndex,\n\t\t\tmessage:\n\t\t\t\t`Preferred scale ${preferred} not supported for sensor type ${sensorType}, using the first supported scale`,\n\t\t});\n\t\treturn supportedScales[0];\n\t} else {\n\t\treturn preferred;\n\t}\n}\n\n// @noSetValueAPI This CC is read-only\n\n@API(CommandClasses[\"Multilevel Sensor\"])\nexport class MultilevelSensorCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(\n\t\tcmd: MultilevelSensorCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase MultilevelSensorCommand.Get:\n\t\t\tcase MultilevelSensorCommand.Report:\n\t\t\t\treturn true; // This is mandatory\n\t\t\tcase MultilevelSensorCommand.GetSupportedSensor:\n\t\t\tcase MultilevelSensorCommand.GetSupportedScale:\n\t\t\t\treturn this.version >= 5;\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: MultilevelSensorCCAPI, { property }) {\n\t\t\t// Look up the necessary information\n\t\t\tconst valueId: ValueID = {\n\t\t\t\tcommandClass: CommandClasses[\"Multilevel Sensor\"],\n\t\t\t\tendpoint: this.endpoint.index,\n\t\t\t\tproperty,\n\t\t\t};\n\t\t\tconst ccSpecific = this.tryGetValueDB()?.getMetadata(valueId)\n\t\t\t\t?.ccSpecific;\n\t\t\tif (!ccSpecific) {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\n\t\t\tconst { sensorType, scale } = ccSpecific;\n\t\t\treturn this.get(sensorType, scale);\n\t\t};\n\t}\n\n\t/** Query the default sensor value */\n\tpublic async get(): Promise<\n\t\tMaybeNotKnown<MultilevelSensorValue & { type: number }>\n\t>;\n\t/** Query the sensor value for the given sensor type using the preferred sensor scale */\n\tpublic async get(\n\t\tsensorType: number,\n\t): Promise<MaybeNotKnown<MultilevelSensorValue>>;\n\t/** Query the sensor value for the given sensor type using the given sensor scale */\n\tpublic async get(\n\t\tsensorType: number,\n\t\tscale: number,\n\t): Promise<MaybeNotKnown<number>>;\n\n\t@validateArgs()\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async get(sensorType?: number, scale?: number) {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSensorCommand,\n\t\t\tMultilevelSensorCommand.Get,\n\t\t);\n\n\t\t// Figure out the preferred scale if none was given\n\t\tlet preferredScale: number | undefined;\n\t\tif (sensorType != undefined && scale == undefined) {\n\t\t\tconst supportedScales: readonly number[] =\n\t\t\t\tthis.tryGetValueDB()?.getValue({\n\t\t\t\t\tcommandClass: this.ccId,\n\t\t\t\t\tendpoint: this.endpoint.index,\n\t\t\t\t\tproperty: \"supportedScales\",\n\t\t\t\t\tpropertyKey: sensorType,\n\t\t\t\t}) ?? [];\n\n\t\t\tpreferredScale = getPreferredSensorScale(\n\t\t\t\tthis.host,\n\t\t\t\tthis.endpoint.nodeId,\n\t\t\t\tthis.endpoint.index,\n\t\t\t\tsensorType,\n\t\t\t\tsupportedScales,\n\t\t\t);\n\t\t}\n\n\t\tconst cc = new MultilevelSensorCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tsensorType: sensorType!,\n\t\t\tscale: (scale ?? preferredScale)!,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultilevelSensorCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (!response) return;\n\n\t\tconst responseScale = getSensorScale(response.type, response.scale);\n\n\t\tif (sensorType == undefined) {\n\t\t\t// Overload #1: return the full response\n\t\t\treturn {\n\t\t\t\ttype: response.type,\n\t\t\t\tvalue: response.value,\n\t\t\t\tscale: responseScale,\n\t\t\t};\n\t\t} else if (scale == undefined) {\n\t\t\t// Overload #2: return value and scale\n\t\t\treturn {\n\t\t\t\tvalue: response.value,\n\t\t\t\tscale: responseScale,\n\t\t\t};\n\t\t} else {\n\t\t\t// Overload #3: return only the value\n\t\t\treturn response.value;\n\t\t}\n\t}\n\n\tpublic async getSupportedSensorTypes(): Promise<\n\t\tMaybeNotKnown<readonly number[]>\n\t> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSensorCommand,\n\t\t\tMultilevelSensorCommand.GetSupportedSensor,\n\t\t);\n\n\t\tconst cc = new MultilevelSensorCCGetSupportedSensor({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultilevelSensorCCSupportedSensorReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.supportedSensorTypes;\n\t}\n\n\t@validateArgs()\n\tpublic async getSupportedScales(\n\t\tsensorType: number,\n\t): Promise<MaybeNotKnown<readonly number[]>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSensorCommand,\n\t\t\tMultilevelSensorCommand.GetSupportedScale,\n\t\t);\n\n\t\tconst cc = new MultilevelSensorCCGetSupportedScale({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tsensorType,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultilevelSensorCCSupportedScaleReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.supportedScales;\n\t}\n\n\t@validateArgs()\n\tpublic async sendReport(\n\t\tsensorType: number,\n\t\tscale: number | Scale,\n\t\tvalue: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSensorCommand,\n\t\t\tMultilevelSensorCommand.Report,\n\t\t);\n\n\t\tconst cc = new MultilevelSensorCCReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\ttype: sensorType,\n\t\t\tscale,\n\t\t\tvalue,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses[\"Multilevel Sensor\"])\n@implementedVersion(11)\n@ccValues(MultilevelSensorCCValues)\nexport class MultilevelSensorCC extends CommandClass {\n\tdeclare ccCommand: MultilevelSensorCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Multilevel Sensor\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tif (api.version >= 5) {\n\t\t\t// Query the supported sensor types\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"retrieving supported sensor types...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst sensorTypes = await api.getSupportedSensorTypes();\n\t\t\tif (sensorTypes) {\n\t\t\t\tconst logMessage = \"received supported sensor types:\\n\"\n\t\t\t\t\t+ sensorTypes\n\t\t\t\t\t\t.map((t) => getSensorName(t))\n\t\t\t\t\t\t.map((name) => `\u00B7 ${name}`)\n\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Querying supported sensor types timed out, skipping interview...\",\n\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// As well as the supported scales for each sensor\n\n\t\t\tfor (const type of sensorTypes) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `querying supported scales for ${\n\t\t\t\t\t\tgetSensorName(type)\n\t\t\t\t\t} sensor`,\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tconst sensorScales = await api.getSupportedScales(type);\n\t\t\t\tif (sensorScales) {\n\t\t\t\t\tconst logMessage = \"received supported scales:\\n\"\n\t\t\t\t\t\t+ sensorScales\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t(s) =>\n\t\t\t\t\t\t\t\t\t(getSensorScale(type, s)\n\t\t\t\t\t\t\t\t\t\t?? getUnknownScale(s)).label,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map((name) => `\u00B7 ${name}`)\n\t\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\"Querying supported scales timed out, skipping interview...\",\n\t\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tawait this.refreshValues(ctx);\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Multilevel Sensor\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\t\tconst valueDB = this.getValueDB(ctx);\n\n\t\tif (api.version <= 4) {\n\t\t\t// Sensors up to V4 only support a single value\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"querying current sensor reading...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst mlsResponse = await api.get();\n\t\t\tif (mlsResponse) {\n\t\t\t\tconst sensorScale = getSensorScale(\n\t\t\t\t\tmlsResponse.type,\n\t\t\t\t\tmlsResponse.scale.key,\n\t\t\t\t);\n\t\t\t\tconst logMessage = `received current sensor reading:\nsensor type: ${getSensorName(mlsResponse.type)}\nvalue: ${mlsResponse.value}${\n\t\t\t\t\tsensorScale?.unit ? ` ${sensorScale.unit}` : \"\"\n\t\t\t\t}`;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\t// Query all sensor values\n\t\t\tconst sensorTypes: readonly number[] = valueDB.getValue({\n\t\t\t\tcommandClass: this.ccId,\n\t\t\t\tproperty: \"supportedSensorTypes\",\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t}) || [];\n\n\t\t\tfor (const type of sensorTypes) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `querying ${\n\t\t\t\t\t\tgetSensorName(type)\n\t\t\t\t\t} sensor reading...`,\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\n\t\t\t\tconst value = await api.get(type);\n\t\t\t\tif (value) {\n\t\t\t\t\tconst logMessage = `received current ${\n\t\t\t\t\t\tgetSensorName(type)\n\t\t\t\t\t} sensor reading: ${value.value} ${value.scale.unit || \"\"}`;\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic shouldRefreshValues(\n\t\tthis: SinglecastCC<this>,\n\t\tctx:\n\t\t\t& GetValueDB\n\t\t\t& GetSupportedCCVersion\n\t\t\t& GetDeviceConfig\n\t\t\t& GetNode<\n\t\t\t\tNodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>\n\t\t\t>,\n\t): boolean {\n\t\t// Poll the device when all of the supported values were last updated longer than 6 hours ago.\n\t\t// This may lead to some values not being updated, but the user may have disabled some unnecessary\n\t\t// reports to reduce traffic.\n\t\tconst valueDB = ctx.tryGetValueDB(this.nodeId);\n\t\tif (!valueDB) return true;\n\n\t\tconst values = this.getDefinedValueIDs(ctx).filter((v) =>\n\t\t\tMultilevelSensorCCValues.value.is(v)\n\t\t);\n\t\treturn values.every((v) => {\n\t\t\tconst lastUpdated = valueDB.getTimestamp(v);\n\t\t\treturn (\n\t\t\t\tlastUpdated == undefined\n\t\t\t\t|| Date.now() - lastUpdated > timespan.hours(6)\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Returns which sensor types are supported.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getSupportedSensorTypesCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t): MaybeNotKnown<number[]> {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tMultilevelSensorCCValues.supportedSensorTypes.endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t);\n\t}\n\n\t/**\n\t * Returns which scales are supported for a given sensor type.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getSupportedScalesCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tsensorType: number,\n\t): MaybeNotKnown<number[]> {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tMultilevelSensorCCValues.supportedScales(sensorType).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t);\n\t}\n\n\tpublic translatePropertyKey(\n\t\tctx: GetValueDB,\n\t\tproperty: string | number,\n\t\tpropertyKey: string | number,\n\t): string | undefined {\n\t\t// TODO: check this\n\t\tif (property === \"values\" && typeof propertyKey === \"number\") {\n\t\t\tconst sensor = getSensor(propertyKey);\n\t\t\tif (sensor) return sensor.label;\n\t\t}\n\t\treturn super.translatePropertyKey(ctx, property, propertyKey);\n\t}\n}\n\n// @publicAPI\nexport interface MultilevelSensorCCReportOptions {\n\ttype: number;\n\tscale: number | Scale;\n\tvalue: number;\n}\n\n@CCCommand(MultilevelSensorCommand.Report)\n@useSupervision()\nexport class MultilevelSensorCCReport extends MultilevelSensorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSensorCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.type = options.type;\n\t\tthis.value = options.value;\n\t\tthis.scale = typeof options.scale === \"number\"\n\t\t\t? options.scale\n\t\t\t: options.scale.key;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSensorCCReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst type = raw.payload[0];\n\n\t\t// parseFloatWithScale does its own validation\n\t\tconst { value, scale } = parseFloatWithScale(\n\t\t\traw.payload.subarray(1),\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttype,\n\t\t\tvalue,\n\t\t\tscale,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tconst sensor = getSensor(this.type);\n\t\tconst scale = getSensorScale(\n\t\t\tthis.type,\n\t\t\tthis.scale,\n\t\t) ?? getUnknownScale(this.scale);\n\n\t\t// Filter out unknown sensor types and scales, unless the strict validation is disabled\n\t\tconst measurementValidation = !ctx.getDeviceConfig?.(\n\t\t\tthis.nodeId as number,\n\t\t)?.compat?.disableStrictMeasurementValidation;\n\n\t\tconst ccVersion = getEffectiveCCVersion(ctx, this);\n\n\t\tif (measurementValidation) {\n\t\t\t// Filter out unsupported sensor types and scales if possible\n\t\t\tif (ccVersion >= 5) {\n\t\t\t\tconst supportedSensorTypes = this.getValue<number[]>(\n\t\t\t\t\tctx,\n\t\t\t\t\tMultilevelSensorCCValues.supportedSensorTypes,\n\t\t\t\t);\n\t\t\t\tif (supportedSensorTypes?.length) {\n\t\t\t\t\tvalidatePayload.withReason(\n\t\t\t\t\t\t`Unsupported sensor type ${\n\t\t\t\t\t\t\tgetSensorName(this.type)\n\t\t\t\t\t\t} or corrupted data`,\n\t\t\t\t\t)(supportedSensorTypes.includes(this.type));\n\t\t\t\t}\n\n\t\t\t\tconst supportedScales = this.getValue<number[]>(\n\t\t\t\t\tctx,\n\t\t\t\t\tMultilevelSensorCCValues.supportedScales(this.type),\n\t\t\t\t);\n\t\t\t\tif (supportedScales?.length) {\n\t\t\t\t\tvalidatePayload.withReason(\n\t\t\t\t\t\t`Unsupported scale ${scale.label} or corrupted data`,\n\t\t\t\t\t)(supportedScales.includes(scale.key));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We support a higher CC version than the device, so any types and scales it uses should be known to us\n\t\t\t\t// Filter out unknown ones.\n\t\t\t\tvalidatePayload.withReason(\n\t\t\t\t\t`Unknown sensor type ${\n\t\t\t\t\t\tnum2hex(\n\t\t\t\t\t\t\tthis.type,\n\t\t\t\t\t\t)\n\t\t\t\t\t} or corrupted data`,\n\t\t\t\t)(!!sensor);\n\t\t\t\tvalidatePayload.withReason(\n\t\t\t\t\t`Unknown scale ${num2hex(this.scale)} or corrupted data`,\n\t\t\t\t)(scale.label !== getUnknownScale(this.scale).label);\n\t\t\t}\n\t\t}\n\n\t\tconst sensorName = getSensorName(this.type);\n\t\tconst sensorValue = MultilevelSensorCCValues.value(sensorName);\n\n\t\tthis.setMetadata(ctx, sensorValue, {\n\t\t\t...sensorValue.meta,\n\t\t\tunit: scale.unit,\n\t\t\tccSpecific: {\n\t\t\t\tsensorType: this.type,\n\t\t\t\tscale: scale.key,\n\t\t\t},\n\t\t});\n\t\tthis.setValue(ctx, sensorValue, this.value);\n\n\t\treturn true;\n\t}\n\n\tpublic type: number;\n\tpublic scale: number;\n\tpublic value: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.type]),\n\t\t\tencodeFloatWithScale(this.value, this.scale),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"sensor type\": getSensorName(this.type),\n\t\t\t\tscale: (getSensorScale(this.type, this.scale)\n\t\t\t\t\t?? getUnknownScale(this.scale)).label,\n\t\t\t\tvalue: this.value,\n\t\t\t},\n\t\t};\n\t}\n}\n\nconst testResponseForMultilevelSensorGet: CCResponsePredicate<\n\tMultilevelSensorCCGet,\n\tMultilevelSensorCCReport\n> = (sent, received) => {\n\t// We expect a Multilevel Sensor Report that matches the requested sensor type (if a type was requested)\n\treturn sent.sensorType == undefined || received.type === sent.sensorType;\n};\n\n// These options are supported starting in V5\n// @publicAPI\nexport type MultilevelSensorCCGetOptions = AllOrNone<{\n\tsensorType: number;\n\tscale: number;\n}>;\n\n@CCCommand(MultilevelSensorCommand.Get)\n@expectedCCResponse(\n\tMultilevelSensorCCReport,\n\ttestResponseForMultilevelSensorGet,\n)\nexport class MultilevelSensorCCGet extends MultilevelSensorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSensorCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (\"sensorType\" in options) {\n\t\t\tthis.sensorType = options.sensorType;\n\t\t\tthis.scale = options.scale;\n\t\t}\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSensorCCGet {\n\t\tif (raw.payload.length >= 2) {\n\t\t\tconst sensorType = raw.payload[0];\n\t\t\tconst scale = (raw.payload[1] >> 3) & 0b11;\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\tsensorType,\n\t\t\t\tscale,\n\t\t\t});\n\t\t} else {\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic sensorType: number | undefined;\n\tpublic scale: number | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tif (\n\t\t\tthis.sensorType != undefined\n\t\t\t&& this.scale != undefined\n\t\t) {\n\t\t\tthis.payload = Bytes.from([\n\t\t\t\tthis.sensorType,\n\t\t\t\t(this.scale & 0b11) << 3,\n\t\t\t]);\n\t\t}\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord = {};\n\t\tif (\n\t\t\tthis.sensorType != undefined\n\t\t\t&& this.scale != undefined\n\t\t) {\n\t\t\tmessage = {\n\t\t\t\t\"sensor type\": getSensorName(\n\t\t\t\t\tthis.sensorType,\n\t\t\t\t),\n\t\t\t\tscale: (getSensorScale(\n\t\t\t\t\tthis.sensorType,\n\t\t\t\t\tthis.scale,\n\t\t\t\t) ?? getUnknownScale(this.scale)).label,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultilevelSensorCCSupportedSensorReportOptions {\n\tsupportedSensorTypes: readonly number[];\n}\n\n@CCCommand(MultilevelSensorCommand.SupportedSensorReport)\n@ccValueProperty(\n\t\"supportedSensorTypes\",\n\tMultilevelSensorCCValues.supportedSensorTypes,\n)\nexport class MultilevelSensorCCSupportedSensorReport\n\textends MultilevelSensorCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSensorCCSupportedSensorReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.supportedSensorTypes = options.supportedSensorTypes;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSensorCCSupportedSensorReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst supportedSensorTypes = parseBitMask(raw.payload);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportedSensorTypes,\n\t\t});\n\t}\n\n\t// TODO: Use this during interview to precreate values\n\n\tpublic supportedSensorTypes: readonly number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = encodeBitMask(this.supportedSensorTypes);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supported sensor types\": this.supportedSensorTypes\n\t\t\t\t\t.map((t) => `\\n\u00B7 ${getSensorName(t)}`)\n\t\t\t\t\t.join(\"\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(MultilevelSensorCommand.GetSupportedSensor)\n@expectedCCResponse(MultilevelSensorCCSupportedSensorReport)\nexport class MultilevelSensorCCGetSupportedSensor extends MultilevelSensorCC {}\n\n// @publicAPI\nexport interface MultilevelSensorCCSupportedScaleReportOptions {\n\tsensorType: number;\n\tsupportedScales: readonly number[];\n}\n\n@CCCommand(MultilevelSensorCommand.SupportedScaleReport)\n@ccValueProperty(\n\t\"supportedScales\",\n\tMultilevelSensorCCValues.supportedScales,\n\t(self) => [self.sensorType],\n)\nexport class MultilevelSensorCCSupportedScaleReport extends MultilevelSensorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSensorCCSupportedScaleReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.sensorType = options.sensorType;\n\t\tthis.supportedScales = options.supportedScales;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSensorCCSupportedScaleReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst sensorType = raw.payload[0];\n\t\tconst supportedScales = parseBitMask(\n\t\t\tBytes.from([raw.payload[1] & 0b1111]),\n\t\t\t0,\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsensorType,\n\t\t\tsupportedScales,\n\t\t});\n\t}\n\n\tpublic readonly sensorType: number;\n\n\tpublic readonly supportedScales: readonly number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.sensorType]),\n\t\t\tencodeBitMask(this.supportedScales, 4, 0),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"sensor type\": getSensorName(this.sensorType),\n\t\t\t\t\"supported scales\": this.supportedScales\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(s) =>\n\t\t\t\t\t\t\t`\\n\u00B7 ${\n\t\t\t\t\t\t\t\t(getSensorScale(this.sensorType, s)\n\t\t\t\t\t\t\t\t\t?? getUnknownScale(s)).label\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultilevelSensorCCGetSupportedScaleOptions {\n\tsensorType: number;\n}\n\n@CCCommand(MultilevelSensorCommand.GetSupportedScale)\n@expectedCCResponse(MultilevelSensorCCSupportedScaleReport)\nexport class MultilevelSensorCCGetSupportedScale extends MultilevelSensorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSensorCCGetSupportedScaleOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.sensorType = options.sensorType;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSensorCCGetSupportedScale {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst sensorType = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsensorType,\n\t\t});\n\t}\n\n\tpublic sensorType: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.sensorType]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"sensor type\": getSensorName(this.sensorType),\n\t\t\t},\n\t\t};\n\t}\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_safe", "preferred"]
4
+ "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport type { GetDeviceConfig } from \"@zwave-js/config\";\nimport {\n\tCommandClasses,\n\ttype ControlsCC,\n\ttype EndpointId,\n\ttype GetEndpoint,\n\ttype GetNode,\n\ttype GetSupportedCCVersion,\n\ttype GetValueDB,\n\ttype LogNode,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype NodeId,\n\ttype Scale,\n\ttype SinglecastCC,\n\ttype SupervisionResult,\n\ttype SupportsCC,\n\ttype ValueID,\n\tValueMetadata,\n\ttype WithAddress,\n\tencodeBitMask,\n\tencodeFloatWithScale,\n\tgetSensor,\n\tgetSensorName,\n\tgetSensorScale,\n\tgetUnknownScale,\n\tparseBitMask,\n\tparseFloatWithScale,\n\ttimespan,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { type AllOrNone, Bytes, num2hex } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\tPhysicalCCAPI,\n\ttype PollValueImplementation,\n\tthrowUnsupportedProperty,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\ttype CCResponsePredicate,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n\ttype RefreshValuesContext,\n\tgetEffectiveCCVersion,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\tMultilevelSensorCommand,\n\ttype MultilevelSensorValue,\n} from \"../lib/_Types.js\";\nimport type { GetUserPreferences } from \"../lib/traits.js\";\n\nexport const MultilevelSensorCCValues = V.defineCCValues(\n\tCommandClasses[\"Multilevel Sensor\"],\n\t{\n\t\t...V.staticProperty(\"supportedSensorTypes\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"supportedScales\",\n\t\t\t\"supportedScales\",\n\t\t\t(sensorType: number) => sensorType,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"supportedScales\"\n\t\t\t\t&& typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\t\t...V.dynamicPropertyWithName(\n\t\t\t\"value\",\n\t\t\t// This should have been the sensor type, but it is too late to change now\n\t\t\t// Maybe we can migrate this without breaking in the future\n\t\t\t(sensorTypeName: string) => sensorTypeName,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\ttypeof property === \"string\"\n\t\t\t\t&& property !== \"supportedSensorTypes\"\n\t\t\t\t&& property !== \"supportedScales\"\n\t\t\t\t&& propertyKey == undefined,\n\t\t\t(sensorTypeName: string) => ({\n\t\t\t\t// Just the base metadata, to be extended using a config manager\n\t\t\t\t...ValueMetadata.ReadOnlyNumber,\n\t\t\t\tlabel: sensorTypeName,\n\t\t\t} as const),\n\t\t),\n\t},\n);\n\n/**\n * Determine the scale to use to query a sensor reading. Uses the user-preferred scale if given,\n * followed by the most recently used scale, otherwile falls back to the first supported one.\n */\nfunction getPreferredSensorScale(\n\tctx: GetValueDB & GetUserPreferences & LogNode,\n\tnodeId: number,\n\tendpointIndex: number,\n\tsensorType: number,\n\tsupportedScales: readonly number[],\n): number {\n\tconst preferences = ctx.getUserPreferences();\n\tconst sensor = getSensor(sensorType);\n\t// If the sensor type is unknown, we have no default. Use the user-provided scale or 0\n\tif (!sensor) {\n\t\tconst preferred = preferences?.scales[sensorType];\n\t\t// We cannot look up strings for unknown sensor types, so this must be a number or we use the fallback\n\t\tif (typeof preferred !== \"number\") return 0;\n\t\treturn preferred;\n\t}\n\n\t// Look up the preference for the scale\n\tlet preferred: number | string | undefined;\n\t// Named scales apply to multiple sensor types. To be able to override the scale for single types\n\t// we need to look at the preferences by sensor type first\n\tpreferred = preferences?.scales[sensorType];\n\t// If the scale is named, we can then try to use the named preference\n\tconst scaleGroupName = sensor.scaleGroupName;\n\tif (preferred == undefined && scaleGroupName) {\n\t\tpreferred = preferences?.scales[scaleGroupName];\n\t}\n\t// Then attempt reading the scale from the corresponding value\n\tif (preferred == undefined) {\n\t\tconst sensorName = getSensorName(sensorType);\n\t\tconst sensorValue = MultilevelSensorCCValues.value(sensorName);\n\t\tconst metadata = ctx\n\t\t\t.tryGetValueDB(nodeId)\n\t\t\t?.getMetadata(sensorValue.endpoint(endpointIndex));\n\t\tconst scale = metadata?.ccSpecific?.scale;\n\t\tif (typeof scale === \"number\" && supportedScales.includes(scale)) {\n\t\t\tpreferred = scale;\n\t\t\tctx.logNode(nodeId, {\n\t\t\t\tendpoint: endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`No scale preference for sensor type ${sensorType}, using the last-used scale ${preferred}`,\n\t\t\t});\n\t\t}\n\t}\n\t// Then fall back to the first supported scale\n\tif (preferred == undefined) {\n\t\tpreferred = supportedScales[0] ?? 0;\n\t\tctx.logNode(nodeId, {\n\t\t\tendpoint: endpointIndex,\n\t\t\tmessage:\n\t\t\t\t`No scale preference for sensor type ${sensorType}, using the first supported scale ${preferred}`,\n\t\t});\n\t\treturn preferred;\n\t}\n\n\t// If the scale name or unit was given, try to look it up\n\tif (typeof preferred === \"string\") {\n\t\tfor (const [key, scale] of Object.entries(sensor.scales)) {\n\t\t\tif (scale.label === preferred || scale.unit === preferred) {\n\t\t\t\tpreferred = parseInt(key, 10);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (typeof preferred === \"string\") {\n\t\t// Looking up failed\n\t\tctx.logNode(nodeId, {\n\t\t\tendpoint: endpointIndex,\n\t\t\tmessage:\n\t\t\t\t`Preferred scale \"${preferred}\" for sensor type ${sensorType} not found, using the first supported scale ${\n\t\t\t\t\tsupportedScales[0] ?? 0\n\t\t\t\t}`,\n\t\t});\n\t\treturn supportedScales[0] ?? 0;\n\t}\n\n\t// We have a numeric scale key, nothing to look up. Make sure it is supported though\n\tif (!supportedScales.length) {\n\t\t// No info about supported scales, just use the preferred one\n\t\treturn preferred;\n\t} else if (!supportedScales.includes(preferred)) {\n\t\tctx.logNode(nodeId, {\n\t\t\tendpoint: endpointIndex,\n\t\t\tmessage:\n\t\t\t\t`Preferred scale ${preferred} not supported for sensor type ${sensorType}, using the first supported scale`,\n\t\t});\n\t\treturn supportedScales[0];\n\t} else {\n\t\treturn preferred;\n\t}\n}\n\n// @noSetValueAPI This CC is read-only\n\n@API(CommandClasses[\"Multilevel Sensor\"])\nexport class MultilevelSensorCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(\n\t\tcmd: MultilevelSensorCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase MultilevelSensorCommand.Get:\n\t\t\tcase MultilevelSensorCommand.Report:\n\t\t\t\treturn true; // This is mandatory\n\t\t\tcase MultilevelSensorCommand.GetSupportedSensor:\n\t\t\tcase MultilevelSensorCommand.GetSupportedScale:\n\t\t\t\treturn this.version >= 5;\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: MultilevelSensorCCAPI, { property }) {\n\t\t\t// Look up the necessary information\n\t\t\tconst valueId: ValueID = {\n\t\t\t\tcommandClass: CommandClasses[\"Multilevel Sensor\"],\n\t\t\t\tendpoint: this.endpoint.index,\n\t\t\t\tproperty,\n\t\t\t};\n\t\t\tconst ccSpecific = this.tryGetValueDB()?.getMetadata(valueId)\n\t\t\t\t?.ccSpecific;\n\t\t\tif (!ccSpecific) {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\n\t\t\tconst { sensorType, scale } = ccSpecific;\n\t\t\treturn this.get(sensorType, scale);\n\t\t};\n\t}\n\n\t/** Query the default sensor value */\n\tpublic async get(): Promise<\n\t\tMaybeNotKnown<MultilevelSensorValue & { type: number }>\n\t>;\n\t/** Query the sensor value for the given sensor type using the preferred sensor scale */\n\tpublic async get(\n\t\tsensorType: number,\n\t): Promise<MaybeNotKnown<MultilevelSensorValue>>;\n\t/** Query the sensor value for the given sensor type using the given sensor scale */\n\tpublic async get(\n\t\tsensorType: number,\n\t\tscale: number,\n\t): Promise<MaybeNotKnown<number>>;\n\n\t@validateArgs()\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async get(sensorType?: number, scale?: number) {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSensorCommand,\n\t\t\tMultilevelSensorCommand.Get,\n\t\t);\n\n\t\t// Figure out the preferred scale if none was given\n\t\tlet preferredScale: number | undefined;\n\t\tif (sensorType != undefined && scale == undefined) {\n\t\t\tconst supportedScales: readonly number[] =\n\t\t\t\tthis.tryGetValueDB()?.getValue({\n\t\t\t\t\tcommandClass: this.ccId,\n\t\t\t\t\tendpoint: this.endpoint.index,\n\t\t\t\t\tproperty: \"supportedScales\",\n\t\t\t\t\tpropertyKey: sensorType,\n\t\t\t\t}) ?? [];\n\n\t\t\tpreferredScale = getPreferredSensorScale(\n\t\t\t\tthis.host,\n\t\t\t\tthis.endpoint.nodeId,\n\t\t\t\tthis.endpoint.index,\n\t\t\t\tsensorType,\n\t\t\t\tsupportedScales,\n\t\t\t);\n\t\t}\n\n\t\tconst cc = new MultilevelSensorCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tsensorType: sensorType!,\n\t\t\tscale: (scale ?? preferredScale)!,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultilevelSensorCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (!response) return;\n\n\t\tconst responseScale = getSensorScale(response.type, response.scale);\n\n\t\tif (sensorType == undefined) {\n\t\t\t// Overload #1: return the full response\n\t\t\treturn {\n\t\t\t\ttype: response.type,\n\t\t\t\tvalue: response.value,\n\t\t\t\tscale: responseScale,\n\t\t\t};\n\t\t} else if (scale == undefined) {\n\t\t\t// Overload #2: return value and scale\n\t\t\treturn {\n\t\t\t\tvalue: response.value,\n\t\t\t\tscale: responseScale,\n\t\t\t};\n\t\t} else {\n\t\t\t// Overload #3: return only the value\n\t\t\treturn response.value;\n\t\t}\n\t}\n\n\tpublic async getSupportedSensorTypes(): Promise<\n\t\tMaybeNotKnown<readonly number[]>\n\t> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSensorCommand,\n\t\t\tMultilevelSensorCommand.GetSupportedSensor,\n\t\t);\n\n\t\tconst cc = new MultilevelSensorCCGetSupportedSensor({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultilevelSensorCCSupportedSensorReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.supportedSensorTypes;\n\t}\n\n\t@validateArgs()\n\tpublic async getSupportedScales(\n\t\tsensorType: number,\n\t): Promise<MaybeNotKnown<readonly number[]>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSensorCommand,\n\t\t\tMultilevelSensorCommand.GetSupportedScale,\n\t\t);\n\n\t\tconst cc = new MultilevelSensorCCGetSupportedScale({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tsensorType,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tMultilevelSensorCCSupportedScaleReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.supportedScales;\n\t}\n\n\t@validateArgs()\n\tpublic async sendReport(\n\t\tsensorType: number,\n\t\tscale: number | Scale,\n\t\tvalue: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tMultilevelSensorCommand,\n\t\t\tMultilevelSensorCommand.Report,\n\t\t);\n\n\t\tconst cc = new MultilevelSensorCCReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\ttype: sensorType,\n\t\t\tscale,\n\t\t\tvalue,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses[\"Multilevel Sensor\"])\n@implementedVersion(11)\n@ccValues(MultilevelSensorCCValues)\nexport class MultilevelSensorCC extends CommandClass {\n\tdeclare ccCommand: MultilevelSensorCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Multilevel Sensor\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tif (api.version >= 5) {\n\t\t\t// Query the supported sensor types\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"retrieving supported sensor types...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst sensorTypes = await api.getSupportedSensorTypes();\n\t\t\tif (sensorTypes) {\n\t\t\t\tconst logMessage = \"received supported sensor types:\\n\"\n\t\t\t\t\t+ sensorTypes\n\t\t\t\t\t\t.map((t) => getSensorName(t))\n\t\t\t\t\t\t.map((name) => `\u00B7 ${name}`)\n\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Querying supported sensor types timed out, skipping interview...\",\n\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// As well as the supported scales for each sensor\n\n\t\t\tfor (const type of sensorTypes) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `querying supported scales for ${\n\t\t\t\t\t\tgetSensorName(type)\n\t\t\t\t\t} sensor`,\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\t\t\t\tconst sensorScales = await api.getSupportedScales(type);\n\t\t\t\tif (sensorScales) {\n\t\t\t\t\tconst logMessage = \"received supported scales:\\n\"\n\t\t\t\t\t\t+ sensorScales\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t(s) =>\n\t\t\t\t\t\t\t\t\t(getSensorScale(type, s)\n\t\t\t\t\t\t\t\t\t\t?? getUnknownScale(s)).label,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map((name) => `\u00B7 ${name}`)\n\t\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\"Querying supported scales timed out, skipping interview...\",\n\t\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tawait this.refreshValues(ctx);\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Multilevel Sensor\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\t\tconst valueDB = this.getValueDB(ctx);\n\n\t\tif (api.version <= 4) {\n\t\t\t// Sensors up to V4 only support a single value\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"querying current sensor reading...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst mlsResponse = await api.get();\n\t\t\tif (mlsResponse) {\n\t\t\t\tconst sensorScale = getSensorScale(\n\t\t\t\t\tmlsResponse.type,\n\t\t\t\t\tmlsResponse.scale.key,\n\t\t\t\t);\n\t\t\t\tconst logMessage = `received current sensor reading:\nsensor type: ${getSensorName(mlsResponse.type)}\nvalue: ${mlsResponse.value}${\n\t\t\t\t\tsensorScale?.unit ? ` ${sensorScale.unit}` : \"\"\n\t\t\t\t}`;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\t// Query all sensor values\n\t\t\tconst sensorTypes: readonly number[] = valueDB.getValue({\n\t\t\t\tcommandClass: this.ccId,\n\t\t\t\tproperty: \"supportedSensorTypes\",\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t}) || [];\n\n\t\t\tfor (const type of sensorTypes) {\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: `querying ${\n\t\t\t\t\t\tgetSensorName(type)\n\t\t\t\t\t} sensor reading...`,\n\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t});\n\n\t\t\t\tconst value = await api.get(type);\n\t\t\t\tif (value) {\n\t\t\t\t\tconst logMessage = `received current ${\n\t\t\t\t\t\tgetSensorName(type)\n\t\t\t\t\t} sensor reading: ${value.value} ${value.scale.unit || \"\"}`;\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic shouldRefreshValues(\n\t\tthis: SinglecastCC<this>,\n\t\tctx:\n\t\t\t& GetValueDB\n\t\t\t& GetSupportedCCVersion\n\t\t\t& GetDeviceConfig\n\t\t\t& GetNode<\n\t\t\t\tNodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>\n\t\t\t>,\n\t): boolean {\n\t\t// Poll the device when all of the supported values were last updated longer than 6 hours ago.\n\t\t// This may lead to some values not being updated, but the user may have disabled some unnecessary\n\t\t// reports to reduce traffic.\n\t\tconst valueDB = ctx.tryGetValueDB(this.nodeId);\n\t\tif (!valueDB) return true;\n\n\t\tconst values = this.getDefinedValueIDs(ctx).filter((v) =>\n\t\t\tMultilevelSensorCCValues.value.is(v)\n\t\t);\n\t\treturn values.every((v) => {\n\t\t\tconst lastUpdated = valueDB.getTimestamp(v);\n\t\t\treturn (\n\t\t\t\tlastUpdated == undefined\n\t\t\t\t|| Date.now() - lastUpdated > timespan.hours(6)\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Returns which sensor types are supported.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getSupportedSensorTypesCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t): MaybeNotKnown<number[]> {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tMultilevelSensorCCValues.supportedSensorTypes.endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t);\n\t}\n\n\t/**\n\t * Returns which scales are supported for a given sensor type.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getSupportedScalesCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tsensorType: number,\n\t): MaybeNotKnown<number[]> {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tMultilevelSensorCCValues.supportedScales(sensorType).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t);\n\t}\n\n\tpublic translatePropertyKey(\n\t\tctx: GetValueDB,\n\t\tproperty: string | number,\n\t\tpropertyKey: string | number,\n\t): string | undefined {\n\t\t// TODO: check this\n\t\tif (property === \"values\" && typeof propertyKey === \"number\") {\n\t\t\tconst sensor = getSensor(propertyKey);\n\t\t\tif (sensor) return sensor.label;\n\t\t}\n\t\treturn super.translatePropertyKey(ctx, property, propertyKey);\n\t}\n}\n\n// @publicAPI\nexport interface MultilevelSensorCCReportOptions {\n\ttype: number;\n\tscale: number | Scale;\n\tvalue: number;\n}\n\n@CCCommand(MultilevelSensorCommand.Report)\n@useSupervision()\nexport class MultilevelSensorCCReport extends MultilevelSensorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSensorCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.type = options.type;\n\t\tthis.value = options.value;\n\t\tthis.scale = typeof options.scale === \"number\"\n\t\t\t? options.scale\n\t\t\t: options.scale.key;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSensorCCReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst type = raw.payload[0];\n\n\t\t// parseFloatWithScale does its own validation\n\t\tconst { value, scale } = parseFloatWithScale(\n\t\t\traw.payload.subarray(1),\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttype,\n\t\t\tvalue,\n\t\t\tscale,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tconst sensor = getSensor(this.type);\n\t\tconst scale = getSensorScale(\n\t\t\tthis.type,\n\t\t\tthis.scale,\n\t\t) ?? getUnknownScale(this.scale);\n\n\t\t// Filter out unknown sensor types and scales, unless the strict validation is disabled\n\t\tconst measurementValidation = !ctx.getDeviceConfig?.(\n\t\t\tthis.nodeId as number,\n\t\t)?.compat?.disableStrictMeasurementValidation;\n\n\t\tconst ccVersion = getEffectiveCCVersion(ctx, this);\n\n\t\tif (measurementValidation) {\n\t\t\t// Filter out unsupported sensor types and scales if possible\n\t\t\tif (ccVersion >= 5) {\n\t\t\t\tconst supportedSensorTypes = this.getValue<number[]>(\n\t\t\t\t\tctx,\n\t\t\t\t\tMultilevelSensorCCValues.supportedSensorTypes,\n\t\t\t\t);\n\t\t\t\tif (supportedSensorTypes?.length) {\n\t\t\t\t\tvalidatePayload.withReason(\n\t\t\t\t\t\t`Unsupported sensor type ${\n\t\t\t\t\t\t\tgetSensorName(this.type)\n\t\t\t\t\t\t} or corrupted data`,\n\t\t\t\t\t)(supportedSensorTypes.includes(this.type));\n\t\t\t\t}\n\n\t\t\t\tconst supportedScales = this.getValue<number[]>(\n\t\t\t\t\tctx,\n\t\t\t\t\tMultilevelSensorCCValues.supportedScales(this.type),\n\t\t\t\t);\n\t\t\t\tif (supportedScales?.length) {\n\t\t\t\t\tvalidatePayload.withReason(\n\t\t\t\t\t\t`Unsupported scale ${scale.label} or corrupted data`,\n\t\t\t\t\t)(supportedScales.includes(scale.key));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We support a higher CC version than the device, so any types and scales it uses should be known to us\n\t\t\t\t// Filter out unknown ones.\n\t\t\t\tvalidatePayload.withReason(\n\t\t\t\t\t`Unknown sensor type ${\n\t\t\t\t\t\tnum2hex(\n\t\t\t\t\t\t\tthis.type,\n\t\t\t\t\t\t)\n\t\t\t\t\t} or corrupted data`,\n\t\t\t\t)(!!sensor);\n\t\t\t\tvalidatePayload.withReason(\n\t\t\t\t\t`Unknown scale ${num2hex(this.scale)} or corrupted data`,\n\t\t\t\t)(scale.label !== getUnknownScale(this.scale).label);\n\t\t\t}\n\t\t}\n\n\t\tconst sensorName = getSensorName(this.type);\n\t\tconst sensorValue = MultilevelSensorCCValues.value(sensorName);\n\n\t\tthis.setMetadata(ctx, sensorValue, {\n\t\t\t...sensorValue.meta,\n\t\t\tunit: scale.unit,\n\t\t\tccSpecific: {\n\t\t\t\tsensorType: this.type,\n\t\t\t\tscale: scale.key,\n\t\t\t},\n\t\t});\n\t\tthis.setValue(ctx, sensorValue, this.value);\n\n\t\treturn true;\n\t}\n\n\tpublic type: number;\n\tpublic scale: number;\n\tpublic value: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.type]),\n\t\t\tencodeFloatWithScale(this.value, this.scale),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"sensor type\": getSensorName(this.type),\n\t\t\t\tscale: (getSensorScale(this.type, this.scale)\n\t\t\t\t\t?? getUnknownScale(this.scale)).label,\n\t\t\t\tvalue: this.value,\n\t\t\t},\n\t\t};\n\t}\n}\n\nconst testResponseForMultilevelSensorGet: CCResponsePredicate<\n\tMultilevelSensorCCGet,\n\tMultilevelSensorCCReport\n> = (sent, received) => {\n\t// We expect a Multilevel Sensor Report that matches the requested sensor type (if a type was requested)\n\treturn sent.sensorType == undefined || received.type === sent.sensorType;\n};\n\n// These options are supported starting in V5\n// @publicAPI\nexport type MultilevelSensorCCGetOptions = AllOrNone<{\n\tsensorType: number;\n\tscale: number;\n}>;\n\n@CCCommand(MultilevelSensorCommand.Get)\n@expectedCCResponse(\n\tMultilevelSensorCCReport,\n\ttestResponseForMultilevelSensorGet,\n)\nexport class MultilevelSensorCCGet extends MultilevelSensorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSensorCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (\"sensorType\" in options) {\n\t\t\tthis.sensorType = options.sensorType;\n\t\t\tthis.scale = options.scale;\n\t\t}\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSensorCCGet {\n\t\tif (raw.payload.length >= 2) {\n\t\t\tconst sensorType = raw.payload[0];\n\t\t\tconst scale = (raw.payload[1] >> 3) & 0b11;\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\tsensorType,\n\t\t\t\tscale,\n\t\t\t});\n\t\t} else {\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic sensorType: number | undefined;\n\tpublic scale: number | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tif (\n\t\t\tthis.sensorType != undefined\n\t\t\t&& this.scale != undefined\n\t\t) {\n\t\t\tthis.payload = Bytes.from([\n\t\t\t\tthis.sensorType,\n\t\t\t\t(this.scale & 0b11) << 3,\n\t\t\t]);\n\t\t}\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord = {};\n\t\tif (\n\t\t\tthis.sensorType != undefined\n\t\t\t&& this.scale != undefined\n\t\t) {\n\t\t\tmessage = {\n\t\t\t\t\"sensor type\": getSensorName(\n\t\t\t\t\tthis.sensorType,\n\t\t\t\t),\n\t\t\t\tscale: (getSensorScale(\n\t\t\t\t\tthis.sensorType,\n\t\t\t\t\tthis.scale,\n\t\t\t\t) ?? getUnknownScale(this.scale)).label,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultilevelSensorCCSupportedSensorReportOptions {\n\tsupportedSensorTypes: readonly number[];\n}\n\n@CCCommand(MultilevelSensorCommand.SupportedSensorReport)\n@ccValueProperty(\n\t\"supportedSensorTypes\",\n\tMultilevelSensorCCValues.supportedSensorTypes,\n)\nexport class MultilevelSensorCCSupportedSensorReport\n\textends MultilevelSensorCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSensorCCSupportedSensorReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.supportedSensorTypes = options.supportedSensorTypes;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSensorCCSupportedSensorReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst supportedSensorTypes = parseBitMask(raw.payload);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportedSensorTypes,\n\t\t});\n\t}\n\n\t// TODO: Use this during interview to precreate values\n\n\tpublic supportedSensorTypes: readonly number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = encodeBitMask(this.supportedSensorTypes);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supported sensor types\": this.supportedSensorTypes\n\t\t\t\t\t.map((t) => `\\n\u00B7 ${getSensorName(t)}`)\n\t\t\t\t\t.join(\"\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(MultilevelSensorCommand.GetSupportedSensor)\n@expectedCCResponse(MultilevelSensorCCSupportedSensorReport)\nexport class MultilevelSensorCCGetSupportedSensor extends MultilevelSensorCC {}\n\n// @publicAPI\nexport interface MultilevelSensorCCSupportedScaleReportOptions {\n\tsensorType: number;\n\tsupportedScales: readonly number[];\n}\n\n@CCCommand(MultilevelSensorCommand.SupportedScaleReport)\n@ccValueProperty(\n\t\"supportedScales\",\n\tMultilevelSensorCCValues.supportedScales,\n\t(self) => [self.sensorType],\n)\nexport class MultilevelSensorCCSupportedScaleReport extends MultilevelSensorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSensorCCSupportedScaleReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.sensorType = options.sensorType;\n\t\tthis.supportedScales = options.supportedScales;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSensorCCSupportedScaleReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst sensorType = raw.payload[0];\n\t\tconst supportedScales = parseBitMask(\n\t\t\tBytes.from([raw.payload[1] & 0b1111]),\n\t\t\t0,\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsensorType,\n\t\t\tsupportedScales,\n\t\t});\n\t}\n\n\tpublic readonly sensorType: number;\n\n\tpublic readonly supportedScales: readonly number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.sensorType]),\n\t\t\tencodeBitMask(this.supportedScales, 4, 0),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"sensor type\": getSensorName(this.sensorType),\n\t\t\t\t\"supported scales\": this.supportedScales\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(s) =>\n\t\t\t\t\t\t\t`\\n\u00B7 ${\n\t\t\t\t\t\t\t\t(getSensorScale(this.sensorType, s)\n\t\t\t\t\t\t\t\t\t?? getUnknownScale(s)).label\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface MultilevelSensorCCGetSupportedScaleOptions {\n\tsensorType: number;\n}\n\n@CCCommand(MultilevelSensorCommand.GetSupportedScale)\n@expectedCCResponse(MultilevelSensorCCSupportedScaleReport)\nexport class MultilevelSensorCCGetSupportedScale extends MultilevelSensorCC {\n\tpublic constructor(\n\t\toptions: WithAddress<MultilevelSensorCCGetSupportedScaleOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.sensorType = options.sensorType;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): MultilevelSensorCCGetSupportedScale {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst sensorType = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsensorType,\n\t\t});\n\t}\n\n\tpublic sensorType: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.sensorType]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"sensor type\": getSensorName(this.sensorType),\n\t\t\t},\n\t\t};\n\t}\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["preferred"]
7
7
  }
@@ -33,13 +33,13 @@ __export(MultilevelSwitchCC_validateArgs_exports, {
33
33
  validateArgs_MultilevelSwitchCCAPI_startLevelChange: () => validateArgs_MultilevelSwitchCCAPI_startLevelChange
34
34
  });
35
35
  module.exports = __toCommonJS(MultilevelSwitchCC_validateArgs_exports);
36
- var import_safe = require("@zwave-js/core/safe");
36
+ var import_core = require("@zwave-js/core");
37
37
  var v = __toESM(require("@zwave-js/core/validation"), 1);
38
38
  function validateArgs_MultilevelSwitchCCAPI_set() {
39
39
  return (__decoratedMethod, { kind }) => {
40
40
  if (kind === "method") {
41
41
  return /* @__PURE__ */ __name(function set(targetValue, duration) {
42
- v.assert(v.primitive({ kind: "parameter", name: "targetValue" }, "number")(targetValue), v.optional({ kind: "parameter", name: "duration" }, v.oneOf({ kind: "parameter", name: "duration" }, void 0, v.primitive({ kind: "parameter", name: "duration" }, "string"), v.class({ kind: "parameter", name: "duration" }, "Duration", import_safe.Duration)))(duration));
42
+ v.assert(v.primitive({ kind: "parameter", name: "targetValue" }, "number")(targetValue), v.optional({ kind: "parameter", name: "duration" }, v.oneOf({ kind: "parameter", name: "duration" }, void 0, v.primitive({ kind: "parameter", name: "duration" }, "string"), v.class({ kind: "parameter", name: "duration" }, "Duration", import_core.Duration)))(duration));
43
43
  return __decoratedMethod.call(this, targetValue, duration);
44
44
  }, "set");
45
45
  }
@@ -50,7 +50,7 @@ function validateArgs_MultilevelSwitchCCAPI_startLevelChange() {
50
50
  return (__decoratedMethod, { kind }) => {
51
51
  if (kind === "method") {
52
52
  return /* @__PURE__ */ __name(function startLevelChange(options) {
53
- v.assert(v.oneOf({ kind: "parameter", name: "options" }, "MultilevelSwitchCCStartLevelChangeOptions", v.allOf({ kind: "parameter", name: "options" }, void 0, v.object({ kind: "parameter", name: "options" }, "<anonymous object>", { "direction": v.oneOf({ kind: "property", name: "direction" }, void 0, v.literal({ kind: "property", name: "direction" }, "up"), v.literal({ kind: "property", name: "direction" }, "down")) }), v.object({ kind: "parameter", name: "options" }, "<anonymous object>", { "ignoreStartLevel": v.literal({ kind: "property", name: "ignoreStartLevel" }, true), "startLevel": v.optional({ kind: "property", name: "startLevel" }, v.primitive({ kind: "property", name: "startLevel" }, "number")) }), v.object({ kind: "parameter", name: "options" }, "<anonymous object>", { "duration": v.optional({ kind: "property", name: "duration" }, v.oneOf({ kind: "property", name: "duration" }, void 0, v.primitive({ kind: "property", name: "duration" }, "string"), v.class({ kind: "property", name: "duration" }, "Duration", import_safe.Duration))) })), v.allOf({ kind: "parameter", name: "options" }, void 0, v.object({ kind: "parameter", name: "options" }, "<anonymous object>", { "direction": v.oneOf({ kind: "property", name: "direction" }, void 0, v.literal({ kind: "property", name: "direction" }, "up"), v.literal({ kind: "property", name: "direction" }, "down")) }), v.object({ kind: "parameter", name: "options" }, "<anonymous object>", { "ignoreStartLevel": v.literal({ kind: "property", name: "ignoreStartLevel" }, false), "startLevel": v.primitive({ kind: "property", name: "startLevel" }, "number") }), v.object({ kind: "parameter", name: "options" }, "<anonymous object>", { "duration": v.optional({ kind: "property", name: "duration" }, v.oneOf({ kind: "property", name: "duration" }, void 0, v.primitive({ kind: "property", name: "duration" }, "string"), v.class({ kind: "property", name: "duration" }, "Duration", import_safe.Duration))) })))(options));
53
+ v.assert(v.oneOf({ kind: "parameter", name: "options" }, "MultilevelSwitchCCStartLevelChangeOptions", v.allOf({ kind: "parameter", name: "options" }, void 0, v.object({ kind: "parameter", name: "options" }, "<anonymous object>", { "direction": v.oneOf({ kind: "property", name: "direction" }, void 0, v.literal({ kind: "property", name: "direction" }, "up"), v.literal({ kind: "property", name: "direction" }, "down")) }), v.object({ kind: "parameter", name: "options" }, "<anonymous object>", { "ignoreStartLevel": v.literal({ kind: "property", name: "ignoreStartLevel" }, true), "startLevel": v.optional({ kind: "property", name: "startLevel" }, v.primitive({ kind: "property", name: "startLevel" }, "number")) }), v.object({ kind: "parameter", name: "options" }, "<anonymous object>", { "duration": v.optional({ kind: "property", name: "duration" }, v.oneOf({ kind: "property", name: "duration" }, void 0, v.primitive({ kind: "property", name: "duration" }, "string"), v.class({ kind: "property", name: "duration" }, "Duration", import_core.Duration))) })), v.allOf({ kind: "parameter", name: "options" }, void 0, v.object({ kind: "parameter", name: "options" }, "<anonymous object>", { "direction": v.oneOf({ kind: "property", name: "direction" }, void 0, v.literal({ kind: "property", name: "direction" }, "up"), v.literal({ kind: "property", name: "direction" }, "down")) }), v.object({ kind: "parameter", name: "options" }, "<anonymous object>", { "ignoreStartLevel": v.literal({ kind: "property", name: "ignoreStartLevel" }, false), "startLevel": v.primitive({ kind: "property", name: "startLevel" }, "number") }), v.object({ kind: "parameter", name: "options" }, "<anonymous object>", { "duration": v.optional({ kind: "property", name: "duration" }, v.oneOf({ kind: "property", name: "duration" }, void 0, v.primitive({ kind: "property", name: "duration" }, "string"), v.class({ kind: "property", name: "duration" }, "Duration", import_core.Duration))) })))(options));
54
54
  return __decoratedMethod.call(this, options);
55
55
  }, "startLevelChange");
56
56
  }
@@ -1,6 +1,6 @@
1
- import { type CCEncodingContext, type CCParsingContext } from "@zwave-js/cc";
2
- import { CommandClasses, Duration, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, type SupervisionResult, type WithAddress } from "@zwave-js/core/safe";
3
- import { Bytes } from "@zwave-js/shared/safe";
1
+ import type { CCEncodingContext, CCParsingContext } from "@zwave-js/cc";
2
+ import { CommandClasses, Duration, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, type SupervisionResult, type WithAddress } from "@zwave-js/core";
3
+ import { Bytes } from "@zwave-js/shared";
4
4
  import { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory } from "../lib/API.js";
5
5
  import { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext } from "../lib/CommandClass.js";
6
6
  import { LevelChangeDirection, MultilevelSwitchCommand, SwitchType } from "../lib/_Types.js";
@@ -15,7 +15,7 @@ export declare const MultilevelSwitchCCValues: Readonly<{
15
15
  readonly endpoint: number;
16
16
  readonly property: "currentValue";
17
17
  };
18
- is: (valueId: import("@zwave-js/core/safe").ValueID) => boolean;
18
+ is: (valueId: import("@zwave-js/core").ValueID) => boolean;
19
19
  readonly meta: {
20
20
  readonly label: "Current value";
21
21
  readonly writeable: false;
@@ -43,7 +43,7 @@ export declare const MultilevelSwitchCCValues: Readonly<{
43
43
  readonly endpoint: number;
44
44
  readonly property: "targetValue";
45
45
  };
46
- is: (valueId: import("@zwave-js/core/safe").ValueID) => boolean;
46
+ is: (valueId: import("@zwave-js/core").ValueID) => boolean;
47
47
  readonly meta: {
48
48
  readonly label: "Target value";
49
49
  readonly valueChangeOptions: readonly ["transitionDuration"];
@@ -72,7 +72,7 @@ export declare const MultilevelSwitchCCValues: Readonly<{
72
72
  readonly endpoint: number;
73
73
  readonly property: "duration";
74
74
  };
75
- is: (valueId: import("@zwave-js/core/safe").ValueID) => boolean;
75
+ is: (valueId: import("@zwave-js/core").ValueID) => boolean;
76
76
  readonly meta: {
77
77
  readonly label: "Remaining duration";
78
78
  readonly writeable: false;
@@ -98,7 +98,7 @@ export declare const MultilevelSwitchCCValues: Readonly<{
98
98
  readonly endpoint: number;
99
99
  readonly property: "restorePrevious";
100
100
  };
101
- is: (valueId: import("@zwave-js/core/safe").ValueID) => boolean;
101
+ is: (valueId: import("@zwave-js/core").ValueID) => boolean;
102
102
  readonly meta: {
103
103
  readonly label: "Restore previous value";
104
104
  readonly states: {
@@ -127,7 +127,7 @@ export declare const MultilevelSwitchCCValues: Readonly<{
127
127
  readonly endpoint: number;
128
128
  readonly property: "event";
129
129
  };
130
- is: (valueId: import("@zwave-js/core/safe").ValueID) => boolean;
130
+ is: (valueId: import("@zwave-js/core").ValueID) => boolean;
131
131
  readonly meta: {
132
132
  readonly label: "Event value";
133
133
  readonly writeable: false;
@@ -142,7 +142,7 @@ export declare const MultilevelSwitchCCValues: Readonly<{
142
142
  readonly secret: false;
143
143
  readonly stateful: false;
144
144
  readonly supportsEndpoints: true;
145
- readonly autoCreate: (applHost: GetValueDB & import("@zwave-js/config").GetDeviceConfig, endpoint: import("@zwave-js/core/safe").EndpointId) => boolean;
145
+ readonly autoCreate: (applHost: GetValueDB & import("@zwave-js/config").GetDeviceConfig, endpoint: import("@zwave-js/core").EndpointId) => boolean;
146
146
  };
147
147
  };
148
148
  switchType: {
@@ -155,7 +155,7 @@ export declare const MultilevelSwitchCCValues: Readonly<{
155
155
  readonly endpoint: number;
156
156
  readonly property: "switchType";
157
157
  };
158
- is: (valueId: import("@zwave-js/core/safe").ValueID) => boolean;
158
+ is: (valueId: import("@zwave-js/core").ValueID) => boolean;
159
159
  readonly meta: Readonly<{
160
160
  readonly type: "any";
161
161
  readonly readable: true;
@@ -180,7 +180,7 @@ export declare const MultilevelSwitchCCValues: Readonly<{
180
180
  readonly endpoint: 0;
181
181
  readonly property: "superviseStartStopLevelChange";
182
182
  };
183
- is: (valueId: import("@zwave-js/core/safe").ValueID) => boolean;
183
+ is: (valueId: import("@zwave-js/core").ValueID) => boolean;
184
184
  readonly meta: Readonly<{
185
185
  readonly type: "any";
186
186
  readonly readable: true;
@@ -220,7 +220,7 @@ export declare const MultilevelSwitchCCValues: Readonly<{
220
220
  readonly writeable: true;
221
221
  };
222
222
  }) & {
223
- is: (valueId: import("@zwave-js/core/safe").ValueID) => boolean;
223
+ is: (valueId: import("@zwave-js/core").ValueID) => boolean;
224
224
  options: {
225
225
  readonly internal: false;
226
226
  readonly minVersion: 1;
@@ -255,7 +255,7 @@ export declare const MultilevelSwitchCCValues: Readonly<{
255
255
  readonly writeable: true;
256
256
  };
257
257
  }) & {
258
- is: (valueId: import("@zwave-js/core/safe").ValueID) => boolean;
258
+ is: (valueId: import("@zwave-js/core").ValueID) => boolean;
259
259
  options: {
260
260
  readonly internal: false;
261
261
  readonly minVersion: 1;