Всем привет!

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

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

Комментарии (4)


  1. ant82
    25.09.2021 08:39

    Интересная идея, полез сразу пробовать, но после регистрации sinric pro, при входе просто крутится please wait и ничего не происходит.

    Беглый поиск выдал готовую утилиту под эту задачу - https://www.push2run.com


    1. usa_habro_user Автор
      25.09.2021 16:04
      +1

      при входе просто крутится please wait и ничего не происходит.

      Возможно, криво настроенный адблокер?

      Беглый поиск выдал готовую утилиту

      Вместо "беглого поиска" могли бы просто мою статью прочесть, перед тем, как комментировать: я в первых двух абзацах описываю, как именно этот Push2Run работает, и почему он у меня прекратил работать.


      1. ant82
        25.09.2021 16:31

        Точно, читал вскользь и сразу начал пробовать, начало пролистал.

        Блокировщик отключал, не помогло, сейчас еще раз попробовал - то же самое.


        1. usa_habro_user Автор
          25.09.2021 16:58
          +1

          Странно, попробуйте написать разработчику вот тут - Aruna отвечает почти сразу (ну, если по времени подходяще - он из Шри-Ланки).