Skip to content

Commit 65c82a2

Browse files
andistormmlitre
authored andcommitted
feat(EEBus): Implement EEBus LPC Use Case
This is the first implementation of EEBus and the LPC use case. The EEBUS module requires an energy sink to limit the energy flow request going to the energy manager. Signed-off-by: Andreas Heinrich <andreas.heinrich@rwth-aachen.de> Signed-off-by: Martin Litre <mnlitre@gmail.com>
1 parent 374030c commit 65c82a2

120 files changed

Lines changed: 34932 additions & 8 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.ci/build-kit/docker/Dockerfile

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,86 @@ FROM ghcr.io/everest/everest-ci/build-kit-base:${BASE_IMAGE_TAG}
1313

1414
# FIXME(kai): Install libsystemd-dev as a dependency of sdbus-c++
1515
RUN apt-get update && apt-get -y install libsystemd-dev
16+
ADD "https://www.random.org/cgi-bin/randbyte?nbytes=10&format=h" skipcache
17+
ENV EVEREST_CMAKE_PATH=/usr/lib/cmake/everest-cmake
18+
ENV EVEREST_CMAKE_VERSION=tmp/eebus
19+
RUN rm -rf ${EVEREST_CMAKE_PATH} \
20+
&& git clone https://github.com/EVerest/everest-cmake.git ${EVEREST_CMAKE_PATH} \
21+
&& cd ${EVEREST_CMAKE_PATH} \
22+
&& git checkout ${EVEREST_CMAKE_VERSION} \
23+
&& rm -r .git
24+
25+
ARG GO_VERSION=1.24.2
26+
ADD https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz /tmp/go.tar.gz
27+
RUN if [ -d /usr/local/go ]; then \
28+
echo "Go is already installed"; \
29+
else \
30+
tar -C /usr/local -xzf /tmp/go.tar.gz; \
31+
fi
32+
ENV PATH="/usr/local/go/bin:${PATH}"
33+
RUN go version
34+
35+
ENV GRPC_VERSION=v1.71.0
36+
ENV GRPC_EXTENDED_CPP_PLUGIN_VERSION=main
37+
RUN tmpdir=$(mktemp -d) \
38+
&& cd $tmpdir \
39+
&& git clone --depth 1 --recurse-submodules --shallow-submodules --branch ${GRPC_VERSION} https://github.com/grpc/grpc.git \
40+
&& git clone --branch ${GRPC_EXTENDED_CPP_PLUGIN_VERSION} https://github.com/EVerest/grpc-extended-cpp-plugin.git \
41+
&& cmake -B build -S grpc-extended-cpp-plugin -G Ninja -D gRPC_INSTALL=ON \
42+
&& cmake --build build \
43+
&& cmake --install build \
44+
&& rm -rf $tmpdir
45+
46+
RUN apt update \
47+
&& apt install -y \
48+
build-essential \
49+
zlib1g-dev \
50+
libncurses5-dev \
51+
libgdbm-dev \
52+
libnss3-dev \
53+
libssl-dev \
54+
libreadline-dev \
55+
libffi-dev \
56+
libsqlite3-dev \
57+
wget
58+
ENV PYTHON_VERSION=3.13.3
59+
ENV PYTHON_SOURCE_URL=https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz
60+
RUN tmpdir=$(mktemp -d) \
61+
&& cd $tmpdir \
62+
&& wget ${PYTHON_SOURCE_URL} \
63+
&& tar -xzvf Python-${PYTHON_VERSION}.tgz \
64+
&& cd Python-${PYTHON_VERSION} \
65+
&& ./configure --enable-optimizations \
66+
&& make -j $(nproc) \
67+
&& make install \
68+
&& short_version=$(echo ${PYTHON_VERSION} | cut -d. -f1-2) \
69+
&& rm /usr/local/bin/python3 \
70+
&& ln -s /usr/local/bin/python${short_version} /usr/local/bin/python3
71+
72+
RUN python3.13 -m pip install --break-system-packages \
73+
grpcio \
74+
grpcio-tools \
75+
pydantic \
76+
cryptography \
77+
netifaces \
78+
psutil \
79+
environs \
80+
py4j \
81+
aiofile \
82+
build \
83+
sphinx \
84+
gcovr \
85+
sphinxcontrib-contentui \
86+
sphinxcontrib-svg2pdfconverter \
87+
git+https://github.com/EVerest/everest-dev-environment@v0.7.1#subdirectory=dependency_manager
88+
89+
90+
# Can be used to use an other version of everest-cmake
91+
ADD "https://www.random.org/cgi-bin/randbyte?nbytes=10&format=h" skipcache
92+
ENV EVEREST_CMAKE_PATH=/usr/lib/cmake/everest-cmake
93+
ENV EVEREST_CMAKE_VERSION=tmp/eebus
94+
RUN rm -rf ${EVEREST_CMAKE_PATH} \
95+
&& git clone https://github.com/EVerest/everest-cmake.git ${EVEREST_CMAKE_PATH} \
96+
&& cd ${EVEREST_CMAKE_PATH} \
97+
&& git checkout ${EVEREST_CMAKE_VERSION} \
98+
&& rm -r .git

.ci/build-kit/scripts/compile.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ cmake \
99
-DCMAKE_INSTALL_PREFIX="$EXT_MOUNT/dist" \
1010
-DWHEEL_INSTALL_PREFIX="$EXT_MOUNT/wheels" \
1111
-DBUILD_TESTING=ON \
12-
-DEVEREST_ENABLE_COMPILE_WARNINGS=ON
12+
-DEVEREST_ENABLE_COMPILE_WARNINGS=ON \
13+
-DENABLE_GRPC_GENERATOR=ON \
14+
-DGRPC_EDM=OFF \
15+
-DGRPC_GENERATOR_EDM=OFF
1316
retVal=$?
1417
if [ $retVal -ne 0 ]; then
1518
echo "Configuring failed with return code $retVal"

.ci/build-kit/scripts/create_integration_image.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ if [ $retVal -ne 0 ]; then
88
exit $retVal
99
fi
1010

11-
pip install --break-system-packages \
11+
python3 -m pip install --break-system-packages \
1212
$EXT_MOUNT/wheels/everestpy-*.whl \
1313
$EXT_MOUNT/wheels/everest_testing-*.whl \
1414
pytest-html

.ci/build-kit/scripts/create_ocpp_tests_image.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ if [ $retVal -ne 0 ]; then
88
exit $retVal
99
fi
1010

11-
pip install --break-system-packages \
11+
python3 -m pip install --break-system-packages \
1212
"$EXT_MOUNT"/wheels/everestpy-*.whl \
1313
"$EXT_MOUNT"/wheels/everest_testing-*.whl \
1414
"$EXT_MOUNT"/wheels/iso15118-*.whl \
@@ -20,6 +20,6 @@ if [ $retVal -ne 0 ]; then
2020
exit $retVal
2121
fi
2222

23-
pip install --break-system-packages -r tests/ocpp_tests/requirements.txt
23+
python3 -m pip install --break-system-packages -r tests/ocpp_tests/requirements.txt
2424

2525
$(cd ./tests/ocpp_tests/test_sets/everest-aux/ && ./install_certs.sh "$EXT_MOUNT/dist" && ./install_configs.sh "$EXT_MOUNT/dist")

.ci/e2e/scripts/run_integration_tests.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
#!/bin/sh
22

33
cd tests
4-
pytest \
4+
python3 -m pytest \
55
-rA \
66
--junitxml="$EXT_MOUNT/result.xml" \
77
--html="$EXT_MOUNT/report.html" \
88
--self-contained-html \
99
core_tests/*.py \
1010
framework_tests/*.py \
11+
eebus_tests/*.py \
1112
--everest-prefix "$EXT_MOUNT/dist"
1213
retVal=$?
1314

.ci/e2e/scripts/run_ocpp_tests.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ PARALLEL_TESTS=$(nproc)
66

77
echo "Running $PARALLEL_TESTS ocpp tests in parallel"
88

9-
pytest \
9+
python3 -m pytest \
1010
-rA \
1111
-n "$PARALLEL_TESTS" \
1212
--dist=loadgroup \

.github/workflows/build_and_test.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ on:
1818
jobs:
1919
ci:
2020
name: Build, Lint and Test
21-
uses: everest/everest-ci/.github/workflows/continuous_integration.yml@v1.4.6
21+
uses: everest/everest-ci/.github/workflows/continuous_integration.yml@feature/eebus
2222
permissions:
2323
contents: read
2424
secrets:
@@ -30,6 +30,7 @@ jobs:
3030
do_not_run_coverage_badge_creation: true
3131
run_install_wheels: true
3232
run_integration_tests: true
33+
build_kit_base_image_tag: feature-eebus
3334
ocpp-tests:
3435
name: OCPP Tests
3536
needs:

CMakeLists.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ if (NOT everest-cmake_FOUND)
2121
FetchContent_Declare(
2222
everest-cmake
2323
GIT_REPOSITORY https://github.com/EVerest/everest-cmake.git
24-
GIT_TAG main
24+
GIT_TAG tmp/eebus
2525
)
2626
FetchContent_MakeAvailable(everest-cmake)
2727
set(everest-cmake_DIR "${everest-cmake_SOURCE_DIR}")
@@ -65,6 +65,7 @@ option(CREATE_SYMLINKS "Create symlinks to javascript modules and auxillary file
6565
option(CMAKE_RUN_CLANG_TIDY "Run clang-tidy" OFF)
6666
option(EVEREST_BUILD_API_DOCS "Build EVerest API documentation" OFF)
6767
option(ISO15118_2_GENERATE_AND_INSTALL_CERTIFICATES "Automatically generate and install certificates for development purposes" ON)
68+
option(EEBUS_GENERATE_AND_INSTALL_CERTIFICATES "Automatically generate and install certificates for development purposes" ON)
6869
option(EVEREST_ENABLE_RUN_SCRIPT_GENERATION "Enables the generation of run scripts (convenience scripts for starting available configurations)" ON)
6970
option(${PROJECT_NAME}_BUILD_TESTING "Build unit tests, used if included as dependency" OFF)
7071
option(BUILD_TESTING "Build unit tests, used if standalone project" OFF)
@@ -118,6 +119,10 @@ if(NOT DISABLE_EDM)
118119
# FIXME (aw): this implicit definition for child projects is hacky
119120
set(THIRD_PARTY_APP_DST "${CMAKE_INSTALL_LIBEXECDIR}/everest/3rd_party")
120121

122+
if(GRPC_EDM)
123+
enable_language(ASM)
124+
endif()
125+
121126
evc_setup_edm()
122127

123128
# FIXME (aw): we need to set this by hand due to edm

cmake/external/eebus-grpc.cmake

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
include_guard(GLOBAL)
2+
3+
if (NOT CPM_PACKAGE_eebus-grpc_SOURCE_DIR)
4+
message(FATAL_ERROR "CPM_PACKAGE_eebus-grpc_SOURCE_DIR not set")
5+
endif()
6+
7+
set(EEBUS_GRPC_API_SOURCE_DIR ${CPM_PACKAGE_eebus-grpc_SOURCE_DIR})
8+
set(EEBUS_GRPC_API_BINARY_DIR ${CMAKE_BINARY_DIR}/eebus-grpc)
9+
10+
file(GLOB_RECURSE EEBUS_GRPC_API_SOURCE_FILES
11+
CONFIGURE_DEPENDS
12+
${EEBUS_GRPC_API_SOURCE_DIR}/*
13+
)
14+
15+
setup_go()
16+
add_go_target(
17+
NAME
18+
eebus_grpc_api_cmd
19+
OUTPUT
20+
${EEBUS_GRPC_API_BINARY_DIR}/cmd
21+
GO_PACKAGE_SOURCE_PATH
22+
${EEBUS_GRPC_API_SOURCE_DIR}/cmd
23+
OUTPUT_DIRECTORY
24+
${EEBUS_GRPC_API_BINARY_DIR}
25+
WORKING_DIRECTORY
26+
${EEBUS_GRPC_API_SOURCE_DIR}
27+
DEPENDS
28+
${EEBUS_GRPC_API_SOURCE_FILES}
29+
)
30+
31+
add_go_target(
32+
NAME
33+
eebus_grpc_api_create_cert
34+
OUTPUT
35+
${EEBUS_GRPC_API_BINARY_DIR}/create_cert
36+
GO_PACKAGE_SOURCE_PATH
37+
${EEBUS_GRPC_API_SOURCE_DIR}/cmd/create_cert
38+
OUTPUT_DIRECTORY
39+
${EEBUS_GRPC_API_BINARY_DIR}
40+
WORKING_DIRECTORY
41+
${EEBUS_GRPC_API_SOURCE_DIR}
42+
DEPENDS
43+
${EEBUS_GRPC_API_SOURCE_FILES}
44+
)
45+
46+
add_custom_target(eebus_grpc_api_all
47+
DEPENDS
48+
eebus_grpc_api_cmd
49+
eebus_grpc_api_create_cert
50+
)
51+
52+
install(
53+
FILES
54+
${EEBUS_GRPC_API_BINARY_DIR}/cmd
55+
DESTINATION
56+
${CMAKE_INSTALL_PREFIX}/bin
57+
RENAME
58+
eebus_grpc_api
59+
PERMISSIONS
60+
OWNER_EXECUTE OWNER_WRITE OWNER_READ
61+
GROUP_EXECUTE GROUP_READ
62+
WORLD_EXECUTE WORLD_READ
63+
)
64+
65+
# This function creates certificates for an EEBus component
66+
#
67+
# It will generate thre files:
68+
# - <OUT_DIR>/<NAME>_cert
69+
# - <OUT_DIR>/<NAME>_key
70+
# - <OUT_DIR>/<NAME>_ski
71+
# The generation can be triggered by calling the target <TARGET_NAME>
72+
#
73+
function(eebus_create_cert)
74+
set(options)
75+
set(one_value_args
76+
NAME
77+
OUT_DIR
78+
TARGET_NAME
79+
OUT_FILES_VAR
80+
)
81+
set(multi_value_args)
82+
cmake_parse_arguments(arg "${options}" "${one_value_args}" "${multi_value_args}" ${ARGN})
83+
84+
if (arg_UNPARSED_ARGUMENTS)
85+
message(FATAL_ERROR "Unparsed arguments: ${arg_UNPARSED_ARGUMENTS}")
86+
endif()
87+
if (arg_KEYWORDS_MISSING_VALUES)
88+
message(FATAL_ERROR "Keywords missing values: ${arg_KEYWORDS_MISSING_VALUES}")
89+
endif()
90+
if (NOT arg_NAME)
91+
message(FATAL_ERROR "NAME not set")
92+
endif()
93+
if (NOT arg_OUT_DIR)
94+
message(FATAL_ERROR "OUT_DIR not set")
95+
endif()
96+
if (NOT IS_ABSOLUTE ${arg_OUT_DIR})
97+
message(FATAL_ERROR "OUT_DIR ${arg_OUT_DIR} is not an absolute path")
98+
endif()
99+
if (NOT arg_TARGET_NAME)
100+
message(FATAL_ERROR "TARGET_NAME not set")
101+
endif()
102+
103+
get_target_property(CREATE_CERT_BINARY_FILE eebus_grpc_api_create_cert TARGET_FILE)
104+
set(OUT_FILES
105+
${arg_OUT_DIR}/${arg_NAME}_cert
106+
${arg_OUT_DIR}/${arg_NAME}_key
107+
${arg_OUT_DIR}/${arg_NAME}_ski
108+
)
109+
add_custom_command(
110+
OUTPUT
111+
${OUT_FILES}
112+
COMMAND
113+
mkdir -p ${arg_OUT_DIR}
114+
COMMAND
115+
${CREATE_CERT_BINARY_FILE}
116+
ARGS
117+
${arg_OUT_DIR}
118+
${arg_NAME}
119+
DEPENDS
120+
eebus_grpc_api_create_cert
121+
COMMENT
122+
"Creating ${arg_NAME} certificates"
123+
)
124+
add_custom_target(${arg_TARGET_NAME}
125+
DEPENDS
126+
${OUT_FILES}
127+
)
128+
129+
if (arg_OUT_FILES_VAR)
130+
set(${arg_OUT_FILES_VAR} ${OUT_FILES} PARENT_SCOPE)
131+
endif()
132+
endfunction()

config/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ generate_config_run_script(CONFIG sil-ocpp-custom-extension)
1818
generate_config_run_script(CONFIG sil-ocpp-pnc)
1919
generate_config_run_script(CONFIG sil-ocpp201-pnc)
2020
generate_config_run_script(CONFIG example)
21+
generate_config_run_script(CONFIG eebus)
2122

2223
add_subdirectory(bringup)
2324

0 commit comments

Comments
 (0)