Heos (Denon) support

Hi,

New release: 0.2.0

I found another issue during favorite playback which is fixed with the latest release 0.2.0

Wire82

Hi there and many thanks to Wire82 for that great binding. Good job and i hope you will continue your work. One thing i found is that the slider will not recognize the volume till you do something with the volume slider in openhab. On startup of PaperUI slider is in 0 position.

Anyone got volume to work with alexa?

Regards
Oliver

Hi Wire82,

Really great binding - thanks a lot for developing!

I have recently got two HEOS AMPs. One has got selected as bridge and since that I see it never goes to power saving more (aka Quick Start Mode in Heos words) even if there is no music played through. Also it becomes very hot.

I am just wondering if anyone has experienced the same and what did you to get rid of this problem.

For now I am testing Heart Beat set to 30 mins (8-D) to see if it triggers Quick Start Mode in 20 mins

br,
dmitry

@dimka
Thank you dimaka. It’s good to here that the binding is working well and you are using it. :slight_smile:
About your problem. I think that this is unfortunately a normal behavior. The binding keeps the connection alive via the heart beat so that’s every change is recognized by openHAB. This also ensures that you have a quick response if you change something in openHAB. Like play pause for example. (Connecting to the HEOS system takes about 15s)
This of course keeps the Amp alive the hole time. If Denon has designed it in that way that the build in amplifier is not going to sleep (while keeping the network module up and running) the Amp will get warm.
If you now changing the heart beat to 30min and the Amp is going to sleep the binding does not recognize it until the next heart beat is send. (There is no possibility to check that in a different way). So the binding will not work anymore and response to any change.
I don’t know if the heart beat is waiking up the Amp again.
I‘m using a HEOS 7 as a bridge and so I do not have the same problem. (Haven’t tried it with my Denen AVR as a bridge)
I hope this helps a little bit and please give feedback if you encounter problems with that or other things.
Wire82

@OCB73
Thank you! :slight_smile:
I also recognize that the state is not polled from the binding if the item is defined or something else is changed within the .item file.
But after the next start of openHAB everything works as it should.
Is this the same at your system?
And is it only the volume slider?
You can normally define the volume as a slider and tag it as „Lighting“ so that Alexa knows that this item is dimmable.
Wire82

It´s not all the time, and not only the volume slider.
Sometimes it´s the power button and sometimes the slider.
But i dont´t have to restart openHAB. Mostly refreshing the page is enough.
Sometimes i have to tick the slider or button to get the correct state.

Alexa is now working with volume…thx!

Regards
Oliver

I’m waiting for the addon to become available int the public OpenHab binding repo.
I was pretty shocked reading @dimka’s message about the AVR becoming so hot and staying up all the time.
Hence my question, is this binding keeping the AVR more on then without the binding?
Just thinking how different the Heos app is polling the AVR for statuses in case it works differently…
Awesome work btw, not tested yet, but your list of features looks to cover all my needs.

Looks like bridge device works well for a while. Meaning you can play/pause sources and after it’s idled for 20 mins(heos timeouts) bridge goes into sleep mode. It still replies on ‘ping’ and you can get it play a music so it wakes up, makes kind of click like relay working and send play a music. So it runs for a while and suddenly it stops going into sleep mode and gets hot. I am going to mirror my switch port to record any traffic that might keep bridge up.

Hi there,

I’m glad to announce that I did the Pull Reqeust (#2886) for the HEOS binding within OpenHab today. So keep your fingers crossed, that it is successful. :smile:
The actual RC can be found here:


@piejanssens
@dimka Regarding the AMP I cant say much and cant do some troubleshooting because I don`t have one. But normally the binding is not doing something else than keeping the CLI up. Maybe it’s a problem on the Denon firmware.
I think that normally the HEOS App stops working after some time and reconnects if it is used.

@Kai @pfink I’m looking forward to here something from you :wink:

1 Like

Hello,
another build if the Binding is available here:

Wire82

Hi,
I’m having a couple of issues with the binding and my new Denon AVR-X1400H. The add-on version I’m using is 2.2.0.201712021012, openHAB is on version 2.2.0.

First of all after installation the receiver is not automatically being detected through PaperUI (nor HABmin). Well, no big deal, after manual definition
Bridge heos:bridge:main "HEOS Bridge" [ipAddress="192.168.178.92", name="HEOS Bridge", userName="bla@bla", password="bla"]
the bridge appears but HABmin/PeperUI wouldn’t find the player. No problem, I defined
Thing heos:player:X1400H "AVR-Receiver" [pid="X1400H", name="AVR-X1400H", model="Denon AVR-X1400H", ipAdress="192.168.178.92", type="Player"]
Remark: The suggested way of definition of the Thing within the Bridge does not work, HEOS System response failure with error code '2' and message 'ID Not Valid'.

So far so good, no more errors in openhab.log. Linking of channels to items works fine through PaperUI/HABmin.

However, it seems okay on openHAB, ie. from events.log:
Item 'heos_player_X1400H_Volume' received command 36
heos_player_X1400H_Volume changed from 23 to 36
… but nothing has any impact on the receiver. No command, no update from the receiver, just as if the receiver wouldn’t be connected at all.

Any ideas what might be wrong?

Many thanks
Thomas

@Penrose
Hi,
thanks for the feedback and using the binding.
I found at least one issue in our definition. The pid has to be the player ID the system uses internally. So you can´t use a name. The pid is just a number which has to be exactly the internal player PID. This also is the error you get if you define it as described within the readme. You have entered a not valid pid and the system can`t find it and response with the error code 2 (ID not valid). And if you now send a volume change, the system is sending it to the player with the pid X1400H which is not known.
For the auto discovery can you please check how the receiver appears within your network. In windows you should see something like ACT-xxxxx (in my case “ACT-Living Room” for my 4300H for example). If you look into the details there should be a Model section. This should be something like “Denon AVR-X1400H” in your case. I use this information to find possible bridges within the network. The manufacturer has to be “Denon”.
On other thing, after defining the bridge manually an you trigger a player search within paperUI, do you get something within the logs (on DEBUG level) like:

2017-12-23 09:05:21.712 [DEBUG] [i.DiscoveryServiceRegistryImpl:403 ] - Triggering scan for thing types ‘[heos:group, heos:player]’ on ‘HeosPlayerDiscovery’…
2017-12-23 09:05:21.713 [INFO ] [.o.b.h.i.d.HeosPlayerDiscovery:68 ] - Start scan for HEOS Player
2017-12-23 09:05:21.713 [DEBUG] [b.heos.internal.api.HeosSystem:94 ] - Sending Command: heos://player/get_players

Thanks,
Johannes

Thanks for your quick reply, @Wire82. Eventually through textual configuration I got it working. Here’s what I did:

First I removed the textual configuration of the bridge (in heos.things in my case) and added the bridge manually through PaperUI (obviously it still didn’t appear in a search). The Bridge is immediately being shown as online.

When triggering a thing search (Configuration->Things->±>HEOS Binding) search is performing but no results show up. The HEOS binding shows following log entries:

2017-12-23 18:00:13.218 [WARN ] [eclipse.jetty.servlet.ServletHandler] - 
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.AbstractMethodError: Method org/openhab/binding/heos/handler/HeosBridgeHandler.removeOlderResults(Lorg/eclipse/smarthome/config/discovery/DiscoveryService;JLjava/util/Collection;Lorg/eclipse/smarthome/core/thing/ThingUID;)Ljava/util/Collection; is abstract
	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:489) [180:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) [180:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) [180:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) [180:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) [180:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at com.eclipsesource.jaxrs.publisher.internal.ServletContainerBridge.service(ServletContainerBridge.java:76) [20:com.eclipsesource.jaxrs.publisher:5.3.1.201602281253]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:848) [93:org.eclipse.jetty.servlet:9.3.22.v20171030]
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:584) [93:org.eclipse.jetty.servlet:9.3.22.v20171030]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71) [196:org.ops4j.pax.web.pax-web-jetty:6.0.7]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) [92:org.eclipse.jetty.server:9.3.22.v20171030]
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) [90:org.eclipse.jetty.security:9.3.22.v20171030]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) [92:org.eclipse.jetty.server:9.3.22.v20171030]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180) [92:org.eclipse.jetty.server:9.3.22.v20171030]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:284) [196:org.ops4j.pax.web.pax-web-jetty:6.0.7]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512) [93:org.eclipse.jetty.servlet:9.3.22.v20171030]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) [92:org.eclipse.jetty.server:9.3.22.v20171030]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112) [92:org.eclipse.jetty.server:9.3.22.v20171030]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [92:org.eclipse.jetty.server:9.3.22.v20171030]
	at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80) [196:org.ops4j.pax.web.pax-web-jetty:6.0.7]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) [92:org.eclipse.jetty.server:9.3.22.v20171030]
	at org.eclipse.jetty.server.Server.handle(Server.java:534) [92:org.eclipse.jetty.server:9.3.22.v20171030]
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:333) [92:org.eclipse.jetty.server:9.3.22.v20171030]
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251) [92:org.eclipse.jetty.server:9.3.22.v20171030]
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283) [84:org.eclipse.jetty.io:9.3.22.v20171030]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108) [84:org.eclipse.jetty.io:9.3.22.v20171030]
	at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) [84:org.eclipse.jetty.io:9.3.22.v20171030]
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303) [95:org.eclipse.jetty.util:9.3.22.v20171030]
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148) [95:org.eclipse.jetty.util:9.3.22.v20171030]
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136) [95:org.eclipse.jetty.util:9.3.22.v20171030]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671) [95:org.eclipse.jetty.util:9.3.22.v20171030]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589) [95:org.eclipse.jetty.util:9.3.22.v20171030]
	at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: org.glassfish.jersey.server.ContainerException: java.lang.AbstractMethodError: Method org/openhab/binding/heos/handler/HeosBridgeHandler.removeOlderResults(Lorg/eclipse/smarthome/config/discovery/DiscoveryService;JLjava/util/Collection;Lorg/eclipse/smarthome/core/thing/ThingUID;)Ljava/util/Collection; is abstract
	at org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:278) ~[?:?]
	at org.glassfish.jersey.servlet.internal.ResponseWriter.failure(ResponseWriter.java:260) ~[?:?]
	at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:509) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:334) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) ~[182:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) ~[182:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:315) ~[182:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:297) ~[182:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:267) ~[182:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) ~[182:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) ~[180:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	... 31 more
Caused by: java.lang.AbstractMethodError: Method org/openhab/binding/heos/handler/HeosBridgeHandler.removeOlderResults(Lorg/eclipse/smarthome/config/discovery/DiscoveryService;JLjava/util/Collection;Lorg/eclipse/smarthome/core/thing/ThingUID;)Ljava/util/Collection; is abstract
	at org.openhab.binding.heos.handler.HeosBridgeHandler.removeOlderResults(HeosBridgeHandler.java) ~[?:?]
	at org.eclipse.smarthome.config.discovery.AbstractDiscoveryService.removeOlderResults(AbstractDiscoveryService.java:372) ~[?:?]
	at org.eclipse.smarthome.config.discovery.AbstractDiscoveryService.removeOlderResults(AbstractDiscoveryService.java:332) ~[?:?]
	at org.openhab.binding.heos.internal.discovery.HeosPlayerDiscovery.stopScan(HeosPlayerDiscovery.java:189) ~[?:?]
	at org.eclipse.smarthome.config.discovery.AbstractDiscoveryService.startScan(AbstractDiscoveryService.java:196) ~[?:?]
	at org.eclipse.smarthome.config.discovery.internal.DiscoveryServiceRegistryImpl.startScan(DiscoveryServiceRegistryImpl.java:409) ~[?:?]
	at org.eclipse.smarthome.config.discovery.internal.DiscoveryServiceRegistryImpl.startScans(DiscoveryServiceRegistryImpl.java:394) ~[?:?]
	at org.eclipse.smarthome.config.discovery.internal.DiscoveryServiceRegistryImpl.startScan(DiscoveryServiceRegistryImpl.java:241) ~[?:?]
	at org.eclipse.smarthome.io.rest.core.internal.discovery.DiscoveryResource.scan(DiscoveryResource.java:97) ~[?:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?]
	at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) ~[182:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) ~[182:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:315) ~[182:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:297) ~[182:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:267) ~[182:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) ~[182:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) ~[183:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) ~[180:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	... 31 more
2017-12-23 18:00:13.382 [WARN ] [org.eclipse.jetty.server.HttpChannel] - //raspberrypi.fritz.box:8080/rest/discovery/bindings/heos/scan
javax.servlet.ServletException: javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.AbstractMethodError: Method org/openhab/binding/heos/handler/HeosBridgeHandler.removeOlderResults(Lorg/eclipse/smarthome/config/discovery/DiscoveryService;JLjava/util/Collection;Lorg/eclipse/smarthome/core/thing/ThingUID;)Ljava/util/Collection; is abstract
	at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:88) [196:org.ops4j.pax.web.pax-web-jetty:6.0.7]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) [92:org.eclipse.jetty.server:9.3.22.v20171030]
	at org.eclipse.jetty.server.Server.handle(Server.java:534) [92:org.eclipse.jetty.server:9.3.22.v20171030]
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:333) [92:org.eclipse.jetty.server:9.3.22.v20171030]
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251) [92:org.eclipse.jetty.server:9.3.22.v20171030]
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283) [84:org.eclipse.jetty.io:9.3.22.v20171030]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108) [84:org.eclipse.jetty.io:9.3.22.v20171030]
	at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) [84:org.eclipse.jetty.io:9.3.22.v20171030]
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303) [95:org.eclipse.jetty.util:9.3.22.v20171030]
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148) [95:org.eclipse.jetty.util:9.3.22.v20171030]
	at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136) [95:org.eclipse.jetty.util:9.3.22.v20171030]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671) [95:org.eclipse.jetty.util:9.3.22.v20171030]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589) [95:org.eclipse.jetty.util:9.3.22.v20171030]
	at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.AbstractMethodError: Method org/openhab/binding/heos/handler/HeosBridgeHandler.removeOlderResults(Lorg/eclipse/smarthome/config/discovery/DiscoveryService;JLjava/util/Collection;Lorg/eclipse/smarthome/core/thing/ThingUID;)Ljava/util/Collection; is abstract
	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:489) ~[?:?]
	at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) ~[?:?]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) ~[?:?]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) ~[?:?]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) ~[?:?]
	at com.eclipsesource.jaxrs.publisher.internal.ServletContainerBridge.service(ServletContainerBridge.java:76) ~[?:?]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:848) ~[?:?]
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:584) ~[?:?]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71) ~[?:?]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[?:?]
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) ~[?:?]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) ~[?:?]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180) ~[?:?]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:284) ~[?:?]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512) ~[?:?]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) ~[?:?]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112) ~[?:?]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[?:?]
	at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80) ~[?:?]
	... 13 more
Caused by: org.glassfish.jersey.server.ContainerException: java.lang.AbstractMethodError: Method org/openhab/binding/heos/handler/HeosBridgeHandler.removeOlderResults(Lorg/eclipse/smarthome/config/discovery/DiscoveryService;JLjava/util/Collection;Lorg/eclipse/smarthome/core/thing/ThingUID;)Ljava/util/Collection; is abstract
	at org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:278) ~[?:?]
	at org.glassfish.jersey.servlet.internal.ResponseWriter.failure(ResponseWriter.java:260) ~[?:?]
	at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:509) ~[?:?]
	at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:334) ~[?:?]
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) ~[?:?]
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) ~[?:?]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:315) ~[?:?]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:297) ~[?:?]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:267) ~[?:?]
	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) ~[?:?]
	at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) ~[?:?]
	at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) ~[?:?]
	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) ~[?:?]
	at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) ~[?:?]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) ~[?:?]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) ~[?:?]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) ~[?:?]
	at com.eclipsesource.jaxrs.publisher.internal.ServletContainerBridge.service(ServletContainerBridge.java:76) ~[?:?]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:848) ~[?:?]
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:584) ~[?:?]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71) ~[?:?]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[?:?]
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) ~[?:?]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) ~[?:?]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180) ~[?:?]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:284) ~[?:?]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512) ~[?:?]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) ~[?:?]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112) ~[?:?]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[?:?]
	at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80) ~[?:?]
	... 13 more
Caused by: java.lang.AbstractMethodError: Method org/openhab/binding/heos/handler/HeosBridgeHandler.removeOlderResults(Lorg/eclipse/smarthome/config/discovery/DiscoveryService;JLjava/util/Collection;Lorg/eclipse/smarthome/core/thing/ThingUID;)Ljava/util/Collection; is abstract
	at org.openhab.binding.heos.handler.HeosBridgeHandler.removeOlderResults(HeosBridgeHandler.java) ~[?:?]
	at org.eclipse.smarthome.config.discovery.AbstractDiscoveryService.removeOlderResults(AbstractDiscoveryService.java:372) ~[?:?]
	at org.eclipse.smarthome.config.discovery.AbstractDiscoveryService.removeOlderResults(AbstractDiscoveryService.java:332) ~[?:?]
	at org.openhab.binding.heos.internal.discovery.HeosPlayerDiscovery.stopScan(HeosPlayerDiscovery.java:189) ~[?:?]
	at org.eclipse.smarthome.config.discovery.AbstractDiscoveryService.startScan(AbstractDiscoveryService.java:196) ~[?:?]
	at org.eclipse.smarthome.config.discovery.internal.DiscoveryServiceRegistryImpl.startScan(DiscoveryServiceRegistryImpl.java:409) ~[?:?]
	at org.eclipse.smarthome.config.discovery.internal.DiscoveryServiceRegistryImpl.startScans(DiscoveryServiceRegistryImpl.java:394) ~[?:?]
	at org.eclipse.smarthome.config.discovery.internal.DiscoveryServiceRegistryImpl.startScan(DiscoveryServiceRegistryImpl.java:241) ~[?:?]
	at org.eclipse.smarthome.io.rest.core.internal.discovery.DiscoveryResource.scan(DiscoveryResource.java:97) ~[?:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?]
	at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) ~[?:?]
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144) ~[?:?]
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161) ~[?:?]
	at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160) ~[?:?]
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99) ~[?:?]
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389) ~[?:?]
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347) ~[?:?]
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102) ~[?:?]
	at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326) ~[?:?]
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) ~[?:?]
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) ~[?:?]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:315) ~[?:?]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:297) ~[?:?]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:267) ~[?:?]
	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) ~[?:?]
	at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) ~[?:?]
	at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) ~[?:?]
	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) ~[?:?]
	at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) ~[?:?]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) ~[?:?]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) ~[?:?]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) ~[?:?]
	at com.eclipsesource.jaxrs.publisher.internal.ServletContainerBridge.service(ServletContainerBridge.java:76) ~[?:?]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:848) ~[?:?]
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:584) ~[?:?]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71) ~[?:?]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[?:?]
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) ~[?:?]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) ~[?:?]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180) ~[?:?]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:284) ~[?:?]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512) ~[?:?]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) ~[?:?]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112) ~[?:?]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[?:?]
	at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80) ~[?:?]
	... 13 more

Other than that, DEBUG entries look fine:

2017-12-23 18:00:16.260 [DEBUG] [nding.heos.handler.HeosBridgeHandler] - HEOS event response: {"heos": {"command": "event/player_now_playing_progress", "message": "pid=-577038&cur_pos=408000&duration=0"}}
2017-12-23 18:00:20.987 [DEBUG] [binding.heos.internal.api.HeosSystem] - Sending Heos Heart Beat
2017-12-23 18:00:21.007 [DEBUG] [nding.heos.handler.HeosBridgeHandler] - HEOS send response: {"heos": {"command": "system/heart_beat", "result": "success", "message": ""}}
2017-12-23 18:00:21.282 [DEBUG] [nding.heos.handler.HeosBridgeHandler] - HEOS event response: {"heos": {"command": "event/player_now_playing_progress", "message": "pid=-577038&cur_pos=413000&duration=0"}}
2017-12-23 18:00:23.892 [DEBUG] [nding.heos.handler.HeosBridgeHandler] - HEOS event response: {"heos": {"command": "event/player_now_playing_changed", "message": "pid=-577038"}}
2017-12-23 18:00:23.894 [DEBUG] [binding.heos.internal.api.HeosSystem] - Sending Command: heos://player/get_now_playing_media?pid=-577038
2017-12-23 18:00:23.922 [DEBUG] [nding.heos.handler.HeosBridgeHandler] - HEOS send response: {"heos": {"command": "player/get_now_playing_media", "result": "success", "message": "pid=-577038"}, "payload": {"type": "station", "song": "Nachrichten", "station": "Deutschlandfunk", "album": "", "artist": "Deutschlandfunk-Nachrichtenredaktion", "image_url": "http://cdn-profiles.tunein.com/s42828/images/logoq.png?t=636292", "album_id": "s42828", "mid": "http://dradio-dlf-live.cast.addradio.de/dradio/dlf/live/mp3/128/stream.mp3?ar-distributor=f0a1", "qid": 1, "sid": 3}, "options": [{"play": [{"id": 19, "name": "Add to HEOS Favorites"}]}]}
2017-12-23 18:00:26.246 [DEBUG] [nding.heos.handler.HeosBridgeHandler] - HEOS event response: {"heos": {"command": "event/player_now_playing_progress", "message": "pid=-577038&cur_pos=418000&duration=0"}}
2017-12-23 18:00:31.246 [DEBUG] [nding.heos.handler.HeosBridgeHandler] - HEOS event response: {"heos": {"command": "event/player_now_playing_progress", "message": "pid=-577038&cur_pos=423000&duration=0"}}

However, I figured out the player ID by doing a telnet to the receiver to port 1255 and executed heos://player/get_players which provided more details incl. the pid which is (surprisingly at least for me) a negative 6-digit number. I deleted the previously manually added Bridge and edited my heos.things accordingly. Both Bridge and Player appeared as online in PaperUI and the first two Items added to my sitemap are working. Yeah! Many thanks for your help.

If you want me to provide more debug info in order to go into more detail re the auto discover procedure, please drop me a note.

Wish you a merry Christmas!
Thomas

@Penrose

Thanks for the log! This helps me to find an possible issue with the build. It seems that something is wrong with the removeOlderResults() function within the BridgeHandler. I reworked the implementation and released a new version which can be found here:
Can you check if the problem is solved with the change?

Good idea to get the player pid with a telnet connection. I forgot to mention this.
Yes I also find it a little bit strange to have negative PIDs. During the beginning, this also caused some trouble with the binding. My HEOS only have positive pids…
Thanks and regards,
Johannes

@Wire82, wow, what a speed, thanks so much. Your changes look good:

2017-12-23 22:29:42.564 [INFO ] [ternal.discovery.HeosPlayerDiscovery] - Start scan for HEOS Player
2017-12-23 22:29:42.579 [INFO ] [ternal.discovery.HeosPlayerDiscovery] - Found: 1 new Player
2017-12-23 22:29:42.589 [INFO ] [g.discovery.internal.PersistentInbox] - Added new thing 'heos:player:-577038' to inbox.
2017-12-23 22:29:42.594 [INFO ] [ternal.discovery.HeosPlayerDiscovery] - Start scan for HEOS Groups
2017-12-23 22:29:42.601 [INFO ] [ternal.discovery.HeosPlayerDiscovery] - No HEOS Groups found
2017-12-23 22:30:02.078 [INFO ] [nding.heos.handler.HeosBridgeHandler] - Inizialize child handler for: -577038.

Different question: Isn’t there any command to switch the player off? “Pause” apparently doesn’t switch off the receiver.

Thanks
Thomas

@Penrose

that sounds good! I did another change and now also the Bridge discovery should work again with openhab 2.2.0.
For switching ON and OFF the receiver unfortunately there is no command provided by Denon via the CLI. I think you have to use the Denon binding for that. I know that it is currently reworked to work with the new receivers again. :slight_smile:
The new release of the binding will be attached below.

Wire82

Hi

the latest release can be found here:

Changes:

  • Fixed an issue with auto discovery of the Player within the network (upnp) on OpenHab 2.2.0

Wire82

1 Like

@Wire82 fyi, I get an error once starting the bundle:

Error executing command: Error executing command on bundles:
	Error starting bundle 243: Could not resolve module: org.openhab.binding.heos [243]
  Unresolved requirement: Import-Package: org.eclipse.jdt.annotation; resolution:="optional"
  Unresolved requirement: Import-Package: org.eclipse.smarthome.config.discovery.upnp

Regarding the ON/OFF switch I now use the new Denon/Marantz 2.0 Binding which works pretty fine.

Thomas

@Penrose

Yes I also noticed that. I´m working on it. If you want to get the binding started a workaround is to install the hue binding. After that the binding starts correctly.

Wire82

Hi,

Today I installed the Heos binding (to control my Denon AVR-X1400H). I must say the installation went pretty smooth. I really like the dynamic channels. It discovered my Heos Favorites!

I use this binding in combination with the new Denon/Marantz binding. I use the Denon-binding to power on/off my AVR and the Heos binding to start playing my webradio.

Keep up the good work! Thanks!

1 Like