Released: Openhab2 Amazon Echo Control Binding (controlling alexa from openhab2)

development
binding
alexa
Tags: #<Tag:0x00007f0e9b0b1868> #<Tag:0x00007f0e9b0b16d8> #<Tag:0x00007f0e9b0b1598>

(Michael Geramb) #1

Hello community,

FAQ: When I have to remove and recreate things for a binding upgrade?

Download Latest Version

Beta 2.4 (3) Version
Download Beta 2.4 (3)

Whats new in Beta 2.4 (3):
WARNING: this beta has maybe problems by resolving bundles. It would to get feedback if it works or not and on which OH version and platform.

  • New channel mediaProgress
  • New channel mediaProgressTime
  • New channel notificationVolume
  • New channel ascendingAlarm

Whats new in Beta 2.4 (2):

  • update of channels triggered by Web-Socket connection to the amazon server
  • new channel “lastVoiceCommand” -> See “Steps for update from previous version (If you want use the new channels):” to get the new channel

Whats new in Beta 2.4 (1):

  • fixed Problem with volumne state

OpenHAB 2.3 Users:
The binding is now included in the official distribution. Before you upgrade to the latest version read this post.

OpenHAB 2.2 Users:
The RC3 will be the last available build for OpenHAB 2.2. It is technical ident with the version included int OpenHAB 2.3.
Use the marketplace of download it from here.

Please check the documentation to see a detailed description of the channels.

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

Amazon Echo Control Binding

This binding can control Amazon Echo devices (Alexa).

It provides features to control and view the current state of echo devices:

  • use echo device as text to speech from a rule
  • volume
  • pause/continue/next track/previous track
  • connect/disconnect bluetooth devices
  • start playing tuneIn radio
  • start playing Amazon Music
  • control of multi room music
  • show album art image in sitemap
  • speak a reminder message
  • plays an alarm sound
  • start traffic news
  • start daily briefing
  • start weather report
  • start good morning report
  • start automation routine
  • activate multiple configurations of flash briefings
  • start playing music by providing the voice command as text (Works with all music providers)
  • get last spoken voice command
  • change the volume of the alarm

Some ideas what you can do in your home by using rules and other openHAB controlled devices:

  • Automatic turn on your amplifier and connect echo with bluetooth if the echo plays music
  • If the amplifier was turned of, the echo stop playing and disconnect the bluetooth
  • The echo starts playing radio if the light was turned on
  • The echo starts playing radio at specified time
  • Remind you with a voice message, that a window is open for a long time and it is winter
  • Start a routine which welcome you, if you come home
  • Start a routine which switch a smart home device connected to alexa
  • Start your briefing if you turn on the light first time in the morning
  • Have different flash briefing in the morning and evening
  • Let alexa say ‘welcome’ to you if you open the door
  • Implement own handling for voice commands in a rule

Note

This binding uses the same API as the Web-Browser-Based Alexa site (alexa.amazon.de).
In other words, it simulates a user which is using the web page.
Unfortunately, the binding can get broken if Amazon change the web site.

The binding is tested with amazon.de, amazon.com and amazon.co.uk accounts, but should also work with all others.

Warning

For the connection to the Amazon server, your password of the Amazon account is required, this will be stored in your openHAB thing device configuration.
So you should be sure, that nobody other has access to your configuration!

What Else You Should Know

All the display options are updated by polling the amazon server.
The polling time can be configured, but a minimum of 10 seconds is required.
The default is 60 seconds, which means the it can take up to 60 seconds to see the correct state.
It’s not know, if there is a limit implemented in the amazon server if the polling is too fast and maybe amazon will lock your account. 30 seconds seems to be safe.

Supported Things

Thing type id Name
account Amazon Account
echo Amazon Echo Device
echospot Amazon Echo Spot Device
echoshow Amazon Echo Show Device
wha Amazon Echo Whole House Audio Control
flashbriefingprofile Flash briefing profile

First Steps

  1. Create an ‘Amazon Account’ thing
  2. Configure your credentials in the account thing (2 factor authentication is not supported!)
  3. After confirmation:
    a) the ‘Account Thing’ goes Online -> continue with 4)
    b) the ‘Account Thing’ stays offline:
    open the url YOUR_OPENHAB/amazonechocontrol in your browser (e.g. http://openhab:8080/amazonechocontrol/), click the link for your account thing and try to login.
  4. The echo device things get automatically discovered and can be accepted

Discovery

After configuration of the account thing with the login data, the echo devices registered in the amazon account, get discovered.
If the device type is not known by the binding, the device will not be discovered.
But you can define any device listed in your alexa app with the best matching existing device (e.g. echo).
You will find the required serial number in settings of the device in the alexa app.

Binding Configuration

The binding does not have any configuration.
The configuration of your amazon account must be done in the ‘Amazon Account’ device.

Thing Configuration

The Amazon Account thing needs the following configurations:

Configuration name Description
amazonSite The amazon site where the echos are registered. e.g. amazon.de
email Email of your amazon account
password Password of your amazon account
pollingIntervalInSeconds Polling interval for the device state in seconds. Default 30, minimum 10

IMPORTANT: If the Account thing does not go online and reports a login error, read the instructions in “First Steps” above.

Amazon Devices

All Amazon devices (echo, echospot, echoshow, wha) needs the following configurations:

Configuration name Description
serialNumber Serial number of the amazon echo in the Alexa app

You will find the serial number in the alexa app or on the webpage YOUR_OPENHAB/amazonechocontrol/YOUR_ACCOUNT (e.g. http://openhab:8080/amazonechocontrol/account1).

Flash Briefing Profile

The flashbriefingprofile thing has no configuration parameters.
It will be configured at runtime by using the save channel to store the current flash briefing configuration in the thing.

Channels

Channel Type ID Item Type Access Mode Thing Type Description
player Player R/W echo, echoshow, echospot, wha Control the music player e.g. pause/continue/next track/previous track
volume Dimmer R/W echo, echoshow, echospot Control the volume
shuffle Switch R/W echo, echoshow, echospot, wha Shuffle play if applicable, e.g. playing a playlist
imageUrl String R echo, echoshow, echospot, wha Url of the album image or radio station logo
title String R echo, echoshow, echospot, wha Title of the current media
subtitle1 String R echo, echoshow, echospot, wha Subtitle of the current media
subtitle2 String R echo, echoshow, echospot, wha Additional subtitle of the current media
providerDisplayName String R echo, echoshow, echospot, wha Name of the music provider
bluetoothMAC String R/W echo, echoshow, echospot Bluetooth device MAC. Used to connect to a specific device or disconnect if a empty string was provided
bluetooth Switch R/W echo, echoshow, echospot Connect/Disconnect to the last used bluetooth device (works after a bluetooth connection was established after the openHAB start)
bluetoothDeviceName String R echo, echoshow, echospot User friendly name of the connected bluetooth device
radioStationId String R/W echo, echoshow, echospot, wha Start playing of a TuneIn radio station by specifying it’s id or stops playing if a empty string was provided
radio Switch R/W echo, echoshow, echospot, wha Start playing of the last used TuneIn radio station (works after the radio station started after the openhab start)
amazonMusicTrackId String R/W echo, echoshow, echospot, wha Start playing of a Amazon Music track by it’s id od stops playing if a empty string was provided
amazonMusicPlayListId String W echo, echoshow, echospot, wha Write Only! Start playing of a Amazon Music playlist by specifying it’s id od stops playing if a empty string was provided. Selection will only work in PaperUI
amazonMusic Switch R/W echo, echoshow, echospot, wha Start playing of the last used Amazon Music song (works after at least one song was started after the openhab start)
remind String R/W echo, echoshow, echospot Write Only! Speak the reminder and sends a notification to the Alexa app (Currently the reminder is played and notified two times, this seems to be a bug in the amazon software)
startRoutine Switch W echo, echoshow, echospot Write Only! Type in what you normally say to Alexa without the preceding “Alexa,”
musicProviderId String R/W echo, echoshow, echospot Current Music provider
playMusicVoiceCommand String W echo, echoshow, echospot Write Only! Voice command as text. E.g. ‘Yesterday from the Beatles’
startCommand String W echo, echoshow, echospot Write Only! Used to start anything. Available options: Weather, Traffic, GoodMorning, SingASong, TellStory, FlashBriefing and FlashBriefing. (Note: The options are case sensitive)
textToSpeech String W echo, echoshow, echospot Write Only! Write some text to this channel and alexa will speak it
lastVoiceCommand String R/W echo, echoshow, echospot ONLY IN BETA 2.4 (2) AND NEWER! Last voice command spoken to the device. Writing to the channel starts voice output.
mediaProgress Dimmer R/W echo, echoshow, echospot ONLY IN BETA 2.4 (3) AND NEWER! Media progress in percent
mediaProgressTime Number:Time R/W echo, echoshow, echospot ONLY IN BETA 2.4 (3) AND NEWER! Media play time
mediaLength Number:Time R echo, echoshow, echospot ONLY IN BETA 2.4 (3) AND NEWER! Media length
notificationVolume Dimmer R echo, echoshow, echospot ONLY IN BETA 2.4 (3) AND NEWER! Notification volume
ascendingAlarm Switch R/W echo, echoshow, echospot ONLY IN BETA 2.4 (3) AND NEWER! Ascending alarm up to the configured volume
save Switch W flashbriefingprofile Write Only! Stores the current configuration of flash briefings within the thing
active Switch R/W flashbriefingprofile Active the profile
playOnDevice String W flashbriefingprofile Specify the echo serial number or name to start the flash briefing.

Full Example

amazonechocontrol.things

Bridge amazonechocontrol:account:account1 "Amazon Account" @ "Accounts" [amazonSite="amazon.de", email="mail@example.com", password="secure", pollingIntervalInSeconds=60]
{
    Thing echo                 echo1          "Alexa" @ "Living Room" [serialNumber="SERIAL_NUMBER"]
    Thing echoshow             echoshow1      "Alexa" @ "Kitchen" [serialNumber="SERIAL_NUMBER"]
    Thing echospot             echospot1      "Alexa" @ "Sleeping Room" [serialNumber="SERIAL_NUMBER"]
    Thing wha                  wha1           "Ground Floor Music Group" @ "Music Groups" [serialNumber="SERIAL_NUMBER"]
    Thing flashbriefingprofile flashbriefing1 "Flash Briefing Technical" @ "Flash Briefings" 
    Thing flashbriefingprofile flashbriefing2 "Flash Briefing Life Style" @ "Flash Briefings" 
}

You will find the serial number in the Alexa app.

amazonechocontrol.items:

Sample for the Thing echo1 only. But it will work in the same way for the other things, only replace the thing name in the channel link.
Take a look in the channel description above to know, which channels are supported by your thing type.

Group Alexa_Living_Room <player>

// Player control
Player Echo_Living_Room_Player                "Player"                                (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:player"}
Dimmer Echo_Living_Room_Volume                "Volume [%.0f %%]" <soundvolume>        (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:volume"}
Switch Echo_Living_Room_Shuffle               "Shuffle"                               (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:shuffle"}

// Player Information
String Echo_Living_Room_ImageUrl              "Image URL"                             (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:imageUrl"}
String Echo_Living_Room_Title                 "Title"                                 (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:title"}
String Echo_Living_Room_Subtitle1             "Subtitle 1"                            (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:subtitle1"}
String Echo_Living_Room_Subtitle2             "Subtitle 2"                            (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:subtitle2"}
String Echo_Living_Room_ProviderDisplayName   "Provider"                              (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:providerDisplayName"}

// Music provider and start command
String Echo_Living_Room_MusicProviderId       "Music Provider Id"                     (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:musicProviderId"}
String Echo_Living_Room_PlayMusicCommand      "Play music voice command (Write Only)" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:playMusicVoiceCommand"}
String Echo_Living_Room_StartCommand          "Start Information" (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:startCommand"}

// TuneIn Radio
String Echo_Living_Room_RadioStationId        "TuneIn Radio Station Id"               (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:radioStationId"}
Switch Echo_Living_Room_Radio                 "TuneIn Radio"                          (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:radio"}

// Amazon Music
String Echo_Living_Room_AmazonMusicTrackId    "Amazon Music Track Id"                 (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:amazonMusicTrackId"}
String Echo_Living_Room_AmazonMusicPlayListId "Amazon Music Playlist Id"              (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:amazonMusicPlayListId"}
Switch Echo_Living_Room_AmazonMusic           "Amazon Music"                          (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:amazonMusic"}

// Bluetooth
String Echo_Living_Room_BluetoothMAC          "Bluetooth MAC Address" <bluetooth>     (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:bluetoothMAC"}
Switch Echo_Living_Room_Bluetooth             "Bluetooth"             <bluetooth>     (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:bluetooth"}
String Echo_Living_Room_BluetoothDeviceName   "Bluetooth Device"      <bluetooth>     (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:bluetoothDeviceName"}

// Commands
String Echo_Living_Room_TTS                   "Text to Speech"                        (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:textToSpeech"}
String Echo_Living_Room_Remind                "Remind"                                (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:remind"}
String Echo_Living_Room_PlayAlarmSound        "Play Alarm Sound"                      (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:playAlarmSound"}
String Echo_Living_Room_StartRoutine          "Start Routine"                         (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:startRoutine"}

// BETA 2.4 (2) channel:
String Echo_Living_Room_LastVoiceCommand          "Last voice command"                (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:lastVoiceCommand"}

// BETA 2.4 (3) channels:
Dimmer Echo_Living_Room_MediaProgress    "Media progress"                             (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:mediaProgress"}

Number:Time Echo_Living_Room_MediaProgressTime    "Media progress time [%d %unit%]"   (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:mediaProgressTime"}

Number:Time Echo_Living_Room_MediaLength    "Media length [%d %unit%]"                (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:mediaLength"}

Dimmer Echo_Living_Room_NotificationVolume    "Notification volume"                    (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:notificationVolume"}

Switch Echo_Living_Room_AscendingAlarm    "Ascending alarm"                             (Alexa_Living_Room) {channel="amazonechocontrol:echo:account1:echo1:ascendingAlarm"}


// Flashbriefings
Switch FlashBriefing_Technical_Save   "Save (Write only)" { channel="amazonechocontrol:flashbriefingprofile:account1:flashbriefing1:save"} 
Switch FlashBriefing_Technical_Active "Active" { channel="amazonechocontrol:flashbriefingprofile:account1:flashbriefing1:active"}
String FlashBriefing_Technical_Play   "Play (Write only)" { channel="amazonechocontrol:flashbriefingprofile:account1:flashbriefing1:playOnDevice"}

Switch FlashBriefing_LifeStyle_Save   "Save (Write only)" { channel="amazonechocontrol:flashbriefingprofile:account1:flashbriefing2:save"} 
Switch FlashBriefing_LifeStyle_Active "Active" { channel="amazonechocontrol:flashbriefingprofile:account1:flashbriefing2:active"}
String FlashBriefing_LifeStyle_Play   "Play (Write only)" { channel="amazonechocontrol:flashbriefingprofile:account1:flashbriefing2:playOnDevice"}

amazonechocontrol.sitemap:

sitemap amazonechocontrol label="Echo Devices"
{
        Frame label="Alexa" {
            Default   item=Echo_Living_Room_Player
            Slider    item=Echo_Living_Room_Volume
            Slider    item=Echo_Living_Room_MediaProgress      // BETA 2.4 (3) channel
            Text      item=Echo_Living_Room_MediaProgressTime  // BETA 2.4 (3) channel
            Text      item=Echo_Living_Room_MediaLength        // BETA 2.4 (3) channel   
            Switch    item=Echo_Living_Room_Shuffle
            Image     item=Echo_Living_Room_ImageUrl      label=""
            Text      item=Echo_Living_Room_Title
            Text      item=Echo_Living_Room_Subtitle1
            Text      item=Echo_Living_Room_Subtitle2
            Text      item=Echo_Living_Room_ProviderDisplayName

            // The listed providers are only samples, you could have more
            Selection item=Echo_Living_Room_MusicProviderId mappings=[ 'TUNEIN'='Radio', 'SPOTIFY'='Spotify', 'AMAZON_MUSIC'='Amazon Music', 'CLOUDPLAYER'='Amazon']
            Text    item=Echo_Living_Room_MusicProviderId

            // To start one of your flashbriefings use Flashbriefing.<YOUR FLASHBRIEFING THING ID>
            Selection item=Echo_Living_Room_StartCommand mappings=[ 'Weather'='Weather', 'Traffic'='Traffic', 'GoodMorning'='Good Morning', 'SingASong'='Song', 'TellStory'='Story', 'FlashBriefing'='Flash Briefing', 'FlashBriefing.flashbriefing1'='Technical', 'FlashBriefing.flashbriefing2'='Life Style' ]

            Selection item=Echo_Living_Room_RadioStationId mappings=[ ''='Off', 's1139'='Antenne Steiermark', 's8007'='Hitradio Ö3', 's16793'='Radio 10', 's8235'='FM4' ]
            Text    item=Echo_Living_Room_RadioStationId
            Switch  item=Echo_Living_Room_Radio

            Text    item=Echo_Living_Room_AmazonMusicTrackId
            Text    item=Echo_Living_Room_AmazonMusicPlayListId
            Switch  item=Echo_Living_Room_AmazonMusic

            Text    item=Echo_Living_Room_BluetoothMAC
            // Change the <YOUR_DEVICE_MAC> Place holder with the MAC address shown, if alexa is connected to the device
            Selection item=Echo_Living_Room_BluetoothMAC mappings=[ ''='Disconnected', '<YOUR_DEVICE_MAC>'='Bluetooth Device 1', '<YOUR_DEVICE_MAC>'='Bluetooth Device 2']

            // These are only view of the possible options. Enable ShowIDsInGUI in the binding configuration and look in drop-down-box of this channel in the Paper UI Control section
            Selection item=Echo_Living_Room_PlayAlarmSound mappings=[ ''='None', 'ECHO:system_alerts_soothing_01'='Adrift', 'ECHO:system_alerts_atonal_02'='Clangy']

            Switch  item=Echo_Living_Room_Bluetooth
            Text    item=Echo_Living_Room_BluetoothDeviceName
            Text    item=Echo_Living_Room_LastVoiceCommand   // BETA 2.4 (2) channel
            Slider  item=Echo_Living_Room_NotificationVolume // BETA 2.4 (3) channel
            Switch  item=Echo_Living_Room_AscendingAlarm     // BETA 2.4 (3) channel
        }

        Frame label="Flash Briefing Technical" {
            Switch  item=FlashBriefing_Technical_Save
            Switch  item=FlashBriefing_Technical_Active
            Text    item=FlashBriefing_Technical_Play
        }

        Frame label="Flash Briefing Life Style" {
            Switch  item=FlashBriefing_LifeStyle_Save
            Switch  item=FlashBriefing_LifeStyle_Active
            Text    item=FlashBriefing_LifeStyle_Play
        }
}

How To Get IDs

  1. Open the url YOUR_OPENHAB/amazonechocontrol in your browser (e.g. http://openhab:8080/amazonechocontrol/)
  2. Click on the name of the account thing
  3. Click on the name of the echo thing
  4. Scroll to the channel and copy the required ID

Tutorials

Let alexa speak a text from a rule:

  1. Create a rule with a trigger of your choice
rule "Say welcome if the door opens"
when
    Item Door_Contact changed to OPEN
then
    Echo_Living_Room_TTS.sendCommand('Hello World')
end

Playing an alarm sound for 15 seconds with an openHAB rule if an door contact was opened:

  1. Do get the ID of your sound, follow the steps in “How To Get IDs”
  2. Write down the text in the square brackets. e.g. ECHO:system_alerts_repetitive01 for the nightstand sound
  3. Create a rule for start playing the sound:
var Timer stopAlarmTimer = null

rule "Turn on alarm sound for 15 seconds if door opens"
when
    Item Door_Contact changed to OPEN
then
    Echo_Living_Room_PlayAlarmSound.sendCommand('ECHO:system_alerts_repetitive01')
    if (stopAlarmTimer === null)
    {
        stopAlarmTimer = createTimer(now.plusSeconds(15)) [|
            stopAlarmTimer.cancel()
            stopAlarmTimer = null
            Echo_Living_Room_PlayAlarmSound.sendCommand('')
        ]
    }
end

Note 1: Do not use a to short time for playing the sound, because alexa needs some time to start playing the sound.
It’s not recommended to use a time below 10 seconds.

Note 2: The rule have no effect for your default alarm sound used in the alexa app.

Play a spotify playlist if a switch was changed to on:

  1. Do get the ID of your sound, follow the steps in “How To Get IDs”
  2. Write down the text in the square brackets. e.g. SPOTIFY for the spotify music provider
  3. Create a rule for start playing a song or playlist:
rule "Play a playlist on spotify if a switch was changed"
when
    Item Spotify_Playlist_Switch changed to ON
then
    Echo_Living_Room_PlayMusicProvider.sendCommand('SPOTIFY')
    Echo_Living_Room_PlayMusicCommand.sendCommand('Playlist Party')
end

Note: It’s recommended to test the command send to play music command first with the voice and the real alexa device. E.g. say ‘Alexa, Playlist Party’

Start playing weather/traffic/etc:

  1. Pick up one of the available commands: Weather, Traffic, GoodMorning, SingASong, TellStory, FlashBriefing
  2. Create a rule for start playing the information where you provide the command as string:
rule "Start wheater info"
when
    Item Spotify_Start_Wheater_Switch changed to ON
then
     Echo_Living_Room_StartCommand.sendCommand('Weather')
end

Start playing a custom flashbriefing on a device:

  1. Do get the ID of your sound, follow the steps in “How To Get IDs”
  2. Write down the text in the square brackets. e.g. flashbriefing.flashbriefing1
  3. Create a rule for start playing the information where you provide the command as string:
rule "Start wheater info"
when
    Item Spotify_Start_Wheater_Switch changed to ON
then
     Echo_Living_Room_StartCommand.sendCommand('FlashBriefing.flashbriefing1')
end

Credits

The idea for writing this binding came from this blog: http://blog.loetzimmer.de/2017/10/amazon-alexa-hort-auf-die-shell-echo.html (German).
Thank you Alex!

Trademark Disclaimer

TuneIn, Amazon Echo, Amazon Echo Spot, Amazon Echo Show, Amazon Music, Amazon Prime, Alexa and all other products and Amazon, TuneIn and other companies are trademarks™ or registered® trademarks of their respective holders.
Use of them does not imply any affiliation with or endorsement by them.

Steps for setup

Download the jar file (you will find the link in the top of this posting)
Copy it to the addons directory of your openhab2 installation (/usr/share/openhab2/addons for repository installation, /opt/openhab2/addons for manual installations)
Open the Paper UI
Check if the binding (Amazon Echo Control Binding) is listed under Configuration | Bindings
Navigate to the Inbox
You should find an „Amazon Account“ Thing
Accept it
Navigate to Things
Open the newly create Amazon Account Thing
Start editing (Press button in the upper left corner)
Select your amazon site (e.g. amazon.de)
Enter the email of the account which is used for the alexa
Enter the password of the account which is used for the alexa
Commit the settings by pressing the accept button in left upper corner (with the hook sign)
Now the Thing should go Online after view seconds, if not, an error should give you an hint whats was wrong

Follow this thread for updates!

Kind regards,
Michael

Commercial
If you are looking for a wedding photographer, visit my site at www.michael-geramb.at. I would be happy to see you!


ORIGINAL POST

I have planned to started the development of a binding to control amazon echo devices.

In the first version, it will be possible to send commands like pause, continue, next track, set volumn and so on from openhab to the echo device. For this step, I have already all the necessary knowhow.

In the second step, I trie to use the MQTT connection to the amazon server to get the state of the alexa device (e.g. Playing song xyz). I have seen already the communication in firefox development tools and hope that it is possible to reverse engineer the protocol.

In the third step, it should be possible to use alexa for text to speech notifications. I have seen already projects which sent the necessary voice command with an TTS engine to amazon and use a echo skill to get the device to speak. So it should be possible…

Is there currently anybody working on a similar binding? I mean a real binding not only the shell scripts which can be used with the exec binding.

Regads,
Michael


Is it possible to use Alexa (Echo dot) as an output device for a TTS addon?
Openhab to control echo speaker?
How to control Alexa amazon echo with openhab?
Official Alexa Smart Home Skill for openHAB 2
Custom voice command and response (e.g. with Google or Alexa)?
Alexa : Voice Announcements
Custom Widget: Amazon Echo Music Control
Google Maps widget with traffic
Official Alexa Smart Home Skill for openHAB 2
openHAB can now use Amazon Echo devices to speak any text (TTS) - new feature in the amazonechocontrol binding
TTS or Alexa or Google home in every room
(Christian Emerich) #2

Hi,
sounds good, keep us informed on your achievements!

br. Christian


(Renier) #3

Can you elaborate how you can send a command to an echo device?

Is it directly network internally or via some skill you have to write?


(Michael Geramb) #4

You have to make http request to the amazon server. It’s easy to spy the network traffic in the web browser with the development tools if you open the alexa web-site. So I simulate the login and sent the same REST-calls to the server. In my prototype I can already make the login and sent commands.


(Rich Koshak) #5

Just to be sure, make sure you look at the Alexa skill and make sure you are not duplicating effort or implemented better on that existing add-on. I suspect a separate binding is needed but some of what you are describing like the TTS I think are already handled. I could be mistaken though.


(Joachim Boeddeker) #6

@rlkoshak, as i understand, this is the opposite of the current skill. With the current skill, Alexa is able to control items in openHAB.

This new binding offers functions to control Alexa from openHAB.

I don’t think any of these functions exist.


(Michael Geramb) #7

@job yes, you are right, it’s the opposite way, anyway for the notification feature it will be helpfull to extend the openhab alexa skill with a feature to translate a code which will be received as voice command to message which will be received from openhab. But this have to be discussed before I start implementing the notification.


(Lucky) #8

@michi I do this on Google Home already using a simple rule. Using TTS, you can create an audio file accessible remotely by Google Home. Do note that Google Home is also a Chromecast. Just recreate your audio and push that audio to Google Home via rule.

I dont have an Amazon Echo but I did make my own Alexa using AVS on an orange Pi. It’s easier to trigger Alexa (non-echo device) via the actual SDK rather than sniffing traffic and reverse engineering the protocol. Also note that the Assistant SDK (Google) latest version also now supports text in/text out, which means you can issue commands via text, for example: “Repeat after me Hello Lucky” and google home (or AssistantSDK enabled device) will say “Hello Lucky”. IDK it seems easier to just make all your GOogle Home devices belong to an entire-house homegroup, and have that homegroup play an audio file.


(Michael Geramb) #10

Is anyone interested in beta testing of my new binding?

Current features:
control volume
control pause/continue playing
showing current played title and provider
showing current bluetoothconnection

Leave a message if you are interested in testing and I will send a private message with the download link.


(Nathan Stratton) #11

I am very interested in the broadcast side, I have lots of echos and would like to use them for announcements.


(Marvyn Zalewski) #12

Hey @michi,

it would be awesome to have a binding like this. Looking forward with new information and in addition: if you need a beta tester i can do the job for you. Sadly i don’t own echo plus but a echo dot.

Kind regards :slight_smile:


(Joachim Boeddeker) #13

I would enjoy testing, i own two echo dots and one echo.


(Hadrian Sieger) #14

I would also like to help BETA testing.


(Alex) #15

@michi
I bet you were inspired by one of the following links:

https://www.gehrig.info/alexa/Alexa.html
https://github.com/thorsten-gehrig/alexa-remote-control
http://blog.loetzimmer.de/2017/10/amazon-alexa-hort-auf-die-shell-echo.html

Is it also planned to implement the following?

  • select echo-device
  • next|prev|fwd|rwd|shuffle|
  • connect/disconnect bluetooth device
  • play tunein radio
  • play library track
  • play Prime playlist
  • play Prime station
  • play Prime historical queue
  • play library playlist
  • list imported library tracks
  • list purchased library tracks
  • list Prime playlists
  • list Prime stations
  • list available devices
  • delete multiroom and/or create new multiroom containing devices
  • logoff

(Michael Geramb) #16

Yes, you are right. But not all of your listed features makes sense in an openhab binding. E.g. How should the list commands handled by a thing channel?
Hi Celaeno1,

select echo-device is implemented by creating a thing for each device
next/previous is already handled in the player channel
shuffle as it’s own channel

bluetooth connection is currently only readonly, but will be writeable in the next version.

For the other commands, I currently thinking about how the can be handled as channel. Any ideas?
Regards, Michael


(Alex) #17

@michi

I’m currently also using the allplay and the chromecast bindings. There are a lot of thing channels supported. Maybe you can adopt them.

See here:

Also the sonos binding should have many channels you could be inspired.

For me most wanted features would be:

Connect/disconnect Bluetooth
Play Tunein Radio

Thanks a lot.


(Michael Geramb) #18

Thanks for your posting. Some of the informations are already implemented. Bluetooth connection will be the next. :slight_smile:
Currently I do not know, if it is possible to start playing the radio without giving the internal station id to the api. Maybe it will be necessary to create manual a mapping file for your favorite stations. But I will check this in the next days.


(Michael Geramb) #19

Currently I close the beta test with the users which have posted here there wish for testing. You should have got an private message with the installation instructions, if not, please let me know.

I will start a public beta test, after I get response from the current testers. Follow this thread to get informed.


(Heiko Hegewald) #20

I would also like to help BETA testing.


(Michael Geramb) #21

New version is ready for testing! Please follow the instruction in the first posting of this thread!

Kind regards,
Michael