Платформы «Умного дома» позволяют интегрировать устройства и создавать новые сценарии их взаимодействия. Известен эффект платформ: пользователи скорее выберут ту, с которой уже совместимы имеющиеся у них устройства, нежели перейдут на какую-либо новую. Поэтому для разработчиков новых гениальных девайсов может оказаться выгоднее встраиваться в уже готовую платформу, сосредоточив внимание на «железном» продукте, нежели разрабатывать свои собственные «велосипеды» в виде еще одних облачных экосистем и личных кабинетов.
Рассмотрим, как встроить свое собственное устройство с платформой «Умного дома» Samsung SmartThings. Мы реализуем вариант прямого (Direct) подключения для управления устройством «Умного дома» на примере кнопки-выключателя и трехцветной лампочки.
Сейчас гаджетов и умных устройств в продаже — сколько хочешь. Не проблема купить чайник с управлением по Bluetooth или лампочку с WiFi. Но делает ли это ваш дом «умным»? Нередка ситуация: лампочка управляется только через мобильное приложение от производителя. Это создает неудобства, если вы пытаетесь сочетать хотя бы несколько разных брендов. Поэтому идеальная платформа – это та, которая дает возможность управлять единообразно устройствами разных производителей.
Более того, хотелось бы видеть «растворенный в повседневности компьютер», как мечтал об этом Марк Вайзер из Xerox PARC: не управлять через специальное приложение, не распылять свой фокус внимания. Хотелось бы естественного взаимодействия с умной средой, не меняющего наших привычек. Как реализовать это технически? Например, это могут быть сценарии, где вовлечены разнородные устройства в доме: вы проснулись – носимое устройство это детектировало и включился чайник; вы пришли домой – датчик на двери это зафиксировал, с учетом времени суток задернулись шторы, лампа включилась, с учетом температуры включился кондиционер.
Сценарии становятся ещё более полезными, если мы задействуем Интернет: например, чтобы дистанционно проверить, выключена ли розетка с утюгом. Или банальный пример: ваш умный дом посмотрел прогноз погоды и выдал вам совет, как лучше одеваться. А можно еще добавить управление голосом через умную колонку.
Для всего этого предназначены платформы «Умного дома». Рассмотрим, что умеет платформа Samsung 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 Devices – это могут быть не только устройства из комплекта SmartThings, но и множество сторонних из списка партнёров.
Если устройства нет в списке официально поддерживаемых, вы можете поискать к нему Device Handler — он может быть предоставлен сообществом разработчиков — или написать свой собственный.
Подключать устройства к платформе вы можете следующими способами:
Обычно для подключения разнообразной аппаратуры у вас дома должен стоять специальный маленький сервер «Умного дома», поддерживающий различные протоколы. Он же – хаб, концентратор, шлюз – названия бывают разные.
Хаб и комплект устройств к нему. Источник фото: IXBT.
SmartThings App – это приложение, которое можно установить на основные мобильные ОС и с его помощью: добавлять новые устройства в систему, контролировать уже добавленные, назначать правила автоматизации, получать уведомления через push и SMS, и многое другое.
В SmartThings, как и во многих других платформах умного дома, есть следующие абстракции: комнаты, сцены, сценарии.
Устройства группируются в комнаты (Rooms). Вы просто присоединяете в приложении те или иные гаджеты к одной комнате, и называете её «Кухня», «Ванная», «Прихожая».
Ещё есть сцены (Scenes) – это ситуации: «сон», «отдых», «работа», «просмотр фильма» — каждая из ситуаций характеризуется своим набором состояний устройств.
Сцены и комнаты на экране приложения
И наконец, сценарии (Routines): правила автоматизации «если – то». По умолчанию в программе четыре сценария: «Я вернулся», «Спокойной ночи», «Пока», «Доброе утро». Можно настроить активацию сценария по условию наступления утра, или в случае движения, или в случае открытия двери, и так далее. Нетривиальный пример: когда я вхожу домой — заблокировать сетевой трафик на домашней камере видеонаблюдения, чтобы исключить возможность утечки моих личных видео. Или жестокий воспитательный пример: принудительно отключить планшет от сети, когда наступило 11 часов вечера, чтобы не дать себе залипать в Интернете вместо здорового сна.
Более того, в программе 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
Что нужно для сборки примера:
В качестве примеров будут рассмотрены следующие устройства: умный выключатель и умная лампочка. Мы начнем с умного выключателя, как более простого и не требующего никакой внешней периферии.
Работа начинается в SmartThings Developer Workspace, где нужно залогиниться с помощью Samsung Account. Этот аккаунт создается бесплатно, и для его создания не обязательно иметь телефон Samsung.
В Developer Workspace вам сразу же предлагают создать первый проект. Соглашаемся, после чего из двух вариантов проектов нужно выбрать Device Integration.
На выбор будут даны три варианта интеграции устройства:
Выбираем третий вариант. Придумайте название проекта, например, для простоты — SmartSwitch.
Добавляем профиль устройства. Если говорить в терминах ООП, то профиль устройства – это такой «класс», а конкретное устройство – «экземпляр класса».
Нам нужно определить функциональные характеристики устройства в терминах SmartThings Capability («способностей»). О том, какие вообще «способности» устройства существуют, можно прочитать в инструкции.
Заполняем поля своими значениями. Для примера, имя профиля можно вписать Test Switch Profile, описание – любой текст, тип устройства – Switch, Vendor ID – любой текст. «Тип устройства» влияет на иконку вашего устройства и на пользовательский интерфейс. В списке не так много возможных типов устройств (хотя есть и экзотические, например WineCellar – винный шкаф), поэтому, если не найдете именно вашего – не расстраивайтесь и просто выберите наиболее близкое и похожее. На последнем экране (Dashboard Control) можно ничего не менять.
После создания профиля, не забудьте нажать на кнопку «Add device profile to project» вверху справа.
Теперь добавляем профиль аутентификации (Onboarding profile). Если вкратце, то в этом профиле вы можете кастомизировать экраны, появляющиеся при первом подключении и логине. Введите любое название и любое трехзначное число. Другие два экрана можно пока пропустить. На последнем экране выберите вариант подтверждения – Button Confirm – по нажатию кнопки на устройстве. В данном руководстве мы предполагаем, что вам досталась плата со встроенной кнопкой. Если вдруг кнопки нет (например, вы используете другой ESP-модуль), то можете выбрать вариант без аутентификации вовсе – он называется Just Works, то есть «просто работает» без лишних вопросов.
И опять же, по аналогии с предыдущим примером, не забудьте нажать кнопку «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_{ serialNumber}.
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“.
Поговорим о коде, который вы будете загружать в устройство.
Примеры прошивки находятся в папке st-device-sdk-c-ref/apps/esp8266/. Нас будет интересовать пример st_switch.
! Если у вас никак не получается прошить программу – скорее всего, вы забыли перевести плату ESP8266 в режим программирования. Это делается, как правило, нажатием кнопки на самой плате. Например, Wi-Fi Troyka модуль можно перевести, зажав кнопку PROG, и затем нажав и отпустив кнопку RESET.
После того, как закачается прошивка, не забудьте перезагрузить плату.
Включите режим разработчика в приложении SmartThings на телефоне. Как это сделать, написано на официальном сайте, но проще объяснить словами: входите в настройки через «шестеренку», и жмете 20 секунд кнопку «Сведения о SmartThings». Внизу появится меню «Режим разработчика».
Наше устройство должно быть видно в списке в приложении SmartThings: запускаем приложение, нажимаем „плюс“ и „Добавить устройство“. Проматываем в конец списка вендоров и видим значок „My Testing Devices“. Нажимаем на него и выбираем своё устройство.
Более того: если вы уже активировали режим разработчика, и включили устройство, то у вас возникнет всплывающее меню, предлагающее добавить именно это устройство!
Начнется подключение:
Управление устройством из приложения SmartThings.
Вначале устройство появляется как точка доступа, поскольку ещё не знает пароля от вашего WiFi. В процессе подключения вы укажете сеть, с которой должно соединяться устройство. Если у вас скрытая точка доступа, то у ESP не получится с ней соединиться, поэтому выбирайте открытую точку.
Результат будет такой:
В этом примере (st-switch) вы управляете встроенным на плату светодиодом, нажимая на кнопку на самой плате. Как видите, для этого примера даже не нужно никакой дополнительной периферии, только сама плата ESP8266.
Вы также можете включать/выключать устройство кнопкой на панели управления в мобильном приложении:
И конечно, если вы жмете физическую кнопку, то и в приложении статус лампочки обновляется.
После того, как вы сделали пример «Умный выключатель», давайте попробуем всё немного усложнить. Будет RGB-светодиод, и включать/выключать будем внешней кнопкой, а также выбирать цвет через приложение.
Схема подключения будет простая:
И принципиальная схема тоже не помешает:
Если посмотреть исходник (находится по адресу: st-device-sdk-c-ref/apps/esp8266/st_lamp), то подключение там следующее:
Вы можете переназначить выводы согласно тому, какая именно модель платы у вас. Обратите внимание, что на плате система обозначений одна (D1, D2…), а в коде другая, но в этом легко разобраться, просто глядя на документацию к вашей плате.
По программной части у нас поменяется несколько шагов:
Интерфейс в приложении получится такой:
Как это выглядит в действии – еще раз гифка:
Итак, вы получили готовый работающий пример. Вы видите, что большая часть кода уже сделана за вас – всё, что касается подключения, аутентификации, интерфейса устройства. Пример SmartThings ценен тем, что он не привязан ни к какому аппаратному устройству, и вы можете смотреть и оценивать, какой функционал платформы нужен в 2k20, если вы разрабатываете «Умный дом».
Татьяна Волкова — Автор учебной программы трека по Интернету вещей IT Академии Samsung, специалист по программам корпоративной социальной ответственности Исследовательского центра Samsung
Рассмотрим, как встроить свое собственное устройство с платформой «Умного дома» 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. Как установить, написано в репозитарии, но в общем, всё очень просто:
git clone https://github.com/espressif/ESP8266_RTOS_SDK.git
И прописать путь к этому SDK в переменной IDF_PATH:
nano ~/.bashrc export IDF_PATH="~/git/ESP8266_RTOS_SDK:$IDF_PATH"
- Также понадобится установить библиотеки:
sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing python-pyelftools
И инструменты разработки (компилятор):
sudo mkdir /opt/Espressif sudo chown username /opt/Espressif/ cd /opt/Espressif wget https://dl.espressif.com/dl/xtensa-lx106-elf-linux64-1.22.0-100-ge567ec7-5.2.0.tar.gz tar -xzf ./xtensa-lx106-elf-linux64-1.22.0-100-ge567ec7-5.2.0.tar.gz cd xtensa-lx106-elf export PATH="/opt/Espressif/xtensa-lx106-elf/bin:$PATH"
- Smart Things Device SDK C – библиотека на С. У нее есть свой репозиторий в github, но мы в целях обучения скачаем не саму библиотеку, а справочные материалы к ней, в которых и будут готовые примеры приложений.
git clone https://github.com/SmartThingsCommunity/st-device-sdk-c-ref.git cd st-device-sdk-c-ref ./setup.sh esp8266
Руководство
В качестве примеров будут рассмотрены следующие устройства: умный выключатель и умная лампочка. Мы начнем с умного выключателя, как более простого и не требующего никакой внешней периферии.
Шаг 1. Регистрируем свое устройство.
Работа начинается в SmartThings Developer Workspace, где нужно залогиниться с помощью Samsung Account. Этот аккаунт создается бесплатно, и для его создания не обязательно иметь телефон Samsung.
В Developer Workspace вам сразу же предлагают создать первый проект. Соглашаемся, после чего из двух вариантов проектов нужно выбрать Device Integration.
На выбор будут даны три варианта интеграции устройства:
- SmartThings Cloud Connector — для подключения устройств, имеющих собственное облако, которое будет связано с облаком SmartThings
- SmartThings Hub — для устройств ZigBee, Z-Wave, Bluetooth, и на момент написания статьи недоступен, так как хаб официально пока не продается в России
- Directly Connected – самый простой вариант для подключения напрямую, без каких-либо посредников.
Выбираем третий вариант. Придумайте название проекта, например, для простоты — SmartSwitch.
Добавляем профиль устройства. Если говорить в терминах ООП, то профиль устройства – это такой «класс», а конкретное устройство – «экземпляр класса».
Нам нужно определить функциональные характеристики устройства в терминах SmartThings Capability («способностей»). О том, какие вообще «способности» устройства существуют, можно прочитать в инструкции.
Заполняем поля своими значениями. Для примера, имя профиля можно вписать Test Switch Profile, описание – любой текст, тип устройства – Switch, Vendor ID – любой текст. «Тип устройства» влияет на иконку вашего устройства и на пользовательский интерфейс. В списке не так много возможных типов устройств (хотя есть и экзотические, например WineCellar – винный шкаф), поэтому, если не найдете именно вашего – не расстраивайтесь и просто выберите наиболее близкое и похожее. На последнем экране (Dashboard Control) можно ничего не менять.
После создания профиля, не забудьте нажать на кнопку «Add device profile to project» вверху справа.
- Важно: способность «Health Check» требуется для всех подключенных напрямую устройств. Добавьте её в профиль устройства.
- Для примера «Умный выключатель» понадобятся следующие способности: Switch, Health Check.
Теперь добавляем профиль аутентификации (Onboarding profile). Если вкратце, то в этом профиле вы можете кастомизировать экраны, появляющиеся при первом подключении и логине. Введите любое название и любое трехзначное число. Другие два экрана можно пока пропустить. На последнем экране выберите вариант подтверждения – Button Confirm – по нажатию кнопки на устройстве. В данном руководстве мы предполагаем, что вам досталась плата со встроенной кнопкой. Если вдруг кнопки нет (например, вы используете другой ESP-модуль), то можете выбрать вариант без аутентификации вовсе – он называется Just Works, то есть «просто работает» без лишних вопросов.
И опять же, по аналогии с предыдущим примером, не забудьте нажать кнопку «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_{ serialNumber}.
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.
cd ~/Workspace/st-iot-device-sdk-c-ref/iot-core/tools/keygen
./stdk-keygen -m fJ*c
Go Device Identity of Developer Workspace.
Serial Number:
-----------T----------¬
¦ STDKfJ*c ¦ abed**5c ¦
L----------+-----------
Public Key:
waGgyjWIvHhF1LU***FG2hx/4u***ADFHr/ry0j5jbk=
Скопируйте «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 в окне обзора вашего устройства в кабинете разработчика.
- Скопируйте скачанный файл onboarding_profile.json в директорию вашего приложения – в нашем случае apps/esp8266/st_switch/main.
cd ~/Workspace/st-device-sdk-c-ref/apps/esp8266/st_switch/main/ cp ~/Downloads/onboarding_profile.json .
Там уже есть пример такого файла – просто замените его своим.
- Аналогично, скопируйте файл device_info.json из папки tools/keygen/linux/output_{serialNumber}, в котором находится специфичная для устройства информация, в ту же папку, заменив существующий файл.
cd ~/Workspace/st-device-sdk-c-ref/iot-core/tools/keygen/linux/ cp output_{serialNumber}/device_info.json ~/Workspace/st-device-sdk-c-ref/apps/esp8266/st_switch/main/
В этом файле помимо ключей и серийного номера есть строка „firmwareVersion“ – её можно заменить на версию вашей программы.
- Теперь соберите и прошейте программу.
cd ~/Workspace/st-device-sdk-c-ref ./build.sh esp8266 st_switch ./build.sh esp8266 st_switch flash ./build.sh esp8266 st_switch monitor
Или то же самое, но покороче:
cd ~/Workspace/st-device-sdk-c-ref ./build.sh esp8266 st_switch flash monitor
! Если у вас никак не получается прошить программу – скорее всего, вы забыли перевести плату ESP8266 в режим программирования. Это делается, как правило, нажатием кнопки на самой плате. Например, Wi-Fi Troyka модуль можно перевести, зажав кнопку PROG, и затем нажав и отпустив кнопку RESET.
После того, как закачается прошивка, не забудьте перезагрузить плату.
Шаг 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
comp3v
правильно ли я понимаю, что без интернет-соединения это всё работать не будет?