Zigbee with Sonoff USB Dongle Plus-E

I would like to use with openhab 5.1.0.M2 the Sonoff USB dongle plus-E. After installing the zigbee binding I select in my case COM3 which is not used from another application. Unfortunately I get a communication error and i can not connect.

I tried also other com-ports but always the same error. With a script I checked if the dongle responds on the selected com-port (while openhab is running) and there was no communication problem.

What could be the problem here? Is there a solution?

Thanks in advance

That device uses an Ember chipset. Did you review and follow the Ember specific steps in the add-on docs? ZigBee - Bindings | openHAB In particular

Note that there are generally two versions of the Ember NCP firmware in use. One operates at a baud rate of 115200 with RTS/CTS flow control (i.e. hardware flow control), the other operates at a baud rate of 57600, and XON/XOFF flow control (i.e. software flow control).

Depending on the chipset you need to use different configurations for the coordinator Thing to communicate with it.

On Windows you also might need to install a device driver.

Have a look at this post. I ran into a issue with the zigbee dongle, might give you an idea to solve your problem.

Thanks for the replies. I tried to use the recommended port settings but without success. Then I used a python script to check what kind of data I receive from the dongle. With the suggested port settings I only got “non humable” readings.

I installed the manufacturer windows driver which is registered in the device manager without error.

Questions:

Makes this sense to you? What kind of data I should expect and are those data “readable”? Is it possible to read out the dongle sw version? If so, what would be the command?

Do I need to flash another firmware to the dongle?

So, at this point we can now conclude you are using windows OS I am guessing win11 or maybe 10
Either way then you can go on the sonoff website and launch the utility from them and it will read the firmware version and report it if it can read the dongle correctly if that works great you know that windows is able to communicate with the dongle.
I have that dongle and use it in a windows lab box with the original firmware 6.10.3.0
for mine it is using baud rate 115200 hardware (CTS/RTS) it is set up as an ember coordinator.
I looked at the comm that windows device manager set for the dongle and picked exactly that comm in the openhab config
Then I initialized the dongle via openhab and it works just fine no additional tweaking of changes needed.
I will add this note if your OpenHAB is running as a windows service you will need to search the forum for a post I made a year or so back to add additional parameters to the .OpenHAb wrapper.conf to get ZigBee working when it runs as a service.
Hope that helps

thanks for your reply. I am using following configuration:

  • win11
  • OH 5.1.0.M2 (as a service)
  • Sonoff ZBDongle-E with latest firmware 8.0.2
  • Binding → Ember Coordinator
  • Windows Com → COM3, I use this port in the binding

I use the “Reinitialize Controller” in the binding too

Same communication error again! Do u used other different settings?

What is different for my install.
I use

I updated the openhabwrapper.conf file before adding openhab as a windows service
Below quote is what I referenced in my first reply with regard to running openhab as a windows service

.
Hope that helps.

Ok I added those line. After restarting OH, flashing the sonoff firmware back to 6.10.3, adding the Ember coordinator with the correct com-port the dongle is used i get this error message:

ERROR

  • Logger Class

    org.openhab.core.io.rest.core.internal.thing.ThingResource

  • Message

    Exception during HTTP PUT request for update config at ‘things/zigbee:coordinator_ember:4cd6840152/config’

  • Stack Trace

    java.lang.NullPointerException: Cannot invoke “com.zsmartsystems.zigbee.dongle.ember.ezsp.command.EzspVersionResponse.getProtocolVersion()” because “this.ezspVersion” is null
    at com.zsmartsystems.zigbee.dongle.ember.ZigBeeDongleEzsp.setTcJoinMode(ZigBeeDongleEzsp.java:1329)
    at com.zsmartsystems.zigbee.dongle.ember.ZigBeeDongleEzsp.updateTransportConfig(ZigBeeDongleEzsp.java:1242)
    at org.openhab.binding.zigbee.handler.ZigBeeCoordinatorHandler.handleConfigurationUpdate(ZigBeeCoordinatorHandler.java:707)
    at org.openhab.binding.zigbee.ember.handler.EmberHandler.handleConfigurationUpdate(EmberHandler.java:195)
    at org.openhab.core.thing.internal.ThingRegistryImpl.updateConfiguration(ThingRegistryImpl.java:94)
    at org.openhab.core.io.rest.core.internal.thing.ThingResource.updateConfiguration(ThingResource.java:540)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:179)
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:201)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:104)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:267)
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:225)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:304)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPut(AbstractHTTPServlet.java:234)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:520)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:279)
    at org.ops4j.pax.web.service.spi.servlet.OsgiInitializedServlet.service(OsgiInitializedServlet.java:102)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
    at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656)
    at org.ops4j.pax.web.service.spi.servlet.OsgiFilterChain.doFilter(OsgiFilterChain.java:113)
    at org.ops4j.pax.web.service.jetty.internal.PaxWebServletHandler.doHandle(PaxWebServletHandler.java:334)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234)
    at org.ops4j.pax.web.service.jetty.internal.PrioritizedHandlerCollection.handle(PrioritizedHandlerCollection.java:96)
    at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:722)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
    at org.eclipse.jetty.server.Server.handle(Server.java:516)
    at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
    at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
    at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
    at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
    at java.base/java.lang.Thread.run(Thread.java:1583)

No idea what else I could try.. any ideas?

Hi,
As a test can try a few things.

  1. stop openhab as a windows service and disable the service in services.
  2. reboot the PC
  3. logon to the PC with an account that has administrator rights.
  4. Launch Openhab with the start.bat in the openhab folder with admin rights.
  5. Check if the dongle comes online or same error occurs.

If issue is the same
6. shutdown openhab reboot the pc leaving service disabled
7. pull down the stable version 5.0.2
8. create a new folder and just extract the 5.0.2 it to the newly created folder.
9.This will give you a nice clean fresh version basic of OpenHAB 5.0.2 stable to test with.
10.launch it using start.bat with elevated permissions.
11.add the ZigBee binding and then your coordinator with all the correct comm port and flow control settings and then initialize it.
does it work?

Hello,

I followed your steps and also installed the OH5.0.2 but everything without success. I checked many times the comport settings but there is no mistake on that. For some unknown reasons, I always get the “communication error” reported.
For me it looks somehow the comport I use for the dongle is blocked by the OH and it does not matter if I use another comport for the dongle.

Is it possible to find you which ports are actively used from OH and which binding is using it?

Hi,
If you followed the steps for a clean basic OH 5.0.2 and only added the Zigbee binding and nothing else then OH should not be using any other com ports at this point except what you configured for the dongle.
This test effectively removes OpenHAB from being the issue.
Which points it back to either a hardware issue (dongle or PC) or a software issue with OS.
If you want to further validate that you have a few options.
The behavior you are seeing reminds me of how the P version of the dongle acts with OH
Are you 100% sure you have a E version and are you 100% sure the firmware version flashed correctly?
with OpenHAB stopped again make sure the openhab service is also stopped and disabled! (windows 11 likes to try and fix services that are set to automatic and just stopped and not disabled)
and you run from command line with elevated permission
mode
what does it return?
when you run
mode COM3
assuming from your earlier posts you said dongle was assigned to COM3 what does it return?
now after running that review the results what does the comm port report as the baud and flow control settings?
something like this ?

PS C:\WINDOWS\system32> mode COM3

Status for device COM3:
-----------------------
    Baud:            115200
    Parity:          None
    Data Bits:       8
    Stop Bits:       1
    Timeout:         ON
    XON/XOFF:        OFF
    CTS handshaking: OFF
    DSR handshaking: OFF
    DSR sensitivity: OFF
    DTR circuit:     ON
    RTS circuit:     OFF

next start OpenHAB version 5.0.2 from bat file.
Now run the mode command again does the COMM Port the dongle is on disappear?
If yes then OH bound to the comm port and took control.
If no then the OS is not releasing it to OpenHAB to allow it to connect too. This would indicate some other process outside of OpenHAB has the comm port locked.
If you truly want to check all of your hardware and OS without the OpenHAB influence, then go to the Zigbee2MQTT site and follow all the steps to install Zigbee2MQTT on windows and see if it works with your dongle.
if you want to see what OpenHAB is using then you can (with OpenHAB running) from the karaf cli
run

openhab> serial identifiers
[name: COM1, current owner: null]
[name: COM2, current owner: null]
[name: COM6, current owner: org.openhab.binding.zwave]
[name: COM3, current owner: org.openhab.binding.zigbee]
[name: COM4, current owner: null]
openhab>

and that will show you from OpenHAB point of view what it has attached
you may also run serial creators to see exactly what all comm ports are being used by OpenHAB and who owns them

openhab> serial creators
class org.openhab.core.io.transport.serial.rxtx.rfc2217.internal.RFC2217PortProvider, accepted protocols: [ProtocolType [pathType=NET, scheme=rfc2217]], port identifiers: []
class org.openhab.core.io.transport.serial.internal.RxTxPortProvider, accepted protocols: [ProtocolType [pathType=LOCAL, scheme=rxtx]], port identifiers: [[name: COM1, current owner: null], [name: COM2, current owner: null], [name: COM6, current owner: org.openhab.binding.zwave], [name: COM3, current owner: org.openhab.binding.zigbee], [name: COM4, current owner: null]]
openhab>

hope this helps.

thanks for your input. So restarting from the beginning I get following:

and the used com port under win11 is:

now I started OH again and get:

openhab> serial identifiers
[name: COM1, current owner: null]
[name: COM5, current owner: null]
[name: COM4, current owner: null]
[name: COM3, current owner: org.openhab.binding.zigbee]
openhab> serial creators
class org.openhab.core.io.transport.serial.internal.RxTxPortProvider, accepted protocols: [ProtocolType [pathType=LOCAL, scheme=rxtx]], port identifiers: [[name: COM1, current owner: null], [name: COM5, current owner: null], [name: COM4, current owner: null], [name: COM3, current owner: org.openhab.binding.zigbee]]
class org.openhab.core.io.transport.serial.rxtx.rfc2217.internal.RFC2217PortProvider, accepted protocols: [ProtocolType [pathType=NET, scheme=rfc2217]], port identifiers: []
openhab>

So the only difference I see to your code are the default windows serial settings. Does it matter if I set those settings directly in the zigbee binding? Do I need to set it under windows too?

one thought since the error you showed before

says that the ezspVersion is null that also points to either driver or incorrect communication with the device.
With OpenHAB saying it is attached comm3 to the binding it still acts like that dongle is not presenting the correct serial Interface Protocol
It might be you have a knock off version of the dongle. a ali express special :winking_face_with_tongue: even if you did not buy it from them directly.
As for needing to set serial settings in windows ? Nope I never did. You could try clicking restore default in device manage advanced settings for that comm port.
The correct driver should auto negotiate with the serial USB UART for correct settings.
I have not ever needed to change mine in windows device manager actually unless I was using windows terminal and that was many years ago in a much older version of windows like maybe back in the days of windows NT!
This is could also be a driver issue please take a look at this you have the driver loaded for a P version cp2102(N) is dongle P
notice the USB-serial Chip version
compare with the driver you loaded. cp2102(N) is for dongle P only
dongle E uses the CH9102F or a cp2102N notice the no ()
you may need the other driver for a CH9102F serial chip.
One of my dongles also had the CH9102F and I had to get the OEM driver when I loaded win 11 to make it work you might have hit that snag as well here is what shows on my win 11 device driver for my PLUS V2 E dongle

without taking your heat sink off and actually looking at what is soldered onto the board the only other thing I can suggest is you might try and search for ch343ser in google and pull down the chip manufacturer OEM win 11 driver and see if that helps.
The CH343ser version I have extracted into a folder from when I downloaded it is from 9/19/2023.
I absolutely did not update this driver on 7/19/2025 for an absolute fact. So that tells me after it got correct driver initially then windows must have updated it as part of some monthly patching cycle.
This by the way is what it looks like in windows 10 for my PLUS V2 E dongle
notice it uses the default Microsoft serial driver but that may be because I use that one on a VM and a USB device server.


and this is what shows for a Dongle P version (on server 2019) that I use for zigbee2MQTT.

for what it is worth here is the link to the OEM chip manufacturer driver download for the CH9102F chip. i.e the Ch343ser executable and CH343CDC executable as well. according to the notes on that site the CH343CDC is the customer distributable version.??..

hope that helps

Thanks a lot for your instructions. According what you said I downloaded several drivers from different vendors and checked it. Whatever I installed it always installs this driver:

The CP210x driver. On the backside of the dongle it is written “ZBDongle-E” but I do not know what chip is inside…

Whenever I installed a new driver, I uninstalled the old one first and restarted the PC. But with no driver I had a success. I could not find the CH9102F driver as you mentioned and see it in the device driver as well.

From which site you have downloaded that driver?

The OEM chip vendor link I provided above

I then ran the exe and then drilled into the extracted folder the exe created named WCH.CN on the C drive to the CH343SER folder then to the DRVSETUP64 folder and ran the DRVSETUP64.exe after it completed, I then did update driver selected let me chose and then
USB-Enhanced-Serial CH9102 version as shown in my screen shot below

followed the prompts to complete the update restarted the PC and was done with correct driver and everything seemed to work fine.
Beyond what I have suggested above the only other advice I can offer to further determine if this is a hardware/driver/OS related issue would be for you to setup a different software solution that communicates with a Zigbee dongle such as Zigbee2MQTT since it is totally standalone application it will show you if all your hardware and OS are working and configured correctly.
It does not mean you have to use that as your way of implementing the ZigBee solution. It is just another way to test your hardware devices for correct functionality.

When following exactly your instructions, I can’t see the option to select between the CH9102 drivers. I only have the option to select the CP210x driver. I downloaded exactly from the link you sent.

So this is somehow corious because I do have the E-Type dongle but you can select the other driver. How is that possible?

Ok well you can force windows to use the other driver. Click the Have Disk button then drill down to the extracted folder and then to WIN 1X subfolder select the INF like shown below

Follow the prompts ignore any nag screens or warnings about compatibility as you are forcing it to let you decide what is correct and those are likely due to this driver not being latest version or in the registry for that device id yet. complete the update restart the PC and verify it now uses that driver. If all is correct test and see if you have functionality.
As I said in my last post beyond this, I really have no other advice to offer.

I also started with this dongle and the Zigbee binding. But I couldn’t get it to work. In the end, I went with SMLIGHT SLZB-06M and zigbee2MQTT + MQTT binding.

As has been suggested changing the hardware (dongle device) is another way to approach this. However, I personally would not do both a hardware and software swap at same time. I would want to understand which one was real culprit.
Also, both Zigbee binding as well as Zigbee2MQTT have advantages and disadvantages, so it really is a personal choice on which one you choose as your approach for implementing Zigbee into you home automation solution. The Zigbee binding does work and lots of folks are using it in the community. So, it really comes back to how much extra effort and learning curve you are willing to do to implement MQTT on top of Zigbee.

So now I changed the driver, restarted everything with following result:

The error message, says “the device could not be started”. I also tried all other drivers but all with the same result except the one I used (see above). For me it looks like the hardware has some issues but I can’t say for 100%.

Which zigbee dongle with the zigbee binding can be recommended?