ChargeLink Native

ISO 15118-2 Operator Runbook

ChargeLink Native runs the ISO 15118-2 (2014) charger side for AC and DC sessions against an external vehicle or EVCC simulator. The native EXI codec round-trips the complete ISO 15118-2 message set (urn:iso:15118:2:2013:MsgDef). The live listener is a reference responder: each decoded request is answered with the validated reference response for that message type. It is intended for engineering and test development, not for conformance testing.

Profile selection

PurposeProfile IDTLS
DC EVSE, EIMiso15118_2_dc_evse_reference (canonical), iso2-dc-eim-nominal, dc_fast (aliases)optional
DC EVSE, EIM over TLS 1.2 with a Windows SChannel identityiso2-dc-eim-tls-schannel, iso2-dc-eim-tls, iso15118_2_dc_tls_evse_referenceSChannel (PFX)
DC current-demand loop regressioniso2-current-demand-loopoptional
AC EVSE, EIMiso15118_2_ac_evse_reference, iso2-ac-eim-nominal, ac_basicoptional
AC EVSE, EIM over TLSiso15118_2_ac_tls_evse_reference, iso2-ac-eim-tlsSChannel or rustls
AC EVSE, PnCiso15118_2_ac_pnc_tls_evse_reference, iso2-ac-pnc-tls, iso2-ac-pnc-nominalTLS recommended
DC EVSE, PnCiso2-dc-pnc-nominal (live PnC remains certificate-policy gated)
EVCCiso15118_2_dc_evcc_reference, iso15118_2_ac_evcc_reference, iso15118_2_dc_evcc_aged_demosee boundary below
$CL   = 'C:\ChargeLink\0.5.0-rc2\pc1\bin\chargelink.exe'
$Data = 'C:\ChargeLinkData'
$IfIndex   = <INTERFACE_INDEX>
$Advertise = 'fe80::<ADDRESS>%' + $IfIndex
$Pki       = "$Data\pki"

EVSE DC EIM, plain transport

$Run = "iso2-dc-$(Get-Date -Format yyyyMMdd-HHmmss)"

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse live-preflight --source external-evcc `
  --protocol iso15118-2 --profile-id iso15118_2_dc_evse_reference `
  --host '::' --tcp-port 50118 --udp-port 15118 `
  --advertise-ipv6 $Advertise --interface-index $IfIndex --recover-stale

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --external-evcc-session --run-id $Run `
  --protocol iso15118-2 --profile-id iso15118_2_dc_evse_reference `
  --host '::' --tcp-port 50118 --udp-port 15118 `
  --advertise-ipv6 $Advertise --interface-index $IfIndex `
  --max-runtime-ms 1800000 --heartbeat-interval-ms 1000

The DC lane serves the required 12-response sequence: SupportedAppProtocol, SessionSetup, ServiceDiscovery, PaymentServiceSelection, Authorization, ChargeParameterDiscovery, CableCheck, PreCharge, PowerDelivery, CurrentDemand, WeldingDetection, SessionStop.

EVSE AC EIM

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --external-evcc-session `
  --protocol iso15118-2 --profile-id iso15118_2_ac_evse_reference `
  --host '::' --tcp-port 50118 --udp-port 15118 `
  --advertise-ipv6 $Advertise --interface-index $IfIndex `
  --max-runtime-ms 1800000

The AC lane serves ChargeParameterDiscovery, PowerDelivery and ChargingStatus responses in addition to the common messages.

EVSE with TLS 1.2 for an external EVCC (Windows SChannel)

Many ISO 15118-2 vehicles negotiate TLS 1.2 with ECDSA. ChargeLink can terminate that handshake with the Windows SChannel adapter and a PKCS#12 identity. Keep the PFX password out of shell history by using an environment variable:

$env:CHARGELINK_PFX_PASSWORD = Read-Host 'PFX password'

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --external-evcc-session --run-id $Run `
  --protocol iso15118-2 --profile-id iso2-dc-eim-tls-schannel `
  --host '::' --tcp-port 50118 --udp-port 15118 `
  --advertise-ipv6 $Advertise --interface-index $IfIndex `
  --tls --external-evcc-windows-tls `
  --tls-pfx "$Pki\secc-identity.pfx" --tls-pfx-password-env CHARGELINK_PFX_PASSWORD `
  --tls-cert "$Pki\secc-chain.pem" --tls-key "$Pki\secc-key.pem" --tls-cafile "$Pki\v2g-root-ca.pem" `
  --max-runtime-ms 1800000

--external-evcc-windows-tls is an alias for --tls-adapter windows-schannel-external-evcc --tls-sni-policy external-evcc-windows-schannel. The PEM files are optional with SChannel and are recorded for evidence traceability. Without SChannel, --tls --tls-cert --tls-key --tls-cafile uses the rustls adapter (TLS 1.2 and 1.3, no client authentication unless --require-ca).

EVSE AC Plug & Charge

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --external-evcc-session `
  --protocol iso15118-2 --profile-id iso15118_2_ac_pnc_tls_evse_reference `
  --host '::' --tcp-port 50118 --udp-port 15118 `
  --advertise-ipv6 $Advertise --interface-index $IfIndex `
  --tls --tls-cert "$Pki\secc-chain.pem" --tls-key "$Pki\secc-key.pem" --tls-cafile "$Pki\v2g-root-ca.pem" `
  --max-runtime-ms 1800000

The PnC lane answers PaymentDetails and serves a reference CertificateInstallationRes built from fixed engineering test certificates. It validates the vehicle's PnC message sequence; it does not issue contract certificates for a real mobility operator. CertificateUpdate and MeteringReceipt are not answered by the live lane.

Operator checks and stop

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse status --run-id $Run
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse list-state --run-id $Run
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse stop --run-id $Run
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts integrity --run-id $Run
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse live-closure-gate --run-id $Run --source external-evcc --require-sdp --require-tcp-peer --require-v2gtp --require-exi

Diagnostic paths that need no peer: chargelink --json evse iso2-setup-path --write-artifacts and chargelink --json evse legacy-hlc-completion-pass --protocol iso15118-2 --energy-mode dc --write-artifacts write the ISO 15118-2 setup and completion evidence bundles from fixtures.

EVCC role boundary

The ISO 15118-2 DC EIM vehicle role is the iso2-evcc command: one standards-encoded session (SDP, then TCP or TLS 1.2) against the ChargeLink SECC profile iso15118_2_dc_eim, with a current-demand loop, an optional renegotiation and pause/resume. It is an engineering lane for test development, not a conformance tool; no session against a third-party charger is claimed. The SECC profile iso15118_2_dc_eim is plant-coupled: evse start refuses it without --plant-grpc-endpoint, so the charger side runs on the NI VeriStand bench with the owner host's plant service, and the vehicle side connects to it from PC2.

# engineering TLS identity for the private environment (SECC chain and key, EVCC root); the folder must not exist
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json iso2-pki --output-dir "$Data\pki\iso2"

# vehicle role: discover the SECC by SDP, TLS 1.2, 20 CurrentDemandReqs 50 ms apart
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json iso2-evcc --sdp-server "[$Advertise]:15118" --tls --tls-root "$Data\pki\iso2\private-root.pem" `
  --current-demands 20 --period-ms 50 --target-voltage-v 400 --target-current-a 100 --run-id iso2-ev-<DATE>

# without SDP, plain TCP, straight to the SECC port
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json iso2-evcc --peer "[$Advertise]:<SECC_TCP_PORT>" --current-demands 0 --run-id iso2-ev-<DATE>
OptionMeaning
--sdp-server / --peerDiscover the SECC through SDP (its UDP socket), or connect to its TCP or TLS port directly.
--tls, --tls-root FILETLS 1.2 with the cipher suites of ISO 15118-2; without --tls EIM runs on TCP. --tls-root names the private operator root(s) the SECC chain must validate to (repeatable).
--current-demands N, --period-msCurrentDemandReqs before the EV stops (0: until the EVSE stops) and their period (default 50 ms).
--renegotiate-after NAfter N CurrentDemands the EV renegotiates once.
--pause, --resume-session-id HEXEnd with SessionStop Pause instead of Terminate; resume a paused session by its SessionID.
--target-voltage-v, --target-current-a, --max-voltage-v, --max-current-aThe EV's targets and limits (defaults 400 V, 100 A, 920 V, 200 A).

The reference EVCC profiles (iso15118_2_dc_evcc_reference and the others in the table above) still transmit ChargeLink's typed framing; use them only for evcc start --dry-run, the deterministic simulation (sim legacy-scenario --protocol iso15118-2) and the managed SIL smoke through gRPC. To probe a real SECC's transport and TLS, use evcc tls-handshake-probe.

Claim boundary

A completed session proves discovery, transport, optional TLS, V2GTP framing, EXI decoding and message sequencing with the connected EVCC. Because responses are reference vectors, the lane does not follow requested current or voltage and must not be used to control a power stage. The ISO 15118-2 conformance packages (catalog) provide 797 ISO 15118-4 case bindings for campaign work.