{
  "spec_version": 1,
  "slug": "etrel-inch",
  "manufacturer": "Etrel",
  "model": "INCH / INCH Duo",
  "category": "EV charger",
  "supplier_url": "https://etrel.atlassian.net/wiki/spaces/EKC/pages/3485665834/Modbus+Communication+with+INCH+products",
  "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": 0,
      "count": 1,
      "name": "Connector 1 status",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = unknown, 1 = available, 2 = preparing (unauthorized/disconnected), 3 = preparing (waiting for EV), 4 = charging, 5 = charging paused by EV, 6 = charging paused by EVSE, 7 = finishing, 8 = faulted, 9 = unpausing charging, 10 = unavailable, 11 = reserved."
    },
    {
      "address": 1,
      "count": 1,
      "name": "Connector 1 measured vehicle number of phases",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = three phases, 1 = single phase (L1), 2 = single phase (L2), 3 = single phase (L3), 4 = unknown, 5 = two phases."
    },
    {
      "address": 2,
      "count": 2,
      "name": "Connector 1 EV max phase current",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4,
      "count": 2,
      "name": "Connector 1 target current from power management or Modbus",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 6,
      "count": 2,
      "name": "Connector 1 frequency",
      "data_type": "Float32",
      "units": "Hz",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 8,
      "count": 2,
      "name": "Connector 1 voltage L1-N",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 10,
      "count": 2,
      "name": "Connector 1 voltage L2-N",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12,
      "count": 2,
      "name": "Connector 1 voltage L3-N",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 14,
      "count": 2,
      "name": "Connector 1 current L1",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 16,
      "count": 2,
      "name": "Connector 1 current L2",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 18,
      "count": 2,
      "name": "Connector 1 current L3",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 20,
      "count": 2,
      "name": "Connector 1 active power L1",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 22,
      "count": 2,
      "name": "Connector 1 active power L2",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 24,
      "count": 2,
      "name": "Connector 1 active power L3",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 26,
      "count": 2,
      "name": "Connector 1 active power, total",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 28,
      "count": 2,
      "name": "Connector 1 power factor",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 30,
      "count": 2,
      "name": "Connector 1 energy of running session",
      "data_type": "Float32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total imported active energy in the running charging session."
    },
    {
      "address": 44,
      "count": 2,
      "name": "Connector 1 EV max power",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Maximum power detected in the running charging session."
    },
    {
      "address": 46,
      "count": 2,
      "name": "Connector 1 EV planned energy",
      "data_type": "Float32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Energy planned to be delivered in the running charging session."
    },
    {
      "address": 53,
      "count": 1,
      "name": "Connector 1 selected charging mode",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = fast mode, 2 = smart mode."
    },
    {
      "address": 54,
      "count": 10,
      "name": "Connector 1 RFID UID of last session",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 100,
      "count": 1,
      "name": "Connector 2 status",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "INCH Duo only. Same enumeration as connector 1."
    },
    {
      "address": 101,
      "count": 1,
      "name": "Connector 2 measured vehicle number of phases",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "INCH Duo only. Same enumeration as connector 1."
    },
    {
      "address": 102,
      "count": 2,
      "name": "Connector 2 EV max phase current",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 104,
      "count": 2,
      "name": "Connector 2 target current from power management or Modbus",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 106,
      "count": 2,
      "name": "Connector 2 frequency",
      "data_type": "Float32",
      "units": "Hz",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 108,
      "count": 2,
      "name": "Connector 2 voltage L1-N",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 110,
      "count": 2,
      "name": "Connector 2 voltage L2-N",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 112,
      "count": 2,
      "name": "Connector 2 voltage L3-N",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 114,
      "count": 2,
      "name": "Connector 2 current L1",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 116,
      "count": 2,
      "name": "Connector 2 current L2",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 118,
      "count": 2,
      "name": "Connector 2 current L3",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 120,
      "count": 2,
      "name": "Connector 2 active power L1",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 122,
      "count": 2,
      "name": "Connector 2 active power L2",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 124,
      "count": 2,
      "name": "Connector 2 active power L3",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 126,
      "count": 2,
      "name": "Connector 2 active power, total",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 128,
      "count": 2,
      "name": "Connector 2 power factor",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 130,
      "count": 2,
      "name": "Connector 2 energy of running session",
      "data_type": "Float32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 144,
      "count": 2,
      "name": "Connector 2 EV max power",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 146,
      "count": 2,
      "name": "Connector 2 EV planned energy",
      "data_type": "Float32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 153,
      "count": 1,
      "name": "Connector 2 selected charging mode",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = fast mode, 2 = smart mode."
    },
    {
      "address": 154,
      "count": 10,
      "name": "Connector 2 RFID UID of last session",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 990,
      "count": 10,
      "name": "Charger serial number",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1000,
      "count": 10,
      "name": "Charger model",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1010,
      "count": 5,
      "name": "Charger hardware version",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1015,
      "count": 5,
      "name": "Charger software version",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1020,
      "count": 2,
      "name": "Charger number of connectors",
      "data_type": "Int32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1022,
      "count": 1,
      "name": "Connector 1 connector type",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = socket type 2, 2 = cable type 2, 3 = socket household, 4 = unknown."
    },
    {
      "address": 1023,
      "count": 1,
      "name": "Connector 1 number of phases",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = three phases, 1 = single phase (L1), 2 = single phase (L2), 3 = single phase (L3), 4 = unknown, 5 = two phases."
    },
    {
      "address": 1024,
      "count": 1,
      "name": "Connector 1 L1 connected to phase",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = L1, 2 = L2, 3 = L3."
    },
    {
      "address": 1025,
      "count": 1,
      "name": "Connector 1 L2 connected to phase",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = L1, 2 = L2, 3 = L3."
    },
    {
      "address": 1026,
      "count": 1,
      "name": "Connector 1 L3 connected to phase",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = L1, 2 = L2, 3 = L3."
    },
    {
      "address": 1028,
      "count": 2,
      "name": "Connector 1 custom max current",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1122,
      "count": 1,
      "name": "Connector 2 connector type",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "INCH Duo only. 1 = socket type 2, 2 = cable type 2, 3 = socket household, 4 = unknown."
    },
    {
      "address": 1123,
      "count": 1,
      "name": "Connector 2 number of phases",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "INCH Duo only."
    },
    {
      "address": 1124,
      "count": 1,
      "name": "Connector 2 L1 connected to phase",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "INCH Duo only. 1 = L1, 2 = L2, 3 = L3."
    },
    {
      "address": 1125,
      "count": 1,
      "name": "Connector 2 L2 connected to phase",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "INCH Duo only. 1 = L1, 2 = L2, 3 = L3."
    },
    {
      "address": 1126,
      "count": 1,
      "name": "Connector 2 L3 connected to phase",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "INCH Duo only. 1 = L1, 2 = L2, 3 = L3."
    },
    {
      "address": 1128,
      "count": 2,
      "name": "Connector 2 custom max current",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    }
  ],
  "holding_registers": [
    {
      "address": 1,
      "count": 1,
      "name": "Connector 1 stop charging",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "Command triggered by the write itself; the written value is ignored."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Connector 1 pause charging",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "Command triggered by the write itself; the written value is ignored."
    },
    {
      "address": 8,
      "count": 2,
      "name": "Connector 1 set current setpoint",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "Written with function code 16; the docs list this register in the write table only."
    },
    {
      "address": 10,
      "count": 1,
      "name": "Connector 1 cancel current setpoint",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "Command triggered by the write itself; the written value is ignored."
    },
    {
      "address": 11,
      "count": 2,
      "name": "Connector 1 set power setpoint",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "W"
    },
    {
      "address": 13,
      "count": 1,
      "name": "Connector 1 cancel power setpoint",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "Command triggered by the write itself; the written value is ignored."
    },
    {
      "address": 101,
      "count": 1,
      "name": "Connector 2 stop charging",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "INCH Duo only. Command triggered by the write itself."
    },
    {
      "address": 102,
      "count": 1,
      "name": "Connector 2 pause charging",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "INCH Duo only. Command triggered by the write itself."
    },
    {
      "address": 108,
      "count": 2,
      "name": "Connector 2 set current setpoint",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "INCH Duo only."
    },
    {
      "address": 110,
      "count": 1,
      "name": "Connector 2 cancel current setpoint",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "INCH Duo only. Command triggered by the write itself."
    },
    {
      "address": 111,
      "count": 2,
      "name": "Connector 2 set power setpoint",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "INCH Duo only."
    },
    {
      "address": 113,
      "count": 1,
      "name": "Connector 2 cancel power setpoint",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "INCH Duo only. Command triggered by the write itself."
    },
    {
      "address": 1004,
      "count": 1,
      "name": "Charger restart",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "Command triggered by the write itself; the written value is ignored."
    }
  ],
  "combined_registers": [],
  "notes": "Source: Etrel, \"INCH and DUO SmartHome Modbus TCP Registers master SPECIFICATIONS - V6.0 - 072025_02.xlsx\" (sheets 'ReadRegisters', 'Write registers' and 'Enumerations'), the vendor register list attached to \"Modbus Communication with INCH products\" in the Etrel Knowledge Centre (etrel.atlassian.net, page 3485665834) and downloadable without a login. The document states that the register numbers are the actual address values placed in the messages (not Modicon names) and that all values are big-endian, so this file uses zero-based addressing with high word first. Reading uses function code 04 on port 502, writing uses function code 16 (the write table is a separate list, so those entries are marked W); the vendor lists the unit identifier as free (the charger answers on the configured one, evcc uses 1). Connector 2 registers exist on the INCH Duo; on a single-connector INCH they are simply absent. Left out on purpose: the 64-bit rows the document defines -- running session duration (32), running session departure time (36), running session ID (40) and the lifetime meter value (48, int64 mWh) -- because the app has no 64-bit integer type, and the same rows' 32-bit counterparts do not exist. The building-load-guard and power-cluster blocks at 2000+ live on the second Modbus socket (port 503) and are not part of this device map."
}
