SOC wird falsch berechnet

Hallo zusammen,

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

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,

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:

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

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?

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

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). Die Startadressen passen dort anscheinend nicht richtig zusammen. Kannst du deine komplette Methode mal hier posten?

Gruß,
Stefan

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:

Gruß,
Stefan

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

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:

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

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

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!