Skip to content

VDV 261 communication sequences

Baseline

These flows reflect BetterFleet's interpretation of VDV 261 Edition 2, issue 05/2023. Verification against the current 07/2024 issue is pending.

V2ICP request and response bodies are flat JSON objects. The examples do not use a parameters wrapper.

1. Establish VAS 3 InternetAccess

sequenceDiagram
    participant EV as EVCC
    participant SECC as SECC
    participant BE as Backend

    EV->>SECC: ServiceDiscoveryReq
    SECC-->>EV: ServiceDiscoveryRes (ServiceID 3)
    EV->>SECC: ServiceDetailReq (ServiceID 3)
    SECC-->>EV: ServiceDetailRes (ParameterSetID 4)
    EV->>BE: Establish HTTPS through SECC gateway
    Note over EV,BE: IPv6, port 443 and TLS; BetterFleet requires VIN Basic Authentication

The EVCC initiates the connection. The SECC forwards traffic and does not inspect the V2ICP payload. Although the 05/2023 profile permits an empty password, BetterFleet's facade requires a configured credential bound to the request VIN and EVCC ID.

2. Initial synchronisation

At seq = 0, the vehicle sends all available fields and always includes h2_stat and bat_stat.

{
  "seq": 0,
  "vin": "WVWZZZ1JZXW000001",
  "evccid": "001122334455",
  "odo": 12345,
  "bat_reqtime": 75,
  "bat_eamount": 42,
  "prec_reqtime": 25,
  "prec_eamount": 8,
  "chrg_stat": 1,
  "h2_stat": 0,
  "bat_stat": 0
}

The backend returns every backend field. It uses the field's SNA value when a business value is unavailable.

{
  "seq": 0,
  "vin": "WVWZZZ1JZXW000001",
  "driveoff": 12,
  "prec_dsrd": 1,
  "prec_hvac": 1,
  "ambienttemp": 18,
  "target_dist": 120,
  "target_soc": 85
}

Here, driveoff = 12 means 60 minutes until departure.

If the backend has no calculated values, a valid initial placeholder response is:

{
  "seq": 0,
  "vin": "WVWZZZ1JZXW000001",
  "driveoff": -1,
  "prec_dsrd": -1,
  "prec_hvac": -1,
  "ambienttemp": -51,
  "target_dist": -1,
  "target_soc": -1
}

3. Cyclic delta exchange

After the initial exchange, the vehicle normally sends changed values every ten seconds. It still sends both safety fields in every request.

sequenceDiagram
    participant EV as EVCC
    participant BE as Backend

    loop Active charging session
        EV->>BE: POST flat JSON (seq n, changes, h2_stat, bat_stat)
        BE-->>EV: 200 flat JSON (same seq and vin, changed directives)
        Note over EV,BE: Normal interval 10 seconds
    end
{
  "seq": 6,
  "vin": "WVWZZZ1JZXW000001",
  "evccid": "001122334455",
  "bat_eamount": 35,
  "h2_stat": 0,
  "bat_stat": 0
}
{
  "seq": 6,
  "vin": "WVWZZZ1JZXW000001",
  "driveoff": 8
}

driveoff = 8 means 40 minutes until departure.

4. Preconditioning coordination

The backend uses prec_dsrd to request preconditioning and, when configured to select the type, uses prec_hvac. The vehicle reports prec_reqtime and prec_eamount so the backend can plan the work.

prec_eamount is the energy required or estimated for preconditioning. It is not an accumulated-energy counter. bprec_eamount is absent from the 05/2023 standard and is not part of the BetterFleet VDV wire model.

sequenceDiagram
    participant EV as EVCC
    participant BE as BetterFleet

    EV->>BE: prec_reqtime and prec_eamount
    BE->>BE: Combine departure, charging and power constraints
    BE-->>EV: driveoff, prec_dsrd and optional prec_hvac
    EV->>BE: Updated requirements and safety states

5. Retry and reconnect

sequenceDiagram
    participant EV as EVCC
    participant BE as Backend

    EV->>BE: POST (seq n)
    Note over EV: Wait up to 15 seconds
    EV->>BE: Retry 1
    EV->>BE: Retry 2
    EV->>BE: Retry 3
    Note over EV,BE: If still unsuccessful, close and re-establish the connection

The protocol also defines idle and reconnect behaviour around the active charging session. The current FastAPI facade does not implement that state machine.

6. BetterFleet extension boundary

Schema discovery, generated OpenAPI, and POST /vdv261/v2icp/diagnostics are BetterFleet integration aids. They do not form part of the V2ICP exchange defined by VDV 261.