Innholdsfortegnelse:

Kontroller stue med Alexa og Raspberry Pi: 12 trinn
Kontroller stue med Alexa og Raspberry Pi: 12 trinn

Video: Kontroller stue med Alexa og Raspberry Pi: 12 trinn

Video: Kontroller stue med Alexa og Raspberry Pi: 12 trinn
Video: Home Assistant. Урок 9.4 ADD-ON - Xiaomi Gateway 3, интеграция в zigbee2mqtt 2024, November
Anonim
Kontroller stue med Alexa og Raspberry Pi
Kontroller stue med Alexa og Raspberry Pi

Kontroller stuen din TV, lys og vifte med Alexa (Amazon Echo eller Dot) og Raspberry Pi GPIO.

Trinn 1: Første oppsett

Jeg brukte et Raspberry Pi 2 og et Raspbian Jessie -bilde lastet ned fra

Når du er logget inn, skriver du inn følgende kommandoer for å installere de nødvendige pakkene og python -bibliotekene:

sudo apt-get update && sudo apt-get upgrade -ysudo apt-get install python2.7-dev python-dev python-pip sudo pip installere kolbe kolbe-spør sudo apt-get install lirc

Trinn 2: Konfigurer Ngrok

Oppsett Ngrok
Oppsett Ngrok

Besøk https://ngrok.com/download og få den nyeste Linux ARM -versjonen som en zip og pakke ut i hjemmekatalogen:

pakke ut /home/pi/ngrok-stable-linux-arm.zip

Åpne en ny terminal og skriv inn følgende kommando:

sudo./ngrok http 4000

Åpne en ny terminal og skriv inn følgende kommando:

sudo./ngrok http 4500

Åpne den tredje nye terminalen og skriv inn følgende kommando:

sudo./ngrok http 5000

Trinn 3: Python -skript for lysbryterkontroll

Åpne en ny terminalsession og opprett en ny python -fil som heter light_control.py:

nano light_control.py

Kopier/lim inn følgende kode i den nye filen:

fra flaskeimport Flaskfrå 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): prøv: pinNum = 27 unntatt Unntak som e: returoppgave ('PIN -nummer er ikke gyldig.') GPIO.setup (pinNum, GPIO. OUT) hvis status i ['on', 'high']: GPIO.output (pinNum, GPIO. LOW) hvis status i ['off', ' lav ']: GPIO.output (pinNum, GPIO. HIGH) returoppgave (' Slå {} Living Room Lights'.format (status)) hvis _name_ == '_main_': port = 4000 app.run (host = ' 0.0.0.0 ', port = port)

Lagre og lukk filen.

Start kolbe -serveren med:

sudo python light_control.py

La både ngrok og light_control.py være i gang

Trinn 4: Python -skript for viftekontroll

Åpne en ny terminaløkt og opprett en ny python -fil som heter fan_control.py:

nano fan_control.py

Kopier/lim inn følgende kode i den nye filen:

fra kolbeimport Flaske

fra 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 unntatt Unntak som e: returoppgave ('Pin -nummer) ikke gyldig. ') GPIO.setup (pinNum, GPIO. OUT) hvis status i [' on ',' high ']: GPIO.output (pinNum, GPIO. LOW) hvis status i [' off ',' low ']: GPIO.output (pinNum, GPIO. HIGH) returerklæring ('Slå {} opplysningene i stuen'. Format (status)) hvis _name_ == '_main_': port = 4500 app.run (host = '0.0.0.0 ', port = port)

Lagre og lukk filen.

Start kolbe -serveren med:

sudo python fan_control.py

La både ngrok, light_control.py og fan_control.py være i gang

Trinn 5: Installere og konfigurere LIRC -pakken

For å kontrollere TV -en må du konfigurere en pin på Raspberry Pi for å generere infrarøde (IR) signaler for din spesifikke TV. Åpne terminalen og skriv inn følgende kommando for å installere en LIRC -pakke som emulerer de infrarøde signalene til mange fjernkontroller.

sudo apt-get install lirc

Deretter må du aktivere og konfigurere kjernemodulen lirc_rpi. For å gjøre det, åpne moduler i Nano -editoren

sudo nano /etc /modules

Legg til linjene nedenfor i filen (Sørg for at parameteren gpio_out_pin peker på pinnen som styrer IR -LED):

lirc_devlirc_rpi gpio_out_pin = 17

Deretter åpner du hardware.conf -filen i Nano som før med sudo:

sudo nano /etc/lirc/hardware.conf

Legg til følgende konfigurasjon i filen:

LIRCD_ARGS = "-uinput" LOAD_MODULES = true

DRIVER = "standard"

ENHET = "/dev/lirc0"

MODULES = "lirc_rpi"

LIRCD_CONF = ""

LIRCMD_CONF = ""

Start nå Raspberry Pi på nytt:

sudo omstart

Trinn 6: Python -skript for TV -kontroll

Åpne en ny terminaløkt og opprett en ny python -fil som heter ir_control.py:

nano ir_control.py

Gå til

Finn en fjernkontroll som er kompatibel med TV -en din. I mitt tilfelle har jeg en Sanyo TV som fungerer med konfigurasjonsfilen sanyo-tv01. Når du finner en fil som støtter TV -en din, åpner du den og ser gjennom kommandoalternativene.

Kopier/lim inn følgende kode i den nye filen og erstatt sanyo-tv01 med filnavnet som fungerer med TV-en. Sørg også for at TV -kommandoene støttes av konfigurasjonsfilen til TV -en din; Du må kanskje endre kommandoene KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN og KEY_MUTE for å fungere korrekt med TV -ens konfigurasjonsfil:

fra flaskeimport Flaskfrå 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): hvis status i ['slå på']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER") returerklæring ('Slå på TVen') elif-status i ['slå av']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER ") returoppgave ('Slå av TV') elif-status i ['endre inngang']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") retur statement ('Endring av inngang på TV') elif-status i ['øk volum']: 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 ") returoppgave ('Økende volum på TV') elifstatus i ['reduser volum']: os.system (" send 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 "tv" ") returoppgave ('Reduserende volum på TV-en') elif-status i ['mute']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_MUTE ") returoppgave ('dempet TV') elif-status i ['unmute ']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") returoppgave (' Unmuting the TV ') else: return statement (' Remote function not found. ') if _name_ ==' _main_ ': port = 5000 app.run (vert = '0.0.0.0', port = port)

Lagre og lukk filen.

Start kolbe -serveren med:

sudo python ir_control.py

La alle tre ngrok terminalvinduer, light_control.py, fan_control.py og ir_control.py være i gang

Trinn 7: Logg på AWS -konto

Logg på AWS -konto
Logg på AWS -konto

Opprett eller logg først på AWS -utviklerkontoen din og åpne listen over Alexa Skills.

Trinn 8: TV Alexa Skill Setup

TV Alexa ferdighetsoppsett
TV Alexa ferdighetsoppsett

Velg "Legg til en ny ferdighet".

Sett ferdighetsnavnet til 'Trigger TV' og påkallingsnavnet til ordene du vil bruke for å aktivere ferdigheten.

Klikk "Neste" for å fortsette.

Kopier/lim inn følgende i "Intens Schema" -boksen:

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

Deretter klikker du på 'Legg til spiltype'

Skriv inn TV_Function i feltet "Skriv inn".

Skriv inn følgende verdier i feltet "Skriv inn verdier":

Slå på

slå av endre inngang øke volum redusere volum dempe unmute

Deretter kopierer/limer du inn følgende i "Eksempeluttalelser" -boksen:

GPIOControlIntent {status}

GPIOControlIntent {status} etter {amount}

Klikk "Neste" for å fortsette.

Velg 'HTTPS' som Service Endpoint Type og velg en region. Skriv inn ngrok URL fra trinn 2 og klikk 'Next'. Nettadressen skal være omtrent som:

ed6ea04d.ngrok.io

Klikk "Neste" for å fortsette og trykk "Lagre".

Trinn 9: Lyser opp Alexa Skill Setup

Lyser Alexa Skill Setup
Lyser Alexa Skill Setup

Lukk den åpne ferdigheten og velg "Legg til en ny ferdighet".

Sett ferdighetsnavnet til 'Lights Control' og påkallingsnavnet til ordene du vil bruke for å aktivere ferdigheten.

Klikk "Neste" for å fortsette. Kopier/lim inn følgende i "Intens Schema" -boksen:

{

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

Deretter klikker du på 'Legg til spiltype'.

Skriv inn "LIGHTS_CONTROL" i feltet "Skriv inn".

Skriv inn følgende verdier i feltet "Skriv inn verdier":

av

Deretter kopierer/limer du inn følgende i "Eksempeluttalelser" -boksen:

LightsControlIntent sving {status}

Klikk "Neste" for å fortsette. Velg 'HTTPS' som Service Endpoint Type og velg en region. Skriv inn ngrok URL fra trinn 2, og klikk "Neste". Nettadressen skal være omtrent som:

ed6ea04d.ngrok.io

Klikk "Neste" for å fortsette og trykk "Lagre".

Trinn 10: Vift Alexa Skill Setup

Fan Alexa Skill Setup
Fan Alexa Skill Setup

Lukk den åpne ferdigheten og velg "Legg til en ny ferdighet".

Sett ferdighetsnavnet til 'Fan Control' og påkallingsnavnet til ordene du vil bruke for å aktivere ferdigheten.

Klikk "Neste" for å fortsette.

Kopier/lim inn følgende i "Intens Schema" -boksen:

{

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

Deretter klikker du på 'Legg til spiltype'.

Skriv inn "FAN_CONTROL" i feltet "Skriv inn".

Skriv inn følgende verdier i feltet "Skriv inn verdier":

av

Deretter kopierer/limer du inn følgende i "Eksempeluttalelser" -boksen:

FANControlIntent sving {status}

Klikk "Neste" for å fortsette. Velg 'HTTPS' som Service Endpoint Type og velg en region. Skriv inn ngrok -URL -en fra trinn 2 og klikk "Neste". Nettadressen skal være omtrent som:

ed6ea04d.ngrok.io

Klikk "Neste" for å fortsette og trykk "Lagre".

Trinn 11: Bygg sirenen

Bygg Ciruit
Bygg Ciruit

Koble til kretsen som vist i diagrammet. Jeg brukte en JBtek 8 -kanals DC 5V relemodul for å koble til hjemmet mitt AC 120v linje og jord.

Trinn 12: Alexa -kommandoer

Nå kan følgende kommandoer snakkes til Alexa for å kontrollere stua.

Anbefalt: