# Unter-Zähler über Modbus verfügbar machen

**URL:** <https://community.openems.io/t/unter-zahler-uber-modbus-verfugbar-machen/1109>\
**Category:** Uncategorized\
**Created:** [October 11, 2022, 10:00am UTC](https://community.openems.io/t/unter-zahler-uber-modbus-verfugbar-machen/1109 "2022-10-11T10:00:52Z")\
**Posts on this page:** 9\
**Page:** 1

<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:** [October 11, 2022, 10:00am UTC](https://community.openems.io/t/unter-zahler-uber-modbus-verfugbar-machen/1109/1 "2022-10-11T10:00:52Z")

</div>

Hallo Forum,

Ich habe diverse Modbus-Zähler in OpenEMS integriert. Alle liefern brav ihre Werte, usw.  
Das Problem ist möglicherweise das verbaute Modbus-Gateway. Dieses steigt nach Laufzeit (1,2 Tage - manchmal Wochen) aus und muss resettet werden.

Die Zähler werden teilweise auch noch von anderen Komponenten abgefragt. Hier kommt es dann möglicherweise zu Problemen.

Ich möchte Folgendes errreichen: OpenEMS fragt als einziges System die Zähler ab und stellt diese Daten allen anderen Systemen per Modbus zur Verfügung. Mit den Core.Sum-Kanälen setze ich das bereits um. Aber wie ist es möglich, dass OpenEMS auch die Zählerdaten von anderen Channels per Modbus verfügbar macht und wie komme ich an die entsprechenden Register?

Gruß,  
Klinki

---

<div class="post-metadata">

**Author:** ![c.lehne](https://community.openems.io/user_avatar/community.openems.io/c.lehne/32/2719_2.png) [@c.lehne](https://community.openems.io/u/c.lehne)\
**Post date:** [October 13, 2022, 5:21am UTC](https://community.openems.io/t/unter-zahler-uber-modbus-verfugbar-machen/1109/2 "2022-10-13T05:21:09Z")

</div>

Hallo Klinki,

angenommen für jeden der von dir ausgelesenen Zähler existiert eine ‘meter’-Komponente, z.B. `meter0, meter1, .., meterX`.  
Dann könntest du einen “Controller Api Modbus/TCP Read-Only” aktivieren. Dort kann man bei den Komponenten IDs jeden einzelnen der oben angegebenen Meter hinzufügen (über das “+” bei Component IDs). Der Modbus Server bietet dann die angegebenen Komponenten zum Auslesen an.

Wie genau die Belegung der Modbus-Tabelle ist, kann man dann direkt als Excel-Protokollspezifikation herunterladen: Menü → Einstellungen → Anlagenprofil → Runterscrollen zu “Externe Schnittstellen” → den DropDown-Pfeil ganz links anklicken → dann das Protokoll herunterladen (siehe Screenshot)

 ![grafik](https://community.openems.io/uploads/default/original/1X/ba8cf258b6d5f85e786d4cb1c2ed543950b79e72.png)

Jede Komponente, die das [ModbusSlave](https://github.com/OpenEMS/openems/blob/0a8e472207fae7d677f32af6407ab7c50c31d3e0/io.openems.edge.common/src/io/openems/edge/common/modbusslave/ModbusSlave.java#L6) Interface erfüllt, kann über diesen Mechanismus ausgelesen werden. Ein Beispiel findest du [hier](https://github.com/OpenEMS/openems/blob/0a8e472207fae7d677f32af6407ab7c50c31d3e0/io.openems.edge.meter.janitza/src/io/openems/edge/meter/janitza/umg604/MeterJanitzaUmg604Impl.java#L161).  
Ich bin nicht sicher ob schon alle OpenEMS-Zähler das Modbus-Slave Interface erfüllen. Die von dir verwendeten Zähler müssten also vorab geprüft und evtl. erweitert werden.  
VG Christian

---

<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:** [October 13, 2022, 11:21am UTC](https://community.openems.io/t/unter-zahler-uber-modbus-verfugbar-machen/1109/3 "2022-10-13T11:21:57Z")

</div>

Hallo Christian,

Die entsprechenden Zähler mit ihren IDs hatte ich der Modbus-Bridge schon beigebracht. Es scheint so, als wenn die SDM630 noch erweitert werden müssten.

Ich versuche mal mein Glück…

Danke Dir für den Hinweis!

Gruß,  
Klinki

---

<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:** [October 13, 2022, 12:17pm UTC](https://community.openems.io/t/unter-zahler-uber-modbus-verfugbar-machen/1109/4 "2022-10-13T12:17:10Z")

</div>

Hallo,

Christian hat das genau richtig beschrieben. Damit das funktioniert ist es allerdings notwendig, dass die Komponente das Interface [ModbusSlave](https://github.com/OpenEMS/openems/blob/0a8e472207fae7d677f32af6407ab7c50c31d3e0/io.openems.edge.common/src/io/openems/edge/common/modbusslave/ModbusSlave.java#L6) implementiert. Mit den nächsten FEMS-Backports gibt es in dem Fall ansonsten in Zukunft eine Warnmeldung im Log.

Leider ist das bei dem [SDM630-Zähler](https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.meter.microcare.sdm630/src/io/openems/edge/meter/microcare/sdm630/MeterMicrocareSdm630Impl.java) aktuell noch nicht umgesetzt. Hier ein Beispiel aus der SOCOMEC-Komponente:

> <https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.meter.socomec/src/io/openems/edge/meter/socomec/threephase/SocomecMeterThreephaseImpl.java#L421-L428>

Gruß,  
Stefan

---

<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:** [October 13, 2022, 12:33pm UTC](https://community.openems.io/t/unter-zahler-uber-modbus-verfugbar-machen/1109/5 "2022-10-13T12:33:49Z")

</div>

Hi Stefan,

Genau so habe ich das mittlerweile auch beim SDM630 umgesetzt. Die IDs tauchen im Export nicht auf. Der Debugger reagiert auch nicht auf den Haltepunkt (in Deinem Auszug Zeile 424). Das Interface habe ich entsprechend erweitert:

```auto
...
public interface MeterMicrocareSdm630 extends SymmetricMeter, AsymmetricMeter, OpenemsComponent, ModbusSlave {
...

```

Gruß,  
klinki

---

<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:** [October 13, 2022, 12:35pm UTC](https://community.openems.io/t/unter-zahler-uber-modbus-verfugbar-machen/1109/6 "2022-10-13T12:35:16Z")

</div>

Hallo Klinki,

es reicht für OSGi nicht, dass das Interface `ModbusSlave` implementiert, sondern die eigentliche Komponente muss `ModbusSlave` implementieren.

---

<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:** [October 13, 2022, 2:16pm UTC](https://community.openems.io/t/unter-zahler-uber-modbus-verfugbar-machen/1109/7 "2022-10-13T14:16:46Z")

</div>

Ich dachte, das hätte ich getan in dem ich die Zeilen aus Deinem vorherigen Post eingefügt habe…

Nachtrag: Habe für einen Test mal ein UMG604 angelegt und die ID im Modbus-Server angegeben. In der Excel-Datei steht auch dieser nicht. Hm…  
Meine Version ist die 2022.8.2

Gruß,  
Klinki

---

<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:** [October 14, 2022, 1:29pm UTC](https://community.openems.io/t/unter-zahler-uber-modbus-verfugbar-machen/1109/8 "2022-10-14T13:29:16Z")

</div>

Jetzt funktioniert es!

Es fehlte noch die ModbusSlave-Komponente bei der Klassen-Definition:

```auto
public class MeterMicrocareSdm630Impl extends AbstractOpenemsModbusComponent
		implements MeterMicrocareSdm630, AsymmetricMeter, SymmetricMeter, ModbusComponent, OpenemsComponent, ModbusSlave {

```

Schönes Wochenende,  
Klinki

Nachtrag: Ich habe Pull-Requests erstellt. Dabei noch einen Fehler korrigiert: bei Active Energy waren Consumption und Production vertauscht

---

<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 23, 2022, 8:55am UTC](https://community.openems.io/t/unter-zahler-uber-modbus-verfugbar-machen/1109/9 "2022-11-23T08:55:00Z")

</div>

Zur Info für die, die hier mitgelesen haben. Die Verbesserung von Klinki wurde mit diesem Pull-Request in OpenEMS übernommen:

> <https://github.com/OpenEMS/openems/pull/1952>
>
> Added support for Modbus TCP bridge

…und ist im Release 2022.11.0 enthalten:

> **[Release 2022.11.0 · OpenEMS/openems](https://github.com/OpenEMS/openems/releases/tag/2022.11.0)**
>
> Highlights
> 
> Add TimescaleDB timeseries database support to OpenEMS Backend (BETA test quality) (#1964)
> 
> See discussion at https://community.openems.io/t/new-integration-timescaledb/983
> 
> 
> Implementa...
