{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Carlo Gavazzi",
  "model": "ET112",
  "models": ["ET112"],
  "vendor_website": "gavazziautomation.com",
  "description": "Single-phase bidirectional energy meter with hour counter (DIN rail), RS485 Modbus RTU",
  "revision": 2,
  "revised": "2026-10-17",
  "source": "Carlo Gavazzi, \"EM100 Series and ET100 Series Modbus communication protocol\", public version 4.0 (June 2025)",
  "sources": [{"title": "EM100 Series and ET100 Series Modbus communication protocol", "version": "Public version 4.0", "date": "2025-06", "url": "https://www.gavazziautomation.com/fileadmin/images/PIM/OTHERSTUFF/COMPRO/EM100_ET100_Series_CPP.pdf"}],
  "notes": [
    "FC03 or FC04 read (the same values), FC06 writes one register.",
    "32- and 64-bit values are low word first (bytes high first in each word).",
    "Out-of-range or invalid written values set the parameter to its default."
  ],
  "protocol": "rtu",
  "unit_id": 1,
  "baudrate": 9600,
  "parity": "N",
  "byte_order": "big",
  "word_order": "little",
  "address_base": 0,
  "max_read_registers": 125,
  "x_status": "official",
  "registers": [
    {"name": "Voltage", "group": "Measurements", "area": "input", "address": "0x0000", "type": "int32", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "Current", "group": "Measurements", "area": "input", "address": "0x0002", "type": "int32", "scale": 0.001, "unit": "A", "access": "R"},
    {"name": "Active power", "group": "Measurements", "area": "input", "address": "0x0004", "type": "int32", "scale": 0.1, "unit": "W", "access": "R"},
    {"name": "Apparent power", "group": "Measurements", "area": "input", "address": "0x0006", "type": "int32", "scale": 0.1, "unit": "VA", "access": "R"},
    {"name": "Reactive power", "group": "Measurements", "area": "input", "address": "0x0008", "type": "int32", "scale": 0.1, "unit": "var", "access": "R"},
    {"name": "Power demand", "group": "Measurements", "area": "input", "address": "0x000A", "type": "int32", "scale": 0.1, "unit": "W", "access": "R"},
    {"name": "Power demand peak", "group": "Measurements", "area": "input", "address": "0x000C", "type": "int32", "scale": 0.1, "unit": "W", "access": "R"},
    {"name": "Power factor", "group": "Measurements", "area": "input", "address": "0x000E", "type": "int16", "scale": 0.001, "access": "R"},
    {"name": "Frequency", "group": "Measurements", "area": "input", "address": "0x000F", "type": "int16", "scale": 0.1, "unit": "Hz", "access": "R"},
    {"name": "Active energy import", "group": "Energy", "area": "input", "address": "0x0010", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R"},
    {"name": "Reactive energy import", "group": "Energy", "area": "input", "address": "0x0012", "type": "int32", "scale": 0.1, "unit": "kvarh", "access": "R"},
    {"name": "Active energy import partial", "group": "Energy", "area": "input", "address": "0x0014", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R"},
    {"name": "Reactive energy import partial", "group": "Energy", "area": "input", "address": "0x0016", "type": "int32", "scale": 0.1, "unit": "kvarh", "access": "R"},
    {"name": "Active energy import tariff 1", "group": "Energy", "area": "input", "address": "0x0018", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R"},
    {"name": "Active energy import tariff 2", "group": "Energy", "area": "input", "address": "0x001A", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R"},
    {"name": "Active energy export", "group": "Energy", "area": "input", "address": "0x0020", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R"},
    {"name": "Reactive energy export", "group": "Energy", "area": "input", "address": "0x0022", "type": "int32", "scale": 0.1, "unit": "kvarh", "access": "R"},
    {"name": "Hour counter", "group": "Measurements", "area": "input", "address": "0x002C", "type": "int32", "scale": 0.01, "unit": "h", "access": "R"},
    {"name": "Carlo Gavazzi identification code", "group": "Identity", "area": "input", "address": "0x000B", "type": "uint16", "access": "R", "enum": {"120": "ET112", "121": "ET112"}, "role": "model", "description": "Read alone, one word at a time: the same address is the high word of the power demand"},
    {"name": "Version code", "group": "Identity", "area": "input", "address": "0x0302", "type": "uint16", "access": "R", "description": "0 = A, 1 = B …"},
    {"name": "Revision code", "group": "Identity", "area": "input", "address": "0x0303", "type": "uint16", "access": "R"},
    {"name": "Serial number character 1", "group": "Identity", "area": "input", "address": "0x5000", "type": "uint16", "access": "R", "description": "ASCII code in the low byte"},
    {"name": "Serial number character 2", "group": "Identity", "area": "input", "address": "0x5001", "type": "uint16", "access": "R"},
    {"name": "Serial number character 3", "group": "Identity", "area": "input", "address": "0x5002", "type": "uint16", "access": "R"},
    {"name": "Serial number character 4", "group": "Identity", "area": "input", "address": "0x5003", "type": "uint16", "access": "R"},
    {"name": "Serial number character 5", "group": "Identity", "area": "input", "address": "0x5004", "type": "uint16", "access": "R"},
    {"name": "Serial number character 6", "group": "Identity", "area": "input", "address": "0x5005", "type": "uint16", "access": "R"},
    {"name": "Serial number character 7", "group": "Identity", "area": "input", "address": "0x5006", "type": "uint16", "access": "R"},
    {"name": "Measuring system", "group": "Settings", "area": "holding", "address": "0x1002", "type": "uint16", "access": "R", "enum": {"0": "1P"}},
    {"name": "Demand integration time", "group": "Settings", "area": "holding", "address": "0x1010", "type": "uint32", "unit": "min", "access": "RW", "write_min": 1, "write_max": 30},
    {"name": "Pulse on time", "group": "Settings", "area": "holding", "address": "0x1012", "type": "uint32", "access": "RW", "enum": {"0": "30 ms", "1": "100 ms"}},
    {"name": "kWh per pulse, output 1", "group": "Settings", "area": "holding", "address": "0x1020", "type": "uint32", "access": "RW"},
    {"name": "kWh per pulse, output 2", "group": "Settings", "area": "holding", "address": "0x1022", "type": "uint32", "access": "RW"},
    {"name": "Tariff management", "group": "Settings", "area": "holding", "address": "0x1101", "type": "uint16", "access": "RW", "enum": {"0": "Off", "1": "On"}},
    {"name": "Measurement mode", "group": "Settings", "area": "holding", "address": "0x1103", "type": "uint16", "access": "RW", "enum": {"0": "A (easy connection)", "1": "B (bidirectional)"}, "description": "Writable on non-MID (X) versions only"},
    {"name": "Tariff selection mode", "group": "Settings", "area": "holding", "address": "0x1200", "type": "uint16", "access": "RW", "enum": {"0": "Digital inputs", "1": "Serial"}},
    {"name": "Tariff via serial", "group": "Settings", "area": "holding", "address": "0x1201", "type": "uint16", "access": "RW", "enum": {"1": "Tariff 1", "2": "Tariff 2"}},
    {"name": "RS485 address", "group": "Settings", "area": "holding", "address": "0x2000", "type": "uint16", "access": "RW", "write_min": 1, "write_max": 247},
    {"name": "RS485 baud rate", "group": "Settings", "area": "holding", "address": "0x2001", "type": "uint16", "access": "RW", "enum": {"1": "9600", "2": "19200", "3": "38400", "4": "57600", "5": "115200"}},
    {"name": "RS485 parity", "group": "Settings", "area": "holding", "address": "0x2002", "type": "uint16", "access": "RW", "enum": {"1": "None", "2": "Even"}},
    {"name": "RS485 stop bits", "group": "Settings", "area": "holding", "address": "0x2003", "type": "uint16", "access": "RW", "enum": {"1": "1", "2": "2"}, "description": "2 only with no parity"},
    {"name": "Max words per read", "group": "Settings", "area": "holding", "address": "0x2004", "type": "uint16", "access": "R"},
    {"name": "Reset partial and tariff meters and demand", "group": "Commands", "area": "holding", "address": "0x4000", "type": "uint16", "access": "W", "enum": {"1": "Execute"}},
    {"name": "Reset total energy meters", "group": "Commands", "area": "holding", "address": "0x4001", "type": "uint16", "access": "W", "enum": {"1": "Execute"}, "description": "Non-MID (X) versions only"},
    {"name": "Reset hour counter", "group": "Commands", "area": "holding", "address": "0x4002", "type": "uint16", "access": "W", "enum": {"1": "Execute"}}
  ]
}
