{
  "spec_version": 1,
  "slug": "algodue-uem",
  "manufacturer": "Algodue Elettronica",
  "model": "UEM45 / UEM100 / UEMCT / UEMRGW / UEM2L / UEM4L",
  "category": "Energy meter",
  "supplier_url": "https://www.algodue.com/en/mid-energy-meters/",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst",
    "native_interface": "rs485",
    "serial": {
      "parity": "None",
      "baud_rate": 19200,
      "data_bits": 8,
      "stop_bits": 1
    }
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 4096,
      "count": 2,
      "name": "Phase 1 to neutral voltage",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4098,
      "count": 2,
      "name": "Phase 2 to neutral voltage",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4100,
      "count": 2,
      "name": "Phase 3 to neutral voltage",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4102,
      "count": 2,
      "name": "Phase 1 to phase 2 voltage",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4104,
      "count": 2,
      "name": "Phase 2 to phase 3 voltage",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4106,
      "count": 2,
      "name": "Phase 3 to phase 1 voltage",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4108,
      "count": 2,
      "name": "Phase to phase voltage average",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4110,
      "count": 2,
      "name": "Phase 1 current",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4112,
      "count": 2,
      "name": "Phase 2 current",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4114,
      "count": 2,
      "name": "Phase 3 current",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4116,
      "count": 2,
      "name": "Neutral current (calculated)",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4118,
      "count": 2,
      "name": "Phase currents average",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4120,
      "count": 2,
      "name": "Phase 1 power factor",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4122,
      "count": 2,
      "name": "Phase 2 power factor",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4124,
      "count": 2,
      "name": "Phase 3 power factor",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4126,
      "count": 2,
      "name": "System power factor",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4128,
      "count": 2,
      "name": "Phase 1 active power",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4130,
      "count": 2,
      "name": "Phase 2 active power",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4132,
      "count": 2,
      "name": "Phase 3 active power",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4134,
      "count": 2,
      "name": "System active power",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4136,
      "count": 2,
      "name": "Phase 1 apparent power",
      "data_type": "Float32",
      "units": "VA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4138,
      "count": 2,
      "name": "Phase 2 apparent power",
      "data_type": "Float32",
      "units": "VA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4140,
      "count": 2,
      "name": "Phase 3 apparent power",
      "data_type": "Float32",
      "units": "VA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4142,
      "count": 2,
      "name": "System apparent power",
      "data_type": "Float32",
      "units": "VA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4144,
      "count": 2,
      "name": "Phase 1 reactive power",
      "data_type": "Float32",
      "units": "var",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4146,
      "count": 2,
      "name": "Phase 2 reactive power",
      "data_type": "Float32",
      "units": "var",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4148,
      "count": 2,
      "name": "Phase 3 reactive power",
      "data_type": "Float32",
      "units": "var",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4150,
      "count": 2,
      "name": "System reactive power",
      "data_type": "Float32",
      "units": "var",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4152,
      "count": 2,
      "name": "System frequency",
      "data_type": "Float32",
      "units": "Hz",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4156,
      "count": 2,
      "name": "Phase to neutral voltage average",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4158,
      "count": 2,
      "name": "Phase currents sum",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4160,
      "count": 2,
      "name": "Phase 1 to neutral voltage THD",
      "data_type": "Float32",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4162,
      "count": 2,
      "name": "Phase 2 to neutral voltage THD",
      "data_type": "Float32",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4164,
      "count": 2,
      "name": "Phase 3 to neutral voltage THD",
      "data_type": "Float32",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4168,
      "count": 2,
      "name": "Phase 1 to phase 2 voltage THD",
      "data_type": "Float32",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4170,
      "count": 2,
      "name": "Phase 2 to phase 3 voltage THD",
      "data_type": "Float32",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4176,
      "count": 2,
      "name": "Phase 1 current THD",
      "data_type": "Float32",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4178,
      "count": 2,
      "name": "Phase 2 current THD",
      "data_type": "Float32",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4180,
      "count": 2,
      "name": "Phase 3 current THD",
      "data_type": "Float32",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4184,
      "count": 2,
      "name": "Phase 1 voltage-current angle",
      "data_type": "Float32",
      "units": "deg",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4186,
      "count": 2,
      "name": "Phase 2 voltage-current angle",
      "data_type": "Float32",
      "units": "deg",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4188,
      "count": 2,
      "name": "Phase 3 voltage-current angle",
      "data_type": "Float32",
      "units": "deg",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4190,
      "count": 2,
      "name": "Phase voltage-current angles average",
      "data_type": "Float32",
      "units": "deg",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4244,
      "count": 2,
      "name": "Phase 1 current demand",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4246,
      "count": 2,
      "name": "Phase 2 current demand",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4248,
      "count": 2,
      "name": "Phase 3 current demand",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4250,
      "count": 2,
      "name": "Neutral current demand",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4256,
      "count": 2,
      "name": "System active power demand",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4258,
      "count": 2,
      "name": "System apparent power demand",
      "data_type": "Float32",
      "units": "VA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4260,
      "count": 2,
      "name": "System reactive power demand",
      "data_type": "Float32",
      "units": "var",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4262,
      "count": 2,
      "name": "Phase 1 current demand MAX",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4264,
      "count": 2,
      "name": "Phase 2 current demand MAX",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4266,
      "count": 2,
      "name": "Phase 3 current demand MAX",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4268,
      "count": 2,
      "name": "Neutral current demand MAX",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4274,
      "count": 2,
      "name": "System active power demand MAX",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4276,
      "count": 2,
      "name": "System apparent power demand MAX",
      "data_type": "Float32",
      "units": "VA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4278,
      "count": 2,
      "name": "System reactive power demand MAX",
      "data_type": "Float32",
      "units": "var",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4352,
      "count": 2,
      "name": "Phase 1 imported active energy",
      "data_type": "Float32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4354,
      "count": 2,
      "name": "Phase 2 imported active energy",
      "data_type": "Float32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4356,
      "count": 2,
      "name": "Phase 3 imported active energy",
      "data_type": "Float32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4358,
      "count": 2,
      "name": "System imported active energy",
      "data_type": "Float32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4360,
      "count": 2,
      "name": "Phase 1 exported active energy",
      "data_type": "Float32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4362,
      "count": 2,
      "name": "Phase 2 exported active energy",
      "data_type": "Float32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4364,
      "count": 2,
      "name": "Phase 3 exported active energy",
      "data_type": "Float32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4366,
      "count": 2,
      "name": "System exported active energy",
      "data_type": "Float32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4432,
      "count": 2,
      "name": "Phase 1 imported reactive energy",
      "data_type": "Float32",
      "units": "varh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4434,
      "count": 2,
      "name": "Phase 2 imported reactive energy",
      "data_type": "Float32",
      "units": "varh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4436,
      "count": 2,
      "name": "Phase 3 imported reactive energy",
      "data_type": "Float32",
      "units": "varh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4438,
      "count": 2,
      "name": "Phase 1 exported reactive energy",
      "data_type": "Float32",
      "units": "varh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4440,
      "count": 2,
      "name": "Phase 2 exported reactive energy",
      "data_type": "Float32",
      "units": "varh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4442,
      "count": 2,
      "name": "Phase 3 exported reactive energy",
      "data_type": "Float32",
      "units": "varh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4444,
      "count": 2,
      "name": "System imported reactive energy",
      "data_type": "Float32",
      "units": "varh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4446,
      "count": 2,
      "name": "System exported reactive energy",
      "data_type": "Float32",
      "units": "varh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4448,
      "count": 2,
      "name": "System apparent energy",
      "data_type": "Float32",
      "units": "VAh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4450,
      "count": 2,
      "name": "Measure hour counter",
      "data_type": "Float32",
      "units": "h",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "The manual's IEEE column gives 0.1h as the unit of this counter."
    },
    {
      "address": 5120,
      "count": 2,
      "name": "System imported active energy, partial",
      "data_type": "Float32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 5122,
      "count": 2,
      "name": "System exported active energy, partial",
      "data_type": "Float32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 5130,
      "count": 2,
      "name": "System apparent energy, partial",
      "data_type": "Float32",
      "units": "VAh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 5136,
      "count": 2,
      "name": "System imported reactive energy, partial",
      "data_type": "Float32",
      "units": "varh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 5138,
      "count": 2,
      "name": "System exported reactive energy, partial",
      "data_type": "Float32",
      "units": "varh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 5140,
      "count": 2,
      "name": "System active energy balance (import - export)",
      "data_type": "Float32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 5150,
      "count": 2,
      "name": "System reactive energy balance (import - export)",
      "data_type": "Float32",
      "units": "varh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    }
  ],
  "combined_registers": [],
  "notes": "Sources: Algodue 'MODBUS Communication Protocol for energy meters with integrated RS485 interface - UEM45, UEM100, UEMCT, UEMRGW, UEM2L, UEM4L series', PROTOCOL MANUAL Ed2505, section 6 'READING Registers (Function code $03)' - https://www.algodue.com/wp-content/uploads/2025/10/NEW-UEM_MODBUS-protocol.pdf - and the UEM2L/UEM4L multilingual manual, wiring chapter 'Default value: 19200 bps' - https://www.algodue.com/wp-content/uploads/2026/05/UEM2L_UEM4L_MultilingualManual.pdf . The protocol manual states each meter is 'preset with a default slave address (01)' and fixes the RTU frame as '1 Start, 8 Bit, None, 1 Stop (8N1)'; the installation manual gives the factory speed, 19200 bps. Only the manual's IEEE-754 float bank is used: the parallel integer bank stores power in three 16-bit registers (24-bit values) that the app's register types cannot express. The float addresses are the manual's IEEE column, used as wire addresses, and the manual's worked conversion example (45AACC00h = 5465.5) shows the high word first, hence HighFirst. Float-bank values are already in engineering units (the 0.001 column belongs to the integer bank), so no scale is applied except on the hour counter. Deliberate omissions: the 24-bit integer bank, the minimum/MAX rows (the model columns mark them N/A for most variants), the phase-rotation and serial/model/status words, the channel 2-4 blocks (multi-load meters repeat the same layout at 4000h/6000h/8000h), the tariff counter blocks and every writable setup register."
}
