Giter Club home page Giter Club logo

everest-framework's Introduction

OpenSSF Best Practices

EVerest Logo

The primary goal of EVerest is to develop and maintain an open source software stack for EV charging infrastructure. EVerest is developed having modularity and customizability in mind, so it consists of a framework to configure several interchangeable modules which are coupled by MQTT with each other. EVerest will help to speed the adoption to e-mobility by utilizing all the open source advantages for the EV charging world. It will also enable new features for local energy management, PV-integration, and many more.
The EVerest project was initiated by PIONIX GmbH, to help with the electrification of the mobility sector.

A complete documentation can be found here.

Build & Install

Community

Welcome to the EVerest community ๐Ÿ‘‹. See COMMUNITY.md how to get in contact with us.

Contributing

Anyone can contribute to the EVerest project - learn more at CONTRIBUTING.md. All project management related documents incl. our roadmap can be found here.

Governance

EVerest is a project hosted by the LF Energy Foundation. This project's technical charter is located in CHARTER.md and has established it's own processes for managing day-to-day processes in the project at GOVERNANCE.md.

Reporting Issues

To report a problem, you can open an issue in repository against a specific workflow. If the issue is sensitive in nature or a security related issue, please do not report in the issue tracker but instead email [email protected].

Licensing

EVerest and its subprojects are licensed under the Apache License, Version 2.0. See LICENSE for the full license text.

everest-framework's People

Contributors

a-w50 avatar andistorm avatar barsnick avatar caller avatar chgoodchild avatar corneliusclaussen avatar dermolly avatar djchhp avatar dominik-k avatar dorezyuk avatar florinmihut avatar gberardi-pillar avatar golovasteek avatar hikinggrass avatar klemmpnx avatar lad101work avatar lukas-mertens avatar mecofe avatar mhei avatar nzbr avatar pietfried avatar pionix-juraed avatar sebalukas avatar siebrenw avatar sirver avatar tmolitor-stud-tu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

everest-framework's Issues

Make dependency on libcap optional

If you don't need support for users and capabilities it would be good to be able to disable the feature complete

We could introduce a EVEREST_ENABLE_USER_AND_CAPABILITIES cmake option to make this compile-time configurable

Annoying "Error while clearing errors: No errors matched the request."

Hi,
when launching any SIL, and also resetting any charging session, I get this burst of errors:

[ERRO] manager            void Everest::error::ErrorCommBridge::handle_request_clear_error(const json&) :: Error while clearing errors: No errors matched the request.
[INFO] connector_1:EvseMa  :: All errors cleared
[ERRO] manager            void Everest::error::ErrorCommBridge::handle_request_clear_error(const json&) :: Error while clearing errors: No errors matched the request.
[INFO] connector_1:EvseMa  :: All errors cleared
[ERRO] manager            void Everest::error::ErrorCommBridge::handle_request_clear_error(const json&) :: Error while clearing errors: No errors matched the request.
[INFO] connector_1:EvseMa  :: All errors cleared

This behavior was introduced in commit 21b5371.

I would change the implementation, but don't quite understand what the intent of the error message is:

  • Warn that the filter may be wrong, because it doesn't match anything.
  • Warn that trying to clear didn't do anything.

Either way, I think it should rather be a warning. And probably - depending on intent - remain silent if there were no initial errors anyway.

By the way, here are the detailed session events EvseManager is reporting:
{
    "error": {
        "error_code": "MREC4OverCurrentFailure",
        "error_description": "",
        "error_severity": "High"
    },
    "event": "PermanentFaultCleared",
    "uuid": ""
}
{
    "error": {
        "error_code": "VendorWarning",
        "error_description": "",
        "error_severity": "High"
    },
    "event": "ErrorCleared",
    "uuid": ""
}
{
    "error": {
        "error_code": "PowermeterTransactionStartFailed",
        "error_description": "",
        "error_severity": "High"
    },
    "event": "PermanentFaultCleared",
    "uuid": ""
}

Each followed up by

{
    "event": "AllErrorsCleared",
    "uuid": ""
}

Encountered in `everest-demo` project: Getting caught exception "stoi" when trying to deploy everest-demo to Kubernetes

Hi! ๐Ÿ‘‹

I reported this this in the everest-demo project yesterday, since I encountered this issue while trying out the container images published by that project, but the problem appears to occur in the source code of the everest-framework project (specifically in manager.cpp), and this project also appears to be a bit more active than that one. So that's why I'm raising the issue here as well.

Long story short, when I try to deploy the three container images to a Kubernetes cluster (specifically Amazon EKS), the manager pod fails to start and logs the following error:

[2024-06-05 13:53:18.883199] [0x00007f730994bb48] [info]    Main manager process exits because of caught exception:
stoi

For more details, also on how to reproduce this, with step-by-step conversion-and-deployment instructions, see the other issue at the everest-demo project.

I'd really like to deploy EVerest to one of our test clusters, so we can evaluate it as a potential charger simulator and/or testing tool.

Thanks for any help you can provide here. ๐Ÿ™

Unsubscribe from MQTT topic via ModuleAdapter

Scope

The intention is to implement a request / reply pattern with a dynamic and random response topic within an EVerest module.

Problem

The module has to subscribe to a topic which is used once only. The callback remains registered though and thereby leaks memory and has an impact on performance. If the request is used frequently, the handlers pile up quickly.

Proposed solution

Provide a way to unsubscribe from a MQTT topic from user code in a module

Implementation

ext_mqtt_subscribe in ModuleAdapter returns an UnsubscribeToken. When the token is called, the handler is unsubscribed from the topic. The change does not break existing code, since the return type was void previously.

Example

{
    std::string reply_topic = "/path/to/reply/topic";
    auto unsubscribe = mod->mqtt.subscribe(reply_topic, [](auto const& raw_data){
          //do something with data
    };
    wait_for_respose_for_some_time(); 
    unsubscribe(); //this unsubscribes the previously installed handler from the topic
}

Support Multislot Connection in Rust

At the moment only one connection is exposed to Rust model for the case of multi-slot connection.

Need to re-design rust wrappers and rust codegen, to support multi-slot connections.

Issue using CPM

So I'm trying to build everest-core using CPM (I know it's recommended to use edm) anyway, I have already added mqttc to my CPM because it is a dependency on this repository(everest-framework), so this conflict will always happen in your find-mqttc.cmake because it will try to add_library(mqttc STATIC IMPORTED) again.

Is kind of a forced error since i have to add mqttc to continue but inside your repository it will conflict because it tries to add again.

Support GCC<9

GCC < 9 needs std++fs if std::filesystem is used, we should link that in that case

Manager crashes in tests with Caught Error

Describe the bug

When running test in a docker container the manager starts up but dies almost immediately with the following:

INFO     root:startup_tests.py:83 >>>>>>>>> test_001_start_test_module <<<<<<<<<
INFO     root:everest_core.py:164 config: /tmp/pytest-of-root/pytest-1/test_001_start_test_module0/everest_config/everest_config.yaml
INFO     root:everest_core.py:241 temp everest user-config: /tmp/pytest-of-root/pytest-1/test_001_start_test_module0/everest_config/user-config/everest_config.yaml
INFO     root:everest_core.py:244 Adding test control module(s) to user-config: None
INFO     root:everest_core.py:171 /tmp/pytest-of-root/pytest-1/test_001_start_test_module0/status.fifo
INFO     root:everest_core.py:177 Standalone module probe was specified
INFO     root:everest_core.py:183 /ext/source/build/dist/bin/manager --config /tmp/pytest-of-root/pytest-1/test_001_start_test_module0/everest_config/everest_config.yaml --status-fifo /tmp/pytest-of-root/pytest-1/test_001_start_test_module0/status.fifo --standalone probe
INFO     root:everest_core.py:185 Starting EVerest...
INFO     root:everest_core.py:186 /ext/source/build/dist/bin/manager  --config  /tmp/pytest-of-root/pytest-1/test_001_start_test_module0/everest_config/everest_config.yaml  --status-fifo  /tmp/pytest-of-root/pytest-1/test_001_start_test_module0/status.fifo  --standalone  probe
DEBUG    root:everest_core.py:208   2024-04-01 21:30:51.425784 [INFO] manager          ::   ________      __                _
DEBUG    root:everest_core.py:208   2024-04-01 21:30:51.430796 [INFO] manager          ::  |  ____\ \    / /               | |
DEBUG    root:everest_core.py:208   2024-04-01 21:30:51.430848 [INFO] manager          ::  | |__   \ \  / /__ _ __ ___  ___| |_
DEBUG    root:everest_core.py:208   2024-04-01 21:30:51.431166 [INFO] manager          ::  |  __|   \ \/ / _ \ '__/ _ \/ __| __|
DEBUG    root:everest_core.py:208   2024-04-01 21:30:51.431185 [INFO] manager          ::  | |____   \  /  __/ | |  __/\__ \ |_
DEBUG    root:everest_core.py:208   2024-04-01 21:30:51.431196 [INFO] manager          ::  |______|   \/ \___|_|  \___||___/\__|
DEBUG    root:everest_core.py:208   2024-04-01 21:30:51.431206 [INFO] manager          ::
DEBUG    root:everest_core.py:208   2024-04-01 21:30:51.431234 [INFO] manager          :: Using MQTT broker mqtt-server:1883
DEBUG    root:everest_core.py:208   2024-04-01 21:30:51.445786 [ERRO] manager         int main(int, char**) :: Main manager process exits because of caught exception:
DEBUG    root:everest_core.py:208   Syscall pipe2() failed (Invalid argument), exiting
DEBUG    root:everest_core.py:208
WARNING  root:everest_core.py:215 EVerest stopped with return code: 1
DEBUG    root:everest_core.py:217 EVerest output stopped
---------------------------------------------- Captured log teardown -----------------------------------------------
DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
DEBUG    root:everest_core.py:222 CONTROLLER stop() function called..

The issue being [ERRO] manager int main(int, char**) :: Main manager process exits because of caught exception: DEBUG root:everest_core.py:208 Syscall pipe2() failed (Invalid argument), exiting I have attempted to get additional information from the logs based on this zulip thread with no success.

EVerest Domain

Testing

Affected EVerest Module

No response

To Reproduce

Using the branch here: https://github.com/US-JOET/everest-demo/tree/couryrr/updating-dockerfile-for-testing

Ensure that a mqtt server is running

Build the docker image locally with:

docker build -t ghcr.io/everest/everest-demo/manager:test .

Attach with
docker run -it --network infranet_network -e MQTT_SERVER_ADDRESS=mqtt-server --entrypoint bash ghcr.io/everest/everest-demo/manager:test

Navigate to
cd /ext/source/tests

Run
pytest --everest-prefix ../build/dist core_tests/startup_tests.py

Anything else?

No response

Support Everest Errors Raising and handling in Rust

Everest Framework supports errors that can be raised and handled by modules.

Rust Implementation is missing this feature.
Side note: We may need to wait until the concept of errors will stabilize, since it is still work in progress.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.