с использованием google-home-notifier и сервиса IFTTT
Колонки семейства Google Home (mini) могут выступать в роли сетевой wifi колонки и в роли устройства голосового управления.
Сетевая wifi колонка:
В сети существует множество проектов для вывода контента на Google Home (mini), но единственный, который удалось без проблем поднять на любой платфоре linux liked систем (Raspberry, orange pi, x86-debian) называется google-home-notifier.
Установка проекта
sudo apt-get install git-core libnss-mdns libavahi-compat-libdnssd-dev
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install nodejs
git clone https://github.com/noelportugal/google-home-notifier
$ cd google-home-notifier
$ npm install
в файле example.js нужно прописать адрес google home и порт локального сервиса. Сервисов можно поднять несколько при наличии нескольких колонок.
Далее нужно Majordomo научить запускать сервис google-home-notifier, для этого через плагин cron добавить задание:
Title * google-home-notifier
Crontab * */10 * * * * (раз в 10 минут)
код: shell_exec("node /home/pi/google-home-notifier/example.js");
После установки проекта, можно вызвать сценарий вызова файла mp3
$zap=$params['text'];
if ($zap==""){$zap="http://188.226.32.227/cached/voice/1.mp3";}
//$cmd='curl -X POST -d "'.$zap.'" http://192.168.1.35:8091/google-home-notifier';
$cmd='curl -X GET http://192.168.1.39:8091/google-home-notifier?text='.urlencode($zap);
echo $cmd;
echo "<br>";
$answ=shell_exec($cmd);
echo $answ;
при наличии соответсвующего файла по указанному пути колонка должна воспроизвести контент.
Далее добавляем новый терминал Google home notifier через вкладку Терминалы, указываем ip адрес текущего сервера, порт google-home-notifier (по умолчанию 8091)
Теперь на терминал Google home notifier можно отправлять медиа-поток, например из радио онлайн.
Для того, чтобы терминал был подписан на голосовые уведомления голосовых модулей, необходимо во вкладке Общий настройки -> Обработчики -> Before PlaySound (code)
указать следующий код:
if (preg_match('/cached\/voice.+/is',$filename,$m)) { $url='http://192.168.1.39/'.$m[0]; playMedia($url,'MAIN');DebMes($url,'googlenotifier');}
После последнего обновления я использую код
$url='http://192.168.1.39/cms/cached/voice/'.basename($filename); if (basename($filename)<>"dingdong.mp3"){playMedia($url,'MAIN');DebMes($url,'googlenotifier');}
Данный код воспроизводит последнее сообщение движда Yandex TTS. Если у вас другой TTS, то замените путь на другой.
Пока-что имеется не решенная задача с очередями, чтобы новое голосовое сообщение не замещалось предыдущим в момент совершения. Какого-то готового решения пока нет. Просто в сценарии вставляю команту sleep(60);
Управление сценариями с помошью голоса
Первым делом связываем умную колонку с домашним wifi, акаунтом гугл и т.д.
Далее через приложение Google Home заходим на сайт itfff.com и регистрируем новый акаунт, если еще не имеется. Связываем новый акаунт с учетной записью гугл.
Создаем NewApplet в правом углу сайта ifttt.com
1) нажимаем на + на фразе if ✚ this then that
2) ищем поиском Gogle Assistant и выбираем
3) Say a simple phrase
3) добавляем требуемую фразу
turn on the light in the corridor
и алиасы на всякий случай
turn light in the corridor
4) нажимаем + перед фразой that и выбираем webhooks
5) вводим публичный адрес своего сервера и изменяемого свойства или запуск сценария
http://login:password@xxx.xxx.xxx.xx/objects/?script=sendcamtelega
Теперь, если вы произнесете OK гугл, тёрн он лайт ин вэ коридор, у вас будет вызван сценарий sendcamtelega
Варианты написания по русских фраз по английски испробованы, но колонка на них реагирует не охотно. В течении 18 года русский язык должен появиться в гугл асистенте, соответсвенно скорее всего и появится в Google Home.
Также есть возможность настроить колонку через Api.ai (dialogflow) для передачи запроса в MD через соответсвующий плагин. (пока не тестировался, планирую протестировать после русификации асистента).
Тема на форуме http://majordomo.smartliving.ru/forum/viewtopic.ph...
Сохраню тут на всякий случай состояние event_say:
{"pushbullet":{"filter":""},"pushover":{"filter":""},"sms_ru":{"filter":""},"ssdp_finder":{"filter":""},"telegram":{"filter":"","priority":10},"windows_tts":{"filter":""},"yandex_tts":{"filter":"","priority":10}}
Екатеринбург, Россия
На форуме: directman66