There is a newer version of the record available.

Published November 1, 2024 | Version 2024.11.0

OpenEMS/openems: 2024.11.0

  • 1. FENECON GmbH, OpenEMS Association e.V.
  • 2. FENECON GmbH
  • 3. Apple Inc.
  • 4. Fenecon
  • 5. University Deggendorf
  • 6. @OpenEMS
  • 7. Microcare
  • 8. @girasolenergy
  • 9. @opernikus-common
  • 10. opernikus GmbH
  • 11. KATEK

Description

Release Highlights

  • Improved Excel Export in https://github.com/OpenEMS/openems/pull/2846
  • FFR: Fast Frequency Response Controller in https://github.com/OpenEMS/openems/pull/2835
  • Improved State-Machine for Energy Storage Systems; this includes downgrading many FAULT states to WARNING! in https://github.com/OpenEMS/openems/pull/2835
  • Modbus-Bridge: fix seldom but critical race condition in https://github.com/OpenEMS/openems/pull/2835
  • HardyBarth Wallbox: full refactoring based on HTTP-Bridge in https://github.com/OpenEMS/openems/pull/2846
  • EVCS implements ElectricityMeter; includes per-phase measuring of charging power and configurable PhaseRotation in https://github.com/OpenEMS/openems/pull/2835
  • Improvements to JUnit test framework + possibility to test raw modbus reads in https://github.com/OpenEMS/openems/pull/2846 and https://github.com/OpenEMS/openems/pull/2863
  • First iteration of new Energy Scheduler for time-of-use tariffs in https://github.com/OpenEMS/openems/pull/2789
  • New channel _host/OsVersion: read os version as string in https://github.com/OpenEMS/openems/pull/2863
  • Time-of-use-Tariff: new provider Swisspower; improvements to ENTSO-E in https://github.com/OpenEMS/openems/pull/2839 and https://github.com/OpenEMS/openems/pull/2863
  • Lots of UI bugfixes and improvements

Details

Common/General

  • Add docker deploy documentation by @da-Kai in https://github.com/OpenEMS/openems/pull/2829
  • Add hint to README to fix an error with building a Docker image by @j-eissler in https://github.com/OpenEMS/openems/pull/2833
  • FEMS Backports 2024-10-19 in https://github.com/OpenEMS/openems/pull/2846
    • Update gradle to 8.10.2
      • https://github.com/gradle/gradle/releases/tag/v8.10.2
  • Update Checkstyle to 10.18.2 by @sfeilmeier in https://github.com/OpenEMS/openems/pull/2847
  • HardyBarth Wallbox: full refactoring, using HTTP-Bridge

OpenEMS Backend

  • FEMS Backports 2024-10-11 in https://github.com/OpenEMS/openems/pull/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
  • FEMS Backports 2024-10-19 in https://github.com/OpenEMS/openems/pull/2846
    • Extend export to Excel file
      • Added detailed data for the excel export of historic data

OpenEMS Edge

  • FEMS Backports 2024-10-11 in https://github.com/OpenEMS/openems/pull/2835
    • FFR: Fast Frequency Response Controller
      • Includes:
        1. Fast Frequency request controller.
        1. Junit test cases.
        1. 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()
    • 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:
[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 https://github.com/OpenEMS/openems/pull/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
  • Energy Scheduler by @sfeilmeier in https://github.com/OpenEMS/openems/pull/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) and Controller.Ess.Time-Of-Use-Tariff to the same Version!
    • 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 and
      • Controller.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.
  • ToU+EVCS: fix calculation of _sum/UnmanagedConsumptionActivePower by @sfeilmeier in https://github.com/OpenEMS/openems/pull/2856
  • ENTSO-E: fix parsing of XML, resolution fallback, improve error handling by @Sn0w3y in https://github.com/OpenEMS/openems/pull/2839
  • FEMS Backports 2024-11-01 in https://github.com/OpenEMS/openems/pull/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

OpenEMS UI

  • FEMS Backports 2024-10-11 in https://github.com/OpenEMS/openems/pull/2835
    • fix non refactored charts
      • Display of non refactored charts did not work, because of latest debounce change, e.g. Storage history
    • 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
  • add import order rule to eslint by @sfeilmeier in https://github.com/OpenEMS/openems/pull/2838
  • fix some UI display error by @da-Kai in https://github.com/OpenEMS/openems/pull/2837
  • FEMS Backports 2024-10-19 in https://github.com/OpenEMS/openems/pull/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 to device/edgeId/live
      • Navigation for users with at least Role INSTALLER -> /overview
      • Removed flickering of headerComponent. Issue results from creating header component for each view
    • Refactor heating element history
      • Refactoring HeatingElement and using the new Cumulated[Level 1 -3]ActiveTime
    • 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
  • fix: Delete the duplicate button by @Jasonlee6789 in https://github.com/OpenEMS/openems/pull/2844
  • Unify icon styling by @da-Kai in https://github.com/OpenEMS/openems/pull/2731
  • FEMS Backports 2024-11-01 in https://github.com/OpenEMS/openems/pull/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

Version Upgrades

  • Build(deps): Bump org.jetbrains.kotlin:kotlin-osgi-bundle from 2.0.20 to 2.0.21 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/2840
  • Build(deps): Bump org.bouncycastle:bcpkix-jdk15to18 from 1.77 to 1.78.1 in /cnf by @dependabot in https://github.com/OpenEMS/openems/pull/2841
  • Build(deps-dev): Bump the eslint group across 1 directory with 2 updates by @dependabot in https://github.com/OpenEMS/openems/pull/2855
  • Build(deps): Bump the ngx-formly group across 1 directory with 2 updates by @dependabot in https://github.com/OpenEMS/openems/pull/2854
  • Build(deps): Bump chart.js from 4.4.4 to 4.4.5 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/2852
  • Build(deps): Bump chartjs-plugin-annotation from 3.0.1 to 3.1.0 in /ui by @dependabot in https://github.com/OpenEMS/openems/pull/2850

New Contributors

  • @j-eissler made their first contribution in https://github.com/OpenEMS/openems/pull/2833
  • @Jasonlee6789 made their first contribution in https://github.com/OpenEMS/openems/pull/2844

Full Changelog: https://github.com/OpenEMS/openems/compare/2024.10.0...2024.11.0

Files

OpenEMS/openems-2024.11.0.zip

Files (67.0 MB)

Name Size Download all
md5:3bf62d254e3d59c998fcf9f166e6ce04
67.0 MB Preview Download

Additional details

Related works