{
  "spec_version": 1,
  "slug": "schneider-evlink-pro-ac",
  "manufacturer": "Schneider Electric",
  "model": "EVlink Pro AC / Charge Pro",
  "category": "EV charger",
  "supplier_url": "https://www.se.com/ww/en/download/document/GEX1969300/",
  "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": 1,
      "count": 1,
      "name": "EV state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = state E (0 V), 1 = state F, not available (-12 V), 2 = A1 available, not ready (12 V), 3 = B1 EV connected, not ready (9 V), 4 = C1 charging, stop requested by EVSE (6 V), 5 = D1 charging with ventilation required, stop requested by EVSE (3 V), 6 = A2 available, ready (12 V PWM), 7 = B2 EV connected, ready (9 V PWM), 8 = C2 charging (6 V PWM), 9 = D2 charging with ventilation required (3 V PWM), 10 = control pilot wire invalid, 11 = control pilot wire symmetric, fault on the control circuit."
    },
    {
      "address": 150,
      "count": 1,
      "name": "OCPP status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = init, 1 = available, 2 = preparing, 3 = charging, 4 = suspended EV, 5 = suspended EVSE, 6 = finishing, 7 = reserved, 8 = unavailable, 9 = faulted."
    },
    {
      "address": 1150,
      "count": 1,
      "name": "EV presence",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = EV not present, 1 = EV present. Updated only when not charging."
    },
    {
      "address": 1212,
      "count": 1,
      "name": "Global release version, major",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1213,
      "count": 1,
      "name": "Global release version, minor",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1214,
      "count": 1,
      "name": "Global release version, build",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 2999,
      "count": 2,
      "name": "Current phase 1",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3001,
      "count": 2,
      "name": "Current phase 2",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3003,
      "count": 2,
      "name": "Current phase 3",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3009,
      "count": 2,
      "name": "Current phase, average",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3027,
      "count": 2,
      "name": "Voltage phase 1",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3029,
      "count": 2,
      "name": "Voltage phase 2",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3031,
      "count": 2,
      "name": "Voltage phase 3",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3035,
      "count": 2,
      "name": "Voltage phase, average",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3053,
      "count": 2,
      "name": "Active power phase 1",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3055,
      "count": 2,
      "name": "Active power phase 2",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3057,
      "count": 2,
      "name": "Active power phase 3",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3059,
      "count": 2,
      "name": "Active power, total",
      "data_type": "Float32",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3075,
      "count": 2,
      "name": "Apparent power, total",
      "data_type": "Float32",
      "units": "kVA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3083,
      "count": 2,
      "name": "Power factor",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3109,
      "count": 2,
      "name": "Frequency",
      "data_type": "Float32",
      "units": "Hz",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4000,
      "count": 1,
      "name": "Lifebit",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Communication watchdog. The charging station sets it to 1, the client resets it to 0; writing 2 deactivates the lifebit. When activated, communication counts as lost if the lifebit is not refreshed within the configured timeout."
    },
    {
      "address": 4001,
      "count": 1,
      "name": "Set command",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "3 = stop charge, 7 = suspend charge, 8 = restart charge, 9 = reboot, 40 = set available, 41 = set unavailable. The station resets the register to 0 afterwards and reports errors in 4002."
    },
    {
      "address": 4002,
      "count": 2,
      "name": "Command status",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Status of the previous remote command."
    },
    {
      "address": 4004,
      "count": 1,
      "name": "Set point",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Remote energy management setpoint in amps, 0 to 32 A; 99 means no charge in progress. A setpoint change is applied within 15 s."
    },
    {
      "address": 4005,
      "count": 1,
      "name": "Degraded set point, single phase",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Setpoint applied when the Modbus communication is lost, configured via eSetup. The guide's table marks 4005/4006 read-only, while its text says they are written by the external system; access is RW here to match the text."
    },
    {
      "address": 4006,
      "count": 1,
      "name": "Degraded set point, three phase",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Setpoint applied when the Modbus communication is lost, configured via eSetup; see the note on 4005."
    },
    {
      "address": 4007,
      "count": 2,
      "name": "Contactor charging time",
      "data_type": "UInt32",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Duration since the contactor closed."
    },
    {
      "address": 4009,
      "count": 2,
      "name": "Session charging time",
      "data_type": "UInt32",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Duration since the transaction started."
    },
    {
      "address": 4011,
      "count": 1,
      "name": "Last stop cause",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = none, 1 = emergency stop, 2 = EV disconnected, 3 = hard reset, 4 = local, 5 = other, 6 = power loss, 7 = reboot, 8 = remote, 9 = soft reset, 10 = unlock command, 11 = de-authorized."
    },
    {
      "address": 4012,
      "count": 2,
      "name": "Session energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "Consumed energy during the charging session in Wh."
    },
    {
      "address": 4020,
      "count": 2,
      "name": "Error group bitfield",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Currently raised error groups, one bit per group."
    },
    {
      "address": 4022,
      "count": 2,
      "name": "Error code bitfield",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Currently raised error codes, one bit per error."
    },
    {
      "address": 4024,
      "count": 1,
      "name": "Last event 0: event code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4025,
      "count": 1,
      "name": "Last event 0: start time",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4026,
      "count": 1,
      "name": "Last event 0: end time",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4027,
      "count": 1,
      "name": "Last event 1: event code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4028,
      "count": 1,
      "name": "Last event 1: start time",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4029,
      "count": 1,
      "name": "Last event 1: end time",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4030,
      "count": 1,
      "name": "Last event 2: event code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4031,
      "count": 1,
      "name": "Last event 2: start time",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4032,
      "count": 1,
      "name": "Last event 2: end time",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4033,
      "count": 1,
      "name": "Last event 3: event code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4034,
      "count": 1,
      "name": "Last event 3: start time",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4035,
      "count": 1,
      "name": "Last event 3: end time",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4040,
      "count": 10,
      "name": "EVSE model",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Two characters per register."
    },
    {
      "address": 4060,
      "count": 10,
      "name": "EVSE commercial reference",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Two characters per register."
    }
  ],
  "combined_registers": [],
  "notes": "Source: Schneider Electric, \"EVlink Pro AC - Modbus Connectivity Guide\", GEX1969300-04 (06/2023), chapter \"Registers\" plus the chapters \"Supported Commands\", \"Lifebit\" and \"EVlink Pro AC Modbus Interface\". The guide states that the table lists the registers accessible to the client \"on base 0\" and that the server ID is 255; its data-format chapter defines SINT32/UINT32 as high word first, so this file uses zero-based addressing with high word first. The PDF was read from a mirror of the vendor document (devicelib.my-gekko.com); the reference and revision are the vendor's own. The guide's section on the Modbus interface says the external system writes the degraded setpoints 4005/4006, so those two rows are RW here even though the register table marks the whole block read-only -- the seed follows the descriptive text and says so in the row descriptions. Left out: \"Energy Active TOT\" (3203) and \"Energy Reactive TOT\" (3219), both int64 in the guide, because the app has no 64-bit integer type; session energy (4012, uint32) carries the same value for a charging session. evcc's charger/schneider-v3.go drives the same addresses with function codes 03/06, which is how the table is to be read."
}
