{
  "spec_version": 1,
  "slug": "phoenix-em-cp-pp-eth",
  "manufacturer": "Phoenix Contact",
  "model": "EM-CP-PP-ETH (AC charging controller)",
  "category": "EV charger",
  "supplier_url": "https://www.phoenixcontact.com/en-be/products/ac-charging-controller-em-cp-pp-eth-2902802",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 180,
    "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."
    }
  ],
  "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": 108,
      "count": 2,
      "name": "Voltage L1",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Low word first, two decimals."
    },
    {
      "address": 110,
      "count": 2,
      "name": "Voltage L2",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Low word first, two decimals."
    },
    {
      "address": 112,
      "count": 2,
      "name": "Voltage L3",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Low word first, two decimals."
    },
    {
      "address": 114,
      "count": 2,
      "name": "Current L1",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "Low word first; evcc divides the raw value by 1000."
    },
    {
      "address": 116,
      "count": 2,
      "name": "Current L2",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "Low word first; evcc divides the raw value by 1000."
    },
    {
      "address": 118,
      "count": 2,
      "name": "Current L3",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "Low word first; evcc divides the raw value by 1000."
    },
    {
      "address": 120,
      "count": 2,
      "name": "Active power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 10,
      "offset": 0,
      "access": "R",
      "description": "Low word first. evcc scales the raw value by 1e3 and then by 0.01, i.e. raw x 10 W, so the raw unit is 0.01 kW."
    },
    {
      "address": 128,
      "count": 2,
      "name": "Active energy meter reading",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Low word first, two decimals (raw 100 = 1 kWh)."
    }
  ],
  "holding_registers": [
    {
      "address": 300,
      "count": 1,
      "name": "Maximum current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Current limit in amps, written by the energy management system."
    }
  ],
  "combined_registers": [],
  "notes": "Source: evcc's charger implementation for the Phoenix Contact EM-CP-PP-ETH (charger/phoenix-em-eth.go), used as a secondary source: it records the register numbers, the unit ID 180, the two-decimal (0.01) scaling of voltages, power and energy, the 0.001 scaling of the currents and the low-word-first decoding of every 32-bit value. Phoenix Contact publishes the product data sheet and user manual for this controller (the data sheet is linked as the supplier URL), but the register chapter is not part of the free web documentation, so the map itself comes from the secondary source. The controller is the Modbus TCP server on port 502 with unit ID 180, which is what makes it distinguishable from the other Phoenix EV-ETH family in this library. The meter rows only answer when a meter is fitted (evcc probes the L1 voltage for that); coil 400 switches charging on and off and register 300 is the current limit."
}
