ChargeLink as Vehicle
In the vehicle role ChargeLink is the vehicle-side communication controller (EV/EVCC), and your device under test (DUT) is the charger: a charger, an SECC or a charger simulator. ChargeLink discovers your charger through SDP or connects directly to a known IPv6 address and TCP port, negotiates the application protocol, runs the session with a simulated battery, and records every frame. This page covers what the vehicle role does and where its limits are.
The vehicle session per standard
| Standard | Vehicle session for your DUT | Command | Runbook |
|---|---|---|---|
| ISO 15118-20 | Full DC EIM session against your charger, with SDP or direct TCP and TLS 1.3 mutual authentication. A transport and TLS probe checks your charger first. | evcc activate-profile with the EV case files from the kit; evcc tls-handshake-probe | ISO 15118-20 |
| MCS (ISO 15118-20 over 10BASE-T1S) | ISO 15118-20 DC session with the MCS energy service. In this release, the MCS vehicle connects to a ChargeLink charger: it waits for the CE/ID signals on the coupler link, a ChargeLink interface. | evcc activate-profile --energy-service mcs --mcs-coupler-link ... | MCS |
| ISO 15118-2 | One standards-encoded DC EIM session over TCP or TLS 1.2. In this release, it connects to a ChargeLink charger. Against your charger, the TLS probe checks transport and TLS. | iso2-evcc; evcc tls-handshake-probe | ISO 15118-2 |
| DIN 70121 | One standards-encoded DC session over TCP. In this release, it connects to a ChargeLink charger. | din-evcc | DIN 70121 |
| IEC 61851-23/-24 System A (CHAdeMO) | EV role on the CAN bus. In this release, the EV connects to a ChargeLink station, which tells it over the plant link which case to run. | dc-can chademo ev | CHAdeMO |
The evcc start reference profiles for ISO 15118-2 and DIN 70121 do not send standards-encoded EXI, so a charger cannot decode them; use them only for dry-runs and simulation. To run this vehicle against ChargeLink as charger instead of a DUT, see Self-test without a device under test; for seeded offline simulations, see Deterministic Simulation.
Commands at a glance
| Use | Command | Notes |
|---|---|---|
| Validate configuration | evcc start --dry-run | Opens no socket. |
| Probe your charger's transport and mutual TLS | evcc tls-handshake-probe | Transport and TLS only; no SDP, V2GTP or EXI. |
| Full ISO 15118-20 DC EIM session against your charger | evcc activate-profile | Requires the EV case files (see below) and a charger that accepts TLS 1.3 mutual. |
| Integrate a third-party vehicle simulator into the evidence flow | evcc external-smoke, evcc external-regression-pack | See below. |
Backends and battery models
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc backends
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc battery-models
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc profiles
Backends accepted by evcc start: native, loopback, direct-tcp. The other names listed (external-hlc, external-evcc-smoke, external-evcc-ipv6-regression, local-executable-loopback) identify the dedicated commands evcc external-smoke, evcc external-regression-pack and evcc local-loopback-smoke. There is no ethernet backend; using it fails with CL-CONFIG-001.
| Battery model | Behaviour | Inputs |
|---|---|---|
constant_power_reference (default) | Charges at the requested power until the target SoC | --battery-capacity-kwh (77), --initial-soc-pct (32), --target-soc-pct (80), --requested-power-kw (150), --battery-step-seconds (30) |
ramp_reference | Tapers requested power near the target SoC |
Both models are simulation references only; they do not model cell chemistry or thermal behaviour.
Discovery: SDP or direct TCP
- SDP (standard flow).
--use-sdp --interface-index Nonactivate-profile, or the default transport mode ofevcc start. ChargeLink multicasts an SDP request toff02::1on UDP 15118 through the given interface and connects to the address and port in your charger's response. - Direct TCP.
--peer-ipv6 fe80::...%N --tcp-port Pwithout--use-sdponactivate-profile(onevcc startadd--no-sdp). Bypasses discovery; useful to isolate transport problems. Add--probe-peerto TCP-probe first and--connect-timeout-ms(default 250) for slow links.
The zone index after % is always the index of the adapter on this machine. Copying your charger's own zone index produces "unreachable network".
Transport and TLS probe
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc tls-handshake-probe `
--protocol iso15118-20 --profile-id iso15118_20_dc_evcc_reference `
--peer-ipv6 ('fe80::<DUT_ADDRESS>%' + $IfIndex) --tcp-port 50118 --connect-timeout-ms 1000 `
--tls --tls-cert "$Pki\vehicle-chain.pem" --tls-key "$Pki\vehicle-key.pem" --tls-cafile "$Pki\v2g-root-ca.pem" --require-ca `
--tls-server-name chargelink-secc.local
The probe connects, completes the TLS 1.3 handshake, waits a bounded settlement time and closes. It sends no SDP, no V2GTP and no EXI. The status field reports what your charger decided; the process exit code only reports whether the probe itself ran. Negative probes (untrusted vehicle certificate, untrusted root, missing client certificate) are the fastest way to prove your charger's certificate policy.
Live ISO 15118-20 DC EIM session
The live session runs the 14-step DC EIM vector with real SDP, TLS 1.3 mutual authentication, V2GTP and standards-encoded EXI against your charger. The vehicle role refuses to run without two files that name every operating value explicitly; both are delivered in the vehicle folder of the kit (vehicle\cases), and their EV values are test values, not a vehicle implementation. The kit has a charger\ and a vehicle\ folder.
- Set
CHARGELINK_ISO20_LIVE_SEMANTIC_CASEto an EV case JSON, for examplevehicle\cases\nominal.json(vehicle identity and electrical parameters). - Set
CHARGELINK_ISO20_FULL_WIRE_SESSION_MANIFESTto the full-wire session manifestvehicle\cases\full-wire-session-manifest.json. - Run
evcc activate-profilewith profileiso15118_20_dc_evcc_reference, TLS material and--max-steps 14.
The exact command lines are in the ISO 15118-20 runbook. The live case file contains: evcc_id (ISO 15118-20 Annex C format with check digit), present/precharge/target voltage, target current, power, EV maximum and minimum power, current and voltage, profile duration, maximum supporting points, tolerances, emergency safe limits, precharge and charge-loop timeouts. Any non-positive electrical value or an invalid EVCCID check digit is rejected before the first packet is sent. The values of the case you choose must fit your charger's operating range.
External simulator harness
evcc external-smoke starts a third-party vehicle simulator process you name with --simulator-command and --simulator-arg, waits for it, and records the outcome against the given charger. evcc external-regression-pack runs the standards-oriented IPv6 regression set (--profile-set standards-ipv6-core, an optional diagnostic IPv4 case). Both integrate an external simulator into your evidence flow.
Lifecycle
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc status
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc list-state
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc stop
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json runtime list --role evcc
The vehicle role uses the same session directory layout and role lock (active\evcc.lock.json) as the charger role. One vehicle session per runtime root.
Evidence produced by the vehicle role
session.json (backend, peer, port, TLS, protocol stack, status), summary.json (required versus observed states), protocol_session.json (executed steps, battery snapshot), protocol_summary.json (sdp/tcp/tls/v2gtp observed flags), expected_sequence.json and observed_live_sequence.json, conformance_traceability.json (blocked claims), diagnostics.json (missing states and operator action), traces\evcc-loopback.jsonl, traces\live-v2gtp-frames.jsonl, evcc_message_trace.jsonl, manifest.json. Certificate and key paths are recorded in protocol_session.json; key material is never copied. How to read the run folder is in Trace, Evidence and Reports.

