Sommario:

Controlla il soggiorno con Alexa e Raspberry Pi: 12 passaggi
Controlla il soggiorno con Alexa e Raspberry Pi: 12 passaggi

Video: Controlla il soggiorno con Alexa e Raspberry Pi: 12 passaggi

Video: Controlla il soggiorno con Alexa e Raspberry Pi: 12 passaggi
Video: Comando vocale per usare Home Assistant sul display di Echo Show di Alexa 2024, Dicembre
Anonim
Controlla il soggiorno con Alexa e Raspberry Pi
Controlla il soggiorno con Alexa e Raspberry Pi

Controlla la TV, le luci e la ventola del tuo soggiorno con Alexa (Amazon Echo o Dot) e Raspberry Pi GPIO.

Passaggio 1: configurazione iniziale

Ho usato un Raspberry Pi 2 e un'immagine Raspbian Jessie scaricata da

Una volta effettuato l'accesso, inserisci i seguenti comandi per installare i pacchetti richiesti e le librerie Python:

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

Passaggio 2: configurazione di Ngrok

Configurazione Ngrok
Configurazione Ngrok

Visita https://ngrok.com/download e ottieni l'ultima versione di Linux ARM come zip e decomprimi nella home directory:

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

Apri un nuovo terminale e inserisci il seguente comando:

sudo./ngrok http 4000

Apri un altro nuovo terminale e inserisci il seguente comando:

sudo./ngrok http 4500

Apri il terzo nuovo terminale e inserisci il seguente comando:

sudo./ngrok http 5000

Passaggio 3: script Python per il controllo dell'interruttore della luce

Apri una nuova sessione di terminale e crea un nuovo file python chiamato light_control.py:

nano light_control.py

Copia/incolla il seguente codice nel nuovo file:

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 tranne Eccezione come e: return statement('Numero pin non valido.') GPIO.setup(pinNum, GPIO. OUT) se lo stato in ['on', 'high']: GPIO.output(pinNum, GPIO. LOW) se lo stato 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', porta=porta)

Salva e chiudi il file.

Avvia il server flask con:

sudo python light_control.py

Lascia in esecuzione sia ngrok che light_control.py

Passaggio 4: script Python per il controllo della ventola

Apri una nuova sessione di terminale e crea un nuovo file python chiamato fan_control.py:

nano fan_control.py

Copia/incolla il seguente codice nel nuovo file:

from flask import Flask

from 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('FanControlIntent', mapping={'status': 'status'}) def fan_control(status): try: pinNum = 22 tranne Eccezione come e: return statement('Pin number non valido.') GPIO.setup(pinNum, GPIO. OUT) se lo stato in ['on', 'high']: GPIO.output(pinNum, GPIO. LOW) se lo stato 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 ', porta=porta)

Salva e chiudi il file.

Avvia il server flask con:

sudo python fan_control.py

Lascia entrambi ngrok, light_control.py e fan_control.py in esecuzione

Passaggio 5: installazione e configurazione del pacchetto LIRC

Per controllare la TV devi configurare un pin sul Raspberry Pi per generare segnali a infrarossi (IR) per la tua TV specifica. Apri il terminale e digita il seguente comando per installare un pacchetto LIRC che emuli i segnali infrarossi di molti telecomandi.

sudo apt-get install lirc

Successivamente, è necessario abilitare e configurare il modulo del kernel lirc_rpi. Per farlo, apri i moduli nell'editor Nano

sudo nano /etc/modules

Aggiungi le righe sottostanti al file (assicurati che il parametro gpio_out_pin punti al pin che controlla il LED IR):

lirc_devlirc_rpi gpio_out_pin=17

Quindi, apri il file hardware.conf in Nano come prima con sudo:

sudo nano /etc/lirc/hardware.conf

Aggiungi la seguente configurazione al file:

LIRCD_ARGS="--uinput"LOAD_MODULES=true

DRIVER="predefinito"

DISPOSITIVO="/dev/lirc0"

MODULI="lirc_rpi"

LIRCD_CONF=""

LIRCMD_CONF=""

Ora riavvia il Raspberry Pi:

sudo reboot

Passaggio 6: script Python per il controllo della TV

Apri una nuova sessione di terminale e crea un nuovo file python chiamato ir_control.py:

nano ir_control.py

Vai a

Trova un telecomando compatibile con la tua TV. Nel mio caso ho una Sanyo TV che funziona con il file di configurazione sanyo-tv01. Una volta trovato un file che supporta la tua TV, aprilo e controlla le opzioni del comando.

Copia/incolla il seguente codice nel nuovo file e sostituisci sanyo-tv01 con il nome del file che funziona con la tua TV. Assicurati anche che i comandi tv siano supportati dal file di configurazione della tua TV; Potrebbe essere necessario modificare i comandi KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN e KEY_MUTE per funzionare correttamente con il file di configurazione della TV:

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 ['accendere']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_POWER") dichiarazione di ritorno('accendere la TV') stato elif in ['spegnere']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_POWER") return statement('Spegnimento TV') elif status in ['change input']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_VIDEO") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VIDEO") return statement('Modifica input sulla TV') elif status in ['aumenta 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") return statement('Aumento volume sulla TV') elif status in ['riduzione 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-tv01 SEND_ONUMEDOWN") ") return statement('Diminuzione del volume sulla TV') elif status in ['mute']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return statement('Mute la TV') elif status in ['unmute ']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return statement('Riattivazione dell'audio della TV') else: return statement('Funzione remota non trovata.') if _name_ == '_main_': port = 5000 app.run(host='0.0.0.0', porta=porta)

Salva e chiudi il file.

Avvia il server flask con:

sudo python ir_control.py

Lascia tutte e tre le finestre del terminale ngrok, light_control.py, fan_control.py e ir_control.py in esecuzione

Passaggio 7: accesso all'account AWS

Accedi all'account AWS
Accedi all'account AWS

Per prima cosa crea o accedi al tuo account sviluppatore AWS e apri il tuo elenco di Alexa Skills.

Passaggio 8: configurazione delle abilità di Alexa TV

Configurazione abilità TV Alexa
Configurazione abilità TV Alexa

Seleziona "Aggiungi una nuova abilità".

Imposta il nome dell'abilità su "Trigger TV" e il nome di invocazione sulla parola o sulle parole che desideri utilizzare per attivare l'abilità.

Fare clic su "Avanti" per continuare.

Copia/incolla quanto segue nella casella "Schema di intenti":

{ "intenti": [{

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

Quindi, fai clic su "Aggiungi tipo di slot"

Immettere TV_Function nel campo "Inserisci tipo".

Inserisci i seguenti valori nel campo "Inserisci valori":

accendere

disattiva cambia ingresso aumenta il volume diminuisci il volume muto riattiva l'audio

Quindi, copia/incolla quanto segue nella casella "Enunciati di esempio":

GPIOControlIntent {stato}

GPIOControlIntent {status} per {amount}

Fare clic su "Avanti" per continuare.

Seleziona "HTTPS" come tipo di endpoint del servizio e seleziona una regione. Inserisci l'URL ngrok dal passaggio 2 e fai clic su "Avanti". L'URL dovrebbe essere qualcosa del tipo:

ed6ea04d.ngrok.io

Fare clic su "Avanti" per continuare e premere "Salva".

Passaggio 9: accende la configurazione delle abilità di Alexa

Accende Alexa Skill Setup
Accende Alexa Skill Setup

Chiudi l'abilità aperta e seleziona "Aggiungi una nuova abilità".

Imposta il nome dell'abilità su "Controllo luci" e il nome di invocazione sulle parole che vuoi usare per attivare l'abilità.

Fare clic su "Avanti" per continuare. Copia/incolla quanto segue nella casella "Schema di intenti":

{

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

Quindi, fai clic su "Aggiungi tipo di slot".

Inserisci "LIGHTS_CONTROL" nel campo "Inserisci tipo".

Inserisci i seguenti valori nel campo "Inserisci valori":

Su

spento

Quindi, copia/incolla quanto segue nella casella "Enunciati di esempio":

LightsControlIntento svolta {status}

Fare clic su "Avanti" per continuare. Seleziona "HTTPS" come tipo di endpoint del servizio e seleziona una regione. Inserisci l'URL ngrok del passaggio 2 e fai clic su "Avanti". L'URL dovrebbe essere qualcosa del tipo:

ed6ea04d.ngrok.io

Fare clic su "Avanti" per continuare e premere "Salva".

Passaggio 10: configurazione delle abilità di Alexa dei fan

Configurazione delle abilità di Alexa dei fan
Configurazione delle abilità di Alexa dei fan

Chiudi l'abilità aperta e seleziona "Aggiungi una nuova abilità".

Imposta il nome dell'abilità su "Controllo fan" e il nome di invocazione sulle parole che vuoi usare per attivare l'abilità.

Fare clic su "Avanti" per continuare.

Copia/incolla quanto segue nella casella "Schema di intenti":

{

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

Quindi, fai clic su "Aggiungi tipo di slot".

Inserisci "FAN_CONTROL" nel campo "Inserisci tipo".

Inserisci i seguenti valori nel campo "Inserisci valori":

Su

spento

Quindi, copia/incolla quanto segue nella casella "Espressioni di esempio":

FANControlIntento turno {status}

Fare clic su "Avanti" per continuare. Seleziona "HTTPS" come tipo di endpoint del servizio e seleziona una regione. Inserisci l'URL ngrok del passaggio 2 e fai clic su "Avanti". L'URL dovrebbe essere qualcosa del tipo:

ed6ea04d.ngrok.io

Fare clic su "Avanti" per continuare e premere "Salva".

Passaggio 11: costruisci il circuito

Costruisci il circuito
Costruisci il circuito

Collegare il circuito come mostrato nello schema. Ho usato un modulo relè JBtek a 8 canali DC 5V per collegarmi alla linea e alla terra AC 120v della mia casa.

Passaggio 12: comandi di Alexa

Ora i seguenti comandi possono essere pronunciati con Alexa per controllare il tuo soggiorno.

Consigliato: