{
 "manufacturer": "Neptronic",
 "manufacturer_slug": "neptronic",
 "model": "SKDESC-xB",
 "model_slug": "skdesc-xb",
 "aliases": [
  "SKDESC",
  "SKDESCxB",
  "ESCJx",
  "ESCMx",
  "Electronic Steam Controller"
 ],
 "equipment_type": "Steam humidifier valve controller",
 "applies_to": "Neptronic SKDESC-xB electronic controllers for steam-to-steam / direct steam injection humidifier valves (ESCJx jacketed, ESCMx models).",
 "summary": "The SKDESC-xB is the electronic controller used on Neptronic steam injection humidifier valves. It communicates over BACnet MS/TP only and exposes setpoints, room and duct RH, PI tuning, high limit, network fallback settings, inputs and relay states.",
 "bacnet_transport": [
  "BACnet MS/TP"
 ],
 "firmware": null,
 "default_device_instance": "153000 + MAC address (153000 by default, MAC 0)",
 "access_inferred": false,
 "notes": [
  "Points marked 'object available as per system configuration' depend on the unit options.",
  "Empty 'W?' entries in the guide are treated as read-only."
 ],
 "source": {
  "title": "SKDESC-xB Series Electronic Steam Controller BACnet Communication Module User Guide",
  "doc_number": "SKDESCXB-BACnet-250905-EUA",
  "revision_date": "2025-09-05",
  "url": "https://www.neptronic.com/Humidifiers/PDF/2025/SKDESCXB-BACnet-250905-EUA.pdf"
 },
 "integration": {
  "summary": "Set MSV 2 Control Mode to Network to drive the valve from the BMS, or feed room RH to AV 2 (after turning on BV 14 NetworkRoomRH) with the internal setpoint AV 1. Configure the network fallback timeout and fallback setpoint, and switch the system with BV 1.",
  "minimum_points": [
   {
    "ref": "BV 1",
    "name": "PowerStatus",
    "why": "System power on/off"
   },
   {
    "ref": "MV 2",
    "name": "ControlMode",
    "why": "Control mode: External, Internal or Network"
   },
   {
    "ref": "AV 1",
    "name": "InternalStpnt",
    "why": "Internal RH setpoint"
   },
   {
    "ref": "AV 2",
    "name": "RoomRH",
    "why": "Room RH (writable when BV 14 = On)"
   },
   {
    "ref": "AV 4",
    "name": "SystemDemand",
    "why": "Humidity demand the controller is acting on"
   },
   {
    "ref": "BV 20",
    "name": "AlarmRelayState",
    "why": "Alarm relay output; on when the controller signals an alarm"
   }
  ],
  "enable": "BV 1 PowerStatus (0 = Off, 1 = On) is writable; MSV 2 ControlMode selects External, Internal or Network control.",
  "heartbeat": "Network fallback is configured with AV 30 FallbackTimeout (0-900 s), AV 31 FallbackStpnt (0-100 %) and the AV 32 FallbackDownCntr countdown; the guide lists these objects but does not spell out the fallback sequence, so test it on site.",
  "remote_sensors": "Room RH is written to AV 2 only while BV 14 NetworkRoomRH = On; duct RH is written to AV 3 only while MSV 3 HiLimitSensorSrc = Network. BV 15 enables an external RH setpoint.",
  "setup": [
   "MS/TP MAC defaults to 000 (000-254; 128-254 are non-token-passing slaves), baud auto-detects (Auto, 9600, 19200, 38400, 76800), Max_Master 127.",
   "Device instance defaults to 153000 + MAC and can be changed from the menu (password 637) or via Device Object_Identifier.",
   "Reinitialize Device over BACnet uses the password 'nep'."
  ],
  "gotchas": [
   "Out_of_Service automatically returns to False after 15 minutes by default (adjustable 0-120 min via a proprietary device property).",
   "A Copy Config can be run over BACnet, but the BACnet schedule is not copied.",
   "The controller does not send BACnet event notifications; poll alarm objects."
  ]
 },
 "points": [
  {
   "type": "AI",
   "instance": 1,
   "name": "SeparatorTempSig (ESCJx, ESCMx)",
   "description": "Separator temperature sensor signal (TS1) value",
   "units": "mV",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 2,
   "name": "Jacket1TempSig (ESCJx)",
   "description": "Temperature sensor signal (TS2) value of jacket 1",
   "units": "mV",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 3,
   "name": "Jacket2TempSig (ESCJx)",
   "description": "Temperature sensor signal (TS3) value of jacket 2",
   "units": "mV",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 4,
   "name": "Jacket3TempSig (ESCJx)",
   "description": "Temperature sensor signal (TS4) value of jacket 3",
   "units": "mV",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 5,
   "name": "Jacket4TempSig (ESCJx)",
   "description": "Temperature sensor signal (TS5) value of jacket 4",
   "units": "mV",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 6,
   "name": "PCRTempSig (PCR Option)",
   "description": "Temperature sensor signal of PCR",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 7,
   "name": "ExternalSig",
   "description": "External input signal (AI1)",
   "units": "mV",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 8,
   "name": "RoomRHSig",
   "description": "Room's relative humidity sensor signal (AI2)",
   "units": "mV",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 9,
   "name": "DuctRHSig",
   "description": "Duct's relative humidity sensor signal",
   "units": "mV",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 10,
   "name": "PCRWaterLevelSig",
   "description": "Water level signal of PCR",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 1,
   "name": "InternalStpnt",
   "description": "Internal setpoint value",
   "units": "%",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 2,
   "name": "RoomRH",
   "description": "Relative humidity reading value of the room",
   "units": "%",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 3,
   "name": "DuctRH",
   "description": "Relative humidity reading value of the duct",
   "units": "%",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 4,
   "name": "SystemDemand",
   "description": "System demand value",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 5,
   "name": "SystemOutput",
   "description": "System output value",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 6,
   "name": "SeparatorTemp (ESCJx, ESCMx)",
   "description": "Separator temperature reading",
   "units": "°F or °C",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 7,
   "name": "Jacket1Temp (ESCJx)",
   "description": "Temperature reading of jacket 1",
   "units": "°F or °C",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 8,
   "name": "Jacket2Temp (ESCJx)",
   "description": "Temperature reading of jacket 2",
   "units": "°F or °C",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 9,
   "name": "Jacket3Temp (ESCJx)",
   "description": "Temperature reading of jacket 3",
   "units": "°F or °C",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 10,
   "name": "Jacket4Temp (ESCJx)",
   "description": "Temperature reading of jacket 4",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 11,
   "name": "PCRTemp (PCR Option)",
   "description": "Temperature reading of PCR",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 12,
   "name": "WorkingCapacity",
   "description": "Percentage value in full capacity",
   "units": "%",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 13,
   "name": "SeparatorTempOffset (ESCJx, ESCMx)",
   "description": "Temperature sensor offset value of separator",
   "units": "°F or °C",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 14,
   "name": "Jacket1TempOffset (ESCJx)",
   "description": "Temperature sensor offset value of jacket 1",
   "units": "°F or °C",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 15,
   "name": "Jacket2TempOffset (ESCJx)",
   "description": "Temperature sensor offset value of jacket 2",
   "units": "°F or °C",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 16,
   "name": "Jacket3TempOffset (ESCJx)",
   "description": "Temperature sensor offset value of jacket 3",
   "units": "°F or °C",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 17,
   "name": "Jacket4TempOffset (ESCJx)",
   "description": "Temperature sensor offset value of jacket 4",
   "units": "°F or °C",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 18,
   "name": "PCRTempOffset (PCR Option)",
   "description": "Temperature sensor offset value of PCR",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 19,
   "name": "RoomRHOffset",
   "description": "Relative humidity sensor offset value of the room",
   "units": "%RH",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 20,
   "name": "CntrlDeadBand",
   "description": "Control deadband value",
   "units": "%RH",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 21,
   "name": "CntrlPropRamp",
   "description": "Control proportional ramp value",
   "units": "%RH",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 22,
   "name": "CntrlIntgrlTime",
   "description": "Control integral ramp value",
   "units": "%RH",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 23,
   "name": "HiLimitStpnt",
   "description": "High limit setpoint value",
   "units": "%RH",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 24,
   "name": "HiLimitPropRamp",
   "description": "High limit proportional ramp value",
   "units": "%RH",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 25,
   "name": "DuctRHOffset",
   "description": "Relative humidity offset value of the duct",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 26,
   "name": "HiLimitMaxDemand",
   "description": "High limit maximum demand value",
   "units": "%",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 27,
   "name": "EndOfSeasonDelay",
   "description": "End of season delay",
   "units": "h",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 28,
   "name": "ServiceDelay",
   "description": "Delay in hours before a Service has to be performed",
   "units": "h",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 29,
   "name": "ServiceRunTime",
   "description": "Service runtime counter",
   "units": "h",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 30,
   "name": "FallbackTimeout",
   "description": "Network fallback timeout",
   "units": "s",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 31,
   "name": "FallbackStpnt",
   "description": "Network fallback setpoint",
   "units": "%",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 32,
   "name": "FallbackDownCntr",
   "description": "Network fallback downcounter",
   "units": "s",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 33,
   "name": "TotalRunTime",
   "description": "Total system runtime",
   "units": "h",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 34,
   "name": "CntrlOutputSig",
   "description": "Control valve output signal",
   "units": "mV",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 35,
   "name": "MicroCntrlTemp",
   "description": "Microcontroller temperature reading",
   "units": "°F or °C",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 36,
   "name": "BoardTemp",
   "description": "Temperature reading of the PC board",
   "units": "°F or °C",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 37,
   "name": "CntrlDerivativeTime",
   "description": "Control derivative time",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 38,
   "name": "DuctStpntMin",
   "description": "Minimum setpoint value of duct",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 39,
   "name": "DuctStpntMax",
   "description": "Maximum setpoint value of duct",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 41,
   "name": "DuctPropRamp",
   "description": "Proportional ramp value of duct",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 42,
   "name": "DuctIntgrlTime",
   "description": "Integral time value of duct",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 43,
   "name": "DuctDerivativeTime",
   "description": "Derivative time value of duct",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 44,
   "name": "ControlDemand",
   "description": "Control demand value",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 45,
   "name": "DynamicDuctStpnt",
   "description": "Dynamic duct setpoint value",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 46,
   "name": "DuctDemand",
   "description": "Duct demand value",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 47,
   "name": "PCRSupplySig (PCR Option)",
   "description": "Supply signal value of PCR",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 48,
   "name": "PCRSupply (PCR Option)",
   "description": "Supply value of PCR",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BI",
   "instance": 1,
   "name": "ExternalDemandInputState",
   "description": "Digital external demand input state",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BI",
   "instance": 2,
   "name": "AirflowInputState",
   "description": "Airflow input state",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BI",
   "instance": 3,
   "name": "HiLimitInputState",
   "description": "High limit input state",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BI",
   "instance": 4,
   "name": "InterlockInputState",
   "description": "Interlock input state",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 1,
   "name": "PowerStatus",
   "description": "System's power status",
   "units": "",
   "access": "W",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 2,
   "name": "ServiceWarning",
   "description": "Service warning",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 3,
   "name": "ServiceAlarm",
   "description": "Service alarm",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 4,
   "name": "AirFlowCutout",
   "description": "Air flow cutout state",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 5,
   "name": "HiLimitCutout",
   "description": "High limit cutout state",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 6,
   "name": "InterlockCutout",
   "description": "Interlock cutout state",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 7,
   "name": "TempSensorDefect",
   "description": "Temperature sensor defect",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 8,
   "name": "RoomRHSensorDefect",
   "description": "Room relative humidity sensor defect",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 9,
   "name": "DuctRHSensorDefect",
   "description": "Duct relative humidity sensor defect",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 10,
   "name": "FloodedSteamTrap",
   "description": "Flooded steam trap",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 11,
   "name": "DisplayUnits",
   "description": "Display units",
   "units": "",
   "access": "W",
   "states": "0=Metric, 1=Imperial"
  },
  {
   "type": "BV",
   "instance": 12,
   "name": "EconoMode",
   "description": "Economic mode",
   "units": "",
   "access": "W",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 13,
   "name": "ExternalSigRange",
   "description": "External input signal range",
   "units": "",
   "access": "W",
   "states": "0=2 to 10V, 1=0 to 10V"
  },
  {
   "type": "BV",
   "instance": 14,
   "name": "NetworkRoomRH",
   "description": "Network room relative humidity",
   "units": "",
   "access": "W",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 15,
   "name": "ExternalRHStpnt",
   "description": "External relative humidity setpoint",
   "units": "",
   "access": "W",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 16,
   "name": "ExternalRHStpnt",
   "description": "",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 17,
   "name": "HiLimitRHSigRange",
   "description": "High limit relative humidity signal range",
   "units": "",
   "access": "W",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 18,
   "name": "RunsWhenServiceAlarm",
   "description": "Runs when service alarm is active",
   "units": "",
   "access": "W",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 19,
   "name": "IsoValveOutState",
   "description": "Isolating valve output state",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 20,
   "name": "AlarmRelayState",
   "description": "Alarm relay output state",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 21,
   "name": "SteamRelayState",
   "description": "Steam relay output state",
   "units": "",
   "access": "R",
   "states": "0=OFF, 1=ON"
  },
  {
   "type": "BV",
   "instance": 22,
   "name": "PCRReliefValveOutState (PCR Option)",
   "description": "Relief valve output state of PCR option",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "MV",
   "instance": 1,
   "name": "Language",
   "description": "Sytem language",
   "units": "",
   "access": "W",
   "states": "1=ENG"
  },
  {
   "type": "MV",
   "instance": 2,
   "name": "ControlMode",
   "description": "Control mode",
   "units": "",
   "access": "W",
   "states": "1=External, 2=Internal, 3=Network"
  },
  {
   "type": "MV",
   "instance": 3,
   "name": "DuctSensorSrc",
   "description": "Duct sensor source",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "MV",
   "instance": 4,
   "name": "PCRWaterLevel (PCR Option)",
   "description": "PCR water level",
   "units": "",
   "access": "R",
   "states": "1=Above High, 2=Above Low, 3=Below Low, 4=Error"
  }
 ],
 "page": "https://easybacnet.com/bacnet-points-lists/neptronic/skdesc-xb",
 "note": "Provided as-is. Point availability varies by firmware and options; verify against the live device.",
 "disclaimer": "DISCLAIMER: reference only, provided AS IS with no warranty. May contain errors or be out of date. You must verify every point against the manufacturer's current documentation and the live device before use. easybacnet.com accepts no liability for its use and is not affiliated with the manufacturer. Terms: https://easybacnet.com/terms#content"
}
