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:
Eric F
2026-06-08 00:38:27 -04:00
parent 468cfeaa50
commit d398a6ced2
7326 changed files with 1177561 additions and 7 deletions

View File

@@ -0,0 +1,3 @@
*.tar.gz
user_config.yaml
ocpp_user_config.json

View File

@@ -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" ]

View File

@@ -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

View File

@@ -0,0 +1,5 @@
active_modules:
system:
module: System
x-module-layout: {}

View File

@@ -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
}
}
}
}
]

View File

@@ -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}

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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