Встраиваем своё устройство «Умного дома» в экосистему SmartThings

Содержание

Платформы «Умного дома» позволяют интегрировать устройства и создавать новые сценарии их взаимодействия. Известен эффект платформ: пользователи скорее выберут ту, с которой уже совместимы имеющиеся у них устройства, нежели перейдут на какую-либо новую. Поэтому для разработчиков новых гениальных девайсов может оказаться выгоднее встраиваться в уже готовую платформу, сосредоточив внимание на «железном» продукте, нежели разрабатывать свои собственные «велосипеды» в виде еще одних облачных экосистем и личных кабинетов.

Рассмотрим, как встроить свое собственное устройство с платформой «Умного дома» Samsung SmartThings. Мы реализуем вариант прямого (Direct) подключения для управления устройством «Умного дома» на примере кнопки-выключателя и трехцветной лампочки.

Зачем вообще нужны платформы «Умного дома»?

Сейчас гаджетов и умных устройств в продаже — сколько хочешь. Не проблема купить чайник с управлением по Bluetooth или лампочку с WiFi. Но делает ли это ваш дом «умным»? Нередка ситуация: лампочка управляется только через мобильное приложение от производителя. Это создает неудобства, если вы пытаетесь сочетать хотя бы несколько разных брендов. Поэтому идеальная платформа – это та, которая дает возможность управлять единообразно устройствами разных производителей.

Более того, хотелось бы видеть «растворенный в повседневности компьютер», как мечтал об этом Марк Вайзер из Xerox PARC: не управлять через специальное приложение, не распылять свой фокус внимания. Хотелось бы естественного взаимодействия с умной средой, не меняющего наших привычек. Как реализовать это технически? Например, это могут быть сценарии, где вовлечены разнородные устройства в доме: вы проснулись – носимое устройство это детектировало и включился чайник; вы пришли домой – датчик на двери это зафиксировал, с учетом времени суток задернулись шторы, лампа включилась, с учетом температуры включился кондиционер.

Сценарии становятся ещё более полезными, если мы задействуем Интернет: например, чтобы дистанционно проверить, выключена ли розетка с утюгом. Или банальный пример: ваш умный дом посмотрел прогноз погоды и выдал вам совет, как лучше одеваться. А можно еще добавить управление голосом через умную колонку.

Для всего этого предназначены платформы «Умного дома». Рассмотрим, что умеет платформа Samsung SmartThings.

Предыстория – что такое SmartThings?

SmartThings начинался как стартап. На тот момент, когда он появился, в 2012 году в США, тема «Умного дома» ещё не была на вершине хайпа, не было ещё умных колонок и разнообразия гаджетов в магазинах. Идея пришла основателю стартапа, Алексу Хокинсону, после одного случая: дом его семьи в Колорадо пострадал оттого, что после временного отключения электричества водопроводные трубы сильно замерзли, их прорвало, и весь этаж залило. Тогда он подумал, что мог бы предотвратить проблему, если бы знал о происходящем в доме.

После безуспешного поиска готового решения Хокинсон и его коллеги сделали прототип устройства и начали кампанию на Kickstarter. Кампания оказалась сверх-успешной, собрали 1 200 000 $ вместо запланированных 250 000$ за 30 дней. Началась продажа хаба-концентратора с небольшим набором устройств в комплекте: умная розетка, датчик открытия двери, датчик движения, датчик присутствия. А в 2019 году, уже под брендом Samsung SmartThings, вышла третья по счету версия хаба.


Залогом успеха на Кикстартере было наличие работающих прототипов железа и софта, и дружественность к мейкерскому сообществу

Создатели стартапа вышли из DIY-среды, поэтому они последовательно развивают концепцию открытого API для гиков-мэйкеров, способных на ранней стадии выступить как early adopters. В кампании на Kickstarter был и шилд для Arduino, и различные облачные модули для беспроблемного подключения вашего стороннего устройства. В Интернете вы сможете найти множество примеров самодельных устройств, совместимых со SmartThings, будь то управляемая дверь курятника (с решением серьезной жизненной задачи – спасти цыплят от хищной норки), или дистанционная установка кода электронного замка для гостей с Airbnb.


Источник фото: https://www.hackster.io/aaronpk/auto-airbnb-entry-745799

В 2012-2013 годах компания SmartThings прошла несколько раундов инвестирования и получила 12,5 миллионов долларов. И наконец, в 2014 году она заинтересовала компанию Samsung и была приобретена за 200 млн $ в рамках стратегии по входу на рынок Интернета вещей.
Облачные возможности платформы остались бесплатными: авторы, теперь уже сотрудники Samsung, не исключая теоретической возможности брать плату за большие объёмы трафика, подчеркивают: для разработчиков устройств всегда будет оставаться бесплатный вариант. Это радует, ведь сейчас почти во всех облачных сервисах предусмотрена монетизация, и зачастую даже на пробный период нужно привязывать банковскую карточку. SmartThings же — полностью бесплатная платформа.

Архитектура SmartThings

Давайте двигаться по схеме слева направо.

Устройства

SmartThings Devices – это могут быть не только устройства из комплекта SmartThings, но и множество сторонних из списка партнёров.

Если устройства нет в списке официально поддерживаемых, вы можете поискать к нему Device Handler — он может быть предоставлен сообществом разработчиков — или написать свой собственный.

Способы подключения

Подключать устройства к платформе вы можете следующими способами:

  • Hub-connected — через хаб-концентратор, актуально для устройств, которые своего выхода в Интернет не имеют, а соединяются через традиционные для такого рода систем беспроводные сети наподобие ZigBee.
  • Directly-connected — через Интернет напрямую к облаку. Недавно SmartThings выпустили видеокамеру, лампочку и умную розетку, и они работают без хаба – через WiFi. Именно такой вариант мы будем реализовывать в данном руководстве.
  • Cloud-connected — через стороннее облако для тех устройств, у которых уже есть своя облачная экосистема. Это сложнее, поэтому такой вариант рассматривать не будем.

Обычно для подключения разнообразной аппаратуры у вас дома должен стоять специальный маленький сервер «Умного дома», поддерживающий различные протоколы. Он же – хаб, концентратор, шлюз – названия бывают разные.


Хаб и комплект устройств к нему. Источник фото: IXBT.

Приложение

SmartThings App – это приложение, которое можно установить на основные мобильные ОС и с его помощью: добавлять новые устройства в систему, контролировать уже добавленные, назначать правила автоматизации, получать уведомления через push и SMS, и многое другое.

Абстракции

В SmartThings, как и во многих других платформах умного дома, есть следующие абстракции: комнаты, сцены, сценарии.

Устройства группируются в комнаты (Rooms). Вы просто присоединяете в приложении те или иные гаджеты к одной комнате, и называете её «Кухня», «Ванная», «Прихожая».

Ещё есть сцены (Scenes) – это ситуации: «сон», «отдых», «работа», «просмотр фильма» — каждая из ситуаций характеризуется своим набором состояний устройств.


Сцены и комнаты на экране приложения

И наконец, сценарии (Routines): правила автоматизации «если – то». По умолчанию в программе четыре сценария: «Я вернулся», «Спокойной ночи», «Пока», «Доброе утро». Можно настроить активацию сценария по условию наступления утра, или в случае движения, или в случае открытия двери, и так далее. Нетривиальный пример: когда я вхожу домой — заблокировать сетевой трафик на домашней камере видеонаблюдения, чтобы исключить возможность утечки моих личных видео. Или жестокий воспитательный пример: принудительно отключить планшет от сети, когда наступило 11 часов вечера, чтобы не дать себе залипать в Интернете вместо здорового сна.

Более того, в программе SmartThings на телефоне есть интересная возможность – запоминание типичных действий. Когда часто пользуешься телефоном, он со временем начинает тебе подсказывать, как лучше сконфигурировать сцены, исходя из самых часто запускаемых приложений.

Для добавления в систему новых устройств предусмотрена система плагинов. Разработчик может запрограммировать плагин для своего собственного устройства – пользовательский интерфейс внутри приложения SmartThings и логику работы устройства. По сути, это веб-приложение. С точки зрения разработчика, плагин может подписываться на события или уведомления с устройства, посылать ему сообщение, мониторить статус соединения с устройством. Есть понятная документация о жизненном цикле плагина.

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

Но сейчас мы никаких плагинов делать не будем, а сделаем проще: добавим самодельное устройство, пользуясь только стандартными средствами платформы.

Делаем своё устройство совместимым со SmartThings

У вас может возникнуть вопрос: а зачем? В чем смысл делать его совместимым, если вы – разработчик устройства?

  • Основное преимущество – увеличение ценности продукта благодаря автоматической интеграции со всей экосистемой.
  • При условии прохождения функционального тестирования, вы можете наклеить на коробочку продукта лого: «Совместимо со SmartThings», тем самым вы гарантируете беспроблемную установку и настройку устройства в экосистеме SmartThings.
  • Как и с любой платформой, ваша задача облегчается: вам уже не нужно стараться и разрабатывать, к примеру, пользовательский интерфейс – вы можете воспользоваться стандартными кнопками и прочими элементами интерфейса SmartThings.
  • Вы получаете пиар и аудиторию пользователей благодаря коммьюнити SmartThings (оно живое и активное).

Что предлагается сделать

SmartThings Device SDK (STDK) был презентован недавно – на Samsung Developer Conference в октябре 2019 года. Ниже мы предлагаем перевод руководства по этому SDK. И не просто перевод: мы всё то же самое проделали и повторили своими руками, поэтому тут будут некоторые комментарии практического характера, выходящие за пределы изначального руководства.

Как будет выглядеть итоговый результат, показано на видео:

RGB-светильник подключается к платформе SmartThings через WiFi, и вы управляете им через телефон. Сам светильник реализуется максимально дешевым и простым способом – на сверхпопулярной микросхеме ESP8266. Железо не принципиально: можно делать на любом микроконтроллере, ведь SDK написан на языке С, выложен в открытый доступ и его можно портировать при желании. В «продакшн» светильник на ESP вряд ли пойдет (начнем с того, что в «Умном доме» удобнее использовать другие интерфейсы, нежели WiFi), но для модели и иллюстрации вполне сгодится.

Функционал получившейся «умной лампочки» будет такой: управление RGB-светодиодом при помощи цветового круга на телефоне. А также ее выключение и включение посредством кнопки.
Процесс разработки показан на схеме:

Показанный процесс не жесткий, некоторые из шагов можно менять местами, что и покажем в руководстве.

Железо

В оригинальном руководстве показано всё на примере платы WeMos D1 Mini, это отладочная плата на основе ESP8266, которую можно вставлять в макетную плату. В общем-то, ничего хитрого в ней нет, это просто модуль суперпопулярного в среде любителей китайского чипа ESP, напаянный для удобства работы на более широкую плату по размеру макетки. Поэтому вы можете делать всё и на любой другой плате.

/>
Слева: WeMos D1, справа – Troyka WiFi Shield

Что нужно для сборки примера:

  • Ubuntu Linux версии не ниже 18.04 (можно собирать пример и под Windows, и под MacOS, но мы для определенности выбрали Linux)
  • Телефон с Android версии не ниже 1.7.39, либо iOS версии не ниже 1.6.41-343. Установите из Play Market приложение SmartThings, также нужно зарегистрировать бесплатный Samsung Account. Для этого не нужно обладать телефоном Samsung, привязывается просто к почте.
  • ESP8266 SDK. Как установить, написано в репозитарии, но в общем, всё очень просто:

И прописать путь к этому SDK в переменной IDF_PATH:

И инструменты разработки (компилятор):

Руководство

В качестве примеров будут рассмотрены следующие устройства: умный выключатель и умная лампочка. Мы начнем с умного выключателя, как более простого и не требующего никакой внешней периферии.

Шаг 1. Регистрируем свое устройство.

Работа начинается в SmartThings Developer Workspace, где нужно залогиниться с помощью Samsung Account. Этот аккаунт создается бесплатно, и для его создания не обязательно иметь телефон Samsung.

В Developer Workspace вам сразу же предлагают создать первый проект. Соглашаемся, после чего из двух вариантов проектов нужно выбрать Device Integration.

На выбор будут даны три варианта интеграции устройства:

  • SmartThings Cloud Connector — для подключения устройств, имеющих собственное облако, которое будет связано с облаком SmartThings
  • SmartThings Hub — для устройств ZigBee, Z-Wave, Bluetooth, и на момент написания статьи недоступен, так как хаб официально пока не продается в России
  • Directly Connected – самый простой вариант для подключения напрямую, без каких-либо посредников.

Добавляем профиль устройства. Если говорить в терминах ООП, то профиль устройства – это такой «класс», а конкретное устройство – «экземпляр класса».

Нам нужно определить функциональные характеристики устройства в терминах SmartThings Capability («способностей»). О том, какие вообще «способности» устройства существуют, можно прочитать в инструкции.

Заполняем поля своими значениями. Для примера, имя профиля можно вписать Test Switch Profile, описание – любой текст, тип устройства – Switch, Vendor ID – любой текст. «Тип устройства» влияет на иконку вашего устройства и на пользовательский интерфейс. В списке не так много возможных типов устройств (хотя есть и экзотические, например WineCellar – винный шкаф), поэтому, если не найдете именно вашего – не расстраивайтесь и просто выберите наиболее близкое и похожее. На последнем экране (Dashboard Control) можно ничего не менять.

После создания профиля, не забудьте нажать на кнопку «Add device profile to project» вверху справа.

  • Важно: способность «Health Check» требуется для всех подключенных напрямую устройств. Добавьте её в профиль устройства.
  • Для примера «Умный выключатель» понадобятся следующие способности: Switch, Health Check.

И опять же, по аналогии с предыдущим примером, не забудьте нажать кнопку «Add device onboarding to project».

Останется только нажать кнопку Deploy. После этого вы сможете увидеть ваше устройство в приложении SmartThings – но только в режиме разработчика (Developer Mode). Если Deploy не нажимается, и вам пишут «Please add a Model Name» — то это означает, что вы не указали Device Onboarding ID, промотайте страницу ниже и сделайте это – введите любое имя на ваше усмотрение.

Теперь вы можете начать тестирование вашего виртуального устройства на телефоне.

Весь первый шаг подробно показан в видео:

Регистрация устройства в облаке

Прежде, чем приступать к работе с собственно «железом», нужно сделать еще кое-что. После нажатия кнопки Deploy экран будет выглядеть иначе: там появится новое поле Device Identity.

Для аутентификации вашего устройства в облаке SmartThings нужно ввести его серийный номер и публичный ключ (со схемой подписи ED25519). Это делается достаточно легко.

В этом примере показано, как создать пару ED25519-ключей при помощи инструмента в SDK. Вы получите файл device_info.json как результат работы программы в папке tools/keygen/linux/output_ .

Linux-версия кейгена расположена в st-iot-device-sdk-c-reference/iot-core/tools/keygen/linux либо в st-device-sdk-c/tools/keygen/linux

Серийный номер для тестового устройства будет сгенерирован случайным образом в формате STDK + [MNID] + буквенно-цифровой формат (8 символов). Свой MNID можно узнать в профиле разработчика, в разделе Manage Account.

Далее, чтобы сгенерировать буквенно-цифровую часть, вам нужно ввести ваш MNID (4 символа) как парамер кейгена. В нижеприведенном примере MNID – это fJ*c.

Скопируйте «abed**5c» из выдачи кейгена, и вставьте в поля XXXXXXXX в разделе Device Identity Registration. Появится окно, в котором вас попросят ввести публичный ключ.

Скопируйте публичный ключ из выдачи кейгена («waGgyjWIvHhF1LU***FG2hx/4u***ADFHr/ry0j5jbk=» в этом примере) и вставьте в поле „Device Public Key“.

Шаг 2. Прошивка устройства

Поговорим о коде, который вы будете загружать в устройство.
Примеры прошивки находятся в папке st-device-sdk-c-ref/apps/esp8266/. Нас будет интересовать пример st_switch.

    Скачайте onboarding_profile.json в окне обзора вашего устройства в кабинете разработчика.

Или то же самое, но покороче:

После того, как закачается прошивка, не забудьте перезагрузить плату.

Шаг 3. Подключение и управление с телефона

Включите режим разработчика в приложении SmartThings на телефоне. Как это сделать, написано на официальном сайте, но проще объяснить словами: входите в настройки через «шестеренку», и жмете 20 секунд кнопку «Сведения о SmartThings». Внизу появится меню «Режим разработчика».

Наше устройство должно быть видно в списке в приложении SmartThings: запускаем приложение, нажимаем „плюс“ и „Добавить устройство“. Проматываем в конец списка вендоров и видим значок „My Testing Devices“. Нажимаем на него и выбираем своё устройство.

Более того: если вы уже активировали режим разработчика, и включили устройство, то у вас возникнет всплывающее меню, предлагающее добавить именно это устройство!


Управление устройством из приложения SmartThings.

Вначале устройство появляется как точка доступа, поскольку ещё не знает пароля от вашего WiFi. В процессе подключения вы укажете сеть, с которой должно соединяться устройство. Если у вас скрытая точка доступа, то у ESP не получится с ней соединиться, поэтому выбирайте открытую точку.

Результат будет такой:

В этом примере (st-switch) вы управляете встроенным на плату светодиодом, нажимая на кнопку на самой плате. Как видите, для этого примера даже не нужно никакой дополнительной периферии, только сама плата ESP8266.

Вы также можете включать/выключать устройство кнопкой на панели управления в мобильном приложении:

И конечно, если вы жмете физическую кнопку, то и в приложении статус лампочки обновляется.

Пример «Умная лампочка»

После того, как вы сделали пример «Умный выключатель», давайте попробуем всё немного усложнить. Будет RGB-светодиод, и включать/выключать будем внешней кнопкой, а также выбирать цвет через приложение.

Железо

Схема подключения будет простая:

И принципиальная схема тоже не помешает:

Если посмотреть исходник (находится по адресу: st-device-sdk-c-ref/apps/esp8266/st_lamp), то подключение там следующее:

#define GPIO_OUTPUT_NOTIFICATION_LED 2
#define GPIO_INPUT_BUTTON 5
#define GPIO_OUTPUT_COLORLED_R 16
#define GPIO_OUTPUT_COLORLED_G 14
#define GPIO_OUTPUT_COLORLED_B 12
#define GPIO_OUTPUT_COLORLED_0 13

Вы можете переназначить выводы согласно тому, какая именно модель платы у вас. Обратите внимание, что на плате система обозначений одна (D1, D2…), а в коде другая, но в этом легко разобраться, просто глядя на документацию к вашей плате.

Программная часть

По программной части у нас поменяется несколько шагов:

  • При добавлении Capabilities нужно указать следующие: Switch, Switch Level, Color Control, Health Check. Тип устройства там будет — Light.
  • Пример прошивки берем из той же папки с примерами, называется он st_lamp.

Как это выглядит в действии – еще раз гифка:

Заключение

Итак, вы получили готовый работающий пример. Вы видите, что большая часть кода уже сделана за вас – всё, что касается подключения, аутентификации, интерфейса устройства. Пример SmartThings ценен тем, что он не привязан ни к какому аппаратному устройству, и вы можете смотреть и оценивать, какой функционал платформы нужен в 2k20, если вы разрабатываете «Умный дом».


Татьяна Волкова — Автор учебной программы трека по Интернету вещей IT Академии Samsung, специалист по программам корпоративной социальной ответственности Исследовательского центра Samsung


Источник: habr.com