Consistent java error across bindings

I have a handful of bindings that connect to external services:

  • Ambient weather
  • Nest
  • OpenUV
  • SolarEdge
  • Weather Company

For each of these bindings, connected things periodically go offline. For the Weather company binding, it is unambiguously every other time it attempts to download data. For the others, the pattern is not quite so clear. For the ones that report error details it is always the same error:

ExecutionException: java.io.EOFException: @3be6821b::DecryptedEndPoint@29f44ee1{l=/192.168.1.21:34208,r=api.weather.com/104.79.0.51:443,OPEN,fill=-,flush=-,to=1800062/0}

or

Failed to get camera image: java.io.EOFException: @5574c765::DecryptedEndPoint@7363cdab{l=/192.168.1.21:55954,r=nexusapi-us1.dropcam.com/130.211.5.107:443,OPEN,fill=-,flush=-,to=2219431/0}

This error is not specific to my current version (5.1 snapshot) it’s been around for sometime. However, with the OH5 stability and a few other upgrades of my own, these are the only remaining regular errors in my system, so it’s time to track it down.

I have numerous bindings that connect to local systems (MQTT, HTTP, Pi-Hole, Mimic, Zwave JS, etc.), and none of them appear to have the same issue, so, it seems to have something to do only with external connections.

I’m running OH in a docker container inside a promox LXC (debian bookworm). I’ve only been using proxmox for a little over a year so I only mostly know what I’m doing. This LXC is my primary home automation node, so it also has Mimic, Frontail, and a small HomeAssistant docker containers running (and a portainer agent container) and nothing else.

So, the first question is: is this a symptom of my setup, my ISP, or a core OH issue? How might I go about diagnosing the differences here?

Edit:
I forgot, I have one other external service binding, the openHAB Cloud binding. I cannot say if this binding suffers the same issue. I don’t ever see errors in the logs, but this is not my primary method of connecting to my instance remotely, so I almost never use it.

I wish it included more about the stack trace.

An EOFException will occur if there is a data input stream (in this case from a socket) and the data cuts off before it’s expected.

The DecryptedEndPoint part implies this is deep in some shared library code (perhaps in the JRE) that decrypts HTTPS and the data is being cut off/truncated before it’s expected.

The JSON printed after that though looks complete.

What’s 192.168.1.21? Do you have a proxy that openHAB has to go through in order to reach the Internet? If so does it do break and inspect on SSL/TLS? If so that’s the first place I would look.

I’m running OH in almost the same configuration. I have Proxmox as the type 1 hypervisor. However, I’m running OH in an Ubuntu 24.04 VM instead of LXC because I didn’t want to fight with hardware passthrough for my Zwave and Zigbee dongles. But I too am running using Docker and I’m not seeing similar errors. So there has to be something with your network or with the LXC, or both.

That’s the ip of the LXC itself (OH runs in host network mode instead of bridged, due to sonos issues with bridged docker networks).

There is no additional proxy. My proxmox box is directly behind my router’s NAT Firewall.

I can spin up a VM and basic OH instance later to see if I get the same result.

Have you upgraded to proxmox 9 yet? I’m still on 8, but I was considering using the long weekend to move up to 9 and get my LXCs on Trixie. Maybe it’s worth waiting to see if that fixes the issue.

Yes and it was a smooth upgrade. Took about 20 minutes. But I just did an in place upgrade instead of a fresh install so it was just a matter of updating the repos and doing update/full-upgrade.

1 Like

Ok, proxmox is updated to 9 and OH LXC is updated to Trixie and the problem still occurs, so that wasn’t it.

The nest binding does output some of the stack trace when it fails:

2025-08-31 13:01:23.598 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'nest:sdm_account:e977228336' changed from ONLINE: Using periodic refresh and Pub/Sub to OFFLINE (COMMUNICATION_ERROR): Failed to get camera image: java.io.EOFException: @726d77a1::DecryptedEndPoint@65e55e65{l=/192.168.1.21:51052,r=nexusapi-us1.dropcam.com/130.211.5.107:443,OPEN,fill=-,flush=-,to=729140/0}

==> /log/openhab.log <==
2025-08-31 13:01:23.597 [WARN ] [nternal.sdm.handler.SDMCameraHandler] - Handling SDM event failed for nest:sdm_camera:e977228336:AVPHwEsdnEA_CgEJkQ3ZSFtLIIZIDvZI6BqdKxhrleQ7mSSR-wEOe4sbXtz8AWFugjBbUDE4nNL2RD2E44pQeZ2Lh2HnJbo
org.openhab.binding.nest.internal.sdm.exception.FailedSendingSDMDataException: Failed to get camera image
	at org.openhab.binding.nest.internal.sdm.api.SDMAPI.getCameraImage(SDMAPI.java:184) ~[?:?]
	at org.openhab.binding.nest.internal.sdm.handler.SDMCameraHandler.getCameraImage(SDMCameraHandler.java:198) ~[?:?]
	at org.openhab.binding.nest.internal.sdm.handler.SDMCameraHandler.updateImageChannelsForEvent(SDMCameraHandler.java:165) ~[?:?]
	at org.openhab.binding.nest.internal.sdm.handler.SDMCameraHandler.onEvent(SDMCameraHandler.java:114) ~[?:?]
	at org.openhab.binding.nest.internal.sdm.handler.SDMAccountHandler.handlePubSubMessage(SDMAccountHandler.java:319) ~[?:?]
	at org.openhab.binding.nest.internal.sdm.handler.SDMAccountHandler$2.onMessage(SDMAccountHandler.java:151) ~[?:?]
	at org.openhab.binding.nest.internal.sdm.api.PubSubAPI$Subscriber.lambda$1(PubSubAPI.java:93) ~[?:?]
	at java.util.ArrayList.forEach(ArrayList.java:1596) ~[?:?]
	at org.openhab.binding.nest.internal.sdm.api.PubSubAPI$Subscriber.lambda$0(PubSubAPI.java:93) ~[?:?]
	at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?]
	at org.openhab.binding.nest.internal.sdm.api.PubSubAPI$Subscriber.forEachListener(PubSubAPI.java:123) ~[?:?]
	at org.openhab.binding.nest.internal.sdm.api.PubSubAPI$Subscriber.run(PubSubAPI.java:92) ~[?:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) ~[?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
	at java.lang.Thread.run(Thread.java:1583) [?:?]
Caused by: java.util.concurrent.ExecutionException: java.io.EOFException: @726d77a1::DecryptedEndPoint@65e55e65{l=/192.168.1.21:51052,r=nexusapi-us1.dropcam.com/130.211.5.107:443,OPEN,fill=-,flush=-,to=729140/0}
	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.nest.internal.sdm.api.SDMAPI.getCameraImage(SDMAPI.java:177) ~[?:?]
	... 17 more
Caused by: java.io.EOFException: @726d77a1::DecryptedEndPoint@65e55e65{l=/192.168.1.21:51052,r=nexusapi-us1.dropcam.com/130.211.5.107:443,OPEN,fill=-,flush=-,to=729140/0}
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.earlyEOF(HttpReceiverOverHTTP.java:385) ~[?:?]
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1621) ~[?:?]
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.shutdown(HttpReceiverOverHTTP.java:269) ~[?:?]
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:185) ~[?:?]
	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

although I’m not sure that adds much more than the original error message.

I’ve got the weather company binding set to trace and it should get it’s error shortly, so maybe that will have better info.

Edit:
Alas, the Weather Company binding offers nearly 0 info in the trace logs. Just:

2025-08-31 13:37:02.407 [DEBUG] [andler.WeatherCompanyForecastHandler] - Handler: Requesting forecast from The Weather Company API
2025-08-31 13:37:02.408 [DEBUG] [andler.WeatherCompanyForecastHandler] - Forecast URL is https://api.weather.com/v3/wx/forecast/daily/5day?format=json&language=en-US&apiKey=XXXXXXXXXXXXXXXXXXXXX&units=e&geocode=XXXXXXXXXXXXXX,XXXXXXXXXXXXXX

spin up Wireshark and grab a capture at the router side export your cert and add it to Wireshark so you can see the encrypted traffic it may offer more insight. Since you have more than just one external service misbehaving it is likely external to OH

A fresh OH install on a fresh Ubuntu 25.04 VM gets the same error, so I guess my network is the next thing to check.

Yep, that’s the next plan.

I am using OH 4.3.7 on openhabian and every now and then, I have a similar error message in the logs from TADO binding. Here some of the error messages:

2025-09-22 13:38:37.062 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tado:zone:varazze:z11' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Could not connect to server due to java.util.concurrent.ExecutionException: java.io.EOFException: HttpConnectionOverHTTP@4d844fa::DecryptedEndPoint@6a044c36{l=/192.168.88.5:58618,r=my.tado.com/54.220.170.2:443,OPEN,fill=-,flush=W,to=120072/0}
2025-09-22 13:41:31.138 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tado:zone:varazze:z11' changed from OFFLINE (COMMUNICATION_ERROR): Could not connect to server due to java.util.concurrent.ExecutionException: java.io.EOFException: HttpConnectionOverHTTP@4d844fa::DecryptedEndPoint@6a044c36{l=/192.168.88.5:58618,r=my.tado.com/54.220.170.2:443,OPEN,fill=-,flush=W,to=120072/0} to ONLINE
2025-09-22 13:46:37.978 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tado:zone:varazze:z8' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Could not connect to server due to java.util.concurrent.ExecutionException: javax.net.ssl.SSLHandshakeException: Abruptly closed by peer
2025-09-22 13:51:31.768 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tado:zone:varazze:z8' changed from OFFLINE (COMMUNICATION_ERROR): Could not connect to server due to java.util.concurrent.ExecutionException: javax.net.ssl.SSLHandshakeException: Abruptly closed by peer to ONLINE
2025-09-22 13:52:38.195 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tado:zone:varazze:z11' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Could not connect to server due to java.util.concurrent.ExecutionException: java.io.EOFException: HttpConnectionOverHTTP@138f5d77::DecryptedEndPoint@7e8b0005{l=/192.168.88.5:46354,r=my.tado.com/63.34.74.208:443,OPEN,fill=-,flush=-,to=34/0}
2025-09-22 13:56:32.206 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tado:zone:varazze:z11' changed from OFFLINE (COMMUNICATION_ERROR): Could not connect to server due to java.util.concurrent.ExecutionException: java.io.EOFException: HttpConnectionOverHTTP@138f5d77::DecryptedEndPoint@7e8b0005{l=/192.168.88.5:46354,r=my.tado.com/63.34.74.208:443,OPEN,fill=-,flush=-,to=34/0} to ONLINE
2025-09-22 13:58:38.767 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tado:zone:varazze:z11' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Could not connect to server due to java.util.concurrent.ExecutionException: javax.net.ssl.SSLHandshakeException: Abruptly closed by peer
2025-09-22 14:01:32.545 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tado:zone:varazze:z11' changed from OFFLINE (COMMUNICATION_ERROR): Could not connect to server due to java.util.concurrent.ExecutionException: javax.net.ssl.SSLHandshakeException: Abruptly closed by peer to ONLINE
2025-09-22 14:12:40.041 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'tado:zone:varazze:z9' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Could not connect to server due to java.util.concurrent.ExecutionException: javax.net.ssl.SSLHandshakeException: Abruptly closed by peer

I’m in the middle of a big busy season at work so I haven’t had time to get to the next testing steps.

Do you use any other bindings that make calls to external services? Do those bindings also get these errors?

I don’t see anything about a refused connection or 429 or something like that, but just to be sure: you’re aware of tado’s 100 API call limit (if you don’t pay)?

Hi, I know the limit.

I am one of the “lucky” who has a free Auto-assist and have 20.000 accesses.

I adjusted the polling to 120 seconds and no 429 errors anymore.

Hi,

I use other services (i.e. Viessman - Vicare, Tapo), but only TADO is throwing these errors.