{
  "spec_version": 1,
  "slug": "swegon-gold",
  "manufacturer": "Swegon",
  "model": "GOLD RX / PX / CX / SD, generation E/F",
  "category": "HVAC controller",
  "supplier_url": "https://www.swegon.com/products/air-handling-units/gold/",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "one_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [
    {
      "address": 1,
      "count": 1,
      "name": "Alarm reset",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Resets all active alarms. Coil 0x0001."
    }
  ],
  "discrete_inputs": [
    {
      "address": 1,
      "count": 1,
      "name": "Operation active",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input status 1x0001."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Damper operation active",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input status 1x0002."
    },
    {
      "address": 3,
      "count": 1,
      "name": "Low speed operation active",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input status 1x0003."
    },
    {
      "address": 4,
      "count": 1,
      "name": "High speed operation active",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input status 1x0004."
    },
    {
      "address": 13,
      "count": 1,
      "name": "A-alarm active",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input status 1x0013. A-alarms stop the unit."
    },
    {
      "address": 14,
      "count": 1,
      "name": "B-alarm active",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input status 1x0014. B-alarms are warnings."
    },
    {
      "address": 27,
      "count": 1,
      "name": "CHX-1 pump output",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input status 1x0027, coil heat exchanger pump."
    },
    {
      "address": 38,
      "count": 1,
      "name": "Re-heat output",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input status 1x0038."
    },
    {
      "address": 43,
      "count": 1,
      "name": "Cool output 1",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input status 1x0043."
    },
    {
      "address": 44,
      "count": 1,
      "name": "Cool output 2",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input status 1x0044."
    }
  ],
  "input_registers": [
    {
      "address": 1,
      "count": 1,
      "name": "Component name",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0001, coded component name."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Application id / AHU type",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0002: 25 = IQlogic, 10 = GOLD RX, 11 = GOLD PX, 12 = GOLD CX, 13-17 = the GOLD SD variants."
    },
    {
      "address": 4,
      "count": 1,
      "name": "SA air flow",
      "data_type": "UInt16",
      "units": "l/s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0004, present supply air flow."
    },
    {
      "address": 6,
      "count": 1,
      "name": "EA air flow",
      "data_type": "UInt16",
      "units": "l/s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0006, present extract air flow."
    },
    {
      "address": 8,
      "count": 1,
      "name": "SA duct pressure",
      "data_type": "UInt16",
      "units": "Pa",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0008, present supply air duct pressure."
    },
    {
      "address": 10,
      "count": 1,
      "name": "EA duct pressure",
      "data_type": "UInt16",
      "units": "Pa",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0010, present extract air duct pressure."
    },
    {
      "address": 27,
      "count": 1,
      "name": "SA AHU filter pressure level",
      "data_type": "UInt16",
      "units": "Pa",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0027, present supply air filter pressure drop."
    },
    {
      "address": 29,
      "count": 1,
      "name": "EA AHU filter pressure level",
      "data_type": "UInt16",
      "units": "Pa",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0029, present extract air filter pressure drop."
    },
    {
      "address": 37,
      "count": 1,
      "name": "SA fan level",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0037."
    },
    {
      "address": 38,
      "count": 1,
      "name": "EA fan level",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0038."
    },
    {
      "address": 64,
      "count": 1,
      "name": "SA temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0064, present supply air temperature."
    },
    {
      "address": 66,
      "count": 1,
      "name": "EA temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0066, present extract air temperature in the unit (GOLD RX)."
    },
    {
      "address": 73,
      "count": 1,
      "name": "Outdoor temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0073, present outdoor air temperature."
    },
    {
      "address": 91,
      "count": 1,
      "name": "Heat exchanger regulator level",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0091, present level of heat recovery."
    },
    {
      "address": 94,
      "count": 1,
      "name": "Reheat regulator level",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0094, present level of reheat."
    },
    {
      "address": 101,
      "count": 1,
      "name": "Cool regulator level",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0101, present level of cooling."
    },
    {
      "address": 105,
      "count": 1,
      "name": "RHX operation level",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0105, speed of the rotary heat exchanger."
    },
    {
      "address": 592,
      "count": 1,
      "name": "Operation level",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0592."
    },
    {
      "address": 604,
      "count": 1,
      "name": "Triggered alarm #1",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Input register 3x0604, number of the first active alarm."
    }
  ],
  "holding_registers": [
    {
      "address": 3,
      "count": 1,
      "name": "SA low speed air flow set point",
      "data_type": "UInt16",
      "units": "l/s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Holding register 4x0003."
    },
    {
      "address": 5,
      "count": 1,
      "name": "SA high speed air flow set point",
      "data_type": "UInt16",
      "units": "l/s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Holding register 4x0005."
    },
    {
      "address": 4,
      "count": 1,
      "name": "EA low speed air flow set point",
      "data_type": "UInt16",
      "units": "l/s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Holding register 4x0004."
    },
    {
      "address": 6,
      "count": 1,
      "name": "EA high speed air flow set point",
      "data_type": "UInt16",
      "units": "l/s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Holding register 4x0006."
    },
    {
      "address": 19,
      "count": 1,
      "name": "SA low speed pressure set point",
      "data_type": "UInt16",
      "units": "Pa",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Holding register 4x0019."
    },
    {
      "address": 21,
      "count": 1,
      "name": "SA high speed pressure set point",
      "data_type": "UInt16",
      "units": "Pa",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Holding register 4x0021."
    },
    {
      "address": 20,
      "count": 1,
      "name": "EA low speed pressure set point",
      "data_type": "UInt16",
      "units": "Pa",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Holding register 4x0020."
    },
    {
      "address": 22,
      "count": 1,
      "name": "EA high speed pressure set point",
      "data_type": "UInt16",
      "units": "Pa",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Holding register 4x0022."
    },
    {
      "address": 118,
      "count": 1,
      "name": "ERS 1 differential",
      "data_type": "Int16",
      "units": "K",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "Holding register 4x0118, temperature differential for the ERS 1 extra regulation sequence."
    },
    {
      "address": 132,
      "count": 1,
      "name": "SA temperature set point",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "Holding register 4x0132."
    },
    {
      "address": 135,
      "count": 1,
      "name": "EA / room temperature set point",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "Holding register 4x0135."
    },
    {
      "address": 136,
      "count": 1,
      "name": "SA min temperature set point",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "Holding register 4x0136."
    },
    {
      "address": 137,
      "count": 1,
      "name": "SA max temperature set point",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "Holding register 4x0137."
    },
    {
      "address": 793,
      "count": 1,
      "name": "Communication operation level",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Holding register 4x0793."
    }
  ],
  "combined_registers": [],
  "notes": "Source: Swegon, \"Modbus RTU/TCP - GOLD RX/PX/CX/SD, generation E/F\", document GOLD_E_F_Modbus_260227, applicable to program version 1.09 and newer. The register numbers in that document are decimal, not hexadecimal: the alarm series 1x0659-1x0668 are 'Active alarm 159-168' and 1x2095-1x2100 are 'Active alarm group 95-100', so 3x0027 is register 27 and 3x0105 is register 105 (the 'x' only marks the area). The GOLD air handling unit is the Modbus server and maps its objects onto the four standard areas: 0x = coils (read/write bits), 1x = input status (read-only bits), 3x = input registers (read-only 16-bit), 4x = holding registers (read/write 16-bit). The vendor list numbers objects from 1 in every area (0x0001, 1x0001, 3x0001, 4x0001), i.e. it publishes register numbers rather than wire addresses, so the numbers are declared one_based and the client subtracts one; if a reading looks like it belongs to the neighbouring object, compare it against the GOLD hand terminal before trusting the map. The coil and input-status rows are single bits, entered as UInt16 because the format only has 16-bit register types. Function codes 01, 02, 03, 04, 05, 06, 08 (loopback only), 15 and 16 are supported. Scaling is read off the min/max columns of the vendor list, which are given with two decimals for temperatures and regulator levels (raw x0.01), one decimal for duct and filter pressures (raw x0.1) and whole numbers for air flows in l/s. Which objects exist depends on the installed GOLD type (RX with rotary, PX with plate, CX with coil heat exchanger, SD variants) and on the fitted options; the register list marks each row with the option key that provides it. Only a representative selection of the several hundred objects is included."
}
