github-actions
released this
01 Nov 17:50
·
7 commits
to develop
since this release
Release Highlights
- Improved Excel Export in #2846
- FFR: Fast Frequency Response Controller in #2835
- Improved State-Machine for Energy Storage Systems; this includes downgrading many FAULT states to WARNING! in #2835
- Modbus-Bridge: fix seldom but critical race condition in #2835
- HardyBarth Wallbox: full refactoring based on HTTP-Bridge in #2846
- EVCS implements ElectricityMeter; includes per-phase measuring of charging power and configurable PhaseRotation in #2835
- Improvements to JUnit test framework + possibility to test raw modbus reads in #2846 and #2863
- First iteration of new Energy Scheduler for time-of-use tariffs in #2789
- New channel
_host/OsVersion
: read os version as string in #2863 - Time-of-use-Tariff: new provider Swisspower; improvements to ENTSO-E in #2839 and #2863
- Lots of UI bugfixes and improvements
Details
Common/General
- Add docker deploy documentation by @da-Kai in #2829
- Add hint to README to fix an error with building a Docker image by @j-eissler in #2833
- FEMS Backports 2024-10-19 in #2846
- Update gradle to 8.10.2
- Update Checkstyle to 10.18.2 by @sfeilmeier in #2847
- HardyBarth Wallbox: full refactoring, using HTTP-Bridge
OpenEMS Backend
- FEMS Backports 2024-10-11 in #2835
- WsData:
- reduce logging noise
- Instead of
[ctrlBackend0] [BackendApi.WsData []] Unable to send message:
- Only:
[ctrlBackend0] Unable to send message:
- Extend payload from 100 to 200 chars
- WsData:
- FEMS Backports 2024-10-19 in #2846
- Extend export to Excel file
- Added detailed data for the excel export of historic data
- Extend export to Excel file
OpenEMS Edge
- FEMS Backports 2024-10-11 in #2835
- FFR: Fast Frequency Response Controller
- Includes:
-
- Fast Frequency request controller.
-
- Junit test cases.
-
- Step Response Tester changes in the simulated meter. To test FFR with the simulator meter's frequency.
- EVCS HardyBarth: set "No meter values available" as WARN + translate
- Changed StateChannel "METER_NOT_AVAILABE" of the HardyBarth component to level WARNING
- Added translation files for bundle and channel
- Batteries/Battery-Inverters: downgrade FAULT states to WARNING
- Downgrade of all possible FAULT states to WARNING states
- Whenever one of these states would be true, the EssGeneric will stop the battery and the inverter. If this is necessary, it must be specifically mentioned and the state should have a proper description of the fault.
- EVCS KEBA: downgrade fault for Dip Switch 2.6, because it is now used for §14a
- ModbusBridge: invalidate Elements on removeProtocol()
- Invalidate (i.e. set UNDEFINED/null) Elements on
removeProtocol()
- JUnit test shows behaviour. REGISTER_100 is null after
removeProtocol()
- Invalidate (i.e. set UNDEFINED/null) Elements on
- ModbusTcpApi: improvements
- Fixes error taking alias (of ess) instead of Component ID. This will fix dynamically generating channel addresses.
- ActivePowerLimit and ReactivePowerLimit result in NaN if null
- Improved reusability of code through methods
- Removed constant strings
- KACO Battery Inverter: fix state transition ERROR to UNDEFINED, Frequency channel
- Return from Error Handling to Undefined
- Fix Hz channel name
- Updates for FENECON Home battery
- Adjust modbus task priority level
- Reduce number of tasks
- Improve stopping process
- Improve contains task check in Modbus Bridge
- EVCS: Hystereses with info in UI
- Hystereses for Charging stations two config values are now shown in the ui for the evcs controller
- Generic-ESS state machine improvement
- The main approach is to have a statemachine which can be run all our current systems and avoiding retry start process.
- Related to any 'Error Handling' topic should be improved or implemented seperately and required a defined generic 'Error handling' concept, which can be applied for all systems.
- Instead of maximum start or stop time attempts, starting or stopping timeouts are taken care of and shown in UI as an failure. By doing this, its aimed to let the service or engineers to analyze the failure, and forbid to harm the battery by taking an action without know-how knowledge.
- KACO BatteryInverter: component activate improvements + ModbusSlave
- Removed second activate annotation
- always set configuration in activate
- EssPower: handle Exceptions in handleEvent()
- Fix critical race condition in Modbus Bridge
- Modbus-Bridge: fix criticial race condition! If ON_EXECUTE_WRITE was called before ON_BEFORE_PROCESS_IMAGE, the forever()-loop could get stuck forever, because
cycleTasks
was never initialized. - A usual cycle looks like this: ON_BEFORE_PROCESS_IMAGE -> other events -> ON_EXEUCTE_WRITE -> long wait -> ON_BEFORE_PROCESS_IMAGE -> ...
- The time between ON_BEFORE_PROCESS_IMAGE and ON_EXEUCTE_WRITE is typically very short, especially before all Controllers are activated. This applies for the time when usually a Modbus Bridge gets activated, because this happens before all Devices and Controllers. As a result it was very unlikely, that Modbus-Bridge would receive ON_EXEUCTE_WRITE before ON_BEFORE_PROCESS_IMAGE. During activating and modifying of many components at the same time after initial setup (IBN via App Center) it seems it was much more likely for this race condition to happen.
- In this very unlikely case, unfortunately the
CycleTasksManager
would get stuck, as can be seen in this log:
- Modbus-Bridge: fix criticial race condition! If ON_EXECUTE_WRITE was called before ON_BEFORE_PROCESS_IMAGE, the forever()-loop could get stuck forever, because
- FFR: Fast Frequency Response Controller
[modbus1] State: FINISHED -> WRITE (onExecuteWrite)
[modbus1] WRITE -> WRITE (onExecuteWrite)
[modbus1] WRITE unchanged (in onBeforeProcessImage) Delay [0] (time is invalid)
[modbus1] WRITE -> WRITE (onExecuteWrite)
[modbus1] WRITE unchanged (in onBeforeProcessImage) Delay [0] (time is invalid)
...
- This problem was solved by initializing `this.cycleTasks` from `tasksSupplier`.
- New behaviour is proven to work in `CycleTasksManagerTest.java`, `testExecuteWriteBeforeNextProcessImage()` which would fail with previous code.
- Modbus-Bridge:
- ignore events before activate
- renew logging to show Component-ID everywhere
- RRD4j: reduce log warnings; remove stacktrace; add channelAddress
- EnergyScheduler:
- remove unnecessary log message
- add log verbosity
- cleanup config
- AbstractWorker:
- synchronized activate/modified code
- before calling activate twice would result in an error
- it's still not possible to stop and restart a worker (e.g. when enabling/disabling a component that uses a worker)
- AbstractOpenemsModbusComponent:
- combine common code of activate() and modified()
- removeProtocol and retryModbusCommunication are handled internally by ModbusBridge
- fix modbusReference in modified()
- Home Battery:
- wait for activate to set hardware type default
- ComponentManager is required; otherwise ClockProvider is null during init
- Ess.Power:
- fix ArrayIndexOutOfBoundsException
- fix ConcurrentModificationException when ESS are added/removed
- GoodWe Battery-Inverter: fix handleEvent called before activate. Possible NPE.
- GridOptimized charge requires a production power to run properly
- Avoid exception and inform user about unexpected behaviour of controller
- FEMS Backports 2024-10-19 in #2846
- EVCS HardyBarth: communicate via HTTP-Bridge
- Implemented BridgeHttp in Impl of HardyBarthEvcs
- All Api Calls now flow through that Bridge
- Api Calls (esp. setHeartBeat that previously was synchronous) are now asynchronous
- Add JUnit tests
- EVCS: implement ElectricityMeter
- Migrate all EVCS to ElectricityMeter Nature
- Add
DeprecatedEvcs
Nature to mark EVCS that have to be migrated and still support old Channels ChargePower and ActiveConsumptionEnergy - Implement generic
evaluatePhaseCount()
method - Implement configurable PhaseRotation in configuration and Apps (copied and adjusted from #2047)
- Fix AbstractManagedEvcs deactivate()
- Sum: do not ignore ExtremeEverValues in EdgeConfig
- Java JUnit tests: improve framework + cleanup
- Improve OpenEMS JUnit test framework
- Apply best practices to JUnit tests
- EVCS HardyBarth: communicate via HTTP-Bridge
- Energy Scheduler by @sfeilmeier in #2789
- Introduce generically usable EnergyScheduleHandler (ESH) for executing energy simulations and applying schedules
- Provide nice debugLog output and channel "SimulationsPerQuarter" to detect performance issues
- Use Cache for cost of Genotypes
- Add config property "Version" to be able to switch between old (only ESS, but fast and well tested) and new (generic ESH but slower) implementation.
- Attention: be sure to set EnergyScheduler (
Core.Energy
) andController.Ess.Time-Of-Use-Tariff
to the same Version!
- Attention: be sure to set EnergyScheduler (
- Introduce new implementation of
EnergyFlow
that uses linear constraint validation and optimization - Implement ESHs for
Controller.Ess.Time-Of-Use-Tariff
,Controller.Ess.EmergencyCapacityReserve
,Controller.Ess.LimitTotalDischarge
andController.Ess.GridOptimizedCharge
(MANUAL only)
- Old implementations are moved to
v1
packages and marked @deprecated and will be removed in one of the next versions of OpenEMS. Unfortunately right now this leads to some mixed code.
- Introduce generically usable EnergyScheduleHandler (ESH) for executing energy simulations and applying schedules
- ToU+EVCS: fix calculation of
_sum/UnmanagedConsumptionActivePower
by @sfeilmeier in #2856 - ENTSO-E: fix parsing of XML, resolution fallback, improve error handling by @Sn0w3y in #2839
- FEMS Backports 2024-11-01 in #2863
- Keba ReadWorker: fix possible Exception
- Added Tests to identify when and how the exception can occur.
- Tests for the "calculateCycleTime" work for multiple cases without throwing an exception
- Tests could still be kept for code coverage
- GoodWe: improve serial number filter
- Change the serial number filter according to the goowe serial number rule.
- Each GoodWe Type is now detected individually by its rated power in combination with its internal model series code.
- GoodWeGridMeter: adjust CURRENT sign current if needed
- Added Listener to ActivePowerLX Channels
- Each Listeners checks if the nextValue for the power channel if the current and power have the same sign
- If the sign is different the current channel is set with * -1
- JUnit Test Framework: add possibility to test raw modbus reads
DummyModbusBridge
can now be used to test raw modbus reads- Apply new test for changes in GoodWe GridMeter and SunSpec
- Also: Improve and apply
ReflectionUtils
- Replace exchangerate.host with Eurpean Central Bank API
_host/OsVersion
: read os version as string- Added OS_VERSION Channel in Host Component
- Write e. g. "11 (bullseye)" in channel for linux and for windows "Windows 11"
- Time-of-use-Tariff Swisspower
- Keba ReadWorker: fix possible Exception
OpenEMS UI
- FEMS Backports 2024-10-11 in #2835
- fix non refactored charts
- Display of non refactored charts did not work, because of latest
debounce
change, e.g. Storage history
- Display of non refactored charts did not work, because of latest
- add role is at least admin for DebugMode
- fix timeOfUsePrice zero bug: 0 != null
- Username to lowerCase & eslintRule
- eslint-rule to prevent getting fdescribe or xdescribe into production
- lowercasing username
- style improvements
- allow disabling tooltips in charts
- remove non existent fixDigitalOutputWidget from history template
- break title into multiple lines if overflowing
- Style adjustments: currentVoltageChart
- Switch left and right YAxis
- Remove beginAtZero from current and voltage chart
- hide gridLines for right yAxis - Voltage
- change order of labels, now first consumptionMeters then chargers
- round slightly negative values
- Round negative
QueryHistoricQuery
-Data around a defined threshold to 0
- Round negative
- fix non refactored charts
- add import order rule to eslint by @sfeilmeier in #2838
- fix some UI display error by @da-Kai in #2837
- FEMS Backports 2024-10-19 in #2846
- Mix Evcs & ElectricityMeter (live != history)
- Live: use ElectricityMeter if its already available (e.g. for power of individual phases)
- History: use Evcs to ensure availability of historic data
- Performance improvements
- Navigation for users with at most Role
OWNER
with one fems assigned, get directly routed todevice/edgeId/live
- Navigation for users with at least Role
INSTALLER
->/overview
- Removed flickering of headerComponent. Issue results from creating header component for each view
- Navigation for users with at most Role
- Refactor heating element history
- Refactoring HeatingElement and using the new
Cumulated[Level 1 -3]ActiveTime
- Refactoring HeatingElement and using the new
- Adjust Chart-axis generation
- Multiple yAxis: Increase chart canvas by putting y axis labels into ticks, the most upper tick gets replaced by axis title
- fix header in history charts and add enable rescaling in history charts
- Rescaling of charts was not possible due to not ignoring hidden values
- Header was shown in the chart views
- Introduce
<app-header>
and keep<header>
as single navigation point header
- Mix Evcs & ElectricityMeter (live != history)
- fix: Delete the duplicate button by @Jasonlee6789 in #2844
- Unify icon styling by @da-Kai in #2731
- FEMS Backports 2024-11-01 in #2863
- Label correction in SoC widget in history.
- Fixed lables shown below.
- Energy is represented as Power.
- Entladung/Beladung is represented as Charge/Discharge power. replaced with Just Charge/Discharge.
- replace currentUser observable with signal and solve login caching
- Start recommended restructuring observables to signals
- Fix
UserComponent
caching user information after logout
- Smaller Improvements
- Auto capitalize ibn-installer key input field to show only upper case letters in mobile view (keyboard)
- Fix wrong service number in offline manuals
- adjust time of use chart in live with replacing the upper most left yAxis tick with the chart title
- remove app center app icon
- Improving app center readability of icons
- Label correction in SoC widget in history.
Version Upgrades
- Build(deps): Bump org.jetbrains.kotlin:kotlin-osgi-bundle from 2.0.20 to 2.0.21 in /cnf by @dependabot in #2840
- Build(deps): Bump org.bouncycastle:bcpkix-jdk15to18 from 1.77 to 1.78.1 in /cnf by @dependabot in #2841
- Build(deps-dev): Bump the eslint group across 1 directory with 2 updates by @dependabot in #2855
- Build(deps): Bump the ngx-formly group across 1 directory with 2 updates by @dependabot in #2854
- Build(deps): Bump chart.js from 4.4.4 to 4.4.5 in /ui by @dependabot in #2852
- Build(deps): Bump chartjs-plugin-annotation from 3.0.1 to 3.1.0 in /ui by @dependabot in #2850
New Contributors
- @j-eissler made their first contribution in #2833
- @Jasonlee6789 made their first contribution in #2844
Full Changelog: 2024.10.0...2024.11.0