{
  "spec_version": 1,
  "slug": "grundfos-e-pumps-cim",
  "manufacturer": "Grundfos",
  "model": "MAGNA3 / TPE / NBE / CRE / CUE E-pumps with CIM 200 or CIM 500",
  "category": "Pump controller",
  "supplier_url": "https://www.grundfos.com/products/find-product/magna3",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 231,
    "addressing": "one_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst",
    "native_interface": "rs485",
    "serial": {
      "parity": "Even",
      "baud_rate": 19200,
      "data_bits": 8,
      "stop_bits": 1
    }
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 1,
      "count": 1,
      "name": "Minimum slave reply delay",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Minimum reply delay from the slave, 0-10000 ms (default 0). The delay is added to the internal delay in the device and is stored across power-off. Not supported by the built-in SoftCIM."
    },
    {
      "address": 3,
      "count": 1,
      "name": "Software-defined Modbus address",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Active Modbus address. The manual states the default value is 0xE7 (231) and that there is normally no need to change it. On a CIM 200 the value is used only when the transmission speed is set to 'software-defined' on DIP switches SW4/SW5; otherwise the hexadecimal rotary switches SW6/SW7 define the address."
    },
    {
      "address": 4,
      "count": 1,
      "name": "Software-defined bit rate",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Transmission-speed code written when the software-defined speed is selected: 1 = 1200, 2 = 2400, 3 = 4800, 4 = 9600, 5 = 19200, 6 = 38400 bit/s. Default 19200 bit/s as per the Modbus RTU standard (CIM 200 default by DIP switches SW4/SW5)."
    },
    {
      "address": 10,
      "count": 1,
      "name": "Software-defined stop bit",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Stop-bit setting for software-defined settings: 0 = no stop bit, 1 = 1 stop bit (default), 2 = 2 stop bits. Ignored by a CIM 200 unless software-defined speed is selected."
    },
    {
      "address": 12,
      "count": 1,
      "name": "Watchdog timeout",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Watchdog timeout, 5-3600 s; 0 = disabled (default). The watchdog is fed whenever the device is addressed with a valid telegram; an interruption longer than the timeout sets the pump to Local mode. Values 1-4 set 5 s, values above 3600 set 3600 s."
    },
    {
      "address": 13,
      "count": 1,
      "name": "GENIbus diode off",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = GENIbus diode LED2 has normal function, 1 = LED2 is permanently switched off."
    },
    {
      "address": 21,
      "count": 1,
      "name": "GENIbus CRC error count",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "CRC error counter for the GENIbus connection to the E-pump."
    },
    {
      "address": 22,
      "count": 1,
      "name": "GENIbus data error count",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Data error counter for the GENIbus connection to the E-pump."
    },
    {
      "address": 23,
      "count": 1,
      "name": "GENIbus version number",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Grundfos-specific version number, BCD-coded unsigned integer."
    },
    {
      "address": 24,
      "count": 1,
      "name": "Actual Modbus address",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Current Modbus slave address of the device (valid range 1-247)."
    },
    {
      "address": 25,
      "count": 2,
      "name": "GENIbus TX counter",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Transmit counter for the total number of telegrams sent to the E-pump on the GENIbus connection (HI register 25, LO register 26)."
    },
    {
      "address": 27,
      "count": 2,
      "name": "GENIbus RX counter",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Receive counter for the total number of telegrams received from the E-pump on the GENIbus connection (HI register 27, LO register 28)."
    },
    {
      "address": 30,
      "count": 1,
      "name": "Unit family",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Grundfos unit family, e.g. 1 = circulator pumps, 2 = E-pump, 7 = motor protector, 21 = Hydro/Control MPC, 26 = Dedicated Controls, 38 = circulator twin pump, 39 = multi pump, 46/48 = LC controller, 65 = SQ controller."
    },
    {
      "address": 31,
      "count": 1,
      "name": "Unit type",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Unit type within the family, e.g. 10 = MAGNA3, 5 = CUE frequency drive, 7 = MGE model H/I/J, 9 = MGE model K, 10 = MAGNA3-D (twin pump)."
    },
    {
      "address": 32,
      "count": 1,
      "name": "Unit version",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Unit version number reported by the E-pump."
    },
    {
      "address": 34,
      "count": 2,
      "name": "Product software version",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Product software version as BCD digits 1-4 (aa.bb) in register 34 and digits 5-8 (cc.dd) in register 35."
    },
    {
      "address": 36,
      "count": 1,
      "name": "Product software date, day and month",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Product software date as BCD ddmm."
    },
    {
      "address": 37,
      "count": 1,
      "name": "Product software year",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Product software year as BCD yyyy."
    },
    {
      "address": 102,
      "count": 1,
      "name": "Control mode (request)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Control-mode enumeration to set: 0 = constant speed, 1 = constant frequency, 3 = constant head, 4 = constant pressure, 5 = constant differential pressure, 6 = proportional pressure, 7 = constant flow, 8 = constant temperature, 9 = constant differential temperature, 10 = constant level, 128 = AUTOADAPT, 129 = FLOWADAPT, 130 = closed-loop sensor, 131 = AUTOADAPT(CP). The actual mode is reported in register 203."
    },
    {
      "address": 103,
      "count": 1,
      "name": "Operation mode (request)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Operating-mode enumeration: 0 = auto-control (setpoint control), 4 = OpenLoopMin (minimum speed), 6 = OpenLoopMax (maximum speed). OnOffReq has higher priority. The actual mode is reported in register 204."
    },
    {
      "address": 104,
      "count": 1,
      "name": "Setpoint",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "Setpoint with scale 0.01 %, i.e. 0-10000 represents 0-100 %. Closed loop: percentage of the setpoint range. Open loop: percentage of nominal frequency (4700 = 47 %, 8000 = 80 %)."
    },
    {
      "address": 106,
      "count": 1,
      "name": "Set maximum flow limit",
      "data_type": "UInt16",
      "units": "m3/h",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "Maximum flow limit (FLOWLIMIT) in 0.01 m3/h. It must be enabled with register 101 bit 5; when disabled the limit is only active in FLOWADAPT mode. The actual value is reported in register 345."
    },
    {
      "address": 109,
      "count": 1,
      "name": "Sensor feedback",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "Closed-loop sensor feedback via Modbus, scale 0.01 %."
    },
    {
      "address": 110,
      "count": 1,
      "name": "Set Kp",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Proportional gain Kp, scale 0.1."
    },
    {
      "address": 111,
      "count": 1,
      "name": "Set Ti",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Integral action time Ti, scale 0.1 s."
    },
    {
      "address": 112,
      "count": 1,
      "name": "Set direct/inverse control",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = inverse control, 1 = direct control."
    },
    {
      "address": 201,
      "count": 1,
      "name": "Pump status bits",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit field: bit 0 = LowFlowStop, bit 1 = CopyToLocal, bit 2 = MaxFlowLimitEnabled, bit 3 = ResetAlarmAck, bit 4 = SetpointInfluence, bit 5 = AtMaxPower, bit 6 = Rotation, bit 8 = RemoteAccess (actual remote/local state), bit 9 = OnOff (actual on/off state). Some bits are only available on later MGE models and MAGNA3; see section 9.5 of the manual."
    },
    {
      "address": 202,
      "count": 1,
      "name": "Process feedback",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Actual process feedback, scale 0.01 % (0-10000). Closed loop: percentage of the closed-loop feedback sensor range. Open loop: percentage of E-pump performance."
    },
    {
      "address": 203,
      "count": 1,
      "name": "Control mode (actual)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Actual control mode; same enumeration as register 102."
    },
    {
      "address": 204,
      "count": 1,
      "name": "Operation mode (actual)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Actual operating mode: 0 = auto-control, 4 = OpenLoopMin, 6 = OpenLoopMax, 7 = user curve, 8 = stop button, 9 = hand mode."
    },
    {
      "address": 205,
      "count": 1,
      "name": "Alarm code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Grundfos-specific alarm code."
    },
    {
      "address": 206,
      "count": 1,
      "name": "Warning code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Grundfos-specific warning code."
    },
    {
      "address": 207,
      "count": 1,
      "name": "Bearing service",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bits 0-7 = months until the next bearing service (0, 1, 3, 6, 12 or 24; 24 means 24 months or more; 0xFF = information not available). Bit 8 = bearing service type (0 = lubricate bearings, 1 = change bearings). Not available on all E-pumps."
    },
    {
      "address": 208,
      "count": 1,
      "name": "Drive state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = stopped, 1 = accelerating, 2 = decelerating, 3 = steady state/closed loop, 5 = accelerating halt, 6 = decelerating halt, 7 = start on the run (flying cut-in). Only MGE motors and CUE drives."
    },
    {
      "address": 209,
      "count": 1,
      "name": "Feedback sensor unit",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Unit of the feedback sensor: 0 = bar, 1 = mbar, 2 = m, 3 = kPa, 4 = psi, 5 = ft, 6 = m3/h, 7 = m3/s, 8 = l/s, 9 = gpm, 10 = degC, 11 = degF, 12 = %, 13 = K, 14 = W."
    },
    {
      "address": 210,
      "count": 1,
      "name": "Feedback sensor minimum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Minimum value of the feedback sensor; the unit is defined by register 209."
    },
    {
      "address": 211,
      "count": 1,
      "name": "Feedback sensor maximum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Maximum value of the feedback sensor; the unit is defined by register 209."
    },
    {
      "address": 212,
      "count": 1,
      "name": "Nominal pump frequency",
      "data_type": "UInt16",
      "units": "Hz",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Nominal pump frequency, scale 0.1 Hz."
    },
    {
      "address": 213,
      "count": 1,
      "name": "Minimum pump frequency",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Minimum pump frequency in % of nominal frequency, scale 0.01 %."
    },
    {
      "address": 214,
      "count": 1,
      "name": "Maximum pump frequency",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Maximum pump frequency in % of nominal frequency, scale 0.01 %."
    },
    {
      "address": 215,
      "count": 1,
      "name": "Setpoint range minimum",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Minimum of the setpoint range in % of the sensor maximum value, scale 0.01 %."
    },
    {
      "address": 216,
      "count": 1,
      "name": "Setpoint range maximum",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Maximum of the setpoint range in % of the sensor maximum value, scale 0.01 %."
    },
    {
      "address": 221,
      "count": 1,
      "name": "Flow estimation state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = flow estimation within range, 1 = below range, 2 = above range."
    },
    {
      "address": 222,
      "count": 1,
      "name": "Kp (actual)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Actual proportional gain, scale 0.1."
    },
    {
      "address": 223,
      "count": 1,
      "name": "Ti (actual)",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Actual integral action time, scale 0.1 s."
    },
    {
      "address": 224,
      "count": 1,
      "name": "Direct/inverse control (actual)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = inverse control, 1 = direct control."
    },
    {
      "address": 225,
      "count": 1,
      "name": "Control source",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = display, 2 = bus, 3 = GO app, 4 = digital input, 5 = OFF button."
    },
    {
      "address": 301,
      "count": 1,
      "name": "Head",
      "data_type": "UInt16",
      "units": "bar",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "Actual system head/pressure, scale 0.001 bar."
    },
    {
      "address": 302,
      "count": 1,
      "name": "Volume flow",
      "data_type": "UInt16",
      "units": "m3/h",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Actual system flow, scale 0.1 m3/h."
    },
    {
      "address": 303,
      "count": 1,
      "name": "Relative performance",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Performance relative to maximum performance, scale 0.01 %."
    },
    {
      "address": 304,
      "count": 1,
      "name": "Speed",
      "data_type": "UInt16",
      "units": "rpm",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Motor speed, scale 1 rpm."
    },
    {
      "address": 305,
      "count": 1,
      "name": "Frequency",
      "data_type": "UInt16",
      "units": "Hz",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Actual control signal applied to the motor, scale 0.1 Hz."
    },
    {
      "address": 306,
      "count": 1,
      "name": "Digital inputs",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Logical values of the external digital inputs, bit-coded (DI 1-4 on 3-phase MGE, DI 1-3 on MAGNA3)."
    },
    {
      "address": 307,
      "count": 1,
      "name": "Digital outputs",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Logical values of the external digital outputs, bit-coded (DO 1-4 on 3-phase MGE, DO 1-2 on MAGNA3)."
    },
    {
      "address": 308,
      "count": 1,
      "name": "Actual setpoint",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Actual setpoint: open loop % of nominal frequency, closed loop % of sensor maximum, scale 0.01 %."
    },
    {
      "address": 309,
      "count": 1,
      "name": "Motor current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Actual motor current, scale 0.1 A."
    },
    {
      "address": 310,
      "count": 1,
      "name": "DC-link voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Frequency-converter DC-link voltage, scale 0.1 V."
    },
    {
      "address": 311,
      "count": 1,
      "name": "Motor voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Motor voltage, scale 0.1 V (model G only)."
    },
    {
      "address": 312,
      "count": 2,
      "name": "Power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total power consumption of the system (HI register 312, LO register 313), scale 1 W."
    },
    {
      "address": 314,
      "count": 1,
      "name": "Remote flow",
      "data_type": "UInt16",
      "units": "m3/h",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Measured flow at an external sensor, scale 0.1 m3/h."
    },
    {
      "address": 315,
      "count": 1,
      "name": "Inlet pressure",
      "data_type": "UInt16",
      "units": "bar",
      "scale_factor": 0.001,
      "offset": -1,
      "access": "R",
      "description": "System inlet pressure relative to atmospheric pressure, scale 0.001 bar with an offset of -1.000 bar."
    },
    {
      "address": 316,
      "count": 1,
      "name": "Remote pressure 1",
      "data_type": "UInt16",
      "units": "bar",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "Pressure measured at external sensor 1, relative to atmospheric pressure, scale 0.001 bar."
    },
    {
      "address": 317,
      "count": 1,
      "name": "Feed tank level",
      "data_type": "UInt16",
      "units": "m",
      "scale_factor": 0.01,
      "offset": -100,
      "access": "R",
      "description": "Feed tank level, scale 0.01 m with an offset of -100 m. The manual types this parameter as uint8."
    },
    {
      "address": 318,
      "count": 1,
      "name": "Power electronics temperature",
      "data_type": "UInt16",
      "units": "K",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Temperature in the frequency converter, scale 0.01 K."
    },
    {
      "address": 319,
      "count": 1,
      "name": "Motor temperature",
      "data_type": "UInt16",
      "units": "K",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Motor winding temperature, scale 0.01 K."
    },
    {
      "address": 320,
      "count": 1,
      "name": "Remote temperature 1",
      "data_type": "UInt16",
      "units": "K",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Temperature at external sensor 1, scale 0.01 K."
    },
    {
      "address": 321,
      "count": 1,
      "name": "Electronics temperature",
      "data_type": "UInt16",
      "units": "K",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "E-pump electronics temperature, scale 0.01 K."
    },
    {
      "address": 322,
      "count": 1,
      "name": "Pumped liquid temperature",
      "data_type": "UInt16",
      "units": "K",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Pumped-liquid temperature, scale 0.01 K."
    },
    {
      "address": 325,
      "count": 1,
      "name": "Auxiliary sensor input",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Auxiliary sensor input, scale 0.01 %."
    },
    {
      "address": 326,
      "count": 1,
      "name": "Specific energy consumption",
      "data_type": "UInt16",
      "units": "Wh/m3",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Specific energy consumption, scale 1 Wh/m3."
    },
    {
      "address": 327,
      "count": 2,
      "name": "Operation time",
      "data_type": "UInt32",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total operating time of the system (HI register 327, LO register 328), scale 1 hour."
    },
    {
      "address": 329,
      "count": 2,
      "name": "Powered time",
      "data_type": "UInt32",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total power-on time of the system (HI register 329, LO register 330), scale 1 hour."
    },
    {
      "address": 331,
      "count": 1,
      "name": "Torque",
      "data_type": "UInt16",
      "units": "Nm",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Motor torque, scale 0.1 Nm."
    },
    {
      "address": 332,
      "count": 2,
      "name": "Energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total energy consumption of the system (HI register 332, LO register 333), scale 1 kWh."
    },
    {
      "address": 334,
      "count": 2,
      "name": "Number of starts",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Number of times the E-pump has been started (HI register 334, LO register 335), scale 1 start."
    },
    {
      "address": 337,
      "count": 1,
      "name": "Remote temperature 2",
      "data_type": "UInt16",
      "units": "K",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Temperature at external sensor 2, scale 0.01 K."
    },
    {
      "address": 338,
      "count": 1,
      "name": "User setpoint",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "User-selected setpoint: open loop % of nominal frequency, closed loop % of setpoint range, scale 0.01 %."
    },
    {
      "address": 339,
      "count": 1,
      "name": "Differential pressure",
      "data_type": "UInt16",
      "units": "bar",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "Pressure between the pump flanges, scale 0.001 bar."
    },
    {
      "address": 340,
      "count": 1,
      "name": "Outlet pressure",
      "data_type": "UInt16",
      "units": "bar",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "Pressure at the pump outlet, scale 0.001 bar."
    },
    {
      "address": 342,
      "count": 1,
      "name": "Load percent",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Motor current in percent of rated motor current, scale 0.01 %."
    },
    {
      "address": 343,
      "count": 2,
      "name": "Pump real-time clock",
      "data_type": "UInt32",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Pump time and date in UNIX format (seconds since 01-01-1970 00:00:00), HI register 343, LO register 344."
    },
    {
      "address": 345,
      "count": 1,
      "name": "Maximum flow limit (actual)",
      "data_type": "UInt16",
      "units": "m3/h",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Actual maximum flow limit, scale 0.1 m3/h."
    },
    {
      "address": 346,
      "count": 1,
      "name": "Remote differential temperature",
      "data_type": "UInt16",
      "units": "K",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Remote differential temperature, scale 0.01 K."
    },
    {
      "address": 347,
      "count": 1,
      "name": "Inlet differential pressure",
      "data_type": "UInt16",
      "units": "bar",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "Inlet differential pressure, scale 0.001 bar."
    },
    {
      "address": 348,
      "count": 1,
      "name": "Outlet differential pressure",
      "data_type": "UInt16",
      "units": "bar",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "Outlet differential pressure, scale 0.001 bar."
    },
    {
      "address": 349,
      "count": 1,
      "name": "Remote differential pressure",
      "data_type": "UInt16",
      "units": "bar",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "Remote differential pressure, scale 0.001 bar."
    },
    {
      "address": 350,
      "count": 1,
      "name": "Storage tank level",
      "data_type": "UInt16",
      "units": "m",
      "scale_factor": 0.01,
      "offset": -100,
      "access": "R",
      "description": "Storage tank level, scale 0.01 m with an offset of -100 m."
    },
    {
      "address": 351,
      "count": 1,
      "name": "Ambient temperature",
      "data_type": "UInt16",
      "units": "K",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Ambient temperature, scale 0.01 K."
    },
    {
      "address": 352,
      "count": 2,
      "name": "Heat energy counter 1",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total accumulated heat energy in the pump lifetime (direction 1), HI register 352, LO register 353, scale 1 kWh. Requires the volume flow register and a differential-temperature measurement."
    },
    {
      "address": 354,
      "count": 2,
      "name": "Heat power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Actual heat power, HI register 354, LO register 355, scale 1 W."
    },
    {
      "address": 356,
      "count": 1,
      "name": "Heat differential temperature",
      "data_type": "UInt16",
      "units": "K",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Differential temperature between the forward and return pipe used for the heat calculation, scale 0.01 K."
    },
    {
      "address": 357,
      "count": 2,
      "name": "Volume 1",
      "data_type": "UInt32",
      "units": "m3",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Total pumped volume (direction 1), HI register 357, LO register 358, scale 0.01 m3."
    },
    {
      "address": 359,
      "count": 2,
      "name": "Heat energy counter 2",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total accumulated heat energy in the pump lifetime (direction 2), HI register 359, LO register 360, scale 1 kWh."
    },
    {
      "address": 361,
      "count": 2,
      "name": "Volume 2",
      "data_type": "UInt32",
      "units": "m3",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Total pumped volume (direction 2), HI register 361, LO register 362, scale 0.01 m3."
    }
  ],
  "combined_registers": [],
  "notes": "Source: Grundfos 'Modbus for Grundfos pumps — Functional profile and user manual (SoftCIM Modbus RTU)', 98367081, 05.2025, plus 'Native Modbus RTU for CUE' 93525145, 11.2025, with the same register model. The manual states the registers can be read with function codes 03 and/or 04, so all rows sit in the holding-register area. Rows from sections 9.1-9.6: CIM configuration, CIM status, pump control, pump status and pump data with the printed register numbers, scales and units. Covers MAGNA3, TPE, NBE/NKE, CRE/CRNE/CRIE, MTRE, CHIE, CME and CUE with CIM/CIU 200 (RTU), CIM/CIU 500 (TCP) or the SoftCIM port. Factory frame: 19200 bit/s default (CIM 200, per the Modbus RTU standard), even parity, 1 stop bit, 8 data bits, software-defined address default 0xE7 (231); on a CIM 200 the address comes from rotary switches SW6/SW7, so read register 24 (actual address) to confirm it on site. Addressing: the manual states a register at X is addressed as X - 1 (register 00104 is addressed as 00103), so the printed 1-based numbers are stored with addressing = one_based. All registers are 16-bit; 32-bit values use a HI/LO pair with HI at the lower address (HI x 65536 + LO) → HighFirst. Scaled values are unsigned integers with the vendor scale column (head 0.001 bar, volume flow 0.1 m3/h, temperatures 0.01 K); the two printed offsets (inlet pressure -1.000 bar, tank levels -100 m) are applied as offsets. Deliberately omitted (a selection, not the whole map): reserved registers; control bits 00101 (remote control/on-off/alarm reset, read section 9.4); relay control 00105; RTC set 00107/00108; 00005 and 00009, which only matter with software-defined CIM 200 settings (00009: 0 = no parity, 1 = even, 2 = odd); simulation 00701-00709; user registers 00751-00800; bearing temperatures 00323/00324; remote pressure 2 (00341); pump RTC 00343/00344; conductivity/pH/turbidity 00363-00365 (vendor scale/unit columns shifted). Rows marked 'only MAGNA3 / MGE model H and later' need that model."
}
