{
  "spec_version": 1,
  "slug": "carlo-gavazzi-em210",
  "manufacturer": "Carlo Gavazzi",
  "model": "EM210 (AV5 / MV5 modular energy meter)",
  "category": "Energy meter",
  "supplier_url": "https://www.gavazziautomation.com/fileadmin/images/PIM/OTHERSTUFF/COMPRO/EM210_CP.pdf",
  "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": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "-1 corresponds to L1-L3-L2, 0 to L1-L2-L3; meaningful only in a three-phase system."
    },
    {
      "address": 51,
      "count": 1,
      "name": "Frequency",
      "data_type": "Int16",
      "units": "Hz",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 52,
      "count": 2,
      "name": "kWh imported, total",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 54,
      "count": 2,
      "name": "kvarh imported, total",
      "data_type": "Int32",
      "units": "kvarh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 78,
      "count": 2,
      "name": "kWh exported, total",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 90,
      "count": 2,
      "name": "Hour counter",
      "data_type": "Int32",
      "units": "h",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 92,
      "count": 2,
      "name": "Hour counter, negative",
      "data_type": "Int32",
      "units": "h",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 130,
      "count": 2,
      "name": "THD current L1",
      "data_type": "Int32",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "16th harmonic THD."
    },
    {
      "address": 132,
      "count": 2,
      "name": "THD current L2",
      "data_type": "Int32",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "16th harmonic THD."
    },
    {
      "address": 134,
      "count": 2,
      "name": "THD current L3",
      "data_type": "Int32",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "16th harmonic THD."
    },
    {
      "address": 138,
      "count": 2,
      "name": "THD voltage L1-N",
      "data_type": "Int32",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "16th harmonic THD."
    },
    {
      "address": 140,
      "count": 2,
      "name": "THD voltage L2-N",
      "data_type": "Int32",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "16th harmonic THD."
    },
    {
      "address": 142,
      "count": 2,
      "name": "THD voltage L3-N",
      "data_type": "Int32",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "16th harmonic THD."
    },
    {
      "address": 146,
      "count": 2,
      "name": "THD voltage L1-L2",
      "data_type": "Int32",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "16th harmonic THD."
    },
    {
      "address": 148,
      "count": 2,
      "name": "THD voltage L2-L3",
      "data_type": "Int32",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "16th harmonic THD."
    },
    {
      "address": 150,
      "count": 2,
      "name": "THD voltage L3-L1",
      "data_type": "Int32",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "16th harmonic THD."
    },
    {
      "address": 152,
      "count": 2,
      "name": "Neutral current",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    }
  ],
  "holding_registers": [],
  "combined_registers": [],
  "notes": "RS-485 device: reach it through a Modbus RTU-to-TCP gateway using the factory serial settings above. Source: Carlo Gavazzi \"EM210 - Communication Protocol\", version 4 revision 1 (18 May 2016), section 2.3 \"Instantaneous variables and meters (grouped by variable type)\", table 2.3-1, and section 2.8 table 2.8-10 (serial port configuration menu). The document numbers registers both in \"Modicom\" (6-digit) and \"physical\" (wire) form; the physical addresses are used here as wire addresses. Word order is LSW->MSW for every 32-bit row and the byte order inside each word is MSB->LSB (section 2.1), hence LowFirst. The values are read with function code 03 or 04. The factory serial settings are the documented defaults of registers 2000h/2001h/2002h: 9.6 kbps, no parity, 1 stop bit, 8 data bits; the RS-485 node address (register 2000h, range 1...247) is set per site and the meter is delivered at address 1. Scaling follows the table's \"Value weight\" column: voltages x0.1, currents x0.001, powers x0.1, power factor x0.001, energies x0.1 kWh/kvarh, hour counters x0.01 h, THD x0.01 %. The two system THD rows (300137h and 300145h in the document) are deliberately not listed: the meter does not calculate them and always answers 0. The section 2.4 table repeats the same measurements grouped by phase; only the section 2.3 rows are listed so no value appears twice. Writable setup registers (password, system/CT/VT configuration, serial port, pulse output, reset commands) are documented in section 2.8."
}
