Технология Thread разработана специально для умных домов, с целью улучшения коммуникации между устройствами. С недавних пор устройства совместимые с HomeKit, могут «общаться» не только используя Wi-Fi и Bluetooth, но и Thread.

Большое преимущество этой технологии в том, что Thread создает меш-сеть (mesh-network). В ней лампочки, термостаты, розетки, датчики и другие устройства могут «разговаривать» друг с другом без ограничений централизованных мостов и хабов. Это потому, что Thread не нуждается ни в мостах, ни в хабах. Если какое-то устройство выходит из строя, пакеты данных просто перешлются на другое устройство в сети. По сути, чем больше в Thread-сети устройств, тем эластичней и надежней становится вся сеть.

Давайте познакомимся с Thread поближе.

Wi-Fi, Bluetooth и Thread

Прежде, чем говорить о Thread как таковом, давайте немного углубимся в историю. Изначально HomeKit поддерживает два нативных способа коммуникации между устройствами: Wi-Fi и Bluetooth Low Energy.

Обе эти технологии — это компромисс: хоть Wi-Fi обычно позволяет устройствам «общаться» на большем расстоянии и с меньшими задержками, за это приходится платить высоким энергопотреблением, что делает ее неподходящей для устройств с аккумуляторами, да и для устройств с постоянным питанием это не лучший выбор - работа таких устройств потребляет много электроэнергии. К тому же, с увеличением количества Wi-Fi-устройств в доме, для некоторых роутеров оно может оказаться неподъемным, а то и вовсе может закончиться диапазон выделяемых IP-адресов. А устройства, использующие Bluetooth Low Energy (BLE), наоборот, полностью отвязаны от нагрузки домашней сети и крайне эффективны с точки зрения питания. Однако, из-за ограничений протокола, Bluetooth-коммуникация становится медленнее с увеличением количества устройств и способна работать на меньшем расстоянии, так как потребляет меньше энергии.

Индустрия устройств для умного дома, разумеется, осознает все эти ограничения, потому появился спрос на усиленную разработку и поддержку Thread в качестве платформы следующего поколения для умных домов, включая и поддержку со стороны Apple, для устройств, использующих HomeKit.

Thread — это peer-to-peer меш-сеть, а это означает, что устройствам в этой сети не нужно подключаться к центральному хабу, чтобы «общаться» между собой. Кроме того, она устроена таким образом, чтобы быть самоподдерживаемой и самовосстанавливаемой, так что даже если какие-то устройства появляются или пропадают, сеть, по необходимости, автоматически себя перенастроит сама. И, наконец, она спроектирована специально для умных домов, что означает особое внимание было обращено к продолжительности работы от аккумулятора и энергопотреблению для устройств, которые не имеют постоянного питания.

Thread-сеть

Углубимся в Thread

Как говорилось выше, Thread — это меш-сеть. Это значит, что устройства в этой сети могут «общаться» без мостов или специальных хабов. Более того, они умеют передавать сообщения друг другу через другие устройства в сети, таким образом «дотягиваясь» даже до тех устройств, которые в нормальном случае недоступны, например, из-за расстояния, стен или других причин. Кроме того, сеть умеет самоорганизоваться в случае, если какие-то из устройств в сети отключаются.

Роли

Сеть Thread составляют компоненты двух ролей: роутеры (Routers) и энд-пойнты (Endpoints), причем эти роли не фиксированы - если устройство способно быть роутером, оно может выбрать любую из этих ролей, в зависимости от текущего состояния и требований сети. Каждое устройство в Thread-сети называется «узлом» (Node).

Идем дальше. Узлы-роутеры нужны, чтобы перенаправлять пакеты с информацией по сети. У роутеров могут быть свои энд-пойнты - в этом случае такие узлы считаются родителями (Parent nodes). Устройства, которые подключены к постоянному источнику питания, которые включены всегда, могут становиться роутерами-родителями в Thread-сети и передавать пакеты с данными.

Узлы-роутеры

Энд-пойнты (их также называют «конечными устройствами» (End Devices) или «детьми» (Children nodes)) — это те устройства, которые подключаются к узлам-роутерам и не участвуют в передаче пакетов другим устройствам, но сами умеют посылать и принимать пакеты. Устройства, которые «умеют» быть роутерами, могут быть и энд-пойнтами, в то время как устройства, которые созданы быть только энд-пойнтами (т.н. Minimal Thread Device) - например, устройства, работающие от аккумулятора - не могут быть роутерами.

Каждый узел-роутер подключен ко всем другим роутерам, каждый энд-пойнт подключается только к своему роутеру-родителю.

Энд-пойнт

В Thread-сети существует еще и т. н. узлы-лидеры (Leader node), задача которых «повышать» энд-пойнты до роли роутера и «понижать» их обратно. Это не встроенная или статичная роль - любой роутер может стать лидером. Лидеры выбираются в некотором роде случайным образом в зависимости от текущего состояния сети.

Особо важная сущность в Thread-сети называется пограничный роутер (Border router). Так называют такой узел-роутер, который подключен к домашней сети и «знает», как передавать пакеты c данными между Thread-сетью и вашей локальной сетью. Без пограничного роутера устройства в вашем умном доме не смогут создать Thread-сеть, потому что так они не смогут «общаться» с внешними устройствами, например, вашим Айфоном. Вместо создания Thread-сети, они станут использовать обычную Bluetooth-коммуникацию (да, вы все правильно поняли - все устройства, которые «умеют» работать по Thread, имеют два способа коммуникации - Thread и Bluetooth).

На момент написания этой статьи (сентябрь 2021), на рынке существуют два устройства, способных быть пограничными роутерами в HomeKit, используя ThreadHomePod mini и Apple TV 4K (2021).

Пограничный роутер

Подключение к сети

Когда устройство, которое «умеет» использовать Thread включается после первичной установки, оно быстро проверяет, есть ли доступная Thread-сеть вокруг. Если да, устройство подключится к сети с годным идентификатором и реквизитами, которые ему выдал пограничный роутер. Сразу после успешного присоединения, устройство становится энд-пойнтом одного из существующих роутеров. Если оно способно само стать ротуером (мы такие устройства называем Full Thread Device), лидер может дать ему указание «повысить» себя до роли роутера, в зависимости от количества доступных роутеров в сети. Если в сети в данный момент менее 16 роутеров, устройство примет роль роутера. Если в сети уже есть 16 роутеров, Thread автоматически оптимизирует роли всех устройств для оптимального покрытия сети. В Thread-сети одновременно может существовать до 32 роутеров.

Если устройство неспособно принять роль роутера, оно остается в роли энд-пойнта. Оно сможет сменить родителя, в зависимости от качества соединения, которое проверяется автоматически во всей сети.

Энд-пойнты

Энд-пойнты различаются также по т. н. «интервалу сна» (Sleep Interval). Каждый энд-пойнт, в зависимости от физических характеристик, может быть «сонным энд-пойнтом» (Sleepy) или «обычным энд-пойнтом» (Regular). Идея проста: если устройство устроено так, что оно должно беречь питание, оно может «решить уснуть» на определенное время, а потом «спросить» у своего роутера - произошло ли что-то интересное, пока оно «спало» (примерно также, как нам приходилось нажимать кнопку «Проверить почту», в те стародавние времена, когда проверка не происходила автоматически). 

Например, датчик открытия/закрытия двери с интервалом сна в 5000 мс, «просыпается» каждые 5 секунд и «спрашивает» у роутера, есть ли новости. Само собой, он может «проснуться» и вне этого таймера, чтобы передать важные данные от себя - например, если открыть дверь, данные отошлются сразу, не дожидаясь конца 5-секундного интервала. Этот механизм отлично помогает беречь заряд аккумулятора.

Партиции

Что случится, если у вас дом настолько большой, что некоторые устройства не смогут поддерживать стабильное подключение друг к другу? Если у вас более одного устройства, которое может принять роль пограничного роутера (например, больше одного HomePod mini), они могут создать две независимые Thread-сети, которые вместе смогут покрыть весь ваш дом. Такие независимые сети называются «партициями» (Partitions). Если качество соединения улучшится, эти партиции снова объединятся в одну, а «лишние» пограничные роутеры примут роль обычных узлов-роутеров.

Масштабирование сети

Что насчет максимального количества устройств, которые можно подключить к Thread-сети? В сети всегда будет только один лидер и до 32 узлов-роутеров. К каждому роутеру может быть подключено до 511 энд-пойнтов. 

Так что, как видите, вместимость сети довольно-таки огромна и должна покрыть большинство сценариев.