Skip to content

Releases: OpenEMS/openems

2026.3.0

01 Mar 13:47

Choose a tag to compare

Release Highlights

  • Improved implementations:
    • EWS Schönau Time-of-Use-Tariff
    • ENTSO-E Time-of-Use-Tariff: support for Lithuania
    • Hardy Barth Wallbox EVSE
    • State-of-Health-Cycle Controller
    • Timeslot PeakShaving "Hochlastzeitfenster" Controller
  • UI improvements:
    • "Location validator" in UI System Profile
    • Standardise input of calendar events ("JSCalendar")
  • Core improvements:
    • Modbus-Bridge improvements
    • EnergyScheduler v2
    • E-Mobility EVSE

Details

OpenEMS Edge

  • Bridge Modbus: Fix task scheduling and simplify task handling by @timo-schlegel in #3547
  • FEMS Backports 2026-02-18 in #3568
    • Hardy Barth: EVSE Implementation and Switch Architecture Commit
    • TimeOfUseTariff.Ews: migrate to Http-Bridge Commit
    • E-Mobility EVSE: Add Lost Line Commit
    • E-Mobility EVCS-to-EVSE: fix CanSwitchArchitecture for Systems that do not yet have READ_ONLY Commit
    • AppCenter: Add P30 EVSE to switch Commit
    • App Center EVSE: Switch with existing Vehicle Commit
    • EnergyScheduler v2: fix charging during DELAY_DISCHARGE Commit
    • EnergyScheduler v2 GoC: use MaximumGridFeedInLimit Commit
    • EnergyScheduler v2: improvements Commit
    • EnergyScheduler v2: improvements Commit
    • ChannelDoc: Add a way to set text dynamically Commit
    • EnergyScheduler v2: Plot GlobalOptimizationContext with JFreeChart Commit
    • EnergyScheduler v2 RunOptimizerApp: Plot SimulationResult with JFreeChart Commit
    • Edge2Edge: fix handling of hashes Commit
    • TimeOfUseTariff.ENTSO-E: add bidding zone Lithuania Commit
    • Controller.Ess.SoH.Cycle: improving balancing logic and add more channels Commit
    • Controller.Ess.SoH.Cycle: IsRunning instead of mode Property Commit
    • App.Ess.SohCycle: set dependency for FENECON Home & Commercial Commit
    • App.Ess.SohCycle: SoH Cycle App Commit
    • IO.Fenecon.MasterBox2V0.Relay: Implemented Commit
    • App.Prediction.Default: add new app "Default Prediction" Commit

OpenEMS UI

  • EnergyMonitor: Update arrows by @da-Kai in #3375
  • Single Threshold: Add unit labels by @sthhs in #3515
  • Header: Fix title disappear from the header on first load. by @Jasonlee6789 in #3569
  • FEMS Backports 2026-02-18 in #3568
    • JSCalendar: refactor Commit
    • "Location validator" section in Profile Commit
    • E-Mobility EVSE: Prevent vehicle-id Error from showing outside the vehicle settings Commit
    • E-Mobility EVSE: Fix for app center vehicles Commit
    • E-Mobility EVSE: Fix car update Commit
    • Timeslot PeakShaving: fix string to number conversion Commit
    • Accessibility: Implement wcag 1.4.4 Commit
    • Set fixed version for angular/cdk Commit
    • Replaced outdated links and added language placeholder Commit
    • Offline + Time-of-Use new icon Commit
    • Fix rerouting for non admins Commit
    • Reduce GetEdgesRequests Commit
    • Websocket.ts: add missing promise reject callback Commit
    • Adjustments for Manual Commit

OpenEMS Backend

  • FEMS Backports 2026-02-18 in #3568
    • BackendEdge: Update readme + create new gradle tasks Commit
    • Backend-Edge-Manager: Gradle and Docker builds Commit

Common/General

  • Docker: Fix builds by @da-Kai in #3563
  • Intellij + Gradle: Setup Guide by @alexbelkedev in #3554
  • FEMS Backports 2026-02-18 in #3568
    • Update Docker Commit
    • App Center: Fix Keba Toggle Switch Errors Commit
    • Java-WebSocket Wrapper: include JavaDoc Commit
    • Gradle: lazy configuration for all tasks Commit

Version Upgrades

  • Bump org.jetbrains.kotlin:kotlin-osgi-bundle from 2.3.0 to 2.3.10 in /cnf by @dependabot[bot] in #3560
  • Bump com.auth0:auth0 from 3.0.0 to 3.1.0 in /cnf in the auth0 group by @dependabot[bot] in #3559
  • Bump the pax-logging group in /cnf with 2 updates by @dependabot[bot] in #3558
  • Bump com.auth0:auth0 from 3.1.0 to 3.2.0 in /cnf in the auth0 group by @dependabot[bot] in #3564
  • Bump org.postgresql:postgresql from 42.7.9 to 42.7.10 in /cnf by @dependabot[bot] in #3565
  • Bump org.junit.jupiter:junit-jupiter-api from 6.0.2 to 6.0.3 in /cnf by @dependabot[bot] in #3580
  • Bump org.postgresql:postgresql from 42.7.9 to 42.7.10 in /cnf by @dependabot[bot] in #3579
  • Bump net.bytebuddy:byte-buddy from 1.18.4 to 1.18.5 in /cnf by @dependabot[bot] in #3578
  • Bump org.jetbrains.kotlin:kotlin-osgi-bundle from 2.3.0 to 2.3.10 in /cnf by @dependabot[bot] in #3576
  • Bump com.auth0:java-jwt from 4.5.0 to 4.5.1 in /cnf in the auth0 group by @dependabot[bot] in #3575
  • Bump the pax-logging group in /cnf with 2 updates by @dependabot[bot] in #3574
  • Bump qs from 6.14.1 to 6.14.2 in /ui by @dependabot[bot] in #3567
  • Bump @modelcontextprotocol/sdk and @angular/cli in /ui by @dependabot[bot] in #3556
  • Bump swiper from 12.0.3 to 12.1.2 in /ui by @dependabot[bot] in #3582
  • Bump webpack and @angular-devkit/build-angular in /ui by @dependabot[bot] in #3557

New Contributors

Full Changelog: 2026.2.0...2026.3.0

2026.2.0

01 Feb 14:39

Choose a tag to compare

NOTE: This release includes large changes to the OpenEMS Backend authentication flow to Odoo and KeyCloak. These changes are not yet included in the OpenEMS-Odoo-Addon and the Docker-Compose setups. For now it is recommended to use older OpenEMS Backend (namely 2026.1.0) to prevent problems and cyber security risks.

Release Highlights

  • New implementations:
    • Janitza UMG806 (via UMG604 Master)
    • Hager ECR380D
  • Improved implementations:
    • Shelly IOs
    • Edge-2-Edge
    • Single-Threshold-Controller
    • Kostal Piko
  • UI improvements:
    • Better visualization on small screens (like a Tablet)
    • Improved Pull-to-Refresh
  • Backend improvements:
    • Split services to multiple servers - allows load-balancing Edge connections
    • OAuth authentication via KeyCloak (and Odoo)
  • Core improvements:
    • Integration-Tests framework (in python)
    • ESS distribution strategy "Optimize by keeping all near equal"
    • Improvements to EVSE E-Mobility Architecture, Energy Scheduler v2 and JSCalendar
    • Grid-Buy-Soft-Limit (specifically for Sweden)

Details

OpenEMS Edge

  • Add support for Janitza UMG806 (via UMG604 Master) by @schiegg in #3449

  • [Edge] Meter.Janitza.UMG806: cleanup after #3449 by @sfeilmeier in #3502

  • Shelly Firmware: Check if stable version update is present by @sthhs in #3517

  • Edge2Edge: filter undefined integer modbus values by @tcdrop in #3479

  • Fix: Handle undefined SOC in solver strategy "Optimize by keeping all near equal" by @tsicking in #3516

  • ControllerIoChannelSingleThresholdImpl.java: Changed inputChannel fro… by @sjjh in #3510

  • Kostal Piko inverter: Corrected dayYield from kWh to Wh + Units of totalYield and dayYield by @sjjh in #3538

  • New energy meter of type Hager ECR380D by @hrohmer in #3336

  • FEMS Backports 2026-01-15 by FENECON in #3518

    • [Edge] Evse.Controller: implement "Minimum-with-Surplus" mode Commit
    • [Edge] App.Prediction.Weather: add components aliases Commit
    • [Edge] HTTP Bridge: improvements Commit
    • [Edge] JSCalendar: improvements Commit
    • [Edge] Battery.Fenecon.Home: update register types from INTEGER to LONG for energy channels Commit
    • [Edge] Evse.Controller: implement "Minimum-with-Surplus" mode Commit
    • [Edge] EnergyScheduler v2: Fix regular optimization schedule Commit
    • [Edge] JSCalendar: implement MONTHLY recurrence Commit
    • [Edge] BatteryProtection: support dynamic ForceCharge/Discharge current Commit
    • [Edge] XmlUtils: activate SECURE_PROCESSING feature Commit
    • [Edge] FENECON Commercial 100 App Commit
    • [Edge] JSCalendarApi: fix error Commit
    • [Edge] App.System.Fenecon.Home: Remove relay validation Commit
    • [Edge] EnergyScheduler v2 improvements Commit
    • [Edge] Move JSCalendar JSONRPC API-Routes to common Commit
    • [Edge] EnergyScheduler v2 improvements Commit
    • [Edge] QuarterlyValues: use Instant instead of ZonedDateTime Commit
    • [Edge] EnergyScheduler v2 improvements Commit
    • [Edge] Battery.Fenecon.Home: add registers Commit
    • [Edge] EnergyScheduler & TimeOfUseTariffController: resolve cyclic dependencies Commit
    • [Edge] EnergyScheduler: Add generations counter Commit
  • FEMS Backports 2026-01-24 by FENECON in #3540

    • [Edge] ESHv2: fix possible NPE Commit
    • [Edge] ESHv2 Time-of-Use-Tariff Ctrl DELAY_DISCHARGE fix charge from AC Commit
    • [Edge] Predictors: Implement better logging Commit
    • [Edge] Controller.Ess.SoH.Cycle: Implement State-of-Health Cycle Controller Commit
    • [Edge] JSCalendar: implement nthOfPeriod for monthly byDay Commit
    • [Edge] Implement Grid-Buy-Soft-Limit in _meta (2) Commit
    • [Edge] App.FENECON.Home*: Bugfix for LED Commit
    • [Edge] Implement Grid-Buy-Soft-Limit in _meta Commit
    • [Edge] JSCalendar: Add Api-Routes to existing Components Commit
    • [Edge] FENECON 100 battery inverter: add type Commit
    • [Edge] Battery.Fenecon.Home: fix register names Commit

OpenEMS UI

  • Adjust large screen widget size based on nav position by @Sn0w3y in #3354
  • Fix: Pull-to-Refresh not working by @Sn0w3y in #3531
  • [UI] Use Angular property binding for SVG fill attribute by @sfeilmeier in #3542
  • Fixed copy-paste bug - was subWeeks instead of subMonths/subYears by @Sn0w3y in #3541
  • FEMS Backports 2026-01-15 by FENECON in #3518
    • [UI] formly-range-type: set default value Commit
    • [UI] IBN: add configuration for alerting Commit
    • [UI] Add validator for first- and last-name fields Commit
    • [UI] eslint-rule json-no-duplicate-keys Commit
    • [UI] App Center: fix display of registered keys Commit
    • [UI] fix redirects Commit
    • [UI] improve oauth flow Commit
    • [UI] Fix user back button Commit
    • [UI] Settings | Systemlog: fix toggle Commit
    • [UI] OAuth for android app Commit
    • [UI] OAuth implementation Commit
    • [UI] Spinner for excel export Commit
  • FEMS Backports 2026-01-24 by FENECON in #3540
    • [UI] Fixed style issue with formly serial number fields. Commit
    • [UI] EVSE: Only show Phase-Switch for KEBA P40 Commit
    • [UI] fix channels subscribe Commit
    • [UI] Fixes for mobile UI Commit
    • [UI] fix for missing sum state on live page ...
Read more

2026.1.0

01 Jan 02:37
212490b

Choose a tag to compare

Release Highlights

  • New implementations: Victron, OpenWB, Janitza UMG801, SMA STP-10.0 SE Hybrid, SDM72D-M-2 meter, MQTT Bridge
  • Improvements: Controller Timeslot Peakshaving, Kostal Piko & Plenticore, Autodiscovery for Shelly devices
  • Core development efforts: Energy Scheduler v2, JSCalendar, New E-Mobility Architecture (EVSE), Predictors

Details

Common/General

  • [Docs] Move development environment setup from getting started to a separate page by @simon-lgb in #3268
  • Update docker.adoc: added hint & link to influxdb deployment by @sjjh in #3201

OpenEMS Backend

  • FEMS Backports 2025-12-17 in #3471
    • Add settings to GetEdges Commit

OpenEMS Edge

  • Implement OpenWB Series 2 EVCS by @sthhs in #3299
  • Add support for Janitza UMG801 by @schiegg in #3451
  • Janitza Meters: cleanup implementations by @sfeilmeier in #3454
  • Add MQTT bridge implementation for OpenEMS Edge by @Sn0w3y in #3458
  • Controller Timeslot Peakshaving: Avoid endless while loop by @tsicking in #3464
  • fixed Kostal Piko HTML parsing bug: kWh for Total Energy in HTML, instead of expected Wh in ActiveProductionEnergy by @janklostermann in #3465
  • Add Single Channel datasource for dynamic simulation input by @Sn0w3y in #3448
  • Kostal Plenticore: correct and simplify smartmode by @iseeberg79 in #3417
  • Refactor openwb mqtt by @Sn0w3y in #3467
  • Implement SMA STP-10.0 SE Hybrid ESS by @tsicking in #2618
  • [Edge] Update GermanDSO: zeitvariable Netzentgelte §14a Modul 3 for 2026 by @sfeilmeier in #3473
  • Implements VirtualMeter on PvInverterCluster by @chpoulter in #3085
  • [Edge] Add support for SDM72D-M-2 meter by @Sn0w3y in #3491
  • Add Victron Package by @Sn0w3y in #3457
  • Update bnd to 7.2.0 by @sfeilmeier in #3494
  • FEMS Backports 2025-12-17 in #3471
    • App.Evcs.Keba: fix ReadOnly in EVSE Commit
    • App.System.Fenecon.Home: Control State-LED Commit
    • Battery.Fenecon.Home: Change Prio for Softwareversion and NumberOfModulesPerTower Commit
    • App.FENECON.Commercial.50.Gen3: add compatibility with App.PeakShaving.* Commit
    • GoodWe.BatteryInverter: improvements to MaxAcImport/Export Commit
    • Core.AppManager: force updating configs of components Commit
    • Core.Energy: handle TimeOfUse-Reference is null Commit
    • App.FENECON.Commercial.92: add missing property default value Commit
    • Energy Scheduler v2: handle non available prices & predictions Commit
    • Fix Eclipse Infos and Warnings Commit
    • Controller.Ess.Time-Of-Use-Tariff: fix PID filter fluctuation in DELAY_DISCHARGE Commit
    • Evse.Controller.Single: implement getTask and getOneTasks Commit
    • Battery.BMW: Improvements to go-stopped-handler Commit
    • Energy Scheduler v2 with EVSE Commit
    • Ess.Power: improve "Keep all near equals" solver Commit
    • AppCenter: remove has ac meter (Home 10, 20 & 30) Commit
    • IO.Shelly.*: validate compatibility with hardware type Commit
    • EVCS App Center: hide ARCHITECTURE_TYPE Commit
    • GoodWe.BatteryInverter: fix writing WBMS_DISCHARGE_MAX_CURRENT Commit
    • GoodWe.Charger.Mppt.Two-String: MPPT 5-8 available in components Commit
    • EVSE JSCalendar JSON-RPC: Add properties lastChangeAt and lastChangeBy Commit
    • Tribuo: Allow only severe logging Commit
    • Fix develop branch Commit
    • Energy Scheduler v2 with EVSE Commit
    • Switch EVCS to EVSE and back via App Center Commit
    • Add "App.Prediction.UnmanagedConsumption" Commit
    • Predictor Production Regression Model v2 Commit
    • Industrial L: product update Commit
    • Industrial: Janitza GridMeter for Industrial L and XL Commit
    • Predictor.ProfileClusteringModel: fix daylight saving time change error Commit
    • Energy Scheduler v2: remove internal Cache Commit
    • Improvements to EVSE and JSCalendar Commit
    • Controller.Clever-PV: fix for readOnly error Commit
    • Improve Ancillary Services Commit
    • Switch E Mobility Architecture Commit

OpenEMS UI

  • UI bugfix: Fix Log auto unsubscribe + SystemExecute formatting by @da-Kai in #3378
  • Enhance breadcrumbs with pointer cursor style by @Sn0w3y in #3413
  • FEMS Backports 2025-12-17 in #3471
    • EVSE: manual energy schedule Commit
    • Edge Settings Commit
    • New status icons and adjustments for other icons Commit
    • Charts: hide unused axes; bugfix Commit
    • EN-Buttons translation Commit
    • Manual UI backport Commit
    • Switch E Mobility Architecture Commit

Version Upgrades

  • Bump org.apache.felix:org.apache.felix.http.jetty12 from 1.1.4 to 1.1.6 in /cnf by @dependabot[bot] in #3462
  • Bump net.bytebuddy:byte-buddy from 1.18.1 to 1.18.2 in /cnf by @dependabot[bot] in #3461
  • Bump the bouncycastle group in /cnf with 2 updates by @dependabot[bot] in #3460
  • Bump actions/setup-node from 5 to 6 in /.github/workflows by @dependabot[bot] in #3373
  • Bump de.bytefish:pgbulkinsert from 8.1.6 to 8.1.8 in /cnf by @dependabot[bot] in #3470
  • Bump @angular/common from 20.3.10 to 20.3.14 in /ui by @dependabot[bot] in #3446
  • Bump com.google.protobuf:protobuf-java from 4.33.1 to 4.33.2 in /cnf by @dependabot[bot] in #3469
  • Bump org.mockito:mockito-core from 5.20.0 to 5.21.0 in /cnf by @dependabot...
Read more

2025.12.0

30 Nov 19:56
3fddf96

Choose a tag to compare

Release Highlights

  • Shelly Plug S
    • New autodiscovery feature for Shelly Plugs via App Center via mDNS
    • Supports: Shelly Plus Plug S, Plug S Gen3, Outdoor Plug S Gen3
    • "FEMS App Shelly DIY": this app is available free-of-charge for FENECON users from version 2025.12.1
  • E-Mobility
    • New support for ABL eM4 charging station (read-only)
    • Implement forced Phase-Switching for KEBA P40 and P30+S10 (new EVSE architecture)
  • Time of Use Tariffs
    • Octopus Go and Heat now support ancillaryCosts (German: variable Netzentgelte)
    • New support for LUOX Energy
    • New support for EWS Schönau
  • Under the hood
    • Improved Docker support
    • Improvements to JSCalendar and Energy Scheduler v2

Details

Common/General

  • FEMS Backports 2025-11-09 in #3403
    • CI: Add explicit common_test command Commit
    • CI: Update build scripts Commit
    • VSCode: specify default indentation Commit
    • Update build scripts Commit
    • Update build scripts Commit
  • Docs: fix broken link and typos by @deining in #3398
  • CI: Fix antora build by @da-Kai in #3418
  • Gradle: Fix buildBackend by @da-Kai in #3424
  • Docs Architecture: Update Cycle component reference by @Eual11 in #3439
  • Docs Docker: improve documentation by @akshith30388 in #3412
  • Docker: prevent "Interrupted system call" when writing to /etc/apk/repositories by @Sn0w3y in #3368

OpenEMS Backend

  • FEMS Backports 2025-11-09 in #3403
    • Extend Odoo Filter Commit
    • Aggregated-InfluxDB: increase allowed Component-IDs for EVSE and EVCS Commit
    • Add ElectricityMeter Channels for ios Commit
    • OAuth2 Registry support Commit

OpenEMS Edge

  • FEMS Backports 2025-11-09 in #3403
    • App Manager: ComponentTask with Component Record Commit
    • DynamicDocText: fix failed Test Commit
    • Evcs.Abl: implement ABL eM4 charging station (read-only) Commit
    • TimeOfUseTariff.OctopusGo/Heat: add ancillaryCosts (variable Netzentgelte) Commit
    • Ess.Generic.ManagedSymmetric: Add State Runtime Channels Commit
    • Standardise ErrorAcknowledgeRpc & implement for Industrials Commit
    • fix component not found for default id Commit
    • Temporary fix for failing JUnit test Commit
    • Evcs.HardyBarth: improvements Commit
    • GoodWe.BatteryInverter: adjust notification in State Commit
    • update translation key Commit
    • JSCalendar for Time-of-Use-Tariffs: fix clock issue Commit
    • Controller.IO.HeatingElement: fix NPE in JUnit test Commit
    • EnergyScheduler v2: temporary fix for JUnit tests Commit
    • JSCalendar improvements Commit
    • FENECON Commercial 50: update grid mode mapping Commit
    • Weather.OpenMeteo: fix channel persistence after restart Commit
    • App.TimeOfUseTariff: add compatibility with App.FENECON.Commercial.92.ClusterMaster Commit
    • FENECON Industrial L: Extend System Component with Janitza Grid-Meter (TCP) Commit
    • TimeOfUseTariff.ENTSO-E: improve parsing Commit
    • EVSE + KEBA P40 / P30+S10: implement forced Phase-Switching Commit
    • App.Prediction.Weather: move to 'API' category + do not require owner role Commit
    • Core.AppManager: improve timeouts & error messages Commit
    • Predictor.ProfileClusteringModel: improve error handling Commit
    • TimeOfUseTariff.ENTSO-E: fix query for DE_LU and AT Commit
    • Core.SerialNumber: decrease timeout for persisting serial numbers Commit
    • GoodWe Max Charge/Discharge Power bugfix for old devices Commit
    • AppCenter: Weather App Commit
    • Improve App installation speed Commit
    • Energy-Scheduler v2: improvements Commit
    • Battery.Fenecon.Home: fix software versions Commit
    • Weather.OpenMeteo: fix timezone handling Commit
    • ENTSO-E: default to QUARTERLY resolution Commit
    • App.FENECON.ProHybrid.10 Commit
    • TimeOfUseTariff LUOX Energy Commit
    • Kostal + Samsung: update usage of HTTP Bridge Commit
    • OAuth2 Registry support Commit
  • EWS Schönau: TimeOfUseTariff implementation by @Bockhorn-IT in #3302
  • Predictor.LSTM: improve robustness and testing by @Sn0w3y in #3402
  • Ess.Power: fix possible problems in calculation of ApparentPower constraints by @Sn0w3y in #3401
  • OsgiValidateWorker: only validate OpenemsComponents by @Sn0w3y in #3419
  • FEMS Backports 2025-11-25 in #3440
    • Energy Scheduler v2: EVSE Cluster Commit
    • Shelly Plug: RelayContactFilter + smart invert Commit
    • FENECON Commercial 92: add GridCode setting Commit
    • Ess.Power: fixed PID filter Commit
    • Plus Plug S, Plug S Gen3, Outdoor Plug S Gen3 Commit
    • Energy Scheduler v2 improvements Commit
    • EnergyScheduler v2: refactor EnergyFlow Commit
    • EWS Schönau ToU: release for Admins Commit
    • Clever-PV / EnerixControl: code cleanup and refactorings [Commit](9d45d08b...
Read more

2025.11.0

30 Oct 08:26
e291ea0

Choose a tag to compare

Release Highlights

  • Time-of-Use-Tariff: App for Dynamic Ancillary costs
  • Time-of-Use-Tariff Tibber: switch to QUARTER_HOURLY prices
  • Compatibility with FENECON Commercial 50
  • New Predictor for Consumption forecasting based on historical load profiles
  • UI: Add Weather Widget in Live-View
  • KOSTAL PIKO PV inverter (via HTTP/HTML)
  • UI: Major Update and migration to Angular 20

Details

Common/General

  • FEMS Backports 2025-10-02 in #3339
    • CI:
      • Update Unit Tests
      • Reduce Java build Log output: Reduce the log output to make errors clearer.
      • Print test summaries
    • Gradle:
      • Allow more than 2 Tests to run in parrallel
      • Enable parallel build by default
      • Remove failOnNoDiscoveredTests = false
    • Fix 'Configuration file ... is marked executable'
      • Fix warnings like: "Configuration file /usr/lib/systemd/timesyncd.conf.d/fems.conf is marked executable. Please remove executable permission bits. Proceeding anyway."
  • Update Gradle + Plugins by @da-Kai in #3337
  • Extend auto Stale and Close messages by @da-Kai in #3345
  • Update Node.Js to 22 by @da-Kai in #3347
  • Update MyModbusDeviceImpl.java by @sjjh in #3315
  • Update MyConfig.java: removed import by @sjjh in #3318
  • Improve UI docker by @da-Kai in #3366
  • Change console output format from plan to colored in gradle build of ci by @miettal in #3364

OpenEMS Backend

  • FEMS Backports 2025-10-02 in #3339
    • Dummy AppCenter Metadata
    • Remove UiWebsocketValidator
    • MetadataOdoo: handle uncached Edges
      • Solves throwing an Exception when an Edge is missing in EdgeCache

OpenEMS Edge

  • FEMS Backports 2025-10-02 in #3339
    • my-PV + ASKOMA Apps: update names
    • KACO Battery Inverter: introduce SunSpec EnumField16
      • Sunspec channels are automatically created based on EnumField16 enums.
      • These channels are visible as StateChannels in the system.
      • Each channel’s status (OK, Warning, or Failure) is defined during setup—by default, channels are OK unless specifically configured as warnings.
    • FENCON Commercial 50 App
    • Time-of-Use-Tariff:
      • App.TimeOfUseTariff.AncillaryCosts: App for Dynamic Ancillary costs
    • OperatingSystemDebianSystemd: Fix parseIpJson for Debian 9
      • Before a IndexOutOfBoundsException was thrown, which caused App Center install to fail
    • AppCenter:
      • Added a new formly field which handles links and redirects
      • run deactivation async: fixed exception while deactivating multiple nested checkables in CheckOr
      • Add JSONRPC Request for getting App Instances by Filter
    • KEBA ChargePoint: fix JUnit-Test
      • Use fixed DateTime reference, instead of .now(), for reproducability
      • Remove duplicate ReadWorkerTest
    • BridgeModbusTcpImplTest: delete JUnit test failing in CI
    • PredictorProductionLinearModel: add channels to track prediction quality
      • Added new channels to track predicted production values from the PredictorProductionLinearModel
      • For each forecast run, predicted values at fixed horizons (1 hour, 6 hours, 12 hours, 24 hours, and 36 hours ahead) are stored in the respective channels
      • This enables precise monitoring and evaluation of the prediction accuracy over these time intervals
    • Meta-App: manage Maximum Grid Feed In Limit settings
      • Moves MAXIMUM_GRID_FEED_IN_LIMIT (GridOptimizeCharge) and FEED_POWER_PARA_SET (GoodWeBatteryInverter) to Meta Component
      • Both controllers use the same value as reference
      • Added a new formly field which handles links and redirects
    • New Predictor for Consumption forecasting based on historical load profiles
      • A new predictor model has been developed to forecast upcoming unmanaged consumption values.
      • The prediction is based on typical household daily load profiles.
      • Load profiles are determined by clustering historical daily consumption time series data.
      • The load profiles correspond to the cluster centres.
      • The upcoming profile is chosen using historical consumption patterns, such as the day of the week, whether the upcoming day is a working or non-working day, and the previous profile.
      • The model evaluates the prediction in real time. So, if during the day the model realizes that the wrong profile was chosen, a better-fitting one is selected for the rest of the day.
      • The forecasted quarterly values are determined by the predicted profile.
    • EVSE New Architecture
      • Add State-Machine to EVSE Single Controller:
        • EV_NOT_CONNECTED: EV is not physically connected to the charge point.
        • EV_CONNECTED: EV is physically connected but not yet charging.
        • CHARGING: Regular charging is ongoing. EV is drawing current according to configured limits and conditions.
        • FINISHED_EV_STOP: Charging finished by EV. EV is not drawing power even if it would be allowed to.
        • FINISHED_ENERGY_SESSION_LIMIT: Charging is finished by OpenEMS because the configured EnergySessionLimit was reached.
        • prepared for more...
      • Add Change-Limit for rising set-points (3 % per second)
      • Improve surplus distribution: recursive call makes sure everything is distributed to max power
      • Drop SESSION_LIMIT_REACHED state; replaced with State-Machine
      • Improve JUnit tests and coverage
      • KEBA: use Enum for setSetEnable() (applies also to EVCS)
      • Phase-Switch is currently not working. Needs to be added to State-Machine
      • Successfully tested with 2 x KEBA P30
      • Configurable minimum power for vehicle
        • Added min and max power in generic vehicle and generic vehicle app
    • KEBA UDP: disable flaky JUnit tests
      • UDP tests sometimes fail with java.lang.Exception: On TestCase [#1]: expected ReadValue [CHARGING] got [UNDEFINED] for Channel [Status] in Nature [Evcs] on Inputs [[]]
    • Tibber: switch to QUARTER_HOURLY prices
    • GoodWe:
      • use new Registers for GridFeedInLimit and FixedPowerFactor: Registers for FENECON Commerical 50 changed
      • allow only possible EmsSetPower limits and correct AcImport/AcExport
    • Controller.Ess.RippleControlReceiver: Rundsteuerempfänger
      • Controller for Ripple Control Receiver
      • Digital Input 2 - Digital Input 4 are used as signal
      • DI2 reduces to 0%, DI3 to 30%, DI4 to 60%
      • If there are more than one relay active, the "strongest" limitation is used => e.g. 0% and 30% are activated => reducing to 0% power
      • Currently only for GoodWe Inverters => Feed-To-Grid Power Limit is set to the lowest of the two options:
      • MaxApparentPower * Limitation or the own set limit
      • removed MaxGridFeedInLimit of GridOptimizeCharge and BatteryInverter and added it in Meta app => uniform using of limit
    • Weather Forecast: keep data in channels
      • The current weather and the forecast for the next 24 hours are now being written in channels
      • This is more efficient in UI
    • Shelly: add invert config property to all ElectricityMeters
    • App.Heat.HeatingElement: ignoring heat and evcs components in the extern meter list
    • KACO Battery Inverter: introduce SunSpec EnumField16
      • Sunspec channels are automatically created based on EnumField16 enums.
      • These channels are visible as StateChannels in the system.
      • Each channel’s status (OK, Warning, or Failure) is defined during setup—by default, channels are OK unless specifically configured as warnings.
    • Consistant Icons
      • changed icons and Buttons to be more consistently identified with functionality
  • Fix high and low price description for Octopus Heat TOU Tariff by @sthhs in #3344
  • Update timeofusetariff octopus heat Config.java: typo by @sjjh in #3346
  • FEMS Backports 2025-10-08 in #3353
    • App.Meter.PqPlus available for OWNER
    • Weather.OpenMeteo: add random jitter to API calls to reduce simultaneous load
    • App.PvInverter.SolarEdge: make Modbus Unit ID configurable
    • Phase Rotation for Heating Element & Eastron meter
      • outsource enum "Phase Rotation" to make it independent
      • changing translations
      • implementing "Phase Rotation" in modbus protocoll of the Eastron meter
      • added property "Phase Rotation" in the Eastron meter app
  • implement KOSTAL PIKO PV inverter via HTTP/HTML parsing by @Sn0w3y in #3297

OpenEMS UI

  • FEMS Backports 2025-10-02 in #3339
    • Migration to Angular 20
      • Apply ng generate @angular/core:control-flow
      • VSCode: fix html formatting issues with new control flow syntax: Reference
    • Settings | Channels: add option to select multiple channels
    • EVSE New Architecture
      • Extend Evse with navigation to app center update page
      • Refactored app center update pages to be usable with new navigation
      • fix german/english translation of power
    • Fix Helpbutton-component not working due to wrong property name being checked
    • Time-of-Use-Tariff Ancillary Costs: Fix possible input errors
    • Style fixes
    • EVCS Cleanup
      • Added class EvcsComponent to clean up historic...
Read more

2025.10.0

29 Sep 15:36
16495ce

Choose a tag to compare

Release Highlights

  • New JSCalender Scheduler allows enabling specific Controllers on defined dates and times using the JSCalendar format.
    • This Scheduler is planned to replace Daily-Scheduler in future. We also plan to add proper UI visualization and configuration for it.
    • Thanks @sebastianasen for working on this during OpenEMS Hackathon at VOLTFANG GmbH**

Details

Common/General

OpenEMS Edge

Version Upgrades

  • Bump actions/setup-node from 4 to 5 in /.github/workflows by @dependabot[bot] in #3305
  • Bump com.google.code.gson:gson from 2.13.1 to 2.13.2 in /cnf by @dependabot[bot] in #3309 followed by @da-Kai in #3317
  • Bump com.google.guava:guava from 33.4.8-jre to 33.5.0-jre in /cnf in the guava group by @dependabot[bot] in #3324
  • Bump com.google.protobuf:protobuf-java from 4.32.0 to 4.32.1 in /cnf by @dependabot[bot] in #3312
  • Bump de.bytefish:pgbulkinsert from 8.1.5 to 8.1.6 in /cnf by @dependabot[bot] in #3310
  • Bump io.jenetics:jenetics from 8.2.0 to 8.3.0 in /cnf by @dependabot[bot] in #3326
  • Bump net.java.dev.jna:jna from 5.17.0 to 5.18.0 in /cnf by @dependabot[bot] in #3327
  • Bump org.apache.felix:org.apache.felix.scr from 2.2.12 to 2.2.14 in /cnf by @dependabot[bot] in #3303
  • Bump org.apache.felix:org.apache.felix.webconsole from 5.0.12 to 5.0.14 in /cnf by @dependabot[bot] in #3301
  • Bump org.apache.felix:org.apache.felix.webconsole from 5.0.14 to 5.0.18 in /cnf by @dependabot[bot] in #3328
  • Bump org.jetbrains.kotlin:kotlin-osgi-bundle from 2.2.10 to 2.2.20 in /cnf by @dependabot[bot] in #3311
  • Bump org.postgresql:postgresql from 42.7.7 to 42.7.8 in /cnf by @dependabot[bot] in #3325
  • Bump the bouncycastle group in /cnf with 2 updates by @dependabot[bot] in #3323
  • Bump the pax-logging group in /cnf with 2 updates by @dependabot[bot] in #3300

Full Changelog: 2025.9.0...2025.10.0

2025.9.0

01 Sep 08:12
a1618ce

Choose a tag to compare

Details

Common/General

  • Update README.md: removed link to felix, added first steps to log in and configure by @sjjh in #3200
  • Update docker.adoc by @sjjh in #3180

OpenEMS Edge

  • Modbus: AbstractReadTask: Enhance Parsing Response; exception catch by @DerStoecki in #2879
  • System-Update: Create proper exception for exception handler by @Lamarqe in #3170
  • Energy-Scheduelr V1: Systems with no Production results in Null for History Data by @DerStoecki in #3278
  • EssCore: Fix NPE in "KeepingAllNearEqual" if mergedResult is null (or result.length is 0) by @DerStoecki in #3277
  • Fronius smartmeter: add implementation for by @sjjh in #3269
  • Fronius: merge bundles for PV-Inverter and Meter by @sfeilmeier in #3283
  • Websocket Reconnector: Change reconnection timer implementation unix time -> cpu clock time by @miettal in #3182
  • SMA: merge bundles for ESS, PV-Inverter and Meter by @sfeilmeier in #3284
  • SunSpec Meter: invert energy channels mapping by @sfeilmeier in #3290
  • Fix typos

OpenEMS UI

  • Add translation text for technicalName, category, cardinality by @miettal in #3189
  • Remove redundant unsubscribeFromChannels on component destroy to align with edge signal refactor by @Jasonlee6789 in #3242
  • Drop unused getEditButtonText; add ja text by @miettal in #3188

Version Upgrades

  • Bump com.squareup.okio:okio-jvm from 3.15.0 to 3.16.0 in /cnf by @dependabot[bot] in #3267
  • Bump com.google.protobuf:protobuf-java from 4.31.1 to 4.32.0 in /cnf by @dependabot[bot] in #3282
  • Bump @date-fns/tz from 1.2.0 to 1.4.1 in /ui by @dependabot[bot] in #3281
  • Bump org.jetbrains.kotlin:kotlin-osgi-bundle from 2.2.0 to 2.2.10 in /cnf by @dependabot[bot] in #3279
  • Bump actions/checkout from 4 to 5 in /.github/workflows by @dependabot[bot] in #3276
  • Bump actions/download-artifact from 4 to 5 in /.github/workflows by @dependabot[bot] in #3274
  • Bump com.zaxxer:HikariCP from 7.0.0 to 7.0.1 in /cnf by @dependabot[bot] in #3273
  • Bump actions/setup-java from 4 to 5 in /.github/workflows by @dependabot[bot] in #3296
  • Bump org.jsoup:jsoup from 1.21.1 to 1.21.2 in /cnf by @dependabot[bot] in #3295
  • Bump org.apache.felix:org.apache.felix.http.jetty12 from 1.0.36 to 1.1.0 in /cnf by @dependabot[bot] in #3292
  • Bump com.zaxxer:HikariCP from 7.0.1 to 7.0.2 in /cnf by @dependabot[bot] in #3291

New Contributors

Full Changelog: 2025.8.0...2025.9.0

2025.8.0

01 Aug 16:02
29684d6

Choose a tag to compare

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 test...
Read more

2025.7.0

01 Jul 17:29
509a927

Choose a tag to compare

Release Highlights

  • Implementation of MyPv AC-Thor9s and Askoma electric heaters
  • Implementation of "Linear Model Production-Predictor" based on weather forecasts
  • Standard interface for Weather API with reference implementation for Open-Meteo
  • Controller Ess Balancing: allow setting target grid Setpoint via Modbus

Details

Common/General

  • Docker: set execute permissions to 'run'-files by @da-Kai in #3166
  • FEMS Backports 2025-07-01 in #3218
    • XLSX Export: remove timezone validation

OpenEMS Backend

  • FEMS Backports 2025-06-22 in #3206
    • Add getProtocolsCoreInfo request
      • add getProtocolsCoreInfo to get all protocols with {type: ProtocolType, id: number, create_date: Date}
      • added setupProtocolType to getLatestProtocolCoreInforesponse
  • FEMS Backports 2025-07-01 in #3218
    • Update B2B Rest-Api to Jetty12
    • Fix skipping debug metrics
    • Add Heat ActiveProductionEnergy to AllowedChannels

OpenEMS Edge

  • ESS GoodWe: Improved implementation of getSurplusPower() by @tsicking in #3171
  • Fix JSCalendar without recurrence rule by @tsicking in #3197
  • FEMS Backports 2025-06-22 in #3206
    • EVSE KEBA UDP: fix stop charging session
    • GoodWe: use extended grid meter values
      • The meter values currently used, are limited to signed 16bit. This could cause an integer overflow - therefore goodwe added new S32 registers.
    • UpdateManager: Generic updates
      • added update manager which collects all Updateables
      • currently no implementation of an Updateable exists
      • Updateables are displayed in System view
    • E-Mobility: P40-App Fix
      • added check for HARDWARE_TYPE in KebaEvcs to make field readonly
      • added readonlyIf Method that dynamically makes field readonly based on BooleanExpression
    • KACO BatteryInverter: add "required" blocks
      • Fix sunspec initialization for kaco inverters
      • Kacos have a default modbus table with only common blocks when not configuration is not completed
      • initialization completes to fast without all required models/channels
      • Restart initialization until all required blocks are read
    • GoodWe: add new SolarGo states
      • Add SolarGo States when the corresponding register is not Undefined (0xffff)
    • KEBA App: fix Scheduler for readonly
      • Only add to Scheduler when not read only
    • Weather API: Open-Meteo implementation
      • Coordinates are stored in the Meta app and used as the basis for weather data retrieval
      • An OSGi component was added to integrate with the Open-meteo API
      • The component subscribes to the Open-meteo API for forecast data, polling every 6 hours
      • Forecasts cover the upcoming two days
      • The current weather is derived from the latest available forecast data
      • For historical weather data, a separate API call is made
      • This call supports a configurable start and end timestamp to define the time range
    • AppCenter: clever-pv public available
      • update roles to be installable by owner
      • added datasecurity hint
    • Power2Heat-Nature + MyPv AC-Thor9s and Askoma Read-Only implementation
      • Introducing new power2Heat Nature.
      • Read-Only implementations for MyPv AC-Thor9s and Askoma heating elements
      • New App including the UI.
    • FENECON Home Apps: add Dynamic and External limitation option for Feedintype
    • Power2Heat: fixes for energy calculation, etc.
      • Changed cycle to after process image
      • Updated translations
      • Added changes requested by previous review
    • AppCenter: set min access role from installer to owner for app delete
      • allow owner to deinstall apps
    • AppCenter: fix displaying "max feed in power" field based on Feed-In Type
  • FEMS Backports 2025-07-01 in #3218
    • ToU: Addition of DSO providers and test cases
    • Power2Heat: declare heatingelement as consumption metered
    • Add dynamic to ips in getNetworkInfo
    • Add Channel Sum.UnmanagedProductionActivePower
      • Specs:
        • Interface: Sum (origin: ElectricityMeter and ESS DC Charger)
        • Type: Integer
        • Unit: W
        • Range: should be only positive; greater than or equal to PRODUCTION_ACTIVE_POWER
        • Note: this value represents the part of the active power production that is not actively managed or curtailed by OpenEMS or external regulations, i.e., it reflects the raw production before any control actions such as feed-in limitation due to grid constraints or new regulations on PV systems. This value can be used for forecasting or analysis of the unmanaged production.
      • Currently identical to ProductionActivePower (direct copy)
      • Future versions may decouple from controlled production values
    • Implement "Linear Model Production-Predictor" based on weather forecasts
      • A linear model was used, as a linear relationship between weather data and PV generation was identified
      • The model is retrained every two days using the most recent two weeks of data
      • Training features include solar irradiation data and time-of-day related features
      • Forecasts are generated using weather forecast data as input
      • The model is lightweight and computationally efficient
      • Numerous potential edge cases, such as insufficient training data, are already handled gracefully
    • Add optional Open-Meteo commercial API Key
      • An API key has been added for FENECON systems
      • Since it's only required for commercial use, the API remains functional without it
    • Code cleanups
      • Move Abstract SunSpec implementations for BatteryInverter, Meter and PV-Inverter to Modbus-Bridge bundle
      • Move Phase-related enums SingleOrAllPhase and SinglePhase to io.openems.edge.common/src/io/openems/edge/common/type/Phase.java
      • Add static imports
    • EVSE improvements
      • Refactor Profiles to Abilities and Actions for Charge-Point and Electric-Vehicle
      • Implement StateMachine in Evse.Controller.Single
      • Improve power distribution; considering "Steps" (Ampere vs MilliAmpere vs Watt)
    • Controller Ess Balancing: allow setting target grid Setpoint via Modbus
      • Before: external EMS could only send charge/discharge information to ESS.
      • This PR creates the option to also control the TargetGridSetPoint via Modbus ReadWrite
      • New WriteChannel "SET_GRID_ACTIVE_POWER" in ControllerEssBalancingImpl: Negative value = Feed-in; Positive value = Grid-Draw
      • Adapt ControllerEssBalancingImpl: Change priority so that SET_GRID_ACTIVE_POWER ist highest; 2nd (as up until now) config "targetGridSetPoint"

OpenEMS UI

  • FEMS Backports 2025-06-22 in #3206
    • New navigation & extend EVSE
      • Improve breadcrumbs: hightlight current; fix wrong aliases
      • EVSE Settings: only for admins; allow change manualEnergySessionLimit
      • clean up service directory
    • EVSE Icon change
      • changing icon for ( schnell ) button.
    • Heat-pump Icon color history widget
      • changing heat-pump historty flat widget icon color to "normal"
    • Fix circular dependency/unsatisfied reference
      • remove appRoutingProviders, due to being called before initialized -> unsatisfied reference
      • fixes circulardep of time of use utils
    • Rollout alerting fault for admin/installer
    • Fix back arrow navigation
      • Fixing hidden back-arrow issue in i.e. Changelog standalone component. using angular service location.back() to navigate back reliably, instead of using navigation tree.
    • Apply new linting rule
      • reduce BOF empty lines to 0
      • reduce EOF empty lines to 1
      • reduce max empty consecutive lines to 2
    • Custom "range" type picker in angular formly
    • Fix missing help-button import
      • Import of helpbutton component missing in modal module and settings module
    • EVSE improvements
      • remove duplicate fab-button for formly control submits on desktop
      • change width of grid in evse shown on desktop resolution (size-md and higher)
    • E-Mobility: Fix Help Key for Hardy Barth
      • Changed help key in switch case
    • Improve formly-select
    • E-Mobility: Fix Rangebuilder
      • Fix Range Slider in Evcs Modal
      • Add missed changed min/max to tickMin/tickMax
    • heatComponents are now correctly subtracted from other Energy
    • Fix white flash on page refresh
    • AppCenter-UI: add visible role
      • Added Permissions object to getApps JsonRpc Request
      • Added Permissions Interface to Apps in UI
      • Added canSee (role) after name in appcenter ui
    • Refactoring Storage-history
    • Change reload behaviour live and history
      • remove default reload behaviour on reentering app
      • only views wrapped inside the PullToRefreshComponent are reloaded on reentering app
  • FEMS Backports 2025-07-01 in #3218
    • App Center key for darkmode optimized
      • badge background color change in app center key, relative to the selected theme.
    • Fix Android view height
      • Android view height was not recalculated when respecting android native navigation toolbar
    • Fix IonRange PinFormatter in Heating element
    • Network settings: show current DHCP IP & allow access for OWNER
      • show dynamic ip to /network next to dhcp address
      • opening /network for Role.OWNER, showing only eth0
    • Fix EdgeConfig properties being stringified
    • Fix object creation of EdgeConfig Components
      • Due to casting objects to be instance of class EdgeConfig.Component, results in fake instances of these classes, and so it is not possible to call class functions
    • Fix lifecycles in live compon...
Read more

2025.6.0

01 Jun 17:32
c4b7a70

Choose a tag to compare

Release Highlights

Details

Common/General

  • Update docker build by @da-Kai in #3114
  • Update deploy.adoc: typo by @sjjh in #3115
  • Improve Docker container by @da-Kai in #3122
  • Extend deploy documentation by @da-Kai in #3130
  • Update docker-compose.yml: removed "version" attribute by @sjjh in #3127
  • Update docker-compose.yml: removed version tag by @sjjh in #3131
  • FEMS Backports 2025-05-25 by FENECON in #3144
    • Add CollectorUtils

OpenEMS Backend

  • FEMS Backports 2025-05-25 by FENECON in #3144
    • Prometheus: add endpoint for OpenEMS Backend
      • Implement MetricsConsumer
      • Add option to set bearer token
    • Alerting metrics
      • Collect "MessagesSent" and "MessagesQueue" metrics
      • Implement dummy Mailer; allow Alerting to be testet in a non Odoo environment
      • MetadataDummy: add dummy alerting settings
    • Backport changes from FEMS Backend
      • drop availableSince from AggregatedInfluxDB
      • update AllowedChannels for AggregatedInfluxDB
      • rename EdgeWebsocket to EdgeManager - preparing for backporting multiple edge-backend servers
      • Setup-Protocol implementations (waiting for UI backport of FEMS Setup Assistant)

OpenEMS Edge

  • FEMS Backports 2025-05-01 by FENECON in #3113
    • KEBA P40: fix Exception during activate
      • Improve modified method
    • Edge2Edge Ess: cirular dependency error
      • Error e. g.: Coefficient for [ess0,ALL,ACTIVE] was not found. Ess-Power is not (yet) fully initialized.
      • Circular Dependecy on startup which leads to an exception and _power does not get the ess reference and therefore does not create the initial constraints/coefficients.
        ess -> _power -> ess
      • Could also happen for future ess depending on the startup order in the EdgeApp.bndrun
    • Improve Battery Protection
      • adjusted force charge/discharge parameters
      • adjusted max ever charge/discharge current
      • removed extended volt range and corresponding enum
    • ESS-Power distribution strategy "keep all nearly equal"
      • Distribute the Power while charging and discharging based on the SOC weightage.
    • GoodWe ApplyPowerHandler improvements
      • Refactor GoodWe ApplyPowerHandler to static methods
      • Apply 100 % test coverage
    • Octopus Heat App: fix Factory-ID
    • JsonUtils.getAsBestType(): improve Number Type Resolution for JsonPrimitives
      • Added support for direct mapping of known numeric types (Double, Float, Integer, Long) using a type-based switch.
      • Longs.tryParse and Doubles.tryParse with correct bounds checking to ensure accurate fallback to long, float, or double based on value size.
    • JSCalendar: migration to JsonSerializer
    • EVSE ChargePoint implementation of HardyBarth
    • Time-of-Use-Tariff Controller:
      • First implementation of DISCHARGE_TO_GRID
      • EnergyFlow: finalizeConsumption() before doing further energy distributions
    • EVSE
      • Add Hysteresis for switching between SURPLUS and ZERO
      • Add appearsToBeFullyCharged(): Apply MIN_CURRENT if car appears to be fully charged. Makes no difference in power, but allows the car to start pre-heating, etc.
    • Energy Scheduler v2
      • Add Revenue for Discharge-to-Grid to fitness function
      • Calculate energy from power correctly for periods with different durations
      • Migrate to JsonSerializer
  • Implement Kostal Plenticore devices by @iseeberg79 in #3118
  • LSTM predictor with dropout regularization by @Sn0w3y in #3125
  • FEMS Backports 2025-05-25 by FENECON in #3144
    • ToU: Add Ancillary costs to ENTSO-E germany
    • ESS Generic: fix battery voltage protection NPE
    • E-Mobility: P40 Improvements
      • make status for prio high (cluster sends 0 ladebefehl if status is not updated and is still "not ready for charging"
      • fix bug in modal
      • no cluster for read only
    • Hardy Barth: read-only app
      • added checkbox in HardyBarthEvcs for readOnly (default false)
      • if checked app is switched to readOnly mode
      • added read only app for EvcsHardyBarthImpl
    • CM4 GPIO compatibility
    • GoodWe: improvements
      • improve writes to avoid internal voltage protection
      • add further registers for analysis
    • GPIO: add Modberry CM4s
    • AppCenter: update hardware gpio config
      • add property to configure hardwaretype in gpio app
      • init hardwaretypes with correct values
    • ToU: Rename rabot.charge to rabot.energy
    • Added ranking of predictors in PredictorManager
      • Added support for predictor prioritization in the PredictorManager configuration
      • Configuration accepts an ordered list of predictor IDs to define ranking
      • Predictors are sorted and queried based on the defined ranking when making predictions
      • Predictors ranked higher in the list are tried first
      • Predictors present in the ranking list are prioritized over unlisted ones
      • Unlisted predictors are sorted alphabetically by ID
      • If IDs are equal, sorting falls back to the predictor's class name for deterministic order
      • Ensures consistent and prioritized prediction selection
    • AppCenter add default value of gpio
      • fix installing integrated system app with 14a
    • E-Mobility (EVSE): Keba (UDP), Heidelberg Connect
      • BREAKING CHANGE: Factory-ID for KEBA Modbus changed to: Evse.ChargePoint.Keba.Modbus
      • Implement Heidelberg Connect
      • Change Profiles to ChargePointAbilities and ChargePointActions
  • App Center: fix JUnit test to detect missing english translation keys by @sfeilmeier in #3145

OpenEMS UI

  • FEMS Backports 2025-05-01 by FENECON in #3113
    • Use previous update and only for meta new
      • updateAppConfig bugged in edge
      • call updateComponentConfig in the meantime until updateAppConfig is fixed
    • Improve action sheet navigation
      • fixing breadcrumbs order
      • parent for nested children can be set to null initially, allows to seemlessly nest routes
      • nesting for 2 dimension was not working because parents was not set
      • added a new route for the action sheet
    • Add type to "Get Modbus Protocol" file name when downloading Excel sheet
      • Currently when downloading the Modbus protocol by the modal, the file name is "Modbus-undefined-EdgeNr".
      • Added type to modal.html so now it its "Modbus-tcp-EdgeNr".
    • Reapply chartdatalabels plugin
      • fix energy journey chart plugin, was overwritten by y_axis_title_position plugin
    • Fix storage dataset not assigned to axis
      • yAxis was not scaling according to dataset due to never having a dataset assigned
    • Improve new navigation
    • Improvements to EVSE+new navigation
      • Fix tooltips
      • Add Status Chart
      • Fix Unit in Modal (kWh -> Wh)
    • Extend alerting with fault [BETA-APP]
      • Add possibility to set fault alerting in Monitoring
    • Filters and lists style improvements
      • Updated filter and list box styles to use primary color for borders and icons in both light and dark modes.
    • Improve formly-select
  • fix: correct spelling about receiver. by @Jasonlee6789 in #3142
  • FEMS Backports 2025-05-25 by FENECON in #3144
    • Fix width of custom period on ios res
      • fix width for daterange popover, especially not working on ios-devices
    • Apply dynamicscaling to voltage y axis, remove phase-accurate from page title
      • remove phase accurate from page title of production details view header
      • add dynamic scaling to voltage yaxis of currentVoltage chart
    • Fix websocket reconnect subscribe duplicates
    • Pull to refresh dark mode adjustment
    • chartjs box to circle
      • change chartjs hover over effect and add padding between currently hovered x axis point and the shown tooltip
      • change style of legend and tooltip box to be a circle or a dashed line
      • fix refresh in live component
      • remove referencing text in storage capacity extension modal
      • fix heatingelement and evcs display errors for select and range buttons
    • Formatting Dyn-Tarif Y-axis for Percentage
      • Percentage values in the history of the dynamic tariff are displayed without decimal places to save space on mobile views and ensure consistency with other displays.
    • Cleanup alerting
    • Improve error logging to backend
      • if same message gets send multiple times (e. g. undefined errors) the number of logged messages to the backend decreases exponentially up to 1024 and from there its linear
      • added number of errors, page and version to log message
  • Fix translation key of changeComponentHint used in ModbusApiProps by @anees-ps in #3128

Version Upgrades

Read more