@zwave-js/cc 14.0.0-beta.4 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/build/cjs/cc/AlarmSensorCC.js +381 -266
  2. package/build/cjs/cc/AlarmSensorCC.js.map +3 -3
  3. package/build/cjs/cc/AssociationCC.js +669 -503
  4. package/build/cjs/cc/AssociationCC.js.map +3 -3
  5. package/build/cjs/cc/AssociationGroupInfoCC.js +633 -492
  6. package/build/cjs/cc/AssociationGroupInfoCC.js.map +3 -3
  7. package/build/cjs/cc/BarrierOperatorCC.js +595 -429
  8. package/build/cjs/cc/BarrierOperatorCC.js.map +3 -3
  9. package/build/cjs/cc/BasicCC.js +354 -260
  10. package/build/cjs/cc/BasicCC.js.map +3 -3
  11. package/build/cjs/cc/BatteryCC.js +427 -345
  12. package/build/cjs/cc/BatteryCC.js.map +3 -3
  13. package/build/cjs/cc/BinarySensorCC.js +391 -276
  14. package/build/cjs/cc/BinarySensorCC.js.map +3 -3
  15. package/build/cjs/cc/BinarySwitchCC.js +347 -253
  16. package/build/cjs/cc/BinarySwitchCC.js.map +3 -3
  17. package/build/cjs/cc/CRC16CC.js +160 -85
  18. package/build/cjs/cc/CRC16CC.js.map +3 -3
  19. package/build/cjs/cc/CentralSceneCC.js +459 -324
  20. package/build/cjs/cc/CentralSceneCC.js.map +3 -3
  21. package/build/cjs/cc/ClimateControlScheduleCC.js +459 -293
  22. package/build/cjs/cc/ClimateControlScheduleCC.js.map +3 -3
  23. package/build/cjs/cc/ClockCC.js +254 -150
  24. package/build/cjs/cc/ClockCC.js.map +3 -3
  25. package/build/cjs/cc/ColorSwitchCC.js +758 -610
  26. package/build/cjs/cc/ColorSwitchCC.js.map +3 -3
  27. package/build/cjs/cc/ConfigurationCC.js +1700 -1453
  28. package/build/cjs/cc/ConfigurationCC.js.map +3 -3
  29. package/build/cjs/cc/DeviceResetLocallyCC.js +125 -49
  30. package/build/cjs/cc/DeviceResetLocallyCC.js.map +3 -3
  31. package/build/cjs/cc/DoorLockCC.js +904 -777
  32. package/build/cjs/cc/DoorLockCC.js.map +3 -3
  33. package/build/cjs/cc/DoorLockLoggingCC.js +321 -206
  34. package/build/cjs/cc/DoorLockLoggingCC.js.map +3 -3
  35. package/build/cjs/cc/EnergyProductionCC.js +249 -160
  36. package/build/cjs/cc/EnergyProductionCC.js.map +3 -3
  37. package/build/cjs/cc/EntryControlCC.js +619 -458
  38. package/build/cjs/cc/EntryControlCC.js.map +3 -3
  39. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +898 -698
  40. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +3 -3
  41. package/build/cjs/cc/HailCC.js +57 -11
  42. package/build/cjs/cc/HailCC.js.map +2 -2
  43. package/build/cjs/cc/HumidityControlModeCC.js +359 -233
  44. package/build/cjs/cc/HumidityControlModeCC.js.map +3 -3
  45. package/build/cjs/cc/HumidityControlOperatingStateCC.js +189 -103
  46. package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +3 -3
  47. package/build/cjs/cc/HumidityControlSetpointCC.js +682 -495
  48. package/build/cjs/cc/HumidityControlSetpointCC.js.map +3 -3
  49. package/build/cjs/cc/InclusionControllerCC.js +205 -114
  50. package/build/cjs/cc/InclusionControllerCC.js.map +3 -3
  51. package/build/cjs/cc/IndicatorCC.js +897 -736
  52. package/build/cjs/cc/IndicatorCC.js.map +3 -3
  53. package/build/cjs/cc/IrrigationCC.js +1651 -1405
  54. package/build/cjs/cc/IrrigationCC.js.map +3 -3
  55. package/build/cjs/cc/LanguageCC.js +268 -171
  56. package/build/cjs/cc/LanguageCC.js.map +3 -3
  57. package/build/cjs/cc/LockCC.js +254 -154
  58. package/build/cjs/cc/LockCC.js.map +3 -3
  59. package/build/cjs/cc/ManufacturerProprietaryCC.js +189 -129
  60. package/build/cjs/cc/ManufacturerProprietaryCC.js.map +2 -2
  61. package/build/cjs/cc/ManufacturerSpecificCC.js +319 -213
  62. package/build/cjs/cc/ManufacturerSpecificCC.js.map +3 -3
  63. package/build/cjs/cc/MeterCC.js +827 -707
  64. package/build/cjs/cc/MeterCC.js.map +3 -3
  65. package/build/cjs/cc/MultiChannelAssociationCC.js +612 -478
  66. package/build/cjs/cc/MultiChannelAssociationCC.js.map +3 -3
  67. package/build/cjs/cc/MultiChannelCC.js +1037 -819
  68. package/build/cjs/cc/MultiChannelCC.js.map +3 -3
  69. package/build/cjs/cc/MultiCommandCC.js +172 -97
  70. package/build/cjs/cc/MultiCommandCC.js.map +3 -3
  71. package/build/cjs/cc/MultilevelSensorCC.js +589 -449
  72. package/build/cjs/cc/MultilevelSensorCC.js.map +3 -3
  73. package/build/cjs/cc/MultilevelSwitchCC.js +587 -439
  74. package/build/cjs/cc/MultilevelSwitchCC.js.map +3 -3
  75. package/build/cjs/cc/NoOperationCC.js +89 -27
  76. package/build/cjs/cc/NoOperationCC.js.map +2 -2
  77. package/build/cjs/cc/NodeNamingCC.js +417 -277
  78. package/build/cjs/cc/NodeNamingCC.js.map +3 -3
  79. package/build/cjs/cc/NotificationCC.js +972 -818
  80. package/build/cjs/cc/NotificationCC.js.map +3 -3
  81. package/build/cjs/cc/PowerlevelCC.js +450 -303
  82. package/build/cjs/cc/PowerlevelCC.js.map +3 -3
  83. package/build/cjs/cc/ProtectionCC.js +686 -494
  84. package/build/cjs/cc/ProtectionCC.js.map +3 -3
  85. package/build/cjs/cc/SceneActivationCC.js +165 -97
  86. package/build/cjs/cc/SceneActivationCC.js.map +3 -3
  87. package/build/cjs/cc/SceneActuatorConfigurationCC.js +346 -243
  88. package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +3 -3
  89. package/build/cjs/cc/SceneControllerConfigurationCC.js +401 -298
  90. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +3 -3
  91. package/build/cjs/cc/ScheduleEntryLockCC.js +1552 -1272
  92. package/build/cjs/cc/ScheduleEntryLockCC.js.map +3 -3
  93. package/build/cjs/cc/Security2CC.js +1483 -1219
  94. package/build/cjs/cc/Security2CC.js.map +3 -3
  95. package/build/cjs/cc/SecurityCC.js +839 -619
  96. package/build/cjs/cc/SecurityCC.js.map +3 -3
  97. package/build/cjs/cc/SoundSwitchCC.js +707 -515
  98. package/build/cjs/cc/SoundSwitchCC.js.map +3 -3
  99. package/build/cjs/cc/SupervisionCC.js +327 -237
  100. package/build/cjs/cc/SupervisionCC.js.map +3 -3
  101. package/build/cjs/cc/ThermostatFanModeCC.js +386 -263
  102. package/build/cjs/cc/ThermostatFanModeCC.js.map +3 -3
  103. package/build/cjs/cc/ThermostatFanStateCC.js +192 -106
  104. package/build/cjs/cc/ThermostatFanStateCC.js.map +3 -3
  105. package/build/cjs/cc/ThermostatModeCC.js +425 -302
  106. package/build/cjs/cc/ThermostatModeCC.js.map +3 -3
  107. package/build/cjs/cc/ThermostatOperatingStateCC.js +188 -102
  108. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +3 -3
  109. package/build/cjs/cc/ThermostatSetbackCC.js +277 -173
  110. package/build/cjs/cc/ThermostatSetbackCC.js.map +3 -3
  111. package/build/cjs/cc/ThermostatSetpointCC.js +645 -491
  112. package/build/cjs/cc/ThermostatSetpointCC.js.map +3 -3
  113. package/build/cjs/cc/TimeCC.js +515 -353
  114. package/build/cjs/cc/TimeCC.js.map +3 -3
  115. package/build/cjs/cc/TimeParametersCC.js +302 -202
  116. package/build/cjs/cc/TimeParametersCC.js.map +3 -3
  117. package/build/cjs/cc/TransportServiceCC.js +433 -315
  118. package/build/cjs/cc/TransportServiceCC.js.map +3 -3
  119. package/build/cjs/cc/UserCodeCC.js +1385 -1102
  120. package/build/cjs/cc/UserCodeCC.js.map +3 -3
  121. package/build/cjs/cc/VersionCC.js +696 -562
  122. package/build/cjs/cc/VersionCC.js.map +3 -3
  123. package/build/cjs/cc/WakeUpCC.js +499 -346
  124. package/build/cjs/cc/WakeUpCC.js.map +3 -3
  125. package/build/cjs/cc/WindowCoveringCC.js +626 -478
  126. package/build/cjs/cc/WindowCoveringCC.js.map +3 -3
  127. package/build/cjs/cc/ZWaveLongRangeCC.js +57 -10
  128. package/build/cjs/cc/ZWaveLongRangeCC.js.map +2 -2
  129. package/build/cjs/cc/ZWavePlusCC.js +233 -159
  130. package/build/cjs/cc/ZWavePlusCC.js.map +3 -3
  131. package/build/cjs/cc/ZWaveProtocolCC.js +1515 -948
  132. package/build/cjs/cc/ZWaveProtocolCC.js.map +3 -3
  133. package/build/cjs/cc/manufacturerProprietary/Decorators.d.ts +4 -4
  134. package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +1 -1
  135. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +395 -274
  136. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +3 -3
  137. package/build/cjs/lib/CommandClassDecorators.d.ts +11 -15
  138. package/build/cjs/lib/CommandClassDecorators.js +19 -20
  139. package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
  140. package/build/cjs/lib/Security2/Extension.d.ts +1 -1
  141. package/build/cjs/lib/Security2/Extension.js +217 -126
  142. package/build/cjs/lib/Security2/Extension.js.map +3 -3
  143. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  144. package/build/esm/cc/AlarmSensorCC.js +389 -291
  145. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  146. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  147. package/build/esm/cc/AssociationCC.js +678 -537
  148. package/build/esm/cc/AssociationCC.js.map +1 -1
  149. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  150. package/build/esm/cc/AssociationGroupInfoCC.js +659 -539
  151. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  152. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  153. package/build/esm/cc/BarrierOperatorCC.js +634 -493
  154. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  155. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  156. package/build/esm/cc/BasicCC.js +380 -302
  157. package/build/esm/cc/BasicCC.js.map +1 -1
  158. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  159. package/build/esm/cc/BatteryCC.js +449 -384
  160. package/build/esm/cc/BatteryCC.js.map +1 -1
  161. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  162. package/build/esm/cc/BinarySensorCC.js +395 -297
  163. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  164. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  165. package/build/esm/cc/BinarySwitchCC.js +353 -274
  166. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  167. package/build/esm/cc/CRC16CC.js +162 -98
  168. package/build/esm/cc/CRC16CC.js.map +1 -1
  169. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  170. package/build/esm/cc/CentralSceneCC.js +465 -351
  171. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  172. package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
  173. package/build/esm/cc/ClimateControlScheduleCC.js +454 -313
  174. package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
  175. package/build/esm/cc/ClockCC.js +248 -159
  176. package/build/esm/cc/ClockCC.js.map +1 -1
  177. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  178. package/build/esm/cc/ColorSwitchCC.js +802 -677
  179. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  180. package/build/esm/cc/ConfigurationCC.js +1899 -1687
  181. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  182. package/build/esm/cc/DeviceResetLocallyCC.js +124 -59
  183. package/build/esm/cc/DeviceResetLocallyCC.js.map +1 -1
  184. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  185. package/build/esm/cc/DoorLockCC.js +951 -849
  186. package/build/esm/cc/DoorLockCC.js.map +1 -1
  187. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
  188. package/build/esm/cc/DoorLockLoggingCC.js +316 -218
  189. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
  190. package/build/esm/cc/EnergyProductionCC.js +240 -164
  191. package/build/esm/cc/EnergyProductionCC.js.map +1 -1
  192. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  193. package/build/esm/cc/EntryControlCC.js +629 -493
  194. package/build/esm/cc/EntryControlCC.js.map +1 -1
  195. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  196. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +938 -769
  197. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  198. package/build/esm/cc/HailCC.js +51 -12
  199. package/build/esm/cc/HailCC.js.map +1 -1
  200. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  201. package/build/esm/cc/HumidityControlModeCC.js +357 -250
  202. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  203. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
  204. package/build/esm/cc/HumidityControlOperatingStateCC.js +182 -109
  205. package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
  206. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  207. package/build/esm/cc/HumidityControlSetpointCC.js +706 -546
  208. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  209. package/build/esm/cc/InclusionControllerCC.js +197 -119
  210. package/build/esm/cc/InclusionControllerCC.js.map +1 -1
  211. package/build/esm/cc/IndicatorCC.js +973 -835
  212. package/build/esm/cc/IndicatorCC.js.map +1 -1
  213. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  214. package/build/esm/cc/IrrigationCC.js +1697 -1496
  215. package/build/esm/cc/IrrigationCC.js.map +1 -1
  216. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  217. package/build/esm/cc/LanguageCC.js +266 -184
  218. package/build/esm/cc/LanguageCC.js.map +1 -1
  219. package/build/esm/cc/LockCC.d.ts.map +1 -1
  220. package/build/esm/cc/LockCC.js +247 -162
  221. package/build/esm/cc/LockCC.js.map +1 -1
  222. package/build/esm/cc/ManufacturerProprietaryCC.js +192 -141
  223. package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
  224. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  225. package/build/esm/cc/ManufacturerSpecificCC.js +312 -223
  226. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  227. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  228. package/build/esm/cc/MeterCC.js +896 -795
  229. package/build/esm/cc/MeterCC.js.map +1 -1
  230. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  231. package/build/esm/cc/MultiChannelAssociationCC.js +631 -518
  232. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  233. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  234. package/build/esm/cc/MultiChannelCC.js +1106 -921
  235. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  236. package/build/esm/cc/MultiCommandCC.js +166 -102
  237. package/build/esm/cc/MultiCommandCC.js.map +1 -1
  238. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  239. package/build/esm/cc/MultilevelSensorCC.js +616 -497
  240. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  241. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  242. package/build/esm/cc/MultilevelSwitchCC.js +621 -496
  243. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  244. package/build/esm/cc/NoOperationCC.js +82 -29
  245. package/build/esm/cc/NoOperationCC.js.map +1 -1
  246. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  247. package/build/esm/cc/NodeNamingCC.js +413 -294
  248. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  249. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  250. package/build/esm/cc/NotificationCC.js +1097 -966
  251. package/build/esm/cc/NotificationCC.js.map +1 -1
  252. package/build/esm/cc/PowerlevelCC.js +437 -311
  253. package/build/esm/cc/PowerlevelCC.js.map +1 -1
  254. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  255. package/build/esm/cc/ProtectionCC.js +704 -543
  256. package/build/esm/cc/ProtectionCC.js.map +1 -1
  257. package/build/esm/cc/SceneActivationCC.d.ts.map +1 -1
  258. package/build/esm/cc/SceneActivationCC.js +157 -100
  259. package/build/esm/cc/SceneActivationCC.js.map +1 -1
  260. package/build/esm/cc/SceneActuatorConfigurationCC.js +357 -269
  261. package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
  262. package/build/esm/cc/SceneControllerConfigurationCC.js +434 -346
  263. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  264. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  265. package/build/esm/cc/ScheduleEntryLockCC.js +1596 -1357
  266. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  267. package/build/esm/cc/Security2CC.js +1633 -1406
  268. package/build/esm/cc/Security2CC.js.map +1 -1
  269. package/build/esm/cc/SecurityCC.js +876 -687
  270. package/build/esm/cc/SecurityCC.js.map +1 -1
  271. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
  272. package/build/esm/cc/SoundSwitchCC.js +689 -526
  273. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  274. package/build/esm/cc/SupervisionCC.js +349 -272
  275. package/build/esm/cc/SupervisionCC.js.map +1 -1
  276. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  277. package/build/esm/cc/ThermostatFanModeCC.js +388 -284
  278. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  279. package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
  280. package/build/esm/cc/ThermostatFanStateCC.js +184 -111
  281. package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
  282. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  283. package/build/esm/cc/ThermostatModeCC.js +435 -331
  284. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  285. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  286. package/build/esm/cc/ThermostatOperatingStateCC.js +180 -107
  287. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  288. package/build/esm/cc/ThermostatSetbackCC.js +274 -185
  289. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
  290. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  291. package/build/esm/cc/ThermostatSetpointCC.js +674 -543
  292. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  293. package/build/esm/cc/TimeCC.js +499 -360
  294. package/build/esm/cc/TimeCC.js.map +1 -1
  295. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  296. package/build/esm/cc/TimeParametersCC.js +296 -211
  297. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  298. package/build/esm/cc/TransportServiceCC.js +464 -363
  299. package/build/esm/cc/TransportServiceCC.js.map +1 -1
  300. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  301. package/build/esm/cc/UserCodeCC.js +1443 -1205
  302. package/build/esm/cc/UserCodeCC.js.map +1 -1
  303. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  304. package/build/esm/cc/VersionCC.js +744 -635
  305. package/build/esm/cc/VersionCC.js.map +1 -1
  306. package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
  307. package/build/esm/cc/WakeUpCC.js +494 -364
  308. package/build/esm/cc/WakeUpCC.js.map +1 -1
  309. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  310. package/build/esm/cc/WindowCoveringCC.js +655 -530
  311. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  312. package/build/esm/cc/ZWaveLongRangeCC.js +51 -11
  313. package/build/esm/cc/ZWaveLongRangeCC.js.map +1 -1
  314. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
  315. package/build/esm/cc/ZWavePlusCC.js +223 -162
  316. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  317. package/build/esm/cc/ZWaveProtocolCC.js +1443 -953
  318. package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
  319. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts +4 -4
  320. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
  321. package/build/esm/cc/manufacturerProprietary/FibaroCC.js +390 -286
  322. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  323. package/build/esm/lib/CommandClassDecorators.d.ts +11 -15
  324. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
  325. package/build/esm/lib/CommandClassDecorators.js +24 -24
  326. package/build/esm/lib/CommandClassDecorators.js.map +1 -1
  327. package/build/esm/lib/Security2/Extension.d.ts +1 -1
  328. package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
  329. package/build/esm/lib/Security2/Extension.js +207 -123
  330. package/build/esm/lib/Security2/Extension.js.map +1 -1
  331. package/package.json +6 -6
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/ScheduleEntryLockCC.ts"],
4
- "sourcesContent": ["import {\n\tCommandClasses,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype SupervisionResult,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tencodeBitMask,\n\tgetDSTInfo,\n\tisUnsupervisedOrSucceeded,\n\tparseBitMask,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { type EndpointId, type MaybeNotKnown } from \"@zwave-js/core/safe\";\nimport type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetValueDB,\n} from \"@zwave-js/host\";\nimport {\n\ttype AllOrNone,\n\tBytes,\n\tformatDate,\n\tformatTime,\n\tgetEnumMemberName,\n\tpick,\n} from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValue,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\tScheduleEntryLockCommand,\n\ttype ScheduleEntryLockDailyRepeatingSchedule,\n\tScheduleEntryLockScheduleKind,\n\tScheduleEntryLockSetAction,\n\ttype ScheduleEntryLockSlotId,\n\ttype ScheduleEntryLockWeekDaySchedule,\n\tScheduleEntryLockWeekday,\n\ttype ScheduleEntryLockYearDaySchedule,\n\ttype Timezone,\n} from \"../lib/_Types.js\";\nimport { encodeTimezone, parseTimezone } from \"../lib/serializers.js\";\nimport { UserCodeCC } from \"./UserCodeCC.js\";\n\nexport const ScheduleEntryLockCCValues = Object.freeze({\n\t...V.defineStaticCCValues(CommandClasses[\"Schedule Entry Lock\"], {\n\t\t...V.staticProperty(\"numWeekDaySlots\", undefined, { internal: true }),\n\t\t...V.staticProperty(\"numYearDaySlots\", undefined, { internal: true }),\n\t\t...V.staticProperty(\"numDailyRepeatingSlots\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t}),\n\n\t...V.defineDynamicCCValues(CommandClasses[\"Schedule Entry Lock\"], {\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"userEnabled\",\n\t\t\t\"userEnabled\",\n\t\t\t(userId: number) => userId,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"userEnabled\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"scheduleKind\",\n\t\t\t\"scheduleKind\",\n\t\t\t(userId: number) => userId,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"scheduleKind\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"schedule\",\n\t\t\t\"schedule\",\n\t\t\t(\n\t\t\t\tscheduleKind: ScheduleEntryLockScheduleKind,\n\t\t\t\tuserId: number,\n\t\t\t\tslotId: number,\n\t\t\t) => toPropertyKey(scheduleKind, userId, slotId),\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"schedule\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\t}),\n});\n\nfunction toPropertyKey(\n\tscheduleKind: ScheduleEntryLockScheduleKind,\n\tuserId: number,\n\tslotId: number,\n): number {\n\treturn (scheduleKind << 16) | (userId << 8) | slotId;\n}\n\n/** Caches information about a schedule */\nfunction persistSchedule(\n\tthis: ScheduleEntryLockCC,\n\tctx: GetValueDB,\n\tscheduleKind: ScheduleEntryLockScheduleKind,\n\tuserId: number,\n\tslotId: number,\n\tschedule:\n\t\t| ScheduleEntryLockWeekDaySchedule\n\t\t| ScheduleEntryLockYearDaySchedule\n\t\t| ScheduleEntryLockDailyRepeatingSchedule\n\t\t| false\n\t\t| undefined,\n): void {\n\tconst scheduleValue = ScheduleEntryLockCCValues.schedule(\n\t\tscheduleKind,\n\t\tuserId,\n\t\tslotId,\n\t);\n\n\tif (schedule != undefined) {\n\t\tthis.setValue(ctx, scheduleValue, schedule);\n\t} else {\n\t\tthis.removeValue(ctx, scheduleValue);\n\t}\n}\n\n/** Updates the schedule kind assumed to be active for user in the cache */\nfunction setUserCodeScheduleKindCached(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n\tuserId: number,\n\tscheduleKind: ScheduleEntryLockScheduleKind,\n): void {\n\tctx\n\t\t.getValueDB(endpoint.nodeId)\n\t\t.setValue(\n\t\t\tScheduleEntryLockCCValues.scheduleKind(userId).endpoint(\n\t\t\t\tendpoint.index,\n\t\t\t),\n\t\t\tscheduleKind,\n\t\t);\n}\n\n/** Updates whether scheduling is active for one or all user(s) in the cache */\nfunction setUserCodeScheduleEnabledCached(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n\tuserId: number | undefined,\n\tenabled: boolean,\n): void {\n\tconst setEnabled = (userId: number) => {\n\t\tctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.setValue(\n\t\t\t\tScheduleEntryLockCCValues.userEnabled(userId).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t\tenabled,\n\t\t\t);\n\t};\n\n\tif (userId == undefined) {\n\t\t// Enable/disable all users\n\t\tconst numUsers = UserCodeCC.getSupportedUsersCached(ctx, endpoint)\n\t\t\t?? 0;\n\n\t\tfor (let userId = 1; userId <= numUsers; userId++) {\n\t\t\tsetEnabled(userId);\n\t\t}\n\t} else {\n\t\tsetEnabled(userId);\n\t}\n}\n\n@API(CommandClasses[\"Schedule Entry Lock\"])\nexport class ScheduleEntryLockCCAPI extends CCAPI {\n\tpublic supportsCommand(\n\t\tcmd: ScheduleEntryLockCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase ScheduleEntryLockCommand.EnableSet:\n\t\t\tcase ScheduleEntryLockCommand.EnableAllSet:\n\t\t\tcase ScheduleEntryLockCommand.WeekDayScheduleSet:\n\t\t\tcase ScheduleEntryLockCommand.WeekDayScheduleGet:\n\t\t\tcase ScheduleEntryLockCommand.YearDayScheduleSet:\n\t\t\tcase ScheduleEntryLockCommand.YearDayScheduleGet:\n\t\t\tcase ScheduleEntryLockCommand.SupportedGet:\n\t\t\t\treturn true; // V1\n\n\t\t\tcase ScheduleEntryLockCommand.TimeOffsetSet:\n\t\t\tcase ScheduleEntryLockCommand.TimeOffsetGet:\n\t\t\t\treturn this.version >= 2;\n\n\t\t\tcase ScheduleEntryLockCommand.DailyRepeatingScheduleSet:\n\t\t\tcase ScheduleEntryLockCommand.DailyRepeatingScheduleGet:\n\t\t\t\treturn this.version >= 3;\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t/**\n\t * Enables or disables schedules. If a user ID is given, that user's\n\t * schedules will be enabled or disabled. If no user ID is given, all schedules\n\t * will be affected.\n\t */\n\t@validateArgs()\n\tpublic async setEnabled(\n\t\tenabled: boolean,\n\t\tuserId?: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tlet result: SupervisionResult | undefined;\n\t\tif (userId != undefined) {\n\t\t\tthis.assertSupportsCommand(\n\t\t\t\tScheduleEntryLockCommand,\n\t\t\t\tScheduleEntryLockCommand.EnableSet,\n\t\t\t);\n\n\t\t\tconst cc = new ScheduleEntryLockCCEnableSet({\n\t\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t\tuserId,\n\t\t\t\tenabled,\n\t\t\t});\n\n\t\t\tresult = await this.host.sendCommand(cc, this.commandOptions);\n\t\t} else {\n\t\t\tthis.assertSupportsCommand(\n\t\t\t\tScheduleEntryLockCommand,\n\t\t\t\tScheduleEntryLockCommand.EnableAllSet,\n\t\t\t);\n\n\t\t\tconst cc = new ScheduleEntryLockCCEnableAllSet({\n\t\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t\tenabled,\n\t\t\t});\n\n\t\t\tresult = await this.host.sendCommand(cc, this.commandOptions);\n\t\t}\n\n\t\tif (this.isSinglecast() && isUnsupervisedOrSucceeded(result)) {\n\t\t\t// Remember the new state in the cache\n\t\t\tsetUserCodeScheduleEnabledCached(\n\t\t\t\tthis.host,\n\t\t\t\tthis.endpoint,\n\t\t\t\tuserId,\n\t\t\t\tenabled,\n\t\t\t);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getNumSlots() {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.SupportedGet,\n\t\t);\n\n\t\tconst cc = new ScheduleEntryLockCCSupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\n\t\tconst result = await this.host.sendCommand<\n\t\t\tScheduleEntryLockCCSupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\n\t\tif (result) {\n\t\t\treturn pick(result, [\n\t\t\t\t\"numWeekDaySlots\",\n\t\t\t\t\"numYearDaySlots\",\n\t\t\t\t\"numDailyRepeatingSlots\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async setWeekDaySchedule(\n\t\tslot: ScheduleEntryLockSlotId,\n\t\tschedule?: ScheduleEntryLockWeekDaySchedule,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.WeekDayScheduleSet,\n\t\t);\n\n\t\tif (this.isSinglecast()) {\n\t\t\tconst numSlots = ScheduleEntryLockCC.getNumWeekDaySlotsCached(\n\t\t\t\tthis.host,\n\t\t\t\tthis.endpoint,\n\t\t\t);\n\n\t\t\tif (slot.slotId < 1 || slot.slotId > numSlots) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`The schedule slot # must be between 1 and the number of supported day-of-week slots ${numSlots}.`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (schedule) {\n\t\t\tif (\n\t\t\t\tschedule.stopHour < schedule.startHour\n\t\t\t\t|| schedule.stopHour === schedule.startHour\n\t\t\t\t\t&& schedule.stopMinute <= schedule.startMinute\n\t\t\t) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`The stop time must be after the start time.`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst cc = new ScheduleEntryLockCCWeekDayScheduleSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...slot,\n\t\t\t...(schedule\n\t\t\t\t? {\n\t\t\t\t\taction: ScheduleEntryLockSetAction.Set,\n\t\t\t\t\t...schedule,\n\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\taction: ScheduleEntryLockSetAction.Erase,\n\t\t\t\t}),\n\t\t});\n\n\t\tconst result = await this.host.sendCommand(cc, this.commandOptions);\n\n\t\tif (this.isSinglecast() && isUnsupervisedOrSucceeded(result)) {\n\t\t\t// Editing (but not erasing) a schedule will enable scheduling for that user\n\t\t\t// and switch it to the current scheduling kind\n\t\t\tif (!!schedule) {\n\t\t\t\tsetUserCodeScheduleEnabledCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t\tslot.userId,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t\tsetUserCodeScheduleKindCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t\tslot.userId,\n\t\t\t\t\tScheduleEntryLockScheduleKind.WeekDay,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// And cache the schedule\n\t\t\tpersistSchedule.call(\n\t\t\t\tcc,\n\t\t\t\tthis.host,\n\t\t\t\tScheduleEntryLockScheduleKind.WeekDay,\n\t\t\t\tslot.userId,\n\t\t\t\tslot.slotId,\n\t\t\t\tschedule ?? false,\n\t\t\t);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t@validateArgs()\n\tpublic async getWeekDaySchedule(\n\t\tslot: ScheduleEntryLockSlotId,\n\t): Promise<MaybeNotKnown<ScheduleEntryLockWeekDaySchedule>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.WeekDayScheduleSet,\n\t\t);\n\n\t\tconst cc = new ScheduleEntryLockCCWeekDayScheduleGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...slot,\n\t\t});\n\t\tconst result = await this.host.sendCommand<\n\t\t\tScheduleEntryLockCCWeekDayScheduleReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\n\t\tif (result?.weekday != undefined) {\n\t\t\treturn {\n\t\t\t\tweekday: result.weekday,\n\t\t\t\tstartHour: result.startHour!,\n\t\t\t\tstartMinute: result.startMinute!,\n\t\t\t\tstopHour: result.stopHour!,\n\t\t\t\tstopMinute: result.stopMinute!,\n\t\t\t};\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async setYearDaySchedule(\n\t\tslot: ScheduleEntryLockSlotId,\n\t\tschedule?: ScheduleEntryLockYearDaySchedule,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.YearDayScheduleSet,\n\t\t);\n\n\t\tif (this.isSinglecast()) {\n\t\t\tconst numSlots = ScheduleEntryLockCC.getNumYearDaySlotsCached(\n\t\t\t\tthis.host,\n\t\t\t\tthis.endpoint,\n\t\t\t);\n\n\t\t\tif (slot.slotId < 1 || slot.slotId > numSlots) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`The schedule slot # must be between 1 and the number of supported day-of-year slots ${numSlots}.`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (schedule) {\n\t\t\tconst startDate = new Date(\n\t\t\t\tschedule.startYear,\n\t\t\t\tschedule.startMonth - 1,\n\t\t\t\tschedule.startDay,\n\t\t\t\tschedule.startHour,\n\t\t\t\tschedule.startMinute,\n\t\t\t);\n\t\t\tconst stopDate = new Date(\n\t\t\t\tschedule.stopYear,\n\t\t\t\tschedule.stopMonth - 1,\n\t\t\t\tschedule.stopDay,\n\t\t\t\tschedule.stopHour,\n\t\t\t\tschedule.stopMinute,\n\t\t\t);\n\t\t\tif (stopDate <= startDate) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`The stop date must be after the start date.`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst cc = new ScheduleEntryLockCCYearDayScheduleSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...slot,\n\t\t\t...(schedule\n\t\t\t\t? {\n\t\t\t\t\taction: ScheduleEntryLockSetAction.Set,\n\t\t\t\t\t...schedule,\n\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\taction: ScheduleEntryLockSetAction.Erase,\n\t\t\t\t}),\n\t\t});\n\n\t\tconst result = await this.host.sendCommand(cc, this.commandOptions);\n\n\t\tif (this.isSinglecast() && isUnsupervisedOrSucceeded(result)) {\n\t\t\t// Editing (but not erasing) a schedule will enable scheduling for that user\n\t\t\t// and switch it to the current scheduling kind\n\t\t\tif (!!schedule) {\n\t\t\t\tsetUserCodeScheduleEnabledCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t\tslot.userId,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t\tsetUserCodeScheduleKindCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t\tslot.userId,\n\t\t\t\t\tScheduleEntryLockScheduleKind.YearDay,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// And cache the schedule\n\t\t\tpersistSchedule.call(\n\t\t\t\tcc,\n\t\t\t\tthis.host,\n\t\t\t\tScheduleEntryLockScheduleKind.YearDay,\n\t\t\t\tslot.userId,\n\t\t\t\tslot.slotId,\n\t\t\t\tschedule ?? false,\n\t\t\t);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t@validateArgs()\n\tpublic async getYearDaySchedule(\n\t\tslot: ScheduleEntryLockSlotId,\n\t): Promise<MaybeNotKnown<ScheduleEntryLockYearDaySchedule>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.YearDayScheduleSet,\n\t\t);\n\n\t\tconst cc = new ScheduleEntryLockCCYearDayScheduleGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...slot,\n\t\t});\n\t\tconst result = await this.host.sendCommand<\n\t\t\tScheduleEntryLockCCYearDayScheduleReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\n\t\tif (result?.startYear != undefined) {\n\t\t\treturn {\n\t\t\t\tstartYear: result.startYear,\n\t\t\t\tstartMonth: result.startMonth!,\n\t\t\t\tstartDay: result.startDay!,\n\t\t\t\tstartHour: result.startHour!,\n\t\t\t\tstartMinute: result.startMinute!,\n\t\t\t\tstopYear: result.stopYear!,\n\t\t\t\tstopMonth: result.stopMonth!,\n\t\t\t\tstopDay: result.stopDay!,\n\t\t\t\tstopHour: result.stopHour!,\n\t\t\t\tstopMinute: result.stopMinute!,\n\t\t\t};\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async setDailyRepeatingSchedule(\n\t\tslot: ScheduleEntryLockSlotId,\n\t\tschedule?: ScheduleEntryLockDailyRepeatingSchedule,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.DailyRepeatingScheduleSet,\n\t\t);\n\n\t\tif (this.isSinglecast()) {\n\t\t\tconst numSlots = ScheduleEntryLockCC\n\t\t\t\t.getNumDailyRepeatingSlotsCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t);\n\n\t\t\tif (slot.slotId < 1 || slot.slotId > numSlots) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`The schedule slot # must be between 1 and the number of supported daily repeating slots ${numSlots}.`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst cc = new ScheduleEntryLockCCDailyRepeatingScheduleSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...slot,\n\t\t\t...(schedule\n\t\t\t\t? {\n\t\t\t\t\taction: ScheduleEntryLockSetAction.Set,\n\t\t\t\t\t...schedule,\n\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\taction: ScheduleEntryLockSetAction.Erase,\n\t\t\t\t}),\n\t\t});\n\n\t\tconst result = await this.host.sendCommand(cc, this.commandOptions);\n\n\t\tif (this.isSinglecast() && isUnsupervisedOrSucceeded(result)) {\n\t\t\t// Editing (but not erasing) a schedule will enable scheduling for that user\n\t\t\t// and switch it to the current scheduling kind\n\t\t\tif (!!schedule) {\n\t\t\t\tsetUserCodeScheduleEnabledCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t\tslot.userId,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t\tsetUserCodeScheduleKindCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t\tslot.userId,\n\t\t\t\t\tScheduleEntryLockScheduleKind.DailyRepeating,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// And cache the schedule\n\t\t\tpersistSchedule.call(\n\t\t\t\tcc,\n\t\t\t\tthis.host,\n\t\t\t\tScheduleEntryLockScheduleKind.DailyRepeating,\n\t\t\t\tslot.userId,\n\t\t\t\tslot.slotId,\n\t\t\t\tschedule ?? false,\n\t\t\t);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t@validateArgs()\n\tpublic async getDailyRepeatingSchedule(\n\t\tslot: ScheduleEntryLockSlotId,\n\t): Promise<MaybeNotKnown<ScheduleEntryLockDailyRepeatingSchedule>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.DailyRepeatingScheduleSet,\n\t\t);\n\n\t\tconst cc = new ScheduleEntryLockCCDailyRepeatingScheduleGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...slot,\n\t\t});\n\t\tconst result = await this.host.sendCommand<\n\t\t\tScheduleEntryLockCCDailyRepeatingScheduleReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\n\t\tif (result?.weekdays != undefined) {\n\t\t\treturn {\n\t\t\t\tweekdays: result.weekdays,\n\t\t\t\tstartHour: result.startHour!,\n\t\t\t\tstartMinute: result.startMinute!,\n\t\t\t\tdurationHour: result.durationHour!,\n\t\t\t\tdurationMinute: result.durationMinute!,\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic async getTimezone(): Promise<MaybeNotKnown<Timezone>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.TimeOffsetGet,\n\t\t);\n\n\t\tconst cc = new ScheduleEntryLockCCTimeOffsetGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst result = await this.host.sendCommand<\n\t\t\tScheduleEntryLockCCTimeOffsetReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\n\t\tif (result) {\n\t\t\treturn pick(result, [\"standardOffset\", \"dstOffset\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async setTimezone(\n\t\ttimezone: Timezone,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.TimeOffsetSet,\n\t\t);\n\n\t\tconst cc = new ScheduleEntryLockCCTimeOffsetSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...timezone,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses[\"Schedule Entry Lock\"])\n@implementedVersion(3)\n@ccValues(ScheduleEntryLockCCValues)\nexport class ScheduleEntryLockCC extends CommandClass {\n\tdeclare ccCommand: ScheduleEntryLockCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Schedule Entry Lock\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"Querying supported number of schedule slots...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst slotsResp = await api.getNumSlots();\n\t\tif (slotsResp) {\n\t\t\tlet logMessage = `received supported number of schedule slots:\nday of week: ${slotsResp.numWeekDaySlots}\nday of year: ${slotsResp.numYearDaySlots}`;\n\t\t\tif (slotsResp.numDailyRepeatingSlots != undefined) {\n\t\t\t\tlogMessage += `\ndaily repeating: ${slotsResp.numDailyRepeatingSlots}`;\n\t\t\t}\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: logMessage,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\n\t\t// If the timezone is not configured with the Time CC, do it here\n\t\tif (\n\t\t\tapi.supportsCommand(ScheduleEntryLockCommand.TimeOffsetSet)\n\t\t\t&& (!endpoint.supportsCC(CommandClasses.Time)\n\t\t\t\t|| endpoint.getCCVersion(CommandClasses.Time) < 2)\n\t\t) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"setting timezone information...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\t// Set the correct timezone on this node\n\t\t\tconst timezone = getDSTInfo();\n\t\t\tawait api.setTimezone(timezone);\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\t/**\n\t * Returns the number of supported day-of-week slots.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getNumWeekDaySlotsCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t): number {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tScheduleEntryLockCCValues.numWeekDaySlots.endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t) || 0;\n\t}\n\n\t/**\n\t * Returns the number of supported day-of-year slots.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getNumYearDaySlotsCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t): number {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tScheduleEntryLockCCValues.numYearDaySlots.endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t) || 0;\n\t}\n\n\t/**\n\t * Returns the number of supported daily-repeating slots.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getNumDailyRepeatingSlotsCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t): number {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tScheduleEntryLockCCValues.numDailyRepeatingSlots.endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t) || 0;\n\t}\n\n\t/**\n\t * Returns whether scheduling for a given user ID (most likely) enabled. Since the Schedule Entry Lock CC\n\t * provides no way to query the enabled state, Z-Wave JS tracks this in its own cache.\n\t *\n\t * This only works AFTER the interview process and is likely to be wrong if a device\n\t * with existing schedules is queried. To be sure, disable scheduling for all users and enable\n\t * only the desired ones.\n\t */\n\tpublic static getUserCodeScheduleEnabledCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tuserId: number,\n\t): boolean {\n\t\treturn !!ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tScheduleEntryLockCCValues.userEnabled(userId).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t);\n\t}\n\n\t/**\n\t * Returns which scheduling kind is (most likely) enabled for a given user ID . Since the Schedule Entry Lock CC\n\t * provides no way to query the current state, Z-Wave JS tracks this in its own cache.\n\t *\n\t * This only works AFTER the interview process and is likely to be wrong if a device\n\t * with existing schedules is queried. To be sure, edit a schedule of the desired kind\n\t * which will automatically switch the user to that scheduling kind.\n\t */\n\tpublic static getUserCodeScheduleKindCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tuserId: number,\n\t): MaybeNotKnown<ScheduleEntryLockScheduleKind> {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue<ScheduleEntryLockScheduleKind>(\n\t\t\t\tScheduleEntryLockCCValues.scheduleKind(userId).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t);\n\t}\n\n\tpublic static getScheduleCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tscheduleKind: ScheduleEntryLockScheduleKind.WeekDay,\n\t\tuserId: number,\n\t\tslotId: number,\n\t): MaybeNotKnown<ScheduleEntryLockWeekDaySchedule | false>;\n\n\tpublic static getScheduleCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tscheduleKind: ScheduleEntryLockScheduleKind.YearDay,\n\t\tuserId: number,\n\t\tslotId: number,\n\t): MaybeNotKnown<ScheduleEntryLockYearDaySchedule | false>;\n\n\tpublic static getScheduleCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tscheduleKind: ScheduleEntryLockScheduleKind.DailyRepeating,\n\t\tuserId: number,\n\t\tslotId: number,\n\t): MaybeNotKnown<ScheduleEntryLockDailyRepeatingSchedule | false>;\n\n\t// Catch-all overload for applications which haven't narrowed `scheduleKind`\n\tpublic static getScheduleCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tscheduleKind: ScheduleEntryLockScheduleKind,\n\t\tuserId: number,\n\t\tslotId: number,\n\t): MaybeNotKnown<\n\t\t| ScheduleEntryLockWeekDaySchedule\n\t\t| ScheduleEntryLockYearDaySchedule\n\t\t| ScheduleEntryLockDailyRepeatingSchedule\n\t\t| false\n\t>;\n\n\t/**\n\t * Returns the assumed state of a schedule. Since the Schedule Entry Lock CC\n\t * provides no way to query the current state, Z-Wave JS tracks this in its own cache.\n\t *\n\t * A return value of `false` means the slot is empty, a return value of `undefined` means the information is not cached yet.\n\t *\n\t * This only works AFTER the interview process.\n\t */\n\tpublic static getScheduleCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tscheduleKind: ScheduleEntryLockScheduleKind,\n\t\tuserId: number,\n\t\tslotId: number,\n\t): MaybeNotKnown<\n\t\t| ScheduleEntryLockWeekDaySchedule\n\t\t| ScheduleEntryLockYearDaySchedule\n\t\t| ScheduleEntryLockDailyRepeatingSchedule\n\t\t| false\n\t> {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tScheduleEntryLockCCValues.schedule(\n\t\t\t\t\tscheduleKind,\n\t\t\t\t\tuserId,\n\t\t\t\t\tslotId,\n\t\t\t\t).endpoint(endpoint.index),\n\t\t\t);\n\t}\n}\n\n// @publicAPI\nexport interface ScheduleEntryLockCCEnableSetOptions {\n\tuserId: number;\n\tenabled: boolean;\n}\n\n@CCCommand(ScheduleEntryLockCommand.EnableSet)\n@useSupervision()\nexport class ScheduleEntryLockCCEnableSet extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCEnableSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.enabled = options.enabled;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCEnableSet {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst userId = raw.payload[0];\n\t\tconst enabled: boolean = raw.payload[1] === 0x01;\n\n\t\treturn new ScheduleEntryLockCCEnableSet({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tuserId,\n\t\t\tenabled,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic enabled: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.userId, this.enabled ? 0x01 : 0x00]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\taction: this.enabled ? \"enable\" : \"disable\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ScheduleEntryLockCCEnableAllSetOptions {\n\tenabled: boolean;\n}\n\n@CCCommand(ScheduleEntryLockCommand.EnableAllSet)\n@useSupervision()\nexport class ScheduleEntryLockCCEnableAllSet extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCEnableAllSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.enabled = options.enabled;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCEnableAllSet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst enabled: boolean = raw.payload[0] === 0x01;\n\n\t\treturn new ScheduleEntryLockCCEnableAllSet({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tenabled,\n\t\t});\n\t}\n\n\tpublic enabled: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.enabled ? 0x01 : 0x00]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\taction: this.enabled ? \"enable all\" : \"disable all\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ScheduleEntryLockCCSupportedReportOptions {\n\tnumWeekDaySlots: number;\n\tnumYearDaySlots: number;\n\tnumDailyRepeatingSlots?: number;\n}\n\n@CCCommand(ScheduleEntryLockCommand.SupportedReport)\nexport class ScheduleEntryLockCCSupportedReport extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.numWeekDaySlots = options.numWeekDaySlots;\n\t\tthis.numYearDaySlots = options.numYearDaySlots;\n\t\tthis.numDailyRepeatingSlots = options.numDailyRepeatingSlots;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst numWeekDaySlots = raw.payload[0];\n\t\tconst numYearDaySlots = raw.payload[1];\n\t\tlet numDailyRepeatingSlots: number | undefined;\n\t\tif (raw.payload.length >= 3) {\n\t\t\tnumDailyRepeatingSlots = raw.payload[2];\n\t\t}\n\n\t\treturn new ScheduleEntryLockCCSupportedReport({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnumWeekDaySlots,\n\t\t\tnumYearDaySlots,\n\t\t\tnumDailyRepeatingSlots,\n\t\t});\n\t}\n\n\t@ccValue(ScheduleEntryLockCCValues.numWeekDaySlots)\n\tpublic numWeekDaySlots: number;\n\t@ccValue(ScheduleEntryLockCCValues.numYearDaySlots)\n\tpublic numYearDaySlots: number;\n\t@ccValue(ScheduleEntryLockCCValues.numDailyRepeatingSlots)\n\tpublic numDailyRepeatingSlots: number | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.numWeekDaySlots,\n\t\t\tthis.numYearDaySlots,\n\t\t\tthis.numDailyRepeatingSlots ?? 0,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"no. of weekday schedule slots\": this.numWeekDaySlots,\n\t\t\t\"no. of day-of-year schedule slots\": this.numYearDaySlots,\n\t\t};\n\t\tif (this.numDailyRepeatingSlots != undefined) {\n\t\t\tmessage[\"no. of daily repeating schedule slots\"] =\n\t\t\t\tthis.numDailyRepeatingSlots;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(ScheduleEntryLockCommand.SupportedGet)\n@expectedCCResponse(ScheduleEntryLockCCSupportedReport)\nexport class ScheduleEntryLockCCSupportedGet extends ScheduleEntryLockCC {}\n\n/** @publicAPI */\nexport type ScheduleEntryLockCCWeekDayScheduleSetOptions =\n\t& ScheduleEntryLockSlotId\n\t& (\n\t\t| {\n\t\t\taction: ScheduleEntryLockSetAction.Erase;\n\t\t}\n\t\t| ({\n\t\t\taction: ScheduleEntryLockSetAction.Set;\n\t\t} & ScheduleEntryLockWeekDaySchedule)\n\t);\n\n@CCCommand(ScheduleEntryLockCommand.WeekDayScheduleSet)\n@useSupervision()\nexport class ScheduleEntryLockCCWeekDayScheduleSet extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCWeekDayScheduleSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t\tthis.action = options.action;\n\t\tif (options.action === ScheduleEntryLockSetAction.Set) {\n\t\t\tthis.weekday = options.weekday;\n\t\t\tthis.startHour = options.startHour;\n\t\t\tthis.startMinute = options.startMinute;\n\t\t\tthis.stopHour = options.stopHour;\n\t\t\tthis.stopMinute = options.stopMinute;\n\t\t}\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCWeekDayScheduleSet {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst action: ScheduleEntryLockSetAction = raw.payload[0];\n\n\t\tvalidatePayload(\n\t\t\taction === ScheduleEntryLockSetAction.Set\n\t\t\t\t|| action === ScheduleEntryLockSetAction.Erase,\n\t\t);\n\t\tconst userId = raw.payload[1];\n\t\tconst slotId = raw.payload[2];\n\n\t\tif (action !== ScheduleEntryLockSetAction.Set) {\n\t\t\treturn new ScheduleEntryLockCCWeekDayScheduleSet({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\taction,\n\t\t\t\tuserId,\n\t\t\t\tslotId,\n\t\t\t});\n\t\t}\n\n\t\tvalidatePayload(raw.payload.length >= 8);\n\t\tconst weekday: ScheduleEntryLockWeekday = raw.payload[3];\n\t\tconst startHour = raw.payload[4];\n\t\tconst startMinute = raw.payload[5];\n\t\tconst stopHour = raw.payload[6];\n\t\tconst stopMinute = raw.payload[7];\n\n\t\treturn new ScheduleEntryLockCCWeekDayScheduleSet({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\taction,\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t\tweekday,\n\t\t\tstartHour,\n\t\t\tstartMinute,\n\t\t\tstopHour,\n\t\t\tstopMinute,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\n\tpublic action: ScheduleEntryLockSetAction;\n\n\tpublic weekday?: ScheduleEntryLockWeekday;\n\tpublic startHour?: number;\n\tpublic startMinute?: number;\n\tpublic stopHour?: number;\n\tpublic stopMinute?: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.action,\n\t\t\tthis.userId,\n\t\t\tthis.slotId,\n\t\t\t// The report should have these fields set to 0xff\n\t\t\t// if the slot is erased. The specs don't mention anything\n\t\t\t// for the Set command, so we just assume the same is okay\n\t\t\tthis.weekday ?? 0xff,\n\t\t\tthis.startHour ?? 0xff,\n\t\t\tthis.startMinute ?? 0xff,\n\t\t\tthis.stopHour ?? 0xff,\n\t\t\tthis.stopMinute ?? 0xff,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord;\n\t\tif (this.action === ScheduleEntryLockSetAction.Erase) {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"erase\",\n\t\t\t};\n\t\t} else {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"set\",\n\t\t\t\tweekday: getEnumMemberName(\n\t\t\t\t\tScheduleEntryLockWeekday,\n\t\t\t\t\tthis.weekday!,\n\t\t\t\t),\n\t\t\t\t\"start time\": formatTime(\n\t\t\t\t\tthis.startHour ?? 0,\n\t\t\t\t\tthis.startMinute ?? 0,\n\t\t\t\t),\n\t\t\t\t\"end time\": formatTime(\n\t\t\t\t\tthis.stopHour ?? 0,\n\t\t\t\t\tthis.stopMinute ?? 0,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type ScheduleEntryLockCCWeekDayScheduleReportOptions =\n\t& ScheduleEntryLockSlotId\n\t& AllOrNone<ScheduleEntryLockWeekDaySchedule>;\n\n@CCCommand(ScheduleEntryLockCommand.WeekDayScheduleReport)\nexport class ScheduleEntryLockCCWeekDayScheduleReport\n\textends ScheduleEntryLockCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCWeekDayScheduleReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t\tthis.weekday = options.weekday;\n\t\tthis.startHour = options.startHour;\n\t\tthis.startMinute = options.startMinute;\n\t\tthis.stopHour = options.stopHour;\n\t\tthis.stopMinute = options.stopMinute;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCWeekDayScheduleReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst userId = raw.payload[0];\n\t\tconst slotId = raw.payload[1];\n\n\t\tlet ccOptions: ScheduleEntryLockCCWeekDayScheduleReportOptions = {\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t};\n\n\t\tlet weekday: ScheduleEntryLockWeekday | undefined;\n\t\tlet startHour: number | undefined;\n\t\tlet startMinute: number | undefined;\n\t\tlet stopHour: number | undefined;\n\t\tlet stopMinute: number | undefined;\n\n\t\tif (raw.payload.length >= 7) {\n\t\t\tif (raw.payload[2] !== 0xff) {\n\t\t\t\tweekday = raw.payload[2];\n\t\t\t}\n\t\t\tif (raw.payload[3] !== 0xff) {\n\t\t\t\tstartHour = raw.payload[3];\n\t\t\t}\n\t\t\tif (raw.payload[4] !== 0xff) {\n\t\t\t\tstartMinute = raw.payload[4];\n\t\t\t}\n\t\t\tif (raw.payload[5] !== 0xff) {\n\t\t\t\tstopHour = raw.payload[5];\n\t\t\t}\n\t\t\tif (raw.payload[6] !== 0xff) {\n\t\t\t\tstopMinute = raw.payload[6];\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tweekday != undefined\n\t\t\t&& startHour != undefined\n\t\t\t&& startMinute != undefined\n\t\t\t&& stopHour != undefined\n\t\t\t&& stopMinute != undefined\n\t\t) {\n\t\t\tccOptions = {\n\t\t\t\t...ccOptions,\n\t\t\t\tweekday,\n\t\t\t\tstartHour,\n\t\t\t\tstartMinute,\n\t\t\t\tstopHour,\n\t\t\t\tstopMinute,\n\t\t\t};\n\t\t}\n\n\t\treturn new ScheduleEntryLockCCWeekDayScheduleReport({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t...ccOptions,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\tpublic weekday?: ScheduleEntryLockWeekday;\n\tpublic startHour?: number;\n\tpublic startMinute?: number;\n\tpublic stopHour?: number;\n\tpublic stopMinute?: number;\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tpersistSchedule.call(\n\t\t\tthis,\n\t\t\tctx,\n\t\t\tScheduleEntryLockScheduleKind.WeekDay,\n\t\t\tthis.userId,\n\t\t\tthis.slotId,\n\t\t\tthis.weekday != undefined\n\t\t\t\t? {\n\t\t\t\t\tweekday: this.weekday,\n\t\t\t\t\tstartHour: this.startHour!,\n\t\t\t\t\tstartMinute: this.startMinute!,\n\t\t\t\t\tstopHour: this.stopHour!,\n\t\t\t\t\tstopMinute: this.stopMinute!,\n\t\t\t\t}\n\t\t\t\t: false,\n\t\t);\n\n\t\treturn true;\n\t}\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.userId,\n\t\t\tthis.slotId,\n\t\t\tthis.weekday ?? 0xff,\n\t\t\tthis.startHour ?? 0xff,\n\t\t\tthis.startMinute ?? 0xff,\n\t\t\tthis.stopHour ?? 0xff,\n\t\t\tthis.stopMinute ?? 0xff,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord;\n\t\tif (this.weekday == undefined) {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\tschedule: \"(empty)\",\n\t\t\t};\n\t\t} else {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\tweekday: getEnumMemberName(\n\t\t\t\t\tScheduleEntryLockWeekday,\n\t\t\t\t\tthis.weekday,\n\t\t\t\t),\n\t\t\t\t\"start time\": formatTime(\n\t\t\t\t\tthis.startHour ?? 0,\n\t\t\t\t\tthis.startMinute ?? 0,\n\t\t\t\t),\n\t\t\t\t\"end time\": formatTime(\n\t\t\t\t\tthis.stopHour ?? 0,\n\t\t\t\t\tthis.stopMinute ?? 0,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type ScheduleEntryLockCCWeekDayScheduleGetOptions =\n\tScheduleEntryLockSlotId;\n\n@CCCommand(ScheduleEntryLockCommand.WeekDayScheduleGet)\n@expectedCCResponse(ScheduleEntryLockCCWeekDayScheduleReport)\nexport class ScheduleEntryLockCCWeekDayScheduleGet extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCWeekDayScheduleGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCWeekDayScheduleGet {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst userId = raw.payload[0];\n\t\tconst slotId = raw.payload[1];\n\n\t\treturn new ScheduleEntryLockCCWeekDayScheduleGet({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.userId, this.slotId]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t},\n\t\t};\n\t}\n}\n\n/** @publicAPI */\nexport type ScheduleEntryLockCCYearDayScheduleSetOptions =\n\t& ScheduleEntryLockSlotId\n\t& (\n\t\t| {\n\t\t\taction: ScheduleEntryLockSetAction.Erase;\n\t\t}\n\t\t| ({\n\t\t\taction: ScheduleEntryLockSetAction.Set;\n\t\t} & ScheduleEntryLockYearDaySchedule)\n\t);\n\n@CCCommand(ScheduleEntryLockCommand.YearDayScheduleSet)\n@useSupervision()\nexport class ScheduleEntryLockCCYearDayScheduleSet extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCYearDayScheduleSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t\tthis.action = options.action;\n\t\tif (options.action === ScheduleEntryLockSetAction.Set) {\n\t\t\tthis.startYear = options.startYear;\n\t\t\tthis.startMonth = options.startMonth;\n\t\t\tthis.startDay = options.startDay;\n\t\t\tthis.startHour = options.startHour;\n\t\t\tthis.startMinute = options.startMinute;\n\t\t\tthis.stopYear = options.stopYear;\n\t\t\tthis.stopMonth = options.stopMonth;\n\t\t\tthis.stopDay = options.stopDay;\n\t\t\tthis.stopHour = options.stopHour;\n\t\t\tthis.stopMinute = options.stopMinute;\n\t\t}\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCYearDayScheduleSet {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst action: ScheduleEntryLockSetAction = raw.payload[0];\n\n\t\tvalidatePayload(\n\t\t\taction === ScheduleEntryLockSetAction.Set\n\t\t\t\t|| action === ScheduleEntryLockSetAction.Erase,\n\t\t);\n\t\tconst userId = raw.payload[1];\n\t\tconst slotId = raw.payload[2];\n\n\t\tif (action !== ScheduleEntryLockSetAction.Set) {\n\t\t\treturn new ScheduleEntryLockCCYearDayScheduleSet({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\taction,\n\t\t\t\tuserId,\n\t\t\t\tslotId,\n\t\t\t});\n\t\t}\n\n\t\tvalidatePayload(raw.payload.length >= 13);\n\t\tconst startYear = raw.payload[3];\n\t\tconst startMonth = raw.payload[4];\n\t\tconst startDay = raw.payload[5];\n\t\tconst startHour = raw.payload[6];\n\t\tconst startMinute = raw.payload[7];\n\t\tconst stopYear = raw.payload[8];\n\t\tconst stopMonth = raw.payload[9];\n\t\tconst stopDay = raw.payload[10];\n\t\tconst stopHour = raw.payload[11];\n\t\tconst stopMinute = raw.payload[12];\n\n\t\treturn new ScheduleEntryLockCCYearDayScheduleSet({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\taction,\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t\tstartYear,\n\t\t\tstartMonth,\n\t\t\tstartDay,\n\t\t\tstartHour,\n\t\t\tstartMinute,\n\t\t\tstopYear,\n\t\t\tstopMonth,\n\t\t\tstopDay,\n\t\t\tstopHour,\n\t\t\tstopMinute,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\n\tpublic action: ScheduleEntryLockSetAction;\n\n\tpublic startYear?: number;\n\tpublic startMonth?: number;\n\tpublic startDay?: number;\n\tpublic startHour?: number;\n\tpublic startMinute?: number;\n\tpublic stopYear?: number;\n\tpublic stopMonth?: number;\n\tpublic stopDay?: number;\n\tpublic stopHour?: number;\n\tpublic stopMinute?: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.action,\n\t\t\tthis.userId,\n\t\t\tthis.slotId,\n\t\t\t// The report should have these fields set to 0xff\n\t\t\t// if the slot is erased. The specs don't mention anything\n\t\t\t// for the Set command, so we just assume the same is okay\n\t\t\tthis.startYear ?? 0xff,\n\t\t\tthis.startMonth ?? 0xff,\n\t\t\tthis.startDay ?? 0xff,\n\t\t\tthis.startHour ?? 0xff,\n\t\t\tthis.startMinute ?? 0xff,\n\t\t\tthis.stopYear ?? 0xff,\n\t\t\tthis.stopMonth ?? 0xff,\n\t\t\tthis.stopDay ?? 0xff,\n\t\t\tthis.stopHour ?? 0xff,\n\t\t\tthis.stopMinute ?? 0xff,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord;\n\t\tif (this.action === ScheduleEntryLockSetAction.Erase) {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"erase\",\n\t\t\t};\n\t\t} else {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"set\",\n\t\t\t\t\"start date\": `${\n\t\t\t\t\tformatDate(\n\t\t\t\t\t\tthis.startYear ?? 0,\n\t\t\t\t\t\tthis.startMonth ?? 0,\n\t\t\t\t\t\tthis.startDay ?? 0,\n\t\t\t\t\t)\n\t\t\t\t} ${formatTime(this.startHour ?? 0, this.startMinute ?? 0)}`,\n\t\t\t\t\"end date\": `${\n\t\t\t\t\tformatDate(\n\t\t\t\t\t\tthis.stopYear ?? 0,\n\t\t\t\t\t\tthis.stopMonth ?? 0,\n\t\t\t\t\t\tthis.stopDay ?? 0,\n\t\t\t\t\t)\n\t\t\t\t} ${formatTime(this.stopHour ?? 0, this.stopMinute ?? 0)}`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type ScheduleEntryLockCCYearDayScheduleReportOptions =\n\t& ScheduleEntryLockSlotId\n\t& AllOrNone<ScheduleEntryLockYearDaySchedule>;\n\n@CCCommand(ScheduleEntryLockCommand.YearDayScheduleReport)\nexport class ScheduleEntryLockCCYearDayScheduleReport\n\textends ScheduleEntryLockCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCYearDayScheduleReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t\tthis.startYear = options.startYear;\n\t\tthis.startMonth = options.startMonth;\n\t\tthis.startDay = options.startDay;\n\t\tthis.startHour = options.startHour;\n\t\tthis.startMinute = options.startMinute;\n\t\tthis.stopYear = options.stopYear;\n\t\tthis.stopMonth = options.stopMonth;\n\t\tthis.stopDay = options.stopDay;\n\t\tthis.stopHour = options.stopHour;\n\t\tthis.stopMinute = options.stopMinute;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCYearDayScheduleReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst userId = raw.payload[0];\n\t\tconst slotId = raw.payload[1];\n\n\t\tlet ccOptions: ScheduleEntryLockCCYearDayScheduleReportOptions = {\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t};\n\n\t\tlet startYear: number | undefined;\n\t\tlet startMonth: number | undefined;\n\t\tlet startDay: number | undefined;\n\t\tlet startHour: number | undefined;\n\t\tlet startMinute: number | undefined;\n\t\tlet stopYear: number | undefined;\n\t\tlet stopMonth: number | undefined;\n\t\tlet stopDay: number | undefined;\n\t\tlet stopHour: number | undefined;\n\t\tlet stopMinute: number | undefined;\n\n\t\tif (raw.payload.length >= 12) {\n\t\t\tif (raw.payload[2] !== 0xff) {\n\t\t\t\tstartYear = raw.payload[2];\n\t\t\t}\n\t\t\tif (raw.payload[3] !== 0xff) {\n\t\t\t\tstartMonth = raw.payload[3];\n\t\t\t}\n\t\t\tif (raw.payload[4] !== 0xff) {\n\t\t\t\tstartDay = raw.payload[4];\n\t\t\t}\n\t\t\tif (raw.payload[5] !== 0xff) {\n\t\t\t\tstartHour = raw.payload[5];\n\t\t\t}\n\t\t\tif (raw.payload[6] !== 0xff) {\n\t\t\t\tstartMinute = raw.payload[6];\n\t\t\t}\n\t\t\tif (raw.payload[7] !== 0xff) {\n\t\t\t\tstopYear = raw.payload[7];\n\t\t\t}\n\t\t\tif (raw.payload[8] !== 0xff) {\n\t\t\t\tstopMonth = raw.payload[8];\n\t\t\t}\n\t\t\tif (raw.payload[9] !== 0xff) {\n\t\t\t\tstopDay = raw.payload[9];\n\t\t\t}\n\t\t\tif (raw.payload[10] !== 0xff) {\n\t\t\t\tstopHour = raw.payload[10];\n\t\t\t}\n\t\t\tif (raw.payload[11] !== 0xff) {\n\t\t\t\tstopMinute = raw.payload[11];\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tstartYear != undefined\n\t\t\t&& startMonth != undefined\n\t\t\t&& startDay != undefined\n\t\t\t&& startHour != undefined\n\t\t\t&& startMinute != undefined\n\t\t\t&& stopYear != undefined\n\t\t\t&& stopMonth != undefined\n\t\t\t&& stopDay != undefined\n\t\t\t&& stopHour != undefined\n\t\t\t&& stopMinute != undefined\n\t\t) {\n\t\t\tccOptions = {\n\t\t\t\t...ccOptions,\n\t\t\t\tstartYear,\n\t\t\t\tstartMonth,\n\t\t\t\tstartDay,\n\t\t\t\tstartHour,\n\t\t\t\tstartMinute,\n\t\t\t\tstopYear,\n\t\t\t\tstopMonth,\n\t\t\t\tstopDay,\n\t\t\t\tstopHour,\n\t\t\t\tstopMinute,\n\t\t\t};\n\t\t}\n\n\t\treturn new ScheduleEntryLockCCYearDayScheduleReport({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t...ccOptions,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\tpublic startYear?: number;\n\tpublic startMonth?: number;\n\tpublic startDay?: number;\n\tpublic startHour?: number;\n\tpublic startMinute?: number;\n\tpublic stopYear?: number;\n\tpublic stopMonth?: number;\n\tpublic stopDay?: number;\n\tpublic stopHour?: number;\n\tpublic stopMinute?: number;\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tpersistSchedule.call(\n\t\t\tthis,\n\t\t\tctx,\n\t\t\tScheduleEntryLockScheduleKind.YearDay,\n\t\t\tthis.userId,\n\t\t\tthis.slotId,\n\t\t\tthis.startYear != undefined\n\t\t\t\t? {\n\t\t\t\t\tstartYear: this.startYear,\n\t\t\t\t\tstartMonth: this.startMonth!,\n\t\t\t\t\tstartDay: this.startDay!,\n\t\t\t\t\tstartHour: this.startHour!,\n\t\t\t\t\tstartMinute: this.startMinute!,\n\t\t\t\t\tstopYear: this.stopYear!,\n\t\t\t\t\tstopMonth: this.stopMonth!,\n\t\t\t\t\tstopDay: this.stopDay!,\n\t\t\t\t\tstopHour: this.stopHour!,\n\t\t\t\t\tstopMinute: this.stopMinute!,\n\t\t\t\t}\n\t\t\t\t: false,\n\t\t);\n\n\t\treturn true;\n\t}\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.userId,\n\t\t\tthis.slotId,\n\t\t\tthis.startYear ?? 0xff,\n\t\t\tthis.startMonth ?? 0xff,\n\t\t\tthis.startDay ?? 0xff,\n\t\t\tthis.startHour ?? 0xff,\n\t\t\tthis.startMinute ?? 0xff,\n\t\t\tthis.stopYear ?? 0xff,\n\t\t\tthis.stopMonth ?? 0xff,\n\t\t\tthis.stopDay ?? 0xff,\n\t\t\tthis.stopHour ?? 0xff,\n\t\t\tthis.stopMinute ?? 0xff,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord;\n\t\tif (this.startYear !== undefined) {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\tschedule: \"(empty)\",\n\t\t\t};\n\t\t} else {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"set\",\n\t\t\t\t\"start date\": `${\n\t\t\t\t\tformatDate(\n\t\t\t\t\t\tthis.startYear ?? 0,\n\t\t\t\t\t\tthis.startMonth ?? 0,\n\t\t\t\t\t\tthis.startDay ?? 0,\n\t\t\t\t\t)\n\t\t\t\t} ${formatTime(this.startHour ?? 0, this.startMinute ?? 0)}`,\n\t\t\t\t\"end date\": `${\n\t\t\t\t\tformatDate(\n\t\t\t\t\t\tthis.stopYear ?? 0,\n\t\t\t\t\t\tthis.stopMonth ?? 0,\n\t\t\t\t\t\tthis.stopDay ?? 0,\n\t\t\t\t\t)\n\t\t\t\t} ${formatTime(this.stopHour ?? 0, this.stopMinute ?? 0)}`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type ScheduleEntryLockCCYearDayScheduleGetOptions =\n\tScheduleEntryLockSlotId;\n\n@CCCommand(ScheduleEntryLockCommand.YearDayScheduleGet)\n@expectedCCResponse(ScheduleEntryLockCCYearDayScheduleReport)\nexport class ScheduleEntryLockCCYearDayScheduleGet extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCYearDayScheduleGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCYearDayScheduleGet {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst userId = raw.payload[0];\n\t\tconst slotId = raw.payload[1];\n\n\t\treturn new ScheduleEntryLockCCYearDayScheduleGet({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.userId, this.slotId]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ScheduleEntryLockCCTimeOffsetSetOptions {\n\tstandardOffset: number;\n\tdstOffset: number;\n}\n\n@CCCommand(ScheduleEntryLockCommand.TimeOffsetSet)\n@useSupervision()\nexport class ScheduleEntryLockCCTimeOffsetSet extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCTimeOffsetSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.standardOffset = options.standardOffset;\n\t\tthis.dstOffset = options.dstOffset;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCTimeOffsetSet {\n\t\tconst { standardOffset, dstOffset } = parseTimezone(raw.payload);\n\n\t\treturn new ScheduleEntryLockCCTimeOffsetSet({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tstandardOffset,\n\t\t\tdstOffset,\n\t\t});\n\t}\n\n\tpublic standardOffset: number;\n\tpublic dstOffset: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = encodeTimezone({\n\t\t\tstandardOffset: this.standardOffset,\n\t\t\tdstOffset: this.dstOffset,\n\t\t});\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"standard time offset\": `${this.standardOffset} minutes`,\n\t\t\t\t\"DST offset\": `${this.dstOffset} minutes`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ScheduleEntryLockCCTimeOffsetReportOptions {\n\tstandardOffset: number;\n\tdstOffset: number;\n}\n\n@CCCommand(ScheduleEntryLockCommand.TimeOffsetReport)\nexport class ScheduleEntryLockCCTimeOffsetReport extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCTimeOffsetReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.standardOffset = options.standardOffset;\n\t\tthis.dstOffset = options.dstOffset;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCTimeOffsetReport {\n\t\tconst { standardOffset, dstOffset } = parseTimezone(raw.payload);\n\n\t\treturn new ScheduleEntryLockCCTimeOffsetReport({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tstandardOffset,\n\t\t\tdstOffset,\n\t\t});\n\t}\n\n\tpublic standardOffset: number;\n\tpublic dstOffset: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = encodeTimezone({\n\t\t\tstandardOffset: this.standardOffset,\n\t\t\tdstOffset: this.dstOffset,\n\t\t});\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"standard time offset\": `${this.standardOffset} minutes`,\n\t\t\t\t\"DST offset\": `${this.dstOffset} minutes`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(ScheduleEntryLockCommand.TimeOffsetGet)\n@expectedCCResponse(ScheduleEntryLockCCTimeOffsetReport)\nexport class ScheduleEntryLockCCTimeOffsetGet extends ScheduleEntryLockCC {}\n\n/** @publicAPI */\nexport type ScheduleEntryLockCCDailyRepeatingScheduleSetOptions =\n\t& ScheduleEntryLockSlotId\n\t& (\n\t\t| {\n\t\t\taction: ScheduleEntryLockSetAction.Erase;\n\t\t}\n\t\t| ({\n\t\t\taction: ScheduleEntryLockSetAction.Set;\n\t\t} & ScheduleEntryLockDailyRepeatingSchedule)\n\t);\n\n@CCCommand(ScheduleEntryLockCommand.DailyRepeatingScheduleSet)\n@useSupervision()\nexport class ScheduleEntryLockCCDailyRepeatingScheduleSet\n\textends ScheduleEntryLockCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<\n\t\t\tScheduleEntryLockCCDailyRepeatingScheduleSetOptions\n\t\t>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t\tthis.action = options.action;\n\t\tif (options.action === ScheduleEntryLockSetAction.Set) {\n\t\t\tthis.weekdays = options.weekdays;\n\t\t\tthis.startHour = options.startHour;\n\t\t\tthis.startMinute = options.startMinute;\n\t\t\tthis.durationHour = options.durationHour;\n\t\t\tthis.durationMinute = options.durationMinute;\n\t\t}\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCDailyRepeatingScheduleSet {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst action: ScheduleEntryLockSetAction = raw.payload[0];\n\n\t\tvalidatePayload(\n\t\t\taction === ScheduleEntryLockSetAction.Set\n\t\t\t\t|| action === ScheduleEntryLockSetAction.Erase,\n\t\t);\n\t\tconst userId = raw.payload[1];\n\t\tconst slotId = raw.payload[2];\n\n\t\tif (action !== ScheduleEntryLockSetAction.Set) {\n\t\t\treturn new ScheduleEntryLockCCDailyRepeatingScheduleSet({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\taction,\n\t\t\t\tuserId,\n\t\t\t\tslotId,\n\t\t\t});\n\t\t}\n\n\t\tvalidatePayload(raw.payload.length >= 8);\n\t\tconst weekdays: ScheduleEntryLockWeekday[] = parseBitMask(\n\t\t\traw.payload.subarray(3, 4),\n\t\t\tScheduleEntryLockWeekday.Sunday,\n\t\t);\n\t\tconst startHour = raw.payload[4];\n\t\tconst startMinute = raw.payload[5];\n\t\tconst durationHour = raw.payload[6];\n\t\tconst durationMinute = raw.payload[7];\n\n\t\treturn new ScheduleEntryLockCCDailyRepeatingScheduleSet({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\taction,\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t\tweekdays,\n\t\t\tstartHour,\n\t\t\tstartMinute,\n\t\t\tdurationHour,\n\t\t\tdurationMinute,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\n\tpublic action: ScheduleEntryLockSetAction;\n\n\tpublic weekdays?: ScheduleEntryLockWeekday[];\n\tpublic startHour?: number;\n\tpublic startMinute?: number;\n\tpublic durationHour?: number;\n\tpublic durationMinute?: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.action, this.userId, this.slotId]);\n\t\tif (this.action === ScheduleEntryLockSetAction.Set) {\n\t\t\tthis.payload = Bytes.concat([\n\t\t\t\tthis.payload,\n\t\t\t\tencodeBitMask(\n\t\t\t\t\tthis.weekdays!,\n\t\t\t\t\tScheduleEntryLockWeekday.Saturday,\n\t\t\t\t\tScheduleEntryLockWeekday.Sunday,\n\t\t\t\t),\n\t\t\t\tBytes.from([\n\t\t\t\t\tthis.startHour!,\n\t\t\t\t\tthis.startMinute!,\n\t\t\t\t\tthis.durationHour!,\n\t\t\t\t\tthis.durationMinute!,\n\t\t\t\t]),\n\t\t\t]);\n\t\t} else {\n\t\t\t// Not sure if this is correct\n\t\t\tthis.payload = Bytes.concat([this.payload, Bytes.alloc(5, 0xff)]);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord;\n\t\tif (this.action === ScheduleEntryLockSetAction.Erase) {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"erase\",\n\t\t\t};\n\t\t} else {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"set\",\n\t\t\t\tweekdays: this.weekdays!.map((w) =>\n\t\t\t\t\tgetEnumMemberName(ScheduleEntryLockWeekday, w)\n\t\t\t\t).join(\", \"),\n\t\t\t\t\"start time\": formatTime(\n\t\t\t\t\tthis.startHour ?? 0,\n\t\t\t\t\tthis.startMinute ?? 0,\n\t\t\t\t),\n\t\t\t\tduration: formatTime(\n\t\t\t\t\tthis.durationHour ?? 0,\n\t\t\t\t\tthis.durationMinute ?? 0,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type ScheduleEntryLockCCDailyRepeatingScheduleReportOptions =\n\t& ScheduleEntryLockSlotId\n\t& AllOrNone<ScheduleEntryLockDailyRepeatingSchedule>;\n\n@CCCommand(ScheduleEntryLockCommand.DailyRepeatingScheduleReport)\nexport class ScheduleEntryLockCCDailyRepeatingScheduleReport\n\textends ScheduleEntryLockCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<\n\t\t\tScheduleEntryLockCCDailyRepeatingScheduleReportOptions\n\t\t>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t\tthis.weekdays = options.weekdays;\n\t\tthis.startHour = options.startHour;\n\t\tthis.startMinute = options.startMinute;\n\t\tthis.durationHour = options.durationHour;\n\t\tthis.durationMinute = options.durationMinute;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCDailyRepeatingScheduleReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst userId = raw.payload[0];\n\t\tconst slotId = raw.payload[1];\n\n\t\tif (raw.payload.length >= 7 && raw.payload[2] !== 0) {\n\t\t\t// Only parse the schedule if it is present and some weekday is selected\n\t\t\tconst weekdays: ScheduleEntryLockWeekday[] = parseBitMask(\n\t\t\t\traw.payload.subarray(2, 3),\n\t\t\t\tScheduleEntryLockWeekday.Sunday,\n\t\t\t);\n\t\t\tconst startHour = raw.payload[3];\n\t\t\tconst startMinute = raw.payload[4];\n\t\t\tconst durationHour = raw.payload[5];\n\t\t\tconst durationMinute = raw.payload[6];\n\n\t\t\treturn new ScheduleEntryLockCCDailyRepeatingScheduleReport({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\tuserId,\n\t\t\t\tslotId,\n\t\t\t\tweekdays,\n\t\t\t\tstartHour,\n\t\t\t\tstartMinute,\n\t\t\t\tdurationHour,\n\t\t\t\tdurationMinute,\n\t\t\t});\n\t\t} else {\n\t\t\treturn new ScheduleEntryLockCCDailyRepeatingScheduleReport({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\tuserId,\n\t\t\t\tslotId,\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\n\tpublic weekdays?: ScheduleEntryLockWeekday[];\n\tpublic startHour?: number;\n\tpublic startMinute?: number;\n\tpublic durationHour?: number;\n\tpublic durationMinute?: number;\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tpersistSchedule.call(\n\t\t\tthis,\n\t\t\tctx,\n\t\t\tScheduleEntryLockScheduleKind.DailyRepeating,\n\t\t\tthis.userId,\n\t\t\tthis.slotId,\n\t\t\tthis.weekdays?.length\n\t\t\t\t? {\n\t\t\t\t\tweekdays: this.weekdays,\n\t\t\t\t\tstartHour: this.startHour!,\n\t\t\t\t\tstartMinute: this.startMinute!,\n\t\t\t\t\tdurationHour: this.durationHour!,\n\t\t\t\t\tdurationMinute: this.durationMinute!,\n\t\t\t\t}\n\t\t\t\t: false,\n\t\t);\n\n\t\treturn true;\n\t}\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.userId, this.slotId]);\n\t\tif (this.weekdays) {\n\t\t\tthis.payload = Bytes.concat([\n\t\t\t\tthis.payload,\n\t\t\t\tencodeBitMask(\n\t\t\t\t\tthis.weekdays,\n\t\t\t\t\tScheduleEntryLockWeekday.Saturday,\n\t\t\t\t\tScheduleEntryLockWeekday.Sunday,\n\t\t\t\t),\n\t\t\t\tBytes.from([\n\t\t\t\t\tthis.startHour!,\n\t\t\t\t\tthis.startMinute!,\n\t\t\t\t\tthis.durationHour!,\n\t\t\t\t\tthis.durationMinute!,\n\t\t\t\t]),\n\t\t\t]);\n\t\t} else {\n\t\t\t// Not sure if this is correct, but at least we won't parse it incorrectly ourselves when setting everything to 0\n\t\t\tthis.payload = Bytes.concat([this.payload, Bytes.alloc(5, 0)]);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord;\n\t\tif (!this.weekdays) {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\tschedule: \"(empty)\",\n\t\t\t};\n\t\t} else {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"set\",\n\t\t\t\tweekdays: this.weekdays\n\t\t\t\t\t.map((w) => getEnumMemberName(ScheduleEntryLockWeekday, w))\n\t\t\t\t\t.join(\", \"),\n\t\t\t\t\"start time\": formatTime(\n\t\t\t\t\tthis.startHour ?? 0,\n\t\t\t\t\tthis.startMinute ?? 0,\n\t\t\t\t),\n\t\t\t\tduration: formatTime(\n\t\t\t\t\tthis.durationHour ?? 0,\n\t\t\t\t\tthis.durationMinute ?? 0,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type ScheduleEntryLockCCDailyRepeatingScheduleGetOptions =\n\tScheduleEntryLockSlotId;\n\n@CCCommand(ScheduleEntryLockCommand.DailyRepeatingScheduleGet)\n@expectedCCResponse(ScheduleEntryLockCCDailyRepeatingScheduleReport)\nexport class ScheduleEntryLockCCDailyRepeatingScheduleGet\n\textends ScheduleEntryLockCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<\n\t\t\tScheduleEntryLockCCDailyRepeatingScheduleGetOptions\n\t\t>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCDailyRepeatingScheduleGet {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst userId = raw.payload[0];\n\t\tconst slotId = raw.payload[1];\n\n\t\treturn new ScheduleEntryLockCCDailyRepeatingScheduleGet({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.userId, this.slotId]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t},\n\t\t};\n\t}\n}\n"],
5
- "mappings": "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",
6
- "names": ["userId", "ScheduleEntryLockCCAPI", "ScheduleEntryLockCC", "ScheduleEntryLockCCEnableSet", "ScheduleEntryLockCCEnableAllSet", "ScheduleEntryLockCCSupportedReport", "ScheduleEntryLockCCSupportedGet", "ScheduleEntryLockCCWeekDayScheduleSet", "ScheduleEntryLockCCWeekDayScheduleReport", "ScheduleEntryLockCCWeekDayScheduleGet", "ScheduleEntryLockCCYearDayScheduleSet", "ScheduleEntryLockCCYearDayScheduleReport", "ScheduleEntryLockCCYearDayScheduleGet", "ScheduleEntryLockCCTimeOffsetSet", "ScheduleEntryLockCCTimeOffsetReport", "ScheduleEntryLockCCTimeOffsetGet", "ScheduleEntryLockCCDailyRepeatingScheduleSet", "ScheduleEntryLockCCDailyRepeatingScheduleReport", "ScheduleEntryLockCCDailyRepeatingScheduleGet"]
4
+ "sourcesContent": ["import {\n\tCommandClasses,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype SupervisionResult,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tencodeBitMask,\n\tgetDSTInfo,\n\tisUnsupervisedOrSucceeded,\n\tparseBitMask,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { type EndpointId, type MaybeNotKnown } from \"@zwave-js/core/safe\";\nimport type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetValueDB,\n} from \"@zwave-js/host\";\nimport {\n\ttype AllOrNone,\n\tBytes,\n\tformatDate,\n\tformatTime,\n\tgetEnumMemberName,\n\tpick,\n} from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\tScheduleEntryLockCommand,\n\ttype ScheduleEntryLockDailyRepeatingSchedule,\n\tScheduleEntryLockScheduleKind,\n\tScheduleEntryLockSetAction,\n\ttype ScheduleEntryLockSlotId,\n\ttype ScheduleEntryLockWeekDaySchedule,\n\tScheduleEntryLockWeekday,\n\ttype ScheduleEntryLockYearDaySchedule,\n\ttype Timezone,\n} from \"../lib/_Types.js\";\nimport { encodeTimezone, parseTimezone } from \"../lib/serializers.js\";\nimport { UserCodeCC } from \"./UserCodeCC.js\";\n\nexport const ScheduleEntryLockCCValues = Object.freeze({\n\t...V.defineStaticCCValues(CommandClasses[\"Schedule Entry Lock\"], {\n\t\t...V.staticProperty(\"numWeekDaySlots\", undefined, { internal: true }),\n\t\t...V.staticProperty(\"numYearDaySlots\", undefined, { internal: true }),\n\t\t...V.staticProperty(\"numDailyRepeatingSlots\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t}),\n\n\t...V.defineDynamicCCValues(CommandClasses[\"Schedule Entry Lock\"], {\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"userEnabled\",\n\t\t\t\"userEnabled\",\n\t\t\t(userId: number) => userId,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"userEnabled\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"scheduleKind\",\n\t\t\t\"scheduleKind\",\n\t\t\t(userId: number) => userId,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"scheduleKind\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"schedule\",\n\t\t\t\"schedule\",\n\t\t\t(\n\t\t\t\tscheduleKind: ScheduleEntryLockScheduleKind,\n\t\t\t\tuserId: number,\n\t\t\t\tslotId: number,\n\t\t\t) => toPropertyKey(scheduleKind, userId, slotId),\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"schedule\" && typeof propertyKey === \"number\",\n\t\t\tundefined,\n\t\t\t{ internal: true },\n\t\t),\n\t}),\n});\n\nfunction toPropertyKey(\n\tscheduleKind: ScheduleEntryLockScheduleKind,\n\tuserId: number,\n\tslotId: number,\n): number {\n\treturn (scheduleKind << 16) | (userId << 8) | slotId;\n}\n\n/** Caches information about a schedule */\nfunction persistSchedule(\n\tthis: ScheduleEntryLockCC,\n\tctx: GetValueDB,\n\tscheduleKind: ScheduleEntryLockScheduleKind,\n\tuserId: number,\n\tslotId: number,\n\tschedule:\n\t\t| ScheduleEntryLockWeekDaySchedule\n\t\t| ScheduleEntryLockYearDaySchedule\n\t\t| ScheduleEntryLockDailyRepeatingSchedule\n\t\t| false\n\t\t| undefined,\n): void {\n\tconst scheduleValue = ScheduleEntryLockCCValues.schedule(\n\t\tscheduleKind,\n\t\tuserId,\n\t\tslotId,\n\t);\n\n\tif (schedule != undefined) {\n\t\tthis.setValue(ctx, scheduleValue, schedule);\n\t} else {\n\t\tthis.removeValue(ctx, scheduleValue);\n\t}\n}\n\n/** Updates the schedule kind assumed to be active for user in the cache */\nfunction setUserCodeScheduleKindCached(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n\tuserId: number,\n\tscheduleKind: ScheduleEntryLockScheduleKind,\n): void {\n\tctx\n\t\t.getValueDB(endpoint.nodeId)\n\t\t.setValue(\n\t\t\tScheduleEntryLockCCValues.scheduleKind(userId).endpoint(\n\t\t\t\tendpoint.index,\n\t\t\t),\n\t\t\tscheduleKind,\n\t\t);\n}\n\n/** Updates whether scheduling is active for one or all user(s) in the cache */\nfunction setUserCodeScheduleEnabledCached(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n\tuserId: number | undefined,\n\tenabled: boolean,\n): void {\n\tconst setEnabled = (userId: number) => {\n\t\tctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.setValue(\n\t\t\t\tScheduleEntryLockCCValues.userEnabled(userId).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t\tenabled,\n\t\t\t);\n\t};\n\n\tif (userId == undefined) {\n\t\t// Enable/disable all users\n\t\tconst numUsers = UserCodeCC.getSupportedUsersCached(ctx, endpoint)\n\t\t\t?? 0;\n\n\t\tfor (let userId = 1; userId <= numUsers; userId++) {\n\t\t\tsetEnabled(userId);\n\t\t}\n\t} else {\n\t\tsetEnabled(userId);\n\t}\n}\n\n@API(CommandClasses[\"Schedule Entry Lock\"])\nexport class ScheduleEntryLockCCAPI extends CCAPI {\n\tpublic supportsCommand(\n\t\tcmd: ScheduleEntryLockCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase ScheduleEntryLockCommand.EnableSet:\n\t\t\tcase ScheduleEntryLockCommand.EnableAllSet:\n\t\t\tcase ScheduleEntryLockCommand.WeekDayScheduleSet:\n\t\t\tcase ScheduleEntryLockCommand.WeekDayScheduleGet:\n\t\t\tcase ScheduleEntryLockCommand.YearDayScheduleSet:\n\t\t\tcase ScheduleEntryLockCommand.YearDayScheduleGet:\n\t\t\tcase ScheduleEntryLockCommand.SupportedGet:\n\t\t\t\treturn true; // V1\n\n\t\t\tcase ScheduleEntryLockCommand.TimeOffsetSet:\n\t\t\tcase ScheduleEntryLockCommand.TimeOffsetGet:\n\t\t\t\treturn this.version >= 2;\n\n\t\t\tcase ScheduleEntryLockCommand.DailyRepeatingScheduleSet:\n\t\t\tcase ScheduleEntryLockCommand.DailyRepeatingScheduleGet:\n\t\t\t\treturn this.version >= 3;\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t/**\n\t * Enables or disables schedules. If a user ID is given, that user's\n\t * schedules will be enabled or disabled. If no user ID is given, all schedules\n\t * will be affected.\n\t */\n\t@validateArgs()\n\tpublic async setEnabled(\n\t\tenabled: boolean,\n\t\tuserId?: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tlet result: SupervisionResult | undefined;\n\t\tif (userId != undefined) {\n\t\t\tthis.assertSupportsCommand(\n\t\t\t\tScheduleEntryLockCommand,\n\t\t\t\tScheduleEntryLockCommand.EnableSet,\n\t\t\t);\n\n\t\t\tconst cc = new ScheduleEntryLockCCEnableSet({\n\t\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t\tuserId,\n\t\t\t\tenabled,\n\t\t\t});\n\n\t\t\tresult = await this.host.sendCommand(cc, this.commandOptions);\n\t\t} else {\n\t\t\tthis.assertSupportsCommand(\n\t\t\t\tScheduleEntryLockCommand,\n\t\t\t\tScheduleEntryLockCommand.EnableAllSet,\n\t\t\t);\n\n\t\t\tconst cc = new ScheduleEntryLockCCEnableAllSet({\n\t\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t\tenabled,\n\t\t\t});\n\n\t\t\tresult = await this.host.sendCommand(cc, this.commandOptions);\n\t\t}\n\n\t\tif (this.isSinglecast() && isUnsupervisedOrSucceeded(result)) {\n\t\t\t// Remember the new state in the cache\n\t\t\tsetUserCodeScheduleEnabledCached(\n\t\t\t\tthis.host,\n\t\t\t\tthis.endpoint,\n\t\t\t\tuserId,\n\t\t\t\tenabled,\n\t\t\t);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getNumSlots() {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.SupportedGet,\n\t\t);\n\n\t\tconst cc = new ScheduleEntryLockCCSupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\n\t\tconst result = await this.host.sendCommand<\n\t\t\tScheduleEntryLockCCSupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\n\t\tif (result) {\n\t\t\treturn pick(result, [\n\t\t\t\t\"numWeekDaySlots\",\n\t\t\t\t\"numYearDaySlots\",\n\t\t\t\t\"numDailyRepeatingSlots\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async setWeekDaySchedule(\n\t\tslot: ScheduleEntryLockSlotId,\n\t\tschedule?: ScheduleEntryLockWeekDaySchedule,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.WeekDayScheduleSet,\n\t\t);\n\n\t\tif (this.isSinglecast()) {\n\t\t\tconst numSlots = ScheduleEntryLockCC.getNumWeekDaySlotsCached(\n\t\t\t\tthis.host,\n\t\t\t\tthis.endpoint,\n\t\t\t);\n\n\t\t\tif (slot.slotId < 1 || slot.slotId > numSlots) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`The schedule slot # must be between 1 and the number of supported day-of-week slots ${numSlots}.`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (schedule) {\n\t\t\tif (\n\t\t\t\tschedule.stopHour < schedule.startHour\n\t\t\t\t|| schedule.stopHour === schedule.startHour\n\t\t\t\t\t&& schedule.stopMinute <= schedule.startMinute\n\t\t\t) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`The stop time must be after the start time.`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst cc = new ScheduleEntryLockCCWeekDayScheduleSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...slot,\n\t\t\t...(schedule\n\t\t\t\t? {\n\t\t\t\t\taction: ScheduleEntryLockSetAction.Set,\n\t\t\t\t\t...schedule,\n\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\taction: ScheduleEntryLockSetAction.Erase,\n\t\t\t\t}),\n\t\t});\n\n\t\tconst result = await this.host.sendCommand(cc, this.commandOptions);\n\n\t\tif (this.isSinglecast() && isUnsupervisedOrSucceeded(result)) {\n\t\t\t// Editing (but not erasing) a schedule will enable scheduling for that user\n\t\t\t// and switch it to the current scheduling kind\n\t\t\tif (!!schedule) {\n\t\t\t\tsetUserCodeScheduleEnabledCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t\tslot.userId,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t\tsetUserCodeScheduleKindCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t\tslot.userId,\n\t\t\t\t\tScheduleEntryLockScheduleKind.WeekDay,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// And cache the schedule\n\t\t\tpersistSchedule.call(\n\t\t\t\tcc,\n\t\t\t\tthis.host,\n\t\t\t\tScheduleEntryLockScheduleKind.WeekDay,\n\t\t\t\tslot.userId,\n\t\t\t\tslot.slotId,\n\t\t\t\tschedule ?? false,\n\t\t\t);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t@validateArgs()\n\tpublic async getWeekDaySchedule(\n\t\tslot: ScheduleEntryLockSlotId,\n\t): Promise<MaybeNotKnown<ScheduleEntryLockWeekDaySchedule>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.WeekDayScheduleSet,\n\t\t);\n\n\t\tconst cc = new ScheduleEntryLockCCWeekDayScheduleGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...slot,\n\t\t});\n\t\tconst result = await this.host.sendCommand<\n\t\t\tScheduleEntryLockCCWeekDayScheduleReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\n\t\tif (result?.weekday != undefined) {\n\t\t\treturn {\n\t\t\t\tweekday: result.weekday,\n\t\t\t\tstartHour: result.startHour!,\n\t\t\t\tstartMinute: result.startMinute!,\n\t\t\t\tstopHour: result.stopHour!,\n\t\t\t\tstopMinute: result.stopMinute!,\n\t\t\t};\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async setYearDaySchedule(\n\t\tslot: ScheduleEntryLockSlotId,\n\t\tschedule?: ScheduleEntryLockYearDaySchedule,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.YearDayScheduleSet,\n\t\t);\n\n\t\tif (this.isSinglecast()) {\n\t\t\tconst numSlots = ScheduleEntryLockCC.getNumYearDaySlotsCached(\n\t\t\t\tthis.host,\n\t\t\t\tthis.endpoint,\n\t\t\t);\n\n\t\t\tif (slot.slotId < 1 || slot.slotId > numSlots) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`The schedule slot # must be between 1 and the number of supported day-of-year slots ${numSlots}.`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (schedule) {\n\t\t\tconst startDate = new Date(\n\t\t\t\tschedule.startYear,\n\t\t\t\tschedule.startMonth - 1,\n\t\t\t\tschedule.startDay,\n\t\t\t\tschedule.startHour,\n\t\t\t\tschedule.startMinute,\n\t\t\t);\n\t\t\tconst stopDate = new Date(\n\t\t\t\tschedule.stopYear,\n\t\t\t\tschedule.stopMonth - 1,\n\t\t\t\tschedule.stopDay,\n\t\t\t\tschedule.stopHour,\n\t\t\t\tschedule.stopMinute,\n\t\t\t);\n\t\t\tif (stopDate <= startDate) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`The stop date must be after the start date.`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst cc = new ScheduleEntryLockCCYearDayScheduleSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...slot,\n\t\t\t...(schedule\n\t\t\t\t? {\n\t\t\t\t\taction: ScheduleEntryLockSetAction.Set,\n\t\t\t\t\t...schedule,\n\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\taction: ScheduleEntryLockSetAction.Erase,\n\t\t\t\t}),\n\t\t});\n\n\t\tconst result = await this.host.sendCommand(cc, this.commandOptions);\n\n\t\tif (this.isSinglecast() && isUnsupervisedOrSucceeded(result)) {\n\t\t\t// Editing (but not erasing) a schedule will enable scheduling for that user\n\t\t\t// and switch it to the current scheduling kind\n\t\t\tif (!!schedule) {\n\t\t\t\tsetUserCodeScheduleEnabledCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t\tslot.userId,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t\tsetUserCodeScheduleKindCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t\tslot.userId,\n\t\t\t\t\tScheduleEntryLockScheduleKind.YearDay,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// And cache the schedule\n\t\t\tpersistSchedule.call(\n\t\t\t\tcc,\n\t\t\t\tthis.host,\n\t\t\t\tScheduleEntryLockScheduleKind.YearDay,\n\t\t\t\tslot.userId,\n\t\t\t\tslot.slotId,\n\t\t\t\tschedule ?? false,\n\t\t\t);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t@validateArgs()\n\tpublic async getYearDaySchedule(\n\t\tslot: ScheduleEntryLockSlotId,\n\t): Promise<MaybeNotKnown<ScheduleEntryLockYearDaySchedule>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.YearDayScheduleSet,\n\t\t);\n\n\t\tconst cc = new ScheduleEntryLockCCYearDayScheduleGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...slot,\n\t\t});\n\t\tconst result = await this.host.sendCommand<\n\t\t\tScheduleEntryLockCCYearDayScheduleReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\n\t\tif (result?.startYear != undefined) {\n\t\t\treturn {\n\t\t\t\tstartYear: result.startYear,\n\t\t\t\tstartMonth: result.startMonth!,\n\t\t\t\tstartDay: result.startDay!,\n\t\t\t\tstartHour: result.startHour!,\n\t\t\t\tstartMinute: result.startMinute!,\n\t\t\t\tstopYear: result.stopYear!,\n\t\t\t\tstopMonth: result.stopMonth!,\n\t\t\t\tstopDay: result.stopDay!,\n\t\t\t\tstopHour: result.stopHour!,\n\t\t\t\tstopMinute: result.stopMinute!,\n\t\t\t};\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async setDailyRepeatingSchedule(\n\t\tslot: ScheduleEntryLockSlotId,\n\t\tschedule?: ScheduleEntryLockDailyRepeatingSchedule,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.DailyRepeatingScheduleSet,\n\t\t);\n\n\t\tif (this.isSinglecast()) {\n\t\t\tconst numSlots = ScheduleEntryLockCC\n\t\t\t\t.getNumDailyRepeatingSlotsCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t);\n\n\t\t\tif (slot.slotId < 1 || slot.slotId > numSlots) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t`The schedule slot # must be between 1 and the number of supported daily repeating slots ${numSlots}.`,\n\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst cc = new ScheduleEntryLockCCDailyRepeatingScheduleSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...slot,\n\t\t\t...(schedule\n\t\t\t\t? {\n\t\t\t\t\taction: ScheduleEntryLockSetAction.Set,\n\t\t\t\t\t...schedule,\n\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\taction: ScheduleEntryLockSetAction.Erase,\n\t\t\t\t}),\n\t\t});\n\n\t\tconst result = await this.host.sendCommand(cc, this.commandOptions);\n\n\t\tif (this.isSinglecast() && isUnsupervisedOrSucceeded(result)) {\n\t\t\t// Editing (but not erasing) a schedule will enable scheduling for that user\n\t\t\t// and switch it to the current scheduling kind\n\t\t\tif (!!schedule) {\n\t\t\t\tsetUserCodeScheduleEnabledCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t\tslot.userId,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t\tsetUserCodeScheduleKindCached(\n\t\t\t\t\tthis.host,\n\t\t\t\t\tthis.endpoint,\n\t\t\t\t\tslot.userId,\n\t\t\t\t\tScheduleEntryLockScheduleKind.DailyRepeating,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// And cache the schedule\n\t\t\tpersistSchedule.call(\n\t\t\t\tcc,\n\t\t\t\tthis.host,\n\t\t\t\tScheduleEntryLockScheduleKind.DailyRepeating,\n\t\t\t\tslot.userId,\n\t\t\t\tslot.slotId,\n\t\t\t\tschedule ?? false,\n\t\t\t);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t@validateArgs()\n\tpublic async getDailyRepeatingSchedule(\n\t\tslot: ScheduleEntryLockSlotId,\n\t): Promise<MaybeNotKnown<ScheduleEntryLockDailyRepeatingSchedule>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.DailyRepeatingScheduleSet,\n\t\t);\n\n\t\tconst cc = new ScheduleEntryLockCCDailyRepeatingScheduleGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...slot,\n\t\t});\n\t\tconst result = await this.host.sendCommand<\n\t\t\tScheduleEntryLockCCDailyRepeatingScheduleReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\n\t\tif (result?.weekdays != undefined) {\n\t\t\treturn {\n\t\t\t\tweekdays: result.weekdays,\n\t\t\t\tstartHour: result.startHour!,\n\t\t\t\tstartMinute: result.startMinute!,\n\t\t\t\tdurationHour: result.durationHour!,\n\t\t\t\tdurationMinute: result.durationMinute!,\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic async getTimezone(): Promise<MaybeNotKnown<Timezone>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.TimeOffsetGet,\n\t\t);\n\n\t\tconst cc = new ScheduleEntryLockCCTimeOffsetGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst result = await this.host.sendCommand<\n\t\t\tScheduleEntryLockCCTimeOffsetReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\n\t\tif (result) {\n\t\t\treturn pick(result, [\"standardOffset\", \"dstOffset\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async setTimezone(\n\t\ttimezone: Timezone,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tScheduleEntryLockCommand,\n\t\t\tScheduleEntryLockCommand.TimeOffsetSet,\n\t\t);\n\n\t\tconst cc = new ScheduleEntryLockCCTimeOffsetSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...timezone,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses[\"Schedule Entry Lock\"])\n@implementedVersion(3)\n@ccValues(ScheduleEntryLockCCValues)\nexport class ScheduleEntryLockCC extends CommandClass {\n\tdeclare ccCommand: ScheduleEntryLockCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Schedule Entry Lock\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"Querying supported number of schedule slots...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst slotsResp = await api.getNumSlots();\n\t\tif (slotsResp) {\n\t\t\tlet logMessage = `received supported number of schedule slots:\nday of week: ${slotsResp.numWeekDaySlots}\nday of year: ${slotsResp.numYearDaySlots}`;\n\t\t\tif (slotsResp.numDailyRepeatingSlots != undefined) {\n\t\t\t\tlogMessage += `\ndaily repeating: ${slotsResp.numDailyRepeatingSlots}`;\n\t\t\t}\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: logMessage,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\n\t\t// If the timezone is not configured with the Time CC, do it here\n\t\tif (\n\t\t\tapi.supportsCommand(ScheduleEntryLockCommand.TimeOffsetSet)\n\t\t\t&& (!endpoint.supportsCC(CommandClasses.Time)\n\t\t\t\t|| endpoint.getCCVersion(CommandClasses.Time) < 2)\n\t\t) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"setting timezone information...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\t// Set the correct timezone on this node\n\t\t\tconst timezone = getDSTInfo();\n\t\t\tawait api.setTimezone(timezone);\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\t/**\n\t * Returns the number of supported day-of-week slots.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getNumWeekDaySlotsCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t): number {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tScheduleEntryLockCCValues.numWeekDaySlots.endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t) || 0;\n\t}\n\n\t/**\n\t * Returns the number of supported day-of-year slots.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getNumYearDaySlotsCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t): number {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tScheduleEntryLockCCValues.numYearDaySlots.endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t) || 0;\n\t}\n\n\t/**\n\t * Returns the number of supported daily-repeating slots.\n\t * This only works AFTER the interview process\n\t */\n\tpublic static getNumDailyRepeatingSlotsCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t): number {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tScheduleEntryLockCCValues.numDailyRepeatingSlots.endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t) || 0;\n\t}\n\n\t/**\n\t * Returns whether scheduling for a given user ID (most likely) enabled. Since the Schedule Entry Lock CC\n\t * provides no way to query the enabled state, Z-Wave JS tracks this in its own cache.\n\t *\n\t * This only works AFTER the interview process and is likely to be wrong if a device\n\t * with existing schedules is queried. To be sure, disable scheduling for all users and enable\n\t * only the desired ones.\n\t */\n\tpublic static getUserCodeScheduleEnabledCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tuserId: number,\n\t): boolean {\n\t\treturn !!ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tScheduleEntryLockCCValues.userEnabled(userId).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t);\n\t}\n\n\t/**\n\t * Returns which scheduling kind is (most likely) enabled for a given user ID . Since the Schedule Entry Lock CC\n\t * provides no way to query the current state, Z-Wave JS tracks this in its own cache.\n\t *\n\t * This only works AFTER the interview process and is likely to be wrong if a device\n\t * with existing schedules is queried. To be sure, edit a schedule of the desired kind\n\t * which will automatically switch the user to that scheduling kind.\n\t */\n\tpublic static getUserCodeScheduleKindCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tuserId: number,\n\t): MaybeNotKnown<ScheduleEntryLockScheduleKind> {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue<ScheduleEntryLockScheduleKind>(\n\t\t\t\tScheduleEntryLockCCValues.scheduleKind(userId).endpoint(\n\t\t\t\t\tendpoint.index,\n\t\t\t\t),\n\t\t\t);\n\t}\n\n\tpublic static getScheduleCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tscheduleKind: ScheduleEntryLockScheduleKind.WeekDay,\n\t\tuserId: number,\n\t\tslotId: number,\n\t): MaybeNotKnown<ScheduleEntryLockWeekDaySchedule | false>;\n\n\tpublic static getScheduleCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tscheduleKind: ScheduleEntryLockScheduleKind.YearDay,\n\t\tuserId: number,\n\t\tslotId: number,\n\t): MaybeNotKnown<ScheduleEntryLockYearDaySchedule | false>;\n\n\tpublic static getScheduleCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tscheduleKind: ScheduleEntryLockScheduleKind.DailyRepeating,\n\t\tuserId: number,\n\t\tslotId: number,\n\t): MaybeNotKnown<ScheduleEntryLockDailyRepeatingSchedule | false>;\n\n\t// Catch-all overload for applications which haven't narrowed `scheduleKind`\n\tpublic static getScheduleCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tscheduleKind: ScheduleEntryLockScheduleKind,\n\t\tuserId: number,\n\t\tslotId: number,\n\t): MaybeNotKnown<\n\t\t| ScheduleEntryLockWeekDaySchedule\n\t\t| ScheduleEntryLockYearDaySchedule\n\t\t| ScheduleEntryLockDailyRepeatingSchedule\n\t\t| false\n\t>;\n\n\t/**\n\t * Returns the assumed state of a schedule. Since the Schedule Entry Lock CC\n\t * provides no way to query the current state, Z-Wave JS tracks this in its own cache.\n\t *\n\t * A return value of `false` means the slot is empty, a return value of `undefined` means the information is not cached yet.\n\t *\n\t * This only works AFTER the interview process.\n\t */\n\tpublic static getScheduleCached(\n\t\tctx: GetValueDB,\n\t\tendpoint: EndpointId,\n\t\tscheduleKind: ScheduleEntryLockScheduleKind,\n\t\tuserId: number,\n\t\tslotId: number,\n\t): MaybeNotKnown<\n\t\t| ScheduleEntryLockWeekDaySchedule\n\t\t| ScheduleEntryLockYearDaySchedule\n\t\t| ScheduleEntryLockDailyRepeatingSchedule\n\t\t| false\n\t> {\n\t\treturn ctx\n\t\t\t.getValueDB(endpoint.nodeId)\n\t\t\t.getValue(\n\t\t\t\tScheduleEntryLockCCValues.schedule(\n\t\t\t\t\tscheduleKind,\n\t\t\t\t\tuserId,\n\t\t\t\t\tslotId,\n\t\t\t\t).endpoint(endpoint.index),\n\t\t\t);\n\t}\n}\n\n// @publicAPI\nexport interface ScheduleEntryLockCCEnableSetOptions {\n\tuserId: number;\n\tenabled: boolean;\n}\n\n@CCCommand(ScheduleEntryLockCommand.EnableSet)\n@useSupervision()\nexport class ScheduleEntryLockCCEnableSet extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCEnableSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.enabled = options.enabled;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCEnableSet {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst userId = raw.payload[0];\n\t\tconst enabled: boolean = raw.payload[1] === 0x01;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tuserId,\n\t\t\tenabled,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic enabled: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.userId, this.enabled ? 0x01 : 0x00]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\taction: this.enabled ? \"enable\" : \"disable\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ScheduleEntryLockCCEnableAllSetOptions {\n\tenabled: boolean;\n}\n\n@CCCommand(ScheduleEntryLockCommand.EnableAllSet)\n@useSupervision()\nexport class ScheduleEntryLockCCEnableAllSet extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCEnableAllSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.enabled = options.enabled;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCEnableAllSet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst enabled: boolean = raw.payload[0] === 0x01;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tenabled,\n\t\t});\n\t}\n\n\tpublic enabled: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.enabled ? 0x01 : 0x00]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\taction: this.enabled ? \"enable all\" : \"disable all\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ScheduleEntryLockCCSupportedReportOptions {\n\tnumWeekDaySlots: number;\n\tnumYearDaySlots: number;\n\tnumDailyRepeatingSlots?: number;\n}\n\n@CCCommand(ScheduleEntryLockCommand.SupportedReport)\n@ccValueProperty(\"numWeekDaySlots\", ScheduleEntryLockCCValues.numWeekDaySlots)\n@ccValueProperty(\"numYearDaySlots\", ScheduleEntryLockCCValues.numYearDaySlots)\n@ccValueProperty(\n\t\"numDailyRepeatingSlots\",\n\tScheduleEntryLockCCValues.numDailyRepeatingSlots,\n)\nexport class ScheduleEntryLockCCSupportedReport extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.numWeekDaySlots = options.numWeekDaySlots;\n\t\tthis.numYearDaySlots = options.numYearDaySlots;\n\t\tthis.numDailyRepeatingSlots = options.numDailyRepeatingSlots;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst numWeekDaySlots = raw.payload[0];\n\t\tconst numYearDaySlots = raw.payload[1];\n\t\tlet numDailyRepeatingSlots: number | undefined;\n\t\tif (raw.payload.length >= 3) {\n\t\t\tnumDailyRepeatingSlots = raw.payload[2];\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnumWeekDaySlots,\n\t\t\tnumYearDaySlots,\n\t\t\tnumDailyRepeatingSlots,\n\t\t});\n\t}\n\n\tpublic numWeekDaySlots: number;\n\n\tpublic numYearDaySlots: number;\n\n\tpublic numDailyRepeatingSlots: number | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.numWeekDaySlots,\n\t\t\tthis.numYearDaySlots,\n\t\t\tthis.numDailyRepeatingSlots ?? 0,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"no. of weekday schedule slots\": this.numWeekDaySlots,\n\t\t\t\"no. of day-of-year schedule slots\": this.numYearDaySlots,\n\t\t};\n\t\tif (this.numDailyRepeatingSlots != undefined) {\n\t\t\tmessage[\"no. of daily repeating schedule slots\"] =\n\t\t\t\tthis.numDailyRepeatingSlots;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(ScheduleEntryLockCommand.SupportedGet)\n@expectedCCResponse(ScheduleEntryLockCCSupportedReport)\nexport class ScheduleEntryLockCCSupportedGet extends ScheduleEntryLockCC {}\n\n/** @publicAPI */\nexport type ScheduleEntryLockCCWeekDayScheduleSetOptions =\n\t& ScheduleEntryLockSlotId\n\t& (\n\t\t| {\n\t\t\taction: ScheduleEntryLockSetAction.Erase;\n\t\t}\n\t\t| ({\n\t\t\taction: ScheduleEntryLockSetAction.Set;\n\t\t} & ScheduleEntryLockWeekDaySchedule)\n\t);\n\n@CCCommand(ScheduleEntryLockCommand.WeekDayScheduleSet)\n@useSupervision()\nexport class ScheduleEntryLockCCWeekDayScheduleSet extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCWeekDayScheduleSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t\tthis.action = options.action;\n\t\tif (options.action === ScheduleEntryLockSetAction.Set) {\n\t\t\tthis.weekday = options.weekday;\n\t\t\tthis.startHour = options.startHour;\n\t\t\tthis.startMinute = options.startMinute;\n\t\t\tthis.stopHour = options.stopHour;\n\t\t\tthis.stopMinute = options.stopMinute;\n\t\t}\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCWeekDayScheduleSet {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst action: ScheduleEntryLockSetAction = raw.payload[0];\n\n\t\tvalidatePayload(\n\t\t\taction === ScheduleEntryLockSetAction.Set\n\t\t\t\t|| action === ScheduleEntryLockSetAction.Erase,\n\t\t);\n\t\tconst userId = raw.payload[1];\n\t\tconst slotId = raw.payload[2];\n\n\t\tif (action !== ScheduleEntryLockSetAction.Set) {\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\taction,\n\t\t\t\tuserId,\n\t\t\t\tslotId,\n\t\t\t});\n\t\t}\n\n\t\tvalidatePayload(raw.payload.length >= 8);\n\t\tconst weekday: ScheduleEntryLockWeekday = raw.payload[3];\n\t\tconst startHour = raw.payload[4];\n\t\tconst startMinute = raw.payload[5];\n\t\tconst stopHour = raw.payload[6];\n\t\tconst stopMinute = raw.payload[7];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\taction,\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t\tweekday,\n\t\t\tstartHour,\n\t\t\tstartMinute,\n\t\t\tstopHour,\n\t\t\tstopMinute,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\n\tpublic action: ScheduleEntryLockSetAction;\n\n\tpublic weekday?: ScheduleEntryLockWeekday;\n\tpublic startHour?: number;\n\tpublic startMinute?: number;\n\tpublic stopHour?: number;\n\tpublic stopMinute?: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.action,\n\t\t\tthis.userId,\n\t\t\tthis.slotId,\n\t\t\t// The report should have these fields set to 0xff\n\t\t\t// if the slot is erased. The specs don't mention anything\n\t\t\t// for the Set command, so we just assume the same is okay\n\t\t\tthis.weekday ?? 0xff,\n\t\t\tthis.startHour ?? 0xff,\n\t\t\tthis.startMinute ?? 0xff,\n\t\t\tthis.stopHour ?? 0xff,\n\t\t\tthis.stopMinute ?? 0xff,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord;\n\t\tif (this.action === ScheduleEntryLockSetAction.Erase) {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"erase\",\n\t\t\t};\n\t\t} else {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"set\",\n\t\t\t\tweekday: getEnumMemberName(\n\t\t\t\t\tScheduleEntryLockWeekday,\n\t\t\t\t\tthis.weekday!,\n\t\t\t\t),\n\t\t\t\t\"start time\": formatTime(\n\t\t\t\t\tthis.startHour ?? 0,\n\t\t\t\t\tthis.startMinute ?? 0,\n\t\t\t\t),\n\t\t\t\t\"end time\": formatTime(\n\t\t\t\t\tthis.stopHour ?? 0,\n\t\t\t\t\tthis.stopMinute ?? 0,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type ScheduleEntryLockCCWeekDayScheduleReportOptions =\n\t& ScheduleEntryLockSlotId\n\t& AllOrNone<ScheduleEntryLockWeekDaySchedule>;\n\n@CCCommand(ScheduleEntryLockCommand.WeekDayScheduleReport)\nexport class ScheduleEntryLockCCWeekDayScheduleReport\n\textends ScheduleEntryLockCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCWeekDayScheduleReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t\tthis.weekday = options.weekday;\n\t\tthis.startHour = options.startHour;\n\t\tthis.startMinute = options.startMinute;\n\t\tthis.stopHour = options.stopHour;\n\t\tthis.stopMinute = options.stopMinute;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCWeekDayScheduleReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst userId = raw.payload[0];\n\t\tconst slotId = raw.payload[1];\n\n\t\tlet ccOptions: ScheduleEntryLockCCWeekDayScheduleReportOptions = {\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t};\n\n\t\tlet weekday: ScheduleEntryLockWeekday | undefined;\n\t\tlet startHour: number | undefined;\n\t\tlet startMinute: number | undefined;\n\t\tlet stopHour: number | undefined;\n\t\tlet stopMinute: number | undefined;\n\n\t\tif (raw.payload.length >= 7) {\n\t\t\tif (raw.payload[2] !== 0xff) {\n\t\t\t\tweekday = raw.payload[2];\n\t\t\t}\n\t\t\tif (raw.payload[3] !== 0xff) {\n\t\t\t\tstartHour = raw.payload[3];\n\t\t\t}\n\t\t\tif (raw.payload[4] !== 0xff) {\n\t\t\t\tstartMinute = raw.payload[4];\n\t\t\t}\n\t\t\tif (raw.payload[5] !== 0xff) {\n\t\t\t\tstopHour = raw.payload[5];\n\t\t\t}\n\t\t\tif (raw.payload[6] !== 0xff) {\n\t\t\t\tstopMinute = raw.payload[6];\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tweekday != undefined\n\t\t\t&& startHour != undefined\n\t\t\t&& startMinute != undefined\n\t\t\t&& stopHour != undefined\n\t\t\t&& stopMinute != undefined\n\t\t) {\n\t\t\tccOptions = {\n\t\t\t\t...ccOptions,\n\t\t\t\tweekday,\n\t\t\t\tstartHour,\n\t\t\t\tstartMinute,\n\t\t\t\tstopHour,\n\t\t\t\tstopMinute,\n\t\t\t};\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t...ccOptions,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\tpublic weekday?: ScheduleEntryLockWeekday;\n\tpublic startHour?: number;\n\tpublic startMinute?: number;\n\tpublic stopHour?: number;\n\tpublic stopMinute?: number;\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tpersistSchedule.call(\n\t\t\tthis,\n\t\t\tctx,\n\t\t\tScheduleEntryLockScheduleKind.WeekDay,\n\t\t\tthis.userId,\n\t\t\tthis.slotId,\n\t\t\tthis.weekday != undefined\n\t\t\t\t? {\n\t\t\t\t\tweekday: this.weekday,\n\t\t\t\t\tstartHour: this.startHour!,\n\t\t\t\t\tstartMinute: this.startMinute!,\n\t\t\t\t\tstopHour: this.stopHour!,\n\t\t\t\t\tstopMinute: this.stopMinute!,\n\t\t\t\t}\n\t\t\t\t: false,\n\t\t);\n\n\t\treturn true;\n\t}\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.userId,\n\t\t\tthis.slotId,\n\t\t\tthis.weekday ?? 0xff,\n\t\t\tthis.startHour ?? 0xff,\n\t\t\tthis.startMinute ?? 0xff,\n\t\t\tthis.stopHour ?? 0xff,\n\t\t\tthis.stopMinute ?? 0xff,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord;\n\t\tif (this.weekday == undefined) {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\tschedule: \"(empty)\",\n\t\t\t};\n\t\t} else {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\tweekday: getEnumMemberName(\n\t\t\t\t\tScheduleEntryLockWeekday,\n\t\t\t\t\tthis.weekday,\n\t\t\t\t),\n\t\t\t\t\"start time\": formatTime(\n\t\t\t\t\tthis.startHour ?? 0,\n\t\t\t\t\tthis.startMinute ?? 0,\n\t\t\t\t),\n\t\t\t\t\"end time\": formatTime(\n\t\t\t\t\tthis.stopHour ?? 0,\n\t\t\t\t\tthis.stopMinute ?? 0,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type ScheduleEntryLockCCWeekDayScheduleGetOptions =\n\tScheduleEntryLockSlotId;\n\n@CCCommand(ScheduleEntryLockCommand.WeekDayScheduleGet)\n@expectedCCResponse(ScheduleEntryLockCCWeekDayScheduleReport)\nexport class ScheduleEntryLockCCWeekDayScheduleGet extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCWeekDayScheduleGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCWeekDayScheduleGet {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst userId = raw.payload[0];\n\t\tconst slotId = raw.payload[1];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.userId, this.slotId]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t},\n\t\t};\n\t}\n}\n\n/** @publicAPI */\nexport type ScheduleEntryLockCCYearDayScheduleSetOptions =\n\t& ScheduleEntryLockSlotId\n\t& (\n\t\t| {\n\t\t\taction: ScheduleEntryLockSetAction.Erase;\n\t\t}\n\t\t| ({\n\t\t\taction: ScheduleEntryLockSetAction.Set;\n\t\t} & ScheduleEntryLockYearDaySchedule)\n\t);\n\n@CCCommand(ScheduleEntryLockCommand.YearDayScheduleSet)\n@useSupervision()\nexport class ScheduleEntryLockCCYearDayScheduleSet extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCYearDayScheduleSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t\tthis.action = options.action;\n\t\tif (options.action === ScheduleEntryLockSetAction.Set) {\n\t\t\tthis.startYear = options.startYear;\n\t\t\tthis.startMonth = options.startMonth;\n\t\t\tthis.startDay = options.startDay;\n\t\t\tthis.startHour = options.startHour;\n\t\t\tthis.startMinute = options.startMinute;\n\t\t\tthis.stopYear = options.stopYear;\n\t\t\tthis.stopMonth = options.stopMonth;\n\t\t\tthis.stopDay = options.stopDay;\n\t\t\tthis.stopHour = options.stopHour;\n\t\t\tthis.stopMinute = options.stopMinute;\n\t\t}\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCYearDayScheduleSet {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst action: ScheduleEntryLockSetAction = raw.payload[0];\n\n\t\tvalidatePayload(\n\t\t\taction === ScheduleEntryLockSetAction.Set\n\t\t\t\t|| action === ScheduleEntryLockSetAction.Erase,\n\t\t);\n\t\tconst userId = raw.payload[1];\n\t\tconst slotId = raw.payload[2];\n\n\t\tif (action !== ScheduleEntryLockSetAction.Set) {\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\taction,\n\t\t\t\tuserId,\n\t\t\t\tslotId,\n\t\t\t});\n\t\t}\n\n\t\tvalidatePayload(raw.payload.length >= 13);\n\t\tconst startYear = raw.payload[3];\n\t\tconst startMonth = raw.payload[4];\n\t\tconst startDay = raw.payload[5];\n\t\tconst startHour = raw.payload[6];\n\t\tconst startMinute = raw.payload[7];\n\t\tconst stopYear = raw.payload[8];\n\t\tconst stopMonth = raw.payload[9];\n\t\tconst stopDay = raw.payload[10];\n\t\tconst stopHour = raw.payload[11];\n\t\tconst stopMinute = raw.payload[12];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\taction,\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t\tstartYear,\n\t\t\tstartMonth,\n\t\t\tstartDay,\n\t\t\tstartHour,\n\t\t\tstartMinute,\n\t\t\tstopYear,\n\t\t\tstopMonth,\n\t\t\tstopDay,\n\t\t\tstopHour,\n\t\t\tstopMinute,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\n\tpublic action: ScheduleEntryLockSetAction;\n\n\tpublic startYear?: number;\n\tpublic startMonth?: number;\n\tpublic startDay?: number;\n\tpublic startHour?: number;\n\tpublic startMinute?: number;\n\tpublic stopYear?: number;\n\tpublic stopMonth?: number;\n\tpublic stopDay?: number;\n\tpublic stopHour?: number;\n\tpublic stopMinute?: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.action,\n\t\t\tthis.userId,\n\t\t\tthis.slotId,\n\t\t\t// The report should have these fields set to 0xff\n\t\t\t// if the slot is erased. The specs don't mention anything\n\t\t\t// for the Set command, so we just assume the same is okay\n\t\t\tthis.startYear ?? 0xff,\n\t\t\tthis.startMonth ?? 0xff,\n\t\t\tthis.startDay ?? 0xff,\n\t\t\tthis.startHour ?? 0xff,\n\t\t\tthis.startMinute ?? 0xff,\n\t\t\tthis.stopYear ?? 0xff,\n\t\t\tthis.stopMonth ?? 0xff,\n\t\t\tthis.stopDay ?? 0xff,\n\t\t\tthis.stopHour ?? 0xff,\n\t\t\tthis.stopMinute ?? 0xff,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord;\n\t\tif (this.action === ScheduleEntryLockSetAction.Erase) {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"erase\",\n\t\t\t};\n\t\t} else {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"set\",\n\t\t\t\t\"start date\": `${\n\t\t\t\t\tformatDate(\n\t\t\t\t\t\tthis.startYear ?? 0,\n\t\t\t\t\t\tthis.startMonth ?? 0,\n\t\t\t\t\t\tthis.startDay ?? 0,\n\t\t\t\t\t)\n\t\t\t\t} ${formatTime(this.startHour ?? 0, this.startMinute ?? 0)}`,\n\t\t\t\t\"end date\": `${\n\t\t\t\t\tformatDate(\n\t\t\t\t\t\tthis.stopYear ?? 0,\n\t\t\t\t\t\tthis.stopMonth ?? 0,\n\t\t\t\t\t\tthis.stopDay ?? 0,\n\t\t\t\t\t)\n\t\t\t\t} ${formatTime(this.stopHour ?? 0, this.stopMinute ?? 0)}`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type ScheduleEntryLockCCYearDayScheduleReportOptions =\n\t& ScheduleEntryLockSlotId\n\t& AllOrNone<ScheduleEntryLockYearDaySchedule>;\n\n@CCCommand(ScheduleEntryLockCommand.YearDayScheduleReport)\nexport class ScheduleEntryLockCCYearDayScheduleReport\n\textends ScheduleEntryLockCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCYearDayScheduleReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t\tthis.startYear = options.startYear;\n\t\tthis.startMonth = options.startMonth;\n\t\tthis.startDay = options.startDay;\n\t\tthis.startHour = options.startHour;\n\t\tthis.startMinute = options.startMinute;\n\t\tthis.stopYear = options.stopYear;\n\t\tthis.stopMonth = options.stopMonth;\n\t\tthis.stopDay = options.stopDay;\n\t\tthis.stopHour = options.stopHour;\n\t\tthis.stopMinute = options.stopMinute;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCYearDayScheduleReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst userId = raw.payload[0];\n\t\tconst slotId = raw.payload[1];\n\n\t\tlet ccOptions: ScheduleEntryLockCCYearDayScheduleReportOptions = {\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t};\n\n\t\tlet startYear: number | undefined;\n\t\tlet startMonth: number | undefined;\n\t\tlet startDay: number | undefined;\n\t\tlet startHour: number | undefined;\n\t\tlet startMinute: number | undefined;\n\t\tlet stopYear: number | undefined;\n\t\tlet stopMonth: number | undefined;\n\t\tlet stopDay: number | undefined;\n\t\tlet stopHour: number | undefined;\n\t\tlet stopMinute: number | undefined;\n\n\t\tif (raw.payload.length >= 12) {\n\t\t\tif (raw.payload[2] !== 0xff) {\n\t\t\t\tstartYear = raw.payload[2];\n\t\t\t}\n\t\t\tif (raw.payload[3] !== 0xff) {\n\t\t\t\tstartMonth = raw.payload[3];\n\t\t\t}\n\t\t\tif (raw.payload[4] !== 0xff) {\n\t\t\t\tstartDay = raw.payload[4];\n\t\t\t}\n\t\t\tif (raw.payload[5] !== 0xff) {\n\t\t\t\tstartHour = raw.payload[5];\n\t\t\t}\n\t\t\tif (raw.payload[6] !== 0xff) {\n\t\t\t\tstartMinute = raw.payload[6];\n\t\t\t}\n\t\t\tif (raw.payload[7] !== 0xff) {\n\t\t\t\tstopYear = raw.payload[7];\n\t\t\t}\n\t\t\tif (raw.payload[8] !== 0xff) {\n\t\t\t\tstopMonth = raw.payload[8];\n\t\t\t}\n\t\t\tif (raw.payload[9] !== 0xff) {\n\t\t\t\tstopDay = raw.payload[9];\n\t\t\t}\n\t\t\tif (raw.payload[10] !== 0xff) {\n\t\t\t\tstopHour = raw.payload[10];\n\t\t\t}\n\t\t\tif (raw.payload[11] !== 0xff) {\n\t\t\t\tstopMinute = raw.payload[11];\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tstartYear != undefined\n\t\t\t&& startMonth != undefined\n\t\t\t&& startDay != undefined\n\t\t\t&& startHour != undefined\n\t\t\t&& startMinute != undefined\n\t\t\t&& stopYear != undefined\n\t\t\t&& stopMonth != undefined\n\t\t\t&& stopDay != undefined\n\t\t\t&& stopHour != undefined\n\t\t\t&& stopMinute != undefined\n\t\t) {\n\t\t\tccOptions = {\n\t\t\t\t...ccOptions,\n\t\t\t\tstartYear,\n\t\t\t\tstartMonth,\n\t\t\t\tstartDay,\n\t\t\t\tstartHour,\n\t\t\t\tstartMinute,\n\t\t\t\tstopYear,\n\t\t\t\tstopMonth,\n\t\t\t\tstopDay,\n\t\t\t\tstopHour,\n\t\t\t\tstopMinute,\n\t\t\t};\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t...ccOptions,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\tpublic startYear?: number;\n\tpublic startMonth?: number;\n\tpublic startDay?: number;\n\tpublic startHour?: number;\n\tpublic startMinute?: number;\n\tpublic stopYear?: number;\n\tpublic stopMonth?: number;\n\tpublic stopDay?: number;\n\tpublic stopHour?: number;\n\tpublic stopMinute?: number;\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tpersistSchedule.call(\n\t\t\tthis,\n\t\t\tctx,\n\t\t\tScheduleEntryLockScheduleKind.YearDay,\n\t\t\tthis.userId,\n\t\t\tthis.slotId,\n\t\t\tthis.startYear != undefined\n\t\t\t\t? {\n\t\t\t\t\tstartYear: this.startYear,\n\t\t\t\t\tstartMonth: this.startMonth!,\n\t\t\t\t\tstartDay: this.startDay!,\n\t\t\t\t\tstartHour: this.startHour!,\n\t\t\t\t\tstartMinute: this.startMinute!,\n\t\t\t\t\tstopYear: this.stopYear!,\n\t\t\t\t\tstopMonth: this.stopMonth!,\n\t\t\t\t\tstopDay: this.stopDay!,\n\t\t\t\t\tstopHour: this.stopHour!,\n\t\t\t\t\tstopMinute: this.stopMinute!,\n\t\t\t\t}\n\t\t\t\t: false,\n\t\t);\n\n\t\treturn true;\n\t}\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.userId,\n\t\t\tthis.slotId,\n\t\t\tthis.startYear ?? 0xff,\n\t\t\tthis.startMonth ?? 0xff,\n\t\t\tthis.startDay ?? 0xff,\n\t\t\tthis.startHour ?? 0xff,\n\t\t\tthis.startMinute ?? 0xff,\n\t\t\tthis.stopYear ?? 0xff,\n\t\t\tthis.stopMonth ?? 0xff,\n\t\t\tthis.stopDay ?? 0xff,\n\t\t\tthis.stopHour ?? 0xff,\n\t\t\tthis.stopMinute ?? 0xff,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord;\n\t\tif (this.startYear !== undefined) {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\tschedule: \"(empty)\",\n\t\t\t};\n\t\t} else {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"set\",\n\t\t\t\t\"start date\": `${\n\t\t\t\t\tformatDate(\n\t\t\t\t\t\tthis.startYear ?? 0,\n\t\t\t\t\t\tthis.startMonth ?? 0,\n\t\t\t\t\t\tthis.startDay ?? 0,\n\t\t\t\t\t)\n\t\t\t\t} ${formatTime(this.startHour ?? 0, this.startMinute ?? 0)}`,\n\t\t\t\t\"end date\": `${\n\t\t\t\t\tformatDate(\n\t\t\t\t\t\tthis.stopYear ?? 0,\n\t\t\t\t\t\tthis.stopMonth ?? 0,\n\t\t\t\t\t\tthis.stopDay ?? 0,\n\t\t\t\t\t)\n\t\t\t\t} ${formatTime(this.stopHour ?? 0, this.stopMinute ?? 0)}`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type ScheduleEntryLockCCYearDayScheduleGetOptions =\n\tScheduleEntryLockSlotId;\n\n@CCCommand(ScheduleEntryLockCommand.YearDayScheduleGet)\n@expectedCCResponse(ScheduleEntryLockCCYearDayScheduleReport)\nexport class ScheduleEntryLockCCYearDayScheduleGet extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCYearDayScheduleGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCYearDayScheduleGet {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst userId = raw.payload[0];\n\t\tconst slotId = raw.payload[1];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.userId, this.slotId]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ScheduleEntryLockCCTimeOffsetSetOptions {\n\tstandardOffset: number;\n\tdstOffset: number;\n}\n\n@CCCommand(ScheduleEntryLockCommand.TimeOffsetSet)\n@useSupervision()\nexport class ScheduleEntryLockCCTimeOffsetSet extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCTimeOffsetSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.standardOffset = options.standardOffset;\n\t\tthis.dstOffset = options.dstOffset;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCTimeOffsetSet {\n\t\tconst { standardOffset, dstOffset } = parseTimezone(raw.payload);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tstandardOffset,\n\t\t\tdstOffset,\n\t\t});\n\t}\n\n\tpublic standardOffset: number;\n\tpublic dstOffset: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = encodeTimezone({\n\t\t\tstandardOffset: this.standardOffset,\n\t\t\tdstOffset: this.dstOffset,\n\t\t});\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"standard time offset\": `${this.standardOffset} minutes`,\n\t\t\t\t\"DST offset\": `${this.dstOffset} minutes`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface ScheduleEntryLockCCTimeOffsetReportOptions {\n\tstandardOffset: number;\n\tdstOffset: number;\n}\n\n@CCCommand(ScheduleEntryLockCommand.TimeOffsetReport)\nexport class ScheduleEntryLockCCTimeOffsetReport extends ScheduleEntryLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ScheduleEntryLockCCTimeOffsetReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.standardOffset = options.standardOffset;\n\t\tthis.dstOffset = options.dstOffset;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCTimeOffsetReport {\n\t\tconst { standardOffset, dstOffset } = parseTimezone(raw.payload);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tstandardOffset,\n\t\t\tdstOffset,\n\t\t});\n\t}\n\n\tpublic standardOffset: number;\n\tpublic dstOffset: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = encodeTimezone({\n\t\t\tstandardOffset: this.standardOffset,\n\t\t\tdstOffset: this.dstOffset,\n\t\t});\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"standard time offset\": `${this.standardOffset} minutes`,\n\t\t\t\t\"DST offset\": `${this.dstOffset} minutes`,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(ScheduleEntryLockCommand.TimeOffsetGet)\n@expectedCCResponse(ScheduleEntryLockCCTimeOffsetReport)\nexport class ScheduleEntryLockCCTimeOffsetGet extends ScheduleEntryLockCC {}\n\n/** @publicAPI */\nexport type ScheduleEntryLockCCDailyRepeatingScheduleSetOptions =\n\t& ScheduleEntryLockSlotId\n\t& (\n\t\t| {\n\t\t\taction: ScheduleEntryLockSetAction.Erase;\n\t\t}\n\t\t| ({\n\t\t\taction: ScheduleEntryLockSetAction.Set;\n\t\t} & ScheduleEntryLockDailyRepeatingSchedule)\n\t);\n\n@CCCommand(ScheduleEntryLockCommand.DailyRepeatingScheduleSet)\n@useSupervision()\nexport class ScheduleEntryLockCCDailyRepeatingScheduleSet\n\textends ScheduleEntryLockCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<\n\t\t\tScheduleEntryLockCCDailyRepeatingScheduleSetOptions\n\t\t>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t\tthis.action = options.action;\n\t\tif (options.action === ScheduleEntryLockSetAction.Set) {\n\t\t\tthis.weekdays = options.weekdays;\n\t\t\tthis.startHour = options.startHour;\n\t\t\tthis.startMinute = options.startMinute;\n\t\t\tthis.durationHour = options.durationHour;\n\t\t\tthis.durationMinute = options.durationMinute;\n\t\t}\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCDailyRepeatingScheduleSet {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst action: ScheduleEntryLockSetAction = raw.payload[0];\n\n\t\tvalidatePayload(\n\t\t\taction === ScheduleEntryLockSetAction.Set\n\t\t\t\t|| action === ScheduleEntryLockSetAction.Erase,\n\t\t);\n\t\tconst userId = raw.payload[1];\n\t\tconst slotId = raw.payload[2];\n\n\t\tif (action !== ScheduleEntryLockSetAction.Set) {\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\taction,\n\t\t\t\tuserId,\n\t\t\t\tslotId,\n\t\t\t});\n\t\t}\n\n\t\tvalidatePayload(raw.payload.length >= 8);\n\t\tconst weekdays: ScheduleEntryLockWeekday[] = parseBitMask(\n\t\t\traw.payload.subarray(3, 4),\n\t\t\tScheduleEntryLockWeekday.Sunday,\n\t\t);\n\t\tconst startHour = raw.payload[4];\n\t\tconst startMinute = raw.payload[5];\n\t\tconst durationHour = raw.payload[6];\n\t\tconst durationMinute = raw.payload[7];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\taction,\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t\tweekdays,\n\t\t\tstartHour,\n\t\t\tstartMinute,\n\t\t\tdurationHour,\n\t\t\tdurationMinute,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\n\tpublic action: ScheduleEntryLockSetAction;\n\n\tpublic weekdays?: ScheduleEntryLockWeekday[];\n\tpublic startHour?: number;\n\tpublic startMinute?: number;\n\tpublic durationHour?: number;\n\tpublic durationMinute?: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.action, this.userId, this.slotId]);\n\t\tif (this.action === ScheduleEntryLockSetAction.Set) {\n\t\t\tthis.payload = Bytes.concat([\n\t\t\t\tthis.payload,\n\t\t\t\tencodeBitMask(\n\t\t\t\t\tthis.weekdays!,\n\t\t\t\t\tScheduleEntryLockWeekday.Saturday,\n\t\t\t\t\tScheduleEntryLockWeekday.Sunday,\n\t\t\t\t),\n\t\t\t\tBytes.from([\n\t\t\t\t\tthis.startHour!,\n\t\t\t\t\tthis.startMinute!,\n\t\t\t\t\tthis.durationHour!,\n\t\t\t\t\tthis.durationMinute!,\n\t\t\t\t]),\n\t\t\t]);\n\t\t} else {\n\t\t\t// Not sure if this is correct\n\t\t\tthis.payload = Bytes.concat([this.payload, Bytes.alloc(5, 0xff)]);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord;\n\t\tif (this.action === ScheduleEntryLockSetAction.Erase) {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"erase\",\n\t\t\t};\n\t\t} else {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"set\",\n\t\t\t\tweekdays: this.weekdays!.map((w) =>\n\t\t\t\t\tgetEnumMemberName(ScheduleEntryLockWeekday, w)\n\t\t\t\t).join(\", \"),\n\t\t\t\t\"start time\": formatTime(\n\t\t\t\t\tthis.startHour ?? 0,\n\t\t\t\t\tthis.startMinute ?? 0,\n\t\t\t\t),\n\t\t\t\tduration: formatTime(\n\t\t\t\t\tthis.durationHour ?? 0,\n\t\t\t\t\tthis.durationMinute ?? 0,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type ScheduleEntryLockCCDailyRepeatingScheduleReportOptions =\n\t& ScheduleEntryLockSlotId\n\t& AllOrNone<ScheduleEntryLockDailyRepeatingSchedule>;\n\n@CCCommand(ScheduleEntryLockCommand.DailyRepeatingScheduleReport)\nexport class ScheduleEntryLockCCDailyRepeatingScheduleReport\n\textends ScheduleEntryLockCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<\n\t\t\tScheduleEntryLockCCDailyRepeatingScheduleReportOptions\n\t\t>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t\tthis.weekdays = options.weekdays;\n\t\tthis.startHour = options.startHour;\n\t\tthis.startMinute = options.startMinute;\n\t\tthis.durationHour = options.durationHour;\n\t\tthis.durationMinute = options.durationMinute;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCDailyRepeatingScheduleReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst userId = raw.payload[0];\n\t\tconst slotId = raw.payload[1];\n\n\t\tif (raw.payload.length >= 7 && raw.payload[2] !== 0) {\n\t\t\t// Only parse the schedule if it is present and some weekday is selected\n\t\t\tconst weekdays: ScheduleEntryLockWeekday[] = parseBitMask(\n\t\t\t\traw.payload.subarray(2, 3),\n\t\t\t\tScheduleEntryLockWeekday.Sunday,\n\t\t\t);\n\t\t\tconst startHour = raw.payload[3];\n\t\t\tconst startMinute = raw.payload[4];\n\t\t\tconst durationHour = raw.payload[5];\n\t\t\tconst durationMinute = raw.payload[6];\n\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\tuserId,\n\t\t\t\tslotId,\n\t\t\t\tweekdays,\n\t\t\t\tstartHour,\n\t\t\t\tstartMinute,\n\t\t\t\tdurationHour,\n\t\t\t\tdurationMinute,\n\t\t\t});\n\t\t} else {\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\tuserId,\n\t\t\t\tslotId,\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\n\tpublic weekdays?: ScheduleEntryLockWeekday[];\n\tpublic startHour?: number;\n\tpublic startMinute?: number;\n\tpublic durationHour?: number;\n\tpublic durationMinute?: number;\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\tpersistSchedule.call(\n\t\t\tthis,\n\t\t\tctx,\n\t\t\tScheduleEntryLockScheduleKind.DailyRepeating,\n\t\t\tthis.userId,\n\t\t\tthis.slotId,\n\t\t\tthis.weekdays?.length\n\t\t\t\t? {\n\t\t\t\t\tweekdays: this.weekdays,\n\t\t\t\t\tstartHour: this.startHour!,\n\t\t\t\t\tstartMinute: this.startMinute!,\n\t\t\t\t\tdurationHour: this.durationHour!,\n\t\t\t\t\tdurationMinute: this.durationMinute!,\n\t\t\t\t}\n\t\t\t\t: false,\n\t\t);\n\n\t\treturn true;\n\t}\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.userId, this.slotId]);\n\t\tif (this.weekdays) {\n\t\t\tthis.payload = Bytes.concat([\n\t\t\t\tthis.payload,\n\t\t\t\tencodeBitMask(\n\t\t\t\t\tthis.weekdays,\n\t\t\t\t\tScheduleEntryLockWeekday.Saturday,\n\t\t\t\t\tScheduleEntryLockWeekday.Sunday,\n\t\t\t\t),\n\t\t\t\tBytes.from([\n\t\t\t\t\tthis.startHour!,\n\t\t\t\t\tthis.startMinute!,\n\t\t\t\t\tthis.durationHour!,\n\t\t\t\t\tthis.durationMinute!,\n\t\t\t\t]),\n\t\t\t]);\n\t\t} else {\n\t\t\t// Not sure if this is correct, but at least we won't parse it incorrectly ourselves when setting everything to 0\n\t\t\tthis.payload = Bytes.concat([this.payload, Bytes.alloc(5, 0)]);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord;\n\t\tif (!this.weekdays) {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\tschedule: \"(empty)\",\n\t\t\t};\n\t\t} else {\n\t\t\tmessage = {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t\taction: \"set\",\n\t\t\t\tweekdays: this.weekdays\n\t\t\t\t\t.map((w) => getEnumMemberName(ScheduleEntryLockWeekday, w))\n\t\t\t\t\t.join(\", \"),\n\t\t\t\t\"start time\": formatTime(\n\t\t\t\t\tthis.startHour ?? 0,\n\t\t\t\t\tthis.startMinute ?? 0,\n\t\t\t\t),\n\t\t\t\tduration: formatTime(\n\t\t\t\t\tthis.durationHour ?? 0,\n\t\t\t\t\tthis.durationMinute ?? 0,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type ScheduleEntryLockCCDailyRepeatingScheduleGetOptions =\n\tScheduleEntryLockSlotId;\n\n@CCCommand(ScheduleEntryLockCommand.DailyRepeatingScheduleGet)\n@expectedCCResponse(ScheduleEntryLockCCDailyRepeatingScheduleReport)\nexport class ScheduleEntryLockCCDailyRepeatingScheduleGet\n\textends ScheduleEntryLockCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<\n\t\t\tScheduleEntryLockCCDailyRepeatingScheduleGetOptions\n\t\t>,\n\t) {\n\t\tsuper(options);\n\t\tthis.userId = options.userId;\n\t\tthis.slotId = options.slotId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ScheduleEntryLockCCDailyRepeatingScheduleGet {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst userId = raw.payload[0];\n\t\tconst slotId = raw.payload[1];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tuserId,\n\t\t\tslotId,\n\t\t});\n\t}\n\n\tpublic userId: number;\n\tpublic slotId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Bytes {\n\t\tthis.payload = Bytes.from([this.userId, this.slotId]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"user ID\": this.userId,\n\t\t\t\t\"slot #\": this.slotId,\n\t\t\t},\n\t\t};\n\t}\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["userId"]
7
7
  }