{
  "spec_version": 1,
  "slug": "ingeteam-ingecon-sun",
  "manufacturer": "Ingeteam",
  "model": "INGECON SUN (1Play / 3Play, storage versions)",
  "category": "Solar inverter",
  "supplier_url": "https://www.ingeteam.com/",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [
    {
      "address": 15,
      "count": 1,
      "name": "Inverter status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 stopped, 1 starting, 2 off-grid, 3 on-grid, 4 on-grid (standby battery), 5 waiting to connect to grid, 6 critical loads bypassed to grid, 7 emergency charge from PV, 8 emergency charge from grid, 9 inverter locked waiting for reset, 10 error mode."
    },
    {
      "address": 16,
      "count": 1,
      "name": "Waiting time to connect to grid",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 17,
      "count": 1,
      "name": "Battery voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 18,
      "count": 1,
      "name": "Battery current",
      "data_type": "Int16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 19,
      "count": 1,
      "name": "Battery power",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Signed: positive is discharging, negative is charging (the source splits it into discharge = max(0, value) and charge = max(0, -value))."
    },
    {
      "address": 20,
      "count": 1,
      "name": "Battery state of charge",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 21,
      "count": 1,
      "name": "Battery state of health",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 22,
      "count": 1,
      "name": "Battery charging voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 23,
      "count": 1,
      "name": "Battery discharging voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 24,
      "count": 1,
      "name": "Battery maximum charging current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 25,
      "count": 1,
      "name": "Battery maximum discharging current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 26,
      "count": 1,
      "name": "Battery status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 standby, 1 discharging, 2 constant current charging, 3 constant voltage charging, 4 floating, 5 equalizing, 6 error communicating with BMS, 7 not configured, 8 capacity calibration step 1, 9 capacity calibration step 2, 10 standby manual."
    },
    {
      "address": 27,
      "count": 1,
      "name": "Battery temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 28,
      "count": 1,
      "name": "Battery BMS alarm code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 high current charge, 1 high voltage, 2 low voltage, 3 high temperature, 4 low temperature, 5 BMS internal, 6 cell imbalance, 7 high current discharge, 8 system BMS error."
    },
    {
      "address": 29,
      "count": 1,
      "name": "Battery discharge limitation reason",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 no limitation, 1 heat sink temperature, 2 PT100 temperature, 3 low bus voltage protection, 4 battery settings, 5 BMS communication, 6 SOC max configured, 7 SOC min configured, 8 maximum battery power, 9 Modbus command, 10 digital input 2, 11 digital input 3, 12 PV charging scheduling, 13 EMS strategy."
    },
    {
      "address": 30,
      "count": 1,
      "name": "Battery voltage, internal sensor",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 31,
      "count": 1,
      "name": "PV1 voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 32,
      "count": 1,
      "name": "PV1 current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 33,
      "count": 1,
      "name": "PV1 power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 34,
      "count": 1,
      "name": "PV2 voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 35,
      "count": 1,
      "name": "PV2 current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 36,
      "count": 1,
      "name": "PV2 power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 37,
      "count": 1,
      "name": "Inverter active power",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 38,
      "count": 1,
      "name": "Inverter reactive power",
      "data_type": "Int16",
      "units": "var",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "The source's unit column says W for this row while the meter blocks below use Var; the register is the inverter's reactive power."
    },
    {
      "address": 39,
      "count": 1,
      "name": "Inverter power factor",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 40,
      "count": 1,
      "name": "Active power reduction ratio",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 41,
      "count": 1,
      "name": "Active power reduction reason",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 no limitation, 1 communication, 2 PCB temperature, 3 heat sink temperature, 4 Pac vs Fac algorithm, 5 soft start, 6 charge power configured, 7 PV surplus injected to the loads, 8 Pac vs Vac algorithm, 9 battery power limited, 10 AC grid power limited, 11 self-consumption mode, 12 high bus voltage protection, 13 LVRT or HVRT process, 14 nominal AC current, 15 grid consumption protection, 16 PV surplus injected to the grid."
    },
    {
      "address": 43,
      "count": 1,
      "name": "Critical loads voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 44,
      "count": 1,
      "name": "Critical loads current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 45,
      "count": 1,
      "name": "Critical loads frequency",
      "data_type": "UInt16",
      "units": "Hz",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 46,
      "count": 1,
      "name": "Critical loads active power",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 47,
      "count": 1,
      "name": "Critical loads reactive power",
      "data_type": "Int16",
      "units": "var",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 48,
      "count": 1,
      "name": "Internal meter voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 49,
      "count": 1,
      "name": "Internal meter current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 50,
      "count": 1,
      "name": "Internal meter frequency",
      "data_type": "UInt16",
      "units": "Hz",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 51,
      "count": 1,
      "name": "Internal meter active power",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 52,
      "count": 1,
      "name": "Internal meter reactive power",
      "data_type": "Int16",
      "units": "var",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 53,
      "count": 1,
      "name": "Internal meter power factor",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 54,
      "count": 1,
      "name": "DC bus voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 55,
      "count": 1,
      "name": "Temperature, module 1",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 56,
      "count": 1,
      "name": "Temperature, module 2",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 57,
      "count": 1,
      "name": "Temperature, PCB",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 61,
      "count": 1,
      "name": "RMS differential current",
      "data_type": "UInt16",
      "units": "mA",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 62,
      "count": 1,
      "name": "Digital output 1 status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 off, 1 on."
    },
    {
      "address": 63,
      "count": 1,
      "name": "Digital output 2 status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 off, 1 on."
    },
    {
      "address": 64,
      "count": 1,
      "name": "Digital input DRM0 status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 off, 1 on."
    },
    {
      "address": 65,
      "count": 1,
      "name": "Digital input 2 status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 off, 1 on."
    },
    {
      "address": 66,
      "count": 1,
      "name": "Digital input 3 status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 off, 1 on."
    },
    {
      "address": 69,
      "count": 1,
      "name": "External meter voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 70,
      "count": 1,
      "name": "External meter frequency",
      "data_type": "UInt16",
      "units": "Hz",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 71,
      "count": 1,
      "name": "External meter active power",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Signed: the source splits it into import = max(0, value) and export = max(0, -value)."
    },
    {
      "address": 72,
      "count": 1,
      "name": "External meter reactive power",
      "data_type": "Int16",
      "units": "var",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 78,
      "count": 1,
      "name": "Total loads power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 79,
      "count": 1,
      "name": "External PV power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 80,
      "count": 1,
      "name": "EV charger power",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    }
  ],
  "holding_registers": [],
  "combined_registers": [],
  "notes": "INGECON SUN inverters (1Play / 3Play string and storage versions) serve this map over Modbus TCP on port 502, unit ID 1. Source: the community Home Assistant integration https://github.com/vortizhe/home-assistant-ingeteam-modbus - its hub reads 81 input registers starting at wire address 0 (custom_components/ingeteam_modbus/__init__.py) and const.py carries the units and the status enums used here - plus a cross-check against a second community template, https://github.com/solideus/Ingeteam-ingecon-homeassistant-modbus/blob/main/modbus.yaml, which reads the same offsets for external-meter active power (71), battery power (19), inverter active power (37), PV1 (33) and PV2 (36). Both are secondary sources; no Ingeteam register document was retrieved, so treat the scales as the integrations' decoding rather than a vendor statement. Address convention: the integrations comment their registers with Ingeteam's 30001-based numbers, so documented 30001+n is wire address n; this file lists the wire addresses and declares zero_based addressing. The 32-bit rows in the source (operating time 30007-8 and alarm code 30011-12, both low word first) are left out: the operating time has no documented unit and the alarm code would need the whole map switched to LowFirst word order, so no 32-bit row is included and the default HighFirst stands. The isolation resistances (59/60) are omitted because the source lists no unit for them; the reactive set-point type (42) and the reserved gaps are omitted as well."
}
