Ring binding 5.0 not initializing due to HTTP protocol violation

I am installing a fresh openhab 5 installation and want to add my lately bough ring system. When initialising the bridge I am seeing in error

11:53:26.512 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'ring:account:8687647e14' changed from UNINITIALIZED (HANDLER_INITIALIZING_ERROR) to INITIALIZING
11:53:26.514 [DEBUG] [.ring.internal.handler.AccountHandler] - Initializing Ring Account handler
11:53:26.515 [DEBUG] [.ring.internal.handler.AccountHandler] - getHardwareId H:2C-CF-67-9A-43-53
11:53:26.517 [DEBUG] [.ring.internal.handler.AccountHandler] - AccountHandler - initialize - VSP:  OH: /etc/openhab
11:53:26.518 [DEBUG] [.ring.internal.handler.AccountHandler] - Logging in with refresh token: STRINGEMPTY
11:53:26.519 [DEBUG] [nhab.binding.ring.internal.RestClient] - getOauthToken - refreshToken not set - trying username/password
11:53:26.679 [WARN ] [nhab.binding.ring.internal.RestClient] - RestApi error in postRequest!
java.util.concurrent.ExecutionException: org.eclipse.jetty.client.HttpResponseException: HTTP protocol violation: Authentication challenge without WWW-Authenticate header
        at org.eclipse.jetty.client.util.FutureResponseListener.getResult(FutureResponseListener.java:118) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.client.util.FutureResponseListener.get(FutureResponseListener.java:101) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:732) ~[bundleFile:9.4.57.v20241219]
        at org.openhab.binding.ring.internal.RestClient.postRequest(RestClient.java:113) ~[?:?]
        at org.openhab.binding.ring.internal.RestClient.getTokens(RestClient.java:213) ~[?:?]
        at org.openhab.binding.ring.internal.handler.AccountHandler.initialize(AccountHandler.java:350) ~[?:?]
        at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source) ~[?:?]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?]
        at org.openhab.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:149) ~[?:?]
        at org.openhab.core.internal.common.Invocation.call(Invocation.java:52) ~[?:?]
        at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]
        at java.lang.Thread.run(Unknown Source) [?:?]
Caused by: org.eclipse.jetty.client.HttpResponseException: HTTP protocol violation: Authentication challenge without WWW-Authenticate header
        at org.eclipse.jetty.client.AuthenticationProtocolHandler$AuthenticationListener.onComplete(AuthenticationProtocolHandler.java:164) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:218) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:210) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:481) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:461) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:424) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.messageComplete(HttpReceiverOverHTTP.java:374) ~[?:?]
        at org.eclipse.jetty.http.HttpParser.handleContentMessage(HttpParser.java:596) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.http.HttpParser.parseContent(HttpParser.java:1723) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1552) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:208) ~[?:?]
        at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:148) ~[?:?]
        at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:80) ~[?:?]
        at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:131) ~[?:?]
        at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:172) ~[?:?]
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:555) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:410) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:164) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) ~[bundleFile:9.4.57.v20241219]

Am I maybe missing a setting?

I just setup the binding on a fresh install and it worked fine. You are entering the ring account username and password?

Yes, correct. It was also a fresh OH5 image

@Paul_Smedley which version of OH and the binding are you running?

OH5.0 and the ring binding from that release

could you do me a favor and how your debug look for ring when it’s trying to login ?

Yeah will try do this tonight, I did a lot of work on the ring binding to get it into OH5 so I at least have some understanding of the code :slight_smile:

The following is from the setup of the Binding Bridge on OH5.0, with a Ring account that has 2FA enabled:

2025-07-30 17:29:18.770 [DEBUG] [ring.internal.handler.AccountHandler] - Initializing Ring Account handler
2025-07-30 17:29:18.770 [DEBUG] [ring.internal.handler.AccountHandler] - getHardwareId H:
2025-07-30 17:29:18.771 [DEBUG] [ring.internal.handler.AccountHandler] - Local IP address='192.168.5.201', local MAC address = '2C-CF-67-6F-BB-C5'
2025-07-30 17:29:18.771 [DEBUG] [ring.internal.handler.AccountHandler] - getHardwareId getLocalMac H:2C-CF-67-6F-BB-C5
2025-07-30 17:29:18.772 [DEBUG] [ring.internal.handler.AccountHandler] - AccountHandler - initialize - VSP:  OH: /etc/openhab
2025-07-30 17:29:18.773 [DEBUG] [ring.internal.handler.AccountHandler] - Logging in with refresh token: STRINGEMPTY
2025-07-30 17:29:18.773 [DEBUG] [hab.binding.ring.internal.RestClient] - getOauthToken - refreshToken not set - trying username/password
2025-07-30 17:29:19.478 [DEBUG] [ring.internal.handler.AccountHandler] - AuthenticationException when initializing Ring Account handler Two factor authentication enabled, enter code
2025-07-30 17:29:31.407 [DEBUG] [ring.internal.handler.AccountHandler] - Initializing Ring Account handler
2025-07-30 17:29:31.407 [DEBUG] [ring.internal.handler.AccountHandler] - getHardwareId H:2C-CF-67-6F-BB-C5
2025-07-30 17:29:31.408 [DEBUG] [ring.internal.handler.AccountHandler] - AccountHandler - initialize - VSP:  OH: /etc/openhab
2025-07-30 17:29:31.408 [DEBUG] [ring.internal.handler.AccountHandler] - Logging in with refresh token: STRINGEMPTY
2025-07-30 17:29:31.408 [DEBUG] [hab.binding.ring.internal.RestClient] - getOauthToken - refreshToken not set - trying username/password
2025-07-30 17:29:31.901 [DEBUG] [ring.internal.handler.AccountHandler] - saveRefreshTokenToFile Successful NOTEMPTY
2025-07-30 17:29:32.825 [DEBUG] [ring.internal.handler.AccountHandler] - AccountHandler - refreshRegistry
2025-07-30 17:29:32.825 [DEBUG] [hab.binding.ring.internal.RestClient] - RestClient - getRingDevices
2025-07-30 17:29:33.514 [DEBUG] [ring.internal.handler.AccountHandler] - startSessionRefresh 5
2025-07-30 17:29:33.514 [DEBUG] [ring.internal.handler.AccountHandler] - AccountHandler - refreshRegistry
2025-07-30 17:29:33.515 [DEBUG] [hab.binding.ring.internal.RestClient] - RestClient - getRingDevices

1 Like

very odd, so it seems like in the first place it has to do something with the 2FA account setting. I had it set to an auth app and now changed it to SMS -

When I try to login without a 2FA set it looks like this

19:52:23.025 [DEBUG] [.ring.internal.handler.AccountHandler] - Initializing Ring Account handler
19:52:23.026 [DEBUG] [.ring.internal.handler.AccountHandler] - getHardwareId H:2C-CF-67-9A-43-54
19:52:23.027 [DEBUG] [.ring.internal.handler.AccountHandler] - AccountHandler - initialize - VSP:  OH: /etc/openhab
19:52:23.027 [DEBUG] [.ring.internal.handler.AccountHandler] - Logging in with refresh token: STRINGEMPTY
19:52:23.027 [DEBUG] [nhab.binding.ring.internal.RestClient] - getOauthToken - refreshToken not set - trying username/password
19:52:23.253 [WARN ] [nhab.binding.ring.internal.RestClient] - RestApi error in postRequest!

I am not seeing AuthenticationException when initializing Ring Account handler Two factor authentication enabled, enter code as in your logs (I am also not getting any sms)

When I enter the 2FA that I can find at the ring page, under register a new device it loos like this


19:53:50.136 [DEBUG] [.ring.internal.handler.AccountHandler] - Initializing Ring Account handler
19:53:50.137 [DEBUG] [.ring.internal.handler.AccountHandler] - getHardwareId H:2C-CF-67-9A-43-54
19:53:50.138 [DEBUG] [.ring.internal.handler.AccountHandler] - AccountHandler - initialize - VSP:  OH: /etc/openhab
19:53:50.138 [DEBUG] [.ring.internal.handler.AccountHandler] - Logging in with refresh token: STRINGEMPTY
19:53:50.139 [DEBUG] [nhab.binding.ring.internal.RestClient] - getOauthToken - refreshToken not set - trying username/password
19:53:50.350 [DEBUG] [.ring.internal.handler.AccountHandler] - AuthenticationException when initializing Ring Account handler Bad request
19:54:29.858 [WARN ] [trol.internal.util.HttpRequestBuilder] - Parsing json failed: false
com.google.gson.JsonParseException: Empty result
        at org.openhab.binding.amazonechocontrol.internal.util.HttpRequestBuilder$Builder.lambda$0(HttpRequestBuilder.java:268) ~[?:?]
        at java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source) ~[?:?]
        at java.util.concurrent.CompletableFuture.postComplete(Unknown Source) ~[?:?]
        at java.util.concurrent.CompletableFuture.complete(Unknown Source) ~[?:?]
        at org.openhab.binding.amazonechocontrol.internal.util.HttpRequestBuilder$HttpResponseListener.onComplete(HttpRequestBuilder.java:364) ~[?:?]
        at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:218) ~[?:?]
        at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:210) ~[?:?]
        at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:481) ~[?:?]
        at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:461) ~[?:?]
        at org.eclipse.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:424) ~[?:?]
        at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.messageComplete(HttpReceiverOverHTTP.java:374) ~[?:?]
        at org.eclipse.jetty.http.HttpParser.handleContentMessage(HttpParser.java:596) ~[?:?]
        at org.eclipse.jetty.http.HttpParser.parseContent(HttpParser.java:1669) ~[?:?]
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1552) ~[?:?]
        at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:208) ~[?:?]
        at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:148) ~[?:?]
        at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:80) ~[?:?]
        at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:131) ~[?:?]
        at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:172) ~[?:?]
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) ~[?:?]
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) ~[?:?]
        at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:555) ~[?:?]
        at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:410) ~[?:?]
        at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:164) ~[?:?]
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) ~[?:?]
        at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) ~[?:?]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) ~[bundleFile:9.4.57.v20241219]
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) ~[bundleFile:9.4.57.v20241219]
        at java.lang.Thread.run(Unknown Source) [?:?]

Bad the Thing stays in Error:Com

I guess because the current code is only designed to send back an SMS code - perhaps the handling by the Ring code is different for an ‘Authenticator’ app.

@J-N-K and I talked about the potential to support a different way of logging in, via an applet - ie install the binding then go to http://openhab:8080/roborock/ and login - but have not progressed yet.

Seems right now there is a limitation that login only works with either NO 2FA (If Ring even allows this now), or with SMS 2FA.

When I get some time, I’ll switch my account to use an auth app and try fix this.

Thanks for your support. Today got it working by

  • Creating a new account
  • Not setting up 2FA in the account by pressing cancel when I was asked to
  • Entered my credentials in the ring openhab thing, which mentioned 2FA Code is needed upon saving
  • I received a 2FA code via Mail and entered this one → worked

I will play with the previous a bit to see what could be the cause and summarize afterwards before setting it to solved


My original account worked after changing the password, I got the 2FA via sms upon initializing the thing

@Paul_Smedley I have changed the password on the original account and now it also worked on this one - tbh I am not sure if it that was the root cause
My previous password was “fTuh58&r#35” (no worries, this is a random generated pw and not in use for any account), maybe there is an issue with some special chars?

It’s possible they parameters should be urlencoded.

There is a helped function ParamBuilder:

But when the password is sent to ring, the parameter to encode or not, is set to false:

I’ll try test this later today.

Not tested, but https://smedley.id.au/tmp/org.openhab.binding.ring-5.1.0-SNAPSHOT.jar might help :slight_smile:

OK I tested the above and it works - I used a complex password with lots of special characters, and also tested with an authenticator app. I’ll raise a PR to fix this.

See [ring] Fix for passwords with special characters by psmedley · Pull Request #19102 · openhab/openhab-addons · GitHub

I believe I am experiencing a related issue. I have had it working with 2FA in the past, though I do not recall if it was working right before I upgraded to 5.0 (and now 5.0.1).

Here is my set up, followed by a DEBUG log of an attempt to bring the account thing online.

runtimeInfo:
  version: 5.0.0
  buildString: Release Build
locale: en-US
systemInfo:
  configFolder: /etc/openhab
  userdataFolder: /var/lib/openhab
  logFolder: /var/log/openhab
  javaVersion: 21.0.8
  javaVendor: Eclipse Adoptium
  javaVendorVersion: Temurin-21.0.8+9
  osName: Linux
  osVersion: 6.12.25+rpt-rpi-2712
  osArchitecture: aarch64
  availableProcessors: 4
  freeMemory: 254743928
  totalMemory: 805306368
  uptime: 1715
  startLevel: 100
addons:
  - automation-jsscripting
  - binding-amazonechocontrol
  - binding-androidtv
  - binding-astro
  - binding-broadlink
  - binding-denonmarantz
  - binding-ephemeris
  - binding-exec
  - binding-generacmobilelink
  - binding-gpstracker
  - binding-icalendar
  - binding-icloud
  - binding-ipcamera
  - binding-irobot
  - binding-logreader
  - binding-mail
  - binding-matter
  - binding-mqtt
  - binding-network
  - binding-networkupstools
  - binding-ntp
  - binding-openweathermap
  - binding-remoteopenhab
  - binding-ring
  - binding-roku
  - binding-tapocontrol
  - binding-tplinksmarthome
  - binding-tuya
  - binding-zwave
  - misc-homekit
  - misc-openhabcloud
  - persistence-rrd4j
  - transformation-jinja
  - transformation-jsonpath
  - transformation-map
  - transformation-regex
  - ui-basic
  - ui-habpanel
clientInfo:
  device:
    ios: false
    android: false
    androidChrome: false
    desktop: true
    iphone: false
    ipod: false
    ipad: false
    edge: false
    ie: false
    firefox: false
    macos: false
    windows: true
    cordova: false
    phonegap: false
    electron: false
    nwjs: false
    webView: false
    webview: false
    standalone: false
    os: windows
    pixelRatio: 1.5
    prefersColorScheme: light
  isSecureContext: false
  locationbarVisible: true
  menubarVisible: true
  navigator:
    cookieEnabled: true
    deviceMemory: N/A
    hardwareConcurrency: 6
    language: en-US
    languages:
      - en-US
    onLine: true
    platform: Win32
  screen:
    width: 1920
    height: 1080
    colorDepth: 24
  support:
    touch: false
    pointerEvents: true
    observer: true
    passiveListener: true
    gestures: false
    intersectionObserver: true
  themeOptions:
    dark: light
    filled: true
    pageTransitionAnimation: default
    bars: light
    homeNavbar: default
    homeBackground: default
    expandableCardAnimation: default
    blocklyRenderer: null
  userAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,
    like Gecko) Chrome/139.0.0.0 Safari/537.36
timestamp: 2025-08-22T03:23:05.095Z

2025-08-21 22:17:02.683 [INFO ] [ing.ring.internal.RingHandlerFactory] - createHandler thingType: ring:account
2025-08-21 22:17:02.684 [DEBUG] [hab.binding.ring.internal.RestClient] - Creating Ring client for API version 11 on endPoint https://api.ring.com
2025-08-21 22:17:02.684 [DEBUG] [ernal.discovery.RingDiscoveryService] - bundle org.openhab.binding.ring:5.0.1 (333)[org.openhab.binding.ring.internal.discovery.RingDiscoveryService(652)] : ServiceFactory.getService()
2025-08-21 22:17:02.684 [DEBUG] [ernal.discovery.RingDiscoveryService] - bundle org.openhab.binding.ring:5.0.1 (333)[org.openhab.binding.ring.internal.discovery.RingDiscoveryService(652)] : This thread collected dependencies
2025-08-21 22:17:02.685 [DEBUG] [ernal.discovery.RingDiscoveryService] - bundle org.openhab.binding.ring:5.0.1 (333)[org.openhab.binding.ring.internal.discovery.RingDiscoveryService(652)] : getService (ServiceFactory) dependencies collected.
2025-08-21 22:17:02.685 [DEBUG] [ernal.discovery.RingDiscoveryService] - bundle org.openhab.binding.ring:5.0.1 (333)[org.openhab.binding.ring.internal.discovery.RingDiscoveryService(652)] : Querying state satisfied
2025-08-21 22:17:02.685 [DEBUG] [ernal.discovery.RingDiscoveryService] - bundle org.openhab.binding.ring:5.0.1 (333)[org.openhab.binding.ring.internal.discovery.RingDiscoveryService(652)] : For dependency osgi.ds.satisfying.condition, optional: false; to bind: [[RefPair: ref: [{org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true}] service: [null]]]
2025-08-21 22:17:02.685 [DEBUG] [ernal.discovery.RingDiscoveryService] - bundle org.openhab.binding.ring:5.0.1 (333)[org.openhab.binding.ring.internal.discovery.RingDiscoveryService(652)] : invoking activate: activate: parameters [org.apache.felix.scr.impl.helper.ReadOnlyDictionary]
2025-08-21 22:17:02.686 [DEBUG] [ernal.discovery.RingDiscoveryService] - bundle org.openhab.binding.ring:5.0.1 (333)[org.openhab.binding.ring.internal.discovery.RingDiscoveryService(652)] : invoked activate: activate
2025-08-21 22:17:02.686 [DEBUG] [ernal.discovery.RingDiscoveryService] - bundle org.openhab.binding.ring:5.0.1 (333)[org.openhab.binding.ring.internal.discovery.RingDiscoveryService(652)] : Changed state from satisfied to active
2025-08-21 22:17:02.695 [DEBUG] [ring.internal.handler.AccountHandler] - Initializing Ring Account handler
2025-08-21 22:17:02.696 [DEBUG] [ring.internal.handler.AccountHandler] - getHardwareId H:DC-A6-32-82-41-2E
2025-08-21 22:17:02.711 [DEBUG] [ring.internal.handler.AccountHandler] - getRefreshTokenFromFile successful NOTEMPTY
2025-08-21 22:17:02.711 [DEBUG] [ring.internal.handler.AccountHandler] - AccountHandler - initialize - VSP:  OH: /etc/openhab
2025-08-21 22:17:02.711 [DEBUG] [ring.internal.handler.AccountHandler] - Logging in with refresh token: NOTEMPTY
2025-08-21 22:17:02.711 [DEBUG] [hab.binding.ring.internal.RestClient] - getOauthToken - refreshToken available
2025-08-21 22:17:02.873 [WARN ] [hab.binding.ring.internal.RestClient] - RestApi error in postRequest!
java.util.concurrent.ExecutionException: org.eclipse.jetty.client.HttpResponseException: HTTP protocol violation: Authentication challenge without WWW-Authenticate header
        at org.eclipse.jetty.client.util.FutureResponseListener.getResult(FutureResponseListener.java:118) ~[?:?]
        at org.eclipse.jetty.client.util.FutureResponseListener.get(FutureResponseListener.java:101) ~[?:?]
        at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:732) ~[?:?]
        at org.openhab.binding.ring.internal.RestClient.postRequest(RestClient.java:113) ~[?:?]
        at org.openhab.binding.ring.internal.RestClient.getTokens(RestClient.java:213) ~[?:?]
        at org.openhab.binding.ring.internal.handler.AccountHandler.initialize(AccountHandler.java:350) ~[?:?]
        at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source) ~[?:?]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?]
        at org.openhab.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:149) ~[?:?]
        at org.openhab.core.internal.common.Invocation.call(Invocation.java:52) ~[?:?]
        at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]
        at java.lang.Thread.run(Unknown Source) [?:?]
Caused by: org.eclipse.jetty.client.HttpResponseException: HTTP protocol violation: Authentication challenge without WWW-Authenticate header
        at org.eclipse.jetty.client.AuthenticationProtocolHandler$AuthenticationListener.onComplete(AuthenticationProtocolHandler.java:164) ~[?:?]
        at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:218) ~[?:?]
        at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:210) ~[?:?]
        at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:481) ~[?:?]
        at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:461) ~[?:?]
        at org.eclipse.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:424) ~[?:?]
        at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.messageComplete(HttpReceiverOverHTTP.java:374) ~[?:?]
        at org.eclipse.jetty.http.HttpParser.handleContentMessage(HttpParser.java:596) ~[?:?]
        at org.eclipse.jetty.http.HttpParser.parseContent(HttpParser.java:1723) ~[?:?]
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1552) ~[?:?]
        at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:208) ~[?:?]
        at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:148) ~[?:?]
        at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:80) ~[?:?]
        at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:131) ~[?:?]
        at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:172) ~[?:?]
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) ~[?:?]
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) ~[?:?]
        at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:555) ~[?:?]
        at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:410) ~[?:?]
        at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:164) ~[?:?]
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) ~[?:?]
        at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) ~[?:?]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) ~[?:?]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) ~[?:?]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) ~[?:?]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) ~[?:?]
        at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) ~[?:?]
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) ~[?:?]
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) ~[?:?]
        ... 1 more
2025-08-21 22:17:02.878 [ERROR] [nal.common.AbstractInvocationHandler] - An error occurred while calling method 'ThingHandler.initialize()' on 'org.openhab.binding.ring.internal.handler.AccountHandler@4d8d990f': null
java.lang.NullPointerException: null
        at java.util.Objects.requireNonNull(Unknown Source) ~[?:?]
        at org.openhab.binding.ring.internal.RestClient.getTokens(RestClient.java:214) ~[?:?]
        at org.openhab.binding.ring.internal.handler.AccountHandler.initialize(AccountHandler.java:350) ~[?:?]
        at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source) ~[?:?]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?]
        at org.openhab.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:149) ~[?:?]
        at org.openhab.core.internal.common.Invocation.call(Invocation.java:52) ~[?:?]
        at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]
        at java.lang.Thread.run(Unknown Source) [?:?]
2025-08-21 22:17:02.879 [ERROR] [core.thing.internal.ThingManagerImpl] - Exception occurred while initializing handler of thing 'ring:account:RingAccountThing': null
java.lang.NullPointerException: null
        at java.util.Objects.requireNonNull(Unknown Source) ~[?:?]
        at org.openhab.binding.ring.internal.RestClient.getTokens(RestClient.java:214) ~[?:?]
        at org.openhab.binding.ring.internal.handler.AccountHandler.initialize(AccountHandler.java:350) ~[?:?]
        at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source) ~[?:?]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?]
        at org.openhab.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:149) ~[?:?]
        at org.openhab.core.internal.common.Invocation.call(Invocation.java:52) ~[?:?]
        at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]
        at java.lang.Thread.run(Unknown Source) [?:?]
openhabian@oh-s5:~ $ 

Have you removed the older 4.x binding that was manually installed, and installed the 5.0 binding via openhab?

Your error is a different root cause as you have saved token already, MPower did not. I would maybe remove /var/lib/openhab/ring/ring*.refreshToken - perhaps the token is stale/expired?

Yes, I removed the manually installed binding when I upgraded to OH 5.0 (actually, I think the upgrade tool purged everything in the add-ons folder) and and installed the native 5.0 binding (which I recognize took a lot of work to make happen - thanks for that).

I will give this a try and report back. Thanks for the help!

Update: that worked. The account thing is now on line!

Perhaps something changed in the structure of the refreshToken file - I don’t recall anything, but glad it helped!