ChargeLink Native

First 60 Minutes: From Installation to a Supportable Run

This is the recommended first-launch checklist for a new ChargeLink Native workstation. The goal is not only to prove that the software starts, but to leave the machine in a state that another engineer can understand, repeat and support. Do not skip a failed step and continue: a later protocol error is much harder to diagnose if installation, licensing, networking or the gRPC service was never proven first.

What you will prove

  • the installed CLI can be located and executed, and its version is recorded;
  • the license state is known and the entitlements match the order;
  • the environment doctor passes or has understood warnings;
  • the profile you intend to use exists in the installed catalogue;
  • a deterministic local protocol flow generates evidence;
  • the gRPC Integration API starts and answers;
  • artifacts are written to the agreed root and can be integrity-checked;
  • the workstation can produce a support bundle.

0–10 minutes — establish the installation identity

$CL   = 'C:\ChargeLink\0.5.0-rc2\pc1\bin\chargelink.exe'
$Data = 'C:\ChargeLinkData'

Test-Path $CL
chargelink --version
Get-FileHash $CL -Algorithm SHA256
foreach ($d in 'runtime','artifacts','licenses','pki','tests','support') { New-Item -ItemType Directory -Force "$Data\$d" | Out-Null }

Expected: True, chargelink 0.5.0-rc2, and a hash you can compare with the delivery note. If Test-Path is false, return to Install and Activate. Do not copy an executable from another machine.

10–20 minutes — prove licensing and environment health

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json license status
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json license entitlements
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json doctor
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json doctor --strict

Expected: license status shows "status": "verified" and the path C:\ChargeLinkData\licenses\active_license.cllic. If it shows not_activated, activate the supplied file now (chargelink --json license activate --file ...). license entitlements fails with CL-LICENSE-001 (exit 20) when no license is active; that is expected, not an installation fault.

The doctor has four checks: runtime_root, artifact_root, license and product_boundary. Record why each non-ok item is acceptable.

20–30 minutes — discover profiles before starting a protocol

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json profile list | Out-File -Encoding utf8 "$Data\support\profiles.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json profile connectors
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json profile show iso15118_20_dc
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

Never assume a profile ID from an old procedure. The Profile Catalog lists the built-in profiles; the installed list is authoritative. A profile fixes protocol, role, connector family and EXI mode. Network addresses, ports, certificates and CAN channels are supplied on the command line.

30–40 minutes — run a safe local protocol proof

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 status
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse stop

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 `
  --battery-capacity-kwh 80 --initial-soc-pct 20 --target-soc-pct 80 --requested-power-kw 50 --battery-step-seconds 1

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json dc-can virtual-run --protocol chademo --profile dc_can_virtual_evse --frame-count 4

Expected: dry-run validated; loopback completed with SessionSetup and ServiceDiscovery processed; the scripted DC-CAN virtual run producing four frames with "watchdog_status": "within_window". These are software proofs; they do not prove PLC hardware, a physical CAN bus, high-voltage behaviour or a third-party peer.

40–50 minutes — start and prove the gRPC agent

Window 1 (leave open):

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 capabilities --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 smoke --endpoint http://127.0.0.1:50051

Expected: serving, API 1.8.0, session smoke passed, signal smoke write_read_roundtrip: true. If health fails, do not continue to VeriStand or external automation; resolve the gRPC service first (Troubleshooting).

50–60 minutes — prove evidence and supportability

$Stamp = Get-Date -Format yyyyMMdd-HHmmss
$Out = "$Data\support\first-60-minutes-$Stamp"
New-Item -ItemType Directory -Force $Out | Out-Null

chargelink --version                    | Out-File -Encoding utf8 "$Out\version.txt"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json license status           | Out-File -Encoding utf8 "$Out\license-status.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json doctor                   | Out-File -Encoding utf8 "$Out\doctor.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json runtime list             | Out-File -Encoding utf8 "$Out\runtime.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts index          | Out-File -Encoding utf8 "$Out\artifact-index.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json integration health --endpoint http://127.0.0.1:50051 | Out-File -Encoding utf8 "$Out\grpc-health.json"
Get-ComputerInfo | Out-File -Encoding utf8 "$Out\windows.txt"
Get-NetAdapter | Format-Table -AutoSize | Out-File -Encoding utf8 "$Out\network-adapters.txt"

# integrity of the last loopback run
$Last = ((cl --json runtime list | ConvertFrom-Json).sessions | Where-Object { $_.health.role -eq 'evcc' } | Select-Object -Last 1).health.run_id
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts integrity --run-id $Last | Out-File -Encoding utf8 "$Out\integrity.json"

Each entry of sessions carries health, heartbeat, lock and pid objects; the run ID and role are in health.

First-hour sign-off

CheckPass criteriaResult
Installed CLIVersion and hash recorded; matches delivery note☐
LicenseStatus verified; entitlements match the order☐
EnvironmentDoctor has no unexplained non-ok item☐
ProfilesIntended profiles exist in the installed catalogue☐
Local protocolDry-run, loopback and DC-CAN virtual run complete☐
gRPCHealth, session and signal smoke pass☐
EvidenceArtifacts under the agreed root; integrity check passes☐
SupportabilityFirst-hour evidence directory complete☐

Next: Environment and Bench Preflight for the protocol and hardware you intend to connect.