Table des matières:

Contrôler le salon avec Alexa et Raspberry Pi : 12 étapes
Contrôler le salon avec Alexa et Raspberry Pi : 12 étapes

Vidéo: Contrôler le salon avec Alexa et Raspberry Pi : 12 étapes

Vidéo: Contrôler le salon avec Alexa et Raspberry Pi : 12 étapes
Vidéo: Home Assistant - первые настройки, File Editor, Maria DB, HACS - октябрь 2023 2024, Juin
Anonim
Contrôler le salon avec Alexa et Raspberry Pi
Contrôler le salon avec Alexa et Raspberry Pi

Contrôlez la télévision, les lumières et le ventilateur de votre salon avec Alexa (Amazon Echo ou Dot) et Raspberry Pi GPIO.

Étape 1: configuration initiale

J'ai utilisé un Raspberry Pi 2 et une image Raspbian Jessie téléchargée à partir de

Une fois connecté, saisissez les commandes suivantes pour installer les packages et les bibliothèques python requis:

sudo apt-get update && sudo apt-get upgrade -ysudo apt-get install python2.7-dev python-dev python-pip sudo pip install Flask flask-ask sudo apt-get install lirc

Étape 2: Configurer Ngrok

Configurer Ngrok
Configurer Ngrok

Visitez https://ngrok.com/download et obtenez la dernière version de Linux ARM sous forme de zip et décompressez dans le répertoire personnel:

décompressez /home/pi/ngrok-stable-linux-arm.zip

Ouvrez un nouveau terminal et entrez la commande suivante:

sudo./ngrok http 4000

Ouvrez un autre nouveau terminal et entrez la commande suivante:

sudo./ngrok http 4500

Ouvrez le troisième nouveau terminal et entrez la commande suivante:

sudo./ngrok http 5000

Étape 3: Script Python pour le contrôle de l'interrupteur d'éclairage

Ouvrez une nouvelle session de terminal et créez un nouveau fichier python nommé light_control.py:

nano light_control.py

Copiez/collez le code suivant dans le nouveau fichier:

from flask import Flaskfrom flask_ask import Ask, statement, convert_errors import RPi. GPIO as GPIO import logging import os GPIO.setmode(GPIO. BCM) app = Flask(_name_) ask = Ask(app, '/') logging.getLogger(" flask_ask").setLevel(logging. DEBUG) @ask.intent('LightControlIntent', mapping={'status': 'status'}) def light_control(status): try: pinNum = 27 except Exception as e: return statement('Numéro de broche non valide.') GPIO.setup(pinNum, GPIO. OUT) si état dans ['on', 'high']: GPIO.output(pinNum, GPIO. LOW) si état dans ['off', ' low']: GPIO.output(pinNum, GPIO. HIGH) return statement('Turning {} the Living Room Lights'.format(status)) if _name_ == '_main_': port = 4000 app.run(host=' 0.0.0.0', port=port)

Enregistrez et fermez le fichier.

Démarrez le serveur de flacons avec:

sudo python light_control.py

Laissez ngrok et light_control.py en cours d'exécution

Étape 4: Script Python pour le contrôle des ventilateurs

Ouvrez une nouvelle session de terminal et créez un nouveau fichier python nommé fan_control.py:

nano fan_control.py

Copiez/collez le code suivant dans le nouveau fichier:

de la fiole import fiole

de flask_ask importer Ask, instruction, convert_errors importer RPi. GPIO en tant que GPIO import logging import os GPIO.setmode(GPIO. BCM) app = Flask(_name_) ask = Ask(app, '/') logging.getLogger("flask_ask").setLevel(logging. DEBUG) @ask.intent('FanControlIntent', mapping={'status': 'status'}) def fan_control(status): try: pinNum = 22 except Exception as e: return statement('Pin number non valide.') GPIO.setup(pinNum, GPIO. OUT) si état dans ['on', 'high']: GPIO.output(pinNum, GPIO. LOW) si état dans ['off', 'low']: GPIO.output(pinNum, GPIO. HIGH) return statement('Turning {} the Living Room Lights'.format(status)) if _name_ == '_main_': port = 4500 app.run(host='0.0.0.0 ', port=port)

Enregistrez et fermez le fichier.

Démarrez le serveur de flacons avec:

sudo python fan_control.py

Laissez ngrok, light_control.py et fan_control.py en cours d'exécution

Étape 5: Installation et configuration du package LIRC

Afin de contrôler le téléviseur, vous devez configurer une broche sur le Raspberry Pi pour générer des signaux infrarouges (IR) pour votre téléviseur spécifique. Ouvrez le terminal et entrez la commande suivante pour installer un package LIRC qui émule les signaux infrarouges de nombreuses télécommandes.

sudo apt-get install lirc

Ensuite, vous devez activer et configurer le module de noyau lirc_rpi. Pour ce faire, ouvrez les modules dans l'éditeur Nano

sudo nano /etc/modules

Ajoutez les lignes ci-dessous au fichier (assurez-vous que le paramètre gpio_out_pin pointe vers la broche contrôlant la LED IR):

lirc_devlirc_rpi gpio_out_pin=17

Ensuite, ouvrez le fichier hardware.conf dans Nano comme auparavant avec sudo:

sudo nano /etc/lirc/hardware.conf

Ajoutez la configuration suivante au fichier:

LIRCD_ARGS="--uinput"LOAD_MODULES=true

DRIVER="par défaut"

APPAREIL="/dev/lirc0"

MODULES="lirc_rpi"

LIRCD_CONF=""

LIRCMD_CONF=""

Maintenant, redémarrez le Raspberry Pi:

redémarrage sudo

Étape 6: Script Python pour le contrôle TV

Ouvrez une nouvelle session de terminal et créez un nouveau fichier python nommé ir_control.py:

nano ir_control.py

Allez sur

Trouvez une télécommande compatible avec votre téléviseur. Dans mon cas, j'ai un téléviseur Sanyo qui fonctionne avec le fichier de configuration sanyo-tv01. Une fois que vous avez trouvé un fichier prenant en charge votre téléviseur, ouvrez-le et parcourez les options de commande.

Copiez/collez le code suivant dans le nouveau fichier et remplacez sanyo-tv01 par le nom de fichier qui fonctionne avec votre téléviseur. Assurez-vous également que les commandes tv sont prises en charge par le fichier de configuration de votre téléviseur; Vous devrez peut-être modifier les commandes KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN et KEY_MUTE pour qu'elles fonctionnent correctement avec le fichier de configuration de votre téléviseur:

from flask import Flaskfrom flask_ask import Ask, statement, convert_errors import RPi. GPIO as GPIO import logging import os GPIO.setmode(GPIO. BCM) app = Flask(_name_) ask = Ask(app, '/') logging.getLogger(" flask_ask").setLevel(logging. DEBUG) @ask.intent('GPIOControlIntent', mapping={'status': 'status'}) #'pin': 'pin'}) def tv_function(status): if status in ['allumer']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_POWER") déclaration de retour ('Allumer le téléviseur') état elif dans ['éteindre']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_POWER") déclaration de retour ('Éteindre le téléviseur') état elif dans ['changer l'entrée']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_VIDEO") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VIDEO") return instruction('Modification de l'entrée sur le téléviseur') état elif dans ['augmenter le volume']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") déclaration de retour ("Augmentation du volume sur le téléviseur") état elif dans ['diminuer le volume']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system("irsend SEND_ONCE sanyo ") return statement('Diminution du volume sur le téléviseur') état elif dans ['mute']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return statement('Mettre le téléviseur en sourdine') état elif dans ['unmute ']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") déclaration de retour ('Réactiver le son du téléviseur') else: déclaration de retour('Fonction à distance introuvable.') if _name_ == '_main_': port = 5000 app.run(hôte='0.0.0.0', port=port)

Enregistrez et fermez le fichier.

Démarrez le serveur de flacons avec:

sudo python ir_control.py

Laissez les trois fenêtres de terminal ngrok, light_control.py, fan_control.py et ir_control.py en cours d'exécution

Étape 7: connexion au compte AWS

Connectez-vous au compte AWS
Connectez-vous au compte AWS

Créez d'abord ou connectez-vous à votre compte de développeur AWS et ouvrez votre liste de compétences Alexa.

Étape 8: Configuration des compétences TV Alexa

Configuration des compétences TV Alexa
Configuration des compétences TV Alexa

Sélectionnez "Ajouter une nouvelle compétence".

Définissez le nom de la compétence sur « Trigger TV » et le nom d'appel sur le(s) mot(s) que vous souhaitez utiliser pour activer la compétence.

Cliquer sur Suivant pour continuer.

Copiez/collez les éléments suivants dans la zone « Intent Schema »:

{ "intentions": [{

"slots": [{ "name": "status", "type": "TV_Function" }, { "name": "amount", "type": "AMAZON. NUMBER" }], "intent": "GPIOControlIntent " }] }

Ensuite, cliquez sur « Ajouter un type d'emplacement »

Entrez TV_Function dans le champ 'Entrez le type'.

Saisissez les valeurs suivantes dans le champ « Saisir des valeurs »:

allumer

éteindre changer l'entrée augmenter le volume diminuer le volume couper le son rétablir le son

Ensuite, copiez/collez ce qui suit dans la case « Exemples d'énoncés »:

GPIOControlIntent {statut}

GPIOControlIntent {status} par {amount}

Cliquer sur Suivant pour continuer.

Sélectionnez « HTTPS » comme type de point de terminaison de service et sélectionnez une région. Saisissez l'URL ngrok de l'étape 2 et cliquez sur « Suivant ». L'URL devrait ressembler à ceci:

ed6ea04d.ngrok.io

Cliquez sur « Suivant » pour continuer et appuyez sur « Enregistrer ».

Étape 9: Configuration des compétences Alexa des lumières

Configuration de la compétence Lights Alexa
Configuration de la compétence Lights Alexa

Fermez la compétence ouverte et sélectionnez « Ajouter une nouvelle compétence ».

Définissez le nom de la compétence sur « Contrôle des lumières » et le nom d'invocation sur le(s) mot(s) que vous souhaitez utiliser pour activer la compétence.

Cliquer sur Suivant pour continuer. Copiez/collez les éléments suivants dans la zone « Intent Schema »:

{

"intents": [{ "slots": [{ "name": "status", "type": "LIGHTS_CONTROL" }], "intent": "LightsControlIntent" }] }

Ensuite, cliquez sur « Ajouter un type d'emplacement ».

Saisissez "LIGHTS_CONTROL" dans le champ "Enter Type".

Saisissez les valeurs suivantes dans le champ « Saisir des valeurs »:

au

désactivé

Ensuite, copiez/collez ce qui suit dans la case « Exemples d'énoncés »:

LightsControlIntent turn {status}

Cliquer sur Suivant pour continuer. Sélectionnez « HTTPS » comme type de point de terminaison de service et sélectionnez une région. Entrez l'URL ngrok de l'étape 2 et cliquez sur « Suivant ». L'URL devrait être quelque chose comme:

ed6ea04d.ngrok.io

Cliquez sur « Suivant » pour continuer et appuyez sur « Enregistrer ».

Étape 10: Configuration des compétences Fan Alexa

Configuration de la compétence Fan Alexa
Configuration de la compétence Fan Alexa

Fermez la compétence ouverte et sélectionnez « Ajouter une nouvelle compétence ».

Définissez le nom de la compétence sur « Contrôle du ventilateur » et le nom d'appel sur le(s) mot(s) que vous souhaitez utiliser pour activer la compétence.

Cliquer sur Suivant pour continuer.

Copiez/collez les éléments suivants dans la zone « Intent Schema »:

{

"intents": [{ "slots": [{ "name": "status", "type": "FAN_CONTROL" }], "intent": "FANControlIntent" }] }

Ensuite, cliquez sur « Ajouter un type d'emplacement ».

Saisissez « FAN_CONTROL » dans le champ « Entrez le type ».

Saisissez les valeurs suivantes dans le champ « Saisir des valeurs »:

au

désactivé

Ensuite, copiez/collez ce qui suit dans la case « Exemples d'énoncés »:

FANControlIntent turn {status}

Cliquer sur Suivant pour continuer. Sélectionnez « HTTPS » comme type de point de terminaison de service et sélectionnez une région. Entrez l'URL ngrok de l'étape 2 et cliquez sur « Suivant ». L'URL devrait être quelque chose comme:

ed6ea04d.ngrok.io

Cliquez sur « Suivant » pour continuer et appuyez sur « Enregistrer ».

Étape 11: Construire le circuit

Construire le circuit
Construire le circuit

Connectez le circuit comme indiqué sur le schéma. J'ai utilisé un module de relais JBtek 8 canaux DC 5V pour me connecter à la ligne et à la terre AC 120v de ma maison.

Étape 12: Commandes Alexa

Maintenant, les commandes suivantes peuvent être parlées à Alexa pour contrôler votre salon.

Conseillé: