Release Candidate and Support: Amazon Echo Control Binding

Information Request:

  1. Please give me feedback on which amazon domain the SSML works with the binding (Because the call in the alexa app was introduced in amazon.de weeks after amazon.com, so maybe it works not on all domains yet) amazon.de is the only one tested.

  2. It would be nice if one with a lot of echos test, if a SSML call have the same problems for many multiple calls at the same time as it was the case for plain text.

Thank you for testing!

Thank you for integrating the timer and alarm channels. I donā€™t want to be impertinent, but I miss one thing. The Music Alarm. So, if you are woken up with music. Unfortunately, this is not intercepted by the Next Alarm Channel.
Best,
Olli

Hereā€™s another reference for using SSML with short example audio clips. Also look toward the bottom for the speechconā€™s, select your region, and you will get a list of all with example audio. The first in the list is ā€œabracadabraā€ maybe the kids will like it.:laughing:

https://developer.amazon.com/docs/custom-skills/speech-synthesis-markup-language-ssml-reference.html

How to use example:

<speak>
    Here is an example of a speechcon. 
    <say-as interpret-as="interjection">abracadabra!</say-as>.
</speak>

<speak>
    I think were gonna have fun with this. 
    <say-as interpret-as="interjection">bada bing bada boom!</say-as>.
</speak>

Great work @michi

<speak>
    I think this is 
    <say-as interpret-as="interjection">dynomite!</say-as>, thanks Michael.
</speak>
1 Like

Hi @michi, the SSML is fantastic! Iā€™ve been hoping you would add this feature since I heard of it.

I tested with my group of 12 echos (in the US) and see the same issue that weā€™ve been having with plain text. The following message repeats several times corresponding to random devices that donā€™t play after any given command.

2019-01-12 09:07:34.554 [ERROR] [nal.common.AbstractInvocationHandler] - An error occurred while calling method 'ThingHandler.handleCommand()' on 'org.openhab.binding.amazonechocontrol.internal.handler.EchoHandler@1ff50d0': POST url 'https://alexa.amazon.com/api/behaviors/preview' failed: Bad Request
org.openhab.binding.amazonechocontrol.internal.HttpException: POST url 'https://alexa.amazon.com/api/behaviors/preview' failed: Bad Request
	at org.openhab.binding.amazonechocontrol.internal.Connection.makeRequest(Connection.java:585) ~[?:?]
	at org.openhab.binding.amazonechocontrol.internal.Connection.executeSequenceNode(Connection.java:1119) ~[?:?]
	at org.openhab.binding.amazonechocontrol.internal.Connection.executeSequenceCommand(Connection.java:1104) ~[?:?]
	at org.openhab.binding.amazonechocontrol.internal.Connection.executeSequenceCommandWithVolume(Connection.java:1095) ~[?:?]
	at org.openhab.binding.amazonechocontrol.internal.Connection.sendAnnouncement(Connection.java:1061) ~[?:?]
	at org.openhab.binding.amazonechocontrol.internal.handler.EchoHandler.startTextToSpeech(EchoHandler.java:714) ~[?:?]
	at org.openhab.binding.amazonechocontrol.internal.handler.EchoHandler.handleCommand(EchoHandler.java:600) ~[?:?]
	at sun.reflect.GeneratedMethodAccessor27086.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) [102:org.eclipse.smarthome.core:0.10.0.201812141650]
	at org.eclipse.smarthome.core.internal.common.InvocationHandlerSync.invoke(InvocationHandlerSync.java:59) [102:org.eclipse.smarthome.core:0.10.0.201812141650]
	at com.sun.proxy.$Proxy194.handleCommand(Unknown Source) [265:org.openhab.binding.amazonechocontrol:2.5.0.Beta_02]
	at org.eclipse.smarthome.core.thing.internal.profiles.ProfileCallbackImpl.handleCommand(ProfileCallbackImpl.java:75) [109:org.eclipse.smarthome.core.thing:0.10.0.201812141650]
	at org.eclipse.smarthome.core.thing.internal.profiles.SystemDefaultProfile.onCommandFromItem(SystemDefaultProfile.java:49) [109:org.eclipse.smarthome.core.thing:0.10.0.201812141650]
	at sun.reflect.GeneratedMethodAccessor174.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) [102:org.eclipse.smarthome.core:0.10.0.201812141650]
	at org.eclipse.smarthome.core.internal.common.Invocation.call(Invocation.java:53) [102:org.eclipse.smarthome.core:0.10.0.201812141650]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
	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) [?:?]

This is an interesting little quirkā€¦ On the Echo show it displays the text command:

This does not happen with the plain text.

I keep seeing discussions about calling a bunch of echoā€™s at once with the same message. I havenā€™t figure out how to do this w/o writing a rule that has 1 echo - one after another - saying the same thing.

Can you provide a rule example that calls all 12 echoā€™s at the same time to send the same message? I also have 12 echoā€™s (US) and Iā€™m very interested in this rule.

Best, Jay

Thank you for the information, I think I have to implement a queue for this. But itā€™s a lot of work, so do not await in the next days.

This is a simple issue. I have to remove the xml tokens for the display json element.

@jwiseman: It would be nice, If you could test one more thing, the new api calls needs the customerId in two places and Iā€™am not sure if they are both the account customer id or device customer id. Could you test an SSML text with one of your echos with the other owner?

Oh, thank you for this hint, I have not seen yet, that there is another alarmType for this. I will provide an additional channel for this is the next version.

1 Like

Dear Alexa experts,

I need a short hint how do decide between items I want to expose to Amazon Eche and those I only need on my OH server.

Could you please quickly check All items with tag are exposed to Google Assistant and Amazon Echo? and give an advice? Thank you!

Edit: Resolved in that discussion - thanks!

It worked! The Echo Dot is under my account; not my wifeā€™s which is what OH runs under.

	      	Echo_Jay_textToSpeechVolume.sendCommand('60')
				Thread::sleep(2000)  // 2 second wait
	      	Echo_Jay_TTS.sendCommand('<speak>Excuse me Jay,<break time="3s"/> I detect <emphasis level="strong">your phone</emphasis>,<break time="3s"/> so you must be home now.</speak>')
				Thread::sleep(2000)  // 2 second wait

Best, Jay

1 Like

nextAlarm option showing UNDEF in HabPanel

Iā€™ve implemented the nextAlarm option in order to tell the kids that an alarm is NOT set on their Echoā€™s when they go to bed Sun - Thur @ 8:35 pm.

The issue I canā€™t seem to resolve is; itā€™s showing UNDEF in HabPanel when one isnā€™t set. Is there anyway to show something like ā€œNot Setā€ or ā€œ01/01/2000ā€ vs. UNDEF?

I donā€™t think a MAP file will work because when one is set; the transformation wouldnā€™t work with the date/time value, am I thinking correctly on this?

The nextAlarm is a DateTime variable (read only) so Iā€™m not sure how to do this?

Best, Jay

It doesnĀ“t matter as the mapping wouldnĀ“t be used if thereĀ“s a ā€œcorrectā€ value.
It would create an log entry that says cannot transform 01/01/2000 with AlexaAlarm.map

Itā€™s nothing complicated. I have all of the TTS items in a group in the items file.

Group Alexa_TTS_Alerts (Amazon_Echos)

String echo_office_TTS "Text to Speech"  (Alexa_TTS_Alerts) {channel="amazonechocontrol:account_info:textToSpeech"}
String echo_familyroom_TTS "Text to Speech"  (Alexa_TTS_Alerts){channel="amazonechocontrol:account_info:textToSpeech"}
String echo_playroom_TTS "Text to Speech"  (Alexa_TTS_Alerts){channel="amazonechocontrol:account_info:textToSpeech"}
...etc

You can call them with either:

Alexa_TTS_Alerts.sendCommand("Text")

or

Alexa_TTS_Alerts.members.forEach[ item |
				item.sendCommand("Text")
				]

Thank you! It worked and I learned more about mapping :wink:

Best, Jay

1 Like

I do not see the new channel . I on beta 2 and snapshot 1500 of openhab 2.5

Hello,
Steps for update from previous version (If you want use the new channels):

  1. Remove discovered echo devices from your inbox
  2. Remove all your existing echo things (If you have created them in PaperUI)
  3. Replace now the binding jar
  4. Create your things to get the new channels
  5. In PaperUI some channels are only shown if the ā€œshow moreā€ (top right corner) option in the thing page is activated
3 Likes

Please check out my latest beta 2.5 (3). There is a new channel for the music alarm.

Beta 2.5 (3) Released

  • New channel for music alarm added
  • Small bugfixes

Download the latest beta from the top most posting.

1 Like

THanks!

I had to do thoses steps two times in a rowā€¦lol. When i just finished to set my things on beta 2ā€¦ beta3 just showed up haha.

All is working good.

Hi,

I think iI did not see it.

But, is the web page api give access to write or delete an alarm?