{
  "spec_version": 1,
  "slug": "fimer-trio-50-60",
  "manufacturer": "FIMER",
  "model": "TRIO-50.0/60.0-TL-OUTD (ABB-branded TRIO-TM-50.0-400 / TRIO-TM-60.0-480)",
  "category": "Solar inverter",
  "supplier_url": "https://www.fimer.com/products-and-services/solar/legacy",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 2,
    "addressing": "one_based",
    "byte_order": "BigEndian",
    "word_order": "LowFirst",
    "native_interface": "rs485",
    "serial": {
      "parity": "None",
      "baud_rate": 19200,
      "data_bits": 8,
      "stop_bits": 1
    }
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [
    {
      "address": 1000,
      "count": 1,
      "name": "Inverter ID",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fixed value 261."
    },
    {
      "address": 1001,
      "count": 1,
      "name": "Inverter block Modbus map size",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fixed value 132."
    },
    {
      "address": 1002,
      "count": 1,
      "name": "Inverter presence",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = device present."
    },
    {
      "address": 1003,
      "count": 6,
      "name": "Inverter part number",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fixed value \"-3N63-\"."
    },
    {
      "address": 1009,
      "count": 6,
      "name": "Inverter serial number",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1015,
      "count": 2,
      "name": "Manufacture date (week)",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1017,
      "count": 2,
      "name": "Manufacture date (year)",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Register value = year of manufacture - 2000."
    },
    {
      "address": 1019,
      "count": 1,
      "name": "Inverter type",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "ASCII code, annex 1 of the document (78 = \"N\" photovoltaic inverter, 87 = \"W\" wind inverter)."
    },
    {
      "address": 1020,
      "count": 1,
      "name": "Grid type",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "ASCII country/grid standard code, annex 2 of the document."
    },
    {
      "address": 1022,
      "count": 1,
      "name": "Model type",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Annex 14 of the document."
    },
    {
      "address": 1050,
      "count": 1,
      "name": "Global state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Annex 3: 6 = run. The document's own example reads data address 1050 (PDU 0x419 = 1049)."
    },
    {
      "address": 1051,
      "count": 1,
      "name": "Alarm state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Annex 4."
    },
    {
      "address": 1052,
      "count": 1,
      "name": "DC/DC converter state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Annex 5 (debug)."
    },
    {
      "address": 1053,
      "count": 1,
      "name": "DC/AC converter state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Annex 6 (debug)."
    },
    {
      "address": 1054,
      "count": 1,
      "name": "Derating state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Annex 7."
    },
    {
      "address": 1090,
      "count": 2,
      "name": "Mean grid voltage (phase to neutral)",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32): the low word is at the lower address."
    },
    {
      "address": 1092,
      "count": 2,
      "name": "Mean output current (phase to neutral)",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32)."
    },
    {
      "address": 1094,
      "count": 2,
      "name": "Output active power, instantaneous",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32)."
    },
    {
      "address": 1096,
      "count": 2,
      "name": "Output active power, absolute peak",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32)."
    },
    {
      "address": 1098,
      "count": 2,
      "name": "Output active power, daily peak",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32)."
    },
    {
      "address": 1100,
      "count": 2,
      "name": "Active power feedback on curtailment applied",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32)."
    },
    {
      "address": 1102,
      "count": 2,
      "name": "Reactive power feedback on set point applied",
      "data_type": "Float32",
      "units": "var",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32)."
    },
    {
      "address": 1104,
      "count": 2,
      "name": "Power factor feedback on set point applied",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32)."
    },
    {
      "address": 1106,
      "count": 2,
      "name": "Mean grid frequency",
      "data_type": "Float32",
      "units": "Hz",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32)."
    },
    {
      "address": 1108,
      "count": 2,
      "name": "Active power on DC input 1",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32)."
    },
    {
      "address": 1110,
      "count": 2,
      "name": "Voltage on DC input 1",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32)."
    },
    {
      "address": 1112,
      "count": 2,
      "name": "Current on DC input 1",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32)."
    },
    {
      "address": 1114,
      "count": 2,
      "name": "Active power on DC input 2",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32); TRIO-TM only."
    },
    {
      "address": 1116,
      "count": 2,
      "name": "Voltage on DC input 2",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32); TRIO-TM only."
    },
    {
      "address": 1118,
      "count": 2,
      "name": "Current on DC input 2",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32); TRIO-TM only."
    },
    {
      "address": 1120,
      "count": 2,
      "name": "Internal temperature (DC box)",
      "data_type": "Float32",
      "units": "°C",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32); refreshes more slowly than the other measurements."
    },
    {
      "address": 1122,
      "count": 2,
      "name": "Inverter temperature (DC/AC converter)",
      "data_type": "Float32",
      "units": "°C",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32)."
    },
    {
      "address": 1126,
      "count": 2,
      "name": "Isolation resistance",
      "data_type": "Float32",
      "units": "MOhm",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32); start-up value."
    },
    {
      "address": 1128,
      "count": 2,
      "name": "Maximum leakage current",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32); maximum leakage current in case of a ground fault."
    },
    {
      "address": 1130,
      "count": 2,
      "name": "Active power on DC input 3",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32); TRIO-TM only."
    },
    {
      "address": 1132,
      "count": 2,
      "name": "Voltage on DC input 3",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32); TRIO-TM only."
    },
    {
      "address": 1134,
      "count": 2,
      "name": "Current on DC input 3",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Word-swapped float (SF32); TRIO-TM only."
    },
    {
      "address": 3650,
      "count": 1,
      "name": "Map version, family product",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fixed value \"G\" (71)."
    },
    {
      "address": 3651,
      "count": 1,
      "name": "Map version, product model",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fixed value \"t\" (116)."
    },
    {
      "address": 3652,
      "count": 1,
      "name": "Map version, major release",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fixed value \"3\" (51)."
    },
    {
      "address": 3653,
      "count": 1,
      "name": "Map version, minor release",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fixed value \"0\" (48)."
    },
    {
      "address": 3654,
      "count": 1,
      "name": "Map version, build",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    }
  ],
  "holding_registers": [
    {
      "address": 180,
      "count": 1,
      "name": "Remote on/off",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "0 = remote on, 1 = remote off. Only executed when the \"Remote on/off\" function is enabled in the inverter."
    },
    {
      "address": 205,
      "count": 1,
      "name": "Reset reactive power / power factor management",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "Writing 1 forces the reactive power (PF) back to zero (PF = 1); the register resets itself to 0."
    },
    {
      "address": 210,
      "count": 1,
      "name": "Dynamic mode active power set point",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "Active power curtailment as a percentage of nominal power, 0-100; used with the transient configuration at data addresses 190, 191 and 198."
    }
  ],
  "combined_registers": [],
  "notes": "Source: \"ABB solar inverters - Modbus RTU Register Map, Version Gt03.0, TRIO-50.0/60.0-TL-OUTD, TRIO-TM-50.0-400, TRIO-TM-60.0-480\", effective 31/01/2018 Rev. 3.0, vendor-hosted at https://www.fimer.com/sites/default/files/Modbus_RTU_register_map_for_TRIO-50%200_60%200_Revision_3.4.pdf (FIMER took over ABB's solar business; the document is still ABB-branded). Peripheral settings from the document: RS-485 half duplex, baud rate 2400-115200 with 19200 as the default, 1 start bit, 1 stop bit, 8 data bits, no parity by default (even/odd selectable), big-endian, minimum timeout 100 ms. The document's own arithmetic fixes the addressing: \"Modbus Data Address ... can be translated as Modbus Register + 1\", with three worked examples (data address 1050 = PDU 0x419 = 1049, data address 1072 = PDU 0x42F = 1071, data address 507 = PDU 0x1FA = 506), so the seed stores the printed addresses and declares one_based. Word order is LowFirst because every measurement is an SF32 \"Word Swapped Floating Point\" whose low word sits at the lower address. The slave ID is set with Aurora Manager Lite and the document states no factory value; the examples all use address 2. Address 2 is therefore a placeholder, not a cited value, and the user must set their inverter's own address. Deliberate omissions: the U32 energy rows at 1070-1080 (daily/total/partial/weekly/monthly/yearly, Wh) - they are plain big-endian U32, not word-swapped, and this schema has a single device-wide word order, so they cannot be listed next to the SF32 rows without one of the two groups decoding wrongly; the writable power-management blocks at 190-227 and 501-513 beyond the three commands listed above, which are grid-code setpoints (Q(V), P(f), cosphi curves) whose ranges differ per grid standard; and the string rows whose fixed values are already described in the row descriptions."
}
