Skip to content

FEMS Backports 2026-03-21#3624

Merged
sfeilmeier merged 68 commits intodevelopfrom
feature/fems-backports
Mar 21, 2026
Merged

FEMS Backports 2026-03-21#3624
sfeilmeier merged 68 commits intodevelopfrom
feature/fems-backports

Conversation

@sfeilmeier
Copy link
Contributor

@sfeilmeier sfeilmeier commented Mar 12, 2026

  • Backend

    • [Backend] Migrate odoo to use http bridge Commit
    • [Backend] improve timedata querys Commit
    • [Backend] Alerting: Extend logging Commit
    • [Backend] Docker: fix build; update default ports Commit
  • UI

    • [UI] New Navigation: desktop tree view Commit
    • [UI] EVSE: show charge power Commit
    • [UI] SoH Cycle Controller: show ESS Modal Commit
    • [UI] Time-of-Use-Tariff: show Peak-Shaving mode [Commit](https://github.com/OpenEMS/openems/commit/
      cf62ec6)
    • [UI] Add support for JSCalendar Scheduler Commit
    • [UI] NUI: align tree view to top Commit
    • [UI] NUI: Refactor production Commit
    • [UI] SoH-Controller: fix channel subscribe Commit
    • [UI] fix subscribe bug Commit
    • [UI] Fix missing User.language Commit
    • [UI] remove duplicated evcss in consumption Commit
    • [UI] fix NPE in global route change handler Commit
    • [UI] fix app oauthcallback Commit
    • [UI] fix local OpenEMS login Commit
    • [UI] Fix Formly Navigation Commit
    • [UI] fix for chart height Commit
    • [UI] Improve state handling & websocket reconnect Commit
    • [UI] add missing assignment for filteredEdges Commit
    • [UI] Cleanup Commit
    • [UI] fix develop UI tests Commit
  • Edge

    • [Edge] Shelly Pro 3EM: implement App Commit
    • [Edge] Shelly: add support for more devices Commit
    • [Edge] ManagedSymmetricEss/GoodWe: refactor how (PID-)filter is applied Commit
    • [Edge] EVSE Electric Vehicle: add configurable battery capacity Commit
    • [Edge] Ess.Power: distribution prepare for different handlers Commit
    • [Edge] FEMS App EWS Schönau: public release Commit
    • [Edge] Meta: add gridBuyHardLimit() and gridSellHardLimit() Commit
    • [Edge] Meta: improve Grid-Buy-Soft-Limit Commit
    • [Edge] Add new TariffManager Commit
    • [Edge] Add Time-of-Use Feed-In Tariffs Commit
    • [Edge] ENTSO-E: refactor + prepare fetch via Backend Commit
    • [Edge] FENECON Commercial 50/100: Genset Component Commit
    • Edge] Cycle Worker: add Log Verbosity Commit
    • [Edge] Meta: Refactor Grid-Feed-In-Limit Commit
    • [Edge] Vehicle: Add Battery Capacity to component config Commit
    • [Edge] Vehicle: Add Battery Capacity to App and Switch Commit
    • [Edge] JSCalendar: fix problem with two overlapping fallback tasks Commit
    • [Edge] Managed(As|S)ymmetricEss cleanup Commit
    • [Edge] _Property-Channels: fix duplicated channels of component in same bundle Commit
    • [Edge] handleExecuteSystemCommandRequest for Docker Commit
    • [Edge] ModbusTcp: fix timeout config Commit
    • [Edge] App Center: App for FENECON Pro Hybrid 9-10 Commit
    • [Edge] FENECON Commercial 100: Add GoodWe 100 Type Commit
    • [Edge] Energy Scheduler v2: Model production curtailment in EnergyFlow Commit
    • [Edge] Commercial 92 Cluster (Master): set default power strategy Commit
    • [Edge] App Center: Vehcile fix install always Commit
    • [Edge] RRD4j: improve handling of unused files Commit
    • [Edge] GoodWe and Kdk Grid-Meter Apps Commit
    • [Edge] FENECON Commercial 50 VDE4110 Commit
    • [Edge] App Center: fix scheduler order for switch EVSE/EVCS Commit
    • [Edge] App Center: improve switching between EVCS and EVSE Commit
    • [Edge] Hardy Barth: fix properties of second charge point Commit
    • [Edge] EVSE: improve calculation of combined abilities Commit
    • [Edge] Meta MaximumGridFeedInLimit & HardyBarth NPE Commit
    • [Edge] EVSE Switch App: synchronize Apps with Backend after Fallback Commit
    • [Edge] FENECON Home 6,10 (Gen2) & 15: "dynamischer Rundsteuerempfänger" Commit
  • Common

    • [Common] Gradle: standardize Wrapper Structure Commit

sfeilmeier and others added 30 commits March 12, 2026 22:11
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Andreas Mur <102706922+DerMuaaa@users.noreply.github.com>
Co-committed-by: Andreas Mur <102706922+DerMuaaa@users.noreply.github.com>
Reviewed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Kai Jeschek <99220919+da-Kai@users.noreply.github.com>
Co-committed-by: Kai Jeschek <99220919+da-Kai@users.noreply.github.com>
Reviewed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Alex Belke <233420507+alexbelkedev@users.noreply.github.com>
Co-committed-by: Alex Belke <233420507+alexbelkedev@users.noreply.github.com>
Reviewed-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Fabian Brandtner <10850256+fabian94533@users.noreply.github.com>
Co-committed-by: Fabian Brandtner <10850256+fabian94533@users.noreply.github.com>
- fix edges not assigned to `filteredEdges` on init

Reviewed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Co-committed-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
- Call Synchronize App worker after Fallback to notify Backend that App was deleted (otherwise key is still set as installed and customer cant install the App again after Fallback)

Reviewed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
Co-committed-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
- Calculated from GridConnectionPointFuseLimit and MAXIMUM_GRID_FEED_IN_LIMIT
- Uses default values for voltage (400 V) and cos-phi (1)
- Fixes EnergyScheduler v2 with UNDEFINED MaximumGridFeedInLimit

Reviewed-by: Sebastian Asen <47855186+sebastianasen@users.noreply.github.com>
- Allow disabling single-/three-phased charging via config
- Meta::MaximumGridFeedInLimit == 0 is UNDEFINED
- Fix NPE in Evcs::getPhaseCount in HardyBarth
-  JUnit test for HB getChargePointAbilities()
- EVSE: improve calculation of combined abilities, i.e.
  - ChargePoint SINGLE_PHASE; Vehicle SINGLE_PHASE
  - ChargePoint SINGLE_PHASE; Vehicle THREE_PHASE
  - ChargePoint THREE_PHASE; Vehicle THREE_PHASE
  - ChargePoint THREE_PHASE; Vehicle SINGLE_PHASE
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Co-committed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
- remove line (evcsId tried to be deleted twice)
- fix MLPM Power Property for Keba App
- disable install always (currently with install always config vehicle app changes the id upon update -> ctrlSingle cant resolve dependency for vehicle)

Co-authored-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Reviewed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
Co-committed-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
Fixes _appManager[AppValidateWorker=App.Evcs.Keba[Expected 'ctrlEvcs0' to be configured between 'ctrlEssSurplusFeedToGrid0' and 'ctrlBalancing0']

Co-authored-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Co-committed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
- Allow App install without ADMIN permissions
Co-authored-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Co-committed-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
- Show `PEAK_SHAVING` mode in Live and History - only if it contains data

Reviewed-by: Sagar Venu <32655208+venu-sagar@users.noreply.github.com>
- GoodWePropertiesConfig for holding all Properties with its parameters and Accordions and AccordionGroups
- new FormlyFields Accordion and AccordionGroup with a Builder
- AccordionGroup could use addditional settings:
- - setMissingText for showing when no accordions are in the group
- - setMulit for the setting to show multiple accordion simultaneously
- - setOpenAccordions for default expanding accordions
- new methods in FeneconCommercialProps hiddenInput, hiddenSelect, hiddenCheckbox for generating an AppDef without auto generating the field.
- methods for generating an AppDef for an Accordion and an AccordionGroup with both having an consumer for additional settings
- getExtendedGoodWeProperties: a method for generating the AccordionGroup with its accordion and its properties for the extended Settings with 4110.
- new method batteryInverterWithExtendedSettings for writing the values of the properties in the config of the batteryInverter

Co-authored-by: Leon Blenk <168936274+LaBlanko@users.noreply.github.com>
Co-authored-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Reviewed-by: Sebastian Asen <47855186+sebastianasen@users.noreply.github.com>
Reviewed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Co-authored-by: Leon Blenk <168936274+LaBlanko@users.noreply.github.com>
Co-committed-by: Leon Blenk <168936274+LaBlanko@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Co-committed-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Co-authored-by: Leon Blenk <168936274+LaBlanko@users.noreply.github.com>
Reviewed-by: Leonhard Anderle <leonhard.anderle@fenecon.de>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Leon Blenk <168936274+LaBlanko@users.noreply.github.com>
Co-committed-by: Leon Blenk <168936274+LaBlanko@users.noreply.github.com>
Reviewed-by: Franz Reiter <1498918+Howaner@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Co-committed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
- Check for Install always now before the check for oldappinstance so id can be kept after switching

Reviewed-by: Leon Blenk <168936274+LaBlanko@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
Co-committed-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
- removed padding from charts as it is no longer needed in the new UI
- added customChartHeightPercentage to allow rendering charts with a configurable height.

Co-authored-by: DerMuaaa <102706922+Andreas Mur@users.noreply.github.com>
Co-authored-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Reviewed-by: Hanna Späth <198875998+HaSp97@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Reviewed-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Co-authored-by: Andreas Mur <102706922+DerMuaaa@users.noreply.github.com>
Co-committed-by: Andreas Mur <102706922+DerMuaaa@users.noreply.github.com>
- fix resolving links from formly links in appcenter

Reviewed-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Reviewed-by: Andreas Mur <102706922+DerMuaaa@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
Co-committed-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
- Introducing two new components `soh-status-banner` and `soh-cycle-section`.
- `soh-cycle-section` is shown inside Speichersystem widget.
- It allows to start the soh cycle.
- As soon as soh cycle is running the  `soh-status-banner` will be shown.
- After soh cycle is complete two values will be shown:
  - Measured capacity in Wh
  - SoH in %
- After that restart is possible. When clicking on restart button a confirmation dialog with explanation text will be shown.
- On restart all channel values will be reset.

Reviewed-by: Hanna Späth <198875998+HaSp97@users.noreply.github.com>
Reviewed-by: Sagar Venu <32655208+venu-sagar@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Alex Belke <233420507+alexbelkedev@users.noreply.github.com>
Co-committed-by: Alex Belke <233420507+alexbelkedev@users.noreply.github.com>
...to OPTIMIZE_BY_KEEPING_ALL_NEAR_EQUAL

- force update default power strategy for commercial 92 cluster master

Reviewed-by: Leon Blenk <168936274+LaBlanko@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Co-committed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
This PR removes the custom .gradle-wrapper layout and restores the standard Gradle wrapper structure (gradle/wrapper/).

## Changes:

- Removed custom jarFile configuration in wrapper task
- Regenerated wrapper files in standard location
- Updated gradlew / gradlew.bat

## Benefits:

- Ensures compatibility with IntelliJ (“Distribution = Wrapper”)
- Avoids unnecessary execution of :wrapper task
- Aligns with Gradle defaults and common tooling expectations
- Improves developer onboarding and CI consistency

No functional build changes intended.

Reviewed-by: Kai Jeschek <99220919+da-Kai@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Alex Belke <233420507+alexbelkedev@users.noreply.github.com>
Co-committed-by: Alex Belke <233420507+alexbelkedev@users.noreply.github.com>
- If the surplus energy exceeds the sum of `essMaxCharge` and `gridMaxSell`, the `EnergyFlow.Model` cannot be solved
- In reality, the PV would be curtailed in such a situation, and this is now modelled in EnergyFlow
- So the initial values of `EnergyFlow.Model` must not be solvable, and these values should be hard constraints for the ESS or grid
- Further restriction of these boundaries is only possible if the model is to be solvable

Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Leonhard Anderle <132663596+leonhardanderle@users.noreply.github.com>
Co-committed-by: Leonhard Anderle <132663596+leonhardanderle@users.noreply.github.com>
- Makes sure Grid-Buy-Soft-Limit is set for every timestamp and never exceeds Grid-Buy-Hard-Limit
- Add Channel `_meta/GridBuySoftLimit`

Reviewed-by: Leonhard Anderle <132663596+leonhardanderle@users.noreply.github.com>
Reviewed-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
Co-committed-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
Local OpenEMS UI did only show a white page, because login was never shown.

Co-authored-by: DerMuaaa <102706922+Andreas Mur@users.noreply.github.com>
Reviewed-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Andreas Mur <102706922+DerMuaaa@users.noreply.github.com>
Co-committed-by: Andreas Mur <102706922+DerMuaaa@users.noreply.github.com>
- fixes app redirect to oauthcallback component, redundant call
- problem stuck in login screen

Co-authored-by: DerMuaaa <102706922+Andreas Mur@users.noreply.github.com>
Reviewed-by: Andreas Mur <102706922+DerMuaaa@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Co-committed-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
sfeilmeier and others added 9 commits March 12, 2026 22:53
Reviewed-by: Andreas Mur <102706922+DerMuaaa@users.noreply.github.com>
Reviewed-by: Alex Belke <233420507+alexbelkedev@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Co-committed-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
- added battery capacity to app
- added inputtype number to vehicle app

Co-authored-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Reviewed-by: Leonhard Anderle <132663596+leonhardanderle@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
Co-committed-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
- Refactored existing shelly components to reuse code
- Refactored existing shelly diy app to reuse code
- Added new shelly app for shelly meters
- Added discovery to shelly pro 3em component
- Currently only Shelly Pro 3EM is supported
-- Support for other Shelly Pro devices is planned
- The app is currently only available for admins

Co-authored-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Co-authored-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Reviewed-by: Leonhard Anderle <leonhard.anderle@fenecon.de>
Reviewed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Franz Reiter <1498918+Howaner@users.noreply.github.com>
Co-committed-by: Franz Reiter <1498918+Howaner@users.noreply.github.com>
- Add legacy-peer-deps=true to .npmrc to preserve transitive
  dependencies (chokidar, glob-parent, picomatch, readdirp) during
  npm install, fixing npm ci sync errors in Android builds
- Add missing @angular/animations@20.3.17 dependency
  Fixes TS2307 "Cannot find module '@angular/animations/browser'"
  error in application bundle generation
- Fix Java warnings in Eclipse IDE
Reviewed-by: Victor Nagy <11665068+v-nagy@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Co-committed-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
- Two overlapping fallback tasks caused endless recursion

Reviewed-by: Sagar Venu <32655208+venu-sagar@users.noreply.github.com>
Reviewed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Reviewed-by: Victor Nagy <11665068+v-nagy@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
Co-committed-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
Implemented a structured log verbosity system for the CycleWorker to control the level of detail for component, parent, Sum component, and phase operations.

Component and parent channel updates respect verbosity levels.

Sum component and phase events are logged and measured consistently.

The system ensures flexibility for debugging, monitoring, and performance measurement without duplicating code.

Goal:
Enable configurable, centralized logging and measurement in CycleWorker based on verbosity levels, improving maintainability and observability.

Co-authored-by: Fabian Brandtner <10850256+fabian94533@users.noreply.github.com>
Co-authored-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Reviewed-by: Fabian Brandtner <10850256+fabian94533@users.noreply.github.com>
Reviewed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Hueseyin Sahutoglu <34771592+huseyinsaht@users.noreply.github.com>
Co-committed-by: Hueseyin Sahutoglu <34771592+huseyinsaht@users.noreply.github.com>
@codecov
Copy link

codecov bot commented Mar 12, 2026

Codecov Report

❌ Patch coverage is 64.69808% with 1064 lines in your changes missing coverage. Please review.

Additional details and impacted files
@@              Coverage Diff              @@
##             develop    #3624      +/-   ##
=============================================
+ Coverage      58.77%   59.83%   +1.07%     
  Complexity       104      104              
=============================================
  Files           3082     3191     +109     
  Lines         133556   140401    +6845     
  Branches        9799    10250     +451     
=============================================
+ Hits           78486    83998    +5512     
- Misses         52153    53271    +1118     
- Partials        2917     3132     +215     
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

sfeilmeier and others added 11 commits March 18, 2026 22:04
We identified three different use-cases for application of a (PID-)filter in OpenEMS Edge:

- (1) Defined Set-Point without control loop -> no filter is necessary
  - Example: FixActivePower, DelayDischarge,...

- (2) Set-Point requires a control loop -> filter is necessary
  - Example: Balancing, 70%-Limit, Peak-Shaving,...

  - a) Systems that always apply filter (e.g. KACO 92)
    - Apply the PID-Filter that is configured in `Ess.Power`

  - b) Systems that have internal grid-meter control loops (e.g. FENECON Home, GoodWe)
    - PID-Filter in `Ess.Power` is disabled, so that SMART mode can find out if internal control should be activated
    - Component (here `AbstractGoodWe`) holds an internal PID-Filter that is only applied when internal control mode is not active

--

Details:

- Remove `DisabledPidFilter` - use `null` instead
- Rename methods in `ManagedSymmetricEss` to be more explicit
  - `setActivePowerEqualsWithFilter()` for use-case (1)
  - `setActivePowerEqualsWithoutFilter() for use-case (2)
- Use the term `Filter` instead of `PidFilter` because we will soon have different Filter implementations (separate PR/dev team)
- Move `null` checks to ManagedSymmetricEss
- TimeOfUseTariff: always apply Filter; remove internal filter
- Remove Channel `SET_ACTIVE_POWER_EQUALS_WITH_PID`
- GoodWe / FENECON battery inverter:
  - use internal PT1-Filter for REMOTE mode

Co-authored-by: Alex Belke <233420507+alexbelkedev@users.noreply.github.com>
- A StsBox with a generator can be added in the Commercial 50 and 100 app. The generator can be configured with parameters such as preheating time and whether it should charge the battery. In case of a power failure, the generator starts automatically and switches according to the configured settings
- two new component classes with the factory ids "GoodWe.StsBox" and "GoodWe.Generator"
- Channels in the GoodWe.StsBox  for the Configuration of the generator mapped to a modbus register
- GoodWe.Generator implements the nature Electricitymeter
- It has the new MeterType GRID_GENSET
- it will calculate the active power from the formula ( backupPower - essPower - pvPower ) every second if the Channel GENERATOR_OPERATING_MODE is true
- We get the value from GENERATOR_OPERATING_MODE via modbus from GoodWe and it states if the generator is active
- it will also calculate the energy every second
- new GridMode OFF_GRID_GENSET
- new addition in the converter of the channel GRID_MODE in AbstractGoodWe to possibly also return GRID_GENSET if the generator is active which will be read of the GENERATOR_OPERATING_MODE channel
- new calculation on the sum/GRID_MODE. If at least one ess gride mode is OFF_GRID_GENSET and no other is ON_GRID, the sum will get OFF_GRID_GENSET
- new GridGenSetActivePower in Sum, which has the active power of meter that have the MeterType GRID_GEN_SET
- also the GridActivePower has the active power on all meters that have the MeterType GRID_GEN_SET
-  new config in the Commercial 50 and 100 apps to configure the stsBox
- a stsBox and a generator component will be created

Co-authored-by: Leon Blenk <168936274+LaBlanko@users.noreply.github.com>
Co-authored-by: Sebastian Asen <47855186+sebastianasen@users.noreply.github.com>
Co-authored-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Reviewed-by: Sebastian Asen <47855186+sebastianasen@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
Co-committed-by: Johann Kaufmann <165755282+johannk24@users.noreply.github.com>
- ENTSO-E Api: move to HTTP Bridge Thirdparty (in preparation of fetching via Backend)
- Deprecate "Resolution"

Others:
- HTTP Bridge: add Periodic Executor
- Add `OpenemsNamedRuntimeException`
- JsonPath: add handlers for `Instant`
- `DurationUnit.java`: add Comparable
- Added Czechia and Greece as price bidding regions
- `ArrayUtils`: add `concatAll()` and `concatLists()`
- Introduce `BehaviorSubject`
- `DateUtils` improvements
- `StringUtils`: add `toStringOrElse()`
- Introduce `TimeSpan`
- `XmlUtils`: Added xml parser utility
- CountryCode: add Belgium
  - SubdivisionCode improve

Co-authored-by: Franz Reiter <1498918+Howaner@users.noreply.github.com>
Co-authored-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Reviewed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Co-authored-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Reviewed-by: Hanna Späth <198875998+HaSp97@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Victor Nagy <11665068+v-nagy@users.noreply.github.com>
Co-authored-by: DerMuaaa <102706922+Andreas Mur@users.noreply.github.com>
Co-authored-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Reviewed-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Reviewed-by: Hanna Späth <198875998+HaSp97@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Andreas Mur <102706922+DerMuaaa@users.noreply.github.com>
Co-committed-by: Andreas Mur <102706922+DerMuaaa@users.noreply.github.com>
Refactor production to new ui

Co-authored-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Reviewed-by: Hanna Späth <198875998+HaSp97@users.noreply.github.com>
Reviewed-by: Andreas Mur <102706922+DerMuaaa@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
Co-committed-by: Lukas Rieger <73471197+lukasrgr@users.noreply.github.com>
- Added support for the following shelly devices to shelly meter app: Pro1PM, Pro2PM, Pro4PM, Pro 3EM-400, Pro 3EM-3CT63, Pro 3EM-63W, Pro 3EM-64T
- Added translation for available firmware update information

Co-authored-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Co-authored-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Reviewed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Franz Reiter <1498918+Howaner@users.noreply.github.com>
Co-committed-by: Franz Reiter <1498918+Howaner@users.noreply.github.com>
- Add TimeOfUseFeedInTariff interface
- Add "Fixed" implementation with a configurable fixedFeedInPrice
- Add "EEG 2025" tariff for German "Erneuerbare Energien Gesetz 2025" with fixed feed-in-price and "0" feed-in-price during periods with negative market price.

Co-authored-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Reviewed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Leonhard Anderle <132663596+leonhardanderle@users.noreply.github.com>
Co-committed-by: Leonhard Anderle <132663596+leonhardanderle@users.noreply.github.com>
- Added a new singleton component TariffManager
- Manages all available tariffs and tariff components in the system
- Provides a centralized API to retrieve electricity prices for buying and selling

Co-authored-by: Leonhard Anderle <132663596+leonhardanderle@users.noreply.github.com>
Co-authored-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Reviewed-by: Stefan Feilmeier <3515268+sfeilmeier@users.noreply.github.com>
Co-authored-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
Co-committed-by: Michael Grill <59126309+michaelgrill@users.noreply.github.com>
@Sn0w3y
Copy link
Collaborator

Sn0w3y commented Mar 21, 2026

JFYI:

The Resolving does not work because of "BoschBpts5HybridApiClient" still using Jetty 9. I already implemented a fix locally if needed/wanted.

@sfeilmeier
Copy link
Contributor Author

I was stuck with this, too. My plan was to convert it to http bridge. But if you already have a solution I'm happy to use it. Can you create a pr, please?

@sfeilmeier sfeilmeier merged commit b9d4827 into develop Mar 21, 2026
2 checks passed
@sfeilmeier sfeilmeier deleted the feature/fems-backports branch March 21, 2026 22:00
@sfeilmeier sfeilmeier changed the title FEMS Backports 2026-03-xx FEMS Backports 2026-03-21 Mar 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants