{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Carlo Gavazzi",
  "model": "EM111",
  "models": ["EM111"],
  "vendor_website": "gavazziautomation.com",
  "description": "Single-phase energy meter, direct connection (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": 50,
  "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 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": "Active energy import integer part", "group": "Energy (high resolution)", "area": "input", "address": "0x0400", "type": "int32", "unit": "kWh", "access": "R", "description": "From firmware b.10 (made from 2020); add the decimal part"},
    {"name": "Active energy import decimal part", "group": "Energy (high resolution)", "area": "input", "address": "0x0402", "type": "int32", "scale": 0.001, "unit": "kWh", "access": "R"},
    {"name": "Reactive energy import integer part", "group": "Energy (high resolution)", "area": "input", "address": "0x0404", "type": "int32", "unit": "kvarh", "access": "R"},
    {"name": "Reactive energy import decimal part", "group": "Energy (high resolution)", "area": "input", "address": "0x0406", "type": "int32", "scale": 0.001, "unit": "kvarh", "access": "R"},
    {"name": "Active energy export integer part", "group": "Energy (high resolution)", "area": "input", "address": "0x0408", "type": "int32", "unit": "kWh", "access": "R"},
    {"name": "Active energy export decimal part", "group": "Energy (high resolution)", "area": "input", "address": "0x040A", "type": "int32", "scale": 0.001, "unit": "kWh", "access": "R"},
    {"name": "Reactive energy export integer part", "group": "Energy (high resolution)", "area": "input", "address": "0x040C", "type": "int32", "unit": "kvarh", "access": "R"},
    {"name": "Reactive energy export decimal part", "group": "Energy (high resolution)", "area": "input", "address": "0x040E", "type": "int32", "scale": 0.001, "unit": "kvarh", "access": "R"},
    {"name": "Active energy import (64-bit)", "group": "Energy (high resolution)", "area": "input", "address": "0x0500", "type": "int64", "access": "R", "description": "From firmware b.10; the protocol gives no value weight"},
    {"name": "Reactive energy import (64-bit)", "group": "Energy (high resolution)", "area": "input", "address": "0x0504", "type": "int64", "access": "R"},
    {"name": "Active energy import partial (64-bit)", "group": "Energy (high resolution)", "area": "input", "address": "0x0508", "type": "int64", "access": "R"},
    {"name": "Reactive energy import partial (64-bit)", "group": "Energy (high resolution)", "area": "input", "address": "0x050C", "type": "int64", "access": "R"},
    {"name": "Active energy export (64-bit)", "group": "Energy (high resolution)", "area": "input", "address": "0x051C", "type": "int64", "access": "R"},
    {"name": "Active energy export partial (64-bit)", "group": "Energy (high resolution)", "area": "input", "address": "0x0520", "type": "int64", "access": "R"},
    {"name": "Reactive energy export (64-bit)", "group": "Energy (high resolution)", "area": "input", "address": "0x0524", "type": "int64", "access": "R"},
    {"name": "Reactive energy export partial (64-bit)", "group": "Energy (high resolution)", "area": "input", "address": "0x0528", "type": "int64", "access": "R"},
    {"name": "Carlo Gavazzi identification code", "group": "Identity", "area": "input", "address": "0x000B", "type": "uint16", "access": "R", "enum": {"103": "EM111", "101": "EM111", "114": "EM111"}, "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": "Production year", "group": "Identity", "area": "input", "address": "0x5010", "type": "uint16", "access": "R", "description": "Made from October 2018"},
    {"name": "Password", "group": "Settings", "area": "holding", "address": "0x1000", "type": "uint16", "access": "RW", "write_min": 0, "write_max": 9999},
    {"name": "Measuring system", "group": "Settings", "area": "holding", "address": "0x1002", "type": "uint16", "access": "R", "enum": {"0": "1P"}},
    {"name": "CT ratio", "group": "Settings", "area": "holding", "address": "0x1003", "type": "uint32", "scale": 0.1, "access": "RW", "write_min": 1, "write_max": 60, "description": "EM111 AV5 only"},
    {"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": "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"}
  ]
}
