Controller
For the following devices driver implementations are available in OpenEMS Edge.
5. KACO blueplanet gridsave
-
Applies to
-
KACO blueplanet gridsave 50.0 TL3
-
KACO blueplanet gridsave 92.0 TL3
-
-
Implemented Natures
-
StartStoppable
-
SymmetricBatteryInverter
-
ManagedSymmetricBatteryInverter
-
8. SunSpec PV inverter
Generic implementation of SunSpec PV inverters. It is tested with - KACO blueplanet TL.3 series - SolarEdge SE12.5K - SE27.6K
10. Core services for OpenEMS Edge
10.1. ComponentManager
A service that provides easy access to OpenEMS-Components and Channels. It also provides some sub-services:
- DefaultConfigurationWorker
-
Applies a default configuration, i.e. activates certain OpenEMS Components that are to be enabled by default on deployment, like Modbus-TCP-Slave Api and JSON/REST Api.
- OsgiValidateWorker
-
Checks if configured Components are actually enabled.
- OutOfMemoryHeapDumpWorker
-
Checks for heap-dump files which get created if OpenEMS Edge crashed because of an OutOfMemory-Error in a previous run.
10.3. Host
A service that provides host and operating system specific commands like configuration of TCP/IP network.
10.4. Meta
A service that provides 'OpenemsConstants' as Channels so that they are available via Apis; example: _meta/Version for the current version of OpenEMS Edge.
10.5. Sum
A service that holds summed up information on the power and energy flows, like aggregated production, consumption and energy storage charge/discharge.
11. Edge-2-Edge
Enables Edge-to-Edge connection of devices from a slave OpenEMS Edge via Modbus. This requires Controller Api Modbus/TCP Read-Write
to be active on the slave system, e.g. via the FEMS App Modbus/TCP Schreibzugriff for a FENECON Energy Storage System.
11.2. Example application
-
Setup a 'Slave' OpenEMS Edge instance, that controls one or more energy storage systems
-
Component-ID of the energy storage system or the ESS-Cluster is
ess0
-
Activate
Controller Api Modbus/TCP Read-Write
and addess0
to the configuredcomponent_ids
-
At this point you can open OpenEMS UI and check the system profile under settings. Click on the ctrlApiModbusTcp0 component and download the generated Modbus/TCP register table. You should find ess0 listed there. An example Excel file can be found here: https://github.com/OpenEMS/openems/tree/develop/io.openems.edge.controller.api.modbus/doc
|
This is the setup you will find after purchasing a "FEMS App Modbus/TCP Schreibzugriff" for a FENECON Energy Storage System |
-
Setup a 'Master' OpenEMS Edge instance.
-
Configure
Bridge Modbus/TCP
:-
id
:modbus0
-
ip
: IP-Address of the Slave instance
-
-
Configure
Edge-2-Edge ESS
:-
id
:ess0
-
remoteAccessMode
:AccessMode.READ_WRITE
(for default Read-Only access this would beAccessMode.READ_ONLY
) -
remoteComponentId
:ess0
-
modbus_id
:modbus0
-
-
Now you are able to access the remote energy storage system as if it was connected locally, e.g. configure a
Controller Ess Fix Active Power
oness0
to set a fixed charge or discharge command.
-
13. ADS-TEC StoraXe Energy Storage System
For the moment, this is a read-only implementation. Control of the ESS is not yet supported.
Implemented Natures: - AsymmetricEss - SymmetricEss - ElectricityMeter (for Grid and PV)
15. ESS Cluster
Combines multiple energy storage systems (ESS) to one common ESS. This way every Controller can easily work with multiple ESS in parallel. Distribution of power requests to each ESS is controlled via the Power-Class .
16. FENECON Commercial 40 AC/DC/Hybrid
- Implemented Natures
-
-
SymmetricEss
-
ManagedSymmetricEss
-
EssDcCharger
-
17. Generic Energy Storage System
Represents an Energy Storage System consisting of a Battery-Inverter and a Battery.
18. Samsung ESS
This bundle implements the Samsung SDI ESS.
19. SMA SunnyIsland 6.0H and Sunny Island 4.4M
- Implemented Natures
-
-
SymmetricEss
-
ManagedSymmetricEss
-
AsymmetricEss
-
ManagedAsymmetricEss
-
SinglePhaseEss
-
ManagedSinglePhaseEss
-
20. Alpitronic Hypercharger V1-X
Implementation of the Alpitronic Hypercharger V1-X DC electric vehicle charging station.
20.2. Additional application notes
The charging station comes with up to four physical connectors. This implementation is designed in a way, that each connector is represented by an individual OpenEMS Component. So if you have a Alpitronic with two connectors, please configure two "EVCS Alpitronic Hypercharger" with the connector
configuration property set to SLOT_0
and SLOT_1
respectively.
Supported Firmware versions: 1.7.2
and higher.
21. EVCS Cluster
Distributes the charging power (Depending on the implementation) to the prioritized charging stations. The implementations calculate the maximum power that can be used by all charging stations.
Possible Cluster implementations:
Cluster for peak shaving
The peak shaving cluster is calculating the power depending on the grid power that can be used per phase, the maximum allowed storage power and the current values of grid, storage and EVCS consumption.
Cluster for self consumption
The self consumption cluster is calculating the power depending on the excess power.
22. EVCS Core
22.2. Implementing an Electric Vehicle Charging Station
These are a couple of steps that should be helpful in your implementation of a new evcs component. Note that some parts may still be missing.
-
Gather all the important information about your Electric Vehicle Charging Station (EVCS)
-
Communication Protocol
-
Possible Read/Write values (Important for used Natures and their values)
-
IP address, URL, Modbus Unit ID, or any other relevant parameters required for the communication
-
-
Select Natures depending on the Read/Write values provided by the evcs (In many cases more than one)
-
Evcs (Basic reading functionality)
-
ManagedEvcs (Additional Channels and functions for writing charge power limits)
-
SocEvcs (Additional Channels for the State of Charge information)
-
-
Use already existing Bridge (e.g. Hypercharger using AbstractOpenemsModbusComponent) or create a new bridge (Not every protocol is/can be generalized in a separate bundle)
-
Note that AbstractManagedEvcsComponent cannot be used if the component is a modbus component (Some functions must be called manually)
-
-
Create Component based on the evcs related natures. Example HyperchargerImpl:
@Designate(ocd = Config.class, factory = true) @Component(// name = "Evcs.AlpitronicHypercharger", // immediate = true, // configurationPolicy = ConfigurationPolicy.REQUIRE // ) @EventTopics({ // EdgeEventConstants.TOPIC_CYCLE_BEFORE_PROCESS_IMAGE, // EdgeEventConstants.TOPIC_CYCLE_EXECUTE_WRITE // }) public class HyperchargerImpl extends AbstractOpenemsModbusComponent implements Evcs, ManagedEvcs, OpenemsComponent, ModbusComponent, EventHandler, Hypercharger, TimedataProvider {
-
@Designate: Standard
-
@Component: Standard
-
@EventTopics: Handle this events in the handleEvent method
-
AbstractOpenemsModbusComponent: Ease the communication with a modbus device
-
Evcs: See above
-
ManagedEvcs: See above
-
OpenemsComponent: Identifies an OpenemsComponent
-
ModbusComponent: Specific for modbus component
-
EventHandler: Used to act in a specific Event in an Openems Cycle
-
Hypercharger: Individual "Nature" for additional Channels besides the evcs natures
-
TimedataProvider: Needed for this evcs to calculate the total energy charged
-
-
Create Properties needed. Most important for components not using AbstractManagedEvcsComponent:
/** * Handles charge states. */ private final ChargeStateHandler chargeStateHandler = new ChargeStateHandler(this); /** * Processes the controller's writes to this evcs component. */ private final WriteHandler writeHandler = new WriteHandler(this);
-
Constructor using ChannelIds of implementing Natures:
public HyperchargerImpl() { super(// OpenemsComponent.ChannelId.values(), // ModbusComponent.ChannelId.values(), // Evcs.ChannelId.values(), // ManagedEvcs.ChannelId.values(), // Hypercharger.ChannelId.values()); }
If it is not listed here, the component is not aware of the channels in that nature.
-
Add Activate, Deactivate & Modified
@Activate private void activate(ComponentContext context, Config config) throws OpenemsNamedException { this.config = config; if (super.activate(context, config.id(), config.alias(), config.enabled(), config.modbusUnitId(), this.cm, "Modbus", config.modbus_id())) { return; } /* * Calculates the maximum and minimum hardware power dynamically by listening on * the fixed hardware limit and the phases used for charging */ Evcs.addCalculatePowerLimitListeners(this); this.applyConfig(config); } @Modified private void modified(ComponentContext context, Config config) throws OpenemsNamedException { if (super.modified(context, config.id(), config.alias(), config.enabled(), config.modbusUnitId(), this.cm, "Modbus", config.modbus_id())) { return; } this.applyConfig(config); } private void applyConfig(Config config) { this.config = config; this.calculateTotalEnergy = new CalculateEnergyFromPower(this, Evcs.ChannelId.ACTIVE_CONSUMPTION_ENERGY); this._setFixedMinimumHardwarePower(config.minHwPower()); this._setFixedMaximumHardwarePower(config.maxHwPower()); this._setPowerPrecision(1); this._setPhases(3); } @Override @Deactivate protected void deactivate() { super.deactivate(); }
The Channel values set in the applyConfig are given by the config or by default.
The Fixed Minimum/Maximum HardwarePower and the Phases Channel are used to calculate the minimum and maximum power for the user interface. (Automatically handled by calling Evcs.addCalculatePowerLimitListeners(this) or the AbstractManagedEvcsComponent)
Maximum Charge power selected: 17000 W
4140 W -----------------------x------------ 22080 W (charging 6 - 32 amps on 3 phases)
Maximum Charge power selected: 1600 W
1380 W --x--------------------------------- 7360 W (charging 6 - 32 amps on 1 phase)
-
Modbus specific methods
-
Reference to the modbus bridge
@Override @Reference(policy = ReferencePolicy.STATIC, policyOption = ReferencePolicyOption.GREEDY, cardinality = ReferenceCardinality.MANDATORY) protected void setModbus(BridgeModbus modbus) { super.setModbus(modbus); }
-
Modbus-Register mapping
@Override protected ModbusProtocol defineModbusProtocol() throws OpenemsException { var modbusProtocol = new ModbusProtocol(this, new FC3ReadRegistersTask(this.offset.apply(0), Priority.LOW, m(Hypercharger.ChannelId.RAW_CHARGE_POWER_SET, new UnsignedDoublewordElement(this.offset.apply(0)))), new FC16WriteRegistersTask(this.offset.apply(0), m(Hypercharger.ChannelId.APPLY_CHARGE_POWER_LIMIT, new UnsignedDoublewordElement(this.offset.apply(0))), m(Hypercharger.ChannelId.SETPOINT_REACTIVE_POWER, new UnsignedDoublewordElement(this.offset.apply(2)))), ...
Most mistakes: - Wrong function code, offset, or any other information provided by the Modbus protocol or manual - Wrong AbstractModbusRegisterElement for a register - Missing register (Unimportant register could be skipped with new DummyRegisterElement(xxx),) - Important tasks with Priority HIGH are blocked by other unimportant tasks with Priority HIGH - Read/Write register must be read and write in different tasks with different function codes - Scale factor overlooked. The scale factor can be easily adjusted using, for example, SCALE_FACTOR_MINUS_2
-
-
Check if every Channel is set correctly
To do this, you could add the component in the controller 'DebugDetailedLog', or download the information of a component using the 'Excel Export' feature in the system profile."
23. dezony IQ Charging Station (BETA)
This component implements the dezony IQ charging station by the manufacturer dezony: https://dezony.com
23.1. Software release life cycle: BETA
This implementation has been carried out during OpenEMS Hackathon Q1/2023 and is not yet fully feature tested. Please consider it BETA quality
24. Go-e Charger Home Charging Station
This component implements the go-e charger home charging station, which is controlled and read out using the Rest-API protocol. It collects all relevant informations into the given Nature Channels and its own Channels and sends charging commands that have been set by another controllers.
Implemented Natures: * Evcs (Electric Vehicle Charging Station) * ManagedEvcs
25. Hardy Barth Charging Station (Salia)
This component implements the Salia charging station by the manufacturer Hardy Barth: https://www.echarge.de/de/home
Implemented Natures: * Evcs (Electric Vehicle Charging Station) * ManagedEvcs
26. KEBA KeContact c-series Charging Station
This component implements the KEBA c-series charging station, which is controlled and read out using the proprietary UDP protocol. It collects all relevant information into the given Nature Channels and its own Channels and sends charging commands that have been set by another controllers.
Implemented Natures: * Evcs (Electric Vehicle Charging Station) * ManagedEvcs
27. ABL Charging Station
This component implements the ABL EMH 3 series charging station, which is controlled and read out using the OCPP protocol. It provides specific information for the AbstractOcppEvcsComponent.
Implemented Natures: * Evcs (Electric Vehicle Charging Station) * MeasuringEvcs
Extended abstract class: * AbstractOcppEvcsComponent
28. Electric Vehicle Charging Station OCPP Common
The Open Charge Point Protocol (OCPP) is an application protocol for communication between Electric vehicle charging stations (EVCS) and a central management system.
The whole bundle contains a library of the OCPP functions. It also provides a default abstract ocpp EVCS component that can be used by every specific charging station and a OcppServer interface that provides a minimum functionality, to be able to send data to a charging station.
Implemented Natures: * Evcs (Electric Vehicle Charging Station * MeasuringEvcs (Can get measured information)
29. IES KeyWatt Charging Station
This component implements the IES KeyWatt CCS charging station with a single plug, which is controlled and read out using the OCPP protocol. It provides specific information for the AbstractOcppEvcsComponent.
Implemented Natures: * Evcs (Electric Vehicle Charging Station * ManagedEvcs * MeasuringEvcs (Can get measured information)
Extended abstract class: * AbstractOcppEvcsComponent
30. OCPP Server
The OCPP Server is implementing a central management system. The server maintains connections to the EVCS’s, i.e.
-
connects to the charging stations
-
distributes their information to each EVCS component
-
send commands to the charging stations
31. Spelsberg SMART PRO charging station (BETA)
Implementation of the Spelsberg SMART PRO charging station.
This EVCS component implementation is not yet fully feature tested. Please consider it BETA quality.
31.1. Technical Data
-
Rated current: 16A single and three phase
-
Charging cable: Type 2, up to 16A
-
Max. charging power: 11kW (three phases), 3.7kW (single phase)
-
Communication protocol: Modbus TCP
32. Webasto Next Charging Station (BETA)
Implementation of the Webasto Next electric vehicle charging station.
32.1. Software release life cycle: BETA
This implementation has been carried out during OpenEMS Hackathon Q1/2023 and is not yet fully feature tested. Please consider it BETA quality
33. Webasto Unite Charging Station (BETA)
Implementation of the Webasto Unite electric vehicle charging station.
33.1. Software release life cycle: BETA
This implementation has been carried out during OpenEMS Hackathon Q1/2023 and is not yet fully feature tested. Please consider it BETA quality
34. FENECON DESS
Applies to multiple similar products like the FENECON by BYD PRO Hybrid.
Implemented Natures: - SymmetricEss - AsymmetricEss - EssDcCharger - ElectricityMeter (for Grid and AC-connected PV)
35. FENECON Mini 3-3 | 3-6
Implemented Natures: - SinglePhaseEss - AsymmetricEss - SymmetricEss - ElectricityMeter (for Grid and PV)
36. FENECON Pro 9-12
Implemented Natures: - SymmetricEss - ManagedSymmetricEss - AsymmetricEss - ManagedAsymmetricEss - ElectricityMeter (for PV)
38. Filipowski (F&F) Analog Output
This bundle implements the MR-AO-1 analog output module, which has four possible analog outputs.
Compatible with - MR-AO-1
Implemented Natures - AnalogOutput
Default Configuration - Baud rate: 9600 - Data bits: 8 - Parity: NONE - Start bits: 1 - Stop bits: 2
39. GPIO (General Purpose Input/Output)
This bundle implements GPIO (General Purpose Input/Output) ports using LinuxFS communication. Tested mainly on Raspberry Pi based devices.
39.1. ModBerry X500 CM4
The module supports GPIOs of all ModBerry X500 CM4 models. ModBerry is based on the Raspberry Pi Compute Module 4.
The pin out description is available in the datasheet: https://modberry.techbase.eu/wp-content/uploads/2020/11/ModBerry_500CM4_EN.pdf
40. KMtronic Modbus Relay Board
This bundle implements the Kmtronic Modbus Relay board. Relay outputs can be used to turn ON/OFF lights, motors and signal alarms. Implementations are for 4 and 8 relais.
- Implemented Natures
-
-
DigitalOutput
-
42. RevolutionPi Digital IO Module
This bundle implements the Kunbus RevolutionPI DigitalIO enhancement board. It can be used to turn ON/OFF a data output or to read in digital data input. It provides 14 digital input and 14 digital output channels.
Implemented Natures: - DigitalOutput - DigitalInput
42.1. Dependencies
The RevolutionPi Digital IO OpenEms Bundle depends on the librevpi-dio-java git library project. A binary version of this library is already included in this OpenEMS Bundle. See https://github.com/clehne/librevpi-dio-java for more information.
43. Shelly WiFi Relay Switch
This bundle implements Shelly WiFi Relay Switches and Meters.
Compatible with - Shelly 2.5 - Shelly 3EM - Shelly Plug S - Shelly Plus Plug S - Shelly Pro 3EM 3-Phase Meter - Shelly Plus 1PM - Shelly Pro 3
44. WAGO Fieldbus Coupler 750-352
- Implemented Natures
-
-
DigitalOutput
-
DigitalInput
-
This component reads the current WAGO fieldbus coupler configuration and dynamically creates its Input and Output Channels accordingly.
Make sure to update the WAGO fieldbus coupler configuration before activating this component.
Open the WAGO fieldbus web interface, click "IO config" and "create ea-config.xml" to update the configuration. Default username is admin , default password is wago .
|
The following examples assume the Component-ID is io0
and the addresses are valid for the first WAGO extension.
For extensions 2, 3,… just increase the number behind M
.
Channel names follow this logic:
44.1. WAGO 750-523 "1-channel relay output"
|
Input/Output |
the relay |
|
Input |
state of the manual switch |
44.2. WAGO 750-501 "2-channel digital output"
|
Input/Output |
the first digital output |
|
Input/Output |
the first digital output |
45. Weidmüller Fieldbus Coupler UR20-FBC-MOD-TCP-V2
- Implemented Natures
-
-
DigitalOutput
-
DigitalInput
-
This component reads the current Weidmüller fieldbus coupler configuration and dynamically creates its Input and Output Channels accordingly.
The following examples assume the Component-ID is io0
and the addresses are valid for the first extension.
For extensions 2, 3,… just increase the number behind M
.
Channel names follow this logic:
45.1. Digital input module UR20-4DI-P
|
Input |
digital input #1 |
|
Input |
digital input #2 |
|
Input |
digital input #3 |
|
Input |
digital input #4 |
45.2. Digital output module UR20-8DO-P
|
Input/Output |
digital output #1 |
|
Input/Output |
digital output #2 |
|
Input/Output |
digital output #3 |
|
Input/Output |
digital output #4 |
|
Input/Output |
digital output #5 |
|
Input/Output |
digital output #6 |
|
Input/Output |
digital output #7 |
|
Input/Output |
digital output #8 |
46. KACO Blueplanet Hybrid 10
46.1. Implemented Components:
-
Kaco.BlueplanetHybrid10.Core
-
This component is always required to establish the communication to the hardware device.
-
-
Kaco.BlueplanetHybrid10.Ess
-
This implements the Energy Storage System part (i.e.
ManagedSymmetricEss
) for read-only (fast internal control) or read-write (slow external control)
-
-
Kaco.BlueplanetHybrid10.Charger
-
This implements the DC Charger/MPP tracker for the photovoltaics system (i.e.
EssDcCharger
). Note that there is only one instance for both MPP trackers, because the inverter does not provide separated power values.
-
-
Kaco.BlueplanetHybrid10.PvInverter
-
This implements the inverter as a pure photovoltaics inverter (i.e.
ManagedSymmetricPvInverter
). Use this instead of Ess+Charger, if you are using the inverter purely as PV inverter without a battery.
-
-
Kaco.BlueplanetHybrid10.GridMeter
-
This implements the grid meter (product name "VECTIS" or "blueplanet hy-switch") connected to the inverter (i.e.
ElectricityMeter
)
-
46.2. License/Dependencies
The configuration of the Kaco.BlueplanetHybrid10.Core Component requires an identkey . This relates to the "Partner ID" that has to be acquired from Katek Memmingen GmbH. Without the identkey it is not possible to establish a communication with the hardware device.*
|
This bundle is provided under the EPL (Eclipse Public License), but it depends on the Katek EDCOM library under io.openems.edge.katek.edcom
, which is licensed as LGPL (GNU Lesser General Public License) by Katek Memmingen GmbH.
47. Katek EDCOM Library
EDCOM 8.1 is a java cross platform library for communication with 10kW hybrid Inverter.
Java code provided by Katek Memmingen GmbH under the GNU LPGLv3.0. Converted to Java 11 compatible code and packaged as OpenEMS Edge bundle by FENECON GmbH.
48. KOSTAL PIKO
Implemented Natures: - SymmetricEss - ElectricityMeter (for Grid meter) - EssDcCharger (for PV)
52. DRT428M-2 Meter
Reads data of a DRT428M-2 Meter. More details are present in the below link https://xn—stromzhler-v5a.eu/stromzaehler/drehstromzaehler/fuer-hutschiene-geeicht/252/drt428m-2-zweirichtungs-drehstromzaehler-geeicht-fuer-din-hutschiene-mit-s0-ir-rs485#
Implemented Natures: - ElectricityMeter
54. Carlo Gavazzi EM300 Meter
Applies to - CARLO GAVAZZI EM330 - CARLO GAVAZZI EM340
Implemented Natures: - ElectricityMeter
55. Discovergy Smart-Meter
Reads data of a Discovergy Smart-Meter via online REST-Api. See https://api.discovergy.com for details.
Implemented Natures: - ElectricityMeter
56. Eastron/Microcare SDM 630 and 120 Meter
This implementation is functionally compatible with a number of energy meters with the names:
-
SDM 630 and
-
SDM 120
Implemented Natures: - ElectricityMeter
58. Meter KDK 420506PRO20-U (2PU CT) Professional meter
Implementation of a KDK meter.
58.1. Software release life cycle: Stable release
60. Plexlog Datalogger
Implemented Natures: - ElectricityMeter
61. PQ-Plus Meters UMD96 | UMD97
Implemented Natures: - ElectricityMeter
Details of the meter is present in
62. Schneider Acti9 Smartlink Meter
Implemented Natures: - ElectricityMeter
To configure the meter, first add a modbus tcp bridge connecting to the correct IP address, then configure this meter to use the configured modbus bridge. The unit ID is by default 1.
63. Siemens Meter
-
Applies to
-
Siemens PAC1600
-
Siemens PAC2200
-
Siemens PAC3200
-
Siemens PAC4200
-
-
Implemented Natures
-
ElectricityMeter
-
64. SMA Sunny Home Manager 2.0 Integrated Meter
This implementation uses the integrated energy meter of the SMA Sunny Home Manager 2.0 Data needs to polled through Modbus from an attached SMA inverter as the HM2.0 does not have a local API on the device itself
Implemented Natures: - ElectricityMeter
65. SOCOMEC Meter
Just configure Meter.Socomec.Singlephase
or Meter.Socomec.Threephase
. The actual type and modbus protocol of the Socomec meter is identified automatically.
-
Implemented singlephase meters:
-
Implemented threephase meters:
-
Implemented Natures:
-
ElectricityMeter
-
SinglephaseMeter
-
67. Virtual Meter
67.1. Virtual Subtract Meter
This is a virtual meter built from subtracting other meters or energy storage systems.
The logic calculates Minuend - Subtrahend1 - Subtrahend2 - …
.
Example use-case: create a virtual Grid-Meter from Production-Meter, Consumption-Meter and Energy Storage System (ESS) - by definition Consumption is defined as `Consumption = ESS + Grid + Production (AC) - or: `Grid = Consumption - ESS - Production (AC) - this can be achieved by configuring the Consumption-Meter as Minuend and Production-Meter and ESS as Subtrahends.
67.2. Virtual Add Meter
This is a virtual meter which is used to sum up the values from multiple symmetric meters. The use case for this feature is, Usually when there are multiple meters reading values from different systems, The average values from the systems make more sense for calculation and statistics.
Implemented Natures - ElectricityMeter
67.2.1. Example Configuration
-
Component-ID
: meter0 -
Alias
: virtualMeter -
Meter-Type
: PRODUCTION -
Meter IDs
: [meter1, meter2, meter3]
Meter IDs is a list of the meters which needs summing of the values. |
The above example configuration describes, The values from the three meters configured (meter1, meter2, meter3) are summed up and average values is set to the corresponding channel address.
69. Meter Ziehl EFR4001IP
Implemented Natures: - ElectricityMeter
For details, see https://www.ziehl.com/de/produkte/detail/EFR4001IP-362.
72. Similarday-Model Predictor
This predictor uses "Similar day technique" for prediction. This particular implementation requires mainly two inputs, which are * Num of past weeks (n) * The channels address data, which needs to predicted.
The similar-day models predicts by calculating the average of a 'n' number of previous period values.
example: the next monday predictions values is equal to average of past n = 4 monday values.
This predictor is mainly used for predicting the Consumption power and energy. And the Accuracy of the model is scientifically verified within EMSIG project.
73. PV-Inverter Cluster
Combines multiple PV-Inverters to one common PV-Inverter. This way every Controller can easily work with multiple PV-Inverters in parallel.
74. Fronius PV inverter
Implementation of the Fronius PV inverters.
Tested on - Fronius Symo
Implemented Natures: - ElectricityMeter - ManagedSymmetricPvInverter
75. KACO blueplanet PV inverter
Implementation of the KACO blueplanet series PV inverters.
75.1. Compatibility
-
NX3 M2 Series
-
TL3 Series
-
KACO blueplanet 3.0 TL3 - 10.0 TL3
-
KACO blueplanet 15.0 TL3 + 20.0 TL3
-
KACO blueplanet 29.0 TL3 LV
-
KACO blueplanet 50.0 TL3
-
KACO blueplanet 60.0 TL3
-
KACO blueplanet 87.0 TL3 - 125 TL3
-
KACO blueplanet 125 TL3 - 165 TL3
-
75.2. Additional application notes
Experiences from testing this plugin with a KACO Blueplanet NX3 M2:
-
Modbus Unit-ID was 3, for both Modbus TCP and RTU. Modbus TCP also worked with Unit-ID 1, but RTU only worked with 3.
-
When using the Wlan module to connect via Modbus TCP, make sure no cable is plugged into the RJ45 socket used for Modbus RTU. If there is a cable plugged in, it will still work, but you will get a lot of connection errors.
-
Similar situation when using Modbus RTU - unplug the Wlan module. Modbus RTU still works with the Wlan module plugged in, but you will get a lot of connection errors.
-
The Wlan module that handles the Modbus TCP connection does not automatically reconnect to the configured Wlan router if it looses the connection (for example, when the router is restarted), or if the router is not reachable when the inverter starts up.
-
To reconnect, the inverter needs to restart. Since the NX3 usually shuts down over night and restarts in the morning, this is not too much of a problem.
76. Kostal PV inverter
Implementation of the Kostal PV inverters.
Tested on - Kostal Plenticore 5.5 - Kostal Pico 5.5
With versions: - UI Version: 01.18.05255 - MC version: 01.47 - IOC version: 01.45
Older versions had problems with the implementation of sunspec.
Configuration in Kostal UI: Modbus must be active and byte order must be big-endian for sunspec.
Implemented Natures: - ElectricityMeter - ManagedSymmetricPvInverter
77. SMA Sunny Tripower PV inverter
Implementation of the SMA Sunny Tripower PV inverters.
Implemented Natures: - ElectricityMeter - ManagedSymmetricPvInverter
79. SunSpec PV inverter
Generic implementation of SunSpec PV inverters. It is tested with - KACO blueplanet TL.3 series - SolarEdge SE12.5K - SE27.6K
Implemented Natures: - ManagedSymmetricPvInverter - ElectricityMeter
80. Simulated OpenEMS Components
This bundle provides simulated OpenEMS Components for the Natures. They are useful for testing and demoing without real hardware.
80.1. Simulator-App
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.
Be aware that the SimulatorApp Component takes control over the complete OpenEMS Edge Application, i.e. if you enable it, it is going to delete all existing Component configurations! |
To run a simulation:
-
Run OpenEMS Edge using the EdgeApp.bndrun
-
Open up Apache Felix Web Console and
-
activate a "Controller Api REST/JSON Read-Write"
-
activate a "Simulator App"
-
-
Send a JSON-RPC Request like the following, providing full configurations for all required OpenEMS Edge Components
{
"method":"componentJsonApi",
"params":{
"componentId":"_simulator",
"payload":{
"method":"executeSimulation",
"params":{
"components":[
{
"factoryPid":"Scheduler.AllAlphabetically",
"properties":[
{
"name":"id",
"value":"scheduler0"
}
]
},
{
"factoryPid":"Simulator.GridMeter.Reacting",
"properties":[
{
"name":"id",
"value":"meter0"
}
]
},
{
"factoryPid":"Simulator.NRCMeter.Acting",
"properties":[
{
"name":"id",
"value":"meter1"
},
{
"name":"alias",
"value":"Consumption"
},
{
"name":"datasource.id",
"value":"_simulator"
}
]
},
{
"factoryPid":"Simulator.ProductionMeter.Acting",
"properties":[
{
"name":"id",
"value":"meter2"
},
{
"name":"alias",
"value":"South Roof"
},
{
"name":"datasource.id",
"value":"_simulator"
}
]
},
{
"factoryPid":"Simulator.EssSymmetric.Reacting",
"properties":[
{
"name":"id",
"value":"ess0"
},
{
"name":"maxApparentPower",
"value":10000
},
{
"name":"capacity",
"value":10200
},
{
"name":"initialSoc",
"value":50
}
]
},
{
"factoryPid":"Controller.Symmetric.Balancing",
"properties":[
{
"name":"id",
"value":"ctrlBalancing0"
},
{
"name":"ess.id",
"value":"ess0"
},
{
"name":"meter.id",
"value":"meter0"
}
]
}
],
"clock":{
"start":"2000-01-01T00:00:00.00Z",
"end":"2000-01-08T00:00:00.00Z",
"timeleapPerCycle":900000,
"executeCycleTwice":true
},
"profiles":{
"meter1/ActivePower": [436,404,373,344,316,290,267,248,236,227,220,216,211,207,203,199,196,193,192,191,191,191,193,195,198,201,206,211,219,232,254,290,342,405,474,543,607,666,719,767,810,849,886,924,962,999,1029,1049,1055,1047,1025,990,944,890,833,779,732,692,658,630,607,588,572,555,539,527,524,535,562,602,647,692,731,764,795,825,854,878,892,887,861,820,775,733,704,683,666,646,621,591,556,518,479,440,402,364,436,404,374,345,316,290,267,249,236,227,220,216,211,207,203,199,196,193,192,191,191,191,193,195,198,201,206,211,219,232,255,291,342,405,475,544,608,667,720,768,811,850,888,926,964,1000,1030,1050,1056,1048,1027,992,945,891,834,780,733,693,659,631,608,589,572,556,540,528,525,536,563,603,648,693,732,765,796,826,855,880,893,888,862,821,776,735,705,684,667,647,622,591,556,519,480,441,402,365,338,304,274,249,231,218,209,204,200,198,197,195,194,193,191,191,192,194,196,200,204,215,238,279,340,413,489,557,607,642,663,673,676,673,665,653,638,622,607,594,586,580,578,578,580,584,593,607,626,647,664,673,670,658,639,619,600,583,568,553,539,527,517,511,510,515,527,549,579,618,662,711,761,810,855,893,922,940,943,931,902,862,818,777,744,716,691,665,635,602,566,528,489,450,412,374,338,304,275,250,231,218,210,204,201,198,197,196,194,193,192,192,192,194,197,200,205,216,239,279,340,414,490,558,608,643,664,674,677,674,666,654,639,623,608,595,587,581,579,579,581,585,594,608,627,648,665,674,671,659,640,620,601,584,569,554,540,528,518,512,511,516,528,550,580,619,663,712,762,811,856,895,924,941,945,932,904,864,820,778,745,717,692,666,636,603,567,529,490,451,413,375,338,304,275,250,231,218,210,204,201,198,197,196,194,193,192,192,192,194,197,200,205,216,239,279,340,415,491,558,609,643,664,675,678,675,666,654,639,624,608,596,587,582,579,579,581,586,594,608,628,649,666,675,672,659,641,621,602,585,569,554,540,528,518,513,512,517,529,550,581,619,664,712,763,812,857,896,925,942,946,933,905,865,820,779,745,718,693,667,637,603,567,529,491,452,413,375,339,305,275,250,232,219,210,204,201,198,197,196,194,193,192,192,192,194,197,200,205,216,239,280,341,415,491,559,609,644,665,676,679,676,667,655,640,624,609,596,588,582,580,580,582,586,595,609,628,649,667,676,673,660,641,621,602,585,570,555,541,529,519,513,512,517,529,551,581,620,665,713,764,813,858,897,926,943,947,934,906,865,821,780,746,719,694,668,637,604,568,530,491,452,413,375,339,305,275,250,232,219,210,205,201,199,198,196,195,194,192,192,193,195,197,201,205,216,239,280,341,415,492,559,610,645,666,676,679,676,668,656,641,625,609,597,588,583,580,580,582,587,595,609,629,650,667,676,673,661,642,622,603,586,570,555,541,529,519,514,513,518,530,551,582,621,665,714,764,814,859,897,927,944,948,935,906,866,822,781,747,719,694,668,638,604,568,530,492,452,414,376],
"meter2/ActivePower": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,24,100,250,277,345,449,457,535,530,575,770,862,720,779,808,638,552,457,440,574,537,499,356,216,267,180,180,147,102,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,23,105,162,223,271,309,370,431,463,514,481,463,516,467,406,375,361,401,387,372,345,334,337,312,275,229,184,141,96,20,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,20,74,134,173,209,254,275,302,331,380,419,437,471,410,441,444,410,394,400,396,384,387,391,350,291,260,208,140,74,20,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,24,130,215,278,378,443,529,534,568,797,726,618,766,703,802,809,755,783,682,633,672,590,629,515,523,403,318,251,171,31,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,56,336,1979,945,2897,3580,2510,3097,3499,5616,6327,2631,898,3859,3909,4931,3683,5996,1777,3615,3415,1601,1254,4954,4145,3426,1163,101,457,27,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,21,65,25,48,84,108,125,123,99,84,119,214,202,183,104,151,450,881,1878,3424,5211,4329,3986,1796,1904,1618,1173,646,758,50,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,35,104,163,246,349,329,406,387,379,457,396,488,530,540,591,835,774,740,569,549,542,524,549,471,446,337,234,192,110,30,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
},
"collect":[
"_sum/GridActivePower",
"_sum/EssActivePower",
"_sum/ProductionActivePower",
"_sum/ConsumptionActivePower",
"_sum/EssSoc"
]
}
}
}
}
82. Tesla Powerwall 2
Implementation of the Tesla Powerwall 2 energy storage system
- Implemented Natures
-
-
SymmetricEss
-
83. Time-Of-Use Tariff Awattar
Retrieves the hourly prices from the Awattar API and converts them into quarterly prices. Prices are updated every day at 14:00 and stored locally.
84. Time-Of-Use Tariff Corrently by STROMDAO
Retrieves the quarterly prices from the Corrently API. Prices are updated every day at 14:00 and stored locally.
85. Time-Of-Use Tariff ENTSO-E
This implementation uses the ENTSO-E transparency platform to receive day-ahead prices in European power grids.
To request a (free) authentication token, please see chapter "2. Authentication and Authorisation" in the official API documentation: https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html#_authentication_and_authorisation
Prices retrieved from ENTSO-E are subsequently converted to the user’s currency (defined in Core.Meta Component) using the Exchange Rates API.
For detailed information about the Exchange Rates API, please refer to: https://exchangerate.host/#/docs
86. Time-Of-Use Tariff Groupe-E
This implementation uses the Groupe-E platform to receive day-ahead quarterly prices.
Prices retrieved from Groupe-E are subsequently converted to the user’s currency (defined in Core.Meta Component) using the Exchange Rates API.
For detailed information about the Exchange Rates API, please refer to: https://exchangerate.host/#/docs
87. Time-Of-Use Tariff Stadtwerk Hassfurt
Retrieves the hourly prices from the Stadtwerk Hassfurt API and converts them into quarterly prices. The current implementation supports both "haStrom Flex" and "haStrom Flex Pro" models provided by Stadtwerk Hassfurt.
88. Time-Of-Use Tariff rabot.charge
Retrieves the hourly prices from the rabot.charge API and converts them into quarterly prices.