{
 "manufacturer": "Carlo Gavazzi",
 "manufacturer_slug": "carlo-gavazzi",
 "model": "WM15 power analyzer",
 "model_slug": "wm15",
 "short_model": "WM15",
 "aliases": [
  "WM15",
  "WM15-96",
  "WM1596AV53XOSX",
  "WM1596AV53XOSPFB",
  "WM1596AV53HOSX"
 ],
 "equipment_type": "Power meter (power analyzer)",
 "applies_to": "WM15-96 three-phase panel power analyzers with RS485 Modbus RTU (OS / OSPF / HOS versions), protocol version 1.2.",
 "summary": "The WM15 is a 96x96 mm panel power analyzer with an RS485 Modbus RTU port. Values are mostly 32-bit integers sent low word first with fixed weights; functions 03 and 04 are equivalent and up to 125 registers can be read at once. This map covers voltages, currents, powers, PF (both sign conventions), frequency, energy totals and partials, run hours, THD, demand and max values, output/alarm status, alarm and pulse-output setup, serial settings, resets and device state.",
 "transport": [
  "RTU"
 ],
 "defaults": {
  "unit_id": 1,
  "baud": 9600,
  "parity": "None",
  "data_bits": null,
  "stop_bits": 1,
  "tcp_port": null
 },
 "addressing": {
  "convention": "Modicon",
  "note": "Registers are printed as a 6-digit Modicon number for function 04 (3xxxxx; use 4xxxxx for function 03) beside the hex physical address that goes in the frame; the hex address is authoritative. A few printed Modicon numbers do not match their hex address (1105h, 110Bh, 053Ah, 053Ch); the 'documented' field keeps them as printed and the wire address follows the hex."
 },
 "default_word_order": "CDAB",
 "firmware": "Rows apply to all firmware unless noted (OS/OX/OSPF/OXPF 1.0)",
 "source": {
  "title": "WM15 Communication Protocol",
  "doc_number": "Version 1.2",
  "revision_date": "2019-12-20",
  "url": "https://www.gavazziautomation.com/fileadmin/images/PIM/OTHERSTUFF/COMPRO/WM15_CP.pdf",
  "pages": "Data format p. 8; tables pp. 9-20"
 },
 "notes": [
  "Word order: the protocol states INT32/UINT32/UINT64 are LSW first with bytes MSB first, so 32-bit values are CDAB.",
  "PF is published twice: 002Eh-0031h signed by power direction, 0072h-0075h signed by lead/lag, with the L/C flag in 0076h-0079h.",
  "Functions 03, 04, 06 and 10h are supported; up to 125 registers per read.",
  "Left out: the INT64 energy block (0500h-0533h, Wh resolution) because the document states word order only for INT32, UINT32 and UINT64, not INT64; the duplicate by-phase table (00F6h-01B4h) and its copies of hour meters at 0534h-053Bh; input terminal mapping (1150h-1158h); display page filter settings (1600h-1629h); the factory-reset key sequence (4020h); serial-number and configurable-name ASCII registers; and the M-Bus secondary address.",
  "MID (PFB) versions: measuring system accepts only 0/1, CT ratio is read-only, and total-energy reset (4003h) is not available.",
  "On 1-phase and 2-phase systems, phase 2/3 registers read 0."
 ],
 "integration": {
  "summary": "Read input registers 0000h-0059h with function 04 (or 03) in one request; decode INT32 values low word first and apply the fixed weights (V and W x10, A and PF x1000, energy x10).",
  "minimum_registers": [
   {
    "table": "input_register",
    "address": 0,
    "why": "V L1-N"
   },
   {
    "table": "input_register",
    "address": 12,
    "why": "A L1"
   },
   {
    "table": "input_register",
    "address": 40,
    "why": "W system"
   },
   {
    "table": "input_register",
    "address": 49,
    "why": "PF system"
   },
   {
    "table": "input_register",
    "address": 51,
    "why": "Frequency"
   },
   {
    "table": "input_register",
    "address": 52,
    "why": "kWh(+) total"
   },
   {
    "table": "input_register",
    "address": 78,
    "why": "kWh(-) total"
   }
  ],
  "enable": "Modbus RTU is on the OS (RS485) versions; OX versions have no serial port. Address, baud rate, parity and stop bits are in registers 2000h-2003h.",
  "watchdog": null,
  "quirks": [
   "INT32 values are low word first (CDAB).",
   "Two PF sign conventions are exposed; pick the block that matches your SCADA.",
   "Some printed Modicon numbers are wrong; trust the hex physical address."
  ],
  "setup": [
   "Defaults: address 1, 9600 baud, no parity, 1 stop bit.",
   "Terminate the master end with 120 ohm; use a repeater above 1000 m or 160 devices."
  ],
  "gotchas": [
   "Device state 5012h reports a configuration error when the phase/terminal mapping is inconsistent."
  ]
 },
 "registers": [
  {
   "table": "input_register",
   "address": 0,
   "documented": "300001 / 0000h",
   "name": "V L1-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 2,
   "documented": "300003 / 0002h",
   "name": "V L2-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 4,
   "documented": "300005 / 0004h",
   "name": "V L3-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 6,
   "documented": "300007 / 0006h",
   "name": "V L1-L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 8,
   "documented": "300009 / 0008h",
   "name": "V L2-L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 10,
   "documented": "300011 / 000Ah",
   "name": "V L3-L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 11,
   "documented": "300012 / 000Bh",
   "name": "Carlo Gavazzi identification code",
   "description": "Read alone; shares 000Bh with V L3-L1 high word.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1680": "WM1596AV53XOSX",
    "1681": "WM1596AV53XOSPFB",
    "1682": "WM1596AV53XOXX",
    "1683": "WM1596AV53XOXPFB",
    "1684": "WM1596AV53HOSX"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 12,
   "documented": "300013 / 000Ch",
   "name": "A L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 14,
   "documented": "300015 / 000Eh",
   "name": "A L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 16,
   "documented": "300017 / 0010h",
   "name": "A L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 18,
   "documented": "300019 / 0012h",
   "name": "W L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 20,
   "documented": "300021 / 0014h",
   "name": "W L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 22,
   "documented": "300023 / 0016h",
   "name": "W L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 24,
   "documented": "300025 / 0018h",
   "name": "VA L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 26,
   "documented": "300027 / 001Ah",
   "name": "VA L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 28,
   "documented": "300029 / 001Ch",
   "name": "VA L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 30,
   "documented": "300031 / 001Eh",
   "name": "var L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 32,
   "documented": "300033 / 0020h",
   "name": "var L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 34,
   "documented": "300035 / 0022h",
   "name": "var L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 36,
   "documented": "300037 / 0024h",
   "name": "V L-N system",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 38,
   "documented": "300039 / 0026h",
   "name": "V L-L system",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 40,
   "documented": "300041 / 0028h",
   "name": "W system",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 42,
   "documented": "300043 / 002Ah",
   "name": "VA system",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 44,
   "documented": "300045 / 002Ch",
   "name": "var system",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 46,
   "documented": "300047 / 002Eh",
   "name": "PF L1",
   "description": "Sign = direction: negative exported, positive imported.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 47,
   "documented": "300048 / 002Fh",
   "name": "PF L2",
   "description": "Sign = direction: negative exported, positive imported.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 48,
   "documented": "300049 / 0030h",
   "name": "PF L3",
   "description": "Sign = direction: negative exported, positive imported.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 49,
   "documented": "300050 / 0031h",
   "name": "PF system",
   "description": "Sign = direction: negative exported, positive imported.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 50,
   "documented": "300051 / 0032h",
   "name": "Phase sequence",
   "description": "Meaningful on 3-phase systems only.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "-1": "L1-L3-L2",
    "0": "L1-L2-L3"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 51,
   "documented": "300052 / 0033h",
   "name": "Frequency",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 52,
   "documented": "300053 / 0034h",
   "name": "kWh(+) total",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 54,
   "documented": "300055 / 0036h",
   "name": "kvarh(+) total",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 56,
   "documented": "300057 / 0038h",
   "name": "W system demand",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 58,
   "documented": "300059 / 003Ah",
   "name": "W system demand max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 60,
   "documented": "300061 / 003Ch",
   "name": "kWh(+) partial",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 62,
   "documented": "300063 / 003Eh",
   "name": "kvarh(+) partial",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 64,
   "documented": "300065 / 0040h",
   "name": "kWh(+) L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 66,
   "documented": "300067 / 0042h",
   "name": "kWh(+) L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 68,
   "documented": "300069 / 0044h",
   "name": "kWh(+) L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 78,
   "documented": "300079 / 004Eh",
   "name": "kWh(-) total",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 80,
   "documented": "300081 / 0050h",
   "name": "kvarh(-) total",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 82,
   "documented": "300083 / 0052h",
   "name": "kWh(-) partial",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 84,
   "documented": "300085 / 0054h",
   "name": "kvarh(-) partial",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 86,
   "documented": "300087 / 0056h",
   "name": "kVAh total",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kVAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 88,
   "documented": "300089 / 0058h",
   "name": "kVAh partial",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kVAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 90,
   "documented": "300091 / 005Ah",
   "name": "Run hour meter",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 92,
   "documented": "300093 / 005Ch",
   "name": "Run hour meter kWh(-)",
   "description": "Hours run while exporting.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 110,
   "documented": "300111 / 006Eh",
   "name": "Run hour meter partial",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 112,
   "documented": "300113 / 0070h",
   "name": "Run hour meter kWh(-) partial",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 114,
   "documented": "300115 / 0072h",
   "name": "PF L1 (lead/lag)",
   "description": "Sign = lead/lag: negative capacitive, positive inductive.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 115,
   "documented": "300116 / 0073h",
   "name": "PF L2 (lead/lag)",
   "description": "Sign = lead/lag: negative capacitive, positive inductive.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 116,
   "documented": "300117 / 0074h",
   "name": "PF L3 (lead/lag)",
   "description": "Sign = lead/lag: negative capacitive, positive inductive.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 117,
   "documented": "300118 / 0075h",
   "name": "PF system (lead/lag)",
   "description": "Sign = lead/lag: negative capacitive, positive inductive.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 118,
   "documented": "300119 / 0076h",
   "name": "Load type L1",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "Inductive (L)",
    "-1": "Capacitive (C)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 119,
   "documented": "300120 / 0077h",
   "name": "Load type L2",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "Inductive (L)",
    "-1": "Capacitive (C)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 120,
   "documented": "300121 / 0078h",
   "name": "Load type L3",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "Inductive (L)",
    "-1": "Capacitive (C)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 121,
   "documented": "300122 / 0079h",
   "name": "Load type system",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "Inductive (L)",
    "-1": "Capacitive (C)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 130,
   "documented": "300131 / 0082h",
   "name": "THD A L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 132,
   "documented": "300133 / 0084h",
   "name": "THD A L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 134,
   "documented": "300135 / 0086h",
   "name": "THD A L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 138,
   "documented": "300139 / 008Ah",
   "name": "THD V L1-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 140,
   "documented": "300141 / 008Ch",
   "name": "THD V L2-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 142,
   "documented": "300143 / 008Eh",
   "name": "THD V L3-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 146,
   "documented": "300147 / 0092h",
   "name": "THD V L1-L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 148,
   "documented": "300149 / 0094h",
   "name": "THD V L2-L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 150,
   "documented": "300151 / 0096h",
   "name": "THD V L3-L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 154,
   "documented": "300155 / 009Ah",
   "name": "A L1 demand",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 156,
   "documented": "300157 / 009Ch",
   "name": "A L2 demand",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 158,
   "documented": "300159 / 009Eh",
   "name": "A L3 demand",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 160,
   "documented": "300161 / 00A0h",
   "name": "A L1 demand max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 162,
   "documented": "300163 / 00A2h",
   "name": "A L2 demand max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 164,
   "documented": "300165 / 00A4h",
   "name": "A L3 demand max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 166,
   "documented": "300167 / 00A6h",
   "name": "A L1 max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 168,
   "documented": "300169 / 00A8h",
   "name": "A L2 max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 170,
   "documented": "300171 / 00AAh",
   "name": "A L3 max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 172,
   "documented": "300173 / 00ACh",
   "name": "W L1 demand",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 174,
   "documented": "300175 / 00AEh",
   "name": "W L2 demand",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 176,
   "documented": "300177 / 00B0h",
   "name": "W L3 demand",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 178,
   "documented": "300179 / 00B2h",
   "name": "W L1 demand max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 180,
   "documented": "300181 / 00B4h",
   "name": "W L2 demand max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 182,
   "documented": "300183 / 00B6h",
   "name": "W L3 demand max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 184,
   "documented": "300185 / 00B8h",
   "name": "W L1 max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 186,
   "documented": "300187 / 00BAh",
   "name": "W L2 max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 188,
   "documented": "300189 / 00BCh",
   "name": "W L3 max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 190,
   "documented": "300191 / 00BEh",
   "name": "W system demand (dup)",
   "description": "Same value as 0038h.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 192,
   "documented": "300193 / 00C0h",
   "name": "W system demand max (dup)",
   "description": "Same value as 003Ah.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 194,
   "documented": "300195 / 00C2h",
   "name": "W system max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 214,
   "documented": "300215 / 00D6h",
   "name": "VA demand",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 216,
   "documented": "300217 / 00D8h",
   "name": "VA demand max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 218,
   "documented": "300219 / 00DAh",
   "name": "VA max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 770,
   "documented": "300771 / 0302h",
   "name": "Firmware version",
   "description": "High byte: bits 4-7 major, 0-3 minor; low byte revision.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 773,
   "documented": "300774 / 0305h",
   "name": "Digital output status",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "Open",
    "1": "Closed"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 774,
   "documented": "300775 / 0306h",
   "name": "Alarm status",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "Not active (or delay running)",
    "1": "Active"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 1340,
   "documented": "301241 / 053Ch",
   "name": "Frequency (high resolution)",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4096,
   "documented": "304097 / 1000h",
   "name": "Password",
   "description": "0 = no password, max 9999.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4098,
   "documented": "304099 / 1002h",
   "name": "Measuring system",
   "description": "MID versions accept only 0 and 1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "3Pn (default)",
    "1": "3P",
    "2": "2P",
    "3": "1P"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4099,
   "documented": "304100 / 1003h",
   "name": "CT ratio",
   "description": "Raw 10-20000 = CT 1.0-2000.0; read-only on MID.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4112,
   "documented": "304113 / 1010h",
   "name": "Demand integration time",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "1 min",
    "1": "5 min",
    "2": "10 min",
    "3": "15 min (default)",
    "4": "20 min",
    "5": "30 min",
    "6": "60 min"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4114,
   "documented": "304115 / 1012h",
   "name": "Pulse output Ton",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "30 ms (default)",
    "1": "100 ms"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4116,
   "documented": "304117 / 1014h",
   "name": "Alarm enable",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Disabled (default)",
    "1": "Enabled"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4117,
   "documented": "304118 / 1015h",
   "name": "Alarm linked variable",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "1": "Active power system (kW)",
    "2": "Apparent power system (kVA)",
    "3": "Reactive power system (kvar)",
    "4": "Power factor system",
    "5": "Phase currents (A)",
    "6": "Phase voltages (V)",
    "7": "Delta voltages (V)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4118,
   "documented": "304119 / 1016h",
   "name": "Alarm set point 1 (on)",
   "description": "-15000.00 to +15000.00 in the linked variable's unit.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4120,
   "documented": "304121 / 1018h",
   "name": "Alarm set point 2 (off)",
   "description": "-15000.00 to +15000.00.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4122,
   "documented": "304123 / 101Ah",
   "name": "Alarm delay",
   "description": "0-3600.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "s",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4126,
   "documented": "304127 / 101Eh",
   "name": "Output type",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Disabled (default)",
    "1": "Pulse kWh",
    "2": "Alarm"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4127,
   "documented": "304128 / 101Fh",
   "name": "Output normal state",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Normally open (default)",
    "1": "Normally closed"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4128,
   "documented": "304129 / 1020h",
   "name": "kWh per pulse",
   "description": "Raw 1-10000; default 1000 (1 kWh).",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "kWh",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4356,
   "documented": "304357 / 1104h",
   "name": "Wrong-connection check",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Disabled",
    "1": "Enabled (default)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4357,
   "documented": "304357 / 1105h",
   "name": "Wrong-connection status",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "Correct",
    "1": "Connection error"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4363,
   "documented": "304360 / 110Bh",
   "name": "Run hour counter start current",
   "description": "Primary current, raw 10-12000000; default 10 (10 mA).",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8192,
   "documented": "308193 / 2000h",
   "name": "RS485 address",
   "description": "1-247, default 1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8193,
   "documented": "308194 / 2001h",
   "name": "RS485 baud rate",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "1": "9600 (default)",
    "2": "19200",
    "3": "38400",
    "4": "57600",
    "5": "115200"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8194,
   "documented": "308195 / 2002h",
   "name": "RS485 parity",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "1": "None (default)",
    "2": "Even"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8195,
   "documented": "308196 / 2003h",
   "name": "RS485 stop bits",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "1 (default)",
    "1": "2"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16387,
   "documented": "316388 / 4003h",
   "name": "Reset totals and run hours",
   "description": "Write 1. Non-MID models only.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16388,
   "documented": "316389 / 4004h",
   "name": "Reset partials and partial run hours",
   "description": "Write 1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16389,
   "documented": "316390 / 4005h",
   "name": "Reset demand, demand max and max",
   "description": "Write 1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20487,
   "documented": "320488 / 5007h",
   "name": "Production year",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20498,
   "documented": "320499 / 5012h",
   "name": "Device state",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "Run",
    "1": "Fault",
    "2": "Configuration error (phase/terminal mapping)"
   },
   "bits": null,
   "offset": 0
  }
 ],
 "page": "https://easymodbus.com/modbus-register-maps/carlo-gavazzi/wm15",
 "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."
}
