Inhoudsopgave:

Bedien de woonkamer met Alexa en Raspberry Pi: 12 stappen
Bedien de woonkamer met Alexa en Raspberry Pi: 12 stappen

Video: Bedien de woonkamer met Alexa en Raspberry Pi: 12 stappen

Video: Bedien de woonkamer met Alexa en Raspberry Pi: 12 stappen
Video: 345 – Homey als de Apple onder de smarthomeplatformen met Emile Nijssen 2024, September
Anonim
Bedien de woonkamer met Alexa en Raspberry Pi
Bedien de woonkamer met Alexa en Raspberry Pi

Bedien de tv, verlichting en ventilator in je woonkamer met Alexa (Amazon Echo of Dot) en Raspberry Pi GPIO.

Stap 1: Initiële installatie

Ik gebruikte een Raspberry Pi 2 en een Raspbian Jessie-afbeelding gedownload van

Nadat u bent ingelogd, voert u de volgende opdrachten in om de vereiste pakketten en python-bibliotheken te installeren:

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

Stap 2: Stel Ngrok in

Ngrok instellen
Ngrok instellen

Ga naar https://ngrok.com/download en ontvang de nieuwste Linux ARM-release als een zip en pak deze uit in de homedirectory:

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

Open een nieuwe terminal en voer het volgende commando in:

sudo./ngrok http 4000

Open een andere nieuwe terminal en voer de volgende opdracht in:

sudo./ngrok http 4500

Open de derde nieuwe terminal en voer de volgende opdracht in:

sudo./ngrok http 5000

Stap 3: Python-script voor lichtschakelaarbediening

Open een nieuwe terminalsessie en maak een nieuw python-bestand met de naam light_control.py:

nano light_control.py

Kopieer/plak de volgende code in het nieuwe bestand:

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 behalve Exception as e: return statement('Pinnummer niet geldig.') GPIO.setup(pinNum, GPIO. OUT) als status in ['on', 'high']: GPIO.output(pinNum, GPIO. LOW) als 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', poort=poort)

Sla het bestand op en sluit het.

Start de kolfserver met:

sudo python light_control.py

Laat zowel ngrok als light_control.py actief

Stap 4: Python-script voor ventilatorregeling

Open een nieuwe terminalsessie en maak een nieuw python-bestand met de naam fan_control.py:

nano fan_control.py

Kopieer/plak de volgende code in het nieuwe bestand:

uit kolf 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 behalve Exception as e: return statement('Pin number niet geldig.') GPIO.setup(pinNum, GPIO. OUT) als status in ['on', 'high']: GPIO.output(pinNum, GPIO. LOW) als 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 ', poort=poort)

Sla het bestand op en sluit het.

Start de kolfserver met:

sudo python fan_control.py

Laat zowel ngrok, light_control.py en fan_control.py actief

Stap 5: Het LIRC-pakket installeren en configureren

Om de tv te kunnen bedienen, moet je een pin op de Raspberry Pi configureren om infraroodsignalen (IR) voor je specifieke tv te genereren. Open terminal en voer de volgende opdracht in om een LIRC-pakket te installeren dat de infraroodsignalen van veel afstandsbedieningen emuleert.

sudo apt-get install lirc

Vervolgens moet u de kernelmodule lirc_rpi inschakelen en configureren. Open hiervoor modules in de Nano-editor

sudo nano /etc/modules

Voeg de onderstaande regels toe aan het bestand (zorg ervoor dat de gpio_out_pin parameter wijst naar de pin die de IR LED bestuurt):

lirc_devlirc_rpi gpio_out_pin=17

Open vervolgens het hardware.conf-bestand in Nano zoals eerder met sudo:

sudo nano /etc/lirc/hardware.conf

Voeg de volgende configuratie toe aan het bestand:

LIRCD_ARGS="--uinput"LOAD_MODULES=true

DRIVER="standaard"

DEVICE="/dev/lirc0"

MODULES="lirc_rpi"

LIRCD_CONF=""

LIRCMD_CONF=""

Start nu de Raspberry Pi opnieuw op:

sudo reboot

Stap 6: Python-script voor tv-bediening

Open een nieuwe terminalsessie en maak een nieuw python-bestand met de naam ir_control.py:

nano ir_control.py

Ga naar

Zoek een afstandsbediening die compatibel is met uw tv. In mijn geval heb ik een Sanyo TV die werkt met het sanyo-tv01 configuratiebestand. Zodra u een bestand hebt gevonden dat uw tv ondersteunt, opent u het en bekijkt u de opdrachtopties.

Kopieer/plak de volgende code in het nieuwe bestand en vervang sanyo-tv01 door de bestandsnaam die bij uw tv past. Zorg er ook voor dat de tv-opdrachten worden ondersteund door het configuratiebestand van uw tv; Mogelijk moet u de opdrachten KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN en KEY_MUTE aanpassen om correct te werken met het configuratiebestand van uw 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): als 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 statement('Tv uitschakelen') 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('Invoer wijzigen op de tv') elif-status in ['volume verhogen']: 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('Increasing Volume on the TV') elif status in ['volume verlagen']: 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("ONCEsend sanyo-tv01 KEY_VOLUMEDOWN") ") return statement('Decreasing Volume on the TV') elif status in ['mute']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return statement('De TV dempen') elif status in ['unmute' ']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return statement('Unmuting the TV') else: return statement('Externe functie niet gevonden.') if _name_ == '_main_': port = 5000 app.run(host='0.0.0.0', poort=poort)

Sla het bestand op en sluit het.

Start de kolfserver met:

sudo python ir_control.py

Laat alle drie de ngrok-terminalvensters, light_control.py, fan_control.py en ir_control.py draaien

Stap 7: Log in op AWS-account

Inloggen op AWS-account
Inloggen op AWS-account

Maak eerst of log in op uw AWS-ontwikkelaarsaccount en open uw lijst met Alexa-vaardigheden.

Stap 8: TV Alexa Skill Setup

TV Alexa Vaardigheid instellen
TV Alexa Vaardigheid instellen

Selecteer "Een nieuwe vaardigheid toevoegen".

Stel de vaardigheidsnaam in op 'Trigger TV' en de aanroepnaam op het woord of de woorden die u wilt gebruiken om de vaardigheid te activeren.

Klik op 'volgende' om door te gaan.

Kopieer/plak het volgende in het vak 'Intent Schema':

{ "intenties": [{

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

Klik vervolgens op 'Slottype toevoegen'

Typ TV_Function in het veld 'Type invoeren'.

Typ de volgende waarden in het veld 'Waarden invoeren':

aanzetten

uitzetten invoer wijzigen volume verhogen volume verlagen mute dempen opheffen

Kopieer/plak vervolgens het volgende in het vak 'Voorbeelduitingen':

GPIOControlIntent {status}

GPIOControlIntent {status} met {amount}

Klik op 'volgende' om door te gaan.

Selecteer 'HTTPS' als het type service-eindpunt en selecteer een regio. Voer de ngrok-URL uit stap 2 in en klik op 'Volgende'. De URL zou zoiets moeten zijn als:

ed6ea04d.ngrok.io

Klik op 'Volgende' om verder te gaan en druk op 'Opslaan'.

Stap 9: Verlichting Alexa Skill Setup

Verlichting Alexa Skill Setup
Verlichting Alexa Skill Setup

Sluit de open vaardigheid en selecteer "Een nieuwe vaardigheid toevoegen".

Stel de vaardigheidsnaam in op 'Lights Control' en de Invocation Name op de woorden die je wilt gebruiken om de vaardigheid te activeren.

Klik op 'volgende' om door te gaan. Kopieer/plak het volgende in het vak 'Intent Schema':

{

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

Klik vervolgens op 'Slottype toevoegen'.

Typ "LIGHTS_CONTROL" in het veld 'Type invoeren'.

Typ de volgende waarden in het veld 'Waarden invoeren':

Aan

uit

Kopieer/plak vervolgens het volgende in het vak 'Voorbeelduitingen':

LightsControlIntent beurt {status}

Klik op 'volgende' om door te gaan. Selecteer 'HTTPS' als het type service-eindpunt en selecteer een regio. Voer de ngrok-URL uit stap 2 in en klik op 'Volgende'. De URL zou zoiets moeten zijn als:

ed6ea04d.ngrok.io

Klik op 'Volgende' om verder te gaan en druk op 'Opslaan'.

Stap 10: Fan Alexa Skill Setup

Ventilator Alexa Vaardigheid instellen
Ventilator Alexa Vaardigheid instellen

Sluit de open vaardigheid en selecteer "Een nieuwe vaardigheid toevoegen".

Stel de Skill Name in op 'Fan Control' en de Invocation Name op de woorden die je wilt gebruiken om de skill te activeren.

Klik op 'volgende' om door te gaan.

Kopieer/plak het volgende in het vak 'Intent Schema':

{

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

Klik vervolgens op 'Slottype toevoegen'.

Typ "FAN_CONTROL" in het veld 'Type invoeren'.

Typ de volgende waarden in het veld 'Waarden invoeren':

Aan

uit

Kopieer/plak vervolgens het volgende in het vak 'Voorbeelduitingen':

FANControlIntent beurt {status}

Klik op 'volgende' om door te gaan. Selecteer 'HTTPS' als het type service-eindpunt en selecteer een regio. Voer de ngrok-URL uit stap 2 in en klik op 'Volgende'. De URL zou zoiets moeten zijn als:

ed6ea04d.ngrok.io

Klik op 'Volgende' om verder te gaan en druk op 'Opslaan'.

Stap 11: Bouw de Ciruit

Bouw de Ciruit
Bouw de Ciruit

Sluit de schakeling aan zoals aangegeven in het schema. Ik heb een JBtek 8-kanaals DC 5V-relaismodule gebruikt om verbinding te maken met de AC 120v-lijn en aarde van mijn huis.

Stap 12: Alexa-opdrachten

Nu kunnen de volgende commando's tegen Alexa worden uitgesproken om je woonkamer te bedienen.

Aanbevolen: