Commander un Raspberry Pi avec la voix
Application pour déclencher les actions sur le RPi
L’application web est créé à l’aide du framework Python nommée Flask.
On commence par installer le framework sur notre Rpi.
1
2
|
sudo apt–get install pip
sudo pip install flask
|
On créé un fichier python que l’on rend exécutable
1
2
|
touch controle_volets.py
chmox +x controle_volets.py
|
Voici le code utilisé. J’ai défini 2 ressources: ouverture et fermeture.
1
2
3
4
5
6
7
8
9
10
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
|
#! /usr/bin/python
# -*- coding:utf-8 -*-
from flask import Flask, request
from gpio_control import GpioControl
app = Flask(__name__)
@app.route(‘/’)
def index():
return « App de control des volets »
@app.route(‘/ouverture’, methods=[‘POST’])
def ouverture():
if request.method == ‘POST’:
if request.values[‘password’] == « monpass »:
# lancez ici le script que vous voulez
print « ouverture volet »
gpio_ouverture = GpioControl()
gpio_ouverture.ouverture()
else:
print « mauvais pass »
return « Ouverture des volets »
@app.route(‘/fermeture’, methods=[‘POST’])
def fermeture():
if request.method == ‘POST’:
if request.values[‘password’] == « monpass »:
print « Fermeture des volets »
gpio_fermeture = GpioControl()
gpio_fermeture.fermeture()
else:
print « mauvais pass »
return « Fermeture des volets »
if __name__ == ‘__main__’:
app.run(debug=True, host=‘0.0.0.0’)
|
Dans l’exemple je fais appel à la classe “GpioControl” que je vous donne à titre d’exemple. Celui ci place les ports GPIO dans un état “1” pendant une seconde. Evidemment, ce script est spécifique au contrôle de mes volets roulants. Vous devez le remplacer la le votre dans le cadre du contrôle domotique que vous développez.
1
2
3
4
5
6
7
8
9
10
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
|
import time
import RPi.GPIO as gpio
class GpioControl:
def __init__(self):
pass
def ouverture(self):
# on passe en mode BMC qui veut dire que nous allons utiliser directement
# le numero GPIO plutot que la position physique sur la carte
gpio.setmode(gpio.BCM)
# defini le port GPIO 4 comme etant une sortie output
gpio.setup(4, gpio.OUT)
# Mise a 1 une seconde puis 0 une seconde
gpio.output(4, gpio.HIGH)
time.sleep(1)
gpio.output(4, gpio.LOW)
gpio.cleanup()
def fermeture(self):
# on passe en mode BMC qui veut dire que nous allons utiliser directement
# le numero GPIO plutot que la position physique sur la carte
gpio.setmode(gpio.BCM)
# defini le port GPIO 4 comme etant une sortie output
gpio.setup(22, gpio.OUT)
# Mise a 1 une seconde puis 0 une seconde
gpio.output(22, gpio.HIGH)
time.sleep(1)
gpio.output(22, gpio.LOW)
gpio.cleanup()
|
Lancer le serveur Web Flask (je lance en sudo car la librairie GPIO nécessite des droits root)
1
|
sudo ./controle_volets.py
|
On va tester la ressource. Sur Linux je test à l’aide de l’outil Curl. La syntaxe est la suivante
1
|
curl <url> –d <data> –X type de requete
|
Pour tester la ressource “fermeture” je tape donc
1
|
curl http://192.168.0.20/fermeture –d « password=monpass » –X POST
|
Création de l’action Tasker
Je suppose que vous avez déjà créé un événement et enregistré la commande vocale. On va maintenant créer l’action associée à cet événement.
L’action va consister à envoyer la requête HTTP de type POST au serveur Flask sur le Rpi.
- Dans le menu de tache précédemment ouvert suite à la création d’un événement, saisissez un nom à votre tache.
- Cliquer sur “+” pour ajouter une nouvelle action
- On se rend dans la catégorie “Réseau”, puis “Post HTTP”
- Dans “Serveur:Port” on donne l’adresse ip du Rpi ainsi que le port du serveur Web. Dans mon cas 5000, le port par défaut de Flask
- Dans “chemin ” on saisie l’URL de la ressource demandée. Dans mon exemple /fermeture
- Dans “Data/file” je place ma donnée envoyée dans le POST, à savoir un mot de passe. password=”monpass”
Voila, il ne reste plus qu’a appeler la commande via Google Now. Voila ce que ça donne chez moi.