Наша совместная команда Banwar.org

Связаться с нами

  • (097) ?601-88-87
    (067) ?493-44-27
    (096) ?830-00-01

Статьи

Вчимо розумний будинок розуміти голосові команди і відповідати вам (Google Now)

Вчимо розумний будинок розуміти голосові команди і відповідати вам (Google Now)

Отже, давно хотів написати цю статтю, думаю всім буде цікаво "поговорити з своїм розумним будинком", дати йому голосову команду, і отримати від нього голосова відповідь.

В даному випадку ми будемо це робити через Android планшет або смартфон. Коротко алгоритм дій буде такою:

1. перехоплює все команди "Ок гуггл" або просто після натискання на "мікрофон" гугла.

2. Відправляємо отриману команду до нас на сервер в iobroker

3. Отримуємо назад відповідь, і промовляємо його засобами вашого телефону або Google.

Для початку треба налаштувати сам Google Now на телефоні, що б він реагував на фразу Ok Goole ... Робиться це в додатку Google (якщо воно не встановлено, ставимо його з Play Market).

В Google тиснемо настройки - Голосовий пошук ...

Озвучування результатів: Вимкнути

Voice match: Увімкніть і налаштуйте .. там треба буде записати зразок голосу та інше ...

Тепер коли телефон реагує на Ok Google, нам знадобитися перехопити Google Now команди. Для цього я особисто використовую додаток Automate або Tasker ... У даній статті приведу приклад з php?showtopic=638842> https://4pda.ru/forum/index.php?showtopic=638842 .

Ставимо додаток на телефон, і пишемо алгоритм, який буде ловити команди Google Now, і відправляти їх в наш розумний будинок.

  • Запускаємо Automate і створюємо нову програму натиснувши кнопку +

  • Натискаємо в верхньому лівому кутку меню, і додаємо блоки: Google Now voice command, Failure catch, HTTP Request, Speak (2 блоки).

  • Розставляємо блоки згідно зі схемою яку ви бачите нижче.

!

Грубо кажучи ми створили алгоритм, при якому ...

  • Програма починає працювати

  • Чекає команди Google Now (голосову команду в гугл)

  • Передає дані на сервер

  • Якщо помилка, ми зробимо що б проговорювалося що то типу "Немає зв'язку з сервером".

  • Якщо запит був виконаний, то промовляємо відповідь отриманий від розумного будинку iobroker

Тепер приступимо до налаштування блоків ...

Для початку налаштуємо блок Google Now:

Голосова команда, яку ми зловимо, повинна потрапляти в якусь змінну, тому натискаємо на блок, і в поле Output variables пишемо command (таке буде у нас назву змінної) ... Тиснемо зберегти блок налаштований.

Основний блок який буде передавати дані це HTTP Request:

REQUEST URL: Посилання куди буде передаватися запит ... А передаватися він буде на ВАШ веб сервер створений на iobroker (про це докладно нижче ...) у мене це мій домашній IP адреса і порт, на якому я запустив веб сервер ... мій ип адресу: 8090 порт ви можете вказати інший, тому що він у вас може бути зайнятий! Веб сервер теж потрібно буде запускати на іншому порту ... якщо в iobroker будуть помилки типу "

REQUEST METHOD: тут вказуємо POST (будемо передавати дані POST запитом)

REQUEST CONTENT TYPE: вказуємо JSON (json дані ми будемо передавати)

REQUEST CONTENT: дані які ми будемо передавати а саме змінну command яку ми налаштували в блоці Google Now. Але, ми ж будемо передавати json дані, так що пишемо таке: { "cmd": command}

Деякі настройки пропускаємо, або налаштовуємо як вам зручно (це для спеців ...)

Обов'язково вкажіть функцію: Save to variable as text (На скріншотах я забув її включити!)

У самому низу, нам знадобляться ... Output variables, нам же треба зберегти відповідь від "розумного будинку" в якусь змінну ...

В поле Response content or filename - вводимо назву змінної, нехай вона буде називатися homeanswer, після тиснемо Done, настройка блоку закінчена.

Тепер налаштовуємо блок Speak який буде викликаний в разі помилки (той що праворуч).

В поле MESSAGE вводимо нашу помилку "Помилка зв'язку з сервером"

LANGUAGE: Русский

ENGINE: Синтезатор мови Google

AUDIO STREAM: Music

Тепер налаштовуємо блок Speak який буде викликаний, коли отримано відповідь від сервера (від розумного будинку)

Налаштовуємо його так само як блок вище, тільки в полі MESSAGE натискаємо іконку fx справа і вибираємо змінну homeanswer

Цей блок буде промовляти отриманий від сервера розумного будинку відповідь ...

!

Для того що б ваша програма працювала в automate вам треба надати їй необхідні права ... см. Скріншот. Права надаються додатковими модулями automate які ставляться на смартфон, не лякайтеся.

!

----------------------------------------

Половина роботи закінчена, смартфон налаштований, тепер будемо писати сервер на iobroker і вчити його відповідати нашому смартфону!

Нам знадобиться додатковий модуль Javascript: querysting, його ми можемо додати в ручну, в настройках драйвера, див. Скріншот.

!

Код сервера ... з коментарями. Сподіваюся я написав зрозуміло.

// Приймаємо команди від Google Now var http = require ( 'http'); // Підключаємо модуль http var querystring = require ( 'querystring'); // Підключаємо модуль querysting в настройках драйвера javascript var port = 8090; var s = http.createServer (); s.listen (port); // Якщо надійшов запит s.on ( 'request', function (request, response) {if (request.method == 'POST') {processPostData (request, response, function () {// Розшифровуємо JSON запит, і якщо помилка, то виводимо її в лог iobroker var data; try {data = JSON.parse (Object.keys (request.post) [0]);} catch (e) {console.log ( 'Не вдалося розібрати JSON'); console.error (e.name); console.error (e.message); console.error (e.stack); return;} // Команда розшифрована, передаємо її в функцію обробки ... do_voice_command (data, function (answer ) {console.warn (answer); // Виводимо в консоль відповідь ... response.writeHead (200, "OK", { 'Content-Type': 'text / plain; charset = utf-8'}); response .end (answer);});});} else {//console.log(JSON.stringify(request)) response.writeHead (200, "OK", { 'Content-Type': 'text / plain; charset = utf-8 '}); response.end ( "Приймаємо толь до POST запити "," UTF-8 ");}}); // Основна функція обробки голосових команд function do_voice_command (data, callback) {// Для початку відповідь дорівнює нічому ... var answer = ''; var cmd = data.cmd.toLowerCase (); console.warn ( "Команда =" + cmd); // що ти вмієш? if (cmd == 'що ти вмієш' || cmd == 'що ти вмієш?' || cmd == 'допомогу' || cmd == 'команди' || cmd == 'список команд') {answer = 'Привіт. Я помічник розумний будинок. ' + "\ N \ n" + 'Я вмію, контролювати температуру, відкривати закривати штори, управляти пилососом починаючи і завершуючи прибирання, і багато іншого. Просто назви команду, і я, виконаю її. '; callback (answer); } If (! Answer.length) {callback ( 'Я не розумію цю команду.'); }} // Функція отримання POST запиту function processPostData (request, response, callback) {var queryData = ""; if (typeof callback! == 'function') return null; if (request.method == 'POST') {request.on ( 'data', function (data) {queryData + = data; if (queryData.length> 1e6) {queryData = ""; response.writeHead (413, { 'Content-Type': 'text / plain'}). end (); request.connection.destroy ();}}); request.on ( 'end', function () {request.post = querystring.parse (queryData); callback ();}); } Else {callback (); response.writeHead (405, { 'Content-Type': 'text / plain'}); response.end (); }}

У балці iobroker ви побачите, команди які надходять на сервер, і відповідь вашого сервера ... допілівать функцію do_voice_command за вашим бажанням.

Перевірте чи працює ваш сервер, просто перейшовши за посиланням: http: // адреса вашого сервера: 8090

Повинна з'явитися напис "Приймаємо тільки POST запити".

Якщо у вас виникли питання, пишіть, я постараюся відповісти. Так само я іноді живу в телеграм каналі: https://t.me/iobroker

З Алісою від Yandex ситуація приблизно та ж, тільки вам необхідно буде створити навик, для Аліси, протестувати його, опублікувати ... І сервер буде вже трохи складніше, з HTTPS тобто для яндекс обов'язково захищене з'єднання.

Php?
Warn ( "Команда =" + cmd); // що ти вмієш?
Cmd == 'що ти вмієш' || cmd == 'що ти вмієш?

Новости

Banwar.org
Наша совместная команда Banwar.org. Сайт казино "Пари Матч" теперь доступен для всех желающих, жаждущих волнения и азартных приключений.