Управляем компьютером (Windows PC) голосом, через Google Assistant

15 ИЮНЯ 2022

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

Наш телеграм-канал: t.me/@mailsgun_online

Youtube: youtube.com/@mailsgun_online

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

Всем привет!

Сделал сегодня простую, но достаточно забавную штуку, и решил поделиться с народом. Сразу хочу извиниться, красивых (и ненужных) картинок и скриншотов не будет: текст рассчитан «на тех, кому ехать, а не шашечки».

Наверняка не я один был озабочен тем, как же управлять компьютером через решения «умного дома», голосом. К удивлению, когда я задался этим вопросом (года два или чуть более назад), то вскоре убедился, что особого выбора-то и нет. Мне удалось найти лишь одну бесплатную утилиту, которая могла, пусть и «через попу автогеном», реализовать желаемое. Утилита эта называется «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-сертификаты, администрирование серверов и поддержка сайтов.

Всего голосов 9: ↑8 и ↓1 +7

  • сегодня в 06:47
    Всего голосов 10: ↑10 и ↓0 +10

    3.8K

  • 22 сентября в 06:28
    Всего голосов 36: ↑32 и ↓4 +28

    14K

  • 23 августа в 20:16
    Всего голосов 229: ↑194 и ↓35 +159

    53K

Source: habr1

Ну и напоследок напоминаю вам о нашем новом проекте vkserfing bot.