{
 "manufacturer": "CaptiveAire",
 "manufacturer_slug": "captiveaire",
 "model": "Direct Digital Controls (DDC) Heater Controller",
 "model_slug": "ddc-heater-controller-a0020659",
 "aliases": [
  "A0020659",
  "CaptiveAire DDC",
  "DDC controller",
  "ctrl_source"
 ],
 "equipment_type": "Make-up air heater / tempered air unit DDC controller",
 "applies_to": "CaptiveAire heater (make-up air) units shipped with the factory Direct Digital Controls (DDC) controller covered by IOM A0020659.",
 "summary": "CaptiveAire's DDC controller runs a heater or tempered make-up air unit and talks BACnet MS/TP, Metasys N2, Modbus or LonWorks, chosen by DIP switches. The BMS picks the occupancy source, enables the unit through BV 1 when AV 1 = 2, writes heating and cooling setpoints, can call cooling stages directly and send VFD speed and damper signals. It reports intake, discharge and room temperatures, fan, damper, heat and cooling commands and status, and a set of alarm BVs (airflow, filter, freeze, heat failure, high/low supply air, smoke).",
 "bacnet_transport": [
  "BACnet MS/TP"
 ],
 "firmware": null,
 "default_device_instance": null,
 "access_inferred": false,
 "notes": [
  "Names are the 'BACnet Reference' (or 'Network Reference') printed for each variable.",
  "Access follows the manual's 'Editable'/'On/Off Switch' versus 'Fixed readout' wording; the alarm BVs 31-47 are read-only.",
  "Temperatures are in °F by default and can be changed to °C in software.",
  "Several settings depend on others: BV 1 needs AV 1 = 2; BV 0 needs BV 19 = 0; BV 17 needs BV 18 = 0 (and BV 18 needs BV 17 = 0, as printed).",
  "AV 12 is printed with two different ranges (0-100 % and 1.0-10.0, default 2.0); only the percent range is used here.",
  "Source: List of Analog Variables, List of Binary Variables and Network Alarm Variables, manual pages 6-18 (59 objects)."
 ],
 "source": {
  "title": "Direct Digital Controls (DDC) Installation, Operation, and Maintenance Manual",
  "doc_number": "A0020659",
  "revision_date": "February 2025 Rev. 7",
  "url": "https://www.captiveaire.com/manuals/electrical/ddc-oim.pdf"
 },
 "points": [
  {
   "type": "AV",
   "instance": 1,
   "name": "ctrl_source",
   "description": "Software control source (occupancy method)",
   "units": "",
   "access": "W",
   "states": "0=Digital input, 1=Keypad, 2=BAS via BV 1, 3=BACnet schedule, 4=Override on"
  },
  {
   "type": "AV",
   "instance": 2,
   "name": "iat_sensor_visible",
   "description": "Incoming Air Temperature Sensor; range -25.0 to 225.0",
   "units": "°F",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 3,
   "name": "hsat_stpt",
   "description": "Heating Supply Air Setpoint; range 40.0 to 140.0; default 55.0",
   "units": "°F",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 4,
   "name": "eht_stpt",
   "description": "Effective Heating Setpoint",
   "units": "°F",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 5,
   "name": "ht_iat_stpt",
   "description": "Heating Intake Air Activation Setpoint; range 40.0 to 90.0; default 45.0",
   "units": "°F",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 6,
   "name": "cl_iat_stpt",
   "description": "Cooling Intake Air Setpoint; range 60.0 to 120.0; default 85.0",
   "units": "°F",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 7,
   "name": "ecl_stpt",
   "description": "Effective Cooling Setpoint",
   "units": "°F",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 8,
   "name": "cl_s2_ofst",
   "description": "Cooling Stage 2 Offset; range 1.0 to 30.0",
   "units": "°F",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 9,
   "name": "edat",
   "description": "Effective Discharge Air Temperature; range -25.0 to 225.0",
   "units": "°F",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 10,
   "name": "s1_cl_dly",
   "description": "Cooling Stage 1 Off Delay; range 1 to 30; default 5",
   "units": "min",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 11,
   "name": "s2_cl_dly",
   "description": "Cooling Stage 2 On Delay; range 1 to 30; default 5",
   "units": "min",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 12,
   "name": "htg_vlv_out",
   "description": "Heating valve output (0 % low fire, 100 % high fire)",
   "units": "%",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 13,
   "name": "vfd_spd_in",
   "description": "VFD Speed Input; range 0.0 to 10.0",
   "units": "V",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 14,
   "name": "vfd_spd_out",
   "description": "VFD Speed Output; range 0.0 to 10.0",
   "units": "V",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 15,
   "name": "mod_dmp_in",
   "description": "Modulating Damper Input; range 0.0 to 10.0",
   "units": "V",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 16,
   "name": "mod_dmp_out",
   "description": "Modulating Damper Output; range 0.0 to 10.0",
   "units": "V",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 17,
   "name": "rodt_heat_stpt",
   "description": "Heating Room Override Supply Air Setpoint; range 80.0 to 140.0; default 120.0",
   "units": "°F",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 18,
   "name": "cool_intake_lockout",
   "description": "Cooling Intake Air Low Temp Lockout; range 60.0 to 130.0; default 65.0",
   "units": "°F",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 19,
   "name": "heat_intake_lockout",
   "description": "Heating Intake Air High Temp Lockout; range 35.0 to 130.0; default 65.0",
   "units": "°F",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 20,
   "name": "rat_sensor_visible",
   "description": "Space (Room) Air Temperature Sensor; range -25.0 to 225.0",
   "units": "°F",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 21,
   "name": "rt_heat_stpt",
   "description": "Heating Room Temperature Setpoint; range 50.0 to 90.0; default 70.0",
   "units": "°F",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 22,
   "name": "rt_heat_stpt_diff",
   "description": "Heating Room Temperature Setpoint Differential; range 1.0 to 10.0; default 2.0",
   "units": "°F",
   "access": "W",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 0,
   "name": "hdwr_strt_toggle",
   "description": "Hardware Start Toggle",
   "units": "",
   "access": "W",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 1,
   "name": "enable_bas",
   "description": "BV Unit Enable (BAS)",
   "units": "",
   "access": "W",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 2,
   "name": "occ_status",
   "description": "Occupancy Status",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 3,
   "name": "sf_cmd",
   "description": "Supply Fan Command",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 4,
   "name": "sf_status",
   "description": "Supply Fan Status",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 5,
   "name": "af_sts",
   "description": "Airflow Proving Status",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 6,
   "name": "oad_cmd",
   "description": "Outside Air Damper Command",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 7,
   "name": "oad_sts",
   "description": "Outside Air Damper Status",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 8,
   "name": "s1_clg_on",
   "description": "1st Stage Cooling On",
   "units": "",
   "access": "W",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 9,
   "name": "s1_clg_cmd",
   "description": "1st Stage Cooling Command",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 10,
   "name": "s2_clg_on",
   "description": "2nd Stage Cooling On",
   "units": "",
   "access": "W",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 11,
   "name": "s2_clg_cmd",
   "description": "2nd Stage Cooling Command",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 12,
   "name": "ht_on_cmd",
   "description": "Heat On Command",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 13,
   "name": "fltr_sts",
   "description": "Clogged Filter Status",
   "units": "",
   "access": "R",
   "states": "On=Normal, Off=Clogged filter"
  },
  {
   "type": "BV",
   "instance": 14,
   "name": "smk_sts",
   "description": "Smoke Detector Status",
   "units": "",
   "access": "R",
   "states": "On=Smoke alarm"
  },
  {
   "type": "BV",
   "instance": 15,
   "name": "emerg_alm_in",
   "description": "Emergency Alarm",
   "units": "",
   "access": "W",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 16,
   "name": "room_override",
   "description": "Room Override Status",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 17,
   "name": "heat_control",
   "description": "Heating Temperature Control",
   "units": "",
   "access": "W",
   "states": "Off=Discharge control, On=Space control"
  },
  {
   "type": "BV",
   "instance": 18,
   "name": "fst_toggle",
   "description": "Clogged Filter Toggle",
   "units": "",
   "access": "W",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 19,
   "name": "smk_toggle",
   "description": "Smoke Detector Toggle",
   "units": "",
   "access": "W",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 31,
   "name": "af_fail",
   "description": "AF_FAIL: Airflow Failure",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 32,
   "name": "clg_fltr",
   "description": "CLG_FLTR: Filter Change Required",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 33,
   "name": "clg_rntm",
   "description": "CLG_RNTM: Cooling Runtime Expired",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 34,
   "name": "csat_hi",
   "description": "CSAT_HI: High Cooling Supply Air Temperature",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 35,
   "name": "freeze",
   "description": "FREEZE: Freezestat",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 36,
   "name": "hsat_lo",
   "description": "HSAT_LO: Low Heating Supply Air Temperature",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 37,
   "name": "ht_fail",
   "description": "HT_FAIL: Heating Failure",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 38,
   "name": "key_out_lck",
   "description": "KEY_OUT_LCK: Keypad Output Locked",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 39,
   "name": "oad_fail",
   "description": "OAD_FAIL: Outside Air Damper Failure",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 40,
   "name": "oad_hand",
   "description": "OAD_HAND: Outside Air Damper In Hand",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 41,
   "name": "oad_rntm",
   "description": "OAD_RNTM: Outside Air Damper Runtime Expired",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 42,
   "name": "sat_hi",
   "description": "SAT_HI: High Supply Air Temperature",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 43,
   "name": "sat_lo",
   "description": "SAT_LO: Low Supply Air Temperature",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 44,
   "name": "sf_fail",
   "description": "SF_FAIL: Supply Fan Failure",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 45,
   "name": "sf_hand",
   "description": "SF_HAND: Supply Fan In Hand",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 46,
   "name": "sf_rntm",
   "description": "SF_RNTM: Supply Fan Runtime Expired",
   "units": "",
   "access": "R",
   "states": ""
  },
  {
   "type": "BV",
   "instance": 47,
   "name": "smoke",
   "description": "SMOKE: Smoke Detector Alarm",
   "units": "",
   "access": "R",
   "states": ""
  }
 ],
 "integration": {
  "summary": "Set the address on the two rotary switches (default 03) and check the protocol DIP switches are on BACnet MS/TP (factory baud 9600). Write AV 1 ctrl_source = 2 so BV 1 enable_bas runs the unit, then write the heating supply air setpoint AV 3. Monitor occupancy status, supply fan status, discharge temperature, heat command and the alarm BVs.",
  "minimum_points": [
   {
    "ref": "BV 1",
    "name": "enable_bas",
    "why": "Unoccupied/occupied (run) command from the BAS"
   },
   {
    "ref": "AV 1",
    "name": "ctrl_source",
    "why": "Must be 2 for BV 1 BAS control"
   },
   {
    "ref": "AV 3",
    "name": "hsat_stpt",
    "why": "Heating supply air setpoint, 40-140 °F"
   },
   {
    "ref": "AV 6",
    "name": "cl_iat_stpt",
    "why": "Intake air temperature to start cooling"
   },
   {
    "ref": "BV 2",
    "name": "occ_status",
    "why": "Occupancy status"
   },
   {
    "ref": "BV 4",
    "name": "sf_status",
    "why": "Supply fan status (airflow proven)"
   },
   {
    "ref": "AV 9",
    "name": "edat",
    "why": "Discharge air temperature"
   },
   {
    "ref": "BV 12",
    "name": "ht_on_cmd",
    "why": "Call for heat relay on"
   },
   {
    "ref": "BV 31",
    "name": "af_fail",
    "why": "Airflow failure alarm"
   },
   {
    "ref": "BV 37",
    "name": "ht_fail",
    "why": "Heating failure alarm"
   }
  ],
  "enable": "AV 1 ctrl_source picks the occupancy method: 0 digital input, 1 keypad, 2 BAS using BV 1, 3 BACnet schedule, 4 override on. With AV 1 = 2, BV 1 enable_bas switches the unit between unoccupied and occupied. BV 15 emerg_alm_in = On shuts the unit down.",
  "heartbeat": null,
  "remote_sensors": "AV 13 vfd_spd_in and AV 15 mod_dmp_in take a network voltage for the VFD speed and modulating damper; BV 8 and BV 10 let the network call cooling stages directly, subject to the unit's safeties.",
  "setup": [
   "Protocol (BACnet MS/TP, N2, Modbus or LonWorks) is set at the factory on DIP switches 3-4; switches 1-2 set the baud (factory 9600).",
   "Address is set on two rotary switches (tens and ones), factory default 03; power cycle after changing it.",
   "BACnet MS/TP connects to the RS-485 port at the upper left of the controller."
  ],
  "gotchas": [
   "BV 15 is a network emergency stop: On shuts the unit down.",
   "Cooling stage requests (BV 8, BV 10) still need fan status, heating off and the intake lockouts satisfied.",
   "BV 38 alarms if a keypad override is left locked on."
  ]
 },
 "page": "https://easybacnet.com/bacnet-points-lists/captiveaire/ddc-heater-controller-a0020659",
 "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"
}
