Opisany poniżej projekt pokazuje, jak krok po kroku uruchomić Alexa Voice Service na Raspberry Pi korzystając z klienta Java na RPi oraz serwera Node.js. Serwer Node.js wykorzystany jest w układzie do logowania się do Amazona i uzyskania kodu autoryzacyjnego w tym serwisie przez przeglądarkę.
Alexa Voice Service (AVS) to usługa Amazonu, która dodaje do budowanych przez nas urządzeń możliwość rozpoznawania głosu. Jeśli nasz system wyposażony jest w mikrofon i głośniki, a także podłączenie do sieci, możemy zadawać mu głosowo pytania, a uzyskamy od niego odpowiedzi. Tematy rozmów mogą być różnorodne, AVS może podawać informacje o pogodzie, przeszukiwać za nas Wikipedię etc., a dzięki Alexa Skills Kit możemy także dodawać własne funkcje.
Poniższy opis przeprowadzi nas krok po kroku przez instalację wszystkich potrzebnych składników systemu pozwalającego na korzystanie z AVS, opisze przykładowe programy i sprzęt, jaki potrzebny jest nam do korzystania z opisywanej usługi.
Początek
Potrzebny nam będzie szereg elementów. Oprócz samego Raspberry Pi 2 lub 3 potrzebujemy:
* Zasilacz microUSB
* Kartę SD z NOOBSem o pojemności co najmniej 8 GB.
* Kabel ethernet.
* Mikrofon na USB, jako że RPi nie posiada wbudowanego mikrofonu czy wejścia analogowego.
* Klawiaturę i myszkę na USB do obsługi komputera oraz monitor z wejściem HDMI.
* Opcjonalnie - kartę sieciową WiFi na USB.
Przygotowanie Raspberry Pi
Do slotu na kartę SD wkładamy kartę z przygotowanym instalatorem NOOBS, do portów USB podłączamy mikrofon, klawiaturę i mysz a także kartę WiFi, jeśli chcemy z niej korzystać. Podpinamy 'malinę' do monitora poprzez port HDMI i podłączamy do niej zasilanie.
Instalacja systemu
Po podłączeniu komputera do prądu system załaduje z karty instalator NOOBS. Wybieramy w nim, jaki OS chcemy zainstalować - w opisywanym przypadku będzie to Raspbian. Instalacja systemu może trochę potrwać.
Po zainstalowaniu się systemu możemy przejść do programu konfiguracyjnego wpisując raspi-config. W nim możemy ustawić datę, godzinę, włączyć kamerę dodawać nowych użytkowników etc. Naciskając Finish, kończymy pracę programu i resetujemy komputer. Aby załadować interfejs graficzny, po uruchomieniu w linii komend wpisujemy startx. Domyślna nazwa użytkownika i hasło to, odpowiednio, pi i raspberry.
Instalacja oprogramowania
Oprogramowanie instalować będziemy z poziomu terminala, który jest preinstalowany w systemie i jest dostępny z poziomu interfejsu graficznego jak i (oczywiście) linii komend).
Włączenie SSH[/b]
SSH umożliwia zdalny dostęp do linii komend naszego Raspberry Pi z poziomu innego komputera, dzięki temu możliwe będzie zdalne pracowanie na naszej 'malinie' bez konieczności podpinania do niej monitora, klawiatury czy myszy.
Domyślnie SSH jest włączone, jednakże jeśli z jakiejś przyczyny nie jesteśmy w stanie połączyć się z RPi, to warto się upewnić, czy wszystko jest dobrze ustawione w konfiguracji komputera. Podobnie jak przy ustawianiu daty i godziny do konfiguracji dostęp mamy poprzez raspi-config.
[u]Połączenie się do Raspberry Pi poprzez SSH
Aby połączyć się z 'maliną' przez SSH musimy znać jej numer IP. Sprawdzić go możemy wpisując w terminali hostname -I. Komputer poda nam numer IP. Na drugiej maszynie w programie z jakiego korzystamy do połączenia się poprzez SSH (na przykład Putty) wpisujemy pi@<numer IP> i podajemy hasło, gdy komputer nas o nie zapyta. W tym momencie możemy już zdalnie pracować na RPi.
Instalacja serwera VNC
VNC to system pozwalający na udostępnianie pulpitu graficznego, co umożliwi nam zdalne łączenie się z RPi i obsługę interfejsu graficznego z zdalnej maszyny. Rozwiązanie takie jest niezwykle praktyczne - nie potrzebujemy wtedy dodatkowego monitora dla 'maliny'. Aby zainstalować serwer VNC w linii komend, wpisujemy:
Aby uruchomić serwer VNC, wpisujemy tightvncserver. Musimy też upewnić się, że serwer uruchamiać będzie się za każdym razem, gdy uruchamiać będziemy komputer, dlatego też musimy dodać go do autostartu. Aby to zrobić, musimy wpisać następujące komendy:
Teraz w nowo stworzonym pliku konfiguracyjnym wpisujemy:
Aby podłączyć się poprzez VNC do naszego Raspberry Pi, skorzystać możemy z jednego z poradników (linki poniżej), zależnie z jakiego systemu operacyjnego korzystamy na komputerze, z którego się łączymy:
Mac: See https://www.raspberrypi.org/documentation/remote-access/vnc/mac.md
Windows: https://www.raspberrypi.org/documentation/remote-access/vnc/windows.md
Linux: https://www.raspberrypi.org/documentation/remote-access/vnc/linux.md
Instalacja VLC
Aby zainstalować VLC w terminalu, wpisujemy:
Jeśli na naszym Raspberry Pi zainstalowane jest już VLD, usunąć musimy stare pliki konfiguracyjne:
Jeśli podczas instalacji napotkamy błąd "Unable to fetch", musimy spróbować aktualizacji apt-get przed instalacją:
Aby przetestować, czy VLC zainstalowało się poprawnie, wpiszmy:
Powinniśmy zobaczyć, np:
Aby ustalić zmienne środowiskowe VLC, wpisujemy w terminal:
Instalacja Node.js
Jeśli komenda node -v zwraca command not found, zainstalować musimy Node.js:
Instalacja Java Development Kit
Na naszym Raspberry Pi zainstalować trzeba Java Development Kit (JDK) w wersji 8 lub wyższej. Najpierw pobieramy ze strony Oracle odpowiedni plik tar.gz z instalacją dla systemu Linux i procesora ARM 32. W czasie pisania tego artykułu był to plik pod nazwą jdk-8u77-linux-arm32-vfp-hflt.tar.gz.
Następnie wypakowujemy zawartość pliku do folderu /opt i instalujemy JDK:
Aby zweryfikować poprawność naszych ustawień, wpisujemy:
Komendy te zwrócą wersję zainstalowanego JDK.
Instalacja Mavena
Pobieramy plik apache-maven-3.3.9-bin.tar.gz z https://maven.apache.org/download.cgi i wypakowujemy jego zawartość do folderu /opt. Następnie musimy skonfigurować miejsce instalacji. Tworzymy nowy plik /etc/profile.d/maven.sh i wpisujemy w nim:
Po zapisaniu pliku musimy się przelogować, aby skrypt się uruchomił. Sprawdzić instalację Mavena możemy podobnie jak dla JDK, wpisując:
Konfiguracja Alexa Voice Service
Aby zacząć korzystać z AVSa, musimy założyć darmowe konto developerskie na Amazonie (https://developer.amazon.com/login.html) i pobrać przykładową aplikację, korzystającą z AVSa wraz z pakietami, jakie potrzebuje. Aplikację pobieramy z githuba (https://github.com/amzn/alexa-avs-raspberry-pi/archive/master.zip). Po pobraniu aplikacji z githuba rozpakowujemy i umieszczamy ją w dowolnym folderze na RPi, dla wygody ścieżkę do folderu oznaczać będziemy w dalszej części artykułu <REFERENCE_IMPLEMENTATION>
Teraz możemy zarejestrować się na witrynie Amazona i założyć profil bezpieczeństwa. Na stronie developer.amazon.com po zalogowaniu klikamy w zakładkę Apps & Services -> Alexa -> Alexa Voice Service -> Get Started
Podczas rejestracji produktu wybieramy Device.
Uzupełniamy wymagane dane, na przykład:
Device Type ID: my_device
Display Name: My Device
Aby potwierdzić, naciskamy Next.
Aby stworzyć profil bezpieczeństwa, wybieramy z listy "Security Profile", "Create a new profile".
W zakładce ustawień ogólnych uzupełniamy:
Security Profile Name: Alexa Voice Service Sample App Security Profile
Security Profile Description: Alexa Voice Service Sample App Security Profile Description
I naciskamy Next, co wygeneruje nasze ID oraz tzw. "Client Secret".
Wchodzimy w zakładkę Web Settings, gdzie naciskamy w rozwijanym menu przycisk "Edit". Ustawiamy:
Allowed Origins: Naciskamy "Add Another" i dodajemy wpis https://localhost:3000 w polu tekstowym, jakie się pojawi.
Allowed Return URLs: Naciskamy "Add Another" i wpisujemy https://localhost:3000/authresponse.
Naciskamy Next.
Zapisujemy na naszym komputerze ten obrazek:
W ustawieniach wpisujemy dalej:
Category: Other
Description: Alexa Voice Service sample app test
What is your expected timeline for commercialization?: Longer than 4 months / TBD
How many devices are you planning to commercialize?: 0
Naciskamy Next.
Enable Amazon Music?: No
Naciskamy przycisk Submit.
Wygenerowanie certyfikatów
Aby byłot o możliwe musimy zainstalować SSL:
Aby sprawdzić poprawność instalacji wpisujemy:
Zmieniamy katalog na <REFERENCE_IMPLEMENTATION>/samples/javaclient - tutaj znajduje się nasza aplikacja.
Teraz edytujemy polik ssl.cnf, który jest plikiem konfiguracyjnym SSL. Wpisujemy wartości we wszystkie pole, gdzie wpisany jest parametr rozpoczynający się od YOUR_
Pamiętajmy, że zmienna countryName to dwie litery - inaczej certyfikat nie będzie działał. Następnie musimy nadać flagę wykonywalności skryptowi generującemu certyfikat SSL i go uruchomić:
Skrypt zapyta nas o kilka wartości:
Product ID: my_device
Serial number: 123456
Password: nasze hasło
Następnie musimy edytować plik konfiguracyjny serwera Node.js, który znajduje się w <REFERENCE_IMPLEMENTATION>/samples/companionService/config.js.
Ustawiamy sslKey na <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/server/node.key
Ustawiamy sslCert na <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/server/node.crt
Ustawiamy sslCaCert na <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/ca/ca.crt
Następnie musimy zmienić wpisy w pliku konfiguracyjnym klienta Java. Plik znajduje się w <REFERENCE_IMPLEMENTATION>/samples/javaclient/config.json. Wprowadzamy następujące zmiany:
Ustawiamy companionApp.sslKeyStore na <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/server/jetty.pkcs12
Ustawiamy companionApp.sslKeyStorePassphrase na hasło, jakie podaliśmy podczas generacji certyfikatu SSL.
Ustawiamy companionService.sslClientKeyStore na <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/client/client.pkcs12
Ustawiamy companionService.sslClientKeyStorePassphrase na hasło jakie podaliśmy podczas generacji certyfikatu SSL.
Ustawiamy companionService.sslCaCert na <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/ca/ca.crt
Instalacja zależności
Przechodzimy do folderu <REFERENCE_IMPLEMENTATION>/samples/companionService i instalujemy zależności:
Uruchomienie profilu bezpieczeństwa
W przeglądarce otwieramy stronę visit https://developer.amazon.com/lwa/sp/overview.html, gdzie podajemy "privacy policy URL" zaczynający się od http:// lub https://. Nie musi to być rzeczywisty adres, może być na przykład http://example.com. Dodać możemy też obraz, który wyświetlać będzie się podczas logowania do Amazonu. Zapisujemy ustawienia przyciskiem "Save".
Obok Alexa Voice Service Sample App Security Profile, naciskamy "Show Client ID and Client Secret". Zapisujemy pokazane tam wartości - będziemy potrzebować ich później.
Aktualizacja plików konfiguracyjnych
Logujemy się poprzez VNC do naszej 'maliny' i w edytorze tekstowym otwieramy plik <REFERENCE_IMPLEMENTATION>/samples/companionService/config.js w którym wpisujemy:
clientId: Wartość, którą zapisaliśmy w poprzednim kroku.
clientSecret: Wartość, którą zapisaliśmy w poprzednim kroku.
products: Obiekt ten składa się z klucza, który musi być taki sam jak ID, który wpisaliśmy na portalu Amazona i wartości, która jest tablicą, będącą identyfikatorem produktu. Jeśli postępowaliśmy według poradnika to ID to my_device. Jako unikatowy klucz podać możemy dowolny ciąg znaków, na przykład 123456. Wtedy wpis JSON wyglądać będzie tak: {"my_device": ["123456"]}.
Teraz otwieramy w edytorze tekstowym plik: <REFERENCE_IMPLEMENTATION>/samples/javaclient/config.json i uzupełniamy następujące wartości:
productId: string "my_device"
dsn: Identyfikator produktu, w naszym przypadku wpisane poprzednio 123456.
provisioningMethod: wpisujemy companionService.
Teraz przygotować musimy plik pom.xml. Otwieramy w edytorze tekstowym plik <REFERENCE_IMPLEMENTATION>/samples/javaclient/pom.xml i dodajemy tam sekcję <dependencies>:
Uruchomienie serwera
Po zalogowaniu się do RPi w terminalu wpisujemy:
Teraz na porcie 3000 pracuje serwer, nasłuchujący informacji od klienta.
Uruchomienie klienta
W nowym oknie terminala wpisujemy:
Po drodze potwierdzić musimy regulamin użytkowania aplikacji, etc.
Autoryzacja i logowanie do Amazona
Po uruchomieniu klienta powinniśmy zobaczyć okienko z informacją podobną do następującej:
Kopiujemy adres do przeglądarki, logujemy się do konta Amazona i autentykujemy podłączenie urządzenia do naszego profilu bezpieczeństwa. Naciskamy OK. Zostaniemy teraz przekierowani do strony zaczynającej się od https://localhost:3000/authresponse na której wypisana będzie informacja o gotowości do pracy.
Wracamy teraz do aplikacji Javowej i naciskamy przycisk OK. Klient jest teraz gotowy do obsługi zapytań AVS. Naciskamy przycisk "Start Listening" i możemy już wydawać komendy głosowe. Po zakończeniu komendy naciskamy "Stop Listening".
Alexa pytać możemy, np. o pogodę (po angielsku):
Ty: What's the weather in Seattle?
Alexa: Current weather report for Seattle
Poprosić o muzykę: Play Bruce Springsteen
Zadawać pytania z wiedzy ogólnej: What's the mass of the sun in grams?
Odmierzyć czas: Set the timer for 2 minutes.
Ustawić budzik: Set the alarm for 7:30 a.m.
FAQ
* Udało mi się uruchomić AVS na Raspberry Pi, ale nie słyszę odpowiedzi Alexa:
W terminalu sprawdzić możemy czy Alexa nam odpowiada, jeśli tak trzeba być może skorzystać z innego wyjścia audio - jacka 3,5 mm zamiast HDMI. Aby to zrobić, wpisujemy w terminalu:
I ustawiamy odpowiednią opcję Audio.
* Mam problem z npm-em.
Jeśli widzimy błąd "npm not found", to podobnie jak z VLC możemy:
* Jak powinien wyglądać plik ssl.conf?
Aby dostosować go do naszego przypadku, musimy zmienić ustawienia kraju, organizacji i jednostki organizacyjnej:
Źródło: Link
Alexa Voice Service (AVS) to usługa Amazonu, która dodaje do budowanych przez nas urządzeń możliwość rozpoznawania głosu. Jeśli nasz system wyposażony jest w mikrofon i głośniki, a także podłączenie do sieci, możemy zadawać mu głosowo pytania, a uzyskamy od niego odpowiedzi. Tematy rozmów mogą być różnorodne, AVS może podawać informacje o pogodzie, przeszukiwać za nas Wikipedię etc., a dzięki Alexa Skills Kit możemy także dodawać własne funkcje.
Poniższy opis przeprowadzi nas krok po kroku przez instalację wszystkich potrzebnych składników systemu pozwalającego na korzystanie z AVS, opisze przykładowe programy i sprzęt, jaki potrzebny jest nam do korzystania z opisywanej usługi.
Początek
Potrzebny nam będzie szereg elementów. Oprócz samego Raspberry Pi 2 lub 3 potrzebujemy:
* Zasilacz microUSB
* Kartę SD z NOOBSem o pojemności co najmniej 8 GB.
* Kabel ethernet.
* Mikrofon na USB, jako że RPi nie posiada wbudowanego mikrofonu czy wejścia analogowego.
* Klawiaturę i myszkę na USB do obsługi komputera oraz monitor z wejściem HDMI.
* Opcjonalnie - kartę sieciową WiFi na USB.
Przygotowanie Raspberry Pi
Do slotu na kartę SD wkładamy kartę z przygotowanym instalatorem NOOBS, do portów USB podłączamy mikrofon, klawiaturę i mysz a także kartę WiFi, jeśli chcemy z niej korzystać. Podpinamy 'malinę' do monitora poprzez port HDMI i podłączamy do niej zasilanie.
Instalacja systemu
Po podłączeniu komputera do prądu system załaduje z karty instalator NOOBS. Wybieramy w nim, jaki OS chcemy zainstalować - w opisywanym przypadku będzie to Raspbian. Instalacja systemu może trochę potrwać.
Po zainstalowaniu się systemu możemy przejść do programu konfiguracyjnego wpisując raspi-config. W nim możemy ustawić datę, godzinę, włączyć kamerę dodawać nowych użytkowników etc. Naciskając Finish, kończymy pracę programu i resetujemy komputer. Aby załadować interfejs graficzny, po uruchomieniu w linii komend wpisujemy startx. Domyślna nazwa użytkownika i hasło to, odpowiednio, pi i raspberry.
Instalacja oprogramowania
Oprogramowanie instalować będziemy z poziomu terminala, który jest preinstalowany w systemie i jest dostępny z poziomu interfejsu graficznego jak i (oczywiście) linii komend).
Włączenie SSH[/b]
SSH umożliwia zdalny dostęp do linii komend naszego Raspberry Pi z poziomu innego komputera, dzięki temu możliwe będzie zdalne pracowanie na naszej 'malinie' bez konieczności podpinania do niej monitora, klawiatury czy myszy.
Domyślnie SSH jest włączone, jednakże jeśli z jakiejś przyczyny nie jesteśmy w stanie połączyć się z RPi, to warto się upewnić, czy wszystko jest dobrze ustawione w konfiguracji komputera. Podobnie jak przy ustawianiu daty i godziny do konfiguracji dostęp mamy poprzez raspi-config.
[u]Połączenie się do Raspberry Pi poprzez SSH
Aby połączyć się z 'maliną' przez SSH musimy znać jej numer IP. Sprawdzić go możemy wpisując w terminali hostname -I. Komputer poda nam numer IP. Na drugiej maszynie w programie z jakiego korzystamy do połączenia się poprzez SSH (na przykład Putty) wpisujemy pi@<numer IP> i podajemy hasło, gdy komputer nas o nie zapyta. W tym momencie możemy już zdalnie pracować na RPi.
Instalacja serwera VNC
VNC to system pozwalający na udostępnianie pulpitu graficznego, co umożliwi nam zdalne łączenie się z RPi i obsługę interfejsu graficznego z zdalnej maszyny. Rozwiązanie takie jest niezwykle praktyczne - nie potrzebujemy wtedy dodatkowego monitora dla 'maliny'. Aby zainstalować serwer VNC w linii komend, wpisujemy:
Code:
sudo apt-get install tightvncserver
Aby uruchomić serwer VNC, wpisujemy tightvncserver. Musimy też upewnić się, że serwer uruchamiać będzie się za każdym razem, gdy uruchamiać będziemy komputer, dlatego też musimy dodać go do autostartu. Aby to zrobić, musimy wpisać następujące komendy:
Code:
cd /home/pi
cd .config
mkdir autostart
cd autostart
nano tightvnc.desktop
Teraz w nowo stworzonym pliku konfiguracyjnym wpisujemy:
Code:
[Desktop Entry]
Type=Application
Name=TightVNC
Exec=vncserver :1
StartupNotify=false
Aby podłączyć się poprzez VNC do naszego Raspberry Pi, skorzystać możemy z jednego z poradników (linki poniżej), zależnie z jakiego systemu operacyjnego korzystamy na komputerze, z którego się łączymy:
Mac: See https://www.raspberrypi.org/documentation/remote-access/vnc/mac.md
Windows: https://www.raspberrypi.org/documentation/remote-access/vnc/windows.md
Linux: https://www.raspberrypi.org/documentation/remote-access/vnc/linux.md
Instalacja VLC
Aby zainstalować VLC w terminalu, wpisujemy:
Code:
sudo apt-get install vlc-nox vlc-data
Jeśli na naszym Raspberry Pi zainstalowane jest już VLD, usunąć musimy stare pliki konfiguracyjne:
Code:
sudo apt-get remove --purge vlc-plugin-notify
sudo rm /usr/lib/vlc/plugins/codec/libsdl_image_plugin.so
Jeśli podczas instalacji napotkamy błąd "Unable to fetch", musimy spróbować aktualizacji apt-get przed instalacją:
Code:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install vlc-nox vlc-data
Aby przetestować, czy VLC zainstalowało się poprawnie, wpiszmy:
Code:
whereis vlc
Powinniśmy zobaczyć, np:
Code:
vlc: /usr/bin/vlc /usr/lib/vlc /usr/share/vlc /usr/share/man/man1/vlc.1.gz
Aby ustalić zmienne środowiskowe VLC, wpisujemy w terminal:
Code:
export LD_LIBRARY_PATH=/usr/lib/vlc
export VLC_PLUGIN_PATH=/usr/lib/vlc/plugins
Instalacja Node.js
Jeśli komenda node -v zwraca command not found, zainstalować musimy Node.js:
Code:
sudo apt-get update
sudo apt-get upgrade
curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install nodejs
Instalacja Java Development Kit
Na naszym Raspberry Pi zainstalować trzeba Java Development Kit (JDK) w wersji 8 lub wyższej. Najpierw pobieramy ze strony Oracle odpowiedni plik tar.gz z instalacją dla systemu Linux i procesora ARM 32. W czasie pisania tego artykułu był to plik pod nazwą jdk-8u77-linux-arm32-vfp-hflt.tar.gz.
Następnie wypakowujemy zawartość pliku do folderu /opt i instalujemy JDK:
Code:
sudo tar zxvf jdk-8u77-linux-arm32-vfp-hflt.tar.gz -C /opt
sudo update-alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_77/bin/javac 1
sudo update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_77/bin/java 1
sudo update-alternatives --config javac
sudo update-alternatives --config java
Aby zweryfikować poprawność naszych ustawień, wpisujemy:
Code:
java -version
javac -version
Komendy te zwrócą wersję zainstalowanego JDK.
Instalacja Mavena
Pobieramy plik apache-maven-3.3.9-bin.tar.gz z https://maven.apache.org/download.cgi i wypakowujemy jego zawartość do folderu /opt. Następnie musimy skonfigurować miejsce instalacji. Tworzymy nowy plik /etc/profile.d/maven.sh i wpisujemy w nim:
Code:
export M2_HOME=/opt/apache-maven-3.3.9
export PATH=$PATH:$M2_HOME/bin
Po zapisaniu pliku musimy się przelogować, aby skrypt się uruchomił. Sprawdzić instalację Mavena możemy podobnie jak dla JDK, wpisując:
Code:
mvn -version
Konfiguracja Alexa Voice Service
Aby zacząć korzystać z AVSa, musimy założyć darmowe konto developerskie na Amazonie (https://developer.amazon.com/login.html) i pobrać przykładową aplikację, korzystającą z AVSa wraz z pakietami, jakie potrzebuje. Aplikację pobieramy z githuba (https://github.com/amzn/alexa-avs-raspberry-pi/archive/master.zip). Po pobraniu aplikacji z githuba rozpakowujemy i umieszczamy ją w dowolnym folderze na RPi, dla wygody ścieżkę do folderu oznaczać będziemy w dalszej części artykułu <REFERENCE_IMPLEMENTATION>
Teraz możemy zarejestrować się na witrynie Amazona i założyć profil bezpieczeństwa. Na stronie developer.amazon.com po zalogowaniu klikamy w zakładkę Apps & Services -> Alexa -> Alexa Voice Service -> Get Started
Podczas rejestracji produktu wybieramy Device.
Uzupełniamy wymagane dane, na przykład:
Device Type ID: my_device
Display Name: My Device
Aby potwierdzić, naciskamy Next.
Aby stworzyć profil bezpieczeństwa, wybieramy z listy "Security Profile", "Create a new profile".
W zakładce ustawień ogólnych uzupełniamy:
Security Profile Name: Alexa Voice Service Sample App Security Profile
Security Profile Description: Alexa Voice Service Sample App Security Profile Description
I naciskamy Next, co wygeneruje nasze ID oraz tzw. "Client Secret".
Wchodzimy w zakładkę Web Settings, gdzie naciskamy w rozwijanym menu przycisk "Edit". Ustawiamy:
Allowed Origins: Naciskamy "Add Another" i dodajemy wpis https://localhost:3000 w polu tekstowym, jakie się pojawi.
Allowed Return URLs: Naciskamy "Add Another" i wpisujemy https://localhost:3000/authresponse.
Naciskamy Next.
Zapisujemy na naszym komputerze ten obrazek:
W ustawieniach wpisujemy dalej:
Category: Other
Description: Alexa Voice Service sample app test
What is your expected timeline for commercialization?: Longer than 4 months / TBD
How many devices are you planning to commercialize?: 0
Naciskamy Next.
Enable Amazon Music?: No
Naciskamy przycisk Submit.
Wygenerowanie certyfikatów
Aby byłot o możliwe musimy zainstalować SSL:
Code:
sudo apt-get install openssl
Aby sprawdzić poprawność instalacji wpisujemy:
Code:
whereis openssl
Zmieniamy katalog na <REFERENCE_IMPLEMENTATION>/samples/javaclient - tutaj znajduje się nasza aplikacja.
Code:
cd <REFERENCE_IMPLEMENTATION>/samples/javaclient
Teraz edytujemy polik ssl.cnf, który jest plikiem konfiguracyjnym SSL. Wpisujemy wartości we wszystkie pole, gdzie wpisany jest parametr rozpoczynający się od YOUR_
Pamiętajmy, że zmienna countryName to dwie litery - inaczej certyfikat nie będzie działał. Następnie musimy nadać flagę wykonywalności skryptowi generującemu certyfikat SSL i go uruchomić:
Code:
chmod +x generate.sh
./generate.sh
Skrypt zapyta nas o kilka wartości:
Product ID: my_device
Serial number: 123456
Password: nasze hasło
Następnie musimy edytować plik konfiguracyjny serwera Node.js, który znajduje się w <REFERENCE_IMPLEMENTATION>/samples/companionService/config.js.
Ustawiamy sslKey na <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/server/node.key
Ustawiamy sslCert na <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/server/node.crt
Ustawiamy sslCaCert na <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/ca/ca.crt
Następnie musimy zmienić wpisy w pliku konfiguracyjnym klienta Java. Plik znajduje się w <REFERENCE_IMPLEMENTATION>/samples/javaclient/config.json. Wprowadzamy następujące zmiany:
Ustawiamy companionApp.sslKeyStore na <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/server/jetty.pkcs12
Ustawiamy companionApp.sslKeyStorePassphrase na hasło, jakie podaliśmy podczas generacji certyfikatu SSL.
Ustawiamy companionService.sslClientKeyStore na <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/client/client.pkcs12
Ustawiamy companionService.sslClientKeyStorePassphrase na hasło jakie podaliśmy podczas generacji certyfikatu SSL.
Ustawiamy companionService.sslCaCert na <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/ca/ca.crt
Instalacja zależności
Przechodzimy do folderu <REFERENCE_IMPLEMENTATION>/samples/companionService i instalujemy zależności:
Code:
cd <REFERENCE_IMPLEMENTATION>/samples/companionService
npm install
Uruchomienie profilu bezpieczeństwa
W przeglądarce otwieramy stronę visit https://developer.amazon.com/lwa/sp/overview.html, gdzie podajemy "privacy policy URL" zaczynający się od http:// lub https://. Nie musi to być rzeczywisty adres, może być na przykład http://example.com. Dodać możemy też obraz, który wyświetlać będzie się podczas logowania do Amazonu. Zapisujemy ustawienia przyciskiem "Save".
Obok Alexa Voice Service Sample App Security Profile, naciskamy "Show Client ID and Client Secret". Zapisujemy pokazane tam wartości - będziemy potrzebować ich później.
Aktualizacja plików konfiguracyjnych
Logujemy się poprzez VNC do naszej 'maliny' i w edytorze tekstowym otwieramy plik <REFERENCE_IMPLEMENTATION>/samples/companionService/config.js w którym wpisujemy:
clientId: Wartość, którą zapisaliśmy w poprzednim kroku.
clientSecret: Wartość, którą zapisaliśmy w poprzednim kroku.
products: Obiekt ten składa się z klucza, który musi być taki sam jak ID, który wpisaliśmy na portalu Amazona i wartości, która jest tablicą, będącą identyfikatorem produktu. Jeśli postępowaliśmy według poradnika to ID to my_device. Jako unikatowy klucz podać możemy dowolny ciąg znaków, na przykład 123456. Wtedy wpis JSON wyglądać będzie tak: {"my_device": ["123456"]}.
Teraz otwieramy w edytorze tekstowym plik: <REFERENCE_IMPLEMENTATION>/samples/javaclient/config.json i uzupełniamy następujące wartości:
productId: string "my_device"
dsn: Identyfikator produktu, w naszym przypadku wpisane poprzednio 123456.
provisioningMethod: wpisujemy companionService.
Teraz przygotować musimy plik pom.xml. Otwieramy w edytorze tekstowym plik <REFERENCE_IMPLEMENTATION>/samples/javaclient/pom.xml i dodajemy tam sekcję <dependencies>:
Code:
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.1.0</version>
<scope>compile</scope>
</dependency>
Uruchomienie serwera
Po zalogowaniu się do RPi w terminalu wpisujemy:
Code:
cd <REFERENCE_IMPLEMENTATION>/samples/companionService
npm start
Teraz na porcie 3000 pracuje serwer, nasłuchujący informacji od klienta.
Uruchomienie klienta
W nowym oknie terminala wpisujemy:
Code:
cd <REFERENCE_IMPLEMENTATION>/samples/javaclient
chmod +x install-java8.sh
Run the installation script:
./install-java8.sh
mvn validate
mvn install
mvn exec:exec
Po drodze potwierdzić musimy regulamin użytkowania aplikacji, etc.
Autoryzacja i logowanie do Amazona
Po uruchomieniu klienta powinniśmy zobaczyć okienko z informacją podobną do następującej:
Code:
Please register your device by visiting the following website on any system and following the instructions: https://localhost:3000/provision/d340f629bd685deeff28a917 Hit OK once completed.
Kopiujemy adres do przeglądarki, logujemy się do konta Amazona i autentykujemy podłączenie urządzenia do naszego profilu bezpieczeństwa. Naciskamy OK. Zostaniemy teraz przekierowani do strony zaczynającej się od https://localhost:3000/authresponse na której wypisana będzie informacja o gotowości do pracy.
Wracamy teraz do aplikacji Javowej i naciskamy przycisk OK. Klient jest teraz gotowy do obsługi zapytań AVS. Naciskamy przycisk "Start Listening" i możemy już wydawać komendy głosowe. Po zakończeniu komendy naciskamy "Stop Listening".
Alexa pytać możemy, np. o pogodę (po angielsku):
Ty: What's the weather in Seattle?
Alexa: Current weather report for Seattle
Poprosić o muzykę: Play Bruce Springsteen
Zadawać pytania z wiedzy ogólnej: What's the mass of the sun in grams?
Odmierzyć czas: Set the timer for 2 minutes.
Ustawić budzik: Set the alarm for 7:30 a.m.
FAQ
* Udało mi się uruchomić AVS na Raspberry Pi, ale nie słyszę odpowiedzi Alexa:
W terminalu sprawdzić możemy czy Alexa nam odpowiada, jeśli tak trzeba być może skorzystać z innego wyjścia audio - jacka 3,5 mm zamiast HDMI. Aby to zrobić, wpisujemy w terminalu:
Code:
sudo raspi-config
I ustawiamy odpowiednią opcję Audio.
* Mam problem z npm-em.
Jeśli widzimy błąd "npm not found", to podobnie jak z VLC możemy:
Code:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install npm
* Jak powinien wyglądać plik ssl.conf?
Code:
[req]
distinguished_name = req_distinguished_name
prompt = no
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
IP.1 = 127.0.0.1
IP.2 = 10.0.2.2
[req_distinguished_name]
commonName = $ENV::COMMON_NAME # CN=
countryName = US # C=
stateOrProvinceName = NY # ST=
localityName = NY # L=
organizationName = YOUR_ORGANIZATION # O=
organizationalUnitName = YOUR_ORGANIZATIONAL_UNIT # OU=
Aby dostosować go do naszego przypadku, musimy zmienić ustawienia kraju, organizacji i jednostki organizacyjnej:
Code:
countryName = PL
organizationName = Przykladowa_organizacja # O=
organizationalUnitName = Przykladowy_dzial_organizacji # OU=
Źródło: Link
Cool? Ranking DIY