# SOC wird falsch berechnet

**URL:** <https://community.openems.io/t/soc-wird-falsch-berechnet/293>\
**Category:** Uncategorized\
**Created:** [September 22, 2020, 8:12am UTC](https://community.openems.io/t/soc-wird-falsch-berechnet/293 "2020-09-22T08:12:42Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![DominikB](https://community.openems.io/letter_avatar_proxy/v4/letter/d/e47774/32.png) [@DominikB](https://community.openems.io/u/DominikB)\
**Post date:** [September 22, 2020, 8:12am UTC](https://community.openems.io/t/soc-wird-falsch-berechnet/293/1 "2020-09-22T08:12:42Z")

</div>

Hallo zusammen,

Seit einigen Tagen wird der SOC des Fenecon Speichers falsch berechnet.

 ![dd](https://community.openems.io/uploads/default/original/1X/124058943d70c568dc2dfff5a6d4b56c3ae334c3.png)

Nach Neustart des Raspberrys wird aber der richtige Wert ausgegeben.

Im Channel ess0/OriginalSoc wird aber der richtige SOC ausgegeben.

Weiß jemand was das Problem sein könnte?

Beste Grüße,

---

<div class="post-metadata">

**Author:** ![DominikB](https://community.openems.io/letter_avatar_proxy/v4/letter/d/e47774/32.png) [@DominikB](https://community.openems.io/u/DominikB)\
**Post date:** [September 23, 2020, 12:35pm UTC](https://community.openems.io/t/soc-wird-falsch-berechnet/293/2 "2020-09-23T12:35:37Z")

</div>

Folgende Fehlermeldung ist denke ich dafür verantwortlich.

> Sep 23 14:33:45 raspberrypi java[4359]: 2020-09-23 14:33:45,085 [modbus0] ERROR [s.common.worker.AbstractWorker] Worker error. NoSuchMethodError: java.nio.ByteBuffer.rewind()Ljava/nio/ByteBuffer;  
> Sep 23 14:33:45 raspberrypi java[4359]: java.lang.NoSuchMethodError: java.nio.ByteBuffer.rewind()Ljava/nio/ByteBuffer;  
> Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.element.AbstractDoubleWordElement.\_setInputRegisters(AbstractDoubleWordElement.java:53)  
> Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.element.AbstractModbusRegisterElement.setInputRegisters(AbstractModbusRegisterElement.java:87)  
> Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.task.AbstractReadInputRegistersTask.doElementSetInput(AbstractReadInputRegistersTask.java:27)  
> Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.task.AbstractReadInputRegistersTask.doElementSetInput(AbstractReadInputRegistersTask.java:1)  
> Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.task.AbstractReadTask.fillElements(AbstractReadTask.java:113)  
> Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.task.AbstractReadTask.\_execute(AbstractReadTask.java:68)  
> Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.task.AbstractTask.execute(AbstractTask.java:81)  
> Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.ModbusWorker.forever(ModbusWorker.java:172)  
> Sep 23 14:33:45 raspberrypi java[4359]: at  
> io.openems.common.worker.AbstractWorker$1.run(AbstractWorker.java:112)

Anscheinend geht die Information über jede zweite Änderung des SOC’s verloren:

 ![soc](https://community.openems.io/uploads/default/original/1X/9829138269142d842f7d3b458be45b250c1d22fe.png)

---

<div class="post-metadata">

**Author:** ![stefan.feilmeier](https://community.openems.io/user_avatar/community.openems.io/stefan.feilmeier/32/2585_2.png) [@stefan.feilmeier](https://community.openems.io/u/stefan.feilmeier)\
**Post date:** [September 24, 2020, 10:07am UTC](https://community.openems.io/t/soc-wird-falsch-berechnet/293/3 "2020-09-24T10:07:05Z")

</div>

Hallo Dominik,

```
Sep 23 14:33:45 raspberrypi java[4359]: 2020-09-23 14:33:45,085 [modbus0] ERROR [s.common.worker.AbstractWorker] Worker error. NoSuchMethodError: java.nio.ByteBuffer.rewind()Ljava/nio/ByteBuffer;
Sep 23 14:33:45 raspberrypi java[4359]: java.lang.NoSuchMethodError: 

```

“NoSuchMethodError” klingt nach einem Versionskonflikt. Ich habe dazu z. B. das hier gefunden: [https://github.com/apache/felix/pull/114](https://github.com/apache/felix/pull/114)

Tritt der Fehler auf, wenn sowohl mit einem Java JDK 8 gebaut als auch mit einem Java 8 auf dem Raspberry Pi ausgeführt wird?

---

<div class="post-metadata">

**Author:** ![DominikB](https://community.openems.io/letter_avatar_proxy/v4/letter/d/e47774/32.png) [@DominikB](https://community.openems.io/u/DominikB)\
**Post date:** [September 29, 2020, 3:21pm UTC](https://community.openems.io/t/soc-wird-falsch-berechnet/293/4 "2020-09-29T15:21:30Z")

</div>

Hallo Stefan,

Habs bereits mit Java JDK 8, Java 8 und Java 11 ausgeführt. Hat nichts geändert.  
Hab auch schon den Raspberry komplett neu formatiert, auch ohne Erfolg.

Anscheinend ist folgende Ausgabe das Problem:

> ep 29 19:36:22 raspberrypi java[11248]: 2020-09-29 19:36:22,788 [thread-1] ERROR [idge.modbus.api.ModbusProtocol] Start address is wrong. It is [6/0x6] but should be [0/0x0].  
> Sep 29 19:36:22 raspberrypi java[11248]: 2020-09-29 19:36:22,790 [thread-1] ERROR [idge.modbus.api.ModbusProtocol] Start address is wrong. It is [7/0x7] but should be [1/0x1].  
> Sep 29 19:36:22 raspberrypi java[11248]: 2020-09-29 19:36:22,791 [thread-1] ERROR [idge.modbus.api.ModbusProtocol] Start address is wrong. It is [8/0x8] but should be [2/0x2].  
> Sep 29 19:36:22 raspberrypi java[11248]: 2020-09-29 19:36:22,791 [thread-1] ERROR [idge.modbus.api.ModbusProtocol] Start address is wrong. It is [9/0x9] but should be [3/0x3].

Gibt es eine Möglichkeit den Channel ess0/OriginalSOC in der Weboberfläche visualisieren zu lassen?  
Zumindest bis das Problem gelöst ist…

Beste Grüße,  
Dominik

---

<div class="post-metadata">

**Author:** ![stefan.feilmeier](https://community.openems.io/user_avatar/community.openems.io/stefan.feilmeier/32/2585_2.png) [@stefan.feilmeier](https://community.openems.io/u/stefan.feilmeier)\
**Post date:** [September 30, 2020, 7:47am UTC](https://community.openems.io/t/soc-wird-falsch-berechnet/293/5 "2020-09-30T07:47:38Z")

</div>

Hallo Dominik,

das ist jetzt ein komplett anderer Fehler. In dem neuen Fall ist es ein Fehler in der `defineModbusProtocol()`-Methode ([https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/AbstractOpenemsModbusComponent.java#L177](https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/AbstractOpenemsModbusComponent.java#L177)). Die Startadressen passen dort anscheinend nicht richtig zusammen. Kannst du deine komplette Methode mal hier posten?

Gruß,  
Stefan

---

<div class="post-metadata">

**Author:** ![stefan.feilmeier](https://community.openems.io/user_avatar/community.openems.io/stefan.feilmeier/32/2585_2.png) [@stefan.feilmeier](https://community.openems.io/u/stefan.feilmeier)\
**Post date:** [November 16, 2020, 6:37pm UTC](https://community.openems.io/t/soc-wird-falsch-berechnet/293/6 "2020-11-16T18:37:41Z")

</div>

Hallo Dominik

es gab tatsächlich einen Berechnungsfehler im Code - der sich aber erst durch einen anderen Bugfix ausgewirkt hat. Den Fehler habe ich heute behoben:

> <https://github.com/OpenEMS/openems/commit/c3cb0c185fe6897f7051b341b8568385df4c01e9>

Gruß,  
Stefan

---

<div class="post-metadata">

**Author:** ![Kucky](https://community.openems.io/letter_avatar_proxy/v4/letter/k/ecd19e/32.png) [@Kucky](https://community.openems.io/u/Kucky)\
**Post date:** [April 2, 2023, 6:02pm UTC](https://community.openems.io/t/soc-wird-falsch-berechnet/293/7 "2023-04-02T18:02:23Z")

</div>

Hallo zusammen.  
Ich hoffe ich kriege bei euch Hilfe.

Ein Kumpel von mir baut mir aktuell eine Ruspberry FHEM ein. Nun möchten wir natürlich meine Fenecon Home hier einbinden. Gibt es hier jemanden der hiermit schon Erfahrungen hat oder ganz und gar eine config?

Lg

---

<div class="post-metadata">

**Author:** ![klinki](https://community.openems.io/letter_avatar_proxy/v4/letter/k/858c86/32.png) [@klinki](https://community.openems.io/u/klinki)\
**Post date:** [April 3, 2023, 11:10am UTC](https://community.openems.io/t/soc-wird-falsch-berechnet/293/8 "2023-04-03T11:10:45Z")

</div>

Der einfachste Weg wäre über FEMS/OpenEMS die Werte des Speichers per Modbus zur Verügung zu stellen (crtlModbusExt) die dort erzeugten Werte kann fhem per ModbusAddr auslesen. Ich bin selbst ebenfalls diesen Weg gegangen, weil:

- Mein Wechselrichter ziemlich allergisch auf gleichzeitige Abfragen von mehreren Modbus-Mastern reagiert
- Man so sämtliche Register in fhem einbinden kann die von OpenEMS zur Verfügung gestellt werden

ModbusAttr ist nicht sonderlich “handy”. Hier ein Beispiel um ein 2 Wort float-register auszulsen und zu formatieren:

```auto
attr Modbus_Wechselrichter obj-h315-format %.2f
attr Modbus_Wechselrichter obj-h315-len 2
attr Modbus_Wechselrichter obj-h315-reading LeistungNetzbezug
attr Modbus_Wechselrichter obj-h315-unpack f>

```

Gruß  
Klinki

---

<div class="post-metadata">

**Author:** ![Kucky](https://community.openems.io/letter_avatar_proxy/v4/letter/k/ecd19e/32.png) [@Kucky](https://community.openems.io/u/Kucky)\
**Post date:** [April 3, 2023, 12:42pm UTC](https://community.openems.io/t/soc-wird-falsch-berechnet/293/9 "2023-04-03T12:42:32Z")

</div>

Super. Vielen dank. Das wird uns sicher schon mal weiterhelfen.

---

<div class="post-metadata">

**Author:** ![klinki](https://community.openems.io/letter_avatar_proxy/v4/letter/k/858c86/32.png) [@klinki](https://community.openems.io/u/klinki)\
**Post date:** [April 3, 2023, 1:22pm UTC](https://community.openems.io/t/soc-wird-falsch-berechnet/293/10 "2023-04-03T13:22:15Z")

</div>

Kein Problem. Eine kleine Warnung: Man kann fhem zum Absturz bringen wenn die Register nicht richtig definiert werden. Ein “NaN” (not a number) wird vom fhem-Programmierer anscheinend nicht richtig abgefangen.  
Wenn aber alles richtig eingestellt ist, läuft es stabil!
