eclipse-archived / smarthome

Eclipse SmartHome™ project
https://www.eclipse.org/smarthome/
Eclipse Public License 2.0
861 stars 784 forks source link

Bose Soundtouch Binding XML parsing errors #5684

Open DerGute opened 6 years ago

DerGute commented 6 years ago

Hi! Have an Soundtouch 300 and i would like to switch the input. Ive read all the replies relating to this case but i did not find any solution. I installed the Binding from the GUI in 2.3.0.

Added Soundtouch 300 via things:

all the items for the thing:

Dimmer  Soundtouch_Volume                     "Volume: [%d %%]"      <volume>      { channel="bosesoundtouch:300:Soundtouch300:volume" }
Number  Soundtouch_Bass                       "Bass: [%d %%]"        <volume>      { channel="bosesoundtouch:300:Soundtouch300:bass" }
Switch  Soundtouch_Mute                       "Mute: [%s]"           <volume_mute> { channel="bosesoundtouch:300:Soundtouch300:mute" }
String  Soundtouch_OperationMode              "OperationMode: [%s]"  <text>        { channel="bosesoundtouch:300:Soundtouch300:operationMode" }
String  Soundtouch_PlayerControl              "Player Control: [%s]" <text>        { channel="bosesoundtouch:300:Soundtouch300:playerControl" }
String  Soundtouch_ZoneAdd                    "Zone add: [%s]"       <text>        { channel="bosesoundtouch:300:Soundtouch300:zoneAdd" }
String  Soundtouch_ZoneRemove                 "Zone remove: [%s]"    <text>        { channel="bosesoundtouch:300:Soundtouch300:zoneRemove" }
Number  Soundtouch_Preset                     "Preset: [%d]"         <text>        { channel="bosesoundtouch:300:Soundtouch300:preset" }
String  Soundtouch_PresetControl              "Preset Control: [%s]" <text>        { channel="bosesoundtouch:300:Soundtouch300:presetControl" }
Number  Soundtouch_SaveAsPreset               "Save as Preset: [%d]" <text>        { channel="bosesoundtouch:300:Soundtouch300:saveAsPreset" }
String  Soundtouch_KeyCode                    "Key Code: [%s]"       <text>        { channel="bosesoundtouch:300:Soundtouch300:keyCode" }
String  Soundtouch_ZoneInfo                   "Zone Info: [%s]"      <text>        { channel="bosesoundtouch:300:Soundtouch300:zoneInfo", autoupdate="false" }
Switch  Soundtouch_RateEnabled                "Rate: [%s]"           <switch>      { channel="bosesoundtouch:300:Soundtouch300:rateEnabled" }
Switch  Soundtouch_SkipEnabled                "Skip: [%s]"           <switch>      { channel="bosesoundtouch:300:Soundtouch300:skipEnabled" }
Switch  Soundtouch_SkipPreviousEnabled        "SkipPrevious: [%s]"   <switch>      { channel="bosesoundtouch:300:Soundtouch300:skipPreviousEnabled" }
String  Soundtouch_nowPlayingAlbum            "Album: [%s]"          <text>        { channel="bosesoundtouch:300:Soundtouch300:nowPlayingAlbum" }
String  Soundtouch_nowPlayingArtist           "Artist: [%s]"         <text>        { channel="bosesoundtouch:300:Soundtouch300:nowPlayingArtist" }
String  Soundtouch_nowPlayingArtwork          "Art: [%s]"            <text>        { channel="bosesoundtouch:300:Soundtouch300:nowPlayingArtwork" }
String  Soundtouch_nowPlayingDescription      "Description: [%s]"    <text>        { channel="bosesoundtouch:300:Soundtouch300:nowPlayingDescription" }
String  Soundtouch_nowPlayingGenre            "Genre: [%s]"          <text>        { channel="bosesoundtouch:300:Soundtouch300:nowPlayingGenre" }
String  Soundtouch_nowPlayingItemName         "Playing: [%s]"        <text>        { channel="bosesoundtouch:300:Soundtouch300:nowPlayingItemName" }
String  Soundtouch_nowPlayingStationLocation  "Radio Location: [%s]" <text>        { channel="bosesoundtouch:300:Soundtouch300:nowPlayingStationLocation" }
String  Soundtouch_nowPlayingStationName      "Radio Name: [%s]"     <text>        { channel="bosesoundtouch:300:Soundtouch300:nowPlayingStationName" }
String  Soundtouch_nowPlayingTrack            "Track: [%s]"          <text>        { channel="bosesoundtouch:300:Soundtouch300:nowPlayingTrack" }

When i try to set Soundtouch_OperationMode to PRODUCT or to BLUETOOTH it simply not works, with the following output in Logfile:

java.lang.NullPointerException: null
        at org.eclipse.smarthome.binding.bosesoundtouch.internal.ContentItem.isValid(ContentItem.java:74) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at org.eclipse.smarthome.binding.bosesoundtouch.internal.CommandExecutor.setCurrentContentItem(CommandExecutor.java:114) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at org.eclipse.smarthome.binding.bosesoundtouch.internal.CommandExecutor.postContentItem(CommandExecutor.java:342) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at org.eclipse.smarthome.binding.bosesoundtouch.internal.CommandExecutor.postOperationMode(CommandExecutor.java:172) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at org.eclipse.smarthome.binding.bosesoundtouch.handler.BoseSoundTouchHandler.handleCommand(BoseSoundTouchHandler.java:185) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        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.eclipse.smarthome.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:153) [101:org.eclipse.smarthome.core:0.10.0.oh230]
        at org.eclipse.smarthome.core.internal.common.InvocationHandlerSync.invoke(InvocationHandlerSync.java:59) [101:org.eclipse.smarthome.core:0.10.0.oh230]
        at com.sun.proxy.$Proxy149.handleCommand(Unknown Source) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at org.eclipse.smarthome.core.thing.internal.profiles.ProfileCallbackImpl.handleCommand(ProfileCallbackImpl.java:75) [108:org.eclipse.smarthome.core.thing:0.10.0.oh230]
        at org.eclipse.smarthome.core.thing.internal.profiles.SystemDefaultProfile.onCommandFromItem(SystemDefaultProfile.java:49) [108:org.eclipse.smarthome.core.thing:0.10.0.oh230]
        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.eclipse.smarthome.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:153) [101:org.eclipse.smarthome.core:0.10.0.oh230]
        at org.eclipse.smarthome.core.internal.common.Invocation.call(Invocation.java:53) [101:org.eclipse.smarthome.core:0.10.0.oh230]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:?]
        at java.lang.Thread.run(Thread.java:748) [?:?]
2018-06-03 21:29:44.917 [WARN ] [dtouch.handler.BoseSoundTouchHandler] - SoundTouch 300: OperationMode "PRODUCT" is not valid!

this error appears consequently in openhab.log:

java.lang.NullPointerException: null
        at org.eclipse.smarthome.binding.bosesoundtouch.internal.ContentItem.isValid(ContentItem.java:74) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at org.eclipse.smarthome.binding.bosesoundtouch.internal.CommandExecutor.setCurrentContentItem(CommandExecutor.java:114) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at org.eclipse.smarthome.binding.bosesoundtouch.internal.XMLResponseHandler.endElement(XMLResponseHandler.java:367) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:609) [?:?]
        at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:183) [?:?]
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:351) [?:?]
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2784) [?:?]
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602) [?:?]
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112) [?:?]
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505) [?:?]
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:841) [?:?]
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770) [?:?]
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) [?:?]
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) [?:?]
        at org.eclipse.smarthome.binding.bosesoundtouch.internal.XMLResponseProcessor.handleMessage(XMLResponseProcessor.java:45) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at org.eclipse.smarthome.binding.bosesoundtouch.handler.BoseSoundTouchHandler.onWebSocketText(BoseSoundTouchHandler.java:350) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextMessage(JettyListenerEventDriver.java:189) [92:org.eclipse.jetty.websocket.common:9.3.21.v20170918]
        at org.eclipse.jetty.websocket.common.message.SimpleTextMessage.messageComplete(SimpleTextMessage.java:69) [92:org.eclipse.jetty.websocket.common:9.3.21.v20170918]
        at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.appendMessage(AbstractEventDriver.java:66) [92:org.eclipse.jetty.websocket.common:9.3.21.v20170918]
        at org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextFrame(JettyListenerEventDriver.java:158) [92:org.eclipse.jetty.websocket.common:9.3.21.v20170918]
        at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.incomingFrame(AbstractEventDriver.java:162) [92:org.eclipse.jetty.websocket.common:9.3.21.v20170918]
        at org.eclipse.jetty.websocket.common.WebSocketSession.incomingFrame(WebSocketSession.java:376) [92:org.eclipse.jetty.websocket.common:9.3.21.v20170918]
        at org.eclipse.jetty.websocket.common.extensions.ExtensionStack.incomingFrame(ExtensionStack.java:220) [92:org.eclipse.jetty.websocket.common:9.3.21.v20170918]
        at org.eclipse.jetty.websocket.common.Parser.notifyFrame(Parser.java:220) [92:org.eclipse.jetty.websocket.common:9.3.21.v20170918]
        at org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:256) [92:org.eclipse.jetty.websocket.common:9.3.21.v20170918]
        at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.readParse(AbstractWebSocketConnection.java:679) [92:org.eclipse.jetty.websocket.common:9.3.21.v20170918]
        at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:511) [92:org.eclipse.jetty.websocket.common:9.3.21.v20170918]
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283) [76:org.eclipse.jetty.io:9.3.21.v20170918]
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108) [76:org.eclipse.jetty.io:9.3.21.v20170918]
        at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) [76:org.eclipse.jetty.io:9.3.21.v20170918]
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303) [87:org.eclipse.jetty.util:9.3.21.v20170918]
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148) [87:org.eclipse.jetty.util:9.3.21.v20170918]
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136) [87:org.eclipse.jetty.util:9.3.21.v20170918]
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671) [87:org.eclipse.jetty.util:9.3.21.v20170918]
        at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589) [87:org.eclipse.jetty.util:9.3.21.v20170918]
        at java.lang.Thread.run(Thread.java:748) [?:?]

Via Bose API i can switch inputs without any problem.

Best regards

triller-telekom commented 6 years ago

Could you please put your file contents and stack traces into ``` ``` so they become more readable?

According to

https://github.com/eclipse/smarthome/blob/449ed129dec949508e89db0aeabf1b5be91a6960/extensions/binding/org.eclipse.smarthome.binding.bosesoundtouch/src/main/java/org/eclipse/smarthome/binding/bosesoundtouch/internal/OperationModeType.java#L21-L40

the mode PRODUCT is not implemented. BLUETOOTH should work though. Which error message do you get with the setting BLUETOOTH?

Nevertheless the NPE should not occur and I have fixed at least that one in PR #5685

DerGute commented 6 years ago

Thanks for the Fix. When i try to BLUETOOTH, the following is readable in openhab Log:

2018-06-05 23:38:58.980 [ERROR] [nal.common.AbstractInvocationHandler] - An error occurred while calling method 'ThingHandler.handleCommand()' on 'org.eclipse.smarthome.binding.bosesoundtouch.handler.BoseSoundTouchHandler@28980cbe': null
java.lang.NullPointerException: null
        at org.eclipse.smarthome.binding.bosesoundtouch.internal.ContentItem.isValid(ContentItem.java:74) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at org.eclipse.smarthome.binding.bosesoundtouch.internal.CommandExecutor.setCurrentContentItem(CommandExecutor.java:114) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at org.eclipse.smarthome.binding.bosesoundtouch.internal.CommandExecutor.postContentItem(CommandExecutor.java:342) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at org.eclipse.smarthome.binding.bosesoundtouch.internal.CommandExecutor.postOperationMode(CommandExecutor.java:172) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at org.eclipse.smarthome.binding.bosesoundtouch.handler.BoseSoundTouchHandler.handleCommand(BoseSoundTouchHandler.java:185) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at sun.reflect.GeneratedMethodAccessor100.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?]
        at org.eclipse.smarthome.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:153) [101:org.eclipse.smarthome.core:0.10.0.oh230]
        at org.eclipse.smarthome.core.internal.common.InvocationHandlerSync.invoke(InvocationHandlerSync.java:59) [101:org.eclipse.smarthome.core:0.10.0.oh230]
        at com.sun.proxy.$Proxy142.handleCommand(Unknown Source) [232:org.eclipse.smarthome.binding.bosesoundtouch:0.10.0.oh230]
        at org.eclipse.smarthome.core.thing.internal.profiles.ProfileCallbackImpl.handleCommand(ProfileCallbackImpl.java:75) [108:org.eclipse.smarthome.core.thing:0.10.0.oh230]
        at org.eclipse.smarthome.core.thing.internal.profiles.SystemDefaultProfile.onCommandFromItem(SystemDefaultProfile.java:49) [108:org.eclipse.smarthome.core.thing:0.10.0.oh230]
        at sun.reflect.GeneratedMethodAccessor99.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?]
        at org.eclipse.smarthome.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:153) [101:org.eclipse.smarthome.core:0.10.0.oh230]
        at org.eclipse.smarthome.core.internal.common.Invocation.call(Invocation.java:53) [101:org.eclipse.smarthome.core:0.10.0.oh230]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:?]
        at java.lang.Thread.run(Thread.java:748) [?:?]
2018-06-05 23:39:04.702 [WARN ] [esoundtouch.internal.CommandExecutor] - SoundTouch 300: OperationMode "BLUETOOTH" is not supported yet

I dont think the NPE has something to do with

OperationMode "BLUETOOTH" is not supported yet

But i found some other errors that are appearing in openhab.log without any idea why they are coming. I dont know if your Fix touches these, too:

2018-06-05 23:48:48.873 [WARN ] [dtouch.handler.BoseSoundTouchHandler] - SoundTouch 300: Could not parse XML from string '<updates deviceID="C4F3129FF042"><nowPlayingUpdated><nowPlaying deviceID="C4F3129FF042" source="PRODUCT" sourceAccount="TV"><ContentItem source="PRODUCT" sourceAccount="TV" isPresetable="false" /><art artImageStatus="SHOW_DEFAULT_IMAGE" /><playStatus>PLAY_STATE</playStatus></nowPlaying></nowPlayingUpdated></updates>'.
java.lang.NullPointerException: null
HttpConnectionOverHTTP@7e4c7ac1(l:/192.168.2.81:58230 <-> r:/192.168.2.26:8001,closed=false)[HttpChannelOverHTTP@2a83092a(exchange=HttpExchange@57070a2f req=TERMINATED/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@6dfad814(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@707d3d18{s=START}],recv=HttpReceiverOverHTTP@4285a064(rsp=IDLE,failure=null)[HttpParser{s=CLOSED,0 of -1}]]]
2018-06-05 23:48:56.157 [WARN ] [dtouch.handler.BoseSoundTouchHandler] - SoundTouch 300: Could not parse XML from string '<updates deviceID="C4F3129FF042"><nowPlayingUpdated><nowPlaying deviceID="C4F3129FF042" source="PRODUCT" sourceAccount="HDMI_1"><ContentItem source="PRODUCT" sourceAccount="HDMI_1" isPresetable="false" /><art artImageStatus="SHOW_DEFAULT_IMAGE" /><playStatus>PLAY_STATE</playStatus></nowPlaying></nowPlayingUpdated></updates>'.
java.lang.NullPointerException: null
2018-06-05 23:48:58.870 [WARN ] [dtouch.handler.BoseSoundTouchHandler] - SoundTouch 300: Could not parse XML from string '<updates deviceID="C4F3129FF042"><nowPlayingUpdated><nowPlaying deviceID="C4F3129FF042" source="PRODUCT" sourceAccount="TV"><ContentItem source="PRODUCT" sourceAccount="TV" isPresetable="false" /><art artImageStatus="SHOW_DEFAULT_IMAGE" /><playStatus>PLAY_STATE</playStatus></nowPlaying></nowPlayingUpdated></updates>'.
java.lang.NullPointerException: null
2018-06-05 23:49:20.127 [WARN ] [dtouch.handler.BoseSoundTouchHandler] - SoundTouch 300: Could not parse XML from string '<updates deviceID="C4F3129FF042"><nowPlayingUpdated><nowPlaying deviceID="C4F3129FF042" source="PRODUCT" sourceAccount="HDMI_1"><ContentItem source="PRODUCT" sourceAccount="HDMI_1" isPresetable="false" /><art artImageStatus="SHOW_DEFAULT_IMAGE" /><playStatus>PLAY_STATE</playStatus></nowPlaying></nowPlayingUpdated></updates>'.
java.lang.NullPointerException: null

As workaround i made a script which changes to bluetooth and to TV via Bose api. this curl works for me properly:

#for switch to TV soundtouch 300
 curl --request POST --header "Content-Type: text/xml" --data '<ContentItem source="PRODUCT" sourceAccount="TV"></ContentItem>' http://192.168.2.88:8090/select
#for switch to BLUETOOTH soundtouch 300
 curl --request POST --header "Content-Type: text/xml" --data '<ContentItem source="BLUETOOTH"></ContentItem>' http://192.168.2.88:8090/select

it would be great if this could be implemented.

Best regards.

triller-telekom commented 6 years ago

I did some further debugging with a device and the reason why it says "bluetooth is not supported is this:

<sources deviceID="0CB2B7E967E6">
    <sourceItem source="AUX" sourceAccount="AUX" status="READY" isLocal="true" multiroomallowed="true">AUX IN</sourceItem>
    <sourceItem source="INTERNET_RADIO" status="READY" isLocal="false" multiroomallowed="true" /><sourceItem source="NOTIFICATION" status="UNAVAILABLE" isLocal="false" multiroomallowed="true" />
    <sourceItem source="UPNP" sourceAccount="UPnPUserName" status="UNAVAILABLE" isLocal="false" multiroomallowed="true">UPnPUserName</sourceItem>
    <sourceItem source="STORED_MUSIC_MEDIA_RENDERER" sourceAccount="StoredMusicUserName" status="UNAVAILABLE" isLocal="false" multiroomallowed="true">StoredMusicUserName</sourceItem>
    <sourceItem source="SPOTIFY" status="UNAVAILABLE" isLocal="false" multiroomallowed="true" /><sourceItem source="QPLAY" sourceAccount="QPlay1UserName" status="UNAVAILABLE" isLocal="true" multiroomallowed="true">QPlay1UserName</sourceItem>
    <sourceItem source="QPLAY" sourceAccount="QPlay2UserName" status="UNAVAILABLE" isLocal="true" multiroomallowed="true">QPlay2UserName</sourceItem>
    <sourceItem source="BLUETOOTH" status="UNAVAILABLE" isLocal="true" multiroomallowed="true" />
    <sourceItem source="ALEXA" status="READY" isLocal="false" multiroomallowed="true" /><sourceItem source="TUNEIN" status="READY" isLocal="false" multiroomallowed="true" />
</sources></body></msg>

Is announces status="UNAVAILABLE" for bluetooth which makes the binding assume that it is not supported. Even if I connect my phone to the Soundtouch 20 via bluetooth, I get the same announcement about the sources. I don't know why it says "unavailable"...

triller-telekom commented 6 years ago

@tratho Since a lot of code is from you, would you like to have a look at it? @ivivanov-bg You have added the notification support to this binding recently. Did you notice this issue as well and would you like to have a look at it?

tratho commented 6 years ago

@triller-telekom i'm in holydays this and next week, i'll have a look on it if it isn't fixed until then. it's quite a long time i did the last update to the binding. so i'm not really sure at the moment, what could cause the problem

triller-telekom commented 6 years ago

Thanks for volunteering to have a look, enjoy your vacation!

tratho commented 6 years ago

@triller-telekom i now had a look on it. Your are totally right, the reason is, that the status="UNAVAILABLE". The main question is, why it says so. In my pov the binding works right, in that case. Why should the binding switch to an source, that is is marked as unavailable!?

dominicdesu commented 5 years ago

Hi, I can confirm that the status of bluetooth shows as UNAVAILABLE, independent of the speaker (Soundtouch 10) being off, on, bluetooth connected or music playing. It is always UNAVAILABLE.

Unfortunately, the Bose Soundtouch API docs don't describe what UNAVAILABLE exactly means. However, it seems that the existing sources are the ones which are listed in the sources XML, so it might be okay to ignore the status content. To be on the safe side, this could be asked in the bose developer forums?

My sources XML:

<sources deviceID="xxxx">
<sourceItem source="AUX" sourceAccount="AUX" status="READY" isLocal="true" multiroomallowed="true">AUX IN</sourceItem>
<sourceItem source="STORED_MUSIC" sourceAccount="xxx" status="READY" isLocal="false" multiroomallowed="true">DiskStation</sourceItem>
<sourceItem source="INTERNET_RADIO" status="READY" isLocal="false" multiroomallowed="true"/>
<sourceItem source="BLUETOOTH" status="UNAVAILABLE" isLocal="true" multiroomallowed="true"/>
<sourceItem source="STORED_MUSIC_MEDIA_RENDERER" sourceAccount="StoredMusicUserName" status="UNAVAILABLE" isLocal="false" multiroomallowed="true">StoredMusicUserName</sourceItem>
<sourceItem source="UPNP" sourceAccount="UPnPUserName" status="UNAVAILABLE" isLocal="false" multiroomallowed="true">UPnPUserName</sourceItem>
<sourceItem source="QPLAY" sourceAccount="QPlay1UserName" status="UNAVAILABLE" isLocal="true" multiroomallowed="true">QPlay1UserName</sourceItem>
<sourceItem source="QPLAY" sourceAccount="QPlay2UserName" status="UNAVAILABLE" isLocal="true" multiroomallowed="true">QPlay2UserName</sourceItem>
<sourceItem source="NOTIFICATION" status="UNAVAILABLE" isLocal="false" multiroomallowed="true"/>
<sourceItem source="SPOTIFY" status="UNAVAILABLE" isLocal="false" multiroomallowed="true"/>
<sourceItem source="ALEXA" status="READY" isLocal="false" multiroomallowed="true"/>
<sourceItem source="TUNEIN" status="READY" isLocal="false" multiroomallowed="true"/>
</sources>
amrheing commented 5 years ago

Hello, I only installed and added a thing. then I got this error after some time running Openhab.

the thing:

Thing bosesoundtouch:10:bose_kueche [ host="172.52.10.91", macAddress="e0e5cf7e2143" ]

The error from Openhab.log

2019-01-25 16:29:19.572 [INFO ] [g.discovery.internal.PersistentInbox] - Added new thing 'bosesoundtouch:10:689E1949E305' to inbox. 2019-01-25 16:29:21.115 [WARN ] [undtouch.internal.XMLResponseHandler] - null: Wrong device-ID in entity 'info': Got: '689E1949E305', expected: 'e0e5cf7e2143' 2019-01-25 16:29:21.119 [ERROR] [ome.core.thing.link.ThingLinkManager] - Exception occurred while informing handler: Blocking message pending 10000 for BLOCKING java.lang.IllegalStateException: Blocking message pending 10000 for BLOCKING at org.eclipse.jetty.websocket.common.WebSocketRemoteEndpoint.lockMsg(WebSocketRemoteEndpoint.java:130) ~[?:?] at org.eclipse.jetty.websocket.common.WebSocketRemoteEndpoint.sendString(WebSocketRemoteEndpoint.java:386) ~[?:?] at org.eclipse.smarthome.binding.bosesoundtouch.internal.CommandExecutor.getInformations(CommandExecutor.java:123) ~[?:?] at org.eclipse.smarthome.binding.bosesoundtouch.handler.BoseSoundTouchHandler.handleCommand(BoseSoundTouchHandler.java:172) ~[?:?] at org.eclipse.smarthome.core.thing.binding.BaseThingHandler.channelLinked(BaseThingHandler.java:233) ~[?:?] at org.eclipse.smarthome.core.thing.link.ThingLinkManager.lambda$0(ThingLinkManager.java:300) ~[?:?] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:?] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?] at java.lang.Thread.run(Thread.java:748) [?:?] 2019-01-25 16:29:21.144 [ERROR] [ome.core.thing.link.ThingLinkManager] - Exception occurred while informing handler: Blocking message pending 10000 for BLOCKING

running openhabian 1.4.1-449 on raspberry pi 3

kine regards, gerald