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