@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
@@ -373,7 +373,8 @@ let DoorLockCC = (() => {
373
373
  const node = this.getNode(ctx);
374
374
  const endpoint = this.getEndpoint(ctx);
375
375
  const api = import_API.CCAPI.create(import_core.CommandClasses["Door Lock"], ctx, endpoint).withOptions({
376
- priority: import_core.MessagePriority.NodeQuery
376
+ priority: import_core.MessagePriority.NodeQuery,
377
+ tag: "interview"
377
378
  });
378
379
  ctx.logNode(node.id, {
379
380
  endpoint: this.endpointIndex,
@@ -392,22 +393,23 @@ let DoorLockCC = (() => {
392
393
  });
393
394
  const resp = await api.getCapabilities();
394
395
  if (resp) {
395
- const logMessage = `received lock capabilities:
396
- supported operation types: ${resp.supportedOperationTypes.map((t) => (0, import_shared.getEnumMemberName)(import_Types.DoorLockOperationType, t)).join(", ")}
397
- supported door lock modes: ${resp.supportedDoorLockModes.map((t) => (0, import_shared.getEnumMemberName)(import_Types.DoorLockMode, t)).map((str) => `
398
- \xB7 ${str}`).join("")}
399
- supported outside handles: ${resp.supportedOutsideHandles.map(String).join(", ")}
400
- supported inside handles: ${resp.supportedInsideHandles.map(String).join(", ")}
401
- supports door status: ${resp.doorSupported}
402
- supports bolt status: ${resp.boltSupported}
403
- supports latch status: ${resp.latchSupported}
404
- supports auto-relock: ${resp.autoRelockSupported}
405
- supports hold-and-release: ${resp.holdAndReleaseSupported}
406
- supports twist assist: ${resp.twistAssistSupported}
407
- supports block to block: ${resp.blockToBlockSupported}`;
408
396
  ctx.logNode(node.id, {
409
397
  endpoint: this.endpointIndex,
410
- message: logMessage,
398
+ message: (0, import_core.logText)("received lock capabilities:", {
399
+ nested: (0, import_core.logDict)({
400
+ "supported operation types": resp.supportedOperationTypes.map((t) => (0, import_shared.getEnumMemberName)(import_Types.DoorLockOperationType, t)).join(", "),
401
+ "supported door lock modes": (0, import_core.logList)(resp.supportedDoorLockModes.map((t) => (0, import_shared.getEnumMemberName)(import_Types.DoorLockMode, t))),
402
+ "supported outside handles": resp.supportedOutsideHandles.map(String).join(", "),
403
+ "supported inside handles": resp.supportedInsideHandles.map(String).join(", "),
404
+ "supports door status": resp.doorSupported,
405
+ "supports bolt status": resp.boltSupported,
406
+ "supports latch status": resp.latchSupported,
407
+ "supports auto-relock": resp.autoRelockSupported,
408
+ "supports hold-and-release": resp.holdAndReleaseSupported,
409
+ "supports twist assist": resp.twistAssistSupported,
410
+ "supports block to block": resp.blockToBlockSupported
411
+ })
412
+ }),
411
413
  direction: "inbound"
412
414
  });
413
415
  doorSupported = resp.doorSupported;
@@ -441,7 +443,7 @@ supports block to block: ${resp.blockToBlockSupported}`;
441
443
  this.setMetadata(ctx, boltStatusValue);
442
444
  this.setValue(ctx, import_CCValues_generated.DoorLockCCValues.boltSupported, boltSupported);
443
445
  }
444
- await this.refreshValues(ctx);
446
+ await this.refreshValues(ctx, { tag: "interview" });
445
447
  if (!hadCriticalTimeout)
446
448
  this.setInterviewComplete(ctx, true);
447
449
  }
@@ -449,7 +451,8 @@ supports block to block: ${resp.blockToBlockSupported}`;
449
451
  const node = this.getNode(ctx);
450
452
  const endpoint = this.getEndpoint(ctx);
451
453
  const api = import_API.CCAPI.create(import_core.CommandClasses["Door Lock"], ctx, endpoint).withOptions({
452
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
454
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
455
+ tag: options?.tag
453
456
  });
454
457
  ctx.logNode(node.id, {
455
458
  endpoint: this.endpointIndex,
@@ -458,26 +461,22 @@ supports block to block: ${resp.blockToBlockSupported}`;
458
461
  });
459
462
  const config = await api.getConfiguration();
460
463
  if (config) {
461
- let logMessage = `received lock configuration:
462
- operation type: ${(0, import_shared.getEnumMemberName)(import_Types.DoorLockOperationType, config.operationType)}`;
463
- if (config.operationType === import_Types.DoorLockOperationType.Timed) {
464
- logMessage += `
465
- lock timeout: ${config.lockTimeoutConfiguration} seconds
466
- `;
467
- }
468
- logMessage += `
469
- outside handles can open door: ${config.outsideHandlesCanOpenDoorConfiguration.map(String).join(", ")}
470
- inside handles can open door: ${config.insideHandlesCanOpenDoorConfiguration.map(String).join(", ")}`;
471
- if (api.version >= 4) {
472
- logMessage += `
473
- auto-relock time ${config.autoRelockTime ?? "-"} seconds
474
- hold-and-release time ${config.holdAndReleaseTime ?? "-"} seconds
475
- twist assist ${!!config.twistAssist}
476
- block to block ${!!config.blockToBlock}`;
477
- }
478
464
  ctx.logNode(node.id, {
479
465
  endpoint: this.endpointIndex,
480
- message: logMessage,
466
+ message: (0, import_core.logText)("received lock configuration:", {
467
+ nested: (0, import_core.logDict)({
468
+ "operation type": (0, import_shared.getEnumMemberName)(import_Types.DoorLockOperationType, config.operationType),
469
+ "lock timeout": config.operationType === import_Types.DoorLockOperationType.Timed ? `${config.lockTimeoutConfiguration} seconds` : void 0,
470
+ "outside handles can open door": config.outsideHandlesCanOpenDoorConfiguration.map(String).join(", "),
471
+ "inside handles can open door": config.insideHandlesCanOpenDoorConfiguration.map(String).join(", "),
472
+ ...api.version >= 4 ? {
473
+ "auto-relock time": `${config.autoRelockTime ?? "-"} seconds`,
474
+ "hold-and-release time": `${config.holdAndReleaseTime ?? "-"} seconds`,
475
+ "twist assist": !!config.twistAssist,
476
+ "block to block": !!config.blockToBlock
477
+ } : void 0
478
+ })
479
+ }),
481
480
  direction: "inbound"
482
481
  });
483
482
  }
@@ -488,32 +487,21 @@ block to block ${!!config.blockToBlock}`;
488
487
  });
489
488
  const status = await api.get();
490
489
  if (status) {
491
- let logMessage = `received lock status:
492
- current mode: ${(0, import_shared.getEnumMemberName)(import_Types.DoorLockMode, status.currentMode)}`;
493
- if (status.targetMode != void 0) {
494
- logMessage += `
495
- target mode: ${(0, import_shared.getEnumMemberName)(import_Types.DoorLockMode, status.targetMode)}
496
- remaining duration: ${status.duration?.toString() ?? "undefined"}`;
497
- }
498
- if (status.lockTimeout != void 0) {
499
- logMessage += `
500
- lock timeout: ${status.lockTimeout} seconds`;
501
- }
502
- if (status.doorStatus != void 0) {
503
- logMessage += `
504
- door status: ${status.doorStatus}`;
505
- }
506
- if (status.boltStatus != void 0) {
507
- logMessage += `
508
- bolt status: ${status.boltStatus}`;
509
- }
510
- if (status.latchStatus != void 0) {
511
- logMessage += `
512
- latch status: ${status.latchStatus}`;
513
- }
514
490
  ctx.logNode(node.id, {
515
491
  endpoint: this.endpointIndex,
516
- message: logMessage,
492
+ message: (0, import_core.logText)("received lock status:", {
493
+ nested: (0, import_core.logDict)({
494
+ "current mode": (0, import_shared.getEnumMemberName)(import_Types.DoorLockMode, status.currentMode),
495
+ ...status.targetMode != void 0 ? {
496
+ "target mode": (0, import_shared.getEnumMemberName)(import_Types.DoorLockMode, status.targetMode),
497
+ "remaining duration": status.duration?.toString() ?? "undefined"
498
+ } : void 0,
499
+ "lock timeout": status.lockTimeout != void 0 ? `${status.lockTimeout} seconds` : void 0,
500
+ "door status": status.doorStatus,
501
+ "bolt status": status.boltStatus,
502
+ "latch status": status.latchStatus
503
+ })
504
+ }),
517
505
  direction: "inbound"
518
506
  });
519
507
  }
@@ -1260,10 +1248,8 @@ let DoorLockCCCapabilitiesReport = (() => {
1260
1248
  "twist assist feature": this.twistAssistSupported,
1261
1249
  "hold-and-release feature": this.holdAndReleaseSupported,
1262
1250
  "auto-relock feature": this.autoRelockSupported,
1263
- "operation types": this.supportedOperationTypes.map((t) => `
1264
- \xB7 ${(0, import_shared.getEnumMemberName)(import_Types.DoorLockOperationType, t)}`).join(""),
1265
- "door lock modes": this.supportedDoorLockModes.map((t) => `
1266
- \xB7 ${(0, import_shared.getEnumMemberName)(import_Types.DoorLockMode, t)}`).join(""),
1251
+ "operation types": (0, import_core.logList)(this.supportedOperationTypes.map((t) => (0, import_shared.getEnumMemberName)(import_Types.DoorLockOperationType, t))),
1252
+ "door lock modes": (0, import_core.logList)(this.supportedDoorLockModes.map((t) => (0, import_shared.getEnumMemberName)(import_Types.DoorLockMode, t))),
1267
1253
  "outside handles": this.supportedOutsideHandles.join(", "),
1268
1254
  "inside handles": this.supportedInsideHandles.join(", ")
1269
1255
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/DoorLockCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./DoorLockCC._validateArgs.js\";\nconst { validateArgs_DoorLockCCAPI_set, validateArgs_DoorLockCCAPI_setConfiguration } = __validateArgs;\nimport { CommandClasses, Duration, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, SupervisionStatus, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, enumValuesToMetadataStates, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { isArray } from \"alcalzone-shared/typeguards\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, 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 { type DoorHandleStatus, DoorLockCommand, DoorLockMode, DoorLockOperationType, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { DoorLockCCValues } from \"./_CCValues.generated.js\";\nexport { DoorLockCCValues };\nexport function shouldAutoCreateLatchStatusValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.latchSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateBoltStatusValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.boltSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateDoorStatusValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.doorSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateTwistAssistConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.twistAssistSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateBlockToBlockConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.blockToBlockSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateAutoRelockConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.autoRelockSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateHoldAndReleaseConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.holdAndReleaseSupported.endpoint(endpoint.index));\n}\nconst configurationSetParameters = [\n \"operationType\",\n \"outsideHandlesCanOpenDoorConfiguration\",\n \"insideHandlesCanOpenDoorConfiguration\",\n \"lockTimeoutConfiguration\",\n \"autoRelockTime\",\n \"holdAndReleaseTime\",\n \"twistAssist\",\n \"blockToBlock\",\n] as const;\n@API(CommandClasses[\"Door Lock\"])\nexport class DoorLockCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: DoorLockCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case DoorLockCommand.OperationSet:\n case DoorLockCommand.OperationGet:\n case DoorLockCommand.ConfigurationSet:\n case DoorLockCommand.ConfigurationGet:\n return true; // This is mandatory\n case DoorLockCommand.CapabilitiesGet:\n return this.version >= 4;\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: DoorLockCCAPI, { property }, value) {\n if (property === \"targetMode\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.set(value);\n }\n else if (typeof property === \"string\"\n && configurationSetParameters.includes(property as any)) {\n // checking every type here would create a LOT of duplicate code, so we don't\n // ConfigurationSet expects all parameters --> read the others from cache\n const config = {\n [property]: value,\n } as DoorLockCCConfigurationSetOptions;\n for (const param of configurationSetParameters) {\n if (param !== property) {\n (config as any)[param] = this.tryGetValueDB()?.getValue({\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property: param,\n });\n }\n }\n // Fix insideHandlesCanOpenDoorConfiguration is not iterable\n const allTrue: DoorHandleStatus = [true, true, true, true];\n if (!config.insideHandlesCanOpenDoorConfiguration) {\n config.insideHandlesCanOpenDoorConfiguration = allTrue;\n }\n if (!config.outsideHandlesCanOpenDoorConfiguration) {\n config.outsideHandlesCanOpenDoorConfiguration = allTrue;\n }\n const result = await this.setConfiguration(config);\n // Verify the current value after a delay, unless the command was supervised and successful\n if (!supervisedCommandSucceeded(result)) {\n this.schedulePoll({ property }, value);\n }\n return result;\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property }, value) => {\n if (property === \"targetMode\" && typeof value === \"number\") {\n const targetMode = value;\n const currentModeValueId = DoorLockCCValues.currentMode.endpoint(this.endpoint.index);\n return {\n isSplitStateTargetValue: true,\n supervisionDelayedUpdates: true,\n optimisticallyUpdateRelatedValues: (_supervisedAndSuccessful) => {\n this.tryGetValueDB()?.setValue(currentModeValueId, targetMode);\n },\n supervisionOnSuccess: () => {\n this.tryGetValueDB()?.setValue(currentModeValueId, targetMode);\n },\n supervisionOnFailure: async () => {\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n },\n verifyChanges: async (result) => {\n switch (result?.status) {\n case SupervisionStatus.Success:\n case SupervisionStatus.Working:\n return;\n case SupervisionStatus.Fail:\n case SupervisionStatus.NoSupport:\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n return;\n default:\n this.schedulePoll({ property: \"currentMode\" }, targetMode);\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: DoorLockCCAPI, { property }) {\n switch (property) {\n case \"currentMode\":\n case \"targetMode\":\n case \"duration\":\n case \"outsideHandlesCanOpenDoor\":\n case \"insideHandlesCanOpenDoor\":\n case \"latchStatus\":\n case \"boltStatus\":\n case \"doorStatus\":\n case \"lockTimeout\":\n return (await this.get())?.[property];\n case \"operationType\":\n case \"outsideHandlesCanOpenDoorConfiguration\":\n case \"insideHandlesCanOpenDoorConfiguration\":\n case \"lockTimeoutConfiguration\":\n case \"autoRelockTime\":\n case \"holdAndReleaseTime\":\n case \"twistAssist\":\n case \"blockToBlock\":\n return (await this.getConfiguration())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getCapabilities() {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.CapabilitiesGet);\n const cc = new DoorLockCCCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<DoorLockCCCapabilitiesReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"autoRelockSupported\",\n \"blockToBlockSupported\",\n \"boltSupported\",\n \"doorSupported\",\n \"holdAndReleaseSupported\",\n \"latchSupported\",\n \"twistAssistSupported\",\n \"supportedDoorLockModes\",\n \"supportedInsideHandles\",\n \"supportedOperationTypes\",\n \"supportedOutsideHandles\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.OperationGet);\n const cc = new DoorLockCCOperationGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<DoorLockCCOperationReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"currentMode\",\n \"targetMode\",\n \"duration\",\n \"outsideHandlesCanOpenDoor\",\n \"insideHandlesCanOpenDoor\",\n \"latchStatus\",\n \"boltStatus\",\n \"doorStatus\",\n \"lockTimeout\",\n ]);\n }\n }\n @validateArgs_DoorLockCCAPI_set()\n public async set(mode: DoorLockMode): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.OperationSet);\n const cc = new DoorLockCCOperationSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n mode,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_DoorLockCCAPI_setConfiguration()\n public async setConfiguration(configuration: DoorLockCCConfigurationSetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.ConfigurationSet);\n const cc = new DoorLockCCConfigurationSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...configuration,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getConfiguration() {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.ConfigurationGet);\n const cc = new DoorLockCCConfigurationGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<DoorLockCCConfigurationReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"operationType\",\n \"outsideHandlesCanOpenDoorConfiguration\",\n \"insideHandlesCanOpenDoorConfiguration\",\n \"lockTimeoutConfiguration\",\n \"autoRelockTime\",\n \"holdAndReleaseTime\",\n \"twistAssist\",\n \"blockToBlock\",\n ]);\n }\n }\n}\n@commandClass(CommandClasses[\"Door Lock\"])\n@implementedVersion(4)\n@ccValues(DoorLockCCValues)\nexport class DoorLockCC extends CommandClass {\n declare ccCommand: DoorLockCommand;\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[\"Door Lock\"], 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 // We need to do some queries after a potential timeout\n // In this case, do now mark this CC as interviewed completely\n let hadCriticalTimeout = false;\n // By default, assume all status sensors to be supported\n let doorSupported = true;\n let boltSupported = true;\n let latchSupported = true;\n if (api.version >= 4) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting lock capabilities...\",\n direction: \"outbound\",\n });\n const resp = await api.getCapabilities();\n if (resp) {\n const logMessage = `received lock capabilities:\nsupported operation types: ${resp.supportedOperationTypes\n .map((t) => getEnumMemberName(DoorLockOperationType, t))\n .join(\", \")}\nsupported door lock modes: ${resp.supportedDoorLockModes\n .map((t) => getEnumMemberName(DoorLockMode, t))\n .map((str) => `\\n\u00B7 ${str}`)\n .join(\"\")}\nsupported outside handles: ${resp.supportedOutsideHandles\n .map(String)\n .join(\", \")}\nsupported inside handles: ${resp.supportedInsideHandles.map(String).join(\", \")}\nsupports door status: ${resp.doorSupported}\nsupports bolt status: ${resp.boltSupported}\nsupports latch status: ${resp.latchSupported}\nsupports auto-relock: ${resp.autoRelockSupported}\nsupports hold-and-release: ${resp.holdAndReleaseSupported}\nsupports twist assist: ${resp.twistAssistSupported}\nsupports block to block: ${resp.blockToBlockSupported}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n doorSupported = resp.doorSupported;\n boltSupported = resp.boltSupported;\n latchSupported = resp.latchSupported;\n // Update metadata of settable states\n const targetModeValue = DoorLockCCValues.targetMode;\n this.setMetadata(ctx, targetModeValue, {\n ...targetModeValue.meta,\n states: enumValuesToMetadataStates(DoorLockMode, resp.supportedDoorLockModes),\n });\n const operationTypeValue = DoorLockCCValues.operationType;\n this.setMetadata(ctx, operationTypeValue, {\n ...operationTypeValue.meta,\n states: enumValuesToMetadataStates(DoorLockOperationType, resp.supportedOperationTypes),\n });\n }\n else {\n hadCriticalTimeout = true;\n }\n }\n if (!hadCriticalTimeout) {\n // Save support information for the status values\n const doorStatusValue = DoorLockCCValues.doorStatus;\n if (doorSupported)\n this.setMetadata(ctx, doorStatusValue);\n this.setValue(ctx, DoorLockCCValues.doorSupported, doorSupported);\n const latchStatusValue = DoorLockCCValues.latchStatus;\n if (latchSupported)\n this.setMetadata(ctx, latchStatusValue);\n this.setValue(ctx, DoorLockCCValues.latchSupported, latchSupported);\n const boltStatusValue = DoorLockCCValues.boltStatus;\n if (boltSupported)\n this.setMetadata(ctx, boltStatusValue);\n this.setValue(ctx, DoorLockCCValues.boltSupported, boltSupported);\n }\n await this.refreshValues(ctx);\n // Remember that the interview is complete\n if (!hadCriticalTimeout)\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[\"Door Lock\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting lock configuration...\",\n direction: \"outbound\",\n });\n const config = await api.getConfiguration();\n if (config) {\n let logMessage = `received lock configuration:\noperation type: ${getEnumMemberName(DoorLockOperationType, config.operationType)}`;\n if (config.operationType === DoorLockOperationType.Timed) {\n logMessage += `\nlock timeout: ${config.lockTimeoutConfiguration} seconds\n`;\n }\n logMessage += `\noutside handles can open door: ${config.outsideHandlesCanOpenDoorConfiguration\n .map(String)\n .join(\", \")}\ninside handles can open door: ${config.insideHandlesCanOpenDoorConfiguration\n .map(String)\n .join(\", \")}`;\n if (api.version >= 4) {\n logMessage += `\nauto-relock time ${config.autoRelockTime ?? \"-\"} seconds\nhold-and-release time ${config.holdAndReleaseTime ?? \"-\"} seconds\ntwist assist ${!!config.twistAssist}\nblock to block ${!!config.blockToBlock}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting current lock status...\",\n direction: \"outbound\",\n });\n const status = await api.get();\n if (status) {\n let logMessage = `received lock status:\ncurrent mode: ${getEnumMemberName(DoorLockMode, status.currentMode)}`;\n if (status.targetMode != undefined) {\n logMessage += `\ntarget mode: ${getEnumMemberName(DoorLockMode, status.targetMode)}\nremaining duration: ${status.duration?.toString() ?? \"undefined\"}`;\n }\n if (status.lockTimeout != undefined) {\n logMessage += `\nlock timeout: ${status.lockTimeout} seconds`;\n }\n if (status.doorStatus != undefined) {\n logMessage += `\ndoor status: ${status.doorStatus}`;\n }\n if (status.boltStatus != undefined) {\n logMessage += `\nbolt status: ${status.boltStatus}`;\n }\n if (status.latchStatus != undefined) {\n logMessage += `\nlatch status: ${status.latchStatus}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n }\n /**\n * Returns whether the node supports auto relock.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsAutoRelockCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.autoRelockSupported.endpoint(endpoint.index));\n }\n /**\n * Returns whether the node supports hold and release.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsHoldAndReleaseCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.holdAndReleaseSupported.endpoint(endpoint.index));\n }\n /**\n * Returns whether the node supports twist assist.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsTwistAssistCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.twistAssistSupported.endpoint(endpoint.index));\n }\n /**\n * Returns whether the node supports block to block.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsBlockToBlockCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.blockToBlockSupported.endpoint(endpoint.index));\n }\n /**\n * Returns the supported outside handles.\n * This only works AFTER the node has been interviewed.\n */\n public static getSupportedOutsideHandlesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<DoorHandleStatus> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.supportedOutsideHandles.endpoint(endpoint.index));\n }\n /**\n * Returns the supported inside handles.\n * This only works AFTER the node has been interviewed.\n */\n public static getSupportedInsideHandlesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<DoorHandleStatus> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.supportedInsideHandles.endpoint(endpoint.index));\n }\n}\n// @publicAPI\nexport interface DoorLockCCOperationSetOptions {\n mode: DoorLockMode;\n}\n@CCCommand(DoorLockCommand.OperationSet)\n@useSupervision()\nexport class DoorLockCCOperationSet extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCOperationSetOptions>) {\n super(options);\n if (options.mode === DoorLockMode.Unknown) {\n throw new ZWaveError(`Unknown is not a valid door lock target state!`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.mode = options.mode;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCOperationSet {\n validatePayload(raw.payload.length >= 1);\n const mode: DoorLockMode = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n public mode: DoorLockMode;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.mode]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"target mode\": getEnumMemberName(DoorLockMode, this.mode),\n },\n };\n }\n}\n// @publicAPI\nexport interface DoorLockCCOperationReportOptions {\n currentMode: DoorLockMode;\n outsideHandlesCanOpenDoor: DoorHandleStatus;\n insideHandlesCanOpenDoor: DoorHandleStatus;\n doorStatus?: \"closed\" | \"open\";\n boltStatus?: \"unlocked\" | \"locked\";\n latchStatus?: \"closed\" | \"open\";\n lockTimeout?: number;\n targetMode?: DoorLockMode;\n duration?: Duration;\n}\n@CCCommand(DoorLockCommand.OperationReport)\n@ccValueProperty(\"currentMode\", DoorLockCCValues.currentMode)\n@ccValueProperty(\"targetMode\", DoorLockCCValues.targetMode)\n@ccValueProperty(\"duration\", DoorLockCCValues.duration)\n@ccValueProperty(\"outsideHandlesCanOpenDoor\", DoorLockCCValues.outsideHandlesCanOpenDoor)\n@ccValueProperty(\"insideHandlesCanOpenDoor\", DoorLockCCValues.insideHandlesCanOpenDoor)\n@ccValueProperty(\"lockTimeout\", DoorLockCCValues.lockTimeout)\nexport class DoorLockCCOperationReport extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCOperationReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.currentMode = options.currentMode;\n this.outsideHandlesCanOpenDoor = options.outsideHandlesCanOpenDoor;\n this.insideHandlesCanOpenDoor = options.insideHandlesCanOpenDoor;\n this.doorStatus = options.doorStatus;\n this.boltStatus = options.boltStatus;\n this.latchStatus = options.latchStatus;\n this.lockTimeout = options.lockTimeout;\n this.targetMode = options.targetMode;\n this.duration = options.duration;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCOperationReport {\n validatePayload(raw.payload.length >= 5);\n const currentMode: DoorLockMode = raw.payload[0];\n const outsideHandlesCanOpenDoor: DoorHandleStatus = [\n !!(raw.payload[1] & 16),\n !!(raw.payload[1] & 32),\n !!(raw.payload[1] & 64),\n !!(raw.payload[1] & 128),\n ];\n const insideHandlesCanOpenDoor: DoorHandleStatus = [\n !!(raw.payload[1] & 0b0001),\n !!(raw.payload[1] & 0b0010),\n !!(raw.payload[1] & 0b0100),\n !!(raw.payload[1] & 0b1000),\n ];\n const doorStatus: \"closed\" | \"open\" | undefined = !!(raw.payload[2] & 0b1)\n ? \"closed\"\n : \"open\";\n const boltStatus: \"unlocked\" | \"locked\" | undefined = !!(raw.payload[2] & 0b10) ? \"unlocked\" : \"locked\";\n const latchStatus: \"closed\" | \"open\" | undefined = !!(raw.payload[2] & 0b100)\n ? \"closed\"\n : \"open\";\n // Ignore invalid timeout values\n const lockTimeoutMinutes = raw.payload[3];\n const lockTimeoutSeconds = raw.payload[4];\n let lockTimeout: number | undefined;\n if (lockTimeoutMinutes <= 253 && lockTimeoutSeconds <= 59) {\n lockTimeout = lockTimeoutSeconds + lockTimeoutMinutes * 60;\n }\n let targetMode: DoorLockMode | undefined;\n let duration: Duration | undefined;\n if (raw.payload.length >= 7) {\n targetMode = raw.payload[5];\n duration = Duration.parseReport(raw.payload[6]);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n currentMode,\n outsideHandlesCanOpenDoor,\n insideHandlesCanOpenDoor,\n doorStatus,\n boltStatus,\n latchStatus,\n lockTimeout,\n targetMode,\n duration,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const handles = [\n ...this.insideHandlesCanOpenDoor,\n ...this.outsideHandlesCanOpenDoor,\n ]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n const doorCondition = (this.doorStatus === \"closed\" ? 0b1 : 0)\n | (this.boltStatus === \"unlocked\" ? 0b10 : 0)\n | (this.latchStatus === \"closed\" ? 0b100 : 0);\n let lockTimeoutMinutes = 0xfe;\n let lockTimeoutSeconds = 0xfe;\n if (this.lockTimeout != undefined) {\n lockTimeoutMinutes = Math.floor(this.lockTimeout / 60);\n lockTimeoutSeconds = this.lockTimeout % 60;\n }\n const payload = [\n this.currentMode,\n handles,\n doorCondition,\n lockTimeoutMinutes,\n lockTimeoutSeconds,\n ];\n if (this.targetMode != undefined) {\n payload.push(this.targetMode);\n payload.push((this.duration ?? Duration.default()).serializeReport());\n }\n this.payload = Bytes.from(payload);\n return super.serialize(ctx);\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Only store the door/bolt/latch status if the lock supports it\n const supportsDoorStatus = !!this.getValue(ctx, DoorLockCCValues.doorSupported);\n if (supportsDoorStatus) {\n this.setValue(ctx, DoorLockCCValues.doorStatus, this.doorStatus);\n }\n const supportsBoltStatus = !!this.getValue(ctx, DoorLockCCValues.boltSupported);\n if (supportsBoltStatus) {\n this.setValue(ctx, DoorLockCCValues.boltStatus, this.boltStatus);\n }\n const supportsLatchStatus = !!this.getValue(ctx, DoorLockCCValues.latchSupported);\n if (supportsLatchStatus) {\n this.setValue(ctx, DoorLockCCValues.latchStatus, this.latchStatus);\n }\n return true;\n }\n public readonly currentMode: DoorLockMode;\n public readonly targetMode?: DoorLockMode;\n public readonly duration?: Duration;\n public readonly outsideHandlesCanOpenDoor: DoorHandleStatus;\n public readonly insideHandlesCanOpenDoor: DoorHandleStatus;\n public readonly latchStatus?: \"open\" | \"closed\";\n public readonly boltStatus?: \"locked\" | \"unlocked\";\n public readonly doorStatus?: \"open\" | \"closed\";\n public readonly lockTimeout?: number; // in seconds\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"current mode\": getEnumMemberName(DoorLockMode, this.currentMode),\n \"active outside handles\": this.outsideHandlesCanOpenDoor.join(\", \"),\n \"active inside handles\": this.insideHandlesCanOpenDoor.join(\", \"),\n };\n if (this.latchStatus != undefined) {\n message[\"latch status\"] = this.latchStatus;\n }\n if (this.boltStatus != undefined) {\n message[\"bolt status\"] = this.boltStatus;\n }\n if (this.doorStatus != undefined) {\n message[\"door status\"] = this.doorStatus;\n }\n if (this.targetMode != undefined) {\n message[\"target mode\"] = getEnumMemberName(DoorLockMode, this.targetMode);\n }\n if (this.duration != undefined) {\n message[\"remaining duration\"] = this.duration.toString();\n }\n if (this.lockTimeout != undefined) {\n message[\"lock timeout\"] = `${this.lockTimeout} seconds`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(DoorLockCommand.OperationGet)\n@expectedCCResponse(DoorLockCCOperationReport)\nexport class DoorLockCCOperationGet extends DoorLockCC {\n}\n// @publicAPI\nexport interface DoorLockCCConfigurationReportOptions {\n operationType: DoorLockOperationType;\n outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n lockTimeoutConfiguration?: number;\n autoRelockTime?: number;\n holdAndReleaseTime?: number;\n twistAssist?: boolean;\n blockToBlock?: boolean;\n}\n@CCCommand(DoorLockCommand.ConfigurationReport)\n@ccValueProperty(\"operationType\", DoorLockCCValues.operationType)\n@ccValueProperty(\"outsideHandlesCanOpenDoorConfiguration\", DoorLockCCValues.outsideHandlesCanOpenDoorConfiguration)\n@ccValueProperty(\"insideHandlesCanOpenDoorConfiguration\", DoorLockCCValues.insideHandlesCanOpenDoorConfiguration)\n@ccValueProperty(\"lockTimeoutConfiguration\", DoorLockCCValues.lockTimeoutConfiguration)\nexport class DoorLockCCConfigurationReport extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCConfigurationReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.operationType = options.operationType;\n this.outsideHandlesCanOpenDoorConfiguration =\n options.outsideHandlesCanOpenDoorConfiguration;\n this.insideHandlesCanOpenDoorConfiguration =\n options.insideHandlesCanOpenDoorConfiguration;\n this.lockTimeoutConfiguration = options.lockTimeoutConfiguration;\n this.autoRelockTime = options.autoRelockTime;\n this.holdAndReleaseTime = options.holdAndReleaseTime;\n this.twistAssist = options.twistAssist;\n this.blockToBlock = options.blockToBlock;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCConfigurationReport {\n validatePayload(raw.payload.length >= 4);\n const operationType: DoorLockOperationType = raw.payload[0];\n const outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 16),\n !!(raw.payload[1] & 32),\n !!(raw.payload[1] & 64),\n !!(raw.payload[1] & 128),\n ];\n const insideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 0b0001),\n !!(raw.payload[1] & 0b0010),\n !!(raw.payload[1] & 0b0100),\n !!(raw.payload[1] & 0b1000),\n ];\n let lockTimeoutConfiguration: number | undefined;\n if (operationType === DoorLockOperationType.Timed) {\n const lockTimeoutMinutes = raw.payload[2];\n const lockTimeoutSeconds = raw.payload[3];\n if (lockTimeoutMinutes <= 0xfd && lockTimeoutSeconds <= 59) {\n lockTimeoutConfiguration = lockTimeoutSeconds\n + lockTimeoutMinutes * 60;\n }\n }\n let autoRelockTime: number | undefined;\n let holdAndReleaseTime: number | undefined;\n let twistAssist: boolean | undefined;\n let blockToBlock: boolean | undefined;\n if (raw.payload.length >= 5) {\n autoRelockTime = raw.payload.readUInt16BE(4);\n holdAndReleaseTime = raw.payload.readUInt16BE(6);\n const flags = raw.payload[8];\n twistAssist = !!(flags & 0b1);\n blockToBlock = !!(flags & 0b10);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n outsideHandlesCanOpenDoorConfiguration,\n insideHandlesCanOpenDoorConfiguration,\n lockTimeoutConfiguration,\n autoRelockTime,\n holdAndReleaseTime,\n twistAssist,\n blockToBlock,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const handles = [\n ...this.insideHandlesCanOpenDoorConfiguration,\n ...this.outsideHandlesCanOpenDoorConfiguration,\n ]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n let lockTimeoutMinutes: number;\n let lockTimeoutSeconds: number;\n if (this.operationType === DoorLockOperationType.Timed\n && this.lockTimeoutConfiguration != undefined) {\n lockTimeoutMinutes = Math.floor(this.lockTimeoutConfiguration / 60);\n lockTimeoutSeconds = this.lockTimeoutConfiguration % 60;\n }\n else {\n lockTimeoutMinutes = lockTimeoutSeconds = 0xfe;\n }\n const flags = (this.twistAssist ? 0b1 : 0)\n | (this.blockToBlock ? 0b10 : 0);\n this.payload = Bytes.from([\n this.operationType,\n handles,\n lockTimeoutMinutes,\n lockTimeoutSeconds,\n ]);\n if (this.autoRelockTime != undefined\n || this.holdAndReleaseTime != undefined\n || this.twistAssist != undefined\n || this.blockToBlock != undefined) {\n const extended = Bytes.alloc(5);\n extended.writeUInt16BE((this.autoRelockTime ?? 0) & 0xffff, 0);\n extended.writeUInt16BE((this.holdAndReleaseTime ?? 0) & 0xffff, 2);\n extended[4] = flags;\n this.payload = Bytes.concat([this.payload, extended]);\n }\n return super.serialize(ctx);\n }\n public readonly operationType: DoorLockOperationType;\n public readonly outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public readonly insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public readonly lockTimeoutConfiguration?: number;\n // These are not always supported and have to be persisted manually\n // to avoid unsupported values being exposed to the user\n public readonly autoRelockTime?: number;\n public readonly holdAndReleaseTime?: number;\n public readonly twistAssist?: boolean;\n public readonly blockToBlock?: boolean;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Only store the autoRelockTime etc. params if the lock supports it\n const supportsAutoRelock = !!this.getValue(ctx, DoorLockCCValues.autoRelockSupported);\n if (supportsAutoRelock) {\n this.setValue(ctx, DoorLockCCValues.autoRelockTime, this.autoRelockTime);\n }\n const supportsHoldAndRelease = !!this.getValue(ctx, DoorLockCCValues.holdAndReleaseSupported);\n if (supportsHoldAndRelease) {\n this.setValue(ctx, DoorLockCCValues.holdAndReleaseTime, this.holdAndReleaseTime);\n }\n const supportsTwistAssist = !!this.getValue(ctx, DoorLockCCValues.twistAssistSupported);\n if (supportsTwistAssist) {\n this.setValue(ctx, DoorLockCCValues.twistAssist, this.twistAssist);\n }\n const supportsBlockToBlock = !!this.getValue(ctx, DoorLockCCValues.blockToBlockSupported);\n if (supportsBlockToBlock) {\n this.setValue(ctx, DoorLockCCValues.blockToBlock, this.blockToBlock);\n }\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"operation type\": getEnumMemberName(DoorLockOperationType, this.operationType),\n \"outside handle configuration\": this\n .outsideHandlesCanOpenDoorConfiguration.join(\", \"),\n \"inside handle configuration\": this\n .insideHandlesCanOpenDoorConfiguration.join(\", \"),\n };\n if (this.lockTimeoutConfiguration != undefined) {\n message[\"timed mode duration\"] = `${this.lockTimeoutConfiguration} seconds`;\n }\n if (this.autoRelockTime != undefined) {\n message[\"auto-relock time\"] = `${this.autoRelockTime} seconds`;\n }\n if (this.holdAndReleaseTime != undefined) {\n message[\"hold-and-release time\"] = `${this.holdAndReleaseTime} seconds`;\n }\n if (this.twistAssist != undefined) {\n message[\"twist assist enabled\"] = this.twistAssist;\n }\n if (this.blockToBlock != undefined) {\n message[\"block-to-block enabled\"] = this.blockToBlock;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(DoorLockCommand.ConfigurationGet)\n@expectedCCResponse(DoorLockCCConfigurationReport)\nexport class DoorLockCCConfigurationGet extends DoorLockCC {\n}\n// @publicAPI\nexport type DoorLockCCConfigurationSetOptions = ({\n operationType: DoorLockOperationType.Timed;\n lockTimeoutConfiguration: number;\n} | {\n operationType: DoorLockOperationType.Constant;\n lockTimeoutConfiguration?: undefined;\n}) & {\n outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n // V4+\n autoRelockTime?: number;\n holdAndReleaseTime?: number;\n twistAssist?: boolean;\n blockToBlock?: boolean;\n};\n@CCCommand(DoorLockCommand.ConfigurationSet)\n@useSupervision()\nexport class DoorLockCCConfigurationSet extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCConfigurationSetOptions>) {\n super(options);\n this.operationType = options.operationType;\n this.outsideHandlesCanOpenDoorConfiguration =\n options.outsideHandlesCanOpenDoorConfiguration;\n this.insideHandlesCanOpenDoorConfiguration =\n options.insideHandlesCanOpenDoorConfiguration;\n this.lockTimeoutConfiguration = options.lockTimeoutConfiguration;\n this.autoRelockTime = options.autoRelockTime;\n this.holdAndReleaseTime = options.holdAndReleaseTime;\n this.twistAssist = options.twistAssist;\n this.blockToBlock = options.blockToBlock;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCConfigurationSet {\n validatePayload(raw.payload.length >= 4);\n const operationType: DoorLockOperationType = raw.payload[0];\n const outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 16),\n !!(raw.payload[1] & 32),\n !!(raw.payload[1] & 64),\n !!(raw.payload[1] & 128),\n ];\n const insideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 0b0001),\n !!(raw.payload[1] & 0b0010),\n !!(raw.payload[1] & 0b0100),\n !!(raw.payload[1] & 0b1000),\n ];\n let lockTimeoutConfiguration: number | undefined;\n if (operationType === DoorLockOperationType.Timed) {\n const lockTimeoutMinutes = raw.payload[2];\n const lockTimeoutSeconds = raw.payload[3];\n if (lockTimeoutMinutes <= 0xfd && lockTimeoutSeconds <= 59) {\n lockTimeoutConfiguration = lockTimeoutSeconds\n + lockTimeoutMinutes * 60;\n }\n }\n let autoRelockTime: number | undefined;\n let holdAndReleaseTime: number | undefined;\n let twistAssist: boolean | undefined;\n let blockToBlock: boolean | undefined;\n if (raw.payload.length >= 9) {\n autoRelockTime = raw.payload.readUInt16BE(4);\n holdAndReleaseTime = raw.payload.readUInt16BE(6);\n const flags = raw.payload[8];\n twistAssist = !!(flags & 0b1);\n blockToBlock = !!(flags & 0b10);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n outsideHandlesCanOpenDoorConfiguration,\n insideHandlesCanOpenDoorConfiguration,\n lockTimeoutConfiguration,\n autoRelockTime,\n holdAndReleaseTime,\n twistAssist,\n blockToBlock,\n } as WithAddress<DoorLockCCConfigurationSetOptions>);\n }\n public operationType: DoorLockOperationType;\n public outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public lockTimeoutConfiguration?: number;\n public autoRelockTime?: number;\n public holdAndReleaseTime?: number;\n public twistAssist?: boolean;\n public blockToBlock?: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const insideHandles = isArray(this.insideHandlesCanOpenDoorConfiguration)\n ? this.insideHandlesCanOpenDoorConfiguration\n : [];\n const outsideHandles = isArray(this.outsideHandlesCanOpenDoorConfiguration)\n ? this.outsideHandlesCanOpenDoorConfiguration\n : [];\n const handles = [...insideHandles, ...outsideHandles]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n let lockTimeoutMinutes: number;\n let lockTimeoutSeconds: number;\n if (this.operationType === DoorLockOperationType.Constant) {\n lockTimeoutMinutes = lockTimeoutSeconds = 0xfe;\n }\n else {\n lockTimeoutMinutes = Math.floor(this.lockTimeoutConfiguration! / 60);\n lockTimeoutSeconds = this.lockTimeoutConfiguration! % 60;\n }\n const flags = (this.twistAssist ? 0b1 : 0)\n | (this.blockToBlock ? 0b10 : 0);\n this.payload = Bytes.from([\n this.operationType,\n handles,\n lockTimeoutMinutes,\n lockTimeoutSeconds,\n // placeholder for auto relock time\n 0,\n 0,\n // placeholder for hold and release time\n 0,\n 0,\n flags,\n ]);\n this.payload.writeUInt16BE((this.autoRelockTime ?? 0) & 0xffff, 4);\n this.payload.writeUInt16BE((this.holdAndReleaseTime ?? 0) & 0xffff, 6);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const insideHandles = isArray(this.insideHandlesCanOpenDoorConfiguration)\n ? this.insideHandlesCanOpenDoorConfiguration\n : [];\n const outsideHandles = isArray(this.outsideHandlesCanOpenDoorConfiguration)\n ? this.outsideHandlesCanOpenDoorConfiguration\n : [];\n const message: MessageRecord = {\n \"operation type\": getEnumMemberName(DoorLockOperationType, this.operationType),\n \"outside handle configuration\": outsideHandles.join(\", \"),\n \"inside handle configuration\": insideHandles.join(\", \"),\n };\n if (this.lockTimeoutConfiguration != undefined) {\n message[\"timed mode duration\"] = `${this.lockTimeoutConfiguration} seconds`;\n }\n if (this.autoRelockTime != undefined) {\n message[\"auto-relock time\"] = `${this.autoRelockTime} seconds`;\n }\n if (this.holdAndReleaseTime != undefined) {\n message[\"hold-and-release time\"] = `${this.holdAndReleaseTime} seconds`;\n }\n if (this.twistAssist != undefined) {\n message[\"enable twist assist\"] = this.twistAssist;\n }\n if (this.blockToBlock != undefined) {\n message[\"enable block-to-block\"] = this.blockToBlock;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface DoorLockCCCapabilitiesReportOptions {\n supportedOperationTypes: DoorLockOperationType[];\n supportedDoorLockModes: DoorLockMode[];\n supportedOutsideHandles: DoorHandleStatus;\n supportedInsideHandles: DoorHandleStatus;\n doorSupported: boolean;\n boltSupported: boolean;\n latchSupported: boolean;\n blockToBlockSupported: boolean;\n twistAssistSupported: boolean;\n holdAndReleaseSupported: boolean;\n autoRelockSupported: boolean;\n}\n@CCCommand(DoorLockCommand.CapabilitiesReport)\n@ccValueProperty(\"supportedOutsideHandles\", DoorLockCCValues.supportedOutsideHandles)\n@ccValueProperty(\"supportedInsideHandles\", DoorLockCCValues.supportedInsideHandles)\n@ccValueProperty(\"autoRelockSupported\", DoorLockCCValues.autoRelockSupported)\n@ccValueProperty(\"holdAndReleaseSupported\", DoorLockCCValues.holdAndReleaseSupported)\n@ccValueProperty(\"twistAssistSupported\", DoorLockCCValues.twistAssistSupported)\n@ccValueProperty(\"blockToBlockSupported\", DoorLockCCValues.blockToBlockSupported)\nexport class DoorLockCCCapabilitiesReport extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCCapabilitiesReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedOperationTypes = options.supportedOperationTypes;\n this.supportedDoorLockModes = options.supportedDoorLockModes;\n this.supportedOutsideHandles = options.supportedOutsideHandles;\n this.supportedInsideHandles = options.supportedInsideHandles;\n this.doorSupported = options.doorSupported;\n this.boltSupported = options.boltSupported;\n this.latchSupported = options.latchSupported;\n this.blockToBlockSupported = options.blockToBlockSupported;\n this.twistAssistSupported = options.twistAssistSupported;\n this.holdAndReleaseSupported = options.holdAndReleaseSupported;\n this.autoRelockSupported = options.autoRelockSupported;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCCapabilitiesReport {\n // parse variable length operation type bit mask\n validatePayload(raw.payload.length >= 1);\n const bitMaskLength = raw.payload[0] & 0b11111;\n let offset = 1;\n validatePayload(raw.payload.length >= offset + bitMaskLength + 1);\n const supportedOperationTypes: DoorLockOperationType[] = parseBitMask(raw.payload.subarray(offset, offset + bitMaskLength), \n // bit 0 is reserved, bitmask starts at 1\n 0);\n offset += bitMaskLength;\n // parse variable length door lock mode list\n const listLength = raw.payload[offset];\n offset += 1;\n validatePayload(raw.payload.length >= offset + listLength + 3);\n const supportedDoorLockModes: DoorLockMode[] = [\n ...raw.payload.subarray(offset, offset + listLength),\n ];\n offset += listLength;\n const supportedOutsideHandles: DoorHandleStatus = [\n !!(raw.payload[offset] & 16),\n !!(raw.payload[offset] & 32),\n !!(raw.payload[offset] & 64),\n !!(raw.payload[offset] & 128),\n ];\n const supportedInsideHandles: DoorHandleStatus = [\n !!(raw.payload[offset] & 0b0001),\n !!(raw.payload[offset] & 0b0010),\n !!(raw.payload[offset] & 0b0100),\n !!(raw.payload[offset] & 0b1000),\n ];\n const doorSupported = !!(raw.payload[offset + 1] & 0b1);\n const boltSupported = !!(raw.payload[offset + 1] & 0b10);\n const latchSupported = !!(raw.payload[offset + 1] & 0b100);\n const blockToBlockSupported = !!(raw.payload[offset + 2] & 0b1);\n const twistAssistSupported = !!(raw.payload[offset + 2] & 0b10);\n const holdAndReleaseSupported = !!(raw.payload[offset + 2] & 0b100);\n const autoRelockSupported = !!(raw.payload[offset + 2] & 0b1000);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedOperationTypes,\n supportedDoorLockModes,\n supportedOutsideHandles,\n supportedInsideHandles,\n doorSupported,\n boltSupported,\n latchSupported,\n blockToBlockSupported,\n twistAssistSupported,\n holdAndReleaseSupported,\n autoRelockSupported,\n });\n }\n public readonly supportedOperationTypes: readonly DoorLockOperationType[];\n public readonly supportedDoorLockModes: readonly DoorLockMode[];\n public readonly supportedOutsideHandles: DoorHandleStatus;\n public readonly supportedInsideHandles: DoorHandleStatus;\n // These 3 are not automatically persisted because in CC version 3\n // we have to assume them to be supported. In v4 we can query this.\n public readonly latchSupported: boolean;\n public readonly boltSupported: boolean;\n public readonly doorSupported: boolean;\n public readonly autoRelockSupported: boolean;\n public readonly holdAndReleaseSupported: boolean;\n public readonly twistAssistSupported: boolean;\n public readonly blockToBlockSupported: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // Operation type bitmask (variable length)\n const operationTypeMask = encodeBitMask(this.supportedOperationTypes, undefined, 0);\n // Door lock mode list\n const modeList = Bytes.from(this.supportedDoorLockModes as number[]);\n const handles = [\n ...this.supportedInsideHandles,\n ...this.supportedOutsideHandles,\n ]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n const componentStatus = (this.doorSupported ? 0b1 : 0)\n | (this.boltSupported ? 0b10 : 0)\n | (this.latchSupported ? 0b100 : 0);\n const featureFlags = (this.blockToBlockSupported ? 0b1 : 0)\n | (this.twistAssistSupported ? 0b10 : 0)\n | (this.holdAndReleaseSupported ? 0b100 : 0)\n | (this.autoRelockSupported ? 0b1000 : 0);\n this.payload = Bytes.concat([\n [operationTypeMask.length & 0b11111],\n operationTypeMask,\n [modeList.length],\n modeList,\n [handles, componentStatus, featureFlags],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n door: this.doorSupported,\n bolt: this.boltSupported,\n latch: this.latchSupported,\n \"block-to-block feature\": this.blockToBlockSupported,\n \"twist assist feature\": this.twistAssistSupported,\n \"hold-and-release feature\": this.holdAndReleaseSupported,\n \"auto-relock feature\": this.autoRelockSupported,\n \"operation types\": this.supportedOperationTypes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(DoorLockOperationType, t)}`)\n .join(\"\"),\n \"door lock modes\": this.supportedDoorLockModes\n .map((t) => `\\n\u00B7 ${getEnumMemberName(DoorLockMode, t)}`)\n .join(\"\"),\n \"outside handles\": this.supportedOutsideHandles.join(\", \"),\n \"inside handles\": this.supportedInsideHandles.join(\", \"),\n },\n };\n }\n}\n@CCCommand(DoorLockCommand.CapabilitiesGet)\n@expectedCCResponse(DoorLockCCCapabilitiesReport)\nexport class DoorLockCCCapabilitiesGet extends DoorLockCC {\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./DoorLockCC._validateArgs.js\";\nconst { validateArgs_DoorLockCCAPI_set, validateArgs_DoorLockCCAPI_setConfiguration } = __validateArgs;\nimport { CommandClasses, Duration, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, SupervisionStatus, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, enumValuesToMetadataStates, logDict, logList, logText, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { isArray } from \"alcalzone-shared/typeguards\";\nimport { CCAPI, POLL_VALUE, PhysicalCCAPI, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory, 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 { type DoorHandleStatus, DoorLockCommand, DoorLockMode, DoorLockOperationType, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { DoorLockCCValues } from \"./_CCValues.generated.js\";\nexport { DoorLockCCValues };\nexport function shouldAutoCreateLatchStatusValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.latchSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateBoltStatusValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.boltSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateDoorStatusValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.doorSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateTwistAssistConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.twistAssistSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateBlockToBlockConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.blockToBlockSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateAutoRelockConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.autoRelockSupported.endpoint(endpoint.index));\n}\nexport function shouldAutoCreateHoldAndReleaseConfigValue(ctx: GetValueDB, endpoint: EndpointId): boolean {\n const valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n if (!valueDB)\n return false;\n return !!valueDB.getValue(DoorLockCCValues.holdAndReleaseSupported.endpoint(endpoint.index));\n}\nconst configurationSetParameters = [\n \"operationType\",\n \"outsideHandlesCanOpenDoorConfiguration\",\n \"insideHandlesCanOpenDoorConfiguration\",\n \"lockTimeoutConfiguration\",\n \"autoRelockTime\",\n \"holdAndReleaseTime\",\n \"twistAssist\",\n \"blockToBlock\",\n] as const;\n@API(CommandClasses[\"Door Lock\"])\nexport class DoorLockCCAPI extends PhysicalCCAPI {\n public supportsCommand(cmd: DoorLockCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case DoorLockCommand.OperationSet:\n case DoorLockCommand.OperationGet:\n case DoorLockCommand.ConfigurationSet:\n case DoorLockCommand.ConfigurationGet:\n return true; // This is mandatory\n case DoorLockCommand.CapabilitiesGet:\n return this.version >= 4;\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: DoorLockCCAPI, { property }, value) {\n if (property === \"targetMode\") {\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.set(value);\n }\n else if (typeof property === \"string\"\n && configurationSetParameters.includes(property as any)) {\n // checking every type here would create a LOT of duplicate code, so we don't\n // ConfigurationSet expects all parameters --> read the others from cache\n const config = {\n [property]: value,\n } as DoorLockCCConfigurationSetOptions;\n for (const param of configurationSetParameters) {\n if (param !== property) {\n (config as any)[param] = this.tryGetValueDB()?.getValue({\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property: param,\n });\n }\n }\n // Fix insideHandlesCanOpenDoorConfiguration is not iterable\n const allTrue: DoorHandleStatus = [true, true, true, true];\n if (!config.insideHandlesCanOpenDoorConfiguration) {\n config.insideHandlesCanOpenDoorConfiguration = allTrue;\n }\n if (!config.outsideHandlesCanOpenDoorConfiguration) {\n config.outsideHandlesCanOpenDoorConfiguration = allTrue;\n }\n const result = await this.setConfiguration(config);\n // Verify the current value after a delay, unless the command was supervised and successful\n if (!supervisedCommandSucceeded(result)) {\n this.schedulePoll({ property }, value);\n }\n return result;\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = ({ property }, value) => {\n if (property === \"targetMode\" && typeof value === \"number\") {\n const targetMode = value;\n const currentModeValueId = DoorLockCCValues.currentMode.endpoint(this.endpoint.index);\n return {\n isSplitStateTargetValue: true,\n supervisionDelayedUpdates: true,\n optimisticallyUpdateRelatedValues: (_supervisedAndSuccessful) => {\n this.tryGetValueDB()?.setValue(currentModeValueId, targetMode);\n },\n supervisionOnSuccess: () => {\n this.tryGetValueDB()?.setValue(currentModeValueId, targetMode);\n },\n supervisionOnFailure: async () => {\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n },\n verifyChanges: async (result) => {\n switch (result?.status) {\n case SupervisionStatus.Success:\n case SupervisionStatus.Working:\n return;\n case SupervisionStatus.Fail:\n case SupervisionStatus.NoSupport:\n try {\n await this.get();\n }\n catch {\n // ignore\n }\n return;\n default:\n this.schedulePoll({ property: \"currentMode\" }, targetMode);\n }\n },\n };\n }\n };\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: DoorLockCCAPI, { property }) {\n switch (property) {\n case \"currentMode\":\n case \"targetMode\":\n case \"duration\":\n case \"outsideHandlesCanOpenDoor\":\n case \"insideHandlesCanOpenDoor\":\n case \"latchStatus\":\n case \"boltStatus\":\n case \"doorStatus\":\n case \"lockTimeout\":\n return (await this.get())?.[property];\n case \"operationType\":\n case \"outsideHandlesCanOpenDoorConfiguration\":\n case \"insideHandlesCanOpenDoorConfiguration\":\n case \"lockTimeoutConfiguration\":\n case \"autoRelockTime\":\n case \"holdAndReleaseTime\":\n case \"twistAssist\":\n case \"blockToBlock\":\n return (await this.getConfiguration())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getCapabilities() {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.CapabilitiesGet);\n const cc = new DoorLockCCCapabilitiesGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<DoorLockCCCapabilitiesReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"autoRelockSupported\",\n \"blockToBlockSupported\",\n \"boltSupported\",\n \"doorSupported\",\n \"holdAndReleaseSupported\",\n \"latchSupported\",\n \"twistAssistSupported\",\n \"supportedDoorLockModes\",\n \"supportedInsideHandles\",\n \"supportedOperationTypes\",\n \"supportedOutsideHandles\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.OperationGet);\n const cc = new DoorLockCCOperationGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<DoorLockCCOperationReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"currentMode\",\n \"targetMode\",\n \"duration\",\n \"outsideHandlesCanOpenDoor\",\n \"insideHandlesCanOpenDoor\",\n \"latchStatus\",\n \"boltStatus\",\n \"doorStatus\",\n \"lockTimeout\",\n ]);\n }\n }\n @validateArgs_DoorLockCCAPI_set()\n public async set(mode: DoorLockMode): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.OperationSet);\n const cc = new DoorLockCCOperationSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n mode,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_DoorLockCCAPI_setConfiguration()\n public async setConfiguration(configuration: DoorLockCCConfigurationSetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.ConfigurationSet);\n const cc = new DoorLockCCConfigurationSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...configuration,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getConfiguration() {\n this.assertSupportsCommand(DoorLockCommand, DoorLockCommand.ConfigurationGet);\n const cc = new DoorLockCCConfigurationGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<DoorLockCCConfigurationReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"operationType\",\n \"outsideHandlesCanOpenDoorConfiguration\",\n \"insideHandlesCanOpenDoorConfiguration\",\n \"lockTimeoutConfiguration\",\n \"autoRelockTime\",\n \"holdAndReleaseTime\",\n \"twistAssist\",\n \"blockToBlock\",\n ]);\n }\n }\n}\n@commandClass(CommandClasses[\"Door Lock\"])\n@implementedVersion(4)\n@ccValues(DoorLockCCValues)\nexport class DoorLockCC extends CommandClass {\n declare ccCommand: DoorLockCommand;\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[\"Door Lock\"], 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 // We need to do some queries after a potential timeout\n // In this case, do now mark this CC as interviewed completely\n let hadCriticalTimeout = false;\n // By default, assume all status sensors to be supported\n let doorSupported = true;\n let boltSupported = true;\n let latchSupported = true;\n if (api.version >= 4) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting lock capabilities...\",\n direction: \"outbound\",\n });\n const resp = await api.getCapabilities();\n if (resp) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logText(\"received lock capabilities:\", {\n nested: logDict({\n \"supported operation types\": resp\n .supportedOperationTypes\n .map((t) => getEnumMemberName(DoorLockOperationType, t))\n .join(\", \"),\n \"supported door lock modes\": logList(resp.supportedDoorLockModes.map((t) => getEnumMemberName(DoorLockMode, t))),\n \"supported outside handles\": resp\n .supportedOutsideHandles\n .map(String)\n .join(\", \"),\n \"supported inside handles\": resp\n .supportedInsideHandles\n .map(String)\n .join(\", \"),\n \"supports door status\": resp.doorSupported,\n \"supports bolt status\": resp.boltSupported,\n \"supports latch status\": resp.latchSupported,\n \"supports auto-relock\": resp.autoRelockSupported,\n \"supports hold-and-release\": resp.holdAndReleaseSupported,\n \"supports twist assist\": resp.twistAssistSupported,\n \"supports block to block\": resp.blockToBlockSupported,\n }),\n }),\n direction: \"inbound\",\n });\n doorSupported = resp.doorSupported;\n boltSupported = resp.boltSupported;\n latchSupported = resp.latchSupported;\n // Update metadata of settable states\n const targetModeValue = DoorLockCCValues.targetMode;\n this.setMetadata(ctx, targetModeValue, {\n ...targetModeValue.meta,\n states: enumValuesToMetadataStates(DoorLockMode, resp.supportedDoorLockModes),\n });\n const operationTypeValue = DoorLockCCValues.operationType;\n this.setMetadata(ctx, operationTypeValue, {\n ...operationTypeValue.meta,\n states: enumValuesToMetadataStates(DoorLockOperationType, resp.supportedOperationTypes),\n });\n }\n else {\n hadCriticalTimeout = true;\n }\n }\n if (!hadCriticalTimeout) {\n // Save support information for the status values\n const doorStatusValue = DoorLockCCValues.doorStatus;\n if (doorSupported)\n this.setMetadata(ctx, doorStatusValue);\n this.setValue(ctx, DoorLockCCValues.doorSupported, doorSupported);\n const latchStatusValue = DoorLockCCValues.latchStatus;\n if (latchSupported)\n this.setMetadata(ctx, latchStatusValue);\n this.setValue(ctx, DoorLockCCValues.latchSupported, latchSupported);\n const boltStatusValue = DoorLockCCValues.boltStatus;\n if (boltSupported)\n this.setMetadata(ctx, boltStatusValue);\n this.setValue(ctx, DoorLockCCValues.boltSupported, boltSupported);\n }\n await this.refreshValues(ctx, { tag: \"interview\" });\n // Remember that the interview is complete\n if (!hadCriticalTimeout)\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[\"Door Lock\"], 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: \"requesting lock configuration...\",\n direction: \"outbound\",\n });\n const config = await api.getConfiguration();\n if (config) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logText(\"received lock configuration:\", {\n nested: logDict({\n \"operation type\": getEnumMemberName(DoorLockOperationType, config.operationType),\n \"lock timeout\": config.operationType\n === DoorLockOperationType.Timed\n ? `${config.lockTimeoutConfiguration} seconds`\n : undefined,\n \"outside handles can open door\": config\n .outsideHandlesCanOpenDoorConfiguration\n .map(String)\n .join(\", \"),\n \"inside handles can open door\": config\n .insideHandlesCanOpenDoorConfiguration\n .map(String)\n .join(\", \"),\n ...(api.version >= 4\n ? {\n \"auto-relock time\": `${config.autoRelockTime ?? \"-\"} seconds`,\n \"hold-and-release time\": `${config.holdAndReleaseTime ?? \"-\"} seconds`,\n \"twist assist\": !!config.twistAssist,\n \"block to block\": !!config.blockToBlock,\n }\n : undefined),\n }),\n }),\n direction: \"inbound\",\n });\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting current lock status...\",\n direction: \"outbound\",\n });\n const status = await api.get();\n if (status) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logText(\"received lock status:\", {\n nested: logDict({\n \"current mode\": getEnumMemberName(DoorLockMode, status.currentMode),\n ...(status.targetMode != undefined\n ? {\n \"target mode\": getEnumMemberName(DoorLockMode, status.targetMode),\n \"remaining duration\": status.duration?.toString()\n ?? \"undefined\",\n }\n : undefined),\n \"lock timeout\": status.lockTimeout != undefined\n ? `${status.lockTimeout} seconds`\n : undefined,\n \"door status\": status.doorStatus,\n \"bolt status\": status.boltStatus,\n \"latch status\": status.latchStatus,\n }),\n }),\n direction: \"inbound\",\n });\n }\n }\n /**\n * Returns whether the node supports auto relock.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsAutoRelockCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.autoRelockSupported.endpoint(endpoint.index));\n }\n /**\n * Returns whether the node supports hold and release.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsHoldAndReleaseCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.holdAndReleaseSupported.endpoint(endpoint.index));\n }\n /**\n * Returns whether the node supports twist assist.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsTwistAssistCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.twistAssistSupported.endpoint(endpoint.index));\n }\n /**\n * Returns whether the node supports block to block.\n * This only works AFTER the node has been interviewed.\n */\n public static supportsBlockToBlockCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.blockToBlockSupported.endpoint(endpoint.index));\n }\n /**\n * Returns the supported outside handles.\n * This only works AFTER the node has been interviewed.\n */\n public static getSupportedOutsideHandlesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<DoorHandleStatus> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.supportedOutsideHandles.endpoint(endpoint.index));\n }\n /**\n * Returns the supported inside handles.\n * This only works AFTER the node has been interviewed.\n */\n public static getSupportedInsideHandlesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<DoorHandleStatus> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(DoorLockCCValues.supportedInsideHandles.endpoint(endpoint.index));\n }\n}\n// @publicAPI\nexport interface DoorLockCCOperationSetOptions {\n mode: DoorLockMode;\n}\n@CCCommand(DoorLockCommand.OperationSet)\n@useSupervision()\nexport class DoorLockCCOperationSet extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCOperationSetOptions>) {\n super(options);\n if (options.mode === DoorLockMode.Unknown) {\n throw new ZWaveError(`Unknown is not a valid door lock target state!`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.mode = options.mode;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCOperationSet {\n validatePayload(raw.payload.length >= 1);\n const mode: DoorLockMode = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n public mode: DoorLockMode;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.mode]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"target mode\": getEnumMemberName(DoorLockMode, this.mode),\n },\n };\n }\n}\n// @publicAPI\nexport interface DoorLockCCOperationReportOptions {\n currentMode: DoorLockMode;\n outsideHandlesCanOpenDoor: DoorHandleStatus;\n insideHandlesCanOpenDoor: DoorHandleStatus;\n doorStatus?: \"closed\" | \"open\";\n boltStatus?: \"unlocked\" | \"locked\";\n latchStatus?: \"closed\" | \"open\";\n lockTimeout?: number;\n targetMode?: DoorLockMode;\n duration?: Duration;\n}\n@CCCommand(DoorLockCommand.OperationReport)\n@ccValueProperty(\"currentMode\", DoorLockCCValues.currentMode)\n@ccValueProperty(\"targetMode\", DoorLockCCValues.targetMode)\n@ccValueProperty(\"duration\", DoorLockCCValues.duration)\n@ccValueProperty(\"outsideHandlesCanOpenDoor\", DoorLockCCValues.outsideHandlesCanOpenDoor)\n@ccValueProperty(\"insideHandlesCanOpenDoor\", DoorLockCCValues.insideHandlesCanOpenDoor)\n@ccValueProperty(\"lockTimeout\", DoorLockCCValues.lockTimeout)\nexport class DoorLockCCOperationReport extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCOperationReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.currentMode = options.currentMode;\n this.outsideHandlesCanOpenDoor = options.outsideHandlesCanOpenDoor;\n this.insideHandlesCanOpenDoor = options.insideHandlesCanOpenDoor;\n this.doorStatus = options.doorStatus;\n this.boltStatus = options.boltStatus;\n this.latchStatus = options.latchStatus;\n this.lockTimeout = options.lockTimeout;\n this.targetMode = options.targetMode;\n this.duration = options.duration;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCOperationReport {\n validatePayload(raw.payload.length >= 5);\n const currentMode: DoorLockMode = raw.payload[0];\n const outsideHandlesCanOpenDoor: DoorHandleStatus = [\n !!(raw.payload[1] & 16),\n !!(raw.payload[1] & 32),\n !!(raw.payload[1] & 64),\n !!(raw.payload[1] & 128),\n ];\n const insideHandlesCanOpenDoor: DoorHandleStatus = [\n !!(raw.payload[1] & 0b0001),\n !!(raw.payload[1] & 0b0010),\n !!(raw.payload[1] & 0b0100),\n !!(raw.payload[1] & 0b1000),\n ];\n const doorStatus: \"closed\" | \"open\" | undefined = !!(raw.payload[2] & 0b1)\n ? \"closed\"\n : \"open\";\n const boltStatus: \"unlocked\" | \"locked\" | undefined = !!(raw.payload[2] & 0b10) ? \"unlocked\" : \"locked\";\n const latchStatus: \"closed\" | \"open\" | undefined = !!(raw.payload[2] & 0b100)\n ? \"closed\"\n : \"open\";\n // Ignore invalid timeout values\n const lockTimeoutMinutes = raw.payload[3];\n const lockTimeoutSeconds = raw.payload[4];\n let lockTimeout: number | undefined;\n if (lockTimeoutMinutes <= 253 && lockTimeoutSeconds <= 59) {\n lockTimeout = lockTimeoutSeconds + lockTimeoutMinutes * 60;\n }\n let targetMode: DoorLockMode | undefined;\n let duration: Duration | undefined;\n if (raw.payload.length >= 7) {\n targetMode = raw.payload[5];\n duration = Duration.parseReport(raw.payload[6]);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n currentMode,\n outsideHandlesCanOpenDoor,\n insideHandlesCanOpenDoor,\n doorStatus,\n boltStatus,\n latchStatus,\n lockTimeout,\n targetMode,\n duration,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const handles = [\n ...this.insideHandlesCanOpenDoor,\n ...this.outsideHandlesCanOpenDoor,\n ]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n const doorCondition = (this.doorStatus === \"closed\" ? 0b1 : 0)\n | (this.boltStatus === \"unlocked\" ? 0b10 : 0)\n | (this.latchStatus === \"closed\" ? 0b100 : 0);\n let lockTimeoutMinutes = 0xfe;\n let lockTimeoutSeconds = 0xfe;\n if (this.lockTimeout != undefined) {\n lockTimeoutMinutes = Math.floor(this.lockTimeout / 60);\n lockTimeoutSeconds = this.lockTimeout % 60;\n }\n const payload = [\n this.currentMode,\n handles,\n doorCondition,\n lockTimeoutMinutes,\n lockTimeoutSeconds,\n ];\n if (this.targetMode != undefined) {\n payload.push(this.targetMode);\n payload.push((this.duration ?? Duration.default()).serializeReport());\n }\n this.payload = Bytes.from(payload);\n return super.serialize(ctx);\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Only store the door/bolt/latch status if the lock supports it\n const supportsDoorStatus = !!this.getValue(ctx, DoorLockCCValues.doorSupported);\n if (supportsDoorStatus) {\n this.setValue(ctx, DoorLockCCValues.doorStatus, this.doorStatus);\n }\n const supportsBoltStatus = !!this.getValue(ctx, DoorLockCCValues.boltSupported);\n if (supportsBoltStatus) {\n this.setValue(ctx, DoorLockCCValues.boltStatus, this.boltStatus);\n }\n const supportsLatchStatus = !!this.getValue(ctx, DoorLockCCValues.latchSupported);\n if (supportsLatchStatus) {\n this.setValue(ctx, DoorLockCCValues.latchStatus, this.latchStatus);\n }\n return true;\n }\n public readonly currentMode: DoorLockMode;\n public readonly targetMode?: DoorLockMode;\n public readonly duration?: Duration;\n public readonly outsideHandlesCanOpenDoor: DoorHandleStatus;\n public readonly insideHandlesCanOpenDoor: DoorHandleStatus;\n public readonly latchStatus?: \"open\" | \"closed\";\n public readonly boltStatus?: \"locked\" | \"unlocked\";\n public readonly doorStatus?: \"open\" | \"closed\";\n public readonly lockTimeout?: number; // in seconds\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"current mode\": getEnumMemberName(DoorLockMode, this.currentMode),\n \"active outside handles\": this.outsideHandlesCanOpenDoor.join(\", \"),\n \"active inside handles\": this.insideHandlesCanOpenDoor.join(\", \"),\n };\n if (this.latchStatus != undefined) {\n message[\"latch status\"] = this.latchStatus;\n }\n if (this.boltStatus != undefined) {\n message[\"bolt status\"] = this.boltStatus;\n }\n if (this.doorStatus != undefined) {\n message[\"door status\"] = this.doorStatus;\n }\n if (this.targetMode != undefined) {\n message[\"target mode\"] = getEnumMemberName(DoorLockMode, this.targetMode);\n }\n if (this.duration != undefined) {\n message[\"remaining duration\"] = this.duration.toString();\n }\n if (this.lockTimeout != undefined) {\n message[\"lock timeout\"] = `${this.lockTimeout} seconds`;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(DoorLockCommand.OperationGet)\n@expectedCCResponse(DoorLockCCOperationReport)\nexport class DoorLockCCOperationGet extends DoorLockCC {\n}\n// @publicAPI\nexport interface DoorLockCCConfigurationReportOptions {\n operationType: DoorLockOperationType;\n outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n lockTimeoutConfiguration?: number;\n autoRelockTime?: number;\n holdAndReleaseTime?: number;\n twistAssist?: boolean;\n blockToBlock?: boolean;\n}\n@CCCommand(DoorLockCommand.ConfigurationReport)\n@ccValueProperty(\"operationType\", DoorLockCCValues.operationType)\n@ccValueProperty(\"outsideHandlesCanOpenDoorConfiguration\", DoorLockCCValues.outsideHandlesCanOpenDoorConfiguration)\n@ccValueProperty(\"insideHandlesCanOpenDoorConfiguration\", DoorLockCCValues.insideHandlesCanOpenDoorConfiguration)\n@ccValueProperty(\"lockTimeoutConfiguration\", DoorLockCCValues.lockTimeoutConfiguration)\nexport class DoorLockCCConfigurationReport extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCConfigurationReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.operationType = options.operationType;\n this.outsideHandlesCanOpenDoorConfiguration =\n options.outsideHandlesCanOpenDoorConfiguration;\n this.insideHandlesCanOpenDoorConfiguration =\n options.insideHandlesCanOpenDoorConfiguration;\n this.lockTimeoutConfiguration = options.lockTimeoutConfiguration;\n this.autoRelockTime = options.autoRelockTime;\n this.holdAndReleaseTime = options.holdAndReleaseTime;\n this.twistAssist = options.twistAssist;\n this.blockToBlock = options.blockToBlock;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCConfigurationReport {\n validatePayload(raw.payload.length >= 4);\n const operationType: DoorLockOperationType = raw.payload[0];\n const outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 16),\n !!(raw.payload[1] & 32),\n !!(raw.payload[1] & 64),\n !!(raw.payload[1] & 128),\n ];\n const insideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 0b0001),\n !!(raw.payload[1] & 0b0010),\n !!(raw.payload[1] & 0b0100),\n !!(raw.payload[1] & 0b1000),\n ];\n let lockTimeoutConfiguration: number | undefined;\n if (operationType === DoorLockOperationType.Timed) {\n const lockTimeoutMinutes = raw.payload[2];\n const lockTimeoutSeconds = raw.payload[3];\n if (lockTimeoutMinutes <= 0xfd && lockTimeoutSeconds <= 59) {\n lockTimeoutConfiguration = lockTimeoutSeconds\n + lockTimeoutMinutes * 60;\n }\n }\n let autoRelockTime: number | undefined;\n let holdAndReleaseTime: number | undefined;\n let twistAssist: boolean | undefined;\n let blockToBlock: boolean | undefined;\n if (raw.payload.length >= 5) {\n autoRelockTime = raw.payload.readUInt16BE(4);\n holdAndReleaseTime = raw.payload.readUInt16BE(6);\n const flags = raw.payload[8];\n twistAssist = !!(flags & 0b1);\n blockToBlock = !!(flags & 0b10);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n outsideHandlesCanOpenDoorConfiguration,\n insideHandlesCanOpenDoorConfiguration,\n lockTimeoutConfiguration,\n autoRelockTime,\n holdAndReleaseTime,\n twistAssist,\n blockToBlock,\n });\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const handles = [\n ...this.insideHandlesCanOpenDoorConfiguration,\n ...this.outsideHandlesCanOpenDoorConfiguration,\n ]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n let lockTimeoutMinutes: number;\n let lockTimeoutSeconds: number;\n if (this.operationType === DoorLockOperationType.Timed\n && this.lockTimeoutConfiguration != undefined) {\n lockTimeoutMinutes = Math.floor(this.lockTimeoutConfiguration / 60);\n lockTimeoutSeconds = this.lockTimeoutConfiguration % 60;\n }\n else {\n lockTimeoutMinutes = lockTimeoutSeconds = 0xfe;\n }\n const flags = (this.twistAssist ? 0b1 : 0)\n | (this.blockToBlock ? 0b10 : 0);\n this.payload = Bytes.from([\n this.operationType,\n handles,\n lockTimeoutMinutes,\n lockTimeoutSeconds,\n ]);\n if (this.autoRelockTime != undefined\n || this.holdAndReleaseTime != undefined\n || this.twistAssist != undefined\n || this.blockToBlock != undefined) {\n const extended = Bytes.alloc(5);\n extended.writeUInt16BE((this.autoRelockTime ?? 0) & 0xffff, 0);\n extended.writeUInt16BE((this.holdAndReleaseTime ?? 0) & 0xffff, 2);\n extended[4] = flags;\n this.payload = Bytes.concat([this.payload, extended]);\n }\n return super.serialize(ctx);\n }\n public readonly operationType: DoorLockOperationType;\n public readonly outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public readonly insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public readonly lockTimeoutConfiguration?: number;\n // These are not always supported and have to be persisted manually\n // to avoid unsupported values being exposed to the user\n public readonly autoRelockTime?: number;\n public readonly holdAndReleaseTime?: number;\n public readonly twistAssist?: boolean;\n public readonly blockToBlock?: boolean;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Only store the autoRelockTime etc. params if the lock supports it\n const supportsAutoRelock = !!this.getValue(ctx, DoorLockCCValues.autoRelockSupported);\n if (supportsAutoRelock) {\n this.setValue(ctx, DoorLockCCValues.autoRelockTime, this.autoRelockTime);\n }\n const supportsHoldAndRelease = !!this.getValue(ctx, DoorLockCCValues.holdAndReleaseSupported);\n if (supportsHoldAndRelease) {\n this.setValue(ctx, DoorLockCCValues.holdAndReleaseTime, this.holdAndReleaseTime);\n }\n const supportsTwistAssist = !!this.getValue(ctx, DoorLockCCValues.twistAssistSupported);\n if (supportsTwistAssist) {\n this.setValue(ctx, DoorLockCCValues.twistAssist, this.twistAssist);\n }\n const supportsBlockToBlock = !!this.getValue(ctx, DoorLockCCValues.blockToBlockSupported);\n if (supportsBlockToBlock) {\n this.setValue(ctx, DoorLockCCValues.blockToBlock, this.blockToBlock);\n }\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"operation type\": getEnumMemberName(DoorLockOperationType, this.operationType),\n \"outside handle configuration\": this\n .outsideHandlesCanOpenDoorConfiguration.join(\", \"),\n \"inside handle configuration\": this\n .insideHandlesCanOpenDoorConfiguration.join(\", \"),\n };\n if (this.lockTimeoutConfiguration != undefined) {\n message[\"timed mode duration\"] = `${this.lockTimeoutConfiguration} seconds`;\n }\n if (this.autoRelockTime != undefined) {\n message[\"auto-relock time\"] = `${this.autoRelockTime} seconds`;\n }\n if (this.holdAndReleaseTime != undefined) {\n message[\"hold-and-release time\"] = `${this.holdAndReleaseTime} seconds`;\n }\n if (this.twistAssist != undefined) {\n message[\"twist assist enabled\"] = this.twistAssist;\n }\n if (this.blockToBlock != undefined) {\n message[\"block-to-block enabled\"] = this.blockToBlock;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(DoorLockCommand.ConfigurationGet)\n@expectedCCResponse(DoorLockCCConfigurationReport)\nexport class DoorLockCCConfigurationGet extends DoorLockCC {\n}\n// @publicAPI\nexport type DoorLockCCConfigurationSetOptions = ({\n operationType: DoorLockOperationType.Timed;\n lockTimeoutConfiguration: number;\n} | {\n operationType: DoorLockOperationType.Constant;\n lockTimeoutConfiguration?: undefined;\n}) & {\n outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n // V4+\n autoRelockTime?: number;\n holdAndReleaseTime?: number;\n twistAssist?: boolean;\n blockToBlock?: boolean;\n};\n@CCCommand(DoorLockCommand.ConfigurationSet)\n@useSupervision()\nexport class DoorLockCCConfigurationSet extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCConfigurationSetOptions>) {\n super(options);\n this.operationType = options.operationType;\n this.outsideHandlesCanOpenDoorConfiguration =\n options.outsideHandlesCanOpenDoorConfiguration;\n this.insideHandlesCanOpenDoorConfiguration =\n options.insideHandlesCanOpenDoorConfiguration;\n this.lockTimeoutConfiguration = options.lockTimeoutConfiguration;\n this.autoRelockTime = options.autoRelockTime;\n this.holdAndReleaseTime = options.holdAndReleaseTime;\n this.twistAssist = options.twistAssist;\n this.blockToBlock = options.blockToBlock;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCConfigurationSet {\n validatePayload(raw.payload.length >= 4);\n const operationType: DoorLockOperationType = raw.payload[0];\n const outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 16),\n !!(raw.payload[1] & 32),\n !!(raw.payload[1] & 64),\n !!(raw.payload[1] & 128),\n ];\n const insideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n !!(raw.payload[1] & 0b0001),\n !!(raw.payload[1] & 0b0010),\n !!(raw.payload[1] & 0b0100),\n !!(raw.payload[1] & 0b1000),\n ];\n let lockTimeoutConfiguration: number | undefined;\n if (operationType === DoorLockOperationType.Timed) {\n const lockTimeoutMinutes = raw.payload[2];\n const lockTimeoutSeconds = raw.payload[3];\n if (lockTimeoutMinutes <= 0xfd && lockTimeoutSeconds <= 59) {\n lockTimeoutConfiguration = lockTimeoutSeconds\n + lockTimeoutMinutes * 60;\n }\n }\n let autoRelockTime: number | undefined;\n let holdAndReleaseTime: number | undefined;\n let twistAssist: boolean | undefined;\n let blockToBlock: boolean | undefined;\n if (raw.payload.length >= 9) {\n autoRelockTime = raw.payload.readUInt16BE(4);\n holdAndReleaseTime = raw.payload.readUInt16BE(6);\n const flags = raw.payload[8];\n twistAssist = !!(flags & 0b1);\n blockToBlock = !!(flags & 0b10);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n operationType,\n outsideHandlesCanOpenDoorConfiguration,\n insideHandlesCanOpenDoorConfiguration,\n lockTimeoutConfiguration,\n autoRelockTime,\n holdAndReleaseTime,\n twistAssist,\n blockToBlock,\n } as WithAddress<DoorLockCCConfigurationSetOptions>);\n }\n public operationType: DoorLockOperationType;\n public outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n public lockTimeoutConfiguration?: number;\n public autoRelockTime?: number;\n public holdAndReleaseTime?: number;\n public twistAssist?: boolean;\n public blockToBlock?: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const insideHandles = isArray(this.insideHandlesCanOpenDoorConfiguration)\n ? this.insideHandlesCanOpenDoorConfiguration\n : [];\n const outsideHandles = isArray(this.outsideHandlesCanOpenDoorConfiguration)\n ? this.outsideHandlesCanOpenDoorConfiguration\n : [];\n const handles = [...insideHandles, ...outsideHandles]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n let lockTimeoutMinutes: number;\n let lockTimeoutSeconds: number;\n if (this.operationType === DoorLockOperationType.Constant) {\n lockTimeoutMinutes = lockTimeoutSeconds = 0xfe;\n }\n else {\n lockTimeoutMinutes = Math.floor(this.lockTimeoutConfiguration! / 60);\n lockTimeoutSeconds = this.lockTimeoutConfiguration! % 60;\n }\n const flags = (this.twistAssist ? 0b1 : 0)\n | (this.blockToBlock ? 0b10 : 0);\n this.payload = Bytes.from([\n this.operationType,\n handles,\n lockTimeoutMinutes,\n lockTimeoutSeconds,\n // placeholder for auto relock time\n 0,\n 0,\n // placeholder for hold and release time\n 0,\n 0,\n flags,\n ]);\n this.payload.writeUInt16BE((this.autoRelockTime ?? 0) & 0xffff, 4);\n this.payload.writeUInt16BE((this.holdAndReleaseTime ?? 0) & 0xffff, 6);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const insideHandles = isArray(this.insideHandlesCanOpenDoorConfiguration)\n ? this.insideHandlesCanOpenDoorConfiguration\n : [];\n const outsideHandles = isArray(this.outsideHandlesCanOpenDoorConfiguration)\n ? this.outsideHandlesCanOpenDoorConfiguration\n : [];\n const message: MessageRecord = {\n \"operation type\": getEnumMemberName(DoorLockOperationType, this.operationType),\n \"outside handle configuration\": outsideHandles.join(\", \"),\n \"inside handle configuration\": insideHandles.join(\", \"),\n };\n if (this.lockTimeoutConfiguration != undefined) {\n message[\"timed mode duration\"] = `${this.lockTimeoutConfiguration} seconds`;\n }\n if (this.autoRelockTime != undefined) {\n message[\"auto-relock time\"] = `${this.autoRelockTime} seconds`;\n }\n if (this.holdAndReleaseTime != undefined) {\n message[\"hold-and-release time\"] = `${this.holdAndReleaseTime} seconds`;\n }\n if (this.twistAssist != undefined) {\n message[\"enable twist assist\"] = this.twistAssist;\n }\n if (this.blockToBlock != undefined) {\n message[\"enable block-to-block\"] = this.blockToBlock;\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface DoorLockCCCapabilitiesReportOptions {\n supportedOperationTypes: DoorLockOperationType[];\n supportedDoorLockModes: DoorLockMode[];\n supportedOutsideHandles: DoorHandleStatus;\n supportedInsideHandles: DoorHandleStatus;\n doorSupported: boolean;\n boltSupported: boolean;\n latchSupported: boolean;\n blockToBlockSupported: boolean;\n twistAssistSupported: boolean;\n holdAndReleaseSupported: boolean;\n autoRelockSupported: boolean;\n}\n@CCCommand(DoorLockCommand.CapabilitiesReport)\n@ccValueProperty(\"supportedOutsideHandles\", DoorLockCCValues.supportedOutsideHandles)\n@ccValueProperty(\"supportedInsideHandles\", DoorLockCCValues.supportedInsideHandles)\n@ccValueProperty(\"autoRelockSupported\", DoorLockCCValues.autoRelockSupported)\n@ccValueProperty(\"holdAndReleaseSupported\", DoorLockCCValues.holdAndReleaseSupported)\n@ccValueProperty(\"twistAssistSupported\", DoorLockCCValues.twistAssistSupported)\n@ccValueProperty(\"blockToBlockSupported\", DoorLockCCValues.blockToBlockSupported)\nexport class DoorLockCCCapabilitiesReport extends DoorLockCC {\n public constructor(options: WithAddress<DoorLockCCCapabilitiesReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportedOperationTypes = options.supportedOperationTypes;\n this.supportedDoorLockModes = options.supportedDoorLockModes;\n this.supportedOutsideHandles = options.supportedOutsideHandles;\n this.supportedInsideHandles = options.supportedInsideHandles;\n this.doorSupported = options.doorSupported;\n this.boltSupported = options.boltSupported;\n this.latchSupported = options.latchSupported;\n this.blockToBlockSupported = options.blockToBlockSupported;\n this.twistAssistSupported = options.twistAssistSupported;\n this.holdAndReleaseSupported = options.holdAndReleaseSupported;\n this.autoRelockSupported = options.autoRelockSupported;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): DoorLockCCCapabilitiesReport {\n // parse variable length operation type bit mask\n validatePayload(raw.payload.length >= 1);\n const bitMaskLength = raw.payload[0] & 0b11111;\n let offset = 1;\n validatePayload(raw.payload.length >= offset + bitMaskLength + 1);\n const supportedOperationTypes: DoorLockOperationType[] = parseBitMask(raw.payload.subarray(offset, offset + bitMaskLength), \n // bit 0 is reserved, bitmask starts at 1\n 0);\n offset += bitMaskLength;\n // parse variable length door lock mode list\n const listLength = raw.payload[offset];\n offset += 1;\n validatePayload(raw.payload.length >= offset + listLength + 3);\n const supportedDoorLockModes: DoorLockMode[] = [\n ...raw.payload.subarray(offset, offset + listLength),\n ];\n offset += listLength;\n const supportedOutsideHandles: DoorHandleStatus = [\n !!(raw.payload[offset] & 16),\n !!(raw.payload[offset] & 32),\n !!(raw.payload[offset] & 64),\n !!(raw.payload[offset] & 128),\n ];\n const supportedInsideHandles: DoorHandleStatus = [\n !!(raw.payload[offset] & 0b0001),\n !!(raw.payload[offset] & 0b0010),\n !!(raw.payload[offset] & 0b0100),\n !!(raw.payload[offset] & 0b1000),\n ];\n const doorSupported = !!(raw.payload[offset + 1] & 0b1);\n const boltSupported = !!(raw.payload[offset + 1] & 0b10);\n const latchSupported = !!(raw.payload[offset + 1] & 0b100);\n const blockToBlockSupported = !!(raw.payload[offset + 2] & 0b1);\n const twistAssistSupported = !!(raw.payload[offset + 2] & 0b10);\n const holdAndReleaseSupported = !!(raw.payload[offset + 2] & 0b100);\n const autoRelockSupported = !!(raw.payload[offset + 2] & 0b1000);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedOperationTypes,\n supportedDoorLockModes,\n supportedOutsideHandles,\n supportedInsideHandles,\n doorSupported,\n boltSupported,\n latchSupported,\n blockToBlockSupported,\n twistAssistSupported,\n holdAndReleaseSupported,\n autoRelockSupported,\n });\n }\n public readonly supportedOperationTypes: readonly DoorLockOperationType[];\n public readonly supportedDoorLockModes: readonly DoorLockMode[];\n public readonly supportedOutsideHandles: DoorHandleStatus;\n public readonly supportedInsideHandles: DoorHandleStatus;\n // These 3 are not automatically persisted because in CC version 3\n // we have to assume them to be supported. In v4 we can query this.\n public readonly latchSupported: boolean;\n public readonly boltSupported: boolean;\n public readonly doorSupported: boolean;\n public readonly autoRelockSupported: boolean;\n public readonly holdAndReleaseSupported: boolean;\n public readonly twistAssistSupported: boolean;\n public readonly blockToBlockSupported: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n // Operation type bitmask (variable length)\n const operationTypeMask = encodeBitMask(this.supportedOperationTypes, undefined, 0);\n // Door lock mode list\n const modeList = Bytes.from(this.supportedDoorLockModes as number[]);\n const handles = [\n ...this.supportedInsideHandles,\n ...this.supportedOutsideHandles,\n ]\n .map((val, i) => (val ? 1 << i : 0))\n .reduce((acc, cur) => acc | cur, 0);\n const componentStatus = (this.doorSupported ? 0b1 : 0)\n | (this.boltSupported ? 0b10 : 0)\n | (this.latchSupported ? 0b100 : 0);\n const featureFlags = (this.blockToBlockSupported ? 0b1 : 0)\n | (this.twistAssistSupported ? 0b10 : 0)\n | (this.holdAndReleaseSupported ? 0b100 : 0)\n | (this.autoRelockSupported ? 0b1000 : 0);\n this.payload = Bytes.concat([\n [operationTypeMask.length & 0b11111],\n operationTypeMask,\n [modeList.length],\n modeList,\n [handles, componentStatus, featureFlags],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n door: this.doorSupported,\n bolt: this.boltSupported,\n latch: this.latchSupported,\n \"block-to-block feature\": this.blockToBlockSupported,\n \"twist assist feature\": this.twistAssistSupported,\n \"hold-and-release feature\": this.holdAndReleaseSupported,\n \"auto-relock feature\": this.autoRelockSupported,\n \"operation types\": logList(this.supportedOperationTypes.map((t) => getEnumMemberName(DoorLockOperationType, t))),\n \"door lock modes\": logList(this.supportedDoorLockModes.map((t) => getEnumMemberName(DoorLockMode, t))),\n \"outside handles\": this.supportedOutsideHandles.join(\", \"),\n \"inside handles\": this.supportedInsideHandles.join(\", \"),\n },\n };\n }\n}\n@CCCommand(DoorLockCommand.CapabilitiesGet)\n@expectedCCResponse(DoorLockCCCapabilitiesReport)\nexport class DoorLockCCCapabilitiesGet extends DoorLockCC {\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -184,14 +184,15 @@ let DoorLockLoggingCC = (() => {
184
184
  message: `Interviewing ${this.ccName}...`,
185
185
  direction: "none"
186
186
  });
187
- await this.refreshValues(ctx);
187
+ await this.refreshValues(ctx, { tag: "interview" });
188
188
  this.setInterviewComplete(ctx, true);
189
189
  }
190
190
  async refreshValues(ctx, options) {
191
191
  const node = this.getNode(ctx);
192
192
  const endpoint = this.getEndpoint(ctx);
193
193
  const api = import_API.CCAPI.create(import_core.CommandClasses["Door Lock Logging"], ctx, endpoint).withOptions({
194
- priority: options?.priority ?? import_core.MessagePriority.NodeQuery
194
+ priority: options?.priority ?? import_core.MessagePriority.NodeQuery,
195
+ tag: options?.tag
195
196
  });
196
197
  ctx.logNode(node.id, {
197
198
  endpoint: this.endpointIndex,