{
  "spec_version": 1,
  "slug": "carlo-gavazzi-em340",
  "manufacturer": "Carlo Gavazzi",
  "model": "EM340",
  "category": "Energy meter",
  "supplier_url": "https://app.gavazzicontrols-3d.com/catalog/products/_EM340",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "LowFirst",
    "native_interface": "rs485",
    "serial": {
      "parity": "None",
      "baud_rate": 9600,
      "data_bits": 8,
      "stop_bits": 1
    }
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [
    {
      "address": 0,
      "count": 2,
      "name": "Voltage L1-N",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 2,
      "count": 2,
      "name": "Voltage L2-N",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4,
      "count": 2,
      "name": "Voltage L3-N",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 6,
      "count": 2,
      "name": "Voltage L1-L2",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 8,
      "count": 2,
      "name": "Voltage L2-L3",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 10,
      "count": 2,
      "name": "Voltage L3-L1",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12,
      "count": 2,
      "name": "Current L1",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 14,
      "count": 2,
      "name": "Current L2",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 16,
      "count": 2,
      "name": "Current L3",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 18,
      "count": 2,
      "name": "Active power L1",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 20,
      "count": 2,
      "name": "Active power L2",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 22,
      "count": 2,
      "name": "Active power L3",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 24,
      "count": 2,
      "name": "Apparent power L1",
      "data_type": "Int32",
      "units": "VA",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 26,
      "count": 2,
      "name": "Apparent power L2",
      "data_type": "Int32",
      "units": "VA",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 28,
      "count": 2,
      "name": "Apparent power L3",
      "data_type": "Int32",
      "units": "VA",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 30,
      "count": 2,
      "name": "Reactive power L1",
      "data_type": "Int32",
      "units": "var",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 32,
      "count": 2,
      "name": "Reactive power L2",
      "data_type": "Int32",
      "units": "var",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 34,
      "count": 2,
      "name": "Reactive power L3",
      "data_type": "Int32",
      "units": "var",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 36,
      "count": 2,
      "name": "Voltage L-N, system",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 38,
      "count": 2,
      "name": "Voltage L-L, system",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 40,
      "count": 2,
      "name": "Active power, system",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 42,
      "count": 2,
      "name": "Apparent power, system",
      "data_type": "Int32",
      "units": "VA",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 44,
      "count": 2,
      "name": "Reactive power, system",
      "data_type": "Int32",
      "units": "var",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 46,
      "count": 1,
      "name": "Power factor L1",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 47,
      "count": 1,
      "name": "Power factor L2",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 48,
      "count": 1,
      "name": "Power factor L3",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 49,
      "count": 1,
      "name": "Power factor, system",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 50,
      "count": 1,
      "name": "Phase sequence",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = L1-L3-L2, 0 = L1-L2-L3."
    },
    {
      "address": 51,
      "count": 1,
      "name": "Frequency",
      "data_type": "Int16",
      "units": "Hz",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 52,
      "count": 2,
      "name": "Active energy imported, total",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 54,
      "count": 2,
      "name": "Reactive energy imported, total",
      "data_type": "Int32",
      "units": "kVArh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 56,
      "count": 2,
      "name": "Active power demand",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 58,
      "count": 2,
      "name": "Active power demand peak",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 60,
      "count": 2,
      "name": "Active energy imported, partial",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 62,
      "count": 2,
      "name": "Reactive energy imported, partial",
      "data_type": "Int32",
      "units": "kVArh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 64,
      "count": 2,
      "name": "Active energy imported, L1",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 66,
      "count": 2,
      "name": "Active energy imported, L2",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 68,
      "count": 2,
      "name": "Active energy imported, L3",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 70,
      "count": 2,
      "name": "Active energy imported, tariff 1",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 72,
      "count": 2,
      "name": "Active energy imported, tariff 2",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 74,
      "count": 2,
      "name": "Active energy imported, tariff 3",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 76,
      "count": 2,
      "name": "Active energy imported, tariff 4",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 78,
      "count": 2,
      "name": "Active energy exported, total",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 80,
      "count": 2,
      "name": "Reactive energy exported, total",
      "data_type": "Int32",
      "units": "kVArh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 82,
      "count": 2,
      "name": "Active energy exported, partial",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 84,
      "count": 2,
      "name": "Reactive energy exported, partial",
      "data_type": "Int32",
      "units": "kVArh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 86,
      "count": 2,
      "name": "Apparent energy, total",
      "data_type": "Int32",
      "units": "kVAh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 88,
      "count": 2,
      "name": "Apparent energy, partial",
      "data_type": "Int32",
      "units": "kVAh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 90,
      "count": 2,
      "name": "Run hour meter",
      "data_type": "Int32",
      "units": "h",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 92,
      "count": 2,
      "name": "Active energy exported, L1",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 94,
      "count": 2,
      "name": "Active energy exported, L2",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 96,
      "count": 2,
      "name": "Active energy exported, L3",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 98,
      "count": 2,
      "name": "Active energy imported, tariff 5",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 100,
      "count": 2,
      "name": "Active energy imported, tariff 6",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 102,
      "count": 2,
      "name": "Active energy imported, tariff 7",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 104,
      "count": 2,
      "name": "Active energy imported, tariff 8",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 770,
      "count": 1,
      "name": "Firmware version code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 771,
      "count": 1,
      "name": "Firmware revision code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    }
  ],
  "holding_registers": [
    {
      "address": 4096,
      "count": 1,
      "name": "Password",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 to 9999."
    },
    {
      "address": 4098,
      "count": 1,
      "name": "Measuring system",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = 3Pn, 1 = 3P, 2 = 2P."
    },
    {
      "address": 4099,
      "count": 2,
      "name": "Current transformer ratio",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "10 = CT 1.0, 10000 = CT 1000.0."
    },
    {
      "address": 4101,
      "count": 2,
      "name": "Voltage transformer ratio",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "10 = VT 1.0, 10000 = VT 1000.0."
    },
    {
      "address": 4112,
      "count": 2,
      "name": "Demand integration time",
      "data_type": "UInt32",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 to 30."
    },
    {
      "address": 4114,
      "count": 2,
      "name": "Pulse output Ton",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = 30 ms, 1 = 100 ms."
    },
    {
      "address": 4128,
      "count": 2,
      "name": "Energy per pulse, output 1",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 4130,
      "count": 2,
      "name": "Energy per pulse, output 2",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 4352,
      "count": 1,
      "name": "Display mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = full, 1 = easy."
    },
    {
      "address": 4353,
      "count": 1,
      "name": "Tariff management",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4354,
      "count": 1,
      "name": "Home page",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 to 19."
    },
    {
      "address": 4355,
      "count": 1,
      "name": "Measurement mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = A, 1 = B."
    },
    {
      "address": 4356,
      "count": 1,
      "name": "Wrong connection help",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = on, 1 = off."
    },
    {
      "address": 4358,
      "count": 1,
      "name": "THD calculation",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4608,
      "count": 1,
      "name": "Tariff mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = digital input, 1 = serial."
    },
    {
      "address": 4609,
      "count": 1,
      "name": "Tariff number",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 or 2."
    },
    {
      "address": 8192,
      "count": 1,
      "name": "RS-485 address",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 to 247."
    },
    {
      "address": 8193,
      "count": 1,
      "name": "RS-485 baud rate",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = 9600, 2 = 19200, 3 = 38400, 4 = 57600, 5 = 115200."
    },
    {
      "address": 8194,
      "count": 1,
      "name": "RS-485 parity",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = none, 2 = even."
    },
    {
      "address": 8195,
      "count": 1,
      "name": "RS-485 stop bits",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = 1 stop bit, 1 = 2 stop bits."
    },
    {
      "address": 8196,
      "count": 1,
      "name": "Maximum words per request",
      "data_type": "UInt16",
      "units": "words",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "50."
    },
    {
      "address": 16384,
      "count": 1,
      "name": "Reset partial meters",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "Write 1 to execute."
    },
    {
      "address": 16385,
      "count": 1,
      "name": "Reset total energy meters",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "Write 1 to execute (non-MID versions only)."
    }
  ],
  "combined_registers": [],
  "notes": "RS-485 device: reach it through a Modbus RTU-to-TCP gateway using the factory serial settings above. Carlo Gavazzi stores 32-bit values with the least significant word at the lower address, hence the LowFirst word order. Function codes 03 and 04 return the same measurements. Energy counters are 32-bit here; the separate 64-bit totalizers at 0x0500 are not exposed because this format has no 64-bit type."
}
