La commande vocale est un élément de plus en plus important dans les maisons intelligentes. À cette fin, Amazon fournit des compétences qui s’exécutent sur Amazon Echo Dot, les clés Fire TV, les smartphones et autres appareils. De cette façon, les compétences Alexa de Raspberry Pi peuvent également être créées de manière simple.
Les compétences peuvent être publiées en option et même de l’argent peut être gagné avec elles. Dans ce tutoriel, nous allons créer une compétence Alexa qui exécutera des commandes sur notre Raspberry Pi local. Nous allons passer en revue tous les points de ce processus étape par étape.
Divers autres fournisseurs tels que Google («OK Google»), Apple (Siri) et Microsoft (Cortana) ont également des assistants linguistiques et offrent la possibilité d’écrire vos propres compétences. Si vous êtes intéressé, nous pouvons les montrer dans de futurs tutoriels.
Ce didacticiel comprend la création de commandes LED simples, mais de nombreux autres scénarios peuvent être créés à l’aide de petits ajustements.
Matériel requis
Le logiciel fonctionne complètement sur le Pi. Nous avons également besoin du matériel qui sera exploité par commande vocale. Pour cela, nous utiliserons les éléments suivants:
Un appareil Amazon avec Alexa est également requis. Ceux-ci sont:
Préparation et programmation Raspberry Pi
Avant de créer la compétence Alexa réelle, nous devons installer et configurer quelques éléments. Tout d’abord, nous avons besoin d’un compte de développeur Amazon. Nous créons d’abord un compte sur developer.amazon.com ou connectez-vous avec le compte Amazon existant.
Ensuite, nous nous occupons de la configuration sur le Raspberry Pi.
Connexion du matériel Raspberry Pi et installation du logiciel
Avant de démarrer le Pi, connectez une simple LED avec l’extrémité longue au GPIO 17 et l’extrémité courte à la masse. Ici vous pouvez voir l’affectation des broches:
Idéalement, vous pouvez également connecter une petite résistance (220Ω) entre la masse et la LED.
Étant donné que cet exemple est très simple, je voudrais vous donner de meilleures idées de projets:
Installation
Maintenant, connectez par exemple via SSH avec le Raspberry Pi. Tout d’abord, nous installons le logiciel requis. Nous utilisons les packages Python Ballon ou Flask-Ask, ce qui facilite l’écriture des compétences d’Amazon Alexa:
python3 -m pip install Flask-Ask pip3 install --upgrade setuptools pip3 install 'cryptography<2.2'
Comme vous pouvez le voir, nous avons utilisé une version inférieure à 2.2 de la cryptographie du package. Avec des versions plus récentes. il y a souvent des erreurs en relation avec Flask.
Créons maintenant le fichier python qui contient notre code:
sudo python3 alexaskill.py
Ce fichier a le contenu suivant:
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
importation enregistrement importation os de ballon importation Ballon de flask_ask importation Demander, demande, session, question, déclaration importation RPi.GPIO comme GPIO app = Ballon(__Nom__) demander = Demander(app, « / ») enregistrement.getLogger(‘flask_ask’).setLevel(enregistrement.DÉBOGUER) STATUT = [[« sur », « allumer », « activer », « allumer », « Activer », « allumer »] # toutes les valeurs définies comme synonymes dans le type STATUSOFF = [[« de », « éteindre », « désactiver », « éteindre », « désactiver », « éteindre »] @demander.lancement def lancement(): speech_text = «Bienvenue dans l’automatisation Raspberry Pi alexa.» revenir question(speech_text).reprocher(speech_text).simple_card(speech_text) @demander.intention(«LightIntent», cartographie = {‘statut’:‘statut’}) def Gpio_Intent(statut,chambre): GPIO.avertissements(Faux) GPIO.mode réglages(GPIO.BCM) GPIO.installer(17,GPIO.EN DEHORS) si statut dans STATUT: GPIO.production(17,GPIO.HAUTE) revenir déclaration(«La lumière était allumée») elif statut dans STATUSOFF: GPIO.production(17,GPIO.FAIBLE) revenir déclaration(«La lumière a été éteinte») autre: revenir déclaration(« Désolé, cette commande n’est pas possible. ») @demander.intention(«AMAZON.HelpIntent») def Aidez-moi(): speech_text = «Vous pouvez me dire bonjour! revenir question(speech_text).reprocher(speech_text).simple_card(‘Bonjour le monde’, speech_text) @demander.session_ended def session_ended(): revenir « {} », 200 si __Nom__ == ‘__principale__’: si ‘ASK_VERIFY_REQUESTS’ dans os.environ: Vérifier = str(os.environ.avoir(‘ASK_VERIFY_REQUESTS’, »)).inférieur() si Vérifier == ‘faux’: app.config[[‘ASK_VERIFY_REQUESTS’] = Faux app.courir(déboguer=Vrai) |
Enregistrez le fichier avec Ctrl + O et fermez l’éditeur avec Ctrl + X. Ensuite, nous exécutons le fichier:
python3 alexaskill.py
Accessibilité en dehors du réseau local
Nous avons maintenant un serveur Raspberry Pi en cours d’exécution, mais celui-ci n’est accessible que via le réseau local. Il doit être accessible au public afin qu’Amazon puisse appeler notre Raspberry Pi plus tard.
Nous pourrions soit utiliser un service dDNS et activer les ports du routeur, soit utiliser ngrok. Cela a l’avantage de pouvoir sauvegarder la configuration.
Ouvrez un nouveau terminal (ne pas fermer l’ancien) et entrez ce qui suit:
wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.zip unzip ngrok-stable-linux-arm.zip
Ensuite, nous pouvons commencer:
./ngrok http 5000
Nous avons ensuite besoin de la deuxième URL (https) pour Amazon.
Attention: En tant qu’utilisateur non enregistré, la connexion sera réinitialisée après 8 heures et vous obtiendrez une nouvelle URL. Vous pouvez changer cela en enregistrement et en fournissant votre token:
./ngrok authtoken
Il est également possible de choisir soi-même le sous-domaine. Vous pouvez trouver plus d’informations sur ngrok dans le Documentation.
./ngrok http -subdomain=myveryownamazonalexaskill 5000
Soit dit en passant: nous pouvons également démarrer les deux commandes (script Python et ngrok) via le démarrage automatique.
Configuration de la compétence Alexa Raspberry Pi dans le compte de développeur Amazon
Nous appuyons sur le bouton «Créer une compétence» Amazon Developer Console. Ici, nous attribuons un nom (par exemple, «Raspberry Pi»), choisissons la langue et le modèle «personnalisé». La méthode d’hébergement est «Provisionnez la vôtre». Ensuite, nous cliquons sur «Créer une compétence» dans le coin supérieur droit.
Ensuite, nous appuyons sur le signe plus à côté de « Types d’emplacement » (modèles d’interaction) et créons un nouveau type appelé « ÉTAT »:
Pour cela, nous créons deux «valeurs». On leur donne les noms «on» et «off» et nous définissons également tous les synonymes possibles (ce sont les mêmes synonymes qui sont également spécifiés dans le script Python):
Comme dernière étape de configuration, nous créons une «intention» (cliquez sur le signe plus) avec le nom «LightIntent» (le même nom qui a également été spécifié dans le script):
Dans la partie inférieure, nous ajoutons d’abord le «slot d’intention». Ici, nous choisissons le type « STATUS » et nous l’appelons également « status » (minuscules):
Dans la partie supérieure, vous pouvez maintenant saisir toutes les commandes vocales possibles, telles que «éteindre la lumière». En double-cliquant sur un mot, vous pouvez le remplacer par le slot:
Pensez aux différentes combinaisons que vous souhaitez utiliser plus tard. Habituellement, l’appel est par ex. comme suit:
Alexa, dis Raspberry PI, [turn on light / turn off light / …]
La deuxième partie est donc importante et doit être définie dans cette partie. Enregistrez le modèle et appuyez sur «Build Model».
Ici encore le fichier JSON généré. Vous pouvez aussi simplement les coller
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
{ « interactionModel »: { « languageModel »: { « invocationName »: « RaspBerry PI », « modelConfiguration »: { « fallbackIntentSensitivity »: { « niveau »: « FAIBLE » } }, « intentions »: [[ { « Nom »: « AMAZON.FallbackIntent », « échantillons »: [[] }, { « Nom »: « AMAZON.CancelIntent », « échantillons »: [[] }, { « Nom »: « AMAZON.HelpIntent », « échantillons »: [[] }, { « Nom »: « AMAZON.StopIntent », « échantillons »: [[] }, { « Nom »: « AMAZON.NavigateHomeIntent », « échantillons »: [[] }, { « Nom »: « LightIntent », « slots »: [[ { « Nom »: « statut », « type »: « STATUT » } ], « échantillons »: [[ « light {status} » ] } ], « les types »: [[ { « Nom »: « STATUT », « valeurs »: [[ { « id »: « sur », « Nom »: { « valeur »: « de », « synonymes »: [[ « allumer », « activer », « allumer », « Activer », « allumer » ] } }, { « id »: « de », « Nom »: { « valeur »: « sur », « synonymes »: [[ « éteindre », « désactiver », « éteindre », « désactiver », « éteindre » ] } } ] } ] } } } |
Enfin et surtout, nous devons spécifier l’URL du serveur auquel les commandes sont envoyées. Pour ce faire, cliquez sur «Endpoint» à gauche, sélectionnez HTTPs et collez l’URL de ngrok dans «Default Region». Choisissez également l’option suivante: « Mon point de terminaison de développement est un sous-domaine d’un domaine qui possède un certificat générique d’une autorité de certification« .
N’oubliez pas de l’enregistrer.
Testez la nouvelle compétence Alexa Raspberry Pi – localement et sur les appareils Amazon Echo
Nous voulons maintenant tester la compétence Alexa Raspberry Pi. Il existe différentes options pour cela, que nous allons examiner. Idéalement, les deux sont réalisés successivement:
1. Amazon Developer Console – Test
Dans la Developer Console, il y a la possibilité d’envoyer des commandes via enregistrement vocal ou texte sous l’onglet «Test». Pour ce faire, vous devez autoriser votre navigateur à utiliser votre microphone. Vous pouvez voir cette commande sur le côté droit.
2. Test en direct sur Amazon Echo (Dot), Fire TV Stick, etc.
Nous voulons que nos compétences développées s’exécutent en permanence sur les appareils Amazon. Pour ce faire, nous devons d’abord ajouter tous les appareils à notre compte. Comment cela fonctionne est, entre autres, décrit ici. Vous pouvez voir tous les appareils Alexa soit dans l’application pour smartphone (Android, iOS) ou dans le tableau de bord Amazon.
Vous pouvez également ajouter facilement de nouveaux appareils dans les applications. Dès que l’appareil est lié au compte, la compétence peut déjà être utilisée.
Quels projets avez-vous en tête? D’autres idées et suggestions en tant que commentaires sont les bienvenues.