{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Algodue",
  "model": "UPM215/310/3060",
  "models": ["UPM215", "UPM310", "UPM3060"],
  "vendor_website": "algodue.com",
  "description": "3-phase power quality meter — V/I/P/Q/S/PF/COSφ/THD/frequency/energy/demands (f32 milli-units, FC03, 0x1000 IEEE float bank). Covers UPM215, UPM310, UPM3060.",
  "revision": 2,
  "source": "Omni Console device library (OmniCoreST), modbus-library/algodue-upm215-310-3060.toml; Source: algodue-upm-upt-modbus-protocol.pdf (Rev. 010, 03/09/2010). Not verified against the manufacturer's documentation",
  "notes": [
    "Algodue UPM215/310/3060.",
    "Converted automatically from the Omni Console device library (OmniCoreST).",
    "Not verified against the manufacturer's documentation.",
    "Corrections are welcome (CONTRIBUTING.md). Change x_status once this table has been checked against the manual.",
    "| Algodue UPM215 / UPM310 / UPM3060 — Modbus register map for Omni Console",
    "|",
    "| Source: algodue-upm-upt-modbus-protocol.pdf (Rev. 010, 03/09/2010)",
    "| - Covers: UPM215 (DIN rail), UPM310 (DIN 96×96), UPM3060 (DIN 144×144).",
    "| - 3-phase (or single-phase configurable) power quality meters.",
    "| - FC03 (Read Holding Registers) for all registers listed here.",
    "| - Two register banks:",
    "| - Raw integer bank at 0x0000: 64-bit integers (4 registers), milli-units.",
    "| - IEEE float bank at 0x1000: IEEE 754 f32 (2 registers), same milli-units.",
    "| - This TOML uses the IEEE float bank (0x1000 = 4096 decimal).",
    "| - All values stored in milli-units: mV→V, mA→A, mW→W etc. → scale=0.001.",
    "| - Energy in mWh, mvarh, mVAh → scale=0.001 for Wh/varh/VAh.",
    "| - Factory defaults: slave=1, 9600 baud, 8N1/E1.",
    "| - (*) = option-dependent register."
  ],
  "byte_order": "big",
  "word_order": "big",
  "address_base": 0,
  "x_status": "unofficial",
  "x_origin": "omniconsole",
  "registers": [
    {"name": "System voltage", "area": "holding", "address": 4096, "type": "float32", "scale": 0.001, "unit": "V", "access": "R"},
    {"name": "Voltage L1-N", "area": "holding", "address": 4098, "type": "float32", "scale": 0.001, "unit": "V", "access": "R"},
    {"name": "Voltage L2-N", "area": "holding", "address": 4100, "type": "float32", "scale": 0.001, "unit": "V", "access": "R"},
    {"name": "Voltage L3-N", "area": "holding", "address": 4102, "type": "float32", "scale": 0.001, "unit": "V", "access": "R"},
    {"name": "Voltage L1-L2", "area": "holding", "address": 4104, "type": "float32", "scale": 0.001, "unit": "V", "access": "R"},
    {"name": "Voltage L2-L3", "area": "holding", "address": 4106, "type": "float32", "scale": 0.001, "unit": "V", "access": "R"},
    {"name": "Voltage L3-L1", "area": "holding", "address": 4108, "type": "float32", "scale": 0.001, "unit": "V", "access": "R"},
    {"name": "System current", "area": "holding", "address": 4110, "type": "float32", "scale": 0.001, "unit": "A", "access": "R"},
    {"name": "Current L1", "area": "holding", "address": 4112, "type": "float32", "scale": 0.001, "unit": "A", "access": "R"},
    {"name": "Current L2", "area": "holding", "address": 4114, "type": "float32", "scale": 0.001, "unit": "A", "access": "R"},
    {"name": "Current L3", "area": "holding", "address": 4116, "type": "float32", "scale": 0.001, "unit": "A", "access": "R"},
    {"name": "System power factor", "area": "holding", "address": 4118, "type": "float32", "access": "R"},
    {"name": "Power factor L1", "area": "holding", "address": 4120, "type": "float32", "access": "R"},
    {"name": "Power factor L2", "area": "holding", "address": 4122, "type": "float32", "access": "R"},
    {"name": "Power factor L3", "area": "holding", "address": 4124, "type": "float32", "access": "R"},
    {"name": "COSφ L1", "area": "holding", "address": 4128, "type": "float32", "access": "R"},
    {"name": "COSφ L2", "area": "holding", "address": 4130, "type": "float32", "access": "R"},
    {"name": "COSφ L3", "area": "holding", "address": 4132, "type": "float32", "access": "R"},
    {"name": "System apparent power", "area": "holding", "address": 4134, "type": "float32", "scale": 0.001, "unit": "VA", "access": "R"},
    {"name": "Apparent power L1", "area": "holding", "address": 4136, "type": "float32", "scale": 0.001, "unit": "VA", "access": "R"},
    {"name": "Apparent power L2", "area": "holding", "address": 4138, "type": "float32", "scale": 0.001, "unit": "VA", "access": "R"},
    {"name": "Apparent power L3", "area": "holding", "address": 4140, "type": "float32", "scale": 0.001, "unit": "VA", "access": "R"},
    {"name": "System active power", "area": "holding", "address": 4142, "type": "float32", "scale": 0.001, "unit": "W", "access": "R"},
    {"name": "Active power L1", "area": "holding", "address": 4144, "type": "float32", "scale": 0.001, "unit": "W", "access": "R"},
    {"name": "Active power L2", "area": "holding", "address": 4146, "type": "float32", "scale": 0.001, "unit": "W", "access": "R"},
    {"name": "Active power L3", "area": "holding", "address": 4148, "type": "float32", "scale": 0.001, "unit": "W", "access": "R"},
    {"name": "System reactive power", "area": "holding", "address": 4150, "type": "float32", "scale": 0.001, "unit": "var", "access": "R"},
    {"name": "Reactive power L1", "area": "holding", "address": 4152, "type": "float32", "scale": 0.001, "unit": "var", "access": "R"},
    {"name": "Reactive power L2", "area": "holding", "address": 4154, "type": "float32", "scale": 0.001, "unit": "var", "access": "R"},
    {"name": "Reactive power L3", "area": "holding", "address": 4156, "type": "float32", "scale": 0.001, "unit": "var", "access": "R"},
    {"name": "Active energy import", "area": "holding", "address": 4158, "type": "float32", "scale": 0.001, "unit": "Wh", "access": "R"},
    {"name": "Reactive inductive energy import", "area": "holding", "address": 4160, "type": "float32", "scale": 0.001, "unit": "varh", "access": "R"},
    {"name": "Active energy export", "area": "holding", "address": 4162, "type": "float32", "scale": 0.001, "unit": "Wh", "access": "R"},
    {"name": "Reactive inductive energy export", "area": "holding", "address": 4164, "type": "float32", "scale": 0.001, "unit": "varh", "access": "R"},
    {"name": "Frequency", "area": "holding", "address": 4166, "type": "float32", "scale": 0.001, "unit": "Hz", "access": "R"},
    {"name": "Voltage THD L1", "area": "holding", "address": 4168, "type": "float32", "scale": 0.001, "unit": "%", "access": "R"},
    {"name": "Voltage THD L2", "area": "holding", "address": 4170, "type": "float32", "scale": 0.001, "unit": "%", "access": "R"},
    {"name": "Voltage THD L3", "area": "holding", "address": 4172, "type": "float32", "scale": 0.001, "unit": "%", "access": "R"},
    {"name": "Current THD L1", "area": "holding", "address": 4174, "type": "float32", "scale": 0.001, "unit": "%", "access": "R"},
    {"name": "Current THD L2", "area": "holding", "address": 4176, "type": "float32", "scale": 0.001, "unit": "%", "access": "R"},
    {"name": "Current THD L3", "area": "holding", "address": 4178, "type": "float32", "scale": 0.001, "unit": "%", "access": "R"},
    {"name": "Reactive capacitive energy import", "area": "holding", "address": 4184, "type": "float32", "scale": 0.001, "unit": "varh", "access": "R"},
    {"name": "Reactive capacitive energy export", "area": "holding", "address": 4186, "type": "float32", "scale": 0.001, "unit": "varh", "access": "R"},
    {"name": "Apparent energy import", "area": "holding", "address": 4188, "type": "float32", "scale": 0.001, "unit": "VAh", "access": "R"},
    {"name": "Apparent energy export", "area": "holding", "address": 4190, "type": "float32", "scale": 0.001, "unit": "VAh", "access": "R"},
    {"name": "Neutral current", "area": "holding", "address": 4192, "type": "float32", "scale": 0.001, "unit": "A", "access": "R"},
    {"name": "System current demand", "area": "holding", "address": 4194, "type": "float32", "scale": 0.001, "unit": "A", "access": "R"},
    {"name": "System active power demand", "area": "holding", "address": 4196, "type": "float32", "scale": 0.001, "unit": "W", "access": "R"},
    {"name": "System apparent power demand", "area": "holding", "address": 4198, "type": "float32", "scale": 0.001, "unit": "VA", "access": "R"},
    {"name": "Maximum current L1", "area": "holding", "address": 4200, "type": "float32", "scale": 0.001, "unit": "A", "access": "R"},
    {"name": "Maximum current L2", "area": "holding", "address": 4202, "type": "float32", "scale": 0.001, "unit": "A", "access": "R"},
    {"name": "Maximum current L3", "area": "holding", "address": 4204, "type": "float32", "scale": 0.001, "unit": "A", "access": "R"},
    {"name": "Maximum system current demand", "area": "holding", "address": 4206, "type": "float32", "scale": 0.001, "unit": "A", "access": "R"},
    {"name": "Maximum system active power demand", "area": "holding", "address": 4208, "type": "float32", "scale": 0.001, "unit": "W", "access": "R"},
    {"name": "Maximum system apparent power demand", "area": "holding", "address": 4210, "type": "float32", "scale": 0.001, "unit": "VA", "access": "R"}
  ]
}
