Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1) - OpenOCPP extracted (firmware OCPP 1.6J/2.0.1) - ShapeShifter library installed (pip install -e) - ShapeShifter specification extracted - EVerest extracted TODO updated with progress
This commit is contained in:
3
tools/EVerest-main/applications/utils/docker/everest-docker-image/.gitignore
vendored
Normal file
3
tools/EVerest-main/applications/utils/docker/everest-docker-image/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
*.tar.gz
|
||||
user_config.yaml
|
||||
ocpp_user_config.json
|
||||
@@ -0,0 +1,118 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM debian:12-slim AS builder
|
||||
|
||||
ARG REPO
|
||||
ARG BRANCH
|
||||
ARG EVEREST_CONFIG
|
||||
ARG OCPP_CONFIG
|
||||
ARG ADDITIONAL_CMAKE_PARAMETERS
|
||||
ARG INSTALL_EV_CLI
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install --no-install-recommends -y \
|
||||
git \
|
||||
rsync \
|
||||
wget \
|
||||
cmake \
|
||||
doxygen \
|
||||
graphviz \
|
||||
build-essential \
|
||||
clang-format \
|
||||
clang-tidy \
|
||||
cppcheck \
|
||||
libboost-all-dev \
|
||||
maven \
|
||||
openjdk-17-jdk \
|
||||
nodejs \
|
||||
npm \
|
||||
libsqlite3-dev \
|
||||
python3-pip \
|
||||
libssl-dev \
|
||||
libcurl4-openssl-dev \
|
||||
libpcap-dev \
|
||||
libcap-dev \
|
||||
libsystemd-dev \
|
||||
python3-venv \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR /workspace/everest
|
||||
|
||||
# to avoid caching
|
||||
ARG BUILD_DATE=Unknown
|
||||
|
||||
# add github to known hosts
|
||||
RUN mkdir -p -m 0600 ~/.ssh
|
||||
RUN ssh-keyscan github.com >> ~/.ssh/known_hosts
|
||||
|
||||
RUN mkdir -p /workspace/everest/cpm_source_cache
|
||||
ENV CPM_SOURCE_CACHE="/workspace/everest/cpm_source_cache"
|
||||
ENV EVEREST_VENV=/workspace/everest/venv
|
||||
RUN python3 -m venv ${EVEREST_VENV}
|
||||
ENV PATH="${EVEREST_VENV}/bin:${PATH}"
|
||||
RUN git clone https://github.com/EVerest/everest-cmake.git
|
||||
RUN git clone https://github.com/EVerest/EVerest.git -b "${BRANCH}"
|
||||
WORKDIR /workspace/everest/EVerest/applications/utils/ev-dev-tools
|
||||
RUN if [ "${INSTALL_EV_CLI}" = "install_ev_cli" ] ; then python3 -m pip install . ; fi
|
||||
WORKDIR /workspace/everest
|
||||
RUN git clone https://github.com/EVerest/ext-switchev-iso15118.git
|
||||
WORKDIR /workspace/everest/ext-switchev-iso15118/
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
WORKDIR /workspace/everest
|
||||
|
||||
RUN rm -rf "/workspace/everest/$(basename "${REPO}" .git)"
|
||||
RUN --mount=type=ssh git clone ${REPO} -b "${BRANCH}"
|
||||
|
||||
RUN --mount=type=ssh rm -rf "/workspace/everest/$(basename "${REPO}" .git)/build" && \
|
||||
cd "/workspace/everest/$(basename "${REPO}" .git)" && \
|
||||
git checkout "${BRANCH}" && \
|
||||
mkdir "/workspace/everest/$(basename "${REPO}" .git)/build" && \
|
||||
cd "/workspace/everest/$(basename "${REPO}" .git)/build" && \
|
||||
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/everest ${ADDITIONAL_CMAKE_PARAMETERS} && \
|
||||
make -j"$(nproc)" install
|
||||
|
||||
# Try to copy the OCPP 2.0.1 config directory to have the init_device_model_db.py script available for (re-)initialization of the device model
|
||||
RUN cp -R "$(grep -m 1 "ocpp_SOURCE_DIR:STATIC=" "/workspace/everest/$(basename "${REPO}" .git)/build/CMakeCache.txt" | sed "s/ocpp_SOURCE_DIR:STATIC=//")/config/v201" /opt/everest/ocpp201config || echo "Could not copy OCPP 2.0.1 config directory"
|
||||
RUN mkdir -p /opt/everest/config/user-config
|
||||
COPY "${EVEREST_CONFIG}" /opt/everest/config/
|
||||
COPY "${OCPP_CONFIG}" /opt/everest/config/
|
||||
RUN if [ "${EVEREST_CONFIG}" != "config.yaml" ]; then mv /opt/everest/config/"${EVEREST_CONFIG}" /opt/everest/config/config.yaml ; fi
|
||||
RUN if [ "${OCPP_CONFIG}" != "ocpp-config.json" ]; then mv /opt/everest/config/"${OCPP_CONFIG}" /opt/everest/config/ocpp-config.json ; fi
|
||||
|
||||
COPY logging.ini /opt/everest/config
|
||||
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM debian:12-slim
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install --no-install-recommends -y \
|
||||
openjdk-17-jre \
|
||||
nodejs \
|
||||
npm \
|
||||
curl \
|
||||
python3-pip \
|
||||
sqlite3 \
|
||||
libboost-program-options1.74.0 \
|
||||
libboost-log1.74.0 \
|
||||
libboost-chrono1.74.0 \
|
||||
libboost-system1.74.0 \
|
||||
libssl3 \
|
||||
libcurl4 \
|
||||
libcap2 \
|
||||
less \
|
||||
libevent-dev \
|
||||
python3-venv \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ENV EVEREST_VENV=/workspace/everest/venv
|
||||
RUN python3 -m venv ${EVEREST_VENV}
|
||||
ENV PATH="${EVEREST_VENV}/bin:${PATH}"
|
||||
COPY --from=builder /workspace/everest/venv /workspace/everest/venv
|
||||
|
||||
WORKDIR /opt/everest
|
||||
COPY --from=builder /opt/everest ./
|
||||
COPY ./scripts/initialize.sh /opt/everest
|
||||
|
||||
CMD [ "/opt/everest/bin/manager", "--conf", "/opt/everest/config/config.yaml" ]
|
||||
@@ -0,0 +1,45 @@
|
||||
# EVerest with docker
|
||||
|
||||
You can build docker images of EVerest or out-of-tree repositories using the provided utility script.
|
||||
|
||||
## Build an EVerest docker image
|
||||
|
||||
With
|
||||
|
||||
```bash
|
||||
./build.sh [--conf <string>]
|
||||
```
|
||||
|
||||
a docker image of EVerest will be created using the given EVerest configuration file.
|
||||
|
||||
**It is important to note that if you require ssh access, the ssh agent forwarding should be done without sudo privileges.
|
||||
By running the script in sudo this changes the user and causes issues with the ssh forwarding.**
|
||||
It is possible to make your user not require sudo privileges when running docker, this should be done instead.
|
||||
|
||||
Specify the following options to create your desired docker image of EVerest:
|
||||
|
||||
* repo: Git repository (e.g. https://github.com/EVerest/EVerest.git) - Optional, defaults to: https://github.com/EVerest/EVerest.git
|
||||
* branch: Git branch or tag name (e.g main or 2024.6.0) - Optional, defaults to: main
|
||||
* conf: Path to EVerest config file (e.g. /home/$(whoami)/checkout/everest-workspace/EVerest/config/ config-sil.yaml) - Required.
|
||||
* ocpp-conf: Path to EVerest OCPP config file (e.g. /home/$(whoami)/checkout/everest-workspace/libocpp/aux/config-docker.json) - Optional, defaults to: ocpp-config.json
|
||||
* name: Name of the docker image (e.g everest) - Optional, defaults to: everest
|
||||
* build-date: Build date of the docker image, is reflected in its name and can have an effect on caching - Optional, defaults to the current datetime
|
||||
|
||||
```bash
|
||||
./build.sh [--repo <GIT-REPOSITORY>] [--branch <BRANCH-NAME>] [--conf <EVEREST-CONFIG>] [--ocpp-conf <OCPP-CONFIG>] [--name <IMAGE-NAME>] [--build-date 2042]
|
||||
```
|
||||
Remember to provide an ocpp configuration file if you use an EVerest config that loads the OCPP module. Be aware that the provided OCPP config file will always be named `ocpp-config.json` inside the docker container. Consider this when configuring the OCPP module within the EVerest config and to set the ChargePointConfigPath accordingly.
|
||||
|
||||
Images will be created in a .tar.gz format in this folder.
|
||||
|
||||
## Run EVerest in docker
|
||||
|
||||
To run the image in a docker container, run the following commands
|
||||
|
||||
```bash
|
||||
docker load < <YOUR_IMAGE-TIMESTAMP.tar.gz>
|
||||
docker run --rm -it --network host <IMAGE_NAME>
|
||||
```
|
||||
|
||||
## Run EVerest with OCPP 2.0.1 in docker
|
||||
To run EVerest with OCPP 2.0.1 you can use the provided docker-compose.yaml with the example run-config-fallback.sh script
|
||||
@@ -0,0 +1,5 @@
|
||||
active_modules:
|
||||
system:
|
||||
module: System
|
||||
|
||||
x-module-layout: {}
|
||||
@@ -0,0 +1,819 @@
|
||||
[
|
||||
{
|
||||
"name": "ChargingStatusIndicator",
|
||||
"variables": {
|
||||
"ChargingStatusIndicatorActive": {
|
||||
"variable_name": "Active",
|
||||
"attributes": {
|
||||
"Actual": false
|
||||
}
|
||||
},
|
||||
"ChargingStatusIndicatorColor": {
|
||||
"variable_name": "Color",
|
||||
"attributes": {
|
||||
"Actual": "FFFF00"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"name": "Connector",
|
||||
"evse_id": 1,
|
||||
"connector_id": 1,
|
||||
"variables": {
|
||||
"ConnectorAvailable": {
|
||||
"variable_name": "Available",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
},
|
||||
"ConnectorType": {
|
||||
"variable_name": "ConnectorType",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"ConnectorSupplyPhases": {
|
||||
"variable_name": "SupplyPhases",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "EVSE",
|
||||
"evse_id": 1,
|
||||
"variables": {
|
||||
"EVSEAvailabilityState": {
|
||||
"variable_name": "AvailabilityState",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"EVSEAvailable": {
|
||||
"variable_name": "Available",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
},
|
||||
"EVSEPower": {
|
||||
"variable_name": "Power",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
},
|
||||
"EVSESupplyPhases": {
|
||||
"variable_name": "SupplyPhases",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Connector",
|
||||
"evse_id": 2,
|
||||
"connector_id": 1,
|
||||
"variables": {
|
||||
"ConnectorAvailable": {
|
||||
"variable_name": "Available",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
},
|
||||
"ConnectorType": {
|
||||
"variable_name": "ConnectorType",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"ConnectorSupplyPhases": {
|
||||
"variable_name": "SupplyPhases",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "EVSE",
|
||||
"evse_id": 2,
|
||||
"variables": {
|
||||
"EVSEAvailabilityState": {
|
||||
"variable_name": "AvailabilityState",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"EVSEAvailable": {
|
||||
"variable_name": "Available",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
},
|
||||
"EVSEPower": {
|
||||
"variable_name": "Power",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
},
|
||||
"EVSESupplyPhases": {
|
||||
"variable_name": "SupplyPhases",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "SampledDataCtrlr",
|
||||
"variables": {
|
||||
"SampledDataCtrlrEnabled": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
},
|
||||
"SampledDataTxEndedInterval": {
|
||||
"variable_name": "TxEndedInterval",
|
||||
"attributes": {
|
||||
"Actual": "60"
|
||||
}
|
||||
},
|
||||
"SampledDataTxEndedMeasurands": {
|
||||
"variable_name": "TxEndedMeasurands",
|
||||
"attributes": {
|
||||
"Actual": "Energy.Active.Import.Register,Current.Import"
|
||||
}
|
||||
},
|
||||
"SampledDataTxStartedMeasurands": {
|
||||
"variable_name": "TxStartedMeasurands",
|
||||
"attributes": {
|
||||
"Actual": "Energy.Active.Import.Register,Current.Import"
|
||||
}
|
||||
},
|
||||
"SampledDataTxUpdatedInterval": {
|
||||
"variable_name": "TxUpdatedInterval",
|
||||
"attributes": {
|
||||
"Actual": "120"
|
||||
}
|
||||
},
|
||||
"SampledDataTxUpdatedMeasurands": {
|
||||
"variable_name": "TxUpdatedMeasurands",
|
||||
"attributes": {
|
||||
"Actual": "Energy.Active.Import.Register,Current.Import,Voltage,Power.Active.Import,Power.Reactive.Import,Frequency"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "LocalAuthListCtrlr",
|
||||
"variables": {
|
||||
"BytesPerMessageSendLocalList": {
|
||||
"variable_name": "BytesPerMessage",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
},
|
||||
"LocalAuthListCtrlrEntries": {
|
||||
"variable_name": "Entries",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
},
|
||||
"ItemsPerMessageSendLocalList": {
|
||||
"variable_name": "ItemsPerMessage",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
},
|
||||
"LocalAuthListCtrlrEnabled": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "InternalCtrlr",
|
||||
"variables": {
|
||||
"ChargePointId": {
|
||||
"variable_name": "ChargePointId",
|
||||
"attributes": {
|
||||
"Actual": "cp001"
|
||||
}
|
||||
},
|
||||
"NetworkConnectionProfiles": {
|
||||
"variable_name": "NetworkConnectionProfiles",
|
||||
"attributes": {
|
||||
"Actual": "[{\"configurationSlot\": 1, \"connectionData\": {\"messageTimeout\": 30, \"ocppCsmsUrl\": \"ws://localhost:9000/cp001\", \"ocppInterface\": \"Wired0\", \"ocppTransport\": \"JSON\", \"ocppVersion\": \"OCPP20\", \"securityProfile\": 1}}]"
|
||||
}
|
||||
},
|
||||
"ChargeBoxSerialNumber": {
|
||||
"variable_name": "ChargeBoxSerialNumber",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"ChargePointModel": {
|
||||
"variable_name": "ChargePointModel",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"ChargePointVendor": {
|
||||
"variable_name": "ChargePointVendor",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"FirmwareVersion": {
|
||||
"variable_name": "FirmwareVersion",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"SupportedCiphers12": {
|
||||
"variable_name": "SupportedCiphers12",
|
||||
"attributes": {
|
||||
"Actual": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-GCM-SHA384"
|
||||
}
|
||||
},
|
||||
"SupportedCiphers13": {
|
||||
"variable_name": "SupportedCiphers13",
|
||||
"attributes": {
|
||||
"Actual": "TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256"
|
||||
}
|
||||
},
|
||||
"NumberOfConnectors": {
|
||||
"variable_name": "NumberOfConnectors",
|
||||
"attributes": {
|
||||
"Actual": "1"
|
||||
}
|
||||
},
|
||||
"LogMessagesFormat": {
|
||||
"variable_name": "LogMessagesFormat",
|
||||
"attributes": {
|
||||
"Actual": "log,html"
|
||||
}
|
||||
},
|
||||
"SupportedCriteria": {
|
||||
"variable_name": "SupportedCriteria",
|
||||
"attributes": {
|
||||
"Actual": "Enabled,Active,Available,Problem"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "OCPPCommCtrlr",
|
||||
"variables": {
|
||||
"FileTransferProtocols": {
|
||||
"variable_name": "FileTransferProtocols",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"MessageTimeout": {
|
||||
"variable_name": "MessageTimeout",
|
||||
"attributes": {
|
||||
"Actual": "60"
|
||||
},
|
||||
"instance": "Default"
|
||||
},
|
||||
"MessageAttemptInterval": {
|
||||
"variable_name": "MessageAttemptInterval",
|
||||
"attributes": {
|
||||
"Actual": "10"
|
||||
},
|
||||
"instance": "TransactionEvent"
|
||||
},
|
||||
"MessageAttempts": {
|
||||
"variable_name": "MessageAttempts",
|
||||
"attributes": {
|
||||
"Actual": "5"
|
||||
},
|
||||
"instance": "TransactionEvent"
|
||||
},
|
||||
"NetworkConfigurationPriority": {
|
||||
"variable_name": "NetworkConfigurationPriority",
|
||||
"attributes": {
|
||||
"Actual": "1"
|
||||
}
|
||||
},
|
||||
"NetworkProfileConnectionAttempts": {
|
||||
"variable_name": "NetworkProfileConnectionAttempts",
|
||||
"attributes": {
|
||||
"Actual": "3"
|
||||
}
|
||||
},
|
||||
"OfflineThreshold": {
|
||||
"variable_name": "OfflineThreshold",
|
||||
"attributes": {
|
||||
"Actual": "60"
|
||||
}
|
||||
},
|
||||
"ResetRetries": {
|
||||
"variable_name": "ResetRetries",
|
||||
"attributes": {
|
||||
"Actual": "3"
|
||||
}
|
||||
},
|
||||
"RetryBackOffRandomRange": {
|
||||
"variable_name": "RetryBackOffRandomRange",
|
||||
"attributes": {
|
||||
"Actual": "2"
|
||||
}
|
||||
},
|
||||
"RetryBackOffRepeatTimes": {
|
||||
"variable_name": "RetryBackOffRepeatTimes",
|
||||
"attributes": {
|
||||
"Actual": "2"
|
||||
}
|
||||
},
|
||||
"RetryBackOffWaitMinimum": {
|
||||
"variable_name": "RetryBackOffWaitMinimum",
|
||||
"attributes": {
|
||||
"Actual": "1"
|
||||
}
|
||||
},
|
||||
"UnlockOnEVSideDisconnect": {
|
||||
"variable_name": "UnlockOnEVSideDisconnect",
|
||||
"attributes": {
|
||||
"Actual": "1"
|
||||
}
|
||||
},
|
||||
"WebSocketPingInterval": {
|
||||
"variable_name": "WebSocketPingInterval",
|
||||
"attributes": {
|
||||
"Actual": "30"
|
||||
}
|
||||
},
|
||||
"OCPPCommCtrlrEnabled": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "DisplayMessageCtrlr",
|
||||
"variables": {
|
||||
"NumberOfDisplayMessages": {
|
||||
"variable_name": "DisplayMessages",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
},
|
||||
"DisplayMessageSupportedFormats": {
|
||||
"variable_name": "SupportedFormats",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"DisplayMessageSupportedPriorities": {
|
||||
"variable_name": "SupportedPriorities",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"DisplayMessageCtrlrEnabled": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ClockCtrlr",
|
||||
"variables": {
|
||||
"DateTime": {
|
||||
"variable_name": "DateTime",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"TimeSource": {
|
||||
"variable_name": "TimeSource",
|
||||
"attributes": {
|
||||
"Actual": "Heartbeat"
|
||||
}
|
||||
},
|
||||
"ClockCtrlrEnabled": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ReservationCtrlr",
|
||||
"variables": {}
|
||||
},
|
||||
{
|
||||
"name": "ISO15118Ctrlr",
|
||||
"variables": {
|
||||
"ContractValidationOffline": {
|
||||
"variable_name": "ContractValidationOffline",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
},
|
||||
"ReservationCtrlrEnabled": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "TxCtrlr",
|
||||
"variables": {
|
||||
"EVConnectionTimeOut": {
|
||||
"variable_name": "EVConnectionTimeOut",
|
||||
"attributes": {
|
||||
"Actual": "120"
|
||||
}
|
||||
},
|
||||
"StopTxOnEVSideDisconnect": {
|
||||
"variable_name": "StopTxOnEVSideDisconnect",
|
||||
"attributes": {
|
||||
"Actual": "1"
|
||||
}
|
||||
},
|
||||
"StopTxOnInvalidId": {
|
||||
"variable_name": "StopTxOnInvalidId",
|
||||
"attributes": {
|
||||
"Actual": "1"
|
||||
}
|
||||
},
|
||||
"TxStartPoint": {
|
||||
"variable_name": "TxStartPoint",
|
||||
"attributes": {
|
||||
"Actual": "PowerPathClosed"
|
||||
}
|
||||
},
|
||||
"TxStopPoint": {
|
||||
"variable_name": "TxStopPoint",
|
||||
"attributes": {
|
||||
"Actual": "EVConnected,Authorized"
|
||||
}
|
||||
},
|
||||
"TxCtrlrEnabled": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "AlignedDataCtrlr",
|
||||
"variables": {
|
||||
"AlignedDataInterval": {
|
||||
"variable_name": "Interval",
|
||||
"attributes": {
|
||||
"Actual": "900"
|
||||
}
|
||||
},
|
||||
"AlignedDataMeasurands": {
|
||||
"variable_name": "Measurands",
|
||||
"attributes": {
|
||||
"Actual": "Energy.Active.Import.Register,Voltage,Frequency"
|
||||
}
|
||||
},
|
||||
"AlignedDataTxEndedInterval": {
|
||||
"variable_name": "TxEndedInterval",
|
||||
"attributes": {
|
||||
"Actual": "60"
|
||||
}
|
||||
},
|
||||
"AlignedDataTxEndedMeasurands": {
|
||||
"variable_name": "TxEndedMeasurands",
|
||||
"attributes": {
|
||||
"Actual": "Energy.Active.Import.Register,Voltage"
|
||||
}
|
||||
},
|
||||
"AlignedDataSendDuringIdle": {
|
||||
"variable_name": "SendDuringIdle",
|
||||
"attributes": {
|
||||
"Actual": false
|
||||
}
|
||||
},
|
||||
"AlignedDataCtrlrEnabled": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "AuthCtrlr",
|
||||
"variables": {
|
||||
"AuthorizeRemoteStart": {
|
||||
"variable_name": "AuthorizeRemoteStart",
|
||||
"attributes": {
|
||||
"Actual": "1"
|
||||
}
|
||||
},
|
||||
"LocalAuthorizeOffline": {
|
||||
"variable_name": "LocalAuthorizeOffline",
|
||||
"attributes": {
|
||||
"Actual": "1"
|
||||
}
|
||||
},
|
||||
"LocalPreAuthorize": {
|
||||
"variable_name": "LocalPreAuthorize",
|
||||
"attributes": {
|
||||
"Actual": "1"
|
||||
}
|
||||
},
|
||||
"MasterPassGroupId": {
|
||||
"variable_name": "MasterPassGroupId",
|
||||
"attributes": {
|
||||
"Actual": "123"
|
||||
}
|
||||
},
|
||||
"AuthCtrlrEnabled": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "AuthCacheCtrlr",
|
||||
"variables": {
|
||||
"AuthCacheCtrlrAvailable": {
|
||||
"variable_name": "Available",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
},
|
||||
"AuthCacheCtrlrEnabled": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
},
|
||||
"AuthCacheStorage": {
|
||||
"variable_name": "Storage",
|
||||
"attributes": {
|
||||
"Actual": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ChargingStation",
|
||||
"variables": {
|
||||
"ChargingStationAvailabilityState": {
|
||||
"variable_name": "AvailabilityState",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"ChargingStationAvailable": {
|
||||
"variable_name": "Available",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
},
|
||||
"ChargingStationSupplyPhases": {
|
||||
"variable_name": "SupplyPhases",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
},
|
||||
"ChargingStationPhaseRotation": {
|
||||
"variable_name": "PhaseRotation",
|
||||
"attributes": {
|
||||
"Actual": "RST"
|
||||
}
|
||||
},
|
||||
"ChargingStationProblem": {
|
||||
"variable_name": "Problem",
|
||||
"attributes": {
|
||||
"Actual": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "CustomizationCtrlr",
|
||||
"variables": {}
|
||||
},
|
||||
{
|
||||
"name": "DeviceDataCtrlr",
|
||||
"variables": {
|
||||
"BytesPerMessageGetReport": {
|
||||
"variable_name": "BytesPerMessage",
|
||||
"attributes": {
|
||||
"Actual": 250
|
||||
},
|
||||
"instance": "GetReport"
|
||||
},
|
||||
"BytesPerMessageGetVariables": {
|
||||
"variable_name": "BytesPerMessage",
|
||||
"attributes": {
|
||||
"Actual": 250
|
||||
},
|
||||
"instance": "GetVariables"
|
||||
},
|
||||
"BytesPerMessageSetVariables": {
|
||||
"variable_name": "BytesPerMessage",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
},
|
||||
"instance": "SetVariables"
|
||||
},
|
||||
"ItemsPerMessageGetReport": {
|
||||
"variable_name": "ItemsPerMessage",
|
||||
"attributes": {
|
||||
"Actual": 4
|
||||
},
|
||||
"instance": "GetReport"
|
||||
},
|
||||
"ItemsPerMessageGetVariables": {
|
||||
"variable_name": "ItemsPerMessage",
|
||||
"attributes": {
|
||||
"Actual": 2
|
||||
},
|
||||
"instance": "GetVariables"
|
||||
},
|
||||
"ItemsPerMessageSetVariables": {
|
||||
"variable_name": "ItemsPerMessage",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
},
|
||||
"instance": "SetVariables"
|
||||
},
|
||||
"ReportingValueSize": {
|
||||
"variable_name": "ReportingValueSize",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
},
|
||||
"instance": "SetVariables"
|
||||
},
|
||||
"ValueSize": {
|
||||
"variable_name": "ValueSize",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
},
|
||||
"instance": "SetVariables"
|
||||
},
|
||||
"DeviceDataCtrlrEnabled": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "TariffCostCtrlr",
|
||||
"variables": {
|
||||
"TariffCostCtrlrCurrency": {
|
||||
"variable_name": "Currency",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"TariffFallbackMessage": {
|
||||
"variable_name": "TariffFallbackMessage",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"TotalCostFallbackMessage": {
|
||||
"variable_name": "TotalCostFallbackMessage",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"TariffCostCtrlrEnabledCost": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "SecurityCtrlr",
|
||||
"variables": {
|
||||
"CertificateEntries": {
|
||||
"variable_name": "CertificateEntries",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
},
|
||||
"OrganizationName": {
|
||||
"variable_name": "OrganizationName",
|
||||
"attributes": {
|
||||
"Actual": "Pionix"
|
||||
}
|
||||
},
|
||||
"SecurityProfile": {
|
||||
"variable_name": "SecurityProfile",
|
||||
"attributes": {
|
||||
"Actual": "1"
|
||||
}
|
||||
},
|
||||
"Identity": {
|
||||
"variable_name": "Identity",
|
||||
"attributes": {
|
||||
"Actual": "cp001"
|
||||
}
|
||||
},
|
||||
"BasicAuthPassword": {
|
||||
"variable_name": "BasicAuthPassword",
|
||||
"attributes": {
|
||||
"Actual": "DEADBEEFDEADBEEF"
|
||||
}
|
||||
},
|
||||
"SecurityCtrlrEnabled": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "SmartChargingCtrlr",
|
||||
"variables": {
|
||||
"EntriesChargingProfiles": {
|
||||
"variable_name": "Entries",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
},
|
||||
"instance": "ChargingProfiles"
|
||||
},
|
||||
"LimitChangeSignificance": {
|
||||
"variable_name": "LimitChangeSignificance",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
},
|
||||
"PeriodsPerSchedule": {
|
||||
"variable_name": "PeriodsPerSchedule",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
},
|
||||
"ChargingProfileMaxStackLevel": {
|
||||
"variable_name": "ProfileStackLevel",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
}
|
||||
},
|
||||
"ChargingScheduleChargingRateUnit": {
|
||||
"variable_name": "RateUnit",
|
||||
"attributes": {
|
||||
"Actual": ""
|
||||
}
|
||||
},
|
||||
"SmartChargingCtrlrAvailableEnabled": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "MonitoringCtrlr",
|
||||
"variables": {
|
||||
"BytesPerMessageSetVariableMonitoring": {
|
||||
"variable_name": "BytesPerMessage",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
},
|
||||
"instance": "SetVariableMonitoring"
|
||||
},
|
||||
"ItemsPerMessageSetVariableMonitoring": {
|
||||
"variable_name": "ItemsPerMessage",
|
||||
"attributes": {
|
||||
"Actual": 42
|
||||
},
|
||||
"instance": "SetVariableMonitoring"
|
||||
},
|
||||
"MonitoringCtrlrEnabled": {
|
||||
"variable_name": "Enabled",
|
||||
"attributes": {
|
||||
"Actual": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,32 @@
|
||||
services:
|
||||
mqtt-server:
|
||||
image: eclipse-mosquitto:2.0.18
|
||||
ports:
|
||||
- 1883:1883
|
||||
volumes:
|
||||
- ../mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf
|
||||
nodered:
|
||||
build:
|
||||
context: ./nodered
|
||||
dockerfile: Dockerfile
|
||||
ports:
|
||||
- 1880:1880
|
||||
volumes:
|
||||
- ./nodered/flows:/data/flows
|
||||
depends_on:
|
||||
- mqtt-server
|
||||
everest:
|
||||
image: everest:latest
|
||||
ports:
|
||||
- 8849:8849
|
||||
depends_on:
|
||||
- mqtt-server
|
||||
environment:
|
||||
- MQTT_SERVER_ADDRESS=mqtt-server
|
||||
sysctls:
|
||||
- net.ipv6.conf.all.disable_ipv6=0
|
||||
volumes:
|
||||
- ./logs:/opt/everest/logs
|
||||
- ./configuration/everest/${EVEREST_CONFIG}:/opt/everest/config/config.yaml
|
||||
- ./configuration/ocpp/${OCPP_CONFIG}:/opt/everest/config/ocpp-config.json
|
||||
command: ${EVEREST_COMMAND}
|
||||
@@ -0,0 +1,18 @@
|
||||
# for documentation on this file format see:
|
||||
# https://www.boost.org/doc/libs/1_54_0/libs/log/doc/html/log/detailed/utilities.html#log.detailed.utilities.setup.filter_formatter
|
||||
|
||||
[Core]
|
||||
DisableLogging=false
|
||||
Filter="%Severity% >= INFO"
|
||||
|
||||
[Sinks.Console]
|
||||
Destination=Console
|
||||
# Filter="%Target% contains \"MySink1\""
|
||||
Format="%TimeStamp% [%Severity%] \033[1;32m%Process%\033[0m \033[1;36m%function%\033[0m \033[1;30m%file%:\033[0m\033[1;32m%line%\033[0m: %Message%"
|
||||
Asynchronous=false
|
||||
AutoFlush=true
|
||||
SeverityStringColorDebug="\033[1;30m"
|
||||
SeverityStringColorInfo="\033[1;37m"
|
||||
SeverityStringColorWarning="\033[1;33m"
|
||||
SeverityStringColorError="\033[1;31m"
|
||||
SeverityStringColorCritical="\033[1;35m"
|
||||
@@ -0,0 +1,5 @@
|
||||
FROM nodered/node-red:2.2.3
|
||||
RUN npm install node-red-dashboard
|
||||
RUN npm install node-red-contrib-ui-actions
|
||||
RUN npm install node-red-node-ui-table
|
||||
RUN npm install node-red-contrib-ui-level
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,31 @@
|
||||
#!/bin/bash
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [--conf <string>] [--ocpp-conf <string>] [--init]" 1>&2
|
||||
echo -e "\t--conf: Path to EVerest config file - Optional, defaults to config-fallback.yaml"
|
||||
echo -e "\t--ocpp-conf: Path to EVerest OCPP config file - Optional, defaults to ocpp-config.json"
|
||||
echo -e "\t--init: If the OCPP 2.0.1 device model should be re-initialized with the given OCPP config - Optional"
|
||||
exit 1
|
||||
}
|
||||
|
||||
export EVEREST_CONFIG=config-fallback.yaml
|
||||
export OCPP_CONFIG=ocpp-config.json
|
||||
export EVEREST_COMMAND="sh -c '/opt/everest/bin/manager --conf /opt/everest/config/config.yaml'"
|
||||
|
||||
while [ ! -z "$1" ]; do
|
||||
if [ "$1" == "--conf" ]; then
|
||||
export EVEREST_CONFIG="${2}"
|
||||
shift 2
|
||||
elif [ "$1" == "--ocpp-conf" ]; then
|
||||
export OCPP_CONFIG="${2}"
|
||||
shift 2
|
||||
elif [ "$1" == "--init" ]; then
|
||||
export EVEREST_COMMAND="sh -c '/opt/everest/initialize.sh'"
|
||||
shift 1
|
||||
else
|
||||
usage
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
docker compose up
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "initialize.sh script used to re-initialize EVerest OCPP 2.0.1 device model and starting everest"
|
||||
|
||||
python3 /opt/everest/ocpp201config/init_device_model_db.py --db /opt/everest/share/everest/modules/OCPP201/device_model_storage.db --config /opt/everest/config/ocpp-config.json --schemas /opt/everest/ocpp201config/component_schemas/ init insert
|
||||
|
||||
/opt/everest/bin/manager --conf /opt/everest/config/config.yaml
|
||||
Reference in New Issue
Block a user