Рекламное объявление

Мечта любого умного домашнего энтузиаста - это дом, с которым вы можете поговорить, но реальность далека от этого.

Например, Amazon Echo позволяет использовать любое количество голосовых функций, но вы должны начать диалог с вопросом - вы не можете просто попросить ее объявить важное сообщение.

Вы могу сделайте это с системой Sonos и немного волшебства Raspberry Pi. Сегодня я покажу вам, как настроить голосовые уведомления в вашей системе Sonos, представив несколько полезных рецептов IFTTT, интеграции OpenHAB и многое другое, чтобы использовать функцию уведомлений.

Обратите внимание, что имеется встроенная привязка Sonos для OpenHAB, но известно, что она вызывает проблемы с памятью из-за неисправной библиотеки uPnP. Я бы предложил пропустить это сейчас, и вместо этого использовать метод из этого урока.

Raspberry Pi с Raspian Linux идеально подходит для этого урока, но он также должен работать на любом домашнем сервере на основе Linux, который вы используете. В этом случае я использую тот же Raspberry Pi, который работает

instagram viewer
OpenHAB, система домашней автоматизации с открытым исходным кодом Начало работы с OpenHAB Home Automation на Raspberry PiOpenHAB - это зрелая платформа домашней автоматизации с открытым исходным кодом, которая работает на различных аппаратных средствах и является независимость от протокола, что означает, что он может подключаться практически к любому оборудованию домашней автоматизации на рынке Cегодня. Подробнее . В оставшейся части этого руководства предполагается, что вы также запускаете его на Raspberry Pi, и у вас либо открыто окно локального терминала на рабочем столе, либо вход в систему удаленно с использованием SSH Настройка Raspberry Pi для использования без головы с SSHRaspberry Pi может принимать команды SSH при подключении к локальной сети (через Ethernet или Wi-Fi), что позволяет легко его настроить. Преимущества SSH выходят за рамки ежедневных проверок ... Подробнее .

Тебе понадобиться

  • Raspberry Pi 2 (старые модели должны работать, но проверьте наличие конкретных изменений в инструкциях)
  • Хотя бы один Спикер сонос (другие аудиосистемы не поддерживаются, это руководство только для Sonos)
  • Бесплатный аккаунт на VoiceRSS.org [больше не доступен]. Зарегистрируйтесь тогда найди свой ключ API, который нам понадобится позже, чтобы генерировать голосовые сообщения.

Последний узел установки

Проверьте, какая версия Node у вас есть, набрав:

узел -v. 

Обратите внимание, что версия 6 не поддерживается. Если у вас есть Node 6, сначала удалите его, а затем следуйте приведенным ниже инструкциям для установки v5.5.

Если у вас нет v5 или вы получили ошибку «не найдено», следуйте этим инструкциям для установки Node. Следующая команда предполагает Raspberry Pi 2; для более старых моделей используйте armv6l вместо того armv7l.

Wget https://nodejs.org/download/release/latest-v5.x/node-v5.12.0-linux-armv7l.tar.gz. tar -xvf node-v5.12.0-linux-armv7l.tar.gz. cd node-v5.12.0-linux-armv7l. sudo cp -R * / usr / local. 

Подтвердите еще раз, набрав:

узел -v

И вы должны увидеть v5.12 (или что-то последнее, что вы скачали).

Далее у нас есть несколько модулей Node для установки. Нам также нужен менеджер пакетов Node.

sudo apt-get установить npm. sudo npm install -g npm. sudo npm install -g node-gyp. 

Это необходимые предпосылки, теперь самое интересное.

Sonos HTTP API

Sonos HTTP API создает веб-сервер в локальной сети, что позволяет нам пинговать URL-адрес с сообщением для объявления на Sonos (и управлять им удаленно, если хотите, хотя этот учебник фокусируется только на голосовом уведомлении аспект).

мерзкий клон https://github.com/jishi/node-sonos-http-api.git Sonos. CD Sonos. npm install --production. нпм начало. 

Если вы видите сообщение о том, что такой-то модуль не найден, просто сделайте другой установка npm и имя модуля, затем попробуйте начало вечера опять таки. Если у вас возникли ошибки, связанные с «Требуется компилятор C ++ 11», исправьте с помощью следующих команд:

sudo apt-get install gcc-4.8 g ++ - 4.8. Возможности обновления sudo --install / usr / bin / gccgcc / usr / bin / gcc-4.6 20. Возможности обновления sudo --install / usr / bin / gcc gcc /usr/bin/gcc-4.8 50. Возможности обновления sudo --install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20. Возможности обновления sudo --install / usr / bin / g ++ g ++ /usr/bin/g++-4.8 50. 

В конце концов вы должны увидеть что-то вроде этого:

sonos-http-api работает

Сервер сейчас работает, взаимодействует с Sonos. Формат этого API прост:

http://[SERVER IP]: 5005 / [ИМЯ КОМНАТЫ] / [ДЕЙСТВИЯ]

Или как конкретный пример:

http://192.168.1.99:5005/kitchen/playlist/chillout

Интересующее нас действие - это команда «say», используемая следующим образом:

http://192.168.1.99:5005/kitchen/say/make%20use%20of%20is%20awesome/en-gb

Вы услышите сообщение об ошибке при регистрации на ключе API на VoiceRSS.org. Вы уже должны были это сделать, поэтому напечатайте следующее и вставьте свой ключ API как подходящий:

nano settings.json

{

"Voicerss": "YOURAPIKEY" }

(Нажмите CTRL-X, Y, чтобы сохранить файл)

Перезагрузите сервер и снова пропингуйте URL. Через несколько секунд вы должны услышать восхитительный английский голос (хотя вы измените конец URL на ан-нас если хочешь) Чтобы сервер HTTP API Sonos снова запустился после перезапуска Pi:

sudo nano /etc/rc.local

Добавьте строку перед выход 0:

узел sudo /home/pi/sonos/server.js  dev / null &

Теперь у вас есть возможность создавать голосовые сообщения из любой точки локальной сети, просто пропингуя URL-адрес, поэтому возможности на этом этапе широко открыты. Однако если вы боретесь за идеи, прочитайте несколько полезных уведомлений, которые я получил.

Уведомления OpenHAB о событиях

Давайте сначала рассмотрим простой пример: обнаружение движения. Это распространенный вариант использования источников света, но вам может потребоваться и голосовое уведомление, если датчик движения в зоне с низкой интенсивностью движения или, возможно, в качестве предупреждения о том, что кто-то идет по саду дорожка.

правило "Обнаружено движение сада" когда Item Garden_Motion изменился, тогда var String message = "У вас есть посетитель" sendHttpGetRequest (" http://localhost: 5005 / кухня / скажем / "+ message.encode (" UTF-8 ") +" / ан-ГБ ") конец.

Вы должны увидеть, как вы можете интегрировать эти простые голосовые уведомления в любое из ваших правил, но давайте попробуем что-нибудь более сложное.

Ежедневный прогноз погоды от IFTTT до OpenHAB до Sonos

В этом рецепте Sonos будет объявлять ежедневный прогноз погоды в указанное вами время.

Вам понадобится мой. Привязка OpenHAB включена, поскольку это создает безопасное соединение между вашим внутренним сервером OpenHAB и внешней службой IFTTT. Настройте это, если вы еще этого не сделали - вы можете обратиться к часть 1 нашего руководства по OpenHAB Начало работы с OpenHAB Home Automation на Raspberry PiOpenHAB - это зрелая платформа домашней автоматизации с открытым исходным кодом, которая работает на различных аппаратных средствах и является независимость от протокола, что означает, что он может подключаться практически к любому оборудованию домашней автоматизации на рынке Cегодня. Подробнее для получения подробных инструкций, в противном случае я предполагаю, что вы уже настроили его с включенным постоянством для всех элементов.

Затем создайте новый элемент String в вашей установке OpenHAB, в котором будет храниться ежедневный отчет о погоде. До этого видно в My. Канал OpenHAB, нам нужно инициализировать его с некоторой переменной по умолчанию. Пинговать следующий URL (изменить raspberrypi.local на ваш сервер OpenHAB, или просто используйте его IP-адрес, и Todays_Weather на то, что вы назвали строку):

http://raspberrypi.local: 8080 / CMD? Todays_Weather = Солнечный 

Войдите в My. OpenHAB [сломанный URL удален] и проверьте Предметы список, чтобы убедиться, что переменная была экспортирована.

мой экспортный чек openhab

Вернитесь на IFTTT, создайте новый рецепт и используйте Канал погоды в качестве триггера в выбранное вами время суток. Сначала вам нужно будет указать свое местоположение, если вы никогда не использовали его раньше.

Выберите Мой. OpenHAB в качестве действия и выберите Todays_Weather в качестве переменной для обновления.

ифтт прогноз погоды

А пока просто выберите следующий полчаса для тестирования - вы можете обновить рецепт позже, когда узнаете, что он работает.

Конечно же, во время тестирования (фактически, немного раньше) я успешно обновил прогноз на сегодня.

2016-02-27 10: 28: 01.689 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - Получена команда Облачно сегодня! С высоким 7C и низким 1C. Повторение. Сегодня условия будут в основном облачными, с максимумом 7C и минимумом 1C. для элемента Todays_Weather. 2016-02-27 10: 28: 01.697 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - магазин (Todays_Weather), состояние = Облачно сегодня! С высоким 7C и низким 1C. Повторение. Сегодня условия будут в основном облачными, с максимумом 7C и минимумом 1C. 

Далее нам нужно правило OpenHAB, чтобы отправить эту переменную в Sonos «скажем» URL. Следующие должны сделать это:

правило "Анонс ежедневного прогноза погоды" когда Item Todays_Weather получил обновление. затем sendHttpGetRequest (" http://localhost: 5005 / кухня / скажем / "+ Todays_Weather.state.toString.encode (" UTF-8 ") +" / ан-ГБ ") конец.

Это достаточно просто: всякий раз, когда переменная Todays_Weather обновляется (что будет происходить автоматически в 8 утра каждый день), пингуйте URL. Мы используем кодирование ( «UTF-8») Строковая функция, чтобы сделать предложение из IFTTT подходящим для использования в URL. Чтобы вручную протестировать эту часть системы, просто снова используйте HTTP-API OpenHAB:

http://raspberrypi.local: 8080 / CMD? Todays_Weather = Облачно, возможны фрикадельки. 

Подключайтесь к IFTTT без OpenHAB, используя If-This-Then-Node

Наконец, давайте посмотрим, как подключиться из любого рецепта IFTTT без посредника OpenHAB. Вместо этого мы установим другой веб-сервер и откроем его для открытого Интернета. Это не без риска: любой вид открытого сервера является угрозой безопасности, но мы уменьшаем его, не запуская полный стек сервера, а лишь небольшой конкретный сервис, который принимает только определенные команды в безопасном формате пакетов данных JSON (поэтому не будут внедряться атаки SQL или аутентификации) возможный). Когда мы закончим, у вас будет общедоступный URL-адрес, на который вы сможете отправлять сообщения из канала IFTTT Maker.

Начните с настройки одного из множества бесплатные сервисы динамического DNS 5 лучших бесплатных провайдеров динамического DNSСлужба DDNS может помочь вам подключиться к домашнему ПК, находясь в пути. Вот лучшие бесплатные провайдеры динамического DNS для рассмотрения. Подробнее там - я рекомендую DuckDNS, особенно потому, что он дает простой набор инструкция для Raspberry Pi, включив его для автоматического обновления вашего IP-адреса. Следуйте этим инструкциям и запомните свой URL для следующих шагов. Ваш маршрутизатор также может иметь встроенную функцию динамического DNS, поэтому сначала проверьте его. В моем случае я могу получить * .mynetgear.com URL бесплатно, поэтому я использовал это.

Далее найдите свой роутер Перенаправление порта Что такое переадресация портов и как это может мне помочь? [MakeUseOf Объясняет]Ты немного плачешь внутри, когда кто-то говорит тебе, что есть проблема с переадресацией портов, и поэтому твое блестящее новое приложение не будет работать? Ваш Xbox не позволит вам играть в игры, ваши торрент-загрузки отказываются ... Подробнее страница конфигурации; Здесь мы расскажем, что делать с входящими запросами. Перенаправьте все HTTP-запросы (порт 80) на порт 1337 на вашем сервере Raspberry Pi. Я предполагаю, что у вас уже есть IP-адрес, зарезервированный для вашего Raspberry Pi - если вы этого не сделали, проверьте конфигурацию вашего маршрутизатора страница для зарезервированных IP-адресов, пока вы находитесь там, так как вы не можете изменить их на следующей неделе и для внезапной остановки сервера работает.

перенаправление портов конфигурации маршрутизатора

Теперь, чтобы установить последний бит серверного программного обеспечения.

https://github.com/sebauer/if-this-then-node.git. cd if-this-then-node / npm установить. узел server.js.

Вы должны увидеть следующее.

если это, то ошибка значений по умолчанию узла

Это нормально, это просто означает, что нам нужно обновить наши данные. Открыть config.js в Nano и измените эти данные на что-либо, кроме значения по умолчанию, затем сохраните. Когда вы снова запустите сервер, вы должны увидеть это:

если это то сервер узла работает

Отлично. Чтобы проверить доступность вашей машины из внешнего мира, введите динамическое DNS-имя хоста и добавьте /ifttn / в конце URL. Если все работает, сообщение «IFTTN - если версия 2.0.1 if-this-then-node запущена и работает!» будет отображаться в вашем браузере. Опять же, чтобы запустить этот скрипт при запуске, отредактируйте /etc/rc.local файл и добавить:

узел sudo /home/pi/if-this-then-node/server.js  dev / null &

Если-это-то-Node работает через плагины - есть несколько стандартных, но они нам не интересны. Вместо этого загрузите этот пользовательский плагин, который я написал для вас, с помощью следующих команд.

CD плагины. Wget https://gist.githubusercontent.com/jamesabruce/4af8db24ba3452b94877/raw/d11c1cff3aa44dbb6a738eeb15202f3db461de75/sonos.js 

Вам также необходимо установить запрос модуль.

запрос установки npm. 

Затем перезапустите сервер. Плагин довольно прост, но немного отличается от URL, который мы использовали до сих пор. В этом случае я использовал специальное действие «sayall», которое отправляет сообщение на каждое устройство Sonos.

запрос(' http://localhost: 5005 / sayall / '+ params.message +' / en-gb ', функция (ошибка, ответ, тело)

Если вы предпочитаете ориентироваться на определенные устройства, замените эту строку на:

запрос(' http://localhost: 5005 / '+ params.device +' / say / '+ params.message +' / en-gb ', функция (ошибка, ответ, тело)

Добавьте еще один параметр строки с именем устройство на запрос JSON ниже, чтобы указать имя устройства Sonos.

Чтобы проверить это, я использую приложение кнопки «Сделать» IFTTT. Создайте новый рецепт, перейдите к каналам и выберите производитель канал.

сделать кнопку

Создать новый рецепт. Введите в URL-адрес, который вы настроили ранее от бесплатного поставщика динамического DNS (в том числе /ifttn/ в конце URL. Не забывайте эти косые черты). Выбрать ПОЧТА запрос, Применение / JSON содержимое и тело сообщения следующим образом, заменяя все необходимые переменные на те, которые вы предварительно настроили:

{"action": "sonos", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Входящее сообщение для всех: ужин готов! Повторение. Ужин готов. Подними свои задницы наверх. "}

Теперь у меня есть легкодоступная кнопка, которая будет объявлять сообщение на каждом устройстве Sonos в доме. Конечно, вы можете связать это с любым каналом IFTTT, для которого вы хотите создать собственное сообщение, используя переменные из этого канала. Вы даже сможете реплицировать отчет о погоде сверху без использования OpenHAB сейчас, хотя для установки другого сервера потребовались дополнительные усилия.

Примечание: хакеры автоматически сканируют вас. Это происходит постоянно, но если вы просматриваете журналы, это может показаться тревожным. Ниже вы можете увидеть, как кто-то систематически пытался выяснить, был ли доступен какой-либо из стандартных интерфейсов PHPMyAdmin. Что они не были. Не пугайтесь, если увидите нечто подобное. Это интернет-эквивалент холодных звонков на случайные телефонные номера, чтобы узнать, есть ли там кто-нибудь.

попытки взлома веб-сервера

Что вы объявите?

Теперь у вас должны быть инструменты и знания, чтобы постоянно купать весь дом в голосовых уведомлениях обо всем, о чем вы могли подумать. Кому нужна музыка? Ваш единственный лимит - 350 ежедневных запросов от VoiceRSS.org - но это примерно один раз в 4 минуты, так что с вами должно быть все в порядке.

Так что вы будете делать с этим? Поделитесь своими идеями или рецептом IFTTT в комментариях!

Кредиты изображений:кофе и женщина от S_Photo через Shutterstock

Джеймс имеет степень бакалавра в области искусственного интеллекта и сертифицирован CompTIA A + и Network +. Он является ведущим разработчиком MakeUseOf и проводит свое свободное время за игрой в VR-пейнтбол и настольные игры. Он строит компьютеры с детства.