@zwave-js/cc 15.25.2 → 15.25.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/build/cjs/cc/AlarmSensorCC.js +10 -14
  2. package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
  3. package/build/cjs/cc/AssociationCC.d.ts +1 -1
  4. package/build/cjs/cc/AssociationCC.js.map +1 -1
  5. package/build/cjs/cc/AssociationGroupInfoCC.js +16 -16
  6. package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
  7. package/build/cjs/cc/BarrierOperatorCC.js +4 -4
  8. package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
  9. package/build/cjs/cc/BinarySensorCC.js +3 -3
  10. package/build/cjs/cc/BinarySensorCC.js.map +2 -2
  11. package/build/cjs/cc/CentralSceneCC.js +7 -6
  12. package/build/cjs/cc/CentralSceneCC.js.map +2 -2
  13. package/build/cjs/cc/ColorSwitchCC.js +4 -4
  14. package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
  15. package/build/cjs/cc/ConfigurationCC.js +22 -25
  16. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  17. package/build/cjs/cc/DoorLockCC.js +44 -60
  18. package/build/cjs/cc/DoorLockCC.js.map +2 -2
  19. package/build/cjs/cc/HumidityControlModeCC.js +4 -5
  20. package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
  21. package/build/cjs/cc/HumidityControlSetpointCC.js +14 -14
  22. package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
  23. package/build/cjs/cc/IrrigationCC.js +21 -25
  24. package/build/cjs/cc/IrrigationCC.js.map +2 -2
  25. package/build/cjs/cc/MeterCC.js +9 -10
  26. package/build/cjs/cc/MeterCC.js.map +2 -2
  27. package/build/cjs/cc/MultiChannelCC.d.ts +1 -1
  28. package/build/cjs/cc/MultiChannelCC.js +17 -21
  29. package/build/cjs/cc/MultiChannelCC.js.map +2 -2
  30. package/build/cjs/cc/MultilevelSensorCC.js +8 -6
  31. package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
  32. package/build/cjs/cc/NotificationCC.js +4 -8
  33. package/build/cjs/cc/NotificationCC.js.map +2 -2
  34. package/build/cjs/cc/ProtectionCC.js +11 -12
  35. package/build/cjs/cc/ProtectionCC.js.map +2 -2
  36. package/build/cjs/cc/Security2CC.js +12 -22
  37. package/build/cjs/cc/Security2CC.js.map +2 -2
  38. package/build/cjs/cc/SecurityCC.js +8 -16
  39. package/build/cjs/cc/SecurityCC.js.map +2 -2
  40. package/build/cjs/cc/ThermostatFanModeCC.js +4 -4
  41. package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
  42. package/build/cjs/cc/ThermostatModeCC.js +4 -4
  43. package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
  44. package/build/cjs/cc/ThermostatOperatingStateCC.js +1 -2
  45. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
  46. package/build/cjs/cc/ThermostatSetpointCC.js +4 -3
  47. package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
  48. package/build/cjs/cc/UserCodeCC.js +2 -4
  49. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  50. package/build/cjs/cc/WindowCoveringCC.js +5 -5
  51. package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
  52. package/build/cjs/cc/_CCValues.generated.d.ts +4 -4
  53. package/build/cjs/cc/_CCValues.generated.js +2 -2
  54. package/build/cjs/cc/_CCValues.generated.js.map +1 -1
  55. package/build/cjs/cc/index.d.ts +3 -3
  56. package/build/cjs/cc/index.js.map +2 -2
  57. package/build/cjs/lib/CommandClass.d.ts +3 -1
  58. package/build/cjs/lib/CommandClass.js +25 -3
  59. package/build/cjs/lib/CommandClass.js.map +2 -2
  60. package/build/cjs/lib/Security2/Extension.d.ts +6 -4
  61. package/build/cjs/lib/Security2/Extension.js +22 -20
  62. package/build/cjs/lib/Security2/Extension.js.map +2 -2
  63. package/build/cjs/lib/_Types.js.map +1 -1
  64. package/build/cjs/lib/utils.js +14 -8
  65. package/build/cjs/lib/utils.js.map +2 -2
  66. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  67. package/build/esm/cc/AlarmSensorCC.js +11 -17
  68. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  69. package/build/esm/cc/AssociationCC.d.ts +1 -1
  70. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  71. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  72. package/build/esm/cc/AssociationGroupInfoCC.js +18 -21
  73. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  74. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  75. package/build/esm/cc/BarrierOperatorCC.js +5 -7
  76. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  77. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  78. package/build/esm/cc/BinarySensorCC.js +4 -6
  79. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  80. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  81. package/build/esm/cc/CentralSceneCC.js +8 -8
  82. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  83. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  84. package/build/esm/cc/ColorSwitchCC.js +5 -7
  85. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  86. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  87. package/build/esm/cc/ConfigurationCC.js +29 -29
  88. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  89. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  90. package/build/esm/cc/DoorLockCC.js +70 -73
  91. package/build/esm/cc/DoorLockCC.js.map +1 -1
  92. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  93. package/build/esm/cc/HumidityControlModeCC.js +5 -8
  94. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  95. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  96. package/build/esm/cc/HumidityControlSetpointCC.js +15 -22
  97. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  98. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  99. package/build/esm/cc/IrrigationCC.js +26 -24
  100. package/build/esm/cc/IrrigationCC.js.map +1 -1
  101. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  102. package/build/esm/cc/MeterCC.js +12 -18
  103. package/build/esm/cc/MeterCC.js.map +1 -1
  104. package/build/esm/cc/MultiChannelCC.d.ts +1 -1
  105. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  106. package/build/esm/cc/MultiChannelCC.js +18 -23
  107. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  108. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  109. package/build/esm/cc/MultilevelSensorCC.js +11 -19
  110. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  111. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  112. package/build/esm/cc/NotificationCC.js +6 -13
  113. package/build/esm/cc/NotificationCC.js.map +1 -1
  114. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  115. package/build/esm/cc/ProtectionCC.js +12 -21
  116. package/build/esm/cc/ProtectionCC.js.map +1 -1
  117. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  118. package/build/esm/cc/Security2CC.js +13 -31
  119. package/build/esm/cc/Security2CC.js.map +1 -1
  120. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  121. package/build/esm/cc/SecurityCC.js +9 -21
  122. package/build/esm/cc/SecurityCC.js.map +1 -1
  123. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  124. package/build/esm/cc/ThermostatFanModeCC.js +5 -7
  125. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  126. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  127. package/build/esm/cc/ThermostatModeCC.js +5 -7
  128. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  129. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  130. package/build/esm/cc/ThermostatOperatingStateCC.js +2 -4
  131. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  132. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  133. package/build/esm/cc/ThermostatSetpointCC.js +5 -9
  134. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  135. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  136. package/build/esm/cc/UserCodeCC.js +3 -7
  137. package/build/esm/cc/UserCodeCC.js.map +1 -1
  138. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  139. package/build/esm/cc/WindowCoveringCC.js +6 -9
  140. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  141. package/build/esm/cc/_CCValues.generated.d.ts +4 -4
  142. package/build/esm/cc/_CCValues.generated.js +2 -2
  143. package/build/esm/cc/_CCValues.generated.js.map +1 -1
  144. package/build/esm/cc/index.d.ts +3 -3
  145. package/build/esm/cc/index.d.ts.map +1 -1
  146. package/build/esm/cc/index.js.map +1 -1
  147. package/build/esm/lib/CommandClass.d.ts +3 -1
  148. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  149. package/build/esm/lib/CommandClass.js +30 -4
  150. package/build/esm/lib/CommandClass.js.map +1 -1
  151. package/build/esm/lib/Security2/Extension.d.ts +6 -4
  152. package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
  153. package/build/esm/lib/Security2/Extension.js +23 -21
  154. package/build/esm/lib/Security2/Extension.js.map +1 -1
  155. package/build/esm/lib/_Types.js +1 -1
  156. package/build/esm/lib/utils.d.ts.map +1 -1
  157. package/build/esm/lib/utils.js +15 -9
  158. package/build/esm/lib/utils.js.map +1 -1
  159. package/package.json +4 -4
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src_gen/cc/IrrigationCC.ts"],
4
- "sourcesContent": ["import * as __validateArgs from \"./IrrigationCC._validateArgs.js\";\nconst { validateArgs_IrrigationCCAPI_setSystemConfig, validateArgs_IrrigationCCAPI_getValveInfo, validateArgs_IrrigationCCAPI_setValveConfig, validateArgs_IrrigationCCAPI_getValveConfig, validateArgs_IrrigationCCAPI_runValve, validateArgs_IrrigationCCAPI_shutoffValve, validateArgs_IrrigationCCAPI_setValveTable, validateArgs_IrrigationCCAPI_getValveTable, validateArgs_IrrigationCCAPI_runTables, validateArgs_IrrigationCCAPI_shutoffSystem } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, type ValueID, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeFloatWithScale, enumValuesToMetadataStates, parseFloatWithScale, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwMissingPropertyKey, throwUnsupportedProperty, throwUnsupportedPropertyKey, throwWrongValueType, } from \"../lib/API.js\";\nimport { irrigationValveIdToMetadataPrefix } from \"../lib/CCValueUtils.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { IrrigationCommand, IrrigationSensorPolarity, type ValveId, type ValveTableEntry, ValveType, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { IrrigationCCValues } from \"./_CCValues.generated.js\";\nexport { IrrigationCCValues };\nconst systemConfigProperties = [\n \"masterValveDelay\",\n \"highPressureThreshold\",\n \"lowPressureThreshold\",\n \"rainSensorPolarity\",\n \"moistureSensorPolarity\",\n] as const;\nconst valveConfigPropertyKeys = [\n \"nominalCurrentHighThreshold\",\n \"nominalCurrentLowThreshold\",\n \"maximumFlow\",\n \"highFlowThreshold\",\n \"lowFlowThreshold\",\n \"useRainSensor\",\n \"useMoistureSensor\",\n] as const;\n@API(CommandClasses.Irrigation)\nexport class IrrigationCCAPI extends CCAPI {\n public supportsCommand(cmd: IrrigationCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case IrrigationCommand.SystemInfoGet:\n case IrrigationCommand.SystemStatusGet:\n case IrrigationCommand.SystemConfigSet:\n case IrrigationCommand.SystemConfigGet:\n case IrrigationCommand.ValveInfoGet:\n case IrrigationCommand.ValveConfigSet:\n case IrrigationCommand.ValveConfigGet:\n case IrrigationCommand.ValveRun:\n case IrrigationCommand.ValveTableSet:\n case IrrigationCommand.ValveTableGet:\n case IrrigationCommand.ValveTableRun:\n case IrrigationCommand.SystemShutoff:\n // These are all mandatory in V1\n return true;\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getSystemInfo() {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.SystemInfoGet);\n const cc = new IrrigationCCSystemInfoGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<IrrigationCCSystemInfoReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"numValves\",\n \"numValveTables\",\n \"supportsMasterValve\",\n \"maxValveTableSize\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getSystemStatus() {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.SystemStatusGet);\n const cc = new IrrigationCCSystemStatusGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<IrrigationCCSystemStatusReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"systemVoltage\",\n \"flowSensorActive\",\n \"pressureSensorActive\",\n \"rainSensorActive\",\n \"moistureSensorActive\",\n \"flow\",\n \"pressure\",\n \"shutoffDuration\",\n \"errorNotProgrammed\",\n \"errorEmergencyShutdown\",\n \"errorHighPressure\",\n \"errorLowPressure\",\n \"errorValve\",\n \"masterValveOpen\",\n \"firstOpenZoneId\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getSystemConfig() {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.SystemConfigGet);\n const cc = new IrrigationCCSystemConfigGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<IrrigationCCSystemConfigReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"masterValveDelay\",\n \"highPressureThreshold\",\n \"lowPressureThreshold\",\n \"rainSensorPolarity\",\n \"moistureSensorPolarity\",\n ]);\n }\n }\n @validateArgs_IrrigationCCAPI_setSystemConfig()\n public async setSystemConfig(config: IrrigationCCSystemConfigSetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.SystemConfigSet);\n const cc = new IrrigationCCSystemConfigSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...config,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IrrigationCCAPI_getValveInfo()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getValveInfo(valveId: ValveId) {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.ValveInfoGet);\n const cc = new IrrigationCCValveInfoGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n valveId,\n });\n const response = await this.host.sendCommand<IrrigationCCValveInfoReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"connected\",\n \"nominalCurrent\",\n \"errorShortCircuit\",\n \"errorHighCurrent\",\n \"errorLowCurrent\",\n \"errorMaximumFlow\",\n \"errorHighFlow\",\n \"errorLowFlow\",\n ]);\n }\n }\n @validateArgs_IrrigationCCAPI_setValveConfig()\n public async setValveConfig(options: IrrigationCCValveConfigSetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.ValveConfigSet);\n const cc = new IrrigationCCValveConfigSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IrrigationCCAPI_getValveConfig()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getValveConfig(valveId: ValveId) {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.ValveConfigGet);\n const cc = new IrrigationCCValveConfigGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n valveId,\n });\n const response = await this.host.sendCommand<IrrigationCCValveConfigReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"nominalCurrentHighThreshold\",\n \"nominalCurrentLowThreshold\",\n \"maximumFlow\",\n \"highFlowThreshold\",\n \"lowFlowThreshold\",\n \"useRainSensor\",\n \"useMoistureSensor\",\n ]);\n }\n }\n @validateArgs_IrrigationCCAPI_runValve()\n public async runValve(valveId: ValveId, duration: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.ValveRun);\n const cc = new IrrigationCCValveRun({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n valveId,\n duration,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IrrigationCCAPI_shutoffValve()\n public shutoffValve(valveId: ValveId): Promise<SupervisionResult | undefined> {\n return this.runValve(valveId, 0);\n }\n @validateArgs_IrrigationCCAPI_setValveTable()\n public async setValveTable(tableId: number, entries: ValveTableEntry[]): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.ValveTableSet);\n if (!this.endpoint.virtual) {\n const maxValveTableSize = IrrigationCC.getMaxValveTableSizeCached(this.host, this.endpoint);\n if (maxValveTableSize != undefined\n && entries.length > maxValveTableSize) {\n throw new ZWaveError(`The number of valve table entries must not exceed ${maxValveTableSize}.`, ZWaveErrorCodes.Argument_Invalid);\n }\n }\n const cc = new IrrigationCCValveTableSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n tableId,\n entries,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IrrigationCCAPI_getValveTable()\n public async getValveTable(tableId: number): Promise<MaybeNotKnown<ValveTableEntry[]>> {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.ValveTableGet);\n const cc = new IrrigationCCValveTableGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n tableId,\n });\n const response = await this.host.sendCommand<IrrigationCCValveTableReport>(cc, this.commandOptions);\n if (response) {\n return response?.entries;\n }\n }\n @validateArgs_IrrigationCCAPI_runTables()\n public async runTables(tableIDs: number[]): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.ValveTableRun);\n const cc = new IrrigationCCValveTableRun({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n tableIDs,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Shuts off the entire system for the given duration.\n * @param duration Shutoff duration in hours. A value of 255 will shut off the entire system permanently and prevents schedules from running.\n */\n @validateArgs_IrrigationCCAPI_shutoffSystem()\n public async shutoffSystem(duration: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.SystemShutoff);\n const cc = new IrrigationCCSystemShutoff({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n duration,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n /** Shuts off the entire system permanently and prevents schedules from running */\n public shutoffSystemPermanently(): Promise<SupervisionResult | undefined> {\n return this.shutoffSystem(255);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: IrrigationCCAPI, { property, propertyKey }, value) {\n const valueDB = this.getValueDB();\n if (systemConfigProperties.includes(property as any)) {\n const options = {} as IrrigationCCSystemConfigSetOptions;\n for (const prop of systemConfigProperties) {\n if (prop === property)\n continue;\n const valueId: ValueID = {\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property: prop as any,\n };\n const cachedVal = valueDB.getValue<any>(valueId);\n if (cachedVal == undefined) {\n throw new ZWaveError(`The \"${property}\" property cannot be changed before ${prop} is known!`, ZWaveErrorCodes.Argument_Invalid);\n }\n options[prop] = cachedVal;\n }\n options[property as keyof IrrigationCCSystemConfigSetOptions] =\n value as any;\n return this.setSystemConfig(options);\n }\n else if (property === \"shutoff\") {\n return this.shutoffSystem(0);\n }\n else if (property === \"master\"\n || (typeof property === \"number\" && property >= 1)) {\n // This is a value of a valve\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n if (valveConfigPropertyKeys.includes(propertyKey as any)) {\n const options = {\n valveId: property,\n } as IrrigationCCValveConfigSetOptions;\n for (const prop of valveConfigPropertyKeys) {\n if (prop === propertyKey)\n continue;\n const valueId: ValueID = {\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property,\n propertyKey: prop as any,\n };\n const cachedVal = valueDB.getValue<any>(valueId);\n if (cachedVal == undefined) {\n throw new ZWaveError(`The \"${property}_${propertyKey}\" property cannot be changed before ${property}_${prop} is known!`, ZWaveErrorCodes.Argument_Invalid);\n }\n (options as any)[prop] = cachedVal;\n }\n (options as any)[propertyKey] = value;\n return this.setValveConfig(options);\n }\n else if (propertyKey === \"duration\") {\n // The run duration needs to be set separately from triggering the run\n // So this is okay\n return;\n }\n else if (propertyKey === \"startStop\") {\n // Trigger or stop a valve run, depending on the value\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"boolean\", typeof value);\n }\n if (value) {\n // Start a valve run\n const duration = valueDB.getValue<number>(IrrigationCCValues.valveRunDuration(property).endpoint(this.endpoint.index));\n if (duration == undefined) {\n throw new ZWaveError(`Cannot start a valve run without specifying a duration first!`, ZWaveErrorCodes.Argument_Invalid);\n }\n return this.runValve(property, duration);\n }\n else {\n // Stop a valve run\n return this.shutoffValve(property);\n }\n }\n else {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n }\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: IrrigationCCAPI, { property, propertyKey }) {\n switch (property) {\n case \"systemVoltage\":\n case \"flowSensorActive\":\n case \"pressureSensorActive\":\n case \"rainSensorActive\":\n case \"moistureSensorActive\":\n case \"flow\":\n case \"pressure\":\n case \"shutoffDuration\":\n case \"errorNotProgrammed\":\n case \"errorEmergencyShutdown\":\n case \"errorHighPressure\":\n case \"errorLowPressure\":\n case \"errorValve\":\n case \"masterValveOpen\":\n case \"firstOpenZoneId\":\n return (await this.getSystemStatus())?.[property];\n case \"masterValveDelay\":\n case \"highPressureThreshold\":\n case \"lowPressureThreshold\":\n case \"rainSensorPolarity\":\n case \"moistureSensorPolarity\":\n return (await this.getSystemConfig())?.[property];\n }\n if (property === \"master\"\n || (typeof property === \"number\" && property >= 1)) {\n // This is a value of a valve\n switch (propertyKey) {\n case \"connected\":\n case \"nominalCurrent\":\n case \"errorShortCircuit\":\n case \"errorHighCurrent\":\n case \"errorLowCurrent\":\n case \"errorMaximumFlow\":\n case \"errorHighFlow\":\n case \"errorLowFlow\":\n return (await this.getValveInfo(property))?.[propertyKey];\n case \"nominalCurrentHighThreshold\":\n case \"nominalCurrentLowThreshold\":\n case \"maximumFlow\":\n case \"highFlowThreshold\":\n case \"lowFlowThreshold\":\n case \"useRainSensor\":\n case \"useMoistureSensor\":\n return (await this.getValveConfig(property))?.[propertyKey];\n case undefined:\n throwMissingPropertyKey(this.ccId, property);\n default:\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n }\n throwUnsupportedProperty(this.ccId, property);\n };\n }\n}\n@commandClass(CommandClasses.Irrigation)\n@implementedVersion(1)\n@ccValues(IrrigationCCValues)\nexport class IrrigationCC extends CommandClass {\n declare ccCommand: IrrigationCommand;\n /**\n * Returns the maximum number of valve table entries reported by the node.\n * This only works AFTER the node has been interviewed.\n */\n public static getMaxValveTableSizeCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<number> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(IrrigationCCValues.maxValveTableSize.endpoint(endpoint.index));\n }\n /**\n * Returns the number of zone valves reported by the node.\n * This only works AFTER the node has been interviewed.\n */\n public static getNumValvesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<number> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(IrrigationCCValues.numValves.endpoint(endpoint.index));\n }\n /**\n * Returns whether the node supports a master valve\n * This only works AFTER the node has been interviewed.\n */\n public static supportsMasterValveCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(IrrigationCCValues.supportsMasterValve.endpoint(endpoint.index));\n }\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Irrigation, ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying irrigation system info...\",\n direction: \"outbound\",\n });\n const systemInfo = await api.getSystemInfo();\n if (!systemInfo) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Time out while querying irrigation system info, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n const logMessage = `received irrigation system info:\nsupports master valve: ${systemInfo.supportsMasterValve}\nno. of valves: ${systemInfo.numValves}\nno. of valve tables: ${systemInfo.numValveTables}\nmax. valve table size: ${systemInfo.maxValveTableSize}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n // For each valve, create the values to start/stop a run\n for (let i = 1; i <= systemInfo.numValves; i++) {\n this.ensureMetadata(ctx, IrrigationCCValues.valveRunDuration(i));\n this.ensureMetadata(ctx, IrrigationCCValues.valveRunStartStop(i));\n }\n // And create a shutoff value\n this.ensureMetadata(ctx, IrrigationCCValues.shutoffSystem);\n // Query current values\n await this.refreshValues(ctx, {\n tag: \"interview\",\n onProgress: (completed, total) => node.reportInterviewProgress(completed, total),\n });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Irrigation, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query the current system config\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying irrigation system configuration...\",\n direction: \"outbound\",\n });\n const systemConfig = await api.getSystemConfig();\n if (systemConfig) {\n let logMessage = `received irrigation system configuration:\nmaster valve delay: ${systemConfig.masterValveDelay} seconds\nhigh pressure threshold: ${systemConfig.highPressureThreshold} kPa\nlow pressure threshold: ${systemConfig.lowPressureThreshold} kPa`;\n if (systemConfig.rainSensorPolarity != undefined) {\n logMessage += `\nrain sensor polarity: ${getEnumMemberName(IrrigationSensorPolarity, systemConfig.rainSensorPolarity)}`;\n }\n if (systemConfig.moistureSensorPolarity != undefined) {\n logMessage += `\nmoisture sensor polarity: ${getEnumMemberName(IrrigationSensorPolarity, systemConfig.moistureSensorPolarity)}`;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n // and status\n // Query the current system config\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying irrigation system status...\",\n direction: \"outbound\",\n });\n await api.getSystemStatus();\n // for each valve, query the current status and configuration\n if (IrrigationCC.supportsMasterValveCached(ctx, endpoint)) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying master valve configuration...\",\n direction: \"outbound\",\n });\n await api.getValveConfig(\"master\");\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying master valve status...\",\n direction: \"outbound\",\n });\n await api.getValveInfo(\"master\");\n }\n const numValves = IrrigationCC.getNumValvesCached(ctx, endpoint) ?? 0;\n for (let i = 1; i <= numValves; i++) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Querying configuration for valve ${i.toString().padStart(3, \"0\")}...`,\n direction: \"outbound\",\n });\n await api.getValveConfig(i);\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Querying status for valve ${i.toString().padStart(3, \"0\")}...`,\n direction: \"outbound\",\n });\n await api.getValveInfo(i);\n options?.onProgress?.(i, numValves);\n }\n }\n public translateProperty(ctx: GetValueDB, property: string | number, propertyKey?: string | number): string {\n if (property === \"master\") {\n return \"Master valve\";\n }\n else if (typeof property === \"number\") {\n return `Valve ${property.toString().padStart(3, \"0\")}`;\n }\n return super.translateProperty(ctx, property, propertyKey);\n }\n}\n// @publicAPI\nexport interface IrrigationCCSystemInfoReportOptions {\n supportsMasterValve: boolean;\n numValves: number;\n numValveTables: number;\n maxValveTableSize: number;\n}\n@CCCommand(IrrigationCommand.SystemInfoReport)\n@ccValueProperty(\"numValves\", IrrigationCCValues.numValves)\n@ccValueProperty(\"numValveTables\", IrrigationCCValues.numValveTables)\n@ccValueProperty(\"supportsMasterValve\", IrrigationCCValues.supportsMasterValve)\n@ccValueProperty(\"maxValveTableSize\", IrrigationCCValues.maxValveTableSize)\nexport class IrrigationCCSystemInfoReport extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCSystemInfoReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportsMasterValve = options.supportsMasterValve;\n this.numValves = options.numValves;\n this.numValveTables = options.numValveTables;\n this.maxValveTableSize = options.maxValveTableSize;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IrrigationCCSystemInfoReport {\n validatePayload(raw.payload.length >= 4);\n const supportsMasterValve = !!(raw.payload[0] & 0x01);\n const numValves = raw.payload[1];\n const numValveTables = raw.payload[2];\n const maxValveTableSize = raw.payload[3] & 0b1111;\n return new this({\n nodeId: ctx.sourceNodeId,\n supportsMasterValve,\n numValves,\n numValveTables,\n maxValveTableSize,\n });\n }\n public readonly numValves: number;\n public readonly numValveTables: number;\n public readonly supportsMasterValve: boolean;\n public readonly maxValveTableSize: number;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supports master valve\": this.supportsMasterValve,\n \"no. of valves\": this.numValves,\n \"no. of valve tables\": this.numValveTables,\n \"max. valve table size\": this.maxValveTableSize,\n },\n };\n }\n}\n@CCCommand(IrrigationCommand.SystemInfoGet)\n@expectedCCResponse(IrrigationCCSystemInfoReport)\nexport class IrrigationCCSystemInfoGet extends IrrigationCC {\n}\n// @publicAPI\nexport interface IrrigationCCSystemStatusReportOptions {\n systemVoltage: number;\n flowSensorActive: boolean;\n pressureSensorActive: boolean;\n rainSensorActive: boolean;\n moistureSensorActive: boolean;\n flow?: number;\n pressure?: number;\n shutoffDuration: number;\n errorNotProgrammed: boolean;\n errorEmergencyShutdown: boolean;\n errorHighPressure: boolean;\n errorLowPressure: boolean;\n errorValve: boolean;\n masterValveOpen: boolean;\n firstOpenZoneId?: number;\n}\n@CCCommand(IrrigationCommand.SystemStatusReport)\n@ccValueProperty(\"systemVoltage\", IrrigationCCValues.systemVoltage)\n@ccValueProperty(\"flowSensorActive\", IrrigationCCValues.flowSensorActive)\n@ccValueProperty(\"pressureSensorActive\", IrrigationCCValues.pressureSensorActive)\n@ccValueProperty(\"rainSensorActive\", IrrigationCCValues.rainSensorActive)\n@ccValueProperty(\"moistureSensorActive\", IrrigationCCValues.moistureSensorActive)\n@ccValueProperty(\"flow\", IrrigationCCValues.flow)\n@ccValueProperty(\"pressure\", IrrigationCCValues.pressure)\n@ccValueProperty(\"shutoffDuration\", IrrigationCCValues.shutoffDuration)\n@ccValueProperty(\"errorNotProgrammed\", IrrigationCCValues.errorNotProgrammed)\n@ccValueProperty(\"errorEmergencyShutdown\", IrrigationCCValues.errorEmergencyShutdown)\n@ccValueProperty(\"errorHighPressure\", IrrigationCCValues.errorHighPressure)\n@ccValueProperty(\"errorLowPressure\", IrrigationCCValues.errorLowPressure)\n@ccValueProperty(\"errorValve\", IrrigationCCValues.errorValve)\n@ccValueProperty(\"masterValveOpen\", IrrigationCCValues.masterValveOpen)\n@ccValueProperty(\"firstOpenZoneId\", IrrigationCCValues.firstOpenZoneId)\nexport class IrrigationCCSystemStatusReport extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCSystemStatusReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.systemVoltage = options.systemVoltage;\n this.flowSensorActive = options.flowSensorActive;\n this.pressureSensorActive = options.pressureSensorActive;\n this.rainSensorActive = options.rainSensorActive;\n this.moistureSensorActive = options.moistureSensorActive;\n this.flow = options.flow;\n this.pressure = options.pressure;\n this.shutoffDuration = options.shutoffDuration;\n this.errorNotProgrammed = options.errorNotProgrammed;\n this.errorEmergencyShutdown = options.errorEmergencyShutdown;\n this.errorHighPressure = options.errorHighPressure;\n this.errorLowPressure = options.errorLowPressure;\n this.errorValve = options.errorValve;\n this.masterValveOpen = options.masterValveOpen;\n this.firstOpenZoneId = options.firstOpenZoneId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IrrigationCCSystemStatusReport {\n validatePayload(raw.payload.length >= 2);\n const systemVoltage = raw.payload[0];\n const flowSensorActive = !!(raw.payload[1] & 0x01);\n const pressureSensorActive = !!(raw.payload[1] & 0x02);\n const rainSensorActive = !!(raw.payload[1] & 0x04);\n const moistureSensorActive = !!(raw.payload[1] & 0x08);\n let offset = 2;\n let flow: number | undefined;\n {\n const { value, scale, bytesRead } = parseFloatWithScale(raw.payload.subarray(offset));\n validatePayload(scale === 0);\n if (flowSensorActive)\n flow = value;\n offset += bytesRead;\n }\n let pressure: number | undefined;\n {\n const { value, scale, bytesRead } = parseFloatWithScale(raw.payload.subarray(offset));\n validatePayload(scale === 0);\n if (pressureSensorActive)\n pressure = value;\n offset += bytesRead;\n }\n validatePayload(raw.payload.length >= offset + 4);\n const shutoffDuration = raw.payload[offset];\n const errorNotProgrammed = !!(raw.payload[offset + 1] & 0x01);\n const errorEmergencyShutdown = !!(raw.payload[offset + 1] & 0x02);\n const errorHighPressure = !!(raw.payload[offset + 1] & 0x04);\n const errorLowPressure = !!(raw.payload[offset + 1] & 0x08);\n const errorValve = !!(raw.payload[offset + 1] & 0x10);\n const masterValveOpen = !!(raw.payload[offset + 2] & 0x01);\n let firstOpenZoneId: number | undefined;\n if (raw.payload[offset + 3]) {\n firstOpenZoneId = raw.payload[offset + 3];\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n systemVoltage,\n flowSensorActive,\n pressureSensorActive,\n rainSensorActive,\n moistureSensorActive,\n flow,\n pressure,\n shutoffDuration,\n errorNotProgrammed,\n errorEmergencyShutdown,\n errorHighPressure,\n errorLowPressure,\n errorValve,\n masterValveOpen,\n firstOpenZoneId,\n });\n }\n public systemVoltage: number;\n public flowSensorActive: boolean;\n public pressureSensorActive: boolean;\n public rainSensorActive: boolean;\n public moistureSensorActive: boolean;\n public flow?: number;\n public pressure?: number;\n public shutoffDuration: number;\n public errorNotProgrammed: boolean;\n public errorEmergencyShutdown: boolean;\n public errorHighPressure: boolean;\n public errorLowPressure: boolean;\n public errorValve: boolean;\n public masterValveOpen: boolean;\n public firstOpenZoneId?: number;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"system voltage\": `${this.systemVoltage} V`,\n \"active sensors\": [\n this.flowSensorActive ? \"flow\" : undefined,\n this.pressureSensorActive ? \"pressure\" : undefined,\n this.rainSensorActive ? \"rain\" : undefined,\n this.moistureSensorActive ? \"moisture\" : undefined,\n ]\n .filter(Boolean)\n .join(\", \"),\n };\n if (this.flow != undefined) {\n message.flow = `${this.flow} l/h`;\n }\n if (this.pressure != undefined) {\n message.pressure = `${this.pressure} kPa`;\n }\n message[\"remaining shutoff duration\"] = `${this.shutoffDuration} hours`;\n message[\"master valve status\"] = this.masterValveOpen\n ? \"open\"\n : \"closed\";\n message[\"first open zone valve\"] = this.firstOpenZoneId || \"none\";\n const errors = [\n this.errorNotProgrammed ? \"device not programmed\" : undefined,\n this.errorEmergencyShutdown ? \"emergency shutdown\" : undefined,\n this.errorHighPressure\n ? \"high pressure threshold triggered\"\n : undefined,\n this.errorLowPressure\n ? \"low pressure threshold triggered\"\n : undefined,\n this.errorValve\n ? \"a valve or the master valve has an error\"\n : undefined,\n ].filter(Boolean);\n if (errors.length > 0) {\n message.errors = errors.map((e) => `\\n\u00B7 ${e}`).join(\"\");\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(IrrigationCommand.SystemStatusGet)\n@expectedCCResponse(IrrigationCCSystemStatusReport)\nexport class IrrigationCCSystemStatusGet extends IrrigationCC {\n}\n// @publicAPI\nexport type IrrigationCCSystemConfigSetOptions = {\n masterValveDelay: number;\n highPressureThreshold: number;\n lowPressureThreshold: number;\n rainSensorPolarity?: IrrigationSensorPolarity;\n moistureSensorPolarity?: IrrigationSensorPolarity;\n};\n@CCCommand(IrrigationCommand.SystemConfigSet)\n@useSupervision()\nexport class IrrigationCCSystemConfigSet extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCSystemConfigSetOptions>) {\n super(options);\n this.masterValveDelay = options.masterValveDelay;\n this.highPressureThreshold = options.highPressureThreshold;\n this.lowPressureThreshold = options.lowPressureThreshold;\n this.rainSensorPolarity = options.rainSensorPolarity;\n this.moistureSensorPolarity = options.moistureSensorPolarity;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCSystemConfigSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCSystemConfigSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public masterValveDelay: number;\n public highPressureThreshold: number;\n public lowPressureThreshold: number;\n public rainSensorPolarity?: IrrigationSensorPolarity;\n public moistureSensorPolarity?: IrrigationSensorPolarity;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n let polarity = 0;\n if (this.rainSensorPolarity != undefined)\n polarity |= 0b1;\n if (this.moistureSensorPolarity != undefined)\n polarity |= 0b10;\n if (this.rainSensorPolarity == undefined\n && this.moistureSensorPolarity == undefined) {\n // Valid bit\n polarity |= 128;\n }\n this.payload = Bytes.concat([\n [this.masterValveDelay],\n encodeFloatWithScale(this.highPressureThreshold, 0 /* kPa */),\n encodeFloatWithScale(this.lowPressureThreshold, 0 /* kPa */),\n [polarity],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"master valve delay\": `${this.masterValveDelay} s`,\n \"high pressure threshold\": `${this.highPressureThreshold} kPa`,\n \"low pressure threshold\": `${this.lowPressureThreshold} kPa`,\n };\n if (this.rainSensorPolarity != undefined) {\n message[\"rain sensor polarity\"] = getEnumMemberName(IrrigationSensorPolarity, this.rainSensorPolarity);\n }\n if (this.moistureSensorPolarity != undefined) {\n message[\"moisture sensor polarity\"] = getEnumMemberName(IrrigationSensorPolarity, this.moistureSensorPolarity);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCSystemConfigReportOptions {\n masterValveDelay: number;\n highPressureThreshold: number;\n lowPressureThreshold: number;\n rainSensorPolarity?: IrrigationSensorPolarity;\n moistureSensorPolarity?: IrrigationSensorPolarity;\n}\n@CCCommand(IrrigationCommand.SystemConfigReport)\n@ccValueProperty(\"masterValveDelay\", IrrigationCCValues.masterValveDelay)\n@ccValueProperty(\"highPressureThreshold\", IrrigationCCValues.highPressureThreshold)\n@ccValueProperty(\"lowPressureThreshold\", IrrigationCCValues.lowPressureThreshold)\n@ccValueProperty(\"rainSensorPolarity\", IrrigationCCValues.rainSensorPolarity)\n@ccValueProperty(\"moistureSensorPolarity\", IrrigationCCValues.moistureSensorPolarity)\nexport class IrrigationCCSystemConfigReport extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCSystemConfigReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.masterValveDelay = options.masterValveDelay;\n this.highPressureThreshold = options.highPressureThreshold;\n this.lowPressureThreshold = options.lowPressureThreshold;\n this.rainSensorPolarity = options.rainSensorPolarity;\n this.moistureSensorPolarity = options.moistureSensorPolarity;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IrrigationCCSystemConfigReport {\n validatePayload(raw.payload.length >= 2);\n const masterValveDelay = raw.payload[0];\n let offset = 1;\n let highPressureThreshold;\n {\n const { value, scale, bytesRead } = parseFloatWithScale(raw.payload.subarray(offset));\n validatePayload(scale === 0 /* kPa */);\n highPressureThreshold = value;\n offset += bytesRead;\n }\n let lowPressureThreshold;\n {\n const { value, scale, bytesRead } = parseFloatWithScale(raw.payload.subarray(offset));\n validatePayload(scale === 0 /* kPa */);\n lowPressureThreshold = value;\n offset += bytesRead;\n }\n validatePayload(raw.payload.length >= offset + 1);\n const polarity = raw.payload[offset];\n let rainSensorPolarity: IrrigationSensorPolarity | undefined;\n let moistureSensorPolarity: IrrigationSensorPolarity | undefined;\n if (!!(polarity & 128)) {\n // The valid bit is set\n rainSensorPolarity = polarity & 0b1;\n moistureSensorPolarity = (polarity & 0b10) >>> 1;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n masterValveDelay,\n highPressureThreshold,\n lowPressureThreshold,\n rainSensorPolarity,\n moistureSensorPolarity,\n });\n }\n public readonly masterValveDelay: number;\n public readonly highPressureThreshold: number;\n public readonly lowPressureThreshold: number;\n public readonly rainSensorPolarity?: IrrigationSensorPolarity;\n public readonly moistureSensorPolarity?: IrrigationSensorPolarity;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"master valve delay\": `${this.masterValveDelay} s`,\n \"high pressure threshold\": `${this.highPressureThreshold} kPa`,\n \"low pressure threshold\": `${this.lowPressureThreshold} kPa`,\n };\n if (this.rainSensorPolarity != undefined) {\n message[\"rain sensor polarity\"] = getEnumMemberName(IrrigationSensorPolarity, this.rainSensorPolarity);\n }\n if (this.moistureSensorPolarity != undefined) {\n message[\"moisture sensor polarity\"] = getEnumMemberName(IrrigationSensorPolarity, this.moistureSensorPolarity);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(IrrigationCommand.SystemConfigGet)\n@expectedCCResponse(IrrigationCCSystemConfigReport)\nexport class IrrigationCCSystemConfigGet extends IrrigationCC {\n}\n// @publicAPI\nexport interface IrrigationCCValveInfoReportOptions {\n valveId: ValveId;\n connected: boolean;\n nominalCurrent: number;\n errorShortCircuit: boolean;\n errorHighCurrent: boolean;\n errorLowCurrent: boolean;\n errorMaximumFlow?: boolean;\n errorHighFlow?: boolean;\n errorLowFlow?: boolean;\n}\n@CCCommand(IrrigationCommand.ValveInfoReport)\nexport class IrrigationCCValveInfoReport extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveInfoReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.valveId = options.valveId;\n this.connected = options.connected;\n this.nominalCurrent = options.nominalCurrent;\n this.errorShortCircuit = options.errorShortCircuit;\n this.errorHighCurrent = options.errorHighCurrent;\n this.errorLowCurrent = options.errorLowCurrent;\n this.errorMaximumFlow = options.errorMaximumFlow;\n this.errorHighFlow = options.errorHighFlow;\n this.errorLowFlow = options.errorLowFlow;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IrrigationCCValveInfoReport {\n validatePayload(raw.payload.length >= 4);\n let valveId: ValveId;\n if ((raw.payload[0] & 0b1) === ValveType.MasterValve) {\n valveId = \"master\";\n }\n else {\n valveId = raw.payload[1];\n }\n const connected = !!(raw.payload[0] & 0b10);\n const nominalCurrent = 10 * raw.payload[2];\n const errorShortCircuit = !!(raw.payload[3] & 0b1);\n const errorHighCurrent = !!(raw.payload[3] & 0b10);\n const errorLowCurrent = !!(raw.payload[3] & 0b100);\n let errorMaximumFlow: boolean | undefined;\n let errorHighFlow: boolean | undefined;\n let errorLowFlow: boolean | undefined;\n if (valveId === \"master\") {\n errorMaximumFlow = !!(raw.payload[3] & 0b1000);\n errorHighFlow = !!(raw.payload[3] & 16);\n errorLowFlow = !!(raw.payload[3] & 32);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n valveId,\n connected,\n nominalCurrent,\n errorShortCircuit,\n errorHighCurrent,\n errorLowCurrent,\n errorMaximumFlow,\n errorHighFlow,\n errorLowFlow,\n });\n }\n public readonly valveId: ValveId;\n public readonly connected: boolean;\n public readonly nominalCurrent: number;\n public readonly errorShortCircuit: boolean;\n public readonly errorHighCurrent: boolean;\n public readonly errorLowCurrent: boolean;\n public readonly errorMaximumFlow?: boolean;\n public readonly errorHighFlow?: boolean;\n public readonly errorLowFlow?: boolean;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // connected\n const valveConnectedValue = IrrigationCCValues.valveConnected(this.valveId);\n this.ensureMetadata(ctx, valveConnectedValue);\n this.setValue(ctx, valveConnectedValue, this.connected);\n // nominalCurrent\n const nominalCurrentValue = IrrigationCCValues.nominalCurrent(this.valveId);\n this.ensureMetadata(ctx, nominalCurrentValue);\n this.setValue(ctx, nominalCurrentValue, this.nominalCurrent);\n // errorShortCircuit\n const errorShortCircuitValue = IrrigationCCValues.errorShortCircuit(this.valveId);\n this.ensureMetadata(ctx, errorShortCircuitValue);\n this.setValue(ctx, errorShortCircuitValue, this.errorShortCircuit);\n // errorHighCurrent\n const errorHighCurrentValue = IrrigationCCValues.errorHighCurrent(this.valveId);\n this.ensureMetadata(ctx, errorHighCurrentValue);\n this.setValue(ctx, errorHighCurrentValue, this.errorHighCurrent);\n // errorLowCurrent\n const errorLowCurrentValue = IrrigationCCValues.errorLowCurrent(this.valveId);\n this.ensureMetadata(ctx, errorLowCurrentValue);\n this.setValue(ctx, errorLowCurrentValue, this.errorLowCurrent);\n if (this.errorMaximumFlow != undefined) {\n const errorMaximumFlowValue = IrrigationCCValues.errorMaximumFlow(this.valveId);\n this.ensureMetadata(ctx, errorMaximumFlowValue);\n this.setValue(ctx, errorMaximumFlowValue, this.errorMaximumFlow);\n }\n if (this.errorHighFlow != undefined) {\n const errorHighFlowValue = IrrigationCCValues.errorHighFlow(this.valveId);\n this.ensureMetadata(ctx, errorHighFlowValue);\n this.setValue(ctx, errorHighFlowValue, this.errorHighFlow);\n }\n if (this.errorLowFlow != undefined) {\n const errorLowFlowValue = IrrigationCCValues.errorLowFlow(this.valveId);\n this.ensureMetadata(ctx, errorLowFlowValue);\n this.setValue(ctx, errorLowFlowValue, this.errorLowFlow);\n }\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"valve ID\": this.valveId,\n connected: this.connected,\n \"nominal current\": `${this.nominalCurrent} mA`,\n };\n const errors = [\n this.errorShortCircuit ? \"short circuit\" : undefined,\n this.errorHighCurrent ? \"current above high threshold\" : undefined,\n this.errorLowCurrent ? \"current below low threshold\" : undefined,\n this.errorMaximumFlow ? \"maximum flow\" : undefined,\n this.errorHighFlow ? \"flow above high threshold\" : undefined,\n this.errorLowFlow ? \"flow below low threshold\" : undefined,\n ].filter(Boolean);\n if (errors.length > 0) {\n message.errors = errors.map((e) => `\\n\u00B7 ${e}`).join(\"\");\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveInfoGetOptions {\n valveId: ValveId;\n}\nfunction testResponseForIrrigationCommandWithValveId(sent: {\n valveId: ValveId;\n}, received: {\n valveId: ValveId;\n}) {\n return received.valveId === sent.valveId;\n}\n@CCCommand(IrrigationCommand.ValveInfoGet)\n@expectedCCResponse(IrrigationCCValveInfoReport, testResponseForIrrigationCommandWithValveId as any)\nexport class IrrigationCCValveInfoGet extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveInfoGetOptions>) {\n super(options);\n this.valveId = options.valveId;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCValveInfoGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCValveInfoGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public valveId: ValveId;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.valveId === \"master\" ? 1 : 0,\n this.valveId === \"master\" ? 1 : this.valveId || 1,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"valve ID\": this.valveId,\n },\n };\n }\n}\n// @publicAPI\nexport type IrrigationCCValveConfigSetOptions = {\n valveId: ValveId;\n nominalCurrentHighThreshold: number;\n nominalCurrentLowThreshold: number;\n maximumFlow: number;\n highFlowThreshold: number;\n lowFlowThreshold: number;\n useRainSensor: boolean;\n useMoistureSensor: boolean;\n};\n@CCCommand(IrrigationCommand.ValveConfigSet)\n@useSupervision()\nexport class IrrigationCCValveConfigSet extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveConfigSetOptions>) {\n super(options);\n this.valveId = options.valveId;\n this.nominalCurrentHighThreshold = options.nominalCurrentHighThreshold;\n this.nominalCurrentLowThreshold = options.nominalCurrentLowThreshold;\n this.maximumFlow = options.maximumFlow;\n this.highFlowThreshold = options.highFlowThreshold;\n this.lowFlowThreshold = options.lowFlowThreshold;\n this.useRainSensor = options.useRainSensor;\n this.useMoistureSensor = options.useMoistureSensor;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCValveConfigSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCValveConfigSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public valveId: ValveId;\n public nominalCurrentHighThreshold: number;\n public nominalCurrentLowThreshold: number;\n public maximumFlow: number;\n public highFlowThreshold: number;\n public lowFlowThreshold: number;\n public useRainSensor: boolean;\n public useMoistureSensor: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [\n this.valveId === \"master\" ? 1 : 0,\n this.valveId === \"master\" ? 1 : this.valveId || 1,\n Math.floor(this.nominalCurrentHighThreshold / 10),\n Math.floor(this.nominalCurrentLowThreshold / 10),\n ],\n encodeFloatWithScale(this.maximumFlow, 0 /* l/h */),\n encodeFloatWithScale(this.highFlowThreshold, 0 /* l/h */),\n encodeFloatWithScale(this.lowFlowThreshold, 0 /* l/h */),\n [\n (this.useRainSensor ? 0b1 : 0)\n | (this.useMoistureSensor ? 0b10 : 0),\n ],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"valve ID\": this.valveId,\n \"nominal current high threshold\": `${this.nominalCurrentHighThreshold} mA`,\n \"nominal current low threshold\": `${this.nominalCurrentLowThreshold} mA`,\n \"maximum flow\": `${this.maximumFlow} l/h`,\n \"high flow threshold\": `${this.highFlowThreshold} l/h`,\n \"low flow threshold\": `${this.lowFlowThreshold} l/h`,\n \"use rain sensor\": this.useRainSensor,\n \"use moisture sensor\": this.useMoistureSensor,\n },\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveConfigReportOptions {\n valveId: ValveId;\n nominalCurrentHighThreshold: number;\n nominalCurrentLowThreshold: number;\n maximumFlow: number;\n highFlowThreshold: number;\n lowFlowThreshold: number;\n useRainSensor: boolean;\n useMoistureSensor: boolean;\n}\n@CCCommand(IrrigationCommand.ValveConfigReport)\nexport class IrrigationCCValveConfigReport extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveConfigReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.valveId = options.valveId;\n this.nominalCurrentHighThreshold = options.nominalCurrentHighThreshold;\n this.nominalCurrentLowThreshold = options.nominalCurrentLowThreshold;\n this.maximumFlow = options.maximumFlow;\n this.highFlowThreshold = options.highFlowThreshold;\n this.lowFlowThreshold = options.lowFlowThreshold;\n this.useRainSensor = options.useRainSensor;\n this.useMoistureSensor = options.useMoistureSensor;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IrrigationCCValveConfigReport {\n validatePayload(raw.payload.length >= 4);\n let valveId: ValveId;\n if ((raw.payload[0] & 0b1) === ValveType.MasterValve) {\n valveId = \"master\";\n }\n else {\n valveId = raw.payload[1];\n }\n const nominalCurrentHighThreshold = 10 * raw.payload[2];\n const nominalCurrentLowThreshold = 10 * raw.payload[3];\n let offset = 4;\n let maximumFlow;\n {\n const { value, scale, bytesRead } = parseFloatWithScale(raw.payload.subarray(offset));\n validatePayload(scale === 0 /* l/h */);\n maximumFlow = value;\n offset += bytesRead;\n }\n let highFlowThreshold;\n {\n const { value, scale, bytesRead } = parseFloatWithScale(raw.payload.subarray(offset));\n validatePayload(scale === 0 /* l/h */);\n highFlowThreshold = value;\n offset += bytesRead;\n }\n let lowFlowThreshold;\n {\n const { value, scale, bytesRead } = parseFloatWithScale(raw.payload.subarray(offset));\n validatePayload(scale === 0 /* l/h */);\n lowFlowThreshold = value;\n offset += bytesRead;\n }\n validatePayload(raw.payload.length >= offset + 1);\n const useRainSensor = !!(raw.payload[offset] & 0b1);\n const useMoistureSensor = !!(raw.payload[offset] & 0b10);\n return new this({\n nodeId: ctx.sourceNodeId,\n valveId,\n nominalCurrentHighThreshold,\n nominalCurrentLowThreshold,\n maximumFlow,\n highFlowThreshold,\n lowFlowThreshold,\n useRainSensor,\n useMoistureSensor,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // nominalCurrentHighThreshold\n const nominalCurrentHighThresholdValue = IrrigationCCValues\n .nominalCurrentHighThreshold(this.valveId);\n this.ensureMetadata(ctx, nominalCurrentHighThresholdValue);\n this.setValue(ctx, nominalCurrentHighThresholdValue, this.nominalCurrentHighThreshold);\n // nominalCurrentLowThreshold\n const nominalCurrentLowThresholdValue = IrrigationCCValues\n .nominalCurrentLowThreshold(this.valveId);\n this.ensureMetadata(ctx, nominalCurrentLowThresholdValue);\n this.setValue(ctx, nominalCurrentLowThresholdValue, this.nominalCurrentLowThreshold);\n // maximumFlow\n const maximumFlowValue = IrrigationCCValues.maximumFlow(this.valveId);\n this.ensureMetadata(ctx, maximumFlowValue);\n this.setValue(ctx, maximumFlowValue, this.maximumFlow);\n // highFlowThreshold\n const highFlowThresholdValue = IrrigationCCValues.highFlowThreshold(this.valveId);\n this.ensureMetadata(ctx, highFlowThresholdValue);\n this.setValue(ctx, highFlowThresholdValue, this.highFlowThreshold);\n // lowFlowThreshold\n const lowFlowThresholdValue = IrrigationCCValues.lowFlowThreshold(this.valveId);\n this.ensureMetadata(ctx, lowFlowThresholdValue);\n this.setValue(ctx, lowFlowThresholdValue, this.lowFlowThreshold);\n // useRainSensor\n const useRainSensorValue = IrrigationCCValues.useRainSensor(this.valveId);\n this.ensureMetadata(ctx, useRainSensorValue);\n this.setValue(ctx, useRainSensorValue, this.useRainSensor);\n // useMoistureSensor\n const useMoistureSensorValue = IrrigationCCValues.useMoistureSensor(this.valveId);\n this.ensureMetadata(ctx, useMoistureSensorValue);\n this.setValue(ctx, useMoistureSensorValue, this.useMoistureSensor);\n return true;\n }\n public valveId: ValveId;\n public nominalCurrentHighThreshold: number;\n public nominalCurrentLowThreshold: number;\n public maximumFlow: number;\n public highFlowThreshold: number;\n public lowFlowThreshold: number;\n public useRainSensor: boolean;\n public useMoistureSensor: boolean;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"valve ID\": this.valveId,\n \"nominal current high threshold\": `${this.nominalCurrentHighThreshold} mA`,\n \"nominal current low threshold\": `${this.nominalCurrentLowThreshold} mA`,\n \"maximum flow\": `${this.maximumFlow} l/h`,\n \"high flow threshold\": `${this.highFlowThreshold} l/h`,\n \"low flow threshold\": `${this.lowFlowThreshold} l/h`,\n \"use rain sensor\": this.useRainSensor,\n \"use moisture sensor\": this.useMoistureSensor,\n },\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveConfigGetOptions {\n valveId: ValveId;\n}\n@CCCommand(IrrigationCommand.ValveConfigGet)\n@expectedCCResponse(IrrigationCCValveConfigReport, testResponseForIrrigationCommandWithValveId as any)\nexport class IrrigationCCValveConfigGet extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveConfigGetOptions>) {\n super(options);\n this.valveId = options.valveId;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCValveConfigGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCValveConfigGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public valveId: ValveId;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.valveId === \"master\" ? 1 : 0,\n this.valveId === \"master\" ? 1 : this.valveId || 1,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"valve ID\": this.valveId,\n },\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveRunOptions {\n valveId: ValveId;\n duration: number;\n}\n@CCCommand(IrrigationCommand.ValveRun)\n@useSupervision()\nexport class IrrigationCCValveRun extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveRunOptions>) {\n super(options);\n this.valveId = options.valveId;\n this.duration = options.duration;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCValveRun {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCValveRun({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public valveId: ValveId;\n public duration: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.valveId === \"master\" ? 1 : 0,\n this.valveId === \"master\" ? 1 : this.valveId || 1,\n 0,\n 0,\n ]);\n this.payload.writeUInt16BE(this.duration, 2);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"valve ID\": this.valveId,\n };\n if (this.duration) {\n message.duration = `${this.duration} s`;\n }\n else {\n message.action = \"turn off\";\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveTableSetOptions {\n tableId: number;\n entries: ValveTableEntry[];\n}\n@CCCommand(IrrigationCommand.ValveTableSet)\n@useSupervision()\nexport class IrrigationCCValveTableSet extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveTableSetOptions>) {\n super(options);\n this.tableId = options.tableId;\n this.entries = options.entries;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCValveTableSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCValveTableSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public tableId: number;\n public entries: ValveTableEntry[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = new Bytes(1 + this.entries.length * 3);\n this.payload[0] = this.tableId;\n for (let i = 0; i < this.entries.length; i++) {\n const entry = this.entries[i];\n const offset = 1 + i * 3;\n this.payload[offset] = entry.valveId;\n this.payload.writeUInt16BE(entry.duration, offset + 1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"table ID\": this.tableId,\n };\n for (let i = 0; i < this.entries.length; i++) {\n const entry = this.entries[i];\n const valveLabel = entry.valveId.toString().padStart(3, \"0\");\n if (entry.duration) {\n message[`valve ${valveLabel} duration`] = `${entry.duration} s`;\n }\n else {\n message[`valve ${valveLabel} action`] = `turn off`;\n }\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveTableReportOptions {\n tableId: number;\n entries: ValveTableEntry[];\n}\n@CCCommand(IrrigationCommand.ValveTableReport)\nexport class IrrigationCCValveTableReport extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveTableReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.tableId = options.tableId;\n this.entries = options.entries;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IrrigationCCValveTableReport {\n validatePayload((raw.payload.length - 1) % 3 === 0);\n const tableId = raw.payload[0];\n const entries: ValveTableEntry[] = [];\n for (let offset = 1; offset < raw.payload.length; offset += 3) {\n entries.push({\n valveId: raw.payload[offset],\n duration: raw.payload.readUInt16BE(offset + 1),\n });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n tableId,\n entries,\n });\n }\n public readonly tableId: number;\n public readonly entries: ValveTableEntry[];\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"table ID\": this.tableId,\n };\n for (let i = 0; i < this.entries.length; i++) {\n const entry = this.entries[i];\n const valveLabel = entry.valveId.toString().padStart(3, \"0\");\n if (entry.duration) {\n message[`valve ${valveLabel} duration`] = `${entry.duration} s`;\n }\n else {\n message[`valve ${valveLabel} action`] = `turn off`;\n }\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveTableGetOptions {\n tableId: number;\n}\nfunction testResponseForIrrigationValveTableGet(sent: IrrigationCCValveTableGet, received: IrrigationCCValveTableReport) {\n return received.tableId === sent.tableId;\n}\n@CCCommand(IrrigationCommand.ValveTableGet)\n@expectedCCResponse(IrrigationCCValveTableReport, testResponseForIrrigationValveTableGet)\nexport class IrrigationCCValveTableGet extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveTableGetOptions>) {\n super(options);\n this.tableId = options.tableId;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCValveTableGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCValveTableGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public tableId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.tableId]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"table ID\": this.tableId,\n },\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveTableRunOptions {\n tableIDs: number[];\n}\n@CCCommand(IrrigationCommand.ValveTableRun)\n@useSupervision()\nexport class IrrigationCCValveTableRun extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveTableRunOptions>) {\n super(options);\n this.tableIDs = options.tableIDs;\n if (this.tableIDs.length < 1) {\n throw new ZWaveError(`${this.constructor.name}: At least one table ID must be specified.`, ZWaveErrorCodes.Argument_Invalid);\n }\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCValveTableRun {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCValveTableRun({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public tableIDs: number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from(this.tableIDs);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"table IDs\": this.tableIDs\n .map((id) => id.toString().padStart(3, \"0\"))\n .join(\", \"),\n },\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCSystemShutoffOptions {\n /**\n * The duration in minutes the system must stay off.\n * 255 or `undefined` will prevent schedules from running.\n */\n duration?: number;\n}\n@CCCommand(IrrigationCommand.SystemShutoff)\n@useSupervision()\nexport class IrrigationCCSystemShutoff extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCSystemShutoffOptions>) {\n super(options);\n this.duration = options.duration;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCSystemShutoff {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCSystemShutoff({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public duration?: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.duration ?? 255]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n duration: this.duration === 0\n ? \"temporarily\"\n : this.duration === 255 || this.duration === undefined\n ? \"permanently\"\n : `${this.duration} hours`,\n },\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as __validateArgs from \"./IrrigationCC._validateArgs.js\";\nconst { validateArgs_IrrigationCCAPI_setSystemConfig, validateArgs_IrrigationCCAPI_getValveInfo, validateArgs_IrrigationCCAPI_setValveConfig, validateArgs_IrrigationCCAPI_getValveConfig, validateArgs_IrrigationCCAPI_runValve, validateArgs_IrrigationCCAPI_shutoffValve, validateArgs_IrrigationCCAPI_setValveTable, validateArgs_IrrigationCCAPI_getValveTable, validateArgs_IrrigationCCAPI_runTables, validateArgs_IrrigationCCAPI_shutoffSystem } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, type ValueID, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeFloatWithScale, enumValuesToMetadataStates, logDict, logList, logText, parseFloatWithScale, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwMissingPropertyKey, throwUnsupportedProperty, throwUnsupportedPropertyKey, throwWrongValueType, } from \"../lib/API.js\";\nimport { irrigationValveIdToMetadataPrefix } from \"../lib/CCValueUtils.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { IrrigationCommand, IrrigationSensorPolarity, type ValveId, type ValveTableEntry, ValveType, } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { IrrigationCCValues } from \"./_CCValues.generated.js\";\nexport { IrrigationCCValues };\nconst systemConfigProperties = [\n \"masterValveDelay\",\n \"highPressureThreshold\",\n \"lowPressureThreshold\",\n \"rainSensorPolarity\",\n \"moistureSensorPolarity\",\n] as const;\nconst valveConfigPropertyKeys = [\n \"nominalCurrentHighThreshold\",\n \"nominalCurrentLowThreshold\",\n \"maximumFlow\",\n \"highFlowThreshold\",\n \"lowFlowThreshold\",\n \"useRainSensor\",\n \"useMoistureSensor\",\n] as const;\n@API(CommandClasses.Irrigation)\nexport class IrrigationCCAPI extends CCAPI {\n public supportsCommand(cmd: IrrigationCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case IrrigationCommand.SystemInfoGet:\n case IrrigationCommand.SystemStatusGet:\n case IrrigationCommand.SystemConfigSet:\n case IrrigationCommand.SystemConfigGet:\n case IrrigationCommand.ValveInfoGet:\n case IrrigationCommand.ValveConfigSet:\n case IrrigationCommand.ValveConfigGet:\n case IrrigationCommand.ValveRun:\n case IrrigationCommand.ValveTableSet:\n case IrrigationCommand.ValveTableGet:\n case IrrigationCommand.ValveTableRun:\n case IrrigationCommand.SystemShutoff:\n // These are all mandatory in V1\n return true;\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getSystemInfo() {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.SystemInfoGet);\n const cc = new IrrigationCCSystemInfoGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<IrrigationCCSystemInfoReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"numValves\",\n \"numValveTables\",\n \"supportsMasterValve\",\n \"maxValveTableSize\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getSystemStatus() {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.SystemStatusGet);\n const cc = new IrrigationCCSystemStatusGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<IrrigationCCSystemStatusReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"systemVoltage\",\n \"flowSensorActive\",\n \"pressureSensorActive\",\n \"rainSensorActive\",\n \"moistureSensorActive\",\n \"flow\",\n \"pressure\",\n \"shutoffDuration\",\n \"errorNotProgrammed\",\n \"errorEmergencyShutdown\",\n \"errorHighPressure\",\n \"errorLowPressure\",\n \"errorValve\",\n \"masterValveOpen\",\n \"firstOpenZoneId\",\n ]);\n }\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getSystemConfig() {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.SystemConfigGet);\n const cc = new IrrigationCCSystemConfigGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<IrrigationCCSystemConfigReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"masterValveDelay\",\n \"highPressureThreshold\",\n \"lowPressureThreshold\",\n \"rainSensorPolarity\",\n \"moistureSensorPolarity\",\n ]);\n }\n }\n @validateArgs_IrrigationCCAPI_setSystemConfig()\n public async setSystemConfig(config: IrrigationCCSystemConfigSetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.SystemConfigSet);\n const cc = new IrrigationCCSystemConfigSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...config,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IrrigationCCAPI_getValveInfo()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getValveInfo(valveId: ValveId) {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.ValveInfoGet);\n const cc = new IrrigationCCValveInfoGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n valveId,\n });\n const response = await this.host.sendCommand<IrrigationCCValveInfoReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"connected\",\n \"nominalCurrent\",\n \"errorShortCircuit\",\n \"errorHighCurrent\",\n \"errorLowCurrent\",\n \"errorMaximumFlow\",\n \"errorHighFlow\",\n \"errorLowFlow\",\n ]);\n }\n }\n @validateArgs_IrrigationCCAPI_setValveConfig()\n public async setValveConfig(options: IrrigationCCValveConfigSetOptions): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.ValveConfigSet);\n const cc = new IrrigationCCValveConfigSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IrrigationCCAPI_getValveConfig()\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getValveConfig(valveId: ValveId) {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.ValveConfigGet);\n const cc = new IrrigationCCValveConfigGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n valveId,\n });\n const response = await this.host.sendCommand<IrrigationCCValveConfigReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\n \"nominalCurrentHighThreshold\",\n \"nominalCurrentLowThreshold\",\n \"maximumFlow\",\n \"highFlowThreshold\",\n \"lowFlowThreshold\",\n \"useRainSensor\",\n \"useMoistureSensor\",\n ]);\n }\n }\n @validateArgs_IrrigationCCAPI_runValve()\n public async runValve(valveId: ValveId, duration: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.ValveRun);\n const cc = new IrrigationCCValveRun({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n valveId,\n duration,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IrrigationCCAPI_shutoffValve()\n public shutoffValve(valveId: ValveId): Promise<SupervisionResult | undefined> {\n return this.runValve(valveId, 0);\n }\n @validateArgs_IrrigationCCAPI_setValveTable()\n public async setValveTable(tableId: number, entries: ValveTableEntry[]): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.ValveTableSet);\n if (!this.endpoint.virtual) {\n const maxValveTableSize = IrrigationCC.getMaxValveTableSizeCached(this.host, this.endpoint);\n if (maxValveTableSize != undefined\n && entries.length > maxValveTableSize) {\n throw new ZWaveError(`The number of valve table entries must not exceed ${maxValveTableSize}.`, ZWaveErrorCodes.Argument_Invalid);\n }\n }\n const cc = new IrrigationCCValveTableSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n tableId,\n entries,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IrrigationCCAPI_getValveTable()\n public async getValveTable(tableId: number): Promise<MaybeNotKnown<ValveTableEntry[]>> {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.ValveTableGet);\n const cc = new IrrigationCCValveTableGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n tableId,\n });\n const response = await this.host.sendCommand<IrrigationCCValveTableReport>(cc, this.commandOptions);\n if (response) {\n return response?.entries;\n }\n }\n @validateArgs_IrrigationCCAPI_runTables()\n public async runTables(tableIDs: number[]): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.ValveTableRun);\n const cc = new IrrigationCCValveTableRun({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n tableIDs,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Shuts off the entire system for the given duration.\n * @param duration Shutoff duration in hours. A value of 255 will shut off the entire system permanently and prevents schedules from running.\n */\n @validateArgs_IrrigationCCAPI_shutoffSystem()\n public async shutoffSystem(duration: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IrrigationCommand, IrrigationCommand.SystemShutoff);\n const cc = new IrrigationCCSystemShutoff({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n duration,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n /** Shuts off the entire system permanently and prevents schedules from running */\n public shutoffSystemPermanently(): Promise<SupervisionResult | undefined> {\n return this.shutoffSystem(255);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: IrrigationCCAPI, { property, propertyKey }, value) {\n const valueDB = this.getValueDB();\n if (systemConfigProperties.includes(property as any)) {\n const options = {} as IrrigationCCSystemConfigSetOptions;\n for (const prop of systemConfigProperties) {\n if (prop === property)\n continue;\n const valueId: ValueID = {\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property: prop as any,\n };\n const cachedVal = valueDB.getValue<any>(valueId);\n if (cachedVal == undefined) {\n throw new ZWaveError(`The \"${property}\" property cannot be changed before ${prop} is known!`, ZWaveErrorCodes.Argument_Invalid);\n }\n options[prop] = cachedVal;\n }\n options[property as keyof IrrigationCCSystemConfigSetOptions] =\n value as any;\n return this.setSystemConfig(options);\n }\n else if (property === \"shutoff\") {\n return this.shutoffSystem(0);\n }\n else if (property === \"master\"\n || (typeof property === \"number\" && property >= 1)) {\n // This is a value of a valve\n if (propertyKey == undefined) {\n throwMissingPropertyKey(this.ccId, property);\n }\n if (valveConfigPropertyKeys.includes(propertyKey as any)) {\n const options = {\n valveId: property,\n } as IrrigationCCValveConfigSetOptions;\n for (const prop of valveConfigPropertyKeys) {\n if (prop === propertyKey)\n continue;\n const valueId: ValueID = {\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property,\n propertyKey: prop as any,\n };\n const cachedVal = valueDB.getValue<any>(valueId);\n if (cachedVal == undefined) {\n throw new ZWaveError(`The \"${property}_${propertyKey}\" property cannot be changed before ${property}_${prop} is known!`, ZWaveErrorCodes.Argument_Invalid);\n }\n (options as any)[prop] = cachedVal;\n }\n (options as any)[propertyKey] = value;\n return this.setValveConfig(options);\n }\n else if (propertyKey === \"duration\") {\n // The run duration needs to be set separately from triggering the run\n // So this is okay\n return;\n }\n else if (propertyKey === \"startStop\") {\n // Trigger or stop a valve run, depending on the value\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"boolean\", typeof value);\n }\n if (value) {\n // Start a valve run\n const duration = valueDB.getValue<number>(IrrigationCCValues.valveRunDuration(property).endpoint(this.endpoint.index));\n if (duration == undefined) {\n throw new ZWaveError(`Cannot start a valve run without specifying a duration first!`, ZWaveErrorCodes.Argument_Invalid);\n }\n return this.runValve(property, duration);\n }\n else {\n // Stop a valve run\n return this.shutoffValve(property);\n }\n }\n else {\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n }\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: IrrigationCCAPI, { property, propertyKey }) {\n switch (property) {\n case \"systemVoltage\":\n case \"flowSensorActive\":\n case \"pressureSensorActive\":\n case \"rainSensorActive\":\n case \"moistureSensorActive\":\n case \"flow\":\n case \"pressure\":\n case \"shutoffDuration\":\n case \"errorNotProgrammed\":\n case \"errorEmergencyShutdown\":\n case \"errorHighPressure\":\n case \"errorLowPressure\":\n case \"errorValve\":\n case \"masterValveOpen\":\n case \"firstOpenZoneId\":\n return (await this.getSystemStatus())?.[property];\n case \"masterValveDelay\":\n case \"highPressureThreshold\":\n case \"lowPressureThreshold\":\n case \"rainSensorPolarity\":\n case \"moistureSensorPolarity\":\n return (await this.getSystemConfig())?.[property];\n }\n if (property === \"master\"\n || (typeof property === \"number\" && property >= 1)) {\n // This is a value of a valve\n switch (propertyKey) {\n case \"connected\":\n case \"nominalCurrent\":\n case \"errorShortCircuit\":\n case \"errorHighCurrent\":\n case \"errorLowCurrent\":\n case \"errorMaximumFlow\":\n case \"errorHighFlow\":\n case \"errorLowFlow\":\n return (await this.getValveInfo(property))?.[propertyKey];\n case \"nominalCurrentHighThreshold\":\n case \"nominalCurrentLowThreshold\":\n case \"maximumFlow\":\n case \"highFlowThreshold\":\n case \"lowFlowThreshold\":\n case \"useRainSensor\":\n case \"useMoistureSensor\":\n return (await this.getValveConfig(property))?.[propertyKey];\n case undefined:\n throwMissingPropertyKey(this.ccId, property);\n default:\n throwUnsupportedPropertyKey(this.ccId, property, propertyKey);\n }\n }\n throwUnsupportedProperty(this.ccId, property);\n };\n }\n}\n@commandClass(CommandClasses.Irrigation)\n@implementedVersion(1)\n@ccValues(IrrigationCCValues)\nexport class IrrigationCC extends CommandClass {\n declare ccCommand: IrrigationCommand;\n /**\n * Returns the maximum number of valve table entries reported by the node.\n * This only works AFTER the node has been interviewed.\n */\n public static getMaxValveTableSizeCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<number> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(IrrigationCCValues.maxValveTableSize.endpoint(endpoint.index));\n }\n /**\n * Returns the number of zone valves reported by the node.\n * This only works AFTER the node has been interviewed.\n */\n public static getNumValvesCached(ctx: GetValueDB, endpoint: EndpointId): MaybeNotKnown<number> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(IrrigationCCValues.numValves.endpoint(endpoint.index));\n }\n /**\n * Returns whether the node supports a master valve\n * This only works AFTER the node has been interviewed.\n */\n public static supportsMasterValveCached(ctx: GetValueDB, endpoint: EndpointId): boolean {\n return !!ctx\n .getValueDB(endpoint.nodeId)\n .getValue(IrrigationCCValues.supportsMasterValve.endpoint(endpoint.index));\n }\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Irrigation, ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying irrigation system info...\",\n direction: \"outbound\",\n });\n const systemInfo = await api.getSystemInfo();\n if (!systemInfo) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Time out while querying irrigation system info, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logText(\"received irrigation system info:\", {\n nested: logDict({\n \"supports master valve\": systemInfo.supportsMasterValve,\n \"no. of valves\": systemInfo.numValves,\n \"no. of valve tables\": systemInfo.numValveTables,\n \"max. valve table size\": systemInfo.maxValveTableSize,\n }),\n }),\n direction: \"inbound\",\n });\n // For each valve, create the values to start/stop a run\n for (let i = 1; i <= systemInfo.numValves; i++) {\n this.ensureMetadata(ctx, IrrigationCCValues.valveRunDuration(i));\n this.ensureMetadata(ctx, IrrigationCCValues.valveRunStartStop(i));\n }\n // And create a shutoff value\n this.ensureMetadata(ctx, IrrigationCCValues.shutoffSystem);\n // Query current values\n await this.refreshValues(ctx, {\n tag: \"interview\",\n onProgress: (completed, total) => node.reportInterviewProgress(completed, total),\n });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Irrigation, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query the current system config\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying irrigation system configuration...\",\n direction: \"outbound\",\n });\n const systemConfig = await api.getSystemConfig();\n if (systemConfig) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logText(\"received irrigation system configuration:\", {\n nested: logDict({\n \"master valve delay\": `${systemConfig.masterValveDelay} seconds`,\n \"high pressure threshold\": `${systemConfig.highPressureThreshold} kPa`,\n \"low pressure threshold\": `${systemConfig.lowPressureThreshold} kPa`,\n \"rain sensor polarity\": systemConfig.rainSensorPolarity != undefined\n ? getEnumMemberName(IrrigationSensorPolarity, systemConfig.rainSensorPolarity)\n : undefined,\n \"moisture sensor polarity\": systemConfig.moistureSensorPolarity != undefined\n ? getEnumMemberName(IrrigationSensorPolarity, systemConfig.moistureSensorPolarity)\n : undefined,\n }),\n }),\n direction: \"inbound\",\n });\n }\n // and status\n // Query the current system config\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying irrigation system status...\",\n direction: \"outbound\",\n });\n await api.getSystemStatus();\n // for each valve, query the current status and configuration\n if (IrrigationCC.supportsMasterValveCached(ctx, endpoint)) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying master valve configuration...\",\n direction: \"outbound\",\n });\n await api.getValveConfig(\"master\");\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying master valve status...\",\n direction: \"outbound\",\n });\n await api.getValveInfo(\"master\");\n }\n const numValves = IrrigationCC.getNumValvesCached(ctx, endpoint) ?? 0;\n for (let i = 1; i <= numValves; i++) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Querying configuration for valve ${i.toString().padStart(3, \"0\")}...`,\n direction: \"outbound\",\n });\n await api.getValveConfig(i);\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Querying status for valve ${i.toString().padStart(3, \"0\")}...`,\n direction: \"outbound\",\n });\n await api.getValveInfo(i);\n options?.onProgress?.(i, numValves);\n }\n }\n public translateProperty(ctx: GetValueDB, property: string | number, propertyKey?: string | number): string {\n if (property === \"master\") {\n return \"Master valve\";\n }\n else if (typeof property === \"number\") {\n return `Valve ${property.toString().padStart(3, \"0\")}`;\n }\n return super.translateProperty(ctx, property, propertyKey);\n }\n}\n// @publicAPI\nexport interface IrrigationCCSystemInfoReportOptions {\n supportsMasterValve: boolean;\n numValves: number;\n numValveTables: number;\n maxValveTableSize: number;\n}\n@CCCommand(IrrigationCommand.SystemInfoReport)\n@ccValueProperty(\"numValves\", IrrigationCCValues.numValves)\n@ccValueProperty(\"numValveTables\", IrrigationCCValues.numValveTables)\n@ccValueProperty(\"supportsMasterValve\", IrrigationCCValues.supportsMasterValve)\n@ccValueProperty(\"maxValveTableSize\", IrrigationCCValues.maxValveTableSize)\nexport class IrrigationCCSystemInfoReport extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCSystemInfoReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.supportsMasterValve = options.supportsMasterValve;\n this.numValves = options.numValves;\n this.numValveTables = options.numValveTables;\n this.maxValveTableSize = options.maxValveTableSize;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IrrigationCCSystemInfoReport {\n validatePayload(raw.payload.length >= 4);\n const supportsMasterValve = !!(raw.payload[0] & 0x01);\n const numValves = raw.payload[1];\n const numValveTables = raw.payload[2];\n const maxValveTableSize = raw.payload[3] & 0b1111;\n return new this({\n nodeId: ctx.sourceNodeId,\n supportsMasterValve,\n numValves,\n numValveTables,\n maxValveTableSize,\n });\n }\n public readonly numValves: number;\n public readonly numValveTables: number;\n public readonly supportsMasterValve: boolean;\n public readonly maxValveTableSize: number;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supports master valve\": this.supportsMasterValve,\n \"no. of valves\": this.numValves,\n \"no. of valve tables\": this.numValveTables,\n \"max. valve table size\": this.maxValveTableSize,\n },\n };\n }\n}\n@CCCommand(IrrigationCommand.SystemInfoGet)\n@expectedCCResponse(IrrigationCCSystemInfoReport)\nexport class IrrigationCCSystemInfoGet extends IrrigationCC {\n}\n// @publicAPI\nexport interface IrrigationCCSystemStatusReportOptions {\n systemVoltage: number;\n flowSensorActive: boolean;\n pressureSensorActive: boolean;\n rainSensorActive: boolean;\n moistureSensorActive: boolean;\n flow?: number;\n pressure?: number;\n shutoffDuration: number;\n errorNotProgrammed: boolean;\n errorEmergencyShutdown: boolean;\n errorHighPressure: boolean;\n errorLowPressure: boolean;\n errorValve: boolean;\n masterValveOpen: boolean;\n firstOpenZoneId?: number;\n}\n@CCCommand(IrrigationCommand.SystemStatusReport)\n@ccValueProperty(\"systemVoltage\", IrrigationCCValues.systemVoltage)\n@ccValueProperty(\"flowSensorActive\", IrrigationCCValues.flowSensorActive)\n@ccValueProperty(\"pressureSensorActive\", IrrigationCCValues.pressureSensorActive)\n@ccValueProperty(\"rainSensorActive\", IrrigationCCValues.rainSensorActive)\n@ccValueProperty(\"moistureSensorActive\", IrrigationCCValues.moistureSensorActive)\n@ccValueProperty(\"flow\", IrrigationCCValues.flow)\n@ccValueProperty(\"pressure\", IrrigationCCValues.pressure)\n@ccValueProperty(\"shutoffDuration\", IrrigationCCValues.shutoffDuration)\n@ccValueProperty(\"errorNotProgrammed\", IrrigationCCValues.errorNotProgrammed)\n@ccValueProperty(\"errorEmergencyShutdown\", IrrigationCCValues.errorEmergencyShutdown)\n@ccValueProperty(\"errorHighPressure\", IrrigationCCValues.errorHighPressure)\n@ccValueProperty(\"errorLowPressure\", IrrigationCCValues.errorLowPressure)\n@ccValueProperty(\"errorValve\", IrrigationCCValues.errorValve)\n@ccValueProperty(\"masterValveOpen\", IrrigationCCValues.masterValveOpen)\n@ccValueProperty(\"firstOpenZoneId\", IrrigationCCValues.firstOpenZoneId)\nexport class IrrigationCCSystemStatusReport extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCSystemStatusReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.systemVoltage = options.systemVoltage;\n this.flowSensorActive = options.flowSensorActive;\n this.pressureSensorActive = options.pressureSensorActive;\n this.rainSensorActive = options.rainSensorActive;\n this.moistureSensorActive = options.moistureSensorActive;\n this.flow = options.flow;\n this.pressure = options.pressure;\n this.shutoffDuration = options.shutoffDuration;\n this.errorNotProgrammed = options.errorNotProgrammed;\n this.errorEmergencyShutdown = options.errorEmergencyShutdown;\n this.errorHighPressure = options.errorHighPressure;\n this.errorLowPressure = options.errorLowPressure;\n this.errorValve = options.errorValve;\n this.masterValveOpen = options.masterValveOpen;\n this.firstOpenZoneId = options.firstOpenZoneId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IrrigationCCSystemStatusReport {\n validatePayload(raw.payload.length >= 2);\n const systemVoltage = raw.payload[0];\n const flowSensorActive = !!(raw.payload[1] & 0x01);\n const pressureSensorActive = !!(raw.payload[1] & 0x02);\n const rainSensorActive = !!(raw.payload[1] & 0x04);\n const moistureSensorActive = !!(raw.payload[1] & 0x08);\n let offset = 2;\n let flow: number | undefined;\n {\n const { value, scale, bytesRead } = parseFloatWithScale(raw.payload.subarray(offset));\n validatePayload(scale === 0);\n if (flowSensorActive)\n flow = value;\n offset += bytesRead;\n }\n let pressure: number | undefined;\n {\n const { value, scale, bytesRead } = parseFloatWithScale(raw.payload.subarray(offset));\n validatePayload(scale === 0);\n if (pressureSensorActive)\n pressure = value;\n offset += bytesRead;\n }\n validatePayload(raw.payload.length >= offset + 4);\n const shutoffDuration = raw.payload[offset];\n const errorNotProgrammed = !!(raw.payload[offset + 1] & 0x01);\n const errorEmergencyShutdown = !!(raw.payload[offset + 1] & 0x02);\n const errorHighPressure = !!(raw.payload[offset + 1] & 0x04);\n const errorLowPressure = !!(raw.payload[offset + 1] & 0x08);\n const errorValve = !!(raw.payload[offset + 1] & 0x10);\n const masterValveOpen = !!(raw.payload[offset + 2] & 0x01);\n let firstOpenZoneId: number | undefined;\n if (raw.payload[offset + 3]) {\n firstOpenZoneId = raw.payload[offset + 3];\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n systemVoltage,\n flowSensorActive,\n pressureSensorActive,\n rainSensorActive,\n moistureSensorActive,\n flow,\n pressure,\n shutoffDuration,\n errorNotProgrammed,\n errorEmergencyShutdown,\n errorHighPressure,\n errorLowPressure,\n errorValve,\n masterValveOpen,\n firstOpenZoneId,\n });\n }\n public systemVoltage: number;\n public flowSensorActive: boolean;\n public pressureSensorActive: boolean;\n public rainSensorActive: boolean;\n public moistureSensorActive: boolean;\n public flow?: number;\n public pressure?: number;\n public shutoffDuration: number;\n public errorNotProgrammed: boolean;\n public errorEmergencyShutdown: boolean;\n public errorHighPressure: boolean;\n public errorLowPressure: boolean;\n public errorValve: boolean;\n public masterValveOpen: boolean;\n public firstOpenZoneId?: number;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"system voltage\": `${this.systemVoltage} V`,\n \"active sensors\": [\n this.flowSensorActive ? \"flow\" : undefined,\n this.pressureSensorActive ? \"pressure\" : undefined,\n this.rainSensorActive ? \"rain\" : undefined,\n this.moistureSensorActive ? \"moisture\" : undefined,\n ]\n .filter(Boolean)\n .join(\", \"),\n };\n if (this.flow != undefined) {\n message.flow = `${this.flow} l/h`;\n }\n if (this.pressure != undefined) {\n message.pressure = `${this.pressure} kPa`;\n }\n message[\"remaining shutoff duration\"] = `${this.shutoffDuration} hours`;\n message[\"master valve status\"] = this.masterValveOpen\n ? \"open\"\n : \"closed\";\n message[\"first open zone valve\"] = this.firstOpenZoneId || \"none\";\n const errors = [\n this.errorNotProgrammed ? \"device not programmed\" : undefined,\n this.errorEmergencyShutdown ? \"emergency shutdown\" : undefined,\n this.errorHighPressure\n ? \"high pressure threshold triggered\"\n : undefined,\n this.errorLowPressure\n ? \"low pressure threshold triggered\"\n : undefined,\n this.errorValve\n ? \"a valve or the master valve has an error\"\n : undefined,\n ].filter((e) => e != undefined);\n if (errors.length > 0) {\n message.errors = logList(errors);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(IrrigationCommand.SystemStatusGet)\n@expectedCCResponse(IrrigationCCSystemStatusReport)\nexport class IrrigationCCSystemStatusGet extends IrrigationCC {\n}\n// @publicAPI\nexport type IrrigationCCSystemConfigSetOptions = {\n masterValveDelay: number;\n highPressureThreshold: number;\n lowPressureThreshold: number;\n rainSensorPolarity?: IrrigationSensorPolarity;\n moistureSensorPolarity?: IrrigationSensorPolarity;\n};\n@CCCommand(IrrigationCommand.SystemConfigSet)\n@useSupervision()\nexport class IrrigationCCSystemConfigSet extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCSystemConfigSetOptions>) {\n super(options);\n this.masterValveDelay = options.masterValveDelay;\n this.highPressureThreshold = options.highPressureThreshold;\n this.lowPressureThreshold = options.lowPressureThreshold;\n this.rainSensorPolarity = options.rainSensorPolarity;\n this.moistureSensorPolarity = options.moistureSensorPolarity;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCSystemConfigSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCSystemConfigSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public masterValveDelay: number;\n public highPressureThreshold: number;\n public lowPressureThreshold: number;\n public rainSensorPolarity?: IrrigationSensorPolarity;\n public moistureSensorPolarity?: IrrigationSensorPolarity;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n let polarity = 0;\n if (this.rainSensorPolarity != undefined)\n polarity |= 0b1;\n if (this.moistureSensorPolarity != undefined)\n polarity |= 0b10;\n if (this.rainSensorPolarity == undefined\n && this.moistureSensorPolarity == undefined) {\n // Valid bit\n polarity |= 128;\n }\n this.payload = Bytes.concat([\n [this.masterValveDelay],\n encodeFloatWithScale(this.highPressureThreshold, 0 /* kPa */),\n encodeFloatWithScale(this.lowPressureThreshold, 0 /* kPa */),\n [polarity],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"master valve delay\": `${this.masterValveDelay} s`,\n \"high pressure threshold\": `${this.highPressureThreshold} kPa`,\n \"low pressure threshold\": `${this.lowPressureThreshold} kPa`,\n };\n if (this.rainSensorPolarity != undefined) {\n message[\"rain sensor polarity\"] = getEnumMemberName(IrrigationSensorPolarity, this.rainSensorPolarity);\n }\n if (this.moistureSensorPolarity != undefined) {\n message[\"moisture sensor polarity\"] = getEnumMemberName(IrrigationSensorPolarity, this.moistureSensorPolarity);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCSystemConfigReportOptions {\n masterValveDelay: number;\n highPressureThreshold: number;\n lowPressureThreshold: number;\n rainSensorPolarity?: IrrigationSensorPolarity;\n moistureSensorPolarity?: IrrigationSensorPolarity;\n}\n@CCCommand(IrrigationCommand.SystemConfigReport)\n@ccValueProperty(\"masterValveDelay\", IrrigationCCValues.masterValveDelay)\n@ccValueProperty(\"highPressureThreshold\", IrrigationCCValues.highPressureThreshold)\n@ccValueProperty(\"lowPressureThreshold\", IrrigationCCValues.lowPressureThreshold)\n@ccValueProperty(\"rainSensorPolarity\", IrrigationCCValues.rainSensorPolarity)\n@ccValueProperty(\"moistureSensorPolarity\", IrrigationCCValues.moistureSensorPolarity)\nexport class IrrigationCCSystemConfigReport extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCSystemConfigReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.masterValveDelay = options.masterValveDelay;\n this.highPressureThreshold = options.highPressureThreshold;\n this.lowPressureThreshold = options.lowPressureThreshold;\n this.rainSensorPolarity = options.rainSensorPolarity;\n this.moistureSensorPolarity = options.moistureSensorPolarity;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IrrigationCCSystemConfigReport {\n validatePayload(raw.payload.length >= 2);\n const masterValveDelay = raw.payload[0];\n let offset = 1;\n let highPressureThreshold;\n {\n const { value, scale, bytesRead } = parseFloatWithScale(raw.payload.subarray(offset));\n validatePayload(scale === 0 /* kPa */);\n highPressureThreshold = value;\n offset += bytesRead;\n }\n let lowPressureThreshold;\n {\n const { value, scale, bytesRead } = parseFloatWithScale(raw.payload.subarray(offset));\n validatePayload(scale === 0 /* kPa */);\n lowPressureThreshold = value;\n offset += bytesRead;\n }\n validatePayload(raw.payload.length >= offset + 1);\n const polarity = raw.payload[offset];\n let rainSensorPolarity: IrrigationSensorPolarity | undefined;\n let moistureSensorPolarity: IrrigationSensorPolarity | undefined;\n if (!!(polarity & 128)) {\n // The valid bit is set\n rainSensorPolarity = polarity & 0b1;\n moistureSensorPolarity = (polarity & 0b10) >>> 1;\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n masterValveDelay,\n highPressureThreshold,\n lowPressureThreshold,\n rainSensorPolarity,\n moistureSensorPolarity,\n });\n }\n public readonly masterValveDelay: number;\n public readonly highPressureThreshold: number;\n public readonly lowPressureThreshold: number;\n public readonly rainSensorPolarity?: IrrigationSensorPolarity;\n public readonly moistureSensorPolarity?: IrrigationSensorPolarity;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"master valve delay\": `${this.masterValveDelay} s`,\n \"high pressure threshold\": `${this.highPressureThreshold} kPa`,\n \"low pressure threshold\": `${this.lowPressureThreshold} kPa`,\n };\n if (this.rainSensorPolarity != undefined) {\n message[\"rain sensor polarity\"] = getEnumMemberName(IrrigationSensorPolarity, this.rainSensorPolarity);\n }\n if (this.moistureSensorPolarity != undefined) {\n message[\"moisture sensor polarity\"] = getEnumMemberName(IrrigationSensorPolarity, this.moistureSensorPolarity);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(IrrigationCommand.SystemConfigGet)\n@expectedCCResponse(IrrigationCCSystemConfigReport)\nexport class IrrigationCCSystemConfigGet extends IrrigationCC {\n}\n// @publicAPI\nexport interface IrrigationCCValveInfoReportOptions {\n valveId: ValveId;\n connected: boolean;\n nominalCurrent: number;\n errorShortCircuit: boolean;\n errorHighCurrent: boolean;\n errorLowCurrent: boolean;\n errorMaximumFlow?: boolean;\n errorHighFlow?: boolean;\n errorLowFlow?: boolean;\n}\n@CCCommand(IrrigationCommand.ValveInfoReport)\nexport class IrrigationCCValveInfoReport extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveInfoReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.valveId = options.valveId;\n this.connected = options.connected;\n this.nominalCurrent = options.nominalCurrent;\n this.errorShortCircuit = options.errorShortCircuit;\n this.errorHighCurrent = options.errorHighCurrent;\n this.errorLowCurrent = options.errorLowCurrent;\n this.errorMaximumFlow = options.errorMaximumFlow;\n this.errorHighFlow = options.errorHighFlow;\n this.errorLowFlow = options.errorLowFlow;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IrrigationCCValveInfoReport {\n validatePayload(raw.payload.length >= 4);\n let valveId: ValveId;\n if ((raw.payload[0] & 0b1) === ValveType.MasterValve) {\n valveId = \"master\";\n }\n else {\n valveId = raw.payload[1];\n }\n const connected = !!(raw.payload[0] & 0b10);\n const nominalCurrent = 10 * raw.payload[2];\n const errorShortCircuit = !!(raw.payload[3] & 0b1);\n const errorHighCurrent = !!(raw.payload[3] & 0b10);\n const errorLowCurrent = !!(raw.payload[3] & 0b100);\n let errorMaximumFlow: boolean | undefined;\n let errorHighFlow: boolean | undefined;\n let errorLowFlow: boolean | undefined;\n if (valveId === \"master\") {\n errorMaximumFlow = !!(raw.payload[3] & 0b1000);\n errorHighFlow = !!(raw.payload[3] & 16);\n errorLowFlow = !!(raw.payload[3] & 32);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n valveId,\n connected,\n nominalCurrent,\n errorShortCircuit,\n errorHighCurrent,\n errorLowCurrent,\n errorMaximumFlow,\n errorHighFlow,\n errorLowFlow,\n });\n }\n public readonly valveId: ValveId;\n public readonly connected: boolean;\n public readonly nominalCurrent: number;\n public readonly errorShortCircuit: boolean;\n public readonly errorHighCurrent: boolean;\n public readonly errorLowCurrent: boolean;\n public readonly errorMaximumFlow?: boolean;\n public readonly errorHighFlow?: boolean;\n public readonly errorLowFlow?: boolean;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // connected\n const valveConnectedValue = IrrigationCCValues.valveConnected(this.valveId);\n this.ensureMetadata(ctx, valveConnectedValue);\n this.setValue(ctx, valveConnectedValue, this.connected);\n // nominalCurrent\n const nominalCurrentValue = IrrigationCCValues.nominalCurrent(this.valveId);\n this.ensureMetadata(ctx, nominalCurrentValue);\n this.setValue(ctx, nominalCurrentValue, this.nominalCurrent);\n // errorShortCircuit\n const errorShortCircuitValue = IrrigationCCValues.errorShortCircuit(this.valveId);\n this.ensureMetadata(ctx, errorShortCircuitValue);\n this.setValue(ctx, errorShortCircuitValue, this.errorShortCircuit);\n // errorHighCurrent\n const errorHighCurrentValue = IrrigationCCValues.errorHighCurrent(this.valveId);\n this.ensureMetadata(ctx, errorHighCurrentValue);\n this.setValue(ctx, errorHighCurrentValue, this.errorHighCurrent);\n // errorLowCurrent\n const errorLowCurrentValue = IrrigationCCValues.errorLowCurrent(this.valveId);\n this.ensureMetadata(ctx, errorLowCurrentValue);\n this.setValue(ctx, errorLowCurrentValue, this.errorLowCurrent);\n if (this.errorMaximumFlow != undefined) {\n const errorMaximumFlowValue = IrrigationCCValues.errorMaximumFlow(this.valveId);\n this.ensureMetadata(ctx, errorMaximumFlowValue);\n this.setValue(ctx, errorMaximumFlowValue, this.errorMaximumFlow);\n }\n if (this.errorHighFlow != undefined) {\n const errorHighFlowValue = IrrigationCCValues.errorHighFlow(this.valveId);\n this.ensureMetadata(ctx, errorHighFlowValue);\n this.setValue(ctx, errorHighFlowValue, this.errorHighFlow);\n }\n if (this.errorLowFlow != undefined) {\n const errorLowFlowValue = IrrigationCCValues.errorLowFlow(this.valveId);\n this.ensureMetadata(ctx, errorLowFlowValue);\n this.setValue(ctx, errorLowFlowValue, this.errorLowFlow);\n }\n return true;\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"valve ID\": this.valveId,\n connected: this.connected,\n \"nominal current\": `${this.nominalCurrent} mA`,\n };\n const errors = [\n this.errorShortCircuit ? \"short circuit\" : undefined,\n this.errorHighCurrent ? \"current above high threshold\" : undefined,\n this.errorLowCurrent ? \"current below low threshold\" : undefined,\n this.errorMaximumFlow ? \"maximum flow\" : undefined,\n this.errorHighFlow ? \"flow above high threshold\" : undefined,\n this.errorLowFlow ? \"flow below low threshold\" : undefined,\n ].filter((e) => e != undefined);\n if (errors.length > 0) {\n message.errors = logList(errors);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveInfoGetOptions {\n valveId: ValveId;\n}\nfunction testResponseForIrrigationCommandWithValveId(sent: {\n valveId: ValveId;\n}, received: {\n valveId: ValveId;\n}) {\n return received.valveId === sent.valveId;\n}\n@CCCommand(IrrigationCommand.ValveInfoGet)\n@expectedCCResponse(IrrigationCCValveInfoReport, testResponseForIrrigationCommandWithValveId as any)\nexport class IrrigationCCValveInfoGet extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveInfoGetOptions>) {\n super(options);\n this.valveId = options.valveId;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCValveInfoGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCValveInfoGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public valveId: ValveId;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.valveId === \"master\" ? 1 : 0,\n this.valveId === \"master\" ? 1 : this.valveId || 1,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"valve ID\": this.valveId,\n },\n };\n }\n}\n// @publicAPI\nexport type IrrigationCCValveConfigSetOptions = {\n valveId: ValveId;\n nominalCurrentHighThreshold: number;\n nominalCurrentLowThreshold: number;\n maximumFlow: number;\n highFlowThreshold: number;\n lowFlowThreshold: number;\n useRainSensor: boolean;\n useMoistureSensor: boolean;\n};\n@CCCommand(IrrigationCommand.ValveConfigSet)\n@useSupervision()\nexport class IrrigationCCValveConfigSet extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveConfigSetOptions>) {\n super(options);\n this.valveId = options.valveId;\n this.nominalCurrentHighThreshold = options.nominalCurrentHighThreshold;\n this.nominalCurrentLowThreshold = options.nominalCurrentLowThreshold;\n this.maximumFlow = options.maximumFlow;\n this.highFlowThreshold = options.highFlowThreshold;\n this.lowFlowThreshold = options.lowFlowThreshold;\n this.useRainSensor = options.useRainSensor;\n this.useMoistureSensor = options.useMoistureSensor;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCValveConfigSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCValveConfigSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public valveId: ValveId;\n public nominalCurrentHighThreshold: number;\n public nominalCurrentLowThreshold: number;\n public maximumFlow: number;\n public highFlowThreshold: number;\n public lowFlowThreshold: number;\n public useRainSensor: boolean;\n public useMoistureSensor: boolean;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n [\n this.valveId === \"master\" ? 1 : 0,\n this.valveId === \"master\" ? 1 : this.valveId || 1,\n Math.floor(this.nominalCurrentHighThreshold / 10),\n Math.floor(this.nominalCurrentLowThreshold / 10),\n ],\n encodeFloatWithScale(this.maximumFlow, 0 /* l/h */),\n encodeFloatWithScale(this.highFlowThreshold, 0 /* l/h */),\n encodeFloatWithScale(this.lowFlowThreshold, 0 /* l/h */),\n [\n (this.useRainSensor ? 0b1 : 0)\n | (this.useMoistureSensor ? 0b10 : 0),\n ],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"valve ID\": this.valveId,\n \"nominal current high threshold\": `${this.nominalCurrentHighThreshold} mA`,\n \"nominal current low threshold\": `${this.nominalCurrentLowThreshold} mA`,\n \"maximum flow\": `${this.maximumFlow} l/h`,\n \"high flow threshold\": `${this.highFlowThreshold} l/h`,\n \"low flow threshold\": `${this.lowFlowThreshold} l/h`,\n \"use rain sensor\": this.useRainSensor,\n \"use moisture sensor\": this.useMoistureSensor,\n },\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveConfigReportOptions {\n valveId: ValveId;\n nominalCurrentHighThreshold: number;\n nominalCurrentLowThreshold: number;\n maximumFlow: number;\n highFlowThreshold: number;\n lowFlowThreshold: number;\n useRainSensor: boolean;\n useMoistureSensor: boolean;\n}\n@CCCommand(IrrigationCommand.ValveConfigReport)\nexport class IrrigationCCValveConfigReport extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveConfigReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.valveId = options.valveId;\n this.nominalCurrentHighThreshold = options.nominalCurrentHighThreshold;\n this.nominalCurrentLowThreshold = options.nominalCurrentLowThreshold;\n this.maximumFlow = options.maximumFlow;\n this.highFlowThreshold = options.highFlowThreshold;\n this.lowFlowThreshold = options.lowFlowThreshold;\n this.useRainSensor = options.useRainSensor;\n this.useMoistureSensor = options.useMoistureSensor;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IrrigationCCValveConfigReport {\n validatePayload(raw.payload.length >= 4);\n let valveId: ValveId;\n if ((raw.payload[0] & 0b1) === ValveType.MasterValve) {\n valveId = \"master\";\n }\n else {\n valveId = raw.payload[1];\n }\n const nominalCurrentHighThreshold = 10 * raw.payload[2];\n const nominalCurrentLowThreshold = 10 * raw.payload[3];\n let offset = 4;\n let maximumFlow;\n {\n const { value, scale, bytesRead } = parseFloatWithScale(raw.payload.subarray(offset));\n validatePayload(scale === 0 /* l/h */);\n maximumFlow = value;\n offset += bytesRead;\n }\n let highFlowThreshold;\n {\n const { value, scale, bytesRead } = parseFloatWithScale(raw.payload.subarray(offset));\n validatePayload(scale === 0 /* l/h */);\n highFlowThreshold = value;\n offset += bytesRead;\n }\n let lowFlowThreshold;\n {\n const { value, scale, bytesRead } = parseFloatWithScale(raw.payload.subarray(offset));\n validatePayload(scale === 0 /* l/h */);\n lowFlowThreshold = value;\n offset += bytesRead;\n }\n validatePayload(raw.payload.length >= offset + 1);\n const useRainSensor = !!(raw.payload[offset] & 0b1);\n const useMoistureSensor = !!(raw.payload[offset] & 0b10);\n return new this({\n nodeId: ctx.sourceNodeId,\n valveId,\n nominalCurrentHighThreshold,\n nominalCurrentLowThreshold,\n maximumFlow,\n highFlowThreshold,\n lowFlowThreshold,\n useRainSensor,\n useMoistureSensor,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // nominalCurrentHighThreshold\n const nominalCurrentHighThresholdValue = IrrigationCCValues\n .nominalCurrentHighThreshold(this.valveId);\n this.ensureMetadata(ctx, nominalCurrentHighThresholdValue);\n this.setValue(ctx, nominalCurrentHighThresholdValue, this.nominalCurrentHighThreshold);\n // nominalCurrentLowThreshold\n const nominalCurrentLowThresholdValue = IrrigationCCValues\n .nominalCurrentLowThreshold(this.valveId);\n this.ensureMetadata(ctx, nominalCurrentLowThresholdValue);\n this.setValue(ctx, nominalCurrentLowThresholdValue, this.nominalCurrentLowThreshold);\n // maximumFlow\n const maximumFlowValue = IrrigationCCValues.maximumFlow(this.valveId);\n this.ensureMetadata(ctx, maximumFlowValue);\n this.setValue(ctx, maximumFlowValue, this.maximumFlow);\n // highFlowThreshold\n const highFlowThresholdValue = IrrigationCCValues.highFlowThreshold(this.valveId);\n this.ensureMetadata(ctx, highFlowThresholdValue);\n this.setValue(ctx, highFlowThresholdValue, this.highFlowThreshold);\n // lowFlowThreshold\n const lowFlowThresholdValue = IrrigationCCValues.lowFlowThreshold(this.valveId);\n this.ensureMetadata(ctx, lowFlowThresholdValue);\n this.setValue(ctx, lowFlowThresholdValue, this.lowFlowThreshold);\n // useRainSensor\n const useRainSensorValue = IrrigationCCValues.useRainSensor(this.valveId);\n this.ensureMetadata(ctx, useRainSensorValue);\n this.setValue(ctx, useRainSensorValue, this.useRainSensor);\n // useMoistureSensor\n const useMoistureSensorValue = IrrigationCCValues.useMoistureSensor(this.valveId);\n this.ensureMetadata(ctx, useMoistureSensorValue);\n this.setValue(ctx, useMoistureSensorValue, this.useMoistureSensor);\n return true;\n }\n public valveId: ValveId;\n public nominalCurrentHighThreshold: number;\n public nominalCurrentLowThreshold: number;\n public maximumFlow: number;\n public highFlowThreshold: number;\n public lowFlowThreshold: number;\n public useRainSensor: boolean;\n public useMoistureSensor: boolean;\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"valve ID\": this.valveId,\n \"nominal current high threshold\": `${this.nominalCurrentHighThreshold} mA`,\n \"nominal current low threshold\": `${this.nominalCurrentLowThreshold} mA`,\n \"maximum flow\": `${this.maximumFlow} l/h`,\n \"high flow threshold\": `${this.highFlowThreshold} l/h`,\n \"low flow threshold\": `${this.lowFlowThreshold} l/h`,\n \"use rain sensor\": this.useRainSensor,\n \"use moisture sensor\": this.useMoistureSensor,\n },\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveConfigGetOptions {\n valveId: ValveId;\n}\n@CCCommand(IrrigationCommand.ValveConfigGet)\n@expectedCCResponse(IrrigationCCValveConfigReport, testResponseForIrrigationCommandWithValveId as any)\nexport class IrrigationCCValveConfigGet extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveConfigGetOptions>) {\n super(options);\n this.valveId = options.valveId;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCValveConfigGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCValveConfigGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public valveId: ValveId;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.valveId === \"master\" ? 1 : 0,\n this.valveId === \"master\" ? 1 : this.valveId || 1,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"valve ID\": this.valveId,\n },\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveRunOptions {\n valveId: ValveId;\n duration: number;\n}\n@CCCommand(IrrigationCommand.ValveRun)\n@useSupervision()\nexport class IrrigationCCValveRun extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveRunOptions>) {\n super(options);\n this.valveId = options.valveId;\n this.duration = options.duration;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCValveRun {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCValveRun({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public valveId: ValveId;\n public duration: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.valveId === \"master\" ? 1 : 0,\n this.valveId === \"master\" ? 1 : this.valveId || 1,\n 0,\n 0,\n ]);\n this.payload.writeUInt16BE(this.duration, 2);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"valve ID\": this.valveId,\n };\n if (this.duration) {\n message.duration = `${this.duration} s`;\n }\n else {\n message.action = \"turn off\";\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveTableSetOptions {\n tableId: number;\n entries: ValveTableEntry[];\n}\n@CCCommand(IrrigationCommand.ValveTableSet)\n@useSupervision()\nexport class IrrigationCCValveTableSet extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveTableSetOptions>) {\n super(options);\n this.tableId = options.tableId;\n this.entries = options.entries;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCValveTableSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCValveTableSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public tableId: number;\n public entries: ValveTableEntry[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = new Bytes(1 + this.entries.length * 3);\n this.payload[0] = this.tableId;\n for (let i = 0; i < this.entries.length; i++) {\n const entry = this.entries[i];\n const offset = 1 + i * 3;\n this.payload[offset] = entry.valveId;\n this.payload.writeUInt16BE(entry.duration, offset + 1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"table ID\": this.tableId,\n };\n for (let i = 0; i < this.entries.length; i++) {\n const entry = this.entries[i];\n const valveLabel = entry.valveId.toString().padStart(3, \"0\");\n if (entry.duration) {\n message[`valve ${valveLabel} duration`] = `${entry.duration} s`;\n }\n else {\n message[`valve ${valveLabel} action`] = `turn off`;\n }\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveTableReportOptions {\n tableId: number;\n entries: ValveTableEntry[];\n}\n@CCCommand(IrrigationCommand.ValveTableReport)\nexport class IrrigationCCValveTableReport extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveTableReportOptions>) {\n super(options);\n // TODO: Check implementation:\n this.tableId = options.tableId;\n this.entries = options.entries;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IrrigationCCValveTableReport {\n validatePayload((raw.payload.length - 1) % 3 === 0);\n const tableId = raw.payload[0];\n const entries: ValveTableEntry[] = [];\n for (let offset = 1; offset < raw.payload.length; offset += 3) {\n entries.push({\n valveId: raw.payload[offset],\n duration: raw.payload.readUInt16BE(offset + 1),\n });\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n tableId,\n entries,\n });\n }\n public readonly tableId: number;\n public readonly entries: ValveTableEntry[];\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n \"table ID\": this.tableId,\n };\n for (let i = 0; i < this.entries.length; i++) {\n const entry = this.entries[i];\n const valveLabel = entry.valveId.toString().padStart(3, \"0\");\n if (entry.duration) {\n message[`valve ${valveLabel} duration`] = `${entry.duration} s`;\n }\n else {\n message[`valve ${valveLabel} action`] = `turn off`;\n }\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveTableGetOptions {\n tableId: number;\n}\nfunction testResponseForIrrigationValveTableGet(sent: IrrigationCCValveTableGet, received: IrrigationCCValveTableReport) {\n return received.tableId === sent.tableId;\n}\n@CCCommand(IrrigationCommand.ValveTableGet)\n@expectedCCResponse(IrrigationCCValveTableReport, testResponseForIrrigationValveTableGet)\nexport class IrrigationCCValveTableGet extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveTableGetOptions>) {\n super(options);\n this.tableId = options.tableId;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCValveTableGet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCValveTableGet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public tableId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.tableId]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"table ID\": this.tableId,\n },\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCValveTableRunOptions {\n tableIDs: number[];\n}\n@CCCommand(IrrigationCommand.ValveTableRun)\n@useSupervision()\nexport class IrrigationCCValveTableRun extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCValveTableRunOptions>) {\n super(options);\n this.tableIDs = options.tableIDs;\n if (this.tableIDs.length < 1) {\n throw new ZWaveError(`${this.constructor.name}: At least one table ID must be specified.`, ZWaveErrorCodes.Argument_Invalid);\n }\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCValveTableRun {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCValveTableRun({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public tableIDs: number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from(this.tableIDs);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"table IDs\": this.tableIDs\n .map((id) => id.toString().padStart(3, \"0\"))\n .join(\", \"),\n },\n };\n }\n}\n// @publicAPI\nexport interface IrrigationCCSystemShutoffOptions {\n /**\n * The duration in minutes the system must stay off.\n * 255 or `undefined` will prevent schedules from running.\n */\n duration?: number;\n}\n@CCCommand(IrrigationCommand.SystemShutoff)\n@useSupervision()\nexport class IrrigationCCSystemShutoff extends IrrigationCC {\n public constructor(options: WithAddress<IrrigationCCSystemShutoffOptions>) {\n super(options);\n this.duration = options.duration;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): IrrigationCCSystemShutoff {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new IrrigationCCSystemShutoff({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public duration?: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.duration ?? 255]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n duration: this.duration === 0\n ? \"temporarily\"\n : this.duration === 255 || this.duration === undefined\n ? \"permanently\"\n : `${this.duration} hours`,\n },\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["IrrigationCC"]
7
7
  }
@@ -430,16 +430,16 @@ let MeterCC = (() => {
430
430
  });
431
431
  const suppResp = await api.getSupported();
432
432
  if (suppResp) {
433
- const logMessage = `received meter support:
434
- type: ${(0, import_core.getMeterName)(suppResp.type)}
435
- supported scales: ${suppResp.supportedScales.map((s) => ((0, import_core.getMeterScale)(suppResp.type, s) ?? (0, import_core.getUnknownMeterScale)(s)).label).map((label) => `
436
- \xB7 ${label}`).join("")}
437
- supported rate types: ${suppResp.supportedRateTypes.map((rt) => (0, import_shared.getEnumMemberName)(import_Types.RateType, rt)).map((label) => `
438
- \xB7 ${label}`).join("")}
439
- supports reset: ${suppResp.supportsReset}`;
440
433
  ctx.logNode(node.id, {
441
434
  endpoint: this.endpointIndex,
442
- message: logMessage,
435
+ message: (0, import_core.logText)("received meter support:", {
436
+ nested: (0, import_core.logDict)({
437
+ type: (0, import_core.getMeterName)(suppResp.type),
438
+ "supported scales": (0, import_core.logList)(suppResp.supportedScales.map((s) => ((0, import_core.getMeterScale)(suppResp.type, s) ?? (0, import_core.getUnknownMeterScale)(s)).label)),
439
+ "supported rate types": (0, import_core.logList)(suppResp.supportedRateTypes.map((rt) => (0, import_shared.getEnumMemberName)(import_Types.RateType, rt))),
440
+ "supports reset": suppResp.supportsReset
441
+ })
442
+ }),
443
443
  direction: "inbound"
444
444
  });
445
445
  } else {
@@ -925,8 +925,7 @@ let MeterCCSupportedReport = (() => {
925
925
  const message = {
926
926
  "meter type": (0, import_core.getMeterName)(this.type),
927
927
  "supports reset": this.supportsReset,
928
- "supported scales": this.supportedScales.map((scale) => `
929
- \xB7 ${((0, import_core.getMeterScale)(this.type, scale) ?? (0, import_core.getUnknownMeterScale)(scale)).label}`).join(""),
928
+ "supported scales": (0, import_core.logList)(this.supportedScales.map((scale) => ((0, import_core.getMeterScale)(this.type, scale) ?? (0, import_core.getUnknownMeterScale)(scale)).label)),
930
929
  "supported rate types": this.supportedRateTypes.map((rt) => (0, import_shared.getEnumMemberName)(import_Types.RateType, rt)).join(", ")
931
930
  };
932
931
  return {