{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Lovato Electric",
  "model": "DMG110",
  "models": [
    "DMG110"
  ],
  "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), see identify: type code 0x51 = DMG110.",
    "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 DMG110 (Report Slave ID type code 0x51, software revision 1, hardware revision 0, parameter revision 3) read over a Modbus TCP gateway, November 2026: all 55 registers read without errors. Checked: voltages, currents, power, power factor, THD, neutral current, asymmetry, the 64-bit energy counters, hour meters, phase sequence and the word order (big). Frequency read 50020, so its scale is 0.001 (50.02 Hz), not 0.01 as this map had before.",
    "On that meter Active power L1 and Power factor L1 read 0 while the total active power (941.7 W) is 267 W less than the sum of the three phases (1208.4 W), so a negative L1 power may be shown as 0. This was not confirmed."
  ],
  "protocol": "rtu",
  "unit_id": 1,
  "byte_order": "big",
  "word_order": "big",
  "address_base": 1,
  "x_status": "verified",
  "enums": {
    "type_codes": {"0x51": "DMG110"}
  },
  "identify": {
    "function": 17,
    "fields": [
      {"name": "Type", "offset": 0, "type": "uint8", "role": "model", "enum": "type_codes"},
      {"name": "Software revision", "offset": 1, "type": "uint8", "role": "firmware"},
      {"name": "Hardware revision", "offset": 2, "type": "uint8"},
      {"name": "Parameter revision", "offset": 3, "type": "uint8"}
    ]
  },
  "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.001, "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", "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": 8432, "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)"}
  ]
}
