Skip to content

Commit

Permalink
Merge branch 'release/2020.15.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
sfeilmeier committed Jul 16, 2020
2 parents fa05079 + 21279f6 commit 9262b73
Show file tree
Hide file tree
Showing 35 changed files with 1,317 additions and 545 deletions.
Binary file modified .gradle-wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion .gradle-wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
44 changes: 27 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,39 @@
<br/>Open Source Energy Management System
</h1>

OpenEMS is a modular platform for energy management applications.
It was developed around the requirements of controlling, monitoring and integrating energy storage systems together with renewable energy sources and complementary devices and services.
OpenEMS - the Open Source Energy Management System - is a modular platform for energy management applications. It was developed around the requirements of monitoring, controlling, and integrating energy storage together with renewable energy sources and complementary devices and services like electric vehicle charging stations, heat-pumps, electrolysers, time-of-use electricity tariffs and more.

If you plan to use OpenEMS for your own projects, please consider joining the [OpenEMS Association e.V.](https://openems.io/association), a network of universities, hardware manufacturers, software companies as well as commercial and private owners, and get in touch in the [OpenEMS Community forum](https://community.openems.io).

### OpenEMS in »Local Energy Management«

![alt text](./doc/modules/ROOT/assets/images/local-energy-management.png "Local Energy Management")

### OpenEMS in »Areal Energy Management«

![alt text](./doc/modules/ROOT/assets/images/areal-energy-management.png "Areal Energy Management")

## OpenEMS IoT stack

The OpenEMS 'Internet of Things' stack contains three main components:

* **OpenEMS Edge** runs on site and actually controls the devices
* **OpenEMS UI** is the generic user interface
* **OpenEMS Edge** runs on site, communicates with devices and services, collects data and executes control algorithms
* **OpenEMS UI** is the real-time user interface for web browsers and smartphones
* **OpenEMS Backend** runs on a (cloud) server, connects the decentralized Edge systems and provides aggregation, monitoring and control via internet

## Features

The OpenEMS software architecture was designed to leverage some features that are required by a modern and flexible Energy Management System:

* Fast, PLC-like control of battery inverters and other devices
* Fast, PLC-like control of devices
* Easily extendable due to the use of modern programming languages and modular architecture
* Wide range of supported devices - (battery) inverters, meters, etc. - and protocols
* Modern web-based real-time user interface
* Reusable, device independent control algorithms due to clear device abstraction
* Wide range of supported devices and protocols

## OpenEMS UI Screenshots
![alt text](./doc/modules/ROOT/assets/images/ui-screenshots.png "OpenEMS UI Screenshots 1")
![alt text](./doc/modules/ROOT/assets/images/ui-screenshots2.png "OpenEMS UI Screenshots 2")

![alt text](./doc/modules/ROOT/assets/images/ui-live.png "OpenEMS UI Live View")
![alt text](./doc/modules/ROOT/assets/images/ui-history.png "OpenEMS UI History View")

## System architecture

Expand All @@ -36,16 +46,16 @@ OpenEMS is generally used in combination with external hardware and software com

## Documentation

Indepth documentation is currently in progress. Please find the latest documents here:

* [Latest version of documentation](https://openems.github.io/openems.io/openems/latest/introduction.html)
* [Javadoc](https://openems.github.io/openems.io/javadoc/)
* [Latest version of documentation](https://openems.github.io/openems.io/openems/latest/introduction.html)
* [Javadoc](https://openems.github.io/openems.io/javadoc/)

## Open Source philosophy

OpenEMS development was started by [FENECON GmbH](https://www.fenecon.de), a German company specialized in manufacturing and project development of energy storage systems. It is the software stack behind [FEMS - FENECON Energy Management System](https://fenecon.de/page/fems) and widely used in private, commercial and industrial applications.
The OpenEMS project ist driven by the [OpenEMS Association e.V.](https://openems.io/association), a network of users, vendors and scientific institutions from all kinds of areas like hardware manufacturers, software companies, grid operators and more. They share the common target of developing a free and open-source platform for energy management, that supports the 100 % energy transition.

In 2019 governance of the OpenEMS project was taken over by the newly founded "OpenEMS Association e.V. (i.Gr.)". We are inviting third parties - like universities, hardware manufacturers, software companies, commercial and private owners,... - to use OpenEMS for their own projects and are glad to support them with their first steps. In any case if you are interested in OpenEMS our development team would be glad to hear from you at [email protected].
We are inviting third parties to use OpenEMS for their own projects and are glad to support them with their first steps. In any case if you are interested in OpenEMS we would be glad to hear from you in the [OpenEMS Community forum](https://community.openems.io).

OpenEMS development was started by [FENECON GmbH](https://www.fenecon.de), a German company specialized in manufacturing and project development of energy storage systems. It is the software stack behind [FEMS - FENECON Energy Management System](https://fenecon.de/page/fems) and widely used in private, commercial and industrial applications.

OpenEMS is funded by several federal and EU funding projects. If you are a developer and you would like to get hired by one of the partner companies or universities for working on OpenEMS, please send your motivation letter to [email protected].

Expand All @@ -54,14 +64,14 @@ OpenEMS is funded by several federal and EU funding projects. If you are a devel
* OpenEMS Edge
* OpenEMS Backend

Copyright (C) 2016-2020 FENECON GmbH.
Copyright (C) 2016-2020 OpenEMS Association e.V., FENECON GmbH.

This product includes software developed at FENECON GmbH: you can
redistribute it and/or modify it under the terms of the [Eclipse Public License version 2.0](LICENSE-EPL-2.0).

* OpenEMS UI

Copyright (C) 2016-2020 FENECON GmbH.
Copyright (C) 2016-2020 OpenEMS Association e.V., FENECON GmbH.

This product includes software developed at FENECON GmbH: you can
redistribute it and/or modify it under the terms of the [GNU Affero General Public License version 3](LICENSE-AGPL-3.0).
2 changes: 1 addition & 1 deletion cnf/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@
<!-- Used by SDNotify -->
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.5.0</version>
<version>5.6.0</version>
</dependency>
<!-- org -->
<dependency>
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified doc/modules/ROOT/assets/images/system-architecture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/modules/ROOT/assets/images/ui-history.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/modules/ROOT/assets/images/ui-live.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed doc/modules/ROOT/assets/images/ui-screenshots.png
Binary file not shown.
Binary file removed doc/modules/ROOT/assets/images/ui-screenshots2.png
Binary file not shown.
39 changes: 24 additions & 15 deletions doc/modules/ROOT/pages/introduction.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,37 @@ image::OpenEMS-Logo.png[the Feneco - OpenEMS Logo,400, align="left"]

== Open Energy Management System

OpenEMS is a modular platform for energy management applications.
It was developed around the requirements of controlling, monitoring and integrating energy storage systems together with renewable energy sources and complementary devices and services.
OpenEMS - the Open Source Energy Management System - is a modular platform for energy management applications. It was developed around the requirements of monitoring, controlling, and integrating energy storage together with renewable energy sources and complementary devices and services like electric vehicle charging stations, heat-pumps, electrolysers, time-of-use electricity tariffs and more.

If you plan to use OpenEMS for your own projects, please consider joining the https://openems.io/association[OpenEMS Association e.V. icon:external-link[]], a network of universities, hardware manufacturers, software companies as well as commercial and private owners, and get in touch in the https://community.openems.io[OpenEMS Community forum icon:external-link[]].

=== OpenEMS in »Local Energy Management«
image::local-energy-management.png[Local Energy Management]

=== OpenEMS in »Areal Energy Management«
image::areal-energy-management.png[Areal Energy Management]

== OpenEMS IoT stack

The OpenEMS 'Internet of Things' stack contains three main components:

* **OpenEMS Edge** runs on-site and actually controls the devices
* **OpenEMS UI** is the generic user interface
* **OpenEMS Edge** runs on site, communicates with devices and services, collects data and executes control algorithms
* **OpenEMS UI** is the real-time user interface for web browsers and smartphones
* **OpenEMS Backend** runs on a (cloud) server, connects the decentralized Edge systems and provides aggregation, monitoring and control via internet

== Features

The OpenEMS software architecture was designed to leverage some features that are required by a modern and flexible Energy Management System:

* Fast, PLC-like control of battery inverters and other devices
* Fast, PLC-like control of devices
* Easily extendable due to the use of modern programming languages and modular architecture
* Wide range of supported devices - (battery) inverters, meters, etc. - and protocols
* Modern web-based real-time user interface
* Reusable, device independent control algorithms due to clear device abstraction
* Wide range of supported devices and protocols

== OpenEMS UI Screenshots
image::ui-screenshots.png[OpenEMS UI Screenshots]
image::ui-screenshots2.png[OpenEMS UI Screenshots]

image::ui-live.png[OpenEMS UI Live View]
image::ui-history.png[OpenEMS UI History View]

== System architecture

Expand All @@ -44,19 +51,21 @@ image::system-architecture.png[OpenEMS system architecture]
Development follows the https://de.wikipedia.org/wiki/Agile_Softwareentwicklung[Agile Manifesto icon:external-link[]] and is driven by the https://de.wikipedia.org/wiki/Scrum[Scrum icon:external-link[]] methodology.
The source code is available online at http://openems.io and on https://github.com/OpenEMS/openems[GitHub icon:github[]].
New versions are released after every Scrum Sprint and https://github.com/OpenEMS/openems/releases[tagged icon:github[]] accordingly.
Version numbers are built using the pattern `year.number of sprint`, e.g. version `2018.4.0` is the result of the fourth sprint in 2018.
Version numbers are built using the pattern `year.number of sprint`, e.g. version `2020.14.0` is the result of the 14th sprint in 2020.
Git development follows the https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow[Gitflow Workflow], so the https://github.com/OpenEMS/openems/tree/master/[master branch icon:github[]] always holds the stable release, while active development is happening on the https://github.com/OpenEMS/openems/tree/develop[develop branch icon:github[]] or in separate feature branches.

For Edge and Backend Java development we recommend the https://www.eclipse.org/ide/[Eclipse IDE icon:external-link[]].
For the UI (TypeScript + Angular.io) we recommend https://code.visualstudio.com/[Visual Studio Code icon:external-link[]].
The documentation is generated using http://asciidoc.org[AsciiDoc icon:external-link[]].
For handling git we recommend https://www.sourcetreeapp.com/[Sourctree by Atlassian icon:external-link[]].

== Open Source philosophy
## Open Source philosophy

The OpenEMS project ist driven by the https://openems.io/association[OpenEMS Association e.V.], a network of users, vendors and scientific institutions from all kinds of areas like hardware manufacturers, software companies, grid operators and more. They share the common target of developing a free and open-source platform for energy management, that supports the 100 % energy transition.

OpenEMS development was started by https://www.fenecon.de[FENECON GmbH icon:external-link[]], a German company specialized in manufacturing and project development of energy storage systems. It is the software stack behind https://fenecon.de/page/fems[FEMS - FENECON Energy Management System icon:external-link[]] and widely used in private, commercial and industrial applications.
We are inviting third parties to use OpenEMS for their own projects and are glad to support them with their first steps. In any case if you are interested in OpenEMS we would be glad to hear from you in the https://community.openems.io[OpenEMS Community forum].

In 2019 governance of the OpenEMS project was taken over by the newly founded "OpenEMS Association e.V. (i.Gr.)". We are inviting third parties - like universities, hardware manufacturers, software companies, commercial and private owners,... - to use OpenEMS for their own projects and are glad to support them with their first steps. In any case if you are interested in OpenEMS our development team would be glad to hear from you at [email protected].
OpenEMS development was started by https://www.fenecon.de[FENECON GmbH], a German company specialized in manufacturing and project development of energy storage systems. It is the software stack behind https://fenecon.de/page/fems[FEMS - FENECON Energy Management System] and widely used in private, commercial and industrial applications.

OpenEMS is funded by several federal and EU funding projects. If you are a developer and you would like to get hired by one of the partner companies or universities for working on OpenEMS, please send your motivation letter to [email protected].

Expand All @@ -65,14 +74,14 @@ OpenEMS is funded by several federal and EU funding projects. If you are a devel
* OpenEMS Edge
* OpenEMS Backend

Copyright (C) 2016-2020 FENECON GmbH.
Copyright (C) 2016-2020 OpenEMS Association e.V., FENECON GmbH.

This product includes software developed at FENECON GmbH: you can
redistribute it and/or modify it under the terms of the https://github.com/OpenEMS/openems/blob/develop/LICENSE-EPL-2.0[Eclipse Public License version 2.0].

* OpenEMS UI

Copyright (C) 2016-2020 FENECON GmbH.
Copyright (C) 2016-2020 OpenEMS Association e.V., FENECON GmbH.

This product includes software developed at FENECON GmbH: you can
redistribute it and/or modify it under the terms of the https://github.com/OpenEMS/openems/blob/develop/LICENSE-AGPL-3.0[GNU Affero General Public License version 3].
2 changes: 1 addition & 1 deletion doc/modules/ROOT/pages/single_document.adoc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
= OpenEMS - Open Energy Management System
ifndef::toc[]
(c) 2020 OpenEMS Association e.V.
Version 2020.14.0
Version 2020.15.0
:sectnums:
:sectnumlevels: 4
:toc:
Expand Down
2 changes: 2 additions & 0 deletions gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ esac

CLASSPATH=$APP_HOME/.gradle-wrapper/gradle-wrapper.jar


# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
Expand Down Expand Up @@ -129,6 +130,7 @@ fi
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`

JAVACMD=`cygpath --unix "$JAVACMD"`

# We build the pattern for arguments to be converted via cygpath
Expand Down
1 change: 1 addition & 0 deletions gradlew.bat
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ set CMD_LINE_ARGS=%*

set CLASSPATH=%APP_HOME%\.gradle-wrapper\gradle-wrapper.jar


@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class OpenemsConstants {
*
* This is usually the number of the sprint within the year
*/
public final static short VERSION_MINOR = 14;
public final static short VERSION_MINOR = 15;

/**
* The patch version of OpenEMS.
Expand Down
4 changes: 3 additions & 1 deletion io.openems.edge.application/EdgeApp.bndrun
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
bnd.identity;id='io.openems.edge.controller.ess.selltogridlimit',\
bnd.identity;id='io.openems.edge.controller.evcs',\
bnd.identity;id='io.openems.edge.controller.evcs.fixactivepower',\
bnd.identity;id='io.openems.edge.controller.generic.jsonlogic',\
bnd.identity;id='io.openems.edge.controller.highloadtimeslot',\
bnd.identity;id='io.openems.edge.controller.io.alarm',\
bnd.identity;id='io.openems.edge.controller.io.channelsinglethreshold',\
Expand Down Expand Up @@ -139,7 +140,7 @@
com.google.gson;version='[2.8.5,2.8.6)',\
com.google.guava;version='[29.0.0,29.0.1)',\
com.google.guava.failureaccess;version='[1.0.1,1.0.2)',\
com.sun.jna;version='[5.5.0,5.5.1)',\
com.sun.jna;version='[5.6.0,5.6.1)',\
io.openems.common;version=snapshot,\
io.openems.edge.application;version=snapshot,\
io.openems.edge.battery.api;version=snapshot,\
Expand Down Expand Up @@ -176,6 +177,7 @@
io.openems.edge.controller.ess.selltogridlimit;version=snapshot,\
io.openems.edge.controller.evcs;version=snapshot,\
io.openems.edge.controller.evcs.fixactivepower;version=snapshot,\
io.openems.edge.controller.generic.jsonlogic;version=snapshot,\
io.openems.edge.controller.highloadtimeslot;version=snapshot,\
io.openems.edge.controller.io.alarm;version=snapshot,\
io.openems.edge.controller.io.channelsinglethreshold;version=snapshot,\
Expand Down
12 changes: 12 additions & 0 deletions io.openems.edge.controller.generic.jsonlogic/.classpath
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="aQute.bnd.classpath.container"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="src" output="bin" path="src"/>
<classpathentry kind="src" output="bin_test" path="test">
<attributes>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="bin"/>
</classpath>
2 changes: 2 additions & 0 deletions io.openems.edge.controller.generic.jsonlogic/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/bin_test/
/generated/
23 changes: 23 additions & 0 deletions io.openems.edge.controller.generic.jsonlogic/.project
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>io.openems.edge.controller.generic.jsonlogic</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>bndtools.core.bndbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>bndtools.core.bndnature</nature>
</natures>
</projectDescription>
19 changes: 19 additions & 0 deletions io.openems.edge.controller.generic.jsonlogic/bnd.bnd
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Bundle-Name: OpenEMS Edge Controller Generic JsonLogic
Bundle-Vendor: FENECON GmbH
Bundle-License: https://opensource.org/licenses/EPL-2.0
Bundle-Version: 1.0.0.${tstamp}

-includeresource.jsonlogic: \
@lib/json-logic-java-1.0.0.jar; lib:=true

-buildpath: \
${buildpath},\
io.openems.common,\
io.openems.edge.common,\
io.openems.edge.controller.api,\
io.openems.edge.ess.api,\
io.openems.edge.io.api,\
lib/json-logic-java-1.0.0.jar;version=file,\

-testpath: \
${testpath}
Binary file not shown.
60 changes: 60 additions & 0 deletions io.openems.edge.controller.generic.jsonlogic/readme.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
= Generic JsonLogic

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]). Logics can be defined by a rule:

[source,json]
----
{
"if":[
{
"<":[
{
"var":"_sum/EssSoc"
},
50
]
},
[
[
"ess0/SetActivePowerEquals",
5000
]
],
[
[
"ess0/SetActivePowerEquals",
-2000
]
]
]
}
----

The input data that is referenced via `var` is automatically provided from OpenEMS Channels - e.g. as

[source,json]
----
{
"_sum/EssSoc": 40
}
----

This example would result in:

[source,json]
----
[
"ess0/SetActivePowerEquals",
5000
]
----

i.e. the Controller will require a set-point of 5000 W discharge on ess0.

It is also possible to write to multiple channels, by adding more arrays to the result.

Try yourself: http://jsonlogic.com/play.html[http://jsonlogic.com/play.html]

https://github.com/OpenEMS/openems/tree/develop/io.openems.edge.controller.generic.jsonlogic[Source Code icon:github[]]
Loading

0 comments on commit 9262b73

Please sign in to comment.