{
  "spec_version": 1,
  "slug": "buderus-ssb",
  "manufacturer": "Buderus (Bosch Thermotechnology)",
  "model": "SSB condensing boiler",
  "category": "Boiler",
  "supplier_url": "https://www.bosch-homecomfort.com/us/media/country_pool/service/technical_guides/6720818450_ssb_boiler_modbus_installation_instructions_en_10.2015_us_us.pdf",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst",
    "native_interface": "rs485",
    "serial": {
      "parity": "None",
      "baud_rate": 9600,
      "data_bits": 8,
      "stop_bits": 2
    }
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 98,
      "count": 1,
      "name": "Unit selection",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Bit0: 0 = °C, 1 = °F. Bit1: 0 = bar, 1 = psi. Writing requires the write-enable bit in register 99."
    },
    {
      "address": 99,
      "count": 1,
      "name": "Control register",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Bit0 = write enable (cleared automatically after a write and after 4 s without communication). Bit14 = controller reset (only accepted in lockout). All other bits must be 0."
    },
    {
      "address": 100,
      "count": 1,
      "name": "State",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Burner state code; the document's state table (Tab. 10) lists the state numbers 0-23."
    },
    {
      "address": 101,
      "count": 1,
      "name": "Status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Operating-status code; the document's status table (Tab. 11) lists the status numbers (0, 10, 14-22)."
    },
    {
      "address": 102,
      "count": 1,
      "name": "Error code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Current error number; the document's error table (Tab. 12) lists the lockout and blocking error numbers. 0 = no error."
    },
    {
      "address": 110,
      "count": 1,
      "name": "CH pump",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Central-heating pump output, 0-100 %."
    },
    {
      "address": 111,
      "count": 1,
      "name": "DHW pump",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Domestic-hot-water pump output, 0-100 %."
    },
    {
      "address": 112,
      "count": 1,
      "name": "General pump",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "General (system) pump output, 0-100 %."
    },
    {
      "address": 120,
      "count": 1,
      "name": "Supply temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Flow temperature, factor 10 in the document (value 650 = 65.0). Unit follows register 98 (0.1 °F when set to °F)."
    },
    {
      "address": 121,
      "count": 1,
      "name": "Return temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Return-water temperature, factor 10 in the document. Unit follows register 98."
    },
    {
      "address": 122,
      "count": 1,
      "name": "DHW temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Domestic-hot-water temperature, factor 10 in the document. Unit follows register 98."
    },
    {
      "address": 123,
      "count": 1,
      "name": "Flue gas temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Flue-gas temperature, factor 10 in the document. Unit follows register 98."
    },
    {
      "address": 124,
      "count": 1,
      "name": "System (heat exchanger) temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Heat-exchanger temperature, if available. Factor 10 in the document."
    },
    {
      "address": 125,
      "count": 1,
      "name": "Outside temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Outdoor temperature, if available. Factor 10 in the document."
    },
    {
      "address": 140,
      "count": 1,
      "name": "Firing rate (power output)",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Current firing rate, 0-100 %."
    },
    {
      "address": 142,
      "count": 1,
      "name": "Flame (ionisation) current",
      "data_type": "UInt16",
      "units": "µA",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Flame ionisation current, factor 10 in the document."
    },
    {
      "address": 200,
      "count": 1,
      "name": "Successful ignition counter",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Number of successful ignitions, 0-65536, resolution 16 in the document."
    },
    {
      "address": 201,
      "count": 1,
      "name": "Failed ignition counter",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Number of failed ignitions."
    },
    {
      "address": 202,
      "count": 1,
      "name": "Flame failure counter",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Number of flame failures."
    },
    {
      "address": 203,
      "count": 1,
      "name": "Burn hours CH",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Accumulated burner hours for central heating."
    },
    {
      "address": 204,
      "count": 1,
      "name": "Burn hours DHW",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Accumulated burner hours for domestic hot water."
    },
    {
      "address": 220,
      "count": 1,
      "name": "Lockout history 1 (oldest entry)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lockout error number of the first stored lockout, see the error table."
    },
    {
      "address": 221,
      "count": 1,
      "name": "Lockout history 2",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Second stored lockout error number."
    },
    {
      "address": 222,
      "count": 1,
      "name": "Lockout history 3",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Third stored lockout error number."
    },
    {
      "address": 223,
      "count": 1,
      "name": "Lockout history 4",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fourth stored lockout error number."
    },
    {
      "address": 224,
      "count": 1,
      "name": "Lockout history 5",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fifth stored lockout error number."
    },
    {
      "address": 225,
      "count": 1,
      "name": "Lockout history 6",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Sixth stored lockout error number."
    },
    {
      "address": 226,
      "count": 1,
      "name": "Lockout history 7",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Seventh stored lockout error number."
    },
    {
      "address": 227,
      "count": 1,
      "name": "Lockout history 8",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Eighth stored lockout error number."
    },
    {
      "address": 228,
      "count": 1,
      "name": "Lockout history 9",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Ninth stored lockout error number."
    },
    {
      "address": 229,
      "count": 1,
      "name": "Lockout history 10",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Tenth stored lockout error number."
    },
    {
      "address": 230,
      "count": 1,
      "name": "Lockout history 11",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Eleventh stored lockout error number."
    },
    {
      "address": 231,
      "count": 1,
      "name": "Lockout history 12",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Twelfth stored lockout error number."
    },
    {
      "address": 232,
      "count": 1,
      "name": "Lockout history 13",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Thirteenth stored lockout error number."
    },
    {
      "address": 233,
      "count": 1,
      "name": "Lockout history 14",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fourteenth stored lockout error number."
    },
    {
      "address": 234,
      "count": 1,
      "name": "Lockout history 15",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fifteenth stored lockout error number."
    },
    {
      "address": 235,
      "count": 1,
      "name": "Lockout history 16",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Sixteenth stored lockout error number."
    },
    {
      "address": 236,
      "count": 1,
      "name": "Time after first lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours between start-up and the first stored lockout."
    },
    {
      "address": 237,
      "count": 1,
      "name": "Time after second lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the second stored lockout."
    },
    {
      "address": 238,
      "count": 1,
      "name": "Time after third lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the third stored lockout."
    },
    {
      "address": 239,
      "count": 1,
      "name": "Time after fourth lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the fourth stored lockout."
    },
    {
      "address": 240,
      "count": 1,
      "name": "Time after fifth lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the fifth stored lockout."
    },
    {
      "address": 241,
      "count": 1,
      "name": "Time after sixth lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the sixth stored lockout."
    },
    {
      "address": 242,
      "count": 1,
      "name": "Time after seventh lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the seventh stored lockout."
    },
    {
      "address": 243,
      "count": 1,
      "name": "Time after eighth lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the eighth stored lockout."
    },
    {
      "address": 244,
      "count": 1,
      "name": "Time after ninth lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the ninth stored lockout."
    },
    {
      "address": 245,
      "count": 1,
      "name": "Time after tenth lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the tenth stored lockout."
    },
    {
      "address": 246,
      "count": 1,
      "name": "Time after eleventh lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the eleventh stored lockout."
    },
    {
      "address": 247,
      "count": 1,
      "name": "Time after twelfth lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the twelfth stored lockout."
    },
    {
      "address": 248,
      "count": 1,
      "name": "Time after thirteenth lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the thirteenth stored lockout."
    },
    {
      "address": 249,
      "count": 1,
      "name": "Time after fourteenth lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the fourteenth stored lockout."
    },
    {
      "address": 250,
      "count": 1,
      "name": "Time after fifteenth lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the fifteenth stored lockout."
    },
    {
      "address": 251,
      "count": 1,
      "name": "Time after sixteenth lockout",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hours recorded with the sixteenth stored lockout."
    },
    {
      "address": 500,
      "count": 1,
      "name": "CH mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Central-heating mode. Writing requires the write-enable bit in register 99."
    },
    {
      "address": 501,
      "count": 1,
      "name": "DHW mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Domestic-hot-water mode. Writing requires write enable (register 99)."
    },
    {
      "address": 502,
      "count": 1,
      "name": "CH set-point",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Central-heating set-point, factor 10 in the document. Unit follows register 98."
    },
    {
      "address": 503,
      "count": 1,
      "name": "DHW set-point",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Domestic-hot-water set-point, factor 10 in the document. Unit follows register 98."
    },
    {
      "address": 504,
      "count": 1,
      "name": "Reset curve boiler design",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Heating-curve boiler design temperature. Factor 10 in the document."
    },
    {
      "address": 505,
      "count": 1,
      "name": "Reset curve boiler mild weather",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Heating-curve boiler temperature at mild weather. Factor 10 in the document."
    },
    {
      "address": 506,
      "count": 1,
      "name": "Reset curve outdoor mild weather",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Heating-curve outdoor temperature at mild weather. Factor 10 in the document."
    },
    {
      "address": 507,
      "count": 1,
      "name": "Reset curve outdoor design",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Heating-curve outdoor design temperature. Factor 10 in the document."
    },
    {
      "address": 508,
      "count": 1,
      "name": "Warm weather shutdown",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Outdoor temperature above which heating stops. Factor 10 in the document."
    },
    {
      "address": 509,
      "count": 1,
      "name": "Reset curve boiler maximum",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Maximum boiler temperature on the heating curve. Factor 10 in the document."
    },
    {
      "address": 510,
      "count": 1,
      "name": "Reset curve boiler minimum",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Minimum boiler temperature on the heating curve. Factor 10 in the document."
    },
    {
      "address": 511,
      "count": 1,
      "name": "Night setback",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Night-setback value. Factor 10 in the document."
    }
  ],
  "combined_registers": [],
  "notes": "Source: Buderus (Bosch Thermotechnology) \"Modbus for Buderus SSB boilers - Installation and Service Instructions for Contractors\", document 6720818450 (2015/10) US, sections 3 (configuration), 4 (holding registers) and 5 (state/status/error tables), https://www.bosch-homecomfort.com/us/media/country_pool/service/technical_guides/6720818450_ssb_boiler_modbus_installation_instructions_en_10.2015_us_us.pdf. Factory serial settings from section 3: Modbus RTU, 9600 bps, 8 data bits, no parity, 2 stop bits, slave address 1 (address, baud rate and stop bits are configurable with 894PB or LabVision; 2 stop bits is the default). Addressing: the document prints decimal and hexadecimal addresses that agree (98 = 0x0062); it says a client whose numbering starts at 0 uses the printed address unchanged, so the seed is zero-based. Values are 16-bit; the document's data-type table gives factor 10 for temperatures, voltage, pressure and flame current, so those rows use scale 0.1. Readings follow the unit selection register 98 (°C/°F, bar/psi). Writing to holding registers requires the write-enable bit (bit 0 of register 99) and is only honoured within 4 s. Omitted on purpose: the blocking-error history (260-291) and the per-dependent-burner blocks (300-339) are not seeded; all 16 lockout codes (220-235) and their 16 time stamps (236-251) are. The document itself warns that the internal error history is not in chronological order."
}
