реклама

Мечтата на всеки умен домашен ентусиаст е дом, с който можете да говорите, но реалността е далеч от това.

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

Ти мога направете това със система Sonos и малко DIY Raspberry Pi магия. Днес ще ви покажа как да настроите гласови известия във вашата система Sonos, представяйки няколко полезни рецепти IFTTT, интеграции на OpenHAB и други, за да използвате функцията за известяване.

Обърнете внимание, че има налично свързване на Sonos за OpenHAB, но е известно, че причинява проблеми с паметта поради неправилна uPnP библиотека. За сега препоръчвам да пропуснете това и да използвате метода в този урок.

А Raspberry Pi, работещ с Raspian linux, е идеален за този урок, но трябва да работи и на всеки базиран на Linux сървър, който използвате. В този случай използвам същия Raspberry Pi, който работи

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

Ще имаш нужда

  • Raspberry Pi 2 (по-старите модели трябва да работят, но проверете за конкретни промени в инструкциите)
  • Поне един Sonos говорител (други аудио системи не се поддържат, това е урок само за Sonos)
  • Безплатен акаунт на VoiceRSS.org [Няма по-дълго време]. Регистрирайте се тогава намерете вашия API ключ, което ще ни трябва по-късно за генериране на гласови съобщения.

Инсталиране на Node Latest

Проверете коя версия на 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 Package Manager.

sudo apt-get install npm. sudo npm install -g npm. sudo npm install -g node-gyp. 

Това е необходимото условие, сега към забавните неща.

Sonos HTTP API

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

git клон https://github.com/jishi/node-sonos-http-api.git Sonos. CD sonos. npm install - производство. npm старт. 

Ако видите съобщение за такъв и такъв модул не е намерено, просто направете друго npm инсталиране и името на модула, след това опитайте npm старт отново. Ако имате грешки, свързани с „Изисква C ++ 11 компилатор“, поправете със следните команди:

sudo apt-get install gcc-4.8 g ++ - 4.8. sudo update-alternative --install / usr / bin / gccgcc / usr / bin / gcc-4.6 20. sudo update-alternative --install / usr / bin / gcc gcc /usr/bin/gcc-4.8 50. sudo update-alternative --install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20. sudo update-alternative --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

Действието, което ни интересува, е командата „кажи“, използвана по следния начин:

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, за да запазите файла)

Рестартирайте сървъра и отново ping на URL адреса. След няколко секунди трябва да чуете възхитителен английски глас (въпреки че промените края на URL адреса на ен-ни ако предпочитате). За да накарате Sonos HTTP API сървъра да се стартира отново, когато Pi се рестартира:

sudo nano /etc/rc.local

Добавете ред преди изход 0:

sudo node /home/pi/sonos/server.js  dev / null &

Вече имате възможност да създадете гласово съобщение от всяка точка на локалната мрежа, просто като въведете URL адрес, така че възможностите са широко отворени в този момент. Ако все пак се борите за идеи, прочетете няколко полезни известия, които създадох.

Известия на OpenHAB за събития

Да вземем първо един прост пример: откриване на движение. Това е често използван случай за активиране на светлините, но може да искате и гласово известие, ако е a сензор за движение в зона с малък трафик или може би като предупреждение, че някой се приближава към градината път.

правило "Засечено движение в градината" когато Item Garden_Motion се промени, тогава var String message = "Имате посетител" sendHttpGetRequest (" http://localhost: 5005 / кухня / да речем / "+ message.encode (" UTF-8 ") +" / EN-GB ") край.

Трябва да видите как можете да интегрирате тези прости гласови известия във всяко от вашите правила, но нека опитаме нещо малко по-сложно.

Ежедневен отчет за времето от IFTTT до OpenHAB до Sonos

В тази рецепта ще трябва Sonos да обявява ежедневен метеорологичен отчет в предпочитаното от вас време.

Ще ви трябва Моят. Свързването на OpenHAB е активирано, тъй като това създава сигурна връзка между вашия вътрешен OpenHAB сървър и външната услуга IFTTT. Настройте го, ако още не сте го направили - можете да се обърнете към него част 1 от нашето ръководство за OpenHAB Първи стъпки с OpenHAB Home Automation на Raspberry PiOpenHAB е зряла платформа за домашна автоматизация с отворен код, която работи на различен хардуер и е протокол агностик, което означава, че може да се свърже с почти всеки хардуер за домашна автоматизация на пазара днес. Прочетете още за пълни инструкции, в противен случай ще предположа, че вече сте го настроили с активирана постоянство за всички елементи.

След това създайте нов елемент String във вашата инсталация на OpenHAB, който ще съхранява дневния отчет за времето. Преди това е видимо в My. OpenHAB канал, ще трябва да го инициализираме с някаква променлива по подразбиране. Ping следния URL адрес (промяна raspberrypi.local до вашия OpenHAB сървър или просто използвайте IP адреса му и Todays_Weather към каквото и да сте нарекли Низа):

http://raspberrypi.local: 8080 / ПМС? Todays_Weather = Слънчев 

Влезте в My. OpenHAB [Премахнат счупен URL адрес] и проверете Предмети списък, за да се гарантира, че променливата вече е била експортирана.

моята проверка за експортиране на артикули в openhab

Върнете се IFTTT, създайте нова рецепта и използвайте Метеорологичен канал като спусък в предпочитаното от вас време. Първо ще трябва да зададете местоположението си, ако никога досега не сте го използвали.

Изберете My. OpenHAB като действие и изберете Todays_Weather като променлива за актуализиране.

Доклад за времето в ifttt

За сега просто изберете следващия половин час слот за тестване - можете да актуализирате рецептата по-късно, след като разберете, че работи.

Със сигурност, в момента на теста (всъщност, малко преди това), днешната прогноза се актуализира успешно.

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, за да изпратим тази променлива до URL адреса на Sonos „казвам“. Следното трябва да го направите:

правило „Обявяване на дневен метеорологичен отчет“ когато Item Todays_Weather получи актуализация. след това изпратетеHttpGetRequest (" http://localhost: 5005 / кухня / да речем / "+ Todays_Weather.state.toString.encode (" UTF-8 ") +" / EN-GB ") край.

Това е достатъчно просто: всеки път, когато променливата Todays_Weather се актуализира (което ще бъде автоматично, в 8 ч. Всеки ден), пингирайте URL адреса. Ние използваме кодират ( "UTF-8") Струнна функция, за да направи изречението от IFTTT подходящо за използване в URL. За да тествате ръчно тази част от системата, просто използвайте OpenHAB HTTP API отново:

http://raspberrypi.local: 8080 / ПМС? 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 node /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 адреса, който сме използвали досега. В този случай използвах специалното „казване“, което изпраща съобщението до всяко Sonos устройство.

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

Ако предпочитате да насочвате към конкретни устройства, заменете този ред с:

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

Добавете друг параметър на ред, наречен приспособление към заявката JSON по-долу, в която да посочите името на устройството Sonos.

За да тествам това, използвам приложението с бутон IFTTT „Направи“. Създайте нова рецепта, прегледайте каналите и изберете производител канал.

направи бутон

Създайте нова рецепта. Въведете URL адреса, който сте конфигурирали по-рано от безплатен динамичен DNS доставчик (включително /ifttn/ в края на URL адреса. Не забравяйте тези наклонени черти). Изберете POST поискване, прилагане / 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 пейнтбол и настолни игри. Той изгражда компютри още от дете.