{
 "manufacturer": "Thermal Solutions",
 "manufacturer_slug": "thermal-solutions",
 "model": "TSBC boiler control (Universal Gateway)",
 "model_slug": "tsbc-universal-gateway",
 "aliases": [
  "TSBC",
  "Thermal Solutions Boiler Control",
  "Universal Gateway",
  "106417-01",
  "ProtoNode RER",
  "FPC-N34-0816",
  "EVS",
  "EVCA"
 ],
 "equipment_type": "Boiler controller (TSBC) via ProtoNode gateway",
 "applies_to": "Thermal Solutions boilers with the TSBC control (such as EVS and EVCA), connected through the Thermal Solutions Universal Gateway.",
 "summary": "The Thermal Solutions Universal Gateway is a ProtoNode that reads boilers with the Thermal Solutions Boiler Control (TSBC) over Modbus RTU and serves each one as a BACnet IP or BACnet MS/TP device. The TSBC profile has 58 objects: a remote on/off command, a remote firing rate or setpoint value, temperatures, and binary flags for inputs, outputs, control states and annunciator alarms.",
 "bacnet_transport": [
  "BACnet IP",
  "BACnet MS/TP"
 ],
 "firmware": null,
 "default_device_instance": "50000 + boiler Modbus address (BACnet IP and MS/TP multiple node); Node_Offset default 50,000",
 "access_inferred": false,
 "notes": [
  "The Universal Gateway is a ProtoNode (BACnet RER FPC-N34-0816, LonWorks LER FPC-N35-0817) that auto-discovers up to 8 boilers on its Modbus RS-485 port.",
  "Every boiler is its own BACnet device with the same object list; the instances here are for one boiler.",
  "Power all boilers and connect them before running auto-discovery; a boiler added later is not found until discovery is run again.",
  "Only BV 4 and AV 53 are writable; all other TSBC objects are read-only.",
  "TSBC boilers must be set to Modbus, address 1-20, 38.4 kbps, no parity in the boiler's Communications menu.",
  "The meaning of the Control Mode values (1-7) is not given in the manual."
 ],
 "integration": {
  "summary": "Set each TSBC to Modbus (address 1-20, 38.4 kbps), wire its RJ11 port to the gateway, run auto-discovery, then write BV 4 Remote On/Off and AV 53 remote firing rate or setpoint. Jumper LR to C (or wire an optional Local/Remote contact to LR and C) so the boiler accepts written values. Boiler sequencing has to be done outside the boiler control once the BMS is connected.",
  "minimum_points": [
   {
    "ref": "BV 4",
    "name": "Remote On/Off Modbus Command",
    "why": "Boiler on/off from the BMS (1 = on)"
   },
   {
    "ref": "AV 53",
    "name": "Remote Firing Rate or Remote SP",
    "why": "Firing rate % or setpoint °F, per boiler setup"
   },
   {
    "ref": "BI 29",
    "name": "State Boiler Running",
    "why": "Boiler running (1 = on)"
   },
   {
    "ref": "BI 3",
    "name": "Local/Remote",
    "why": "Must read Remote (1) for BMS control"
   },
   {
    "ref": "AI 48",
    "name": "Boiler Outlet Water Temp",
    "why": "Boiler outlet water temperature, °F"
   },
   {
    "ref": "AI 51",
    "name": "Boiler Actual SP",
    "why": "Setpoint in use, °F"
   },
   {
    "ref": "AI 55",
    "name": "Firing Rate Output to Mod Motor",
    "why": "Firing rate output, %"
   },
   {
    "ref": "BI 15",
    "name": "General Alarm",
    "why": "General alarm (1 = on)"
   }
  ],
  "enable": "Jumper LR to C on the TSBC (or wire an optional Local/Remote contact to LR and C) so the boiler accepts written values; BI 3 shows the result. Then BV 4 turns the boiler on/off and AV 53 carries the remote firing rate or remote setpoint. When the BMS controls setpoint, Enable/Disable and lead/lag are not available over the network, so wire an enable contact to RO and C on each boiler; when it controls modulation, they are.",
  "heartbeat": null,
  "remote_sensors": "The TSBC reads its own outdoor (O+/O-) and remote system (R+/R-) 10k thermistors; there is no writable temperature input.",
  "setup": [
   "BACnet IP and MS/TP multiple node: each boiler is its own device, instance = Node_Offset (default 50,000) + boiler Modbus address, so address 1 = 50001.",
   "BACnet MS/TP single node (for front ends without virtual-node support): one device at Node_Offset + MAC, with boiler objects renumbered 1001, 1002... for address 1, 2001... for address 2.",
   "S-bank DIP switches pick the protocol (S0-S2 all Off = BACnet IP, S0 On = MS/TP multiple node, S2 On = MS/TP single node); S3 On at power-up runs auto-discovery (about 3 minutes), then set S3 Off to keep the configuration.",
   "MS/TP MAC address 1-127 on A-bank DIP switches (one MAC for the whole gateway); baud rate on B-bank switches.",
   "Change the IP address and Node_Offset in the ProtoNode web configurator (default IP 192.168.1.24).",
   "TSBC: Communications menu, Protocol = Modbus, Modbus Address 1-20, 38.4 kbps, parity None; wire the RJ11 boiler-to-boiler port (wire 1 and 2) to the gateway RS-485."
  ],
  "gotchas": [
   "AV 53 is firing rate (0-100 %) or setpoint (°F) depending on how the boiler is set up.",
   "With the BMS connected, multiple-boiler lead/lag must be done outside the boiler controls.",
   "The gateway shares the RJ11 port used for boiler-to-boiler communication; a 2-port RJ11 splitter is needed."
  ]
 },
 "source": {
  "title": "Thermal Solutions Universal Gateway Instruction Manual",
  "doc_number": "106417-01 Rev. 13",
  "revision_date": "2017-08-21",
  "url": "https://boilers-water-heaters.thermalsolutions.com/Asset/106417-01%20Rev%2013%20TS%20Universal%20Gateway%20Instructions.pdf"
 },
 "points": [
  {
   "type": "BI",
   "instance": 1,
   "name": "Outdoor Air Reset Enable/Disable",
   "description": "Outdoor air reset enabled",
   "units": "",
   "access": "R",
   "states": "0=Disable, 1=Enable"
  },
  {
   "type": "BI",
   "instance": 2,
   "name": "Domestic Hot Water Priority",
   "description": "DHW priority enabled",
   "units": "",
   "access": "R",
   "states": "0=Disable, 1=Enable"
  },
  {
   "type": "BI",
   "instance": 3,
   "name": "Local/Remote",
   "description": "Local/remote input state",
   "units": "",
   "access": "R",
   "states": "0=Local, 1=Remote"
  },
  {
   "type": "BV",
   "instance": 4,
   "name": "Remote On/Off Modbus Command",
   "description": "Boiler on/off command from the BMS",
   "units": "",
   "access": "W",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 5,
   "name": "Spare Input (Programmable)",
   "description": "Programmable spare input",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 6,
   "name": "Low Water Cutoff Switch",
   "description": "Low water cutoff switch",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 7,
   "name": "Burner On/Off Switch",
   "description": "Burner on/off switch",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 8,
   "name": "Low Water Flow",
   "description": "Low water flow switch",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 9,
   "name": "High and Low Gas Pressure Switches",
   "description": "Gas pressure switches",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 10,
   "name": "Operating or High Limit",
   "description": "Operating or high limit",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 11,
   "name": "Low Combustion Air Flow",
   "description": "Low combustion air flow switch",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 12,
   "name": "Fuel Valve Energized",
   "description": "Fuel valve energized",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 13,
   "name": "Flame Safeguard Alarm",
   "description": "Flame safeguard alarm",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 14,
   "name": "Call For Heat (CFH)",
   "description": "Call for heat active",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 15,
   "name": "General Alarm",
   "description": "General alarm output",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 16,
   "name": "Vent Inducer",
   "description": "Vent inducer output",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 17,
   "name": "Boiler Pump",
   "description": "Boiler pump output",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 18,
   "name": "System Pump",
   "description": "System pump output",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 19,
   "name": "Spare Output (Programmable)",
   "description": "Programmable spare output",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 20,
   "name": "State Boiler Disabled",
   "description": "Control state: boiler disabled",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 21,
   "name": "State Weather Shutdown",
   "description": "Control state: warm weather shutdown",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 22,
   "name": "State Lockout",
   "description": "Control state: lockout",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 23,
   "name": "State Pump Purge",
   "description": "Control state: pump purge",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 24,
   "name": "State Limit Hold",
   "description": "Control state: limit hold",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 25,
   "name": "State Purge/Pilot Ign",
   "description": "Control state: purge / pilot ignition",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 26,
   "name": "State Low Fire/Ignition",
   "description": "Control state: low fire / ignition",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 27,
   "name": "State Main Ignition",
   "description": "Control state: main ignition",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 28,
   "name": "State Low Fire Hold",
   "description": "Control state: low fire hold",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 29,
   "name": "State Boiler Running",
   "description": "Control state: boiler running",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 30,
   "name": "State Fan Post Purge",
   "description": "Control state: fan post purge",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 31,
   "name": "State Pump Cool Down",
   "description": "Control state: pump cool down",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 32,
   "name": "State Standby",
   "description": "Control state: standby",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 33,
   "name": "Annunciator Low Water Level",
   "description": "Annunciator: low water level",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 34,
   "name": "Annunciator Off Switch",
   "description": "Annunciator: off switch",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 35,
   "name": "Annunciator Low Water Flow",
   "description": "Annunciator: low water flow",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 36,
   "name": "Annunciator Fuel Limit",
   "description": "Annunciator: fuel limit",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 37,
   "name": "Annunciator High Temp Limit",
   "description": "Annunciator: high temperature limit",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 38,
   "name": "Annunciator Low Air Flow",
   "description": "Annunciator: low air flow",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 39,
   "name": "Annunciator FSG Lockout",
   "description": "Annunciator: flame safeguard lockout",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 40,
   "name": "Annunciator Outlet Temp Fail",
   "description": "Annunciator: outlet sensor failure",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 41,
   "name": "Annunciator Inlet Temp Fail",
   "description": "Annunciator: inlet sensor failure",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 42,
   "name": "Annunciator OA Temp Fail",
   "description": "Annunciator: outdoor sensor failure",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 43,
   "name": "Annunciator Remote Temp Fail",
   "description": "Annunciator: remote system sensor failure",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 44,
   "name": "Annunciator Remote In Fail",
   "description": "Annunciator: remote input failure",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 45,
   "name": "Annunciator Comm Fail",
   "description": "Annunciator: communication failure",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 46,
   "name": "Annunciator Low Inlet Temp",
   "description": "Annunciator: low inlet temperature",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "BI",
   "instance": 47,
   "name": "Annunciator Memory Failure",
   "description": "Annunciator: memory failure",
   "units": "",
   "access": "R",
   "states": "0=Off, 1=On"
  },
  {
   "type": "AI",
   "instance": 48,
   "name": "Boiler Outlet Water Temp",
   "description": "Boiler outlet water temperature (-50 to 300)",
   "units": "°F",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 49,
   "name": "Boiler Inlet Water Temp",
   "description": "Boiler inlet water temperature (-50 to 300)",
   "units": "°F",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 50,
   "name": "Outside Air Temp",
   "description": "Outdoor air temperature (-50 to 300)",
   "units": "°F",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 51,
   "name": "Boiler Actual SP",
   "description": "Setpoint in use (60 to 230)",
   "units": "°F",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 52,
   "name": "Remote System Temp",
   "description": "Remote system sensor temperature (-50 to 300)",
   "units": "°F",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 53,
   "name": "Remote Firing Rate or Remote SP",
   "description": "Remote firing rate (0-100 %) or remote setpoint (°F)",
   "units": "% or °F",
   "access": "W",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 54,
   "name": "PCB Temp Sensor",
   "description": "Control board temperature (-50 to 300)",
   "units": "°F",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 55,
   "name": "Firing Rate Output to Mod Motor",
   "description": "Firing rate sent to modulation motor (0-100)",
   "units": "%",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 56,
   "name": "Minimum Return Temp SP",
   "description": "Minimum return temperature setpoint (110 to 180)",
   "units": "°F",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 57,
   "name": "Mixing Valve Output",
   "description": "Mixing valve output (0-100)",
   "units": "%",
   "access": "R",
   "states": ""
  },
  {
   "type": "AI",
   "instance": 58,
   "name": "Control Mode",
   "description": "Control mode number (1 to 7)",
   "units": "",
   "access": "R",
   "states": ""
  }
 ],
 "page": "https://easybacnet.com/bacnet-points-lists/thermal-solutions/tsbc-universal-gateway",
 "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"
}
