ITADN
OpenEMS/openems

版本发布 8

2026.2.0
? · 2026-02-01

# 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 https://github.com/OpenEMS/openems/pull/3449 * [Edge] Meter.Janitza.UMG806: cleanup after #3449 by @sfeilmeier in https://github.com/OpenEMS/openems/pull/3502 * Shelly Firmware: Check if stable version update is present by @sthhs in https://github.com/OpenEMS/openems/pull/3517 * Edge2Edge: filter undefined integer modbus values by @tcdrop in https://github.com/OpenEMS/openems/pull/3479 * Fix: Handle undefined SOC in solver strategy "Optimize by keeping all near equal" by @tsicking in https://github.com/OpenEMS/openems/pull/3516 * ControllerIoChannelSingleThresholdImpl.java: Changed inputChannel fro… by @sjjh in https://github.com/OpenEMS/openems/pull/3510 * Kostal Piko inverter: Corrected dayYield from kWh to Wh + Units of totalYield and dayYield by @sjjh in https://github.com/OpenEMS/openems/pull/3538 * New energy meter of type Hager ECR380D by @hrohmer in https://github.com/OpenEMS/openems/pull/3336 * FEMS Backports 2026-01-15 by FENECON in https://github.com/OpenEMS/openems/pull/3518 * [Edge] Evse.Controller: implement "Minimum-with-Surplus" mode [Commit](https://github.com/OpenEMS/openems/commit/56dee05aaa4c001278702155f0bb3a8a95f0ab90) * [Edge] App.Prediction.Weather: add components aliases [Commit](https://github.com/OpenEMS/openems/commit/d4d5e1e0fb23ba1fd351062abb2db5b72de05bc3) * [Edge] HTTP Bridge: improvements [Commit](https://github.com/OpenEMS/openems/commit/a062bbffc455a1622e67f3a3329c5aee6db94455) * [Edge] JSCalendar: improvements [Commit](https://github.com/OpenEMS/openems/commit/8c5d078b055f3153f776eee29c9f0708bc0d3182) * [Edge] Battery.Fenecon.Home: update register types from INTEGER to LONG for energy channels [Commit](https://github.com/OpenEMS/openems/commit/bbdc6102b918904c5d783be90387b399a2186148) * [Edge] Evse.Controller: implement "Minimum-with-Surplus" mode [Commit](https://github.com/OpenEMS/openems/commit/c43f4503f20086588a947cd470bf6f851b6ac258) * [Edge] EnergyScheduler v2: Fix regular optimization schedule [Commit](https://github.com/OpenEMS/openems/commit/6fe57f82a30a565513fa6e248289e680b3e4d11a) * [Edge] JSCalendar: implement MONTHLY recurrence [Commit](https://github.com/OpenEMS/openems/commit/32eb54d1dd470b779103ec08a5b02dfb643ad25f) * [Edge] BatteryProtection: support dynamic ForceCharge/Discharge current [Commit](https://github.com/OpenEMS/openems/commit/d781c389a0ae0d30f7645568648d6001c9a609bf) * [Edge] XmlUtils: activate SECURE_PROCESSING feature [Commit](https://github.com/OpenEMS/openems/commit/1e51ed485ad28aebe74a9410fd29bdfa4d617407) * [Edge] FENECON Commercial 100 App [Commit](https://github.com/OpenEMS/openems/commit/c19b11c555735161977261232170feac628cf2f4) * [Edge] JSCalendarApi: fix error [Commit](https://github.com/OpenEMS/openems/commit/d44ae56483b93723916e20e71404e9681babfb18) * [Edge] App.System.Fenecon.Home: Remove relay validation [Commit](https://github.com/OpenEMS/openems/commit/076d9cae7f7e3a661d1520b53bf285c0191e7771) * [Edge] EnergyScheduler v2 improvements [Commit](https://github.com/OpenEMS/openems/commit/c2780c685e381944c0a9f7088c659ed1b16ebff1) * [Edge] Move JSCalendar JSONRPC API-Routes to common [Commit](https://github.com/OpenEMS/openems/commit/891203dd370ff6feccbc5b0891e9e848b5718f05) * [Edge] EnergyScheduler v2 improvements [Commit](https://github.com/OpenEMS/openems/commit/d84daa48cd189e693d92eddeb8bdc0828d98c70d) * [Edge] QuarterlyValues: use `Instant` instead of `ZonedDateTime` [Commit](https://github.com/OpenEMS/openems/commit/84200b3aa63bc48954b101ae587cbd01b9af7a1e) * [Edge] EnergyScheduler v2 improvements [Commit](https://github.com/OpenEMS/openems/commit/5b72937b3000eed64429563095643b28b5a6ba63) * [Edge] Battery.Fenecon.Home: add registers [Commit](https://github.com/OpenEMS/openems/commit/d868f1a1ab5087ea1d1dc779e9191f980766500b) * [Edge] EnergyScheduler & TimeOfUseTariffController: resolve cyclic dependencies [Commit](https://github.com/OpenEMS/openems/commit/6ce01de0c8856acb03949c0431b14974ca9f7849) * [Edge] EnergyScheduler: Add generations counter [Commit](https://github.com/OpenEMS/openems/commit/59c6f62affe5d4eed8b43543503201638effbfe3) * FEMS Backports 2026-01-24 by FENECON in https://github.com/OpenEMS/openems/pull/3540 * [Edge] ESHv2: fix possible NPE [Commit](https://github.com/OpenEMS/openems/commit/14182b1973651a50851395788782b2d154f25d96) * [Edge] ESHv2 Time-of-Use-Tariff Ctrl DELAY_DISCHARGE fix charge from AC [Commit](https://github.com/OpenEMS/openems/commit/ace694c76a157e457ae6513ce5994b308e23b838) * [Edge] Predictors: Implement better logging [Commit](https://github.com/OpenEMS/openems/commit/47d51a57c729a046b15beebce0251291cd741aa9) * [Edge] Controller.Ess.SoH.Cycle: Implement State-of-Health Cycle Controller [Commit](https://github.com/OpenEMS/openems/commit/8f3056f3ccd89c3cc8f765288bc65a314528093b) * [Edge] JSCalendar: implement `nthOfPeriod` for monthly byDay [Commit](https://github.com/OpenEMS/openems/commit/c0e3dcc299bcf95b89bd1caaa0ab770ed0fdc726) * [Edge] Implement Grid-Buy-Soft-Limit in _meta (2) [Commit](https://github.com/OpenEMS/openems/commit/edd8dc896585c4a480b94fa1f6837def0ef4e0fb) * [Edge] App.FENECON.Home*: Bugfix for LED [Commit](https://github.com/OpenEMS/openems/commit/77c95693fbb237173583022f7d669b0cc9e138bd) * [Edge] Implement Grid-Buy-Soft-Limit in `_meta` [Commit](https://github.com/OpenEMS/openems/commit/e1806b2427cef2df22613c8449ce04a230433571) * [Edge] JSCalendar: Add Api-Routes to existing Components [Commit](https://github.com/OpenEMS/openems/commit/d2acdf66900eab7dd581e528ef5e9f4b6bb712cb) * [Edge] FENECON 100 battery inverter: add type [Commit](https://github.com/OpenEMS/openems/commit/72ae7935a7a86db508118ce8e31fa2c8aa8e3bf4) * [Edge] Battery.Fenecon.Home: fix register names [Commit](https://github.com/OpenEMS/openems/commit/199a75ea4df4a905e8a30eb4680fe759a81a5b2a) ## OpenEMS UI * Adjust large screen widget size based on nav position by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3354 * Fix: Pull-to-Refresh not working by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3531 * [UI] Use Angular property binding for SVG fill attribute by @sfeilmeier in https://github.com/OpenEMS/openems/pull/3542 * Fixed copy-paste bug - was subWeeks instead of subMonths/subYears by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3541 * FEMS Backports 2026-01-15 by FENECON in https://github.com/OpenEMS/openems/pull/3518 * [UI] formly-range-type: set default value [Commit](https://github.com/OpenEMS/openems/commit/040fedf536574c9814294a84444e6d88c5b21306) * [UI] IBN: add configuration for alerting [Commit](https://github.com/OpenEMS/openems/commit/fa8f22d48220d1ccfc070e1354be570129c3f148) * [UI] Add validator for first- and last-name fields [Commit](https://github.com/OpenEMS/openems/commit/249ecc23a4bb114d3e2212a10de985b27d02632f) * [UI] eslint-rule `json-no-duplicate-keys` [Commit](https://github.com/OpenEMS/openems/commit/84d0040543a43f81c1e300c0b472c0559d0035fd) * [UI] App Center: fix display of registered keys [Commit](https://github.com/OpenEMS/openems/commit/bf78c1c90be76d2c797a9d15ec2d58174c230c17) * [UI] fix redirects [Commit](https://github.com/OpenEMS/openems/commit/252aada3bfa1fc77f9e5c89a9c181fe75f764e55) * [UI] improve oauth flow [Commit](https://github.com/OpenEMS/openems/commit/2a5d4752f73476ddf548eea586a0ffc683e32eef) * [UI] Fix user back button [Commit](https://github.com/OpenEMS/openems/commit/333ec4df0cdfaea6607bf84febf22d162df3e8f0) * [UI] Settings | Systemlog: fix toggle [Commit](https://github.com/OpenEMS/openems/commit/babf993d459683b1e43fb9b87ebaef157eab9249) * [UI] OAuth for android app [Commit](https://github.com/OpenEMS/openems/commit/4967d6543084d54bfe973d5a4852deb21db1ea34) * [UI] OAuth implementation [Commit](https://github.com/OpenEMS/openems/commit/b65ff7e20caa18b0d5ae5a847a9ba4b4cb834144) * [UI] Spinner for excel export [Commit](https://github.com/OpenEMS/openems/commit/b09b76f1bbd253a879b1e33d9b0d0efb3c0022c1) * FEMS Backports 2026-01-24 by FENECON in https://github.com/OpenEMS/openems/pull/3540 * [UI] Fixed style issue with formly serial number fields. [Commit](https://github.com/OpenEMS/openems/commit/ce7842ecc831b7bffbeee7570a7a4b3d73e1ce09) * [UI] EVSE: Only show Phase-Switch for KEBA P40 [Commit](https://github.com/OpenEMS/openems/commit/165e3cd08fe3afca44dcb94413c6c0594c5bb061) * [UI] fix channels subscribe [Commit](https://github.com/OpenEMS/openems/commit/eb88572ece59d24363b15d1cf267d5ecdfb34ce5) * [UI] Fixes for mobile UI [Commit](https://github.com/OpenEMS/openems/commit/27cee46537eca40e281e2f931d08b2af3d040806) * [UI] fix for missing sum state on live page [Commit](https://github.com/OpenEMS/openems/commit/1222dd2d6d8b57e22db682d9740682ae454361ac) * [UI] /overview: release sort order for owner [Commit](https://github.com/OpenEMS/openems/commit/35489d06ece7249e85e5c958dad7495a40e6187c) ## OpenEMS Backend * FEMS Backports 2026-01-15 by FENECON in https://github.com/OpenEMS/openems/pull/3518 * [Backend] Fix setting AlertingSettings for customers [Commit](https://github.com/OpenEMS/openems/commit/5eb3ea9f84a9662cb1aefc1b41450d490f103822) * [Backend] Backports [Commit](https://github.com/OpenEMS/openems/commit/8d64a8919d970d6f52b49456a1b452646d45a81c) * **Implement Edge.Manager; Drop EdgeWebsocket -> allows load balancing** -> BREAKING: This requires changes to Backend infrastructure, as it allows separating Backend to multiple servers. * OAuth via KeyCloak -> This splits the authentication process into OAuth via KeyCloak and Odoo * Add settings to GetEdges * Moved role from user object to metadata * Extend Odoo Filter * Backend.Edge.App: add histogram metrics to requests * Aggregated-InfluxDB: increase allowed Component-IDs for EVSE and EVCS * Add ElectricityMeter Channels for `io`s * MetadataOdoo: handle uncached Edges * Remove UiWebsocketValidator * Dummy AppCenter Metadata * [Backend] Mitigate possible regex backtracking [Commit](https://github.com/OpenEMS/openems/commit/3570e05a31c18f80dc1823e050fe7f2d48ac7dbf) * FEMS Backports 2026-01-24 by FENECON in https://github.com/OpenEMS/openems/pull/3540 * [Backend] add executor for refresh token [Commit](https://github.com/OpenEMS/openems/commit/d30fa2fd2d55014542ea44ff00b3fabe5351e701) * [Backend] update odoo refresh admin token [Commit](https://github.com/OpenEMS/openems/commit/a2109ebf53776536589ef6a18a0955ec7774a928) * [Backend] Metadata.Odoo: reuse session token [Commit](https://github.com/OpenEMS/openems/commit/92fd1c0ae500a834d9d97393b2b3287efd93a2f6) * [Backend] add tags to odoo user [Commit](https://github.com/OpenEMS/openems/commit/1eec638f9e678a8b953b7bd27ee71c6bcfda2607) ## Common/General * Update architecture.adoc: fixed ul within section process image by @sjjh in https://github.com/OpenEMS/openems/pull/3490 * Update device_service.adoc: corrected title & added services by @sjjh in https://github.com/OpenEMS/openems/pull/3489 * extends docu on Dynamic Documentation Generation, Natures (incl. ESS & IO) by @janklostermann in https://github.com/OpenEMS/openems/pull/3488 * Update readme.adoc: corrected formatting for ul by @sjjh in https://github.com/OpenEMS/openems/pull/3498 * Fix GitHub link in readme.adoc by @janklostermann in https://github.com/OpenEMS/openems/pull/3508 * Introduce integration tests by @parapluplu in https://github.com/OpenEMS/openems/pull/3319 * Update readme.adoc: added link to documentation by @sjjh in https://github.com/OpenEMS/openems/pull/3511 * Add explanation of abbrevation CHP in readme.adoc by @janklostermann in https://github.com/OpenEMS/openems/pull/3507 * improve formatting in nature.adoc by @janklostermann in https://github.com/OpenEMS/openems/pull/3506 * Update readme.adoc: added limitation regarding UI pwd by @sjjh in https://github.com/OpenEMS/openems/pull/3204 * Update readme.adoc: added docu how to use (ancillary costs) by @sjjh in https://github.com/OpenEMS/openems/pull/3225 * Update deploy.adoc: corrected ul formatting by @sjjh in https://github.com/OpenEMS/openems/pull/3543 * FEMS Backports 2026-01-15 by FENECON in https://github.com/OpenEMS/openems/pull/3518 * [Common] Checkstyle: check test files [Commit](https://github.com/OpenEMS/openems/commit/6a5d52cc0f347d95091420cb5b97810ffa4e314c) * [Common] Tools: read version from package.json or OpenemsConstants.java [Commit](https://github.com/OpenEMS/openems/commit/d0d77e777c3cb60becf8522ec124ed2199536fd4) * [Common] Fix `prepare-commit.sh` script [Commit](https://github.com/OpenEMS/openems/commit/955dedd4500271e836da18d9169918c2e485cdcd) * FEMS Backports 2026-01-24 by FENECON in https://github.com/OpenEMS/openems/pull/3540 * [Edge/Backend] Various Cleanups [Commit](https://github.com/OpenEMS/openems/commit/8c3a0dc3c5fdd608788bbf66c2a22096f24dd957) ## Version Upgrades * [UI] Update to latest LTS: Node 24, NPM 11 [Commit](https://github.com/OpenEMS/openems/commit/d0b39c8e471f42fcece986cacebb5356b441bf38) * Update bnd to 7.2.1 [Commit](https://github.com/OpenEMS/openems/commit/7964f97d1d13708634e779afc07278b7cd6739a3) * Update Gradle to 9.3.0 by @sfeilmeier in https://github.com/OpenEMS/openems/pull/3529 * Bump org.jmdns:jmdns from 3.6.2 to 3.6.3 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3495 * Bump org.jsoup:jsoup from 1.21.2 to 1.22.1 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3496 * Bump org.rrd4j:rrd4j from 3.9 to 3.10 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3504 * Bump org.junit.jupiter:junit-jupiter-api from 6.0.1 to 6.0.2 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3503 * Bump net.bytebuddy:byte-buddy from 1.18.3 to 1.18.4 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3525 * Bump com.google.protobuf:protobuf-java from 4.33.2 to 4.33.4 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3524 * Bump the influxdb group in /cnf with 4 updates by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3519 * Bump org.postgresql:postgresql from 42.7.8 to 42.7.9 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3523 * Bump com.auth0:auth0 from 2.22.0 to 3.0.0 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3521 * Bump com.fasterxml.jackson.core:jackson-annotations from 2.19.2 to 2.20 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3522 * Bump @angular/core from 20.3.15 to 20.3.16 in /ui by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3514 * Bump com.fasterxml.jackson.core:jackson-annotations from 2.20 to 2.21 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3537 * Bump urllib3 from 2.5.0 to 2.6.3 in /tools/integration_tests by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3528 * Bump lodash from 4.17.21 to 4.17.23 in /ui by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3536 * Bump lodash-es from 4.17.21 to 4.17.23 in /ui by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3535 * Bump com.google.protobuf:protobuf-java from 4.33.4 to 4.33.5 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3549 * Bump org.objenesis:objenesis from 3.4 to 3.5 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3548 * Bump hono from 4.11.4 to 4.11.7 in /ui by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3546 ## New Contributors * @hrohmer made their first contribution in https://github.com/OpenEMS/openems/pull/3336 **Full Changelog**: https://github.com/OpenEMS/openems/compare/2026.1.0...2026.2.0****

2026.1.0
? · 2026-01-01

# 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 https://github.com/OpenEMS/openems/pull/3268 * Update docker.adoc: added hint & link to influxdb deployment by @sjjh in https://github.com/OpenEMS/openems/pull/3201 ## OpenEMS Backend * FEMS Backports 2025-12-17 in https://github.com/OpenEMS/openems/pull/3471 * Add settings to GetEdges [Commit](https://github.com/OpenEMS/openems/commit/9f6404233290d48a6316293c5d10b1ea4d08fe76) ## OpenEMS Edge * Implement OpenWB Series 2 EVCS by @sthhs in https://github.com/OpenEMS/openems/pull/3299 * Add support for Janitza UMG801 by @schiegg in https://github.com/OpenEMS/openems/pull/3451 * Janitza Meters: cleanup implementations by @sfeilmeier in https://github.com/OpenEMS/openems/pull/3454 * Add MQTT bridge implementation for OpenEMS Edge by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3458 * Controller Timeslot Peakshaving: Avoid endless while loop by @tsicking in https://github.com/OpenEMS/openems/pull/3464 * fixed Kostal Piko HTML parsing bug: kWh for Total Energy in HTML, instead of expected Wh in ActiveProductionEnergy by @janklostermann in https://github.com/OpenEMS/openems/pull/3465 * Add Single Channel datasource for dynamic simulation input by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3448 * Kostal Plenticore: correct and simplify smartmode by @iseeberg79 in https://github.com/OpenEMS/openems/pull/3417 * Refactor openwb mqtt by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3467 * Implement SMA STP-10.0 SE Hybrid ESS by @tsicking in https://github.com/OpenEMS/openems/pull/2618 * [Edge] Update GermanDSO: zeitvariable Netzentgelte §14a Modul 3 for 2026 by @sfeilmeier in https://github.com/OpenEMS/openems/pull/3473 * Implements VirtualMeter on PvInverterCluster by @chpoulter in https://github.com/OpenEMS/openems/pull/3085 * [Edge] Add support for SDM72D-M-2 meter by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3491 * Add Victron Package by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3457 * Update bnd to 7.2.0 by @sfeilmeier in https://github.com/OpenEMS/openems/pull/3494 * FEMS Backports 2025-12-17 in https://github.com/OpenEMS/openems/pull/3471 * App.Evcs.Keba: fix ReadOnly in EVSE [Commit](https://github.com/OpenEMS/openems/commit/243fc0e592df55cb841a1e1ad9605e302f4c4c4c) * App.System.Fenecon.Home: Control State-LED [Commit](https://github.com/OpenEMS/openems/commit/6c931a45dd5d15e418cdfc677b19811cd5b61694) * Battery.Fenecon.Home: Change Prio for Softwareversion and NumberOfModulesPerTower [Commit](https://github.com/OpenEMS/openems/commit/82dfe30e3783b6e2c7ab9ba5d63429fa2fa7085e) * App.FENECON.Commercial.50.Gen3: add compatibility with App.PeakShaving.* [Commit](https://github.com/OpenEMS/openems/commit/a947f1668dec3bba1a7d9289567e0753e054dbfc) * GoodWe.BatteryInverter: improvements to MaxAcImport/Export [Commit](https://github.com/OpenEMS/openems/commit/b62e80b19b831a64648d0ce828016e1b80f146b5) * Core.AppManager: force updating configs of components [Commit](https://github.com/OpenEMS/openems/commit/bae5e3825859cc1008e3943560c0018ea731d18f) * Core.Energy: handle TimeOfUse-Reference is null [Commit](https://github.com/OpenEMS/openems/commit/5709cbe77b1b8fffd86aef708d22521232805597) * App.FENECON.Commercial.92: add missing property default value [Commit](https://github.com/OpenEMS/openems/commit/01cc782be9fe9fd7d2d995fe0a737f126dc965c2) * Energy Scheduler v2: handle non available prices & predictions [Commit](https://github.com/OpenEMS/openems/commit/611b2dc3530c6a1b2b73713c2a987d4789438978) * Fix Eclipse Infos and Warnings [Commit](https://github.com/OpenEMS/openems/commit/9e3549296dae184c7294b9609701bf83f6d48886) * Controller.Ess.Time-Of-Use-Tariff: fix PID filter fluctuation in DELAY_DISCHARGE [Commit](https://github.com/OpenEMS/openems/commit/15639504717b2dc8b05353757e59f8bcec643a2d) * Evse.Controller.Single: implement `getTask` and `getOneTasks` [Commit](https://github.com/OpenEMS/openems/commit/0cb2960a70eddf9aaed72133fba49dd58f86a068) * Battery.BMW: Improvements to go-stopped-handler [Commit](https://github.com/OpenEMS/openems/commit/fce59e06895bcbee8ed81b8010e7f9fd8005baa2) * Energy Scheduler v2 with EVSE [Commit](https://github.com/OpenEMS/openems/commit/7e107c561bcc703bf73d0873bf51642ea6c04f4a) * Ess.Power: improve "Keep all near equals" solver [Commit](https://github.com/OpenEMS/openems/commit/701d7b839d8ed6023bddfb3d4f15f4a8bc8f50ba) * AppCenter: remove has ac meter (Home 10, 20 & 30) [Commit](https://github.com/OpenEMS/openems/commit/0853f9872bb09d02ecd7b53ab9aa9be27457cace) * IO.Shelly.*: validate compatibility with hardware type [Commit](https://github.com/OpenEMS/openems/commit/b15f21b54a9aea0258cdb15fee0d6d018a9301fb) * EVCS App Center: hide ARCHITECTURE_TYPE [Commit](https://github.com/OpenEMS/openems/commit/01f3417ec36e76e2da4682e8c304b06ea0fe92eb) * GoodWe.BatteryInverter: fix writing WBMS_DISCHARGE_MAX_CURRENT [Commit](https://github.com/OpenEMS/openems/commit/626d75d0408019e82a158c08d441275a89294487) * GoodWe.Charger.Mppt.Two-String: MPPT 5-8 available in components [Commit](https://github.com/OpenEMS/openems/commit/e1c40b81fdcce5eea8f1baa1128e17ec56873137) * EVSE JSCalendar JSON-RPC: Add properties lastChangeAt and lastChangeBy [Commit](https://github.com/OpenEMS/openems/commit/dfcb3d765f22d0e729bf31b760689422a4d300b5) * Tribuo: Allow only severe logging [Commit](https://github.com/OpenEMS/openems/commit/d6d8a2ddf1f1ec7c60a72a10a2bc3d94b0f20bd0) * Fix develop branch [Commit](https://github.com/OpenEMS/openems/commit/26101a86389fa47d9985e38440aef76fc682fea9) * Energy Scheduler v2 with EVSE [Commit](https://github.com/OpenEMS/openems/commit/e0ecd4d7e00d2d7c80a2a09d877842bc0594c55a) * Switch EVCS to EVSE and back via App Center [Commit](https://github.com/OpenEMS/openems/commit/aa4ba41a61d7c62274a0ba3c5eda04c58d7bfa6d) * Add "App.Prediction.UnmanagedConsumption" [Commit](https://github.com/OpenEMS/openems/commit/40abca61253c3170242da94d2fc16f4f9e9ebd8c) * Predictor Production Regression Model v2 [Commit](https://github.com/OpenEMS/openems/commit/f345a0c7e6f6ca981d429653f6be0c749ddac130) * Industrial L: product update [Commit](https://github.com/OpenEMS/openems/commit/3dda988f183f20efc247f426e7a22d801a336336) * Industrial: Janitza GridMeter for Industrial L and XL [Commit](https://github.com/OpenEMS/openems/commit/41f3d8713c0de0042de0afd27639842a998a4fa4) * Predictor.ProfileClusteringModel: fix daylight saving time change error [Commit](https://github.com/OpenEMS/openems/commit/76952c042fde0fdbf7aeb6ef1c23a1f670a9ae1c) * Energy Scheduler v2: remove internal Cache [Commit](https://github.com/OpenEMS/openems/commit/df93e36030621b2ad7e59c6625d68b5f9c031a29) * Improvements to EVSE and JSCalendar [Commit](https://github.com/OpenEMS/openems/commit/90290370df2022157bd91d0200e34593916021d7) * Controller.Clever-PV: fix for readOnly error [Commit](https://github.com/OpenEMS/openems/commit/a08857ed1c73b7c206f77390b202fea3db27a756) * Improve Ancillary Services [Commit](https://github.com/OpenEMS/openems/commit/14b8aca68d7edfe4d2c815d0a6305656b2331dba) * Switch E Mobility Architecture [Commit](https://github.com/OpenEMS/openems/commit/ed6ac4487833f22fbb233e9849fc3250bea06022) ## OpenEMS UI * UI bugfix: Fix Log auto unsubscribe + SystemExecute formatting by @da-Kai in https://github.com/OpenEMS/openems/pull/3378 * Enhance breadcrumbs with pointer cursor style by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3413 * FEMS Backports 2025-12-17 in https://github.com/OpenEMS/openems/pull/3471 * EVSE: manual energy schedule [Commit](https://github.com/OpenEMS/openems/commit/084cf87e29452148a003a2f871edb137551876a7) * Edge Settings [Commit](https://github.com/OpenEMS/openems/commit/f311ad3dfa4323bc44e982dfb6c4a2f55f3656e6) * New status icons and adjustments for other icons [Commit](https://github.com/OpenEMS/openems/commit/2e0dc3da7c119442283feff8aee00ba6879a13f1) * Charts: hide unused axes; bugfix [Commit](https://github.com/OpenEMS/openems/commit/e0ff2453524da3a95e4570d5bd56cac93724bb27) * EN-Buttons translation [Commit](https://github.com/OpenEMS/openems/commit/4418014ac864a1655900c4fc15506f123057acaf) * Manual UI backport [Commit](https://github.com/OpenEMS/openems/commit/063625cd0e5a975a8188ce7e8c2738e211209c9e) * Switch E Mobility Architecture [Commit](https://github.com/OpenEMS/openems/commit/ed6ac4487833f22fbb233e9849fc3250bea06022) ## 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 https://github.com/OpenEMS/openems/pull/3462 * Bump net.bytebuddy:byte-buddy from 1.18.1 to 1.18.2 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3461 * Bump the bouncycastle group in /cnf with 2 updates by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3460 * Bump actions/setup-node from 5 to 6 in /.github/workflows by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3373 * Bump de.bytefish:pgbulkinsert from 8.1.6 to 8.1.8 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3470 * Bump @angular/common from 20.3.10 to 20.3.14 in /ui by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3446 * Bump com.google.protobuf:protobuf-java from 4.33.1 to 4.33.2 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3469 * Bump org.mockito:mockito-core from 5.20.0 to 5.21.0 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3475 * Bump org.jetbrains.kotlin:kotlin-osgi-bundle from 2.2.21 to 2.3.0 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3481 * Bump the tribuo group in /cnf with 2 updates by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3480 * Bump actions/download-artifact from 6 to 7 in /.github/workflows by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3478 * Bump actions/cache from 4 to 5 in /.github/workflows by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3477 * Bump actions/upload-artifact from 5 to 6 in /.github/workflows by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3476 * Bump net.bytebuddy:byte-buddy from 1.18.2 to 1.18.3 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3492 ## New Contributors * @schiegg made their first contribution in https://github.com/OpenEMS/openems/pull/3451 **Full Changelog**: https://github.com/OpenEMS/openems/compare/2025.12.0...2026.1.0

2025.12.0
? · 2025-11-30

# 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 https://github.com/OpenEMS/openems/pull/3403 * CI: Add explicit `common_test` command [Commit](https://github.com/OpenEMS/openems/commit/d4fd100c34cc3d3935572da1093a27cd14fb27e2) * CI: Update build scripts [Commit](https://github.com/OpenEMS/openems/commit/615872e8597ebce39b9064a31b5763a5a203c937) * VSCode: specify default indentation [Commit](https://github.com/OpenEMS/openems/commit/307c15e5355f65bced88a1d6b1e1c6a89bb690d6) * Update build scripts [Commit](https://github.com/OpenEMS/openems/commit/20d9b8e01c401fca088b4dca4d07aef6fc43e76b) * Update build scripts [Commit](https://github.com/OpenEMS/openems/commit/cae466bd049340ab8c2ede6debaf1e447f7f231d) * Docs: fix broken link and typos by @deining in https://github.com/OpenEMS/openems/pull/3398 * CI: Fix antora build by @da-Kai in https://github.com/OpenEMS/openems/pull/3418 * Gradle: Fix `buildBackend` by @da-Kai in https://github.com/OpenEMS/openems/pull/3424 * Docs Architecture: Update Cycle component reference by @Eual11 in https://github.com/OpenEMS/openems/pull/3439 * Docs Docker: improve documentation by @akshith30388 in https://github.com/OpenEMS/openems/pull/3412 * Docker: prevent "Interrupted system call" when writing to `/etc/apk/repositories` by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3368 ## OpenEMS Backend * FEMS Backports 2025-11-09 in https://github.com/OpenEMS/openems/pull/3403 * Extend Odoo Filter [Commit](https://github.com/OpenEMS/openems/commit/621f1b3e484349a6a5cc42c86b80e50d27f7d403) * Aggregated-InfluxDB: increase allowed Component-IDs for EVSE and EVCS [Commit](https://github.com/OpenEMS/openems/commit/063171989aeec811f7761cc933853ec9a9f29bbb) * Add ElectricityMeter Channels for `io`s [Commit](https://github.com/OpenEMS/openems/commit/05b992967a52c9659f557daffa92e9f3417160a9) * OAuth2 Registry support [Commit](https://github.com/OpenEMS/openems/commit/83a43ba0fbcde71203070366e8f24a806f3be95a) ## OpenEMS Edge * FEMS Backports 2025-11-09 in https://github.com/OpenEMS/openems/pull/3403 * App Manager: ComponentTask with Component Record [Commit](https://github.com/OpenEMS/openems/commit/596551f6a4523b49ace27da949e5ab5f570c6b45) * DynamicDocText: fix failed Test [Commit](https://github.com/OpenEMS/openems/commit/eaa75ff9c27c4a22bbcc845b39d4c0a17fce7c9a) * Evcs.Abl: implement ABL eM4 charging station (read-only) [Commit](https://github.com/OpenEMS/openems/commit/789cabfd505ba12492160c09769bd70cfb0bad5b) * TimeOfUseTariff.OctopusGo/Heat: add ancillaryCosts (variable Netzentgelte) [Commit](https://github.com/OpenEMS/openems/commit/354cf3d36e1d06d065dff2519aee0639913b79cc) * Ess.Generic.ManagedSymmetric: Add State Runtime Channels [Commit](https://github.com/OpenEMS/openems/commit/e7cba4fc965dc5d8674011eaca244c9c44bc5534) * Standardise ErrorAcknowledgeRpc & implement for Industrials [Commit](https://github.com/OpenEMS/openems/commit/c441bae8332bfbee80d8e44bb510179a290ec269) * fix component not found for default id [Commit](https://github.com/OpenEMS/openems/commit/c77ad0507e132c52be8e225a8920257b3bba5a35) * Temporary fix for failing JUnit test [Commit](https://github.com/OpenEMS/openems/commit/94ec2047e7d09266c7d670d1940f9169f713017b) * Evcs.HardyBarth: improvements [Commit](https://github.com/OpenEMS/openems/commit/f46c51fb1755a00b65b7a7b4a58ded4957108b7d) * GoodWe.BatteryInverter: adjust notification in State [Commit](https://github.com/OpenEMS/openems/commit/9ac42013ecee70adbb77d576cd584359b1880f8b) * update translation key [Commit](https://github.com/OpenEMS/openems/commit/ac7a7c18a3e5f5c4fe6544f4eddc75f50d646a3d) * JSCalendar for Time-of-Use-Tariffs: fix clock issue [Commit](https://github.com/OpenEMS/openems/commit/ed1190ce0ac7e6b453c059258fdaf4c55725575d) * Controller.IO.HeatingElement: fix NPE in JUnit test [Commit](https://github.com/OpenEMS/openems/commit/36dc83774474f7938a8c434157f4af92debd40de) * EnergyScheduler v2: temporary fix for JUnit tests [Commit](https://github.com/OpenEMS/openems/commit/9273f74bcf553efc0ea4d175f3916a890bac781d) * JSCalendar improvements [Commit](https://github.com/OpenEMS/openems/commit/90a60d9b3aaff21943ead38dfbcdfcbe68d93249) * FENECON Commercial 50: update grid mode mapping [Commit](https://github.com/OpenEMS/openems/commit/7552f1b302826e4ae9871505249edc59d4196807) * Weather.OpenMeteo: fix channel persistence after restart [Commit](https://github.com/OpenEMS/openems/commit/b255fa0e230f2b8eac358465ee61dc005c0b66ff) * App.TimeOfUseTariff: add compatibility with App.FENECON.Commercial.92.ClusterMaster [Commit](https://github.com/OpenEMS/openems/commit/2a95c258c7364616f3ee5c092c69b303c5024e9a) * FENECON Industrial L: Extend System Component with Janitza Grid-Meter (TCP) [Commit](https://github.com/OpenEMS/openems/commit/d989b6258635bcb463f74e4a422b22a8289f596f) * TimeOfUseTariff.ENTSO-E: improve parsing [Commit](https://github.com/OpenEMS/openems/commit/2924cec36cb64c4ee80a69eda4569ecf416e0afd) * EVSE + KEBA P40 / P30+S10: implement forced Phase-Switching [Commit](https://github.com/OpenEMS/openems/commit/23db377819d7c5b73645d557995e4f795b4f2592) * App.Prediction.Weather: move to 'API' category + do not require owner role [Commit](https://github.com/OpenEMS/openems/commit/1155cc204a9e65206409391df78d9a13f9607a40) * Core.AppManager: improve timeouts & error messages [Commit](https://github.com/OpenEMS/openems/commit/70049484f577776f30ebd8c2183cd1155f3f61a4) * Predictor.ProfileClusteringModel: improve error handling [Commit](https://github.com/OpenEMS/openems/commit/73a3e356aa147e61c8171b1f8086230ff9951cde) * TimeOfUseTariff.ENTSO-E: fix query for DE_LU and AT [Commit](https://github.com/OpenEMS/openems/commit/3e6d74d3e6f23b0774f49483cc1b4f7a2da06f09) * Core.SerialNumber: decrease timeout for persisting serial numbers [Commit](https://github.com/OpenEMS/openems/commit/469fb73251410a28ff0f8e01d7be9e445769e76c) * GoodWe Max Charge/Discharge Power bugfix for old devices [Commit](https://github.com/OpenEMS/openems/commit/b064b672f5241bf8ce584eef6dc5a9489338f608) * AppCenter: Weather App [Commit](https://github.com/OpenEMS/openems/commit/625b57c71e86cd0235b02e7b705a3f57d19b21f8) * Improve App installation speed [Commit](https://github.com/OpenEMS/openems/commit/b08f3eb31e99bc6ddf80147eafbe59bc750281e8) * Energy-Scheduler v2: improvements [Commit](https://github.com/OpenEMS/openems/commit/c92986e397a4510fd6d1f29b3ca69fbfee0d7458) * Battery.Fenecon.Home: fix software versions [Commit](https://github.com/OpenEMS/openems/commit/603bc7268d14b11dfc967661b2a5bdc7bb998943) * Weather.OpenMeteo: fix timezone handling [Commit](https://github.com/OpenEMS/openems/commit/1745285605378876e4377c97e5ee760d3eefd84c) * ENTSO-E: default to QUARTERLY resolution [Commit](https://github.com/OpenEMS/openems/commit/e6597f14944f66900030964c13887b6f94bc9f6d) * App.FENECON.ProHybrid.10 [Commit](https://github.com/OpenEMS/openems/commit/180a268b90a7b16db0d50b79412e99785c0acc8d) * TimeOfUseTariff LUOX Energy [Commit](https://github.com/OpenEMS/openems/commit/bfacb5e7c57addaba8dba2640d2c6cb79f599d3d) * Kostal + Samsung: update usage of HTTP Bridge [Commit](https://github.com/OpenEMS/openems/commit/f2b385451a04a1f979a15c07815819e5e1860ec5) * OAuth2 Registry support [Commit](https://github.com/OpenEMS/openems/commit/83a43ba0fbcde71203070366e8f24a806f3be95a) * EWS Schönau: TimeOfUseTariff implementation by @Bockhorn-IT in https://github.com/OpenEMS/openems/pull/3302 * Predictor.LSTM: improve robustness and testing by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3402 * Ess.Power: fix possible problems in calculation of ApparentPower constraints by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3401 * OsgiValidateWorker: only validate OpenemsComponents by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3419 * FEMS Backports 2025-11-25 in https://github.com/OpenEMS/openems/pull/3440 * Energy Scheduler v2: EVSE Cluster [Commit](https://github.com/OpenEMS/openems/commit/8a9c5fbd5860d94408e955943d5f041508b25517) * Shelly Plug: RelayContactFilter + smart `invert` [Commit](https://github.com/OpenEMS/openems/commit/0df95315f5d896225f20ceae327443bcae6b1144) * FENECON Commercial 92: add GridCode setting [Commit](https://github.com/OpenEMS/openems/commit/5c78987b77851b16275ed8259e294c834d3a5c56) * Ess.Power: fixed PID filter [Commit](https://github.com/OpenEMS/openems/commit/0250a179eb1ae201b24b627853efeac596033f4c) * Plus Plug S, Plug S Gen3, Outdoor Plug S Gen3 [Commit](https://github.com/OpenEMS/openems/commit/303a64ca5b91387134421ea3f6188f756d665dd8) * Energy Scheduler v2 improvements [Commit](https://github.com/OpenEMS/openems/commit/08cd8cad3dc33af3dd8272395cbc1115afdc727a) * EnergyScheduler v2: refactor EnergyFlow [Commit](https://github.com/OpenEMS/openems/commit/0fc0470e54169b3293aabcab224647c685f1ce8e) * EWS Schönau ToU: release for Admins [Commit](https://github.com/OpenEMS/openems/commit/8d3088c2aa0e93c7d65eaa14cfa27d5786c40dc9) * Clever-PV / EnerixControl: code cleanup and refactorings [Commit](https://github.com/OpenEMS/openems/commit/9d45d08b6cbe7c0e92331953bddb602e9eaaf253) * Controller.Api.ModbusTcp: activate j2mod TCP Connection Idle timeout [Commit](https://github.com/OpenEMS/openems/commit/4921fb038bc2e6568272d370553fc6470cd8476b) * OpenCage Geocoding: fix place name mapping [Commit](https://github.com/OpenEMS/openems/commit/0e485efa9f05a5a64a287c8048f9026fd155011d) * Update j2mod and jSerialComm [Commit](https://github.com/OpenEMS/openems/commit/0c54a2eb5a75024f09390f3c275c85a9f5c1afac) * Evcs.HardyBarth: fix setting Heartbeat and Chargemode [Commit](https://github.com/OpenEMS/openems/commit/57a71204f0438275d45bd9022a9ea718229b812e) * App.Cloud.EnerixControl: add mode CHARGE_FROM_GRID [Commit](https://github.com/OpenEMS/openems/commit/a2bd94859faa18b71b2ef009acf305c3b7142b1d) * FEMS Backports 2025-11-30 in https://github.com/OpenEMS/openems/pull/3453 * FEMS App Shelly DIY: public release [Commit](https://github.com/OpenEMS/openems/commit/7c567507c87679962de64ecef950f5cb212129f4) * JSCalendar: implement GetOneTasks JSONRPC [Commit](https://github.com/OpenEMS/openems/commit/a76741957dc39b817608622685206e0392949d89) ## OpenEMS UI * FEMS Backports 2025-11-09 in https://github.com/OpenEMS/openems/pull/3403 * Fix formly-select with exactly one item [Commit](https://github.com/OpenEMS/openems/commit/11f4a52929441926fc13f7161eb30b3ad86be759) * EVCS Controller: fix readOnly modal [Commit](https://github.com/OpenEMS/openems/commit/ad0b5df37831cbf396378eb1aa41cc181fa70836) * filter addition [Commit](https://github.com/OpenEMS/openems/commit/97bf6c52a07a864a31758325ad41b6da075ec9fa) * Add Filter to App Center Main Page [Commit](https://github.com/OpenEMS/openems/commit/26a5a6acbaa4a45b1e26599ecd255fd3cf4a1540) * IBN: Add images to "select" options in Feed-In-Limit fields [Commit](https://github.com/OpenEMS/openems/commit/9684aaa2ed539404dc3a03c71fccfe865432c8fa) * Display Battery / Inverter in storage live [Commit](https://github.com/OpenEMS/openems/commit/0459bb29def1d421c8b0fae6d18dcd9e8920f273) * Overview: add filter [Commit](https://github.com/OpenEMS/openems/commit/81d3b8cf483b8b88f6ba504439ab557e8f07fe77) * Enforce 4 indentation on ts files [Commit](https://github.com/OpenEMS/openems/commit/0fa4564887bc6dffa6e62178b32967061a0587d3) * Weather popover: use different images per language [Commit](https://github.com/OpenEMS/openems/commit/2eec01bdab03c022377d3da59221d40e559fc7f7) * add unit test for stringutils.isNotInArr [Commit](https://github.com/OpenEMS/openems/commit/3228f47d3ad49cea350c67edb670cd7ec8e6407d) * UPPER_SNAKE_CASE for translation keys [Commit](https://github.com/OpenEMS/openems/commit/c1149f6908d7e0467f46f4e36b3f10beeea54893) * Fix consumption filter for evcs cluster [Commit](https://github.com/OpenEMS/openems/commit/9956fc563f6ab589f0bd379f27e1c103df479aa3) * Weather Widget: fix for zero sunhours [Commit](https://github.com/OpenEMS/openems/commit/dcfe2d8617b0a0fc90ebcd1c4ce9320b7d4ae3a0) * formly-field-modal: add missing fields [Commit](https://github.com/OpenEMS/openems/commit/38a34c8fb966b042d0b6e3edbfa0333788fef3a2) * New Navigation: refactor Consumption [Commit](https://github.com/OpenEMS/openems/commit/19b8af1b4c7707fcf2d0609402dddf17f1f80efe) * Weather widget standalone [Commit](https://github.com/OpenEMS/openems/commit/2efeff6bcbaeacd1799601b5368cf059a8b2194c) * Weather App UI Popover [Commit](https://github.com/OpenEMS/openems/commit/f5fbfa4ad793a89cfb784f7bd069cf745431184b) * Add Weather popover [Commit](https://github.com/OpenEMS/openems/commit/d0b8e223dd2043f2524de4125f0178c37a331331) * App Center: fix key preview [Commit](https://github.com/OpenEMS/openems/commit/f5c917f249a9969a1edd9224c0517a309bf978dc) * handle chunk loading failed exception [Commit](https://github.com/OpenEMS/openems/commit/fcece16f4a3549733ca5777ebd72c33b3c19e797) * Fix arrow buttons background [Commit](https://github.com/OpenEMS/openems/commit/ddb0835eb3c0d312bc614d1f21a4f5d9611bf5cf) * New Navigation: refactoring of common navigation nodes [Commit](https://github.com/OpenEMS/openems/commit/9fdd3c07d07a4c441acb45dea786a26d4bab3013) * [WCAG 3.2.2] Refactor evcs cluster modal [Commit](https://github.com/OpenEMS/openems/commit/96738e0a7cfe0c78dc0dd09920fe18ca865f8238) * EVCS: fix calculation of history total other consumption [Commit](https://github.com/OpenEMS/openems/commit/5bc03ec49870405c8a3cd5b854a7d8840d9e3906) * Help buttons for formly Modals [Commit](https://github.com/OpenEMS/openems/commit/eb516e1a3aa5c003bfae74dcc705f1e9291ac3ea) * Fix subscribes/unsubscribes [Commit](https://github.com/OpenEMS/openems/commit/3f6b9b8c475d4d8788f339f74fe9ca9e9a3c869a) * Off-Grid History: fix display [Commit](https://github.com/OpenEMS/openems/commit/26c1cec6f70a3fbf6a2c1f974115523813376266) * TimeOfUseTariff LUOX Energy [Commit](https://github.com/OpenEMS/openems/commit/bfacb5e7c57addaba8dba2640d2c6cb79f599d3d) * Fix Backend URL for edge-dev environment by @Venkata-Sai-Vishwanath-robo in https://github.com/OpenEMS/openems/pull/3400 * Docker: update UI_WEBSOCKET compatibility by @da-Kai in https://github.com/OpenEMS/openems/pull/3391 * installer-owner-guest-modal.: remove not needed Import by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3409 * AliasUpdateComponent: Fix missing import by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3389 * Login: Fix password label translation by @da-Kai in https://github.com/OpenEMS/openems/pull/3379 * Docker: add docker-compose.yml and enhanced docs by @janklostermann in https://github.com/OpenEMS/openems/pull/3430 * Only apply additional filter when filter values are selected by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3443 * FEMS Backports 2025-11-25 in https://github.com/OpenEMS/openems/pull/3440 * Sort translation files alphabetically [Commit](https://github.com/OpenEMS/openems/commit/34aa4e2881d33089c09e80d5a7e2b5156fb394c0) * Energy Scheduler v2: EVSE Cluster [Commit](https://github.com/OpenEMS/openems/commit/e9aef875603877a337fae0f3c4ab73555a947f5b) * ActionSheet: remove initial breakpoint [Commit](https://github.com/OpenEMS/openems/commit/5ab1ad36b5272f93f3ec315853bb2e72091689e6) * App.Cloud.EnerixControl: add mode `CHARGE_FROM_GRID` [Commit](https://github.com/OpenEMS/openems/commit/dd2356c2b5f29e8263d781a45f4b3c1f76e55b13) * fix style of modal buttons [Commit](https://github.com/OpenEMS/openems/commit/afebc5a1d19cafaea4d47556fe05041a163d3f39) * EVSE: show phase-switching to Non-Admin users [Commit](https://github.com/OpenEMS/openems/commit/3318b958742a877e5d5a1b57a0e1f87f60d47148) * formly bugfix [Commit](https://github.com/OpenEMS/openems/commit/0f3556d92c9998f631b831e62e5158deec58aae7) * EVSE: add phase switching [Commit](https://github.com/OpenEMS/openems/commit/a9fa1cec9c84ea0e1d307a4ccab7568e34e3e0ba) * IBN: Address validation and Coordinates [Commit](https://github.com/OpenEMS/openems/commit/7e8c9aedb1dc094585ce0073429855e391497b51) * Add Button labels [Commit](https://github.com/OpenEMS/openems/commit/aace21735a188ee505cb9ba2980c4170082643aa) * Fix selector in `oe-controller-ess-gridoptimizedcharge-prediction-chart` [Commit](https://github.com/OpenEMS/openems/commit/c847052294fd3b6faba8f2b579182de3d15868ca) * Overview: activate sort filter [Commit](https://github.com/OpenEMS/openems/commit/7ea2ef3d2ac6588a4a03cb4e2f82352918c12b86) * Clever-PV / EnerixControl: change config name [Commit](https://github.com/OpenEMS/openems/commit/84ca4f917df76bf79fd82d3a74678e46a2d45b68) * Show SoC in Live Energymonitor [Commit](https://github.com/OpenEMS/openems/commit/90fc5fa357abbdf6ce434d593cd4241c3dc8fb5d) * FEMS Backports 2025-11-30 in https://github.com/OpenEMS/openems/pull/3453 * Contrast Minimum 1.4.3 WCAG [Commit](https://github.com/OpenEMS/openems/commit/7056faad26c273747bfbf0a59419290cc97ce2f5) * fix chart height calculation bug [Commit](https://github.com/OpenEMS/openems/commit/bfcea45cd4db5bb03c126e19b5bb78b50e09a5e1) * Charts: hide axes of hidden datasets [Commit](https://github.com/OpenEMS/openems/commit/dec78ebe5678fb9ed5048170630179c01b534fec) * Controller.IO.Heating: implement GetOneTasks JSONRPC [Commit](https://github.com/OpenEMS/openems/commit/a76741957dc39b817608622685206e0392949d89) ## Version Upgrades * Bump com.squareup.okhttp3:logging-interceptor from 5.1.0 to 5.3.0 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3396 * Bump com.fazecast:jSerialComm from 2.9.3 to 2.11.4 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3406 * Bump io.openems:j2mod from 3.2.1 to 3.2.2-openems.2 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3404 * Bump the openems-ui group across 1 directory with 11 updates by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3407 * Bump org.junit.jupiter:junit-jupiter-api from 5.13.4 to 6.0.1 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3394 * Bump js-yaml from 4.1.0 to 4.1.1 in /ui by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3416 * Bump org.jetbrains.kotlin:kotlin-osgi-bundle from 2.2.20 to 2.2.21 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3385 * Bump actions/download-artifact from 5 to 6 in /.github/workflows by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3384 * Bump @types/send from 0.17.5 to 1.2.1 in /ui by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3380 * Bump the squareup group in /cnf with 3 updates by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3420 * Bump com.google.protobuf:protobuf-java from 4.32.1 to 4.33.1 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3422 * Bump net.bytebuddy:byte-buddy from 1.17.8 to 1.18.1 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3421 * Bump com.squareup.okio:okio-jvm from 3.16.3 to 3.16.4 in /cnf in the squareup group by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3425 * Bump org.owasp.encoder:encoder from 1.3.1 to 1.4.0 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3426 * Bump actions/upload-artifact from 4 to 5 in /.github/workflows by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3382 * Bump the squareup group in /cnf with 2 updates by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3437 * Bump the influxdb group in /cnf with 4 updates by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3436 * Bump actions/checkout from 5 to 6 in /.github/workflows by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3438 * Update Gradle to 9.2.0 by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3408 ## New Contributors * @deining made their first contribution in https://github.com/OpenEMS/openems/pull/3398 * @Bockhorn-IT made their first contribution in https://github.com/OpenEMS/openems/pull/3302 * @Venkata-Sai-Vishwanath-robo made their first contribution in https://github.com/OpenEMS/openems/pull/3400 * @janklostermann made their first contribution in https://github.com/OpenEMS/openems/pull/3430 * @Eual11 made their first contribution in https://github.com/OpenEMS/openems/pull/3439 * @akshith30388 made their first contribution in https://github.com/OpenEMS/openems/pull/3412 **Full Changelog**: https://github.com/OpenEMS/openems/compare/2025.11.0...2025.12.0

2025.11.0
? · 2025-10-30

# 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](https://fenecon.de/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 https://github.com/OpenEMS/openems/pull/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 https://github.com/OpenEMS/openems/pull/3337 * Extend auto Stale and Close messages by @da-Kai in https://github.com/OpenEMS/openems/pull/3345 * Update Node.Js to 22 by @da-Kai in https://github.com/OpenEMS/openems/pull/3347 * Update MyModbusDeviceImpl.java by @sjjh in https://github.com/OpenEMS/openems/pull/3315 * Update MyConfig.java: removed import by @sjjh in https://github.com/OpenEMS/openems/pull/3318 * Improve UI docker by @da-Kai in https://github.com/OpenEMS/openems/pull/3366 * Change console output format from plan to colored in gradle build of ci by @miettal in https://github.com/OpenEMS/openems/pull/3364 ## OpenEMS Backend * FEMS Backports 2025-10-02 in https://github.com/OpenEMS/openems/pull/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 https://github.com/OpenEMS/openems/pull/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 - Introduced in #2879 * 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 - Change GraphQL to QUARTER_HOURLY resolution, update parsing of prices and JUnit tests - See https://developer.tibber.com/docs/changelog for details * 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 https://github.com/OpenEMS/openems/pull/3344 * Update timeofusetariff octopus heat Config.java: typo by @sjjh in https://github.com/OpenEMS/openems/pull/3346 * FEMS Backports 2025-10-08 in https://github.com/OpenEMS/openems/pull/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 https://github.com/OpenEMS/openems/pull/3297 ## OpenEMS UI * FEMS Backports 2025-10-02 in https://github.com/OpenEMS/openems/pull/3339 * Migration to Angular 20 * Apply `ng generate @angular/core:control-flow` * VSCode: fix html formatting issues with new control flow syntax: [Reference](https://www.reddit.com/r/Angular2/comments/1j71x20/how_to_format_angulars_new_controlflow_syntax_in/) * 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 data generation in all views * fix Consumption flat widget * New Navigation: add check for isEnabled on component - prevent disabled components to be shown for new navigation * LiveDataService currentData: fix not refreshing bug * History Storage: add fallback channels for non hybrid ess - use active power for non hybridEss and subnavigation for phase details only for hybridEss * Unified icons for “Error” status * Settings: refactor to lazy loaded module - decrease size of init app bundle, this PR is focused on migrating Settings to standalone and lazy-loaded. - fixing changelog component not showing back-arrow when inistialising, improved back button behavior in header component by using Navigation services for dynamic visibility. - Ensured consistent back navigation across all routes, including when changelog.component is nested or reused. * Improve keyboard accessibility - Apply keyboard accessibility according to WCAG (Web Content Accessibility Guidelines) * GridOptimizedCharge: fix time format for live - displaying the endTimeDetailedDescription in Netzdienliche Beladung as 24h or 12h format depending on User's browser's language. * Warning Status: consistent usage of warning icon - changing display of warning status to have a warning sign / icon. where previously Fault & Warning statuses were displaying `alert-outline` sign / icon . * Add Weather Widget - Added new Weather Widget in Live View below the Energy Monitor - Displays current weather, 6-hour forecast, and daily forecast for the next 6 days - Shows temperature, general weather condition, and sun hours - Weather data is retrieved from the Edge using coordinates stored in Meta configuration - Forecasts are retrieved in quarter-hourly, hourly, and daily resolution for the next 7 days - Linear prediction model adapted to handle the new weather data format - Forecasts are cached on the Edge and the UI fetches only the data it currently needs * Settings: fix missing buttons - Added missing import for FlatButtonComponent * Widget for EnerixControl/Clever-PV * Ripple Control Receiver (Rundsteuerempfänger) * FEMS Backports 2025-10-08 in https://github.com/OpenEMS/openems/pull/3353 * TimeOfUseTariff: display only two decimals on history chart - set a fixed amount of decimal places for currency value * General improvements * Improve performance - removes unneccesary evaluating of getter `modalComponent` which has been evaluated every second and leads to slowing down the monitoring * Angular 20 Update: additional visual changes - See OpenEMS Community: https://community.openems.io/t/fems-backports-broke-many-css-styles/10527/3 * Fix unsubscribe of channels - problem: too many channels unsubscribed on modal close * Fix: prevent energy flow arrow backgrounds from disappearing by @Jasonlee6789 in https://github.com/OpenEMS/openems/pull/3365 * Enforce UPPER_SNAKE_CASE for translation keys by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3367 ## Version Upgrades * Bump org.apache.felix:org.apache.felix.http.jetty12 from 1.1.0 to 1.1.2 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3332 * Bump io.reactivex.rxjava3:rxjava from 3.1.11 to 3.1.12 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3333 * Bump the openems-ui group across 1 directory with 11 updates by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3340 * Bump tar-fs from 3.1.0 to 3.1.1 in /ui by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3331 * Bump net.java.dev.jna:jna from 5.18.0 to 5.18.1 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3348 * Bump org.mockito:mockito-core from 5.18.0 to 5.20.0 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3349 * Bump net.bytebuddy:byte-buddy from 1.17.6 to 1.17.7 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3351 * Bump org.apache.felix:org.apache.felix.http.jetty12 from 1.1.2 to 1.1.4 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3362 * Bump com.squareup.okhttp3:okhttp-jvm from 5.1.0 to 5.2.1 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3358 * Bump net.bytebuddy:byte-buddy from 1.17.7 to 1.17.8 in /cnf by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3360 * Bump the openems-ui group across 1 directory with 6 updates by @dependabot[bot] in https://github.com/OpenEMS/openems/pull/3363 **Full Changelog**: https://github.com/OpenEMS/openems/compare/2025.10.0...2025.11.0

2025.5.0
? · 2025-04-30

# Release Highlights * **Octopus Heat tariff** in https://github.com/OpenEMS/openems/pull/3083 * **KEBA P40 charging station** in https://github.com/OpenEMS/openems/pull/3083 * **Edge2Edge via websocket** in https://github.com/OpenEMS/openems/pull/3083 * **Implement Janitza UMG104** by @Sn0w3y in https://github.com/OpenEMS/openems/pull/2970 * **Pylontech battery implementation** by @thomasjbhayes in https://github.com/OpenEMS/openems/pull/2388 # Details ## Common/General * FEMS Backports 2025-04-08 in https://github.com/OpenEMS/openems/pull/3090 * Update Android SDK * Fix build: https://github.com/ionic-team/capacitor/issues/7920 * j2mod, switch to openems fork by @da-Kai in https://github.com/OpenEMS/openems/pull/3104 * Update Gradle to v8.14.0 by @sfeilmeier in https://github.com/OpenEMS/openems/pull/3109 ## OpenEMS Edge * Fixes on `develop` branch in https://github.com/OpenEMS/openems/pull/3083 * Fix UI; missing injection * EVSE improvements - define `isReadyForCharging` state - add `DistributionStrategy` to distribute power in EVSE cluster in SURPLUS mode - unfinished: hysteresis in SURPLUS mode to avoid pausing charge process - use standard `int` for set-point * Fix/improve RunOptimizerApp * identified after last Networking Friday * see https://community.openems.io/t/04-04-networking-friday-on-energy-scheduler-v2-genetic-algorithms/7079/5 * FEMS Backports 2025-04-08 in https://github.com/OpenEMS/openems/pull/3090 * GridOptimizedCharge: Avoid integer overflow * App definition improvements * FEMS App Octopus Heat * AppCenter: Meta only for ADMIN - set can see role to ADMIN - update unit for GRID_CONNECTION_POINT_FUSE_LIMIT * KEBA: add EVCS Modbus variant - Component KebaP40Impl for Modbus variant of Keba - Added "HardwareType" to KebaEvcs App (P40 installs Modbus variant of Keba) - Added ReadOnly field for HardwareType P40 that is true default for now and can only be seen by admins (outside of selected customers we only support read only at first) - Added ReadOnly App for Keba Modbus that can only be seen by admin * Edge2Edge: via websocket - Added Edge2Edge Websocket - Added Websocket Bridge - AUTHENTICATION creates a ADMIN account on the slaves edge when the user enters the installation key - otherwise gets channels with existing requests and subscribes to those needed - Edge2Edge Websocket Ess - Reads all ess channels and all state channels of the remote component - Writes ActivePower & ReactivePower same as existing Edge2Edge Ess via Modbus - Edge2Edge Websocket GenericReadComponent - Reads all values from the remote component (used to display errors at a remote component or view values) - Added channel update notification when any channel changes & Edge Event - Added configurable ClientReconnectWorker to faster reconnect to slaves * SaveSerialNumbers: Home Battery & GoodWe BatteryInverter - Added a Core Component which can hold serial numbers in order to store them persistent config - Configuration Example: ``` { "battery0": { "Tower0Module0SerialNumber": "123", "Tower0Module2SerialNumber": "234", "Tower0Module1SerialNumber": "345", "Tower0Module3SerialNumber": "456", "Tower0BmsSerialNumber": "789" }, "batteryInverter0": { "SerialNumber": "abc" } } ``` * Hardy Barth RFID Authorization - Fixed Issue with PauseCharge commands being sent in inoppurtune times - Pause Charge only sent for old hardy barth versions * EVCS Mennekes: fix no energy in history * Changed active consumption to active production, currently production is null so no energy value is shown in history ui * ModbusApi: fix empty Modbus table randomly occuring - Sometimes, the Modbus table of ModbusTcp/ModbusRtu does not initialize correctly. (currently almost always after Firmware update) - This results in an empty Modbus table. - Currently, this can be fixed by either restarting OpenEMS Edge or the Modbus component. - Added some code cleanup for better readability - Changed @Reference of metaComponent * fix: Use correct modbus addresses for Janitza UMG96RM(E) meter by @parapluplu in https://github.com/OpenEMS/openems/pull/2930 * Update Documentation for Log Extraction Command by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3091 * Implement Janitza UMG104 by @Sn0w3y in https://github.com/OpenEMS/openems/pull/2970 * Max active and reactive power on ManagedSymmetricPvInverter by @chpoulter in https://github.com/OpenEMS/openems/pull/3086 * Bug in Edge2Edge in ModbusType Float64 fixed. by @tsicking in https://github.com/OpenEMS/openems/pull/2265 * One more channel added to Modbus slave table of Symmetric ESS by @tsicking in https://github.com/OpenEMS/openems/pull/2257 * LSTM: Integrate Adaptation and Asynchronous Prediction Combination by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3003 * Pylontech battery implementation by @thomasjbhayes in https://github.com/OpenEMS/openems/pull/2388 * SimilarDayPredictor: Fix ArrayIndexOutOfBoundsException due to time changeover by @clehne in https://github.com/OpenEMS/openems/pull/3094 ## OpenEMS UI * FEMS Backports 2025-04-08 in https://github.com/OpenEMS/openems/pull/3090 * Meta App: add version check * Dark mode fixes * Fixes systemprotocol download information in light mode for last setup protocol * Improve new navigation - Clean up heating room modal - add current node to breadcrumbs - only visible on Edges with EVSE and/or Heating.Room-Controller * Fix directconsumption hide/show state - Fix energy monitors directConsumption hide/show state for changing time periods * Improve register user * increase footer height * Increase height of footer, because overlapping with ios/android native toolbar * Change currentprotocol view * Fix systemprotocol color override by setting color explicitely * New navigation interacting with background improvements * Increase backdropbreakpoint to initial breakpoint for interacting with background ## Version Upgrades * Bump io.jenetics:jenetics from 8.1.0 to 8.2.0 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3087 * Bump the angular group in /ui with 4 updates by @dependabot in https://github.com/OpenEMS/openems/pull/3088 * Bump com.google.guava:guava from 33.4.6-jre to 33.4.7-jre in /cnf in the guava group by @dependabot in https://github.com/OpenEMS/openems/pull/3092 * Bump org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm from 1.10.1 to 1.10.2 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3093 * Bump com.google.code.gson:gson from 2.12.1 to 2.13.0 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3097 * Bump com.google.guava:guava from 33.4.7-jre to 33.4.8-jre in /cnf in the guava group by @dependabot in https://github.com/OpenEMS/openems/pull/3095 * Bump com.squareup.okio:okio-jvm from 3.10.2 to 3.11.0 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3096 * Bump the openems-ui group in /ui with 6 updates by @dependabot in https://github.com/OpenEMS/openems/pull/3098 * Bump the fastexcel group in /cnf with 2 updates by @dependabot in https://github.com/OpenEMS/openems/pull/3100 * Bump the openems-ui group in /ui with 6 updates by @dependabot in https://github.com/OpenEMS/openems/pull/3102 * Bump com.google.code.gson:gson from 2.13.0 to 2.13.1 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3107 * Bump org.apache.felix:org.apache.felix.http.jetty12 from 1.0.26 to 1.0.28 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3106 * Bump org.apache.felix:org.apache.felix.http.servlet-api from 3.0.0 to 6.1.0 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3101 * Bump @typescript-eslint/types from 8.31.0 to 8.31.1 in /ui in the openems-ui group by @dependabot in https://github.com/OpenEMS/openems/pull/3108 ## New Contributors * @chpoulter made their first contribution in https://github.com/OpenEMS/openems/pull/3086 **Full Changelog**: https://github.com/OpenEMS/openems/compare/2025.4.0...2025.5.0

2025.4.0
? · 2025-04-01

# Release Highlights * **Native flexibility Trading with Levl Energy https://levl.energy/** by @DennisLevl in https://github.com/OpenEMS/openems/pull/2873 * **Carlo Gavazzi EM100 Single Phase Meter** by @sthhs in https://github.com/OpenEMS/openems/pull/3004 * **Sum: add Power and Energy distribution channels** by @sfeilmeier in https://github.com/OpenEMS/openems/pull/2923. See https://community.openems.io/t/proposal-add-power-and-energy-distribution-channels-to-sum/3283 * **Time-of-Use Tariff Octopus Go** in https://github.com/OpenEMS/openems/pull/3046 * **EVCS Heidelberg Wallbox Energy Control (read-only)** in https://github.com/OpenEMS/openems/pull/3080 * **Many updates for Energy Scheduler v2 and Genetic Algorithms** * join us for Networking Friday on 4th of April: https://community.openems.io/t/04-04-networking-friday-on-energy-scheduler-v2-genetic-algorithms/7079 # Details ## Common/General * Migrate to Jetty12 by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3026 * Fix handling of URLs with square brackets in Jetty Rest API by @Sn0w3y in https://github.com/OpenEMS/openems/pull/3068 * Aggregated coverage report without using codecov by @maxemann96 in https://github.com/OpenEMS/openems/pull/2975 * Kleine Erweiterung des Getting Started Textes, nun ohne Syntaxfehler by @jbosse3 in https://github.com/OpenEMS/openems/pull/3015 * FEMS Backports 2025-03-11 in https://github.com/OpenEMS/openems/pull/3046 * App: update java version to 21 * Bump java dependency of capacitor to java 21 * FEMS Backports 2025-03-28 in https://github.com/OpenEMS/openems/pull/3075 * Fix deprecated Gradle features ## OpenEMS Backend * Display user role as desired by message by @parapluplu in https://github.com/OpenEMS/openems/pull/3012 ## OpenEMS Edge * New controller for flexibility trading with Levl Energy by @DennisLevl in https://github.com/OpenEMS/openems/pull/2873 * Fix Inconsistent Naming of JSON-RPC Method in Levl Controller by @DennisLevl in https://github.com/OpenEMS/openems/pull/3040 * Implement Carlo Gavazzi EM100 Single Phase Meter by @sthhs in https://github.com/OpenEMS/openems/pull/3004 * MQTT: avoid duplicate connect attempts by @MurselKhan in https://github.com/OpenEMS/openems/pull/3039 * Sum: add Power and Energy distribution channels by @sfeilmeier in https://github.com/OpenEMS/openems/pull/2923 * FEMS Backports 2025-03-11 in https://github.com/OpenEMS/openems/pull/3046 * ENTSO-E: fix missing data due to bad response - Provides a more robust and complete dataset by ensuring no timestamps are missing. - Previously, the min/max timestamps were derived only from the extracted response based on the preferred duration. Now, they are computed from the entire dataset, ensuring better coverage of all timestamps. - A new test case was introduced using an XML response that previously caused missing timestamp issues. * Time-of-Use-Tariffs: AppCenter: add max charge from grid setting * Added a property for every ToU app to set the maximale allowed charge from grid power * GoodWe: disable internal BatteryProtection - Disable internal goodwe battery protection called socProtect, that caused several problems. - After setting this register to 1, the maximum voltage values of the write-registers are used. * RabotCharge Time-of-Use-Tariff: fix price calculation * Home Battery: stop on critical min cell voltage * Battery values changed to null when there is no battery communication, because ModbusBridge invalidates all Modbus Channels then. * As a result the system restarted until it was in deep discharge. Use last defined value to check the minCellVoltage. * CleverPV: send EssDischargePower instead of EssActivePower * Clever-PV requires the actual battery charge/discharge power and not AC-side of hybrid inverter * Energy Scheduler v2: continuous improvements - Improve tests and logs - GridOptimizedCharge: fix possible NPE in EnergyScheduler - Improve InitialPopulation: this is crucial for v2. Because simulation is much slower, it is important to start with a good Initial Population. It is now possible for each EnergyScheduleHandler to suggest its own Initial Population (e.g. CHARGE_GRID in cheapest quarter) - Add index to GlobalOptimizationContext.Period, makes it easier to loop over them in a stream - Improve Jenetics Engine configuration: EliteSelector to make sure best Initial Populations survive; Alterers match better with the expected search task - Increase initial wait time to create GlobalOptimizationContext - e.g. for Home systems that require some time to read capacity * EVSE Edge Improvements - Add SURPLUS mode to EVSE Single Controller (works with only one EVSE simultaneously at the moment) - Add `manualEnergySessionLimit` and ENERGY_SESSION channels - only considered in EnergyScheduleHandler at the moment! - Add Energy Scheduler Simulation for manual modes (ZERO, MINIMUM, SURPLUS and FORCE) - EVSE KEBA via Modbus/TCP: - Add PhaseRotation - Calculate/distribute Power per phase * Home Battery: use new register for number of towers - New ATL versions cannot guarantee a value for TOWER_X_BMS_SOFTWARE_VERSION. This makes it impossible to calculate the number of towers based on this values. - The new Register was not present in the initial test version but should have been available since the first container shipment. * **Time-of-Use App Octopus Go** * Energy Scheduler v2 + EVSE: general improvements - Sinexcel: use static imports; drop unused EventTopics - Energy Scheduler v2 - Fix unique ID per EnergyScheduleHandler - EVSE - ClusterCtrl: move logic to testable static method - SingleCtrl: implement SESSION_ENERGY, manualEnergySessionLimit config property and SESSION_LIMIT_REACHED - KEBA: separte hardware wiring from S10 configuration * FEMS Backports 2025-03-28 in https://github.com/OpenEMS/openems/pull/3075 * Meta: add Grid Connection Point Fuse Limit + fix EVCS cluster power restrictions - Defines the maximum current allowed at the Grid Connection Point (GCP), i.e. the rating of the fuses. - changed mlpm prompt in Evcs Apps - made mlpm prompt required - added default value to mlpm promt base on fuse limit * NetworkConfig: added settings for network forwarding * Added settings in network component to set "IPv4Forwarding" & "IPMasquerade" only with manual rpc request or AppCenter configuration * ESS Generic Managed: Allow manual clearing of timeout failures * Updating the ESS component sets the status of the state machine back to undefined. * In the Undefined state, the ESS component decides whether to stop or start depending on the start/stop target if there is no error. * However, when the component is updated, the start/stop configuration that has already been set is also reset and does not receive a target update from the system component, as the system component is already in Running. * The moment in which ess target is updated only takes place in the system component go_running. * The restart can therefore only take place if the ess component failure is deleted without the ess component being updated. * This requires an implementation in the system component that removes the ess “max start/stop attempt failure ”s. * Octopus Go: fix price calculation, change config to Cent/kWh, add JUnit tests * ToU Controller: apply PID filter for systems with disabled PID * AppCenter: App for clever-PV * LSTM: fixed spelling mistake * ModbusTcp/Rtu: reset Invalid Modbus Call error after 60 seconds * Often Modbus-Api shows a "Invalid Modbus Function Call" error because e.g. IP of a relay board was incorrectly configured. Even after we have fixed the root cause, Modbus-Api remains in a fault state. Previously, this could easily be cleared by restarting the component. Since the modified method was introduced, this is no longer the case. * Removed debounce PROCESS_IMAGE_FAULT * Channel PROCESS_IMAGE_FAULT is set to false if there is no error within 60 seconds * JSCalendar, Energy Scheduler, EVSE Backports - JSCalendar - add helpers to handle Lists of Tasks - fix getNextOccurrence - JsonUtils: use objects and not primitives - Add RegexUtils - Energy Scheduler - Add Serializer and Deserializer with Factory-PID and Component-ID - Replace Double for cost with "Fitness" object; allows considering multi-level constraints (hard+soft) - Improve RunOptimizerFromLogApp to re-simulate real data - Avoid usage of Exceptions in normal execution flow - Identify managedConsumption per Controller-ID in EnergyFlow - Add `RunOptimizerApp` for easier simulation & testing - EVSE - Improve calculation of surplus power - Add ACTUAL_MODE channel for Single-Controller - Implement SMART mode (incl. field- and JUnit-test) * Meters: add "invert" in all meters and apps - Can now invert meters in the app config - implemented INVERT ElementToChannelConverter in all meters that had not yet implemented it * AppCenter: clever-PV data privacy notification - Added logic in OpenemsAppPermissions to only allow certain roles to install - Used logic to make enerix not installabe by Installers * Energy Scheduler: improve logging, handling and prevention of Exceptions * FEMS Backports 2025-04-01 in https://github.com/OpenEMS/openems/pull/3080 * Excel Export: improvements - Added io.openems.edge.ess.dccharger.api.EssDcCharger to XlsxExportUtil - Added charge0 to XlsxExportUtilTest - Added Method for Xlsx float value with 2 decimals * EVSE Improvements - Add Chart to UI Modal - Better handling of unplugged state - Add Schedule also to EnergyScheduleHandlers WithOnlyOneMode - Add JSONRPC-Response for SMART/MANUAL Schedule * AppCenter: changed default modbus for meter apps * EVCS Heidelberg Wallbox Energy Control readOnly - This is an implementation of pure modbus readonly EVCS based on ElectricityMeter ## OpenEMS UI * FEMS Backports 2025-03-11 in https://github.com/OpenEMS/openems/pull/3046 * Refactor Fixdigitaloutput modal with formGroup * Creating unit testable form with formGroup for modals * EVSE UI Improvements: add mode SURPLUS * fix display of dimming in grid * Hiding and showing of dimming in grid history was not applied right * Replace manual component configurator with Estimated Configuration response * Use fallback LIGHT_MODE for them popover selection * Using fallback theme `LIGHT` if popover has been closed without choosing a theme * Change tooltip display state for heatpump * Fixing tooltip displayed heatpump state * Change chartjs hover over pointer style - Improving chartjs hover mode, point out currently selected timestamps respective datasets value - Refactoring currentEdge observable to signal -> resolving lifecycle issue * fix chartjs legend display error Legend Labels not generated * FEMS Backports 2025-03-28 in https://github.com/OpenEMS/openems/pull/3075 * Fix read only twice in history * New Evcs without DeprecatedEvcs showed twice instead of once in cosumption history * Added filter to evcsComponents * Translations for UserComponent - Adding translations for `/user` - the UserComponent * Fix modal templates - Fixing modals using the `currentEdge` signal in template and still used async pipe - Could have been avoided with strict templates ts config... * Change consumption total color * Redesign ion-toggle - Redesigning ion-toggle and adjusting the look to match the Darkmode feature. * Add battery extension capacity info - Add warning to battery extension for battery referencing * Prevent y scale min to equal max - Prevent chart y scale for power and energy values to be showing no line due to max and min of y scale being the same * Fix heatpump chart - `State` - Channel values from 0 to 3 need to be scaled to 1 to 4 due to differences with [docs](https://docs.fenecon.de/de/fems/fems-app/App_Power-to-Heat_Benutzerhandbuch.html#_einbindung) * Change docs links * Change y scale title placement * Unify translations (en) * FEMS Backports 2025-04-01 in https://github.com/OpenEMS/openems/pull/3080 * Fix History show/hide month & year view - Fix right YAxis undefinied error * Fix modbustcp widget was not shown in history * Initialize action sheet modal navigation - Creating new central footer navigation with breadcrumbs and chips for back and forward navigation -> enables dynamic nesting of components * Fix Translations Keys of mode manually - Reverted `General.manual` to `General.manually` * Manual backport UI changes ## Version Upgrades * Bump org.apache.felix:org.apache.felix.http.jetty12 from 1.0.18 to 1.0.20 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3037 * Bump the eslint group in /ui with 2 updates by @dependabot in https://github.com/OpenEMS/openems/pull/3036 * Bump the angular group in /ui with 4 updates by @dependabot in https://github.com/OpenEMS/openems/pull/3035 * Bump org.jsoup:jsoup from 1.18.3 to 1.19.1 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3045 * Bump the angular group in /ui with 4 updates by @dependabot in https://github.com/OpenEMS/openems/pull/3041 * Bump org.apache.felix:org.apache.felix.http.jetty12 from 1.0.20 to 1.0.24 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3054 * Bump net.java.dev.jna:jna from 5.16.0 to 5.17.0 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3053 * Bump com.google.guava:guava from 33.4.0-jre to 33.4.5-jre in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3066 * Bump org.jetbrains.kotlin:kotlin-osgi-bundle from 2.1.10 to 2.1.20 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3065 * Bump org.apache.felix:org.apache.felix.http.jetty12 from 1.0.24 to 1.0.26 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3063 * Bump com.zaxxer:HikariCP from 6.2.1 to 6.3.0 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3062 * Bump the angular group in /ui with 4 updates by @dependabot in https://github.com/OpenEMS/openems/pull/3055 * Bump the pax-logging group in /cnf with 2 updates by @dependabot in https://github.com/OpenEMS/openems/pull/3079 ## New Contributors * @DennisLevl made their first contribution in https://github.com/OpenEMS/openems/pull/2873 * @maxemann96 made their first contribution in https://github.com/OpenEMS/openems/pull/2975 * @sthhs made their first contribution in https://github.com/OpenEMS/openems/pull/3004 * @jbosse3 made their first contribution in https://github.com/OpenEMS/openems/pull/3015 * @MurselKhan made their first contribution in https://github.com/OpenEMS/openems/pull/3039 **Full Changelog**: https://github.com/OpenEMS/openems/compare/2025.3.0...2025.4.0

2025.3.0
? · 2025-03-01

# Release Highlights * **Clever-PV Controller** * New Controller `Controller.Clever-PV` sends core data to Clever-PV (https://clever-pv.com) * **Electrical Vehicle Supply Equipment (EVSE)** * WIP for a future replacement of the current EVCS APIs. The new namespace is "Electrical Vehicle Supply Equipment (EVSE)". # Details ## Common/General * Update Gradle to v8.13 by @sfeilmeier in https://github.com/OpenEMS/openems/pull/3027 * Increased karma Timeout ## OpenEMS Edge * FEMS Backports 2025-02-07 in https://github.com/OpenEMS/openems/pull/3005 * *This fixes a critical bug in Time-of-Use-Tariff Optimizer in https://github.com/OpenEMS/openems/releases/tag/2025.2.0* * AppCenter: Fix selecting relays - added filter for initial check if an app can be installed based on available relays (CheckRelayCountFilters.deviceHardware) - properly handle selecting multiple relays (array value) - moved required setting to right places - added missing options hint in SelectGroupBuilder if none are available - only apply modal of safe input when confirmed * ToU Optimizer: fix BALANCING fallback schedule - A endless loop causes fallback schedule. Bug became visible after recently added null-check - Copied logic from new Optimizer.java: src/branch/develop/io.openems.edge.energy/src/io/openems/edge/energy/optimizer/Optimizer.java#L198-L202 * EVCS: new PhaseRotation which supports better Modbus handling - Native EVCS support for PhaseRotation - switched nature enum `PhaseRotation` to a new format - added method `Evcs.getPhaseRotation()` (BREAKING CHANGE) - applied code cleanup * JsonSerializer: improved serialization - added tests - added StringParser of e. g. UUID, SemanticVersion, ChannelAddress, .... - added number parsing - added polymorphic parsing for subclasses of one type - added boolean parsing - EmptyObject to reduce duplicated empty request/response - added nullable paths for every type - added primitive path with strict parsing - updated a lot of json rpc methods * FEMS Backports 2025-02-25 in https://github.com/OpenEMS/openems/pull/3024 * GoodWe: increase minimum power that will be ignored. * Bigger systems still have 79W permanent charge power, while the dynamic tariff would charge/discharge with zero. * After a longer discussion the values below 100W will be now ignored to avoid a lot of service cases that can not be explained. * **Clever-PV Controller** * New Controller `Controller.Clever-PV` sends core data to Clever-PV Push API every 15 seconds * See docs: https://www.clever-pv.com/anleitungen/push-api * Evcs: add helpers for phases * add `Evcs:addCalculatePhasesListeners()` * add `Evcs:addCalculatePhasesFromActivePowerAndPhaseCurrents()` * Note: typical EVCS hardware models provide `CURRENT_L1-3`, and `ActivePower`, but some models provide only `CURRENT_L1-3` and some other models provide only `ACTIVE_POWER_L1-3`. Therefore these methods are added to easily compute the missing channel values. * **Electrical Vehicle Supply Equipment (EVSE)** * This is WIP for a future replacement of the current EVCS APIs. The new namespace is "Electrical Vehicle Supply Equipment (EVSE)". * This PR provides: * APIs for * Electric Vehicle * Charge Point * Implementations: * KEBA P30/P40 via Modbus/TCP (`Evse.ChargePoint.Keba`) * Generic Electric Vehicle (`Evse.ElectricVehicle.Generic`) * Controllers: * Single Charge-Point (`Evse.Controller.Single`) * Cluster of Charge-Point-Controllers (`Evse.Controller.Cluster`) * Simple UI to control the Charge-Mode of Charge-Points * NOTE: All of this might be heavily refactored in future. Having it on develop helps us to test it easier in production. It does not affect any existing EVCS implementations. * BitsWordElement: Extend it via setToNullIfBit to indicate the invalid bit value input * Integrate the convert option for BitsWordELement * According to the given function/condition each bit channel values can be manipulated * The main reason of this implementation is to in order to indicate if value present or default value delivered * As an example; with this approach in case of default value detection, the values can be set to null * Similar approach was implemented in ElementToChannelConverter as "Set_to_null_for_default()" method * Implement UpdateUserSettingsRequest for edge-uiwebsocket * Adding updateUserSettingsRequest support for edge-ui-websocket request handler * Follow up to darkmode settings not being able to set locally * AppCenter: Only try to get Component if needed * If a component is not satisfied and therfor not startet an exception gets throw because the component can not be obtained * Solution: only get component if first method fails or can not provide the properties * KEBA: fix EnergyLimitReached when no Limit configured * Currently a bug starts to popup more and more in ticket. * -> Keba Charging Station has the Status ENERGY_LIMIT_REACHED eventhough energyLimit is not activated * Added removed check for limit != 0 (limit 0 should mean that no limit is set) in status mapping in ReadHandler of Keba * Energy Scheduler v2 / Time-of-Use-Tariff optimization (ALPHA) by @sfeilmeier in https://github.com/OpenEMS/openems/pull/3029 ## OpenEMS UI * FEMS Backports 2025-02-07 in https://github.com/OpenEMS/openems/pull/3005 * History consumption chart non deprecated evcs not taken into account for total consumption - in history chart "consumption". Ensure that non deprecatedEvcs (new implementations) are not added to "sonstiger Verbrauch" - if deprecatedEvcs is not implemented (chargepower channel nature) then it is added to consumption metered * FEMS Backports 2025-02-25 in https://github.com/OpenEMS/openems/pull/3024 * time-of-use rename state to status * Dark-mode Popup * Displaying Popup after successful log in, to announce the Dark-mode new feature for users, showing it only once after users get the new software release. * Angular 19 migration fixes * setting chart afterTitle directly * Formly Radio Button * Add last setup protocol download to profile * Downloading latest setup protocol in `profile` * IOS Fixes * file download for excel export and last setup protocol did also not work on mobile with browser, now only *in app* downloads are not working * theme selection popover radio buttons not shown, due to default ios design, changing to material design * -> before checkmark as radio icon with no circle, now with circle * Enforce datetime format for ion-datetime * fix datetime format of `ion-datetime`, ionic changed returned format of the date string * unit test to avoid this in future migrations * Change visibility of producttype and sumState filter * changing visibility of producttype and sumState filters in ems-overview from `admin` to `installer` * Enable darkmode locally & restrict float number decimals * Enabling setting darkmode for local monitoring * restrict float number decimals in y Axis ticks * Phase-accurate button change * Correcting buttons names on the footer navigation in history Consumption chart view. * Fix evcs modal range slider bug * Fixing ion-range bug ## Version Upgrades * Bump info.faljse:SDNotify from 1.5 to 1.6 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3011 * Bump org.apache.felix:org.apache.felix.webconsole from 5.0.8 to 5.0.10 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3010 * Bump com.google.code.gson:gson from 2.11.0 to 2.12.1 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3002 * Bump ngx-spinner from 17.0.0 to 19.0.0 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/3016 * Bump swiper from 11.2.1 to 11.2.4 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/3019 * Bump rxjs from 7.8.1 to 7.8.2 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/3022 * Bump the angular group across 1 directory with 4 updates by @dependabot in https://github.com/OpenEMS/openems/pull/3023 * Bump fr.turri:aXMLRPC from 1.16.0 to 1.17.0 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/3001 * Bump @capacitor-community/file-opener from 6.0.1 to 7.0.0 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/2990 * Bump the eslint group across 1 directory with 4 updates by @dependabot in https://github.com/OpenEMS/openems/pull/3028 * Bump chart.js from 4.4.7 to 4.4.8 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/3030 * Bump globals from 15.14.0 to 16.0.0 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/3031 * Bump ngx-cookie-service from 19.0.0 to 19.1.2 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/3032 * Bump ng2-charts from 7.0.0 to 8.0.0 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/2954 ## New Contributors * @HaSp97 made her first contribution **Full Changelog**: https://github.com/OpenEMS/openems/compare/2025.2.0...2025.3.0

2025.2.0
? · 2025-02-02

# Details ## Common/General * General Cleanup by @sfeilmeier in https://github.com/OpenEMS/openems/pull/2949 ## OpenEMS Edge * Siemens Logo as network relay board by @DerWahreKlinki in https://github.com/OpenEMS/openems/pull/2350 * Shelly: common executeWrite() method & many JUnit tests by @Sn0w3y in https://github.com/OpenEMS/openems/pull/2658 * Controller IO Heating Room by @sfeilmeier in https://github.com/OpenEMS/openems/pull/2950 * FEMS Backports 2025-01-16 in https://github.com/OpenEMS/openems/pull/2969 - JsonUtils: Update switch cases with pattern matching - HttpBridge: add detailed Logger - Moved DebugMode to Common - Added DebugMode to BridgeHttp - Added parameter of type DebugMode to NetworkEndpointFetcher - Added Detailed log of result in fetchEndpoint if DebugMode is DETAILED - Set DebugMode to DETAILED in HardyBarthEvcsImpl if debug is true in config - Sum + ESS: update Modbus table descriptions - Adds and changes descriptions of the modbus tables - KEBA: fix issue with SessionEnergy - Add KEBA specific R2State-enum (for "Report 2") - KEBA: drop CHARGING_REJECTED - SessionEnergy is set to 0 on UNPLUGGED event - Modbus-Api-Controller: add RTU and unify controllers to abstract superclass - Implementation of ModbusRTU - Refactoring of ModbusTCP to avoid redundant classes - Implementation of ModbusRTU App - Added "Download Protocol" button for ModbusRtu - AppCenter Home: NA-Protection changed text - changed na-protection text - IO Weidmüller: Added UR20_16DI_P module - Symmetric Battery Inverter: add cabinet temperature channel - Added a "TEMPERATURE_CABINET" channel in the Battery inverter interface. - HardyBarth: temporary fix for `null` responses - This fixes an issue with interrupted charging sessions due to `null` values. - added check for null values in HardyBarthReadUtils - The first 3 null values are ignored and no values are written in these cycles - Afterwards null values are written in channels as usual - AppCenter: add estimated configuration endpoint for IBN - Added endpoint to retrieve estimated installation configuration - AppCenter: Meta App + Update Component via apps - Added core app for meta component - Added Logic for updating component config via their apps - EmergencyReserveFromGrid: start charging without delay from ramp - Added check with previous state that ignores ramp for 1 cycle * FEMS Backports 2025-01-20 in https://github.com/OpenEMS/openems/pull/2976 - Code Cleanup for Java 21 - Migrate Switch-Case-Expressions to Switch-Case-Statements - General code cleanup (using Eclipse "Clean up" tool) - EVCS Mennekes: cleanup - Cleanup Eclipse warning (#2971) * Correct FENECON Home Battery Unit for Cell Voltages by @Sn0w3y in https://github.com/OpenEMS/openems/pull/2974 * Fix VerifyError in EdgeConfigWorker by @sfeilmeier in https://github.com/OpenEMS/openems/pull/2987 * FEMS Backports 2025-02-02 in https://github.com/OpenEMS/openems/pull/2997 * Host: extend getIpAddresses Request * Extended jsonRpc request for getIpAddresses with more data for networkInterfaces and IP routing table * Mennekes Relase: Remove AppPermissions * Remove App Permissions from Mennekes for upcoming release * SunSpec: set correct OpenemsType for floating point values * See commit details for an example of the changes for a Fronius PV Inverter with SunSpec Block 113 * Originally we tried to avoid floating point in favour of integer numbers to avoid very frequent sending of changed values. This has been solved in the meantime with a DEFAULT_PERSISTENCE_PRIORITY of VERY_LOW for SunSpec channels. * ModbusTcp Read-Only: add modified handling * Adds modified method to ModbusTcp Read-Only * AppCenter: fix bug where all array properties cant be modified - Modifying array properties results in an error "expected array length 1 not 3" - "fixed" by changing order of checks to first check if property can be modified and then check if they are the same value - TODO future if access check on a array based property happens it needs to be modified to handle array values - remove excessive log if component does not exist in `ComponentManager#getComponentProperties` * Energy Optimizer: fix possible NPE - This fixes ``` [_energy ] ERROR [s.common.worker.AbstractWorker] Worker error. NullPointerException: Cannot invoke "io.jenetics.Genotype.get(int)" because "bestGt" is null java.lang.NullPointerException: Cannot invoke "io.jenetics.Genotype.get(int)" because "bestGt" is null ``` - According to docs the Collector can indeed return `null`: https://github.com/jenetics/jenetics/blob/master/jenetics/src/main/java/io/jenetics/engine/EvolutionResult.java#L475-L476 * ElectricityMeter: added calculateCurrentsFromActivePowerAndVoltage and calculatePhasesFromVoltage - ElectricityMeter enhancement for more easier integration of future EVCSs. Method may be useful for general ElectricityMeter implementations as well. That's why it was placed in ElectricityMeter and not in Evcs. * Windows Fix for IP Validation in Apps - IP Validation Regex is now Compatible with Windows again. (Currently when OpenEMS is run locally apps with IP Validation can't be installed) * GoodWeGridMeter: ElementToChannelConverter NP-Fix - Null check in element to channel converter * GoodWe: improve Battery Power Settings - Some of the Power settings for the goodwe were not applied correctly (Per default disabled, wrong scale factors, wrong register mapping cosPhiF != PU) * GoodWe: ignore impossible power values - The DcActivePower resgister of GoodWe is giving 20-40 watt values when the SoC is 0 or 100 and there is no real charge/discharge of the battery happening. This values will be ignored to avoid wrong energy values, as the energy is calculated based on the active power. - The same occurs when the battery is getting a 0 charge/discharge set point. If the SoC is between 0 and 100 it is also ignoring this low power values when the current EmsPowerMode is Charge/Discharge Bat & the EmsPowerSet is 0 W ## OpenEMS UI * Dynamic numberformat conversion by using current locale by @miettal in https://github.com/OpenEMS/openems/pull/2757 * Overview search: trigger on every input change by @Sn0w3y in https://github.com/OpenEMS/openems/pull/2935 * Add defaultLanguage setting to src/environments by @miettal in https://github.com/OpenEMS/openems/pull/2756 * Fix component.update View by @Sn0w3y in https://github.com/OpenEMS/openems/pull/2958 * Fix formly form styles by @lukasrgr in https://github.com/OpenEMS/openems/pull/2962 * Switch from `ionChange` to `ionInput` for Real-Time Filtering in Search Bar by @Sn0w3y in https://github.com/OpenEMS/openems/pull/2963 * FEMS Backports 2025-01-16 in https://github.com/OpenEMS/openems/pull/2969 - Prepare Login Improvements - Added template to override the default formly behaviour bugs - fix styling of `negative-values` and `positive-values` info * FEMS Backports 2025-01-20 in https://github.com/OpenEMS/openems/pull/2976 - use user language instead of browser lang for locale - replace locale being overwritten with browserlang to be using the user lang - fix czech locale, `cz` throwing errors for - piping (using angular pipes) - formatting of numbers - replacing it with `cs` -> [Ref](https://github.com/angular/common-builds/blob/main/locales/global/cs.js) - Improve Modbus Widget - fixes name of channel in ModbusTCP widget (e.g. Ess1SetActivePowerEquals was shown as SetActivePowerEquals/706 in OM) - Several ess lead to repeating register names in ModbusTcp widget. - Dark mode pick-date improvements - Enhancing styles of popover in accordance with dark-mode feature. - Add handling for `Controller.IO.Heating.Room` * migrate .eslintrc to eslint.config.mjs by @miettal in https://github.com/OpenEMS/openems/pull/2675 * FEMS Backports 2025-02-02 in https://github.com/OpenEMS/openems/pull/2997 * Change display color of currency axes - fix coloring of yAxes for currency - extending eslint rule [`no-unused-vars`](https://eslint.org/docs/latest/rules/no-unused-vars#ignorerestsiblings) with `ignoreRestSiblings`: destructuring throws otherwise an error for unused sibling * Adjust custom time range chart display - Adjust time-range picker in mode `Custom` to display only the months queried for monthly resolution, before if start and endpoint are in a different year, it would fill up both years to show 12 months per year * Fix searchbar request overload - reducing calls of `GetEdgesRequest` and waiting for last requests response - avoids showing every response - introduce 1 second `debounce` * Refactor heat pump history - Using `Time`-channels for bar charts - creating refactored standalone unit tested lazy loaded history for heatpump - sanitizing data for io time channels if they are not adding up to - 24h (1 day - month view) -> rounding if only one minute missing - 744h (31 day month - year view) ... -> rounding if only one hour missing - -> increasing `RegularStateTime` by the missing diff - Attention: There still could be some deviation due to OpenEMS Edge being offline during systemupdate * Improve styling * Remove unused imports in GetNetworkInfo and MennekesEvcs * Controller.IO.Heating.Room: add UI Live widget - Add UI Live Flat and Modal for `Controller.IO.Heating.Room` - This implementation could in future serve as a proof of concept for new JSCalendar configurations * EVCS Cluster: remove slides from modal - Because of display errors after recent Angular & Ionic update. * UI: Refactor Info Text Blocks into a Reusable Template by @Sn0w3y in https://github.com/OpenEMS/openems/pull/2961 ## Version Upgrades * Bump com.squareup.okio:okio-jvm from 3.9.1 to 3.10.0 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/2951 * Bump @typescript-eslint/types from 8.19.0 to 8.19.1 in /ui in the eslint group by @dependabot in https://github.com/OpenEMS/openems/pull/2952 * Bump @awesome-cordova-plugins/file-opener from 6.13.0 to 6.14.0 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/2953 * Bump @awesome-cordova-plugins/core from 6.13.0 to 6.14.0 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/2955 * Bump swiper from 11.1.15 to 11.2.0 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/2956 * Bump uuid from 11.0.3 to 11.0.4 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/2957 * Bump the eslint group in /ui with 2 updates by @dependabot in https://github.com/OpenEMS/openems/pull/2967 * Bump swiper from 11.2.0 to 11.2.1 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/2968 * Bump com.squareup.okio:okio-jvm from 3.10.0 to 3.10.2 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/2965 * Bump org.postgresql:postgresql from 42.7.4 to 42.7.5 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/2983 * Bump the pax-logging group in /cnf with 2 updates by @dependabot in https://github.com/OpenEMS/openems/pull/2982 * Bump the bouncycastle group in /cnf with 2 updates by @dependabot in https://github.com/OpenEMS/openems/pull/2981 * Bump @types/qs from 6.9.17 to 6.9.18 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/2980 * Bump org.apache.felix:org.apache.felix.http.jetty from 5.1.26 to 5.1.28 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/2994 * Bump org.jetbrains.kotlin:kotlin-osgi-bundle from 2.1.0 to 2.1.10 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/2993 **Full Changelog**: https://github.com/OpenEMS/openems/compare/2025.1.0...2025.2.0 --------- Co-authored-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com> Co-authored-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com> Co-authored-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com> Co-authored-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com> Co-authored-by: Fabian Brandtner <10850256+fabian94533@users.noreply.github.com> Co-authored-by: Sebastian Asen <47855186+sebastianasen@users.noreply.github.com> Co-authored-by: Christian Lehne <51822163+clehne@users.noreply.github.com>