IllegalArgumentException TadoModeTerminationCondition declares multiple JSON fields named 'type'

Hi community,

upgraded to openHAB 4.2.0 M3 today and now I get the following error from Tado binding.

2024-05-20 16:16:58.863 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception: 
java.lang.IllegalArgumentException: Class org.openhab.binding.tado.internal.api.model.TadoModeTerminationCondition declares multiple JSON fields named 'type'; conflict is caused by fields org.openhab.binding.tado.internal.api.model.TadoMo
deTerminationCondition#type and org.openhab.binding.tado.internal.api.model.OverlayTerminationCondition#type
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:302) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130) ~[?:?]
        at com.google.gson.Gson.getDelegateAdapter(Gson.java:652) ~[?:?]
        at org.openhab.binding.tado.internal.api.RuntimeTypeAdapterFactory.create(RuntimeTypeAdapterFactory.java:60) ~[?:?]
        at com.google.gson.Gson.getAdapter(Gson.java:556) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130) ~[?:?]
        at com.google.gson.Gson.getAdapter(Gson.java:556) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130) ~[?:?]
        at com.google.gson.Gson.getAdapter(Gson.java:556) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1226) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1137) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1047) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1014) ~[?:?]
        at org.openhab.binding.tado.internal.api.client.HomeApi.showZoneState(HomeApi.java:529) ~[?:?]
        at org.openhab.binding.tado.internal.handler.TadoZoneHandler.getZoneState(TadoZoneHandler.java:129) ~[?:?]
        at org.openhab.binding.tado.internal.handler.TadoZoneHandler.updateZoneState(TadoZoneHandler.java:325) ~[?:?]
        at org.openhab.binding.tado.internal.handler.TadoZoneHandler$1.run(TadoZoneHandler.java:420) ~[?:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) ~[?:?]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
        at java.lang.Thread.run(Thread.java:840) [?:?]

Is there anything I can do or is this a bug I should report?

Thanks,
Daniel

Github Issue:

Can you please advise what kind of Tado device you are using?

And can you please submit a log:set TRACE for the LAN traffic prior to such error being logged?

After upgarde to M3 I also had similiar problem with Tado “zones”, log belowaw. Additionally zone things were online, but no channel report values (all were NULL).

Recreating thing did not help.

2024-05-22 12:02:15.300 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:
java.lang.IllegalArgumentException: Class org.openhab.binding.tado.internal.api.model.TadoModeTerminationCondition declares multiple JSON fields named 'type';
 conflict is caused by fields org.openhab.binding.tado.internal.api.model.TadoModeTerminationCondition#type and org.openhab.binding.tado.internal.api.model.Ov
erlayTerminationCondition#type
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:302) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130) ~[?:?]
        at com.google.gson.Gson.getDelegateAdapter(Gson.java:652) ~[?:?]
        at org.openhab.binding.tado.internal.api.RuntimeTypeAdapterFactory.create(RuntimeTypeAdapterFactory.java:60) ~[?:?]
        at com.google.gson.Gson.getAdapter(Gson.java:556) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130) ~[?:?]
        at com.google.gson.Gson.getAdapter(Gson.java:556) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130) ~[?:?]
        at com.google.gson.Gson.getAdapter(Gson.java:556) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1226) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1137) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1047) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1014) ~[?:?]
        at org.openhab.binding.tado.internal.api.client.HomeApi.showZoneState(HomeApi.java:529) ~[?:?]
        at org.openhab.binding.tado.internal.handler.TadoZoneHandler.getZoneState(TadoZoneHandler.java:129) ~[?:?]
        at org.openhab.binding.tado.internal.handler.TadoZoneHandler.updateZoneState(TadoZoneHandler.java:325) ~[?:?]
        at org.openhab.binding.tado.internal.handler.TadoZoneHandler$1.run(TadoZoneHandler.java:420) ~[?:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) ~[?:?]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
        at java.lang.Thread.run(Thread.java:840) [?:?]
2024-05-22 12:03:12.461 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:
java.lang.IllegalArgumentException: Class org.openhab.binding.tado.internal.api.model.TadoModeTerminationCondition declares multiple JSON fields named 'type';
 conflict is caused by fields org.openhab.binding.tado.internal.api.model.TadoModeTerminationCondition#type and org.openhab.binding.tado.internal.api.model.Ov
erlayTerminationCondition#type
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:302) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130) ~[?:?]
        at com.google.gson.Gson.getDelegateAdapter(Gson.java:652) ~[?:?]
        at org.openhab.binding.tado.internal.api.RuntimeTypeAdapterFactory.create(RuntimeTypeAdapterFactory.java:60) ~[?:?]
        at com.google.gson.Gson.getAdapter(Gson.java:556) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130) ~[?:?]
        at com.google.gson.Gson.getAdapter(Gson.java:556) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130) ~[?:?]
        at com.google.gson.Gson.getAdapter(Gson.java:556) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1226) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1137) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1047) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1014) ~[?:?]
        at org.openhab.binding.tado.internal.api.client.HomeApi.showZoneState(HomeApi.java:529) ~[?:?]
        at org.openhab.binding.tado.internal.handler.TadoZoneHandler.getZoneState(TadoZoneHandler.java:129) ~[?:?]
        at org.openhab.binding.tado.internal.handler.TadoZoneHandler.updateZoneState(TadoZoneHandler.java:325) ~[?:?]
        at org.openhab.binding.tado.internal.handler.TadoZoneHandler$1.run(TadoZoneHandler.java:420) ~[?:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) ~[?:?]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
        at java.lang.Thread.run(Thread.java:840) [?:?]

After downgrade to M2 problem dissapeared.

Hmm. There wasn’t anything explicitly Tado related that changed between M2 and M3. So I am a bit baffled.

The Tado binding does rely on Swagger having processed a YAML script to generate DTO classes, and I do recall that OH made some Swagger related upgrade to the addon build process. So I am guessing it may be that which broke the binding.

Nevertheless I would appreciate if someone can send me a log:trace showing the over the wire JSON payload that causes the problem. (The error messages posted above, do not provide enough context)…

Ok. It seems that something was done which probably caused this break.

@holgerf ping!

I created a PR to revert the change. 2.4 series of the plugin generates different code for some of the files, causing the trouble. As I cannot reproduce myself (lacking TADO), I decided to roll back.
Sorry for the inconvenience.

openhab> log:set TRACE org.openhab.binding.tado

Unfortunately there is no TRACE logging for this Exception with TRACE set to the binding. Setting loglevel TRACE for ROOT is a complete mess… I tried to find some interesting payload, found following. Does that help?

2024-05-23 20:18:45.204 [DEBUG] [g.eclipse.jetty.io.ssl.SslConnection] - <fill f=533 uf=false SslConnection@3068363e::SocketChannelEndPoint@2fa02735{l=/10.3.0.2:45798,r=my.tado.com/34.249.32.71:443,OPEN,fill=-,flush=-,to=2/0}{io=0/0,kio=0,kro=1}->SslConnection@3068363e{NOT_HANDSHAKING,eio=34/-1,di=-1,fill=IDLE,flush=IDLE}~>DecryptedEndPoint@517bb89{l=/10.3.0.2:45798,r=my.tado.com/34.249.32.71:443,OPEN,fill=-,flush=-,to=78/0}=>HttpConnectionOverHTTP@4eca33ac(l:/10.3.0.2:45798 <-> r:my.tado.com/34.249.32.71:443,closed=false)=>HttpChannelOverHTTP@81b0849(exchange=HttpExchange@2488e510{req=HttpRequest[GET /api/v2/homes/196227/state HTTP/1.1]@1e16bbb4[TERMINATED/null] res=HttpResponse[null 0 null]@5377d08b[PENDING/null]})[send=HttpSenderOverHTTP@45b15b13(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@6b86551f{s=START}],recv=HttpReceiverOverHTTP@1a2e4797(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
2024-05-23 20:18:45.205 [DEBUG] [rg.eclipse.jetty.client.HttpReceiver] - Read 533 bytes in RetainableByteBuffer@72979b53{DirectByteBuffer@5df5d692[p=0,l=533,c=16384,r=533]={<<<HTTP/1.1 200 \r\nDate: Thu,...%\xE6\x14\xA7\xD6\x02\x00\x00\x00\xFf\xFf\x03\x00!0\xF4\xBe*\x00\x00\x00\r\n>>>?\x91!\x8dX\x8a\x06P\x8a...\x00\x00\x00\x00\x00\x00\x00},r=1} from DecryptedEndPoint@517bb89{l=/10.3.0.2:45798,r=my.tado.com/34.249.32.71:443,OPEN,fill=-,flush=-,to=79/0}
2024-05-23 20:18:45.205 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - parseNext s=START DirectByteBuffer@5df5d692[p=0,l=533,c=16384,r=533]={<<<HTTP/1.1 200 \r\nDate: Thu,...%\xE6\x14\xA7\xD6\x02\x00\x00\x00\xFf\xFf\x03\x00!0\xF4\xBe*\x00\x00\x00\r\n>>>?\x91!\x8dX\x8a\x06P\x8a...\x00\x00\x00\x00\x00\x00\x00}
2024-05-23 20:18:45.206 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - START --> RESPONSE_VERSION
2024-05-23 20:18:45.207 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - RESPONSE_VERSION --> SPACE1
2024-05-23 20:18:45.207 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - SPACE1 --> STATUS
2024-05-23 20:18:45.208 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - STATUS --> SPACE2
2024-05-23 20:18:45.208 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - SPACE2 --> HEADER
2024-05-23 20:18:45.209 [DEBUG] [clipse.jetty.client.HttpConversation] - Exchanges in conversation 1, override=null, listeners=[org.eclipse.jetty.client.util.FutureResponseListener@794b0c68]
2024-05-23 20:18:45.209 [DEBUG] [rg.eclipse.jetty.client.HttpReceiver] - Response begin HttpResponse[HTTP/1.1 200 null]@5377d08b
2024-05-23 20:18:45.210 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Date --> VALUE
2024-05-23 20:18:45.210 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Date --> IN_VALUE
2024-05-23 20:18:45.210 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Date --> FIELD
2024-05-23 20:18:45.211 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Content-Type: application/json;charset=UTF-8 --> IN_VALUE
2024-05-23 20:18:45.211 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Content-Type: application/json;charset=UTF-8 --> FIELD
2024-05-23 20:18:45.212 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Transfer-Encoding: chunked --> IN_VALUE
2024-05-23 20:18:45.212 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Transfer-Encoding: chunked --> FIELD
2024-05-23 20:18:45.213 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Connection: keep-alive --> IN_VALUE
2024-05-23 20:18:45.213 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Connection: keep-alive --> FIELD
2024-05-23 20:18:45.214 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Strict-Transport-Security --> VALUE
2024-05-23 20:18:45.214 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Strict-Transport-Security --> IN_VALUE
2024-05-23 20:18:45.215 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Strict-Transport-Security --> FIELD
2024-05-23 20:18:45.215 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER: --> IN_NAME
2024-05-23 20:18:45.216 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:X-Content-Type-Options --> VALUE
2024-05-23 20:18:45.216 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:X-Content-Type-Options --> IN_VALUE
2024-05-23 20:18:45.217 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:X-Content-Type-Options --> FIELD
2024-05-23 20:18:45.218 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER: --> IN_NAME
2024-05-23 20:18:45.218 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Content-Security-Policy --> VALUE
2024-05-23 20:18:45.219 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Content-Security-Policy --> IN_VALUE
2024-05-23 20:18:45.219 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Content-Security-Policy --> FIELD
2024-05-23 20:18:45.220 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER: --> IN_NAME
2024-05-23 20:18:45.220 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:X-Frame-Options --> VALUE
2024-05-23 20:18:45.221 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:X-Frame-Options --> IN_VALUE
2024-05-23 20:18:45.221 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:X-Frame-Options --> FIELD
2024-05-23 20:18:45.222 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER: --> IN_NAME
2024-05-23 20:18:45.222 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:X-Application-Context --> VALUE
2024-05-23 20:18:45.223 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:X-Application-Context --> IN_VALUE
2024-05-23 20:18:45.223 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:X-Application-Context --> FIELD
2024-05-23 20:18:45.224 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:ETag --> VALUE
2024-05-23 20:18:45.224 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:ETag --> IN_VALUE
2024-05-23 20:18:45.225 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:ETag --> FIELD
2024-05-23 20:18:45.225 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Cache-Control: no-cache, must-revalidate --> IN_VALUE
2024-05-23 20:18:45.226 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Cache-Control: no-cache, must-revalidate --> FIELD
2024-05-23 20:18:45.226 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Content-Encoding: gzip --> IN_VALUE
2024-05-23 20:18:45.226 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Content-Encoding: gzip --> FIELD
2024-05-23 20:18:45.227 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Vary --> VALUE
2024-05-23 20:18:45.227 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Vary --> IN_VALUE
2024-05-23 20:18:45.227 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Vary --> FIELD
2024-05-23 20:18:45.228 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER --> CHUNKED_CONTENT
2024-05-23 20:18:45.228 [DEBUG] [rg.eclipse.jetty.client.HttpReceiver] - Response headers HttpResponse[HTTP/1.1 200 null]@5377d08b
Date: Thu, 23 May 2024 18:18:45 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff
Content-Security-Policy: frame-ancestors 'none'
X-Frame-Options: DENY
X-Application-Context: application:production
ETag: W/"eea3f6ae511ef75d"
Cache-Control: no-cache, must-revalidate
Content-Encoding: gzip
Vary: Accept-Encoding
2024-05-23 20:18:45.229 [DEBUG] [rg.eclipse.jetty.client.HttpReceiver] - Response demand=1/1, resume=false
2024-05-23 20:18:45.229 [DEBUG] [rg.eclipse.jetty.client.HttpReceiver] - Response headers hasDemand=true HttpResponse[HTTP/1.1 200 null]@5377d08b
2024-05-23 20:18:45.230 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - CHUNKED_CONTENT --> CHUNK_SIZE
2024-05-23 20:18:45.230 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - CHUNK_SIZE --> CHUNK
2024-05-23 20:18:45.231 [DEBUG] [rg.eclipse.jetty.client.HttpReceiver] - Response content HttpResponse[HTTP/1.1 200 null]@5377d08b
DirectByteBufferR@76c24215[p=470,l=531,c=16384,r=61]={HTTP/1.1 ...\n\r\n3d\r\n<<<\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\xAaV*(J-N\xCdKNU\xB2R\xF2\xF0...Y\xA5%\xE6\x14\xA7\xD6\x02\x00\x00\x00\xFf\xFf\x03\x00!0\xF4\xBe*\x00\x00\x00>>>\r\n?\x91!\x8dX\x8a\x06...\x00\x00\x00\x00\x00\x00\x00}
2024-05-23 20:18:45.372 [DEBUG] [g.eclipse.jetty.io.ssl.SslConnection] - <fill f=5 uf=false SslConnection@3068363e::SocketChannelEndPoint@2fa02735{l=/10.3.0.2:45798,r=my.tado.com/34.249.32.71:443,OPEN,fill=-,flush=-,to=29/0}{io=0/0,kio=0,kro=1}->SslConnection@3068363e{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=IDLE,flush=IDLE}~>DecryptedEndPoint@517bb89{l=/10.3.0.2:45798,r=my.tado.com/34.249.32.71:443,OPEN,fill=-,flush=-,to=115/0}=>HttpConnectionOverHTTP@4eca33ac(l:/10.3.0.2:45798 <-> r:my.tado.com/34.249.32.71:443,closed=false)=>HttpChannelOverHTTP@81b0849(exchange=HttpExchange@3a5dae67{req=HttpRequest[GET /api/v2/homes/196227/zones/2/state HTTP/1.1]@591e7031[TERMINATED/null] res=HttpResponse[HTTP/1.1 200 null]@5743d22f[PENDING/null]})[send=HttpSenderOverHTTP@45b15b13(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@6b86551f{s=START}],recv=HttpReceiverOverHTTP@1a2e4797(rsp=CONTENT,failure=null)[HttpParser{s=CHUNKED_CONTENT,457 of -1}]]
2024-05-23 20:18:45.372 [DEBUG] [rg.eclipse.jetty.client.HttpReceiver] - Read 5 bytes in RetainableByteBuffer@57c4cf88{DirectByteBuffer@5df5d692[p=0,l=5,c=16384,r=5]={<<<0\r\n\r\n>>>1.1 200 \r...\x00\x00\x00\x00\x00\x00\x00},r=1} from DecryptedEndPoint@517bb89{l=/10.3.0.2:45798,r=my.tado.com/34.249.32.71:443,OPEN,fill=-,flush=-,to=116/0}
2024-05-23 20:18:45.373 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - parseNext s=CHUNKED_CONTENT DirectByteBuffer@5df5d692[p=0,l=5,c=16384,r=5]={<<<0\r\n\r\n>>>1.1 200 \r...\x00\x00\x00\x00\x00\x00\x00}
2024-05-23 20:18:45.373 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - CHUNKED_CONTENT --> CHUNK_SIZE
2024-05-23 20:18:45.374 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - CHUNK_SIZE --> TRAILER
2024-05-23 20:18:45.374 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - TRAILER --> END
2024-05-23 20:18:45.374 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - reset HttpParser{s=END,0 of -1}
2024-05-23 20:18:45.375 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - END --> START
2024-05-23 20:18:45.375 [DEBUG] [rg.eclipse.jetty.client.HttpReceiver] - Response success HttpResponse[HTTP/1.1 200 null]@5743d22f
2024-05-23 20:18:45.376 [DEBUG] [rg.eclipse.jetty.client.HttpExchange] - Terminated response for HttpExchange@3a5dae67{req=HttpRequest[GET /api/v2/homes/196227/zones/2/state HTTP/1.1]@591e7031[TERMINATED/null] res=HttpResponse[HTTP/1.1 200 null]@5743d22f[TERMINATED/null]}, result: Result[HttpRequest[GET /api/v2/homes/196227/zones/2/state HTTP/1.1]@591e7031 > HttpResponse[HTTP/1.1 200 null]@5743d22f] null
2024-05-23 20:18:45.376 [DEBUG] [rg.eclipse.jetty.client.HttpReceiver] - Response complete HttpResponse[HTTP/1.1 200 null]@5743d22f
2024-05-23 20:18:45.377 [DEBUG] [org.eclipse.jetty.client.HttpChannel] - HttpExchange@3a5dae67{req=HttpRequest[GET /api/v2/homes/196227/zones/2/state HTTP/1.1]@591e7031[TERMINATED/null] res=HttpResponse[HTTP/1.1 200 null]@5743d22f[TERMINATED/null]} disassociated true from HttpChannelOverHTTP@81b0849(exchange=null)[send=HttpSenderOverHTTP@45b15b13(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@6b86551f{s=START}],recv=HttpReceiverOverHTTP@1a2e4797(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
2024-05-23 20:18:45.378 [DEBUG] [eclipse.jetty.client.HttpDestination] - Released HttpConnectionOverHTTP@4eca33ac::DecryptedEndPoint@517bb89{l=/10.3.0.2:45798,r=my.tado.com/34.249.32.71:443,OPEN,fill=-,flush=-,to=121/0}
2024-05-23 20:18:45.378 [DEBUG] [.jetty.client.AbstractConnectionPool] - Released (true) MultiEntry@7e28918f{IDLE,usage=3,multiplex=0,pooled=HttpConnectionOverHTTP@4eca33ac::DecryptedEndPoint@517bb89{l=/10.3.0.2:45798,r=my.tado.com/34.249.32.71:443,OPEN,fill=-,flush=-,to=122/0}} Pool@1ec95b8e[inUse=0,size=1,capacity=64,closed=false]
2024-05-23 20:18:45.379 [DEBUG] [rg.eclipse.jetty.client.HttpReceiver] - Request/Response succeeded: Result[HttpRequest[GET /api/v2/homes/196227/zones/2/state HTTP/1.1]@591e7031 > HttpResponse[HTTP/1.1 200 null]@5743d22f] null, notifying [org.eclipse.jetty.client.util.FutureResponseListener@72febec1]
2024-05-23 20:18:45.380 [DEBUG] [rg.eclipse.jetty.client.HttpReceiver] - Parse result=false, failed=false
2024-05-23 20:18:45.381 [DEBUG] [rg.eclipse.jetty.client.HttpReceiver] - Parse complete=true, RetainableByteBuffer@57c4cf88{DirectByteBuffer@5df5d692[p=5,l=5,c=16384,r=0]={0\r\n\r\n<<<>>>1.1 200 \r...\x00\x00\x00\x00\x00\x00\x00},r=1} HttpParser{s=START,0 of -1}
2024-05-23 20:18:45.381 [DEBUG] [g.eclipse.jetty.io.ssl.SslConnection] - >fill SslConnection@3068363e::SocketChannelEndPoint@2fa02735{l=/10.3.0.2:45798,r=my.tado.com/34.249.32.71:443,OPEN,fill=-,flush=-,to=39/0}{io=0/0,kio=0,kro=1}->SslConnection@3068363e{NOT_HANDSHAKING,eio=-1/-1,di=-1,fill=IDLE,flush=IDLE}~>DecryptedEndPoint@517bb89{l=/10.3.0.2:45798,r=my.tado.com/34.249.32.71:443,OPEN,fill=-,flush=-,to=124/0}=>HttpConnectionOverHTTP@4eca33ac(l:/10.3.0.2:45798 <-> r:my.tado.com/34.249.32.71:443,closed=false)=>HttpChannelOverHTTP@81b0849(exchange=null)[send=HttpSenderOverHTTP@45b15b13(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@6b86551f{s=START}],recv=HttpReceiverOverHTTP@1a2e4797(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
2024-05-23 20:18:45.382 [DEBUG] [g.eclipse.jetty.io.ssl.SslConnection] - fill NOT_HANDSHAKING
2024-05-23 20:18:45.383 [DEBUG] [org.eclipse.jetty.io.ChannelEndPoint] - filled 0 DirectByteBuffer@b4dfbf2[p=0,l=0,c=18432,r=0]={<<<>>>HTTP/1.1 ...\x00\x00\x00\x00\x00\x00\x00}
2024-05-23 20:18:45.383 [DEBUG] [g.eclipse.jetty.io.ssl.SslConnection] - net filled=0
2024-05-23 20:18:45.384 [DEBUG] [g.eclipse.jetty.io.ssl.SslConnection] - unwrap net_filled=0 Status = BUFFER_UNDERFLOW HandshakeStatus = NOT_HANDSHAKING bytesConsumed = 0 bytesProduced = 0 encryptedBuffer=[p=0,l=0,c=18432,r=0] unwrapBuffer=DirectByteBuffer@6ee6ead8[p=0,l=0,c=18432,r=0]={<<<>>>\x17\x03\x03\x03\xBa\x00\x00\x00\x00...\x00\x00\x00\x00\x00\x00\x00} appBuffer=DirectByteBuffer@5df5d692[p=5,l=5,c=16384,r=0]={0\r\n\r\n<<<>>>1.1 200 \r...\x00\x00\x00\x00\x00\x00\x00}
2024-05-23 20:18:45.381 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception: 
java.lang.IllegalArgumentException: Class org.openhab.binding.tado.internal.api.model.TadoModeTerminationCondition declares multiple JSON fields named 'type'; conflict is caused by fields org.openhab.binding.tado.internal.api.model.TadoModeTerminationCondition#type and org.openhab.binding.tado.internal.api.model.OverlayTerminationCondition#type
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:302) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130) ~[?:?]
        at com.google.gson.Gson.getDelegateAdapter(Gson.java:652) ~[?:?]
        at org.openhab.binding.tado.internal.api.RuntimeTypeAdapterFactory.create(RuntimeTypeAdapterFactory.java:60) ~[?:?]
        at com.google.gson.Gson.getAdapter(Gson.java:556) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130) ~[?:?]
        at com.google.gson.Gson.getAdapter(Gson.java:556) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130) ~[?:?]
        at com.google.gson.Gson.getAdapter(Gson.java:556) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1226) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1137) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1047) ~[?:?]
        at com.google.gson.Gson.fromJson(Gson.java:1014) ~[?:?]
        at org.openhab.binding.tado.internal.api.client.HomeApi.showZoneState(HomeApi.java:529) ~[?:?]
        at org.openhab.binding.tado.internal.handler.TadoZoneHandler.getZoneState(TadoZoneHandler.java:129) ~[?:?]
        at org.openhab.binding.tado.internal.handler.TadoZoneHandler.updateZoneState(TadoZoneHandler.java:325) ~[?:?]
        at org.openhab.binding.tado.internal.handler.TadoZoneHandler.lambda$3(TadoZoneHandler.java:453) ~[?:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
        at java.lang.Thread.run(Thread.java:840) [?:?]