UNIFI binding 5.2

As I don’t have any traction in the Unifi 5.1 thread, I’ll open a new one

Not sure if this should go here or should I create a new thread. I’ve updated to OH5.2 yesterday and new Unified Unify binding giving me some problems:

  1. As I understand Network part of the binding supposed to work as it works before, however without any changes to the infrastructure all the devices went into “Unknown” state.
    Log is showing this:
2026-07-12 23:45:59.136 [DEBUG] [.network.api.cache.UniFiVoucherCache] - Put #0 entries in UniFiVoucherCache: 
2026-07-12 23:45:59.136 [DEBUG] [l.network.api.cache.UniFiClientCache] - Could not find an entry in the cache for id: '74:d0:2b:7d:07:d5'
2026-07-12 23:45:59.136 [DEBUG] [l.network.api.cache.UniFiClientCache] - Could not find an entry in the cache for id: '74:d0:2b:7d:07:d5'
2026-07-12 23:45:59.137 [DEBUG] [twork.api.cache.UniFiControllerCache] - Could not find a matching client for cid = 74:d0:2b:7d:07:d5

which is fine, this device was not on the network for sometime and not in Unify Cache anymore, so its status supposed to be “Unknown”. Other devices are in the cache and in the log:

 - UniFiClient{id: '658aa097e64367069f419c2b', mac: 'e8:9c:25:94:d7:f0', ip: '192.168.10.142', hostname: 'kpanchen01', name: 'kpanchen01', wired: true, guest: false, blocked: false, experience: 75, device: UniFiDevice{mac: '68:d7:9a:6f:47:dd', name: 'KNP Basement Main Switch', type: 'usw', model: 'US624P', version: '7.4.1.16850', experience: 92, disabled: false, led: null, uptime: 4141249, site: UniFiSite{id: '6118d52d19617e0ac0faac0d', name: 'default', desc: 'Default'}}}

But nothing indicates that binding ever evaluated this device (same with other devices), basically only one is evaluated.

  1. Protect bridge configuration. If protect bridge is configured like it was provided in the documentation:
 Bridge unifi:nvr myNvr "UniFi Protect NVR" [] {}

Log just gave an error configuring bridge:

2026-07-13 00:11:41.814 [INFO ] [enhab.core.model.core.internal.ModelRepositoryImpl] - Loading DSL model 'unifi.things'
2026-07-13 00:11:41.869 [WARN ] [enhab.core.model.core.internal.ModelRepositoryImpl] - DSL model 'unifi.things' has errors, therefore ignoring it: [8,19]: missing ':' at 'knpprotect'

If bridge is configured with “:” like this “unifi:nvr:knpprotect” it still gives an error but works and things / items go online:

2026-07-13 00:13:13.581 [INFO ] [enhab.core.model.core.internal.ModelRepositoryImpl] - Loading DSL model 'unifi.things'
2026-07-13 00:13:13.605 [INFO ] [enhab.core.model.core.internal.ModelRepositoryImpl] - Validation issues found in DSL model 'unifi.things', using it anyway:
Line 8: Provide a thing type ID and a thing ID in this format: <thingTypeId> <thingId>

Are those bugs or is it me doing something wrong?

Thank you!! K.

Update: so I turned machine which was offline back online today and after that all other things went from unknown to online, seems like a bug in the binding where after failure it is not evaluating other things, if somebody can confirm that scenario I’ll open a bug report!

I also run into issues with the combination of OH 5.2 and the Unifi 5.3 binding. Adding the unifi bridge works, and I can add stuff from the network part. But adding the NVR fails with this message:

 [WARN ] [g.discovery.internal.PersistentInbox] - Cannot create thing. No binding found that supports creating a thing of type unifi:nvr.

any ideas?

Are you using a nightly build?

Edit: Also can you run these 3 commands in the openHAB console (cli) and paste them here ?

bundle:list | grep -i unifi

scr:list | grep -i unifi

scr:info org.openhab.binding.unifi.internal.protect.UnifiProtectHandlerFactory

Also can you put the binding in DEBUG mode, restart the binding with bundle:restart org.openhab.binding.unifi and check the logs for exceptions ?

Are you using a nightly build?

No, 5.2 built-in build.

openhab> bundle:list -s | grep -i unifi
363 x Active x 80 x 5.2.0 x org.openhab.binding.unifi
openhab> scr:list | grep -i unifi
org.openhab.binding.unifi.internal.protect.util.TranslationService in bundle 363 (org.openhab.binding.unifi:5.2.0) enabled, 1 instance.
org.openhab.binding.unifi.internal.protect.media.PlayStreamServlet in bundle 363 (org.openhab.binding.unifi:5.2.0) enabled, 1 instance.
org.openhab.binding.unifi.internal.protect.media.UnifiMediaServiceImpl in bundle 363 (org.openhab.binding.unifi:5.2.0) enabled, 1 instance.
Id: 497, State:ACTIVE, PID(s): [org.openhab.unifiprotect, org.openhab.unifiprotect]
org.openhab.binding.unifi.internal.protect.UnifiProtectDiscoveryService in bundle 363 (org.openhab.binding.unifi:5.2.0) enabled, 1 instance.
org.openhab.binding.unifi.internal.network.UniFiThingHandlerFactory in bundle 363 (org.openhab.binding.unifi:5.2.0) enabled, 1 instance.
org.openhab.binding.unifi.internal.protect.media.ImageServlet in bundle 363 (org.openhab.binding.unifi:5.2.0) enabled, 1 instance.
org.openhab.binding.unifi.internal.network.handler.UniFiThingDiscoveryService in bundle 363 (org.openhab.binding.unifi:5.2.0) enabled, 1 instance.
org.openhab.binding.unifi.internal.network.action.UniFiSiteActions in bundle 363 (org.openhab.binding.unifi:5.2.0) enabled, 1 instance.
org.openhab.binding.unifi.internal.access.UnifiAccessDiscoveryService in bundle 363 (org.openhab.binding.unifi:5.2.0) enabled, 1 instance.
org.openhab.binding.unifi.internal.protect.UnifiProtectHandlerFactory in bundle 363 (org.openhab.binding.unifi:5.2.0) enabled, 1 instance.
Id: 494, State:ACTIVE, PID(s): [binding.unifiprotect]
org.openhab.binding.unifi.internal.access.UnifiAccessHandlerFactory in bundle 363 (org.openhab.binding.unifi:5.2.0) enabled, 1 instance.
org.openhab.binding.unifi.internal.discovery.UniFiAppDiscoveryService in bundle 363 (org.openhab.binding.unifi:5.2.0) enabled, 1 instance.
org.openhab.binding.unifi.internal.UniFiHandlerFactory in bundle 363 (org.openhab.binding.unifi:5.2.0) enabled, 1 instance.

openhab> scr:info org.openhab.binding.unifi.internal.protect.UnifiProtectHandlerFactory

Component Description: org.openhab.binding.unifi.internal.protect.UnifiProtectHandlerFactory

Class: org.openhab.binding.unifi.internal.protect.UnifiProtectHandlerFactory
Bundle: 363 (org.openhab.binding.unifi:5.2.0)
Enabled: true
Immediate: false
Services: [org.openhab.core.thing.binding.ThingHandlerFactory]
Scope: singleton
Config PID(s): [binding.unifiprotect], Policy: optional
Base Props: (1 entry)
osgi.ds.satisfying.condition.target = (osgi.condition.id=true)

Component Configuration Id: 494

State: ACTIVE
Service: 731 [org.openhab.core.thing.binding.ThingHandlerFactory]
Used by bundle 170 (org.openhab.core.config.discovery:5.2.0)
Used by bundle 216 (org.openhab.core.model.thing:5.2.0)
Used by bundle 219 (org.openhab.core.model.yaml:5.2.0)
Used by bundle 224 (org.openhab.core.thing:5.2.0)
Config Props: (5 entries)
component.id = 494
component.name = org.openhab.binding.unifi.internal.protect.UnifiProtectHandlerFactory
downloadBinaries = false
osgi.ds.satisfying.condition.target = (osgi.condition.id=true)
service.pid = binding.unifiprotect
References: (total 4)

  • $000: org.openhab.binding.unifi.internal.protect.media.UnifiMediaService SATISFIED 1..1 static
    target=(*) scope=bundle collectionType=service (1 binding):
    • Bound to [727] from bundle 363 (org.openhab.binding.unifi:5.2.0)
  • $001: org.openhab.binding.unifi.internal.protect.util.TranslationService SATISFIED 1..1 static
    target=(*) scope=bundle collectionType=service (1 binding):
    • Bound to [730] from bundle 363 (org.openhab.binding.unifi:5.2.0)
  • $002: org.openhab.core.thing.type.ThingTypeRegistry SATISFIED 1..1 static
    target=(*) scope=bundle collectionType=service (1 binding):
    • Bound to [480] from bundle 224 (org.openhab.core.thing:5.2.0)
  • osgi.ds.satisfying.condition: org.osgi.service.condition.Condition SATISFIED 1..1 dynamic
    target=(osgi.condition.id=true) scope=bundle (1 binding):
    • Bound to [6] from bundle 0 (org.eclipse.osgi:3.18.0.v20220516-2155)

Did a little bit more testing. The device in question is my “MediaPC” which is offline most of the time and Unifi controller removes it from cache. Now after a few days it is not in the cache and binding correctly indicates that:

2026-07-18 00:50:19.662 [DEBUG] [l.network.api.cache.UniFiClientCache] - Could not find an entry in the cache for id: ‘74:d0:2b:7d:07:d5’

I’ve restarted the binding and all the devices went online including the one which is not in cache now correctly indicating that device is off. However the first time after update and until that device went back on-line it was giving additional line in the log (something like “no matching client for cid”, see my original post or attached log) and all the devices just stayed in “Unknown” status. I cannot even be sure that this “bug” was introduced in 5.2, maybe it was there all along, just never noticed it. And it seems like I cannot even replicate it now, however it was easy replicatable before device in question went online.

Here’s the original log entry when all the devices stayed in “Unknown” state.

2026-07-12 23:45:48.764 [DEBUG] [.network.api.cache.UniFiVoucherCache] - Put #0 entries in UniFiVoucherCache:
2026-07-12 23:45:48.769 [DEBUG] [l.network.api.cache.UniFiClientCache] - Could not find an entry in the cache for id: ‘74:d0:2b:7d:07:d5’
2026-07-12 23:45:48.769 [DEBUG] [l.network.api.cache.UniFiClientCache] - Could not find an entry in the cache for id: ‘74:d0:2b:7d:07:d5’
2026-07-12 23:45:48.769 [DEBUG] [twork.api.cache.UniFiControllerCache] - Could not find a matching client for cid = 74:d0:2b:7d:07:d5

Original log is not showing any errors, I’ve attached it to the post, have a look.

UNIFI Log

Any comments on “UNIFI Protect” configuration?

Thank you Dan for your response and taking care of the binding!!! Let me know if I can help with any troubleshooting and testing!!

K.

HI Dan, here’s the output:

openhab> bundle:list | grep -i unifi
409 x Waiting  x  80 x 5.3.0.202607092211      x openHAB Add-ons :: Bundles :: UniFi Binding

and:

openhab> scr:list | grep -i unifi
org.openhab.binding.unifi.internal.protect.util.TranslationService in bundle 409 (org.openhab.binding.unifi:5.3.0.202607092211) enabled, 1 instance.
org.openhab.binding.unifi.internal.protect.media.PlayStreamServlet in bundle 409 (org.openhab.binding.unifi:5.3.0.202607092211) enabled, 1 instance.
org.openhab.binding.unifi.internal.protect.UnifiProtectDiscoveryService in bundle 409 (org.openhab.binding.unifi:5.3.0.202607092211) enabled, 1 instance.
org.openhab.binding.unifi.internal.protect.media.UnifiMediaServiceImpl in bundle 409 (org.openhab.binding.unifi:5.3.0.202607092211) enabled, 1 instance.
    Id: 894, State:ACTIVE, PID(s): [org.openhab.unifiprotect]
org.openhab.binding.unifi.internal.network.UniFiThingHandlerFactory in bundle 409 (org.openhab.binding.unifi:5.3.0.202607092211) enabled, 1 instance.
org.openhab.binding.unifi.internal.protect.media.ImageServlet in bundle 409 (org.openhab.binding.unifi:5.3.0.202607092211) enabled, 1 instance.
org.openhab.binding.unifi.internal.network.handler.UniFiThingDiscoveryService in bundle 409 (org.openhab.binding.unifi:5.3.0.202607092211) enabled, 1 instance.
org.openhab.binding.unifi.internal.network.action.UniFiSiteActions in bundle 409 (org.openhab.binding.unifi:5.3.0.202607092211) enabled, 1 instance.
org.openhab.binding.unifi.internal.access.UnifiAccessDiscoveryService in bundle 409 (org.openhab.binding.unifi:5.3.0.202607092211) enabled, 1 instance.
org.openhab.binding.unifi.internal.protect.UnifiProtectHandlerFactory in bundle 409 (org.openhab.binding.unifi:5.3.0.202607092211) enabled, 1 instance.
org.openhab.binding.unifi.internal.access.UnifiAccessHandlerFactory in bundle 409 (org.openhab.binding.unifi:5.3.0.202607092211) enabled, 1 instance.
org.openhab.binding.unifi.internal.discovery.UniFiAppDiscoveryService in bundle 409 (org.openhab.binding.unifi:5.3.0.202607092211) enabled, 1 instance.
org.openhab.binding.unifi.internal.UniFiHandlerFactory in bundle 409 (org.openhab.binding.unifi:5.3.0.202607092211) enabled, 1 instance.

and the 3rd:

openhab> scr:info org.openhab.binding.unifi.internal.protect.UnifiProtectHandlerFactory
Component Description: org.openhab.binding.unifi.internal.protect.UnifiProtectHandlerFactory
============================================================================================
Class:         org.openhab.binding.unifi.internal.protect.UnifiProtectHandlerFactory
Bundle:        409 (org.openhab.binding.unifi:5.3.0.202607092211)
Enabled:       true
Immediate:     false
Services:      [org.openhab.core.thing.binding.ThingHandlerFactory]
Scope:         singleton
Config PID(s): [binding.unifiprotect], Policy: optional
Base Props:    (1 entry)
  osgi.ds.satisfying.condition.target<String> = (osgi.condition.id=true)

Component Configuration Id: 891
-------------------------------
State:        FAILED ACTIVATION
Service:      1368 [org.openhab.core.thing.binding.ThingHandlerFactory]
Config Props: (3 entries)
  component.id<Long> = 891
  component.name<String> = org.openhab.binding.unifi.internal.protect.UnifiProtectHandlerFactory
  osgi.ds.satisfying.condition.target<String> = (osgi.condition.id=true)
References:   (total 4)
  - $000: org.openhab.binding.unifi.internal.protect.media.UnifiMediaService SATISFIED 1..1 static
    target=(*) scope=bundle collectionType=service (1 binding):
  - $001: org.openhab.binding.unifi.internal.protect.util.TranslationService SATISFIED 1..1 static
    target=(*) scope=bundle collectionType=service (1 binding):
  - $002: org.openhab.core.thing.type.ThingTypeRegistry SATISFIED 1..1 static
    target=(*) scope=bundle collectionType=service (1 binding):
    * Bound to [466] from bundle 224 (org.openhab.core.thing:5.2.0)
  - osgi.ds.satisfying.condition: org.osgi.service.condition.Condition SATISFIED 1..1 dynamic
    target=(osgi.condition.id=true) scope=bundle (1 binding):
    * Bound to [6] from bundle 0 (org.eclipse.osgi:3.18.0.v20220516-2155)
Failure:      java.lang.IllegalArgumentException: argument type mismatch
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:65)
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
        at org.apache.felix.scr.impl.inject.internal.ComponentConstructorImpl.newInstance(ComponentConstructorImpl.java:326)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:286)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:115)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:1001)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:974)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:919)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceObject(BindMethod.java:669)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2625)
        at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:2091)
        at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:2074)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeBindMethod(SingleComponentManager.java:442)
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:337)
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:304)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1232)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1152)
        at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:959)
        at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:895)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1184)
        at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:118)
        at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:123)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:961)
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
        at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:937)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:874)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:141)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:262)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:500)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:931)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:917)
        at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:986)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:754)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:676)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:439)
        at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:671)
        at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:341)
        at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:610)
        at org.apache.felix.scr.impl.Activator.access$200(Activator.java:75)
        at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:477)
        at org.apache.felix.scr.impl.AbstractExtender.createExtension(AbstractExtender.java:196)
        at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:169)
        at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:49)
        at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:488)
        at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:420)
        at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232)
        at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:949)
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
        at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151)
        at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:229)
        at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:138)
        at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:130)
        at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:217)
        at org.eclipse.osgi.container.Module.publishEvent(Module.java:499)
        at org.eclipse.osgi.container.Module.start(Module.java:486)
        at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:445)
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1260)
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1233)
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:520)
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:365)
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:316)
Caused by: java.lang.ClassCastException: Cannot cast org.openhab.binding.unifi.internal.protect.util.TranslationService to org.openhab.binding.unifi.internal.protect.util.TranslationService
        at java.base/java.lang.Class.cast(Class.java:4069)
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
        ... 73 more

in the log this seems strange?

java.lang.ClassCastException:
Cannot cast
org.openhab.binding.unifi.internal.protect.util.TranslationService
to
org.openhab.binding.unifi.internal.protect.util.TranslationService

after a few bundle restarts, the Protect binding now is active and seems to work, it discovered all cameras.

Gotcha, you said 5.3 which was the confusion.

Sorry, thats is an error in the docs i need to fix leftover from the refactor. The correct syntax should be:

Bridge unifi:controller:udm "UDM Pro" [
    host="192.168.1.1",
    username="openhab",
    password="secret"
] {
    Thing wirelessClient phone "My Phone" [ cid="aa:bb:cc:dd:ee:ff", site="default" ]

    Bridge nvr protect "Protect NVR" [] {
        Thing camera front "Front Camera" [ deviceId="abc123" ]
    }
}

I’m looking at the other issue, i requested access for that log

Why are you running 5.3 version and not the version that ships with 5.2 ? Was there another issue you were having?

In any case there seems to be 2 issues. First ClassCastException means two copies of the binding’s classes were likely loaded at once, how were you loading the jar? And did you have the default one installed before (and did you remove it?)

Second, there is a fix in 5.3 for discovered NVRs throwing an exception here, thats been merged and will be backported, but you are running 2026 07 09 , so this would not have had the fix, and i think your 5.3 jar is exactly the same version thats in 5.2.0, just targeted for 5.3.

i read of an error in 5.2 and that 5.3 was the solution. In 5.3 my NVR comes online, just removed the 5.3 jar and installed the regular 5.2 again. Doesn’t initialize, I’m getting an APIError.

so they’re not the same.

Ok, can you at least tell me what that is ? It’s really hard to help when i get 2 line response to what i asked. The last fix, which i can only guess with the limited info you have given and the error message earlier, was merged 2 days ago, not on the 9th.

I asked other questions, would be great if you responded if you would like assistance.

Thanks Dan, that syntax works:

2026-07-19 00:31:44.548 [INFO ] [enhab.core.model.core.internal.ModelRepositoryImpl] - Loading DSL model ‘unifi.things’

However, had another look at the log and see this:

2026-07-19 00:31:45.729 [DEBUG] [ct.handler.UnifiProtectCameraHandler] - Talkback not supported: HTTP 403: {“error”:{“code”:403,“message”:“Forbidden”}}

After few errors like this, had an Exception (twice)

2026-07-19 00:31:46.535 [DEBUG] [rk.handler.NetworkRefreshCoordinator] - Unhandled error during Network refresh for bridge unifi:controller:home
org.openhab.binding.unifi.internal.network.api.UniFiException: java.util.concurrent.RejectedExecutionException: HttpClient@5455a7b2{STOPPED} is stopped
at org.openhab.binding.unifi.internal.network.api.UniFiControllerRequest.getContentResponse(UniFiControllerRequest.java:210)
at org.openhab.binding.unifi.internal.network.api.UniFiControllerRequest.getContent(UniFiControllerRequest.java:149)
at org.openhab.binding.unifi.internal.network.api.UniFiControllerRequest.execute(UniFiControllerRequest.java:122)
at org.openhab.binding.unifi.internal.network.api.UniFiController.executeRequest(UniFiController.java:253)
at org.openhab.binding.unifi.internal.network.api.UniFiController.refreshSites(UniFiController.java:271)
at org.openhab.binding.unifi.internal.network.api.UniFiController.refresh(UniFiController.java:113)
at org.openhab.binding.unifi.internal.network.handler.NetworkRefreshCoordinator.runRefresh(NetworkRefreshCoordinator.java:142)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.util.concurrent.RejectedExecutionException: HttpClient@5455a7b2{STOPPED} is stopped
at org.eclipse.jetty.client.HttpDestination.send(HttpDestination.java:355)
at org.eclipse.jetty.client.HttpDestination.send(HttpDestination.java:323)
at org.eclipse.jetty.client.HttpClient.send(HttpClient.java:627)
at org.eclipse.jetty.client.HttpRequest.sendAsync(HttpRequest.java:780)
at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:767)
at org.openhab.binding.unifi.internal.network.api.UniFiControllerRequest.getContentResponse(UniFiControllerRequest.java:183)
… 12 more

All the Network devices went into “Error Comm” state. Restarted the binding and all went back online, this seems like unrelated issue but worth mentioning.

Dropped another log to the same location:

Unifi logs

Thank you so much for taking care of this, let me know if you need anything to test!!

K.

apologies for being short, let me retry:

You mentioned the 5.3 version in the OpenHab 5.2 thread that would solve a problem, my conclusion was that this was the better version to use. So I installed that version in the addons folder manually after removing the orginal 5.2 version.

so yes, 5.2 version was installed but removed. Could their be something still in cache?

I dowloaded it for the link you provided in the OH 5.2 thread. And it actually discovered my NVR, installed the Thing and came online. Currently I moved back to 5.2 binding and it won;t start any more with an ApiError: Bad Request message.

If I now do a Bundle Restart, I get this message:

2026-07-19 08:38:26.159 [ERROR] [core.thing.internal.ThingManagerImpl] - Checking/initializing thing 'unifi:nvr:3d30b08b0a:nvr' failed unexpectedly.
java.lang.IllegalArgumentException: Duplicate channels unifi:nvr:3d30b08b0a:nvr:storage-total
	at org.openhab.core.thing.util.ThingHelper.ensureUniqueChannels(ThingHelper.java:140)
	at org.openhab.core.thing.util.ThingHelper.ensureUniqueChannels(ThingHelper.java:132)
	at org.openhab.core.thing.util.ThingHelper.ensureUniqueChannels(ThingHelper.java:128)
	at org.openhab.core.thing.binding.builder.ThingBuilder.withChannel(ThingBuilder.java:127)
	at org.openhab.core.thing.binding.builder.BridgeBuilder.withChannel(BridgeBuilder.java:80)
	at org.openhab.core.thing.binding.builder.BridgeBuilder.withChannel(BridgeBuilder.java:1)
	at org.openhab.core.thing.internal.update.UpdateChannelInstructionImpl.doChannel(UpdateChannelInstructionImpl.java:140)
	at org.openhab.core.thing.internal.update.UpdateChannelInstructionImpl.perform(UpdateChannelInstructionImpl.java:99)
	at org.openhab.core.thing.internal.ThingManagerImpl.lambda$17(ThingManagerImpl.java:1103)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at org.openhab.core.thing.internal.ThingManagerImpl.checkAndPerformUpdate(ThingManagerImpl.java:1103)
	at org.openhab.core.thing.internal.ThingManagerImpl.registerAndInitializeHandler(ThingManagerImpl.java:926)
	at org.openhab.core.thing.internal.ThingManagerImpl.checkMissingPrerequisites(ThingManagerImpl.java:1135)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
	at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)

The duplicate channel message doesn’t feel right. Is this something that helps?

Great, thats the fix that was merged on the 17th, you can try installing one of the nightly builds from our JFrog repo , hopefully that fixes the issue for you. I think some of the other errors was from a cache issue and having different versions of the binding. Just remember when 5.2.1 comes out to remove this from addons and go back to the distro version so you get updates (i’m sure there will be more).

Dan, quick question: Is it possible to add support for Ubiquity Siren to the binding? If possible I’ll raise a request. Also do you have any links for this unofficial Unifi API?

Thanks,

K.