Releases: OpenEMS/openems
2020.23.0
Highlights
- Implement SMA Sunny Home Manager 2.0 Meter; thanks @martingruening (#1275) (#1280)
- Now you can use your existing SMA Sunny Home Manager Meter for advanced control algorithms via OpenEMS
- See also discussion at OpenEMS Community: https://community.openems.io/t/can-consumptionactivepower-be-negative/321/17
- FENECON Mini Energy Storage System: add write-mode for remote-control (#1266)
- Thanks to the power of Open-Source, this adds new exciting (after-market) possibilites for a system, that is already a couple of years old
- add write-mode: allows remote control of the system as ManagedSymmetricEss
- move "TheCommunicationWireToAmmeterBreak" to Mini Grid-Meter
- calculate energy from power values for Ess, Grid-Meter and PV-Meter
- implement everything in State-Machines with proper documentation
- add JUnit tests
- plus:
- Improve visualization of Enums in OpenEMS test framework
- SymmetricEss-Api: fix GridMode javadoc
Bug Fixes and Other Changes
-
Add predefined workingsets for Eclipse IDE
-
UI: add french translation; thanks @denis-jidovtseff-jc (#1265)
-
Ess-Power class: add distribution of ReactivePower (#1274)
-
Add JUnit tests for Modbus protocol definitions (#1278)
defineModbusProtocol()
now throws an OpenemsException if addresses are wrong- added simple JUnit tests on all modbus devices to test the modbus protocol definitions
- modified all
activate()
calls in AbstractOpenemsModbusComponent to return on configuration update - Fix modbus protocols in
- Soltaro Version A SingleRack
- Sinexcel ESS
- and some more
- Appy autoformat on touched files
- Update OSGi templates for modbus devices
-
Simulator Datasources: improve handling of values (#1282)
- CSV heading can now be full Channel-Address ("Component-ID/Channel-ID") or only the Channel-ID
-
RRD4j: Implement QueryHistoryEnergyPerPeriod; thanks @ahummelsberger (#1269)
-
Fix various typos in the code; thanks @luzpaz #1260 #1277 #1276 #1270 #1281 #1284 #1285)
-
Fix UI widgets parsing of with number inputs #1256
-
Fix UI History Charts (#1273)
- Hotfix for kWh-Value Chart to show regular data if no kWh data is available
-
Fix mindischargeperiod .project file; thanks @denis-jasselette-jc (#1271)
-
Fix ComponentManager CreateComponentConfigRequest handling of empty arrays 881048f
-
Fix Excel Export: Consumption values and date-string for one day (#1283)
-
Fix KACO 92 battery inverter + charge/discharge power for EssCluster; thanks @pooran-c (#1286)
- Add special handling for KACO 92 battery inverter:
- has no display and as such SunSpec-Model 64203 is not available
- allow disabling of the Watchdog function
- Also add AllowedCharge/-Discharge power to EssCluster
- Add special handling for KACO 92 battery inverter:
-
KACO50: improve watchdog handling (#1217)
-
Update UI dependencies ecd2baf
2020.22.0
Highlights
- UI: add kWh as bar chart for energymonitor in history (#1250)
-
Fixes:
- remove deprecated npm packages
- update to latest npm packages
- adjust live energymonitor to be shown correctly
- replace ngOnInit with ionViewWillEnter in components where it is needed
(ngOnInit fires only once with ion-router-outlet, independently of visiting the component again)
-
Minor Features:
- set language on startup dependend of browser language
- remove redundancy in history energymonitor component
- better visibility for history energymonitor components legend
- show month when a month is picked via 'other period' in history component
- add real time detection that determines if user uses a device with smartphone resolution (<577px width)
- use whole width for history energymonitor component if smartphone resolution is used
-
Main Feature:
- if kWh are enabled via service component
- add bar chart for kWh values in history energymonitor
- bar chart shows energy per day including direct consumption
- on smartphone devices: kWh bar chart is enabled when period is > 1 day
- on non smartphone devices: kWh bar chart is enabled when period is > 7 days
- production and consumption values are opt in via legend
- realtime adjustment of chart when resolution changes from/to smartphone resolution
- add month to pickdate component
Bug Fixes and Other Changes
- Modbus/TCP and REST-Apis: log active write requests dfab9ef
- Requests are logged in the new ApiWorker Channel as String of the form "ess0/SetActivePowerLessOrEquals:2000|ess0/SetActivePowerGreaterOrEquals:-2000"
- Generic ESS: improve calculation of allowed power(#1254)
- improve calculation of allowed charge/discharge power based on voltage
- add static constraints to block power, when ESS is not started
- Fix InfluxDB bundle and EdgeConfigWorker (possible NullPointerException) 768adc6
- see also thread in OpenEMS Community https://community.openems.io/t/scheduler-all-alphabetically-cycle-time-field-is-missing/317/2
- Fix XLSX report for Modbus/TCP Api 8ae8a57
- UI: translated login page (#1257) - thanks @denis-jasselette-jc for your first contribution!
- GenericManagedSymmetricEss: add Modbus table for Modbus/TCP Api (#1262)
- Added the modbus slave table in generic Ess
- Changed the chargeEnergy and DichargeEnergy channels in battery inverter
- OpenemsComponent: add helpful error message on missing 'State' Channel (#1264)
- Update dependencies e4d4f10 ac67cc1 a527020 71586bc 3746ce6
2020.21.0
Highlights
- BMW Batteries: implement Start-Stop feature (#1240)
- BYD Battery-Box Commercial: implement Start-Stop feature (#1222)
- REFU88k battery inverter: add channels for charge/discharge energy 493e1bf
- KACO 50/92 battery inverter: add channels for charge/discharge energy 21cc130
- KEBA Wallbox: add state channels for all possible mistakes in the Dip-Switch settings (#1235)
- ESS Delayed Sell-To-Grid Controller: new implementation (#1239, #1246)
- this new Controller controls an energy storage system so, that it delays the sell-to-grid power e.g. of a photovoltaics system.
- It charges the battery, when sell-to-grid power exceeds the configured "Sell-To-Grid power limit" and discharges when sell-to-grid power is falling below "Continuous Sell-To-Grid power".
- Continuous Integration: enable JUnit tests in Travis CI (#1242)
- this enables automated unit tests on each commit to the OpenEMS repository
- Fix all existing JUnit tests with latest version of OpenEMS Unit test Framework
- Use ComponentManager for mocked Clock everywhere
- Add unit tests to bundle templates
- and also: apply Checkstyle & fix deprecated warnings on build
- UI: add widget to show digital input states (#1195)
Bug Fixes and Other Changes
2020.20.0
Highlights
-
Enable Gitpod cloud IDE (#1227)
- Original comment by Gitpod:
This commit implements a fully-automated development setup using Gitpod.io, an online IDE for GitHub and GitLab that enables Dev-Environments-As-Code. This makes it easy for anyone to get a ready-to-code workspace for any branch, issue or pull request almost instantly with a single click. - The Gitpod workspace automatically builds and runs instances of OpenEMS Edge, Backend and UI. They are preconfigured to simulate an energy system with two photovoltaics systems, an energy storage system, simulated consumption, self-consumption optimization and some controllers that act on simulated I/Os.
- To open a Gitpod workspace, follow the links in the main README.MD file or directly https://gitpod.io/#https://github.com/OpenEMS/openems/tree/master. To open any other branch in Gitpod adjust the link accordingly, like https://gitpod.io/#https://github.com/OpenEMS/openems/tree/feature/XYZ
- Original comment by Gitpod:
-
Massive performance improvements on Energy Storage Systems Power-Solver (#1232)
- The Ess Power Component is responsible for distributing power requirements to one or more energy storage systems, while considering arbitrary constraints and optimizing for certain targets. These updates improve the performance of this solver by more than 400 % on large systems
- SymmetricLimitActivePower: optionally disable validation of Constraints to improve performance fa6bafc
- If Symmetric-Mode is activated in the config (=default), all L1, L2 and L3 coefficients are dropped now
- Improve perfomance of "ReduceNumberOfUsedInverters" optimizer by applying an algorithm similar to binary tree search
- Restructure file hierarchy. Reduce file lengths and use functional interfaces or static methods were appropriate
- Improve JUnit test coverage and use the OpenEMS Unit-Test framework where possible
Bug Fixes and Other Changes
-
Update to Angular 10 and more UI updates (#1229)
- Updated Node Packages
- Updated to Angular 10
- Use of Ion-Router-Outlet
- Use of NGX-Spinner
- Show single energy values in history view (like in live view)
- Set TotalChart in history consumption chart view if there are more than one evcs'
- Different Colors for EVCS in total consumption chart
-
Improve OSGi-Validate-Worker
- This worker validates that all configured Components are activated properly. If not, it can announce two error states:
- FAULT: Configuration has duplicated Component-IDs
- Component-IDs have to be unique per definition.
- Sets Channel "_componentManager/DuplicatedComponentId"
- Also prints "Duplicated:ess0,meter0" in the debug log
- WARNING: A configured OpenEMS Component was not activated
- Sets Channel "_componentManager/ConfigNotActivated"
- Can have multiple reasons (see "org.osgi.service.component.runtime.dto.ComponentConfigurationDTO.state")
- Also prints in the debug log
- Unsatisifed Reference: "Defective:ess0[Unsatisfied reference for battery,batteryInverter]"
- Missing required configuration: "Defective:ess0[Missing required configuration]"
- Failed activation: "Defective:ess0[Failed activation ]"
- Missing Bundle: "Defective:rrd4j0[Missing Bundle0]"
-
Add JSON-RPC Request for Energy-Per-Period (#1218): Define QueryHistoricTimeseriesEnergyPerPeriodRequest and Implement it for InfluxDB
- This new timeseries request will be used for an upcoming improvement on UI historic charts for energy
-
Fix QueryHistoricEnergyPerPeriod for Simulator-App (#1218)
-
Fix Circular reference on OpenEMS startup: Downgrade Apache Felix SCR to 2.1.20 a60d9f2
- The error is "Circular reference detected trying to get service" followed by a "java.lang.Exception: stack trace". Per definition the Circular references in OpenEMS should be fine the way they are, as they are always "optional" from one side. No clue, why this is now suddenly happening in SCR.
-
Improve Checkstyle check for Javadocs (#1232)
-
Add/rename generic functional interfaces that throw exceptions: ThrowingBiConsumer, ThrowingBiFunction, ThrowingConsumer, ThrowingFunction, ThrowingRunnable, ThrowingSupplier (#1232)
-
Fix Core.Cycle trigger config update on modified (#1232)
-
Core.Cycle Worker: measure minimally required Cycle-Time in "_core/MeasuredCycleTime" Channel. (#1232)
2020.19.0
Highlights
- Improvements to OpenEMS Simulator-App #1151
- NOTE: The Simulator-App is a very specific component that needs to be handled with care. It provides a full simulation environment to run an OpenEMS Edge instance in simulated realtime environment. After you ran a Simulation, you will receive the simulation result as a JSON. Also the simulation result can be viewed in OpenEMS UI.
- Breaking changes in JSONRPC Request for simulation
- Implement Timedata service: it can now provide the simulation results to OpenEMS UI
- See readme at: https://github.com/OpenEMS/openems/tree/develop/io.openems.edge.simulator
- Migrate Refu88K from ESS to BatteryInverter (#1216)
- The implemenation for REFU 88k Battery-Inverter now uses the recently added "BatteryInverter" Nature in combination with the "GenericEss" implementation.
- https://www.refu.com/speicherloesungen/
Bug Fixes and Other Changes
- Fix UI Energy Request for more than one day cee02fa
- B-Control EM300 meter #1176 9a2c8cd
- refactoring and application of latest coding guidelines
- fix scale-factor for energy channels and invert
- Fix Energy Storage Systems: set capacity values from battery (#1196)
- Fix Property-Channels for Enum configuration properties 174b78a
- Enums are now converted to OptionsEnum, so that they can be properly used inside Property-Channels.
- Fix Commercial40: trigger AllowedCharge/DischargePower calculation at onUpdate event c06720a
- PV-Inverter Sell-To-Grid-Limit: update documentation ef99573
- Predictive-Delay-Charge: Change LocalDateTime to ZonedDateTime to avoid time zone problems in prediction service. (#1214)
- Soltaro Cluster C: change modbus task priority (#1215)
- Update dependencies #1223 3be955c
2020.18.0
Highlights
- UI: Improve Excel export (#1194), 98c7b61, aa7e523
- UI: Show detailed field description for component install and update 7a4e87a
- Balancing Schedule Controller (#1207): this refactoring of the existing "Balancing Schedule Controller" comes with
- proper documentation: https://openems.github.io/openems.io/openems/latest/edge/controller.html#_symmetric_balancing_schedule
- thorough JUnit tests, applied latest OpenEMS code quality and best practices, improvements to the OpenEMS JUnit test framework
- introduction of GridActivePowerSetPoint for direct setting of a power target set-point at the grid connection point
- Soltaro Battery Rack Version B: Add Start/Stop Feature (#1202)
- UI: Optimize Performance and Subscribes (#1211)
Bug Fixes and Other Changes
- Fix Generic State-Machine: Behaviour with multiple instances of same Component (#1203)
- The former implementation of State-Machines, using
enum
s withStateHandler
s being defined directly at construction time, lead to staticStateHandler
s that were shared by all instances of the same Component. This could cause unpredictable behaviour. - This commit fixes this by providing a local instance of each StateHandler for each instance of a Component.
- The former implementation of State-Machines, using
- Update dependencies: rrd4j (#1206), postgresql (#1205, #1210), moshi (#1213), fastexcel (#1212), pax-logging (#1204), UI dependencies and gradle 2061227
- Fix UI 'null' alias 5573d9b
- ignore 'null' values for install component
- before this fix, if no 'alias' was provided in the component install dialog, it would create an alias with the string "null".
- Fix PID Filter: increase limit factor for error sum from 2 to 10.
- On very low P, I or D factors, the error sum can become quite big before the target is reached. We still need to limit it at some point to avoid it becoming too much. Tests showed that a factor of 10 is a good compromise.
2020.17.0
Highlights
- Improvements on energy values (#1187)
- Adjust driver components for GoodWe, Sinexcel, Carlo Gavazzi, KACO blueplanet gridsave, Janitza UMG96RME and all the Simulators
- Improve handling throughout the stack in OpenEMS Edge and OpenEMS UI
- Implement BMW battery (#1199)
- as used in the award winning FENECON Industrial energy storage platform
- Implement historic energy with local timeseries database RRD4J (#1198)
- Implement SOCOMEC Countis E23 meter 60519cc
Bug Fixes and Other Changes
- Fix BackendApp.bndrun: Update & resolve 7aa7be7
- Fix Backend-UI: Show 'no edges' warning only after connection was fully established c18f6dd
- Fix AbstractReadChannel: detection of changed values. This avoids unnecessary calls to the onChangeCallbacks 2f58826
- Fix StartStoppable: calls to start() and stop() fab676d
- Fix behaviour for optional configuration parameters f032667
- An optional configuration parameter is a parameter that is defined as 'required = false' within the @AttributeDefinition in Config.java.
Before the behaviour for optional 'int' parameters used to be, that they would default to '0' if they were not provided. Now - maybe caused by an update to Apache Felix Configuration Admin - they default to an empty String which causes a NumberFormatException.
- An optional configuration parameter is a parameter that is defined as 'required = false' within the @AttributeDefinition in Config.java.
- Fix Controller.Api.Websocket: subscribe topic for event handler b019ee5
- Fixes the error on startup:
WARN [org.apache.felix.eventadmin ] EventAdmin: Invalid EVENT_TOPICS : Missing - Ignoring ServiceReference
- Fixes the error on startup:
- Fix Soltaro.Single.VersionA: implement SoltaroBattery interface 3ed6dac
- Fix RRD4j: fix last timestamp check
- Thanks @ahummelsberger for pointing it out: #1185 (comment)
- Fix Generic.Ess: mixed up handlers for StopBatteryInverter and StopBattery cc8d30b
- Fix SDM630 meter: modbus registers 4988750
- Event Admin: disable timeout 0ffd25e
- NOTE: This sets the org.apache.felix.eventadmin.Timeout to 0. See https://felix.apache.org/documentation/subprojects/apache-felix-event-admin.html for details. Use case: a breakpoint in a handleEvent() or the Ess.applyPower() method could cause a timeout which blacklisted the respective event handler and would lead to unexpected situations where the event handler does not get called anymore.
- Antora docs: update versions for dependencies 3497e23
2020.16.0
Common
Edge
- Improve RRD4j implementation (#1185):
- fix local timezone handling, use rrd4j db pool, always close() RrdDb files; otherwise the pool fills up and no more files can be opened and apply coding best practices and Checkstyle
- avoid and silently ignore error "Bad sample time" 5e5ebaa
- Fix inverse logic in Ess Sell-To-Grid Limit Controller aa1ebb1
- Improve log message on activate/deactivate/modify of an OpenemsComponent b9dcaf0
- OneWire: avoid blocking initialization of components 772d85c
- activate() of OneWire components was waiting for synchronized access to the tasks list
- Controller.Api.Rest: apply AcceptRateLimit and ConnectionLimit to avoid strain on the system 3e398a5
UI
- Update Widget for Controller.CHP.SoC: allow 0 to 100 % thresholds (#1189)
- add warning if there is no permission no any Edges via Backend 61ac56b
- add Renault ZOE button to evcs widget (#1172)
- enables special handling required for charging of Renault ZOE
Backend
- Fix cookie HTTP header field name being case sensitive (#1190) Thanks @fgarlin for your first contribution!
Future
A lot of big new features did not yet make it into this release, but Pull-Requests are one the way:
- Major rewrite of the Excel Export from UI #1194 by @pooran-c
- Support for Siemens Simatic IOT2000 #1188 by @ahummelsberger
- Proper calculation and handling of kWh energy values #1187 by @sfeilmeier
- Resending of historic data to backend after an interruption of the connection #1177 by @venu-sagar
- Direct Login on OpenEMS Backend via UI #1013 by @fabianfnc & @sfeilmeier
2020.15.0
Common
- DefaultConfiguration: improve error handling when applying default configuration
- NOTE: Use DefaultConfigurationWorker to simplify appling default configurations on your deployments - like always setting up a Backend.Api.Controller.
- Refresh docs and screenshots (#1178). See...
- Update java and ui dependencies and gradle #1179 d161927 2514942
Edge
- Implement Generic JsonLogic Controller (#1148)
- The JsonLogic-Controller is a very generic Controller that allows the definition of a complex logic as a configuration at runtime, e.g. via Apache Felix Web Console. It is based on the JsonLogic specification (http://jsonlogic.com[jsonlogic.com]).
2020.14.0
Common
- Update UI and Java dependencies
Edge
- Implement Shelly Plug S and Shelly 2.5 WiFi Switches (#1156)
- Controller IO Heating-Element: apply default Level in manual mode c6bab9b
- Migrate JUnit tests to new JUnit test framework
- Add JUnit tests for manual mode
- Work on Energy Storage System power distribution optimizer (#1167)
- FENECON Pro 9-12 fix MaxApparentPower (#1167)
- Soltaro Single B: add missing Api Channels (#1164)
- write necessary component channels to api channels, fix isUndefined() for state machine
- Avoid 'SuppressWarnings'
- Do not handle events if component is disabled. ab02d46
- Add missing if-clause to break-early the event handling of multiple components.