Умный дом Sber теперь полностью автономный. Из чего он состоит?
SberDevices сегодня перезапустили собственную платформу умного дома, отказавшись от сторонних инфраструктурных решений и сделав ее полностью автономной. Также с сегодняшнего дня в продажу поступило первое устройство умного дома Sber нового поколения – самая популярная лампа А60.
Мы анонсировали разработку новой инфраструктуры для своей платформы умного дома полгода назад. Основной задачей было обеспечить бо́льшую надежность работы: элементы сторонних поставщиков ограничивали гибкость в развитии и создавала ненужные риски. Эта задача решена: сейчас все составляющие платформы контролируются нашей командой и работают на российских серверах.
В этой статье мы хотим рассказать, как устроена наша платформа и как с её помощью мы выпускаем свои устройства и интегрируем устройства партнёров.
Передаю слово моему коллеге, Борису Папиняну, PO платформы умного дома SberDevices.
Что умеет и из чего состоит платформа умного дома
Если коротко — платформа умного дома умеет отправлять на умные устройства Sber и девайсы партнёров команды и получать от них ответ. На первый взгляд, довольно просто.
Но давайте всмотримся пристальнее:
С пользователями мы взаимодействуем с помощью самих конечных устройств, управляющих устройств и нескольких мобильных приложений. Это наш фронтенд.
В бекенде платформы — более 60 микросервисов, составляющих ядро платформы: сервис интеграции, сервис обновления прошивки, сервис подключения устройств, сценарный движок, сервис голосовых команд, сервис аналитики и многие другие.
Бекенд может взаимодействовать с облаками партнёров и программируемыми контроллерами: транслировать команды, которые пользователи отдали через приложения и устройства Sber, в партнёрское облако или на контроллер, и получать оттуда статус. С помощью такого взаимодействия пользователи получают возможность управлять через умный дом Sber не только устройствами нашего производства, но и сторонними девайсами.
Ниже — подробности о ключевых частях платформы.
Умные устройства Sber
Платформа умного дома не обязательно должна включать устройства своего производства: вы вполне можете обойтись интеграцией с партнёрами и управлять только сторонними лампами, розетками и другими девайсами.
Мы же, в дополнение к партнёрским девайсам, сами производим устройства — и стараемся сделать их одними из лучших на рынке. Для этого в нашей команде есть инженеры, которые проверяют аппаратные компоненты, выбирают и инспектируют фабрики, создают процедуры и стенды для приёмочных испытаний.
Вот как (очень укрупнённо) выглядит процесс производства девайсов:
- Продуктовая команда делает бизнес-анализ и определяет, какое устройство, с какими характеристиками и по какой цене нужно произвести.
- Инженеры помогают выбрать несколько фабрик, которые могут изготовить устройство в соответствии с нашими требованиями. Фабрики инспектируют, у них заказываются тестовые партии устройств.
- Устройства из тестовой партии тщательно тестируются. Например, на картинке ниже — сферический фотометр. Внутренняя часть этого шара оснащена датчиками, с помощью которых проверялись световой поток и равномерность освещения прототипов ламп. Также у тестовых устройств проверяются электрические характеристики, температуры работы и многие другие параметры.
- Как правило, даже самые лучшие образцы не устраивают нас полностью, поэтому наши инженеры дорабатывают схемотехнику и конструкцию устройства.
- Фабрика, сделавшая лучшие устройства и готовая внести необходимые нам доработки, получает заказ на производство. Пока она готовит производственные линии, мы тоже не сидим без дела — нужно подготовить протоколы для приёмки девайсов.
Прошивка устройств
Чтобы производимые на фабриках девайсы стали умными, недостаточно железа. Нужна прошивка — её тоже пишут наши инженеры.
На прошивке нужно остановиться чуть подробнее, потому что этот компонент нашей платформы по-своему уникален. На рынке России крайне мало поставщиков облачных умных домов, самостоятельно разрабатывающих своё системное ПО, а не использующих проприетарные версии. Это не только вопрос престижа: прошивка определяет, из какого облака устройство будет получать команды, поэтому без неё говорить о независимой инфраструктуре нельзя.
Проприетарная прошивка накладывает и многие другие ограничения: можно ли обновить устройство «по воздуху», можно ли усилить алгоритм шифрования и прочее. Самостоятельно разрабатывая прошивку мы получаем бо́льшую гибкость и можем выбирать решения, лучшие для наших пользователей.
Несколько примеров того, что нам уже удалось реализовать, используя это преимущество:
- Лампа и другие наши устройства используют только российскую облачную инфраструктуру.
- Мы используем стойкий криптографический протокол на уровне приложения после подключения к лампе по BLE — нативный механизм шифрования BLE обладает уязвимостью и уже не может считаться надёжным. Кроме того, мы внедрили криптографическую подпись в образ прошивки.
- Модуль безопасного OTA-обновления не только позволяет дистанционно обновлять ПО, но и защищает лампу в момент инсталляции прошивки: даже если пользователь выключит питание лампы во время обновления (а такое, увы, не редкость), она не выйдет из строя.
- У нас появился таймер времени выключения: теперь лампа знает, когда она выключалась в последний раз. Это помогло победить проблему «спонтанного пейринга», когда лампа переходила в режим подключения по пяти включениям и выключениям подряд, не различая при этом, что эти переключения случались с разницей в несколько часов. Что важно — проблему решили установкой простейшей RC-цепочки и изменениями прошивки, без впаивания аппаратного таймера и заметного удорожания устройства.
Ещё одна ключевая особенность прошивки — возможность переиспользования. Она состоит из трёх слоёв: слой с приложением для управления устройством, слой IoT-платформы и физический слой с реализацией радиомодулей и хранилищами. Последние два уровня — универсальные. Они не меняются от устройства к устройству, кастомизируется только слой приложения. Это будет экономить нам время при выпуске следующих девайсов.
А вот так выглядит разработка прошивки. Сверху — лампочка, но на открытой плате, на которой собраны все модули и чип, его можно извлекать и перепрошивать. Если присмотреться, то можно увидеть и светодиоды лампы. Снизу — уже почти готовая лампа с портом для перепрошивки.
Сервис интеграции
Это ещё одна очень важная часть платформы. Мы производим не все категории устройств, которые нужны нашим пользователям, и готовы делиться технологиями, которые полезны нашим партнёрам. Для взаимодействия с партнёрскими облаками разработана подсистема интеграции — она позволяет подключать к платформе умного дома Sber девайсы других производителей и управлять ими так же, как и нашими собственными устройствами: голосом или через интерфейс в приложении и устройствах Sber.
А ещё мы не решаем за пользователя, как ему организовывать свой дом, поэтому эта подсистема умеет работать с разными технологическими стеками: Wi-Fi, Zigbee, Bluetooth, MQTT.
Взаимодействие строится на базе открытого API — любой вендор может реализовать интеграцию и дать своим пользователям возможность использовать все технологии нашей платформы: множество поверхностей, голосовое управление, сценарный движок. С нами уже интегрированы больше десятка производителей, включая Aqara, Digma, HIPER и Yeelight.
Для компаний-интеграторов и DIY-энтузиастов, автоматизирующих дома с помощью программируемых контроллеров Wiren Board и LogicMachine, мы максимально упростили подключение к облаку Sber: разработанное нами приложение можно установить на контроллер — и оно обеспечит трансляцию команд от умного дома Sber на контроллер и в обратном направлении. После этого даже проводными устройствами можно будет управлять голосом и через интерфейс устройств и приложений от Sber.
Поверхности для управления
Пользователь должен иметь возможность управлять умным домом на любой удобной ему поверхности: через мобильное приложение, телевизор, умную колонку. Для этого мы встроили свои разделы в приложения для Android и iOS, а также в GUI устройств Sber: SberBox, SberPortal, SberBox Time, телевизоров с Салют ТВ и других.
Кажется, что читателям Хабра нет необходимости расписывать нюансы мобильной разработки. Но точно стоит отметить, что эта часть нашей платформы не только обеспечивает интерфейс с пользователями и взаимодействуют с API, но и отвечает за системообразующие задачи — например, за подключение девайсов.
На картинке — схема экранов подключения лампы. Не всматривайтесь в каждый экран — просто посмотрите на их количество. И это только одна из множества функций.
Голосовое управление
Сейчас уже недостаточно иметь управление устройствами только через интерфейс — пользователи ждут от поставщика умного дома и голосового управления. Для его реализации мы используем два сервиса.
Первым команду пользователя слышит голосовой ассистент семейства Салют: Афина, Джой или Сбер. Ассистенты используют технологию синтеза и распознавания речи SaluteSpeech (кстати, вы тоже можете использовать её). На этом этапе классификатор определяет, к какому сервису Sber относится команда: к умному дому, или, например, к приложению кинотеатра на приставке.
Затем команды умного дома передаются в платформу умного дома и в дело вступает сервис голосовых команд. Он полностью написан нами: пришлось отказаться от сторонних решений, чтобы лучше учесть специфику голосовых запросов умного дома.
Главная задача сервиса — определение намерения (интента) пользователя. Умный дом Sber поддерживает несколько десятков категорий устройств, и для каждой категории существуют свои интенты. Например, лампочку можно захотеть включить, выключить, сделать ярче или теплее, поменять насыщенность и т. д. Всего сейчас мы поддерживаем больше сотни интентов.
Кроме разнообразия самих интентов, при определении намерения приходится решать и другие сложности: например, у пользователя может быть несколько устройств с одинаковыми названиями, название устройства может дублировать название комнаты или дома, команда может подходить к нескольким устройствам и пр. Сервис проходит по дереву интентов, и, учитывая все составляющие фразы, отбрасывает неподходящие ветви и выбирает тот интент, который подходит больше всего.
Есть и ещё одна особенность: каждый интент можно выразить разными словами. Мы не стремимся учить пользователя фразам управления умным домом, а сами стараемся подстроиться под пользователей. Чтобы быть готовым к самым неожиданным формулировкам, мы постоянно пополняем корзину запросов — как с помощью групп дикторов, так и с помощью регулярного анализа массива нераспознавшихся фраз. Так, например, мы поняли, что пользователи иногда произносят мультикоманды: отдают две команды в одной («Салют, выключи свет и открой шторы») — и научили наш сервис их поддерживать. Насколько знаем, так не умеет больше ни один сервис голосового управления умным домом.
Сценарный движок
Разные поверхности и голосовое управление — это хорошо. Но умный по-настоящему дом должен не только выполнять ваши команды, но и работать самостоятельно. Поэтому в платформе реализован ещё один важный компонент — сценарный движок. Он запускает устройства по расписанию, голосовой команде или в зависимости от зафиксированных датчиками событий.
Движок умеет управлять не только нашими устройствами, но и устройствами партнёров. Например, можно собрать датчик движения Aqara, лампы Yeelight и розетки Sber в один сценарий, который будет выключать свет и электроприборы, если дома долго нет движения.
Мы активно занимаемся развитием движка и уже скоро запустим кое-что новое — следите за новостями.
Как это всё работает вместе
Как мы говорили выше, бекенд платформы умного дома включает более 60 микросервисов. Микросервисная архитектура не в последнюю очередь выбрана, чтобы эффективнее утилизировать ресурсы и минимизировать паразитный трафик — мы придерживаемся подхода Green code и максимально оптимизируем платформу.
Бекенд умного дома работает с небольшими умными девайсами, и их очень много. С каждым нужно поддерживать соединение и обмениваться сообщениями — это сотни тысяч запросов. Для их обслуживания можно было пойти стандартным путём и использовать тяжелые enterprise-решения, но это привело бы к избыточному расходованию ресурсов. Вместо этого мы пишем лёгкие микросервисы на Go.
Все микросервисы — stateless и горизонтально масштабируются. Чтобы повысить устойчивость платформы, для каждого микросервиса запускается минимум два инстанса и балансировщик. Инстансов высоконагруженных микросервисов может быть больше.
Бекенд платформы хостится в облачной инфраструктуре на территории России — мы используем облако Cloud. Это тоже обеспечивает устойчивость.
Сервисы регулярно проходят аудит безопасности — как внутренний, так и внешний. Внешний выполняет компания BI.ZONE, мы проходим его в режиме White-box: у аудиторов есть доступ ко всей кодовой базе и они могут выполнять любые проверки, включая аутентифицированное сканирование.
Заключение
Платформа умного дома — это масштабно и интересно. Особенно, если вы проектируете и делаете её полностью сами. Скучать не приходится никому и у каждого из команды найдётся масса историй о вызовах, с которыми приходилось и приходится справляться.
Если вам интересно почитать про какой-то из аспектов нашей платформы подробнее — напишите об этом в комментариях, пожалуйста. Мы постараемся сделать отдельную статью на эту тему.
Источник https://habr.com/ru/companies/sberdevices/articles/701964/