From d913f7649bb54bd442b1e68cb597915bae538d70 Mon Sep 17 00:00:00 2001 From: Stefan Feilmeier Date: Tue, 10 Dec 2024 22:58:10 +0100 Subject: [PATCH 01/49] FEMS Backports 2024-12-10 (#2916) * Edge * ENTSO-E: added preferred resolution config * ModbusTcpApi: fix updating ModbusRecordTable - Clears ModbusList on initializing => components, that are removed in the modbus component_ids cant be accessed by qmodmaster anymore. - Fixed ModbusComponents getting actually removed out of array => resulted in write commands not being executed after esscluster change - High Prio because this bug could lead to serious problems on our systems, especially on Industrial systems. * ToU: resolution property addition in ENTSO-E App + fix ENTSO-E timing - Added resolution property to be able to be configurable through APP. - Fixed the ENTSO-E Bug where prices are mismatched by 15 mins. * Prediction ValueRange: fix possible NPE if value is null - In my refactoring of the Prediction class I missed handling of a situation where a NullPointerException could happen. - This leads to the problem that - if no local historic values are existing, e.g. after system outage or at IBN, the prediction fails with a NullPointerException. * Time-of-Use-Tariff: apply ESS_MAX_SOC in Run-State - Unfortunately this had been lost during splitting of Optimizer and ToU-Controller - Also increasing the value to 94 % to take into account larger storage systems * EVCS Mennekes Read Only implementation - Mennekes Implementation from OpenEMS PR #2082 - Added App for Mennekes - Added new App Category for Read Only Evcs - Added Read only to mennekes config * Core: add Greece to safety country list * Backport GoodWe Grid.Meter fix; relates to #2895 * UI * dynamic scaling for charts and start scales at least at 0 - Redoing feature that yAxis scale has dynamic scale and didnt have to start at 0 * adjust server not accessible page for local monitoring - Adjusting server not accessible page for local monitoring, * update last updated timestamp for empty edge - Updating `lastUpdated` timestamp even if edge config is empty, `_sum/State` still exists * show absolute value for grid current value in modal - Use absolute value for grid modal current, text on the current value shows state `grid-feed-in` or `grid-buy` * Offline-Page Translations * ToU chart bugfix regarding dynamic scaling * Darkmode - some color changes were done for both light and dark mode --------- Co-authored-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com> Co-authored-by: Sagar Venu <32655208+venu-sagar@users.noreply.github.com> Co-authored-by: Sebastian Asen <47855186+sebastianasen@users.noreply.github.com> Co-authored-by: Fabian Brandtner <10850256+fabian94533@users.noreply.github.com> Co-authored-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com> Co-authored-by: Anas Shetla <141644226+AnasShetla@users.noreply.github.com> Co-authored-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com> --- .../alerting/scheduler/MessageScheduler.java | 1 + .../io/openems/backend/alerting/Dummy.java | 4 +- ...yHistoricTimeseriesExportXlsxResponse.java | 2 - .../common/oem/DummyOpenemsEdgeOem.java | 7 +- io.openems.edge.application/EdgeApp.bndrun | 4 +- .../bridge/modbus/api/element/WordOrder.java | 1 - .../onewire/jsonrpc/GetDeviceResponse.java | 2 - .../api/modbus/AbstractModbusTcpApi.java | 37 +- .../GetModbusProtocolExportXlsxResponse.java | 2 - .../jsonrpc/GetModbusProtocolResponse.java | 2 - .../controller/ess/timeofusetariff/Utils.java | 13 +- .../ess/timeofusetariff/v1/UtilsV1.java | 2 +- .../ess/timeofusetariff/UtilsTest.java | 8 +- .../ess/timeofusetariff/v1/UtilsV1Test.java | 12 + .../edge/controller/evcs/ControllerEvcs.java | 22 +- .../controller/evcs/ControllerEvcsImpl.java | 7 +- .../controller/evcs/translation_de.properties | 1 + .../controller/evcs/translation_en.properties | 1 + .../openems/edge/app/enums/SafetyCountry.java | 1 + .../evcs/readonly/MennekesEvcsReadOnly.java | 177 ++++++ .../edge/app/timeofusetariff/EntsoE.java | 45 +- .../core/appmanager/OpenemsAppCategory.java | 5 + .../formly/builder/InputBuilder.java | 2 +- .../core/appmanager/translation_de.properties | 9 + .../core/appmanager/translation_en.properties | 9 + .../jsonrpc/ChannelExportXlsxResponse.java | 2 - .../edge/core/host/NetworkConfiguration.java | 2 - .../jsonrpc/ExecuteSystemCommandResponse.java | 2 - .../jsonrpc/ExecuteSystemRestartResponse.java | 2 - .../jsonrpc/GetNetworkConfigResponse.java | 2 - .../jsonrpc/GetSystemUpdateStateResponse.java | 2 - .../io/openems/edge/core/appmanager/Apps.java | 18 +- .../core/appmanager/TestTranslations.java | 1 + .../edge/energy/v1/optimizer/UtilsV1.java | 1 - .../optimizer/SimulationResultTest.java | 2 +- .../edge/ess/power/api/Constraint.java | 1 - .../src/io/openems/edge/evcs/api/Evcs.java | 8 + .../io/openems/edge/evcs/api/ManagedEvcs.java | 1 - .../edge/evcs/hardybarth/EvcsHardyBarth.java | 1 - io.openems.edge.evcs.mennekes/.classpath | 12 + io.openems.edge.evcs.mennekes/.gitignore | 2 + io.openems.edge.evcs.mennekes/.project | 23 + .../org.eclipse.core.resources.prefs | 2 + io.openems.edge.evcs.mennekes/bnd.bnd | 17 + io.openems.edge.evcs.mennekes/readme.adoc | 15 + .../edge/evcs/mennekes/AvailableState.java | 45 ++ .../io/openems/edge/evcs/mennekes/Config.java | 42 ++ .../edge/evcs/mennekes/EvcsMennekes.java | 546 ++++++++++++++++++ .../edge/evcs/mennekes/EvcsMennekesImpl.java | 403 +++++++++++++ .../evcs/mennekes/MennekesErrorStates.java | 84 +++ .../edge/evcs/mennekes/MennekesOcppState.java | 41 ++ .../edge/evcs/mennekes/VehicleState.java | 36 ++ .../evcs/mennekes/translation_de.properties | 23 + .../evcs/mennekes/translation_en.properties | 23 + io.openems.edge.evcs.mennekes/test/.gitignore | 0 .../edge/evcs/mennekes/MennekesTest.java | 53 ++ .../openems/edge/evcs/mennekes/MyConfig.java | 100 ++++ .../goodwe/gridmeter/GoodWeGridMeterImpl.java | 49 +- .../gridmeter/GoodWeGridMeterImplTest.java | 4 +- .../predictor/api/prediction/Prediction.java | 6 +- .../predictor/api/oneday/PredictionTest.java | 36 -- .../api/prediction/PredictionTest.java | 64 ++ .../acting/SimulatorGridMeterActingImpl.java | 2 +- .../timeofusetariff/api/TimeOfUsePrices.java | 11 +- .../edge/timeofusetariff/entsoe/Config.java | 3 + .../timeofusetariff/entsoe/Resolution.java | 24 + .../timeofusetariff/entsoe/TouEntsoeImpl.java | 3 +- .../edge/timeofusetariff/entsoe/Utils.java | 47 +- .../edge/timeofusetariff/entsoe/MyConfig.java | 11 + .../timeofusetariff/entsoe/ParserTest.java | 77 ++- .../timeofusetariff/entsoe/TouEntsoeTest.java | 1 + io.openems.wrapper/fastexcel.bnd | 2 +- ui/package-lock.json | 24 +- ui/src/app/app.component.html | 17 +- .../view/component/changelog.constants.ts | 2 +- .../chart/totalchart.component.ts | 6 +- .../ChannelThreshold/flat/flat.html | 2 +- .../Ess/GridoptimizedCharge/chart/chart.ts | 7 +- .../chart/sellToGridLimitChart.component.ts | 9 +- .../Ess/GridoptimizedCharge/flat/flat.html | 2 +- .../Ess/TimeOfUseTariff/chart/chart.ts | 18 +- .../Ess/TimeOfUseTariff/flat/flat.html | 2 +- .../Io/DigitalOutput/chart/chart.ts | 6 +- .../Io/DigitalOutput/details/chart/chart.ts | 4 +- .../Io/DigitalOutput/flat/flat.html | 2 +- .../Io/heatingelement/flat/flat.html | 2 +- .../Controller/ModbusTcpApi/flat/flat.html | 13 +- .../app/edge/history/abstracthistorychart.ts | 16 +- .../history/common/autarchy/flat/flat.html | 2 +- .../history/common/consumption/chart/chart.ts | 13 +- .../details/chart/consumptionMeter.ts | 4 +- .../common/consumption/details/chart/evcs.ts | 4 +- .../common/energy/chart/channels.spec.ts | 84 ++- .../edge/history/common/energy/chart/chart.ts | 15 +- .../edge/history/common/energy/flat/flat.html | 5 +- .../edge/history/common/grid/chart/chart.ts | 5 +- .../common/grid/details/chart/chart.ts | 3 +- .../common/production/chart/totalChart.ts | 5 +- .../common/production/details/chart/sum.ts | 3 +- .../selfconsumption/chart/chart.component.ts | 3 +- .../common/selfconsumption/flat/flat.html | 5 +- ...ayedselltogridchartoverview.component.html | 8 +- .../delayedselltogrid/widget.component.html | 4 +- .../edge/history/heatpump/chart.component.ts | 6 +- .../heatpumpchartoverview.component.html | 8 +- .../history/heatpump/widget.component.html | 9 +- ...ricpeakshavingchartoverview.component.html | 8 +- .../asymmetric/widget.component.html | 5 +- ...ricpeakshavingchartoverview.component.html | 8 +- .../symmetric/widget.component.html | 4 +- ...lotpeakshavingchartoverview.component.html | 8 +- .../timeslot/widget.component.html | 4 +- ui/src/app/edge/history/shared.ts | 11 +- .../history/storage/socchart.component.ts | 12 +- .../storagechartoverview.component.html | 12 +- .../history/storage/totalchart.component.ts | 1 + .../history/storage/widget.component.html | 6 +- .../Channelthreshold/Channelthreshold.ts | 2 +- .../edge/live/Controller/ChpSoc/ChpSoc.html | 2 +- .../ChpSoc/modal/modal.component.html | 11 +- .../Ess/FixActivePower/flat/flat.html | 3 +- .../Ess/FixActivePower/modal/modal.html | 2 +- .../Ess/GridOptimizedCharge/modal/modal.html | 2 +- .../TimeOfUseTariff/Ess_TimeOfUseTariff.ts | 7 +- .../Ess/TimeOfUseTariff/flat/flat.html | 3 +- .../Ess/TimeOfUseTariff/modal/modal.html | 2 +- .../TimeOfUseTariff/modal/powerSocChart.ts | 26 +- .../TimeOfUseTariff/modal/statePriceChart.ts | 3 +- .../edge/live/Controller/Evcs/flat/flat.html | 4 +- .../edge/live/Controller/Evcs/flat/flat.ts | 2 + .../live/Controller/Evcs/modal/modal.html | 91 ++- .../edge/live/Controller/Evcs/modal/modal.ts | 3 + .../Io_ChannelSingleThreshold.html | 3 +- .../modal/modal.component.html | 12 +- .../FixDigitalOutput/Io_FixDigitalOutput.html | 4 +- .../modal/modal.component.html | 13 +- .../Io/HeatingElement/flat/flat.html | 3 +- .../Io/HeatingElement/modal/modal.html | 2 +- .../Controller/Io/Heatpump/Io_Heatpump.html | 3 +- .../Io/Heatpump/modal/modal.component.html | 9 +- .../Controller/ModbusTcpApi/flat/flat.html | 6 +- .../PeakShaving/Asymmetric/Asymmetric.html | 3 +- .../Asymmetric/modal/modal.component.html | 3 +- .../PeakShaving/Symmetric/Symmetric.html | 3 +- .../Symmetric/modal/modal.component.html | 3 +- .../Symmetric_TimeSlot.html | 4 +- .../modal/modal.component.html | 3 +- .../modal/modal.component.html | 3 +- .../Evcs_Api_Cluster/Evcs_Api_Cluster.html | 3 +- .../modal/evcsCluster-modal.page.html | 3 +- .../edge/live/common/autarchy/flat/flat.html | 2 +- .../live/common/consumption/flat/flat.html | 2 +- .../app/edge/live/common/grid/modal/modal.ts | 3 +- .../common/selfconsumption/flat/flat.html | 4 +- .../common/storage/modal/modal.component.html | 8 +- .../delayedselltogrid.component.html | 3 +- .../modal/modal.component.html | 3 +- .../chart/section/consumption.component.html | 12 +- .../chart/section/grid.component.html | 12 +- .../chart/section/grid.component.ts | 2 +- .../chart/section/production.component.html | 11 +- .../chart/section/production.component.ts | 2 +- .../chart/section/storage.component.html | 13 +- .../energymonitor.component.html | 4 +- ui/src/app/edge/live/live.component.html | 5 +- ui/src/app/edge/live/live.component.ts | 2 +- ui/src/app/edge/live/livedataservice.ts | 9 +- .../settings/channels/channels.component.html | 9 +- .../component/install/index.component.html | 5 +- .../component/install/install.component.html | 6 +- .../component/update/index.component.html | 5 +- .../component/update/update.component.html | 8 +- .../shared/components/constant-line.scss | 18 + .../profile/aliasupdate.component.html | 2 +- .../settings/profile/profile.component.html | 7 +- .../app/edge/settings/settings.component.html | 32 +- .../system/oe-system-update.component.html | 6 +- .../systemlog/systemlog.component.html | 4 +- ui/src/app/index/login.component.ts | 16 +- .../index/overview/overview.component.html | 10 +- ui/src/app/index/shared/loading-screen.html | 41 +- .../components/chart/abstracthistorychart.ts | 20 +- .../components/chart/chart.constants.spec.ts | 2 +- .../components/chart/chart.constants.ts | 57 +- ui/src/app/shared/components/chart/chart.html | 14 +- .../edge/offline/offline.component.ts | 56 +- .../components/edge/offline/offline.module.ts | 2 + .../components/edge/offline/offline.spec.ts | 23 + .../flat-widget-line/flat-widget-line.html | 2 +- .../flat-widget-percentagebar.html | 16 +- .../flat/flat-widget.component.html | 4 +- ui/src/app/shared/components/flat/flat.html | 7 +- .../app/shared/components/footer/footer.html | 8 +- .../subnavigation/footerNavigation.html | 14 +- .../components/header/header.component.html | 37 +- .../modal/modal-button/modal-button.html | 9 +- .../modal/modal-button/modal-button.ts | 1 + ui/src/app/shared/components/modal/modal.html | 8 +- .../modal-horizontal-line.html | 4 +- .../pickdate/pickdate.component.html | 8 +- .../pickdate/popover/popover.component.ts | 41 +- .../pickdate/popover/popover.spec.ts | 1 + .../app/shared/components/shared/converter.ts | 15 + .../shared/components/shared/dataservice.ts | 2 +- .../components/shared/testing/common.ts | 69 ++- .../components/shared/testing/tester.ts | 24 +- .../status/single/status.component.html | 7 +- ui/src/app/shared/service/defaulttypes.ts | 15 +- ui/src/app/shared/service/utils.ts | 8 +- ui/src/app/shared/service/websocket.ts | 6 +- ui/src/app/shared/shared.ts | 4 + ui/src/app/shared/utils/time/timeutils.ts | 16 + ui/src/app/user/user.component.html | 47 +- ui/src/app/user/user.component.ts | 41 ++ ui/src/assets/i18n/cz.json | 2 +- ui/src/assets/i18n/de.json | 21 +- ui/src/assets/i18n/en.json | 17 +- ui/src/assets/img/fenecon-logo-dark.png | Bin 0 -> 21590 bytes ui/src/assets/img/fenecon-logo-light.png | Bin 0 -> 17727 bytes ui/src/environments/index.scss | 259 +++++++++ ui/src/global-ion-custom.scss | 19 + ui/src/global.scss | 143 ++++- ui/src/index.html | 2 +- ui/src/themes/openems/scss/variables.scss | 105 +--- 224 files changed, 3542 insertions(+), 751 deletions(-) create mode 100644 io.openems.edge.controller.evcs/src/io/openems/edge/controller/evcs/translation_de.properties create mode 100644 io.openems.edge.controller.evcs/src/io/openems/edge/controller/evcs/translation_en.properties create mode 100644 io.openems.edge.core/src/io/openems/edge/app/evcs/readonly/MennekesEvcsReadOnly.java create mode 100644 io.openems.edge.evcs.mennekes/.classpath create mode 100644 io.openems.edge.evcs.mennekes/.gitignore create mode 100644 io.openems.edge.evcs.mennekes/.project create mode 100644 io.openems.edge.evcs.mennekes/.settings/org.eclipse.core.resources.prefs create mode 100644 io.openems.edge.evcs.mennekes/bnd.bnd create mode 100644 io.openems.edge.evcs.mennekes/readme.adoc create mode 100644 io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/AvailableState.java create mode 100644 io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/Config.java create mode 100644 io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/EvcsMennekes.java create mode 100644 io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/EvcsMennekesImpl.java create mode 100644 io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/MennekesErrorStates.java create mode 100644 io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/MennekesOcppState.java create mode 100644 io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/VehicleState.java create mode 100644 io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/translation_de.properties create mode 100644 io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/translation_en.properties create mode 100644 io.openems.edge.evcs.mennekes/test/.gitignore create mode 100644 io.openems.edge.evcs.mennekes/test/io/openems/edge/evcs/mennekes/MennekesTest.java create mode 100644 io.openems.edge.evcs.mennekes/test/io/openems/edge/evcs/mennekes/MyConfig.java delete mode 100644 io.openems.edge.predictor.api/test/io/openems/edge/predictor/api/oneday/PredictionTest.java create mode 100644 io.openems.edge.predictor.api/test/io/openems/edge/predictor/api/prediction/PredictionTest.java create mode 100644 io.openems.edge.timeofusetariff.entsoe/src/io/openems/edge/timeofusetariff/entsoe/Resolution.java create mode 100644 ui/src/app/edge/settings/energy-journey/shared/components/constant-line.scss create mode 100644 ui/src/app/shared/components/edge/offline/offline.spec.ts create mode 100644 ui/src/assets/img/fenecon-logo-dark.png create mode 100644 ui/src/assets/img/fenecon-logo-light.png create mode 100644 ui/src/environments/index.scss diff --git a/io.openems.backend.alerting/src/io/openems/backend/alerting/scheduler/MessageScheduler.java b/io.openems.backend.alerting/src/io/openems/backend/alerting/scheduler/MessageScheduler.java index 7585adf772c..51a760bcc7c 100644 --- a/io.openems.backend.alerting/src/io/openems/backend/alerting/scheduler/MessageScheduler.java +++ b/io.openems.backend.alerting/src/io/openems/backend/alerting/scheduler/MessageScheduler.java @@ -12,6 +12,7 @@ /** * Schedules one or more {@link Message} for type {@link T} to a specific time. + * *

* After the specified time is reached, the scheduler sends the Messages to * their {@link Handler} and removes them from itself. diff --git a/io.openems.backend.alerting/test/io/openems/backend/alerting/Dummy.java b/io.openems.backend.alerting/test/io/openems/backend/alerting/Dummy.java index 84d406508e8..66feef1c4ab 100644 --- a/io.openems.backend.alerting/test/io/openems/backend/alerting/Dummy.java +++ b/io.openems.backend.alerting/test/io/openems/backend/alerting/Dummy.java @@ -224,14 +224,14 @@ public void leap(long amount) { * Try to advance the Clock to a specific amount of minutes after * initialization. If the given point is ahead, the time will leap by the * missing amount. If the given point is behind, nothing will happen. + * *

* A return value >=0 means, the clock has advanced the given amount in minutes * with this call. - *

+ * *

* A return value <0 means, the clock has already advanced the given amount * above. - *

* * @param point to advance to * @return difference diff --git a/io.openems.common/src/io/openems/common/jsonrpc/response/QueryHistoricTimeseriesExportXlsxResponse.java b/io.openems.common/src/io/openems/common/jsonrpc/response/QueryHistoricTimeseriesExportXlsxResponse.java index acf64aba840..5e9fba1f529 100644 --- a/io.openems.common/src/io/openems/common/jsonrpc/response/QueryHistoricTimeseriesExportXlsxResponse.java +++ b/io.openems.common/src/io/openems/common/jsonrpc/response/QueryHistoricTimeseriesExportXlsxResponse.java @@ -36,8 +36,6 @@ /** * Represents a JSON-RPC Response for 'queryHistoricTimeseriesExportXlxs'. * - *

- * *

  * {
  *   "jsonrpc": "2.0",
diff --git a/io.openems.common/src/io/openems/common/oem/DummyOpenemsEdgeOem.java b/io.openems.common/src/io/openems/common/oem/DummyOpenemsEdgeOem.java
index 790f1fbf9c9..f5327adf50d 100644
--- a/io.openems.common/src/io/openems/common/oem/DummyOpenemsEdgeOem.java
+++ b/io.openems.common/src/io/openems/common/oem/DummyOpenemsEdgeOem.java
@@ -81,13 +81,14 @@ public SystemUpdateParams getSystemUpdateParams() {
 			.put("App.Api.RestJson.ReadOnly", "") //
 			.put("App.Api.RestJson.ReadWrite", "") //
 			.put("App.Timedata.InfluxDb", "")//
+			.put("App.Evcs.Alpitronic", "") //
+			.put("App.Evcs.Cluster", "") //
 			.put("App.Evcs.HardyBarth", "") //
-			.put("App.Evcs.Keba", "") //
 			.put("App.Evcs.IesKeywatt", "") //
-			.put("App.Evcs.Alpitronic", "") //
+			.put("App.Evcs.Keba", "") //
+			.put("App.Evcs.Mennekes.ReadOnly", "") //
 			.put("App.Evcs.Webasto.Next", "") //
 			.put("App.Evcs.Webasto.Unite", "") //
-			.put("App.Evcs.Cluster", "") //
 			.put("App.Hardware.KMtronic8Channel", "") //
 			.put("App.Heat.HeatPump", "") //
 			.put("App.Heat.CHP", "") //
diff --git a/io.openems.edge.application/EdgeApp.bndrun b/io.openems.edge.application/EdgeApp.bndrun
index c47df44769a..8c9a2f48182 100644
--- a/io.openems.edge.application/EdgeApp.bndrun
+++ b/io.openems.edge.application/EdgeApp.bndrun
@@ -123,6 +123,7 @@
 	bnd.identity;id='io.openems.edge.evcs.goe.chargerhome',\
 	bnd.identity;id='io.openems.edge.evcs.hardybarth',\
 	bnd.identity;id='io.openems.edge.evcs.keba.kecontact',\
+	bnd.identity;id='io.openems.edge.evcs.mennekes',\
 	bnd.identity;id='io.openems.edge.evcs.ocpp.abl',\
 	bnd.identity;id='io.openems.edge.evcs.ocpp.common',\
 	bnd.identity;id='io.openems.edge.evcs.ocpp.ies.keywatt.singleccs',\
@@ -193,7 +194,7 @@
 	bnd.identity;id='io.openems.edge.timeofusetariff.rabotcharge',\
 	bnd.identity;id='io.openems.edge.timeofusetariff.swisspower',\
 	bnd.identity;id='io.openems.edge.timeofusetariff.tibber',\
-
+	
 -runbundles: \
 	Java-WebSocket;version='[1.5.4,1.5.5)',\
 	bcpkix;version='[1.79.0,1.79.1)',\
@@ -300,6 +301,7 @@
 	io.openems.edge.evcs.goe.chargerhome;version=snapshot,\
 	io.openems.edge.evcs.hardybarth;version=snapshot,\
 	io.openems.edge.evcs.keba.kecontact;version=snapshot,\
+	io.openems.edge.evcs.mennekes;version=snapshot,\
 	io.openems.edge.evcs.ocpp.abl;version=snapshot,\
 	io.openems.edge.evcs.ocpp.common;version=snapshot,\
 	io.openems.edge.evcs.ocpp.ies.keywatt.singleccs;version=snapshot,\
diff --git a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/element/WordOrder.java b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/element/WordOrder.java
index 0a3d508f1bd..a666988038a 100644
--- a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/element/WordOrder.java
+++ b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/element/WordOrder.java
@@ -3,7 +3,6 @@
 /**
  * Defines the word order.
  *
- * 

*