[Сценарий] Google Home в качестве терминала

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Google Home - ifttt- web hook

Сообщение Vovix » Вт фев 06, 2018 10:04 pm

lanket писал(а):
Vovix писал(а):
directman66 писал(а):itfff ....
ну что-же вы его постоянно обзываете то??? :D
If this then that (IFTTT) – если здесь это, тогда там то.
(ну или дословно: IFTTT - IF THIS THEN THAT — «если это, тогда то»)
Может It fuc#ing favorite future? Изображение

Отправлено с моего Redmi Note 4 через Tapatalk
:lol: точно-точно!
За это сообщение автора Vovix поблагодарил:
chimik (Вс фев 11, 2018 9:48 pm)
Рейтинг: 1.16%
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Google Home - ifttt- web hook

Сообщение directman66 » Вт фев 06, 2018 10:10 pm

Колонками вроде можно воспроизвести звуковой файл. По моему колонка отлично может выступать удаленным терминалом и отвечать голосом Алисы.
https://github.com/noelportugal/google-home-notifier - этот вариант проверил, работаетт!!! и самое интересное - говорит по русски, если польский заменить на руский в конфигурациооном файле example.js (pl->ru)

https://github.com/watusi/google-cast-public-address - альтернативный вариант, не пробовал.


Простейщий скрипт автозапуска

Код: Выделить всё

#!/bin/sh
cd /home/pi/google-home-notifier
node example.js
Команда говорит привет, но движок видимо какой-то древний, ударения ставит неправильно. Интересно, какой движок ТТС используется? Можно ли его замениь на альтернативный.

Код: Выделить всё

curl -X POST -d "text=привет привет привет" 192.168.1.35:8091/google-home-notifier
Команда проигрывает mp3 файл (из документации), почему-то не работает

Код: Выделить всё

curl -X POST -d "http://188.226.32.227/cached/voice/1.mp3" 192.168.1.35:8091/google-home-notifier
еще возникла идея: ifttt получает доступ к записанной фразе и отправляет ее в яндекс на распознавание )))

не забываем нажимать кнопку спасибо!
За это сообщение автора directman66 поблагодарил:
chimik (Вс фев 11, 2018 9:48 pm)
Рейтинг: 1.16%
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Google Home - ifttt- web hook

Сообщение directman66 » Ср фев 07, 2018 7:03 am

Кстати, если в ifttt прописать команду на русском языке, при написании команды через гугл асисента на русском языке, интепретатор ifttt отрабатывает корректно. Т.е. когда появится распознавание на великом и могучем, будет нативная поддержка сервиса.
За это сообщение автора directman66 поблагодарил:
chimik (Вс фев 11, 2018 9:49 pm)
Рейтинг: 1.16%
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Google Home - ifttt- web hook

Сообщение directman66 » Ср фев 07, 2018 9:42 am

В общем записи гугл активити скачать можно, но очень уж как то не тривиально, на при особом желании всего сообщества, думаю это реализуемо!!!

https://ruk.ca/content/downloading-your ... st-archive

Можно ли как то автоматизировать этот процесс? У меня пока мыслей на этот счет нет.
За это сообщение автора directman66 поблагодарил:
chimik (Вс фев 11, 2018 9:49 pm)
Рейтинг: 1.16%
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Google Home - ifttt- web hook

Сообщение directman66 » Чт фев 08, 2018 9:16 am

В качестве эксперимента, сделал сценарии на переключение света по группам (коридор, кухня и т.д).
В ifttt добавил условия If You say "kuhnya", then make a web request, If You say "koridor", then make a web request и вызываю созданные сценарии.
На выходе имеем управление светом "как бы" на великом и могучем!!

Хотя я уже даже привык выговаривать все команды по английски.
За это сообщение автора directman66 поблагодарил:
chimik (Вс фев 11, 2018 9:49 pm)
Рейтинг: 1.16%
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Google Home - ifttt- web hook

Сообщение directman66 » Вс фев 11, 2018 7:55 pm

По мотивам сообщения https://majordomo.smartliving.ru/forum/ ... 497#p71049 делюсь своими сценариями.

Сценарий запуска скрипта (можно добавить в автозапуск)

Код: Выделить всё

shell_exec("node /home/pi/google-home-notifier/example.js");
Сценарий-функция вызова голосовой команды встроенного TTS

Код: Выделить всё

$text='Информация об автомобиле была обновлена  5 минут назад. ';
rs(saygoogle, array('text' =>$text));
Вызов сценария (проговаривает текст):

Код: Выделить всё

$text='Внимание, вы забыли закрыть входную дверь!!! ';
rs(saygoogle, array('text' =>$text));
И ВНИМАНИЕ!!!! Получилось воспроизвести 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.35:8091/google-home-notifier?text='.urlencode($zap); 
echo $cmd;
echo "<br>";
$answ=shell_exec($cmd);
echo $answ; 
Кстати на колонки без проблем стремятся аудипотоки по днла. Надо допинать мою тему со стримингом этого протокола.https://majordomo.smartliving.ru/forum/ ... nla#p55241

Не забывайте нажимать кнопку "спасибо" )
За это сообщение автора directman66 поблагодарили (всего 2):
savenko_egor (Вс фев 11, 2018 8:15 pm) • chimik (Вс фев 11, 2018 9:49 pm)
Рейтинг: 2.33%
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Google Home - ifttt- web hook

Сообщение directman66 » Чт фев 15, 2018 8:35 am

В виду того, что колонка без проблем управляется приложениями на телефоне BubbleUpnp, делаю вывод, что можно отказаться от google-home-notifier и переписать на php. В сети уже достаточно примеров управления chromecast на php, не думаю что тут должно чем-то сильно отличаться.

В соседней ветке мы ковыряем протокол dnla-render (dnla-sharing https://majordomo.smartliving.ru/forum/ ... f=6&t=4156), который с помощью HTTP запросов может управлять медиа-устройствами (смарт телевизаторами), тут ситуация аналогичная, только используется немного другой протокол.

Пока я выяснил, что для поиска и управления используется протокол DIAL - некий симбиоз SSDP для поиска и HTTP REST + XML для управления. SSDP, возможно, знаком вам, если вы использовали UPnP и DLNA, а REST-часть достаточно простая. ( https://habrahabr.ru/post/210742/ )

Задача:
1) Обнаружить устройства в домашней сети M-SEARCH запросом (пример этого прокола у меня уже есть, я ранее пытался им просканировать приставки MAG250 https://majordomo.smartliving.ru/forum/ ... 250#p55505 )
СпойлерПоказать

Код: Выделить всё

error_reporting(E_ALL);
ini_set('display_errors', 1);

class UPnPFind
{
    /**
     * Find devices by UPnP multicast message and stores them to cache
     *
     * @return array  Parsed device list
     */
    public static function findDevices()
    {
        $discover = self::discover(10);

        return($discover); //!!

        /*
        $devices = array();
        flush();
        foreach ($discover as $response) {

            $device = new Device();
            if ($device->initByDiscoveryReponse($response)) {

                $device->saveToCache();

                try {
                    $client = $device->getClient('ConnectionManager');
                    $protocolInfo = $client->call('GetProtocolInfo');

                    $sink = $protocolInfo['Sink'];
                    $tmp = explode(',', $sink);

                    $protocols = array();

                    foreach ($tmp as $protocol) {
                        $t = explode(':', $protocol);
                        if ($t[0] == 'http-get') {
                            $protocols[] = $t[2];
                        }
                    }
                } catch (UPnPException $upnpe) {
                    $protocols = array();
                }

                $device->protocolInfo = $protocols;

                $cache[$device->getId()] = array(
                    'name' => $device->getName(),
                    'services' => $device->getServices(),
                    'icons' => $device->getIcons(),
                    'protocols' => $device->getProtocolInfo()
                );
            }
        }

        return $cache;
        */
    }

    /**
     * Performs a standardized UPnP multicast request to 239.255.255.250:1900
     * and listens $timeout seconds for responses
     *
     * Thanks to artheus (https://github.com/artheus/PHP-UPnP/blob/master/phpupnp.class.php)
     *
     * @param int $timeout Timeout to wait for responses
     *
     * @return array  Response
     */
    private static function discover($timeout = 2)
    {
        $msg  = 'M-SEARCH * HTTP/1.1' . "\r\n";
        $msg .= 'HOST: 239.255.255.250:1900' . "\r\n";
        $msg .= 'MAN: "ssdp:discover"' . "\r\n";
        $msg .= "MX: 3\r\n";
        $msg .= "ST: upnp:rootdevice\r\n";
        $msg .= '' . "\r\n";

        $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
        socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1);
        socket_sendto($socket, $msg, strlen($msg), 0, '239.255.255.250', 1900);

        socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));

        $response = array();
        do {
            $buf = null;
            @socket_recvfrom($socket, $buf, 1024, MSG_WAITALL, $from, $port);

            if (!is_null($buf)) {
                $response[] = self::discoveryReponse2Array($buf);
            }
        } while (!is_null($buf));
        //socket_close($socket);

        return $response;
    }

    /**
     * Transforms discovery response string to key/value array
     *
     * @param string $res discovery response
     *
     * @return \stdObj
     */
    private static function discoveryReponse2Array($res)
    {
        $result = array();
        $lines  = explode("\n", trim($res));

        if (trim($lines[0]) == 'HTTP/1.1 200 OK') {
            array_shift($lines);
        }

        foreach ($lines as $line) {
echo '<br>';         
            $tmp = explode(':', trim($line));

            $key   = strtoupper(array_shift($tmp));
            $value = (count($tmp) > 0 ? trim(join(':', $tmp)) : null);

            $result[$key] = $value;
         echo $value;
        }

        return (Object)$result;
    }
}


$devices = UPnPFind::findDevices();
//echo $devices;
print_r($devices);



 
а описание протокола DIAL я нашел по ссылке https://github.com/jloutsenhizer/CR-Cas ... tation-WIP

он видит другие устройства, но колонка от гугл почему-то на мой запрос не отвечает

2) Отправить контент на устройство HTTP запросом

При очередной распродаже по 30$ за мини версию, считаю что должен купить каждый фан умного дома ;-) Тем более сейчас вроде какая-то акция и можно купить 2 шт за 60$ в американском сторе. Доставка сервисом типа бандерольки у меня вышла 35$. Итого получилось по 47$ (2600 руб.) за штуку. Также я создал группу в телеграм, куда я и члены группы скидывают интересные ссылки на подобные железяки https://t.me/iot_gadgets

снифинг пакетов программы BubbleUpnp:
Вложения
ghome2.txt
(1.64 КБ) 678 скачиваний
Последний раз редактировалось directman66 Чт фев 15, 2018 9:42 am, всего редактировалось 1 раз.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Google Home - ifttt- web hook

Сообщение directman66 » Чт фев 15, 2018 9:36 am

Получить более подробную информацию о своем гугл хоум можно узнать запросив сценарием:
СпойлерПоказать

Код: Выделить всё

$host='192.168.1.197';
$port=8008;

$url=$host.':'.$port.'/ssdp/device-desc.xml';
$cmd='curl '.$url;
$answ=shell_exec($cmd);
echo $answ."<br><br>";


$url=$host.':'.$port.'/setup/eureka_info?options=detail';
$cmd='curl '.$url;
$answ=shell_exec($cmd);
echo $answ."<br><br>";

$url=$host.':'.$port.'/setup/scan_results';
$cmd='curl '.$url;
$answ=shell_exec($cmd);
echo $answ."<br><br>";

$url=$host.':'.$port.'/setup/supported_timezones';
$cmd='curl '.$url;
$answ=shell_exec($cmd);
echo $answ."<br><br>";
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Dicont
Сообщения: 112
Зарегистрирован: Вс дек 17, 2017 11:24 pm
Благодарил (а): 34 раза
Поблагодарили: 11 раз

Re: Google Home - ifttt- web hook

Сообщение Dicont » Чт фев 15, 2018 7:50 pm

А не смотрел много трафика и какого на сервера Googla отправляет в пассивном режиме, когда стоит и ждет команды?
И фраза активации только Ok Google?
Кнопку можно на колонке нажать чтобы постоянно Окей не говорить?
Можно на ней Offline синтезатор\распознование голоса настроить?
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Google Home - ifttt- web hook

Сообщение directman66 » Чт фев 15, 2018 8:32 pm

Dicont писал(а):А не смотрел много трафика и какого на сервера Googla отправляет в пассивном режиме, когда стоит и ждет команды?
И фраза активации только Ok Google?
Кнопку можно на колонке нажать чтобы постоянно Окей не говорить?
Можно на ней Offline синтезатор\распознование голоса настроить?
я предполагаю, что отправляет только после команды ок гугл, слышал, что насчет фразы гугл обещал подумать. Пруфов нет. Есть выключатель команды на колонке. Кнопки "случаю" вроде нет. Но там настроек много, и не все доступны, так как часть настроек настраивается через приложение гугл асистент, которое пока не устанавливается.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Ответить