Inhaltsverzeichnis:

Wohnzimmer mit Alexa und Raspberry Pi steuern - Gunook
Wohnzimmer mit Alexa und Raspberry Pi steuern - Gunook

Video: Wohnzimmer mit Alexa und Raspberry Pi steuern - Gunook

Video: Wohnzimmer mit Alexa und Raspberry Pi steuern - Gunook
Video: Homeserver mit Amazon Alexa steuern 2024, November
Anonim
Wohnzimmer mit Alexa und Raspberry Pi. steuern
Wohnzimmer mit Alexa und Raspberry Pi. steuern

Steuern Sie den Fernseher, die Beleuchtung und den Ventilator Ihres Wohnzimmers mit Alexa (Amazon Echo oder Dot) und Raspberry Pi GPIO.

Schritt 1: Ersteinrichtung

Ich habe einen Raspberry Pi 2 und ein Raspbian Jessie-Image verwendet, das von https://www.raspberrypi.org/downloads/raspbian/ heruntergeladen wurde.

Geben Sie nach der Anmeldung die folgenden Befehle ein, um die erforderlichen Pakete und Python-Bibliotheken zu installieren:

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

Schritt 2: Ngrok. einrichten

Ngrok einrichten
Ngrok einrichten

Besuchen Sie https://ngrok.com/download und holen Sie sich die neueste Linux ARM-Version als ZIP-Datei und entpacken Sie sie im Home-Verzeichnis:

entpacken /home/pi/ngrok-stable-linux-arm.zip

Öffnen Sie ein neues Terminal und geben Sie den folgenden Befehl ein:

sudo./ngrok http 4000

Öffnen Sie ein weiteres neues Terminal und geben Sie den folgenden Befehl ein:

sudo./ngrok http 4500

Öffnen Sie das dritte neue Terminal und geben Sie den folgenden Befehl ein:

sudo./ngrok http 5000

Schritt 3: Python-Skript für die Lichtschaltersteuerung

Öffnen Sie eine neue Terminalsitzung und erstellen Sie eine neue Python-Datei namens light_control.py:

nano light_control.py

Kopieren Sie den folgenden Code und fügen Sie ihn in die neue Datei ein:

from Flask import Flaskfrom Flask_ask import Ask, Statement, convert_errors import RPi. GPIO als GPIO import Logging import os GPIO.setmode(GPIO. BCM) app = Flask(_name_) ask = Ask(app, '/') logging.getLogger(" Kolben_ask").setLevel(logging. DEBUG) @ask.intent('LightControlIntent', mapping={'status': 'status'}) def light_control(status): try: pinNum = 27 außer Ausnahme als e: return statement('Pinnummer nicht gültig.') GPIO.setup(pinNum, GPIO. OUT) wenn Status in ['on', 'high']: GPIO.output(pinNum, GPIO. LOW) wenn Status in ['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)

Speichern und schließen Sie die Datei.

Starten Sie den Flaschenserver mit:

sudo python light_control.py

Lassen Sie sowohl ngrok als auch light_control.py laufen

Schritt 4: Python-Skript zur Lüftersteuerung

Öffnen Sie eine neue Terminalsitzung und erstellen Sie eine neue Python-Datei namens fan_control.py:

nano fan_control.py

Kopieren Sie den folgenden Code und fügen Sie ihn in die neue Datei ein:

aus Flaschenimport Flasche

from Flask_ask import Ask, Statement, convert_errors import RPi. GPIO als 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 außer Ausnahme als e: return statement('Pin number nicht gültig.') GPIO.setup(pinNum, GPIO. OUT) wenn Status in ['on', 'high']: GPIO.output(pinNum, GPIO. LOW) wenn Status in ['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)

Speichern und schließen Sie die Datei.

Starten Sie den Flaschenserver mit:

sudo python fan_control.py

Lassen Sie ngrok, light_control.py und fan_control.py laufen

Schritt 5: Installieren und Konfigurieren des LIRC-Pakets

Um den Fernseher zu steuern, müssen Sie einen Pin auf dem Raspberry Pi konfigurieren, um Infrarot (IR)-Signale für Ihren spezifischen Fernseher zu erzeugen. Öffnen Sie das Terminal und geben Sie den folgenden Befehl ein, um ein LIRC-Paket zu installieren, das die Infrarotsignale vieler Fernbedienungen emuliert.

sudo apt-get install lirc

Als nächstes müssen Sie das Kernelmodul lirc_rpi aktivieren und konfigurieren. Öffnen Sie dazu Module im Nano-Editor

sudo nano /etc/modules

Fügen Sie der Datei die folgenden Zeilen hinzu (Stellen Sie sicher, dass der Parameter gpio_out_pin auf den Pin zeigt, der die IR-LED steuert):

lirc_devlirc_rpi gpio_out_pin=17

Als nächstes öffnen Sie die Datei hardware.conf in Nano wie zuvor mit sudo:

sudo nano /etc/lirc/hardware.conf

Fügen Sie der Datei die folgende Konfiguration hinzu:

LIRCD_ARGS="--uinput"LOAD_MODULES=true

DRIVER="Standard"

GERÄT="/dev/lirc0"

MODULE="lirc_rpi"

LIRCD_CONF=""

LIRCMD_CONF=""

Starten Sie nun den Raspberry Pi neu:

sudo neu starten

Schritt 6: Python-Skript für die TV-Steuerung

Öffnen Sie eine neue Terminalsitzung und erstellen Sie eine neue Python-Datei namens ir_control.py:

nano ir_control.py

Gehen Sie zu

Finden Sie eine Fernbedienung, die mit Ihrem Fernseher kompatibel ist. In meinem Fall habe ich einen Sanyo-Fernseher, der mit der Sanyo-tv01-Konfigurationsdatei funktioniert. Sobald Sie eine Datei gefunden haben, die Ihr Fernsehgerät unterstützt, öffnen Sie sie und sehen Sie sich die Befehlsoptionen an.

Kopieren Sie den folgenden Code, fügen Sie ihn in die neue Datei ein und ersetzen Sie sanyo-tv01 durch den Dateinamen, der mit Ihrem Fernseher funktioniert. Stellen Sie außerdem sicher, dass die TV-Befehle von der Konfigurationsdatei Ihres Fernsehers unterstützt werden. Möglicherweise müssen Sie die Befehle KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN und KEY_MUTE ändern, damit sie ordnungsgemäß mit der Konfigurationsdatei Ihres Fernsehgeräts funktionieren:

from Flask import Flaskfrom Flask_ask import Ask, Statement, convert_errors import RPi. GPIO als GPIO import Logging import os GPIO.setmode(GPIO. BCM) app = Flask(_name_) ask = Ask(app, '/') logging.getLogger(" Kolben_ask").setLevel(logging. DEBUG) @ask.intent('GPIOControlIntent', mapping={'status': 'status'}) #'pin': 'pin'}) def tv_function(status): if status in ['turn on']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_POWER") return statement('Turning on the TV') elif status in ['turn off']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_POWER") return-Anweisung('Fernseher ausschalten') elif-Status in ['Eingabe ändern']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_VIDEO") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VIDEO") return Statement('Eingabe am Fernseher ändern') elif Status in ['Lautstärke erhöhen']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("send SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") return statement('Increasing Volume on the TV') elif status in ['decrease 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_SEND_VOLUMEDOWN") ") return statement('Lautstärke des Fernsehers verringern') elif status in ['mute']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return statement('stummschalten des Fernsehers') elif status in ['unmute ']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return statement('Stummschaltung des Fernsehers aufheben') else: return statement('Remote-Funktion nicht gefunden.') if _name_ == '_main_': port = 5000 app.run(host='0.0.0.0', port=port)

Speichern und schließen Sie die Datei.

Starten Sie den Flaschenserver mit:

sudo python ir_control.py

Lassen Sie alle drei ngrok-Terminalfenster light_control.py, fan_control.py und ir_control.py laufen

Schritt 7: Melden Sie sich beim AWS-Konto an

Melden Sie sich beim AWS-Konto an
Melden Sie sich beim AWS-Konto an

Erstellen Sie zuerst Ihr AWS-Entwicklerkonto oder melden Sie sich an und öffnen Sie Ihre Liste der Alexa-Skills.

Schritt 8: TV Alexa Skill-Setup

TV Alexa Skill-Setup
TV Alexa Skill-Setup

Wählen Sie "Neuen Skill hinzufügen".

Setzen Sie den Skill-Namen auf 'Trigger TV' und den Aufrufnamen auf die Wörter, die Sie zum Aktivieren des Skills verwenden möchten.

Klicke weiter um fortzufahren.

Kopieren Sie Folgendes und fügen Sie es in das Feld "Intent-Schema" ein:

{ "Absichten": [{

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

Klicken Sie als Nächstes auf "Slot-Typ hinzufügen".

Geben Sie TV_Function in das Feld 'Typ eingeben' ein.

Geben Sie im Feld 'Werte eingeben' folgende Werte ein:

anmachen

ausschalten Eingang ändern Lautstärke erhöhen Lautstärke verringern stumm schalten

Kopieren Sie als Nächstes Folgendes und fügen Sie es in das Feld "Beispieläußerungen" ein:

GPIOControlIntent {status}

GPIOControlIntent {status} von {amount}

Klicke weiter um fortzufahren.

Wählen Sie 'HTTPS' als Dienstendpunkttyp und wählen Sie eine Region. Geben Sie die ngrok-URL aus Schritt 2 ein und klicken Sie auf 'Weiter'. Die URL sollte etwa so lauten:

ed6ea04d.ngrok.io

Klicken Sie auf „Weiter“, um fortzufahren, und klicken Sie auf „Speichern“.

Schritt 9: Beleuchtet das Alexa-Skill-Setup

Leuchtet Alexa Skill-Setup
Leuchtet Alexa Skill-Setup

Schließen Sie den geöffneten Skill und wählen Sie "Neuen Skill hinzufügen".

Setzen Sie den Skill-Namen auf 'Lights Control' und den Aufrufnamen auf die Wörter, die Sie verwenden möchten, um den Skill zu aktivieren.

Klicke weiter um fortzufahren. Kopieren Sie Folgendes und fügen Sie es in das Feld "Intent-Schema" ein:

{

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

Klicken Sie anschließend auf „Slot-Typ hinzufügen“.

Geben Sie "LIGHTS_CONTROL" in das Feld "Typ eingeben" ein.

Geben Sie im Feld 'Werte eingeben' folgende Werte ein:

An

aus

Kopieren Sie als Nächstes Folgendes und fügen Sie es in das Feld "Beispieläußerungen" ein:

LightsControlIntent Turn {status}

Klicke weiter um fortzufahren. Wählen Sie 'HTTPS' als Dienstendpunkttyp und wählen Sie eine Region aus. Geben Sie die ngrok-URL aus Schritt 2 ein und klicken Sie auf 'Weiter'. Die URL sollte etwa so lauten:

ed6ea04d.ngrok.io

Klicken Sie auf „Weiter“, um fortzufahren, und klicken Sie auf „Speichern“.

Schritt 10: Fan Alexa Skill-Setup

Fan Alexa Skill-Setup
Fan Alexa Skill-Setup

Schließen Sie den geöffneten Skill und wählen Sie "Neuen Skill hinzufügen".

Setzen Sie den Skill-Namen auf 'Fan Control' und den Aufrufnamen auf die Wörter, die Sie verwenden möchten, um den Skill zu aktivieren.

Klicke weiter um fortzufahren.

Kopieren Sie Folgendes und fügen Sie es in das Feld "Intent-Schema" ein:

{

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

Klicken Sie anschließend auf „Slot-Typ hinzufügen“.

Geben Sie "FAN_CONTROL" in das Feld "Typ eingeben" ein.

Geben Sie im Feld 'Werte eingeben' folgende Werte ein:

An

aus

Kopieren Sie als Nächstes Folgendes und fügen Sie es in das Feld "Beispieläußerungen" ein:

FANControlIntent Turn {status}

Klicke weiter um fortzufahren. Wählen Sie 'HTTPS' als Dienstendpunkttyp und wählen Sie eine Region aus. Geben Sie die ngrok-URL aus Schritt 2 ein und klicken Sie auf 'Weiter'. Die URL sollte etwa so lauten:

ed6ea04d.ngrok.io

Klicken Sie auf „Weiter“, um fortzufahren, und klicken Sie auf „Speichern“.

Schritt 11: Bauen Sie die Schaltung auf

Baue den Kreislauf
Baue den Kreislauf

Schließen Sie die Schaltung wie im Diagramm gezeigt an. Ich habe ein JBtek 8-Kanal-DC-5-V-Relaismodul verwendet, um eine Verbindung zu meiner 120-V-AC-Leitung und -Masse herzustellen.

Schritt 12: Alexa-Befehle

Jetzt können die folgenden Befehle an Alexa gesprochen werden, um Ihr Wohnzimmer zu steuern.

Empfohlen: