{
 "manufacturer": "ABB",
 "manufacturer_slug": "abb",
 "model": "M4M 20 / M4M 30 network analyzer",
 "model_slug": "m4m-20-30",
 "short_model": "M4M 20/30",
 "aliases": [
  "M4M 20",
  "M4M 30",
  "M4M 20 Modbus",
  "M4M 30 Modbus",
  "M4M 20 Ethernet",
  "M4M 30 Ethernet",
  "M4M 20 I/O",
  "M4M 30 I/O",
  "M4M 2X",
  "M4M 30-M",
  "M4M 32"
 ],
 "equipment_type": "Power meter (network analyzer)",
 "applies_to": "ABB M4M 20 and M4M 30 network analyzers, Modbus RTU and Modbus TCP versions, map v1.3O; items marked M4M 30 only are absent on M4M 20.",
 "summary": "The M4M 20 and M4M 30 are ABB panel-mount network analyzers available with an RS-485 Modbus RTU or an Ethernet Modbus TCP port. All data sits in holding registers at hex addresses that are sent on the wire unchanged, with 64-bit energy and 32-bit instantaneous values high word first. This map covers total, tariff and per-phase energy, real-time electrical values, THD summaries, device info, transformer ratios and the RTU/TCP communication settings.",
 "transport": [
  "RTU",
  "TCP"
 ],
 "defaults": {
  "unit_id": null,
  "baud": null,
  "parity": null,
  "data_bits": null,
  "stop_bits": null,
  "tcp_port": 502
 },
 "addressing": {
  "convention": "hex 0-based",
  "note": "The map gives each start register in hex (and decimal) exactly as sent on the bus; 5B02 is wire address 0x5B02 = 23298. The manual's example frame reads phase voltage L1 at 0x5B02 with function 3."
 },
 "default_word_order": "ABCD",
 "firmware": "Map v1.3O (2023-10-23); some registers need FW P1.3.10.0 or later",
 "source": {
  "title": "M4M Modbus protocol map (Modbus mapping table workbook)",
  "doc_number": "9AKK107492A7627, map v1.3O",
  "revision_date": "2023-10-23",
  "url": "https://search.abb.com/library/Download.aspx?DocumentID=9AKK107492A7627&LanguageCode=en&DocumentPartId=&Action=Launch",
  "pages": "Sheet 'Mapping Table' rows 3-393; sheet 'Details' for product IDs and wiring codes"
 },
 "notes": [
  "Byte/word order and addressing rules come from the companion 'Communication protocol - Modbus manual, M4M network analyzers' 2CSG445050D0201 v1.05 (https://search.abb.com/library/Download.aspx?DocumentID=2CSG445050D0201&LanguageCode=en&DocumentPartId=&Action=Launch), section 3: multi-register values are most significant byte first in the lowest register (ABCD).",
  "Only function codes 3, 6 and 16 are supported. Readable range per the manual is 0x1000-0x8EFF, 1-125 registers per read; quantities missing on a variant return FFFF (unsigned) or 7FFF... (signed) instead of an exception.",
  "Instantaneous power registers are signed 32-bit at 0.01 W, so they saturate near +/-21 MW. Map v1.3 added whole-watt ('Scaler 1') power registers from CB1Ah onward (real-time) and CC24h onward (max/min), available from FW P1.3.10.0; they are not included here.",
  "The map prints the apparent energy unit as 'kVA'; these are energy accumulators and are listed as kVAh.",
  "Left out: 5024/5034 (CO2 and currency equivalents of imported energy) because the map gives their unit as kg/kWh and Currency/kWh with 'conversion factor' wording, which leaves the meaning ambiguous.",
  "Left out: Error/Information/Warning/Alarm flag blocks (8A13-8A28, 64 bits each) whose bit meanings are not tabulated with the register rows; average/min/max values and their timestamps; individual harmonic orders; historical/log/load-profile header and data blocks; OBIS-coded alarm, pulse and tariff configuration groups; Slave ID (8911), Date Time (8A00) and Day of week (8A03), which have no plain data type in the map.",
  "Removed on verification: outputs 1-6 (6300h-6305h), input status 1-6 (6308h-630Dh), input counters 1-6 (6318h-632Ch), product type number ID (8910h) and LED source (8CE4h). The map leaves their Data Type cell empty and the companion Modbus manual (2CSG445050D0201, sections 11.1 and 14) does not state a type either, so they are not published. Bluetooth enable (8EFCh) is typed 'Unsigned' in the map and is kept.",
  "Unbalance registers 6200/6202 were swapped in map v1.3N; this file follows the v1.3O labels.",
  "Rows marked 'M4M 30 only' or 'I/O versions' return the invalid marker on other variants."
 ],
 "integration": {
  "summary": "Read holding registers with function 3 at the hex address from the map (for example 0x5B02 for phase voltage L1). Energy is 4 registers at 0.01 kWh; voltages, currents and powers are 2 registers, high word first.",
  "minimum_registers": [
   {
    "table": "holding_register",
    "address": 20480,
    "why": "Total active import energy"
   },
   {
    "table": "holding_register",
    "address": 20484,
    "why": "Total active export energy"
   },
   {
    "table": "holding_register",
    "address": 23298,
    "why": "Phase voltage L1"
   },
   {
    "table": "holding_register",
    "address": 23312,
    "why": "Current L1"
   },
   {
    "table": "holding_register",
    "address": 23322,
    "why": "Total active power"
   },
   {
    "table": "holding_register",
    "address": 23346,
    "why": "Frequency"
   },
   {
    "table": "holding_register",
    "address": 23360,
    "why": "Total power factor"
   },
   {
    "table": "holding_register",
    "address": 35168,
    "why": "Type designation (ASCII), confirms the variant"
   }
  ],
  "enable": "Modbus is built in on the Modbus RTU and Ethernet (Modbus TCP) versions; set address, baud rate and parity (RTU) or DHCP/IP/port (TCP) on the device or through registers 8CEB-8CF6.",
  "watchdog": null,
  "quirks": [
   "Hex wire addresses; no 40001 offset.",
   "Writes to unsupported but writable registers are not rejected; read back to confirm.",
   "Parity register encoding is 0 = odd, 1 = even, 2 = none.",
   "IP address, mask and gateway are packed into one UINT32 as 0xAABBCCDD."
  ],
  "setup": [
   "RTU: 3-wire RS-485 (A, B, common), line topology, 120 ohm termination at both ends, max 700 m.",
   "RTU address 1-247; baud 9600-115200.",
   "TCP: default port 502; the M4M 30 Ethernet has two RJ45 ports for daisy-chaining."
  ],
  "gotchas": [
   "Tariff energy, CT neutral ratio and unbalance exist only on M4M 30.",
   "CT ratio registers are not used on Rogowski versions."
  ]
 },
 "registers": [
  {
   "table": "holding_register",
   "address": 20480,
   "documented": "5000",
   "name": "Active energy import",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20484,
   "documented": "5004",
   "name": "Active energy export",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20488,
   "documented": "5008",
   "name": "Active energy net",
   "description": "Signed: import minus export.",
   "data_type": "INT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20492,
   "documented": "500C",
   "name": "Reactive energy import",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20496,
   "documented": "5010",
   "name": "Reactive energy export",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20500,
   "documented": "5014",
   "name": "Reactive energy net",
   "description": "Signed: import minus export.",
   "data_type": "INT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20504,
   "documented": "5018",
   "name": "Apparent energy import",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kVAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20508,
   "documented": "501C",
   "name": "Apparent energy export",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kVAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20512,
   "documented": "5020",
   "name": "Apparent energy net",
   "description": "Signed: import minus export.",
   "data_type": "INT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kVAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20848,
   "documented": "5170",
   "name": "Active energy import tariff 1",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20852,
   "documented": "5174",
   "name": "Active energy import tariff 2",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20856,
   "documented": "5178",
   "name": "Active energy import tariff 3",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20860,
   "documented": "517C",
   "name": "Active energy import tariff 4",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20864,
   "documented": "5180",
   "name": "Active energy import tariff 5",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20868,
   "documented": "5184",
   "name": "Active energy import tariff 6",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20880,
   "documented": "5190",
   "name": "Active energy export tariff 1",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20884,
   "documented": "5194",
   "name": "Active energy export tariff 2",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20888,
   "documented": "5198",
   "name": "Active energy export tariff 3",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20892,
   "documented": "519C",
   "name": "Active energy export tariff 4",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20896,
   "documented": "51A0",
   "name": "Active energy export tariff 5",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20900,
   "documented": "51A4",
   "name": "Active energy export tariff 6",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20912,
   "documented": "51B0",
   "name": "Reactive energy import tariff 1",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20916,
   "documented": "51B4",
   "name": "Reactive energy import tariff 2",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20920,
   "documented": "51B8",
   "name": "Reactive energy import tariff 3",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20924,
   "documented": "51BC",
   "name": "Reactive energy import tariff 4",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20928,
   "documented": "51C0",
   "name": "Reactive energy import tariff 5",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20932,
   "documented": "51C4",
   "name": "Reactive energy import tariff 6",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20944,
   "documented": "51D0",
   "name": "Reactive energy export tariff 1",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20948,
   "documented": "51D4",
   "name": "Reactive energy export tariff 2",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20952,
   "documented": "51D8",
   "name": "Reactive energy export tariff 3",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20956,
   "documented": "51DC",
   "name": "Reactive energy export tariff 4",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20960,
   "documented": "51E0",
   "name": "Reactive energy export tariff 5",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20964,
   "documented": "51E4",
   "name": "Reactive energy export tariff 6",
   "description": "M4M 30 only.",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21600,
   "documented": "5460",
   "name": "Active energy import L1",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21604,
   "documented": "5464",
   "name": "Active energy import L2",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21608,
   "documented": "5468",
   "name": "Active energy import L3",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21612,
   "documented": "546C",
   "name": "Active energy export L1",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21616,
   "documented": "5470",
   "name": "Active energy export L2",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21620,
   "documented": "5474",
   "name": "Active energy export L3",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21624,
   "documented": "5478",
   "name": "Active energy net L1",
   "description": "",
   "data_type": "INT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21628,
   "documented": "547C",
   "name": "Active energy net L2",
   "description": "",
   "data_type": "INT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21632,
   "documented": "5480",
   "name": "Active energy net L3",
   "description": "",
   "data_type": "INT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21636,
   "documented": "5484",
   "name": "Reactive energy import L1",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21640,
   "documented": "5488",
   "name": "Reactive energy import L2",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21644,
   "documented": "548C",
   "name": "Reactive energy import L3",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21648,
   "documented": "5490",
   "name": "Reactive energy export L1",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21652,
   "documented": "5494",
   "name": "Reactive energy export L2",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21656,
   "documented": "5498",
   "name": "Reactive energy export L3",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21660,
   "documented": "549C",
   "name": "Reactive energy net L1",
   "description": "",
   "data_type": "INT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21664,
   "documented": "54A0",
   "name": "Reactive energy net L2",
   "description": "",
   "data_type": "INT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21668,
   "documented": "54A4",
   "name": "Reactive energy net L3",
   "description": "",
   "data_type": "INT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21672,
   "documented": "54A8",
   "name": "Apparent energy import L1",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kVAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21676,
   "documented": "54AC",
   "name": "Apparent energy import L2",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kVAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21680,
   "documented": "54B0",
   "name": "Apparent energy import L3",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kVAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21684,
   "documented": "54B4",
   "name": "Apparent energy export L1",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kVAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21688,
   "documented": "54B8",
   "name": "Apparent energy export L2",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kVAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21692,
   "documented": "54BC",
   "name": "Apparent energy export L3",
   "description": "",
   "data_type": "UINT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kVAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21696,
   "documented": "54C0",
   "name": "Apparent energy net L1",
   "description": "",
   "data_type": "INT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kVAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21700,
   "documented": "54C4",
   "name": "Apparent energy net L2",
   "description": "",
   "data_type": "INT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kVAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21704,
   "documented": "54C8",
   "name": "Apparent energy net L3",
   "description": "",
   "data_type": "INT64",
   "length": 4,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kVAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23296,
   "documented": "5B00",
   "name": "Three-phase system voltage",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23298,
   "documented": "5B02",
   "name": "Phase voltage L1",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23300,
   "documented": "5B04",
   "name": "Phase voltage L2",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23302,
   "documented": "5B06",
   "name": "Phase voltage L3",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23304,
   "documented": "5B08",
   "name": "Line voltage L1-L2",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23306,
   "documented": "5B0A",
   "name": "Line voltage L3-L2",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23308,
   "documented": "5B0C",
   "name": "Line voltage L1-L3",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23310,
   "documented": "5B0E",
   "name": "Three-phase system current",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23312,
   "documented": "5B10",
   "name": "Current L1",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23314,
   "documented": "5B12",
   "name": "Current L2",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23316,
   "documented": "5B14",
   "name": "Current L3",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23318,
   "documented": "5B16",
   "name": "Current N",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23322,
   "documented": "5B1A",
   "name": "Active power total",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23324,
   "documented": "5B1C",
   "name": "Active power L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23326,
   "documented": "5B1E",
   "name": "Active power L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23328,
   "documented": "5B20",
   "name": "Active power L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23330,
   "documented": "5B22",
   "name": "Reactive power total",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23332,
   "documented": "5B24",
   "name": "Reactive power L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23334,
   "documented": "5B26",
   "name": "Reactive power L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23336,
   "documented": "5B28",
   "name": "Reactive power L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23338,
   "documented": "5B2A",
   "name": "Apparent power total",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23340,
   "documented": "5B2C",
   "name": "Apparent power L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23342,
   "documented": "5B2E",
   "name": "Apparent power L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23344,
   "documented": "5B30",
   "name": "Apparent power L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23346,
   "documented": "5B32",
   "name": "Frequency",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23347,
   "documented": "5B33",
   "name": "Phase angle power total",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23348,
   "documented": "5B34",
   "name": "Phase angle power L1",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23349,
   "documented": "5B35",
   "name": "Phase angle power L2",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23350,
   "documented": "5B36",
   "name": "Phase angle power L3",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23351,
   "documented": "5B37",
   "name": "Phase angle voltage L1",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23352,
   "documented": "5B38",
   "name": "Phase angle voltage L2",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23353,
   "documented": "5B39",
   "name": "Phase angle voltage L3",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23357,
   "documented": "5B3D",
   "name": "Phase angle current L1",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23358,
   "documented": "5B3E",
   "name": "Phase angle current L2",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23359,
   "documented": "5B3F",
   "name": "Phase angle current L3",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23360,
   "documented": "5B40",
   "name": "Power factor total",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23361,
   "documented": "5B41",
   "name": "Power factor L1",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23362,
   "documented": "5B42",
   "name": "Power factor L2",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23363,
   "documented": "5B43",
   "name": "Power factor L3",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23364,
   "documented": "5B44",
   "name": "Current quadrant total",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "Quadrant 1",
    "2": "Quadrant 2",
    "3": "Quadrant 3",
    "4": "Quadrant 4"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23365,
   "documented": "5B45",
   "name": "Current quadrant L1",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "Quadrant 1",
    "2": "Quadrant 2",
    "3": "Quadrant 3",
    "4": "Quadrant 4"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23366,
   "documented": "5B46",
   "name": "Current quadrant L2",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "Quadrant 1",
    "2": "Quadrant 2",
    "3": "Quadrant 3",
    "4": "Quadrant 4"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23367,
   "documented": "5B47",
   "name": "Current quadrant L3",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "Quadrant 1",
    "2": "Quadrant 2",
    "3": "Quadrant 3",
    "4": "Quadrant 4"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23368,
   "documented": "5B48",
   "name": "Cosphi (displacement factor) total",
   "description": "Unit column in the map says degrees; value is a factor at 0.001.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23369,
   "documented": "5B49",
   "name": "Cosphi (displacement factor) L1",
   "description": "Unit column in the map says degrees; value is a factor at 0.001.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23370,
   "documented": "5B4A",
   "name": "Cosphi (displacement factor) L2",
   "description": "Unit column in the map says degrees; value is a factor at 0.001.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23371,
   "documented": "5B4B",
   "name": "Cosphi (displacement factor) L3",
   "description": "Unit column in the map says degrees; value is a factor at 0.001.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23808,
   "documented": "5D00",
   "name": "Voltage THD L1",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23936,
   "documented": "5D80",
   "name": "Voltage THD L2",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 24064,
   "documented": "5E00",
   "name": "Voltage THD L3",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 24192,
   "documented": "5E80",
   "name": "Voltage THD L1-L2",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 24320,
   "documented": "5F00",
   "name": "Voltage THD L3-L2",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 24448,
   "documented": "5F80",
   "name": "Voltage THD L1-L3",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 24576,
   "documented": "6000",
   "name": "Current THD L1",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 24704,
   "documented": "6080",
   "name": "Current THD L2",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 24832,
   "documented": "6100",
   "name": "Current THD L3",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 24960,
   "documented": "6180",
   "name": "Current THD N",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 25088,
   "documented": "6200",
   "name": "Unbalance line voltage",
   "description": "M4M 30 only.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 25090,
   "documented": "6202",
   "name": "Unbalance phase voltage",
   "description": "M4M 30 only.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 25092,
   "documented": "6204",
   "name": "Unbalance current",
   "description": "M4M 30 only.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 35072,
   "documented": "8900",
   "name": "Serial number",
   "description": "ASCII.",
   "data_type": "STRING",
   "length": 5,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 35080,
   "documented": "8908",
   "name": "Meter firmware version",
   "description": "ASCII.",
   "data_type": "STRING",
   "length": 8,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 35097,
   "documented": "8919",
   "name": "Product tag name",
   "description": "ASCII, user-settable tag.",
   "data_type": "STRING",
   "length": 5,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 35168,
   "documented": "8960",
   "name": "Type designation",
   "description": "ASCII, e.g. M4M30SMA.",
   "data_type": "STRING",
   "length": 6,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 35174,
   "documented": "8966",
   "name": "Product name",
   "description": "ASCII, e.g. M4M 30 MODBUS.",
   "data_type": "STRING",
   "length": 8,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 35335,
   "documented": "8A07",
   "name": "Current tariff",
   "description": "Active tariff 1-6. M4M 30 only.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 35840,
   "documented": "8C00",
   "name": "CT ratio L1-L3 numerator",
   "description": "Not on Rogowski versions.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 35842,
   "documented": "8C02",
   "name": "CT ratio L1-L3 denominator",
   "description": "Not on Rogowski versions.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 35844,
   "documented": "8C04",
   "name": "VT ratio numerator",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 35846,
   "documented": "8C06",
   "name": "VT ratio denominator",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 35848,
   "documented": "8C08",
   "name": "CT neutral ratio numerator",
   "description": "M4M 30, not Rogowski.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 35850,
   "documented": "8C0A",
   "name": "CT neutral ratio denominator",
   "description": "M4M 30, not Rogowski.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36064,
   "documented": "8CE0",
   "name": "CO2 conversion factor",
   "description": "Range 0.001-9.999.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "units": "kg/kWh",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36066,
   "documented": "8CE2",
   "name": "Currency conversion factor",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "units": "Currency/kWh",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36069,
   "documented": "8CE5",
   "name": "Wires",
   "description": "Network/CT arrangement; 0 is M4M 30 only.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "3Ph/4W/4CT",
    "1": "3Ph/4W/3CT",
    "2": "3Ph/4W/1CT",
    "3": "3Ph/3W/3CT",
    "4": "3Ph/3W/2CT",
    "5": "3Ph/3W/1CT",
    "6": "2Ph/3W/2CT",
    "7": "1Ph/2W/1CT"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36075,
   "documented": "8CEB",
   "name": "Modbus RTU address",
   "description": "1-247.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36076,
   "documented": "8CEC",
   "name": "Modbus RTU baud rate",
   "description": "9600, 19200, 38400, 57600 or 115200.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "bps",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36078,
   "documented": "8CEE",
   "name": "Modbus RTU parity",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Odd",
    "1": "Even",
    "2": "None"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36079,
   "documented": "8CEF",
   "name": "Modbus TCP DHCP",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Disabled",
    "1": "Enabled"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36080,
   "documented": "8CF0",
   "name": "Modbus TCP IP address",
   "description": "A.B.C.D packed as 0xAABBCCDD.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36082,
   "documented": "8CF2",
   "name": "Modbus TCP subnet mask",
   "description": "Packed as 0xAABBCCDD.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36084,
   "documented": "8CF4",
   "name": "Modbus TCP gateway",
   "description": "Packed as 0xAABBCCDD.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36086,
   "documented": "8CF6",
   "name": "Modbus TCP port",
   "description": "Default 502.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36087,
   "documented": "8CF7",
   "name": "Up counter",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36089,
   "documented": "8CF9",
   "name": "Down counter",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36091,
   "documented": "8CFB",
   "name": "Down counter reset value",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36604,
   "documented": "8EFC",
   "name": "Bluetooth enable",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36695,
   "documented": "8F57",
   "name": "Reset logs",
   "description": "Write 1 to reset.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36696,
   "documented": "8F58",
   "name": "Reset historical functionality",
   "description": "Write 1 to reset. M4M 30 only.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36697,
   "documented": "8F59",
   "name": "Reset timer",
   "description": "Write 1 to reset.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36698,
   "documented": "8F5A",
   "name": "Reset energy",
   "description": "Write 1 to reset energy registers.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 36699,
   "documented": "8F5B",
   "name": "Reset to factory defaults",
   "description": "Write 1 to restore factory settings.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": null,
   "bits": null,
   "offset": 0
  }
 ],
 "page": "https://easymodbus.com/modbus-register-maps/abb/m4m-20-30",
 "address_note": "address = 0-based Modbus wire (PDU) address; documented = as printed in the source.",
 "note": "Re-typed from the manufacturer's public documentation (see source) and verified against it. Registers vary by firmware and options; verify against the live device before writing."
}
