Skip to content

Commit f53b5f2

Browse files
authored
FEMS Backports (OpenEMS#1658)
- Improvements for Time-Of-User Tariffs (OpenEMS#162) - Implement generic Time-of-Use tariff service. - Implement Awattar TOU tariff provider implementation. - Implement Corrently by STROMDAO TOU tariff - Checkstyle: do not required Javadoc for build() method in builder pattern - Add System-Update feature (if OpenEMS Edge is installed via Debian package) - Add ExecuteSystemUpdateRequest and GetSystemUpdateStateRequest - Add Password-only sudo authentication for system execute - Add `exitcode` to ExecuteSystemCommandResponse - Add global .gitignore patterns - Update gradle bnd version to 6.0.0 - Increase number of Threads in ThreadPools to avoid pending tasks - Add handling of BundleContext in activate (without DummyBundleContext, because that had caused Resolve errors) - UI: improve detection of isOnline - Set default port 8085 in edge-dev.ts - TypeUtils: fix conversion from Double to Float - This fixes a bug where a double "0.0" could not be converted to float, with following error: "Cannot convert. Double [0.0] is not fitting in Float range." - Also applied Checkstyle on TypeUtils. - Keba KeContact: trim configured IP address - This avoids "evcs0[Failed activation java.net.UnknownHostException: xxx.xxx.xxx.xxx] - Introduce OpenemsOEM class which simplifies creating custom distributions of OpenEMS - Soltaro Battery Improvement - Sinexcel Battery Inverter New Modbus Protocol Implementation - Allow SymmetricEss in EvcsClusterPeakshaving - EvcsClusterPeakshaving was not able to start with a SymmetricEss like Fenecon Dess. (No Reference for component ess0 ...) - UI register: Remove zip validator - Austria has only 4 digits; other countries... who knows?! - PQ Plus UMD96 Meter Implementation - Remove Predictive Delay Charge Controller - It was replaced by the more advanced "ESS Grid Optimized Charge" Controller (io.openems.edge.controller.ess.gridoptimizedcharge). - Hardy Barth Salia: implementation improvements - Small things like heartbeat were changed in the hardy barth software especially for the newer salia cpµ pro 2 (single charger). - Another problem was the external meter that is used internally in the hardy barth to provide the current charge values. - This meter also measures the standby consumption of the salia itself and is disabled by default - The function to enable it automatically is on hold for now, as we need a proper update process first. - GoodWe: add missing Write-Registers
1 parent 29810c2 commit f53b5f2

File tree

297 files changed

+8890
-3300
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

297 files changed

+8890
-3300
lines changed

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -225,3 +225,7 @@ gradle-app.setting
225225
/tools/docker/openems-edge/build
226226
/tools/docker/openems-ui/build
227227
.atom-build.yml
228+
229+
# OpenEMS temp files
230+
io.openems.edge.controller.api.mqtt/edge0
231+
io.openems.edge.application/c:/

cnf/build.bnd

+1
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ testpath: \
9393
Edge_Scheduler;member=${filter;${p};io\.openems\.edge\.scheduler\..*},\
9494
Edge_Thermometer;member=${filter;${p};io\.openems\.edge\.onewire\.thermometer|io\.openems\.edge\.thermometer\..*},\
9595
Edge_Timedata;member=${filter;${p};io\.openems\.edge\.timedata\..*},\
96+
Edge_TimeOfUseTariff;member=${filter;${p};io\.openems\.edge\.timeofusetariff\..*},\
9697

9798
javac.source: 1.8
9899
javac.target: 1.8

cnf/checkstyle.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@
202202
<module name="MissingJavadocMethod">
203203
<property name="allowedAnnotations" value="Before,Test,After,Override"/>
204204
<property name="allowMissingPropertyJavadoc" value="true"/>
205-
<property name="ignoreMethodNamesRegex" value="doc|set.+"/>
206-
<property name="tokens" value="METHOD_DEF,ANNOTATION_FIELD_DEF"/>
205+
<property name="ignoreMethodNamesRegex" value="doc|set.+|build"/>
206+
<property name="tokens" value="METHOD_DEF"/>
207207
</module>
208208
</module>
209209
<module name="LineLength">

gradle.properties

+2-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
bnd_version=5.0.0
1+
bnd_version=6.0.0
2+
bnd_snapshots=https://bndtools.jfrog.io/bndtools/libs-snapshot-local

io.openems.backend.b2bwebsocket/src/io/openems/backend/b2bwebsocket/B2bWebsocket.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class B2bWebsocket extends AbstractOpenemsBackendComponent {
4242
@Reference(cardinality = ReferenceCardinality.MANDATORY, policy = ReferencePolicy.DYNAMIC)
4343
protected volatile Timedata timeData;
4444

45-
protected final ScheduledExecutorService executor = Executors.newScheduledThreadPool(1,
45+
protected final ScheduledExecutorService executor = Executors.newScheduledThreadPool(10,
4646
new ThreadFactoryBuilder().setNameFormat("B2bWebsocket-%d").build());
4747

4848
public B2bWebsocket() {

io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/Field.java

+1
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,7 @@ public boolean isQuery() {
532532
public enum StockProductionLot implements Field {
533533
SERIAL_NUMBER("name", true), //
534534
PRODUCT("product_id", true);
535+
535536
public static final String ODOO_MODEL = "stock.production.lot";
536537
public static final String ODOO_TABLE = ODOO_MODEL.replace(".", "_");
537538

io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/odoo/OdooHandler.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -743,7 +743,7 @@ private void sendRegistrationMail(int odooUserId, String password) throws Openem
743743
/**
744744
* Update language for the given user.
745745
*
746-
* @param user {@link MyUser} the current user
746+
* @param user {@link MyUser} the current user
747747
* @param language to set
748748
* @throws OpenemsException on error
749749
*/

io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/postgres/PeriodicWriteWorker.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public class PeriodicWriteWorker {
4949
/**
5050
* Executor for subscriptions task.
5151
*/
52-
private final ScheduledExecutorService executor = Executors.newScheduledThreadPool(1,
52+
private final ScheduledExecutorService executor = Executors.newScheduledThreadPool(10,
5353
new ThreadFactoryBuilder().setNameFormat("Metadata.Odoo.PGPeriodic-%d").build());
5454

5555
public PeriodicWriteWorker(PostgresHandler parent, HikariDataSource dataSource) {

io.openems.backend.timedata.influx/src/io/openems/backend/timedata/influx/Influx.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@
3535
import io.openems.backend.common.metadata.Metadata;
3636
import io.openems.backend.common.timedata.EdgeCache;
3737
import io.openems.backend.common.timedata.Timedata;
38+
import io.openems.common.OpenemsOEM;
3839
import io.openems.common.exceptions.OpenemsError.OpenemsNamedException;
3940
import io.openems.common.exceptions.OpenemsException;
4041
import io.openems.common.types.ChannelAddress;
4142
import io.openems.common.types.EdgeConfig;
4243
import io.openems.common.types.SemanticVersion;
4344
import io.openems.common.utils.StringUtils;
4445
import io.openems.shared.influxdb.InfluxConnector;
45-
import io.openems.shared.influxdb.InfluxConstants;
4646

4747
@Designate(ocd = Config.class, factory = false)
4848
@Component(//
@@ -148,7 +148,7 @@ private void writeData(int influxEdgeId, TreeBasedTable<Long, ChannelAddress, Js
148148
// this builds an InfluxDB record ("point") for a given timestamp
149149
Point.Builder builder = Point //
150150
.measurement(InfluxConnector.MEASUREMENT) //
151-
.tag(InfluxConstants.TAG, String.valueOf(influxEdgeId)) //
151+
.tag(OpenemsOEM.INFLUXDB_TAG, String.valueOf(influxEdgeId)) //
152152
.time(timestamp, TimeUnit.MILLISECONDS);
153153
for (Entry<ChannelAddress, JsonElement> channelEntry : channelEntries) {
154154
this.addValue(builder, channelEntry.getKey().toString(), channelEntry.getValue());

io.openems.common/src/io/openems/common/OpenemsConstants.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public class OpenemsConstants {
4747
*
4848
* Note: this should be max. 32 ASCII characters long
4949
*/
50-
public final static String MANUFACTURER = "OpenEMS Association e.V.";
50+
public final static String MANUFACTURER = OpenemsOEM.MANUFACTURER;
5151

5252
/**
5353
* The model identifier of the device
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package io.openems.common;
2+
3+
/**
4+
* Adjustments for OpenEMS OEM distributions.
5+
*/
6+
// CHECKSTYLE:OFF
7+
public class OpenemsOEM {
8+
// CHECKSTYLE:ON
9+
10+
/*
11+
* General.
12+
*/
13+
public final static String MANUFACTURER = "OpenEMS Association e.V.";
14+
15+
/*
16+
* Backend-Api Controller
17+
*/
18+
public final static String BACKEND_API_URI = "ws://localhost:8081";
19+
20+
/*
21+
* System-Update.
22+
*/
23+
/**
24+
* Name of the Debian package.
25+
*/
26+
public static final String SYSTEM_UPDATE_PACKAGE = "none";
27+
public static final String SYSTEM_UPDATE_LATEST_VERSION_URL = "none";
28+
public static final String SYSTEM_UPDATE_SCRIPT_URL = "none";
29+
30+
/*
31+
* Backend InfluxDB.
32+
*/
33+
public static final String INFLUXDB_TAG = "edge";
34+
35+
}

io.openems.common/src/io/openems/common/channel/Unit.java

+9
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,14 @@ public enum Unit {
149149
*/
150150
VOLT_AMPERE_HOURS("VAh"),
151151

152+
// ##########
153+
// Energy Tariff
154+
// ##########
155+
/**
156+
* Unit of Energy Price [€/MWh].
157+
*/
158+
EUROS_PER_MEGAWATT_HOUR("€/MWh"),
159+
152160
// ##########
153161
// Frequency
154162
// ##########
@@ -267,6 +275,7 @@ public String format(Object value, OpenemsType type) {
267275
case AMPERE:
268276
case DEGREE_CELSIUS:
269277
case DEZIDEGREE_CELSIUS:
278+
case EUROS_PER_MEGAWATT_HOUR:
270279
case HERTZ:
271280
case MILLIAMPERE:
272281
case MILLIHERTZ:

io.openems.edge.application/EdgeApp.bndrun

+7-2
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@
125125
bnd.identity;id='io.openems.edge.meter.discovergy',\
126126
bnd.identity;id='io.openems.edge.meter.janitza',\
127127
bnd.identity;id='io.openems.edge.meter.microcare.sdm630',\
128-
bnd.identity;id='io.openems.edge.meter.pqplus.umd97',\
128+
bnd.identity;id='io.openems.edge.meter.pqplus',\
129129
bnd.identity;id='io.openems.edge.meter.schneider.acti9.smartlink',\
130130
bnd.identity;id='io.openems.edge.meter.sma.shm20',\
131131
bnd.identity;id='io.openems.edge.meter.socomec',\
@@ -148,6 +148,8 @@
148148
bnd.identity;id='io.openems.edge.tesla.powerwall2',\
149149
bnd.identity;id='io.openems.edge.timedata.influxdb',\
150150
bnd.identity;id='io.openems.edge.timedata.rrd4j',\
151+
bnd.identity;id='io.openems.edge.timeofusetariff.awattar',\
152+
bnd.identity;id='io.openems.edge.timeofusetariff.corrently',\
151153

152154
-runbundles: \
153155
Java-WebSocket;version='[1.5.2,1.5.3)',\
@@ -263,7 +265,7 @@
263265
io.openems.edge.meter.discovergy;version=snapshot,\
264266
io.openems.edge.meter.janitza;version=snapshot,\
265267
io.openems.edge.meter.microcare.sdm630;version=snapshot,\
266-
io.openems.edge.meter.pqplus.umd97;version=snapshot,\
268+
io.openems.edge.meter.pqplus;version=snapshot,\
267269
io.openems.edge.meter.schneider.acti9.smartlink;version=snapshot,\
268270
io.openems.edge.meter.sma.shm20;version=snapshot,\
269271
io.openems.edge.meter.socomec;version=snapshot,\
@@ -291,6 +293,9 @@
291293
io.openems.edge.timedata.api;version=snapshot,\
292294
io.openems.edge.timedata.influxdb;version=snapshot,\
293295
io.openems.edge.timedata.rrd4j;version=snapshot,\
296+
io.openems.edge.timeofusetariff.api;version=snapshot,\
297+
io.openems.edge.timeofusetariff.awattar;version=snapshot,\
298+
io.openems.edge.timeofusetariff.corrently;version=snapshot,\
294299
io.openems.shared.influxdb;version=snapshot,\
295300
io.openems.wrapper.eu.chargetime.ocpp;version=snapshot,\
296301
io.openems.wrapper.fastexcel;version=snapshot,\

io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionb/ClusterVersionBChannelId.java

+13-14
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,17 @@ public enum ClusterVersionBChannelId implements io.openems.edge.common.channel.C
2929
.unit(Unit.OHM) //
3030
.accessMode(AccessMode.READ_WRITE)), //
3131

32-
RACK_1_POSITIVE_CONTACTOR(Doc.of(ContactorControl.values()) //
33-
.accessMode(AccessMode.READ_WRITE)), //
34-
RACK_2_POSITIVE_CONTACTOR(Doc.of(ContactorControl.values()) //
35-
.accessMode(AccessMode.READ_WRITE)), //
36-
RACK_3_POSITIVE_CONTACTOR(Doc.of(ContactorControl.values()) //
37-
.accessMode(AccessMode.READ_WRITE)), //
38-
RACK_4_POSITIVE_CONTACTOR(Doc.of(ContactorControl.values()) //
39-
.accessMode(AccessMode.READ_WRITE)), //
40-
RACK_5_POSITIVE_CONTACTOR(Doc.of(ContactorControl.values()) //
41-
.accessMode(AccessMode.READ_WRITE)), //
42-
32+
RACK_1_POSITIVE_CONTACTOR(Doc.of(ContactorControl.values()) //
33+
.accessMode(AccessMode.READ_WRITE)), //
34+
RACK_2_POSITIVE_CONTACTOR(Doc.of(ContactorControl.values()) //
35+
.accessMode(AccessMode.READ_WRITE)), //
36+
RACK_3_POSITIVE_CONTACTOR(Doc.of(ContactorControl.values()) //
37+
.accessMode(AccessMode.READ_WRITE)), //
38+
RACK_4_POSITIVE_CONTACTOR(Doc.of(ContactorControl.values()) //
39+
.accessMode(AccessMode.READ_WRITE)), //
40+
RACK_5_POSITIVE_CONTACTOR(Doc.of(ContactorControl.values()) //
41+
.accessMode(AccessMode.READ_WRITE)), //
42+
4343
// StateChannels
4444
MASTER_ALARM_COMMUNICATION_ERROR_WITH_SUBMASTER(Doc.of(Level.FAULT) //
4545
.text("Communication error with submaster")),
@@ -115,9 +115,8 @@ public enum ClusterVersionBChannelId implements io.openems.edge.common.channel.C
115115
RACK_5_CYCLE_OVER_CURRENT(Doc.of(Level.FAULT) //
116116
.text("Rack 1 Cycle over current")),
117117
RACK_5_VOLTAGE_DIFFERENCE(Doc.of(Level.FAULT) //
118-
.text("Rack 1 Voltage difference")),
119-
;
120-
118+
.text("Rack 1 Voltage difference")),;
119+
121120
private final Doc doc;
122121

123122
private ClusterVersionBChannelId(Doc doc) {

io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionb/Config.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
@interface Config {
1313

1414
@AttributeDefinition(name = "Component-ID", description = "Unique ID of this Component")
15-
String id() default "bms0";
15+
String id() default "battery0";
1616

1717
@AttributeDefinition(name = "Alias", description = "Human-readable name of this Component; defaults to Component-ID")
1818
String alias() default "";
@@ -31,7 +31,7 @@
3131

3232
@AttributeDefinition(name = "Number of slaves", description = "The number of slaves in this battery rack (max. 20)", min = "1", max = "20")
3333
int numberOfSlaves() default 20;
34-
34+
3535
@AttributeDefinition(name = "Module type", description = "The type of modules in the rack")
3636
ModuleType moduleType() default ModuleType.MODULE_3_KWH;
3737

@@ -46,7 +46,7 @@
4646

4747
@AttributeDefinition(name = "Max Start Time", description = "Max Time in seconds allowed for starting the system")
4848
int maxStartTime() default 20;
49-
49+
5050
@AttributeDefinition(name = "Pending Tolerance", description = "time in seconds, that is waited if system status cannot be determined e.g. in case of reading errors")
5151
int pendingTolerance() default 15;
5252

io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionb/SingleRack.java

+24-13
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
*
3535
*/
3636
public class SingleRack {
37-
private static final String KEY_VOLTAGE = "VOLTAGE";
37+
private static final String KEY_VOLTAGE = "VOLTAGE";
3838
private static final String KEY_CURRENT = "CURRENT";
3939
private static final String KEY_CHARGE_INDICATION = "CHARGE_INDICATION";
4040
private static final String KEY_SOC = "SOC";
@@ -296,7 +296,7 @@ protected Collection<Task> getTasks() {
296296

297297
return tasks;
298298
}
299-
299+
300300
private int getIntFromChannel(String key, int defaultValue) {
301301
@SuppressWarnings("unchecked")
302302
Optional<Integer> opt = (Optional<Integer>) this.channelMap.get(key).value().asOptional();
@@ -438,15 +438,19 @@ private Map<String, ChannelId> createChannelIdMap() {
438438
this.addEntry(map, KEY_MIN_CELL_TEMPERATURE_ID, new IntegerDoc().unit(Unit.NONE));
439439
this.addEntry(map, KEY_MIN_CELL_TEMPERATURE, new IntegerDoc().unit(Unit.DEZIDEGREE_CELSIUS));
440440
this.addEntry(map, KEY_ALARM_LEVEL_2_CELL_DISCHA_TEMP_LOW,
441-
Doc.of(Level.FAULT).text("Rack" + this.rackNumber + " Cell Discharge Temperature Low Alarm Level 2")); // Bit 15
441+
Doc.of(Level.FAULT).text("Rack" + this.rackNumber + " Cell Discharge Temperature Low Alarm Level 2")); // Bit
442+
// 15
442443
this.addEntry(map, KEY_ALARM_LEVEL_2_CELL_DISCHA_TEMP_HIGH,
443-
Doc.of(Level.FAULT).text("Rack" + this.rackNumber + " Cell Discharge Temperature High Alarm Level 2")); // Bit 14
444+
Doc.of(Level.FAULT).text("Rack" + this.rackNumber + " Cell Discharge Temperature High Alarm Level 2")); // Bit
445+
// 14
444446
this.addEntry(map, KEY_ALARM_LEVEL_2_GR_TEMPERATURE_HIGH,
445447
Doc.of(Level.FAULT).text("Rack" + this.rackNumber + " GR Temperature High Alarm Level 2")); // Bit 10
446448
this.addEntry(map, KEY_ALARM_LEVEL_2_CELL_CHA_TEMP_LOW,
447-
Doc.of(Level.FAULT).text("Rack" + this.rackNumber + " Cell Charge Temperature Low Alarm Level 2")); // Bit 7
449+
Doc.of(Level.FAULT).text("Rack" + this.rackNumber + " Cell Charge Temperature Low Alarm Level 2")); // Bit
450+
// 7
448451
this.addEntry(map, KEY_ALARM_LEVEL_2_CELL_CHA_TEMP_HIGH,
449-
Doc.of(Level.FAULT).text("Rack" + this.rackNumber + " Cell Charge Temperature High Alarm Level 2")); // Bit 6
452+
Doc.of(Level.FAULT).text("Rack" + this.rackNumber + " Cell Charge Temperature High Alarm Level 2")); // Bit
453+
// 6
450454
this.addEntry(map, KEY_ALARM_LEVEL_2_DISCHA_CURRENT_HIGH,
451455
Doc.of(Level.FAULT).text("Rack" + this.rackNumber + " Discharge Current High Alarm Level 2")); // Bit 5
452456
this.addEntry(map, KEY_ALARM_LEVEL_2_TOTAL_VOLTAGE_LOW,
@@ -460,25 +464,32 @@ private Map<String, ChannelId> createChannelIdMap() {
460464
this.addEntry(map, KEY_ALARM_LEVEL_2_CELL_VOLTAGE_HIGH,
461465
Doc.of(Level.FAULT).text("Rack" + this.rackNumber + " Cell Voltage High Alarm Level 2")); // Bit 0
462466
this.addEntry(map, KEY_ALARM_LEVEL_1_CELL_DISCHA_TEMP_LOW,
463-
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Cell Discharge Temperature Low Alarm Level 1")); // Bit 15
467+
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Cell Discharge Temperature Low Alarm Level 1")); // Bit
468+
// 15
464469
this.addEntry(map, KEY_ALARM_LEVEL_1_CELL_DISCHA_TEMP_HIGH, Doc.of(Level.WARNING)
465470
.text("Rack" + this.rackNumber + " Cell Discharge Temperature High Alarm Level 1")); // Bit 14
466471
this.addEntry(map, KEY_ALARM_LEVEL_1_TOTAL_VOLTAGE_DIFF_HIGH,
467-
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Total Voltage Diff High Alarm Level 1")); // Bit 13
472+
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Total Voltage Diff High Alarm Level 1")); // Bit
473+
// 13
468474
this.addEntry(map, KEY_ALARM_LEVEL_1_CELL_VOLTAGE_DIFF_HIGH,
469-
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Cell Voltage Diff High Alarm Level 1")); // Bit 11
475+
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Cell Voltage Diff High Alarm Level 1")); // Bit
476+
// 11
470477
this.addEntry(map, KEY_ALARM_LEVEL_1_GR_TEMPERATURE_HIGH,
471478
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " GR Temperature High Alarm Level 1")); // Bit 10
472479
this.addEntry(map, KEY_ALARM_LEVEL_1_CELL_TEMP_DIFF_HIGH,
473-
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Cell temperature Diff High Alarm Level 1")); // Bit 9
480+
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Cell temperature Diff High Alarm Level 1")); // Bit
481+
// 9
474482
this.addEntry(map, KEY_ALARM_LEVEL_1_SOC_LOW,
475483
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " SOC Low Alarm Level 1")); // Bit 8
476484
this.addEntry(map, KEY_ALARM_LEVEL_1_CELL_CHA_TEMP_LOW,
477-
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Cell Charge Temperature Low Alarm Level 1")); // Bit 7
485+
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Cell Charge Temperature Low Alarm Level 1")); // Bit
486+
// 7
478487
this.addEntry(map, KEY_ALARM_LEVEL_1_CELL_CHA_TEMP_HIGH,
479-
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Cell Charge Temperature High Alarm Level 1")); // Bit 6
488+
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Cell Charge Temperature High Alarm Level 1")); // Bit
489+
// 6
480490
this.addEntry(map, KEY_ALARM_LEVEL_1_DISCHA_CURRENT_HIGH,
481-
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Discharge Current High Alarm Level 1")); // Bit 5
491+
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Discharge Current High Alarm Level 1")); // Bit
492+
// 5
482493
this.addEntry(map, KEY_ALARM_LEVEL_1_TOTAL_VOLTAGE_LOW,
483494
Doc.of(Level.WARNING).text("Rack" + this.rackNumber + " Total Voltage Low Alarm Level 1")); // Bit 4
484495
this.addEntry(map, KEY_ALARM_LEVEL_1_CELL_VOLTAGE_LOW,

io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionc/ClusterVersionC.java

+5
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,11 @@ public static enum ChannelId implements io.openems.edge.common.channel.ChannelId
213213
.text("The maximum number of start attempts failed")), //
214214
MAX_STOP_ATTEMPTS(Doc.of(Level.FAULT) //
215215
.text("The maximum number of stop attempts failed")), //
216+
NUMBER_OF_MODULES_PER_TOWER(Doc.of(OpenemsType.INTEGER) //
217+
.text("Number Modules per Tower")), //
218+
NUMBER_OF_TOWERS(Doc.of(OpenemsType.INTEGER) //
219+
.text("Number of Towers")), //
220+
216221
;
217222

218223
private final Doc doc;

0 commit comments

Comments
 (0)