DIRIGERA Binding (IKEA Home smart)

Marketplace binding supports new IKEA devies based on Matter standard plus light-set

Don’t install in parallel to official released DIRIGERA binding!

ThingTypeUID Description Products
matter-outlet Power plug with electricity measurements GRILLPLATS, TOFSMYGGA
occupancy-sensor Sensor to detect motion. Maybe combined with light-sensor MYSPRAY
light-sensor Sensor providing illuminance measures included in MYGGSPRAY
environment-sensor Sensor measuring temperature, humidity and air quality TIMMERFLOTTE, ALPSTUGA
open-close-sensor Sensor detecting open/closed doors, windows or drawers MYGGBETT
water-leak-sensor Sensor detecting water leaks KLIPPBOK
two-button-switch Controller with 2 programmable buttons BILRESA dual button
three-button-switch Controller with 3 programmable buttons BILRESA scroll wheel
matter-light LED light (based on Matter standard) KAJPLATS series
light-set Supporting lights orgnaized in a Set IKEA Home smart feature

Resources

Bundle
org.openhab.binding.dirigera-5.3.0-SNAPSHOT.jar

Source Code

Exciting! I’m tempted to get a DIRIGERA to help you test, but I won’t be near an IKEA until late December.

Glancing briefly through the readme, it occurs to me to wonder if there are OH naming conventions for channel names. I don’t think so (?), but my experience is that power-state would typically just be state, and ota-status would be otaStatus. It’s always nice to standardize terminology whenever possible.

Will it work with non-IKEA devices that follow the Zigbee protocol?

There are guidelines regarding syntax and channels shall be named lower-case-hyphen. So otaStatus won’t be valid.
Regarding semantics I don’t think so. I scanned through all public bindings and didn’t find anything like otastatus or derivates.
I found state too generic. There’s also an ota-state so seemed logic for me to give it the power prefix. Let’s in the review after opening th PR.

It should from product description but I cannot personally test it. I saw in the Partner Projects Leggin and dvdgeisler some working examples.

In the top post there’s a table with IKEA products and I hope the community helps me to get all devices tested and also extend the table with other working products.

Thanks for the info. I just looked at the Astro binding, which is ancient. Good to know that new bindings use hyphens.

I assumed that’s why you chose power-state. I’d personally go with state as referring to the device’s generic state of being, but that’s just an opinion.

That’s what led me to wonder about non-IKEA devices. Perhaps it’s worth adding a statement that other devices should work as long as they follow the Zigbee spec (but no guarantees).

You could also rename the column from “Products” to “IKEA devices”.

If IKEA does a free-shipping offer, I’ll order one to help you out!

Very excited to try this out on all my devices.
Tested on some binds, working great so far.

Wow, I didn’t expect that. I don’t have any blinds so I wasn’t able to test it in beforehand. This is a (sorry for the wordplay) blind implementation and great to hear that it works out.

Please check out everyting is working and then I’m able to change the tested column from no to community.

ThingTypeUUID Description Tested Products
blind Window or door blind no PRAKTLYSING ,KADRILJ ,FRYKTUR, TREDANSEN
blind-controller Controller to open and close blinds no TRÅDFRI

It occurs to me to check if you’re aware of the Matter binding that’s also in the works. Since DIRIGERA is now Matter-enabled, there will be some duplication in functionality.

I don’t think that’s a bad thing since each binding serves a different purpose and users may prefer one or the other, but wanted to ensure you know about it. It totally slipped my mind yesterday.

@g_g_rich may have more insight since I think they’ve tested both bindings now.

Don’t know what Matter Binding you refer to but in community search I find only discussions approx 2 years old. Also Marketplace seems to have no Matter Binding.

To be sure this binding isn’t coming out of the blue. It’s mainly based on repo leggin dirigera which seems to be well maintained.

I’m not sure where best to link you to, so I’ve just gone to the end. It’s picked up a lot of steam over the past couple of months.

Matter discussion is here:

Binding currently in heavy development, not in marketplace, but available for download.

Not all Dirigera devices are exposed to Matter, and if I read the json correctly, not all channels are available in Matter. Of course this may change.

@rpwong I agree, I think both bindings have their place, and I will continue to test and use both. A dedicated binding usually is able to have access to a more complete feature set. Dan is working on Matter exposing OpenHAB items as endpoints.

@weymann I am amazed how complete your binding is with support of all the channels and devices. Nice work. Going to take me a while to test out my devices with the various channels.

@weymann, I’ve configured my bridge through textual file, however, any time the file gets reloaded, the binding is asking me to again press the button on the Dirigera hub to get a new token. This also happens during a reboot.

Oh this damn text configurations :frowning:

Ok, problem is I stored token using key device id but this doesn’t work if it’s not known at the beginning. I’ll stiore it with key ipAdress and now it should be fine.
Binding is replaced in top post.

Edit:
If you replace in /var/lib/openhab/jsondb/dirigera.json the device id in green with your IP address and do a reboot you shouldn’t need a new pairing.

@weymann, that worked thanks.

Hey!

I found the binding by coincidence in the OpenHAB Community Marketplace 2 days ago and spontaneously installed it. 2 weeks ago, I bought a Dirigera Hub and obviously wasn’t able to connect it to OpenHAB, yet. So, I was excited.

Unfortunately, auto-discovery doesn’t find anything, frontail just mentions the following:

2024-11-07 08:54:55.469 [INFO ] [l.discovery.DirigeraDiscoveryService] - DIRIGERA DISCOVERY searching manually for gateways
2024-11-07 08:54:55.476 [INFO ] [l.discovery.DirigeraDiscoveryManager] - DIRIGERA DISCOVERY scan finished in 0 seconds

Running “bundle:list | grep Add-ons”:
385 │ Active │ 80 │ 4.3.0.202411051258 │ openHAB Add-ons :: Bundles :: Dirigera Binding

I also tried to place the JAR file directly in the addons folder (after uninstalling the binding, of course :slight_smile:), getting the same result.

Manually adding a Dirigera gateway through the local IP address leaves the device in status “Uninitialized”, even pressing the “Action” button on the hub does nothing.
But frontail gives a “slightly” more detailed error:

Expand

2024-11-07 09:42:23.854 [ERROR] [.AbstractFaultChainInitiatorObserver] - An unexpected error occurred during error handling. No further error processing will occur. org.apache.cxf.interceptor.Fault: 'java.util.concurrent.ScheduledExecutorService org.openhab.core.common.ThreadPoolManager.getPoolBasedSequentialScheduledExecutorService(java.lang.String, java.lang.String)' at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162) ~[bundleFile:3.6.2] at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128) ~[bundleFile:3.6.2] at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:201) ~[bundleFile:3.6.2] at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:104) ~[bundleFile:3.6.2] at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59) ~[bundleFile:3.6.2] at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96) ~[bundleFile:3.6.2] at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) ~[bundleFile:3.6.2] at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) ~[bundleFile:3.6.2] at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:265) ~[bundleFile:3.6.2] at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234) ~[bundleFile:3.6.2] at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208) ~[bundleFile:3.6.2] at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160) ~[bundleFile:3.6.2] at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:225) ~[bundleFile:3.6.2] at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:304) ~[bundleFile:3.6.2] at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:217) ~[bundleFile:3.6.2] at javax.servlet.http.HttpServlet.service(HttpServlet.java:517) ~[bundleFile:4.0.4] at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:279) ~[bundleFile:3.6.2] at org.ops4j.pax.web.service.spi.servlet.OsgiInitializedServlet.service(OsgiInitializedServlet.java:102) ~[bundleFile:?] at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) ~[bundleFile:9.4.52.v20230823] at org.ops4j.pax.web.service.spi.servlet.OsgiFilterChain.doFilter(OsgiFilterChain.java:100) ~[bundleFile:?] at org.ops4j.pax.web.service.jetty.internal.PaxWebServletHandler.doHandle(PaxWebServletHandler.java:320) ~[bundleFile:?] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234) ~[bundleFile:9.4.52.v20230823] at org.ops4j.pax.web.service.jetty.internal.PrioritizedHandlerCollection.handle(PrioritizedHandlerCollection.java:96) ~[bundleFile:?] at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:722) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.Server.handle(Server.java:516) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) [bundleFile:9.4.52.v20230823] at java.lang.Thread.run(Thread.java:840) [?:?] Caused by: java.lang.NoSuchMethodError: 'java.util.concurrent.ScheduledExecutorService org.openhab.core.common.ThreadPoolManager.getPoolBasedSequentialScheduledExecutorService(java.lang.String, java.lang.String)' at org.openhab.binding.dirigera.internal.handler.DirigeraHandler.<init>(DirigeraHandler.java:140) ~[?:?] at org.openhab.binding.dirigera.internal.DirigeraHandlerFactory.createHandler(DirigeraHandlerFactory.java:117) ~[?:?] at org.openhab.core.thing.binding.BaseThingHandlerFactory.registerHandler(BaseThingHandlerFactory.java:129) ~[?:?] at org.openhab.core.thing.internal.ThingManagerImpl.doRegisterHandler(ThingManagerImpl.java:531) ~[?:?] at org.openhab.core.thing.internal.ThingManagerImpl.registerHandler(ThingManagerImpl.java:512) ~[?:?] at org.openhab.core.thing.internal.ThingManagerImpl.registerAndInitializeHandler(ThingManagerImpl.java:927) ~[?:?] at org.openhab.core.thing.internal.ThingManagerImpl.thingAdded(ThingManagerImpl.java:359) ~[?:?] at org.openhab.core.thing.internal.ThingRegistryImpl.notifyTrackers(ThingRegistryImpl.java:213) ~[?:?] at org.openhab.core.thing.internal.ThingRegistryImpl.notifyListenersAboutAddedElement(ThingRegistryImpl.java:132) ~[?:?] at org.openhab.core.thing.internal.ThingRegistryImpl.notifyListenersAboutAddedElement(ThingRegistryImpl.java:1) ~[?:?] at org.openhab.core.common.registry.AbstractRegistry.added(AbstractRegistry.java:175) ~[?:?] at org.openhab.core.common.registry.AbstractRegistry.added(AbstractRegistry.java:1) ~[?:?] at org.openhab.core.common.registry.AbstractProvider.notifyListeners(AbstractProvider.java:60) ~[?:?] at org.openhab.core.common.registry.AbstractProvider.notifyListeners(AbstractProvider.java:79) ~[?:?] at org.openhab.core.common.registry.AbstractProvider.notifyListenersAboutAddedElement(AbstractProvider.java:83) ~[?:?] at org.openhab.core.common.registry.AbstractManagedProvider.add(AbstractManagedProvider.java:66) ~[?:?] at org.openhab.core.common.registry.AbstractRegistry.add(AbstractRegistry.java:354) ~[?:?] at org.openhab.core.io.rest.core.internal.thing.ThingResource.create(ThingResource.java:300) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:179) ~[bundleFile:3.6.2] at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96) ~[bundleFile:3.6.2] ... 53 more 2024-11-07 09:42:23.871 [WARN ] [org.eclipse.jetty.server.HttpChannel] - /rest/things org.apache.cxf.interceptor.Fault: 'java.util.concurrent.ScheduledExecutorService org.openhab.core.common.ThreadPoolManager.getPoolBasedSequentialScheduledExecutorService(java.lang.String, java.lang.String)' at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162) ~[?:?] at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128) ~[?:?] 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:265) ~[?:?] 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.doPost(AbstractHTTPServlet.java:217) ~[?:?] at javax.servlet.http.HttpServlet.service(HttpServlet.java:517) ~[bundleFile:4.0.4] 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:100) ~[?:?] at org.ops4j.pax.web.service.jetty.internal.PaxWebServletHandler.doHandle(PaxWebServletHandler.java:320) ~[?:?] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) ~[?:?] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) ~[?:?] at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234) ~[bundleFile:9.4.52.v20230823] 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) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.Server.handle(Server.java:516) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) ~[bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) [bundleFile:9.4.52.v20230823] at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) [bundleFile:9.4.52.v20230823] at java.lang.Thread.run(Thread.java:840) [?:?] Caused by: java.lang.NoSuchMethodError: 'java.util.concurrent.ScheduledExecutorService org.openhab.core.common.ThreadPoolManager.getPoolBasedSequentialScheduledExecutorService(java.lang.String, java.lang.String)' at org.openhab.binding.dirigera.internal.handler.DirigeraHandler.<init>(DirigeraHandler.java:140) ~[?:?] at org.openhab.binding.dirigera.internal.DirigeraHandlerFactory.createHandler(DirigeraHandlerFactory.java:117) ~[?:?] at org.openhab.core.thing.binding.BaseThingHandlerFactory.registerHandler(BaseThingHandlerFactory.java:129) ~[?:?] at org.openhab.core.thing.internal.ThingManagerImpl.doRegisterHandler(ThingManagerImpl.java:531) ~[?:?] at org.openhab.core.thing.internal.ThingManagerImpl.registerHandler(ThingManagerImpl.java:512) ~[?:?] at org.openhab.core.thing.internal.ThingManagerImpl.registerAndInitializeHandler(ThingManagerImpl.java:927) ~[?:?] at org.openhab.core.thing.internal.ThingManagerImpl.thingAdded(ThingManagerImpl.java:359) ~[?:?] at org.openhab.core.thing.internal.ThingRegistryImpl.notifyTrackers(ThingRegistryImpl.java:213) ~[?:?] at org.openhab.core.thing.internal.ThingRegistryImpl.notifyListenersAboutAddedElement(ThingRegistryImpl.java:132) ~[?:?] at org.openhab.core.thing.internal.ThingRegistryImpl.notifyListenersAboutAddedElement(ThingRegistryImpl.java:1) ~[?:?] at org.openhab.core.common.registry.AbstractRegistry.added(AbstractRegistry.java:175) ~[?:?] at org.openhab.core.common.registry.AbstractRegistry.added(AbstractRegistry.java:1) ~[?:?] at org.openhab.core.common.registry.AbstractProvider.notifyListeners(AbstractProvider.java:60) ~[?:?] at org.openhab.core.common.registry.AbstractProvider.notifyListeners(AbstractProvider.java:79) ~[?:?] at org.openhab.core.common.registry.AbstractProvider.notifyListenersAboutAddedElement(AbstractProvider.java:83) ~[?:?] at org.openhab.core.common.registry.AbstractManagedProvider.add(AbstractManagedProvider.java:66) ~[?:?] at org.openhab.core.common.registry.AbstractRegistry.add(AbstractRegistry.java:354) ~[?:?] at org.openhab.core.io.rest.core.internal.thing.ThingResource.create(ThingResource.java:300) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:179) ~[?:?] at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96) ~[?:?] ... 53 more

I am running on OpenHAB 4.1.1 through Docker on Unraid (via Docker-Compose) and would consider myself an advanced OpenHAB user…so maybe I’m just missing a spot…or I’m just too impatient :slight_smile:

Hi @RauleNR ,

pls. try Openhab 4.3 or above. I also use Docker setup and works well. Good luck!

@weymann great job!
Tested already on my devices (lights and plugs).

  1. Bridge Configuration & Gateway Pairing - passed
  2. Things & Items configuration - passed
  3. Controlling devices:
    → Power-state (switch type) works well for both lights and plugs.
    → Trouble to control lights via brightness channel (dimmer type):
    PROBLEM 1
    Not possible to control the light using dimmer after it’s been switched OFF in IKEA app. On the other hand when switched ON via IKEA app, then the state updates and can be contolled via OH.
    PROBLEM 2
    Can’t set 0 (OFF) value via dimmer type item. Can’t switch OFF the light using dimmer.

Please advice

I assume the docker has an IP address from another subnet than DIRIGERA gateway is connected. If the gateway is not in the same subnet discovery will not find.

Seems 4.1 don’t have the Threadpool I used. Let me make this 4.1 compatible, shouldn’t be a biggy.

I had the same idea updating OpenHAB to 4.3 and I’ll try this on the upcoming weekend.

All my devices are placed in the same network, a ping from the OH4 container (via CLI) to the Dirigera hub is successful. Just checked it.

Thanks :slight_smile:

Just recognized my openHAB which is in use running also 4.1. Just running it on my test env and never tried it out, shame in me :slight_smile:

Bundle with OH4.1 compatibility is already dispatched, you can try it out now.

Please search in your traces for DIRIGERA Manager received which IP is attached.

It’s saying


2024-11-07 14:55:38.227 [INFO ] [l.discovery.DirigeraDiscoveryManager] - DIRIGERA Manager received 192.168.111.1
2024-11-07 14:55:38.277 [INFO ] [l.discovery.DirigeraDiscoveryManager] - DIRIGERA DiscoveryService registered
2024-11-07 14:55:38.278 [INFO ] [l.discovery.DirigeraDiscoveryService] - DIRIGERA DISCOVERY constructor
2024-11-07 14:55:54.233 [INFO ] [l.discovery.DirigeraDiscoveryService] - DIRIGERA DISCOVERY searching manually for gateways
2024-11-07 14:55:54.241 [INFO ] [l.discovery.DirigeraDiscoveryManager] - DIRIGERA DISCOVERY scan finished in 0 seconds

which is my OpenHAB’s IP address.

As it didn’t recognize the Dirigera Hub automatically, I tried creating it manually by providing the hub’s IP address, It started asking for the button press, and after pressing the button, it worked.
Thank you for your support!