Implementing a device

Hi OpenEMS community,

I am having problems trying to create a protocol connection to my device.

This is my folder when created according to the template

after creating and running openems edge, i turn on the modbus/rtu serial bridge and meter ddsu666 then the log section informs me like this

[_cycle ] ERROR [meter.ddsu666.MeterDDSU666Impl] bundle io.openems.edge.meter.ddsu666:1.0.0.202509050807 (255)[io.openems.edge.meter.ddsu666.MeterDDSU666Impl(186)] : Error during instantiation of the implementation object
java.lang.reflect.InvocationTargetException: null
at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:74) ~[?:?]
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Constructor.java:486) ~[?:?]
at org.apache.felix.scr.impl.inject.internal.ComponentConstructorImpl.newInstance(ComponentConstructorImpl.java:326) ~[org.apache.felix.scr-2.2.12.jar:?]
at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:286) [org.apache.felix.scr-2.2.12.jar:?]
at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:115) [org.apache.felix.scr-2.2.12.jar:?]
at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:1002) [org.apache.felix.scr-2.2.12.jar:?]
at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:975) [org.apache.felix.scr-2.2.12.jar:?]
at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:920) [org.apache.felix.scr-2.2.12.jar:?]
at org.apache.felix.framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:349) [org.apache.felix.framework-7.0.5.jar:?]
at org.apache.felix.framework.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:249) [org.apache.felix.framework-7.0.5.jar:?]
at org.apache.felix.framework.ServiceRegistry.getService(ServiceRegistry.java:362) [org.apache.felix.framework-7.0.5.jar:?]
at org.apache.felix.framework.Felix.getService(Felix.java:3984) [org.apache.felix.framework-7.0.5.jar:?]
at org.apache.felix.framework.BundleContextImpl.getService(BundleContextImpl.java:450) [org.apache.felix.framework-7.0.5.jar:?]
at io.openems.edge.core.componentmanager.ComponentManagerImpl.getComponentsViaService(ComponentManagerImpl.java:243) [io.openems.edge.core.jar:?]
at io.openems.edge.core.componentmanager.ComponentManagerImpl.getComponentsViaService(ComponentManagerImpl.java:220) [io.openems.edge.core.jar:?]
at io.openems.edge.core.componentmanager.ComponentManagerImpl.getEnabledComponents(ComponentManagerImpl.java:179) [io.openems.edge.core.jar:?]
at io.openems.edge.core.sum.SumImpl.calculateState(SumImpl.java:461) [io.openems.edge.core.jar:?]
at io.openems.edge.core.sum.SumImpl.updateChannelsBeforeProcessImage(SumImpl.java:168) [io.openems.edge.core.jar:?]
at io.openems.edge.core.cycle.CycleWorker.forever(CycleWorker.java:69) [io.openems.edge.core.jar:?]
at io.openems.common.worker.AbstractWorker$1.run(AbstractWorker.java:155) [io.openems.common.jar:?]
Caused by: java.lang.IllegalArgumentException: Duplicated Channel-ID [ActivePower] for Component [null]
at io.openems.edge.common.component.AbstractOpenemsComponent.addChannel(AbstractOpenemsComponent.java:373) ~[?:?]
at io.openems.edge.common.component.AbstractOpenemsComponent.addChannel(AbstractOpenemsComponent.java:356) ~[?:?]
at io.openems.edge.common.component.AbstractOpenemsComponent.addChannels(AbstractOpenemsComponent.java:413) ~[?:?]
at io.openems.edge.common.component.AbstractOpenemsComponent.(AbstractOpenemsComponent.java:99) ~[?:?]
at io.openems.edge.bridge.modbus.api.AbstractOpenemsModbusComponent.(AbstractOpenemsModbusComponent.java:81) ~[?:?]
at io.openems.edge.meter.ddsu666.MeterDDSU666Impl.(MeterDDSU666Impl.java:59) ~[?:?]
at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) ~[?:?]
… 20 more
2025-09-05T17:06:27,940 [_cycle ] WARN [ms.edge.core.cycle.CycleWorker] [_cycle] There are no Schedulers configured!
2025-09-05T17:06:27,940 [tchQueue] ERROR [Events.Framework ] FrameworkEvent ERROR
org.osgi.framework.ServiceException: Service factory returned null. (Component: meter.ddsu666 (186))
at org.apache.felix.framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:385) ~[?:?]
at org.apache.felix.framework.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:249) ~[?:?]
at org.apache.felix.framework.ServiceRegistry.getService(ServiceRegistry.java:362) ~[?:?]
at org.apache.felix.framework.Felix.getService(Felix.java:3984) ~[?:?]
at org.apache.felix.framework.BundleContextImpl.getService(BundleContextImpl.java:450) ~[?:?]
at io.openems.edge.core.componentmanager.ComponentManagerImpl.getComponentsViaService(ComponentManagerImpl.java:243) ~[?:?]
at io.openems.edge.core.componentmanager.ComponentManagerImpl.getComponentsViaService(ComponentManagerImpl.java:220) ~[?:?]
at io.openems.edge.core.componentmanager.ComponentManagerImpl.getEnabledComponents(ComponentManagerImpl.java:179) ~[?:?]
at io.openems.edge.core.sum.SumImpl.calculateState(SumImpl.java:461) ~[?:?]
at io.openems.edge.core.sum.SumImpl.updateChannelsBeforeProcessImage(SumImpl.java:168) ~[?:?]
at io.openems.edge.core.cycle.CycleWorker.forever(CycleWorker.java:69) ~[?:?]
at io.openems.common.worker.AbstractWorker$1.run(AbstractWorker.java:155) ~[?:?]

I don’t know what’s going on or what’s wrong, please help me figure out the problem or give me a detailed guide on how to do it from scratch, please.

Thanks

Hi,

the Log is pretty Detailled about the Issue…

“Duplicated Channel-ID [ActivePower]”

You implement EnergyMeter Interface - so you need to map the Channels for EnergyMeter to EnergyMeter and not to your own Channels.(See other Meter-Impls)

Greetings

More specifically the error is here:

You should map to ElectricityMeter.ChannelId.ACTIVE_POWER directly.

Are you planning to provide a Pull-Reqest for the “DDSU666” meter? It seems to be a commonly used device.

Thanks.

Hi,

Thanks everyone my problem is solved i didnt read carefully electricmeter has basic units of measurement so i took advantage of electricmeter to avoid duplication.

Thanks.

Hi @pixelmanh ,

Could you please also provide a PR for this Meter? :slight_smile:

Greetings

1 Like

I saw, that the DDSU666 is a Single Phase Meter - also the Register Addresses in his Code seem to be just Mock - i Implemented them and will provide a PR soon

Here my PR: