2025.8.0
·
299 commits
to develop
since this release
Release Highlights
- Implementation of Shelly 1 and PlusPMMini by @sthhs
- ENTSO-E: add ancillary costs ("Zeitvariable Netzentgelte") for German law §14a EnWG Modul 3 by @venu-sagar
- Improved Docker setup by @da-Kai
- E-Mobility: improved support for KEBA P40, new Go-e Gemini Wallbox read-only implementation and continuous work on new EVSE architecture
- Geocoding-Integration via OpenCage API by @leonhardanderle
Details
Common/General
- [Common] Fix implementation for resetWebSocketClient method to allow websocket version bump by @Yuval-Roth in #3212
- [Common] Improve Docker
- [Common] Update to Gradle 9.0.0 by @sfeilmeier in #3264
OpenEMS Backend
- [Backend] Do not bind felix http host to localhost in docker backend by @simon-lgb in #3250
- [Backend] FEMS Backports 2025-07-12 in #3236
- 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
- UiWebsocket: Implement a basic rate limiter for DoS protection
- [Backend] FEMS Backports 2025-07-21 in #3245
- Alerting cleanup
- Improve alerting, according to SonarQube test.
- Alerting cleanup
- [Backend] FEMS Backports 2025-07-29 in #3257
- [Backend] Aggregated-InfluxDB: Add HybridEss Channels to AllowedChannels
- Add Channels
DcDischargePower,DcDischargeEnergyandDcChargeEnergyto AllowedChannels - Increase number of ess`s due to industrial xl
- Add Channels
- [Backend] Odoo: move execution of tasks to separate executor
- Added separate executer to odoo metadata to decrease concurrent access and improve logging of running tasks
- [Backend] Aggregated-InfluxDB: Add HybridEss Channels to AllowedChannels
OpenEMS Edge
- [Edge] EVCS Mennekes: replace handling of phase-rotated wiring by @Sn0w3y in #3208
- [Edge] Time-of-Use Tariff ENTSO-E: update link to API documentation by @sjjh in #3219
- [Edge] Carlo Gavazzi EM100 meter: fix modbus registers for Energy by @sthhs in #3215
- [Edge] Implementation of Shelly 1 by @sthhs in #3217
- [Edge] Open-Meteo: Fixed empty apikey parameter in url by @leonhardanderle in #3235
- [Edge] Update GermanDSO.java: added DSO Netze ODR by @sjjh in #3224
- [Edge] Edge2Edge ESS: Energy Calculation by @tsicking in #3234
- [Edge] Implementation Shelly PlusPMMini by @sthhs in #3216
- [Edge] SMA Sunny Island - add configurable capacity by @clehne in #3243
- [Edge] Move dezony IQ Charging Station to archive by @sfeilmeier in #3259
- [Edge] Move BYD Container to archive by @sfeilmeier in #3263
- [Edge] Open-Meteo Weather-API provider by @Bhanu-CM in #2973
- [Edge] FEMS Backports 2025-07-12 in #3236
- 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
readOnlyproperty - Use same
EvseChargePointKebaUdpCore,ChargeState,ReadWorker,CableStatefor both implementations - Fix wrong Channel-Id that caused regular Exceptions
- Implement Common FirmwareVersion and ActivePowerL1/L2/L3 calculation
- Implement
- 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.
- Fix Modified is not called on UpdateComponentConfig
- [Edge] FEMS Backports 2025-07-21 in #3245
- AppCenter: update heating element dependency appid
- GoodWe Battery-Inverter: change Q(U) settings
- Sending no Detailed Value for Q(U), as the values are already set by goodwe correctly after setting the country Code
- HeatingElement: check if meter id is set
- AppCenter: fix UpdateAppConfig
- Heating Element: fix on not showing how measured
- Geocoding-Integration via OpenCage API
- Geo information storage was integrated into the Meta app
- OpenCage Geocoding API was connected to resolve location data
- Geocoding is performed via a JSON-RPC request with a location string as input
- The API responds with two geocoding result options
- A second JSON-RPC request selects one of the results
- The selected geo data is stored in the Meta app
- Websocket: reconnect fix reset
- Fix NoSuchMethodException when trying to reset websocket connection
- Problem was introduced in #3212
- [Edge] FEMS Backports 2025-07-29 in #3257
- [Edge] Implement
Updateablesfor Remote-Update of Firmware via OpenEMS- Created a
Updateableto execute update for ADMINS in System View - Make Modbus-Bridge StartStoppable (add Info-Channel "Modbus Communication is stopped")
- During update the Modbus Bridge of the GoodWe BatteryInverter is stopped (via StartStoppable Modbus-Bridge)
- After finishing: Modbus Bbridge gets restarted
- Added Core progress helper classes
- Added update for stable version and for beta version
- Created a
- [Edge] Improvements to EVCS and EVSE
- Update App Center to support KEBA EVSE and ElectricVehicle
- Default implementation for getMeterType(); used for KEBA and HardyBarth
- Combine "Natures" and KEBA ReadHandler
- Change debugMode to logVerbosity
- Add configurable modbusUnitId for KEBA P40
- Add KEBA major, minor, patch firmware version channels (Spec calls them non-standard "major, medium, minor")
- Default implementation for debugLog(); used for all KEBA
- [Edge] KEBA EVSE-App: fix Modbus-ID property
- [Edge] Heating Element: code quality improvements
- reduce the log outputs of the tests
- code improvements in the controller
- outsource variables and methods
- null check for level in the UI
- [Edge] JUnit Test: add StrictMode + apply for KEBA
- Strict-Mode requires, that all Channels of the tested Component are defined either as Input or as Output.
- Add missing checks and Modbus mappings
- [Edge] App Center Modbus-Write-APIs: add essX by default
- [Edge] Go-e Gemini Wallbox read-only
- [Edge] KEBA: add Firmware version handling
- Show DEVICE_SOFTWARE_OUTDATED for versions strictly smaller than 1.1.9
- Fix known bug with energy scale factors in versions below 1.2.1: the registers 1502 and 1036 falsely report the value in "Wh" instead of "0.1 Wh"
- [Edge] EVSE: always set minimum set-point
- For EVs that are Not-Ready-For-Charging or Appear-To-Be-Fully-Charged always set minimum set-point, as long as they are not configured for Mode ZERO.
- [Edge] EVSE: no hysteresis on plugging
- Always allow charging if EV just became ready for charging
- [Edge] Implement
- [Edge] FEMS Backports 2025-08-01 in #3265
- [Edge] KEBA Improvements
- KEBA EVSE: always set SetChargingCurrent channel - even for 0 mA
- Combine firmware specific code + fix null handling
- Refactor
SemanticVersionclass to record
- [Edge] Add ApparentPower to SymmetricBatteryInverter
- Add
ApparentPowertoSymmetricBatteryInverter - Add helper method to calculate it from
ActivePowerandReactivePower
- Add
- [Edge/UI] Meta-App: manage Maximum Grid Feed In Limit settings
- First step of RippleControlReceiver release cycle
- Moves MAXIMUM_GRID_FEED_IN_LIMIT (GridOptimizeCharge) and FEED_POWER_PARA_SET (GoodWeBatteryInverter) to Meta Component
- Both controllers use the same value as reference
- for existing systems:
- Old config variables will be deprecated
- The old values are migrated to _meta component. After the migration, the value of the old parameters are -1.
- Adjusted Home System tests.
- for new systems:
- split limtationType field into two: setting for Ripple Control Receiver -> Home App; dynamic limitation -> Meta App
- [Edge] App.PeakShaving.TimeSlotPeakShaving for Industrial Systems
- implemented TimeSlotPeakShaving App
- added translations
- added properties in PeakShavingProps
- fixed typo Lenght to Length
- added hysteresis soc to UI and moved weekdays on top
- added class to check if an industrial system is installed (+tests)
- [Edge] AppCenter: translations for feed in setting
- [Edge] KEBA: change firmware handling
- According to KEBA version 1.2.2 is their first version that is stable for Modbus
- [Edge] Predictor: add reusable data structures, metrics, models and pipelines
- Core data structures for handling ML data
- Implementation of standard metrics
- Provision of various ML models
- Integration of transformer and pipeline components for modular processing
- Goal: unified and reusable building blocks for future ML projects
- [Edge] KEBA Improvements
OpenEMS UI
- [UI] FEMS Backports 2025-07-12 in #3236
- 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
SOCto chart - change
measured valueto be reference value of registered meter
- Add missing storage flat component
- Add missing storage flat component in
/history, removed by accident before
- Add missing storage flat component in
- E-Mobility: Fix Read-Write
- [UI] FEMS Backports 2025-07-21 in #3245
- getNetworkInfoReq: add fallback
- ENTSO-E: add custom formly Tariff template for German DSO
- New navigation update
- Add Option to enable new navigation, every user with
Controller.Single.EVSEwill be forced to use new ui - outsourcing link and image keys to seperate files for better readability ->
oem-meta - add fallback image for non fetchable images
- decreasing font-size on
oe-modal-buttonstext - lazy load evse img from docs with fallback for
openems Edge - code clean up
- fix navigationNodes triggering rebuild indefinitely
- add eslint rule to accept vars ignored, if unused vars are starting with
_ - add history to navigation nodes and create opt in for new ui
userSettings.useNewUIand force new navigation if component.factoryIds is in[Evse.Controller.Single]
- Add Option to enable new navigation, every user with
- Chartjs: avoid timing issue error
- fixing nullpointer in chartjs
- [UI] FEMS Backports 2025-07-29 in #3257
- [UI] EVCS Update link to Docs
- [UI] Adjust registration form
- Styling improvements and restructuring of
/registration-modal
- Styling improvements and restructuring of
- [UI] Helper methods
- [UI] Controller.Io.ChannelSingleThreshold: improve flat widget
- use property channel instead of component property in singlethreshold flat widget
- change persistence priority of io simulators read and write channels to
PersistencePriority.VERY_HIGH - refactored code to be working again, didnt touch all the code to keep this PR small
- [UI] New Navigation improvements
- Reduce gap in history between datepicker and rest
- Add System status to every page under
/deviceagain - Fix side-menu not working after navigation to edge/profile
- Add shadow to action sheet modal
- add
ngDomChangedirective for callbacks on DOM changes-> dynamic view height calculation
- [UI] FEMS Backports 2025-08-01 in #3265
- [UI] Fix new navigation chip shown in side-bar
- Fix shown chip in sidemenu for not activated useNewUI
- [UI] New-UI: hide Card for Live Energy-Monitor
- Hide Card for Live Energy-Monitor with mobile bottom-navigation
- [UI] EVSE Improvements
- fix translations
- show power in evse home page
- ignore timeofuse ctrl for status chart
- hide status chart if no time of use ctrl configured
- add translation to status chart datasets
- [UI] Fix new navigation chip shown in side-bar
Version Upgrades
- Bump com.squareup.okio:okio-jvm from 3.13.0 to 3.14.0 in /cnf by @dependabot[bot] in #3220
- Bump io.reactivex.rxjava3:rxjava from 3.1.10 to 3.1.11 in /cnf by @dependabot[bot] in #3227
- Bump com.squareup.okhttp3:logging-interceptor from 4.12.0 to 5.1.0 in /cnf by @dependabot[bot] in #3233
- Bump globals from 16.1.0 to 16.3.0 in /ui by @dependabot[bot] in #3232
- Bump org.apache.felix:org.apache.felix.http.jetty12 from 1.0.34 to 1.0.36 in /cnf by @dependabot[bot] in #3252
- Bump com.zaxxer:HikariCP from 6.3.0 to 7.0.0 in /cnf by @dependabot[bot] in #3253
New Contributors
- @leonhardanderle made their first contribution in #3235
- @Yuval-Roth made their first contribution in #3212
- @Bhanu-CM made their first contribution in #2973
Full Changelog: 2025.7.0...2025.8.0