Всем привет!
Сделал сегодня простую, но достаточно забавную штуку, и решил поделиться с народом. Сразу хочу извиниться, красивых (и ненужных) картинок и скриншотов не будет: текст рассчитан «на тех, кому ехать, а не шашечки».
Наверняка не я один был озабочен тем, как же управлять компьютером через решения «умного дома», голосом. К удивлению, когда я задался этим вопросом (года два или чуть более назад), то вскоре убедился, что особого выбора-то и нет. Мне удалось найти лишь одну бесплатную утилиту, которая могла, пусть и «через попу автогеном», реализовать желаемое. Утилита эта называется «Push2Run» by Rob Latour, работает она достаточно прямолинейно и безыскусно, через апплеты IFTTT и DropBox — на IFTTT создается апплет с распознаваемой частью фразы (задается через $), а потом эта часть записывается (опять-таки, через скрипты IFTTT) в текстовый файл на DropBox-е. Push2Run отслеживает появление нового файла через FileSystemWatcher, считывает содержимое, как свою команду, и удаляет файл. В принципе, незатейливое, но вполне себе работоспособное решение, если бы не…
Я прекрасно пользовался Push2Run более двух лет, пока, не так давно, не затеял возится с моторизированной «умной» шторой. Под это дело даже заказал себе trial week платного IFTTT Pro — нужно сказать, что бесплатные эккаунты у них обслуживаются, ну, как бы сказать… не очень-то быстро — кстати, это небольшой недостаток как Push2Run в частности, так и IFTTT вообще. Недостаток действительно небольшой — годовая цена Pro сервиса у них (IFTTT) не настолько велика, чтобы реально экономить; тем более, с Pro эккаунтом все заработало гораздо быстрее, но вот именно тут, как у нас говорят, shit happens (ОРТ переводчик: «произошла небольшая неприятность«) ☹
IFTTT, ни с того, ни с сего, вдруг перестал «сотрудничать» с Google Assistant! Притом, при изменении ответа (в апплете), они (эти изменения) звучали через Google mini speaker, но вот действия никакого не производилось! После общения со службой поддержки IFTTT, и гугления, выяснилось, что проблема эта «системная», в том смысле, что на стороне IFTTT они ее отловить не могут (или не умеют, но тут поверю чуваку из support-а), а инженеры Google вникать в нее не хотят. Словом, если это случилось у вас — «сушите вёсла, гасите свет» ☹
«Сушение вёсел» в мои планы никак не входило, и потому я немедленно начал искать альтернативу, которую, вскоре, и нашел, к своему огромному удовольствию. Это оказался сервис Sinric Pro, о котором я писал в прошлой статье. Быстренько переместив туда свои «умные гаджеты», и убедившись, что все работает (кстати, намного быстрее и «правильнее», нежели чем через решение Adafruit IO + IFTTT), я подумал: «Было бы очень неплохо приспособить сервис Sinric Pro и для управления PC!»
К моему сожалению, оказалось, что, во-первых, из поддерживаемых языков есть только Python и NodeJS (это помимо C++ для Arduino IDE), а, во-вторых, как выяснилось из диалога с разработчиком, Гуглом для них сертифицированы лишь следующие типы устройств: switch, blind, thermostat, fan, AC_unit, light, garage door, lock. Но «велика беда-печаль! Не хочешь — научим, не можешь — заставим!». На Github-е нашелся (господи, чего там только нет!) проект — достаточно рудиментарная библиотека для Sinric Pro на C#, а компьютер может прекрасно притвориться себе… термостатом! ? У термостата есть один параметр, изменяемый в достаточно широких пределах — это устанавливаемая температура. Её-то мы и будем использовать в качестве уникального ID команды.
Правда, проект пришлось немного «отрефакторить» (не хочу извиняться за код, это не я писал! Но и камрада Marc Scammacca особо упрекать тоже не хочу — большое ему спасибо, что сделал отличный задел!) — добавить устройство термостат и обработку событий от него (Марк написал обработку лишь для тех устройств, что, видимо, были у него в наличии). Плюс, я переделал target framework для библиотеки с netstandard 2.1/netcore 3.1 на обычный .NET v 4.7.2. К слову сказать, standalone netcore 3.1 application, собранное «штатными» средствами (да, MS сейчас такое, типа, умеет), «весило», ни много, ни мало, но аж 60 MB! А точно такое же, собранное под обычный .NET (со всеми assemblies внутри) занимает всего 380KB.
Вот ссылка на .NET репозиторий, а вот на «форкнуто-модифицированный» netstandard 2.1/netcore 3.1 (вдруг кто-то захочет себе пересобрать под Mac или Linux).
Вот прямая ссылка на релиз рабочего приложения (того, что доступно в репозитории). Приведу краткую инструкцию, как использовать:
-
создаем бесплатный эккаунт (на 3 устройства) на Sinric Pro
-
заходим на вебсайт, и создаем через dashboard новое устройство типа «Thermostat», обзываем его «My PC» для простоты (но имя может быть любое), присваиваем его нужной комнате (где у нас установлен Google mini speaker etc.)
-
открываем приложение Google Home на телефоне, и добавляем связь с эккаунтом Sinric Pro через добавление нового устройства
-
сразу после добавления, новый «термостат» должен появиться в выбранной комнате
-
теперь заходим в Google Home «Routines» (не знаю, как оно по-русски называется? «Сценарии»?), и добавляем свои сценарии. В приложении реализовано частичное управление медиа (поскольку и компьютер, на котором у меня это запущено, помимо «сервера за все про все», используется, в основном, как видеоплеер через браузер Chrome — думаю, сейчас это весьма распространенный сценарий). Например, я создал такие routines (через мини-спикеры English only, sorry!):
-
Starter -> «When I say to my Assistant» voice command: «Play video», Action -> Adjust thermostat to temperature 10°
-
Starter -> «When I say to my Assistant» voice command: «Pause», Action -> Adjust thermostat to temperature 11°
-
Starter -> «When I say to my Assistant» voice command: «Mute video», Action -> Adjust thermostat to temperature 12°
-
Starter -> «When I say to my Assistant» voice command: «Volume up», Action -> Adjust thermostat to temperature 13°
-
Starter -> «When I say to my Assistant» voice command: «Volume down», Action -> Adjust thermostat to temperature 14°
-
Starter -> «When I say to my Assistant» voice command: «Full screen», Action -> Adjust thermostat to temperature 15°
-
-
теперь, скачиваем приложение и сохраняем куда-нибудь (пусть и в Downloads), оно полностью portable
-
создаем шорткат (ярлык?) на десктопе, и редактируем его, указывая программке gh4pc.exe параметры для запуска, как-то:
C:UsersJohnSixPackDownloadsgh4pc.exe APP_KEY:27c1a817-xxxx-xxxx-xxxx-97af634bcc28 APP_SECRET:faa99618-xxxx-xxxx-be07-e1d24d70bf50-b1848b51-xxxx-xxxx-xxxx-316ce4acffe8 DEVICE_ID:614cfxxxxx113073xxxxx
где, соответственно, значение APP_KEY, APP_SECRET и DEVICE_ID — это ваши реальные значения из веб-приложения Sinric Pro
-
добавляем модифицированный шорткат в фолдер «Startup» из «Start menu» (ну, или как вам угодно), запускаем программу и наслаждаемся.
Все вышеописанное опробовано сегодня и прекрасно работает с Google Home через мини-спикеры; как заставить работать с Alexa и другими решениями «умных домов» я не знаю, равно, как сделать приложение совместимым с MacOS или Linux. Но код открыт, я открыт, автор Sinric Pro тоже открыт — дерзайте, спрашивайте, помогу, чем смогу!
P.S. Я помещу этот пост в хаб #DIY или Сделай сам, ибо, по моему мнению, DIY-щики почти напрямую заинтересованы в «умных» (и не очень?) решениях.
Дата-центр ITSOFT — размещение и аренда серверов и стоек в двух дата-центрах в Москве. За последние годы UPTIME 100%. Размещение GPU-ферм и ASIC-майнеров, аренда GPU-серверов, лицензии связи, SSL-сертификаты, администрирование серверов и поддержка сайтов.