Kontroluj Raspberry Pi za pomocą głosu
Aplikacja do wyzwalania działań w RPi
Aplikacja internetowa jest tworzona przy użyciu frameworka Pythona o nazwie Flask.
Zaczynamy od zainstalowania frameworka na naszym Rpi.
1
2
|
sudo apt–get install pip
sudo pip install flask
|
Tworzymy plik Pythona, który robimy z niego wykonywalny
1
2
|
touch controle_volets.py
chmox +x controle_volets.py
|
Oto użyty kod. Zdefiniowałem 2 zasoby: otwierający i zamykający.
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’)
|
W przykładzie używam klasy „GpioControl”, którą podam jako przykład. To ustawia porty GPIO w stan „1” na jedną sekundę. Oczywiście ten skrypt jest specyficzny dla sterowania moimi roletami. Musisz wymienić swoje w ramach rozwijanej automatyki domowej.
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()
|
Uruchom serwer sieciowy Flask (uruchamiam w sudo, bo biblioteka GPIO wymaga uprawnień roota)
1
|
sudo ./controle_volets.py
|
Przetestujemy zasób. Na Linuksie testuję za pomocą narzędzia Curl. Składnia jest następująca
1
|
curl <url> –d <data> –X type de requete
|
Aby przetestować zasób „zamknięcie”, wpisuję
1
|
curl http://192.168.0.20/fermeture –d « password=monpass » –X POST
|
Tworzenie akcji Tasker
Zakładam, że utworzyłeś już wydarzenie i nagrałeś polecenie głosowe. Utworzymy teraz akcję powiązaną z tym wydarzeniem.
Akcja będzie polegała na wysłaniu żądania HTTP POST do serwera Flask na Rpi.
- W menu zadań, które zostało wcześniej otwarte po utworzeniu wydarzenia, wprowadź nazwę swojego zadania.
- Kliknij „+”, aby dodać nową akcję
- Przechodzimy do kategorii „Sieć”, a następnie „Post HTTP”
- W „Serwer: Port” podajemy adres IP Rpi oraz port serwera WWW. W moim przypadku 5000, domyślny port Flask
- W „ścieżce” wprowadź adres URL żądanego zasobu. W moim przykładzie / zamknięcie
- W „Dane/plik” umieszczam swoje dane przesłane w POST, czyli hasło. hasło = „moje hasło”
Voila, pozostaje tylko zadzwonić do zamówienia przez Google Now. To mi daje.