Développez votre propre compétence Alexa Raspberry Pi et contrôlez Pi à distance

1591858802 Developpez votre propre competence Alexa Raspberry Pi et controlez Pi
1591858802 Developpez votre propre competence Alexa Raspberry Pi et controlez Pi

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:

Affectation des broches GPIO du Raspberry Pi

Affectation des broches GPIO du Raspberry Pi

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:

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

NgrokNous 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.

Créer une compétence Alexa Raspberry Pi - Nouvelle compétence

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 »:

Créer une compétence Alexa Raspberry Pi - Type d'emplacement

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):

Amazon Alexa Skill Slot Values

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):

Créer une compétence Alexa Raspberry Pi - Ajouter une intention

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):

Emplacement pour objectif de compétence Alexa Raspberry Pi

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:

Raspberry Pi Alexa Skill Light Intent

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

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« .

Amazon Alexa Skill Endpoint

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.