{
 "manufacturer": "Regin",
 "manufacturer_slug": "regin",
 "model": "Corrigo ventilation controller (ventilation application 3.6)",
 "model_slug": "corrigo",
 "short_model": "Corrigo",
 "aliases": [
  "Corrigo E",
  "Corrigo ventilation",
  "Corrigo E ventilation",
  "Corrigo AHU controller"
 ],
 "equipment_type": "Air handler controller",
 "applies_to": "Regin Corrigo controllers running the pre-programmed ventilation (air handling unit) application, version 3.6 or later; not the heating or Exigo applications.",
 "summary": "The Regin Corrigo is a pre-programmed air handling unit controller whose ventilation application is reachable over EXOline, Modbus and BACnet. As a Modbus slave it publishes temperatures, pressures, flows and humidity as input registers, setpoints and manual/auto modes as holding registers, and alarm and I/O states as discrete inputs. Every value is a single 16-bit register; real values are sent multiplied by 10, except air flow (factor 1) and time settings (factor 100).",
 "transport": [
  "RTU"
 ],
 "defaults": {
  "unit_id": 1,
  "baud": 9600,
  "parity": "None",
  "data_bits": 8,
  "stop_bits": 1,
  "tcp_port": null
 },
 "addressing": {
  "convention": "Modicon",
  "note": "The 3.6 list prints Modicon reference numbers (00001 coils, 10001 discrete inputs, 30001 input registers, 40001 holding registers), and every table starts at 1; the older 3.2 list prints the same points as bare numbers starting at 1 (e.g. 9 for 30009). We apply the standard Modicon rule (subtract the table base and 1), so Outdoor temperature 30001 is input register 0 on the wire. The manual never states the offset in words; the only worked example is a test-tool screenshot that reads AO1 (30054) by entering point address 54, which matches a tool that numbers points from 1. Confirm on site by reading the outdoor or supply temperature."
 },
 "default_word_order": null,
 "firmware": "Corrigo ventilation application 3.6",
 "source": {
  "title": "Corrigo ventilation - List of network variables for EXOline, Modbus and BACnet communication (from version 3.6)",
  "doc_number": "Revision 20",
  "revision_date": "2016-07",
  "url": "https://www.regincontrols.com/globalassets/pimmediafiles/documents/corrigo_ventilation_variables_for_exoline_modbus_and_bacnet_3.6_manu_en.pdf",
  "pages": "pp. 4-11 (signal types, scale factors, defaults, read example), 12 (coils), 13-33 (input registers), 34-59 (holding registers), 60-70 (input status)"
 },
 "notes": [
  "Scaling: the manual says Real (R) signals are multiplied by 10, time-setting signals by 100 and air flow signals by 1; Integer, Index and Logic signals are not scaled. Scale 0.1 is applied to every Real register here except the air flows.",
  "Signedness is not stated per register. Real and Integer values are listed as INT16 because temperatures and offsets can be negative; Index (enumeration) values are UINT16. A x10 value in INT16 cannot exceed 3276.7, so very high pressures or CO2 readings may not fit.",
  "Extract/exhaust naming is swapped inside the controller: 30009 (variable ExhaustAirTemp) is extract air from the room, and 30020 (variable ExtractAirTemp) is exhaust air leaving the unit. Names here follow the measured air, as the manual's own notes do.",
  "Enumerations are the Modbus values. The same points over BACnet start at 1 instead of 0 (e.g. run state Stopped is 0 on Modbus, 1 on BACnet).",
  "Left out: the per-alarm status registers (30071 onward). In the 3.6 list the value legend (0 Not used, 1 Normal, 2 Blocked, 3 Acknowledge) is printed in the rows of alarms 2-5, which hides those alarms' names, and the full legend only appears in the older 3.2 list. Use the alarm discrete inputs (10033 onward, 0 = no alarm, 1 = alarm) instead.",
  "Left out: fan running-hour counters (30004/30005) and accumulated fan energy (30275/30279), because a x10 16-bit value overflows quickly and the manual gives no rollover or energy unit.",
  "Left out: weekly schedules (40040-40263, HH.MM x100), holiday dates, PID tuning, alarm delays, I/O assignment indexes, expansion-unit I/O, the real-time clock and the slave-drive tables in chapter 7.",
  "Printing errors in the source: the UAI3 and DO3 assignment registers are printed as 3040 and 3066 instead of 30040 and 30066 (neither is included here).",
  "Transport: the manual describes RTU framing only. It names Modbus TCP just as one possible physical layer in a general paragraph, so TCP is not listed here.",
  "Terminology: the manual's introduction defines 'exhaust' and 'extract' the opposite way round from the register descriptions; the descriptions here follow the register rows and the 3.2 list, where point 9 is the extract (room return) air and point 20 the exhaust air."
 ],
 "registers": [
  {
   "table": "coil",
   "address": 2,
   "documented": "00003",
   "name": "Acknowledge all alarms",
   "description": "Write 1 to acknowledge every pending alarm.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "-",
    "1": "Acknowledge"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "coil",
   "address": 9,
   "documented": "00010",
   "name": "Filter alarm reset",
   "description": "Resets the filter service-alarm counter.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "-",
    "1": "Reset"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 0,
   "documented": "10001",
   "name": "Full speed time channel active",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 1,
   "documented": "10002",
   "name": "Reduced speed time channel active",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 7,
   "documented": "10008",
   "name": "Extended run, full speed",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 8,
   "documented": "10009",
   "name": "Extended run, half speed",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 13,
   "documented": "10014",
   "name": "Digital input DI1",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 14,
   "documented": "10015",
   "name": "Digital input DI2",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 15,
   "documented": "10016",
   "name": "Digital input DI3",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 16,
   "documented": "10017",
   "name": "Digital input DI4",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 17,
   "documented": "10018",
   "name": "Digital input DI5",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 18,
   "documented": "10019",
   "name": "Digital input DI6",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 19,
   "documented": "10020",
   "name": "Digital input DI7",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 20,
   "documented": "10021",
   "name": "Digital input DI8",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 25,
   "documented": "10026",
   "name": "Digital output DO1",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 26,
   "documented": "10027",
   "name": "Digital output DO2",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 27,
   "documented": "10028",
   "name": "Digital output DO3",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 28,
   "documented": "10029",
   "name": "Digital output DO4",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 29,
   "documented": "10030",
   "name": "Digital output DO5",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 30,
   "documented": "10031",
   "name": "Digital output DO6",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 31,
   "documented": "10032",
   "name": "Digital output DO7",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 32,
   "documented": "10033",
   "name": "Alarm 1: Supply fan malfunction",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 33,
   "documented": "10034",
   "name": "Alarm 2: Extract fan malfunction",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 34,
   "documented": "10035",
   "name": "Alarm 3: Heating pump P1 malfunction",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 35,
   "documented": "10036",
   "name": "Alarm 4: Cooling pump P1 malfunction",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 36,
   "documented": "10037",
   "name": "Alarm 5: Exchanger pump P1 malfunction",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 37,
   "documented": "10038",
   "name": "Alarm 6: Filter guard 1",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 38,
   "documented": "10039",
   "name": "Alarm 7: Flow guard",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 39,
   "documented": "10040",
   "name": "Alarm 8: External frost guard",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 41,
   "documented": "10042",
   "name": "Alarm 10: Fire alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 43,
   "documented": "10044",
   "name": "Alarm 12: External alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 46,
   "documented": "10047",
   "name": "Alarm 15: High supply air temperature",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 47,
   "documented": "10048",
   "name": "Alarm 16: Low supply air temperature",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 54,
   "documented": "10055",
   "name": "Alarm 23: Electric heater overheated",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 55,
   "documented": "10056",
   "name": "Alarm 24: Frost risk",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 56,
   "documented": "10057",
   "name": "Alarm 25: Low frost guard temperature",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 58,
   "documented": "10059",
   "name": "Alarm 27: Outdoor sensor error",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 60,
   "documented": "10061",
   "name": "Alarm 29: Exchanger rotation guard",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 61,
   "documented": "10062",
   "name": "Alarm 30: Fire damper malfunction",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 79,
   "documented": "10080",
   "name": "Alarm 48: Internal battery error",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 80,
   "documented": "10081",
   "name": "Supply fan start, full speed",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 81,
   "documented": "10082",
   "name": "Extract fan start, full speed",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 82,
   "documented": "10083",
   "name": "Supply fan start, half speed",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 83,
   "documented": "10084",
   "name": "Extract fan start, half speed",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 84,
   "documented": "10085",
   "name": "Heating pump start",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 86,
   "documented": "10087",
   "name": "Cooling pump start",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 183,
   "documented": "10184",
   "name": "Sum alarm",
   "description": "Set while any A or B alarm is present.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 184,
   "documented": "10185",
   "name": "A-alarm",
   "description": "Set while any A-class alarm is present.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "discrete_input",
   "address": 185,
   "documented": "10186",
   "name": "B-alarm",
   "description": "Set while any B- or C-class alarm is present.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm",
    "1": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 0,
   "documented": "30001",
   "name": "Outdoor temperature",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 1,
   "documented": "30002",
   "name": "Heat exchanger efficiency",
   "description": "Calculated exchanger efficiency.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 2,
   "documented": "30003",
   "name": "Unit run state",
   "description": "Current operating state of the air handler.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Stopped",
    "1": "Starting up",
    "2": "Starting reduced speed",
    "3": "Starting full speed",
    "4": "Starting normal run",
    "5": "Normal run",
    "6": "Support control heating",
    "7": "Support control cooling",
    "8": "CO2 run",
    "9": "Night cooling",
    "10": "Full speed stop",
    "11": "Stopping fan"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 5,
   "documented": "30006",
   "name": "Extended running time",
   "description": "Minutes of extended (override) operation.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "min",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 6,
   "documented": "30007",
   "name": "Supply air temperature",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 7,
   "documented": "30008",
   "name": "Calculated supply air setpoint",
   "description": "Active supply setpoint under outdoor compensation or cascade control.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 8,
   "documented": "30009",
   "name": "Extract air temperature",
   "description": "Air drawn from the room; variable is named ExhaustAirTemp in the list.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 9,
   "documented": "30010",
   "name": "Room temperature 1",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 10,
   "documented": "30011",
   "name": "Room temperature 2",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 12,
   "documented": "30013",
   "name": "Supply fan duct pressure",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "Pa",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 13,
   "documented": "30014",
   "name": "Extract fan duct pressure",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "Pa",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 14,
   "documented": "30015",
   "name": "Supply air flow",
   "description": "Air flow signals are not scaled (factor 1).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "m3/h",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 15,
   "documented": "30016",
   "name": "Extract air flow",
   "description": "Air flow signals are not scaled (factor 1).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "m3/h",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 16,
   "documented": "30017",
   "name": "CO2",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "ppm",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 18,
   "documented": "30019",
   "name": "Frost protection temperature",
   "description": "Water heating coil frost protection sensor.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 19,
   "documented": "30020",
   "name": "Exhaust air temperature",
   "description": "Air leaving the unit; variable is named ExtractAirTemp in the list.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 20,
   "documented": "30021",
   "name": "De-icing temperature",
   "description": "Heat exchanger de-icing sensor.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 22,
   "documented": "30023",
   "name": "Room humidity",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "%RH",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 23,
   "documented": "30024",
   "name": "Duct humidity",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "%RH",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 118,
   "documented": "30119",
   "name": "Heating control signal Y1",
   "description": "Analogue output to the heating valve or heater.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 119,
   "documented": "30120",
   "name": "Exchanger control signal Y2",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 120,
   "documented": "30121",
   "name": "Cooling control signal Y3",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 121,
   "documented": "30122",
   "name": "Supply fan control signal",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 122,
   "documented": "30123",
   "name": "Extract fan control signal",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 123,
   "documented": "30124",
   "name": "Humidity control signal",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 125,
   "documented": "30126",
   "name": "Supply temperature controller output",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 127,
   "documented": "30128",
   "name": "Supply fan pressure/flow controller output",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 128,
   "documented": "30129",
   "name": "Extract fan pressure/flow controller output",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 134,
   "documented": "30135",
   "name": "Room temperature (sensors 1 and 2)",
   "description": "Room value derived from room sensors 1 and 2.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 154,
   "documented": "30155",
   "name": "Outdoor humidity",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "%RH",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 271,
   "documented": "30272",
   "name": "Supply fan motor speed",
   "description": "From a Modbus-connected supply fan drive.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 272,
   "documented": "30273",
   "name": "Supply fan motor current",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 273,
   "documented": "30274",
   "name": "Supply fan motor power",
   "description": "Percent of nominal power.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 275,
   "documented": "30276",
   "name": "Extract fan motor speed",
   "description": "From a Modbus-connected extract fan drive.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 276,
   "documented": "30277",
   "name": "Extract fan motor current",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 277,
   "documented": "30278",
   "name": "Extract fan motor power",
   "description": "Percent of nominal power.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 283,
   "documented": "30284",
   "name": "Unit run mode",
   "description": "Summary of the fan speed state.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Off",
    "1": "Reduced speed",
    "2": "Normal speed",
    "3": "Stopped by alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 285,
   "documented": "30286",
   "name": "Intake air temperature",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 297,
   "documented": "30298",
   "name": "Specific fan power (SFP)",
   "description": "Actual SFP.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "kW/(m3/s)",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 300,
   "documented": "30301",
   "name": "Filter 1 pressure drop",
   "description": "Analogue filter guard 1.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "Pa",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 301,
   "documented": "30302",
   "name": "Filter 2 pressure drop",
   "description": "Analogue filter guard 2.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "Pa",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 330,
   "documented": "30331",
   "name": "Total calculated power",
   "description": "Calculated total power consumption.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "kW",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 0,
   "documented": "40001",
   "name": "Supply air setpoint",
   "description": "Constant supply air temperature control. Default 18 °C.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 17,
   "documented": "40018",
   "name": "Extract air setpoint",
   "description": "Extract air temperature control. Default 21 °C.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 18,
   "documented": "40019",
   "name": "Room setpoint",
   "description": "Room (cascade) control. Default 21 °C.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23,
   "documented": "40024",
   "name": "Supply fan pressure setpoint, full speed",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "Pa",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 24,
   "documented": "40025",
   "name": "Supply fan pressure setpoint, reduced speed",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "Pa",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 25,
   "documented": "40026",
   "name": "Extract fan pressure setpoint, full speed",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "Pa",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 26,
   "documented": "40027",
   "name": "Extract fan pressure setpoint, reduced speed",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "Pa",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 27,
   "documented": "40028",
   "name": "Supply air flow setpoint, full speed",
   "description": "Air flow values use factor 1.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "m3/h",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 28,
   "documented": "40029",
   "name": "Supply air flow setpoint, reduced speed",
   "description": "Air flow values use factor 1.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "m3/h",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 29,
   "documented": "40030",
   "name": "Extract air flow setpoint, full speed",
   "description": "Air flow values use factor 1.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "m3/h",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 30,
   "documented": "40031",
   "name": "Extract air flow setpoint, reduced speed",
   "description": "Air flow values use factor 1.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "m3/h",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 31,
   "documented": "40032",
   "name": "CO2 setpoint",
   "description": "Default 1000 ppm.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "ppm",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36,
   "documented": "40037",
   "name": "Room humidity setpoint",
   "description": "Default 50 %RH.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "%RH",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 332,
   "documented": "40333",
   "name": "Supply air high alarm limit",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 333,
   "documented": "40334",
   "name": "Supply air low alarm limit",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 338,
   "documented": "40339",
   "name": "Frost protection alarm limit",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 367,
   "documented": "40368",
   "name": "Air handler operating mode",
   "description": "Main manual/auto command for the unit. Default 3 (Auto).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Manual off",
    "1": "Manual reduced speed",
    "2": "Manual normal speed",
    "3": "Auto"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 368,
   "documented": "40369",
   "name": "Supply temperature controller mode",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Manual off",
    "1": "Manual on",
    "2": "Auto"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 369,
   "documented": "40370",
   "name": "Supply temperature controller manual output",
   "description": "Used when the controller mode is Manual on.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "%",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 370,
   "documented": "40371",
   "name": "Supply fan mode",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Off",
    "1": "Manual half speed",
    "2": "Manual full speed",
    "3": "Auto"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 371,
   "documented": "40372",
   "name": "Extract fan mode",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Off",
    "1": "Manual half speed",
    "2": "Manual full speed",
    "3": "Auto"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 376,
   "documented": "40377",
   "name": "Heating mode",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Off",
    "1": "Manual",
    "2": "Auto"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 377,
   "documented": "40378",
   "name": "Heating manual output",
   "description": "Heating controller output used in Manual mode.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 378,
   "documented": "40379",
   "name": "Exchanger mode",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Off",
    "1": "Manual",
    "2": "Auto"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 379,
   "documented": "40380",
   "name": "Exchanger manual output",
   "description": "Exchanger controller output used in Manual mode.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 380,
   "documented": "40381",
   "name": "Cooling mode",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Off",
    "1": "Manual",
    "2": "Auto"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 381,
   "documented": "40382",
   "name": "Cooling manual output",
   "description": "Cooling controller output used in Manual mode.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 384,
   "documented": "40385",
   "name": "Heating pump P1 mode",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Manual off",
    "1": "Manual on",
    "2": "Auto"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 387,
   "documented": "40388",
   "name": "Fire damper mode",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Close",
    "1": "Open",
    "2": "Auto"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 391,
   "documented": "40392",
   "name": "Outdoor temperature (writable)",
   "description": "BMS may write it when no outdoor sensor is wired.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 392,
   "documented": "40393",
   "name": "Full speed time channel mode",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Manual off",
    "1": "Manual on",
    "2": "Forced off",
    "3": "Forced on",
    "4": "Auto"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 393,
   "documented": "40394",
   "name": "Reduced speed time channel mode",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Manual off",
    "1": "Manual on",
    "2": "Forced off",
    "3": "Forced on",
    "4": "Auto"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 399,
   "documented": "40400",
   "name": "Acknowledge alarm number",
   "description": "Write an alarm number to acknowledge that alarm.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 400,
   "documented": "40401",
   "name": "Block alarm number",
   "description": "Write an alarm number to block that alarm.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 401,
   "documented": "40402",
   "name": "Unblock alarm number",
   "description": "Write an alarm number to unblock that alarm.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 403,
   "documented": "40404",
   "name": "Supply setpoint max (cascade)",
   "description": "Upper supply setpoint limit in cascade control.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 404,
   "documented": "40405",
   "name": "Supply setpoint min (cascade)",
   "description": "Lower supply setpoint limit in cascade control.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 450,
   "documented": "40451",
   "name": "External control",
   "description": "Default 2 (no external control).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Extended run full speed",
    "1": "External stop",
    "2": "No external control",
    "3": "External stop with support control"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 473,
   "documented": "40474",
   "name": "Temperature control mode",
   "description": "Configuration: which temperature the unit controls.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Constant supply air",
    "1": "Outdoor compensated supply air",
    "2": "Cascade room temperature",
    "3": "Extract air temperature",
    "4": "Outdoor dependent supply or room",
    "5": "Outdoor dependent supply or extract",
    "6": "Cascade outdoor compensated room",
    "7": "Cascade outdoor compensated extract"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 474,
   "documented": "40475",
   "name": "Fan control type",
   "description": "Configuration.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "1-speed",
    "1": "2-speed",
    "2": "Frequency control, pressure",
    "3": "Frequency control, air flow",
    "4": "Frequency control, manual",
    "5": "Direct frequency control",
    "6": "Frequency control, slave EAF",
    "7": "Frequency control, slave EAF by air flow",
    "8": "Frequency control, slave SAF",
    "9": "Frequency control, slave SAF by air flow"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 475,
   "documented": "40476",
   "name": "Heating type",
   "description": "Configuration.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Water",
    "1": "Electric",
    "2": "Not connected",
    "3": "Water and electric"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 476,
   "documented": "40477",
   "name": "Cooling type",
   "description": "Configuration.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Water",
    "1": "DX",
    "2": "Not connected",
    "3": "DX with exchanger control"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 477,
   "documented": "40478",
   "name": "Heat exchanger type",
   "description": "Configuration.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Damper",
    "1": "Rotary exchanger",
    "2": "Plate exchanger",
    "3": "Liquid exchanger",
    "4": "Not connected"
   },
   "bits": null,
   "offset": 0
  }
 ],
 "integration": {
  "summary": "Connect the Corrigo as a Modbus slave, read input registers 30001-30024 for temperatures and pressures and discrete inputs 10184-10186 for sum alarms, and command the unit through holding register 40368 (Manual off / reduced / normal / Auto) plus the setpoints at 40001-40037.",
  "minimum_registers": [
   {
    "table": "holding_register",
    "address": 367,
    "why": "Air handler operating mode (manual/auto command)"
   },
   {
    "table": "holding_register",
    "address": 0,
    "why": "Supply air setpoint"
   },
   {
    "table": "input_register",
    "address": 2,
    "why": "Unit run state"
   },
   {
    "table": "input_register",
    "address": 6,
    "why": "Supply air temperature"
   },
   {
    "table": "input_register",
    "address": 0,
    "why": "Outdoor temperature"
   },
   {
    "table": "input_register",
    "address": 8,
    "why": "Extract air temperature"
   },
   {
    "table": "discrete_input",
    "address": 183,
    "why": "Sum alarm"
   },
   {
    "table": "coil",
    "address": 2,
    "why": "Acknowledge all alarms"
   }
  ],
  "enable": "Set the Modbus slave address and line settings on the Corrigo display or with E tool. Defaults are slave address 1, 9600 baud, 8 data bits, no parity, 1 stop bit, RTU. Only signals that have a default value in the list can be written.",
  "watchdog": null,
  "quirks": [
   "Every value is one 16-bit register; Real values are x10 (air flow x1, time settings x100).",
   "At most 47 registers can be read in one request.",
   "Leave at least 3.5 character times (about 4 ms at 9600 bps) between messages.",
   "Enumerations start at 0 on Modbus but at 1 on BACnet for the same point.",
   "Extract and exhaust temperature variable names are swapped relative to the air they measure."
  ],
  "setup": [
   "Supported function codes: 1, 2, 3, 4, 5, 6, 15 and 16.",
   "RTU framing only (word length 8); the manual lists baud rates from 150 to 9600.",
   "BACnet/IP and MS/TP are separate options, disabled by default; they are not needed for Modbus."
  ],
  "gotchas": [
   "To override an output, first set its mode register to Manual, then write the matching manual-output register.",
   "Configuration registers 40474-40478 (control mode, fan, heating, cooling and exchanger type) change how the whole unit runs; treat them as read-only outside commissioning.",
   "Air flow setpoints and readings are m3/h with no scaling, unlike every other Real value."
  ]
 },
 "page": "https://easymodbus.com/modbus-register-maps/regin/corrigo",
 "address_note": "address = 0-based Modbus wire (PDU) address; documented = as printed in the source.",
 "note": "Re-typed from the manufacturer's public documentation (see source) and verified against it. Registers vary by firmware and options; verify against the live device before writing."
}
