Skip to main content

An EV smart charging management application designed to optimize electric vehicle charging based on power or pricing constraints.

Project description

Opti-VGI: EV Smart Charging Scheduler Application

CI PyPI version Python Version Documentation Status License

Opti-VGI is an EV smart charging management application designed to optimize electric vehicle charging based on power or pricing constraints. It provides a flexible framework whose scheduling logic can integrate with Charge Station Management Systems (CSMS). The specific integration method, potentially supporting protocols like OCPP 1.6 or OCPP 2.0.1 / ISO 15118, depends on the implementation of its communication layer.

Documentation: https://argonne-vci.github.io/Opti-VGI


Key Features

  • Constraint-Based Optimization: Schedules EV charging considering factors like overall site power limits or dynamic pricing signals.
  • Modular Architecture: Clearly separates communication logic (Translation layer) from optimization strategies (Algorithm layer).
  • Pluggable Algorithms: Supports different optimization approaches. Includes implementations like:
    • PulpNumericalAlgorithm: Uses linear programming via the PuLP library.
    • GoAlgorithm: A custom heuristic-based algorithm.
  • CSMS Integration Interface: The Translation abstract class defines the necessary methods to fetch data (EVs, constraints) and send charging commands, allowing integration with various external systems. The implementation of this layer determines how Opti-VGI communicates (e.g., via API calls, database interaction, or specific protocols like OCPP).
  • Handles Active & Future EVs: Considers both currently connected EVs and planned future reservations in its scheduling.
  • Asynchronous Operation: Designed to run scheduling logic periodically or in response to events using background worker threads.

Architecture Overview

Opti-VGI follows a modular design:

  1. Translation Layer (optivgi.translation): An abstract interface (Translation) for communication with external systems (e.g., a CSMS). Implementations handle fetching EV data, power constraints, and sending charging profiles. This is where specific communication protocols (like OCPP methods via a library, or custom API calls) would be implemented.
  2. SCM Runner (optivgi.scm_runner): Orchestrates the scheduling cycle, using a Translation instance to get inputs, an Algorithm instance to calculate schedules, and the Translation instance again to dispatch results.
  3. SCM Algorithm (optivgi.scm.algorithm): An abstract interface (Algorithm) for charging strategies. Concrete implementations contain the core optimization logic (e.g., GoAlgorithm, PulpNumericalAlgorithm).
  4. EV Data Structure (optivgi.scm.ev): A standard dataclass (EV) representing vehicles and their charging parameters.
  5. Worker Threads (optivgi.threads): Helpers to run the SCM logic periodically or on events without blocking the main application.

Sequence Diagram

Sequence Diagram

The diagram shows the flow of data and commands between the EVSEs, Opti-VGI, and the CSMS, highlighting the roles of the Translation and Algorithm layers in this interaction. It illustrates how Opti-VGI fetches data from the CSMS, processes it using the selected algorithm, and sends back charging commands.


Installation

You can install the latest stable release from PyPI:

pip install optivgi

For development, clone the repository and install with development dependencies:

git clone https://github.com/argonne-vci/Opti-VGI.git
cd Opti-VGI
pip install -e ".[dev]"

Usage & Examples

Opti-VGI provides the core scheduling framework. To use it, you need to:

  1. Implement the Translation interface: Create a concrete class that inherits from optivgi.translation.Translation and implements the get_evs, get_peak_power_demand, and send_power_to_evs methods to communicate with your specific CSMS or data source.
  2. Choose an Algorithm: Select one of the provided algorithms (e.g., GoAlgorithm, PulpNumericalAlgorithm) or implement your own inheriting from optivgi.scm.algorithm.Algorithm.
  3. Run the scm_worker: Use the optivgi.threads.scm_worker function in a separate thread, providing your Translation implementation and chosen Algorithm class. Trigger the worker using an event queue.

Examples

  • HTTP API: Integration via a simple HTTP API and WebSocket notifications.
  • CitrineOS: Full OCPP 1.6J integration with CitrineOS CSMS, including a Docker Compose stack with charger simulator, event-driven scheduling via RabbitMQ, and an automated curtailment demo.

See the Examples Documentation for more details.


Contributing

Contributions are welcome! Please feel free to open an issue on the GitHub Issues page to report bugs, suggest features, or discuss potential improvements.


License

This project is licensed under the Apache License, Version 2.0. See the LICENSE file for details.


Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

optivgi-0.2.0.tar.gz (27.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

optivgi-0.2.0-py3-none-any.whl (32.6 kB view details)

Uploaded Python 3

File details

Details for the file optivgi-0.2.0.tar.gz.

File metadata

  • Download URL: optivgi-0.2.0.tar.gz
  • Upload date:
  • Size: 27.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for optivgi-0.2.0.tar.gz
Algorithm Hash digest
SHA256 a65f378474c284c0881f308b76a7cb694ff8df885ba3f1cc69bcb91c0bed7c4f
MD5 6fab24dfade128c5c7a2826006218c4b
BLAKE2b-256 307a6da316e4ecbc7e18ae5c2b7bedff86bdb17b9e54040e14fd15a01df4565d

See more details on using hashes here.

Provenance

The following attestation bundles were made for optivgi-0.2.0.tar.gz:

Publisher: publish.yml on argonne-vci/Opti-VGI

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file optivgi-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: optivgi-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 32.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for optivgi-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d44b51efe595c44077a08a645b56bfdb1fcad65a75ba7b481a98884a2c5a8580
MD5 a37c6f6afeb8397d4952f3c6a776f5d8
BLAKE2b-256 6abf9b1bff49479642dfa26e2aa528a352685e56ffe2e2e947a9db25913c82d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for optivgi-0.2.0-py3-none-any.whl:

Publisher: publish.yml on argonne-vci/Opti-VGI

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page