{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Carlo Gavazzi",
  "model": "ET330",
  "models": ["ET330"],
  "vendor_website": "gavazziautomation.com",
  "description": "Three-phase bidirectional energy meter with CT connection (DIN rail), RS485 Modbus RTU",
  "revision": 2,
  "revised": "2026-10-17",
  "source": "Carlo Gavazzi, \"EM300 Series and ET300 Series Communication Protocol\", version 2 revision 17 (2021-07-05)",
  "sources": [{"title": "EM300 Series and ET300 Series Communication Protocol", "version": "Version 2 Revision 17", "date": "2021-07-05", "url": "https://www.gavazziautomation.com/fileadmin/images/PIM/OTHERSTUFF/COMPRO/EM330_EM340_ET330_ET340_CP.pdf"}],
  "notes": [
    "One protocol document covers EM330, EM340, ET330 and ET340; registers marked ET series or EM330 are not on the other models.",
    "FC03 or FC04 read (the same values), FC06 writes one register; at most 50 registers per read.",
    "32- and 64-bit values are low word first (bytes high first in each word).",
    "Overflow (EEE on the display) reads 7FFFFFFFh in the variable.",
    "The high-resolution energy registers from 0x0500 are only on EM330 made from October 2018; EM340 from that date has integer and decimal parts at 0x0400 (not in this map)."
  ],
  "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": "Carlo Gavazzi identification code", "group": "Identity", "area": "input", "address": "0x000B", "type": "uint16", "access": "R", "enum": {"335": "ET330", "336": "ET330"}, "role": "model", "description": "Read alone, one word at a time: the same address is the high word of V L3-L1"},
    {"name": "V L1-N", "group": "Measurements", "area": "input", "address": "0x0000", "type": "int32", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "V L2-N", "group": "Measurements", "area": "input", "address": "0x0002", "type": "int32", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "V L3-N", "group": "Measurements", "area": "input", "address": "0x0004", "type": "int32", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "V L1-L2", "group": "Measurements", "area": "input", "address": "0x0006", "type": "int32", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "V L2-L3", "group": "Measurements", "area": "input", "address": "0x0008", "type": "int32", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "V L3-L1", "group": "Measurements", "area": "input", "address": "0x000A", "type": "int32", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "A L1", "group": "Measurements", "area": "input", "address": "0x000C", "type": "int32", "scale": 0.001, "unit": "A", "access": "R"},
    {"name": "A L2", "group": "Measurements", "area": "input", "address": "0x000E", "type": "int32", "scale": 0.001, "unit": "A", "access": "R"},
    {"name": "A L3", "group": "Measurements", "area": "input", "address": "0x0010", "type": "int32", "scale": 0.001, "unit": "A", "access": "R"},
    {"name": "W L1", "group": "Measurements", "area": "input", "address": "0x0012", "type": "int32", "scale": 0.1, "unit": "W", "access": "R"},
    {"name": "W L2", "group": "Measurements", "area": "input", "address": "0x0014", "type": "int32", "scale": 0.1, "unit": "W", "access": "R"},
    {"name": "W L3", "group": "Measurements", "area": "input", "address": "0x0016", "type": "int32", "scale": 0.1, "unit": "W", "access": "R"},
    {"name": "VA L1", "group": "Measurements", "area": "input", "address": "0x0018", "type": "int32", "scale": 0.1, "unit": "VA", "access": "R"},
    {"name": "VA L2", "group": "Measurements", "area": "input", "address": "0x001A", "type": "int32", "scale": 0.1, "unit": "VA", "access": "R"},
    {"name": "VA L3", "group": "Measurements", "area": "input", "address": "0x001C", "type": "int32", "scale": 0.1, "unit": "VA", "access": "R"},
    {"name": "var L1", "group": "Measurements", "area": "input", "address": "0x001E", "type": "int32", "scale": 0.1, "unit": "var", "access": "R"},
    {"name": "var L2", "group": "Measurements", "area": "input", "address": "0x0020", "type": "int32", "scale": 0.1, "unit": "var", "access": "R"},
    {"name": "var L3", "group": "Measurements", "area": "input", "address": "0x0022", "type": "int32", "scale": 0.1, "unit": "var", "access": "R"},
    {"name": "V L-N system", "group": "Measurements", "area": "input", "address": "0x0024", "type": "int32", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "V L-L system", "group": "Measurements", "area": "input", "address": "0x0026", "type": "int32", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "W system", "group": "Measurements", "area": "input", "address": "0x0028", "type": "int32", "scale": 0.1, "unit": "W", "access": "R"},
    {"name": "VA system", "group": "Measurements", "area": "input", "address": "0x002A", "type": "int32", "scale": 0.1, "unit": "VA", "access": "R"},
    {"name": "var system", "group": "Measurements", "area": "input", "address": "0x002C", "type": "int32", "scale": 0.1, "unit": "var", "access": "R"},
    {"name": "PF L1", "group": "Measurements", "area": "input", "address": "0x002E", "type": "int16", "scale": 0.001, "access": "R", "description": "Negative = exported active power"},
    {"name": "PF L2", "group": "Measurements", "area": "input", "address": "0x002F", "type": "int16", "scale": 0.001, "access": "R", "description": "Negative = exported active power"},
    {"name": "PF L3", "group": "Measurements", "area": "input", "address": "0x0030", "type": "int16", "scale": 0.001, "access": "R", "description": "Negative = exported active power"},
    {"name": "PF system", "group": "Measurements", "area": "input", "address": "0x0031", "type": "int16", "scale": 0.001, "access": "R", "description": "Negative = exported active power"},
    {"name": "Phase sequence", "group": "Measurements", "area": "input", "address": "0x0032", "type": "int16", "access": "R", "enum": {"0": "L1-L2-L3", "1": "L1-L3-L2"}},
    {"name": "Hz", "group": "Measurements", "area": "input", "address": "0x0033", "type": "int16", "scale": 0.1, "unit": "Hz", "access": "R"},
    {"name": "kWh import total", "group": "Measurements", "area": "input", "address": "0x0034", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R"},
    {"name": "kvarh import total", "group": "Measurements", "area": "input", "address": "0x0036", "type": "int32", "scale": 0.1, "unit": "kvarh", "access": "R"},
    {"name": "W demand", "group": "Measurements", "area": "input", "address": "0x0038", "type": "int32", "scale": 0.1, "unit": "W", "access": "R"},
    {"name": "W demand peak", "group": "Measurements", "area": "input", "address": "0x003A", "type": "int32", "scale": 0.1, "unit": "W", "access": "R"},
    {"name": "kWh import partial", "group": "Measurements", "area": "input", "address": "0x003C", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R"},
    {"name": "kvarh import partial", "group": "Measurements", "area": "input", "address": "0x003E", "type": "int32", "scale": 0.1, "unit": "kvarh", "access": "R"},
    {"name": "kWh import L1", "group": "Measurements", "area": "input", "address": "0x0040", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R"},
    {"name": "kWh import L2", "group": "Measurements", "area": "input", "address": "0x0042", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R"},
    {"name": "kWh import L3", "group": "Measurements", "area": "input", "address": "0x0044", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R"},
    {"name": "kWh import tariff 1", "group": "Measurements", "area": "input", "address": "0x0046", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R"},
    {"name": "kWh import tariff 2", "group": "Measurements", "area": "input", "address": "0x0048", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R"},
    {"name": "kWh export total", "group": "Measurements", "area": "input", "address": "0x004E", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R"},
    {"name": "kvarh export total", "group": "Measurements", "area": "input", "address": "0x0050", "type": "int32", "scale": 0.1, "unit": "kvarh", "access": "R"},
    {"name": "kWh export L1", "group": "Measurements", "area": "input", "address": "0x0060", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R", "description": "ET series only"},
    {"name": "kWh export L2", "group": "Measurements", "area": "input", "address": "0x0062", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R", "description": "ET series only"},
    {"name": "kWh export L3", "group": "Measurements", "area": "input", "address": "0x0064", "type": "int32", "scale": 0.1, "unit": "kWh", "access": "R", "description": "ET series only"},
    {"name": "THD A L1", "group": "Measurements", "area": "input", "address": "0x0082", "type": "int32", "scale": 0.01, "unit": "%", "access": "R"},
    {"name": "THD A L2", "group": "Measurements", "area": "input", "address": "0x0084", "type": "int32", "scale": 0.01, "unit": "%", "access": "R"},
    {"name": "THD A L3", "group": "Measurements", "area": "input", "address": "0x0086", "type": "int32", "scale": 0.01, "unit": "%", "access": "R"},
    {"name": "THD V L-N system", "group": "Measurements", "area": "input", "address": "0x0088", "type": "int32", "scale": 0.01, "unit": "%", "access": "R"},
    {"name": "THD V L1-N", "group": "Measurements", "area": "input", "address": "0x008A", "type": "int32", "scale": 0.01, "unit": "%", "access": "R"},
    {"name": "THD V L2-N", "group": "Measurements", "area": "input", "address": "0x008C", "type": "int32", "scale": 0.01, "unit": "%", "access": "R"},
    {"name": "THD V L3-N", "group": "Measurements", "area": "input", "address": "0x008E", "type": "int32", "scale": 0.01, "unit": "%", "access": "R"},
    {"name": "An", "group": "Measurements", "area": "input", "address": "0x0098", "type": "int32", "scale": 0.001, "unit": "A", "access": "R", "description": "ET series and EM330"},
    {"name": "kWh import total (high resolution)", "group": "Energy (high resolution)", "area": "input", "address": "0x0500", "type": "int64", "access": "R", "description": "kWh; EM330 made from October 2018; the protocol gives no value weight"},
    {"name": "kvarh import total (high resolution)", "group": "Energy (high resolution)", "area": "input", "address": "0x0504", "type": "int64", "access": "R", "description": "kvarh"},
    {"name": "kWh import partial (high resolution)", "group": "Energy (high resolution)", "area": "input", "address": "0x0508", "type": "int64", "access": "R", "description": "kWh"},
    {"name": "kvarh import partial (high resolution)", "group": "Energy (high resolution)", "area": "input", "address": "0x050C", "type": "int64", "access": "R", "description": "kvarh"},
    {"name": "kWh import L1 (high resolution)", "group": "Energy (high resolution)", "area": "input", "address": "0x0510", "type": "int64", "access": "R", "description": "kWh"},
    {"name": "kWh import L2 (high resolution)", "group": "Energy (high resolution)", "area": "input", "address": "0x0514", "type": "int64", "access": "R", "description": "kWh"},
    {"name": "kWh import L3 (high resolution)", "group": "Energy (high resolution)", "area": "input", "address": "0x0518", "type": "int64", "access": "R", "description": "kWh"},
    {"name": "kWh export total (high resolution)", "group": "Energy (high resolution)", "area": "input", "address": "0x051C", "type": "int64", "access": "R", "description": "kWh"},
    {"name": "kWh export partial (high resolution)", "group": "Energy (high resolution)", "area": "input", "address": "0x0520", "type": "int64", "access": "R", "description": "kWh"},
    {"name": "kvarh export total (high resolution)", "group": "Energy (high resolution)", "area": "input", "address": "0x0524", "type": "int64", "access": "R", "description": "kvarh"},
    {"name": "kvarh export partial (high resolution)", "group": "Energy (high resolution)", "area": "input", "address": "0x0528", "type": "int64", "access": "R", "description": "kvarh"},
    {"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": "Password", "group": "Settings", "area": "holding", "address": "0x1000", "type": "uint16", "access": "RW", "write_min": 0, "write_max": 9999, "description": "EM only; always 0 on ET"},
    {"name": "Measuring system", "group": "Settings", "area": "holding", "address": "0x1002", "type": "uint16", "access": "RW", "enum": {"0": "3Pn", "1": "3P", "2": "2P"}},
    {"name": "CT ratio", "group": "Settings", "area": "holding", "address": "0x1003", "type": "uint32", "scale": 0.1, "access": "RW", "write_min": 1, "write_max": 1000, "description": "(CT ratio)×(VT ratio) is at most 1057 on AV5 and 3418 on AV6"},
    {"name": "VT ratio", "group": "Settings", "area": "holding", "address": "0x1005", "type": "uint32", "scale": 0.1, "access": "RW", "write_min": 1, "write_max": 1000},
    {"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": "Display mode", "group": "Settings", "area": "holding", "address": "0x1100", "type": "uint16", "access": "RW", "enum": {"0": "Full", "1": "Easy"}},
    {"name": "Tariff management", "group": "Settings", "area": "holding", "address": "0x1101", "type": "uint16", "access": "RW", "enum": {"0": "Off", "1": "On"}},
    {"name": "Home page", "group": "Settings", "area": "holding", "address": "0x1102", "type": "uint16", "access": "RW", "write_min": 0, "write_max": 19, "description": "EM only; not changeable on MID versions"},
    {"name": "Measurement mode", "group": "Settings", "area": "holding", "address": "0x1103", "type": "uint16", "access": "RW", "enum": {"0": "A (easy connection)", "1": "B (bidirectional)"}},
    {"name": "Wrong connection help", "group": "Settings", "area": "holding", "address": "0x1104", "type": "uint16", "access": "RW", "enum": {"0": "On", "1": "Off"}},
    {"name": "Wiring: wrong voltage sequence", "group": "Wiring check", "area": "holding", "address": "0x1105", "type": "bool", "bit": 0, "access": "R"},
    {"name": "Wiring: phase 1 inverted", "group": "Wiring check", "area": "holding", "address": "0x1105", "type": "bool", "bit": 1, "access": "R"},
    {"name": "Wiring: phase 2 inverted", "group": "Wiring check", "area": "holding", "address": "0x1105", "type": "bool", "bit": 2, "access": "R"},
    {"name": "Wiring: phase 3 inverted", "group": "Wiring check", "area": "holding", "address": "0x1105", "type": "bool", "bit": 3, "access": "R"},
    {"name": "Wiring: phases 1 and 2 exchanged", "group": "Wiring check", "area": "holding", "address": "0x1105", "type": "bool", "bit": 4, "access": "R"},
    {"name": "Wiring: phases 1 and 3 exchanged", "group": "Wiring check", "area": "holding", "address": "0x1105", "type": "bool", "bit": 5, "access": "R"},
    {"name": "Wiring: phases 2 and 3 exchanged", "group": "Wiring check", "area": "holding", "address": "0x1105", "type": "bool", "bit": 6, "access": "R"},
    {"name": "Wiring: phases 1, 2, 3 exchanged", "group": "Wiring check", "area": "holding", "address": "0x1105", "type": "bool", "bit": 7, "access": "R"},
    {"name": "THD calculation", "group": "Settings", "area": "holding", "address": "0x1106", "type": "uint16", "access": "RW", "enum": {"0": "Off", "1": "On"}, "description": "ET series and EM330"},
    {"name": "Run hour meter start current", "group": "Settings", "area": "holding", "address": "0x1107", "type": "uint32", "scale": 0.001, "unit": "A", "access": "RW", "write_min": 0.01, "write_max": 6, "description": "Secondary current; ET series and EM330"},
    {"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": {"0": "1", "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 run hour meter", "group": "Commands", "area": "holding", "address": "0x4002", "type": "uint16", "access": "W", "enum": {"1": "Execute"}, "description": "ET series and EM330"},
    {"name": "Serial number character 1", "group": "Identity", "area": "input", "address": "0x5000", "type": "uint16", "bit": 0, "bits": 8, "access": "R", "description": "ASCII code in the low byte"},
    {"name": "Serial number character 2", "group": "Identity", "area": "input", "address": "0x5001", "type": "uint16", "bit": 0, "bits": 8, "access": "R"},
    {"name": "Serial number character 3", "group": "Identity", "area": "input", "address": "0x5002", "type": "uint16", "bit": 0, "bits": 8, "access": "R"},
    {"name": "Serial number character 4", "group": "Identity", "area": "input", "address": "0x5003", "type": "uint16", "bit": 0, "bits": 8, "access": "R"},
    {"name": "Serial number character 5", "group": "Identity", "area": "input", "address": "0x5004", "type": "uint16", "bit": 0, "bits": 8, "access": "R"},
    {"name": "Serial number character 6", "group": "Identity", "area": "input", "address": "0x5005", "type": "uint16", "bit": 0, "bits": 8, "access": "R"},
    {"name": "Serial number character 7", "group": "Identity", "area": "input", "address": "0x5006", "type": "uint16", "bit": 0, "bits": 8, "access": "R"}
  ]
}
