ISO 15118-20 Operator Runbook
Use this runbook for AC, DC, bidirectional power transfer, EIM and Plug & Charge sessions.
1. Choose a profile
$CL = "C:\Program Files\ChargeLink Native\chargelink.exe"
& $CL profile list --json | Out-File C:\ProgramData\ChargeLink\profiles.json
Common profiles include iso15118_20_dc, iso15118_20_dc_evcc_reference, iso15118_20_ac_evcc_reference, abb_iso20_ac_eim_realistic_continuous, abb_iso20_dc_bpt_eim, abb_iso20_ac_bpt_eim, and the *_pnc_tls variants.
2. Find the IPv6 interface
Get-NetIPInterface -AddressFamily IPv6 | Where-Object ConnectionState -eq Connected |
Format-Table ifIndex,InterfaceAlias,ConnectionState
Get-NetIPAddress -AddressFamily IPv6 | Where-Object IPAddress -like 'fe80::*' |
Format-Table InterfaceIndex,InterfaceAlias,IPAddress
Record the interface index and link-local address. Use the scoped form fe80::...%<index>.
3. EVSE: first non-TLS DC session
$IFINDEX = 19
$LOCAL = "fe80::1234:5678:9abc:def0%$IFINDEX"
$RUN = "iso20-dc-$(Get-Date -Format yyyyMMdd-HHmmss)"
& $CL evse start `
--foreground `
--external-evcc-session `
--run-id $RUN `
--artifact-root C:\ProgramData\ChargeLink\runs `
--protocol iso15118-20 `
--profile-id iso15118_20_dc `
--host :: `
--udp-port 15118 `
--tcp-port 50118 `
--advertise-ipv6 $LOCAL `
--interface-index $IFINDEX `
--max-runtime-ms 1800000 `
--heartbeat-interval-ms 1000 `
--exi-mode chargelink-exi `
--json
Keep this window open. In a second elevated PowerShell window:
& $CL evse status --json
& $CL evse list-state --json
4. EVCC: direct TCP laboratory connection
Use direct TCP only when the EVSE address and port are known. For a standards-oriented discovery test, use SDP instead of --no-sdp.
$PEER = "fe80::abcd:ef01:2345:6789%19"
& $CL evcc start `
--protocol iso15118-20 `
--backend ethernet `
--profile-id iso15118_20_dc_evcc_reference `
--no-sdp `
--peer-ipv6 $PEER `
--tcp-port 50118 `
--probe-peer `
--connect-timeout-ms 5000 `
--max-steps 50 `
--battery-model constant_power_reference `
--battery-capacity-kwh 80 `
--initial-soc-pct 20 `
--target-soc-pct 80 `
--requested-power-kw 50 `
--battery-step-seconds 1 `
--json
5. AC operation
Select an AC profile. The network startup is otherwise identical.
& $CL evse start --foreground --external-evcc-session `
--protocol iso15118-20 --profile-id abb_iso20_ac_eim_realistic_continuous `
--host :: --udp-port 15118 --tcp-port 50118 `
--advertise-ipv6 $LOCAL --interface-index $IFINDEX `
--max-runtime-ms 1800000 --heartbeat-interval-ms 1000 --json
6. Plug & Charge / TLS
Store the PFX password in an environment variable instead of shell history.
$env:CHARGELINK_PFX_PASSWORD = Read-Host "PFX password" -AsSecureString |
ConvertFrom-SecureString -AsPlainText
& $CL evse tls-pki-doctor `
--tls --tls-cert C:\ProgramData\ChargeLink\pki\secc-chain.pem `
--tls-key C:\ProgramData\ChargeLink\pki\secc-key.pem `
--tls-cafile C:\ProgramData\ChargeLink\pki\v2g-root-ca.pem `
--require-ca --protocol iso15118-20 --profile-id abb_iso20_dc_pnc_tls --json
& $CL evse start --foreground --external-evcc-session `
--protocol iso15118-20 --profile-id abb_iso20_dc_pnc_tls `
--host :: --udp-port 15118 --tcp-port 50118 `
--advertise-ipv6 $LOCAL --interface-index $IFINDEX `
--tls --external-evcc-windows-tls `
--tls-pfx C:\ProgramData\ChargeLink\pki\secc-identity.pfx `
--tls-pfx-password-env CHARGELINK_PFX_PASSWORD `
--tls-cafile C:\ProgramData\ChargeLink\pki\v2g-root-ca.pem --require-ca `
--max-runtime-ms 1800000 --json
7. Stop and preserve evidence
& $CL evse status --json | Out-File C:\ProgramData\ChargeLink\runs\$RUN-status.json
& $CL evse stop --json

