Steuern Sie einen Raspberry Pi mit Ihrer Stimme
Anwendung zum Auslösen von Aktionen auf dem RPi
Die Webanwendung wird mit dem Python-Framework namens Flask erstellt.
Wir beginnen mit der Installation des Frameworks auf unserem Rpi.
1
2
|
sudo apt–get install pip
sudo pip install flask
|
Wir erstellen eine Python-Datei, die wir ausführbar machen
1
2
|
touch controle_volets.py
chmox +x controle_volets.py
|
Hier ist der verwendete Code. Ich habe 2 Ressourcen definiert: Öffnen und Schließen.
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’)
|
Im Beispiel verwende ich die Klasse „GpioControl“, die ich Ihnen als Beispiel gebe. Dadurch werden die GPIO-Ports für eine Sekunde in den Zustand „1“ versetzt. Offensichtlich ist dieses Skript spezifisch für die Steuerung meiner Rollläden. Sie müssen Ihre als Teil der Hausautomationssteuerung, die Sie entwickeln, ersetzen.
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()
|
Starten Sie den Flask-Webserver (ich führe in sudo aus, da die GPIO-Bibliothek Root-Rechte erfordert)
1
|
sudo ./controle_volets.py
|
Wir werden die Ressource testen. Unter Linux teste ich mit dem Curl-Tool. Die Syntax ist wie folgt
1
|
curl <url> –d <data> –X type de requete
|
Um die Ressource „Schließung“ zu testen, tippe ich
1
|
curl http://192.168.0.20/fermeture –d « password=monpass » –X POST
|
Tasker-Aktion erstellen
Ich gehe davon aus, dass Sie bereits ein Ereignis erstellt und den Sprachbefehl aufgezeichnet haben. Wir werden nun die mit diesem Ereignis verknüpfte Aktion erstellen.
Die Aktion besteht darin, die HTTP POST-Anforderung an den Flask-Server auf dem Rpi zu senden.
- Geben Sie im zuvor nach dem Anlegen eines Ereignisses geöffneten Aufgabenmenü einen Namen für Ihre Aufgabe ein.
- Klicken Sie auf „+“, um eine neue Aktion hinzuzufügen
- Wir gehen in die Kategorie „Netzwerk“, dann „Post HTTP“
- Bei „Server: Port“ geben wir die IP-Adresse des Rpi sowie den Port des Webservers an. In meinem Fall 5000, der Standardport von Flask
- Geben Sie bei „Pfad“ die URL der angeforderten Ressource ein. In meinem Beispiel / Verschluss
- In „Daten/Datei“ platziere ich meine im POST gesendeten Daten, nämlich ein Passwort. Passwort = "mypass"
Voila, Sie müssen lediglich die Bestellung über Google Now aufrufen. Das gibt es mir.