{
  "spec_version": 1,
  "slug": "komfovent-c6",
  "manufacturer": "Komfovent",
  "model": "C6 / C6M controller for Komfovent air handling units",
  "category": "HVAC controller",
  "supplier_url": "https://www.komfovent.com/en/downloads/MODBUS_connection_C6_EN.pdf",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "one_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 1,
      "count": 1,
      "name": "ON/OFF status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Auto mode control",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = scheduling, 1 = air quality."
    },
    {
      "address": 3,
      "count": 1,
      "name": "ECO mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4,
      "count": 1,
      "name": "AUTO mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 5,
      "count": 1,
      "name": "Current mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Read: 0 = standby, 1 = away, 2 = normal, 3 = intensive, 4 = boost, 5 = kitchen, 6 = fireplace, 7 = override, 8 = holiday, 9 = air quality, 10 = off. Write: away = 1, normal = 2, intensive = 3, boost = 4."
    },
    {
      "address": 6,
      "count": 1,
      "name": "Scheduler operation mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = stay at home, 1 = working week, 2 = office, 3 = custom."
    },
    {
      "address": 7,
      "count": 1,
      "name": "Next mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = standby, 1 = away, 2 = normal, 3 = intensive, 4 = boost, 5 = kitchen, 6 = fireplace, 7 = override, 8 = holiday."
    },
    {
      "address": 8,
      "count": 1,
      "name": "Next mode start time",
      "data_type": "UInt16",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Minutes from midnight, 0..1439."
    },
    {
      "address": 9,
      "count": 1,
      "name": "Next mode weekday",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = none, 1 = Monday .. 7 = Sunday."
    },
    {
      "address": 10,
      "count": 1,
      "name": "Mode mask before the next change",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit mask: standby = bit 0, away = bit 1, normal = bit 2, intensive = bit 3, boost = bit 4."
    },
    {
      "address": 11,
      "count": 1,
      "name": "Temperature control mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = supply, 1 = extract, 2 = balance, 3 = room."
    },
    {
      "address": 12,
      "count": 1,
      "name": "Flow control mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = CAV, 1 = VAV, 2 = DCV, 3 = off."
    },
    {
      "address": 13,
      "count": 2,
      "name": "Maximum supply flow",
      "data_type": "UInt32",
      "units": "m³/h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Maximum supply airflow of the unit."
    },
    {
      "address": 15,
      "count": 2,
      "name": "Maximum extract flow",
      "data_type": "UInt32",
      "units": "m³/h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Maximum extract airflow of the unit."
    },
    {
      "address": 17,
      "count": 1,
      "name": "Max supply pressure",
      "data_type": "UInt16",
      "units": "Pa",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Maximum duct pressure setpoint of the supply fan."
    },
    {
      "address": 18,
      "count": 1,
      "name": "Max extract pressure",
      "data_type": "UInt16",
      "units": "Pa",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Maximum duct pressure setpoint of the extract fan."
    },
    {
      "address": 39,
      "count": 1,
      "name": "Room sensor",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = panel temperature (1), 1 = panel temperature (2)."
    },
    {
      "address": 200,
      "count": 1,
      "name": "Minimum supply air temperature",
      "data_type": "UInt16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Lower limit of the supply air temperature control (x10 °C)."
    },
    {
      "address": 201,
      "count": 1,
      "name": "Maximum supply air temperature",
      "data_type": "UInt16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Upper limit of the supply air temperature control (x10 °C)."
    },
    {
      "address": 203,
      "count": 1,
      "name": "Heating enable denied",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = heating is not allowed."
    },
    {
      "address": 204,
      "count": 1,
      "name": "Cooling enable denied",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = cooling is not allowed."
    },
    {
      "address": 206,
      "count": 1,
      "name": "Temperature setpoint",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Supply air temperature setpoint (x10 °C, e.g. 220 = 22.0 °C)."
    },
    {
      "address": 207,
      "count": 1,
      "name": "Air quality setpoint",
      "data_type": "UInt16",
      "units": "ppm",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "CO2 setpoint in ppm."
    },
    {
      "address": 208,
      "count": 1,
      "name": "Humidity setpoint",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Relative humidity setpoint, 0..100 %."
    },
    {
      "address": 211,
      "count": 1,
      "name": "Air quality heating",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 212,
      "count": 1,
      "name": "Air quality check period",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1..24 hours."
    },
    {
      "address": 213,
      "count": 1,
      "name": "Air quality sensor type B8",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = none, 1 = VOC, 2 = CO2, 3 = RH."
    },
    {
      "address": 214,
      "count": 1,
      "name": "Air quality sensor type B9",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = none, 1 = VOC, 2 = CO2, 3 = RH."
    },
    {
      "address": 217,
      "count": 1,
      "name": "Heat recovery control",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = none, 1 = maximum, 2 = not stop."
    },
    {
      "address": 901,
      "count": 1,
      "name": "Heating/cooling configuration",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit mask: electric heater = bit 0, water cooler/heater = bit 1, DX unit = bit 2."
    },
    {
      "address": 902,
      "count": 1,
      "name": "Supply temperature (actual)",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Supply air temperature (x10 °C)."
    },
    {
      "address": 903,
      "count": 1,
      "name": "Extract temperature (actual)",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Extract air temperature (x10 °C)."
    },
    {
      "address": 904,
      "count": 1,
      "name": "Outdoor temperature (actual)",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Outdoor air temperature (x10 °C)."
    },
    {
      "address": 905,
      "count": 1,
      "name": "Water temperature (actual)",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Return water temperature of the water heater/cooler (x10 °C)."
    },
    {
      "address": 906,
      "count": 2,
      "name": "Current supply flow",
      "data_type": "UInt32",
      "units": "m³/h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Supply airflow measured by the unit."
    },
    {
      "address": 908,
      "count": 2,
      "name": "Current extract flow",
      "data_type": "UInt32",
      "units": "m³/h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Extract airflow measured by the unit."
    },
    {
      "address": 910,
      "count": 1,
      "name": "Current supply fan intensity",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Supply fan output (x10 %)."
    },
    {
      "address": 911,
      "count": 1,
      "name": "Current extract fan intensity",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Extract fan output (x10 %)."
    },
    {
      "address": 912,
      "count": 1,
      "name": "Heat exchanger level",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Rotary/plate exchanger output (x10 %)."
    },
    {
      "address": 913,
      "count": 1,
      "name": "Electric heater level",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Electric heater output (x10 %)."
    },
    {
      "address": 914,
      "count": 1,
      "name": "Water heater level",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Water heater output (x10 %)."
    },
    {
      "address": 915,
      "count": 1,
      "name": "Water cooler level",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Water cooler output (x10 %)."
    },
    {
      "address": 916,
      "count": 1,
      "name": "DX unit level",
      "data_type": "Int16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "DX (direct expansion) unit output (x10 %)."
    },
    {
      "address": 917,
      "count": 1,
      "name": "Filters impurity",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Filter contamination level in percent."
    },
    {
      "address": 918,
      "count": 1,
      "name": "Air dampers",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Damper position in percent."
    },
    {
      "address": 919,
      "count": 1,
      "name": "Supply pressure",
      "data_type": "UInt16",
      "units": "Pa",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Measured supply duct pressure."
    },
    {
      "address": 920,
      "count": 1,
      "name": "Extract pressure",
      "data_type": "UInt16",
      "units": "Pa",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Measured extract duct pressure."
    },
    {
      "address": 921,
      "count": 1,
      "name": "Power consumption",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Electrical power drawn by the air handling unit."
    },
    {
      "address": 922,
      "count": 1,
      "name": "Heater power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Power drawn by the heater."
    },
    {
      "address": 923,
      "count": 1,
      "name": "Heat exchanger recovery",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Heat recovered by the exchanger."
    },
    {
      "address": 924,
      "count": 1,
      "name": "Heat exchanger efficiency",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Recovery efficiency of the heat exchanger."
    },
    {
      "address": 925,
      "count": 1,
      "name": "Energy saving",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Energy saving compared with a reference solution."
    },
    {
      "address": 926,
      "count": 1,
      "name": "SPI",
      "data_type": "UInt16",
      "units": "W/(m³/h)",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Specific power input of the unit."
    },
    {
      "address": 927,
      "count": 2,
      "name": "AHU consumption, day",
      "data_type": "UInt32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Electrical energy used by the unit today."
    },
    {
      "address": 929,
      "count": 2,
      "name": "AHU consumption, month",
      "data_type": "UInt32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Electrical energy used by the unit this month."
    },
    {
      "address": 931,
      "count": 2,
      "name": "AHU consumption, total",
      "data_type": "UInt32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Electrical energy used by the unit since commissioning."
    },
    {
      "address": 939,
      "count": 2,
      "name": "Recovered energy, day",
      "data_type": "UInt32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Heat recovered today."
    },
    {
      "address": 941,
      "count": 2,
      "name": "Recovered energy, month",
      "data_type": "UInt32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Heat recovered this month."
    },
    {
      "address": 943,
      "count": 2,
      "name": "Recovered energy, total",
      "data_type": "UInt32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Heat recovered since commissioning."
    },
    {
      "address": 952,
      "count": 1,
      "name": "Air quality sensor 1 (B8)",
      "data_type": "UInt16",
      "units": "ppm",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "CO2 in ppm or RH in percent, depending on the sensor type set in register 213."
    },
    {
      "address": 953,
      "count": 1,
      "name": "Air quality sensor 2 (B9)",
      "data_type": "UInt16",
      "units": "ppm",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "CO2 in ppm or RH in percent, depending on the sensor type set in register 214."
    },
    {
      "address": 961,
      "count": 1,
      "name": "Exhaust temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Exhaust air temperature (x10 °C)."
    },
    {
      "address": 962,
      "count": 1,
      "name": "Extract humidity",
      "data_type": "Int16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Relative humidity of the extract air; -32768 = humidity sensor not configured."
    },
    {
      "address": 1000,
      "count": 2,
      "name": "Firmware version",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Packed version: 1st number 8 bits << 24, 2nd 8 bits << 16, 3rd 8 bits << 12, 4th 12 bits (e.g. 18886660 = 1.2.3.4)."
    },
    {
      "address": 1050,
      "count": 1,
      "name": "Reset settings",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Reset to the stored values: away = 1, normal = 2, intensive = 3, boost = 4, holidays = 5, override = 6, kitchen = 7."
    }
  ],
  "combined_registers": [],
  "notes": "Source: UAB Komfovent 'Description of C6 / C6M controller Modbus', document M-C6 / C6M_26-07, compatible with C6/C6M firmware X.X.X.18 and newer: section 3 'Communication' (Modbus TCP on the controller's own Ethernet port, default address 192.168.0.60, port 502; Modbus RTU defaults 19200 bps, 8 data bits, even parity, 1 stop bit) and Table 3 'Modbus registers' (pages 7-31). The controller speaks Modbus TCP itself, so no gateway is needed; this file uses the TCP port and leaves the RS-485 defaults only in the note. Table 3 numbers the registers from 1 and that is how this file addresses them (declared one-based), which is also how the public Home Assistant configuration for the C6 (borpin/ha_komfovent_config) addresses them: its 'on/off' switch sits at address 0 for register 1, the ECO switch at 2 for register 3 and the current mode at 4 for register 5. The manual documents that the RTU protocol ID and the interface settings can be changed under SETTINGS > CONNECTIVITY but does not print a factory value for the ID, so unit 1 is used here and must be matched on site if the controller was given another ID. Data types follow the manual's own column: 'unsigned char' is a 16-bit register holding an 8-bit value, 'unsigned short' one register, 'unsigned int' two registers. The 900-series measurement rows are marked 'RO' in the manual and the 1-18/200-217/1050 rows 'R/W' or 'RO' as noted; every scale factor comes from the 'x10' entries in the Values and Units column (x10 C = 0.1, x10 % = 0.1). The weekly-schedule, alarm-log and panel blocks are left out: they are long repeated blocks (registers 300-343, 727-801, 946-951) whose meaning depends on the schedule slots, and the alarm rows are packed date/time words, none of which add a reading to this map."
}
