XBMC binding goes in ERROR when XBMC is offline

Hi

When XBMC/Kodi is online the binding works perfectly.
But when it goes offline, it causes ERROR messages and the volume, title, etc… strings stay on the old state. This makes it hard to make rules based on this. This is in OpenHab 1.7.1.

Log file:

2015-10-28 08:20:30.167 [DEBUG] [.b.xbmc.internal.XbmcActivator] - XBMC binding has been started
2015-10-28 08:20:30.196 [TRACE] [b.x.internal.XbmcActiveBinding] - Attempting to access the named instance ‘livingRoom’ before the binding config has been loaded
2015-10-28 08:20:30.197 [TRACE] [b.x.internal.XbmcActiveBinding] - Attempting to access the named instance ‘livingRoom’ before the binding config has been loaded
2015-10-28 08:20:30.197 [TRACE] [b.x.internal.XbmcActiveBinding] - Attempting to access the named instance ‘livingRoom’ before the binding config has been loaded
2015-10-28 08:20:30.197 [DEBUG] [b.x.internal.XbmcActiveBinding] - XBMC Refresh Service activate()
2015-10-28 08:20:30.198 [INFO ] [.service.AbstractActiveService] - XBMC Refresh Service has been started
2015-10-28 08:20:30.198 [DEBUG] [b.x.internal.XbmcActiveBinding] - XBMC Refresh Service updated()
2015-10-28 08:20:30.200 [DEBUG] [b.x.internal.XbmcActiveBinding] - Creating new XbmcConnector for ‘#livingRoom’ on 10.0.0.104
2015-10-28 08:20:33.837 [DEBUG] [binding.xbmc.rpc.XbmcConnector] - [10.0.0.104]: Websocket connection error
2015-10-28 08:20:33.838 [ERROR] [b.x.internal.XbmcActiveBinding] - Connection failed for ‘#livingRoom’ on 10.0.0.104
2015-10-28 08:20:36.843 [ERROR] [enhab.binding.xbmc.rpc.RpcCall] - Error handling POST response from XBMC
java.net.ConnectException: No route to host to http://10.0.0.104:80/jsonrpc
at com.ning.http.client.providers.netty.NettyConnectListener.operationComplete(NettyConnectListener.java:103) ~[async-http-client-1.8.4.jar:na]
at org.jboss.netty.channel.DefaultChannelFuture.notifyListener(DefaultChannelFuture.java:427) [netty-3.9.0.Final.jar:na]
at org.jboss.netty.channel.DefaultChannelFuture.notifyListeners(DefaultChannelFuture.java:418) [netty-3.9.0.Final.jar:na]
at org.jboss.netty.channel.DefaultChannelFuture.setFailure(DefaultChannelFuture.java:380) [netty-3.9.0.Final.jar:na]
at org.jboss.netty.channel.socket.nio.NioClientBoss.processSelectedKeys(NioClientBoss.java:109) [netty-3.9.0.Final.jar:na]
at org.jboss.netty.channel.socket.nio.NioClientBoss.process(NioClientBoss.java:79) [netty-3.9.0.Final.jar:na]
at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318) [netty-3.9.0.Final.jar:na]
at org.jboss.netty.channel.socket.nio.NioClientBoss.run(NioClientBoss.java:42) [netty-3.9.0.Final.jar:na]
at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) [netty-3.9.0.Final.jar:na]
at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) [netty-3.9.0.Final.jar:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_79]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_79]
at java.lang.Thread.run(Thread.java:745) [na:1.7.0_79]
Caused by: java.net.NoRouteToHostException: No route to host
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.7.0_79]
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:740) ~[na:1.7.0_79]
at org.jboss.netty.channel.socket.nio.NioClientBoss.connect(NioClientBoss.java:150) [netty-3.9.0.Final.jar:na]
at org.jboss.netty.channel.socket.nio.NioClientBoss.processSelectedKeys(NioClientBoss.java:105) [netty-3.9.0.Final.jar:na]
… 8 common frames omitted
2015-10-28 08:20:36.847 [WARN ] [b.x.internal.XbmcActiveBinding] - Received update (0) for item Kodi_volume but the connection to the XBMC instance #livingRoom is down, ignoring
2015-10-28 08:21:30.199 [DEBUG] [b.x.internal.XbmcActiveBinding] - Broken connection found for ‘#livingRoom’, attempting to reconnect…
2015-10-28 08:21:33.197 [DEBUG] [binding.xbmc.rpc.XbmcConnector] - [10.0.0.104]: Websocket connection error
2015-10-28 08:21:33.198 [DEBUG] [b.x.internal.XbmcActiveBinding] - Reconnect failed for ‘#livingRoom’, will retry in 60s
2015-10-28 08:22:33.199 [DEBUG] [b.x.internal.XbmcActiveBinding] - Broken connection found for ‘#livingRoom’, attempting to reconnect…
2015-10-28 08:22:36.202 [DEBUG] [binding.xbmc.rpc.XbmcConnector] - [10.0.0.104]: Websocket connection error
2015-10-28 08:22:36.202 [DEBUG] [b.x.internal.XbmcActiveBinding] - Reconnect failed for ‘#livingRoom’, will retry in 60s
2015-10-28 08:23:36.203 [DEBUG] [b.x.internal.XbmcActiveBinding] - Broken connection found for ‘#livingRoom’, attempting to reconnect…
2015-10-28 08:23:39.206 [DEBUG] [binding.xbmc.rpc.XbmcConnector] - [10.0.0.104]: Websocket connection error
2015-10-28 08:23:39.206 [DEBUG] [b.x.internal.XbmcActiveBinding] - Reconnect failed for ‘#livingRoom’, will retry in 60s

I don’t know if there is a way to solve this from within the XMBC binding itself (I don’t use it) but you can create a Network Health Switch for 10.0.0.104 and when your XMBC device goes offline (the switch will turn to off) reset the volume, title, etc to a default state and turn off any rules that expect XMBC to be on by checking the state of the NH switch before executing.

I have a flakey Raspberry Pi that I do this for and it works quite well.

1 Like

Great tip, thanks!