Bluetooth mesh — базовые составляющие сети
В продолжение темы о сети bluetooth mesh, об анонсе и ключевых составляющих которой было написано в этой заметке, для понимания её топологии мы рассмотрим основной набор технических терминов и понятий, ранее отсутствовавших в мире Bluetooth LE.
Кому это интересно, добро пожаловать… Большинство устройств BLE обмениваются данными друг с другом, используя простую топологию сети типа «точка-точка» (p2p), позволяющую осуществлять связь один к одному, которая в спецификации ядра Bluetooth называется «piconet».
Представим себе смартфон, который установил соединение типа «точка-точка» с пульсометром и получает от последнего данные о частоте пульса. Так как спецификация Bluetooth позволяет устройствам устанавливать одновременно несколько соединений, то тот же смартфон, уже имея соединение типа p2p с пульсометром, может установить другое соединение такого же типа с другим устройством, например с трекером активности. В этом случае смартфон может напрямую связываться с каждым из этих других устройств, но сами устройства не могут напрямую связываться друг с другом.
В отличие от p2p, mesh-сеть позволяет каждому устройству взаимодействовать с любым другим устройством в сети. Связь осуществляется путем передачи сообщений, а устройства эти сообщения могут как передавать, так и ретранслировать другим устройствам, таким образом, увеличивая дальность связи далеко за пределы диапазона радиосвязи каждого отдельного узла.
Устройства и узлыДопустим, Вы приобрели люстру с поддержкой Bluetooth mesh. Для того чтобы ей управлять при помощи выключателей, так же использующих Bluetooth mesh, люстру сначала необходимо сделать частью вашей mesh-сети, то есть «подготовить». В данном контексте появились новые термины:
- «Узел» (Node) — устройство, являющееся частью mesh-сети.
- «Неподготовленное устройство» (Unprovisioned device) — устройство, не являющееся частью сети.
- «Инициализация» (Provisioning) — процесс ввода неподготовленного устройства в сеть, после чего, устройство станет узлом. Это определенные действия в контексте безопасности сети, которые приводят к тому, что устройство, обмениваясь определенным набором ключей шифрования с устройством, обладающим функцией регистрации в сети, становится участником сети. Устройством, обладающим функцией регистрации в сети обычно является планшет или смартфон. Один из ключей шифрования называется «сетевой ключ» или кратко «NetKey».
Некоторые узлы могут состоять из несколько частей, каждой из которых можно управлять независимо. В терминологии mesh-сети Bluetooth эти части называются элементами (Elements). На рисунке слева изображена светодиодная люстра, которая при добавлении в сеть, представляет собой единый узел с тремя элементами и каждый из элементов является индивидуальным источником света.
СообщенияЕсли узлу необходимо запросить статус других узлов или, каким-то образом, управлять другими узлами, он отправляет сообщение определенного типа. Если узел должен сообщить свой статус другим узлам, он тоже отправляет сообщение. Таким образом, mesh-сеть основана на сообщениях, и уже определено множество типов сообщений, каждый из которых имеет свой собственный уникальный код операции.
Сообщения делятся на 2 категории:
- подтверждаемые: сообщения, подразумевающие получение ответа от узлов, получаемых сообщения. Отвечая, узел подтверждает то, что сообщение было получено и возвращает отправителю какие-то данные. Отправитель подтверждаемого сообщения может повторно отправить сообщение в случае, если он не получит ожидаемый ответ. То есть значение подтверждаемого сообщения, поступающего на узел несколько раз, будет таким же, как и то, которое было бы получено при отправке только один раз (идемпотентно).
- неподтверждаемые: сообщения, не требующие ответа.
Сообщения должны отправляться с адреса и на адрес. В сети Bluetooth определено три типа адресов:
-
unicast (индивидуальный адрес): однозначно идентифицирует отдельный элемент сети. Такой тип присваивается устройству в процессе инициализации.
Публикация (Publish) – это действие по отправке сообщения. Подписка (Subscribe) – это выбор определенных сообщений для обработки, отправленных на определенные адреса.
Как правило, сообщения адресованы группе адресов или виртуальному адресу.
На рисунке выше, мы видим, что узел «Выключатель 1» публикуется для группового адреса «Кухня». Каждый из узлов «Лампа 1», «Лампа 2» и «Лампа 3» подписан на адрес «Кухня» и, следовательно, получают и обрабатывают сообщения, опубликованные для этого адреса. Другими словами, «Лампу 1», «Лампу 2» и «Лампу 3» можно включить или выключить с помощью «Выключателя 1».
«Выключатель 2» публикуется для группового адреса «Столовая». И на этот адрес подписана только «Лампа 3». Она является единственной, контролируемой «Выключателем 2». Этот пример иллюстрирует факт того, что узлы могут подписываться на сообщения, адресованные более чем одному отдельному адресу. Здесь проявляется гибкость сети. Обратите внимание, как оба узла «Выключатель 5» и «Выключатель 6» публикуются для одного и того же адреса: «Сад».
Использование групповых и виртуальных адресов с моделью «издатель-подписчик» имеет дополнительное преимущество в том, что удаление, замена или добавление новых узлов в сеть не требует перенастройки других узлов. Представим, что надо сделать при добавлении нового источника света, допустим, в столовую: новое устройство будет добавлено в сеть с использованием процесса подготовки и настроит подписку на адрес «Столовая», при этом данные изменения не повлияют на другие узлы. «Выключатель 2» как и прежде, будет публиковать сообщения для «Столовой», но теперь на это будет реагировать как «Лампа 3», так и новая лампа.
Состояния и свойстваЭлементы сети могут находиться в разных состояниях и эти состояния представлены в сети концепцией «значение состояния».
Состояние — это значение определенного типа, содержащегося внутри элемента (в пределах модели сервера — см. ниже). В качестве примера рассмотрим лампочку, которая может быть включена или выключена. В bluetooth сети определено состояние "Generic OnOff". Лампочка, обладая этим состоянием со значением "On" будет гореть, а в состоянии со значением "Off" естественно гореть не будет.
Свойства аналогичны состояниям, поскольку они содержат определенные значения, относящиеся к элементу. Но они существенно отличаются от состояний другими признаками. Те, кто знаком с BLE знают о понятии «характеристика сервиса» (нечто, представляющее собой типы данных, в которых представлены какие-то значения определяющие метаданные сервиса). Так вот "свойство" предоставляет контекст для интерпретации характеристики.
Чтобы оценить важность использования контекста, рассмотрим, например, характеристику «Температура 8» — 8-битный тип состояния температуры, имеющий ряд связанных с ним свойств, включая текущую внутреннюю температуру окружающей среды и существующую наружную температуру окружающей среды. Эти два свойства позволяют датчику публиковать показания таким образом, чтобы клиент-получатель мог определить контекст, который имеет значение температуры.
Свойства разделены на две категории:
- категория производителя (устройства): свойства могут только читаться;
- категория администратора: свойства имеют доступ на чтение и на запись.
Любой конкретный тип сообщения представляет собой операцию с состоянием или совокупностью нескольких значений состояния. Все сообщения имеют три основных типа, отражающие типы операций, поддерживаемых сетью Bluetooth:
- GET сообщения запрашивают значение текущего состояния у одного или нескольких узлов. В ответ на него отправляется сообщение с типом STATUS и содержит соответствующее значение состояния.
- SET сообщения изменяют значение определенного состояния. Отправка подтверждаемого сообщения данного типа требует ответного сообщения с типом STATUS, тогда как неподтверждаемое сообщение типа SET ответа не требует.
- STATUS сообщения отправляются в ответ на сообщения типа GET, на подтверждаемые сообщения типа SET или независимо от других сообщений, например, управляемые таймером, выполняемым внутри элемента, который отправляет сообщение.
Модель – это объединение концепций, определяющая функциональные возможности элемента, находящегося в сети. Определены 3 категории моделей.
-
Модель сервера: определяет совокупность состояний, переходов состояний, привязок состояний и сообщений, которые элемент, содержащий данную модель, может отправлять или получать. Эта модель также определяет поведение, связанное с сообщениями, состояниями и переходами состояний.
Многие различные типы устройств, часто имеют похожие состояния, примером которого является простая идея «On»-«Off», то есть устройства, которые могут быть включены или выключены. По этому, спецификация сети bluetooth определяет набор обобщенных состояний, таких например, как "Generic OnOff" и "Generic Level". Аналогично определен ряд обобщенных сообщений, которые работают с такими состояниями, например: "Generic OnOff Get" и "Generic Level Set". Обобщения позволяют использовать широкий диапазон типов устройств без необходимости создавать новые модели.
СценыСцена представляет собой сохраненную коллекцию состояний, которые могут быть вызваны или сделаны текущими при получении специального типа сообщения или в определенное время. Сцены идентифицируются с помощью 16-ти битного номера сцены "Scene Number", являющимся уникальным в mesh-сети. Сцены позволяют устанавливать ряд узлов в заданный набор ранее сохраненных, дополняющих состояний в одном скоординированном действии.
Представьте себе: Вы хотите, что бы вечером температура в комнате была 23 градуса, шесть ламп в люстре светили с определенной яркостью, а лампа на столе была настроена на приятный теплый желтый оттенок. После того как вы вручную установили узлы в эти состояния, Вы можете сохранить эти состояния как сцену с помощью приложения конфигурации и позже вызвать эту сцену по запросу, отправив соответствующее, связанное со сценой сообщение или вызвать автоматически в запланированное время.
ИнициализацияИнициализация (provisioning), как было сказано ранее, это процесс, с помощью которого устройство соединяется с mesh-сетью и становится узлом. Процесс включает в себя несколько этапов, приводит к созданию различных ключей безопасности и сам по себе является безопасным процессом. Инициализация осуществляется при помощи приложения на устройстве, таком как, например, планшет. Устройство, используемое для управления процессом инициализации, называется "Provisioner". Процесс подготовки состоит из пяти шагов, описанных ниже.
-
"Я маяк" (Beaconing). Для поддержки различных функций сети bluetooth, были добавлены новые типы адвертизинга профиля GAP (GAP AD), в частности тип AD «Mesh Beacon». Неподготовленное устройство указывает свою доступность в эфире, используя в пакетах адвертизинга этот тип. Для того, что бы устройство начало передавать такие данные, пользователю может понадобится принудительно перевести устройство в этот режим, например, нажав комбинацию кнопок или удерживая кнопку в течение определенного периода времени.
- сетевого ключа «NetKey»;
- параметром безопасности сети, именуемым «индекс IV» (IV Index);
- адресом unicast, выделенный устройствоv управления.
Все узлы сети могут передавать и принимать сообщения данной сети, но есть ряд дополнительных функций, которыми может обладать узел. Узел может не поддерживать, поддерживать некоторые или все из указанных дополнительных функций, и любая поддерживаемая функция может в какой-то момент времени быть включена или отключена. Перечислим эти функции:
-
Relay: Релейные узлы. Узлы, которые поддерживают функцию ретрансляции и называемые узлами ретрансляции, могут повторно передавать принятые сообщения. Ретрансляция — механизм, посредством которого сообщение может перемещаться по всей сети, делая несколько «прыжков» (hops) между устройствами путем ретрансляции. PDU сети включает поле под названием TTL (Time To Live). Оно принимает целочисленное значение и используется для ограничения количества прыжков. Например, если TTL равно 3, то будет передано сообщение, используя 3 «прыжка» от исходного узла. Установка TTL в 0 приведет к тому, что значение не будет ретранслироваться, а будет перемещаться на участке одного прыжка. Таким образом, узлы могут использовать поле TTL для более эффективного использования mesh-сети.
Системную архитектуру, безопасность сети и описание её работы в действии, мы рассмотрим в заключительной части.