{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "ABB",
  "model": "UNO DM Plus",
  "models": ["UNO DM Plus"],
  "vendor_website": "abb.com",
  "description": "Single-phase PV inverter (UNO-DM-Plus series) exposing the SunSpec inverter model over Modbus TCP and RTU: AC and DC measurements with scale factors, status, events and ratings",
  "revision": 3,
  "revised": "2026-10-18",
  "source": "SunSpec inverter model registers; list converted from the Modbus Database (MIT licence, Jibril Sharafi). Not verified against the manufacturer's documentation",
  "sources": [{"title": "UNO-DM-3.3/3.8/4.6/5.0-TL-PLUS-US Product manual", "version": "Rev A (M000037AG)", "url": "https://www.fimer.com/sites/default/files/UNO-DM-3.3_3.8_4.6_5.0-TL-PLUS-US-Product%20manual%20EN-RevA%28M000037AG%29.pdf", "note": "confirms the SunSpec Modbus TCP/RTU interface; the manual gives no register table"}, {"title": "SunSpec Information Model Reference: inverter models 101-103 and nameplate model 120", "note": "layout of the registers, scale factors, operating states, event bits and not-implemented values"}, {"title": "Modbus Database (Jibril Sharafi, MIT licence), table abb/uno-dm-plus", "url": "https://www.aggsoft.com/serial-data-logger/tutorials/modbus-data-logging/abb-uno-dm-plus.htm", "note": "original list of registers and addresses"}],
  "notes": ["ABB (now Fimer) UNO-DM-Plus single-phase inverter. The manufacturer's product manual only says the inverter has a SunSpec Modbus TCP/RTU interface and points to the SunSpec register map, so this map follows the SunSpec model layout.", "Values use scale factors: engineering value = register x 10^scale factor register. A scale factor of -32768 (and the other not-implemented values in sentinels) means the value is not available.", "The 32-bit event bit field is read as bits of its low word (address 40109). The byte order is not stated by the manual: SunSpec uses big-endian words.", "Not verified against the manufacturer's register table. Change x_status once the table of this inverter has been checked."],
  "byte_order": "big",
  "word_order": "big",
  "address_base": 0,
  "x_status": "unofficial",
  "x_origin": "modbus-database",
  "enums": {
    "operating_state": {"1": "Off", "2": "Sleeping", "3": "Starting", "4": "MPPT", "5": "Throttled", "6": "Shutting down", "7": "Fault", "8": "Standby"},
    "der_type": {"4": "PV device", "82": "PV with storage"}
  },
  "sentinels": {
    "int16": {"-32768": "Not implemented"},
    "uint16": {"0xFFFF": "Not implemented"},
    "uint32": {"0xFFFFFFFF": "Not implemented"}
  },
  "registers": [
    {"name": "AC current", "group": "AC side", "area": "holding", "address": 40070, "type": "uint16", "scale_factor": "A_SF", "unit": "A"},
    {"name": "AC current phase A", "group": "AC side", "area": "holding", "address": 40071, "type": "uint16", "scale_factor": "A_SF", "unit": "A"},
    {"name": "AC current phase B", "group": "AC side", "area": "holding", "address": 40072, "type": "uint16", "scale_factor": "A_SF", "unit": "A"},
    {"name": "AC current phase C", "group": "AC side", "area": "holding", "address": 40073, "type": "uint16", "scale_factor": "A_SF", "unit": "A"},
    {"name": "A_SF", "group": "AC side", "area": "holding", "address": 40074, "type": "int16"},
    {"name": "Voltage A-B", "group": "AC side", "area": "holding", "address": 40075, "type": "uint16", "scale_factor": "V_SF", "unit": "V"},
    {"name": "Voltage B-C", "group": "AC side", "area": "holding", "address": 40076, "type": "uint16", "scale_factor": "V_SF", "unit": "V"},
    {"name": "Voltage C-A", "group": "AC side", "area": "holding", "address": 40077, "type": "uint16", "scale_factor": "V_SF", "unit": "V"},
    {"name": "Voltage A-N", "group": "AC side", "area": "holding", "address": 40078, "type": "uint16", "scale_factor": "V_SF", "unit": "V"},
    {"name": "Voltage B-N", "group": "AC side", "area": "holding", "address": 40079, "type": "uint16", "scale_factor": "V_SF", "unit": "V"},
    {"name": "Voltage C-N", "group": "AC side", "area": "holding", "address": 40080, "type": "uint16", "scale_factor": "V_SF", "unit": "V"},
    {"name": "V_SF", "group": "AC side", "area": "holding", "address": 40081, "type": "int16"},
    {"name": "AC power", "group": "AC side", "area": "holding", "address": 40082, "type": "int16", "scale_factor": "W_SF", "unit": "W"},
    {"name": "W_SF", "group": "AC side", "area": "holding", "address": 40083, "type": "int16"},
    {"name": "Line frequency", "group": "AC side", "area": "holding", "address": 40084, "type": "uint16", "scale_factor": "Hz_SF", "unit": "Hz"},
    {"name": "Hz_SF", "group": "AC side", "area": "holding", "address": 40085, "type": "int16"},
    {"name": "AC apparent power", "group": "AC side", "area": "holding", "address": 40086, "type": "int16", "scale_factor": "VA_SF", "unit": "VA"},
    {"name": "VA_SF", "group": "AC side", "area": "holding", "address": 40087, "type": "int16"},
    {"name": "AC reactive power", "group": "AC side", "area": "holding", "address": 40088, "type": "int16", "scale_factor": "VAr_SF", "unit": "var"},
    {"name": "VAr_SF", "group": "AC side", "area": "holding", "address": 40089, "type": "int16"},
    {"name": "AC power factor", "group": "AC side", "area": "holding", "address": 40090, "type": "int16", "scale_factor": "PF_SF", "unit": "%"},
    {"name": "PF_SF", "group": "AC side", "area": "holding", "address": 40091, "type": "int16"},
    {"name": "AC energy", "group": "Energy", "area": "holding", "address": 40092, "type": "uint32", "scale_factor": "WH_SF", "unit": "Wh"},
    {"name": "WH_SF", "group": "Energy", "area": "holding", "address": 40094, "type": "int16"},
    {"name": "DC current", "group": "DC side", "area": "holding", "address": 40095, "type": "uint16", "scale_factor": "DCA_SF", "unit": "A"},
    {"name": "DCA_SF", "group": "DC side", "area": "holding", "address": 40096, "type": "int16"},
    {"name": "DC voltage", "group": "DC side", "area": "holding", "address": 40097, "type": "uint16", "scale_factor": "DCV_SF", "unit": "V"},
    {"name": "DCV_SF", "group": "DC side", "area": "holding", "address": 40098, "type": "int16"},
    {"name": "DC power", "group": "DC side", "area": "holding", "address": 40099, "type": "int16", "scale_factor": "DCW_SF", "unit": "W"},
    {"name": "DCW_SF", "group": "DC side", "area": "holding", "address": 40100, "type": "int16"},
    {"name": "Cabinet temperature", "group": "Temperatures", "area": "holding", "address": 40101, "type": "int16", "scale_factor": "Tmp_SF", "unit": "°C"},
    {"name": "Heat sink temperature", "group": "Temperatures", "area": "holding", "address": 40102, "type": "int16", "scale_factor": "Tmp_SF", "unit": "°C"},
    {"name": "Transformer temperature", "group": "Temperatures", "area": "holding", "address": 40103, "type": "int16", "scale_factor": "Tmp_SF", "unit": "°C"},
    {"name": "Other temperature", "group": "Temperatures", "area": "holding", "address": 40104, "type": "int16", "scale_factor": "Tmp_SF", "unit": "°C"},
    {"name": "Tmp_SF", "group": "Temperatures", "area": "holding", "address": 40105, "type": "int16"},
    {"name": "Operating state", "group": "Status", "area": "holding", "address": 40106, "type": "uint16", "enum": "operating_state"},
    {"name": "Vendor operating state", "group": "Status", "area": "holding", "address": 40107, "type": "uint16", "comment": "Vendor specific operating state code"},
    {"name": "Event: Ground fault", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 0, "comment": "Low word of the 32-bit event bit field (bit 0 = ground fault)"},
    {"name": "Event: DC over voltage", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 1},
    {"name": "Event: AC disconnect open", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 2},
    {"name": "Event: DC disconnect open", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 3},
    {"name": "Event: Grid disconnect", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 4},
    {"name": "Event: Cabinet open", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 5},
    {"name": "Event: Manual shutdown", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 6},
    {"name": "Event: Over temperature", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 7},
    {"name": "Event: Over frequency", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 8},
    {"name": "Event: Under frequency", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 9},
    {"name": "Event: AC over voltage", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 10},
    {"name": "Event: AC under voltage", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 11},
    {"name": "Event: Blown string fuse", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 12},
    {"name": "Event: Under temperature", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 13},
    {"name": "Event: Memory loss", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 14},
    {"name": "Event: Hardware test failure", "group": "Events", "area": "holding", "address": 40109, "type": "bool", "bit": 15},
    {"name": "Vendor events 1", "group": "Status", "area": "holding", "address": 40112, "type": "uint32", "comment": "Vendor defined bit field"},
    {"name": "Vendor events 2", "group": "Status", "area": "holding", "address": 40114, "type": "uint32", "comment": "Vendor defined bit field"},
    {"name": "Vendor events 3", "group": "Status", "area": "holding", "address": 40116, "type": "uint32", "comment": "Vendor defined bit field"},
    {"name": "Vendor events 4", "group": "Status", "area": "holding", "address": 40118, "type": "uint32", "comment": "Vendor defined bit field"},
    {"name": "DER type", "group": "Ratings", "area": "holding", "address": 40122, "type": "uint16", "enum": "der_type"},
    {"name": "Rated power", "group": "Ratings", "area": "holding", "address": 40123, "type": "uint16", "scale_factor": "WRtg_SF", "unit": "W"},
    {"name": "WRtg_SF", "group": "Ratings", "area": "holding", "address": 40124, "type": "int16"},
    {"name": "Rated apparent power", "group": "Ratings", "area": "holding", "address": 40125, "type": "uint16", "scale_factor": "VARtg_SF", "unit": "VA"},
    {"name": "VARtg_SF", "group": "Ratings", "area": "holding", "address": 40126, "type": "int16"},
    {"name": "Rated reactive power, quadrant 1", "group": "Ratings", "area": "holding", "address": 40127, "type": "int16", "scale_factor": "VArRtg_SF", "unit": "var"},
    {"name": "Rated reactive power, quadrant 2", "group": "Ratings", "area": "holding", "address": 40128, "type": "int16", "scale_factor": "VArRtg_SF", "unit": "var"},
    {"name": "Rated reactive power, quadrant 3", "group": "Ratings", "area": "holding", "address": 40129, "type": "int16", "scale_factor": "VArRtg_SF", "unit": "var"},
    {"name": "Rated reactive power, quadrant 4", "group": "Ratings", "area": "holding", "address": 40130, "type": "int16", "scale_factor": "VArRtg_SF", "unit": "var"},
    {"name": "VArRtg_SF", "group": "Ratings", "area": "holding", "address": 40131, "type": "int16"}
  ]
}
