Мне всегда казалось, что главное в «умном доме» — даже не возможности какого-то конкретного устройства, а способность этих устройств взаимодействовать между собой, реализуя сложные сценарии. Для этого уже не обязательно замыкаться на компонентах одного производителя, поскольку есть агрегаторы, вроде Google Home или навыков управления устройствами у Алисы. Однако некоторые сценарии им до сих пор не под силу. Сегодня поговорим о том, как это обойти с помощью IFTTT — универсального посредника между веб-сервисами. И спойлер: в конце упомяну, как обойти ограничения самого IFTTT.
В двух словах о IFTTT
Мэшап сервису IFTTT уже около 10 лет, так что в подробном представлении он не нуждается. IFTTT помогает соединять между собой интернет-сервисы, которые не имеют прямой интеграции. Вместо проработки десятка разных интеграций создателям интернет-сервиса достаточно интегрироваться с одним IFTTT, который становится универсальным посредником, позволяя конечным пользователям определять направление передачи данных на сторону и задачи, которые решает интеграция.
IFTTT часто вспоминают в контексте автоматических репостов из одной социальной сети в другую. Его также легко применить для сбора полезной информации и задач. К примеру, работая в разных командах, в каждой из которых используется свой инструмент распределения задач, я агрегирую все, что назначается на меня в разных системах — Trello, Asana и по электронной почте — в личный Remember the milk (RTM).
Некоторые интеграции со сторонними сервисами есть и у самого RTM, но доступны они только в платной версии. Так что IFTTT позволил обойти необходимость в платной подписке. А заодно помог настроить Telegram-бот для быстрого добавления задач из мессенджера.
IFTTT живет не только в виртуальном мире. Если компоненты умного дома или любые другие IoT-устройства имеют доступ в облако (и производитель интегрировал свой веб-сервис с IFTTT), вы сможете управлять ими через апплеты IFTTT.
Конечно, здесь есть масса оговорок. Сценарии могут быть только предельно простые — «если — то», никакой сложной логики. Сервис понимает кириллицу в названиях апплетов и текстовых полях при их настройке, но не все функции работают в России и с русским языком. К примеру, в США у пользователей есть возможность сделать сценарий, который по некому событию звонит на мобильный телефон. Эта функция за пределами Штатов недоступна. Также с IFTTT не интегрированы многие популярные российские ресурсы (начиная от ВКонтакте и заканчивая Алисой).
Но сегодня речь пойдет не об этом, а о том, как IFTTT помогает работать с устройствами. Большая часть компонент умного дома, доступных на нашем рынке, производятся за пределами нашей страны и опираются на зарубежные веб-сервисы, и IFTTT среди них популярен.
Управляем умными устройствами на примере Sonoff
IFTTT интегрирован с самыми разными системами умного дома. В России продаются компоненты нескольких из них, но Sonoff (система eWeLink Smart Home) по субъективному впечатлению одни из самых популярных, в основном благодаря цене (на распродажах на AliExpress Wi-Fi реле можно купить за 300-400 рублей).
Что за устройства Sonoff?
Sonoff — бренд недорогих реле, розеток, датчиков и выключателей, управляемых по Wi-Fi. Компоненты системы можно как купить в РФ, так и заказать из Китая. Они хорошо известны на Хабре благодаря тому, что умельцы прошивают использованный в них Wi-Fi модуль ESP8266, чтобы устройства не пытались обращаться в облако на Amazon, а работали внутри локальной сети (заменяя облачный сервис собственным хабом умного дома). Но для работы с IFTTT такая перепрошивка как раз не нужна.
«Из коробки» управление устройствами осуществляется со смартфона из приложения eWeLink (в теории есть и веб-интерфейс, но он в начальной стадии развития).
В последние несколько лет одноименный сервис доработали. Появилась интеграция с Google Home и Алисой, так что устройствами даже можно управлять голосом на русском языке без каких-либо сложных настроек. Однако некоторые сценарии реализовать только в приложении нельзя. Допустим, установив на теплый пол реле с датчиком температуры и влажности, в приложении нельзя будет создать сложный сценарий, позволяющий включать или выключать подогрев по данным обоих датчиков.
Хотя набор команд пока еще ограничен, приложение уже позволяет реализовать различные интересные сценарии. К примеру, можно включать и выключать ночник в комнате в соответствии с расписанием рассветов и закатов на конкретный день (функция настраивается один раз, и каждый день время переключения ночника немного изменяется в соответствии с астрономическими данными).
При этом приложение отлично справляется с задачей отключения устройств на ночь по расписанию, с настройками циклических таймеров и делает много других полезных, но не очень-то умных вещей.
Подключаем eWeLink к IFTTT
При настройке умного дома потребность в IFTTT появляется в тот момент, когда хочется реализовать сценарий, не поддерживаемый производителем (например, по группировке устройств), или объединить несколько функций от разных производителей в единое целое. К сожалению, в последней версии приложения eWeLink производитель решил заработать на тех, кому недостаточно простых сценариев, и открывает интеграцию с IFTTT только на платном тарифе — 9.99 долларов США с оплатой через PayPal в год. Это не такая большая сумма для эксперимента длиною в год.
Почему именно эксперимента? Потому что реальное удобство тех или иных сценариев показывает только длительное ежедневное использование. В нашей квартире умные устройства живут и сменяют друг друга уже не один год. Когда появляется новый компонент, в голове уже вьется десяток сценариев, которые он позволит воплотить. И первое время задействуются все. Но спустя месяц 9 из 10 перестают использоваться. А тот один, что «выживает», претерпевает некоторые изменения — за это время проходит «тонкая настройка» идеи под себя: сколько времени должен продолжать гореть свет в прихожей после того, как нажали кнопку? Какой уровень яркости должен быть у ночного освещения в коридоре? Какие пороги для показаний датчиков надо установить для отправки уведомлений, чтобы они не напрягали и т.п.
IFTTT позволяет реализовать массу сценариев и легко их перенастраивать. Для иллюстрации подхода предположим, что мы хотим автоматически отключать термопот, когда я ухожу из дома дальше, чем на соседнюю улицу. Это реализуется элементарно:
Создаем новый апплет (Create). В качестве триггера (+This) выбираем сервис Location, который берет местоположение с устройства Android (или iPhone), где установлен клиент IFTTT (залогиненный под тем же аккаунтом, если вы настраиваете сценарий в веб-интерфейсе).
Для сервиса доступно 3 триггера. Нам подойдет «You exit area».
Задаем адрес центральной точки зоны и радиус вокруг этого адреса (радиус регулируется увеличением / уменьшением масштаба карты). IFTTT приятно удивил тем, что понимает ввод адреса кириллицей. К сожалению, радиус не может быть слишком большим — к примеру, нельзя обозначить зоной весь город-миллионник.
Создаем таким образом триггер (кнопка Create trigger внизу экрана).
Устанавливаем действие (+That) — отключение реле eWeLink. Для этого подключаем сервис eWeLink Smart Home. После нажатия на Connect надо будет залогиниться в аккаунте eWeLink в отдельном окне.
Если авторизация пройдет успешно, появится целый список доступных действий для eWeLink Smart Home.
Нажимаем «Turn 1-Channel Switch on or off» и на следующей странице из выпадающего списка выбираем нужное устройство, а также требуемое состояние (on или off). В моем случае для подключения термопота используется именно реле, а не розетка, но если ошибиться и выбрать «Turn 1-Channel Plug on or off», ничего не сломается.
Создаем действие кнопкой Create action и завершаем настройку апплета.
Более сложная задача — реализация бота в Telegram для «общения» с домом. Для этого надо подключить сервис Telegram. Создавая соответствующие апплеты, можно добавить боту команды управления устройствами (включением / выключением света и отдельных устройств), а заодно разные полезные уведомления, в частности:
- Напоминания о сдаче показаний счетчиков или об оплате коммунальных платежей. Автоматическая подача показаний в старом фонде — недостижимая мечта. Добавить такое напоминание можно через Google Календарь, задав сценарий IFTTT, который на старте очередного мероприятия из этого календаря будет отсылать в чат сообщение с заданным текстом.
- Уведомления о том, что в комнатах становится слишком жарко / холодно / сыро или сухо. У меня это было реализовано для ванной на время настройки пороговых значений для автоматики теплого пола. Идея была в том, чтобы использовать для управления теплым полом параметры воздуха в помещении (а датчик в самом полу оставить для аварийного отключения при перегреве). Параметры комфортного климата необходимо было выяснять экспериментально. Чтобы в ходе этих экспериментов не создавать некомфортных условий, на короткий период были настроены уведомления на минимальную температуру и максимальную влажность.
- Уведомления о том, что что-то открылось или закрылось (по данным с датчиков).
Давайте создадим апплет, который по команде из чата в Telegram включает ночную подсветку в коридоре (как и термопот, подключенную через реле Sonoff). Начнем с подключения сервиса Telegram. Найдем его через Explore (вкладка Services):
Нажимаем Connect, чтобы подключить его к своему аккаунту. После приглашения переходим в Telegram и добавляем бота в контакты.
Нажимаем Start, чтобы авторизоваться.
После перехода на IFTTT для авторизации, нам доступны все возможности общения сервиса с мессенджером.
Теперь возвращаемся в IFTTT и начинаем создавать апплет.
В качестве триггера выбираем Telegram.
Нам подойдет триггер «New message with key phrase to @IFTTT».
Пусть ключевой фразой будет «ночной свет», а ответом на мое сообщение — одно слово «Включаю» (помним, что сервис чувствителен к строчным / заглавным буквам).
Переходим к настройке действия.
Как и в прошлом примере выбираем включение реле сервиса eWeLink Smart Home. На этот раз только в списке устройств нужно выбрать то, что соответствует подсветке.
С уведомлениями все работает также, только триггером будет выступать какой-то другой сервис (например, датчик из eWeLink Smart Home), а действие будет выполнять Telegram — слать сообщение определенного содержания.
Как упоминалось выше, в сегменте умного дома IFTTT не ограничивается поддержкой только устройств Sonoff — это лишь пример под рукой. Есть масса производителей, которые уже интегрировались с сервисом, и еще больше советов пользователей о том, как обойти отсутствие интеграции, например с Xiaomi Mi Home (спойлер — через уведомления на мобильном устройстве под Android).
Когда и IFTTT не хватает
Логика IFTTT довольно проста: одно условие — одно действие. На базе этой логики можно сделать интересные вещи, но рано или поздно этого становится мало. К сожалению, сервис не позволяет задавать цепочки действий (для каждого из них придется создавать собственный сценарий), также как не позволяет строить сложные условия, состоящие из нескольких частей с логическим «и» или «или».
Но и это можно обойти при помощи «надстройки». Речь идет о сервисе apilio.com, задача которого добавить более сложную логику в IFTTT. Подключение дополнительного инструмента, конечно, будет еще одним уровнем усложнения системы, зато приблизит настройку сценариев умного дома к программированию — можно будет задавать переменные, менять по срабатыванию триггеров их значения, конструировать условия и т.п.
Покажу, что может Apilio, на примере усложнения сценария с отключением термопота.
Изначально реле термопота выключается на ночь (с 2 ночи до 8 утра) и когда я покидаю заданную в IFTTT зону. Но что если кроме меня дома живет еще кто-то? Согласитесь, будет неудобно, если подогрев воды будет отключаться каждый раз, когда я ухожу на работу. Логичнее просто напоминать о том, что термопот включен, если я не дома в определенное время (в момент включения термопота после «ночной спячки») — после обдумывания сценария мне показалось, что это самый лучший индикатор того, что я куда-то уехал надолго.
Для этого:
- Регистрируемся на сервисе Apilio;
- Создаем 2 булевые переменные, которые по умолчанию имеют значение false (пусть они называются location и teapot);
- Создаем два условия: I_exit_area (которое становится true, если я вышел за обозначенную в IFTTT зону) и I_forgot_teapot (true, если чайник включился);
- Настраиваем взаимную интеграцию Apilio и IFTTT. В IFTTT надо включить сервис Webhook и указать ключ этого сервиса в Apilio, чтобы последний мог слать уведомления в IFTTT (ключ — это последняя часть URL, на скриншоте он “замылен”). Для интеграции в другую сторону в IFTTT надо подключить сервис Apilio;
- Задаем сценарии IFTTT для изменения переменных location и teapot (триггером будет включение термопота в eWeLink и выход из заданной зоны в сервисе Location, а действия — изменение соответствующих переменных на true в сервисе Apilio, для этого в сервисе предусмотрено «Update a variable in Apilio to true»);
- Создаем логическую схему: при одновременном выполнении этих двух условий в сервис IFTTT будет отправлено уведомление;
- Настраиваем сценарий IFTTT на прием этого уведомления (триггером будет уведомление из Apilio, а действие — отправка сообщения в Telegram с предупреждением).
Результат: если что-то заставит термопот включиться в тот момент, когда я далеко от дома, я получу в Telegram вопрос: «А не забыл ли ты выключить чайник»?
В бесплатной версии сервис Apilio позволяет задать одну логическую схему и для эксперимента этого достаточно. Стоимость годовой подписки начинается от 7.2$, что тоже вполне бюджетно. Как и у самого IFTTT, у сервиса уже есть масса аналогов — думаю, можно подобрать что-то бесплатное под свои задачи. Важно только понимать, что открывая доступ новому сервису к своему умному дому вы в каком-то смысле делитесь с ним личными данными — так что безопасность здесь не последний вопрос.
Развитие IFTTT, Apilio и подобных ему инструментов показывает, что у пользователей умного дома все-таки есть потребность в каком-то усложнении сценариев. Сколько бы производители не боролись за максимальное упрощение, иногда без дополнительной логики никак.