{
  "spec_version": 1,
  "slug": "carlo-gavazzi-em111-em112",
  "manufacturer": "Carlo Gavazzi",
  "model": "EM111 / EM112 / ET112",
  "category": "Energy meter",
  "supplier_url": "https://www.gavazziautomation.com/en-global/product/EM111DINAV81XS1X?cHash=1f700a5c1cc0b84a10bd0a584b172539",
  "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 L-N",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 2,
      "count": 2,
      "name": "Current",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4,
      "count": 2,
      "name": "Active power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 6,
      "count": 2,
      "name": "Apparent power",
      "data_type": "Int32",
      "units": "VA",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 8,
      "count": 2,
      "name": "Reactive power",
      "data_type": "Int32",
      "units": "var",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 10,
      "count": 2,
      "name": "Active power demand",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12,
      "count": 2,
      "name": "Active power demand peak",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 14,
      "count": 1,
      "name": "Power factor",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 15,
      "count": 1,
      "name": "Frequency",
      "data_type": "Int16",
      "units": "Hz",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 16,
      "count": 2,
      "name": "Active energy imported, total",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 18,
      "count": 2,
      "name": "Reactive energy imported, total",
      "data_type": "Int32",
      "units": "kvarh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 20,
      "count": 2,
      "name": "Active energy imported, partial",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 22,
      "count": 2,
      "name": "Reactive energy imported, partial",
      "data_type": "Int32",
      "units": "kvarh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 24,
      "count": 2,
      "name": "Active energy imported, tariff 1",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 26,
      "count": 2,
      "name": "Active energy imported, tariff 2",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 32,
      "count": 2,
      "name": "Active energy exported, total",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 34,
      "count": 2,
      "name": "Reactive energy exported, total",
      "data_type": "Int32",
      "units": "kvarh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 44,
      "count": 2,
      "name": "Hour counter",
      "data_type": "Int32",
      "units": "h",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Only available on ET112."
    },
    {
      "address": 256,
      "count": 2,
      "name": "Current, system",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 258,
      "count": 2,
      "name": "Voltage L-N, system",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 262,
      "count": 2,
      "name": "Active power, system",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 264,
      "count": 2,
      "name": "Apparent power, system",
      "data_type": "Int32",
      "units": "VA",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 266,
      "count": 2,
      "name": "Reactive power, system",
      "data_type": "Int32",
      "units": "var",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 268,
      "count": 2,
      "name": "Power factor, system",
      "data_type": "Int32",
      "units": "",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 272,
      "count": 2,
      "name": "Frequency, system",
      "data_type": "Int32",
      "units": "Hz",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 274,
      "count": 2,
      "name": "Active energy imported, total (second copy)",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 276,
      "count": 2,
      "name": "Reactive energy imported, total (second copy)",
      "data_type": "Int32",
      "units": "kvarh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 278,
      "count": 2,
      "name": "Active energy exported, total (second copy)",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 280,
      "count": 2,
      "name": "Reactive energy exported, total (second copy)",
      "data_type": "Int32",
      "units": "kvarh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 282,
      "count": 2,
      "name": "Active power demand, system",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 284,
      "count": 2,
      "name": "Active power demand peak, system",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 328,
      "count": 2,
      "name": "Active energy imported, partial (second copy)",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 330,
      "count": 2,
      "name": "Reactive energy imported, partial (second copy)",
      "data_type": "Int32",
      "units": "kvarh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 338,
      "count": 2,
      "name": "Active energy imported, tariff 1 (second copy)",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 340,
      "count": 2,
      "name": "Active energy imported, tariff 2 (second copy)",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    }
  ],
  "holding_registers": [
    {
      "address": 8192,
      "count": 1,
      "name": "RS-485 instrument address",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 to 247; factory default 1."
    },
    {
      "address": 8193,
      "count": 1,
      "name": "RS-485 baud rate",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = 9600 (default), 2 = 19200, 3 = 38400, 4 = 57600, 5 = 115200 bps."
    },
    {
      "address": 8194,
      "count": 1,
      "name": "RS-485 parity",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = no parity (default), 2 = even parity."
    },
    {
      "address": 8195,
      "count": 1,
      "name": "RS-485 stop bits",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = one stop bit (default), 2 = two stop bits (only with even parity)."
    },
    {
      "address": 8196,
      "count": 1,
      "name": "Maximum words per Modbus request",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "50 words."
    }
  ],
  "combined_registers": [],
  "notes": "RS-485 device: reach it through a Modbus RTU-to-TCP gateway using the factory serial settings above (slave address 1, 9600 bps, 8N1). Source: Carlo Gavazzi 'EM111 MV5 - Modbus serial protocol' rev. 2.12, tables 2.4-1, 2.4-2 and 2.7-6. Carlo Gavazzi stores 32-bit values least significant word first (LSW -> MSW), hence the LowFirst word order. Function codes 03 and 04 return the same values. The register bank at 0x0100 repeats the same measurements except the hour counter. Values are transmitted in tenths (V, W, var, VA, kWh, kvarh) or thousandths (A, PF), which the scale factors convert."
}
