@zwave-js/cc 15.25.1 → 15.25.3

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 (314) hide show
  1. package/build/cjs/cc/AlarmSensorCC.js +15 -17
  2. package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
  3. package/build/cjs/cc/AssociationCC.d.ts +1 -1
  4. package/build/cjs/cc/AssociationCC.js +5 -2
  5. package/build/cjs/cc/AssociationCC.js.map +2 -2
  6. package/build/cjs/cc/AssociationGroupInfoCC.js +23 -18
  7. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  8. package/build/cjs/cc/BarrierOperatorCC.js +9 -7
  9. package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
  10. package/build/cjs/cc/BasicCC.js +3 -2
  11. package/build/cjs/cc/BasicCC.js.map +2 -2
  12. package/build/cjs/cc/BatteryCC.js +3 -2
  13. package/build/cjs/cc/BatteryCC.js.map +2 -2
  14. package/build/cjs/cc/BinarySensorCC.js +8 -6
  15. package/build/cjs/cc/BinarySensorCC.js.map +2 -2
  16. package/build/cjs/cc/BinarySwitchCC.js +3 -2
  17. package/build/cjs/cc/BinarySwitchCC.js.map +2 -2
  18. package/build/cjs/cc/CentralSceneCC.js +9 -7
  19. package/build/cjs/cc/CentralSceneCC.js.map +2 -2
  20. package/build/cjs/cc/ClockCC.js +3 -2
  21. package/build/cjs/cc/ClockCC.js.map +2 -2
  22. package/build/cjs/cc/ColorSwitchCC.js +9 -6
  23. package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
  24. package/build/cjs/cc/ConfigurationCC.js +27 -27
  25. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  26. package/build/cjs/cc/DoorLockCC.js +49 -63
  27. package/build/cjs/cc/DoorLockCC.js.map +2 -2
  28. package/build/cjs/cc/DoorLockLoggingCC.js +3 -2
  29. package/build/cjs/cc/DoorLockLoggingCC.js.map +2 -2
  30. package/build/cjs/cc/EnergyProductionCC.js +3 -2
  31. package/build/cjs/cc/EnergyProductionCC.js.map +2 -2
  32. package/build/cjs/cc/EntryControlCC.js +5 -3
  33. package/build/cjs/cc/EntryControlCC.js.map +2 -2
  34. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +2 -1
  35. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
  36. package/build/cjs/cc/HumidityControlModeCC.js +9 -8
  37. package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
  38. package/build/cjs/cc/HumidityControlOperatingStateCC.js +3 -2
  39. package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +2 -2
  40. package/build/cjs/cc/HumidityControlSetpointCC.js +19 -17
  41. package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
  42. package/build/cjs/cc/IndicatorCC.js +5 -2
  43. package/build/cjs/cc/IndicatorCC.js.map +2 -2
  44. package/build/cjs/cc/IrrigationCC.js +26 -27
  45. package/build/cjs/cc/IrrigationCC.js.map +2 -2
  46. package/build/cjs/cc/LanguageCC.js +3 -2
  47. package/build/cjs/cc/LanguageCC.js.map +2 -2
  48. package/build/cjs/cc/LockCC.js +3 -2
  49. package/build/cjs/cc/LockCC.js.map +2 -2
  50. package/build/cjs/cc/ManufacturerSpecificCC.js +4 -1
  51. package/build/cjs/cc/ManufacturerSpecificCC.js.map +2 -2
  52. package/build/cjs/cc/MeterCC.js +14 -13
  53. package/build/cjs/cc/MeterCC.js.map +2 -2
  54. package/build/cjs/cc/MultiChannelAssociationCC.js +5 -2
  55. package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
  56. package/build/cjs/cc/MultiChannelCC.d.ts +1 -1
  57. package/build/cjs/cc/MultiChannelCC.js +19 -22
  58. package/build/cjs/cc/MultiChannelCC.js.map +2 -2
  59. package/build/cjs/cc/MultilevelSensorCC.js +13 -8
  60. package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
  61. package/build/cjs/cc/MultilevelSwitchCC.js +5 -3
  62. package/build/cjs/cc/MultilevelSwitchCC.js.map +2 -2
  63. package/build/cjs/cc/NodeNamingCC.js +3 -2
  64. package/build/cjs/cc/NodeNamingCC.js.map +2 -2
  65. package/build/cjs/cc/NotificationCC.js +11 -11
  66. package/build/cjs/cc/NotificationCC.js.map +2 -2
  67. package/build/cjs/cc/ProtectionCC.js +16 -15
  68. package/build/cjs/cc/ProtectionCC.js.map +2 -2
  69. package/build/cjs/cc/SceneControllerConfigurationCC.js +2 -1
  70. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
  71. package/build/cjs/cc/ScheduleEntryLockCC.js +2 -1
  72. package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
  73. package/build/cjs/cc/Security2CC.js +15 -24
  74. package/build/cjs/cc/Security2CC.js.map +2 -2
  75. package/build/cjs/cc/SecurityCC.js +10 -17
  76. package/build/cjs/cc/SecurityCC.js.map +2 -2
  77. package/build/cjs/cc/SoundSwitchCC.js +2 -1
  78. package/build/cjs/cc/SoundSwitchCC.js.map +2 -2
  79. package/build/cjs/cc/ThermostatFanModeCC.js +9 -7
  80. package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
  81. package/build/cjs/cc/ThermostatFanStateCC.js +3 -2
  82. package/build/cjs/cc/ThermostatFanStateCC.js.map +2 -2
  83. package/build/cjs/cc/ThermostatModeCC.js +9 -7
  84. package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
  85. package/build/cjs/cc/ThermostatOperatingStateCC.js +4 -4
  86. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
  87. package/build/cjs/cc/ThermostatSetbackCC.js +3 -2
  88. package/build/cjs/cc/ThermostatSetbackCC.js.map +2 -2
  89. package/build/cjs/cc/ThermostatSetpointCC.js +9 -5
  90. package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
  91. package/build/cjs/cc/TimeCC.js +2 -1
  92. package/build/cjs/cc/TimeCC.js.map +2 -2
  93. package/build/cjs/cc/TimeParametersCC.js +2 -1
  94. package/build/cjs/cc/TimeParametersCC.js.map +2 -2
  95. package/build/cjs/cc/UserCodeCC.js +6 -6
  96. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  97. package/build/cjs/cc/UserCredentialCC.js +5 -2
  98. package/build/cjs/cc/UserCredentialCC.js.map +2 -2
  99. package/build/cjs/cc/VersionCC.js +2 -1
  100. package/build/cjs/cc/VersionCC.js.map +2 -2
  101. package/build/cjs/cc/WakeUpCC.js +2 -1
  102. package/build/cjs/cc/WakeUpCC.js.map +2 -2
  103. package/build/cjs/cc/WindowCoveringCC.js +10 -7
  104. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  105. package/build/cjs/cc/ZWavePlusCC.js +2 -1
  106. package/build/cjs/cc/ZWavePlusCC.js.map +2 -2
  107. package/build/cjs/cc/_CCValues.generated.d.ts +4 -4
  108. package/build/cjs/cc/_CCValues.generated.js +2 -2
  109. package/build/cjs/cc/_CCValues.generated.js.map +1 -1
  110. package/build/cjs/cc/index.d.ts +3 -3
  111. package/build/cjs/cc/index.js.map +2 -2
  112. package/build/cjs/cc/manufacturerProprietary/Decorators.d.ts +1 -1
  113. package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +2 -2
  114. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +3 -2
  115. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +2 -2
  116. package/build/cjs/lib/API.js.map +2 -2
  117. package/build/cjs/lib/CommandClass.d.ts +5 -1
  118. package/build/cjs/lib/CommandClass.js +25 -3
  119. package/build/cjs/lib/CommandClass.js.map +2 -2
  120. package/build/cjs/lib/CommandClassDecorators.d.ts +4 -4
  121. package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
  122. package/build/cjs/lib/Security2/Extension.d.ts +6 -4
  123. package/build/cjs/lib/Security2/Extension.js +22 -20
  124. package/build/cjs/lib/Security2/Extension.js.map +2 -2
  125. package/build/cjs/lib/_Types.js.map +1 -1
  126. package/build/cjs/lib/utils.js +14 -8
  127. package/build/cjs/lib/utils.js.map +2 -2
  128. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  129. package/build/esm/cc/AlarmSensorCC.js +14 -18
  130. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  131. package/build/esm/cc/AssociationCC.d.ts +1 -1
  132. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  133. package/build/esm/cc/AssociationCC.js +3 -0
  134. package/build/esm/cc/AssociationCC.js.map +1 -1
  135. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  136. package/build/esm/cc/AssociationGroupInfoCC.js +24 -22
  137. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  138. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  139. package/build/esm/cc/BarrierOperatorCC.js +8 -8
  140. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  141. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  142. package/build/esm/cc/BasicCC.js +2 -1
  143. package/build/esm/cc/BasicCC.js.map +1 -1
  144. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  145. package/build/esm/cc/BatteryCC.js +2 -1
  146. package/build/esm/cc/BatteryCC.js.map +1 -1
  147. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  148. package/build/esm/cc/BinarySensorCC.js +7 -7
  149. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  150. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  151. package/build/esm/cc/BinarySwitchCC.js +2 -1
  152. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  153. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  154. package/build/esm/cc/CentralSceneCC.js +9 -8
  155. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  156. package/build/esm/cc/ClockCC.d.ts.map +1 -1
  157. package/build/esm/cc/ClockCC.js +2 -1
  158. package/build/esm/cc/ClockCC.js.map +1 -1
  159. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  160. package/build/esm/cc/ColorSwitchCC.js +8 -7
  161. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  162. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  163. package/build/esm/cc/ConfigurationCC.js +32 -29
  164. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  165. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  166. package/build/esm/cc/DoorLockCC.js +73 -74
  167. package/build/esm/cc/DoorLockCC.js.map +1 -1
  168. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
  169. package/build/esm/cc/DoorLockLoggingCC.js +2 -1
  170. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
  171. package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
  172. package/build/esm/cc/EnergyProductionCC.js +2 -1
  173. package/build/esm/cc/EnergyProductionCC.js.map +1 -1
  174. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  175. package/build/esm/cc/EntryControlCC.js +3 -1
  176. package/build/esm/cc/EntryControlCC.js.map +1 -1
  177. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  178. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +1 -0
  179. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  180. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  181. package/build/esm/cc/HumidityControlModeCC.js +8 -9
  182. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  183. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
  184. package/build/esm/cc/HumidityControlOperatingStateCC.js +2 -1
  185. package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
  186. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  187. package/build/esm/cc/HumidityControlSetpointCC.js +18 -23
  188. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  189. package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
  190. package/build/esm/cc/IndicatorCC.js +3 -0
  191. package/build/esm/cc/IndicatorCC.js.map +1 -1
  192. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  193. package/build/esm/cc/IrrigationCC.js +29 -24
  194. package/build/esm/cc/IrrigationCC.js.map +1 -1
  195. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  196. package/build/esm/cc/LanguageCC.js +2 -1
  197. package/build/esm/cc/LanguageCC.js.map +1 -1
  198. package/build/esm/cc/LockCC.d.ts.map +1 -1
  199. package/build/esm/cc/LockCC.js +2 -1
  200. package/build/esm/cc/LockCC.js.map +1 -1
  201. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  202. package/build/esm/cc/ManufacturerSpecificCC.js +4 -1
  203. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  204. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  205. package/build/esm/cc/MeterCC.js +15 -19
  206. package/build/esm/cc/MeterCC.js.map +1 -1
  207. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  208. package/build/esm/cc/MultiChannelAssociationCC.js +3 -0
  209. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  210. package/build/esm/cc/MultiChannelCC.d.ts +1 -1
  211. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  212. package/build/esm/cc/MultiChannelCC.js +19 -23
  213. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  214. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  215. package/build/esm/cc/MultilevelSensorCC.js +14 -19
  216. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  217. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  218. package/build/esm/cc/MultilevelSwitchCC.js +3 -1
  219. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  220. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  221. package/build/esm/cc/NodeNamingCC.js +2 -1
  222. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  223. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  224. package/build/esm/cc/NotificationCC.js +11 -14
  225. package/build/esm/cc/NotificationCC.js.map +1 -1
  226. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  227. package/build/esm/cc/ProtectionCC.js +15 -22
  228. package/build/esm/cc/ProtectionCC.js.map +1 -1
  229. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
  230. package/build/esm/cc/SceneControllerConfigurationCC.js +1 -0
  231. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  232. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  233. package/build/esm/cc/ScheduleEntryLockCC.js +1 -0
  234. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  235. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  236. package/build/esm/cc/Security2CC.js +15 -32
  237. package/build/esm/cc/Security2CC.js.map +1 -1
  238. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  239. package/build/esm/cc/SecurityCC.js +10 -21
  240. package/build/esm/cc/SecurityCC.js.map +1 -1
  241. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
  242. package/build/esm/cc/SoundSwitchCC.js +1 -0
  243. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  244. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  245. package/build/esm/cc/ThermostatFanModeCC.js +8 -8
  246. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  247. package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
  248. package/build/esm/cc/ThermostatFanStateCC.js +2 -1
  249. package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
  250. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  251. package/build/esm/cc/ThermostatModeCC.js +8 -8
  252. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  253. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  254. package/build/esm/cc/ThermostatOperatingStateCC.js +4 -5
  255. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  256. package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -1
  257. package/build/esm/cc/ThermostatSetbackCC.js +2 -1
  258. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
  259. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  260. package/build/esm/cc/ThermostatSetpointCC.js +8 -9
  261. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  262. package/build/esm/cc/TimeCC.d.ts.map +1 -1
  263. package/build/esm/cc/TimeCC.js +1 -0
  264. package/build/esm/cc/TimeCC.js.map +1 -1
  265. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  266. package/build/esm/cc/TimeParametersCC.js +1 -0
  267. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  268. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  269. package/build/esm/cc/UserCodeCC.js +5 -7
  270. package/build/esm/cc/UserCodeCC.js.map +1 -1
  271. package/build/esm/cc/UserCredentialCC.d.ts.map +1 -1
  272. package/build/esm/cc/UserCredentialCC.js +4 -1
  273. package/build/esm/cc/UserCredentialCC.js.map +1 -1
  274. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  275. package/build/esm/cc/VersionCC.js +1 -0
  276. package/build/esm/cc/VersionCC.js.map +1 -1
  277. package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
  278. package/build/esm/cc/WakeUpCC.js +1 -0
  279. package/build/esm/cc/WakeUpCC.js.map +1 -1
  280. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  281. package/build/esm/cc/WindowCoveringCC.js +9 -9
  282. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  283. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
  284. package/build/esm/cc/ZWavePlusCC.js +1 -0
  285. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  286. package/build/esm/cc/_CCValues.generated.d.ts +4 -4
  287. package/build/esm/cc/_CCValues.generated.js +2 -2
  288. package/build/esm/cc/_CCValues.generated.js.map +1 -1
  289. package/build/esm/cc/index.d.ts +3 -3
  290. package/build/esm/cc/index.d.ts.map +1 -1
  291. package/build/esm/cc/index.js.map +1 -1
  292. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts +1 -1
  293. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
  294. package/build/esm/cc/manufacturerProprietary/Decorators.js.map +1 -1
  295. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
  296. package/build/esm/cc/manufacturerProprietary/FibaroCC.js +2 -1
  297. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  298. package/build/esm/lib/API.js.map +1 -1
  299. package/build/esm/lib/CommandClass.d.ts +5 -1
  300. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  301. package/build/esm/lib/CommandClass.js +30 -4
  302. package/build/esm/lib/CommandClass.js.map +1 -1
  303. package/build/esm/lib/CommandClassDecorators.d.ts +4 -4
  304. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
  305. package/build/esm/lib/CommandClassDecorators.js.map +1 -1
  306. package/build/esm/lib/Security2/Extension.d.ts +6 -4
  307. package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
  308. package/build/esm/lib/Security2/Extension.js +23 -21
  309. package/build/esm/lib/Security2/Extension.js.map +1 -1
  310. package/build/esm/lib/_Types.js +1 -1
  311. package/build/esm/lib/utils.d.ts.map +1 -1
  312. package/build/esm/lib/utils.js +15 -9
  313. package/build/esm/lib/utils.js.map +1 -1
  314. package/package.json +7 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/ThermostatFanModeCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./ThermostatFanModeCC._validateArgs.js\";\nconst { validateArgs_ThermostatFanModeCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, enumValuesToMetadataStates, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatFanMode, ThermostatFanModeCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatFanModeCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatFanModeCCValues };\n@API(CommandClasses[\"Thermostat Fan Mode\"])\nexport class ThermostatFanModeCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatFanModeCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatFanModeCommand.Get:\n case ThermostatFanModeCommand.SupportedGet:\n return this.isSinglecast();\n case ThermostatFanModeCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: ThermostatFanModeCCAPI, { property }, value) {\n const valueDB = this.getValueDB();\n let result: SupervisionResult | undefined;\n if (property === \"mode\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n // Preserve the value of the \"off\" flag\n const off = valueDB.getValue<boolean>(ThermostatFanModeCCValues.turnedOff.endpoint(this.endpoint.index));\n result = await this.set(value, off);\n }\n else if (property === \"off\") {\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"boolean\", typeof value);\n }\n const mode = valueDB.getValue<ThermostatFanMode>(ThermostatFanModeCCValues.fanMode.endpoint(this.endpoint.index));\n if (mode == undefined) {\n throw new ZWaveError(`The \"off\" property cannot be changed before the fan mode is known!`, ZWaveErrorCodes.Argument_Invalid);\n }\n result = await this.set(mode, value);\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n // Verify the current value after a delay, unless the command was supervised and successful\n if (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n // TODO: Ideally this would be a short delay, but some thermostats like Remotec ZXT-600\n // aren't able to handle the GET this quickly.\n this.schedulePoll({ property }, value);\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatFanModeCCAPI, { property }) {\n switch (property) {\n case \"mode\":\n case \"off\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatFanModeCommand, ThermostatFanModeCommand.Get);\n const cc = new ThermostatFanModeCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatFanModeCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"mode\", \"off\"]);\n }\n }\n @validateArgs_ThermostatFanModeCCAPI_set()\n public async set(mode: ThermostatFanMode, off?: boolean): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatFanModeCommand, ThermostatFanModeCommand.Set);\n const cc = new ThermostatFanModeCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n mode,\n off,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getSupportedModes(): Promise<MaybeNotKnown<readonly ThermostatFanMode[]>> {\n this.assertSupportsCommand(ThermostatFanModeCommand, ThermostatFanModeCommand.SupportedGet);\n const cc = new ThermostatFanModeCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatFanModeCCSupportedReport>(cc, this.commandOptions);\n return response?.supportedModes;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Fan Mode\"])\n@implementedVersion(5)\n@ccValues(ThermostatFanModeCCValues)\nexport class ThermostatFanModeCC extends CommandClass {\n declare ccCommand: ThermostatFanModeCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Fan Mode\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // First query the possible modes to set the metadata\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported thermostat fan modes...\",\n direction: \"outbound\",\n });\n const supportedModes = await api.getSupportedModes();\n if (supportedModes) {\n const logMessage = `received supported thermostat fan modes:${supportedModes\n .map((mode) => `\\n\u00B7 ${getEnumMemberName(ThermostatFanMode, mode)}`)\n .join(\"\")}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported thermostat fan modes timed out, skipping interview...\",\n });\n return;\n }\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Fan Mode\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n // Query the current status\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current thermostat fan mode...\",\n direction: \"outbound\",\n });\n const currentStatus = await api.get();\n if (currentStatus) {\n let logMessage = `received current thermostat fan mode: ${getEnumMemberName(ThermostatFanMode, currentStatus.mode)}`;\n if (currentStatus.off != undefined) {\n logMessage += ` (turned off)`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatFanModeCCSetOptions {\n mode: ThermostatFanMode;\n off?: boolean;\n}\n@CCCommand(ThermostatFanModeCommand.Set)\n@useSupervision()\nexport class ThermostatFanModeCCSet extends ThermostatFanModeCC {\n public constructor(options: WithAddress<ThermostatFanModeCCSetOptions>) {\n super(options);\n this.mode = options.mode;\n this.off = options.off;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): ThermostatFanModeCCSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new ThermostatFanModeCCSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public mode: ThermostatFanMode;\n public off: boolean | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n (this.off ? 128 : 0)\n | (this.mode & 0b1111),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatFanMode, this.mode),\n };\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface ThermostatFanModeCCReportOptions {\n mode: ThermostatFanMode;\n off?: boolean;\n}\n@CCCommand(ThermostatFanModeCommand.Report)\n@ccValueProperty(\"mode\", ThermostatFanModeCCValues.fanMode)\n@ccValueProperty(\"off\", ThermostatFanModeCCValues.turnedOff)\nexport class ThermostatFanModeCCReport extends ThermostatFanModeCC {\n public constructor(options: WithAddress<ThermostatFanModeCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.mode = options.mode;\n this.off = options.off;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatFanModeCCReport {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatFanMode = raw.payload[0] & 0b1111;\n // V3+\n const off = !!(raw.payload[0] & 128);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n off,\n });\n }\n public readonly mode: ThermostatFanMode;\n public readonly off: boolean | undefined;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatFanMode, this.mode),\n };\n if (this.off != undefined) {\n message.off = this.off;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(ThermostatFanModeCommand.Get)\n@expectedCCResponse(ThermostatFanModeCCReport)\nexport class ThermostatFanModeCCGet extends ThermostatFanModeCC {\n}\n// @publicAPI\nexport interface ThermostatFanModeCCSupportedReportOptions {\n supportedModes: ThermostatFanMode[];\n}\n@CCCommand(ThermostatFanModeCommand.SupportedReport)\n@ccValueProperty(\"supportedModes\", ThermostatFanModeCCValues.supportedFanModes)\nexport class ThermostatFanModeCCSupportedReport extends ThermostatFanModeCC {\n public constructor(options: WithAddress<ThermostatFanModeCCSupportedReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedModes = options.supportedModes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatFanModeCCSupportedReport {\n const supportedModes: ThermostatFanMode[] = parseBitMask(raw.payload, ThermostatFanMode[\"Auto low\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedModes,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Remember which fan modes are supported\n const fanModeValue = ThermostatFanModeCCValues.fanMode;\n this.setMetadata(ctx, fanModeValue, {\n ...fanModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatFanMode, this.supportedModes),\n });\n return true;\n }\n public readonly supportedModes: ThermostatFanMode[];\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported modes\": this.supportedModes\n .map((mode) => `\\n\u00B7 ${getEnumMemberName(ThermostatFanMode, mode)}`)\n .join(\"\"),\n },\n };\n }\n}\n@CCCommand(ThermostatFanModeCommand.SupportedGet)\n@expectedCCResponse(ThermostatFanModeCCSupportedReport)\nexport class ThermostatFanModeCCSupportedGet extends ThermostatFanModeCC {\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./ThermostatFanModeCC._validateArgs.js\";\nconst { validateArgs_ThermostatFanModeCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, enumValuesToMetadataStates, logList, logText, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatFanMode, ThermostatFanModeCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatFanModeCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatFanModeCCValues };\n@API(CommandClasses[\"Thermostat Fan Mode\"])\nexport class ThermostatFanModeCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatFanModeCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatFanModeCommand.Get:\n case ThermostatFanModeCommand.SupportedGet:\n return this.isSinglecast();\n case ThermostatFanModeCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: ThermostatFanModeCCAPI, { property }, value) {\n const valueDB = this.getValueDB();\n let result: SupervisionResult | undefined;\n if (property === \"mode\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n // Preserve the value of the \"off\" flag\n const off = valueDB.getValue<boolean>(ThermostatFanModeCCValues.turnedOff.endpoint(this.endpoint.index));\n result = await this.set(value, off);\n }\n else if (property === \"off\") {\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"boolean\", typeof value);\n }\n const mode = valueDB.getValue<ThermostatFanMode>(ThermostatFanModeCCValues.fanMode.endpoint(this.endpoint.index));\n if (mode == undefined) {\n throw new ZWaveError(`The \"off\" property cannot be changed before the fan mode is known!`, ZWaveErrorCodes.Argument_Invalid);\n }\n result = await this.set(mode, value);\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n // Verify the current value after a delay, unless the command was supervised and successful\n if (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n // TODO: Ideally this would be a short delay, but some thermostats like Remotec ZXT-600\n // aren't able to handle the GET this quickly.\n this.schedulePoll({ property }, value);\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatFanModeCCAPI, { property }) {\n switch (property) {\n case \"mode\":\n case \"off\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatFanModeCommand, ThermostatFanModeCommand.Get);\n const cc = new ThermostatFanModeCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatFanModeCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"mode\", \"off\"]);\n }\n }\n @validateArgs_ThermostatFanModeCCAPI_set()\n public async set(mode: ThermostatFanMode, off?: boolean): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatFanModeCommand, ThermostatFanModeCommand.Set);\n const cc = new ThermostatFanModeCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n mode,\n off,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getSupportedModes(): Promise<MaybeNotKnown<readonly ThermostatFanMode[]>> {\n this.assertSupportsCommand(ThermostatFanModeCommand, ThermostatFanModeCommand.SupportedGet);\n const cc = new ThermostatFanModeCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatFanModeCCSupportedReport>(cc, this.commandOptions);\n return response?.supportedModes;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Fan Mode\"])\n@implementedVersion(5)\n@ccValues(ThermostatFanModeCCValues)\nexport class ThermostatFanModeCC extends CommandClass {\n declare ccCommand: ThermostatFanModeCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Fan Mode\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // First query the possible modes to set the metadata\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported thermostat fan modes...\",\n direction: \"outbound\",\n });\n const supportedModes = await api.getSupportedModes();\n if (supportedModes) {\n const logMessage = logText(\"received supported thermostat fan modes:\", {\n nested: logList(supportedModes.map((mode) => getEnumMemberName(ThermostatFanMode, mode))),\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported thermostat fan modes timed out, skipping interview...\",\n });\n return;\n }\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Fan Mode\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query the current status\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current thermostat fan mode...\",\n direction: \"outbound\",\n });\n const currentStatus = await api.get();\n if (currentStatus) {\n let logMessage = `received current thermostat fan mode: ${getEnumMemberName(ThermostatFanMode, currentStatus.mode)}`;\n if (currentStatus.off != undefined) {\n logMessage += ` (turned off)`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatFanModeCCSetOptions {\n mode: ThermostatFanMode;\n off?: boolean;\n}\n@CCCommand(ThermostatFanModeCommand.Set)\n@useSupervision()\nexport class ThermostatFanModeCCSet extends ThermostatFanModeCC {\n public constructor(options: WithAddress<ThermostatFanModeCCSetOptions>) {\n super(options);\n this.mode = options.mode;\n this.off = options.off;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): ThermostatFanModeCCSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new ThermostatFanModeCCSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public mode: ThermostatFanMode;\n public off: boolean | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n (this.off ? 128 : 0)\n | (this.mode & 0b1111),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatFanMode, this.mode),\n };\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface ThermostatFanModeCCReportOptions {\n mode: ThermostatFanMode;\n off?: boolean;\n}\n@CCCommand(ThermostatFanModeCommand.Report)\n@ccValueProperty(\"mode\", ThermostatFanModeCCValues.fanMode)\n@ccValueProperty(\"off\", ThermostatFanModeCCValues.turnedOff)\nexport class ThermostatFanModeCCReport extends ThermostatFanModeCC {\n public constructor(options: WithAddress<ThermostatFanModeCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.mode = options.mode;\n this.off = options.off;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatFanModeCCReport {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatFanMode = raw.payload[0] & 0b1111;\n // V3+\n const off = !!(raw.payload[0] & 128);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n off,\n });\n }\n public readonly mode: ThermostatFanMode;\n public readonly off: boolean | undefined;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatFanMode, this.mode),\n };\n if (this.off != undefined) {\n message.off = this.off;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(ThermostatFanModeCommand.Get)\n@expectedCCResponse(ThermostatFanModeCCReport)\nexport class ThermostatFanModeCCGet extends ThermostatFanModeCC {\n}\n// @publicAPI\nexport interface ThermostatFanModeCCSupportedReportOptions {\n supportedModes: ThermostatFanMode[];\n}\n@CCCommand(ThermostatFanModeCommand.SupportedReport)\n@ccValueProperty(\"supportedModes\", ThermostatFanModeCCValues.supportedFanModes)\nexport class ThermostatFanModeCCSupportedReport extends ThermostatFanModeCC {\n public constructor(options: WithAddress<ThermostatFanModeCCSupportedReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedModes = options.supportedModes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatFanModeCCSupportedReport {\n const supportedModes: ThermostatFanMode[] = parseBitMask(raw.payload, ThermostatFanMode[\"Auto low\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedModes,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Remember which fan modes are supported\n const fanModeValue = ThermostatFanModeCCValues.fanMode;\n this.setMetadata(ctx, fanModeValue, {\n ...fanModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatFanMode, this.supportedModes),\n });\n return true;\n }\n public readonly supportedModes: ThermostatFanMode[];\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported modes\": logList(this.supportedModes.map((mode) => getEnumMemberName(ThermostatFanMode, mode))),\n },\n };\n }\n}\n@CCCommand(ThermostatFanModeCommand.SupportedGet)\n@expectedCCResponse(ThermostatFanModeCCSupportedReport)\nexport class ThermostatFanModeCCSupportedGet extends ThermostatFanModeCC {\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -113,14 +113,15 @@ let ThermostatFanStateCC = (() => {
113
113
  message: `Interviewing ${this.ccName}...`,
114
114
  direction: "none"
115
115
  });
116
- await this.refreshValues(ctx);
116
+ await this.refreshValues(ctx, { tag: "interview" });
117
117
  this.setInterviewComplete(ctx, true);
118
118
  }
119
119
  async refreshValues(ctx, options) {
120
120
  const node = this.getNode(ctx);
121
121
  const endpoint = this.getEndpoint(ctx);
122
122
  const api = import_API.CCAPI.create(import_core.CommandClasses["Thermostat Fan State"], ctx, endpoint).withOptions({
123
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
123
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
124
+ tag: options?.tag
124
125
  });
125
126
  ctx.logNode(node.id, {
126
127
  endpoint: this.endpointIndex,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/ThermostatFanStateCC.ts"],
4
- "sourcesContent": ["import { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, ValueMetadata, type WithAddress, enumValuesToMetadataStates, validatePayload, } from \"@zwave-js/core\";\nimport { getEnumMemberName } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatFanState, ThermostatFanStateCommand, } from \"../lib/_Types.js\";\nimport type { CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatFanStateCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatFanStateCCValues };\n@API(CommandClasses[\"Thermostat Fan State\"])\nexport class ThermostatFanStateCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatFanStateCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatFanStateCommand.Get:\n return this.isSinglecast();\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatFanStateCCAPI, { property }) {\n switch (property) {\n case \"state\":\n return this.get();\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatFanStateCommand, ThermostatFanStateCommand.Get);\n const cc = new ThermostatFanStateCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatFanStateCCReport>(cc, this.commandOptions);\n if (response) {\n return response?.state;\n }\n }\n}\n@commandClass(CommandClasses[\"Thermostat Fan State\"])\n@implementedVersion(2)\n@ccValues(ThermostatFanStateCCValues)\nexport class ThermostatFanStateCC extends CommandClass {\n declare ccCommand: ThermostatFanStateCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Fan State\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n // Query the current status\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current thermostat fan state...\",\n direction: \"outbound\",\n });\n const currentStatus = await api.get();\n if (currentStatus) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"received current thermostat fan state: \"\n + getEnumMemberName(ThermostatFanState, currentStatus),\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatFanStateCCReportOptions {\n state: ThermostatFanState;\n}\n@CCCommand(ThermostatFanStateCommand.Report)\n@ccValueProperty(\"state\", ThermostatFanStateCCValues.fanState)\nexport class ThermostatFanStateCCReport extends ThermostatFanStateCC {\n public constructor(options: WithAddress<ThermostatFanStateCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.state = options.state;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatFanStateCCReport {\n validatePayload(raw.payload.length == 1);\n const state: ThermostatFanState = raw.payload[0] & 0b1111;\n return new this({\n nodeId: ctx.sourceNodeId,\n state,\n });\n }\n public readonly state: ThermostatFanState;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n state: getEnumMemberName(ThermostatFanState, this.state),\n };\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(ThermostatFanStateCommand.Get)\n@expectedCCResponse(ThermostatFanStateCCReport)\nexport class ThermostatFanStateCCGet extends ThermostatFanStateCC {\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, ValueMetadata, type WithAddress, enumValuesToMetadataStates, validatePayload, } from \"@zwave-js/core\";\nimport { getEnumMemberName } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatFanState, ThermostatFanStateCommand, } from \"../lib/_Types.js\";\nimport type { CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatFanStateCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatFanStateCCValues };\n@API(CommandClasses[\"Thermostat Fan State\"])\nexport class ThermostatFanStateCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatFanStateCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatFanStateCommand.Get:\n return this.isSinglecast();\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatFanStateCCAPI, { property }) {\n switch (property) {\n case \"state\":\n return this.get();\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatFanStateCommand, ThermostatFanStateCommand.Get);\n const cc = new ThermostatFanStateCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatFanStateCCReport>(cc, this.commandOptions);\n if (response) {\n return response?.state;\n }\n }\n}\n@commandClass(CommandClasses[\"Thermostat Fan State\"])\n@implementedVersion(2)\n@ccValues(ThermostatFanStateCCValues)\nexport class ThermostatFanStateCC extends CommandClass {\n declare ccCommand: ThermostatFanStateCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Fan State\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query the current status\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current thermostat fan state...\",\n direction: \"outbound\",\n });\n const currentStatus = await api.get();\n if (currentStatus) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"received current thermostat fan state: \"\n + getEnumMemberName(ThermostatFanState, currentStatus),\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatFanStateCCReportOptions {\n state: ThermostatFanState;\n}\n@CCCommand(ThermostatFanStateCommand.Report)\n@ccValueProperty(\"state\", ThermostatFanStateCCValues.fanState)\nexport class ThermostatFanStateCCReport extends ThermostatFanStateCC {\n public constructor(options: WithAddress<ThermostatFanStateCCReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.state = options.state;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatFanStateCCReport {\n validatePayload(raw.payload.length == 1);\n const state: ThermostatFanState = raw.payload[0] & 0b1111;\n return new this({\n nodeId: ctx.sourceNodeId,\n state,\n });\n }\n public readonly state: ThermostatFanState;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n state: getEnumMemberName(ThermostatFanState, this.state),\n };\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(ThermostatFanStateCommand.Get)\n@expectedCCResponse(ThermostatFanStateCCReport)\nexport class ThermostatFanStateCCGet extends ThermostatFanStateCC {\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -176,7 +176,8 @@ let ThermostatModeCC = (() => {
176
176
  const node = this.getNode(ctx);
177
177
  const endpoint = this.getEndpoint(ctx);
178
178
  const api = import_API.CCAPI.create(import_core.CommandClasses["Thermostat Mode"], ctx, endpoint).withOptions({
179
- priority: import_core.MessagePriority.NodeQuery
179
+ priority: import_core.MessagePriority.NodeQuery,
180
+ tag: "interview"
180
181
  });
181
182
  ctx.logNode(node.id, {
182
183
  endpoint: this.endpointIndex,
@@ -190,8 +191,9 @@ let ThermostatModeCC = (() => {
190
191
  });
191
192
  const supportedModes = await api.getSupportedModes();
192
193
  if (supportedModes) {
193
- const logMessage = `received supported thermostat modes:${supportedModes.map((mode) => `
194
- \xB7 ${(0, import_shared.getEnumMemberName)(import_Types.ThermostatMode, mode)}`).join("")}`;
194
+ const logMessage = (0, import_core.logText)("received supported thermostat modes:", {
195
+ nested: (0, import_core.logList)(supportedModes.map((mode) => (0, import_shared.getEnumMemberName)(import_Types.ThermostatMode, mode)))
196
+ });
195
197
  ctx.logNode(node.id, {
196
198
  endpoint: this.endpointIndex,
197
199
  message: logMessage,
@@ -205,14 +207,15 @@ let ThermostatModeCC = (() => {
205
207
  });
206
208
  return;
207
209
  }
208
- await this.refreshValues(ctx);
210
+ await this.refreshValues(ctx, { tag: "interview" });
209
211
  this.setInterviewComplete(ctx, true);
210
212
  }
211
213
  async refreshValues(ctx, options) {
212
214
  const node = this.getNode(ctx);
213
215
  const endpoint = this.getEndpoint(ctx);
214
216
  const api = import_API.CCAPI.create(import_core.CommandClasses["Thermostat Mode"], ctx, endpoint).withOptions({
215
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
217
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
218
+ tag: options?.tag
216
219
  });
217
220
  ctx.logNode(node.id, {
218
221
  endpoint: this.endpointIndex,
@@ -463,8 +466,7 @@ let ThermostatModeCCSupportedReport = (() => {
463
466
  return {
464
467
  ...super.toLogEntry(ctx),
465
468
  message: {
466
- "supported modes": this.supportedModes.map((mode) => `
467
- \xB7 ${(0, import_shared.getEnumMemberName)(import_Types.ThermostatMode, mode)}`).join("")
469
+ "supported modes": (0, import_core.logList)(this.supportedModes.map((mode) => (0, import_shared.getEnumMemberName)(import_Types.ThermostatMode, mode)))
468
470
  }
469
471
  };
470
472
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/ThermostatModeCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./ThermostatModeCC._validateArgs.js\";\nconst { validateArgs_ThermostatModeCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, enumValuesToMetadataStates, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, type BytesView, buffer2hex, getEnumMemberName, pick, } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatMode, ThermostatModeCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatModeCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatModeCCValues };\n@API(CommandClasses[\"Thermostat Mode\"])\nexport class ThermostatModeCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatModeCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatModeCommand.Get:\n case ThermostatModeCommand.SupportedGet:\n return this.isSinglecast();\n case ThermostatModeCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: ThermostatModeCCAPI, { property }, value) {\n if (property !== \"mode\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n const result = await this.set(value);\n // Verify the current value after a delay, unless the command was supervised and successful\n if (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n // TODO: Ideally this would be a short delay, but some thermostats like Remotec ZXT-600\n // aren't able to handle the GET this quickly.\n this.schedulePoll({ property }, value);\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatModeCCAPI, { property }) {\n switch (property) {\n case \"mode\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.Get);\n const cc = new ThermostatModeCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatModeCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"mode\", \"manufacturerData\"]);\n }\n }\n public async set(mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>): Promise<SupervisionResult | undefined>;\n public async set(mode: (typeof ThermostatMode)[\"Manufacturer specific\"], manufacturerData: BytesView | string): Promise<SupervisionResult | undefined>;\n @validateArgs_ThermostatModeCCAPI_set()\n public async set(mode: ThermostatMode, manufacturerData?: BytesView | string): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.Set);\n if (typeof manufacturerData === \"string\") {\n // We accept the manufacturer data as a hex string. Make sure it's valid\n if (manufacturerData.length % 2 !== 0\n || !/^[0-9a-f]+$/i.test(manufacturerData)) {\n throw new ZWaveError(`Manufacturer data must be represented as hexadecimal when passed as a string!`, ZWaveErrorCodes.Argument_Invalid);\n }\n manufacturerData = Bytes.from(manufacturerData, \"hex\");\n }\n const cc = new ThermostatModeCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n mode,\n manufacturerData: manufacturerData as any,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getSupportedModes(): Promise<MaybeNotKnown<readonly ThermostatMode[]>> {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.SupportedGet);\n const cc = new ThermostatModeCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatModeCCSupportedReport>(cc, this.commandOptions);\n return response?.supportedModes;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Mode\"])\n@implementedVersion(3)\n@ccValues(ThermostatModeCCValues)\nexport class ThermostatModeCC extends CommandClass {\n declare ccCommand: ThermostatModeCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Mode\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // First query the possible modes to set the metadata\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported thermostat modes...\",\n direction: \"outbound\",\n });\n const supportedModes = await api.getSupportedModes();\n if (supportedModes) {\n const logMessage = `received supported thermostat modes:${supportedModes\n .map((mode) => `\\n\u00B7 ${getEnumMemberName(ThermostatMode, mode)}`)\n .join(\"\")}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported thermostat modes timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Mode\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n // Query the current status\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current thermostat mode...\",\n direction: \"outbound\",\n });\n const currentStatus = await api.get();\n if (currentStatus) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"received current thermostat mode: \"\n + getEnumMemberName(ThermostatMode, currentStatus.mode),\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport type ThermostatModeCCSetOptions = {\n mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>;\n} | {\n mode: (typeof ThermostatMode)[\"Manufacturer specific\"];\n manufacturerData: BytesView;\n};\n@CCCommand(ThermostatModeCommand.Set)\n@useSupervision()\nexport class ThermostatModeCCSet extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCSetOptions>) {\n super(options);\n this.mode = options.mode;\n if (\"manufacturerData\" in options) {\n this.manufacturerData = options.manufacturerData;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCSet {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatMode = raw.payload[0] & 0b11111;\n if (mode !== ThermostatMode[\"Manufacturer specific\"]) {\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n const manufacturerDataLength = (raw.payload[0] >>> 5) & 0b111;\n validatePayload(raw.payload.length >= 1 + manufacturerDataLength);\n const manufacturerData = raw.payload.subarray(1, 1 + manufacturerDataLength);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n manufacturerData,\n });\n }\n public mode: ThermostatMode;\n public manufacturerData?: BytesView;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const manufacturerData = this.mode === ThermostatMode[\"Manufacturer specific\"]\n && this.manufacturerData\n ? this.manufacturerData\n : new Uint8Array();\n const manufacturerDataLength = manufacturerData.length;\n this.payload = Bytes.concat([\n [\n ((manufacturerDataLength & 0b111) << 5) + (this.mode & 0b11111),\n ],\n manufacturerData,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatMode, this.mode),\n };\n if (this.manufacturerData != undefined) {\n message[\"manufacturer data\"] = buffer2hex(this.manufacturerData);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport type ThermostatModeCCReportOptions = {\n mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>;\n manufacturerData?: undefined;\n} | {\n mode: (typeof ThermostatMode)[\"Manufacturer specific\"];\n manufacturerData?: BytesView;\n};\n@CCCommand(ThermostatModeCommand.Report)\n@ccValueProperty(\"mode\", ThermostatModeCCValues.thermostatMode)\n@ccValueProperty(\"manufacturerData\", ThermostatModeCCValues.manufacturerData)\nexport class ThermostatModeCCReport extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCReportOptions>) {\n super(options);\n this.mode = options.mode;\n this.manufacturerData = options.manufacturerData;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCReport {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatMode = raw.payload[0] & 0b11111;\n if (mode !== ThermostatMode[\"Manufacturer specific\"]) {\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n // V3+\n const manufacturerDataLength = raw.payload[0] >>> 5;\n validatePayload(raw.payload.length >= 1 + manufacturerDataLength);\n const manufacturerData = raw.payload.subarray(1, 1 + manufacturerDataLength);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n manufacturerData,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Update the supported modes if a mode is used that wasn't previously\n // reported to be supported. This shouldn't happen, but well... it does anyways\n const thermostatModeValue = ThermostatModeCCValues.thermostatMode;\n const supportedModesValue = ThermostatModeCCValues.supportedModes;\n const supportedModes = this.getValue<ThermostatMode[]>(ctx, supportedModesValue);\n if (supportedModes\n && this.mode in ThermostatMode\n && !supportedModes.includes(this.mode)) {\n supportedModes.push(this.mode);\n supportedModes.sort((a, b) => a - b);\n this.setMetadata(ctx, thermostatModeValue, {\n ...thermostatModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatMode, supportedModes),\n });\n this.setValue(ctx, supportedModesValue, supportedModes);\n }\n return true;\n }\n public readonly mode: ThermostatMode;\n public readonly manufacturerData: BytesView | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const manufacturerDataLength = this.mode === ThermostatMode[\"Manufacturer specific\"]\n && this.manufacturerData\n ? Math.min(0b111, this.manufacturerData.length)\n : 0;\n this.payload = new Bytes(1 + manufacturerDataLength);\n this.payload[0] = (manufacturerDataLength << 5) + (this.mode & 0b11111);\n if (manufacturerDataLength && this.manufacturerData) {\n this.payload.set(this.manufacturerData.subarray(0, manufacturerDataLength), 1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatMode, this.mode),\n };\n if (this.manufacturerData != undefined) {\n message[\"manufacturer data\"] = buffer2hex(this.manufacturerData);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(ThermostatModeCommand.Get)\n@expectedCCResponse(ThermostatModeCCReport)\nexport class ThermostatModeCCGet extends ThermostatModeCC {\n}\n// @publicAPI\nexport interface ThermostatModeCCSupportedReportOptions {\n supportedModes: ThermostatMode[];\n}\n@CCCommand(ThermostatModeCommand.SupportedReport)\n@ccValueProperty(\"supportedModes\", ThermostatModeCCValues.supportedModes)\nexport class ThermostatModeCCSupportedReport extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCSupportedReportOptions>) {\n super(options);\n this.supportedModes = options.supportedModes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCSupportedReport {\n const supportedModes: ThermostatMode[] = parseBitMask(raw.payload, ThermostatMode.Off);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedModes,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Use this information to create the metadata for the mode property\n const thermostatModeValue = ThermostatModeCCValues.thermostatMode;\n this.setMetadata(ctx, thermostatModeValue, {\n ...thermostatModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatMode, this.supportedModes),\n });\n return true;\n }\n public readonly supportedModes: ThermostatMode[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.supportedModes, ThermostatMode[\"Manufacturer specific\"], ThermostatMode.Off);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported modes\": this.supportedModes\n .map((mode) => `\\n\u00B7 ${getEnumMemberName(ThermostatMode, mode)}`)\n .join(\"\"),\n },\n };\n }\n}\n@CCCommand(ThermostatModeCommand.SupportedGet)\n@expectedCCResponse(ThermostatModeCCSupportedReport)\nexport class ThermostatModeCCSupportedGet extends ThermostatModeCC {\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./ThermostatModeCC._validateArgs.js\";\nconst { validateArgs_ThermostatModeCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, enumValuesToMetadataStates, logList, logText, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, type BytesView, buffer2hex, getEnumMemberName, pick, } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatMode, ThermostatModeCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatModeCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatModeCCValues };\n@API(CommandClasses[\"Thermostat Mode\"])\nexport class ThermostatModeCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatModeCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatModeCommand.Get:\n case ThermostatModeCommand.SupportedGet:\n return this.isSinglecast();\n case ThermostatModeCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: ThermostatModeCCAPI, { property }, value) {\n if (property !== \"mode\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n const result = await this.set(value);\n // Verify the current value after a delay, unless the command was supervised and successful\n if (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n // TODO: Ideally this would be a short delay, but some thermostats like Remotec ZXT-600\n // aren't able to handle the GET this quickly.\n this.schedulePoll({ property }, value);\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatModeCCAPI, { property }) {\n switch (property) {\n case \"mode\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.Get);\n const cc = new ThermostatModeCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatModeCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"mode\", \"manufacturerData\"]);\n }\n }\n public async set(mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>): Promise<SupervisionResult | undefined>;\n public async set(mode: (typeof ThermostatMode)[\"Manufacturer specific\"], manufacturerData: BytesView | string): Promise<SupervisionResult | undefined>;\n @validateArgs_ThermostatModeCCAPI_set()\n public async set(mode: ThermostatMode, manufacturerData?: BytesView | string): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.Set);\n if (typeof manufacturerData === \"string\") {\n // We accept the manufacturer data as a hex string. Make sure it's valid\n if (manufacturerData.length % 2 !== 0\n || !/^[0-9a-f]+$/i.test(manufacturerData)) {\n throw new ZWaveError(`Manufacturer data must be represented as hexadecimal when passed as a string!`, ZWaveErrorCodes.Argument_Invalid);\n }\n manufacturerData = Bytes.from(manufacturerData, \"hex\");\n }\n const cc = new ThermostatModeCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n mode,\n manufacturerData: manufacturerData as any,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getSupportedModes(): Promise<MaybeNotKnown<readonly ThermostatMode[]>> {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.SupportedGet);\n const cc = new ThermostatModeCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatModeCCSupportedReport>(cc, this.commandOptions);\n return response?.supportedModes;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Mode\"])\n@implementedVersion(3)\n@ccValues(ThermostatModeCCValues)\nexport class ThermostatModeCC extends CommandClass {\n declare ccCommand: ThermostatModeCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Mode\"], ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n // First query the possible modes to set the metadata\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported thermostat modes...\",\n direction: \"outbound\",\n });\n const supportedModes = await api.getSupportedModes();\n if (supportedModes) {\n const logMessage = logText(\"received supported thermostat modes:\", {\n nested: logList(supportedModes.map((mode) => getEnumMemberName(ThermostatMode, mode))),\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported thermostat modes timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Mode\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query the current status\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current thermostat mode...\",\n direction: \"outbound\",\n });\n const currentStatus = await api.get();\n if (currentStatus) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"received current thermostat mode: \"\n + getEnumMemberName(ThermostatMode, currentStatus.mode),\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport type ThermostatModeCCSetOptions = {\n mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>;\n} | {\n mode: (typeof ThermostatMode)[\"Manufacturer specific\"];\n manufacturerData: BytesView;\n};\n@CCCommand(ThermostatModeCommand.Set)\n@useSupervision()\nexport class ThermostatModeCCSet extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCSetOptions>) {\n super(options);\n this.mode = options.mode;\n if (\"manufacturerData\" in options) {\n this.manufacturerData = options.manufacturerData;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCSet {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatMode = raw.payload[0] & 0b11111;\n if (mode !== ThermostatMode[\"Manufacturer specific\"]) {\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n const manufacturerDataLength = (raw.payload[0] >>> 5) & 0b111;\n validatePayload(raw.payload.length >= 1 + manufacturerDataLength);\n const manufacturerData = raw.payload.subarray(1, 1 + manufacturerDataLength);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n manufacturerData,\n });\n }\n public mode: ThermostatMode;\n public manufacturerData?: BytesView;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const manufacturerData = this.mode === ThermostatMode[\"Manufacturer specific\"]\n && this.manufacturerData\n ? this.manufacturerData\n : new Uint8Array();\n const manufacturerDataLength = manufacturerData.length;\n this.payload = Bytes.concat([\n [\n ((manufacturerDataLength & 0b111) << 5) + (this.mode & 0b11111),\n ],\n manufacturerData,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatMode, this.mode),\n };\n if (this.manufacturerData != undefined) {\n message[\"manufacturer data\"] = buffer2hex(this.manufacturerData);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport type ThermostatModeCCReportOptions = {\n mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>;\n manufacturerData?: undefined;\n} | {\n mode: (typeof ThermostatMode)[\"Manufacturer specific\"];\n manufacturerData?: BytesView;\n};\n@CCCommand(ThermostatModeCommand.Report)\n@ccValueProperty(\"mode\", ThermostatModeCCValues.thermostatMode)\n@ccValueProperty(\"manufacturerData\", ThermostatModeCCValues.manufacturerData)\nexport class ThermostatModeCCReport extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCReportOptions>) {\n super(options);\n this.mode = options.mode;\n this.manufacturerData = options.manufacturerData;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCReport {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatMode = raw.payload[0] & 0b11111;\n if (mode !== ThermostatMode[\"Manufacturer specific\"]) {\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n // V3+\n const manufacturerDataLength = raw.payload[0] >>> 5;\n validatePayload(raw.payload.length >= 1 + manufacturerDataLength);\n const manufacturerData = raw.payload.subarray(1, 1 + manufacturerDataLength);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n manufacturerData,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Update the supported modes if a mode is used that wasn't previously\n // reported to be supported. This shouldn't happen, but well... it does anyways\n const thermostatModeValue = ThermostatModeCCValues.thermostatMode;\n const supportedModesValue = ThermostatModeCCValues.supportedModes;\n const supportedModes = this.getValue<ThermostatMode[]>(ctx, supportedModesValue);\n if (supportedModes\n && this.mode in ThermostatMode\n && !supportedModes.includes(this.mode)) {\n supportedModes.push(this.mode);\n supportedModes.sort((a, b) => a - b);\n this.setMetadata(ctx, thermostatModeValue, {\n ...thermostatModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatMode, supportedModes),\n });\n this.setValue(ctx, supportedModesValue, supportedModes);\n }\n return true;\n }\n public readonly mode: ThermostatMode;\n public readonly manufacturerData: BytesView | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const manufacturerDataLength = this.mode === ThermostatMode[\"Manufacturer specific\"]\n && this.manufacturerData\n ? Math.min(0b111, this.manufacturerData.length)\n : 0;\n this.payload = new Bytes(1 + manufacturerDataLength);\n this.payload[0] = (manufacturerDataLength << 5) + (this.mode & 0b11111);\n if (manufacturerDataLength && this.manufacturerData) {\n this.payload.set(this.manufacturerData.subarray(0, manufacturerDataLength), 1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatMode, this.mode),\n };\n if (this.manufacturerData != undefined) {\n message[\"manufacturer data\"] = buffer2hex(this.manufacturerData);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(ThermostatModeCommand.Get)\n@expectedCCResponse(ThermostatModeCCReport)\nexport class ThermostatModeCCGet extends ThermostatModeCC {\n}\n// @publicAPI\nexport interface ThermostatModeCCSupportedReportOptions {\n supportedModes: ThermostatMode[];\n}\n@CCCommand(ThermostatModeCommand.SupportedReport)\n@ccValueProperty(\"supportedModes\", ThermostatModeCCValues.supportedModes)\nexport class ThermostatModeCCSupportedReport extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCSupportedReportOptions>) {\n super(options);\n this.supportedModes = options.supportedModes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCSupportedReport {\n const supportedModes: ThermostatMode[] = parseBitMask(raw.payload, ThermostatMode.Off);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedModes,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Use this information to create the metadata for the mode property\n const thermostatModeValue = ThermostatModeCCValues.thermostatMode;\n this.setMetadata(ctx, thermostatModeValue, {\n ...thermostatModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatMode, this.supportedModes),\n });\n return true;\n }\n public readonly supportedModes: ThermostatMode[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.supportedModes, ThermostatMode[\"Manufacturer specific\"], ThermostatMode.Off);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported modes\": logList(this.supportedModes.map((mode) => getEnumMemberName(ThermostatMode, mode))),\n },\n };\n }\n}\n@CCCommand(ThermostatModeCommand.SupportedGet)\n@expectedCCResponse(ThermostatModeCCSupportedReport)\nexport class ThermostatModeCCSupportedGet extends ThermostatModeCC {\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -157,14 +157,15 @@ let ThermostatOperatingStateCC = (() => {
157
157
  message: `Interviewing ${this.ccName}...`,
158
158
  direction: "none"
159
159
  });
160
- await this.refreshValues(ctx);
160
+ await this.refreshValues(ctx, { tag: "interview" });
161
161
  this.setInterviewComplete(ctx, true);
162
162
  }
163
163
  async refreshValues(ctx, options) {
164
164
  const node = this.getNode(ctx);
165
165
  const endpoint = this.getEndpoint(ctx);
166
166
  const api = import_API.CCAPI.create(import_core.CommandClasses["Thermostat Operating State"], ctx, endpoint).withOptions({
167
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
167
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
168
+ tag: options?.tag
168
169
  });
169
170
  ctx.logNode(node.id, {
170
171
  endpoint: this.endpointIndex,
@@ -296,8 +297,7 @@ let ThermostatOperatingStateCCLoggingSupportedReport = (() => {
296
297
  return {
297
298
  ...super.toLogEntry(ctx),
298
299
  message: {
299
- "supported logging types": this.supportedLoggingTypes.map((t) => `
300
- \xB7 ${(0, import_shared.getEnumMemberName)(import_Types.ThermostatOperatingState, t)}`).join("")
300
+ "supported logging types": (0, import_core.logList)(this.supportedLoggingTypes.map((t) => (0, import_shared.getEnumMemberName)(import_Types.ThermostatOperatingState, t)))
301
301
  }
302
302
  };
303
303
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/ThermostatOperatingStateCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./ThermostatOperatingStateCC._validateArgs.js\";\nconst { validateArgs_ThermostatOperatingStateCCAPI_getLogging } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, ValueMetadata, type WithAddress, encodeBitMask, enumValuesToMetadataStates, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatOperatingState, ThermostatOperatingStateCommand, type ThermostatOperatingStateLoggingData, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatOperatingStateCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatOperatingStateCCValues };\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses[\"Thermostat Operating State\"])\nexport class ThermostatOperatingStateCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: ThermostatOperatingStateCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatOperatingStateCommand.Get:\n return true; // This is mandatory\n case ThermostatOperatingStateCommand.LoggingSupportedGet:\n case ThermostatOperatingStateCommand.LoggingGet:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatOperatingStateCCAPI, { property }) {\n switch (property) {\n case \"state\":\n return this.get();\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n public async get(): Promise<MaybeNotKnown<ThermostatOperatingState>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.Get);\n const cc = new ThermostatOperatingStateCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCReport>(cc, this.commandOptions);\n return response?.state;\n }\n public async getSupportedLoggingTypes(): Promise<MaybeNotKnown<readonly ThermostatOperatingState[]>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.LoggingSupportedGet);\n const cc = new ThermostatOperatingStateCCLoggingSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCLoggingSupportedReport>(cc, this.commandOptions);\n return response?.supportedLoggingTypes;\n }\n @validateArgs_ThermostatOperatingStateCCAPI_getLogging()\n public async getLogging(states: ThermostatOperatingState[]): Promise<MaybeNotKnown<ReadonlyMap<ThermostatOperatingState, ThermostatOperatingStateLoggingData>>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.LoggingGet);\n const cc = new ThermostatOperatingStateCCLoggingGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n requestedStates: states,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCLoggingReport>(cc, this.commandOptions);\n return response?.loggingData;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Operating State\"])\n@implementedVersion(2)\n@ccValues(ThermostatOperatingStateCCValues)\nexport class ThermostatOperatingStateCC extends CommandClass {\n declare ccCommand: ThermostatOperatingStateCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx);\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Operating State\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying thermostat operating state...\",\n direction: \"outbound\",\n });\n const state = await api.get();\n if (state != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received current thermostat operating state: ${getEnumMemberName(ThermostatOperatingState, state)}`,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCReportOptions {\n state: ThermostatOperatingState;\n}\n@CCCommand(ThermostatOperatingStateCommand.Report)\n@ccValueProperty(\"state\", ThermostatOperatingStateCCValues.operatingState)\nexport class ThermostatOperatingStateCCReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCReportOptions>) {\n super(options);\n this.state = options.state;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCReport {\n validatePayload(raw.payload.length >= 1);\n const state: ThermostatOperatingState = raw.payload[0];\n validatePayload(state <= ThermostatOperatingState[\"3rd Stage Aux Heat\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n state,\n });\n }\n public readonly state: ThermostatOperatingState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.state]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n state: getEnumMemberName(ThermostatOperatingState, this.state),\n },\n };\n }\n}\n@CCCommand(ThermostatOperatingStateCommand.Get)\n@expectedCCResponse(ThermostatOperatingStateCCReport)\nexport class ThermostatOperatingStateCCGet extends ThermostatOperatingStateCC {\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingSupportedReportOptions {\n supportedLoggingTypes: ThermostatOperatingState[];\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingSupportedReport)\nexport class ThermostatOperatingStateCCLoggingSupportedReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingSupportedReportOptions>) {\n super(options);\n this.supportedLoggingTypes = options.supportedLoggingTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingSupportedReport {\n // Bit 0 is not allocated, bit 1 = Operating State 1, etc.\n const supportedLoggingTypes: ThermostatOperatingState[] = parseBitMask(raw.payload, ThermostatOperatingState[\"Idle\"])\n // Bit 0 MUST be set to zero, so we ignore it when set\n .filter((state) => state !== ThermostatOperatingState.Idle);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedLoggingTypes,\n });\n }\n public readonly supportedLoggingTypes: ThermostatOperatingState[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const supportedLoggingTypes = this.supportedLoggingTypes\n // Bit 0 MUST be set to zero, so we filter it out\n .filter((t) => t !== ThermostatOperatingState.Idle);\n this.payload = encodeBitMask(supportedLoggingTypes, undefined, ThermostatOperatingState[\"Idle\"]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported logging types\": this.supportedLoggingTypes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(ThermostatOperatingState, t)}`)\n .join(\"\"),\n },\n };\n }\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingSupportedGet)\n@expectedCCResponse(ThermostatOperatingStateCCLoggingSupportedReport)\nexport class ThermostatOperatingStateCCLoggingSupportedGet extends ThermostatOperatingStateCC {\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingReportOptions {\n reportsToFollow: number;\n loggingData: Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>;\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingReport)\nexport class ThermostatOperatingStateCCLoggingReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingReportOptions>) {\n super(options);\n this.reportsToFollow = options.reportsToFollow;\n this.loggingData = options.loggingData;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingReport {\n validatePayload(raw.payload.length >= 1);\n const reportsToFollow = raw.payload[0];\n // Each log entry is 5 bytes:\n // Reserved[7:4]+StateType[3:0], TodayH, TodayM, YesterdayH, YesterdayM\n const loggingData = new Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>();\n let offset = 1;\n while (offset + 5 <= raw.payload.length) {\n const state: ThermostatOperatingState = raw.payload[offset++]\n & 0b1111;\n loggingData.set(state, {\n usageTodayHours: raw.payload[offset++],\n usageTodayMinutes: raw.payload[offset++],\n usageYesterdayHours: raw.payload[offset++],\n usageYesterdayMinutes: raw.payload[offset++],\n });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n reportsToFollow,\n loggingData,\n });\n }\n public reportsToFollow: number;\n public loggingData: Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>;\n public getPartialCCSessionId(): Record<string, any> | undefined {\n return {};\n }\n public getRemainingSegments(): number | undefined {\n return this.reportsToFollow;\n }\n public mergePartialCCs(partials: ThermostatOperatingStateCCLoggingReport[], _ctx: CCParsingContext): Promise<void> {\n // Merge all logging data maps from partial reports\n const merged = new Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>();\n for (const partial of partials) {\n for (const [state, data] of partial.loggingData) {\n merged.set(state, data);\n }\n }\n for (const [state, data] of this.loggingData) {\n merged.set(state, data);\n }\n this.loggingData = merged;\n return Promise.resolve();\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = new Bytes(1 + this.loggingData.size * 5);\n this.payload[0] = this.reportsToFollow;\n let offset = 1;\n for (const [state, entry] of this.loggingData) {\n this.payload[offset++] = state & 0b1111;\n this.payload[offset++] = entry.usageTodayHours;\n this.payload[offset++] = entry.usageTodayMinutes;\n this.payload[offset++] = entry.usageYesterdayHours;\n this.payload[offset++] = entry.usageYesterdayMinutes;\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"reports to follow\": this.reportsToFollow,\n };\n for (const [state, entry] of this.loggingData) {\n const stateName = getEnumMemberName(ThermostatOperatingState, state);\n message[`${stateName} today`] =\n `${entry.usageTodayHours}h ${entry.usageTodayMinutes}m`;\n message[`${stateName} yesterday`] =\n `${entry.usageYesterdayHours}h ${entry.usageYesterdayMinutes}m`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingGetOptions {\n requestedStates: ThermostatOperatingState[];\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingGet)\n@expectedCCResponse(ThermostatOperatingStateCCLoggingReport)\nexport class ThermostatOperatingStateCCLoggingGet extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingGetOptions>) {\n super(options);\n this.requestedStates = options.requestedStates;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingGet {\n const requestedStates: ThermostatOperatingState[] = parseBitMask(raw.payload, ThermostatOperatingState[\"Idle\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n requestedStates,\n });\n }\n public requestedStates: ThermostatOperatingState[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.requestedStates, undefined, ThermostatOperatingState[\"Idle\"]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"requested states\": this.requestedStates\n .map((t) => getEnumMemberName(ThermostatOperatingState, t))\n .join(\", \"),\n },\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./ThermostatOperatingStateCC._validateArgs.js\";\nconst { validateArgs_ThermostatOperatingStateCCAPI_getLogging } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, ValueMetadata, type WithAddress, encodeBitMask, enumValuesToMetadataStates, logList, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatOperatingState, ThermostatOperatingStateCommand, type ThermostatOperatingStateLoggingData, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatOperatingStateCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatOperatingStateCCValues };\n// @noSetValueAPI This CC is read-only\n@API(CommandClasses[\"Thermostat Operating State\"])\nexport class ThermostatOperatingStateCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: ThermostatOperatingStateCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatOperatingStateCommand.Get:\n return true; // This is mandatory\n case ThermostatOperatingStateCommand.LoggingSupportedGet:\n case ThermostatOperatingStateCommand.LoggingGet:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatOperatingStateCCAPI, { property }) {\n switch (property) {\n case \"state\":\n return this.get();\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n public async get(): Promise<MaybeNotKnown<ThermostatOperatingState>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.Get);\n const cc = new ThermostatOperatingStateCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCReport>(cc, this.commandOptions);\n return response?.state;\n }\n public async getSupportedLoggingTypes(): Promise<MaybeNotKnown<readonly ThermostatOperatingState[]>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.LoggingSupportedGet);\n const cc = new ThermostatOperatingStateCCLoggingSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCLoggingSupportedReport>(cc, this.commandOptions);\n return response?.supportedLoggingTypes;\n }\n @validateArgs_ThermostatOperatingStateCCAPI_getLogging()\n public async getLogging(states: ThermostatOperatingState[]): Promise<MaybeNotKnown<ReadonlyMap<ThermostatOperatingState, ThermostatOperatingStateLoggingData>>> {\n this.assertSupportsCommand(ThermostatOperatingStateCommand, ThermostatOperatingStateCommand.LoggingGet);\n const cc = new ThermostatOperatingStateCCLoggingGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n requestedStates: states,\n });\n const response = await this.host.sendCommand<ThermostatOperatingStateCCLoggingReport>(cc, this.commandOptions);\n return response?.loggingData;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Operating State\"])\n@implementedVersion(2)\n@ccValues(ThermostatOperatingStateCCValues)\nexport class ThermostatOperatingStateCC extends CommandClass {\n declare ccCommand: ThermostatOperatingStateCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx, { tag: \"interview\" });\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Operating State\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying thermostat operating state...\",\n direction: \"outbound\",\n });\n const state = await api.get();\n if (state != undefined) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `received current thermostat operating state: ${getEnumMemberName(ThermostatOperatingState, state)}`,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCReportOptions {\n state: ThermostatOperatingState;\n}\n@CCCommand(ThermostatOperatingStateCommand.Report)\n@ccValueProperty(\"state\", ThermostatOperatingStateCCValues.operatingState)\nexport class ThermostatOperatingStateCCReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCReportOptions>) {\n super(options);\n this.state = options.state;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCReport {\n validatePayload(raw.payload.length >= 1);\n const state: ThermostatOperatingState = raw.payload[0];\n validatePayload(state <= ThermostatOperatingState[\"3rd Stage Aux Heat\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n state,\n });\n }\n public readonly state: ThermostatOperatingState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.state]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n state: getEnumMemberName(ThermostatOperatingState, this.state),\n },\n };\n }\n}\n@CCCommand(ThermostatOperatingStateCommand.Get)\n@expectedCCResponse(ThermostatOperatingStateCCReport)\nexport class ThermostatOperatingStateCCGet extends ThermostatOperatingStateCC {\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingSupportedReportOptions {\n supportedLoggingTypes: ThermostatOperatingState[];\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingSupportedReport)\nexport class ThermostatOperatingStateCCLoggingSupportedReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingSupportedReportOptions>) {\n super(options);\n this.supportedLoggingTypes = options.supportedLoggingTypes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingSupportedReport {\n // Bit 0 is not allocated, bit 1 = Operating State 1, etc.\n const supportedLoggingTypes: ThermostatOperatingState[] = parseBitMask(raw.payload, ThermostatOperatingState[\"Idle\"])\n // Bit 0 MUST be set to zero, so we ignore it when set\n .filter((state) => state !== ThermostatOperatingState.Idle);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedLoggingTypes,\n });\n }\n public readonly supportedLoggingTypes: ThermostatOperatingState[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const supportedLoggingTypes = this.supportedLoggingTypes\n // Bit 0 MUST be set to zero, so we filter it out\n .filter((t) => t !== ThermostatOperatingState.Idle);\n this.payload = encodeBitMask(supportedLoggingTypes, undefined, ThermostatOperatingState[\"Idle\"]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported logging types\": logList(this.supportedLoggingTypes.map((t) => getEnumMemberName(ThermostatOperatingState, t))),\n },\n };\n }\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingSupportedGet)\n@expectedCCResponse(ThermostatOperatingStateCCLoggingSupportedReport)\nexport class ThermostatOperatingStateCCLoggingSupportedGet extends ThermostatOperatingStateCC {\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingReportOptions {\n reportsToFollow: number;\n loggingData: Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>;\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingReport)\nexport class ThermostatOperatingStateCCLoggingReport extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingReportOptions>) {\n super(options);\n this.reportsToFollow = options.reportsToFollow;\n this.loggingData = options.loggingData;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingReport {\n validatePayload(raw.payload.length >= 1);\n const reportsToFollow = raw.payload[0];\n // Each log entry is 5 bytes:\n // Reserved[7:4]+StateType[3:0], TodayH, TodayM, YesterdayH, YesterdayM\n const loggingData = new Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>();\n let offset = 1;\n while (offset + 5 <= raw.payload.length) {\n const state: ThermostatOperatingState = raw.payload[offset++]\n & 0b1111;\n loggingData.set(state, {\n usageTodayHours: raw.payload[offset++],\n usageTodayMinutes: raw.payload[offset++],\n usageYesterdayHours: raw.payload[offset++],\n usageYesterdayMinutes: raw.payload[offset++],\n });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n reportsToFollow,\n loggingData,\n });\n }\n public reportsToFollow: number;\n public loggingData: Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>;\n public getPartialCCSessionId(): Record<string, any> | undefined {\n return {};\n }\n public getRemainingSegments(): number | undefined {\n return this.reportsToFollow;\n }\n public mergePartialCCs(partials: ThermostatOperatingStateCCLoggingReport[], _ctx: CCParsingContext): Promise<void> {\n // Merge all logging data maps from partial reports\n const merged = new Map<ThermostatOperatingState, ThermostatOperatingStateLoggingData>();\n for (const partial of partials) {\n for (const [state, data] of partial.loggingData) {\n merged.set(state, data);\n }\n }\n for (const [state, data] of this.loggingData) {\n merged.set(state, data);\n }\n this.loggingData = merged;\n return Promise.resolve();\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = new Bytes(1 + this.loggingData.size * 5);\n this.payload[0] = this.reportsToFollow;\n let offset = 1;\n for (const [state, entry] of this.loggingData) {\n this.payload[offset++] = state & 0b1111;\n this.payload[offset++] = entry.usageTodayHours;\n this.payload[offset++] = entry.usageTodayMinutes;\n this.payload[offset++] = entry.usageYesterdayHours;\n this.payload[offset++] = entry.usageYesterdayMinutes;\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"reports to follow\": this.reportsToFollow,\n };\n for (const [state, entry] of this.loggingData) {\n const stateName = getEnumMemberName(ThermostatOperatingState, state);\n message[`${stateName} today`] =\n `${entry.usageTodayHours}h ${entry.usageTodayMinutes}m`;\n message[`${stateName} yesterday`] =\n `${entry.usageYesterdayHours}h ${entry.usageYesterdayMinutes}m`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface ThermostatOperatingStateCCLoggingGetOptions {\n requestedStates: ThermostatOperatingState[];\n}\n@CCCommand(ThermostatOperatingStateCommand.LoggingGet)\n@expectedCCResponse(ThermostatOperatingStateCCLoggingReport)\nexport class ThermostatOperatingStateCCLoggingGet extends ThermostatOperatingStateCC {\n public constructor(options: WithAddress<ThermostatOperatingStateCCLoggingGetOptions>) {\n super(options);\n this.requestedStates = options.requestedStates;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatOperatingStateCCLoggingGet {\n const requestedStates: ThermostatOperatingState[] = parseBitMask(raw.payload, ThermostatOperatingState[\"Idle\"]);\n return new this({\n nodeId: ctx.sourceNodeId,\n requestedStates,\n });\n }\n public requestedStates: ThermostatOperatingState[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.requestedStates, undefined, ThermostatOperatingState[\"Idle\"]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"requested states\": this.requestedStates\n .map((t) => getEnumMemberName(ThermostatOperatingState, t))\n .join(\", \"),\n },\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -146,14 +146,15 @@ let ThermostatSetbackCC = (() => {
146
146
  message: `Interviewing ${this.ccName}...`,
147
147
  direction: "none"
148
148
  });
149
- await this.refreshValues(ctx);
149
+ await this.refreshValues(ctx, { tag: "interview" });
150
150
  this.setInterviewComplete(ctx, true);
151
151
  }
152
152
  async refreshValues(ctx, options) {
153
153
  const node = this.getNode(ctx);
154
154
  const endpoint = this.getEndpoint(ctx);
155
155
  const api = import_API.CCAPI.create(import_core.CommandClasses["Thermostat Setback"], ctx, endpoint).withOptions({
156
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
156
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
157
+ tag: options?.tag
157
158
  });
158
159
  ctx.logNode(node.id, {
159
160
  endpoint: this.endpointIndex,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/ThermostatSetbackCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./ThermostatSetbackCC._validateArgs.js\";\nconst { validateArgs_ThermostatSetbackCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type SupervisionResult, type WithAddress, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { type SetbackState, SetbackType, ThermostatSetbackCommand, } from \"../lib/_Types.js\";\nimport { decodeSetbackState, encodeSetbackState } from \"../lib/serializers.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\n// @noSetValueAPI\n// The setback state consist of two values that must be set together\n@API(CommandClasses[\"Thermostat Setback\"])\nexport class ThermostatSetbackCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatSetbackCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatSetbackCommand.Get:\n return this.isSinglecast();\n case ThermostatSetbackCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatSetbackCCAPI, { property }) {\n switch (property) {\n case \"setbackType\":\n case \"setbackState\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatSetbackCommand, ThermostatSetbackCommand.Get);\n const cc = new ThermostatSetbackCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatSetbackCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"setbackType\", \"setbackState\"]);\n }\n }\n @validateArgs_ThermostatSetbackCCAPI_set()\n public async set(setbackType: SetbackType, setbackState: SetbackState): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatSetbackCommand, ThermostatSetbackCommand.Get);\n const cc = new ThermostatSetbackCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n setbackType,\n setbackState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Thermostat Setback\"])\n@implementedVersion(1)\nexport class ThermostatSetbackCC extends CommandClass {\n declare ccCommand: ThermostatSetbackCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Setback\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n // Query the thermostat state\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying the current thermostat state...\",\n direction: \"outbound\",\n });\n const setbackResp = await api.get();\n if (setbackResp) {\n const logMessage = `received current state:\nsetback type: ${getEnumMemberName(SetbackType, setbackResp.setbackType)}\nsetback state: ${setbackResp.setbackState}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatSetbackCCSetOptions {\n setbackType: SetbackType;\n setbackState: SetbackState;\n}\n@CCCommand(ThermostatSetbackCommand.Set)\n@useSupervision()\nexport class ThermostatSetbackCCSet extends ThermostatSetbackCC {\n public constructor(options: WithAddress<ThermostatSetbackCCSetOptions>) {\n super(options);\n this.setbackType = options.setbackType;\n this.setbackState = options.setbackState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetbackCCSet {\n validatePayload(raw.payload.length >= 2);\n const setbackType: SetbackType = raw.payload[0] & 0b11;\n const setbackState: SetbackState = decodeSetbackState(raw.payload, 1)\n // If we receive an unknown setback state, return the raw value\n || raw.payload.readInt8(1);\n return new this({\n nodeId: ctx.sourceNodeId,\n setbackType,\n setbackState,\n });\n }\n public setbackType: SetbackType;\n /** The offset from the setpoint in 0.1 Kelvin or a special mode */\n public setbackState: SetbackState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.setbackType & 0b11],\n encodeSetbackState(this.setbackState),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setback type\": getEnumMemberName(SetbackType, this.setbackType),\n \"setback state\": typeof this.setbackState === \"number\"\n ? `${this.setbackState} K`\n : this.setbackState,\n },\n };\n }\n}\n// @publicAPI\nexport interface ThermostatSetbackCCReportOptions {\n setbackType: SetbackType;\n setbackState: SetbackState;\n}\n@CCCommand(ThermostatSetbackCommand.Report)\nexport class ThermostatSetbackCCReport extends ThermostatSetbackCC {\n public constructor(options: WithAddress<ThermostatSetbackCCReportOptions>) {\n super(options);\n this.setbackType = options.setbackType;\n this.setbackState = options.setbackState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetbackCCReport {\n validatePayload(raw.payload.length >= 2);\n const setbackType: SetbackType = raw.payload[0] & 0b11;\n const setbackState: SetbackState = decodeSetbackState(raw.payload, 1)\n // If we receive an unknown setback state, return the raw value\n || raw.payload.readInt8(1);\n return new this({\n nodeId: ctx.sourceNodeId,\n setbackType,\n setbackState,\n });\n }\n public readonly setbackType: SetbackType;\n /** The offset from the setpoint in 0.1 Kelvin or a special mode */\n public readonly setbackState: SetbackState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.setbackType & 0b11],\n encodeSetbackState(this.setbackState),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setback type\": getEnumMemberName(SetbackType, this.setbackType),\n \"setback state\": typeof this.setbackState === \"number\"\n ? `${this.setbackState} K`\n : this.setbackState,\n },\n };\n }\n}\n@CCCommand(ThermostatSetbackCommand.Get)\n@expectedCCResponse(ThermostatSetbackCCReport)\nexport class ThermostatSetbackCCGet extends ThermostatSetbackCC {\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./ThermostatSetbackCC._validateArgs.js\";\nconst { validateArgs_ThermostatSetbackCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type SupervisionResult, type WithAddress, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, throwUnsupportedProperty, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { type SetbackState, SetbackType, ThermostatSetbackCommand, } from \"../lib/_Types.js\";\nimport { decodeSetbackState, encodeSetbackState } from \"../lib/serializers.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\n// @noSetValueAPI\n// The setback state consist of two values that must be set together\n@API(CommandClasses[\"Thermostat Setback\"])\nexport class ThermostatSetbackCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatSetbackCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatSetbackCommand.Get:\n return this.isSinglecast();\n case ThermostatSetbackCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatSetbackCCAPI, { property }) {\n switch (property) {\n case \"setbackType\":\n case \"setbackState\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatSetbackCommand, ThermostatSetbackCommand.Get);\n const cc = new ThermostatSetbackCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatSetbackCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"setbackType\", \"setbackState\"]);\n }\n }\n @validateArgs_ThermostatSetbackCCAPI_set()\n public async set(setbackType: SetbackType, setbackState: SetbackState): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatSetbackCommand, ThermostatSetbackCommand.Get);\n const cc = new ThermostatSetbackCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n setbackType,\n setbackState,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses[\"Thermostat Setback\"])\n@implementedVersion(1)\nexport class ThermostatSetbackCC extends CommandClass {\n declare ccCommand: ThermostatSetbackCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses[\"Thermostat Setback\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query the thermostat state\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying the current thermostat state...\",\n direction: \"outbound\",\n });\n const setbackResp = await api.get();\n if (setbackResp) {\n const logMessage = `received current state:\nsetback type: ${getEnumMemberName(SetbackType, setbackResp.setbackType)}\nsetback state: ${setbackResp.setbackState}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport interface ThermostatSetbackCCSetOptions {\n setbackType: SetbackType;\n setbackState: SetbackState;\n}\n@CCCommand(ThermostatSetbackCommand.Set)\n@useSupervision()\nexport class ThermostatSetbackCCSet extends ThermostatSetbackCC {\n public constructor(options: WithAddress<ThermostatSetbackCCSetOptions>) {\n super(options);\n this.setbackType = options.setbackType;\n this.setbackState = options.setbackState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetbackCCSet {\n validatePayload(raw.payload.length >= 2);\n const setbackType: SetbackType = raw.payload[0] & 0b11;\n const setbackState: SetbackState = decodeSetbackState(raw.payload, 1)\n // If we receive an unknown setback state, return the raw value\n || raw.payload.readInt8(1);\n return new this({\n nodeId: ctx.sourceNodeId,\n setbackType,\n setbackState,\n });\n }\n public setbackType: SetbackType;\n /** The offset from the setpoint in 0.1 Kelvin or a special mode */\n public setbackState: SetbackState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.setbackType & 0b11],\n encodeSetbackState(this.setbackState),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setback type\": getEnumMemberName(SetbackType, this.setbackType),\n \"setback state\": typeof this.setbackState === \"number\"\n ? `${this.setbackState} K`\n : this.setbackState,\n },\n };\n }\n}\n// @publicAPI\nexport interface ThermostatSetbackCCReportOptions {\n setbackType: SetbackType;\n setbackState: SetbackState;\n}\n@CCCommand(ThermostatSetbackCommand.Report)\nexport class ThermostatSetbackCCReport extends ThermostatSetbackCC {\n public constructor(options: WithAddress<ThermostatSetbackCCReportOptions>) {\n super(options);\n this.setbackType = options.setbackType;\n this.setbackState = options.setbackState;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatSetbackCCReport {\n validatePayload(raw.payload.length >= 2);\n const setbackType: SetbackType = raw.payload[0] & 0b11;\n const setbackState: SetbackState = decodeSetbackState(raw.payload, 1)\n // If we receive an unknown setback state, return the raw value\n || raw.payload.readInt8(1);\n return new this({\n nodeId: ctx.sourceNodeId,\n setbackType,\n setbackState,\n });\n }\n public readonly setbackType: SetbackType;\n /** The offset from the setpoint in 0.1 Kelvin or a special mode */\n public readonly setbackState: SetbackState;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [this.setbackType & 0b11],\n encodeSetbackState(this.setbackState),\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"setback type\": getEnumMemberName(SetbackType, this.setbackType),\n \"setback state\": typeof this.setbackState === \"number\"\n ? `${this.setbackState} K`\n : this.setbackState,\n },\n };\n }\n}\n@CCCommand(ThermostatSetbackCommand.Get)\n@expectedCCResponse(ThermostatSetbackCCReport)\nexport class ThermostatSetbackCCGet extends ThermostatSetbackCC {\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }