Quick Recipes
Starting points for the most common tasks. Every recipe assumes the path block below and uses only commands that exist in the documented binary. Replace angle-bracket values.
$CL = 'C:\ChargeLink\0.5.0-rc2\pc1\bin\chargelink.exe'
$Data = 'C:\ChargeLinkData'
$IfIndex = <INTERFACE_INDEX>
$Advertise = 'fe80::<ADDRESS>%' + $IfIndex
$Pki = "$Data\pki"
Installation health in 30 seconds
chargelink --version
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json doctor
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json license status
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc local-loopback-smoke --protocol iso15118-20 --profile-id iso15118_20_dc --peer-ipv6 '::1' --tcp-port 50118 --max-steps 6
ISO 15118-20 DC EVSE, dry-run
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --dry-run --protocol iso15118-20 --profile-id iso15118_20_dc
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse stop
ISO 15118-20 EVSE for an external vehicle (TLS 1.3 mutual)
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --external-evcc-session --run-id iso20-<DATE> `
--protocol iso15118-20 --profile-id iso15118_20_dc `
--host '::' --udp-port 15118 --tcp-port 50118 --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" --require-ca `
--max-runtime-ms 1800000 --heartbeat-interval-ms 1000
ISO 15118-2 DC EVSE for an external vehicle (plain)
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --external-evcc-session --run-id iso2-<DATE> `
--protocol iso15118-2 --profile-id iso15118_2_dc_evse_reference `
--host '::' --udp-port 15118 --tcp-port 50118 --advertise-ipv6 $Advertise --interface-index $IfIndex `
--max-runtime-ms 1800000 --heartbeat-interval-ms 1000
ISO 15118-2 DC EVSE with Windows SChannel TLS 1.2
$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 iso2tls-<DATE> `
--protocol iso15118-2 --profile-id iso2-dc-eim-tls-schannel `
--host '::' --udp-port 15118 --tcp-port 50118 --advertise-ipv6 $Advertise --interface-index $IfIndex `
--tls --external-evcc-windows-tls --tls-pfx "$Pki\secc-identity.pfx" --tls-pfx-password-env CHARGELINK_PFX_PASSWORD `
--max-runtime-ms 1800000
DIN 70121 DC EVSE for an external vehicle
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --external-evcc-session --run-id din-<DATE> `
--protocol din70121 --profile-id din70121_dc_evse_reference `
--host '::' --udp-port 15118 --tcp-port 50118 --advertise-ipv6 $Advertise --interface-index $IfIndex `
--max-runtime-ms 1800000 --heartbeat-interval-ms 1000
Watch, stop and evaluate any EVSE run
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse status --run-id <RUN_ID>
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse stop --run-id <RUN_ID>
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts integrity --run-id <RUN_ID>
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse live-closure-gate --run-id <RUN_ID> --source external-evcc --require-sdp --require-tcp-peer --require-v2gtp --require-exi
Probe a real charger's TLS from the vehicle side
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::<SECC>%' + $IfIndex) --tcp-port 50118 `
--tls --tls-cert "$Pki\vehicle-chain.pem" --tls-key "$Pki\vehicle-key.pem" --tls-cafile "$Pki\v2g-root-ca.pem" --require-ca
ISO 15118-20 DC EIM session from the vehicle side (EV case files required)
$env:CHARGELINK_ISO20_LIVE_SEMANTIC_CASE = 'C:\ChargeLink\0.5.0-rc2\pc2\cases\nominal.json'
$env:CHARGELINK_ISO20_FULL_WIRE_SESSION_MANIFEST = 'C:\ChargeLink\0.5.0-rc2\pc2\cases\full-wire-session-manifest.json'
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc activate-profile --protocol iso15118-20 --profile-id iso15118_20_dc_evcc_reference `
--use-sdp --interface-index $IfIndex --tcp-port 50118 --exi-mode chargelink-exi `
--tls --tls-cert "$Pki\vehicle-chain.pem" --tls-key "$Pki\vehicle-key.pem" --tls-cafile "$Pki\v2g-root-ca.pem" --require-ca `
--max-steps 14 --requested-power-kw 80
Scripted DC-CAN lanes
Fixed fixture frames on a virtual bus for test development; not a protocol implementation (Scripted DC-CAN Lanes).
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json dc-can virtual-run --protocol chademo --profile dc_can_virtual_evse --frame-count 50 --sample-period-ms 50
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json dc-can chademo-live-run --run-id dc-can-live-<DATE>
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json dc-can chademo-can-adapter-loop --run-id dc-can-loop-<DATE> --adapter-kind peak-pcan --adapter-mode loopback --channel PCAN_USBBUS1 --bitrate-kbps 500
Deterministic simulation and replay
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json sim paired --protocol iso15118-20 --scenario dc-bpt-nominal --seed 42 --run-id sim-<DATE> --write-artifacts --output "$Data\tests\sim-<DATE>.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json sim replay --trace "$Data\tests\sim-<DATE>.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json sim legacy-scenario --protocol iso15118-2 --scenario iso2-dc-eim-nominal --seed 1 --run-id iso2-sim-<DATE> --write-artifacts
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json sim tls-campaign --campaign iso20-pnc-expired-contract --seed 1 --run-id tls-<DATE> --write-artifacts
Protocol-first campaign plan
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json test protocols list
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json test areas list --protocol iso15118-20 --sut-role evse --charging-mode dc
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json test plan --protocol iso15118-20 --sut-role evse --charging-mode dc --test-area SessionSetup --evidence dry-run --output "$Data\tests\plan-<DATE>"
Licensed conformance package, dry-run
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json conformance package execute --package iso15118-2-evse --role evse `
--pics "$Data\tests\pics.json" --pixit "$Data\tests\pixit.json" --out "$Data\tests\iso2-evse-<DATE>" `
--evidence-mode dry-run --executable-only --max-cases 10
gRPC server and smoke
# window 1
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" integration serve --listen 127.0.0.1:50051 --state-root "$Data\runtime\integration"
# window 2
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json integration health --endpoint http://127.0.0.1:50051
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json integration session-smoke --endpoint http://127.0.0.1:50051 --protocol iso15118-20 --role evse
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json signals read --endpoint http://127.0.0.1:50051 --signal Vehicle.SocPct --signal Charger.PresentVoltageV
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json signals write --endpoint http://127.0.0.1:50051 --signal Vehicle.SocPct=35
Stop everything and recover locks
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse stop
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc stop
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json runtime list
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json runtime recover --stale-only

