{
  "spec_version": 1,
  "slug": "vestel-evc04",
  "manufacturer": "Vestel",
  "model": "EVC04 series AC wallbox",
  "category": "EV charger",
  "supplier_url": "https://vestelmobility.com/products/electric-vehicle-charging-stations",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 255,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [
    {
      "address": 100,
      "count": 25,
      "name": "Serial number",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "16 significant digits, encoded as yymmddhhmmss plus padding."
    },
    {
      "address": 130,
      "count": 50,
      "name": "Charge point ID",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 190,
      "count": 10,
      "name": "Brand",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "For example Vestel, Webasto or E.ON Drive: the same firmware is sold under several brands."
    },
    {
      "address": 210,
      "count": 5,
      "name": "Model",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 230,
      "count": 50,
      "name": "Firmware version",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 290,
      "count": 2,
      "name": "Date",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Current date of the charge point as yyyymmdd."
    },
    {
      "address": 294,
      "count": 2,
      "name": "Time",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Current time of the charge point as hhmmss."
    },
    {
      "address": 400,
      "count": 2,
      "name": "Charge point power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Maximum power of the charge point."
    },
    {
      "address": 404,
      "count": 1,
      "name": "Number of phases",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = 1-phase, 1 = 3-phase."
    },
    {
      "address": 1000,
      "count": 1,
      "name": "Charge point state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = Available, 1 = Preparing, 2 = Charging, 3 = SuspendedEVSE, 4 = SuspendedEV, 5 = Finishing, 6 = Reserved, 7 = Unavailable, 8 = Faulted."
    },
    {
      "address": 1001,
      "count": 1,
      "name": "Charging state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = not charging (IEC 61851-1 states Ax, Bx, Dx or C1), 1 = charging (state C2)."
    },
    {
      "address": 1002,
      "count": 1,
      "name": "Equipment state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = initializing, 1 = running, 2 = fault, 3 = disabled, 4 = updating."
    },
    {
      "address": 1004,
      "count": 1,
      "name": "Cable state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = cable not connected, 1 = cable connected, vehicle not connected, 2 = cable and vehicle connected, 3 = cable and vehicle connected, cable locked."
    },
    {
      "address": 1006,
      "count": 2,
      "name": "EVSE fault code",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = no fault; other values are the EVSE fault code."
    },
    {
      "address": 1008,
      "count": 1,
      "name": "Current L1",
      "data_type": "UInt16",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1010,
      "count": 1,
      "name": "Current L2",
      "data_type": "UInt16",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1012,
      "count": 1,
      "name": "Current L3",
      "data_type": "UInt16",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1014,
      "count": 1,
      "name": "Voltage L1",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1016,
      "count": 1,
      "name": "Voltage L2",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1018,
      "count": 1,
      "name": "Voltage L3",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1020,
      "count": 2,
      "name": "Active power total",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1024,
      "count": 2,
      "name": "Active power L1",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1028,
      "count": 2,
      "name": "Active power L2",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1032,
      "count": 2,
      "name": "Active power L3",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1036,
      "count": 2,
      "name": "Meter reading",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Lifetime energy meter of the wallbox, raw value in 0.1 kWh."
    },
    {
      "address": 1100,
      "count": 1,
      "name": "Session max current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Maximum charging current possible for the active session."
    },
    {
      "address": 1102,
      "count": 1,
      "name": "EVSE min current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1104,
      "count": 1,
      "name": "EVSE max current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1106,
      "count": 1,
      "name": "Cable max current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1502,
      "count": 2,
      "name": "Session energy",
      "data_type": "UInt32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Energy transferred in the current charging session."
    },
    {
      "address": 1504,
      "count": 2,
      "name": "Session start time",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "hhmmss."
    },
    {
      "address": 1508,
      "count": 2,
      "name": "Session duration",
      "data_type": "UInt32",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1512,
      "count": 2,
      "name": "Session end time",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "hhmmss."
    }
  ],
  "holding_registers": [
    {
      "address": 2000,
      "count": 1,
      "name": "Failsafe current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Charging current applied when the Modbus master stops talking to the wallbox."
    },
    {
      "address": 2002,
      "count": 1,
      "name": "Failsafe timeout",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Communication timeout before the failsafe current is applied; default 20 s, failsafe period is timeout/2."
    },
    {
      "address": 5004,
      "count": 1,
      "name": "Charging current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Dynamic charging current setpoint written by the energy management system."
    },
    {
      "address": 6000,
      "count": 1,
      "name": "Alive register",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Watchdog between master and wallbox: the master writes 1 at least every failsafe timeout / 2 seconds (minimum 3 s), the EVSE reads the 1 and resets the register to 0."
    }
  ],
  "combined_registers": [],
  "notes": "Source: Vestel, \"EVC04 Modbus TCP/IP Specification\", revision v1.5 (24.06.2021) -- register map chapter 1 \"Slave Register Map\". The wallbox is the Modbus TCP slave, unit ID 255, port 502, one master connection at a time. Measurements, states and identification are input registers (function code 04), the writable settings are holding registers (function code 03/06); this matches the evcc implementation, which reads the meter and status block as input registers and writes 5004 with a single-register write. The same firmware is sold under several brands (Vestel, Webasto Unite, Ampure Unite, E.ON Drive vBox), so the brand and model strings differ per unit. Phase switching, RFID and the 1p/3p switch need firmware 3.187.0 / 3.156.0 or newer. Writing 5004 must be refreshed well inside the failsafe timeout, otherwise the wallbox falls back to the failsafe current; the alive register is the documented keep-alive."
}
