@zwave-js/cc 15.16.0 → 15.17.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 (246) hide show
  1. package/build/cjs/cc/AlarmSensorCC.js +1 -1
  2. package/build/cjs/cc/AlarmSensorCC.js.map +1 -1
  3. package/build/cjs/cc/ApplicationStatusCC.d.ts +33 -0
  4. package/build/cjs/cc/ApplicationStatusCC.js +229 -0
  5. package/build/cjs/cc/ApplicationStatusCC.js.map +7 -0
  6. package/build/cjs/cc/AssociationCC.js.map +1 -1
  7. package/build/cjs/cc/AssociationGroupInfoCC.js +4 -4
  8. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  9. package/build/cjs/cc/BarrierOperatorCC.js +9 -2
  10. package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
  11. package/build/cjs/cc/BasicCC.js +1 -1
  12. package/build/cjs/cc/BasicCC.js.map +1 -1
  13. package/build/cjs/cc/BatteryCC.js +2 -2
  14. package/build/cjs/cc/BatteryCC.js.map +1 -1
  15. package/build/cjs/cc/BinarySwitchCC.js +1 -1
  16. package/build/cjs/cc/BinarySwitchCC.js.map +1 -1
  17. package/build/cjs/cc/CRC16CC.js +2 -2
  18. package/build/cjs/cc/CRC16CC.js.map +2 -2
  19. package/build/cjs/cc/CentralSceneCC.js +2 -2
  20. package/build/cjs/cc/CentralSceneCC.js.map +1 -1
  21. package/build/cjs/cc/ClimateControlScheduleCC.js +5 -5
  22. package/build/cjs/cc/ClimateControlScheduleCC.js.map +2 -2
  23. package/build/cjs/cc/ClockCC.js +1 -1
  24. package/build/cjs/cc/ClockCC.js.map +1 -1
  25. package/build/cjs/cc/ColorSwitchCC.js.map +1 -1
  26. package/build/cjs/cc/ConfigurationCC.js +3 -3
  27. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  28. package/build/cjs/cc/DoorLockCC.js +3 -3
  29. package/build/cjs/cc/DoorLockCC.js.map +1 -1
  30. package/build/cjs/cc/EntryControlCC.js +3 -3
  31. package/build/cjs/cc/EntryControlCC.js.map +1 -1
  32. package/build/cjs/cc/IndicatorCC.js +5 -5
  33. package/build/cjs/cc/IndicatorCC.js.map +2 -2
  34. package/build/cjs/cc/IrrigationCC.js +3 -3
  35. package/build/cjs/cc/IrrigationCC.js.map +1 -1
  36. package/build/cjs/cc/LanguageCC.js +1 -1
  37. package/build/cjs/cc/LanguageCC.js.map +1 -1
  38. package/build/cjs/cc/ManufacturerProprietaryCC.js +1 -1
  39. package/build/cjs/cc/ManufacturerProprietaryCC.js.map +2 -2
  40. package/build/cjs/cc/ManufacturerSpecificCC.js +1 -1
  41. package/build/cjs/cc/ManufacturerSpecificCC.js.map +1 -1
  42. package/build/cjs/cc/MeterCC.js +3 -3
  43. package/build/cjs/cc/MeterCC.js.map +2 -2
  44. package/build/cjs/cc/MultiChannelAssociationCC.js.map +1 -1
  45. package/build/cjs/cc/MultiChannelCC.js +8 -8
  46. package/build/cjs/cc/MultiChannelCC.js.map +2 -2
  47. package/build/cjs/cc/MultilevelSensorCC.js.map +1 -1
  48. package/build/cjs/cc/MultilevelSwitchCC.js +1 -1
  49. package/build/cjs/cc/MultilevelSwitchCC.js.map +1 -1
  50. package/build/cjs/cc/NotificationCC.js +29 -23
  51. package/build/cjs/cc/NotificationCC.js.map +2 -2
  52. package/build/cjs/cc/ProtectionCC.js +10 -3
  53. package/build/cjs/cc/ProtectionCC.js.map +2 -2
  54. package/build/cjs/cc/SceneActuatorConfigurationCC.js +0 -1
  55. package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +2 -2
  56. package/build/cjs/cc/SceneControllerConfigurationCC.js +0 -1
  57. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
  58. package/build/cjs/cc/ScheduleEntryLockCC.js +1 -1
  59. package/build/cjs/cc/ScheduleEntryLockCC.js.map +1 -1
  60. package/build/cjs/cc/Security2CC.js +6 -5
  61. package/build/cjs/cc/Security2CC.js.map +2 -2
  62. package/build/cjs/cc/SecurityCC.js +3 -3
  63. package/build/cjs/cc/SecurityCC.js.map +2 -2
  64. package/build/cjs/cc/SoundSwitchCC.js +2 -2
  65. package/build/cjs/cc/SoundSwitchCC.js.map +1 -1
  66. package/build/cjs/cc/SupervisionCC.js +1 -1
  67. package/build/cjs/cc/SupervisionCC.js.map +2 -2
  68. package/build/cjs/cc/ThermostatFanModeCC.js +1 -1
  69. package/build/cjs/cc/ThermostatFanModeCC.js.map +1 -1
  70. package/build/cjs/cc/ThermostatFanStateCC.js +1 -1
  71. package/build/cjs/cc/ThermostatFanStateCC.js.map +1 -1
  72. package/build/cjs/cc/ThermostatModeCC.js +2 -2
  73. package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
  74. package/build/cjs/cc/ThermostatSetbackCC.js +1 -1
  75. package/build/cjs/cc/ThermostatSetbackCC.js.map +1 -1
  76. package/build/cjs/cc/ThermostatSetpointCC.js.map +1 -1
  77. package/build/cjs/cc/TimeCC.js +2 -2
  78. package/build/cjs/cc/TimeCC.js.map +1 -1
  79. package/build/cjs/cc/TransportServiceCC.js +1 -1
  80. package/build/cjs/cc/TransportServiceCC.js.map +2 -2
  81. package/build/cjs/cc/UserCodeCC.d.ts +8 -0
  82. package/build/cjs/cc/UserCodeCC.js +16 -4
  83. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  84. package/build/cjs/cc/VersionCC.js +3 -3
  85. package/build/cjs/cc/VersionCC.js.map +1 -1
  86. package/build/cjs/cc/WakeUpCC.js +2 -2
  87. package/build/cjs/cc/WakeUpCC.js.map +1 -1
  88. package/build/cjs/cc/WindowCoveringCC.d.ts +3 -1
  89. package/build/cjs/cc/WindowCoveringCC.js +28 -8
  90. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  91. package/build/cjs/cc/ZWavePlusCC.js +1 -1
  92. package/build/cjs/cc/ZWavePlusCC.js.map +1 -1
  93. package/build/cjs/cc/ZWaveProtocolCC.js.map +2 -2
  94. package/build/cjs/cc/_CCValues.generated.js.map +1 -1
  95. package/build/cjs/cc/index.d.ts +3 -0
  96. package/build/cjs/cc/index.js +8 -0
  97. package/build/cjs/cc/index.js.map +2 -2
  98. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +1 -1
  99. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  100. package/build/cjs/lib/API.d.ts +2 -0
  101. package/build/cjs/lib/API.js +2 -2
  102. package/build/cjs/lib/API.js.map +2 -2
  103. package/build/cjs/lib/CommandClass.d.ts +3 -3
  104. package/build/cjs/lib/CommandClass.js +6 -6
  105. package/build/cjs/lib/CommandClass.js.map +2 -2
  106. package/build/cjs/lib/_Types.d.ts +9 -0
  107. package/build/cjs/lib/_Types.js +15 -0
  108. package/build/cjs/lib/_Types.js.map +3 -3
  109. package/build/cjs/lib/utils.js +1 -1
  110. package/build/cjs/lib/utils.js.map +2 -2
  111. package/build/esm/cc/AlarmSensorCC.js +1 -1
  112. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  113. package/build/esm/cc/ApplicationStatusCC.d.ts +33 -0
  114. package/build/esm/cc/ApplicationStatusCC.d.ts.map +1 -0
  115. package/build/esm/cc/ApplicationStatusCC.js +175 -0
  116. package/build/esm/cc/ApplicationStatusCC.js.map +1 -0
  117. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  118. package/build/esm/cc/AssociationGroupInfoCC.js +4 -4
  119. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  120. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  121. package/build/esm/cc/BarrierOperatorCC.js +13 -2
  122. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  123. package/build/esm/cc/BasicCC.js +1 -1
  124. package/build/esm/cc/BasicCC.js.map +1 -1
  125. package/build/esm/cc/BatteryCC.js +2 -2
  126. package/build/esm/cc/BatteryCC.js.map +1 -1
  127. package/build/esm/cc/BinarySwitchCC.js +1 -1
  128. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  129. package/build/esm/cc/CRC16CC.d.ts.map +1 -1
  130. package/build/esm/cc/CRC16CC.js +2 -2
  131. package/build/esm/cc/CRC16CC.js.map +1 -1
  132. package/build/esm/cc/CentralSceneCC.js +2 -2
  133. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  134. package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
  135. package/build/esm/cc/ClimateControlScheduleCC.js +5 -5
  136. package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
  137. package/build/esm/cc/ClockCC.js +1 -1
  138. package/build/esm/cc/ClockCC.js.map +1 -1
  139. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  140. package/build/esm/cc/ConfigurationCC.js +3 -4
  141. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  142. package/build/esm/cc/DoorLockCC.js +3 -3
  143. package/build/esm/cc/DoorLockCC.js.map +1 -1
  144. package/build/esm/cc/EntryControlCC.js +3 -3
  145. package/build/esm/cc/EntryControlCC.js.map +1 -1
  146. package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
  147. package/build/esm/cc/IndicatorCC.js +6 -6
  148. package/build/esm/cc/IndicatorCC.js.map +1 -1
  149. package/build/esm/cc/IrrigationCC.js +3 -3
  150. package/build/esm/cc/IrrigationCC.js.map +1 -1
  151. package/build/esm/cc/LanguageCC.js +1 -1
  152. package/build/esm/cc/LanguageCC.js.map +1 -1
  153. package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
  154. package/build/esm/cc/ManufacturerProprietaryCC.js +1 -1
  155. package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
  156. package/build/esm/cc/ManufacturerSpecificCC.js +1 -1
  157. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  158. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  159. package/build/esm/cc/MeterCC.js +3 -3
  160. package/build/esm/cc/MeterCC.js.map +1 -1
  161. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  162. package/build/esm/cc/MultiChannelCC.js +8 -8
  163. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  164. package/build/esm/cc/MultilevelSwitchCC.js +1 -1
  165. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  166. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  167. package/build/esm/cc/NotificationCC.js +43 -31
  168. package/build/esm/cc/NotificationCC.js.map +1 -1
  169. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  170. package/build/esm/cc/ProtectionCC.js +16 -3
  171. package/build/esm/cc/ProtectionCC.js.map +1 -1
  172. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -1
  173. package/build/esm/cc/SceneActuatorConfigurationCC.js +0 -1
  174. package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
  175. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
  176. package/build/esm/cc/SceneControllerConfigurationCC.js +0 -1
  177. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  178. package/build/esm/cc/ScheduleEntryLockCC.js +1 -1
  179. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  180. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  181. package/build/esm/cc/Security2CC.js +6 -5
  182. package/build/esm/cc/Security2CC.js.map +1 -1
  183. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  184. package/build/esm/cc/SecurityCC.js +3 -3
  185. package/build/esm/cc/SecurityCC.js.map +1 -1
  186. package/build/esm/cc/SoundSwitchCC.js +2 -2
  187. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  188. package/build/esm/cc/SupervisionCC.js +1 -1
  189. package/build/esm/cc/SupervisionCC.js.map +1 -1
  190. package/build/esm/cc/ThermostatFanModeCC.js +1 -1
  191. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  192. package/build/esm/cc/ThermostatFanStateCC.js +1 -1
  193. package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
  194. package/build/esm/cc/ThermostatModeCC.js +2 -2
  195. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  196. package/build/esm/cc/ThermostatSetbackCC.js +1 -1
  197. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
  198. package/build/esm/cc/TimeCC.js +2 -2
  199. package/build/esm/cc/TimeCC.js.map +1 -1
  200. package/build/esm/cc/TransportServiceCC.d.ts.map +1 -1
  201. package/build/esm/cc/TransportServiceCC.js +2 -1
  202. package/build/esm/cc/TransportServiceCC.js.map +1 -1
  203. package/build/esm/cc/UserCodeCC.d.ts +8 -0
  204. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  205. package/build/esm/cc/UserCodeCC.js +20 -4
  206. package/build/esm/cc/UserCodeCC.js.map +1 -1
  207. package/build/esm/cc/VersionCC.js +3 -3
  208. package/build/esm/cc/VersionCC.js.map +1 -1
  209. package/build/esm/cc/WakeUpCC.js +2 -2
  210. package/build/esm/cc/WakeUpCC.js.map +1 -1
  211. package/build/esm/cc/WindowCoveringCC.d.ts +3 -1
  212. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  213. package/build/esm/cc/WindowCoveringCC.js +30 -9
  214. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  215. package/build/esm/cc/ZWavePlusCC.js +1 -1
  216. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  217. package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -1
  218. package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
  219. package/build/esm/cc/index.d.ts +3 -0
  220. package/build/esm/cc/index.d.ts.map +1 -1
  221. package/build/esm/cc/index.js +5 -0
  222. package/build/esm/cc/index.js.map +1 -1
  223. package/build/esm/cc/manufacturerProprietary/FibaroCC.js +1 -1
  224. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  225. package/build/esm/lib/API.d.ts +2 -0
  226. package/build/esm/lib/API.d.ts.map +1 -1
  227. package/build/esm/lib/API.js +2 -2
  228. package/build/esm/lib/API.js.map +1 -1
  229. package/build/esm/lib/CommandClass.d.ts +3 -3
  230. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  231. package/build/esm/lib/CommandClass.js +6 -6
  232. package/build/esm/lib/CommandClass.js.map +1 -1
  233. package/build/esm/lib/_Types.d.ts +9 -0
  234. package/build/esm/lib/_Types.d.ts.map +1 -1
  235. package/build/esm/lib/_Types.js +11 -0
  236. package/build/esm/lib/_Types.js.map +1 -1
  237. package/build/esm/lib/utils.js +1 -1
  238. package/build/esm/lib/utils.js.map +1 -1
  239. package/package.json +9 -10
  240. package/build/cjs/lib/ICommandClassContainer.d.ts +0 -2
  241. package/build/cjs/lib/ICommandClassContainer.js +0 -17
  242. package/build/cjs/lib/ICommandClassContainer.js.map +0 -7
  243. package/build/esm/lib/ICommandClassContainer.d.ts +0 -2
  244. package/build/esm/lib/ICommandClassContainer.d.ts.map +0 -1
  245. package/build/esm/lib/ICommandClassContainer.js +0 -2
  246. package/build/esm/lib/ICommandClassContainer.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/WindowCoveringCC.ts"],
4
- "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\tDuration,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tencodeBitMask,\n\tparseBitMask,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\tSET_VALUE_HOOKS,\n\ttype SetValueImplementation,\n\ttype SetValueImplementationHooksFactory,\n\tthrowMissingPropertyKey,\n\tthrowUnsupportedProperty,\n\tthrowUnsupportedPropertyKey,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\twindowCoveringParameterToLevelChangeLabel,\n\twindowCoveringParameterToMetadataStates,\n} from \"../lib/CCValueUtils.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\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\ttype LevelChangeDirection,\n\tWindowCoveringCommand,\n\tWindowCoveringParameter,\n} from \"../lib/_Types.js\";\n\nexport const WindowCoveringCCValues = V.defineCCValues(\n\tCommandClasses[\"Window Covering\"],\n\t{\n\t\t...V.staticProperty(\n\t\t\t\"supportedParameters\",\n\t\t\tundefined, // meta\n\t\t\t{ internal: true }, // value options\n\t\t),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"currentValue\",\n\t\t\t\"currentValue\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"currentValue\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.ReadOnlyLevel,\n\t\t\t\t\tlabel: `Current value - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\tstates: windowCoveringParameterToMetadataStates(parameter),\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"targetValue\",\n\t\t\t\"targetValue\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"targetValue\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\t// Only odd-numbered parameters have position support and are writable\n\t\t\t\tconst writeable = parameter % 2 === 1;\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.Level,\n\t\t\t\t\tlabel: `Target value - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\t// Only odd-numbered parameters have position support and are writable\n\t\t\t\t\twriteable: parameter % 2 === 1,\n\t\t\t\t\tstates: windowCoveringParameterToMetadataStates(parameter),\n\t\t\t\t\tallowManualEntry: writeable,\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"duration\",\n\t\t\t\"duration\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"duration\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => ({\n\t\t\t\t...ValueMetadata.ReadOnlyDuration,\n\t\t\t\tlabel: `Remaining duration - ${\n\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\tparameter,\n\t\t\t\t\t)\n\t\t\t\t}`,\n\t\t\t\tccSpecific: {\n\t\t\t\t\tparameter,\n\t\t\t\t},\n\t\t\t} as const),\n\t\t),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"levelChangeUp\",\n\t\t\t// The direction refers to the change in level, not the physical location\n\t\t\t\"levelChangeUp\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"levelChangeUp\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\t\tlabel: `${\n\t\t\t\t\t\twindowCoveringParameterToLevelChangeLabel(\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t\t\"up\",\n\t\t\t\t\t\t)\n\t\t\t\t\t} - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t\tstates: {\n\t\t\t\t\t\ttrue: \"Start\",\n\t\t\t\t\t\tfalse: \"Stop\",\n\t\t\t\t\t},\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"levelChangeDown\",\n\t\t\t// The direction refers to the change in level, not the physical location\n\t\t\t\"levelChangeDown\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"levelChangeDown\"\n\t\t\t\t&& typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\t\tlabel: `${\n\t\t\t\t\t\twindowCoveringParameterToLevelChangeLabel(\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t\t\"down\",\n\t\t\t\t\t\t)\n\t\t\t\t\t} - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t\tstates: {\n\t\t\t\t\t\ttrue: \"Start\",\n\t\t\t\t\t\tfalse: \"Stop\",\n\t\t\t\t\t},\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\t},\n);\n\n@API(CommandClasses[\"Window Covering\"])\nexport class WindowCoveringCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: WindowCoveringCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase WindowCoveringCommand.Get:\n\t\t\tcase WindowCoveringCommand.Set:\n\t\t\tcase WindowCoveringCommand.SupportedGet:\n\t\t\tcase WindowCoveringCommand.StartLevelChange:\n\t\t\tcase WindowCoveringCommand.StopLevelChange:\n\t\t\t\treturn true; // This is mandatory\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(\n\t\t\tthis: WindowCoveringCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t\tvalue,\n\t\t\toptions,\n\t\t) {\n\t\t\tconst valueId = {\n\t\t\t\tcommandClass: this.ccId,\n\t\t\t\tproperty,\n\t\t\t\tpropertyKey,\n\t\t\t};\n\n\t\t\tif (WindowCoveringCCValues.targetValue.is(valueId)) {\n\t\t\t\tif (\n\t\t\t\t\ttypeof propertyKey !== \"number\"\n\t\t\t\t\t// Only odd-numbered parameters have position support and are writable\n\t\t\t\t\t|| propertyKey % 2 === 0\n\t\t\t\t) {\n\t\t\t\t\tthrowUnsupportedPropertyKey(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\tpropertyKey!,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (typeof value !== \"number\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"number\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst parameter = propertyKey;\n\t\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\n\t\t\t\treturn this.set([{ parameter, value }], duration);\n\t\t\t} else if (\n\t\t\t\tWindowCoveringCCValues.levelChangeUp.is(valueId)\n\t\t\t\t|| WindowCoveringCCValues.levelChangeDown.is(valueId)\n\t\t\t) {\n\t\t\t\tif (typeof value !== \"boolean\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"boolean\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst parameter = propertyKey as number;\n\t\t\t\tconst direction = WindowCoveringCCValues.levelChangeUp.is(\n\t\t\t\t\t\tvalueId,\n\t\t\t\t\t)\n\t\t\t\t\t? \"up\"\n\t\t\t\t\t: \"down\";\n\n\t\t\t\tif (value) {\n\t\t\t\t\t// Perform the level change\n\t\t\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\t\t\t\t\treturn this.startLevelChange(\n\t\t\t\t\t\tparameter,\n\t\t\t\t\t\tdirection,\n\t\t\t\t\t\tduration,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn this.stopLevelChange(parameter);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tprotected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = (\n\t\t{ property, propertyKey },\n\t\tvalue,\n\t\toptions,\n\t) => {\n\t\tconst valueId = {\n\t\t\tcommandClass: this.ccId,\n\t\t\tproperty,\n\t\t\tpropertyKey,\n\t\t};\n\n\t\tif (WindowCoveringCCValues.targetValue.is(valueId)) {\n\t\t\tif (typeof propertyKey !== \"number\") return;\n\t\t\tconst parameter = propertyKey;\n\n\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\n\t\t\tconst currentValueValueId = WindowCoveringCCValues.currentValue(\n\t\t\t\tparameter,\n\t\t\t).endpoint(this.endpoint.index);\n\n\t\t\treturn {\n\t\t\t\t// Window Covering commands may take some time to be executed.\n\t\t\t\t// Therefore we try to supervise the command execution and delay the\n\t\t\t\t// optimistic update until the final result is received.\n\t\t\t\tsupervisionDelayedUpdates: true,\n\t\t\t\tsupervisionOnSuccess: async () => {\n\t\t\t\t\t// Only update currentValue for valid target values\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"number\"\n\t\t\t\t\t\t&& value >= 0\n\t\t\t\t\t\t&& value <= 99\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.tryGetValueDB()?.setValue(\n\t\t\t\t\t\t\tcurrentValueValueId,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (value === 255) {\n\t\t\t\t\t\t// We don't know the status now, so refresh the current value\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.get(parameter);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsupervisionOnFailure: async () => {\n\t\t\t\t\t// The transition failed, so now we don't know the status - refresh the current value\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.get(parameter);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// ignore\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\toptimisticallyUpdateRelatedValues: (\n\t\t\t\t\t_supervisedAndSuccessful,\n\t\t\t\t) => {\n\t\t\t\t\t// Only update currentValue for valid target values\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"number\"\n\t\t\t\t\t\t&& value >= 0\n\t\t\t\t\t\t&& value <= 99\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (this.isSinglecast()) {\n\t\t\t\t\t\t\tthis.tryGetValueDB()?.setValue(\n\t\t\t\t\t\t\t\tcurrentValueValueId,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (this.isMulticast()) {\n\t\t\t\t\t\t\t// Figure out which nodes were affected by this command\n\t\t\t\t\t\t\tconst affectedNodes = this.endpoint.node\n\t\t\t\t\t\t\t\t.physicalNodes.filter(\n\t\t\t\t\t\t\t\t\t(node) =>\n\t\t\t\t\t\t\t\t\t\tnode\n\t\t\t\t\t\t\t\t\t\t\t.getEndpoint(this.endpoint.index)\n\t\t\t\t\t\t\t\t\t\t\t?.supportsCC(this.ccId),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// and optimistically update the currentValue\n\t\t\t\t\t\t\tfor (const node of affectedNodes) {\n\t\t\t\t\t\t\t\tthis.host\n\t\t\t\t\t\t\t\t\t.tryGetValueDB(node.id)\n\t\t\t\t\t\t\t\t\t?.setValue(currentValueValueId, value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tverifyChanges: () => {\n\t\t\t\t\tif (this.isSinglecast()) {\n\t\t\t\t\t\t// We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n\t\t\t\t\t\tthis.schedulePoll(currentValueValueId, value, {\n\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// For multicasts, do not schedule a refresh - this could cause a LOT of traffic\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t};\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(\n\t\t\tthis: WindowCoveringCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"currentValue\":\n\t\t\t\tcase \"targetValue\":\n\t\t\t\tcase \"duration\":\n\t\t\t\t\tif (propertyKey == undefined) {\n\t\t\t\t\t\tthrowMissingPropertyKey(this.ccId, property);\n\t\t\t\t\t} else if (typeof propertyKey !== \"number\") {\n\t\t\t\t\t\tthrowUnsupportedPropertyKey(\n\t\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\tpropertyKey,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn (await this.get(propertyKey))?.[property];\n\t\t\t\tdefault:\n\t\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tpublic async getSupported(): Promise<\n\t\tMaybeNotKnown<readonly WindowCoveringParameter[]>\n\t> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.SupportedGet,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCSupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWindowCoveringCCSupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.supportedParameters;\n\t}\n\n\t@validateArgs({ strictEnums: true })\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async get(parameter: WindowCoveringParameter) {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.Get,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tparameter,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWindowCoveringCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"currentValue\", \"targetValue\", \"duration\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async set(\n\t\ttargetValues: {\n\t\t\tparameter: WindowCoveringParameter;\n\t\t\tvalue: number;\n\t\t}[],\n\t\tduration?: Duration | string,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.StartLevelChange,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\ttargetValues,\n\t\t\tduration,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs({ strictEnums: true })\n\tpublic async startLevelChange(\n\t\tparameter: WindowCoveringParameter,\n\t\tdirection: keyof typeof LevelChangeDirection,\n\t\tduration?: Duration | string,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.StartLevelChange,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCStartLevelChange({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tparameter,\n\t\t\tdirection,\n\t\t\tduration,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs({ strictEnums: true })\n\tpublic async stopLevelChange(\n\t\tparameter: WindowCoveringParameter,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.StopLevelChange,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCStopLevelChange({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tparameter,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses[\"Window Covering\"])\n@implementedVersion(1)\n@ccValues(WindowCoveringCCValues)\nexport class WindowCoveringCC extends CommandClass {\n\tdeclare ccCommand: WindowCoveringCommand;\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[\"Window Covering\"],\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 window covering parameters...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst supported = await api.getSupported();\n\t\tif (supported?.length) {\n\t\t\tconst logMessage = `supported window covering parameters:\n${\n\t\t\t\tsupported\n\t\t\t\t\t.map((p) =>\n\t\t\t\t\t\t`\u00B7 ${getEnumMemberName(WindowCoveringParameter, p)}`\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\\n\")\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\n\t\t\t// Create metadata for all supported parameters\n\t\t\tfor (const param of supported) {\n\t\t\t\t// Default values\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.currentValue(param),\n\t\t\t\t);\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.targetValue(param),\n\t\t\t\t);\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.duration(param),\n\t\t\t\t);\n\n\t\t\t\t// Level change values\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.levelChangeUp(param),\n\t\t\t\t);\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.levelChangeDown(param),\n\t\t\t\t);\n\n\t\t\t\t// And for the odd parameters (with position support), query the position\n\t\t\t\tif (param % 2 === 1) {\n\t\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\t\tmessage: `querying position for parameter ${\n\t\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\t\tparam,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}...`,\n\t\t\t\t\t\tdirection: \"outbound\",\n\t\t\t\t\t});\n\t\t\t\t\tawait api.get(param);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic translatePropertyKey(\n\t\tctx: GetValueDB,\n\t\tproperty: string | number,\n\t\tpropertyKey: string | number,\n\t): string | undefined {\n\t\tif (typeof propertyKey === \"number\") {\n\t\t\treturn getEnumMemberName(WindowCoveringParameter, propertyKey);\n\t\t}\n\t\treturn super.translatePropertyKey(ctx, property, propertyKey);\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCSupportedReportOptions {\n\tsupportedParameters: readonly WindowCoveringParameter[];\n}\n\n@CCCommand(WindowCoveringCommand.SupportedReport)\n@ccValueProperty(\n\t\"supportedParameters\",\n\tWindowCoveringCCValues.supportedParameters,\n)\nexport class WindowCoveringCCSupportedReport extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.supportedParameters = options.supportedParameters;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\n\t\tconst numBitmaskBytes = raw.payload[0] & 0b1111;\n\t\tvalidatePayload(raw.payload.length >= 1 + numBitmaskBytes);\n\t\tconst bitmask = raw.payload.subarray(1, 1 + numBitmaskBytes);\n\t\tconst supportedParameters: WindowCoveringParameter[] = parseBitMask(\n\t\t\tbitmask,\n\t\t\tWindowCoveringParameter[\"Outbound Left (no position)\"],\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportedParameters,\n\t\t});\n\t}\n\n\tpublic readonly supportedParameters: readonly WindowCoveringParameter[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst bitmask = encodeBitMask(\n\t\t\tthis.supportedParameters,\n\t\t\tundefined,\n\t\t\tWindowCoveringParameter[\"Outbound Left (no position)\"],\n\t\t).subarray(0, 15);\n\t\tconst numBitmaskBytes = bitmask.length & 0b1111;\n\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([numBitmaskBytes]),\n\t\t\tbitmask.subarray(0, numBitmaskBytes),\n\t\t]);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supported parameters\": this.supportedParameters\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(p) =>\n\t\t\t\t\t\t\t`\\n\u00B7 ${\n\t\t\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\t\t\tp,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(WindowCoveringCommand.SupportedGet)\n@expectedCCResponse(WindowCoveringCCSupportedReport)\nexport class WindowCoveringCCSupportedGet extends WindowCoveringCC {}\n\n// @publicAPI\nexport interface WindowCoveringCCReportOptions {\n\tparameter: WindowCoveringParameter;\n\tcurrentValue: number;\n\ttargetValue: number;\n\tduration: Duration;\n}\n\n@CCCommand(WindowCoveringCommand.Report)\n@ccValueProperty(\n\t\"currentValue\",\n\tWindowCoveringCCValues.currentValue,\n\t(self) => [self.parameter],\n)\n@ccValueProperty(\n\t\"targetValue\",\n\tWindowCoveringCCValues.targetValue,\n\t(self) => [self.parameter],\n)\n@ccValueProperty(\n\t\"duration\",\n\tWindowCoveringCCValues.duration,\n\t(self) => [self.parameter],\n)\nexport class WindowCoveringCCReport extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.parameter = options.parameter;\n\t\tthis.currentValue = options.currentValue;\n\t\tthis.targetValue = options.targetValue;\n\t\tthis.duration = options.duration;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCReport {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst parameter: WindowCoveringParameter = raw.payload[0];\n\t\tconst currentValue = raw.payload[1];\n\t\tconst targetValue = raw.payload[2];\n\t\tconst duration = Duration.parseReport(raw.payload[3])\n\t\t\t?? Duration.unknown();\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tparameter,\n\t\t\tcurrentValue,\n\t\t\ttargetValue,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic readonly parameter: WindowCoveringParameter;\n\n\tpublic readonly currentValue: number;\n\n\tpublic readonly targetValue: number;\n\n\tpublic readonly duration: Duration;\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\tparameter: getEnumMemberName(\n\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\tthis.parameter,\n\t\t\t\t),\n\t\t\t\t\"current value\": this.currentValue,\n\t\t\t\t\"target value\": this.targetValue,\n\t\t\t\tduration: this.duration.toString(),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCGetOptions {\n\tparameter: WindowCoveringParameter;\n}\n\nfunction testResponseForWindowCoveringGet(\n\tsent: WindowCoveringCCGet,\n\treceived: WindowCoveringCCReport,\n) {\n\treturn received.parameter === sent.parameter;\n}\n\n@CCCommand(WindowCoveringCommand.Get)\n@expectedCCResponse(WindowCoveringCCReport, testResponseForWindowCoveringGet)\nexport class WindowCoveringCCGet extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.parameter = options.parameter;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): WindowCoveringCCGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst parameter: WindowCoveringParameter = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tparameter,\n\t\t});\n\t}\n\n\tpublic parameter: WindowCoveringParameter;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.parameter]);\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\tparameter: getEnumMemberName(\n\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\tthis.parameter,\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCSetOptions {\n\ttargetValues: {\n\t\tparameter: WindowCoveringParameter;\n\t\tvalue: number;\n\t}[];\n\tduration?: Duration | string;\n}\n\n@CCCommand(WindowCoveringCommand.Set)\n@useSupervision()\nexport class WindowCoveringCCSet extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.targetValues = options.targetValues;\n\t\tthis.duration = Duration.from(options.duration);\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): WindowCoveringCCSet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst numEntries = raw.payload[0] & 0b11111;\n\n\t\tvalidatePayload(raw.payload.length >= 1 + numEntries * 2);\n\t\tconst targetValues: WindowCoveringCCSetOptions[\"targetValues\"] = [];\n\n\t\tfor (let i = 0; i < numEntries; i++) {\n\t\t\tconst offset = 1 + i * 2;\n\t\t\ttargetValues.push({\n\t\t\t\tparameter: raw.payload[offset],\n\t\t\t\tvalue: raw.payload[offset + 1],\n\t\t\t});\n\t\t}\n\n\t\tlet duration: Duration | undefined;\n\n\t\tif (raw.payload.length >= 2 + numEntries * 2) {\n\t\t\tduration = Duration.parseSet(\n\t\t\t\traw.payload[1 + numEntries * 2],\n\t\t\t);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttargetValues,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic targetValues: {\n\t\tparameter: WindowCoveringParameter;\n\t\tvalue: number;\n\t}[];\n\tpublic duration: Duration | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst numEntries = this.targetValues.length & 0b11111;\n\t\tthis.payload = new Bytes(2 + numEntries * 2);\n\n\t\tthis.payload[0] = numEntries;\n\t\tfor (let i = 0; i < numEntries; i++) {\n\t\t\tconst offset = 1 + i * 2;\n\t\t\tthis.payload[offset] = this.targetValues[i].parameter;\n\t\t\tthis.payload[offset + 1] = this.targetValues[i].value;\n\t\t}\n\n\t\tthis.payload[this.payload.length - 1] = (\n\t\t\tthis.duration ?? Duration.default()\n\t\t).serializeSet();\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {};\n\t\tfor (const { parameter, value } of this.targetValues) {\n\t\t\tmessage[getEnumMemberName(WindowCoveringParameter, parameter)] =\n\t\t\t\tvalue;\n\t\t}\n\t\tif (this.duration) {\n\t\t\tmessage.duration = this.duration.toString();\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCStartLevelChangeOptions {\n\tparameter: WindowCoveringParameter;\n\tdirection: keyof typeof LevelChangeDirection;\n\tduration?: Duration | string;\n}\n\n@CCCommand(WindowCoveringCommand.StartLevelChange)\n@useSupervision()\nexport class WindowCoveringCCStartLevelChange extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCStartLevelChangeOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.parameter = options.parameter;\n\t\tthis.direction = options.direction;\n\t\tthis.duration = Duration.from(options.duration);\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCStartLevelChange {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst direction = !!(raw.payload[0] & 0b0100_0000)\n\t\t\t? \"down\"\n\t\t\t: \"up\";\n\t\tconst parameter: WindowCoveringParameter = raw.payload[1];\n\t\tlet duration: Duration | undefined;\n\n\t\tif (raw.payload.length >= 3) {\n\t\t\tduration = Duration.parseSet(raw.payload[2]);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tdirection,\n\t\t\tparameter,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic parameter: WindowCoveringParameter;\n\tpublic direction: keyof typeof LevelChangeDirection;\n\tpublic duration: Duration | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.direction === \"down\" ? 0b0100_0000 : 0b0000_0000,\n\t\t\tthis.parameter,\n\t\t\t(this.duration ?? Duration.default()).serializeSet(),\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\tparameter: getEnumMemberName(\n\t\t\t\tWindowCoveringParameter,\n\t\t\t\tthis.parameter,\n\t\t\t),\n\t\t\tdirection: this.direction,\n\t\t};\n\t\tif (this.duration) {\n\t\t\tmessage.duration = this.duration.toString();\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCStopLevelChangeOptions {\n\tparameter: WindowCoveringParameter;\n}\n\n@CCCommand(WindowCoveringCommand.StopLevelChange)\n@useSupervision()\nexport class WindowCoveringCCStopLevelChange extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCStopLevelChangeOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.parameter = options.parameter;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCStopLevelChange {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst parameter: WindowCoveringParameter = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tparameter,\n\t\t});\n\t}\n\n\tpublic parameter: WindowCoveringParameter;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.parameter]);\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\tparameter: getEnumMemberName(\n\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\tthis.parameter,\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\tDuration,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tencodeBitMask,\n\tparseBitMask,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\tSET_VALUE_HOOKS,\n\ttype SetValueImplementation,\n\ttype SetValueImplementationHooksFactory,\n\tthrowMissingPropertyKey,\n\tthrowUnsupportedProperty,\n\tthrowUnsupportedPropertyKey,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\twindowCoveringParameterToLevelChangeLabel,\n\twindowCoveringParameterToMetadataStates,\n} from \"../lib/CCValueUtils.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype RefreshValuesContext,\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\ttype LevelChangeDirection,\n\tWindowCoveringCommand,\n\tWindowCoveringParameter,\n} from \"../lib/_Types.js\";\n\nexport const WindowCoveringCCValues = V.defineCCValues(\n\tCommandClasses[\"Window Covering\"],\n\t{\n\t\t...V.staticProperty(\n\t\t\t\"supportedParameters\",\n\t\t\tundefined, // meta\n\t\t\t{ internal: true }, // value options\n\t\t),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"currentValue\",\n\t\t\t\"currentValue\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"currentValue\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.ReadOnlyLevel,\n\t\t\t\t\tlabel: `Current value - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\tstates: windowCoveringParameterToMetadataStates(parameter),\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"targetValue\",\n\t\t\t\"targetValue\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"targetValue\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\t// Only odd-numbered parameters have position support and are writable\n\t\t\t\tconst writeable = parameter % 2 === 1;\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.Level,\n\t\t\t\t\tlabel: `Target value - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\t// Only odd-numbered parameters have position support and are writable\n\t\t\t\t\twriteable: parameter % 2 === 1,\n\t\t\t\t\tstates: windowCoveringParameterToMetadataStates(parameter),\n\t\t\t\t\tallowManualEntry: writeable,\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"duration\",\n\t\t\t\"duration\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"duration\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => ({\n\t\t\t\t...ValueMetadata.ReadOnlyDuration,\n\t\t\t\tlabel: `Remaining duration - ${\n\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\tparameter,\n\t\t\t\t\t)\n\t\t\t\t}`,\n\t\t\t\tccSpecific: {\n\t\t\t\t\tparameter,\n\t\t\t\t},\n\t\t\t} as const),\n\t\t),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"levelChangeUp\",\n\t\t\t// The direction refers to the change in level, not the physical location\n\t\t\t\"levelChangeUp\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"levelChangeUp\" && typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\t\tlabel: `${\n\t\t\t\t\t\twindowCoveringParameterToLevelChangeLabel(\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t\t\"up\",\n\t\t\t\t\t\t)\n\t\t\t\t\t} - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t\tstates: {\n\t\t\t\t\t\ttrue: \"Start\",\n\t\t\t\t\t\tfalse: \"Stop\",\n\t\t\t\t\t},\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\t\t...V.dynamicPropertyAndKeyWithName(\n\t\t\t\"levelChangeDown\",\n\t\t\t// The direction refers to the change in level, not the physical location\n\t\t\t\"levelChangeDown\",\n\t\t\t(parameter: WindowCoveringParameter) => parameter,\n\t\t\t({ property, propertyKey }) =>\n\t\t\t\tproperty === \"levelChangeDown\"\n\t\t\t\t&& typeof propertyKey === \"number\",\n\t\t\t(parameter: WindowCoveringParameter) => {\n\t\t\t\treturn {\n\t\t\t\t\t...ValueMetadata.WriteOnlyBoolean,\n\t\t\t\t\tlabel: `${\n\t\t\t\t\t\twindowCoveringParameterToLevelChangeLabel(\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t\t\"down\",\n\t\t\t\t\t\t)\n\t\t\t\t\t} - ${\n\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\tparameter,\n\t\t\t\t\t\t)\n\t\t\t\t\t}`,\n\t\t\t\t\tvalueChangeOptions: [\"transitionDuration\"],\n\t\t\t\t\tstates: {\n\t\t\t\t\t\ttrue: \"Start\",\n\t\t\t\t\t\tfalse: \"Stop\",\n\t\t\t\t\t},\n\t\t\t\t\tccSpecific: { parameter },\n\t\t\t\t} as const;\n\t\t\t},\n\t\t),\n\t},\n);\n\n@API(CommandClasses[\"Window Covering\"])\nexport class WindowCoveringCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: WindowCoveringCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase WindowCoveringCommand.Get:\n\t\t\tcase WindowCoveringCommand.Set:\n\t\t\tcase WindowCoveringCommand.SupportedGet:\n\t\t\tcase WindowCoveringCommand.StartLevelChange:\n\t\t\tcase WindowCoveringCommand.StopLevelChange:\n\t\t\t\treturn true; // This is mandatory\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(\n\t\t\tthis: WindowCoveringCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t\tvalue,\n\t\t\toptions,\n\t\t) {\n\t\t\tconst valueId = {\n\t\t\t\tcommandClass: this.ccId,\n\t\t\t\tproperty,\n\t\t\t\tpropertyKey,\n\t\t\t};\n\n\t\t\tif (WindowCoveringCCValues.targetValue.is(valueId)) {\n\t\t\t\tif (\n\t\t\t\t\ttypeof propertyKey !== \"number\"\n\t\t\t\t\t// Only odd-numbered parameters have position support and are writable\n\t\t\t\t\t|| propertyKey % 2 === 0\n\t\t\t\t) {\n\t\t\t\t\tthrowUnsupportedPropertyKey(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\tpropertyKey!,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (typeof value !== \"number\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"number\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst parameter = propertyKey;\n\t\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\n\t\t\t\treturn this.set([{ parameter, value }], duration);\n\t\t\t} else if (\n\t\t\t\tWindowCoveringCCValues.levelChangeUp.is(valueId)\n\t\t\t\t|| WindowCoveringCCValues.levelChangeDown.is(valueId)\n\t\t\t) {\n\t\t\t\tif (typeof value !== \"boolean\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"boolean\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst parameter = propertyKey as number;\n\t\t\t\tconst direction = WindowCoveringCCValues.levelChangeUp.is(\n\t\t\t\t\t\tvalueId,\n\t\t\t\t\t)\n\t\t\t\t\t? \"up\"\n\t\t\t\t\t: \"down\";\n\n\t\t\t\tif (value) {\n\t\t\t\t\t// Perform the level change\n\t\t\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\t\t\t\t\treturn this.startLevelChange(\n\t\t\t\t\t\tparameter,\n\t\t\t\t\t\tdirection,\n\t\t\t\t\t\tduration,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn this.stopLevelChange(parameter);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tprotected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory = (\n\t\t{ property, propertyKey },\n\t\tvalue,\n\t\toptions,\n\t) => {\n\t\tconst valueId = {\n\t\t\tcommandClass: this.ccId,\n\t\t\tproperty,\n\t\t\tpropertyKey,\n\t\t};\n\n\t\tif (WindowCoveringCCValues.targetValue.is(valueId)) {\n\t\t\tif (typeof propertyKey !== \"number\") return;\n\t\t\tconst parameter = propertyKey;\n\n\t\t\tconst duration = Duration.from(options?.transitionDuration);\n\n\t\t\tconst currentValueValueId = WindowCoveringCCValues.currentValue(\n\t\t\t\tparameter,\n\t\t\t).endpoint(this.endpoint.index);\n\n\t\t\treturn {\n\t\t\t\t// Window Covering commands may take some time to be executed.\n\t\t\t\t// Therefore we try to supervise the command execution and delay the\n\t\t\t\t// optimistic update until the final result is received.\n\t\t\t\tsupervisionDelayedUpdates: true,\n\t\t\t\tsupervisionOnSuccess: async () => {\n\t\t\t\t\t// Only update currentValue for valid target values\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"number\"\n\t\t\t\t\t\t&& value >= 0\n\t\t\t\t\t\t&& value <= 99\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.tryGetValueDB()?.setValue(\n\t\t\t\t\t\t\tcurrentValueValueId,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (value === 255) {\n\t\t\t\t\t\t// We don't know the status now, so refresh the current value\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.get(parameter);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsupervisionOnFailure: async () => {\n\t\t\t\t\t// The transition failed, so now we don't know the status - refresh the current value\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.get(parameter);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// ignore\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\toptimisticallyUpdateRelatedValues: (\n\t\t\t\t\t_supervisedAndSuccessful,\n\t\t\t\t) => {\n\t\t\t\t\t// Only update currentValue for valid target values\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"number\"\n\t\t\t\t\t\t&& value >= 0\n\t\t\t\t\t\t&& value <= 99\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (this.isSinglecast()) {\n\t\t\t\t\t\t\tthis.tryGetValueDB()?.setValue(\n\t\t\t\t\t\t\t\tcurrentValueValueId,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (this.isMulticast()) {\n\t\t\t\t\t\t\t// Figure out which nodes were affected by this command\n\t\t\t\t\t\t\tconst affectedNodes = this.endpoint.node\n\t\t\t\t\t\t\t\t.physicalNodes.filter(\n\t\t\t\t\t\t\t\t\t(node) =>\n\t\t\t\t\t\t\t\t\t\tnode\n\t\t\t\t\t\t\t\t\t\t\t.getEndpoint(this.endpoint.index)\n\t\t\t\t\t\t\t\t\t\t\t?.supportsCC(this.ccId),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// and optimistically update the currentValue\n\t\t\t\t\t\t\tfor (const node of affectedNodes) {\n\t\t\t\t\t\t\t\tthis.host\n\t\t\t\t\t\t\t\t\t.tryGetValueDB(node.id)\n\t\t\t\t\t\t\t\t\t?.setValue(currentValueValueId, value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tverifyChanges: () => {\n\t\t\t\t\tif (this.isSinglecast()) {\n\t\t\t\t\t\t// We query currentValue instead of targetValue to make sure that unsolicited updates cancel the scheduled poll\n\t\t\t\t\t\tthis.schedulePoll(currentValueValueId, value, {\n\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// For multicasts, do not schedule a refresh - this could cause a LOT of traffic\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t};\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(\n\t\t\tthis: WindowCoveringCCAPI,\n\t\t\t{ property, propertyKey },\n\t\t) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"currentValue\":\n\t\t\t\tcase \"targetValue\":\n\t\t\t\tcase \"duration\":\n\t\t\t\t\tif (propertyKey == undefined) {\n\t\t\t\t\t\tthrowMissingPropertyKey(this.ccId, property);\n\t\t\t\t\t} else if (typeof propertyKey !== \"number\") {\n\t\t\t\t\t\tthrowUnsupportedPropertyKey(\n\t\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\tpropertyKey,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn (await this.get(propertyKey))?.[property];\n\t\t\t\tdefault:\n\t\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tpublic async getSupported(): Promise<\n\t\tMaybeNotKnown<readonly WindowCoveringParameter[]>\n\t> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.SupportedGet,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCSupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWindowCoveringCCSupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.supportedParameters;\n\t}\n\n\t@validateArgs({ strictEnums: true })\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic async get(parameter: WindowCoveringParameter) {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.Get,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tparameter,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tWindowCoveringCCReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"currentValue\", \"targetValue\", \"duration\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async set(\n\t\ttargetValues: {\n\t\t\tparameter: WindowCoveringParameter;\n\t\t\tvalue: number;\n\t\t}[],\n\t\tduration?: Duration | string,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.StartLevelChange,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\ttargetValues,\n\t\t\tduration,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs({ strictEnums: true })\n\tpublic async startLevelChange(\n\t\tparameter: WindowCoveringParameter,\n\t\tdirection: keyof typeof LevelChangeDirection,\n\t\tduration?: Duration | string,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.StartLevelChange,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCStartLevelChange({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tparameter,\n\t\t\tdirection,\n\t\t\tduration,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs({ strictEnums: true })\n\tpublic async stopLevelChange(\n\t\tparameter: WindowCoveringParameter,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tWindowCoveringCommand,\n\t\t\tWindowCoveringCommand.StopLevelChange,\n\t\t);\n\n\t\tconst cc = new WindowCoveringCCStopLevelChange({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tparameter,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses[\"Window Covering\"])\n@implementedVersion(1)\n@ccValues(WindowCoveringCCValues)\nexport class WindowCoveringCC extends CommandClass {\n\tdeclare ccCommand: WindowCoveringCommand;\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[\"Window Covering\"],\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 window covering parameters...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst supported = await api.getSupported();\n\t\tif (supported?.length) {\n\t\t\tconst logMessage = `supported window covering parameters:\n${\n\t\t\t\tsupported\n\t\t\t\t\t.map((p) =>\n\t\t\t\t\t\t`\u00B7 ${getEnumMemberName(WindowCoveringParameter, p)}`\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\\n\")\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\n\t\t\t// Create metadata for all supported parameters\n\t\t\tfor (const param of supported) {\n\t\t\t\t// Default values\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.currentValue(param),\n\t\t\t\t);\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.targetValue(param),\n\t\t\t\t);\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.duration(param),\n\t\t\t\t);\n\n\t\t\t\t// Level change values\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.levelChangeUp(param),\n\t\t\t\t);\n\t\t\t\tthis.setMetadata(\n\t\t\t\t\tctx,\n\t\t\t\t\tWindowCoveringCCValues.levelChangeDown(param),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Query current values for all supported parameters\n\t\t\tawait this.refreshValues(ctx);\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Window Covering\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tconst parameters: number[] = this.getValue(\n\t\t\tctx,\n\t\t\tWindowCoveringCCValues.supportedParameters,\n\t\t) ?? [];\n\n\t\tfor (const param of parameters) {\n\t\t\t// Only query odd parameters (with position support)\n\t\t\tif (param % 2 == 0) continue;\n\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: `querying position for parameter ${\n\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\tparam,\n\t\t\t\t\t)\n\t\t\t\t}...`,\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tawait api.get(param);\n\t\t}\n\t}\n\n\tpublic translatePropertyKey(\n\t\tctx: GetValueDB,\n\t\tproperty: string | number,\n\t\tpropertyKey: string | number,\n\t): string | undefined {\n\t\tif (typeof propertyKey === \"number\") {\n\t\t\treturn getEnumMemberName(WindowCoveringParameter, propertyKey);\n\t\t}\n\t\treturn super.translatePropertyKey(ctx, property, propertyKey);\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCSupportedReportOptions {\n\tsupportedParameters: readonly WindowCoveringParameter[];\n}\n\n@CCCommand(WindowCoveringCommand.SupportedReport)\n@ccValueProperty(\n\t\"supportedParameters\",\n\tWindowCoveringCCValues.supportedParameters,\n)\nexport class WindowCoveringCCSupportedReport extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.supportedParameters = options.supportedParameters;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\n\t\tconst numBitmaskBytes = raw.payload[0] & 0b1111;\n\t\tvalidatePayload(raw.payload.length >= 1 + numBitmaskBytes);\n\t\tconst bitmask = raw.payload.subarray(1, 1 + numBitmaskBytes);\n\t\tconst supportedParameters: WindowCoveringParameter[] = parseBitMask(\n\t\t\tbitmask,\n\t\t\tWindowCoveringParameter[\"Outbound Left (no position)\"],\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportedParameters,\n\t\t});\n\t}\n\n\tpublic readonly supportedParameters: readonly WindowCoveringParameter[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst bitmask = encodeBitMask(\n\t\t\tthis.supportedParameters,\n\t\t\tundefined,\n\t\t\tWindowCoveringParameter[\"Outbound Left (no position)\"],\n\t\t).subarray(0, 15);\n\t\tconst numBitmaskBytes = bitmask.length & 0b1111;\n\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([numBitmaskBytes]),\n\t\t\tbitmask.subarray(0, numBitmaskBytes),\n\t\t]);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supported parameters\": this.supportedParameters\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(p) =>\n\t\t\t\t\t\t\t`\\n\u00B7 ${\n\t\t\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\t\t\t\t\tp,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(WindowCoveringCommand.SupportedGet)\n@expectedCCResponse(WindowCoveringCCSupportedReport)\nexport class WindowCoveringCCSupportedGet extends WindowCoveringCC {}\n\n// @publicAPI\nexport interface WindowCoveringCCReportOptions {\n\tparameter: WindowCoveringParameter;\n\tcurrentValue: number;\n\ttargetValue: number;\n\tduration: Duration;\n}\n\n@CCCommand(WindowCoveringCommand.Report)\n@ccValueProperty(\n\t\"currentValue\",\n\tWindowCoveringCCValues.currentValue,\n\t(self) => [self.parameter],\n)\n@ccValueProperty(\n\t\"targetValue\",\n\tWindowCoveringCCValues.targetValue,\n\t(self) => [self.parameter],\n)\n@ccValueProperty(\n\t\"duration\",\n\tWindowCoveringCCValues.duration,\n\t(self) => [self.parameter],\n)\nexport class WindowCoveringCCReport extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.parameter = options.parameter;\n\t\tthis.currentValue = options.currentValue;\n\t\tthis.targetValue = options.targetValue;\n\t\tthis.duration = options.duration;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCReport {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst parameter: WindowCoveringParameter = raw.payload[0];\n\t\tconst currentValue = raw.payload[1];\n\t\tconst targetValue = raw.payload[2];\n\t\tconst duration = Duration.parseReport(raw.payload[3])\n\t\t\t?? Duration.unknown();\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tparameter,\n\t\t\tcurrentValue,\n\t\t\ttargetValue,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic readonly parameter: WindowCoveringParameter;\n\tpublic readonly currentValue: number;\n\tpublic readonly targetValue: number;\n\tpublic readonly duration: Duration;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.parameter,\n\t\t\tthis.currentValue,\n\t\t\tthis.targetValue,\n\t\t\tthis.duration.serializeReport(),\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\tparameter: getEnumMemberName(\n\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\tthis.parameter,\n\t\t\t\t),\n\t\t\t\t\"current value\": this.currentValue,\n\t\t\t\t\"target value\": this.targetValue,\n\t\t\t\tduration: this.duration.toString(),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCGetOptions {\n\tparameter: WindowCoveringParameter;\n}\n\nfunction testResponseForWindowCoveringGet(\n\tsent: WindowCoveringCCGet,\n\treceived: WindowCoveringCCReport,\n) {\n\treturn received.parameter === sent.parameter;\n}\n\n@CCCommand(WindowCoveringCommand.Get)\n@expectedCCResponse(WindowCoveringCCReport, testResponseForWindowCoveringGet)\nexport class WindowCoveringCCGet extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.parameter = options.parameter;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): WindowCoveringCCGet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst parameter: WindowCoveringParameter = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tparameter,\n\t\t});\n\t}\n\n\tpublic parameter: WindowCoveringParameter;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.parameter]);\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\tparameter: getEnumMemberName(\n\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\tthis.parameter,\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCSetOptions {\n\ttargetValues: {\n\t\tparameter: WindowCoveringParameter;\n\t\tvalue: number;\n\t}[];\n\tduration?: Duration | string;\n}\n\n@CCCommand(WindowCoveringCommand.Set)\n@useSupervision()\nexport class WindowCoveringCCSet extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.targetValues = options.targetValues;\n\t\tthis.duration = Duration.from(options.duration);\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): WindowCoveringCCSet {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst numEntries = raw.payload[0] & 0b11111;\n\n\t\tvalidatePayload(raw.payload.length >= 1 + numEntries * 2);\n\t\tconst targetValues: WindowCoveringCCSetOptions[\"targetValues\"] = [];\n\n\t\tfor (let i = 0; i < numEntries; i++) {\n\t\t\tconst offset = 1 + i * 2;\n\t\t\ttargetValues.push({\n\t\t\t\tparameter: raw.payload[offset],\n\t\t\t\tvalue: raw.payload[offset + 1],\n\t\t\t});\n\t\t}\n\n\t\tlet duration: Duration | undefined;\n\n\t\tif (raw.payload.length >= 2 + numEntries * 2) {\n\t\t\tduration = Duration.parseSet(\n\t\t\t\traw.payload[1 + numEntries * 2],\n\t\t\t);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttargetValues,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic targetValues: {\n\t\tparameter: WindowCoveringParameter;\n\t\tvalue: number;\n\t}[];\n\tpublic duration: Duration | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst numEntries = this.targetValues.length & 0b11111;\n\t\tthis.payload = new Bytes(2 + numEntries * 2);\n\n\t\tthis.payload[0] = numEntries;\n\t\tfor (let i = 0; i < numEntries; i++) {\n\t\t\tconst offset = 1 + i * 2;\n\t\t\tthis.payload[offset] = this.targetValues[i].parameter;\n\t\t\tthis.payload[offset + 1] = this.targetValues[i].value;\n\t\t}\n\n\t\tthis.payload[this.payload.length - 1] = (\n\t\t\tthis.duration ?? Duration.default()\n\t\t).serializeSet();\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {};\n\t\tfor (const { parameter, value } of this.targetValues) {\n\t\t\tmessage[getEnumMemberName(WindowCoveringParameter, parameter)] =\n\t\t\t\tvalue;\n\t\t}\n\t\tif (this.duration) {\n\t\t\tmessage.duration = this.duration.toString();\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCStartLevelChangeOptions {\n\tparameter: WindowCoveringParameter;\n\tdirection: keyof typeof LevelChangeDirection;\n\tduration?: Duration | string;\n}\n\n@CCCommand(WindowCoveringCommand.StartLevelChange)\n@useSupervision()\nexport class WindowCoveringCCStartLevelChange extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCStartLevelChangeOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.parameter = options.parameter;\n\t\tthis.direction = options.direction;\n\t\tthis.duration = Duration.from(options.duration);\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCStartLevelChange {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst direction = !!(raw.payload[0] & 0b0100_0000)\n\t\t\t? \"down\"\n\t\t\t: \"up\";\n\t\tconst parameter: WindowCoveringParameter = raw.payload[1];\n\t\tlet duration: Duration | undefined;\n\n\t\tif (raw.payload.length >= 3) {\n\t\t\tduration = Duration.parseSet(raw.payload[2]);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tdirection,\n\t\t\tparameter,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic parameter: WindowCoveringParameter;\n\tpublic direction: keyof typeof LevelChangeDirection;\n\tpublic duration: Duration | undefined;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.direction === \"down\" ? 0b0100_0000 : 0b0000_0000,\n\t\t\tthis.parameter,\n\t\t\t(this.duration ?? Duration.default()).serializeSet(),\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\tparameter: getEnumMemberName(\n\t\t\t\tWindowCoveringParameter,\n\t\t\t\tthis.parameter,\n\t\t\t),\n\t\t\tdirection: this.direction,\n\t\t};\n\t\tif (this.duration) {\n\t\t\tmessage.duration = this.duration.toString();\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface WindowCoveringCCStopLevelChangeOptions {\n\tparameter: WindowCoveringParameter;\n}\n\n@CCCommand(WindowCoveringCommand.StopLevelChange)\n@useSupervision()\nexport class WindowCoveringCCStopLevelChange extends WindowCoveringCC {\n\tpublic constructor(\n\t\toptions: WithAddress<WindowCoveringCCStopLevelChangeOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.parameter = options.parameter;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): WindowCoveringCCStopLevelChange {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst parameter: WindowCoveringParameter = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tparameter,\n\t\t});\n\t}\n\n\tpublic parameter: WindowCoveringParameter;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.parameter]);\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\tparameter: getEnumMemberName(\n\t\t\t\t\tWindowCoveringParameter,\n\t\t\t\t\tthis.parameter,\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -118,7 +118,7 @@ let ZWavePlusCCAPI = (() => {
118
118
  }
119
119
  return super.supportsCommand(cmd);
120
120
  }
121
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
121
+ // oxlint-disable-next-line typescript/explicit-module-boundary-types
122
122
  async get() {
123
123
  this.assertSupportsCommand(import_Types.ZWavePlusCommand, import_Types.ZWavePlusCommand.Get);
124
124
  const cc = new ZWavePlusCCGet({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/ZWavePlusCC.ts"],
4
- "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype WithAddress,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, num2hex, pick } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\tZWavePlusCommand,\n\tZWavePlusNodeType,\n\tZWavePlusRoleType,\n} from \"../lib/_Types.js\";\n\n// SDS13782 The advertised Z-Wave Plus Version, Role Type and Node Type information values\n// MUST be identical for the Root Device and all Multi Channel End Points\n// --> We only access endpoint 0\n\nexport const ZWavePlusCCValues = V.defineCCValues(\n\tCommandClasses[\"Z-Wave Plus Info\"],\n\t{\n\t\t...V.staticProperty(\"zwavePlusVersion\", undefined, {\n\t\t\tsupportsEndpoints: false,\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"nodeType\", undefined, {\n\t\t\tsupportsEndpoints: false,\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"roleType\", undefined, {\n\t\t\tsupportsEndpoints: false,\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"userIcon\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"installerIcon\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t},\n);\n\n// @noSetValueAPI This CC is read-only\n\n@API(CommandClasses[\"Z-Wave Plus Info\"])\nexport class ZWavePlusCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(cmd: ZWavePlusCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase ZWavePlusCommand.Get:\n\t\t\tcase ZWavePlusCommand.Report:\n\t\t\t\treturn true; // This is mandatory\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async get() {\n\t\tthis.assertSupportsCommand(ZWavePlusCommand, ZWavePlusCommand.Get);\n\n\t\tconst cc = new ZWavePlusCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<ZWavePlusCCReport>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"zwavePlusVersion\",\n\t\t\t\t\"nodeType\",\n\t\t\t\t\"roleType\",\n\t\t\t\t\"installerIcon\",\n\t\t\t\t\"userIcon\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async sendReport(options: ZWavePlusCCReportOptions): Promise<void> {\n\t\tthis.assertSupportsCommand(ZWavePlusCommand, ZWavePlusCommand.Report);\n\n\t\tconst cc = new ZWavePlusCCReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses[\"Z-Wave Plus Info\"])\n@implementedVersion(2)\n@ccValues(ZWavePlusCCValues)\nexport class ZWavePlusCC extends CommandClass {\n\tdeclare ccCommand: ZWavePlusCommand;\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[\"Z-Wave Plus Info\"],\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 Z-Wave+ information...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\n\t\tconst zwavePlusResponse = await api.get();\n\t\tif (zwavePlusResponse) {\n\t\t\tconst logMessage = `received response for Z-Wave+ information:\nZ-Wave+ version: ${zwavePlusResponse.zwavePlusVersion}\nrole type: ${ZWavePlusRoleType[zwavePlusResponse.roleType]}\nnode type: ${ZWavePlusNodeType[zwavePlusResponse.nodeType]}\ninstaller icon: ${num2hex(zwavePlusResponse.installerIcon)}\nuser icon: ${num2hex(zwavePlusResponse.userIcon)}`;\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// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface ZWavePlusCCReportOptions {\n\tzwavePlusVersion: number;\n\tnodeType: ZWavePlusNodeType;\n\troleType: ZWavePlusRoleType;\n\tinstallerIcon: number;\n\tuserIcon: number;\n}\n\n@CCCommand(ZWavePlusCommand.Report)\n@ccValueProperty(\"zwavePlusVersion\", ZWavePlusCCValues.zwavePlusVersion)\n@ccValueProperty(\"nodeType\", ZWavePlusCCValues.nodeType)\n@ccValueProperty(\"roleType\", ZWavePlusCCValues.roleType)\n@ccValueProperty(\"installerIcon\", ZWavePlusCCValues.installerIcon)\n@ccValueProperty(\"userIcon\", ZWavePlusCCValues.userIcon)\nexport class ZWavePlusCCReport extends ZWavePlusCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWavePlusCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.zwavePlusVersion = options.zwavePlusVersion;\n\t\tthis.roleType = options.roleType;\n\t\tthis.nodeType = options.nodeType;\n\t\tthis.installerIcon = options.installerIcon;\n\t\tthis.userIcon = options.userIcon;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): ZWavePlusCCReport {\n\t\tvalidatePayload(raw.payload.length >= 7);\n\t\tconst zwavePlusVersion = raw.payload[0];\n\t\tconst roleType: ZWavePlusRoleType = raw.payload[1];\n\t\tconst nodeType: ZWavePlusNodeType = raw.payload[2];\n\t\tconst installerIcon = raw.payload.readUInt16BE(3);\n\t\tconst userIcon = raw.payload.readUInt16BE(5);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tzwavePlusVersion,\n\t\t\troleType,\n\t\t\tnodeType,\n\t\t\tinstallerIcon,\n\t\t\tuserIcon,\n\t\t});\n\t}\n\n\tpublic zwavePlusVersion: number;\n\n\tpublic nodeType: ZWavePlusNodeType;\n\n\tpublic roleType: ZWavePlusRoleType;\n\n\tpublic installerIcon: number;\n\n\tpublic userIcon: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.zwavePlusVersion,\n\t\t\tthis.roleType,\n\t\t\tthis.nodeType,\n\t\t\t// placeholder for icons\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t]);\n\t\tthis.payload.writeUInt16BE(this.installerIcon, 3);\n\t\tthis.payload.writeUInt16BE(this.userIcon, 5);\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\tversion: this.zwavePlusVersion,\n\t\t\t\t\"node type\": getEnumMemberName(\n\t\t\t\t\tZWavePlusNodeType,\n\t\t\t\t\tthis.nodeType,\n\t\t\t\t),\n\t\t\t\t\"role type\": getEnumMemberName(\n\t\t\t\t\tZWavePlusRoleType,\n\t\t\t\t\tthis.roleType,\n\t\t\t\t),\n\t\t\t\t\"icon (mgmt.)\": num2hex(this.installerIcon),\n\t\t\t\t\"icon (user)\": num2hex(this.userIcon),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(ZWavePlusCommand.Get)\n@expectedCCResponse(ZWavePlusCCReport)\nexport class ZWavePlusCCGet extends ZWavePlusCC {}\n"],
4
+ "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype WithAddress,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, num2hex, pick } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\tZWavePlusCommand,\n\tZWavePlusNodeType,\n\tZWavePlusRoleType,\n} from \"../lib/_Types.js\";\n\n// SDS13782 The advertised Z-Wave Plus Version, Role Type and Node Type information values\n// MUST be identical for the Root Device and all Multi Channel End Points\n// --> We only access endpoint 0\n\nexport const ZWavePlusCCValues = V.defineCCValues(\n\tCommandClasses[\"Z-Wave Plus Info\"],\n\t{\n\t\t...V.staticProperty(\"zwavePlusVersion\", undefined, {\n\t\t\tsupportsEndpoints: false,\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"nodeType\", undefined, {\n\t\t\tsupportsEndpoints: false,\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"roleType\", undefined, {\n\t\t\tsupportsEndpoints: false,\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"userIcon\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"installerIcon\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t},\n);\n\n// @noSetValueAPI This CC is read-only\n\n@API(CommandClasses[\"Z-Wave Plus Info\"])\nexport class ZWavePlusCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(cmd: ZWavePlusCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase ZWavePlusCommand.Get:\n\t\t\tcase ZWavePlusCommand.Report:\n\t\t\t\treturn true; // This is mandatory\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic async get() {\n\t\tthis.assertSupportsCommand(ZWavePlusCommand, ZWavePlusCommand.Get);\n\n\t\tconst cc = new ZWavePlusCCGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<ZWavePlusCCReport>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"zwavePlusVersion\",\n\t\t\t\t\"nodeType\",\n\t\t\t\t\"roleType\",\n\t\t\t\t\"installerIcon\",\n\t\t\t\t\"userIcon\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async sendReport(options: ZWavePlusCCReportOptions): Promise<void> {\n\t\tthis.assertSupportsCommand(ZWavePlusCommand, ZWavePlusCommand.Report);\n\n\t\tconst cc = new ZWavePlusCCReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n}\n\n@commandClass(CommandClasses[\"Z-Wave Plus Info\"])\n@implementedVersion(2)\n@ccValues(ZWavePlusCCValues)\nexport class ZWavePlusCC extends CommandClass {\n\tdeclare ccCommand: ZWavePlusCommand;\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[\"Z-Wave Plus Info\"],\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 Z-Wave+ information...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\n\t\tconst zwavePlusResponse = await api.get();\n\t\tif (zwavePlusResponse) {\n\t\t\tconst logMessage = `received response for Z-Wave+ information:\nZ-Wave+ version: ${zwavePlusResponse.zwavePlusVersion}\nrole type: ${ZWavePlusRoleType[zwavePlusResponse.roleType]}\nnode type: ${ZWavePlusNodeType[zwavePlusResponse.nodeType]}\ninstaller icon: ${num2hex(zwavePlusResponse.installerIcon)}\nuser icon: ${num2hex(zwavePlusResponse.userIcon)}`;\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// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface ZWavePlusCCReportOptions {\n\tzwavePlusVersion: number;\n\tnodeType: ZWavePlusNodeType;\n\troleType: ZWavePlusRoleType;\n\tinstallerIcon: number;\n\tuserIcon: number;\n}\n\n@CCCommand(ZWavePlusCommand.Report)\n@ccValueProperty(\"zwavePlusVersion\", ZWavePlusCCValues.zwavePlusVersion)\n@ccValueProperty(\"nodeType\", ZWavePlusCCValues.nodeType)\n@ccValueProperty(\"roleType\", ZWavePlusCCValues.roleType)\n@ccValueProperty(\"installerIcon\", ZWavePlusCCValues.installerIcon)\n@ccValueProperty(\"userIcon\", ZWavePlusCCValues.userIcon)\nexport class ZWavePlusCCReport extends ZWavePlusCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWavePlusCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.zwavePlusVersion = options.zwavePlusVersion;\n\t\tthis.roleType = options.roleType;\n\t\tthis.nodeType = options.nodeType;\n\t\tthis.installerIcon = options.installerIcon;\n\t\tthis.userIcon = options.userIcon;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): ZWavePlusCCReport {\n\t\tvalidatePayload(raw.payload.length >= 7);\n\t\tconst zwavePlusVersion = raw.payload[0];\n\t\tconst roleType: ZWavePlusRoleType = raw.payload[1];\n\t\tconst nodeType: ZWavePlusNodeType = raw.payload[2];\n\t\tconst installerIcon = raw.payload.readUInt16BE(3);\n\t\tconst userIcon = raw.payload.readUInt16BE(5);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tzwavePlusVersion,\n\t\t\troleType,\n\t\t\tnodeType,\n\t\t\tinstallerIcon,\n\t\t\tuserIcon,\n\t\t});\n\t}\n\n\tpublic zwavePlusVersion: number;\n\n\tpublic nodeType: ZWavePlusNodeType;\n\n\tpublic roleType: ZWavePlusRoleType;\n\n\tpublic installerIcon: number;\n\n\tpublic userIcon: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.zwavePlusVersion,\n\t\t\tthis.roleType,\n\t\t\tthis.nodeType,\n\t\t\t// placeholder for icons\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t]);\n\t\tthis.payload.writeUInt16BE(this.installerIcon, 3);\n\t\tthis.payload.writeUInt16BE(this.userIcon, 5);\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\tversion: this.zwavePlusVersion,\n\t\t\t\t\"node type\": getEnumMemberName(\n\t\t\t\t\tZWavePlusNodeType,\n\t\t\t\t\tthis.nodeType,\n\t\t\t\t),\n\t\t\t\t\"role type\": getEnumMemberName(\n\t\t\t\t\tZWavePlusRoleType,\n\t\t\t\t\tthis.roleType,\n\t\t\t\t),\n\t\t\t\t\"icon (mgmt.)\": num2hex(this.installerIcon),\n\t\t\t\t\"icon (user)\": num2hex(this.userIcon),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(ZWavePlusCommand.Get)\n@expectedCCResponse(ZWavePlusCCReport)\nexport class ZWavePlusCCGet extends ZWavePlusCC {}\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/ZWaveProtocolCC.ts"],
4
- "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\ttype BasicDeviceClass,\n\tCommandClasses,\n\ttype DataRate,\n\ttype FLiRS,\n\tMAX_NODES,\n\tMAX_REPEATERS,\n\ttype NodeInformationFrame,\n\ttype NodeProtocolInfoAndDeviceClass,\n\ttype NodeType,\n\ttype ProtocolVersion,\n\ttype WithAddress,\n\tZWaveDataRate,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tencodeBitMask,\n\tencodeNodeInformationFrame,\n\tencodeNodeProtocolInfoAndDeviceClass,\n\tparseBitMask,\n\tparseNodeInformationFrame,\n\tparseNodeProtocolInfoAndDeviceClass,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, type BytesView } from \"@zwave-js/shared\";\nimport { type CCRaw, CommandClass } from \"../lib/CommandClass.js\";\nimport {\n\tCCCommand,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\nimport {\n\ttype NetworkTransferStatus,\n\tWakeUpTime,\n\tZWaveProtocolCommand,\n\tparseWakeUpTime,\n} from \"../lib/_Types.js\";\n\nenum DataRateBitmask {\n\t\"9k6\" = 0b001,\n\t\"40k\" = 0b010,\n\t\"100k\" = 0b100,\n}\n\nfunction dataRate2Bitmask(dataRate: ZWaveDataRate): DataRateBitmask {\n\treturn dataRate === ZWaveDataRate[\"100k\"]\n\t\t? DataRateBitmask[\"100k\"]\n\t\t: dataRate === ZWaveDataRate[\"40k\"]\n\t\t? DataRateBitmask[\"40k\"]\n\t\t: DataRateBitmask[\"9k6\"];\n}\n\nfunction bitmask2DataRate(mask: DataRateBitmask): ZWaveDataRate {\n\treturn mask === DataRateBitmask[\"100k\"]\n\t\t? ZWaveDataRate[\"100k\"]\n\t\t: mask === DataRateBitmask[\"40k\"]\n\t\t? ZWaveDataRate[\"40k\"]\n\t\t: ZWaveDataRate[\"9k6\"];\n}\n\n@commandClass(CommandClasses[\"Z-Wave Protocol\"])\n@implementedVersion(1)\nexport class ZWaveProtocolCC extends CommandClass {\n\tdeclare ccCommand: ZWaveProtocolCommand;\n}\n\n// @publicAPI\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface ZWaveProtocolCCNodeInformationFrameOptions\n\textends NodeInformationFrame\n{}\n\n@CCCommand(ZWaveProtocolCommand.NodeInformationFrame)\nexport class ZWaveProtocolCCNodeInformationFrame extends ZWaveProtocolCC\n\timplements NodeInformationFrame\n{\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCNodeInformationFrameOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.basicDeviceClass = options.basicDeviceClass;\n\t\tthis.genericDeviceClass = options.genericDeviceClass;\n\t\tthis.specificDeviceClass = options.specificDeviceClass;\n\t\tthis.isListening = options.isListening;\n\t\tthis.isFrequentListening = options.isFrequentListening;\n\t\tthis.isRouting = options.isRouting;\n\t\tthis.supportedDataRates = options.supportedDataRates;\n\t\tthis.protocolVersion = options.protocolVersion;\n\t\tthis.optionalFunctionality = options.optionalFunctionality;\n\t\tthis.nodeType = options.nodeType;\n\t\tthis.supportsSecurity = options.supportsSecurity;\n\t\tthis.supportsBeaming = options.supportsBeaming;\n\t\tthis.supportedCCs = options.supportedCCs;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCNodeInformationFrame {\n\t\tconst nif = parseNodeInformationFrame(raw.payload);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t...nif,\n\t\t});\n\t}\n\n\tpublic basicDeviceClass: BasicDeviceClass;\n\tpublic genericDeviceClass: number;\n\tpublic specificDeviceClass: number;\n\tpublic isListening: boolean;\n\tpublic isFrequentListening: FLiRS;\n\tpublic isRouting: boolean;\n\tpublic supportedDataRates: DataRate[];\n\tpublic protocolVersion: ProtocolVersion;\n\tpublic optionalFunctionality: boolean;\n\tpublic nodeType: NodeType;\n\tpublic supportsSecurity: boolean;\n\tpublic supportsBeaming: boolean;\n\tpublic supportedCCs: CommandClasses[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = encodeNodeInformationFrame(this);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n@CCCommand(ZWaveProtocolCommand.RequestNodeInformationFrame)\n@expectedCCResponse(ZWaveProtocolCCNodeInformationFrame)\nexport class ZWaveProtocolCCRequestNodeInformationFrame\n\textends ZWaveProtocolCC\n{}\n\n// @publicAPI\nexport interface ZWaveProtocolCCAssignIDsOptions {\n\tassignedNodeId: number;\n\thomeId: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.AssignIDs)\nexport class ZWaveProtocolCCAssignIDs extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCAssignIDsOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.assignedNodeId = options.assignedNodeId;\n\t\tthis.homeId = options.homeId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCAssignIDs {\n\t\tvalidatePayload(raw.payload.length >= 5);\n\t\tconst assignedNodeId = raw.payload[0];\n\t\tconst homeId = raw.payload.readUInt32BE(1);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tassignedNodeId,\n\t\t\thomeId,\n\t\t});\n\t}\n\n\tpublic assignedNodeId: number;\n\tpublic homeId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = new Bytes(5);\n\t\tthis.payload[0] = this.assignedNodeId;\n\t\tthis.payload.writeUInt32BE(this.homeId, 1);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCFindNodesInRangeOptions {\n\tcandidateNodeIds: number[];\n\twakeUpTime: WakeUpTime;\n\tdataRate?: ZWaveDataRate;\n}\n\n@CCCommand(ZWaveProtocolCommand.FindNodesInRange)\nexport class ZWaveProtocolCCFindNodesInRange extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCFindNodesInRangeOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.candidateNodeIds = options.candidateNodeIds;\n\t\tthis.wakeUpTime = options.wakeUpTime;\n\t\tthis.dataRate = options.dataRate ?? ZWaveDataRate[\"9k6\"];\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCFindNodesInRange {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst speedPresent = raw.payload[0] & 0b1000_0000;\n\t\tconst bitmaskLength = raw.payload[0] & 0b0001_1111;\n\n\t\tvalidatePayload(raw.payload.length >= 1 + bitmaskLength);\n\t\tconst candidateNodeIds = parseBitMask(\n\t\t\traw.payload.subarray(1, 1 + bitmaskLength),\n\t\t);\n\t\tconst rest = raw.payload.subarray(1 + bitmaskLength);\n\n\t\tlet dataRate: ZWaveDataRate;\n\t\tlet wakeUpTime: WakeUpTime;\n\t\tif (speedPresent) {\n\t\t\tvalidatePayload(rest.length >= 1);\n\t\t\tif (rest.length === 1) {\n\t\t\t\tdataRate = rest[0] & 0b111;\n\t\t\t\twakeUpTime = WakeUpTime.None;\n\t\t\t} else if (rest.length === 2) {\n\t\t\t\twakeUpTime = parseWakeUpTime(rest[0]);\n\t\t\t\tdataRate = rest[1] & 0b111;\n\t\t\t} else {\n\t\t\t\tvalidatePayload.fail(\"Invalid payload length\");\n\t\t\t}\n\t\t} else if (rest.length >= 1) {\n\t\t\twakeUpTime = parseWakeUpTime(rest[0]);\n\t\t\tdataRate = ZWaveDataRate[\"9k6\"];\n\t\t} else {\n\t\t\twakeUpTime = WakeUpTime.None;\n\t\t\tdataRate = ZWaveDataRate[\"9k6\"];\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tcandidateNodeIds,\n\t\t\tdataRate,\n\t\t\twakeUpTime,\n\t\t});\n\t}\n\n\tpublic candidateNodeIds: number[];\n\tpublic wakeUpTime: WakeUpTime;\n\tpublic dataRate: ZWaveDataRate;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst nodesBitmask = encodeBitMask(this.candidateNodeIds, MAX_NODES);\n\t\tconst speedAndLength = 0b1000_0000 | nodesBitmask.length;\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([speedAndLength]),\n\t\t\tnodesBitmask,\n\t\t\tBytes.from([this.wakeUpTime, this.dataRate]),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCRangeInfoOptions {\n\tneighborNodeIds: number[];\n\twakeUpTime?: WakeUpTime;\n}\n\n@CCCommand(ZWaveProtocolCommand.RangeInfo)\nexport class ZWaveProtocolCCRangeInfo extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCRangeInfoOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.neighborNodeIds = options.neighborNodeIds;\n\t\tthis.wakeUpTime = options.wakeUpTime;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCRangeInfo {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst bitmaskLength = raw.payload[0] & 0b0001_1111;\n\n\t\tvalidatePayload(raw.payload.length >= 1 + bitmaskLength);\n\t\tconst neighborNodeIds = parseBitMask(\n\t\t\traw.payload.subarray(1, 1 + bitmaskLength),\n\t\t);\n\n\t\tlet wakeUpTime: WakeUpTime | undefined;\n\t\tif (raw.payload.length >= 2 + bitmaskLength) {\n\t\t\twakeUpTime = parseWakeUpTime(\n\t\t\t\traw.payload[1 + bitmaskLength],\n\t\t\t);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tneighborNodeIds,\n\t\t\twakeUpTime,\n\t\t});\n\t}\n\n\tpublic neighborNodeIds: number[];\n\tpublic wakeUpTime?: WakeUpTime;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst nodesBitmask = encodeBitMask(this.neighborNodeIds, MAX_NODES);\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([nodesBitmask.length]),\n\t\t\tnodesBitmask,\n\t\t\tthis.wakeUpTime != undefined\n\t\t\t\t? Bytes.from([this.wakeUpTime])\n\t\t\t\t: new Bytes(),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n@CCCommand(ZWaveProtocolCommand.GetNodesInRange)\n@expectedCCResponse(ZWaveProtocolCCRangeInfo)\nexport class ZWaveProtocolCCGetNodesInRange extends ZWaveProtocolCC {}\n\n// @publicAPI\nexport interface ZWaveProtocolCCCommandCompleteOptions {\n\tsequenceNumber: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.CommandComplete)\nexport class ZWaveProtocolCCCommandComplete extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCCommandCompleteOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.sequenceNumber = options.sequenceNumber;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCCommandComplete {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst sequenceNumber = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsequenceNumber,\n\t\t});\n\t}\n\n\tpublic sequenceNumber: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.sequenceNumber]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCTransferPresentationOptions {\n\tsupportsNWI: boolean;\n\tincludeNode: boolean;\n\texcludeNode: boolean;\n}\n\n@CCCommand(ZWaveProtocolCommand.TransferPresentation)\nexport class ZWaveProtocolCCTransferPresentation extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCTransferPresentationOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.includeNode && options.excludeNode) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`${this.constructor.name}: the includeNode and excludeNode options cannot both be true`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.supportsNWI = options.supportsNWI;\n\t\tthis.includeNode = options.includeNode;\n\t\tthis.excludeNode = options.excludeNode;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCTransferPresentation {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst option = raw.payload[0];\n\t\tconst supportsNWI = !!(option & 0b0001);\n\t\tconst excludeNode = !!(option & 0b0010);\n\t\tconst includeNode = !!(option & 0b0100);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportsNWI,\n\t\t\texcludeNode,\n\t\t\tincludeNode,\n\t\t});\n\t}\n\n\tpublic supportsNWI: boolean;\n\tpublic includeNode: boolean;\n\tpublic excludeNode: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\t(this.supportsNWI ? 0b0001 : 0)\n\t\t\t| (this.excludeNode ? 0b0010 : 0)\n\t\t\t| (this.includeNode ? 0b0100 : 0),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCTransferNodeInformationOptions\n\textends NodeProtocolInfoAndDeviceClass\n{\n\tsequenceNumber: number;\n\tsourceNodeId: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.TransferNodeInformation)\nexport class ZWaveProtocolCCTransferNodeInformation extends ZWaveProtocolCC\n\timplements NodeProtocolInfoAndDeviceClass\n{\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCTransferNodeInformationOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.sequenceNumber = options.sequenceNumber;\n\t\tthis.sourceNodeId = options.sourceNodeId;\n\n\t\tthis.basicDeviceClass = options.basicDeviceClass;\n\t\tthis.genericDeviceClass = options.genericDeviceClass;\n\t\tthis.specificDeviceClass = options.specificDeviceClass;\n\t\tthis.isListening = options.isListening;\n\t\tthis.isFrequentListening = options.isFrequentListening;\n\t\tthis.isRouting = options.isRouting;\n\t\tthis.supportedDataRates = options.supportedDataRates;\n\t\tthis.protocolVersion = options.protocolVersion;\n\t\tthis.optionalFunctionality = options.optionalFunctionality;\n\t\tthis.nodeType = options.nodeType;\n\t\tthis.supportsSecurity = options.supportsSecurity;\n\t\tthis.supportsBeaming = options.supportsBeaming;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCTransferNodeInformation {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst sequenceNumber = raw.payload[0];\n\t\tconst sourceNodeId = raw.payload[1];\n\n\t\tconst { info } = parseNodeProtocolInfoAndDeviceClass(\n\t\t\traw.payload.subarray(2),\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsequenceNumber,\n\t\t\tsourceNodeId,\n\t\t\t...info,\n\t\t});\n\t}\n\n\tpublic sequenceNumber: number;\n\tpublic sourceNodeId: number;\n\tpublic basicDeviceClass: BasicDeviceClass;\n\tpublic genericDeviceClass: number;\n\tpublic specificDeviceClass: number;\n\tpublic isListening: boolean;\n\tpublic isFrequentListening: FLiRS;\n\tpublic isRouting: boolean;\n\tpublic supportedDataRates: DataRate[];\n\tpublic protocolVersion: ProtocolVersion;\n\tpublic optionalFunctionality: boolean;\n\tpublic nodeType: NodeType;\n\tpublic supportsSecurity: boolean;\n\tpublic supportsBeaming: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.sequenceNumber, this.sourceNodeId]),\n\t\t\tencodeNodeProtocolInfoAndDeviceClass(this),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCTransferRangeInformationOptions {\n\tsequenceNumber: number;\n\ttestedNodeId: number;\n\tneighborNodeIds: number[];\n}\n\n@CCCommand(ZWaveProtocolCommand.TransferRangeInformation)\nexport class ZWaveProtocolCCTransferRangeInformation extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCTransferRangeInformationOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.sequenceNumber = options.sequenceNumber;\n\t\tthis.testedNodeId = options.testedNodeId;\n\t\tthis.neighborNodeIds = options.neighborNodeIds;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCTransferRangeInformation {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst sequenceNumber = raw.payload[0];\n\t\tconst testedNodeId = raw.payload[1];\n\t\tconst bitmaskLength = raw.payload[2];\n\n\t\tvalidatePayload(raw.payload.length >= 3 + bitmaskLength);\n\t\tconst neighborNodeIds = parseBitMask(\n\t\t\traw.payload.subarray(3, 3 + bitmaskLength),\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsequenceNumber,\n\t\t\ttestedNodeId,\n\t\t\tneighborNodeIds,\n\t\t});\n\t}\n\n\tpublic sequenceNumber: number;\n\tpublic testedNodeId: number;\n\tpublic neighborNodeIds: number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst nodesBitmask = encodeBitMask(this.neighborNodeIds, MAX_NODES);\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([\n\t\t\t\tthis.sequenceNumber,\n\t\t\t\tthis.testedNodeId,\n\t\t\t\tnodesBitmask.length,\n\t\t\t]),\n\t\t\tnodesBitmask,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCTransferEndOptions {\n\tstatus: NetworkTransferStatus;\n}\n\n@CCCommand(ZWaveProtocolCommand.TransferEnd)\nexport class ZWaveProtocolCCTransferEnd extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCTransferEndOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.status = options.status;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCTransferEnd {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst status: NetworkTransferStatus = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tstatus,\n\t\t});\n\t}\n\n\tpublic status: NetworkTransferStatus;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.status]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCAssignReturnRouteOptions {\n\tdestinationNodeId: number;\n\trouteIndex: number;\n\trepeaters: number[];\n\tdestinationWakeUp: WakeUpTime;\n\tdestinationSpeed: ZWaveDataRate;\n}\n\n@CCCommand(ZWaveProtocolCommand.AssignReturnRoute)\nexport class ZWaveProtocolCCAssignReturnRoute extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCAssignReturnRouteOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.repeaters.length > MAX_REPEATERS) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`${this.constructor.name}: too many repeaters`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\n\t\tthis.destinationNodeId = options.destinationNodeId;\n\t\tthis.routeIndex = options.routeIndex;\n\t\tthis.repeaters = options.repeaters;\n\t\tthis.destinationWakeUp = options.destinationWakeUp;\n\t\tthis.destinationSpeed = options.destinationSpeed;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCAssignReturnRoute {\n\t\tvalidatePayload(raw.payload.length >= 7);\n\t\tconst destinationNodeId = raw.payload[0];\n\t\tconst routeIndex = raw.payload[1] >>> 4;\n\t\tconst numRepeaters = raw.payload[1] & 0b1111;\n\t\tconst repeaters = [...raw.payload.subarray(2, 2 + numRepeaters)];\n\t\tconst speedAndWakeup = raw.payload[2 + numRepeaters];\n\t\tconst destinationSpeed = bitmask2DataRate(\n\t\t\t(speedAndWakeup >>> 3) & 0b111,\n\t\t);\n\t\tconst destinationWakeUp: WakeUpTime = (speedAndWakeup >>> 1) & 0b11;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tdestinationNodeId,\n\t\t\trouteIndex,\n\t\t\trepeaters,\n\t\t\tdestinationSpeed,\n\t\t\tdestinationWakeUp,\n\t\t});\n\t}\n\n\tpublic destinationNodeId: number;\n\tpublic routeIndex: number;\n\tpublic repeaters: number[];\n\tpublic destinationWakeUp: WakeUpTime;\n\tpublic destinationSpeed: ZWaveDataRate;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst routeByte = (this.routeIndex << 4) | this.repeaters.length;\n\t\tconst speedMask = dataRate2Bitmask(this.destinationSpeed);\n\t\tconst speedByte = (speedMask << 3) | (this.destinationWakeUp << 1);\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.destinationNodeId,\n\t\t\trouteByte,\n\t\t\t...this.repeaters,\n\t\t\tspeedByte,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCNewNodeRegisteredOptions\n\textends NodeInformationFrame\n{\n\tnewNodeId: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.NewNodeRegistered)\nexport class ZWaveProtocolCCNewNodeRegistered extends ZWaveProtocolCC\n\timplements NodeInformationFrame\n{\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCNewNodeRegisteredOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.newNodeId = options.newNodeId;\n\t\tthis.basicDeviceClass = options.basicDeviceClass;\n\t\tthis.genericDeviceClass = options.genericDeviceClass;\n\t\tthis.specificDeviceClass = options.specificDeviceClass;\n\t\tthis.isListening = options.isListening;\n\t\tthis.isFrequentListening = options.isFrequentListening;\n\t\tthis.isRouting = options.isRouting;\n\t\tthis.supportedDataRates = options.supportedDataRates;\n\t\tthis.protocolVersion = options.protocolVersion;\n\t\tthis.optionalFunctionality = options.optionalFunctionality;\n\t\tthis.nodeType = options.nodeType;\n\t\tthis.supportsSecurity = options.supportsSecurity;\n\t\tthis.supportsBeaming = options.supportsBeaming;\n\t\tthis.supportedCCs = options.supportedCCs;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCNewNodeRegistered {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst newNodeId = raw.payload[0];\n\n\t\tconst nif = parseNodeInformationFrame(raw.payload.subarray(1));\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnewNodeId,\n\t\t\t...nif,\n\t\t});\n\t}\n\n\tpublic newNodeId: number;\n\tpublic basicDeviceClass: BasicDeviceClass;\n\tpublic genericDeviceClass: number;\n\tpublic specificDeviceClass: number;\n\tpublic isListening: boolean;\n\tpublic isFrequentListening: FLiRS;\n\tpublic isRouting: boolean;\n\tpublic supportedDataRates: DataRate[];\n\tpublic protocolVersion: ProtocolVersion;\n\tpublic optionalFunctionality: boolean;\n\tpublic nodeType: NodeType;\n\tpublic supportsSecurity: boolean;\n\tpublic supportsBeaming: boolean;\n\tpublic supportedCCs: CommandClasses[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.newNodeId]),\n\t\t\tencodeNodeInformationFrame(this),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCNewRangeRegisteredOptions {\n\ttestedNodeId: number;\n\tneighborNodeIds: number[];\n}\n\n@CCCommand(ZWaveProtocolCommand.NewRangeRegistered)\nexport class ZWaveProtocolCCNewRangeRegistered extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCNewRangeRegisteredOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.testedNodeId = options.testedNodeId;\n\t\tthis.neighborNodeIds = options.neighborNodeIds;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCNewRangeRegistered {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst testedNodeId = raw.payload[0];\n\t\tconst numNeighbors = raw.payload[1];\n\t\tconst neighborNodeIds = [\n\t\t\t...raw.payload.subarray(2, 2 + numNeighbors),\n\t\t];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttestedNodeId,\n\t\t\tneighborNodeIds,\n\t\t});\n\t}\n\n\tpublic testedNodeId: number;\n\tpublic neighborNodeIds: number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst nodesBitmask = encodeBitMask(this.neighborNodeIds, MAX_NODES);\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.testedNodeId, nodesBitmask.length]),\n\t\t\tnodesBitmask,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCTransferNewPrimaryControllerCompleteOptions {\n\tgenericDeviceClass: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.TransferNewPrimaryControllerComplete)\nexport class ZWaveProtocolCCTransferNewPrimaryControllerComplete\n\textends ZWaveProtocolCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<\n\t\t\tZWaveProtocolCCTransferNewPrimaryControllerCompleteOptions\n\t\t>,\n\t) {\n\t\tsuper(options);\n\t\tthis.genericDeviceClass = options.genericDeviceClass;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCTransferNewPrimaryControllerComplete {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst genericDeviceClass = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgenericDeviceClass,\n\t\t});\n\t}\n\n\tpublic genericDeviceClass: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.genericDeviceClass]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n@CCCommand(ZWaveProtocolCommand.AutomaticControllerUpdateStart)\nexport class ZWaveProtocolCCAutomaticControllerUpdateStart\n\textends ZWaveProtocolCC\n{}\n\n// @publicAPI\nexport interface ZWaveProtocolCCSUCNodeIDOptions {\n\tsucNodeId: number;\n\tisSIS: boolean;\n}\n\n@CCCommand(ZWaveProtocolCommand.SUCNodeID)\nexport class ZWaveProtocolCCSUCNodeID extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCSUCNodeIDOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.sucNodeId = options.sucNodeId;\n\t\tthis.isSIS = options.isSIS;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCSUCNodeID {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst sucNodeId = raw.payload[0];\n\t\tconst capabilities = raw.payload[1] ?? 0;\n\t\tconst isSIS = !!(capabilities & 0b1);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsucNodeId,\n\t\t\tisSIS,\n\t\t});\n\t}\n\n\tpublic sucNodeId: number;\n\tpublic isSIS: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.sucNodeId, this.isSIS ? 0b1 : 0]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCSetSUCOptions {\n\tenableSIS: boolean;\n}\n\n@CCCommand(ZWaveProtocolCommand.SetSUC)\nexport class ZWaveProtocolCCSetSUC extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCSetSUCOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.enableSIS = options.enableSIS;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCSetSUC {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\t// Byte 0 must be 0x01 or ignored\n\t\tconst capabilities = raw.payload[1] ?? 0;\n\t\tconst enableSIS = !!(capabilities & 0b1);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tenableSIS,\n\t\t});\n\t}\n\n\tpublic enableSIS: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([0x01, this.enableSIS ? 0b1 : 0]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCSetSUCAckOptions {\n\taccepted: boolean;\n\tisSIS: boolean;\n}\n\n@CCCommand(ZWaveProtocolCommand.SetSUCAck)\nexport class ZWaveProtocolCCSetSUCAck extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCSetSUCAckOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.accepted = options.accepted;\n\t\tthis.isSIS = options.isSIS;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCSetSUCAck {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst accepted = raw.payload[0] === 0x01;\n\t\tconst capabilities = raw.payload[1] ?? 0;\n\t\tconst isSIS = !!(capabilities & 0b1);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\taccepted,\n\t\t\tisSIS,\n\t\t});\n\t}\n\n\tpublic accepted: boolean;\n\tpublic isSIS: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.accepted ? 0x01 : 0x00,\n\t\t\tthis.isSIS ? 0b1 : 0,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n@CCCommand(ZWaveProtocolCommand.AssignSUCReturnRoute)\nexport class ZWaveProtocolCCAssignSUCReturnRoute\n\textends ZWaveProtocolCCAssignReturnRoute\n{}\n\n// @publicAPI\nexport interface ZWaveProtocolCCStaticRouteRequestOptions {\n\tnodeIds: number[];\n}\n\n@CCCommand(ZWaveProtocolCommand.StaticRouteRequest)\nexport class ZWaveProtocolCCStaticRouteRequest extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCStaticRouteRequestOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.nodeIds.some((n) => n < 1 || n > MAX_NODES)) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`All node IDs must be between 1 and ${MAX_NODES}!`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.nodeIds = options.nodeIds;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCStaticRouteRequest {\n\t\tvalidatePayload(raw.payload.length >= 5);\n\t\tconst nodeIds = [...raw.payload.subarray(0, 5)].filter(\n\t\t\t(id) => id > 0 && id <= MAX_NODES,\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnodeIds,\n\t\t});\n\t}\n\n\tpublic nodeIds: number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.alloc(5, 0);\n\t\tfor (let i = 0; i < this.nodeIds.length && i < 5; i++) {\n\t\t\tthis.payload[i] = this.nodeIds[i];\n\t\t}\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCLostOptions {\n\tlostNodeId: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.Lost)\nexport class ZWaveProtocolCCLost extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCLostOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.lostNodeId = options.lostNodeId;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): ZWaveProtocolCCLost {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst lostNodeId = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tlostNodeId,\n\t\t});\n\t}\n\n\tpublic lostNodeId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.lostNodeId]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCAcceptLostOptions {\n\taccepted: boolean;\n}\n\n@CCCommand(ZWaveProtocolCommand.AcceptLost)\nexport class ZWaveProtocolCCAcceptLost extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCAcceptLostOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.accepted = options.accepted;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCAcceptLost {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tvalidatePayload(\n\t\t\traw.payload[0] === 0x04 || raw.payload[0] === 0x05,\n\t\t);\n\t\tconst accepted = raw.payload[0] === 0x05;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\taccepted,\n\t\t});\n\t}\n\n\tpublic accepted: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.accepted ? 0x05 : 0x04]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCNOPPowerOptions {\n\tpowerDampening: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.NOPPower)\nexport class ZWaveProtocolCCNOPPower extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCNOPPowerOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.powerDampening < 0 || options.powerDampening > 14) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`${this.constructor.name}: power dampening must be between 0 and 14 dBm!`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.powerDampening = options.powerDampening;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCNOPPower {\n\t\tlet powerDampening;\n\n\t\tif (raw.payload.length >= 2) {\n\t\t\t// Ignore byte 0\n\t\t\tpowerDampening = raw.payload[1];\n\t\t} else if (raw.payload.length === 1) {\n\t\t\tpowerDampening = [\n\t\t\t\t0xf0,\n\t\t\t\t0xc8,\n\t\t\t\t0xa7,\n\t\t\t\t0x91,\n\t\t\t\t0x77,\n\t\t\t\t0x67,\n\t\t\t\t0x60,\n\t\t\t\t0x46,\n\t\t\t\t0x38,\n\t\t\t\t0x35,\n\t\t\t\t0x32,\n\t\t\t\t0x30,\n\t\t\t\t0x24,\n\t\t\t\t0x22,\n\t\t\t\t0x20,\n\t\t\t].indexOf(raw.payload[0]);\n\t\t\tif (powerDampening === -1) powerDampening = 0;\n\t\t} else {\n\t\t\tvalidatePayload.fail(\"Invalid payload length!\");\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tpowerDampening,\n\t\t});\n\t}\n\n\t// Power dampening in (negative) dBm. A value of 2 means -2 dBm.\n\tpublic powerDampening: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([0, this.powerDampening]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCReservedIDsOptions {\n\treservedNodeIDs: number[];\n}\n\n@CCCommand(ZWaveProtocolCommand.ReservedIDs)\nexport class ZWaveProtocolCCReservedIDs extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCReservedIDsOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.reservedNodeIDs = options.reservedNodeIDs;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCReservedIDs {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst numNodeIDs = raw.payload[0];\n\t\tvalidatePayload(raw.payload.length >= 1 + numNodeIDs);\n\t\tconst reservedNodeIDs = [\n\t\t\t...raw.payload.subarray(1, 1 + numNodeIDs),\n\t\t];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\treservedNodeIDs,\n\t\t});\n\t}\n\n\tpublic reservedNodeIDs: number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.reservedNodeIDs.length,\n\t\t\t...this.reservedNodeIDs,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCReserveNodeIDsOptions {\n\tnumNodeIDs: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.ReserveNodeIDs)\n@expectedCCResponse(ZWaveProtocolCCReservedIDs)\nexport class ZWaveProtocolCCReserveNodeIDs extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCReserveNodeIDsOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.numNodeIDs = options.numNodeIDs;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCReserveNodeIDs {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst numNodeIDs = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnumNodeIDs,\n\t\t});\n\t}\n\n\tpublic numNodeIDs: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.numNodeIDs]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCNodesExistReplyOptions {\n\tnodeMaskType: number;\n\tnodeListUpdated: boolean;\n}\n\n@CCCommand(ZWaveProtocolCommand.NodesExistReply)\nexport class ZWaveProtocolCCNodesExistReply extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCNodesExistReplyOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.nodeMaskType = options.nodeMaskType;\n\t\tthis.nodeListUpdated = options.nodeListUpdated;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCNodesExistReply {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst nodeMaskType = raw.payload[0];\n\t\tconst nodeListUpdated = raw.payload[1] === 0x01;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnodeMaskType,\n\t\t\tnodeListUpdated,\n\t\t});\n\t}\n\n\tpublic nodeMaskType: number;\n\tpublic nodeListUpdated: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.nodeMaskType,\n\t\t\tthis.nodeListUpdated ? 0x01 : 0x00,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\nfunction testResponseForZWaveProtocolNodesExist(\n\tsent: ZWaveProtocolCCNodesExist,\n\treceived: ZWaveProtocolCCNodesExistReply,\n) {\n\treturn received.nodeMaskType === sent.nodeMaskType;\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCNodesExistOptions {\n\tnodeMaskType: number;\n\tnodeIDs: number[];\n}\n\n@CCCommand(ZWaveProtocolCommand.NodesExist)\n@expectedCCResponse(\n\tZWaveProtocolCCNodesExistReply,\n\ttestResponseForZWaveProtocolNodesExist,\n)\nexport class ZWaveProtocolCCNodesExist extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCNodesExistOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.nodeMaskType = options.nodeMaskType;\n\t\tthis.nodeIDs = options.nodeIDs;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCNodesExist {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst nodeMaskType = raw.payload[0];\n\t\tconst numNodeIDs = raw.payload[1];\n\t\tvalidatePayload(raw.payload.length >= 2 + numNodeIDs);\n\t\tconst nodeIDs = [...raw.payload.subarray(2, 2 + numNodeIDs)];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnodeMaskType,\n\t\t\tnodeIDs,\n\t\t});\n\t}\n\n\tpublic nodeMaskType: number;\n\tpublic nodeIDs: number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.nodeMaskType,\n\t\t\tthis.nodeIDs.length,\n\t\t\t...this.nodeIDs,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCSetNWIModeOptions {\n\tenabled: boolean;\n\ttimeoutMinutes?: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.SetNWIMode)\nexport class ZWaveProtocolCCSetNWIMode extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCSetNWIModeOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.enabled = options.enabled;\n\t\tthis.timeoutMinutes = options.timeoutMinutes;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCSetNWIMode {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst enabled = raw.payload[0] === 0x01;\n\t\tconst timeoutMinutes: number | undefined = raw.payload[1] || undefined;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tenabled,\n\t\t\ttimeoutMinutes,\n\t\t});\n\t}\n\n\tpublic enabled: boolean;\n\tpublic timeoutMinutes?: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.enabled ? 0x01 : 0x00,\n\t\t\tthis.timeoutMinutes ?? 0x00,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n@CCCommand(ZWaveProtocolCommand.ExcludeRequest)\nexport class ZWaveProtocolCCExcludeRequest\n\textends ZWaveProtocolCCNodeInformationFrame\n{}\n\n// @publicAPI\nexport interface ZWaveProtocolCCAssignReturnRoutePriorityOptions {\n\ttargetNodeId: number;\n\trouteNumber: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.AssignReturnRoutePriority)\nexport class ZWaveProtocolCCAssignReturnRoutePriority extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCAssignReturnRoutePriorityOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.targetNodeId = options.targetNodeId;\n\t\tthis.routeNumber = options.routeNumber;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCAssignReturnRoutePriority {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst targetNodeId = raw.payload[0];\n\t\tconst routeNumber = raw.payload[1];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttargetNodeId,\n\t\t\trouteNumber,\n\t\t});\n\t}\n\n\tpublic targetNodeId: number;\n\tpublic routeNumber: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.targetNodeId, this.routeNumber]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n@CCCommand(ZWaveProtocolCommand.AssignSUCReturnRoutePriority)\nexport class ZWaveProtocolCCAssignSUCReturnRoutePriority\n\textends ZWaveProtocolCCAssignReturnRoutePriority\n{}\n\n// @publicAPI\nexport interface ZWaveProtocolCCSmartStartIncludedNodeInformationOptions {\n\tnwiHomeId: BytesView;\n}\n\n@CCCommand(ZWaveProtocolCommand.SmartStartIncludedNodeInformation)\nexport class ZWaveProtocolCCSmartStartIncludedNodeInformation\n\textends ZWaveProtocolCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<\n\t\t\tZWaveProtocolCCSmartStartIncludedNodeInformationOptions\n\t\t>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.nwiHomeId.length !== 4) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`nwiHomeId must have length 4`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.nwiHomeId = options.nwiHomeId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCSmartStartIncludedNodeInformation {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst nwiHomeId = raw.payload.subarray(0, 4);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnwiHomeId,\n\t\t});\n\t}\n\n\tpublic nwiHomeId: BytesView;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from(this.nwiHomeId);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n@CCCommand(ZWaveProtocolCommand.SmartStartPrime)\nexport class ZWaveProtocolCCSmartStartPrime\n\textends ZWaveProtocolCCNodeInformationFrame\n{}\n\n@CCCommand(ZWaveProtocolCommand.SmartStartInclusionRequest)\nexport class ZWaveProtocolCCSmartStartInclusionRequest\n\textends ZWaveProtocolCCNodeInformationFrame\n{}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\ttype BasicDeviceClass,\n\tCommandClasses,\n\ttype DataRate,\n\ttype FLiRS,\n\tMAX_NODES,\n\tMAX_REPEATERS,\n\ttype NodeInformationFrame,\n\ttype NodeProtocolInfoAndDeviceClass,\n\ttype NodeType,\n\ttype ProtocolVersion,\n\ttype WithAddress,\n\tZWaveDataRate,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tencodeBitMask,\n\tencodeNodeInformationFrame,\n\tencodeNodeProtocolInfoAndDeviceClass,\n\tparseBitMask,\n\tparseNodeInformationFrame,\n\tparseNodeProtocolInfoAndDeviceClass,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, type BytesView } from \"@zwave-js/shared\";\nimport { type CCRaw, CommandClass } from \"../lib/CommandClass.js\";\nimport {\n\tCCCommand,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\nimport {\n\ttype NetworkTransferStatus,\n\tWakeUpTime,\n\tZWaveProtocolCommand,\n\tparseWakeUpTime,\n} from \"../lib/_Types.js\";\n\nenum DataRateBitmask {\n\t\"9k6\" = 0b001,\n\t\"40k\" = 0b010,\n\t\"100k\" = 0b100,\n}\n\nfunction dataRate2Bitmask(dataRate: ZWaveDataRate): DataRateBitmask {\n\treturn dataRate === ZWaveDataRate[\"100k\"]\n\t\t? DataRateBitmask[\"100k\"]\n\t\t: dataRate === ZWaveDataRate[\"40k\"]\n\t\t? DataRateBitmask[\"40k\"]\n\t\t: DataRateBitmask[\"9k6\"];\n}\n\nfunction bitmask2DataRate(mask: DataRateBitmask): ZWaveDataRate {\n\treturn mask === DataRateBitmask[\"100k\"]\n\t\t? ZWaveDataRate[\"100k\"]\n\t\t: mask === DataRateBitmask[\"40k\"]\n\t\t? ZWaveDataRate[\"40k\"]\n\t\t: ZWaveDataRate[\"9k6\"];\n}\n\n@commandClass(CommandClasses[\"Z-Wave Protocol\"])\n@implementedVersion(1)\nexport class ZWaveProtocolCC extends CommandClass {\n\tdeclare ccCommand: ZWaveProtocolCommand;\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCNodeInformationFrameOptions\n\textends NodeInformationFrame\n{}\n\n@CCCommand(ZWaveProtocolCommand.NodeInformationFrame)\nexport class ZWaveProtocolCCNodeInformationFrame extends ZWaveProtocolCC\n\timplements NodeInformationFrame\n{\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCNodeInformationFrameOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.basicDeviceClass = options.basicDeviceClass;\n\t\tthis.genericDeviceClass = options.genericDeviceClass;\n\t\tthis.specificDeviceClass = options.specificDeviceClass;\n\t\tthis.isListening = options.isListening;\n\t\tthis.isFrequentListening = options.isFrequentListening;\n\t\tthis.isRouting = options.isRouting;\n\t\tthis.supportedDataRates = options.supportedDataRates;\n\t\tthis.protocolVersion = options.protocolVersion;\n\t\tthis.optionalFunctionality = options.optionalFunctionality;\n\t\tthis.nodeType = options.nodeType;\n\t\tthis.supportsSecurity = options.supportsSecurity;\n\t\tthis.supportsBeaming = options.supportsBeaming;\n\t\tthis.supportedCCs = options.supportedCCs;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCNodeInformationFrame {\n\t\tconst nif = parseNodeInformationFrame(raw.payload);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t...nif,\n\t\t});\n\t}\n\n\tpublic basicDeviceClass: BasicDeviceClass;\n\tpublic genericDeviceClass: number;\n\tpublic specificDeviceClass: number;\n\tpublic isListening: boolean;\n\tpublic isFrequentListening: FLiRS;\n\tpublic isRouting: boolean;\n\tpublic supportedDataRates: DataRate[];\n\tpublic protocolVersion: ProtocolVersion;\n\tpublic optionalFunctionality: boolean;\n\tpublic nodeType: NodeType;\n\tpublic supportsSecurity: boolean;\n\tpublic supportsBeaming: boolean;\n\tpublic supportedCCs: CommandClasses[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = encodeNodeInformationFrame(this);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n@CCCommand(ZWaveProtocolCommand.RequestNodeInformationFrame)\n@expectedCCResponse(ZWaveProtocolCCNodeInformationFrame)\nexport class ZWaveProtocolCCRequestNodeInformationFrame\n\textends ZWaveProtocolCC\n{}\n\n// @publicAPI\nexport interface ZWaveProtocolCCAssignIDsOptions {\n\tassignedNodeId: number;\n\thomeId: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.AssignIDs)\nexport class ZWaveProtocolCCAssignIDs extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCAssignIDsOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.assignedNodeId = options.assignedNodeId;\n\t\tthis.homeId = options.homeId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCAssignIDs {\n\t\tvalidatePayload(raw.payload.length >= 5);\n\t\tconst assignedNodeId = raw.payload[0];\n\t\tconst homeId = raw.payload.readUInt32BE(1);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tassignedNodeId,\n\t\t\thomeId,\n\t\t});\n\t}\n\n\tpublic assignedNodeId: number;\n\tpublic homeId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = new Bytes(5);\n\t\tthis.payload[0] = this.assignedNodeId;\n\t\tthis.payload.writeUInt32BE(this.homeId, 1);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCFindNodesInRangeOptions {\n\tcandidateNodeIds: number[];\n\twakeUpTime: WakeUpTime;\n\tdataRate?: ZWaveDataRate;\n}\n\n@CCCommand(ZWaveProtocolCommand.FindNodesInRange)\nexport class ZWaveProtocolCCFindNodesInRange extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCFindNodesInRangeOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.candidateNodeIds = options.candidateNodeIds;\n\t\tthis.wakeUpTime = options.wakeUpTime;\n\t\tthis.dataRate = options.dataRate ?? ZWaveDataRate[\"9k6\"];\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCFindNodesInRange {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst speedPresent = raw.payload[0] & 0b1000_0000;\n\t\tconst bitmaskLength = raw.payload[0] & 0b0001_1111;\n\n\t\tvalidatePayload(raw.payload.length >= 1 + bitmaskLength);\n\t\tconst candidateNodeIds = parseBitMask(\n\t\t\traw.payload.subarray(1, 1 + bitmaskLength),\n\t\t);\n\t\tconst rest = raw.payload.subarray(1 + bitmaskLength);\n\n\t\tlet dataRate: ZWaveDataRate;\n\t\tlet wakeUpTime: WakeUpTime;\n\t\tif (speedPresent) {\n\t\t\tvalidatePayload(rest.length >= 1);\n\t\t\tif (rest.length === 1) {\n\t\t\t\tdataRate = rest[0] & 0b111;\n\t\t\t\twakeUpTime = WakeUpTime.None;\n\t\t\t} else if (rest.length === 2) {\n\t\t\t\twakeUpTime = parseWakeUpTime(rest[0]);\n\t\t\t\tdataRate = rest[1] & 0b111;\n\t\t\t} else {\n\t\t\t\tvalidatePayload.fail(\"Invalid payload length\");\n\t\t\t}\n\t\t} else if (rest.length >= 1) {\n\t\t\twakeUpTime = parseWakeUpTime(rest[0]);\n\t\t\tdataRate = ZWaveDataRate[\"9k6\"];\n\t\t} else {\n\t\t\twakeUpTime = WakeUpTime.None;\n\t\t\tdataRate = ZWaveDataRate[\"9k6\"];\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tcandidateNodeIds,\n\t\t\tdataRate,\n\t\t\twakeUpTime,\n\t\t});\n\t}\n\n\tpublic candidateNodeIds: number[];\n\tpublic wakeUpTime: WakeUpTime;\n\tpublic dataRate: ZWaveDataRate;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst nodesBitmask = encodeBitMask(this.candidateNodeIds, MAX_NODES);\n\t\tconst speedAndLength = 0b1000_0000 | nodesBitmask.length;\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([speedAndLength]),\n\t\t\tnodesBitmask,\n\t\t\tBytes.from([this.wakeUpTime, this.dataRate]),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCRangeInfoOptions {\n\tneighborNodeIds: number[];\n\twakeUpTime?: WakeUpTime;\n}\n\n@CCCommand(ZWaveProtocolCommand.RangeInfo)\nexport class ZWaveProtocolCCRangeInfo extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCRangeInfoOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.neighborNodeIds = options.neighborNodeIds;\n\t\tthis.wakeUpTime = options.wakeUpTime;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCRangeInfo {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst bitmaskLength = raw.payload[0] & 0b0001_1111;\n\n\t\tvalidatePayload(raw.payload.length >= 1 + bitmaskLength);\n\t\tconst neighborNodeIds = parseBitMask(\n\t\t\traw.payload.subarray(1, 1 + bitmaskLength),\n\t\t);\n\n\t\tlet wakeUpTime: WakeUpTime | undefined;\n\t\tif (raw.payload.length >= 2 + bitmaskLength) {\n\t\t\twakeUpTime = parseWakeUpTime(\n\t\t\t\traw.payload[1 + bitmaskLength],\n\t\t\t);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tneighborNodeIds,\n\t\t\twakeUpTime,\n\t\t});\n\t}\n\n\tpublic neighborNodeIds: number[];\n\tpublic wakeUpTime?: WakeUpTime;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst nodesBitmask = encodeBitMask(this.neighborNodeIds, MAX_NODES);\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([nodesBitmask.length]),\n\t\t\tnodesBitmask,\n\t\t\tthis.wakeUpTime != undefined\n\t\t\t\t? Bytes.from([this.wakeUpTime])\n\t\t\t\t: new Bytes(),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n@CCCommand(ZWaveProtocolCommand.GetNodesInRange)\n@expectedCCResponse(ZWaveProtocolCCRangeInfo)\nexport class ZWaveProtocolCCGetNodesInRange extends ZWaveProtocolCC {}\n\n// @publicAPI\nexport interface ZWaveProtocolCCCommandCompleteOptions {\n\tsequenceNumber: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.CommandComplete)\nexport class ZWaveProtocolCCCommandComplete extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCCommandCompleteOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.sequenceNumber = options.sequenceNumber;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCCommandComplete {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst sequenceNumber = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsequenceNumber,\n\t\t});\n\t}\n\n\tpublic sequenceNumber: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.sequenceNumber]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCTransferPresentationOptions {\n\tsupportsNWI: boolean;\n\tincludeNode: boolean;\n\texcludeNode: boolean;\n}\n\n@CCCommand(ZWaveProtocolCommand.TransferPresentation)\nexport class ZWaveProtocolCCTransferPresentation extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCTransferPresentationOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.includeNode && options.excludeNode) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`${this.constructor.name}: the includeNode and excludeNode options cannot both be true`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.supportsNWI = options.supportsNWI;\n\t\tthis.includeNode = options.includeNode;\n\t\tthis.excludeNode = options.excludeNode;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCTransferPresentation {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst option = raw.payload[0];\n\t\tconst supportsNWI = !!(option & 0b0001);\n\t\tconst excludeNode = !!(option & 0b0010);\n\t\tconst includeNode = !!(option & 0b0100);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportsNWI,\n\t\t\texcludeNode,\n\t\t\tincludeNode,\n\t\t});\n\t}\n\n\tpublic supportsNWI: boolean;\n\tpublic includeNode: boolean;\n\tpublic excludeNode: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\t(this.supportsNWI ? 0b0001 : 0)\n\t\t\t| (this.excludeNode ? 0b0010 : 0)\n\t\t\t| (this.includeNode ? 0b0100 : 0),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCTransferNodeInformationOptions\n\textends NodeProtocolInfoAndDeviceClass\n{\n\tsequenceNumber: number;\n\tsourceNodeId: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.TransferNodeInformation)\nexport class ZWaveProtocolCCTransferNodeInformation extends ZWaveProtocolCC\n\timplements NodeProtocolInfoAndDeviceClass\n{\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCTransferNodeInformationOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.sequenceNumber = options.sequenceNumber;\n\t\tthis.sourceNodeId = options.sourceNodeId;\n\n\t\tthis.basicDeviceClass = options.basicDeviceClass;\n\t\tthis.genericDeviceClass = options.genericDeviceClass;\n\t\tthis.specificDeviceClass = options.specificDeviceClass;\n\t\tthis.isListening = options.isListening;\n\t\tthis.isFrequentListening = options.isFrequentListening;\n\t\tthis.isRouting = options.isRouting;\n\t\tthis.supportedDataRates = options.supportedDataRates;\n\t\tthis.protocolVersion = options.protocolVersion;\n\t\tthis.optionalFunctionality = options.optionalFunctionality;\n\t\tthis.nodeType = options.nodeType;\n\t\tthis.supportsSecurity = options.supportsSecurity;\n\t\tthis.supportsBeaming = options.supportsBeaming;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCTransferNodeInformation {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst sequenceNumber = raw.payload[0];\n\t\tconst sourceNodeId = raw.payload[1];\n\n\t\tconst { info } = parseNodeProtocolInfoAndDeviceClass(\n\t\t\traw.payload.subarray(2),\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsequenceNumber,\n\t\t\tsourceNodeId,\n\t\t\t...info,\n\t\t});\n\t}\n\n\tpublic sequenceNumber: number;\n\tpublic sourceNodeId: number;\n\tpublic basicDeviceClass: BasicDeviceClass;\n\tpublic genericDeviceClass: number;\n\tpublic specificDeviceClass: number;\n\tpublic isListening: boolean;\n\tpublic isFrequentListening: FLiRS;\n\tpublic isRouting: boolean;\n\tpublic supportedDataRates: DataRate[];\n\tpublic protocolVersion: ProtocolVersion;\n\tpublic optionalFunctionality: boolean;\n\tpublic nodeType: NodeType;\n\tpublic supportsSecurity: boolean;\n\tpublic supportsBeaming: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.sequenceNumber, this.sourceNodeId]),\n\t\t\tencodeNodeProtocolInfoAndDeviceClass(this),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCTransferRangeInformationOptions {\n\tsequenceNumber: number;\n\ttestedNodeId: number;\n\tneighborNodeIds: number[];\n}\n\n@CCCommand(ZWaveProtocolCommand.TransferRangeInformation)\nexport class ZWaveProtocolCCTransferRangeInformation extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCTransferRangeInformationOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.sequenceNumber = options.sequenceNumber;\n\t\tthis.testedNodeId = options.testedNodeId;\n\t\tthis.neighborNodeIds = options.neighborNodeIds;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCTransferRangeInformation {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst sequenceNumber = raw.payload[0];\n\t\tconst testedNodeId = raw.payload[1];\n\t\tconst bitmaskLength = raw.payload[2];\n\n\t\tvalidatePayload(raw.payload.length >= 3 + bitmaskLength);\n\t\tconst neighborNodeIds = parseBitMask(\n\t\t\traw.payload.subarray(3, 3 + bitmaskLength),\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsequenceNumber,\n\t\t\ttestedNodeId,\n\t\t\tneighborNodeIds,\n\t\t});\n\t}\n\n\tpublic sequenceNumber: number;\n\tpublic testedNodeId: number;\n\tpublic neighborNodeIds: number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst nodesBitmask = encodeBitMask(this.neighborNodeIds, MAX_NODES);\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([\n\t\t\t\tthis.sequenceNumber,\n\t\t\t\tthis.testedNodeId,\n\t\t\t\tnodesBitmask.length,\n\t\t\t]),\n\t\t\tnodesBitmask,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCTransferEndOptions {\n\tstatus: NetworkTransferStatus;\n}\n\n@CCCommand(ZWaveProtocolCommand.TransferEnd)\nexport class ZWaveProtocolCCTransferEnd extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCTransferEndOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.status = options.status;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCTransferEnd {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst status: NetworkTransferStatus = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tstatus,\n\t\t});\n\t}\n\n\tpublic status: NetworkTransferStatus;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.status]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCAssignReturnRouteOptions {\n\tdestinationNodeId: number;\n\trouteIndex: number;\n\trepeaters: number[];\n\tdestinationWakeUp: WakeUpTime;\n\tdestinationSpeed: ZWaveDataRate;\n}\n\n@CCCommand(ZWaveProtocolCommand.AssignReturnRoute)\nexport class ZWaveProtocolCCAssignReturnRoute extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCAssignReturnRouteOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.repeaters.length > MAX_REPEATERS) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`${this.constructor.name}: too many repeaters`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\n\t\tthis.destinationNodeId = options.destinationNodeId;\n\t\tthis.routeIndex = options.routeIndex;\n\t\tthis.repeaters = options.repeaters;\n\t\tthis.destinationWakeUp = options.destinationWakeUp;\n\t\tthis.destinationSpeed = options.destinationSpeed;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCAssignReturnRoute {\n\t\tvalidatePayload(raw.payload.length >= 7);\n\t\tconst destinationNodeId = raw.payload[0];\n\t\tconst routeIndex = raw.payload[1] >>> 4;\n\t\tconst numRepeaters = raw.payload[1] & 0b1111;\n\t\tconst repeaters = [...raw.payload.subarray(2, 2 + numRepeaters)];\n\t\tconst speedAndWakeup = raw.payload[2 + numRepeaters];\n\t\tconst destinationSpeed = bitmask2DataRate(\n\t\t\t(speedAndWakeup >>> 3) & 0b111,\n\t\t);\n\t\tconst destinationWakeUp: WakeUpTime = (speedAndWakeup >>> 1) & 0b11;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tdestinationNodeId,\n\t\t\trouteIndex,\n\t\t\trepeaters,\n\t\t\tdestinationSpeed,\n\t\t\tdestinationWakeUp,\n\t\t});\n\t}\n\n\tpublic destinationNodeId: number;\n\tpublic routeIndex: number;\n\tpublic repeaters: number[];\n\tpublic destinationWakeUp: WakeUpTime;\n\tpublic destinationSpeed: ZWaveDataRate;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst routeByte = (this.routeIndex << 4) | this.repeaters.length;\n\t\tconst speedMask = dataRate2Bitmask(this.destinationSpeed);\n\t\tconst speedByte = (speedMask << 3) | (this.destinationWakeUp << 1);\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.destinationNodeId,\n\t\t\trouteByte,\n\t\t\t...this.repeaters,\n\t\t\tspeedByte,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCNewNodeRegisteredOptions\n\textends NodeInformationFrame\n{\n\tnewNodeId: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.NewNodeRegistered)\nexport class ZWaveProtocolCCNewNodeRegistered extends ZWaveProtocolCC\n\timplements NodeInformationFrame\n{\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCNewNodeRegisteredOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.newNodeId = options.newNodeId;\n\t\tthis.basicDeviceClass = options.basicDeviceClass;\n\t\tthis.genericDeviceClass = options.genericDeviceClass;\n\t\tthis.specificDeviceClass = options.specificDeviceClass;\n\t\tthis.isListening = options.isListening;\n\t\tthis.isFrequentListening = options.isFrequentListening;\n\t\tthis.isRouting = options.isRouting;\n\t\tthis.supportedDataRates = options.supportedDataRates;\n\t\tthis.protocolVersion = options.protocolVersion;\n\t\tthis.optionalFunctionality = options.optionalFunctionality;\n\t\tthis.nodeType = options.nodeType;\n\t\tthis.supportsSecurity = options.supportsSecurity;\n\t\tthis.supportsBeaming = options.supportsBeaming;\n\t\tthis.supportedCCs = options.supportedCCs;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCNewNodeRegistered {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst newNodeId = raw.payload[0];\n\n\t\tconst nif = parseNodeInformationFrame(raw.payload.subarray(1));\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnewNodeId,\n\t\t\t...nif,\n\t\t});\n\t}\n\n\tpublic newNodeId: number;\n\tpublic basicDeviceClass: BasicDeviceClass;\n\tpublic genericDeviceClass: number;\n\tpublic specificDeviceClass: number;\n\tpublic isListening: boolean;\n\tpublic isFrequentListening: FLiRS;\n\tpublic isRouting: boolean;\n\tpublic supportedDataRates: DataRate[];\n\tpublic protocolVersion: ProtocolVersion;\n\tpublic optionalFunctionality: boolean;\n\tpublic nodeType: NodeType;\n\tpublic supportsSecurity: boolean;\n\tpublic supportsBeaming: boolean;\n\tpublic supportedCCs: CommandClasses[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.newNodeId]),\n\t\t\tencodeNodeInformationFrame(this),\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCNewRangeRegisteredOptions {\n\ttestedNodeId: number;\n\tneighborNodeIds: number[];\n}\n\n@CCCommand(ZWaveProtocolCommand.NewRangeRegistered)\nexport class ZWaveProtocolCCNewRangeRegistered extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCNewRangeRegisteredOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.testedNodeId = options.testedNodeId;\n\t\tthis.neighborNodeIds = options.neighborNodeIds;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCNewRangeRegistered {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst testedNodeId = raw.payload[0];\n\t\tconst numNeighbors = raw.payload[1];\n\t\tconst neighborNodeIds = [\n\t\t\t...raw.payload.subarray(2, 2 + numNeighbors),\n\t\t];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttestedNodeId,\n\t\t\tneighborNodeIds,\n\t\t});\n\t}\n\n\tpublic testedNodeId: number;\n\tpublic neighborNodeIds: number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst nodesBitmask = encodeBitMask(this.neighborNodeIds, MAX_NODES);\n\t\tthis.payload = Bytes.concat([\n\t\t\tBytes.from([this.testedNodeId, nodesBitmask.length]),\n\t\t\tnodesBitmask,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCTransferNewPrimaryControllerCompleteOptions {\n\tgenericDeviceClass: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.TransferNewPrimaryControllerComplete)\nexport class ZWaveProtocolCCTransferNewPrimaryControllerComplete\n\textends ZWaveProtocolCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<\n\t\t\tZWaveProtocolCCTransferNewPrimaryControllerCompleteOptions\n\t\t>,\n\t) {\n\t\tsuper(options);\n\t\tthis.genericDeviceClass = options.genericDeviceClass;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCTransferNewPrimaryControllerComplete {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst genericDeviceClass = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tgenericDeviceClass,\n\t\t});\n\t}\n\n\tpublic genericDeviceClass: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.genericDeviceClass]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n@CCCommand(ZWaveProtocolCommand.AutomaticControllerUpdateStart)\nexport class ZWaveProtocolCCAutomaticControllerUpdateStart\n\textends ZWaveProtocolCC\n{}\n\n// @publicAPI\nexport interface ZWaveProtocolCCSUCNodeIDOptions {\n\tsucNodeId: number;\n\tisSIS: boolean;\n}\n\n@CCCommand(ZWaveProtocolCommand.SUCNodeID)\nexport class ZWaveProtocolCCSUCNodeID extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCSUCNodeIDOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.sucNodeId = options.sucNodeId;\n\t\tthis.isSIS = options.isSIS;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCSUCNodeID {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst sucNodeId = raw.payload[0];\n\t\tconst capabilities = raw.payload[1] ?? 0;\n\t\tconst isSIS = !!(capabilities & 0b1);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsucNodeId,\n\t\t\tisSIS,\n\t\t});\n\t}\n\n\tpublic sucNodeId: number;\n\tpublic isSIS: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.sucNodeId, this.isSIS ? 0b1 : 0]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCSetSUCOptions {\n\tenableSIS: boolean;\n}\n\n@CCCommand(ZWaveProtocolCommand.SetSUC)\nexport class ZWaveProtocolCCSetSUC extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCSetSUCOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.enableSIS = options.enableSIS;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCSetSUC {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\t// Byte 0 must be 0x01 or ignored\n\t\tconst capabilities = raw.payload[1] ?? 0;\n\t\tconst enableSIS = !!(capabilities & 0b1);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tenableSIS,\n\t\t});\n\t}\n\n\tpublic enableSIS: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([0x01, this.enableSIS ? 0b1 : 0]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCSetSUCAckOptions {\n\taccepted: boolean;\n\tisSIS: boolean;\n}\n\n@CCCommand(ZWaveProtocolCommand.SetSUCAck)\nexport class ZWaveProtocolCCSetSUCAck extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCSetSUCAckOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.accepted = options.accepted;\n\t\tthis.isSIS = options.isSIS;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCSetSUCAck {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst accepted = raw.payload[0] === 0x01;\n\t\tconst capabilities = raw.payload[1] ?? 0;\n\t\tconst isSIS = !!(capabilities & 0b1);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\taccepted,\n\t\t\tisSIS,\n\t\t});\n\t}\n\n\tpublic accepted: boolean;\n\tpublic isSIS: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.accepted ? 0x01 : 0x00,\n\t\t\tthis.isSIS ? 0b1 : 0,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n@CCCommand(ZWaveProtocolCommand.AssignSUCReturnRoute)\nexport class ZWaveProtocolCCAssignSUCReturnRoute\n\textends ZWaveProtocolCCAssignReturnRoute\n{}\n\n// @publicAPI\nexport interface ZWaveProtocolCCStaticRouteRequestOptions {\n\tnodeIds: number[];\n}\n\n@CCCommand(ZWaveProtocolCommand.StaticRouteRequest)\nexport class ZWaveProtocolCCStaticRouteRequest extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCStaticRouteRequestOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.nodeIds.some((n) => n < 1 || n > MAX_NODES)) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`All node IDs must be between 1 and ${MAX_NODES}!`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.nodeIds = options.nodeIds;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCStaticRouteRequest {\n\t\tvalidatePayload(raw.payload.length >= 5);\n\t\tconst nodeIds = [...raw.payload.subarray(0, 5)].filter(\n\t\t\t(id) => id > 0 && id <= MAX_NODES,\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnodeIds,\n\t\t});\n\t}\n\n\tpublic nodeIds: number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.alloc(5, 0);\n\t\tfor (let i = 0; i < this.nodeIds.length && i < 5; i++) {\n\t\t\tthis.payload[i] = this.nodeIds[i];\n\t\t}\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCLostOptions {\n\tlostNodeId: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.Lost)\nexport class ZWaveProtocolCCLost extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCLostOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.lostNodeId = options.lostNodeId;\n\t}\n\n\tpublic static from(raw: CCRaw, ctx: CCParsingContext): ZWaveProtocolCCLost {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst lostNodeId = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tlostNodeId,\n\t\t});\n\t}\n\n\tpublic lostNodeId: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.lostNodeId]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCAcceptLostOptions {\n\taccepted: boolean;\n}\n\n@CCCommand(ZWaveProtocolCommand.AcceptLost)\nexport class ZWaveProtocolCCAcceptLost extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCAcceptLostOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.accepted = options.accepted;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCAcceptLost {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tvalidatePayload(\n\t\t\traw.payload[0] === 0x04 || raw.payload[0] === 0x05,\n\t\t);\n\t\tconst accepted = raw.payload[0] === 0x05;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\taccepted,\n\t\t});\n\t}\n\n\tpublic accepted: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.accepted ? 0x05 : 0x04]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCNOPPowerOptions {\n\tpowerDampening: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.NOPPower)\nexport class ZWaveProtocolCCNOPPower extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCNOPPowerOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.powerDampening < 0 || options.powerDampening > 14) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`${this.constructor.name}: power dampening must be between 0 and 14 dBm!`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.powerDampening = options.powerDampening;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCNOPPower {\n\t\tlet powerDampening;\n\n\t\tif (raw.payload.length >= 2) {\n\t\t\t// Ignore byte 0\n\t\t\tpowerDampening = raw.payload[1];\n\t\t} else if (raw.payload.length === 1) {\n\t\t\tpowerDampening = [\n\t\t\t\t0xf0,\n\t\t\t\t0xc8,\n\t\t\t\t0xa7,\n\t\t\t\t0x91,\n\t\t\t\t0x77,\n\t\t\t\t0x67,\n\t\t\t\t0x60,\n\t\t\t\t0x46,\n\t\t\t\t0x38,\n\t\t\t\t0x35,\n\t\t\t\t0x32,\n\t\t\t\t0x30,\n\t\t\t\t0x24,\n\t\t\t\t0x22,\n\t\t\t\t0x20,\n\t\t\t].indexOf(raw.payload[0]);\n\t\t\tif (powerDampening === -1) powerDampening = 0;\n\t\t} else {\n\t\t\tvalidatePayload.fail(\"Invalid payload length!\");\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tpowerDampening,\n\t\t});\n\t}\n\n\t// Power dampening in (negative) dBm. A value of 2 means -2 dBm.\n\tpublic powerDampening: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([0, this.powerDampening]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCReservedIDsOptions {\n\treservedNodeIDs: number[];\n}\n\n@CCCommand(ZWaveProtocolCommand.ReservedIDs)\nexport class ZWaveProtocolCCReservedIDs extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCReservedIDsOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.reservedNodeIDs = options.reservedNodeIDs;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCReservedIDs {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst numNodeIDs = raw.payload[0];\n\t\tvalidatePayload(raw.payload.length >= 1 + numNodeIDs);\n\t\tconst reservedNodeIDs = [\n\t\t\t...raw.payload.subarray(1, 1 + numNodeIDs),\n\t\t];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\treservedNodeIDs,\n\t\t});\n\t}\n\n\tpublic reservedNodeIDs: number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.reservedNodeIDs.length,\n\t\t\t...this.reservedNodeIDs,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCReserveNodeIDsOptions {\n\tnumNodeIDs: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.ReserveNodeIDs)\n@expectedCCResponse(ZWaveProtocolCCReservedIDs)\nexport class ZWaveProtocolCCReserveNodeIDs extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCReserveNodeIDsOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.numNodeIDs = options.numNodeIDs;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCReserveNodeIDs {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst numNodeIDs = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnumNodeIDs,\n\t\t});\n\t}\n\n\tpublic numNodeIDs: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.numNodeIDs]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCNodesExistReplyOptions {\n\tnodeMaskType: number;\n\tnodeListUpdated: boolean;\n}\n\n@CCCommand(ZWaveProtocolCommand.NodesExistReply)\nexport class ZWaveProtocolCCNodesExistReply extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCNodesExistReplyOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.nodeMaskType = options.nodeMaskType;\n\t\tthis.nodeListUpdated = options.nodeListUpdated;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCNodesExistReply {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst nodeMaskType = raw.payload[0];\n\t\tconst nodeListUpdated = raw.payload[1] === 0x01;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnodeMaskType,\n\t\t\tnodeListUpdated,\n\t\t});\n\t}\n\n\tpublic nodeMaskType: number;\n\tpublic nodeListUpdated: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.nodeMaskType,\n\t\t\tthis.nodeListUpdated ? 0x01 : 0x00,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\nfunction testResponseForZWaveProtocolNodesExist(\n\tsent: ZWaveProtocolCCNodesExist,\n\treceived: ZWaveProtocolCCNodesExistReply,\n) {\n\treturn received.nodeMaskType === sent.nodeMaskType;\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCNodesExistOptions {\n\tnodeMaskType: number;\n\tnodeIDs: number[];\n}\n\n@CCCommand(ZWaveProtocolCommand.NodesExist)\n@expectedCCResponse(\n\tZWaveProtocolCCNodesExistReply,\n\ttestResponseForZWaveProtocolNodesExist,\n)\nexport class ZWaveProtocolCCNodesExist extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCNodesExistOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.nodeMaskType = options.nodeMaskType;\n\t\tthis.nodeIDs = options.nodeIDs;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCNodesExist {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst nodeMaskType = raw.payload[0];\n\t\tconst numNodeIDs = raw.payload[1];\n\t\tvalidatePayload(raw.payload.length >= 2 + numNodeIDs);\n\t\tconst nodeIDs = [...raw.payload.subarray(2, 2 + numNodeIDs)];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnodeMaskType,\n\t\t\tnodeIDs,\n\t\t});\n\t}\n\n\tpublic nodeMaskType: number;\n\tpublic nodeIDs: number[];\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.nodeMaskType,\n\t\t\tthis.nodeIDs.length,\n\t\t\t...this.nodeIDs,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n// @publicAPI\nexport interface ZWaveProtocolCCSetNWIModeOptions {\n\tenabled: boolean;\n\ttimeoutMinutes?: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.SetNWIMode)\nexport class ZWaveProtocolCCSetNWIMode extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCSetNWIModeOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.enabled = options.enabled;\n\t\tthis.timeoutMinutes = options.timeoutMinutes;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCSetNWIMode {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst enabled = raw.payload[0] === 0x01;\n\t\tconst timeoutMinutes: number | undefined = raw.payload[1] || undefined;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tenabled,\n\t\t\ttimeoutMinutes,\n\t\t});\n\t}\n\n\tpublic enabled: boolean;\n\tpublic timeoutMinutes?: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.enabled ? 0x01 : 0x00,\n\t\t\tthis.timeoutMinutes ?? 0x00,\n\t\t]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n@CCCommand(ZWaveProtocolCommand.ExcludeRequest)\nexport class ZWaveProtocolCCExcludeRequest\n\textends ZWaveProtocolCCNodeInformationFrame\n{}\n\n// @publicAPI\nexport interface ZWaveProtocolCCAssignReturnRoutePriorityOptions {\n\ttargetNodeId: number;\n\trouteNumber: number;\n}\n\n@CCCommand(ZWaveProtocolCommand.AssignReturnRoutePriority)\nexport class ZWaveProtocolCCAssignReturnRoutePriority extends ZWaveProtocolCC {\n\tpublic constructor(\n\t\toptions: WithAddress<ZWaveProtocolCCAssignReturnRoutePriorityOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.targetNodeId = options.targetNodeId;\n\t\tthis.routeNumber = options.routeNumber;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCAssignReturnRoutePriority {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst targetNodeId = raw.payload[0];\n\t\tconst routeNumber = raw.payload[1];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\ttargetNodeId,\n\t\t\trouteNumber,\n\t\t});\n\t}\n\n\tpublic targetNodeId: number;\n\tpublic routeNumber: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.targetNodeId, this.routeNumber]);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n@CCCommand(ZWaveProtocolCommand.AssignSUCReturnRoutePriority)\nexport class ZWaveProtocolCCAssignSUCReturnRoutePriority\n\textends ZWaveProtocolCCAssignReturnRoutePriority\n{}\n\n// @publicAPI\nexport interface ZWaveProtocolCCSmartStartIncludedNodeInformationOptions {\n\tnwiHomeId: BytesView;\n}\n\n@CCCommand(ZWaveProtocolCommand.SmartStartIncludedNodeInformation)\nexport class ZWaveProtocolCCSmartStartIncludedNodeInformation\n\textends ZWaveProtocolCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<\n\t\t\tZWaveProtocolCCSmartStartIncludedNodeInformationOptions\n\t\t>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.nwiHomeId.length !== 4) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`nwiHomeId must have length 4`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.nwiHomeId = options.nwiHomeId;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): ZWaveProtocolCCSmartStartIncludedNodeInformation {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst nwiHomeId = raw.payload.subarray(0, 4);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnwiHomeId,\n\t\t});\n\t}\n\n\tpublic nwiHomeId: BytesView;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from(this.nwiHomeId);\n\t\treturn super.serialize(ctx);\n\t}\n}\n\n@CCCommand(ZWaveProtocolCommand.SmartStartPrime)\nexport class ZWaveProtocolCCSmartStartPrime\n\textends ZWaveProtocolCCNodeInformationFrame\n{}\n\n@CCCommand(ZWaveProtocolCommand.SmartStartInclusionRequest)\nexport class ZWaveProtocolCCSmartStartInclusionRequest\n\textends ZWaveProtocolCCNodeInformationFrame\n{}\n"],
5
+ "mappings": "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",
6
6
  "names": ["DataRateBitmask"]
7
7
  }