Skip to content

FEMS Backports 2025-07-12#3236

Merged
sfeilmeier merged 22 commits intodevelopfrom
feature/fems-backports
Jul 12, 2025
Merged

FEMS Backports 2025-07-12#3236
sfeilmeier merged 22 commits intodevelopfrom
feature/fems-backports

Conversation

@sfeilmeier
Copy link
Copy Markdown
Contributor

@sfeilmeier sfeilmeier commented Jul 12, 2025

  • UI

    • E-Mobility: Fix Read-Write
      • checking for true and then inverting value (value is false if no part of config and default value has to be true)
    • E-Mobility: Fix Non Deprecated EVCS in History
      • fix filters for evcs in history flat
    • Refactor Timeslot-, Asymmetric- and Symmetric peakshaving history
      • Refactoring peakshaving history,
      • adding SOC to chart
      • change measured value to be reference value of registered meter
    • Add missing storage flat component
      • Add missing storage flat component in /history, removed by accident before
  • Edge

    • Fix Modified is not called on UpdateComponentConfig
      • Reset '.target' Property only if really required, because unnecessary reset of '.target' properties triggers the Component to be destroyed (i.e. @deactivate + @activate) instead of reused (via @Modified)
    • SunSpec: skip duplicated sunspec blocks
      • Common block kept reappearing after the first common block, which caused that these models are created again with their channels and duplicated channels caused a exception so that sunspec never completes
      • added exception log
      • skip duplicated models
    • Move KEBA+HardyBarth EVCS to EVSE bundles
      • This will allow us to share common files in future.
      • This also adjusts KEBA EVSE Config description for P30 / P40
        • P30 will only be supported via UDP (even though latest P30 also support Modbus/TCP, the protocol is slightly different to the one of P40)
        • P40 will only be supported via Modbus/TCP
    • KEBA improvements
      • Implement readOnly property
      • Use same EvseChargePointKebaUdpCore, ChargeState, ReadWorker, CableState for both implementations
      • Fix wrong Channel-Id that caused regular Exceptions
      • Implement Common FirmwareVersion and ActivePowerL1/L2/L3 calculation
    • E-Mobility: ReadOnly in KebaApp
      • Added readonly for keba udp in app. Normalized readonly for modbus.
    • Add support for FENECON 50kW battery inverter
    • PQ Plus UMD 96: calculate energy values
    • ChannelExportXlsxResponse: fix IllegalArgumentException
      • Before:
      java.lang.IllegalArgumentException: Channel [SetEnable] is WRITE_ONLY.
              at io.openems.edge.common.channel.internal.AbstractReadChannel.value(AbstractReadChannel.java:202) ~[?:?]
              at io.openems.edge.core.componentmanager.jsonrpc.ChannelExportXlsxResponse.generatePayload(ChannelExportXlsxResponse.java:83) ~[?:?]
      
      • Move logic to static method
      • Add JUnit tests
      • Show full value for Enums
      • Add Type + Nature columns
    • EVCS: fix twice-plugging for KEBA in Cluster
      • The logic in EVCS Cluster only applied charge power after EV was in READY_FOR_CHARGING mode. It seems KEBA stations often do not switch to this state internally or the information is not sent properly via UDP. This often required plugging-unplugging-replugging the cable before a charging session would actually start.
      • We changed the logic to start applying charge power already in NOT_READY_FOR_CHARGING mode.
      • There is a little risk, that a fully loaded multi-EV charge park (with empty ESS) would still start charging and would be too slow reducing the overall power. But as this can always happen anyway (e.g. when a larger load is switched on), it is anyway handled in other parts of the code already.
    • AppCenter: Eastron Meter public available
      • remove beta tags for meter eastron app
      • rename app to be more generic "App.Meter.Eastron"
      • add app to tests
    • ENTSO-E: add ancillary costs for German law §14a EnWG Modul 3
    • Power2Heat: public release Askoma and myPV
      • Removed admin only permission
    • KEBA EVCS increase Plug Channel Priority
      • Make "Plug" channel persistence Priority HIGH to get real-time data in UI
      • Make sure "Plug" is properly set in both EVCS UDP and Modbus variants
    • Heating Element: add support for integrated consumption meter
      • Changes to the HeatingElement in the edge and in the UI.
  • Backend

    • UiWebsocket: Implement a basic rate limiter for DoS protection
      • Exclude EdgeRpcRequest requests from rate limiting
      • Apply a separate, stricter limit for LogMessageNotification requests
    • Prometheus: log OpenEMS version in metrics
      • Track backend updates
      • Helps to find out if certain metrics correlate with a Backend update

Co-authored-by: Johann Kaufmann [email protected]
Co-authored-by: Michael Grill [email protected]
Co-authored-by: Sebastian Asen [email protected]
Co-authored-by: Kai Jeschek [email protected]
Co-authored-by: Fabian Brandtner [email protected]
Co-authored-by: Lukas Rieger [email protected]
Co-authored-by: Stefan Feilmeier [email protected]
Co-authored-by: Sagar Venu [email protected]
Co-authored-by: DerMuaaa [email protected]
Co-authored-by: Leon Blenk [email protected]

sfeilmeier and others added 22 commits July 12, 2025 22:21
- checking for true and then inverting value (value is false if no part of config and default value has to be true)

Reviewed-by: Lukas Rieger <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-authored-by: Johann Kaufmann <[email protected]>
Co-committed-by: Johann Kaufmann <[email protected]>
Reset '.target' Property only if really required, because unnecessary reset of '.target' properties triggers the Component to be destroyed (i.e. @deactivate + @activate) instead of reused (via @Modified)

Reviewed-by: Michael Grill <[email protected]>
- Common block kept reappearing after the first common block,
which caused that these models are created again with their channels
and duplicated channels caused a exception so that sunspec never completes
- added exception log
- skip duplicated models

Reviewed-by: Sebastian Asen <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-authored-by: Michael Grill <[email protected]>
Co-committed-by: Michael Grill <[email protected]>
This will allow us to share common files in future.

This also adjusts KEBA EVSE Config description for P30 / P40
- P30 will only be supported via UDP (even though latest P30 also support Modbus/TCP, the protocol is slightly different to the one of P40)
- P40 will only be supported via Modbus/TCP
- Implement `readOnly` property
- Use same `EvseChargePointKebaUdpCore`, `ChargeState`, `ReadWorker`, `CableState` for both implementations

Reviewed-by: Johann Kaufmann <[email protected]>
- Fix wrong Channel-Id that caused regular Exceptions
- Implement Common FirmwareVersion and ActivePowerL1/L2/L3 calculation
Added readonly for keba udp in app. Normalized readonly for modbus.

Reviewed-by: Michael Grill <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-authored-by: Johann Kaufmann <[email protected]>
Co-committed-by: Johann Kaufmann <[email protected]>
Reviewed-by: Michael Grill <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-authored-by: Sebastian Asen <[email protected]>
Co-committed-by: Sebastian Asen <[email protected]>
- fix filters for evcs in history flat

Reviewed-by: Lukas Rieger <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-authored-by: johann <[email protected]>
Co-committed-by: johann <[email protected]>
 - Exclude EdgeRpcRequest requests from rate limiting
 - Apply a separate, stricter limit for LogMessageNotification requests

Co-authored-by: michael.grill <[email protected]>
Reviewed-by: Michael Grill <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-authored-by: Kai Jeschek <[email protected]>
Co-committed-by: Kai Jeschek <[email protected]>
Reviewed-by: Michael Grill <[email protected]>
Reviewed-by: Jan Thäter <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-authored-by: Fabian Brandtner <[email protected]>
Co-committed-by: Fabian Brandtner <[email protected]>
Before:
```
java.lang.IllegalArgumentException: Channel [SetEnable] is WRITE_ONLY.
        at io.openems.edge.common.channel.internal.AbstractReadChannel.value(AbstractReadChannel.java:202) ~[?:?]
        at io.openems.edge.core.componentmanager.jsonrpc.ChannelExportXlsxResponse.generatePayload(ChannelExportXlsxResponse.java:83) ~[?:?]
```

- Move logic to static method
- Add JUnit tests
- Show full value for Enums
- Add Type + Nature columns

Reviewed-by: Johann Kaufmann <[email protected]>
The logic in EVCS Cluster only applied charge power after EV was in READY_FOR_CHARGING mode. It seems KEBA stations often do not switch to this state internally or the information is not sent properly via UDP. This often required plugging-unplugging-replugging the cable before a charging session would actually start.

We changed the logic to start applying charge power already in NOT_READY_FOR_CHARGING mode.

There is a little risk, that a fully loaded multi-EV charge park (with empty ESS) would still start charging and would be too slow reducing the overall power. But as this can always happen anyway (e.g. when a larger load is switched on), it is anyway handled in other parts of the code already.

Reviewed-by: Sebastian Asen <[email protected]>
- remove beta tags for meter eastron app
- rename app to be more generic "App.Meter.Eastron"
- add app to tests

Co-authored-by: Michael Grill <[email protected]>
Reviewed-by: victor nagy <[email protected]>
Reviewed-by: Johann Kaufmann <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-authored-by: michael.grill <[email protected]>
Co-committed-by: michael.grill <[email protected]>
- Refactoring peakshaving history,
- adding `SOC` to chart
- change `measured value` to be reference value of registered meter

Reviewed-by: Sagar Venu <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-authored-by: Lukas Rieger <[email protected]>
Co-committed-by: Lukas Rieger <[email protected]>
Co-authored-by: Stefan Feilmeier <[email protected]>
Reviewed-by: Michael Grill <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-authored-by: Johann Kaufmann <[email protected]>
Co-committed-by: Johann Kaufmann <[email protected]>
Co-authored-by: Stefan Feilmeier <[email protected]>
Reviewed-by: Michael Grill <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-authored-by: Sagar Venu <[email protected]>
Co-committed-by: Sagar Venu <[email protected]>
- Track backend updates
- Helps to find out if certain metrics correlate with a Backend update

Reviewed-by: Michael Grill <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-authored-by: Kai Jeschek <[email protected]>
Co-committed-by: Kai Jeschek <[email protected]>
Add missing storage flat component in `/history`, removed by accident before

Reviewed-by: Sagar Venu <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-authored-by: Lukas Rieger <[email protected]>
Co-committed-by: Lukas Rieger <[email protected]>
Removed admin only permission

Co-authored-by: DerMuaaa <[email protected]>
Reviewed-by: Michael Grill <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-authored-by: Andreas Mur <[email protected]>
Co-committed-by: Andreas Mur <[email protected]>
- Make "Plug" channel persistence Priority HIGH to get real-time data in UI
- Make sure "Plug" is properly set in both EVCS UDP and Modbus variants

Co-authored-by: Stefan Feilmeier <[email protected]>
Co-authored-by: Johann Kaufmann <[email protected]>
Co-committed-by: Johann Kaufmann <[email protected]>
Changes to the HeatingElement in the edge and in the UI.

Co-authored-by: Leon Blenk <[email protected]>
Co-authored-by: Sebastian Asen <[email protected]>
Co-authored-by: Stefan Feilmeier <[email protected]>
Reviewed-by: Lukas Rieger <[email protected]>
Reviewed-by: Sebastian Asen <[email protected]>
Reviewed-by: Stefan Feilmeier <[email protected]>
Co-committed-by: Leon Blenk <[email protected]>
@codecov
Copy link
Copy Markdown

codecov bot commented Jul 12, 2025

Codecov Report

Attention: Patch coverage is 73.27348% with 387 lines in your changes missing coverage. Please review.

❌ Your patch check has failed because the patch coverage (73.28%) is below the target coverage (75.00%). You can increase the patch coverage or adjust the target coverage.

Additional details and impacted files
@@              Coverage Diff              @@
##             develop    #3236      +/-   ##
=============================================
+ Coverage      59.15%   59.40%   +0.25%     
  Complexity       139      139              
=============================================
  Files           2684     2681       -3     
  Lines         115920   116561     +641     
  Branches        8539     8636      +97     
=============================================
+ Hits           68564    69233     +669     
+ Misses         44793    44708      -85     
- Partials        2563     2620      +57     
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@sfeilmeier sfeilmeier merged commit 3eae39f into develop Jul 12, 2025
6 of 7 checks passed
@sfeilmeier sfeilmeier deleted the feature/fems-backports branch July 12, 2025 21:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant