Merged
Conversation
Add option to select multiple channels at once in /channels Co-authored-by: Sebastian Asen <[email protected]> Reviewed-by: Sebastian Asen <[email protected]> Reviewed-by: Sagar Venu <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Lukas Rieger <[email protected]> Co-committed-by: Lukas Rieger <[email protected]>
Co-authored-by: Sebastian Asen <[email protected]> Co-authored-by: Michael Grill <[email protected]> Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Andreas Mur <[email protected]> Co-committed-by: Andreas Mur <[email protected]>
- Extend Evse with navigation to app center update page - Refactored app center update pages to be usable with new navigation - Fixed multiple component creation and destruction with conditional content projection Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Lukas Rieger <[email protected]> Co-committed-by: Lukas Rieger <[email protected]>
Helpbutton-component not working due to wrong property name being checked Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Lukas Rieger <[email protected]> Co-committed-by: Lukas Rieger <[email protected]>
- 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. Co-authored-by: Michael Grill <[email protected]> Co-authored-by: Stefan Feilmeier <[email protected]> Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Hueseyin Sahutoglu <[email protected]> Co-committed-by: Hueseyin Sahutoglu <[email protected]>
Reviewed-by: Johann Kaufmann <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Michael Grill <[email protected]> Co-committed-by: Michael Grill <[email protected]>
Co-authored-by: Sagar Venu <[email protected]> Co-authored-by: Sebastian Asen <[email protected]> Reviewed-by: Sebastian Asen <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Michael Grill <[email protected]> Co-committed-by: Michael Grill <[email protected]>
Reviewed-by: Sebastian Asen <[email protected]> Reviewed-by: Sagar Venu <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Lukas Rieger <[email protected]> Co-committed-by: Lukas Rieger <[email protected]>
Reviewed-by: Lukas Rieger <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Sagar Venu <[email protected]> Co-committed-by: Sagar Venu <[email protected]>
Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Sagar Venu <[email protected]> Co-committed-by: Sagar Venu <[email protected]>
Reviewed-by: Michael Grill <[email protected]> Co-authored-by: Kai Jeschek <[email protected]> Co-committed-by: Kai Jeschek <[email protected]>
Before a IndexOutOfBoundsException was thrown, which caused App Center install to fail
```
2025-08-09T19:01:59,431 [ckend0-0] ERROR [.common.jsonapi.JsonApiBuilder] Index 0 out of bounds for length 0
java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
at jdk.internal.util.Preconditions.outOfBounds(Unknown Source) ~[?:?]
at jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Unknown Source) ~[?:?]
at jdk.internal.util.Preconditions.checkIndex(Unknown Source) ~[?:?]
at java.util.Objects.checkIndex(Unknown Source) ~[?:?]
at java.util.ArrayList.get(Unknown Source) ~[?:?]
at com.google.gson.JsonArray.get(JsonArray.java:232) ~[?:?]
at io.openems.edge.core.host.OperatingSystemDebianSystemd.parseIpJson(OperatingSystemDebianSystemd.java:640) ~[?:?]
at io.openems.edge.core.host.OperatingSystemDebianSystemd.parseShowJson(OperatingSystemDebianSystemd.java:672) ~[?:?]
at io.openems.edge.core.host.OperatingSystemDebianSystemd.getSystemIPs(OperatingSystemDebianSystemd.java:614) ~[?:?]
at io.openems.edge.core.host.HostImpl.getSystemIPs(HostImpl.java:215) ~[?:?]
at io.openems.edge.app.common.props.CommunicationProps.lambda$excludingIp$6(CommunicationProps.java:80) ~[?:?]
at io.openems.edge.core.appmanager.AppDef.lambda$setField$6(AppDef.java:698) ~[?:?]
at io.openems.edge.core.appmanager.AppDef.lambda$getField$18(AppDef.java:922) ~[?:?]
at io.openems.edge.core.appmanager.AbstractOpenemsAppWithProps.lambda$getAppAssistant$16(AbstractOpenemsAppWithProps.java:210) ~[?:?]
at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) ~[?:?]
at java.util.stream.ReferencePipeline$2$1.accept(Unknown Source) ~[?:?]
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source) ~[?:?]
at java.util.stream.AbstractPipeline.copyInto(Unknown Source) ~[?:?]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) ~[?:?]
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source) ~[?:?]
at java.util.stream.AbstractPipeline.evaluate(Unknown Source) ~[?:?]
at java.util.stream.ReferencePipeline.collect(Unknown Source) ~[?:?]
at io.openems.edge.core.appmanager.AbstractOpenemsAppWithProps.getAppAssistant(AbstractOpenemsAppWithProps.java:214) ~[?:?]
at io.openems.edge.core.appmanager.AppManagerImpl.handleGetAppAssistantRequest(AppManagerImpl.java:725) ~[?:?]
at io.openems.edge.core.appmanager.AppManagerImpl.lambda$buildJsonApiRoutes$34(AppManagerImpl.java:823) ~[?:?]
at io.openems.edge.common.jsonapi.JsonApiBuilder.lambda$handleRequest$4(JsonApiBuilder.java:106) ~[?:?]
at io.openems.edge.common.jsonapi.JsonApiBuilder.lambda$rpc$7(JsonApiBuilder.java:214) ~[?:?]
at io.openems.edge.common.jsonapi.JsonApiEndpoint.handle(JsonApiEndpoint.java:63) ~[?:?]
at io.openems.edge.common.jsonapi.JsonApiBuilder.handle(JsonApiBuilder.java:702) ~[?:?]
at io.openems.edge.common.jsonapi.JsonApiBuilder.handle(JsonApiBuilder.java:661) ~[?:?]
at io.openems.edge.controller.api.common.handler.ComponentRequestHandler.lambda$buildJsonApiRoutes$6(ComponentRequestHandler.java:139) ~[?:?]
at io.openems.edge.common.jsonapi.JsonApiBuilder.lambda$rpc$9(JsonApiBuilder.java:289) ~[?:?]
at io.openems.edge.common.jsonapi.JsonApiEndpoint.handle(JsonApiEndpoint.java:63) ~[?:?]
at io.openems.edge.common.jsonapi.JsonApiBuilder.handle(JsonApiBuilder.java:702) ~[?:?]
at io.openems.edge.common.jsonapi.JsonApiBuilder.handle(JsonApiBuilder.java:661) ~[?:?]
at io.openems.edge.common.jsonapi.JsonApiBuilder.lambda$delegate$10(JsonApiBuilder.java:325) ~[?:?]
at io.openems.edge.common.jsonapi.JsonApiEndpoint.handle(JsonApiEndpoint.java:63) ~[?:?]
at io.openems.edge.common.jsonapi.JsonApiBuilder.handle(JsonApiBuilder.java:702) ~[?:?]
at io.openems.edge.common.jsonapi.JsonApiBuilder.handle(JsonApiBuilder.java:661) ~[?:?]
at io.openems.edge.common.jsonapi.SingleJsonApiBinder.handleRequest(SingleJsonApiBinder.java:82) ~[?:?]
at io.openems.edge.controller.api.backend.BackendOnRequest.apply(BackendOnRequest.java:73) ~[?:?]
at io.openems.common.websocket.OnMessageHandler.handleJsonrpcRequest(OnMessageHandler.java:83) ~[?:?]
at io.openems.common.websocket.OnMessageHandler.run(OnMessageHandler.java:61) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:?]
at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]
at java.lang.Thread.run(Unknown Source) [?:?]
```
Reviewed-by: Johann Kaufmann <[email protected]>
Reviewed-by: Lukas Rieger <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Sagar Venu <[email protected]> Co-committed-by: Sagar Venu <[email protected]>
Gradle: * Allow more than 2 Tests to run in parrallel * Enable parallel build by default * Remove `failOnNoDiscoveredTests = false` Backend.Application: * Add test for logger configuration Backend.B2BWebsocket * Add @ignore, as tests only work under certain conditions anyway Common.AbstractCycleWorkerTest; * Sleep up to 100ms: 1s -> 1ms Edge.OperatingSystemDebianSystemdTest: * Use `.lines().toList();` syntax for all tests * Use `getHostAddress()` instead of `getHostName()`, to skip the reverse name lookup: 9s -> 38ms Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Kai Jeschek <[email protected]> Co-committed-by: Kai Jeschek <[email protected]>
Added a new formly field which handles links and redirects Co-authored-by: Lukas Rieger <[email protected]> Reviewed-by: Johann Kaufmann <[email protected]> Reviewed-by: Lukas Rieger <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Michael Grill <[email protected]> Co-committed-by: Michael Grill <[email protected]>
Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Fabian Brandtner <[email protected]> Co-committed-by: Fabian Brandtner <[email protected]>
Reduce the log output to make errors clearer. Co-authored-by: Stefan Feilmeier <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Kai Jeschek <[email protected]> Co-committed-by: Kai Jeschek <[email protected]>
- Use fixed DateTime reference, instead of `.now()`, for reproducability - Remove duplicate `ReadWorkerTest` Reviewed-by: Johann Kaufmann <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Kai Jeschek <[email protected]> Co-committed-by: Kai Jeschek <[email protected]>
- fixed exception while deactivating multiple nested checkables in `CheckOr` Reviewed-by: Fabian Brandtner <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Michael Grill <[email protected]> Co-committed-by: Michael Grill <[email protected]>
- Added Request that can filter installed apps with the following filter - componentId - OpenemsAppCategory - factoryId - added response to UpdateAppConfig Co-authored-by: Johann Kaufmann <[email protected]> Reviewed-by: Johann Kaufmann <[email protected]> Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Lukas Rieger <[email protected]> Co-committed-by: Lukas Rieger <[email protected]>
- Added class EvcsComponent to clean up historic data generation in all views Co-authored-by: Lukas Rieger <[email protected]> Reviewed-by: Lukas Rieger <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Johann Kaufmann <[email protected]> Co-committed-by: Johann Kaufmann <[email protected]>
- prevent disabled components to be shown for new navigation Reviewed-by: Johann Kaufmann <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Lukas Rieger <[email protected]> Co-committed-by: Lukas Rieger <[email protected]>
Reviewed-by: Leonhard Anderle <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Lukas Rieger <[email protected]> Co-committed-by: Lukas Rieger <[email protected]>
- use active power for non hybridEss and subnavigation for phase details only for hybridEss Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Lukas Rieger <[email protected]> Co-committed-by: Lukas Rieger <[email protected]>
Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Hanna Späth <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Lukas Rieger <[email protected]> Co-committed-by: Lukas Rieger <[email protected]>
- handling the automatinc prefix appending to absolute links. Now it only appends the DefaultPrefix if the link is relative. - future TODO: add handeling dotted nested links in help-button setLink() method. Reviewed-by: Lukas Rieger <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Anas Shetla <[email protected]> Co-committed-by: Anas Shetla <[email protected]>
- Addition to #2203 due to bad review - on unselecting edge unsubscribe if there is still a edgeRpcNotification happening Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Lukas Rieger <[email protected]> Co-committed-by: Lukas Rieger <[email protected]>
Reviewed-by: Hanna Späth <[email protected]> Reviewed-by: Lukas Rieger <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Anas Shetla <[email protected]> Co-committed-by: Anas Shetla <[email protected]>
Reviewed-by: Hanna Späth <[email protected]> Reviewed-by: Lukas Rieger <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Anas Shetla <[email protected]> Co-committed-by: Anas Shetla <[email protected]>
- Add `StateMachine` to AllowedChannels in Backend - Increase Persistence Priority for `ActualMode`
- Added min and max power in generic vehicle and generic vehicle app Co-authored-by: Sebastian Asen <[email protected]> Reviewed-by: Sebastian Asen <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Johann Kaufmann <[email protected]> Co-committed-by: Johann Kaufmann <[email protected]>
- The current weather and the forecast for the next 24 hours are now being written in channels - This is more efficient in UI Co-authored-by: Sebastian Asen <[email protected]> Reviewed-by: Sebastian Asen <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Leonhard Anderle <[email protected]> Co-committed-by: Leonhard Anderle <[email protected]>
…mport/AcExport GoodWe is not supporting EmsPowerSets above the official Limits in their Data sheets. Co-authored-by: Michael Grill <[email protected]> Co-authored-by: Stefan Feilmeier <[email protected]> Co-authored-by: Sebastian Asen <[email protected]> Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Sebastian Asen <[email protected]> Co-committed-by: Sebastian Asen <[email protected]>
- consumption shows evcs twice since last update - Consumption Meters did not filter evcs, BUT evcs list did not work since ElectricityMeter change - After Evcs list was fixed, evcss where shown twice because consumption meters still did not filter evcs Co-authored-by: Sebastian Asen <[email protected]> Reviewed-by: Sebastian Asen <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Johann Kaufmann <[email protected]> Co-committed-by: Johann Kaufmann <[email protected]>
Co-authored-by: Sebastian Asen <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Sebastian Asen <[email protected]> Co-committed-by: Sebastian Asen <[email protected]>
- Add `invert` config property to all Shelly ElectricityMeter implementations
- ignoring heat and evcs components in the extern meter list Co-authored-by: Leon Blenk <[email protected]> Co-authored-by: Sebastian Asen <[email protected]> Reviewed-by: Sebastian Asen <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Leon Blenk <[email protected]> Co-committed-by: Leon Blenk <[email protected]>
- Adds the State-Machine to UI page for better debugging
Co-authored-by: Sebastian Asen <[email protected]> Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Sebastian Asen <[email protected]> Co-committed-by: Sebastian Asen <[email protected]>
Co-authored-by: Stefan Feilmeier <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Lukas Rieger <[email protected]> Co-committed-by: Lukas Rieger <[email protected]>
- Rework of the ripple control receiver: - Main problem solved: Dynamic rcr was limiting to zero per default if feedInLimit was disabled - Added tests & testable methods - Renamed some properties/methods Co-authored-by: Sebastian Asen <[email protected]> Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Sebastian Asen <[email protected]> Co-committed-by: Sebastian Asen <[email protected]>
- dont validate json for delete or testing - Dynamic Tariffs compatbile with commercial 50 gen 3 Reviewed-by: Leon Blenk <[email protected]> Reviewed-by: Victor Nagy <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Michael Grill <[email protected]> Co-committed-by: Michael Grill <[email protected]>
- rm unnecessary props from ancillary cost: `"formattedDateRange", "key"` Co-authored-by: Michael Grill <[email protected]> Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Victor Nagy <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Lukas Rieger <[email protected]> Co-committed-by: Lukas Rieger <[email protected]>
- Added UI for RippleControlReceiver - Grid Flat Widget: Grid states "no Limitation", "Consumption Limitation" (§14a), "Feed In Limiation" (RCR), "Grid Limitation" (if both §14a and RCR are active) - Grid Modal Widget: complete rework from code generated view to html view - Grid Modal Widget: added lines for §14a Controller and Grid Feed In Limit - History: - added ChartJs boxes for RCR limitation values with cumulated daily active time - added new page "External Limitation" - RCR or §14a are only shown if they are at least activated once a day Co-authored-by: Lukas Rieger <[email protected]> Co-authored-by: DerMuaaa <102706922+Andreas [email protected]> Co-authored-by: Michael Grill <[email protected]> Reviewed-by: Lukas Rieger <[email protected]> Reviewed-by: Victor Nagy <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Fabian Brandtner <[email protected]> Co-committed-by: Fabian Brandtner <[email protected]>
Reviewed-by: Sebastian Asen <[email protected]> Co-authored-by: Lukas Rieger <[email protected]> Co-committed-by: Lukas Rieger <[email protected]>
- 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. Co-authored-by: Michael Grill <[email protected]> Co-authored-by: Stefan Feilmeier <[email protected]> Reviewed-by: Michael Grill <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Hueseyin Sahutoglu <[email protected]> Co-committed-by: Hueseyin Sahutoglu <[email protected]>
[Reference](https://www.reddit.com/r/Angular2/comments/1j71x20/how_to_format_angulars_new_controlflow_syntax_in/) - fix formatter not formatting new control flow syntax correctly, which resulted in ``` @if (form) { <form [formGroup]="form.formGroup"> </form> } ``` - fixed version: ``` @if (form) { <form [formGroup]="form.formGroup"> </form> } ``` Reviewed-by: Andreas Mur <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Lukas Rieger <[email protected]> Co-committed-by: Lukas Rieger <[email protected]>
- changed icons and Buttons to be more consistently identified with functionality Co-authored-by: DerMuaaa <102706922+Andreas [email protected]> Reviewed-by: Lukas Rieger <[email protected]> Reviewed-by: Hanna Späth <[email protected]> Reviewed-by: Stefan Feilmeier <[email protected]> Co-authored-by: Andreas Mur <[email protected]> Co-committed-by: Andreas Mur <[email protected]>
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## develop #3339 +/- ##
=============================================
+ Coverage 59.46% 59.85% +0.39%
+ Complexity 113 112 -1
=============================================
Files 2770 2786 +16
Lines 119632 120836 +1204
Branches 8914 9011 +97
=============================================
+ Hits 71133 72320 +1187
+ Misses 45825 45818 -7
- Partials 2674 2698 +24 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Common
failOnNoDiscoveredTests = falseUI
ng generate @angular/core:control-flowalert-outlinesign / icon .Edge
CheckOr.now(), for reproducabilityReadWorkerTestEnergySessionLimitwas reached.SESSION_LIMIT_REACHEDstate; replaced with State-MachinesetSetEnable()(applies also to EVCS)java.lang.Exception: On TestCase [https://github.com/OpenEMS/openems/issues/1]: expected ReadValue [CHARGING] got [UNDEFINED] for Channel [Status] in Nature [Evcs] on Inputs [[]]invertconfig property to all ElectricityMetersBackend