DIRIGERA Binding (IKEA Home smart)

logo

Binding supporting the DIRIGERA Gateway from IKEA.

It provides devices and scenes towards openHAB. With this it’s possible to connect them with other devices outside of the IKEA world.

Refer readme for supported things, channels, examples and further descitions.

Supported Things

ThingTypeUUID Description Tested Products
gateway IKEA Gateway for smart products Community DIRIGERA
air-purifier Air cleaning device with particle filter Community STARKVIND
air-quality Air measure for temperature, humidity and particles no VINDSTYRKA
blind Window or door blind Community PRAKTLYSING ,KADRILJ ,FRYKTUR, TREDANSEN
blind-controller Controller to open and close blinds no TRÅDFRI
dimmable-light Light with brightness support Community TRÅDFRI
temperature-light Light with color temperature support Community TRÅDFRI, FLOALT
color-light Light with color support Community TRÅDFRI, ORMANÅS
light-controller Controller to handle light attributes personally TRÅDFRI, RODRET,STYRBAAR
motion-sensor Sensor detecting motion events no TRÅDFRI
motion-light-sensor Sensor detecting motion events and measures light level personally VALLHORN
single-shortcut Shortcut controller with one button no TRÅDFRI
double-shortcut Shortcut controller with two buttons personally SOMRIG
simple-plug Switchable power plug Community TRÅDFRI, ÅSKVÄDER
power-plug Switchable power plug with status light and child lock personally TRETAKT
smart-plug Switchable plug with electricity measurements personally INSPELNING
speaker Speaker with player activities personally SYMFONISK
sound-controller Controller for speakers no SYMFONISK, TRÅDFRI
contact-sensor Sensor tracking if windows or doors are open personally PARASOLL
water-sensor Sensor to detect water leaks no BADRING
repeater Repeater to strengthen signal personally TRÅDFRI
scene Scene from IKEA home smart App which can be triggered personally -

Changelog

Version 0.4-alpha

  • Channels
    – json channels removed
    ota-status removed advanced attribute
    links and link-candidates marked as advanced due to usage only in setup stage
  • Debugging
    Steer debug via actions
    dumpToken,
    dumpJSON and
    setDebug for specific devices

Version 0.3-alpha

  • breaking change in several channels which are now linked to system channels
    – power
    – light brightness, color-temperature and color
    – motion detection
    – media control, volume and mute
    – battery-level
  • Air Purifier: manual fan speed channel
  • Smart Power Plug (INSPELNING): command reset-date possible for individual energy measurements
  • Stability: Watchdog added to check connection towards gateway

Version 0.2-alpha

  • Fix for openHAB version 4.1 compatibility
  • Bugfix textural configuration regarding token storage
  • Rework lights to enable to change settings during OFF

Version 0.1-alpha

  • initial version

Resources

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

Source Code

4 Likes

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.

2 Likes

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
2 Likes

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.

2 Likes

@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.

1 Like

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

1 Like

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!

1 Like