Съдържание:

Контролирайте хола с Alexa и Raspberry Pi: 12 стъпки
Контролирайте хола с Alexa и Raspberry Pi: 12 стъпки

Видео: Контролирайте хола с Alexa и Raspberry Pi: 12 стъпки

Видео: Контролирайте хола с Alexa и Raspberry Pi: 12 стъпки
Видео: Raspberry PI 4B, installing Supervised Home Assistant on RaspiOS 64 - checking instructions 2024, Ноември
Anonim
Управлявайте хола с Alexa и Raspberry Pi
Управлявайте хола с Alexa и Raspberry Pi

Управлявайте телевизора, осветлението и вентилатора в хола си с Alexa (Amazon Echo или Dot) и Raspberry Pi GPIO.

Стъпка 1: Първоначална настройка

Използвах Raspberry Pi 2 и изображение на Raspbian Jessie, изтеглено от

След като влезете, въведете следните команди, за да инсталирате необходимите пакети и библиотеки на 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

Стъпка 2: Настройка на Ngrok

Настройка на Ngrok
Настройка на Ngrok

Посетете https://ngrok.com/download и вземете най -новата версия на Linux ARM като цип и разархивирайте в домашната директория:

разархивирайте /home/pi/ngrok-stable-linux-arm.zip

Отворете нов терминал и въведете следната команда:

sudo./ngrok http 4000

Отворете друг нов терминал и въведете следната команда:

sudo./ngrok http 4500

Отворете третия нов терминал и въведете следната команда:

sudo./ngrok http 5000

Стъпка 3: Python скрипт за управление на превключвателя на светлината

Отворете нова терминална сесия и създайте нов python файл с име light_control.py:

nano light_control.py

Копирайте/поставете следния код в новия файл:

от колба за импортиране Flaskот flask_ask импортиране Питане, изявление, convert_errors импортиране на RPi. GPIO като GPIO импортиране на регистриране импортиране 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 с изключение на изключението като e: return statement („Pin номер не е валиден.“) GPIO.setup (pinNum, GPIO. OUT), ако състоянието е в [„on“, „high“]: GPIO.output (pinNum, GPIO. LOW), ако състоянието е в „„ off “,“ниско ']: GPIO.output (pinNum, GPIO. HIGH) декларация за връщане (' Превключване {} Светлините на хола '. формат (състояние)), ако _name_ ==' _main_ ': port = 4000 app.run (host =' 0.0.0.0 ', порт = порт)

Запишете и затворете файла.

Стартирайте сървъра за колба с:

sudo python light_control.py

Оставете ngrok и light_control.py да работят

Стъпка 4: Python скрипт за контрол на вентилатора

Отворете нова терминална сесия и създайте нов python файл с име fan_control.py:

nano fan_control.py

Копирайте/поставете следния код в новия файл:

от колба внос колба

от flask_ask импортиране Питане, изявление, convert_errors импортиране на RPi. GPIO като GPIO импортиране на регистриране импортиране 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 с изключение на Exception as e: return statement ('Pin number не е валиден. ') GPIO.setup (pinNum, GPIO. OUT) if status in [' on ',' high ']: GPIO.output (pinNum, GPIO. LOW) if status in [' off ',' low ']: GPIO.output (pinNum, GPIO. HIGH) декларация за връщане ('Превключване {} на светлините в хола'. Формат (състояние)), ако _name_ == '_main_': port = 4500 app.run (host = '0.0.0.0 ', порт = порт)

Запишете и затворете файла.

Стартирайте сървъра за колба с:

sudo python fan_control.py

Оставете ngrok, light_control.py и fan_control.py да работят

Стъпка 5: Инсталиране и конфигуриране на LIRC пакета

За да управлявате телевизора, трябва да конфигурирате щифт на Raspberry Pi за генериране на инфрачервени (IR) сигнали за вашия конкретен телевизор. Отворете терминала и въведете следната команда, за да инсталирате LIRC пакет, който емулира инфрачервените сигнали на много дистанционни управления.

sudo apt-get install lirc

След това трябва да активирате и конфигурирате модула на ядрото lirc_rpi. За да направите това, отворете модули в редактора на Nano

sudo nano /etc /модули

Добавете редовете по -долу към файла (Уверете се, че параметърът gpio_out_pin сочи към щифта, контролиращ IR LED):

lirc_devlirc_rpi gpio_out_pin = 17

След това отворете файла hardware.conf в Nano както преди с sudo:

sudo nano /etc/lirc/hardware.conf

Добавете следната конфигурация към файла:

LIRCD_ARGS = "-uinput" LOAD_MODULES = вярно

DRIVER = "по подразбиране"

DEVICE = "/dev/lirc0"

MODULES = "lirc_rpi"

LIRCD_CONF = ""

LIRCMD_CONF = ""

Сега рестартирайте Raspberry Pi:

sudo рестартиране

Стъпка 6: Python Script за управление на телевизора

Отворете нова терминална сесия и създайте нов python файл с име ir_control.py:

nano ir_control.py

Отидете на

Намерете дистанционно, което е съвместимо с вашия телевизор. В моя случай имам телевизор Sanyo, който работи с конфигурационния файл sanyo-tv01. След като намерите файл, който поддържа вашия телевизор, отворете го и разгледайте опциите за команди.

Копирайте/поставете следния код в новия файл и заменете sanyo-tv01 с името на файла, който работи с вашия телевизор. Уверете се също, че телевизионните команди се поддържат от конфигурационния файл на телевизорите ви; Може да се наложи да промените командите KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN и KEY_MUTE, за да работят правилно с конфигурационния файл на вашия телевизор:

от колба за импортиране Flaskот flask_ask импортиране Питане, изявление, convert_errors импортиране на RPi. GPIO като GPIO импортиране на регистриране импортиране 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 ['включване']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER") изявление за връщане ("Включване на телевизора") elif статус в ["изключване"]: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER ") декларация за връщане (" Изключване на телевизора ") elif състояние в ['промяна на входа']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") връщане изявление ('Промяна на входа на телевизора') elif статус в ['увеличаване на силата на звука']: 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 ") изявление за връщане (" Увеличаване на силата на звука на телевизора ") elif статус в ['намаляване на звука']: os.system (" irsend SEND_ONCE sanyo-tv01 KEYNOL) 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_OUM") ") return statement (" Намаляване на силата на звука на телевизора ") elif status in ['mute']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_MUTE ") return statement ('Muting the TV') elif status in ['unmute ']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") декларация за връщане ("Деактивиране на телевизора") else: return statement (' Отдалечена функция не е намерена. ') if _name_ ==' _main_ ': port = 5000 app.run (хост = '0.0.0.0', порт = порт)

Запишете и затворете файла.

Стартирайте сървъра за колба с:

sudo python ir_control.py

Оставете и трите терминални прозореца ngrok, light_control.py, fan_control.py и ir_control.py да работят

Стъпка 7: Влезте в акаунта на AWS

Влезте в акаунта на AWS
Влезте в акаунта на AWS

Първо създайте или влезте във вашия акаунт за разработчици на AWS и отворете списъка си с Alexa Skills.

Стъпка 8: Настройка на уменията на TV Alexa

Настройка на уменията на TV Alexa
Настройка на уменията на TV Alexa

Изберете „Добавяне на ново умение“.

Задайте Името на умението „Задействане на телевизия“, а Името на извикването - думата (ите), които искате да използвате, за да активирате умението.

Щракнете върху „Напред“, за да продължите.

Копирайте/поставете следното в полето „Схема на намерение“:

"slots": [{"name": "status", "type": "TV_Function"}, {"name": "сума", "type": "AMAZON. NUMBER"}], "intent": "GPIOControlIntent "}]}

След това кликнете върху „Добавяне на тип слот“

Въведете TV_Function в полето „Enter Type“.

Въведете следните стойности в полето „Въведете стойности“:

включи

изключване промяна вход увеличаване на силата на звука намаляване на звука заглушаване включване

След това копирайте/поставете следното в полето „Примерни изявления“:

GPIOControlIntent {статус}

GPIOControlIntent {status} от {amount}

Щракнете върху „Напред“, за да продължите.

Изберете „HTTPS“като Тип на крайната точка на услугата и изберете регион. Въведете URL адреса ngrok от стъпка 2 и щракнете върху „Напред“. URL адресът трябва да е нещо като:

ed6ea04d.ngrok.io

Щракнете върху „Напред“, за да продължите, и натиснете „Запазване“.

Стъпка 9: Осветява настройката на Alexa Alexa

Осветява настройката на Alexa Skill
Осветява настройката на Alexa Skill

Затворете отвореното умение и изберете „Добавяне на ново умение“.

Задайте Името на умението „Контрол на светлините“, а Името на извикването - думата (ите), която искате да използвате, за да активирате умението.

Щракнете върху „Напред“, за да продължите. Копирайте/поставете следното в полето „Схема на намерение“:

{

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

След това кликнете върху „Добавяне на тип слот“.

Въведете „LIGHTS_CONTROL“в полето „Въведете тип“.

Въведете следните стойности в полето „Въведете стойности“:

На

изключен

След това копирайте/поставете следното в полето „Примерни изявления“:

LightsControlIntent завийте {status}

Щракнете върху „Напред“, за да продължите. Изберете „HTTPS“като Тип на крайната точка на услугата и изберете регион. Въведете URL адреса ngrok от стъпка 2 и щракнете върху „Напред“. URL адресът трябва да е нещо като:

ed6ea04d.ngrok.io

Щракнете върху „Напред“, за да продължите, и натиснете „Запазване“.

Стъпка 10: Настройка на уменията на Fan Alexa

Настройка на уменията на Fan Alexa
Настройка на уменията на Fan Alexa

Затворете отвореното умение и изберете „Добавяне на ново умение“.

Задайте Името на умението на „Управление на вентилатора“, а Името на извикването - на думата (ите), която искате да използвате, за да активирате умението.

Щракнете върху „Напред“, за да продължите.

Копирайте/поставете следното в полето „Схема на намерение“:

{

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

След това кликнете върху „Добавяне на тип слот“.

Въведете „FAN_CONTROL“в полето „Въведете тип“.

Въведете следните стойности в полето „Въведете стойности“:

На

изключен

След това копирайте/поставете следното в полето „Примерни изявления“:

FANControlIntent завой {status}

Щракнете върху „Напред“, за да продължите. Изберете „HTTPS“като Тип на крайната точка на услугата и изберете регион. Въведете URL адреса ngrok от стъпка 2 и щракнете върху „Напред“. URL адресът трябва да е нещо като:

ed6ea04d.ngrok.io

Щракнете върху „Напред“, за да продължите, и натиснете „Запазване“.

Стъпка 11: Изградете Ciruit

Изградете Ciruit
Изградете Ciruit

Свържете веригата, както е показано на диаграмата. Използвах 8 -канален DC 5V релеен модул JBtek за свързване към домовете AC 120v линия и земя.

Стъпка 12: Alexa Commands

Сега следните команди могат да бъдат изговорени с Alexa, за да ви контролира хола.

Препоръчано: