{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Lovato Electric",
  "model": "DMG210",
  "models": [
    "DMG210"
  ],
  "vendor_website": "lovatoelectric.com",
  "description": "Digital multimeter",
  "revision": 3,
  "revised": "2026-11-10",
  "source": "Lovato Electric, DMG series Modbus communication protocol, I317 I GB 02_22",
  "sources": [
    {
      "title": "DMG series - Modbus communication protocol",
      "version": "I317 I GB 02_22",
      "date": "2022-02-07",
      "url": "https://catalogue.lovatoelectric.com/gb_en/Product/GetDocument?doc=Technical%5CTechInstructions%5C28.%20CONTATORI%20DI%20ENERGIA%20E%20ANALIZZATORI%20DI%20RETE%5CI317IGB02_22.pdf",
      "note": "tables 2 and 3"
    }
  ],
  "notes": [
    "Addresses are those of the manual; the address sent in the request is one less (address_base 1).",
    "Function 03 and 04 both read the measurements. 32- and 64-bit values are sent high word first.",
    "The model is reported by function 17 (Report Slave ID): type code 0x79.",
    "Max (HI), min (LO), average and max demand values, harmonics, I/O and setup parameters (tables 4-8 of the manual) are not listed here.",
    "Tested on a DMG210 read over a Modbus TCP gateway, November 2026: all 65 registers read without errors. Checked: voltages, currents, power, power factor, THD, neutral current, asymmetry, the 32-bit and 64-bit energy counters (same values), hour meters, phase sequence and the word order (big). Frequency read 5003, so its scale is 0.01 (50.03 Hz), not 0.001 as this map had before."
  ],
  "protocol": "rtu",
  "unit_id": 1,
  "byte_order": "big",
  "word_order": "big",
  "address_base": 1,
  "x_status": "verified",
  "registers": [
    {"name": "Voltage L1-N", "group": "Measurements", "area": "holding", "address": 2, "type": "uint32", "scale": 0.01, "unit": "V"},
    {"name": "Voltage L2-N", "group": "Measurements", "area": "holding", "address": 4, "type": "uint32", "scale": 0.01, "unit": "V"},
    {"name": "Voltage L3-N", "group": "Measurements", "area": "holding", "address": 6, "type": "uint32", "scale": 0.01, "unit": "V"},
    {"name": "Current L1", "group": "Measurements", "area": "holding", "address": 8, "type": "uint32", "scale": 0.0001, "unit": "A"},
    {"name": "Current L2", "group": "Measurements", "area": "holding", "address": 10, "type": "uint32", "scale": 0.0001, "unit": "A"},
    {"name": "Current L3", "group": "Measurements", "area": "holding", "address": 12, "type": "uint32", "scale": 0.0001, "unit": "A"},
    {"name": "Voltage L1-L2", "group": "Measurements", "area": "holding", "address": 14, "type": "uint32", "scale": 0.01, "unit": "V"},
    {"name": "Voltage L2-L3", "group": "Measurements", "area": "holding", "address": 16, "type": "uint32", "scale": 0.01, "unit": "V"},
    {"name": "Voltage L3-L1", "group": "Measurements", "area": "holding", "address": 18, "type": "uint32", "scale": 0.01, "unit": "V"},
    {"name": "Active power L1", "group": "Measurements", "area": "holding", "address": 20, "type": "int32", "scale": 0.01, "unit": "W"},
    {"name": "Active power L2", "group": "Measurements", "area": "holding", "address": 22, "type": "int32", "scale": 0.01, "unit": "W"},
    {"name": "Active power L3", "group": "Measurements", "area": "holding", "address": 24, "type": "int32", "scale": 0.01, "unit": "W"},
    {"name": "Reactive power L1", "group": "Measurements", "area": "holding", "address": 26, "type": "int32", "scale": 0.01, "unit": "var"},
    {"name": "Reactive power L2", "group": "Measurements", "area": "holding", "address": 28, "type": "int32", "scale": 0.01, "unit": "var"},
    {"name": "Reactive power L3", "group": "Measurements", "area": "holding", "address": 30, "type": "int32", "scale": 0.01, "unit": "var"},
    {"name": "Apparent power L1", "group": "Measurements", "area": "holding", "address": 32, "type": "uint32", "scale": 0.01, "unit": "VA"},
    {"name": "Apparent power L2", "group": "Measurements", "area": "holding", "address": 34, "type": "uint32", "scale": 0.01, "unit": "VA"},
    {"name": "Apparent power L3", "group": "Measurements", "area": "holding", "address": 36, "type": "uint32", "scale": 0.01, "unit": "VA"},
    {"name": "Power factor L1", "group": "Measurements", "area": "holding", "address": 38, "type": "int32", "scale": 0.0001},
    {"name": "Power factor L2", "group": "Measurements", "area": "holding", "address": 40, "type": "int32", "scale": 0.0001},
    {"name": "Power factor L3", "group": "Measurements", "area": "holding", "address": 42, "type": "int32", "scale": 0.0001},
    {"name": "Frequency", "group": "Measurements", "area": "holding", "address": 50, "type": "uint32", "scale": 0.01, "unit": "Hz"},
    {"name": "Equivalent phase voltage", "group": "Measurements", "area": "holding", "address": 52, "type": "uint32", "scale": 0.01, "unit": "V"},
    {"name": "Equivalent line voltage", "group": "Measurements", "area": "holding", "address": 54, "type": "uint32", "scale": 0.01, "unit": "V"},
    {"name": "Equivalent current", "group": "Measurements", "area": "holding", "address": 56, "type": "uint32", "scale": 0.0001, "unit": "A"},
    {"name": "Total active power", "group": "Measurements", "area": "holding", "address": 58, "type": "int32", "scale": 0.01, "unit": "W"},
    {"name": "Total reactive power", "group": "Measurements", "area": "holding", "address": 60, "type": "int32", "scale": 0.01, "unit": "var"},
    {"name": "Total apparent power", "group": "Measurements", "area": "holding", "address": 62, "type": "uint32", "scale": 0.01, "unit": "VA"},
    {"name": "Total power factor", "group": "Measurements", "area": "holding", "address": 64, "type": "int32", "scale": 0.0001},
    {"name": "Line voltage asymmetry", "group": "Measurements", "area": "holding", "address": 66, "type": "uint32", "scale": 0.01, "unit": "%"},
    {"name": "Phase voltage asymmetry", "group": "Measurements", "area": "holding", "address": 68, "type": "uint32", "scale": 0.01, "unit": "%"},
    {"name": "Current asymmetry", "group": "Measurements", "area": "holding", "address": 70, "type": "uint32", "scale": 0.01, "unit": "%"},
    {"name": "Neutral current", "group": "Measurements", "area": "holding", "address": 72, "type": "uint32", "scale": 0.0001, "unit": "A"},
    {"name": "THD voltage L1", "group": "Measurements", "area": "holding", "address": 84, "type": "uint32", "scale": 0.01, "unit": "%"},
    {"name": "THD voltage L2", "group": "Measurements", "area": "holding", "address": 86, "type": "uint32", "scale": 0.01, "unit": "%"},
    {"name": "THD voltage L3", "group": "Measurements", "area": "holding", "address": 88, "type": "uint32", "scale": 0.01, "unit": "%"},
    {"name": "THD current L1", "group": "Measurements", "area": "holding", "address": 90, "type": "uint32", "scale": 0.01, "unit": "%"},
    {"name": "THD current L2", "group": "Measurements", "area": "holding", "address": 92, "type": "uint32", "scale": 0.01, "unit": "%"},
    {"name": "THD current L3", "group": "Measurements", "area": "holding", "address": 94, "type": "uint32", "scale": 0.01, "unit": "%"},
    {"name": "THD voltage L1-L2", "group": "Measurements", "area": "holding", "address": 96, "type": "uint32", "scale": 0.01, "unit": "%"},
    {"name": "THD voltage L2-L3", "group": "Measurements", "area": "holding", "address": 98, "type": "uint32", "scale": 0.01, "unit": "%"},
    {"name": "THD voltage L3-L1", "group": "Measurements", "area": "holding", "address": 100, "type": "uint32", "scale": 0.01, "unit": "%"},
    {"name": "Imported active energy (32-bit)", "group": "Energy", "area": "holding", "address": 6688, "type": "uint32", "scale": 0.01, "unit": "kWh", "description": "Rolls over after 19 999 999.99"},
    {"name": "Exported active energy (32-bit)", "group": "Energy", "area": "holding", "address": 6690, "type": "uint32", "scale": 0.01, "unit": "kWh", "description": "Rolls over after 19 999 999.99"},
    {"name": "Imported reactive energy (32-bit)", "group": "Energy", "area": "holding", "address": 6692, "type": "uint32", "scale": 0.01, "unit": "kvarh", "description": "Rolls over after 19 999 999.99"},
    {"name": "Exported reactive energy (32-bit)", "group": "Energy", "area": "holding", "address": 6694, "type": "uint32", "scale": 0.01, "unit": "kvarh", "description": "Rolls over after 19 999 999.99"},
    {"name": "Apparent energy (32-bit)", "group": "Energy", "area": "holding", "address": 6696, "type": "uint32", "scale": 0.01, "unit": "kVAh", "description": "Rolls over after 19 999 999.99"},
    {"name": "Partial imported active energy (32-bit)", "group": "Energy", "area": "holding", "address": 6698, "type": "uint32", "scale": 0.01, "unit": "kWh", "description": "Rolls over after 19 999 999.99"},
    {"name": "Partial exported active energy (32-bit)", "group": "Energy", "area": "holding", "address": 6700, "type": "uint32", "scale": 0.01, "unit": "kWh", "description": "Rolls over after 19 999 999.99"},
    {"name": "Partial imported reactive energy (32-bit)", "group": "Energy", "area": "holding", "address": 6702, "type": "uint32", "scale": 0.01, "unit": "kvarh", "description": "Rolls over after 19 999 999.99"},
    {"name": "Partial exported reactive energy (32-bit)", "group": "Energy", "area": "holding", "address": 6704, "type": "uint32", "scale": 0.01, "unit": "kvarh", "description": "Rolls over after 19 999 999.99"},
    {"name": "Partial apparent energy (32-bit)", "group": "Energy", "area": "holding", "address": 6706, "type": "uint32", "scale": 0.01, "unit": "kVAh", "description": "Rolls over after 19 999 999.99"},
    {"name": "Imported active energy", "group": "Energy", "area": "holding", "address": 6944, "type": "uint64", "scale": 0.01, "unit": "kWh", "description": "64-bit counter from software revision 07; older revisions roll over like the 32-bit counters"},
    {"name": "Exported active energy", "group": "Energy", "area": "holding", "address": 6948, "type": "uint64", "scale": 0.01, "unit": "kWh", "description": "64-bit counter from software revision 07; older revisions roll over like the 32-bit counters"},
    {"name": "Imported reactive energy", "group": "Energy", "area": "holding", "address": 6952, "type": "uint64", "scale": 0.01, "unit": "kvarh", "description": "64-bit counter from software revision 07; older revisions roll over like the 32-bit counters"},
    {"name": "Exported reactive energy", "group": "Energy", "area": "holding", "address": 6956, "type": "uint64", "scale": 0.01, "unit": "kvarh", "description": "64-bit counter from software revision 07; older revisions roll over like the 32-bit counters"},
    {"name": "Apparent energy", "group": "Energy", "area": "holding", "address": 6960, "type": "uint64", "scale": 0.01, "unit": "kVAh", "description": "64-bit counter from software revision 07; older revisions roll over like the 32-bit counters"},
    {"name": "Partial imported active energy", "group": "Energy", "area": "holding", "address": 6964, "type": "uint64", "scale": 0.01, "unit": "kWh", "description": "64-bit counter from software revision 07; older revisions roll over like the 32-bit counters"},
    {"name": "Partial exported active energy", "group": "Energy", "area": "holding", "address": 6968, "type": "uint64", "scale": 0.01, "unit": "kWh", "description": "64-bit counter from software revision 07; older revisions roll over like the 32-bit counters"},
    {"name": "Partial imported reactive energy", "group": "Energy", "area": "holding", "address": 6972, "type": "uint64", "scale": 0.01, "unit": "kvarh", "description": "64-bit counter from software revision 07; older revisions roll over like the 32-bit counters"},
    {"name": "Partial exported reactive energy", "group": "Energy", "area": "holding", "address": 6976, "type": "uint64", "scale": 0.01, "unit": "kvarh", "description": "64-bit counter from software revision 07; older revisions roll over like the 32-bit counters"},
    {"name": "Partial apparent energy", "group": "Energy", "area": "holding", "address": 6980, "type": "uint64", "scale": 0.01, "unit": "kVAh", "description": "64-bit counter from software revision 07; older revisions roll over like the 32-bit counters"},
    {"name": "Total hour meter", "group": "Hour meters", "area": "holding", "address": 7680, "type": "uint32", "unit": "s"},
    {"name": "Partial hour meter", "group": "Hour meters", "area": "holding", "address": 7682, "type": "uint32", "unit": "s"},
    {"name": "Phase sequence", "group": "Status", "area": "holding", "address": 8308, "type": "uint16", "enum": {"1": "Correct", "0": "Wrong"}},
    {"name": "System reboot", "group": "Commands", "area": "holding", "address": 12033, "type": "uint16", "access": "W", "write_min": 1, "write_max": 1, "description": "Write 1"},
    {"name": "Command", "group": "Commands", "area": "holding", "address": 12272, "type": "uint16", "access": "W", "enum": {"0": "Reset HI-LO values", "1": "Reset max demand", "2": "Reset partial energy", "3": "Reset partial hour meter", "11": "Reset all energy counters", "12": "Reset all hour meters", "13": "Parameters to default", "14": "Backup parameters", "15": "Restore parameters", "16": "Wiring test", "100": "Reset HI", "200": "Reset LO"}, "description": "Write with function 06; send a reboot after the parameter commands (13-15)"}
  ]
}
