{
 "manufacturer": "Janitza",
 "manufacturer_slug": "janitza",
 "model": "UMG 104 power analyser (RS-485 Modbus RTU)",
 "model_slug": "umg-104",
 "short_model": "UMG 104",
 "aliases": [
  "UMG104",
  "UMG 104",
  "Janitza UMG104"
 ],
 "equipment_type": "Power meter (power analyser)",
 "applies_to": "UMG 104 DIN-rail power analyser, firmware 1.268, per address list 1.041.006.1.e (01/2023).",
 "summary": "The UMG 104 is a power analyser with four voltage and four current inputs and RS-485 / RS-232 serial ports, acting as a Modbus slave. Values are big-endian 32-bit floats that already include the CT/VT ratios. This map covers the 19000-19120 'frequently required readings' block, the fourth channel, consumed/delivered energy totals, digital I/O, the RS-485 address and energy reset commands.",
 "transport": [
  "RTU"
 ],
 "defaults": {
  "unit_id": null,
  "baud": null,
  "parity": "None",
  "data_bits": 8,
  "stop_bits": 2,
  "tcp_port": null
 },
 "addressing": {
  "convention": "0-based",
  "note": "Addresses are printed as the protocol address and sent unchanged: 19000 is requested as 19000. The list starts at address 0 (real-time clock), which only fits 0-based numbering. In a 1-based or Modicon tool enter 19001 / 419001."
 },
 "default_word_order": "ABCD",
 "firmware": "1.268",
 "source": {
  "title": "Power Analyser UMG 104 - Modbus-address list and Formulary (Firmware 1.268)",
  "doc_number": "1.041.006.1.e",
  "revision_date": "2023-01",
  "url": "https://www.janitza.com/files/download/manuals/current/UMG104/janitza-mal-umg104-en.pdf",
  "pages": "Functions p. 4; transfer parameters, byte order, number formats p. 5; frequently required readings p. 12; date/time p. 13; measured values pp. 14-15; other values pp. 25-27; energy pp. 28-31"
 },
 "notes": [
  "Byte order: the list says its addresses return data big-endian (high byte first, high word in the lower register = ABCD). Adding 32768 to an address returns the same value little-endian; that mirror block is not listed.",
  "Data types in the list: short = signed 16-bit, int = signed 32-bit, uint = unsigned 32-bit, float = IEEE 754 32-bit. Float and integer values include the CT/VT ratios; short values do not.",
  "19068 in the frequently-read block is the consumed energy of tariff 1 (rate 1) only, so it is left out; the all-tariff consumed and delivered totals are taken from the energy table (9851 / 9863).",
  "Transfer parameters (p. 5): 9600-115200 baud, 8 data bits, no parity, the UMG 104 sends 2 stop bits. The list does not give a default baud rate or device address.",
  "Left out: RS-485 mode and baud rate (10182 / 10184), RS-232 settings and IP settings, because the list gives no value coding for them; the summed power factor at 1373, whose formula is printed as Psum3/Qsum3 (likely a typo); the SHORT copies of values; harmonics, min/max/mean blocks, monthly energy, tariffs 3/4 and comparators.",
  "Left out: the CT/VT ratio rows 10032-10062. They are four-element arrays and every element is labelled 'L1, L2, L3', so which element belongs to which input is not clear from the list."
 ],
 "registers": [
  {
   "table": "holding_register",
   "address": 1323,
   "documented": "1323",
   "name": "Voltage L4-N",
   "description": "Fourth voltage input.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1331,
   "documented": "1331",
   "name": "Current L4",
   "description": "Fourth current input.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1339,
   "documented": "1339",
   "name": "Real power L4",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1365,
   "documented": "1365",
   "name": "Current sum L1-L4 (vector)",
   "description": "Vector sum of all four current inputs.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1377,
   "documented": "1377",
   "name": "Real power L1-L4",
   "description": "Sum of all four channels.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1447,
   "documented": "1447",
   "name": "Voltage unbalance",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1461,
   "documented": "1461",
   "name": "Internal temperature",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9851,
   "documented": "9851",
   "name": "Real energy L1-L3, consumed",
   "description": "Total over all tariffs.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9853,
   "documented": "9853",
   "name": "Real energy L1-L4, consumed",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9863,
   "documented": "9863",
   "name": "Real energy L1-L3, delivered",
   "description": "Total over all tariffs.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9865,
   "documented": "9865",
   "name": "Real energy L1-L4, delivered",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9875,
   "documented": "9875",
   "name": "Real energy L1-L3, consumed, HT (rate 1)",
   "description": "Tariff 1, high rate.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9887,
   "documented": "9887",
   "name": "Real energy L1-L3, consumed, NT (rate 2)",
   "description": "Tariff 1, low rate.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9973,
   "documented": "9973",
   "name": "Digital output 1 status",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Not active",
    "1": "Active"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9974,
   "documented": "9974",
   "name": "Digital output 2 status",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Not active",
    "1": "Active"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9975,
   "documented": "9975",
   "name": "Digital input 1 status",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "Not active",
    "1": "Active"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9976,
   "documented": "9976",
   "name": "Digital input 2 status",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "Not active",
    "1": "Active"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9997,
   "documented": "9997",
   "name": "Delete real energy counters",
   "description": "Write 1 to clear all real energy counters.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9998,
   "documented": "9998",
   "name": "Delete reactive energy counters",
   "description": "Write 1 to clear all reactive energy counters.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 10176,
   "documented": "10176",
   "name": "Serial number",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 10180,
   "documented": "10180",
   "name": "RS-485 Modbus address",
   "description": "Device address on the RS-485 bus.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19000,
   "documented": "19000",
   "name": "Voltage L1-N",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19002,
   "documented": "19002",
   "name": "Voltage L2-N",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19004,
   "documented": "19004",
   "name": "Voltage L3-N",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19006,
   "documented": "19006",
   "name": "Voltage L1-L2",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19008,
   "documented": "19008",
   "name": "Voltage L2-L3",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19010,
   "documented": "19010",
   "name": "Voltage L3-L1",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19012,
   "documented": "19012",
   "name": "Current L1",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19014,
   "documented": "19014",
   "name": "Current L2",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19016,
   "documented": "19016",
   "name": "Current L3",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19018,
   "documented": "19018",
   "name": "Neutral current (vector sum)",
   "description": "Calculated vector sum of the three phase currents.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19020,
   "documented": "19020",
   "name": "Real power L1",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19022,
   "documented": "19022",
   "name": "Real power L2",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19024,
   "documented": "19024",
   "name": "Real power L3",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19026,
   "documented": "19026",
   "name": "Real power total",
   "description": "Sum of L1-L3.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19028,
   "documented": "19028",
   "name": "Apparent power L1",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19030,
   "documented": "19030",
   "name": "Apparent power L2",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19032,
   "documented": "19032",
   "name": "Apparent power L3",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19034,
   "documented": "19034",
   "name": "Apparent power total",
   "description": "Sum of L1-L3.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19036,
   "documented": "19036",
   "name": "Reactive power L1 (fundamental)",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19038,
   "documented": "19038",
   "name": "Reactive power L2 (fundamental)",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19040,
   "documented": "19040",
   "name": "Reactive power L3 (fundamental)",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19042,
   "documented": "19042",
   "name": "Reactive power total (fundamental)",
   "description": "Sum of L1-L3.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19044,
   "documented": "19044",
   "name": "CosPhi L1 (fundamental)",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19046,
   "documented": "19046",
   "name": "CosPhi L2 (fundamental)",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19048,
   "documented": "19048",
   "name": "CosPhi L3 (fundamental)",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19050,
   "documented": "19050",
   "name": "Frequency",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19052,
   "documented": "19052",
   "name": "Rotation field",
   "description": "Float: 1 = clockwise, 0 = none, -1 = anticlockwise.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19054,
   "documented": "19054",
   "name": "Real energy L1",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19056,
   "documented": "19056",
   "name": "Real energy L2",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19058,
   "documented": "19058",
   "name": "Real energy L3",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19060,
   "documented": "19060",
   "name": "Real energy L1-L3",
   "description": "Three-phase total, not split into consumed and delivered.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19062,
   "documented": "19062",
   "name": "Real energy L1, consumed",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19064,
   "documented": "19064",
   "name": "Real energy L2, consumed",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19066,
   "documented": "19066",
   "name": "Real energy L3, consumed",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19070,
   "documented": "19070",
   "name": "Real energy L1, delivered",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19072,
   "documented": "19072",
   "name": "Real energy L2, delivered",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19074,
   "documented": "19074",
   "name": "Real energy L3, delivered",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19076,
   "documented": "19076",
   "name": "Real energy L1-L3, delivered",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Wh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19084,
   "documented": "19084",
   "name": "Apparent energy L1-L3",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "VAh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19092,
   "documented": "19092",
   "name": "Reactive energy L1-L3",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "varh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19100,
   "documented": "19100",
   "name": "Reactive energy inductive L1-L3",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "varh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19108,
   "documented": "19108",
   "name": "Reactive energy capacitive L1-L3",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "varh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19110,
   "documented": "19110",
   "name": "THD voltage L1-N",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19112,
   "documented": "19112",
   "name": "THD voltage L2-N",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19114,
   "documented": "19114",
   "name": "THD voltage L3-N",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19116,
   "documented": "19116",
   "name": "THD current L1",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19118,
   "documented": "19118",
   "name": "THD current L2",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19120,
   "documented": "19120",
   "name": "THD current L3",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  }
 ],
 "integration": {
  "summary": "Read holding registers (function 03) from 19000: the 122-register block gives volts, amps, power, CosPhi, frequency, energy and THD as big-endian floats. For all-tariff energy totals read 9851 (consumed) and 9863 (delivered).",
  "minimum_registers": [
   {
    "table": "holding_register",
    "address": 19000,
    "why": "Voltage L1-N"
   },
   {
    "table": "holding_register",
    "address": 19012,
    "why": "Current L1"
   },
   {
    "table": "holding_register",
    "address": 19026,
    "why": "Total real power"
   },
   {
    "table": "holding_register",
    "address": 19034,
    "why": "Total apparent power"
   },
   {
    "table": "holding_register",
    "address": 19050,
    "why": "Frequency"
   },
   {
    "table": "holding_register",
    "address": 9851,
    "why": "Consumed real energy, all tariffs"
   },
   {
    "table": "holding_register",
    "address": 9863,
    "why": "Delivered real energy, all tariffs"
   }
  ],
  "enable": "The list holds the RS-485 Modbus device address at 10180 (read/write). It gives no menu path or other enable step.",
  "watchdog": null,
  "quirks": [
   "Addresses are used as printed (0-based).",
   "Floats are ABCD; add 32768 to an address to get the same value little-endian.",
   "Energy is in Wh and varh, not kWh.",
   "Rotation field (19052) is a float: 1, 0 or -1."
  ],
  "setup": [
   "Use 8 data bits and no parity; the device transmits 2 stop bits (the master may use 1 or 2).",
   "Set the CT/VT ratios at the device so the float values read in primary units.",
   "Write 1 to 9997 / 9998 to clear the real / reactive energy counters."
  ],
  "gotchas": [
   "19068 is tariff 1 only; use 9851 for the consumed total.",
   "Short-format copies elsewhere in the list ignore the CT/VT ratio."
  ]
 },
 "page": "https://easymodbus.com/modbus-register-maps/janitza/umg-104",
 "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."
}
