{
 "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": "Re-typed from the manufacturer's public documentation (see source). Point availability varies by firmware and options; verify against the live device."
}
