Я думаю, что в наши дни одна из самых ценных вещей — это время. Как ни странно, современные устройства, призванные ускорить нашу жизнь, по факту отнимают еще больше времени. К счастью, многие из задач, решаемых с помощью смартфона, можно автоматизировать, серьезно облегчив свое существование.

 

Введение

В этой статье я, как активный поклонник португальского разработчика приложений Жуана Диаса (Joao Dias) и его лозунга «Automate your life», покажу, как сделать свою жизнь намного проще, автоматизировав задачи, требующие связи смартфона с компом, другим смартфоном или планшетом.

В частности, мы рассмотрим такие задачи, как отправка текста с планшета на комп и наоборот, отправка файлов на телефон/планшет из контекстного меню стандартного проводника Windows. Мы узнаем, как получать уведомления о событиях, произошедших на компе на свой смартфон, как практически мгновенно (исключая время на загрузку файлов) синхронизировать файлы определенной папки на компе с устройством на Android и наоборот, как настроить голосовое управление компом с помощью смартфона и многое другое.

Основная программа, которая будет отрабатывать наши действия на устройстве, — это Tasker. За коммуникации будет отвечать плагин AutoRemote, за передачу команд голосом — AutoVoice, а за действия с персональным компьютером — программа для Windows EventGhost. Некоторые действия потребуют наличия root, Android версий 4.2 и выше и установленного BusyBox.

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

 

Tasker

Для начала устанавливаем Tasker. Мы будем использовать его в качестве обработчика событий на устройстве. Рекомендую использовать английскую локализацию в программе и отключить режим новичка (beginner mode) для манипуляций с профилями. Принятые в статье обозначения: профиль (profile) определяет условия срабатывания события (event) или состояния (state), в ответ на которое выполняется задача (task), которая состоит из одного или более действий (action).


 

 

 INFO

Разработчик Таскера (aka Pent) закрыл продажу приложения для России по политическим взглядам, но, конечно же, можно найти альтернативные варианты.


Также нам понадобится плагин для Tasker под названием AutoRemote. Он будет ловить события Tasker и в ответ отправлять данные на другие устройства или комп либо, наоборот, принимать данные и запускать определенный профиль Tasker.

После первого запуска AutoRemote сгенерирует два важных параметра, которые будут необходимы для последующих действий. Это Personal URL в виде goo.gl/XxXx и Personal key, который можно узнать, перейдя по ссылке Personal URL. В адресной строке браузера будет запись вида http://autoremotejoaomgcd.appspot.com/?key=YyYyY, где символы после = и есть Personal Key. Его нужно запомнить или скопировать в блокнот.

Tasker и AutoRemote следует установить на все устройства, которые будут участвовать в коммуникации. Далее на каждом устройстве запускаем AutoRemote, переходим на вкладку Registered Devices (символ телефона) и вводим в поле Personal URL URL другого устройства. Также можно отсканировать QR-код устройства, который показывается на главном экране приложения.

Пример: передача скопированного текста на другое устройство

Чтобы продемонстрировать принцип работы связки Tasker + AutoRemote, приведу простой пример профиля. На устройстве 1 создаем задачу с действием Plugin -> AutoRemote Message. В поле Device выбираем устройство 2, в поле Message вводим copy=:=%CLIP. Данное действие отправит на устройство 2 команду copy=:= с текстом из буфера обмена телефона/планшета. Для большего удобства использования создаем на рабочем столе виджет Tasker и выбираем в его настройках созданную задачу, предварительно присвоив задаче иконку.

На устройстве 2 создаем профиль State -> Plugin -> AutoRemote с полем Message Filter copy=:=. Обязательно ставим галочку на Event Behaviour. Для задачи выбираем действие Misc -> Set clipboard и в поле Text вводим переменную %arcomm (она содержит текст справа от =:=).

рис.1

рис.2

Теперь после нажатия на виджет первое устройство отправит содержимое своего буфера обмена в буфер обмена второго устройства. По аналогии можно сделать множество других вещей. Например, создав на одном устройстве профиль, который отправляет слово reboot, а на втором — профиль, срабатывающий на эту команду и выполняющий System-Reboot, можно перезагрузить устройство. Или можно передать команду run app_name, а на втором устройстве для действия выбрать App -> Launch App и нужную программу из списка.

 

EventGhost

Для связки устройств с компом нам понадобится EventGhost. Это своего рода Tasker для Windows, который позволяет автоматизировать работу ПК. Он бесплатен и открыт под GPLv2, так что доступен для скачивания и установки кому угодно.

Окно программы состоит из двух частей: слева системные логи и события, справа — макросы, сгруппированные в так называемое Configuration Tree (см. 1.1 на скриншоте). Все наши дальнейшие настройки будут касаться как раз создания новых макросов, выполняющих те или иные действия в ответ на происходящие события. Основной язык программы — Python, и многие действия, которые изначально не предусмотрены программой, можно осуществлять с помощью скриптов и действий команд питона. Для вставки готовых макросов, приведенных ниже, необходимо правой кнопкой нажать на Configuration Tree и в меню выбрать Paste, после чего поправить макрос под себя.

рис.3

Плагины

У EventGhost есть довольно внушительный перечень плагинов, которые значительно расширяют его возможности. Для установки стороннего плагина необходимо закинуть его в папку «Program Files (x86)\EventGhost\plugins» и перезапустить EventGhost. Для того чтобы плагин использовался всегда, необходимо добавить его в Autostart. Для описываемых ниже трюков нам понадобятся плагин Keyboard для перехвата и эмулирования нажатий кнопок, Directory Watcher для отслеживания изменений в папках и, конечно же, AutoRemote для связи с мобильными устройствами.

Плагин AutoRemote

Чтобы установить плагин, скачиваем файл, кладем его в папку плагинов (\EventGhost\plugins\AutoRemote), перезагружаем EventGhost и добавляем сам плагин в автозагрузку. В появившемся окне заполняем часть строк: добавляем устройства, заполнив поля Device Name и Personal URL, которые мы получили, устанавливая AutoRemote на устройства. Device Key должен заполниться автоматом при нажатии Tab. Также можно отправить список устройств с телефона, зайдя в AutoRemote, затем длинный тап на EventGhost и в меню выбрать Send My Devices.

рис.3 рис.4

Для того чтобы устройства знали, что EventGhost доступен для получения команд, необходимо добавить в ветку Autostart действие регистрации: AutoRemote -> Register EventGhost и в появившемся окне выбрать устройство и повторить для оставшихся.

 

Трюки

Теперь у нас есть все необходимое для создания конфигураций, объединяющих возможности EventGhost и Tasker + AutoRemote. Большинство приведенных ниже трюков состоит из двух компонентов: макроса EventGhost, который определяет действие (Event) и реакцию на него (Action), а также профиля Tasker, который выполняет схожие задачи со стороны смартфона. Работая вместе, они позволяют сделать очень многое.

Отправка файлов с компа на устройство

Для отправки необходимо вставить следующий код в EventGhost (правой кнопкой на Configuration tree, затем Paste):

<source lang="HTML"><?xml version="1.0" encoding="UTF-8" ?>
<EventGhost Version="1630">

<Event Name="Main.SentFromExplorer.File" />
<Action>
    AutoRemote.SendMessage(u'Android Device', u'', u'', u'files', u'', u'', u'', '', u'{eg.event.payload[0]}')
</Action>
</Macro>
</EventGhost></source>

Далее отредактировать «AutoRemote: Sending files to Android Device» (два раза кликнув мышкой), выбрав свое устройство (см. 1.4). На смартфоне при этом ничего делать не нужно, AutoRemote сам примет и сохранит файл. Отправка осуществляется через контекстное меню проводника.

Однако есть у этого метода одна недоработка. По умолчанию можно отправить файл только на одно устройство, выбранное в настройках плагина. Если же потребуется отправить сразу на несколько устройств (телефон/планшет), придется править реестр: дублировать значение C:\Program Files (x86)\EventGhost\EventGhost.exe -event SentFromExplorer.File «%1» в ветке HKEY_CLASSES_ROOT*\shell\SendToEventGhost с переименованием пункта и добавлением символа перед .File. Тогда получится структура, как на скриншоте. Видеоинструкция доступна на моем канале.

рис.5

Уведомление о включении компа

В AutoStart добавляем Action -> AutoRemote Notification (см. 1.5), выбираем нужное устройство и заполняем Title и Text. Теперь при загрузке компа (конечно же, при наличии инета) на телефон придет уведомление. Можно настроить дополнительные поля: вибрация, звук, действие при нажатии на уведомление.

рис.6

На самом деле вариантов использования уведомлений масса. EventGhost умеет реагировать на практически все системные события, и на любое из них можно повесить уведомление. В качестве примера можно привести вход пользователя в заблокированный комп. Когда это происходит, EventGhost генерирует событие System.SessionUnLock. Создаем для второго события макрос и в качестве действия копируем все тот же AutoRemote Notification. Теперь мы знаем, что комп трогали, когда нас не было на месте (см. 1.6).

Отправка текста на телефон/планшет из любого текстового редактора

Вставляем в Configuration Tree следующий код:

<source lang="HTML">
<?xml version="1.0" encoding="UTF-8" ?>
<EventGhost Version="1669">
  <Macro Name="Send clipboard to my device" Expanded="True">
    <Event Name="Keyboard.Ctrl+Alt+V" />
    <Action>
    AutoRemote.SendMessage(u'My Device', u'URL', u'device', u'copy=:={eg.WinApi.Clipboard.GetClipboardText()}', u'', u'', u'', '', u'')
    </Action>
  </Macro>
</EventGhost>
</source>

Меняем устройство и название на свое. Теперь любой скопированный текст можно отправить на устройство нажатием <Ctrl + Alt + V> (см. 1.13). Имей в виду, что текст придет как сообщение для AutoRemote, так что на устройстве его придется обработать с помощью Tasker. Как вариант — вставить в буфер обмена (см. в начале статьи).

Отправка текста на комп с телефона/планшета

Как было показано в примере из раздела «Tasker», создаем действие Plugin -> AutoRemote Message, но в поле Recipient выбираем EventGhost. Поле Message также остается copy=:=%CLIP. Для удобства выносим виджет на рабочий стол. В Configuration Tree EventGhost вставляем код:

<source lang="HTML">
<?xml version="1.0" encoding="UTF-8" ?>
<EventGhost Version="1669">
  <Macro Name="Copy to Clipboard" Expanded="True">
    <Event Name="AutoRemote.Message.copy" />
      <Action>
        EventGhost.PythonCommand(u'eg.WinApi.Clipboard.SetClipboardText(eg.event.payload.arcomm)')
      </Action>
  </Macro>
</EventGhost>
</source>

Теперь по нажатию на виджет содержащийся в буфере обмена смартфона текст будет отправлен в буфер обмена компа. Для наглядности в макрос можно добавить еще один Action — Show OSD. OSD — это On Screen Display, то есть текст поверх всех окон. Настроить можно положение, цвет, шрифт, время показа и так далее. Я в качестве уведомления использую «Текст скопирован: {eg.event.payload.arcomm}», где выражение в фигурных скобках соответствует полученному тексту (см. 1.7). В логе (см. 1.12) видна работа макроса, однако именно в логе русский текст отображается в юникоде.

Отправка файла с телефона на комп

Для работы понадобится еще один плагин Таскера — AutoShare, позволяющий забирать в переменные всю информацию, передающуюся при использования стандартного меню андроида Share/Отправить/Поделиться. После установки создаем команду «Файл на комп», нажав + в Manage Commands. В Таскере создаем профиль State -> plugin -> AutoShare Command и выбираем нужную команду. Далее создаем действие Plugin -> AutoRemote Message с параметром incoming=:=%asfile(), где %asfile() — это массив с выделенными для передачи файлами. В поле Files вписываем %asfile(). На стороне компа вставляем Configuration Tree следующий код:

<source lang="HTML"><?xml version="1.0" encoding="UTF-8" ?>
<EventGhost Version="1669">
  <Macro Name="Incoming Files" Expanded="True">
    <Event Name="AutoRemote.Message.incoming" />
    <Action>
      EventGhost.PythonCommand(u'print eg.event.payload.files[0]')
    </Action>
    <Action>
      System.Execute(u'C:\\Windows\\explorer.exe', u'/select,{eg.event.payload.files[0]}', 0, False, 2, u'', False, False)
    </Action>
  </Macro>
</EventGhost>
</source>

Данный макрос при получении сообщения, в котором есть команда incoming, примет файл в папку, которую указали при настройке плагина AutoRemote, после чего откроет проводник с подсвеченным именем файла (первым, если их несколько), за что отвечает параметр /select,{eg.event.payload.files[0]}.

По желанию можно перед этим добавить Show OSD с именем файла (Получен новый файл: {eg.event.payload.files[0]}) или вообще убрать последнее действие (см. 1.8). Теперь можно отправлять файлы из файловых менеджеров, галереи и прочего через стандартное меню Android «Поделиться/Share».

Автоматическая отправка скриншотов с телефона на комп (root и busybox)

В Таскере создаем профиль с событием Event -> File -> File Modified. Вместо файла выбираем папку со скриншотами (значок лупы, затем долгий тап на самой папке). Для действия выбираем Script -> Run Shell и вписываем команду busybox ls /storage/emulated/0/Pictures/Screenshots -ltr | tail -1 | awk ‘{print $NF}’. Ниже в том же действии в поле Store output in вводим переменную (у меня %Test5). В эту переменную будет записываться имя файла.

 

Следующим действием делаем Task -> Perform Task и выбираем из списка задание, которое надо сначала создать. Для этого создаем во вкладке Task действие Plugin -> AutoRemote Message и выбираем EventGhost в качестве целевого устройства. В поле Message вводим incoming=:=, а в поле Files вписываем путь до файла + имя. Это будет /storage/emulated/0/Pictures/Screenshots/%Test5.

У меня этот Task называется Send Screen, соответственно, я его выбрал в действии Perform Task. В EventGhost дополнительно ничего настраивать не надо (мы уже создали обработчик incoming, настраивая отправку файлов с телефона на комп). При успешной отправке видим уведомление, как на рис. 2. Для отправки скриншотов, сделанных подряд, обязательно в настройках задачи ставим Run Both Together в Collision Handling.

Открытие ссылок из мобильного браузера и других прог на компе

В AutoShare создаем команду Open On PC (или любую удобную). Для нового профиля создаем State -> Plugin -> AutoShare и в поле Command Filter выбираем нужную команду. В качестве действия выбираем все тот же AutoRemote Mеssage с устройством EventGhost и текстом %astext.

Теперь, если нажать в любой программе, где можно поделиться ссылкой (в мобильном Хроме это «Меню -> Отправка»), на AutoShare Command и в списке выбрать AutoShare Command -> Open On PC, то данная страница откроется на компе автоматически. Также можно передать ссылку после нажатия, если программа спросит «Что использовать?». Для этого необходимо нажать на Open Remotely. В следующем окне выбрать любое устройство.

Открытие файла на компе

Создаем макрос с событием AutoRemote.Message.open, добавляем Python-команду from os import startfile;startfile(eg.event.payload.files[0]). Из Таскера отправляем файлы с командой open.

Синхронизация папки на компе с телефоном

Directory Watcher отслеживает новые файлы в определенной папке (Send2Nexus) и при их появлении сразу отправляет на телефон в папку, настраиваемую в AutoRemote. Для действия используется все та же отправка, описываемая ранее (см. 1.9, 1.10).

 

Управление устройствами из Linux

К сожалению, для Linux нет клиента AutoRemote, но мы можем использовать связку веб-интерфейс + SSH для управления устройствами и Linux-машинами через сервер AutoRemote. Для этого понадобится curl:

$ sudo apt-get install curl

Также необходим SSH с возможностью логина на машину через login:password без необходимости использовать SSH-ключи. Когда оба этих условия будут выполнены, запускаем следующую команду, чтобы авторизовать нашу Linux-машину:

$ curl "http://autoremotejoaomgcd.appspot.com/registerpc?key=YOUR_KEY&name=NAME&id=ANY_UNIQUE_ID&type=linux&publicip=YOUR_PUBLIC_IP_OR_HOST_NAME&localip=$(sudo ifconfig eth0 | grep "inet addr" |awk '{print $2}' |awk -F: '{print $2}')"
  • YOUR_KEY — ключ, см. выше;
  • NAME — то, как будет отображаться устройство с Linux на телефоне;
  • ANY_UNIQUE_ID — любой уникальный ID.

После выполнения команды на телефоне появится окно с запросом логина и пароля от Linux-машины. Далее можно начинать работу. Чтобы отправить сообщение на устройства (все), достаточно выполнить следующую команду:


Сообщение придет в форме linux=:=СООБЩЕНИЕ, так что для его обработки при создании профиля Tasker в поле AutoRemote Message Filter следует прописать linux=:=. Сообщения, пришедшие с устройств, будут интерпретироваться как Linux-команды, вывод которых будет приходить в ответном сообщении. Например, если послать через Tasker на машину сообщение ls / (AutoRemote Message — в первом поле Device выбрать то, что мы вписали в NAME_TO_APPEAR_ON_YOUR_PHONE, в поле Message вписать ls /), то в логах AutoRemote мы увидим список файлов корневого каталога, начинающийся с linux=:=. С помощью Tasker ответ можно обработать тем или иным образом.

Выводы

Связка Tasker + AutoVoice + AutoRemote + EventGhost + plugins дает очень много возможностей для автоматизации, в том числе голосом: от управления питанием и запуска программ до контроля различных устройств, видео- и аудиоплееров, проекторов, устройств на X10 и так далее. Согласись, приятно ощутить себя частью будущего, сказав «ОК, Гугл, выключи домашний комп» — и через несколько секунд комп выключится. Или, подходя к дому, сказать: «ОК, Гугл, запусти Watch Dogs».


Теги:

1 комментарий

  1. sfmc

    30.11.2016 at 19:47

    В абзаце «Отправка файла с телефона на комп», пропустили строку:

Оставить мнение

Check Also

WTF is APT? Продвинутые атаки, хитрости и методы защиты

Наверняка ты уже читал о масштабных сетевых атаках, от которых пострадали банки, крупные п…