Mit Echo (Alexa) Kodi Media Center steuern

Viele haben ein Kodi Mediacenter zu Hause. Vielleicht auf einem Raspberry PI oder einem Intel NUC.

Wäre es nicht super das Mediacenter via Sprache mit alexa steuern zu können? 

 

 

Der daf√ľr notwendige Skill kommt von Joe Ipson und kann hier¬†heruntergeladen werden.

Im Kodi musst du die Webgui aktivieren und mit User und Kennwort sch√ľtzen.

Auf deinem Router musst du dann noch den Port 8080 freigeben. Weil das Mediacenter nach außen freigegeben wird empfehle ich

ein starkes Kennwort.

 

Jetzt brauchst du einen AWS Account, den du vielleicht bereits hast, da du meiner Anleitung gefolgt bist.

Geh auf https://aws.amazon.com/de/¬†und klick auf ‚ÄěKostenloses Konto erstellen‚Äú. Einfach mit dem Amazon Account einloggen.¬†

Man braucht eine Kreditkarte. Es wird aber nichts berechnet, denn im AWS Account sind 1 Millionen requests im Monat kostenlos enthalten.

Da m√ľsste man schon sehr viel mit Alexa und Kodi f√ľr reden...

Anschlie√üend wird der Account mittels Telefonnummer verifiziert. W√§hle¬†‚ÄěBasis‚Äú Paket aus, das ist n√§mlich kostenlos und tut es f√ľr unsere Zwecke.

 

Show/Hidden bash code

View source
 
 
 
apt-get update
 
 
apt-get install python unp pip
 
 
cd /opt/
 
 
wget https://github.com/m0ngr31/kodi-alexa/archive/master.zip
 
unp master.zip
 
rm master.zip
 
cd kodi-alexa-master
 
mv .env.lambda .env
 
 
 

 

Nun musst du die Datei mit dem Editor deiner Wahl (meiner ist vim) anpassen

Show/Hidden bash code

View source
 
 
 
vim .env
 
 
  

 

Show/Hidden bash code

View source
 
 
KODI_ADDRESS=XXXXXX.dlinkddns.com
 
KODI_PORT=8080
 
KODI_USERNAME=kodiuser
 
KODI_PASSWORD=kodipassword
 
 
 

Bei Kodi Adress bitte kein WWW voran!!!

 

Ganz am Ende der Datei gibt es noch eine Einstellung

Show/Hidden bash code

View source
 
 
AWS_DEFAULT_REGION = eu-west-1
 
 
 
 

 

Nun sind am Ende noch weitere Einstellungen vorzunehmen. Daf√ľr ben√∂tigen wir nun den oben genannten AWS Account.

Hier legst du einen User an --> Add user

 

Vergebe einen Namen / Kennwort und setze alle Einstellungen wie ich hier.

 

Auf ‚ÄěAttach existing policies directly‚Äú klicken und den Haken bei¬†‚ÄěAWSLambdaFullAccess‚Äú setzen.

 

 

"Create User".

"Access Key ID" und "Secret access key" kopieren und f√ľr gleich bereithalten. Wer will f√ľgt es einfach schon in der .env ein.

Jetzt links auf "Roles" und wie hier im Screenshot eine Rolle anlegen.

 

 

"AWS Lambda" wählen --> Select

Nun die Policy "AWSLambdaFullAccess" wählen.

 

Jetzt¬†auf ‚ÄěNext Step‚Äú

Jetzt wird dir¬†unter anderem der Role ARN in der Form ‚Äěarn:aws:iam::11111111111:role/meinRollenName‚Äú. - Kopieren und dann auf ‚ÄěCreate Role‚Äú.

 

Jetzt geht es in der .ENV weiter.

Unten die gerade ermittelten Werte eintragen.

Show/Hidden bash code

View source
 
 
AWS_ACCESS_KEY_ID=XXXxXXXXXXxxXXX
 
AWS_SECRET_ACCESS_KEY=XXXXXXXxxxxxxXXXXXXXXxXxXXx
 
LAMBDA_ROLE=arn:aws:iam::XXXXXXXXXXXX:role/meineRolleName
 
 
 
 

 

Nun musst du die Datei ‚Äěwsgi.py‚Äú anpassen

Show/Hidden bash code

View source
 
 
 
cd /opt/kodi-alexa-master
 
 
vim wsgi.py
 
 
 
  

 

Hier muss die zweite Zeile ergänzt werden.

Show/Hidden bash code

View source
 
 
#!/usr/bin/python
 
# This Python file uses the following encoding: utf-8
 
import os
 
 
 
  

 

Jetzt musst du deinen Skill zu AWS √ľbertragen.

 

Show/Hidden bash code

View source
 
 
 
 
 
 
cd /opt/kodi-alexa-master
 
pip install lambda-deploy
 
lambda-deploy deploy
 
 
 

 

Jetzt geht es wieder in der AWS Console und dort zur Lambda-Seite weiter.

Bei Region oben rechts Ireland auszuwählen, sonst klappt das nicht!

Klicke auf Functions.

 

Wichtig: Im n√§chsten Bild rechts oben den Code der mit ‚ÄěARN‚Äú kopieren und z.B. im Notepad zwischenspeichern.

Create a Lmbda function --> Jetzt auf "Triggers" --> "Add Trigger" --> "Alexa Skill Kit"

Jetzt musst du den Skill mit Alexa verkn√ľpfen.

Dazu brauchst du einen Amazon Developer Account. Den gibt es hier https://developer.amazon.com/login.html

Anmelden mit deinem¬†Amazon Account und registriere dich¬†f√ľr den Developer Account.

Und gib dort an, das du damit kein Geld verdienen willst.

Weiter geht es oben im Men√ľ mit "Alexa" --> "Get Started" --> "Add New Skill"

 

Hier alles eintragen.

Skill Type: Custom Interaction Model

Language: German

Name: Kodi

Invocation name: media center

Audio Player: no

 

Der Invocation Name ist der Name auf den Alexa hört. Mit "Alexa, frage Invocation name, wie heißt der Titel" wird gearbeitet

Ich habe mit "media center" das beste Ergebnis. Denkbar sind aber auch andere Begriff oder Namen (James...).

 

Es geht weiter. Bei¬†Intent Schema diesen Code einf√ľgen

Show/Hidden bash code

View source
 
 
 
{
 "intents": [
 {
 "intent": "WhatNewAlbums",
 "slots": []
 },
 {
 "intent": "WhatNewMovies",
 "slots": [
 {
 "name": "Genre",
 "type": "MOVIEGENRES"
 }
 ]
 },
 {
 "intent": "WhatNewShows",
 "slots": []
 },
 {
 "intent": "NewShowInquiry",
 "slots": [
 {
 "name": "Show",
 "type": "SHOWS"
 }
 ]
 },
 {
 "intent": "CleanVideo",
 "slots": []
 },
 {
 "intent": "UpdateVideo",
 "slots": []
 },
 {
 "intent": "CleanAudio",
 "slots": []
 },
 {
 "intent": "UpdateAudio",
 "slots": []
 },
 {
 "intent": "PlayPause",
 "slots": []
 },
 {
 "intent": "PlayerSeekSmallForward",
 "slots": []
 },
 {
 "intent": "PlayerSeekSmallBackward",
 "slots": []
 },
 {
 "intent": "PlayerSeekBigForward",
 "slots": []
 },
 {
 "intent": "PlayerSeekBigBackward",
 "slots": []
 },
 {
 "intent": "Stop",
 "slots": []
 },
 {
 "intent": "WhatAlbums",
 "slots": [
 {
 "name": "Artist",
 "type": "MUSICARTISTS"
 }
 ]
 },
 {
 "intent": "ListenToArtist",
 "slots": [
 {
 "name": "Artist",
 "type": "MUSICARTISTS"
 }
 ]
 },
 {
 "intent": "ListenToAlbum",
 "slots": [
 {
 "name": "Artist",
 "type": "MUSICARTISTS"
 },
 {
 "name": "Album",
 "type": "MUSICALBUMS"
 }
 ]
 },
 {
 "intent": "ListenToSong",
 "slots": [
 {
 "name": "Artist",
 "type": "MUSICARTISTS"
 },
 {
 "name": "Song",
 "type": "MUSICSONGS"
 }
 ]
 },
 {
 "intent": "ListenToAlbumOrSong",
 "slots": [
 {
 "name": "Artist",
 "type": "MUSICARTISTS"
 },
 {
 "name": "Album",
 "type": "MUSICALBUMS"
 },
 {
 "name": "Song",
 "type": "MUSICSONGS"
 }
 ]
 },
 {
 "intent": "ListenToAudioPlaylist",
 "slots": [
 {
 "name": "AudioPlaylist",
 "type": "MUSICPLAYLISTS"
 }
 ]
 },
 {
 "intent": "ShuffleAudioPlaylist",
 "slots": [
 {
 "name": "AudioPlaylist",
 "type": "MUSICPLAYLISTS"
 }
 ]
 },
 {
 "intent": "ListenToAudioPlaylistRecent",
 "slots": []
 },
 {
 "intent": "WatchEpisode",
 "slots": [
 {
 "name": "Show",
 "type": "SHOWS"
 },
 {
 "name": "Episode",
 "type": "AMAZON.NUMBER"
 },
 {
 "name": "Season",
 "type": "AMAZON.NUMBER"
 }
 ]
 },
 {
 "intent": "WatchRandomEpisode",
 "slots": [
 {
 "name": "Show",
 "type": "SHOWS"
 }
 ]
 },
 {
 "intent": "WatchLatestEpisode",
 "slots": [
 {
 "name": "Show",
 "type": "SHOWS"
 }
 ]
 },
 {
 "intent": "WatchNextEpisode",
 "slots": [
 {
 "name": "Show",
 "type": "SHOWS"
 }
 ]
 },
 {
 "intent": "WatchLastShow",
 "slots": []
 },
 {
 "intent": "WatchMovie",
 "slots": [
 {
 "name": "Movie",
 "type": "MOVIES"
 }
 ]
 },
 {
 "intent": "WatchRandomMovie",
 "slots": [
 {
 "name": "Genre",
 "type": "MOVIEGENRES"
 }
 ]
 },
 {
 "intent": "WatchVideoPlaylist",
 "slots": [
 {
 "name": "VideoPlaylist",
 "type": "VIDEOPLAYLISTS"
 }
 ]
 },
 {
 "intent": "ShuffleVideoPlaylist",
 "slots": [
 {
 "name": "VideoPlaylist",
 "type": "VIDEOPLAYLISTS"
 }
 ]
 },
 {
 "intent": "ShufflePlaylist",
 "slots": [
 {
 "name": "AudioPlaylist",
 "type": "MUSICPLAYLISTS"
 },
 {
 "name": "VideoPlaylist",
 "type": "VIDEOPLAYLISTS"
 }
 ]
 },
 {
 "intent": "Prev",
 "slots": []
 },
 {
 "intent": "Skip",
 "slots": []
 },
 {
 "intent": "StartOver",
 "slots": []
 },
 {
 "intent": "Home",
 "slots": []
 },
 {
 "intent": "Back",
 "slots": []
 },
 {
 "intent": "Up",
 "slots": []
 },
 {
 "intent": "Down",
 "slots": []
 },
 {
 "intent": "Right",
 "slots": []
 },
 {
 "intent": "Left",
 "slots": []
 },
 {
 "intent": "Select",
 "slots": []
 },
 {
 "intent": "Menu",
 "slots": []
 },
 {
 "intent": "PageUp",
 "slots": []
 },
 {
 "intent": "PageDown",
 "slots": []
 },
 {
 "intent": "Fullscreen",
 "slots": []
 },
 {
 "intent": "Mute",
 "slots": []
 },
 {
 "intent": "VolumeUp",
 "slots": []
 },
 {
 "intent": "VolumeDown",
 "slots": []
 },
 {
 "intent": "VolumeSet",
 "slots": [
 {
 "name": "Volume",
 "type": "AMAZON.NUMBER"
 }
 ]
 },
 {
 "intent": "VolumeSetPct",
 "slots": [
 {
 "name": "Volume",
 "type": "AMAZON.NUMBER"
 }
 ]
 },
 {
 "intent": "SubtitlesOn",
 "slots": []
 },
 {
 "intent": "SubtitlesOff",
 "slots": []
 },
 {
 "intent": "SubtitlesNext",
 "slots": []
 },
 {
 "intent": "SubtitlesPrevious",
 "slots": []
 },
 {
 "intent": "AudioStreamNext",
 "slots": []
 },
 {
 "intent": "AudioStreamPrevious",
 "slots": []
 },
 {
 "intent": "PlayerMoveUp",
 "slots": []
 },
 {
 "intent": "PlayerMoveDown",
 "slots": []
 },
 {
 "intent": "PlayerMoveLeft",
 "slots": []
 },
 {
 "intent": "PlayerMoveRight",
 "slots": []
 },
 {
 "intent": "PlayerRotateClockwise",
 "slots": []
 },
 {
 "intent": "PlayerRotateCounterClockwise",
 "slots": []
 },
 {
 "intent": "PlayerZoomHold",
 "slots": []
 },
 {
 "intent": "PlayerZoomIn",
 "slots": []
 },
 {
 "intent": "PlayerZoomInMoveUp",
 "slots": []
 },
 {
 "intent": "PlayerZoomInMoveDown",
 "slots": []
 },
 {
 "intent": "PlayerZoomInMoveLeft",
 "slots": []
 },
 {
 "intent": "PlayerZoomInMoveRight",
 "slots": []
 },
 {
 "intent": "PlayerZoomOut",
 "slots": []
 },
 {
 "intent": "PlayerZoomOutMoveUp",
 "slots": []
 },
 {
 "intent": "PlayerZoomOutMoveDown",
 "slots": []
 },
 {
 "intent": "PlayerZoomOutMoveLeft",
 "slots": []
 },
 {
 "intent": "PlayerZoomOutMoveRight",
 "slots": []
 },
 {
 "intent": "PlayerZoomReset",
 "slots": []
 },
 {
 "intent": "Hibernate",
 "slots": []
 },
 {
 "intent": "Reboot",
 "slots": []
 },
 {
 "intent": "Shutdown",
 "slots": []
 },
 {
 "intent": "Suspend",
 "slots": []
 },
 {
 "intent": "EjectMedia",
 "slots": []
 },
 {
 "intent": "PartyMode",
 "slots": []
 },
 {
 "intent": "CurrentPlayItemInquiry",
 "slots": []
 },
 {
 "intent": "CurrentPlayItemTimeRemaining",
 "slots": []
 },
 {
 "intent": "AddonExecute",
 "slots": [
 {
 "name": "Addon",
 "type": "ADDONS"
 }
 ]
 },
 {
 "intent": "AddonGlobalSearch",
 "slots": [
 {
 "name": "Artist",
 "type": "MUSICARTISTS"
 },
 {
 "name": "Album",
 "type": "MUSICALBUMS"
 },
 {
 "name": "Song",
 "type": "MUSICSONGS"
 },
 {
 "name": "Movie",
 "type": "MOVIES"
 },
 {
 "name": "Show",
 "type": "SHOWS"
 }
 ]
 }
 ]
}
 
 
 

 

Jetzt musst du so genannte Slots anlegen (9). Diese kannst du automatisch f√ľr ein schnelles Copy & Paste hier erzeugen:¬†https://slot-generator.herokuapp.com/

 

 

 

Jetzt k√∂nnt ihr euch die ‚ÄěSample Utterances‚Äú hier laden. Wenn ihr es f√ľr erforderlich haltet, k√∂nnt ihr diese weiter anpassen.

Den Inhalt der Datei bei "Sample Utterances" einf√ľgen und dann "Save", dann auf "Next".

 

Alle so einstellen wie im Bild. Den weiter oben im Notepad gesicherten ARN Code hier einf√ľgen!

 

Folgendes einstellen. Und dann einfach nur auf "Save".

 

 

Jetzt gehts auf http://alexa.amazon.de/ --> Skills --> Ihre Skills (oben rechts).

 

Jetzt kannst du den Skill aktivieren und mit "Alexa, frage mediacenter, spiele musik von Michael Jackson" testen.

 

Dir hat das Projekt gefallen? Dann¬†Unterst√ľtze mich, damit ich weiterhin solche Projekte vorstellen kann!¬†

Kommentare   

0 #2 KillerBoB 2017-03-27 19:30
Super Tutorial vielen Dank daf√ľr. :-) Allerdings hatte ich beim Nachbauen einen Fehler und zwar einen Error beim Starten des Skills (Start Session) bez√ľglich des Encodings... du hast drauf hingewiesen, dass man in der "wsgi.py"

# This Python file uses the following encoding: utf-8

hinzuf√ľgen muss. In der aktuellen Version die ich von Github habe (Stand 27.03.2017) ist es nun so, dass man diese Zeile ebenfalls in der "kodi.py" am Anfang hinzuf√ľgen muss, weil er sonst Probleme mit einer Sprachvariable hat.
Dem Administrator melden
0 #1 Andreas 2017-02-22 22:34
Dein Tutorial habe ich leider erst gefunden nacchdem ich mich durch ein englisches geq√ľ√§lt habe :(
Es ist sehr gut!
Ich habe eine Frage: Muss ich bei hinzuf√ľgen eines neuen Films oder Serie, jedes mal die Slots aktualisieren?
Gruß und schönen Abend
Dem Administrator melden

Kommentar schreiben

Sicherheitscode
Aktualisieren