{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "vendor": "Lovato Electric", "model": "DMG610 / DMG615 / DMG620", "models": [ "DMG610", "DMG615", "DMG620" ], "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.", "DMG610 and DMG615 have a built-in RS-485 port; DMG620 has Ethernet (Modbus TCP). DMG600 has no communication port.", "The model is reported by function 17 (Report Slave ID), see identify: type code 0x41 = DMG610 (read on a device), 0x57 = DMG620 (manual). The manual also lists a code for the DMG615, but the English text is cut off, so it is not given here.", "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 DMG610 (Report Slave ID type code 0x41, software revision 2, hardware revision 0, parameter revision 1) read over a Modbus TCP gateway, November 2026: all 54 registers read without errors. Checked: voltages, currents (current and power agree: 293284 VA / 231.15 V = 1268.8 A), power, power factor, THD, neutral current, asymmetry, the 64-bit energy counters, hour meters and the word order (big). Frequency read 50030, so its scale is 0.001 (50.03 Hz), not 0.01 as this map had before." ], "protocol": "tcp+rtu", "unit_id": 1, "byte_order": "big", "word_order": "big", "address_base": 1, "x_status": "verified", "enums": { "type_codes": {"0x41": "DMG610", "0x57": "DMG620"} }, "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"}, {"name": "Exported active energy", "group": "Energy", "area": "holding", "address": 6948, "type": "uint64", "scale": 0.01, "unit": "kWh"}, {"name": "Imported reactive energy", "group": "Energy", "area": "holding", "address": 6952, "type": "uint64", "scale": 0.01, "unit": "kvarh"}, {"name": "Exported reactive energy", "group": "Energy", "area": "holding", "address": 6956, "type": "uint64", "scale": 0.01, "unit": "kvarh"}, {"name": "Apparent energy", "group": "Energy", "area": "holding", "address": 6960, "type": "uint64", "scale": 0.01, "unit": "kVAh"}, {"name": "Partial imported active energy", "group": "Energy", "area": "holding", "address": 6964, "type": "uint64", "scale": 0.01, "unit": "kWh"}, {"name": "Partial exported active energy", "group": "Energy", "area": "holding", "address": 6968, "type": "uint64", "scale": 0.01, "unit": "kWh"}, {"name": "Partial imported reactive energy", "group": "Energy", "area": "holding", "address": 6972, "type": "uint64", "scale": 0.01, "unit": "kvarh"}, {"name": "Partial exported reactive energy", "group": "Energy", "area": "holding", "address": 6976, "type": "uint64", "scale": 0.01, "unit": "kvarh"}, {"name": "Partial apparent energy", "group": "Energy", "area": "holding", "address": 6980, "type": "uint64", "scale": 0.01, "unit": "kVAh"}, {"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": "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", "6": "Reset alarms", "7": "Reset limits", "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)"} ] }