Ubiquiti Unifi Binding Feature Discussion

So, ive updated to 3.1 and get the same issue as on 2.5.12 OH

The controller wont come online. Running Unifi OS controller under a Container on a QNAP nas

Any suggestions?

04:14:23.294 [ERROR] [rnal.common.AbstractInvocationHandler] - An error occurred while calling method 'ThingHandler.dispose()' on 'org.openhab.binding.unifi.internal.handler.UniFiControllerThingHandler@2b01f2ab': null
java.lang.StackOverflowError: null
        at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
        at org.osgi.framework.FrameworkUtil.getBundle(FrameworkUtil.java:209) ~[osgi.core-7.0.0.jar:?]
        at org.ops4j.pax.logging.spi.support.BundleHelper.getCallerBundle(BundleHelper.java:80) ~[bundleFile:?]
        at org.ops4j.pax.logging.spi.support.BundleHelper.getCallerBundle(BundleHelper.java:54) ~[bundleFile:?]
        at org.ops4j.pax.logging.OSGIPaxLoggingManager.getLogger(OSGIPaxLoggingManager.java:72) ~[bundleFile:?]
        at org.ops4j.pax.logging.slf4j.Slf4jLoggerFactory.getLogger(Slf4jLoggerFactory.java:52) ~[bundleFile:?]
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363) ~[bundleFile:?]
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:388) ~[bundleFile:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiControllerRequest.<init>(UniFiControllerRequest.java:74) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.newRequest(UniFiController.java:201) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:107) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]

Moved the whole controller to windows and reverted back to 6.0.45, still fails. All the things are online, but the items on the channels are all NULL :confused:

Has anyone actually tested this on OH V3.1?

I tried to install the snapshot


15:54:07.982 [WARN ] [org.apache.felix.fileinstall         ] - Error while starting bundle: file:/usr/share/openhab/addons/org.openhab.binding.unifi-3.1.0-SNAPSHOT.jar
org.osgi.framework.BundleException: Could not resolve module: org.openhab.binding.unifi [310]
  Unresolved requirement: Import-Package: org.apache.commons.lang; version="[2.6.0,3.0.0)"

        at org.eclipse.osgi.container.Module.start(Module.java:463) ~[org.eclipse.osgi-3.16.200.jar:?]
        at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:440) ~[org.eclipse.osgi-3.16.200.jar:?]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1260) [bundleFile:3.6.8]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1233) [bundleFile:3.6.8]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:520) [bundleFile:3.6.8]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:365) [bundleFile:3.6.8]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:316) [bundleFile:3.6.8]

Looks like youā€™re using an old build installed via the addons directory. Apache commons was removed as a dependency a while back. I have the binding installed in the regular way, and it works without issue.

Where can i find the latest one? Thanks

Just install it via the UI (or addons.cfg if you prefer).

Yes that binding doesnt work either for me :confused:

What doesnā€™t work? Iā€™ve used it since OH 3 was released and never had an issue. But perhaps it depends on how one runs oneā€™s Unifi controller (mine is running on the same linux host as openHAB).

Ive tried the 3.1 binding that ships with the software, the mobile client never comes online (worked fine on 2.4)

The thing comes online, but the Switch item for the phone connected via wifi never does, just shows as NULL and as a result presence never works. The phone is seen in the controller just fine (android)


06:14:04.857 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'unifi:wirelessClient:Garage_Unifi:Kris_Mobile' changed from UNINITIALIZED to INITIALIZING
06:14:04.864 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'unifi:wirelessClient:Garage_Unifi:Kris_Mobile' changed from INITIALIZING to ONLINE

I remember that when upgrading some time ago the controller thing had itā€™s configuration changed (adding the unifi OS option), and that had to be turned on and then off again to make the configuration work. Are you sure your configuration is correct?

I just tested changing that setting and got a stack overflow error - had to restart the binding after changing it back to make the error go away, so there are obviously some bugs. But the online channels are working on my end at least.

Tried that, tried many things, still null :frowning:

Controller is on Windows

6.0.45 Build

Doesnā€™t seem like the binding have been getting any updates lately, would be a shame if it has been abandoned :slightly_frowning_face: Sorry I canā€™t help you more. Unless you want to try upgrading the controller? 6.0.45 is rather old, could the web api have changed and the binding is expecting a newer version?

I tried a few controller versions, even back to Version 5 running on QPKG . Iā€™m not sure :frowning:

Iā€™m still running org.openhab.binding.unifi-2.5.0-SNAPSHOT.jar hitting against 2 different Windows controllers running versions 6.0.28 and 6.1.71 w/o issues since April 2019.

I am running OH 2.4 still though.

Best, Jay

This binding is working for me:

  • Unifi 6.4.54 (on QNAP)
  • OH 3.2.0.M3 (on QNAP)
  • Binding version 3.2.0.M3
UID: unifi:controller:aveiro
label: $UniFi Controller
thingTypeUID: unifi:controller
configuration:
  host: 192.168.130.210
  refresh: 15
  password: **********
  unifios: false
  port: 38193
  username: *********

My Controller thing and Wireless thing are both online, yet the switch for my presence isnā€™t. Very odd! Even changing the wireless client thing to IP address over mac address, it just remains NULL

UID: unifi:wirelessClient:Garage_Unifi:Kris_Mobile
label: Kris Mobile
thingTypeUID: unifi:wirelessClient
configuration:
  considerHome: 180
  site: Home
  cid: 192.168.0.78
bridgeUID: unifi:controller:Garage_Unifi

Have you tried enabling debug logging? It should show all devices that are found when polling the api. Also, have you tried without the site config param, just to rule out as much as possible?

A thing being online does not mean much in this case. Typically if the binding starts without errors things will be online. The online channel that is associated with the thing is what you are interested in, but typically no correlation between the two.

Same errors as posted above

08:32:57.929 [ERROR] [.core.thing.internal.ThingManagerImpl] - Exception occurred while disposing handler of thing 'unifi:controller:Garage_Unifi': null
java.lang.StackOverflowError: null
        at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
        at org.osgi.framework.FrameworkUtil.getBundle(FrameworkUtil.java:209) ~[osgi.core-7.0.0.jar:?]
        at org.ops4j.pax.logging.spi.support.BundleHelper.getCallerBundle(BundleHelper.java:80) ~[bundleFile:?]
        at org.ops4j.pax.logging.spi.support.BundleHelper.getCallerBundle(BundleHelper.java:54) ~[bundleFile:?]
        at org.ops4j.pax.logging.OSGIPaxLoggingManager.getLogger(OSGIPaxLoggingManager.java:72) ~[bundleFile:?]
        at org.ops4j.pax.logging.slf4j.Slf4jLoggerFactory.getLogger(Slf4jLoggerFactory.java:52) ~[bundleFile:?]
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363) ~[bundleFile:?]
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:388) ~[bundleFile:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiControllerRequest.<init>(UniFiControllerRequest.java:74) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.newRequest(UniFiController.java:201) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:107) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.login(UniFiController.java:114) ~[?:?]
        at org.openhab.binding.unifi.internal.api.model.UniFiController.executeRequest(UniFiController.java:210) ~[?:?]

Was getting this until a reboot, and with debug on I can see the device Iā€™m interested in:

 - UniFiClient{mac: 'a8:db:03:f8:e2:de', ip: '192.168.0.78', hostname: 'galaxy-note10', alias: 'null', wired: false, blocked: false, device: UniFiDevice{mac: 'fc:ec:da:10:ac:9a', name: 'null', model: 'U7PG2', site: UniFiSite{name: 'default', desc: 'Default'}}}

I removed the site name (its just blank) and tried the IP/MAC of the device but its still NULL

EDIT: Changed the Home Interval from 180 to 120 and now its online!!?>@

The first issue is probably related to a failed login, I got the same when setting the unifios configuration wrong, and the binding doesnā€™t handle this in a good way.

I also noticed that the binding doesnā€™t handle thing config changes very well, when testing a bit I had to disable and then enable the wirelessClient Thing for the changes to take.

Both things would need to be fixed, but that requires someone to step up and continue development :man_shrugging:

1 Like