{
  "spec_version": 1,
  "slug": "solinteg-integ-one-gen3",
  "manufacturer": "Solinteg",
  "model": "Integ ONE GEN3 hybrid inverter (with its rebadges)",
  "category": "Solar inverter",
  "supplier_url": "https://www.solinteg.com/",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 255,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 10994,
      "count": 2,
      "name": "Meter phase A power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": -1,
      "offset": 0,
      "access": "R",
      "description": "Signed; the cited template negates it, so a positive register value means export."
    },
    {
      "address": 10996,
      "count": 2,
      "name": "Meter phase B power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": -1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 10998,
      "count": 2,
      "name": "Meter phase C power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": -1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 11000,
      "count": 2,
      "name": "Total power on meter",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": -1,
      "offset": 0,
      "access": "R",
      "description": "Signed; the cited template negates it, so a positive register value means export."
    },
    {
      "address": 11028,
      "count": 2,
      "name": "PV input total power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 30258,
      "count": 2,
      "name": "Battery power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 31102,
      "count": 2,
      "name": "Grid energy injected, total",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 31104,
      "count": 2,
      "name": "Grid energy purchased, total",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 31108,
      "count": 2,
      "name": "Battery energy charged, total",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 31110,
      "count": 2,
      "name": "Battery energy discharged, total",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 31112,
      "count": 2,
      "name": "PV input total energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 33000,
      "count": 1,
      "name": "Battery state of charge",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 50000,
      "count": 1,
      "name": "Battery work mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "The cited template writes 257 for normal, 258 for eco (hold) and 259 for UPS (charge)."
    },
    {
      "address": 52503,
      "count": 1,
      "name": "On-grid battery end state of charge",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Read by the template to seed its minimum-SOC setting; it is not written by it."
    },
    {
      "address": 52506,
      "count": 1,
      "name": "Battery maximum state of charge",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Present on newer firmware only, per the cited template."
    }
  ],
  "combined_registers": [],
  "notes": "Source: the evcc meter template https://raw.githubusercontent.com/evcc-io/evcc/master/templates/definition/meter/solinteg-gen3.yaml, used as a secondary source - no Solinteg register document was retrieved. The template covers the GEN3 hardware sold as Solinteg Integ ONE GEN3, M-TEC Energy Butler GEN3, Wattsonic 3p AIO GEN3, Sunways STH GEN3, A-Tronix Hybridpower AX2 GEN3 and SunEnergyBox SEB GEN3. It offers both RS-485 and TCP access with unit ID 255; this seed records the TCP path (port 502, unit ID 255), which is the one that needs no serial framing and is therefore the one this file can state without guessing. All values are holding registers (function code 3; the write at 50000 is a single-register write). The GEN2 generation has a different map (evcc template solinteg-gen2, unit ID 247) and is not covered here, because no public source states its factory RS-485 serial settings; see the delivery record for that skip. The template's battery-control writes and the min/max SOC services are the only writes it makes, and the two read-only SOC limit rows are included so on-site verification can compare them. Values the template does not publish (per-string PV, inverter temperatures, fault codes) are absent rather than guessed."
}
