Home

Awesome

EVerest Demo Repo

Vision

This repository includes several demos of the EVerest tech stack's capabilities. The intent of this repository is to showcase the foundational layers of a charging solution that could address interoperability and reliability issues in the EV charging industry. The demonstrations aim to exemplify the modular nature of EVerest and can be utilized to understand the following:

Hosted Demos

Below is a table of demonstrations that are currently available.

DemoContentDiagram
One EV ↔ EVSE (AC Simulation)Simple AC charging session with one EV connecting to one Charger (EVSE)One EV ↔ EVSE (AC Simulation) Diagram
One EV ↔ EVSE (ISO 15118-2 DC)ISO 15118-2 compliant charging session with one EV connecting to one EVSEOne EV ↔ EVSE (ISO 15118-2 DC) Diagram
Two EV ↔ EVSETwo EVSE connector points showcasing EVerests ability to work with a CSMS in a multi-station contextTwo EV ↔ EVSE Diagram
E2E Automated TestsPerforms an automated test of a full charging sessionE2E Automated Tests Diagram
OCPP DemosVarious OCPP 2.0.1 compliant charging sessions with differing security profilesOCPP Demo Diagram

Operating System Specific Instructions

Install and Set-up

  1. Install docker with the following link Get Docker

  2. Ensure that docker is installed by opening your machines terminal and typing docker --version

    • Note: The terminal should return "Docker version x.x.x".
  3. Open the Docker desktop application

  4. Open your machines terminal

Run the Demonstration

Step 1: Select the Demo

Copy and paste the command for the demo you wish to run into the machines terminal.

Demo Commands

Step 2: Open Demo Interface and Supporting Materials

  1. Open the demo UI at http://127.0.0.1:1880/ui

    • Note: The demo UI will vary based on the demonstration that is selected. For the best results, having the demo UI and Docker desktop application up side-by-side will allow the user to understand what messages are being sent back-and-fourth across the demo actors.
  2. Open the nodered flows to understand the module flows at http://127.0.0.1:1880

    • Note: The nodered flows will allow the user to understand how modules interact within the demonstrations. For more information on simulating Everest with software, the simulation GUI, and NODE RED, click here

Step 3: Interact with the Demo

Feel free to explore these demos on your own accord. Below is a table that will help the user understand how to interact with the UI.

Note: Only one demonstration can be run at a time, in order to spin up a new demo, move to Step 4: Teardown before attempting to start new demo.

FeaturesDescription
<img src="img/One_EV_EVSE_UI.png" alt="Demo UI" width="249" height="572"/>
CAR PLUGINStarts the charging cycle
STOP & UNPLUGStops the charging cycle
EV PAUSEPause the charging session
EV RESUMEResume the charging cycle
Car Simulation dropdownChanges the charging scenario (i.e., chaos testing)
Max Current sliderSlide to adjust the current provided to the vehicle

Step 4: Teardown

Additional Functionality

There are many different variables that the user can experiment with throughout the demonstrations. See below:

One EV ↔ EVSE (ISO 15118 AC) Demo

All Demos

export EVEREST_MANAGER_CPUS='2.0' EVEREST_MANAGER_MEMORY='1536mb'

Contributing to The Demonstration Repository

First, thank you for your interest in contributing to the demo repository. Please follow the steps outlined below to not only contribute your demonstration, but update the documentation associated with the Demo:

  1. Submit a Pull Request with a functional curl script based demonstration to the EVerest Demo Repository
  2. Add the following content to the "Hosted Demos" section:
    1. Demo Column, add the demo's name
    2. Content Column, add a one sentence description of function of the demo
    3. Diagram Column, create a high-level mermaid diagram of the demo functionality and add the diagram to the "Appendix Diagrams" section with a hyperlink to the section in the column
  3. Add the curl script to the "Demo Commands" list
  4. If there is any additional functionality not covered in the current documentation please add the details to the "Additional Functionality" section

Reference Material

For more information around ISO 15118-2 and OCPP messaging, see the below standards documentation.

Appendix Diagrams

The following diagrams provide a visual representation of the above demos.

One EV to EVSE AC Simulation


sequenceDiagram

   participant EV as Electric Vehicle (EV)
   participant EVSE as Electric Vehicle Supply Equipment (EVSE)
   EV->>EVSE: Plug-in
   EV->>EVSE: Signal Response (State A to State B1)
   EVSE-->>EV: Power Available?
   EV-->>EVSE: Ready to Charge (State B2)
   EVSE-->>EV: Start Charging (State B2 to State C2)
   Note over EVSE, EV: Charging in progress
   EV->>EVSE: Request Stop (State C2 to State B)
   EVSE-->>EV: Power Cut Off
   EV->>EVSE: Unplug (State A)
   Note over EVSE, EV: Session Ends

One EV to EVSE ISO 15118 2 DC


sequenceDiagram

   participant EV as Electric Vehicle (EV)
   participant EVSE as Electric Vehicle Supply Equipment (EVSE)
   Note over EV,EVSE: Connection Establishment
   EV ->> EVSE: Physical Connection (PLC)
   EVSE <<->> EV: ISO 15118-2 communications
   EV ->> EVSE: Authorization Request (e.g., Plug & Charge, Contract-based)
   EVSE -->> EV: Authorization Response
   Note over EV,EVSE: Charging Parameters Setup
   EV ->> EVSE: Charging Parameters Request
   EVSE -->> EV: Charging Parameters Response
   Note over EV,EVSE: Charging
   EV ->> EVSE: Power Delivery Request (Start Charging)
   EVSE -->> EV: Power Delivery Response
   EVSE ->> EV: Power Flow
   Note over EV,EVSE: Charging Status Updates
   EV ->> EVSE: Charging Status Request
   EVSE -->> EV: Charging Status Response
   Note over EV,EVSE: Termination
   EV ->> EVSE: Power Delivery Request (Stop Charging)
   EVSE -->> EV: Power Delivery Response (End Charging)
   Note over EV,EVSE: Session Termination
   EV ->> EVSE: Session Stop Request
   EVSE -->> EV: Session Stop Response

Two EV to EVSE


sequenceDiagram

   participant EV1 as Electric Vehicle 1 (EV1)
   participant EV2 as Electric Vehicle 2 (EV2)
   participant EVSE as Electric Vehicle Supply Equipment (EVSE)
   Note over EV1,EVSE: EV1 connects and starts charging
   EV1 ->> EVSE: Physical Connection (PLC)
   EVSE <<->> EV1: ISO 15118-2 communications
   EV1 ->> EVSE: Power Delivery Request (Start Charging)
   EVSE -->> EV1: Power Delivery Response
   EVSE ->> EV1: Power Flow (100%)
   Note over EV1 and EV2: EV2 connects while EV1 is charging
   EV2 ->> EVSE: Physical Connection (PLC)
   EVSE ->> EV2: ISO 15118-2 communications
   Note over EV1 and EV2: Power shift occurs
   EVSE ->> EV1: Power Reduction Request (50%)
   EV1 -->> EVSE: Power Reduction Acknowledgment
   EVSE ->> EV2: Power Delivery Request (50%)
   EV2 -->> EVSE: Power Delivery Response
   EVSE ->> EV1: Power Flow (50%)
   EVSE ->> EV2: Power Flow (50%)
   Note over EV2: EV2 finishes charging
   EV2 ->> EVSE: Power Delivery Request (Stop Charging)
   EVSE -->> EV2: Power Delivery Response (End Charging)
   EV2 ->> EVSE: Session Stop Request
   EVSE -->> EV2: Session Stop Response
   EVSE ->> EV1: Power Delivery Request (100%)
   EV1 -->> EVSE: Power Delivery Response
   EVSE ->> EV1: Power Flow (100%)
   Note over EV1: EV1 finishes charging
   EV1 ->> EVSE: Power Delivery Request (Stop Charging)
   EVSE -->> EV1: Power Delivery Response (End Charging)
   EV1 ->> EVSE: Session Stop Request
   EVSE -->> EV1: Session Stop Response

E2E Automated Tests


sequenceDiagram

participant EVerest
participant Probe Module
participant MQTT
par docker boots
EVerest ->> EVerest: Boot
Probe Module ->> Probe Module: init
end
Probe Module ->> MQTT: subcribe to session_event
Note over EVerest, MQTT: Test
Probe Module ->> EVerest: call_command 
loop timeout or events
    Probe Module->>MQTT: get message
    Probe Module->>Probe Module: assert
end

OCPP Demos


sequenceDiagram

   participant EV as Electric Vehicle (EV)
   participant EVSE as Electric Vehicle Supply Equipment (EVSE)
   participant CS as Central System (CS)
   Note over EV,EVSE: EV connects to EVSE
   EV ->> EVSE: Physical Connection
   Note over EVSE,CS: Authorization phase
   EVSE ->> CS: Authorize.req (RFID/ID)
   CS -->> EVSE: Authorize.conf (Accepted)
   Note over EVSE: EVSE starts charging session
   EVSE ->> CS: StartTransaction.req (Session ID, EV info)
   CS -->> EVSE: StartTransaction.conf (Accepted)
   Note over EVSE,EV: Charging starts
   EVSE ->> EV: Power Flow (Charging)
   Note over EVSE,CS: Periodic meter values reporting
   EVSE ->> CS: MeterValues.req (Energy consumption)
   CS -->> EVSE: MeterValues.conf (Acknowledgment)
   Note over EV,EVSE: EV requests to stop charging
   EV ->> EVSE: Stop Charging Request (Unplug)
   Note over EVSE,CS: Charging session ends
   EVSE ->> CS: StopTransaction.req (Final meter values, session end)
   CS -->> EVSE: StopTransaction.conf (Acknowledged)
   Note over EVSE: EVSE stops charging
   EVSE ->> EV: Power Flow Stops