Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

EVerest demo: Dockerized demo with software in the loop simulation

License

Notifications You must be signed in to change notification settings

ranabhat/everest-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

270 Commits

Repository files navigation

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:

  • Standards-based implementations for driving interoperability between the EV, EVSE, and CSMS
  • Interoperability testing tools and test suites
  • Simulated EVs, EVSEs, etc. following interoperability best practices and simulating stress testing scenarios

Hosted Demos

Below is a table of demonstrations that are currently available.

Demo Content Diagram
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 EVSE One EV ↔ EVSE (ISO 15118-2 DC) Diagram
Two EV ↔ EVSE Two EVSE connector points showcasing EVerests ability to work with a CSMS in a multi-station context Two EV ↔ EVSE Diagram
E2E Automated Tests Performs an automated test of a full charging session E2E Automated Tests Diagram
OCPP Demos Various OCPP 2.0.1 compliant charging sessions with differing security profiles OCPP 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.

  • Note: After you enter the command into the terminal, the docker application should open the associated containers

Demo Commands

  • One EV ↔ EVSE (AC Simulation): curl https://raw.githubusercontent.com/everest/everest-demo/main/demo-ac.sh | bash
  • One EV ↔ EVSE (ISO 15118 DC): curl https://raw.githubusercontent.com/everest/everest-demo/main/demo-iso15118-2-dc.sh | bash
  • Two EV ↔ EVSE: curl https://raw.githubusercontent.com/everest/everest-demo/main/demo-two-evse.sh | bash
  • E2E Automated Tests: curl https://raw.githubusercontent.com/everest/everest-demo/main/demo-automated-testing.sh | bash
  • OCPP Demos:
    • OCPP basic and ISO 15118-2 AC Charging with OCPP 2.0.1 CSMS (MaEVe Security Profile 1): curl https://raw.githubusercontent.com/everest/everest-demo/main/demo-iso15118-2-ocpp-201.sh | bash -s -- -1
    • OCPP basic and ISO 15118-2 AC Charging with OCPP 2.0.1 CSMS (MaEVe Security Profile 2): curl https://raw.githubusercontent.com/everest/everest-demo/main/demo-iso15118-2-ocpp-201.sh | bash -s -- -2
    • OCPP basic and ISO 15118-2 AC Charging with OCPP 2.0.1 CSMS (MaEVe Security Profile 3): curl https://raw.githubusercontent.com/everest/everest-demo/main/demo-iso15118-2-ocpp-201.sh | bash -s -- -3
    • OCPP basic and ISO 15118-2 AC Charging with OCPP 2.0.1 CSMS (CitrineOS Security Profile 1): curl https://raw.githubusercontent.com/everest/everest-demo/main/demo-iso15118-2-ocpp-201.sh | bash -s -- -c -1

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.

Features Description
Demo UI
CAR PLUGIN Starts the charging cycle
STOP & UNPLUG Stops the charging cycle
EV PAUSE Pause the charging session
EV RESUME Resume the charging cycle
Car Simulation dropdown Changes the charging scenario (i.e., chaos testing)
Max Current slider Slide to adjust the current provided to the vehicle

Step 4: Teardown

  • Select all Docker containers
  • Delete all files and containers: docker compose -p [prefix] down && rm docker-compose.yml where [prefix] is everest, everest-dc, everest-two-evse...

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

  • When running the Basic and ISO 15118-2 AC Charging with OCPP 201 CSMS demo, the script currently checks out the maeve repository and builds it, so it is fairly slow.
    • It starts the Maeve containers in detached mode, so you would need to use docker desktop or docker logs to see the logs
    • Note that the OCPP logs are available at /tmp/everest_ocpp_logs/ on the EVerest manager and can be downloaded using the docker desktop or docker cp

All Demos

  • You can experiment with different constraints for a demo by exporting EVEREST_MANAGER_CPUS and EVEREST_MANAGER_MEMORY environment variables prior to running one of the demos. The values of these variables can take on any valid Docker CPU value and memory limit, respectively. For example, to run a demo with two CPUs and 1536 MB of RAM, you could execute
export EVEREST_MANAGER_CPUS='2.0' EVEREST_MANAGER_MEMORY='1536mb'
  • This demo can be run independently, and exports the admin panel as explained in this video.It provides a visual representation of the configuration and the resulting configurations.

  • Run the explore configs demo: curl -o docker-compose.yml https://raw.githubusercontent.com/everest/everest-demo/main/docker-compose.admin-panel.yml && docker compose -p everest-admin-panel up

  • Access the visual representation at http://localhost:8849

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
Loading

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
Loading

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
Loading

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
Loading

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
Loading

About

EVerest demo: Dockerized demo with software in the loop simulation

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 76.4%
  • Python 16.1%
  • Dockerfile 5.6%
  • Makefile 1.9%

AltStyle によって変換されたページ (->オリジナル) /