Skip to content

2025.8.0

Choose a tag to compare

@github-actions github-actions released this 01 Aug 16:02
· 299 commits to develop since this release
29684d6

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
  • [Backend] FEMS Backports 2025-07-21 in #3245
    • Alerting cleanup
      • Improve alerting, according to SonarQube test.
  • [Backend] FEMS Backports 2025-07-29 in #3257
    • [Backend] Aggregated-InfluxDB: Add HybridEss Channels to AllowedChannels
      • Add Channels DcDischargePower, DcDischargeEnergy and DcChargeEnergy to AllowedChannels
      • Increase number of ess`s due to industrial xl
    • [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

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 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.
  • [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 Updateables for Remote-Update of Firmware via OpenEMS
      • Created a Updateable to 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
    • [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] 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 SemanticVersion class to record
    • [Edge] Add ApparentPower to SymmetricBatteryInverter
      • Add ApparentPower to SymmetricBatteryInverter
      • Add helper method to calculate it from ActivePower and ReactivePower
    • [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

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 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
  • [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.EVSE will 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-buttons text
      • 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.useNewUI and force new navigation if component.factoryIds is in [Evse.Controller.Single]
    • 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
    • [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 /device again
      • Fix side-menu not working after navigation to edge/profile
      • Add shadow to action sheet modal
      • add ngDomChange directive 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

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

Full Changelog: 2025.7.0...2025.8.0