{
  "spec_version": 1,
  "slug": "phoenix-ev-cc-ac1-eth",
  "manufacturer": "Phoenix Contact",
  "model": "EV-CC-AC1-M3-CBC-RCM-ETH / -3G / -XP (EV charge control)",
  "category": "EV charger",
  "supplier_url": "https://www.phoenixcontact.com/en-pc/products/ac-charging-controller-ev-cc-ac1-m3-cbc-rcm-eth-1018701",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 255,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "LowFirst"
  },
  "coils": [
    {
      "address": 400,
      "count": 1,
      "name": "Charging enable",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = charging enabled, 0 = disabled. Written with function code 05."
    },
    {
      "address": 419,
      "count": 1,
      "name": "Card reader enabled",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Read by evcc to decide whether a card reader is present."
    }
  ],
  "discrete_inputs": [],
  "input_registers": [
    {
      "address": 100,
      "count": 1,
      "name": "Charging status",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "IEC 61851-1 control-pilot state as an ASCII character in the low byte (A, B, C, E or F)."
    },
    {
      "address": 102,
      "count": 2,
      "name": "Charging duration",
      "data_type": "UInt32",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Low word first."
    },
    {
      "address": 105,
      "count": 2,
      "name": "Firmware version",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Phoenix firmware; the Wallbe firmware reports its version at 149 instead."
    },
    {
      "address": 108,
      "count": 2,
      "name": "Voltage L1",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Low word first."
    },
    {
      "address": 110,
      "count": 2,
      "name": "Voltage L2",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Low word first."
    },
    {
      "address": 112,
      "count": 2,
      "name": "Voltage L3",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Low word first."
    },
    {
      "address": 114,
      "count": 2,
      "name": "Current L1",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Low word first."
    },
    {
      "address": 116,
      "count": 2,
      "name": "Current L2",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Low word first."
    },
    {
      "address": 118,
      "count": 2,
      "name": "Current L3",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Low word first."
    },
    {
      "address": 120,
      "count": 2,
      "name": "Active power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Low word first."
    },
    {
      "address": 149,
      "count": 6,
      "name": "Firmware version (Wallbe firmware)",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Only present on wallboxes running the Wallbe variant of the controller firmware."
    }
  ],
  "holding_registers": [
    {
      "address": 528,
      "count": 1,
      "name": "Maximum current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Current limit written by the energy management system. Values of 60 and above are 0.1 A steps on the Wallbe firmware."
    },
    {
      "address": 606,
      "count": 16,
      "name": "Card UID",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "UID of the RFID card used for the session, when a card reader is enabled (coil 419)."
    },
    {
      "address": 904,
      "count": 2,
      "name": "Active energy meter reading",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "Lifetime meter reading in Wh, low word first; not available on the Wallbe firmware."
    }
  ],
  "combined_registers": [],
  "notes": "Source: evcc's charger implementation for the Phoenix Contact EV-ETH controller series (charger/phoenix-ev-eth.go), used as a secondary source -- it records the register numbers, the raw units and the low-word-first decoding of every 32-bit value. The register chapter itself is not part of the free Phoenix web documentation, so the supplier URL points at the vendor product page. The controller is the Modbus TCP server on port 502, unit ID 255 (evcc's template default), function codes 01/03/05/06; DIP switch 10 on the controller has to be set to ON. This one controller family sits inside a long list of wallboxes: Phoenix Contact EV-CC-AC1-M3-CBC-RCM-ETH, -3G and the -XP variants, Wallbe Eco / Eco 2.0(s) / Pro, ESL Walli LIGHT, E3/DC Easy Connect and Compleo Pro -- those are covered by this seed rather than by separate files. The Wallbe firmware variant reports a different firmware string (149 instead of 105), supports 0.1 A current steps and has no 32-bit meter-reading register at 904; its 64-bit counters at 2980 (lifetime Wh) and 3376 (session Wh) are left out because the app has no 64-bit integer type. Coil 400 is the charging enable, so a seed-level write here switches charging on and off; 528 is the current limit."
}
