Samsung TV Binding (Beta)

You are in luck then, the newer (>2021) frame TV’s have 16 Gbytes of internal storage (earlier ones had 500 Mbytes). So you should have lots of room.

The trick here is to resize all your images to exactly 3,840x2,160 pixels (16:9 ratio), this is the screen resolution, so higher resolution doesn’t help - they get resized to the screen size anyway. Send jpg not png or other image formats, as jpg’s are smaller (but whatever gives you the best image works).

If you don’t resize your image exactly, it can limit the mats you are allowed apply.

You can upload your images from a USB drive (I find this the easiest, as my images are on a PC), or via the Smartthings app, which is more interactive, and allows you to create a montage of multiple images on one picture, using multi image mats. this works well for odd shaped images (square or portrait).

@Nicholas_Waterton

The image is still empty. Here is the log

2022-02-08 19:18:22.986 [TRACE] [ungtv.internal.protocol.WebSocketArt] - 192.168.178.75: slideshow: auto_rotation_status, , off, 
2022-02-08 19:18:23.169 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201909019271","result":{"id":"3201909019271","name":"PrivacyChoices","running":false,"version":"1.0.0","visible":false}} 
2022-02-08 19:18:23.169 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketArt: onWebSocketText: {"data":"{\"id\":\"b4016d9a-3df0-40cf-a728-fd2b085476a1\",\"event\":\"current_artwork\",\"content_id\":\"MY_F0017\",\"matte_id\":\"shadowbox_polar\",\"target_client_id\":\"3d92691c-5ae-4468-a64e-a5f5ccd1ff21\"}","event":"d2d_service_message","from":"f14b90b9-aa62-4d14-a775-221844a68c7"} 
2022-02-08 19:18:23.170 [DEBUG] [tv.internal.handler.SamsungTvHandler] - 192.168.178.75: Received value 'artJson':'{"id":"b4016d9a-3df0-40cf-a728-fd2b085476a1","event":"current_artwork","content_id":"MY_F0017","matte_id":"shadowbox_polar","target_client_id":"3d92691c-5ae-4468-a64e-a5f5ccd1ff21"}' for thing 'samsungtv:tv:wohnzimmer'
2022-02-08 19:18:23.171 [DEBUG] [tv.internal.handler.SamsungTvHandler] - 192.168.178.75: Received value 'artLabel':'MY_F0017' for thing 'samsungtv:tv:wohnzimmer'
2022-02-08 19:18:23.176 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketArt: sendCommand: {"method":"ms.channel.emit","params":{"event":"art_app_request","to":"host","data":"{\"request\":\"get_thumbnail\",\"content_id\":\"MY_F0017\",\"id\":\"b4016d9a-3df0-40cf-a728-fd2b085476a1\",\"conn_info\":{\"d2d_mode\":\"socket\",\"connection_id\":2705890518,\"id\":\"b4016d9a-3df0-40cf-a728-fd2b085476a1\"}}"}}
2022-02-08 19:18:23.260 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketArt: onWebSocketText: {"data":"{\"id\":\"b4016d9a-3df0-40cf-a728-fd2b085476a1\",\"event\":\"color_temperature\",\"value\":\"-1\",\"min\":\"-5\",\"max\":\"5\",\"target_client_id\":\"3d92691c-5ae-4468-a64e-a5f5ccd1ff21\"}","event":"d2d_service_message","from":"f14b90b9-aa62-4d14-a775-221844a68c7"} 
2022-02-08 19:18:23.261 [DEBUG] [tv.internal.handler.SamsungTvHandler] - 192.168.178.75: Received value 'artJson':'{"id":"b4016d9a-3df0-40cf-a728-fd2b085476a1","event":"color_temperature","value":"-1","min":"-5","max":"5","target_client_id":"3d92691c-5ae-4468-a64e-a5f5ccd1ff21"}' for thing 'samsungtv:tv:wohnzimmer'
2022-02-08 19:18:23.262 [DEBUG] [tv.internal.handler.SamsungTvHandler] - 192.168.178.75: Received value 'artColorTemperature':'-1' for thing 'samsungtv:tv:wohnzimmer'
2022-02-08 19:18:23.265 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201812017454","result":{"id":"3201812017454","name":"schauinsland-reisen","running":false,"version":"2.0.03","visible":false}} 
2022-02-08 19:18:23.451 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"11111358501","result":{"id":"11111358501","name":"Audi","running":false,"version":"6.1.00","visible":false}} 
2022-02-08 19:18:23.685 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201411000562","result":{"id":"3201411000562","name":"Sky Ticket","running":false,"version":"4.0.6","visible":false}} 
2022-02-08 19:18:23.856 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201908018988","result":{"id":"3201908018988","name":"RTL+","running":false,"version":"1.15.0","visible":false}} 
2022-02-08 19:18:23.860 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketArt: onWebSocketBinary: offset: 0, len: 691865
2022-02-08 19:18:23.889 [TRACE] [ungtv.internal.protocol.WebSocketArt] - 192.168.178.75: GOT EOT: 272
2022-02-08 19:18:23.890 [TRACE] [ungtv.internal.protocol.WebSocketArt] - 192.168.178.75: Got message (from binary): {"data":"{\"id\":\"b4016d9a-3df0-40cf-a728-fd2b085476a1\",\"event\":\"thumbnail\",\"content_id\":\"MY_F0017\",\"file_type\":\"jpg\",\"target_client_id\":\"3d92691c-5ae-4468-a64e-a5f5ccd1ff21\"}","event":"d2d_service_message","from":"f14b90b9-aa62-4d14-a775-221844a68c7"}
2022-02-08 19:18:23.890 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketArt connection error
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:932) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:897) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:846) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:817) ~[?:?]
	at org.openhab.binding.samsungtv.internal.protocol.WebSocketArt.onWebSocketBinary(WebSocketArt.java:253) ~[?:?]
	at org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onBinaryMessage(JettyListenerEventDriver.java:128) ~[bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.websocket.common.message.SimpleBinaryMessage.messageComplete(SimpleBinaryMessage.java:75) ~[bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.appendMessage(AbstractEventDriver.java:67) ~[bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onBinaryFrame(JettyListenerEventDriver.java:91) ~[bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.incomingFrame(AbstractEventDriver.java:147) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.websocket.common.WebSocketSession.incomingFrame(WebSocketSession.java:326) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.websocket.common.extensions.ExtensionStack.incomingFrame(ExtensionStack.java:202) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.websocket.common.Parser.notifyFrame(Parser.java:225) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.websocket.common.Parser.parseSingleFrame(Parser.java:259) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:459) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:440) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:555) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:410) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:164) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:386) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) [bundleFile:9.4.43.v20210629]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) [bundleFile:9.4.43.v20210629]
	at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
	at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:386) ~[?:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:215) ~[?:?]
	... 31 more
2022-02-08 19:18:23.896 [DEBUG] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75 WebSocketArt is cancelled
2022-02-08 19:18:23.896 [DEBUG] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketArt connection closed: 1006 - java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
2022-02-08 19:18:24.281 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201710015067","result":{"appName":null,"id":"3201412000694","media_player":false,"name":"App Launcher","running":false,"version":"3.2.23","visible":false}} 
2022-02-08 19:18:24.351 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"111199000390","result":{"id":"111199000390","name":"BILD LIVE","running":false,"version":"3.1.10","visible":false}} 
2022-02-08 19:18:24.587 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"111399002178","result":{"id":"111399002178","name":"MUBI","running":false,"version":"4.0.0","visible":false}} 
2022-02-08 19:18:24.821 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201903018105","result":{"id":"3201903018105","name":"Samsung SportWorld","running":false,"version":"2.6.1","visible":false}} 
2022-02-08 19:18:24.882 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201807016597","result":{"appName":null,"id":"3201412000694","media_player":false,"name":"App Launcher","running":false,"version":"3.2.23","visible":false}} 
2022-02-08 19:18:24.947 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201804016033","result":{"id":"3201804016033","name":"waipu.tv – Live TV-Streaming","running":false,"version":"5.4.8","visible":false}} 
2022-02-08 19:18:24.992 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201803015887","result":{"id":"3201803015887","name":"maxdome","running":false,"version":"60.00.00","visible":false}} 
2022-02-08 19:18:25.034 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201909019084","result":{"id":"3201909019084","name":"CUPRA","running":false,"version":"1.2.10","visible":false}} 
2022-02-08 19:18:25.089 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201908019041","result":{"appName":null,"id":"3201412000694","media_player":false,"name":"App Launcher","running":false,"version":"3.2.23","visible":false}} 
2022-02-08 19:18:25.165 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201502001386","result":{"id":"3201502001386","name":"Joyn","running":false,"version":"1.29.1","visible":false}} 
2022-02-08 19:18:25.243 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201412000679","result":{"id":"3201412000679","name":"ARD Mediathek","running":false,"version":"3.0.2","visible":false}} 
2022-02-08 19:18:25.300 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201705012365","result":{"id":"3201705012365","name":"ZDF mediathek","running":false,"version":"1.10.0","visible":false}} 
2022-02-08 19:18:25.354 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201907018807","result":{"id":"3201907018807","name":"Netflix","running":true,"version":"5.2.60019","visible":false}} 
2022-02-08 19:18:25.413 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201512006785","result":{"id":"3201512006785","name":"Prime Video","running":false,"version":"9.0.0","visible":false}} 
2022-02-08 19:18:25.468 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201511006428","result":{"id":"3201511006428","name":"Rakuten TV","running":false,"version":"5.1.1","visible":false}} 
2022-02-08 19:18:25.524 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201807016658","result":{"id":"3201807016658","name":"Samsung Promotion","running":false,"version":"3.2.30","visible":false}} 
2022-02-08 19:18:25.552 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3202008021577","result":{"id":"3202008021577","name":"TikTok","running":false,"version":"1.1.8","visible":false}} 
2022-02-08 19:18:25.572 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201901017640","result":{"id":"3201901017640","name":"Disney+","running":false,"version":"1.11.0","visible":false}} 
2022-02-08 19:18:25.597 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201907018746","result":{"id":"3201907018746","name":"MagentaTV","running":false,"version":"1.5.0","visible":false}} 
2022-02-08 19:18:25.615 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201607009920","result":{"id":"3201607009920","name":"DAZN","running":false,"version":"1.70.14","visible":false}} 
2022-02-08 19:18:25.637 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"111299001912","result":{"id":"111299001912","name":"YouTube","running":false,"version":"2.1.493","visible":false}} 
2022-02-08 19:18:25.691 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201810017070","result":{"id":"3201810017070","name":"HD+","running":false,"version":"1.2.3","visible":false}} 
2022-02-08 19:18:25.719 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"20192100002","result":{"id":"20192100002","name":"e-Manual","running":false,"version":"3.0.4","visible":false}} 
2022-02-08 19:18:25.749 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201609010528","result":{"id":"3201609010528","name":"Couchplay SpieleCenter","running":false,"version":"1.1.4","visible":false}} 
2022-02-08 19:18:25.787 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201710015037","result":{"appName":null,"id":"3201412000694","media_player":false,"name":"App Launcher","running":false,"version":"3.2.23","visible":false}} 
2022-02-08 19:18:25.807 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201606009684","result":{"id":"3201606009684","name":"Spotify – Musik und Podcasts","running":false,"version":"2.1.10","visible":false}} 
2022-02-08 19:18:25.848 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"org.tizen.browser","result":{"appName":null,"id":"3201412000694","media_player":false,"name":"App Launcher","running":false,"version":"3.2.23","visible":false}} 
2022-02-08 19:18:25.879 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3202011022316","result":{"id":"3202011022316","name":"ARTE","running":false,"version":"9.0.7","visible":false}} 

Hi all,
I tried the alternative Binding, but my TV always wants the confirmation for the remote control. I got the the token in the Openhab Thing. I have the TV „UE55MU6179“. Its connected over LAN.


{"device":{"FrameTVSupport":"false","GamePadSupport":"true","ImeSyncedSupport":"true","OS":"Tizen","TokenAuthSupport":"true","VoiceSupport":"true","countryCode":"DE","description":"Samsung DTV RCR","developerIP":"0.0.0.0","developerMode":"0","duid":"uuid:7ed71c87-8688-41e3-b593-7e7c805750a9","firmwareVersion":"Unknown","id":"uuid:7ed71c87-8688-41e3-b593-7e7c805750a9","ip":"192.168.178.39","model":"17_KANTM_UHD_BASIC","modelName":"UE55MU6179","name":"[TV] ","networkType":"wired","resolution":"3840x2160","smartHubAgreement":"true","type":"Samsung SmartTV","udn":"uuid:7ed71c87-8688-41e3-b593-7e7c805750a9","wifiMac":"54:bd:79:8e:7c:a8"},"id":"uuid:7ed71c87-8688-41e3-b593-7e7c805750a9","isSupport":"{\"DMP_DRM_PLAYREADY\":\"false\",\"DMP_DRM_WIDEVINE\":\"false\",\"DMP_available\":\"true\",\"EDEN_available\":\"true\",\"FrameTVSupport\":\"false\",\"ImeSyncedSupport\":\"true\",\"TokenAuthSupport\":\"true\",\"remote_available\":\"true\",\"remote_fourDirections\":\"true\",\"remote_touchPad\":\"true\",\"remote_voiceControl\":\"true\"}\n","name":"[TV] ","remote":"1.0","type":"Samsung SmartTV","uri":"http://192.168.178.39:8001/api/v2/","version":"2.0.25"}


Maybe you can help me :slightly_smiling_face:

Regards from Southern Germany

Nico

@joerg_ramser ,

Yes, having a little trouble with the json processing. I’ve made a test file, which I think is the same format as the binary data your TV sends. I’m testing with that.

I’ve uploaded a new jar (same link as before) I don’t know if this will work any better, but it captures the binary data you receive from your TV in a file called testbindata.bin in the openhabconfig/misc directory. If you don’t have a misc directory, can you create one in the same directory where your items directory is (usually /etc/openhab on a linux system), and give it write permission.

Then drop the jar into your addons directory, and see if it successfully writes the file (should get a log message).

If you can post the log and the file, I will stand a better chance of getting it to work with the actual data received.

Thanks.

When you say “always” do you mean everytime Openhab restarts (or the binding is reloaded)?

If so, this is because you have your TV set to “Always ask” in the remote access menu. you can change it to “Never ask” or “Only ask the first time”. You should set your TV to “Only ask the first Time”, when a remote device connects.

1 Like

No everytime when the tv starts.
I don’t find the remote access menu

It’s unusual not to have the remote access menu (usually To get to the Device Manager, press the home button on your TV remote and navigate to Settings → General → External Device Manager → Device Connect Manager, or similar). What year and model are your TV?

1 Like

I will try tomorrow. The year is 2016

Well i found the “hidden” menu :smirk:
is there another one for wake on lan? :grinning:
I can shutdown the TV, but not start it.

Yes,

General - Network - Expert Settings. Enable “Power On with Mobile”.

1 Like

Yeah, I figured that was the case, so I already resized them. Fortunately, the change in aspect ratio didn’t destroy the composition.

Now if I can just get this damn TV added to the SmartThings app. I’ve had problems with every Samsung device I’ve ever tried to add… Washer, Dryer, Induction Cooktop, and now the TV.

Edit: Rant: I hate Samsung products. What on earth possessed me to buy another one. :sob: :sob:

@Nicholas_Waterton

Here is the log

2022-02-09 21:00:53.052 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketArt: onWebSocketText: {"data":"{\"id\":\"78928900-08fc-4dc8-af7c-787e6e952f72\",\"event\":\"auto_rotation_status\",\"value\":\"off\",\"category_id\":\"\",\"sub_category_id\":\"\",\"current_content_id\":\"\",\"content_list\":\"\",\"target_client_id\":\"9898eb68-d59f-4778-a61-9624b94b8cdf\"}","event":"d2d_service_message","from":"8de33fa-7b27-4389-aa76-26b96abaaed2"} 
2022-02-09 21:00:53.053 [DEBUG] [tv.internal.handler.SamsungTvHandler] - 192.168.178.75: Received value 'artJson':'{"id":"78928900-08fc-4dc8-af7c-787e6e952f72","event":"auto_rotation_status","value":"off","category_id":"","sub_category_id":"","current_content_id":"","content_list":"","target_client_id":"9898eb68-d59f-4778-a61-9624b94b8cdf"}' for thing 'samsungtv:tv:wohnzimmer'
2022-02-09 21:00:53.054 [TRACE] [ungtv.internal.protocol.WebSocketArt] - 192.168.178.75: slideshow: auto_rotation_status, , off, 
2022-02-09 21:00:53.054 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketArt: onWebSocketText: {"data":"{\"id\":\"78928900-08fc-4dc8-af7c-787e6e952f72\",\"event\":\"current_artwork\",\"content_id\":\"MY_F0017\",\"matte_id\":\"shadowbox_polar\",\"target_client_id\":\"9898eb68-d59f-4778-a61-9624b94b8cdf\"}","event":"d2d_service_message","from":"8de33fa-7b27-4389-aa76-26b96abaaed2"} 
2022-02-09 21:00:53.055 [DEBUG] [tv.internal.handler.SamsungTvHandler] - 192.168.178.75: Received value 'artJson':'{"id":"78928900-08fc-4dc8-af7c-787e6e952f72","event":"current_artwork","content_id":"MY_F0017","matte_id":"shadowbox_polar","target_client_id":"9898eb68-d59f-4778-a61-9624b94b8cdf"}' for thing 'samsungtv:tv:wohnzimmer'
2022-02-09 21:00:53.056 [DEBUG] [tv.internal.handler.SamsungTvHandler] - 192.168.178.75: Received value 'artLabel':'MY_F0017' for thing 'samsungtv:tv:wohnzimmer'
2022-02-09 21:00:53.056 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201812017454","result":{"id":"3201812017454","name":"schauinsland-reisen","running":false,"version":"2.0.03","visible":false}} 
2022-02-09 21:00:53.060 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketArt: sendCommand: {"method":"ms.channel.emit","params":{"event":"art_app_request","to":"host","data":"{\"request\":\"get_thumbnail\",\"content_id\":\"MY_F0017\",\"id\":\"78928900-08fc-4dc8-af7c-787e6e952f72\",\"conn_info\":{\"d2d_mode\":\"socket\",\"connection_id\":2705890518,\"id\":\"78928900-08fc-4dc8-af7c-787e6e952f72\"}}"}}
2022-02-09 21:00:53.060 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketArt: onWebSocketText: {"data":"{\"id\":\"78928900-08fc-4dc8-af7c-787e6e952f72\",\"event\":\"color_temperature\",\"value\":\"-1\",\"min\":\"-5\",\"max\":\"5\",\"target_client_id\":\"9898eb68-d59f-4778-a61-9624b94b8cdf\"}","event":"d2d_service_message","from":"8de33fa-7b27-4389-aa76-26b96abaaed2"} 
2022-02-09 21:00:53.061 [DEBUG] [tv.internal.handler.SamsungTvHandler] - 192.168.178.75: Received value 'artJson':'{"id":"78928900-08fc-4dc8-af7c-787e6e952f72","event":"color_temperature","value":"-1","min":"-5","max":"5","target_client_id":"9898eb68-d59f-4778-a61-9624b94b8cdf"}' for thing 'samsungtv:tv:wohnzimmer'
2022-02-09 21:00:53.062 [DEBUG] [tv.internal.handler.SamsungTvHandler] - 192.168.178.75: Received value 'artColorTemperature':'-1' for thing 'samsungtv:tv:wohnzimmer'
2022-02-09 21:00:53.069 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"11111358501","result":{"id":"11111358501","name":"Audi","running":false,"version":"6.1.00","visible":false}} 
2022-02-09 21:00:53.081 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201411000562","result":{"id":"3201411000562","name":"Sky Ticket","running":false,"version":"4.0.6","visible":false}} 
2022-02-09 21:00:53.092 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201908018988","result":{"id":"3201908018988","name":"RTL+","running":false,"version":"1.15.0","visible":false}} 
2022-02-09 21:00:53.104 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201710015067","result":{"appName":null,"id":"3201412000694","media_player":false,"name":"App Launcher","running":false,"version":"3.2.23","visible":false}} 
2022-02-09 21:00:53.117 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"111199000390","result":{"id":"111199000390","name":"BILD LIVE","running":false,"version":"3.1.10","visible":false}} 
2022-02-09 21:00:53.129 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"111399002178","result":{"id":"111399002178","name":"MUBI","running":false,"version":"4.0.0","visible":false}} 
2022-02-09 21:00:53.140 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201903018105","result":{"id":"3201903018105","name":"Samsung SportWorld","running":false,"version":"2.6.1","visible":false}} 
2022-02-09 21:00:53.156 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201807016597","result":{"appName":null,"id":"3201412000694","media_player":false,"name":"App Launcher","running":false,"version":"3.2.23","visible":false}} 
2022-02-09 21:00:53.169 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201804016033","result":{"id":"3201804016033","name":"waipu.tv – Live TV-Streaming","running":false,"version":"5.4.8","visible":false}} 
2022-02-09 21:00:53.270 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201803015887","result":{"id":"3201803015887","name":"maxdome","running":false,"version":"60.00.00","visible":false}} 
2022-02-09 21:00:53.274 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201909019084","result":{"id":"3201909019084","name":"CUPRA","running":false,"version":"1.2.10","visible":false}} 
2022-02-09 21:00:53.320 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201908019041","result":{"appName":null,"id":"3201412000694","media_player":false,"name":"App Launcher","running":false,"version":"3.2.23","visible":false}} 
2022-02-09 21:00:53.334 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201502001386","result":{"id":"3201502001386","name":"Joyn","running":false,"version":"1.29.1","visible":false}} 
2022-02-09 21:00:53.345 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201412000679","result":{"id":"3201412000679","name":"ARD Mediathek","running":true,"version":"3.0.2","visible":false}} 
2022-02-09 21:00:53.348 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201705012365","result":{"id":"3201705012365","name":"ZDF mediathek","running":false,"version":"1.10.0","visible":false}} 
2022-02-09 21:00:53.388 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201907018807","result":{"id":"3201907018807","name":"Netflix","running":true,"version":"5.2.60019","visible":false}} 
2022-02-09 21:00:53.394 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201512006785","result":{"id":"3201512006785","name":"Prime Video","running":true,"version":"9.0.0","visible":false}} 
2022-02-09 21:00:53.420 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201511006428","result":{"id":"3201511006428","name":"Rakuten TV","running":false,"version":"5.1.1","visible":false}} 
2022-02-09 21:00:53.421 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201807016658","result":{"id":"3201807016658","name":"Samsung Promotion","running":false,"version":"3.2.30","visible":false}} 
2022-02-09 21:00:53.423 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3202008021577","result":{"id":"3202008021577","name":"TikTok","running":false,"version":"1.1.8","visible":false}} 
2022-02-09 21:00:53.517 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201901017640","result":{"id":"3201901017640","name":"Disney+","running":false,"version":"1.11.0","visible":false}} 
2022-02-09 21:00:53.519 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201907018746","result":{"id":"3201907018746","name":"MagentaTV","running":false,"version":"1.5.0","visible":false}} 
2022-02-09 21:00:53.539 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201607009920","result":{"id":"3201607009920","name":"DAZN","running":false,"version":"1.70.14","visible":false}} 
2022-02-09 21:00:53.543 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"111299001912","result":{"id":"111299001912","name":"YouTube","running":true,"version":"2.1.493","visible":false}} 
2022-02-09 21:00:53.544 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201810017070","result":{"id":"3201810017070","name":"HD+","running":false,"version":"1.2.3","visible":false}} 
2022-02-09 21:00:53.546 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"20192100002","result":{"id":"20192100002","name":"e-Manual","running":false,"version":"3.0.4","visible":false}} 
2022-02-09 21:00:53.571 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201609010528","result":{"id":"3201609010528","name":"Couchplay SpieleCenter","running":false,"version":"1.1.4","visible":false}} 
2022-02-09 21:00:53.574 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201710015037","result":{"appName":null,"id":"3201412000694","media_player":false,"name":"App Launcher","running":false,"version":"3.2.23","visible":false}} 
2022-02-09 21:00:53.580 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3201606009684","result":{"id":"3201606009684","name":"Spotify – Musik und Podcasts","running":false,"version":"2.1.10","visible":false}} 
2022-02-09 21:00:53.618 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"org.tizen.browser","result":{"appName":null,"id":"3201412000694","media_player":false,"name":"App Launcher","running":false,"version":"3.2.23","visible":false}} 
2022-02-09 21:00:53.629 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketV2: onWebSocketText: {"id":"3202011022316","result":{"id":"3202011022316","name":"ARTE","running":false,"version":"9.0.7","visible":false}} 
2022-02-09 21:00:53.891 [TRACE] [nternal.service.MediaRendererService] - 192.168.178.75: Received channel: mute, command: REFRESH
2022-02-09 21:00:54.277 [TRACE] [nternal.service.MediaRendererService] - 192.168.178.75: Value 'false' for Mute hasn't changed, ignoring update
2022-02-09 21:00:54.304 [TRACE] [ngtv.internal.protocol.WebSocketBase] - 192.168.178.75: WebSocketArt: onWebSocketBinary: offset: 0, len: 691865
2022-02-09 21:00:54.323 [DEBUG] [ungtv.internal.protocol.WebSocketArt] - 192.168.178.75: Wrote debug file /etc/openhab/misc/testbindata.bin
2022-02-09 21:00:54.343 [TRACE] [ungtv.internal.protocol.WebSocketArt] - 192.168.178.75: GOT EOT: 272
2022-02-09 21:00:54.343 [TRACE] [ungtv.internal.protocol.WebSocketArt] - 192.168.178.75: Got message (from binary): {"data":"{\"id\":\"78928900-08fc-4dc8-af7c-787e6e952f72\",\"event\":\"thumbnail\",\"content_id\":\"MY_F0017\",\"file_type\":\"jpg\",\"target_client_id\":\"9898eb68-d59f-4778-a61-9624b94b8cdf\"}","event":"d2d_service_message","from":"8de33fa-7b27-4389-aa76-26b96abaaed2"}
2022-02-09 21:00:54.344 [WARN ] [ungtv.internal.protocol.WebSocketArt] - 192.168.178.75: WebSocketArt: Error (java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $) in message: {"data":"{\"id\":\"78928900-08fc-4dc8-af7c-787e6e952f72\",\"event\":\"thumbnail\",\"content_id\":\"MY_F0017\",\"file_type\":\"jpg\",\"target_client_id\":\"9898eb68-d59f-4778-a61-9624b94b8cdf\"}","event":"d2d_service_message","from":"8de33fa-7b27-4389-aa76-26b96abaaed2"}
2022-02-09 21:00:55.278 [TRACE] [nternal.service.MediaRendererService] - 192.168.178.75: Received channel: mute, command: REFRESH
2022-02-09 21:00:55.295 [TRACE] [nternal.service.MediaRendererService] - 192.168.178.75: Value 'false' for Mute hasn't changed, ignoring update
2022-02-09 21:00:56.297 [TRACE] [nternal.service.MediaRendererService] - 192.168.178.75: Received channel: mute, command: REFRESH
2022-02-09 21:00:56.315 [TRACE] [nternal.service.MediaRendererService] - 192.168.178.75: Value 'false' for Mute hasn't changed, ignoring update
2022-02-09

Here is the testbindata.bin iCloud

Still trying to find reasons, why my TV is not recognized by binding. Here is what openhab’s JUPnP receives from TV:

22:47:48.140 [TRACE] [org.jupnp.protocol.ProtocolFactory   ] - Creating protocol for incoming asynchronous: (IncomingDatagramMessage) 200 OK
22:47:48.140 [DEBUG] [org.jupnp.transport.Router           ] - Received asynchronous message: (IncomingDatagramMessage) 200 OK
22:47:48.140 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Parsing all HTTP headers for known UPnP headers: 9
22:47:48.140 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'EXT' with class: EXTHeader
22:47:48.141 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Adding parsed header: (EXTHeader) ''
22:47:48.141 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'ST' with class: STAllHeader
22:47:48.141 [TRACE] [jupnp.model.message.header.UpnpHeader] - Invalid header value for tested type: STAllHeader - Invalid ST header value (not ALL): urn:dial-multiscreen-org:service:dial:1
22:47:48.141 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'ST' with class: RootDeviceHeader
22:47:48.141 [TRACE] [jupnp.model.message.header.UpnpHeader] - Invalid header value for tested type: RootDeviceHeader - Invalid root device NT header value: urn:dial-multiscreen-org:service:dial:1
22:47:48.141 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'ST' with class: UDADeviceTypeHeader
22:47:48.141 [TRACE] [jupnp.model.message.header.UpnpHeader] - Invalid header value for tested type: UDADeviceTypeHeader - Invalid UDA device type header value, Can't parse UDA device type string (namespace/type/version): urn:dial-multiscreen-org:service:dial:1
22:47:48.141 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'ST' with class: UDAServiceTypeHeader
22:47:48.141 [TRACE] [jupnp.model.message.header.UpnpHeader] - Invalid header value for tested type: UDAServiceTypeHeader - Invalid UDA service type header value, Can't parse UDA service type string (namespace/type/version): urn:dial-multiscreen-org:service:dial:1
22:47:48.141 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'ST' with class: DeviceTypeHeader
22:47:48.142 [TRACE] [jupnp.model.message.header.UpnpHeader] - Invalid header value for tested type: DeviceTypeHeader - Invalid device type header value, Can't parse device type string (namespace/type/version): urn:dial-multiscreen-org:service:dial:1
22:47:48.142 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'ST' with class: ServiceTypeHeader
22:47:48.142 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Adding parsed header: (ServiceTypeHeader) 'urn:dial-multiscreen-org:service:dial:1'
22:47:48.142 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'SERVER' with class: ServerHeader
22:47:48.142 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Adding parsed header: (ServerHeader) 'Samsung-Linux/4.1 UPnP/1.0 Samsung_UPnP_SDK/1.0'
22:47:48.142 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Ignoring non-UPNP HTTP header: Date
22:47:48.142 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'USN' with class: USNRootDeviceHeader
22:47:48.142 [TRACE] [jupnp.model.message.header.UpnpHeader] - Invalid header value for tested type: USNRootDeviceHeader - Invalid root device USN header value, must start with 'uuid:' and end with '::upnp:rootdevice' but is 'uuid:429c38db-f6bf-4160-9576-bd6ee9b42d61::urn:dial-multiscreen-org:service:dial:1'
22:47:48.142 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'USN' with class: DeviceUSNHeader
22:47:48.143 [DEBUG] [g.jupnp.transport.impl.DatagramIOImpl] - UDP datagram received from: 192.168.2.10:38599 on: /192.168.2.9:0
22:47:48.143 [TRACE] [jupnp.model.message.header.UpnpHeader] - Invalid header value for tested type: DeviceUSNHeader - Invalid device USN header value, Can't parse device type string (namespace/type/version): urn:dial-multiscreen-org:service:dial:1
22:47:48.143 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'USN' with class: ServiceUSNHeader
22:47:48.143 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Adding parsed header: (ServiceUSNHeader) 'uuid:429c38db-f6bf-4160-9576-bd6ee9b42d61::urn:dial-multiscreen-org:service:dial:1'
22:47:48.143 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Ignoring non-UPNP HTTP header: Bootid.upnp.org
22:47:48.143 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Ignoring non-UPNP HTTP header: Content-length
22:47:48.143 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'MAX_AGE' with class: MaxAgeHeader
22:47:48.143 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Adding parsed header: (MaxAgeHeader) '1800'
22:47:48.143 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'LOCATION' with class: LocationHeader
22:47:48.144 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Adding parsed header: (LocationHeader) 'http://192.168.2.10:7678/nservice/'
22:47:48.144 [TRACE] [rotocol.async.ReceivingSearchResponse] - Received device search response: (RemoteDeviceIdentity) UDN: uuid:429c38db-f6bf-4160-9576-bd6ee9b42d61, Descriptor: http://192.168.2.10:7678/nservice/
22:47:48.144 [TRACE] [rotocol.async.ReceivingSearchResponse] - Skip submitting task, active retrieval for URL already in progress:http://192.168.2.10:7678/nservice/
22:47:48.140 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Ignoring non-UPNP HTTP header: Content-length
22:47:48.144 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'SERVER' with class: ServerHeader
22:47:48.144 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Adding parsed header: (ServerHeader) 'Samsung-Linux/4.1 UPnP/1.0 Samsung_UPnP_SDK/1.0'
22:47:48.144 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Ignoring non-UPNP HTTP header: Date
22:47:48.144 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'USN' with class: USNRootDeviceHeader
22:47:48.144 [TRACE] [jupnp.model.message.header.UpnpHeader] - Invalid header value for tested type: USNRootDeviceHeader - Invalid root device USN header value, must start with 'uuid:' and end with '::upnp:rootdevice' but is 'uuid:2fcbf741-f7a9-4041-bfc5-a08e4b09cd66::urn:schemas-upnp-org:service:RenderingControl:1'
22:47:48.144 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'USN' with class: DeviceUSNHeader
22:47:48.145 [TRACE] [jupnp.model.message.header.UpnpHeader] - Invalid header value for tested type: DeviceUSNHeader - Invalid device USN header value, Can't parse device type string (namespace/type/version): urn:schemas-upnp-org:service:RenderingControl:1
22:47:48.145 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'USN' with class: ServiceUSNHeader
22:47:48.145 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Adding parsed header: (ServiceUSNHeader) 'uuid:2fcbf741-f7a9-4041-bfc5-a08e4b09cd66::urn:schemas-upnp-org:service:RenderingControl:1'
22:47:48.145 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Ignoring non-UPNP HTTP header: Bootid.upnp.org
22:47:48.145 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Ignoring non-UPNP HTTP header: Content-length
22:47:48.145 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'MAX_AGE' with class: MaxAgeHeader
22:47:48.145 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Adding parsed header: (MaxAgeHeader) '1800'
22:47:48.145 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'LOCATION' with class: LocationHeader
22:47:48.145 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Adding parsed header: (LocationHeader) 'http://192.168.2.10:9197/dmr'
22:47:48.146 [TRACE] [rotocol.async.ReceivingSearchResponse] - Received device search response: (RemoteDeviceIdentity) UDN: uuid:2fcbf741-f7a9-4041-bfc5-a08e4b09cd66, Descriptor: http://192.168.2.10:9197/dmr
22:47:48.146 [TRACE] [rotocol.async.ReceivingSearchResponse] - Skip submitting task, active retrieval for URL already in progress:http://192.168.2.10:9197/dmr
22:47:48.144 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'MAX_AGE' with class: MaxAgeHeader
22:47:48.144 [TRACE] [jupnp.transport.spi.DatagramProcessor] - ===================================== DATAGRAM BEGIN ============================================
22:47:48.146 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Adding parsed header: (MaxAgeHeader) '1800'
22:47:48.146 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'LOCATION' with class: LocationHeader
22:47:48.146 [TRACE] [jupnp.transport.spi.DatagramProcessor] - HTTP/1.1 200 OK
CACHE-CONTROL: max-age=1800
DATE: Wed, 09 Feb 2022 19:47:47 GMT
EXT:
LOCATION: http://192.168.2.10:9197/dmr
SERVER: Samsung-Linux/4.1, UPnP/1.0, Samsung_UPnP_SDK/1.0
ST: urn:schemas-upnp-org:service:ConnectionManager:1
USN: uuid:2fcbf741-f7a9-4041-bfc5-a08e4b09cd66::urn:schemas-upnp-org:service:ConnectionManager:1
Content-Length: 0
BOOTID.UPNP.ORG: 4


22:47:48.146 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Adding parsed header: (LocationHeader) 'http://192.168.2.10:9197/dmr'
22:47:48.146 [TRACE] [rotocol.async.ReceivingSearchResponse] - Received device search response: (RemoteDeviceIdentity) UDN: uuid:2fcbf741-f7a9-4041-bfc5-a08e4b09cd66, Descriptor: http://192.168.2.10:9197/dmr
22:47:48.146 [TRACE] [jupnp.transport.spi.DatagramProcessor] - -===================================== DATAGRAM END =============================================
22:47:48.146 [TRACE] [rotocol.async.ReceivingSearchResponse] - Skip submitting task, active retrieval for URL already in progress:http://192.168.2.10:9197/dmr
22:47:48.147 [TRACE] [org.jupnp.protocol.ProtocolFactory   ] - Creating protocol for incoming asynchronous: (IncomingDatagramMessage) 200 OK
22:47:48.147 [DEBUG] [org.jupnp.transport.Router           ] - Received asynchronous message: (IncomingDatagramMessage) 200 OK
22:47:48.147 [DEBUG] [g.jupnp.transport.impl.DatagramIOImpl] - UDP datagram received from: 192.168.2.10:45818 on: /192.168.2.9:0
22:47:48.147 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Parsing all HTTP headers for known UPnP headers: 9
22:47:48.147 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'EXT' with class: EXTHeader
22:47:48.147 [TRACE] [jupnp.transport.spi.DatagramProcessor] - ===================================== DATAGRAM BEGIN ============================================
22:47:48.147 [TRACE] [org.jupnp.model.message.UpnpHeaders  ] - Adding parsed header: (EXTHeader) ''
22:47:48.147 [TRACE] [jupnp.model.message.header.UpnpHeader] - Trying to parse 'ST' with class: STAllHeader
22:47:48.148 [TRACE] [jupnp.transport.spi.DatagramProcessor] - HTTP/1.1 200 OK
CACHE-CONTROL: max-age=1800
DATE: Wed, 09 Feb 2022 19:47:47 GMT
EXT:
LOCATION: http://192.168.2.10:9197/dmr
SERVER: Samsung-Linux/4.1, UPnP/1.0, Samsung_UPnP_SDK/1.0
ST: urn:schemas-upnp-org:service:AVTransport:1
USN: uuid:2fcbf741-f7a9-4041-bfc5-a08e4b09cd66::urn:schemas-upnp-org:service:AVTransport:1
Content-Length: 0
BOOTID.UPNP.ORG: 4

22:47:56.938 [INFO ] [org.jupnp.transport.spi.StreamClient ] - Timeout of 10 seconds while waiting for HTTP request to complete, aborting: (StreamRequestMessage) GET http://192.168.2.10:9197/dmr
22:47:56.939 [TRACE] [org.jupnp.transport.Router           ] - Releasing router lock: ReadLock
22:47:56.940 [WARN ] [np.protocol.RetrieveRemoteDescriptors] - Device descriptor retrieval failed, no response: http://192.168.2.10:9197/dmr
22:47:56.958 [TRACE] [org.jupnp.registry.Registry          ] - Maintaining registry...
22:47:56.959 [TRACE] [org.jupnp.registry.Registry          ] - Executing pending operations: 0
22:47:56.973 [INFO ] [org.jupnp.transport.spi.StreamClient ] - Timeout of 10 seconds while waiting for HTTP request to complete, aborting: (StreamRequestMessage) GET http://192.168.2.10:7678/nservice/
22:47:56.974 [TRACE] [org.jupnp.transport.Router           ] - Releasing router lock: ReadLock
22:47:56.975 [WARN ] [np.protocol.RetrieveRemoteDescriptors] - Device descriptor retrieval failed, no response: http://192.168.2.10:7678/nservice/
22:47:56.999 [INFO ] [org.jupnp.transport.spi.StreamClient ] - Timeout of 10 seconds while waiting for HTTP request to complete, aborting: (StreamRequestMessage) GET http://192.168.2.10:9110/ip_control
22:47:57.000 [TRACE] [org.jupnp.transport.Router           ] - Releasing router lock: ReadLock
22:47:57.000 [WARN ] [np.protocol.RetrieveRemoteDescriptors] - Device descriptor retrieval failed, no response: http://192.168.2.10:9110/ip_control
22:47:57.035 [INFO ] [org.jupnp.transport.spi.StreamClient ] - Timeout of 10 seconds while waiting for HTTP request to complete, aborting: (StreamRequestMessage) GET http://192.168.2.10:9119/screen_sharing
22:47:57.036 [TRACE] [org.jupnp.transport.Router           ] - Releasing router lock: ReadLock
22:47:57.036 [WARN ] [np.protocol.RetrieveRemoteDescriptors] - Device descriptor retrieval failed, no response: http://192.168.2.10:9119/screen_sharing

@joerg_ramser ,

Got it! The actual data has a leading two byte sequence that was messing up the json decoding.

I’ve uploaded a new jar (same link) that should now work (I was able to see your “living room” anyway).
There are a lot of changes to the websocket reconnect code in this, so the websockets should automatically reconnect on error.

Test it out, and let me know if you find any more errors. I’ll tidy up the code in the meantime.

Thanks!

This was an issue that was plaguing the Sonos binding. If your network has any issues, and looses some UPNP UDP packets, then you get this timeout, and the jUPnP system then locks out any retries for 10 minutes (I think it was 10 minutes).

If your network is solid, then you don’t see the issue.

Is your TV/Openhab host hardwired to Ethernet? if not, you have a WiFi problem (apart from the jUPnP system lockout being silly).

I think there was something done to try to reduce the lock out period, but I can’t remember what. try googling the Sonos binding issue with timeouts, and see what they recommend.

I’d look into it further myself, but I have to leave for a family event…

I’ve changed retry settings to 10 seconds, TV and oh host are both on wired ethernet. The only issue with my home network is that i have at least 5 upnp devices.

5 UPNP devices shouldn’t be a problem, I have 12 (mostly Sonos speakers, but others as well).

What do you get if you use Curl to GET http://192.168.2.10:9197/dmr from your host (or docker container)?

You should get a bunch of xml back.

What is your network configuration? Router, switches etc. Do you have MDNS enabled? IGMP snooping enabled on any switch? IGMP enhancements enabled? STP enabled? any Sonos Speakers?

@Nicholas_Waterton

Nice – now its working :slight_smile:

Thank you very much.

5 routers in one mesh, tv is connected to a “slave” router, openhab - to “master”, mDNS is enabled for subnet with openhab and tv inside, IGMP snooping is disabled for wired connections, and they are both wired, IGMPv3 seems to be disabled (unsure).
Curl from container is ok:

<?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0" xmlns:pnpx="http://schemas.microsoft.com/windows/pnpx/2005/11" xmlns:df="http://schemas.microsoft.com/windows/2008/09/devicefoundation" xmlns:sec="http://www.sec.co.kr/dlna">
  <specVersion>
    <major>1</major>
    <minor>0</minor>
  </specVersion>
  <device>
    <deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType>
    <pnpx:X_compatibleId>MS_DigitalMediaDeviceClass_DMR_V001</pnpx:X_compatibleId>
    <df:X_deviceCategory>Display.TV.LCD Multimedia.DMR</df:X_deviceCategory>
    <dlna:X_DLNADOC xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMR-1.50</dlna:X_DLNADOC>
    <friendlyName>[TV] Samsung Q7 Series (55)</friendlyName>
    <manufacturer>Samsung Electronics</manufacturer>
    <manufacturerURL>http://www.samsung.com/sec</manufacturerURL>
    <modelDescription>Samsung TV DMR</modelDescription>
    <modelName>QE55Q7FNA</modelName>
    <modelNumber>AllShare1.0</modelNumber>
    <modelURL>http://www.samsung.com/sec</modelURL>
    <serialNumber>0BZJ3LMK400241H</serialNumber>
    <UDN>uuid:2fcbf741-f7a9-4041-bfc5-a08e4b09cd66</UDN>
    <iconList>
      <icon>
        <mimetype>image/jpeg</mimetype>
        <width>48</width>
        <height>48</height>
        <depth>24</depth>
        <url>/icon_SML.jpg</url>
      </icon>
      <icon>
        <mimetype>image/jpeg</mimetype>
        <width>120</width>
        <height>120</height>
        <depth>24</depth>
        <url>/icon_LRG.jpg</url>
      </icon>
      <icon>
        <mimetype>image/png</mimetype>
        <width>48</width>
        <height>48</height>
        <depth>24</depth>
        <url>/icon_SML.png</url>
      </icon>
      <icon>
        <mimetype>image/png</mimetype>
        <width>120</width>
        <height>120</height>
        <depth>24</depth>
        <url>/icon_LRG.png</url>
      </icon>
    </iconList>
    <serviceList>
      <service>
        <serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId>
        <controlURL>/upnp/control/RenderingControl1</controlURL>
        <eventSubURL>/upnp/event/RenderingControl1</eventSubURL>
        <SCPDURL>/RenderingControl_1.xml</SCPDURL>
      </service>
      <service>
        <serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
        <controlURL>/upnp/control/ConnectionManager1</controlURL>
        <eventSubURL>/upnp/event/ConnectionManager1</eventSubURL>
        <SCPDURL>/ConnectionManager_1.xml</SCPDURL>
      </service>
      <service>
        <serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:AVTransport</serviceId>
        <controlURL>/upnp/control/AVTransport1</controlURL>
        <eventSubURL>/upnp/event/AVTransport1</eventSubURL>
        <SCPDURL>/AVTransport_1.xml</SCPDURL>
      </service>
    </serviceList>
    <sec:ProductCap>Tizen,Y2018,WebURIPlayable,NavigateInPause,ScreenMirroringP2PMAC=66:1c:b0:13:e8:e7,UHD_SCREEN,SerialNumber=0BZJ3LMK400241H,vdProductType=TV,OCF=1</sec:ProductCap>
    <pnpx:X_hardwareId>VEN_0105&amp;DEV_VD0001</pnpx:X_hardwareId>
  </device>
</root>

@joerg_ramser

I figured out that the two bytes at the beginning of the binary Data are the header length.

I’ve streamlined everything, and removed the debugging code.

The new jar is uploaded to the previous link. If you don’t find any issues, I’ll upload this as the official version in a day or so.

I’d appreciate your feedback on websockets connecting/disconnecting, as I have totally reworked the websocket handling, hopefully to make it more robust.

Thanks again for all your help.