Интеграция Google Smart Home с моим устройством IoT (требуется пояснение)

Я ищу разъяснения по поводу того, как работает Google Smart Home. Я хочу интегрировать свое текущее конечное устройство, которое управляет светом, с Google Smart Home.

На моем конечном устройстве работает очень маленький микроконтроллер с ОСРВ (Linux недоступен)

Вот как я это вижу (исправьте или прокомментируйте)

  • Насколько я понимаю, это требует от меня размещения собственной облачной службы, которая будет взаимодействовать с моим текущим конечным устройством?
  • Затем моя облачная служба свяжется с облачной службой Google.
  • Моя облачная служба определяет протокол для связи с несколькими конечными устройствами
  • Google Smart Home определяет протокол для разговора с моей облачной службой

Вопросы

  1. Есть ли способ сделать это без собственной облачной службы?

person IamAUser12    schedule 07.12.2017    source источник
comment
Немного мусора, что домашние устройства Google не могут напрямую общаться с конечными точками локальной сети. Было бы вырезано много промежуточного программного обеспечения.   -  person nick fox    schedule 27.12.2018


Ответы (2)


Это довольно простая сводка вещей - да.

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

Это может показаться незначительной деталью, но это не обязательно должна быть «облачная служба», которую вы контролируете, с которой общается Google. Он действительно должен быть общедоступной конечной точкой HTTPS. Это может быть облачная служба (и это будет в большинстве случаев), общедоступный не облачный сервер или даже просто общедоступный URL-адрес, который имеет туннель к вашей частной сети (например, с ngrok).

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

person Prisoner    schedule 07.12.2017
comment
Думая об этом в более широком масштабе (тысячи устройств в нескольких домах) без моего собственного облачного сервиса. Мне понадобится общедоступный URL-адрес для каждого устройства. Как служба Google узнает об этих общедоступных URL, когда они станут активными? - person IamAUser12; 07.12.2017
comment
Вам понадобится какой-то центральный сервер, который вы можете использовать для обработки запросов к отдельным устройствам. Каждый запрос на выполнение будет содержать уникальный идентификатор устройства, который вы можете использовать, чтобы определить, какое конечное устройство вам нужно. Однако ожидается, что центральный сервер также будет обрабатывать запросы QUERY, возвращая помощнику состояние устройства. У вас должна быть какая-то служба для хранения состояний устройства и обработки запросов Ассистента. Это можно сделать легким способом с помощью функций Firebase и базы данных в реальном времени. - person Nick Felker; 07.12.2017

Я думаю, что конкретный пример может быть полезным: вот как подключить Google Home к вашим устройствам с помощью промежуточной службы, такой как IFTTT:

  1. Создайте рецепт (апплет) на IFTTT для подключения Google Assistant к туннелю ngrok с помощью службы Webhook. Это позволяет вам определить простую ключевую фразу, которую Google Home распознает (например, «Окей, Google, включи мое устройство»). Затем апплет вызовет веб-перехватчик - например, ngrok - с помощью настраиваемой команды, которую вы можете определить (например, "https://myngroktunnel.ngrok.io/Control.cgi?mydevice=on "), где myngroktunnel - это адрес вашего туннеля ngrok (см. # 2 ниже), а Control.cgi - это сценарий CGI, который вы разместили на своем микроконтроллере (см. ниже # 3).

  2. Вам нужно будет установить и запустить ngrok на своем микроконтроллере: это подключит апплет IFTTT к вашему микроконтроллеру через туннель ngrok и предоставит вам общедоступный URL-адрес, который пересылает запросы на ваш микроконтроллер. Обычно вы перенаправляете свой туннель ngrok на определенный порт вашего микроконтроллера, на котором вы запускаете веб-сервер (например, Apache) со сценариями CGI для управления вашим устройством. В сети доступны и другие службы безопасного туннеля: ngrok - лишь одна из них. Таким образом, вам не нужно размещать свой собственный веб-сервис, но вам нужно использовать туннель к общедоступной службе.

  3. Веб-сервер, который вы разместили на своем микроконтроллере, имеет сценарии CGI, которые управляют вашим устройством (например, предположим, что у вас есть сценарий Control.cgi, который включает или выключает ваше устройство с помощью командной строки, такой как mydevice = on, например, крючок в апплете IFTTT "/Control.cgi?mycommand=on"

Конечно, ОСРВ на вашем микроконтроллере Muse способна запускать ngrok и веб-сервер - вот почему многие люди решили использовать одноплатный компьютер, такой как Raspberry Pi или Orange Pi, работающий под Linux для размещения и управления своими устройств. Поскольку ОСРВ вашего устройства не является Linux, я бы посоветовал получить устройство Linux, которое затем перенаправляло бы запрос на ваше устройство ОСРВ через вашу локальную сеть.

person Phil Pownall    schedule 10.12.2017