Maak een budget Alexa van je Raspberry PI

Hier gaan we onze PI ombouwen tot een echte ‘Alexa’, of dit financieel gezien de moeite is laat ik in het midden, maar gewoon omdat het kan. De door Amazon op de markt gebrachte Alexa is dus voorzien van een Open Source stukje software, je moet dan wel registreren bij Amazon, maar daarna ben je als gebruiker vrij om ermee te doen en laten wat je wil.

Ik gebruik hiervoor de net uitgekomen versie van Raspbian ‘Stretch“, verder zal ik alle uit voeren handelingen en commando’s hier weergeven.

Lets go:

Benodigdheden:

  • Raspberry PI (GUI enabled – met toegang via VNC of via beeldscherm, toetsenbord en muis)
  • Een goede voeding van je PI
  • Micro SD kaart
  • Netwerk verbinding
  • USB microfoon
  • Speakers

Optioneel:

  • Behuizing voor je PI

Registratie bij Amazon:
Stap 1: Eerst gaan we registreren bij Amazon voor een Developer Account.
Die doen we door naar de volgende link te gaan Amazon’s Developer website en de stappen te volgen. Als je al een account hebt bij Amazon log je in, heb je nog geen account maak je dit aan. Zodra je dit hebt aangemaakt en bent ingelogd kunnen we onze configuratie aanmaken, klik op de tab ALEXA (3e van links) zie schermafdruk hieronder.

Stap 2: Op het volgende scherm klik je op Alexa Voice Service

Stap 3: Nu kunnen we ons apparaat gaan aanmaken, in de scherm kliken we op Register a Product en daarna op Device.

Stap 4: Op dit scherm moeten we een naam kiezen voor ons product namelijk Device Type ID en onze Display Name. Ik heb gekozen voor Raspberry_PI en Raspberry_PI en dat kunnen we ook onthouden, deze hebben we namelijk weer nodig. Klik op Next.

Stap 5: In dit scherm zien we een zogenaamde drop-down box, we selecteren ‘Create a new profile’ waarna we de voldende velden moeten invullen: Security Profile Name en Security Profile Description. Ook hier weer simpel en te begrijpen namen is wel zo handig. ‘colani’ en ‘Profiel van Colani’, en we klikken op Next.

Stap 6: In dit scherm zien we de informatie die we straks nodig hebben om de Raspberry PI met Amazon te verbinden, Dus kopieer en plak de Security Profile ID, Client ID, Amazon ID en Client Secret in een tekstbestand en bewaar dit op een veilige plaats waarna we op Next klikken.

Stap 7: In dit scherm moeten we op Edit klikken en daarna op Next voor we kunnen verder gaan.

Stap 8: In dit scherm moeten we de url’s aanpassen, het gaat om de voldgende 2 url’s Allowed Origins and Allowed Return URLs. onder elke link staat “Add Another link“.  Door hierop te klikken kunnen we deze aanpassen, en wel als volgt:

In de textbox, naast Allowed Origins voeren we in: https://localhost:3000
In de textbox, naast Allowed Return URLs voeren we in: https://localhost:3000/authresponse

En we klikken op Next.

Stap 9: Dit is de laatste stap voor we aan de PI zelf gaan werken, je kan hier aangeven wat je wil natuurlijk maar ik heb gekozen voor:

Product category: Smart Home

Brief product description: Raspberry PI testing

How will end users interact with your product? Hands Free

En we klikken op Submit om alles te bevestigen.

Stap 10: Nu alles klaar is hoop ik dat je nog weet waar je code’s staan die hebben we zo meteen nodig.


Installeren van Alexa op de Raspberry PI

Stap 1: Mat het benodigde developer account van Amazon kunnen we verder en klonen we de Alexa AVS voorbeelden naar onze Raspberry PI en installeren deze.

Bijna de gehele installatie kan via SSH, je moet echte wel een paar handelingen via de Grafische Desktop GUI van de Raspberry PI uitvoeren, dit kan natuurlijk via VNC.

Nu Maken we eerst verbinding met onze PI via SSH, we gaan gebruik maken van GIT en bij de versie van Raspbian light  is GIT niet geinstalleerd, dat doen we als volgt:
sudo apt-get update

sudo apt-get upgrade

sudo apt-get install git-core

GIT is nu geïnstalleerd en we kunnen verder.

Voer uit: cd ~

We installeren de Alexa AVS Samples repository door het uitvoeren van het volgende commando.
git clone https://github.com/alexa/alexa-avs-sample-app.git

Stap 2: Zodra het clonen klaar is voeren we uit:
cd ~/alexa-avs-sample-app

Stap 3: Nu we in de juiste map staan moeten we het installatie script aanpassen met onze Amazon informatie die we hebben opgeslagen, dus we hebben nodig: Device Type ID, Client ID en Client Secret.

We voeren uit: nano automated_install.sh

Stap 4:

  1. Vervang de regel ‘YOUR_PRODUCT_ID_HERE‘ met je Device Type ID.
  2. Vervang de regel ‘YOUR_CLIENT_ID_HERE‘ met je Client ID.
  3. Vervang de regel ‘YOUR_CLIENT_SECRET_HERE‘ met Client Secret.

Zodra je alle informatie juist hebt ingevuld slaan we dit bestand op met CTRL + X gevolgd door Y en druk op enter.

Stap 5: Nu alles is ingevuld kunnen we Alexa gaan installeren, we voeren uit:
. automated_install.sh

Stap 6: Er komen verschillende vragen voorbij, beantwoord deze met ‘Y’ en druk daarna op enter om verder te gaan.

Stap 7: We beantwoorden weer met ‘Y’ en drukken op enter.

Stap 8: De vraag of alle informatie klopt? We beantwoorden weer met ‘Y’ en drukken op enter.

Stap 9: Nu vraagt de installatie om onze regio, we kiezen in deze uitleg voor optie 1 en-US en drukken op enter om door te gaan.

Stap 10: Op dit scherm moeten we selecteren welke interface we gaan gebruiken voor de audio uitgang, wij gaan de 3.5 mm jack gebruiken in dit voorbeeld. We typen ‘1’ en drukken op enter om door te gaan:

Stap 11: Het laatste scherm voor de installatie gaat beginnen, de vraag of we gebruik willen maken van het woord ‘Alexa’ om onze Raspberry PI / Alexa wakker te maken, we kiezen voor ‘Y’ en drukken op enter om door te gaan.

De installatie gaat nu beginnen……. We gaan dus koffie zetten, dit kan wel even duren………


De configuratie en setup van de Raspberry PI Alexa voor je Amazon Echo

Stap 1: Om de installatie af te ronden moet je een beeldscherm, toetsenbord en muis op je Raspberry PI aansluiten of verbinding maken via VNC. Dit omdat de activatie van je Alexa via een op Java gebaseerde authenticatie verbinding moet maken met Amazon en dit niet kan vanuit de terminal.

Om verder te gaan starten we eerst de Alexa WEB service, we voeren uit in een terminal op de PI of via VNC:
cd ~/alexa-avs-sample-app/samples/companionService
npm start
Als de service is gestart zie het resultaat zoals in onderstaande screenshot:

Stap 2: We laten deze terminal open staan en openen een nieuw terminal venster met ‘CTRL + T’, in deze terminal starten we de Java app welke onze Raspberry PI Alexa gaat registreren bij Amazon. We voeren uit:
cd ~/alexa-avs-sample-app/samples/javaclient
mvn exec:exec

Stap 3: Dit opent een nieuw venster met de vraag of of de authenticatie mag doorgaan, klik op ‘Yes’ om toe te staan dat er een browser wordt geopend in Chromium. Een 2e pop-up vraagt nu om op oke te klikken, dat doen we nog niet, laat dit venster staan!

Stap 4: We zien een melding dat de verbinding niet ‘private’ is, dit omdat we een zelf ‘gesigneerd’ (ondertekend) SSL certificaat hebben gemaakt bij de installatie van de Raspberry PI, we klikken op ‘Show Advanced’ en dan op Proceed to localhost (unsafe).

Stap 5: Nu krijgen we een Amazon scherm met de vraag om onze inlagnaam en wachtwoord, vul deze in en klik op ‘Sign in using our secure server’.

Stap 6: Nadat je bent ingelogd zie je een authenticatie-scherm voor je Raspberry PI, klik op ‘Okay’ om door te gaan. Zodra alles is gelukt zie je verschijnen: “Device Tokens Ready“.

Stap 7: Zodra je de pagina met ‘Device Tokens Ready’ ziet kun je op ‘OK‘ klikken op de popup pagina welke we in stap 3 kregen.

Stap 8: Nu gan we de ‘Wake Word Engine’ starten. Hiermee kunnen we de Raspberry PI ‘wakker’ maken om te luisteren naar commando’s. We gebruiken hiervoor de KITT.AI wake word software. Open een nieuwe terminal met CTRL + T.

Voer uit:
cd ~/alexa-avs-sample-app/samples/wakeWordAgent/src
./wakeWordAgent -e kitt_ai

Je Raspberry PI Alexa moet nu klaar zijn voor gebruik en je hebt nu een bruikbare Amazone Echo tot je beschikking.
Om te testen zeg je ‘Alexa” en je Raspberry PI Alexe antwoord met een piepje waarna je een commando of vraag kan geven. Dat is alles wat je hoeft te doen, voorlopig echter alles allen nog in het Engels, maar daar komt snel verandering in.
Je kan nu vragen “Alexa” en na de beep ‘What’s the weather?’

Mocht je microfoon een en ander niet goed registreren kun je deze nog wel wat finetunen, maar werkt alles naar behoren kun je dit overslaan.


Verbeteren van je microfoon instellingen (GAIN)

Stap 1: Mocht je microfoon niet alles goed oppikken kan het verhogen van je GAIN een oplossing zijn, dit doen we met ‘alsamixer’.

Voer uit:
alsamixer

Stap 2: Nu de AlsaMixer app is gestart kun je met F6 een andere bron kiezen en met de pijltjestoetsen de GAIN verhogen of verlagen.

Stap 3: Met de microfoon geslecteerd gebruik je de pijltjestoetsen om het opnamevolume te verhogen, zodra dit naar je wensen is druk je op ‘ESC’ om de app af te sluiten. (LET OP: De informatie is nog niet opgeslagen!)

Stap 4: Om je wijzigen op te slaan voer je uit:
sudo alsactl store


Je Raspberry PI met Amazon Echo starten tijdens het booten

Stap 1: Je wil je Raspberry PI Amazon Echo laten starten tijdens het booten, dat doen we met de volgende stappen. Het is noodzakelijk dat je Raspberry PI nog steeds opstart in de Grafische omgeving, er is nog een Java client die je Amazon Echo nodig heeft.

Als eerste moeten we het start script aanmaken, we voeren uit:
nano /home/pi/alexa_startup.sh

Stap 2: Hier voegen we de volgende regels toe, het script start een nieuw terminalvenster voor elke regel, dit met een tussenpose van 30 en 120 seconden op de scripts de tijd te geven om ook werkelijk op te starten.

Voeg toe:
#!/bin/bash
lxterminal -t "NPM" --geometry=40x2 --working-directory="/home/pi/alexa-avs-sample-app/samples/companionService" --command npm start &
sleep 30
lxterminal -t "JVM" --geometry=40x2 --working-directory="/home/pi/alexa-avs-sample-app/samples/javaclient" --command mvn exec:exec &
sleep 120
lxterminal -t "WAKE" --geometry=40x2 --working-directory="/home/pi/alexa-avs-sample-app/samples/wakeWordAgent/src" --command ./wakeWordAgent -e kitt_ai &

En als je alles exact hebt overgeomen slaan we dit bestand op met CTRL + X bevestig met ‘Y’ en druk op enter.

Stap 3: Nu moeten we het bestand nog uitvoerbaar maken, voer uit:
chmod 755 /home/pi/alexa_startup.sh

Stap 4: En nu zorgen we er voor dat het script ook werkelijk start tijdens de boot:
Voer uit in je terminal:
nano /home/pi/.config/lxsession/LXDE-pi/autostart

Zoek de regel: @xscreensaver -no-splash

En zet er een hekje ‘#’ voor, deze ziet er dan zo uit: #@xscreensaver -no-splash

We voegen nog een regel toe: @/home/pi/alexa_startup.sh

Het bestand moet er nu zo uit zien:
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
#@xscreensaver -no-splash
@/home/pi/alexa_startup.sh
@point-rpi

Als dit allemaal klopt slaan we dit bestand op met CTRL + X bevestig met ‘Y’ en druk op enter.

Stap 5: Nu alles is aangepas moeten we de Raspberry PI herstarten, voer uit:
sudo reboot

Na ongeveer 2 minuten is Je Raspberry PI Alexa weer online en klaar voor gebruik. Je hebt nu een volledig functionerende Raspberry PI Amazone Echo tot je beschikking.

Veel plezier!