Anbindung Amazon Alexa an openHAB
Nachdem Update auf openHAB 2.3 steht mir nun auch das Amazon Echo Control Binding zur Verfügung. Bis jetzt konnte ich unsere Echo-Geräte (also „Alexa“) nur zur Steuerung der Hausautomatisierung per Sprachbefehlen verwenden. Mit dem neuen Binding ist es jetzt auch möglich die Echo-Geräte direkt in openHAB zu integrieren und damit eine Steuerung zu ermöglichen.
Es ist zum Beispiel damit möglich beim Betätigen eines KNX-Lichtschalters einen bestimmten Sender / Playlist auf allen Echo-Geräten abzuspielen. Auch können die Echo-Geräte für die Ausgabe von bestimmten Befehlen der Hausautomatisierung benutzt werden. Mir fallen da so einige Einsatzgebiete für die Zukunft ein 🙂
Aber im ersten Schritt muss erst einmal alles in openHAB eingebunden werden
Installation
Als erstes muss das Binding unter „Paper UI – Add-ons – Bindings – Amazon Echo Control Binding“ installiert werden.
Die ersten Schritte zu Konfiguration werden hier beschrieben.
Beispiel
Das komplette Beispiel auf der openHAB-Seite findet Ihr hier. Ich habe einige Anpassungen vorgenommen, aber der Ablauf sollte auch an meiner Konfiguration erkennbar sein.
Things
Nach der Installation muss ein Thing für den Amazon Account und die zugehörigen Geräte erstellt werden.
In meiner Konfiguration sieht das wie folgt aus (2 Echo’s, 1 Echo Dot, eine Multi-Room-Gruppe und zwei Flash Briefings):
Bridge amazonechocontrol:account:account1 "Amazon Account" @ "Alexa" [amazonSite="amazon.de", email="xxx", password="xxx", pollingIntervalInSeconds=60] { // Echo Geräte Thing echo echodot1 "Alexa (Kinderzimmer)" @ "Alexa" [serialNumber="xxx"] Thing echo echo1 "Alexa (Wohnbereich)" @ "Alexa" [serialNumber="xxx"] Thing echo echo2 "Alexa (Büro)" @ "Alexa" [serialNumber="xxx"] // Musikgruppen Thing wha wha1 "Multi-Room: Erdgeschoss" @ "Alexa" [serialNumber="xxx"] // Flash Briefings Thing flashbriefingprofile flashbriefing1 "Flash Briefing Technical" @ "Alexa" Thing flashbriefingprofile flashbriefing2 "Flash Briefing Life Style" @ "Alexa" }
Beim Account muss noch email und password entsprechend angepasst werden. In den Geräten muss man die serialNumber an seine entsprechenden Devices anpassen.
Danach ist der Account in openHAB über http://IP:PORT/amazonechocontrol/account1 erreichbar. Von dort können auch alle notwendigen Seriennummern ausgelesen werden.
Items
Eine Konfiguration der Items sieht wie folgt aus (hier ist ein Echo konfiguriert):
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"}
Sitemap
In der Visualisierung habe ich dann ein Gerät wie folgt integriert (damit kann man dann sehr viel schon einmal in der Basic UI darstellen):
Text label="Wohnbereich" icon="recorder" { Frame label="Wohnbereich" icon="recorder" { Default item=Echo_Living_Room_Player Slider item=Echo_Living_Room_Volume 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', 's97458'='TOP FM', 's25217'='ROCK ANTENNE' ] 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 } }
Rules
Eine mögliche Regel für die Automatisierung habe ich wie folgt umgesetzt (damit kann sobald der Lichtschalter im Büro betätigt wird per TTS eine Sprachausgabe erfolgen und auf einen Amazon Music Sender geschalten werden):
rule "ALEXA_TEST" when Item Licht_EG_Buero received update ON then Echo_Living_Room_TTS.sendCommand('Hello World') Echo_Living_MusicProviderId.sendCommand('AMAZON_MUSIC') Echo_Living_PlayMusicCommand.sendCommand('Heavy Metal') end
Fazit
Im Großen und Ganzen war die Umsetzung für die Integration in openHAB aller Amazon-Devices bei mir recht schnell erledigt. Jetzt kommt dann die Anpassung an die Szenarien (was erfahrungsgemäß mehr Spaß macht).
Folgende Punkte haben mich etwas Zeit gekostet (hier könntet Ihr etwas aufpassen):
- die ID’s der Sender in TuneIn findet man am einfachsten über die URL auf der Seite https://tunein.com heraus
- Sender / Playlists in Amazon Music konnte ich bis jetzt nicht in Paper UI einbinden, sondern nur über Regeln selektieren (hier habe ich noch keine weitere Idee)
- Wenn Ihr mehrere Geräte in „Gruppen“ zusammengefasst habt, müsst Ihr diese wha-Gruppe in den Things und im Channel der Items entsprechend anpassen (die Anpassung in den Channels habe ich übersehen)
Habt Ihr das neue Amazon Echo Control bei euch auch schon verwendet? Welche Szenarien bildet Ihr damit ab?
Wir haben das Amazon Echo Control Binding schon sehr früh genutzt. Damals war es noch im Beta-Stadium. Aber es hat gut funktioniert und bietet schöne Möglichkeiten, um auch den Echo ins Smart Home zu holen. Bislang war er ein reiner Aktor für weitere Geräte.
Testweise haben wir es eingerichtet, dass Alexa immer etwas sagt, sobald man die Balkontür öffnet. Ist zwar für viele in der Praxis völlig sinnfrei, war aber ein guter Test. So wussten wir, dass sie jeglichen Text ausgeben kann, den man ihr vorgibt.
Die nächste Idee wäre nun, dass man sie automatisch ankündigen lässt, wer aktuell anruft sobald das Telefon klingelt. Für die Sprachausgabe wäre das in meinen Augen eine sehr sinnvolle Möglichkeit. Insbesondere für ältere Menschen, die das Display ihres Telefons schlecht lesen können, wäre das natürlich der Wahnsinn!