В данной статье хотелось бы осветить немного внутренностей протокола Z-Wave. Учитывая, что владелец протокола компания Sigma Designs (поглотившая Zensys) просит подписывать NDA перед раскрытием особенностей реализации, а часть вообще никому не показывает, подробных данных а сети не найти. Я не собираюсь рассказывать здесь слишком много, чтобы не нарушить подписанный NDA. Надеюсь, и данная информация окажется полезной и сподвигнет кого-нибудь занятся разработкой собственных железок на этом протоколе. Итак, начнём!
Z-Wave — это распространённый радио протокол передачи данных, предназначенный для домашней автоматизации. Характерной особенностью Z-Wave является стандартизация от физического уровня, до уровня приложения. Т.е. протокол покрывает все уровни OSI классификации, что позволяет обеспечивать совместимость устройств разных производителей при создании гетерогенных сетей.
Протокол Z-Wave был разработан для квартир и небольших домов. Обычно такие системы содержать от 5 до 100 устройств. Основная особенность Z-Wave состоит в том, что он относится к формату «сделай сам» (DIY), т.е. установку и настройку системы владелец жилья может сделать самостоятельно. Протокол разрабатывался специально для управления такими устройствами как свет, жалюзи, ворота, термостаты и другими путём передачи коротких команд, требующих небольшого энергопотребления. Типичные небольшие задачи, решаемые при помощи Z-Wave — это установка проходных выключателей, перенос выключателей на более удобный уровень, дистанционное управление воротами и жалюзи, включение света по датчикам движения. Все эти задачи не требуют перекладывания проводов. Существуют и более сложные проекты автоматизации квартир, не уступающие по сложности промышленным системам автоматизации.
Пройдёмся по всем уровням модели OSI (кроме отсутствующего представительного) и опишем основные характеристики Z-Wave.
Передача данных осуществляется на частоте 869.0 МГц (Россия), 868.42 МГц (Европа, страны CEPT, Китай, Сингапур, ОАЭ, ЮАР), 908.42 МГц (США, Мексика), 921.42 МГц (Австралия, Бразилия, Новая Зеландия), 919.8 МГц (Гонконг), 865.2 МГц (Индия), 868.2 МГц (Малайзия), Япония (951-956 и 922-926 МГц). Модуляция FSK (частотная манипуляция). Скорость передачи: 42 кбит/с, 100 кбит/с и 9.6 кбит/с (для совместимостью со старыми устройствами). Скважность не более 1%. Предельная мощность передачи 1 мВт.
Используются пакеты с контролем целостности данных (контрольная сумма) и адресацией получателя и отправителя. В качестве получателя может использоваться multicast адрес или broadcast (в этом случае пакет принимается всеми участниками сети с включенным радио-модулем).
Протокол Z-Wave определяет алгоритм маршрутизации, позволяющий передавать данные между устройствами вне прямой видимости. Все постоянно работающие узлы сети (бывают ещё спящие и «часто слушающие» узлы) могу участвовать в пересылке пакетов между другими участниками сети. Z-Wave использует механизм Source Routing, т.е. маршрут следования определяется отправителем. Broadcast и multicast пакеты не маршрутизируются. При невозможности найти нужный узел по маршрутам, записанным в памяти, существует механизм поиска узла по всей сети путём посылки специального пакета Explorer Frame (см. ниже) всем узлам сети. После успешного нахождения узла новый маршрут записывается отправителем в память для последующего использования.
На данном уровне Z-Wave гарантирует подтверждение доставки и повторную отправку в случае, если пакет не был доставлен до получателя. Каждый узел, участвующий в пересылке, подтверждает факт получения сообщения. Для уменьшения загрузки эфира в Z-Wave используется механизм «молчаливых подтверждений»: узел (А), передавший пакет следующему узлу (Б) на пути следования пакета не ждёт подтверждения от него, а видит, что Б отправил пакет дальше узлу С и воспринимает это как факт подтверждения успешной пересылки пакета от А к Б. Получив пакет, конечный узел передаёт назад подтверждения доставки, которое путешествует назад тем же маршрутом до исходного отправителя. Таким образом отправитель всегда знает, дошёл ли пакет до точки назначения или нет.
Используется только при использовании шифрования, где определяются короткие сеансы с одноразовым ключом.
Z-Wave также определяет алгоритм интерпретации получаемых на прикладном уровне команд. Данный уровень описан набором Классов Команд (Command Classes). Для некоторых Классов существует несколько вариантов интерпретации команд, которые зависят от Класса Устройства (Device Class), определяющего тип устройства.
С 2012 года физический и канальный уровни протокола Z-Wave вошли в стандарт ITU-T G.9959 (рекомендации сектора стандартизации электросвязи Международного союза электросвязи).
Уровни от транспортного до канального реализованы в программном коде Sigma Designs и поставляются в прекомпилированном виде (в комплекте SDK). С одной стороны проприетарный код — это минус, но в закрытости данного протокола есть и свои плюсы: ни один производитель не может изменить нижние уровни протокола, что позволяет легче обеспечивать совместимость — все устройства основаны на одном хорошо отлаженном коде.
Все команды в Z-Wave предельно компактно упакованы. Это нужно для уменьшения размера пакета, что положительно влияет на занимаемое в эфире время, а также на уменьшение потерь при передаче. Z-Wave предназначен для передачи коротких команд без открытия сессии, т.е. совсем не подходит для потоковой передачи потоковых данных. Максимальный полезный размер передаваемых данных составляет 46 байт (размер данных прикладного уровня без шифрования).
Теоретически реализовать протокол Z-Wave можно было бы на любом железе, но и здесь производитель протокола Sigma Designs (ранее Zensys, вошедшая в структуру Sigma Designs) предлагают собственное решение.
Все устройства Z-Wave основаны на чипах одной серии от двух производителей (Sigma Designs и Mitsumi). Данные микросхемы доступны в двух вариантах: собственно чип и модуль, содержащий минимальный необходимый набор компонентов для роботы радио-модуля. Для многих устройств ещё может понадобиться дополнительно микросхема энергонезависимой памяти EEPROM, однако она не является обязательным компонентом. Чипы семейства Z-Wave — это ZW0201, более новый и 100% совместимый с предыдущим ZW0301, SD3402. На их базе сделаны модули ZM2102, ZM3102, ZM4101 и ZM4102. Все упомянутые чипы основаны на ядре Inventra, совместимом с Intel 8051.
Чипы ZW0201 и ZW0301 имеют 2 Кб ОЗУ, 32 Кб ПЗУ, встроенные аппаратные SPI, UART, TRIAC, WUT, GPT, WatchDog, четыре 12-битных АЦП, ШИМ (PWM), 2 входа прерываний, а также Digital I/O ноги.
Четвёртое поколение чипов SD3402 имеет 16 Кб ОЗУ, 64 Кб ПЗУ, 64 байта NVRAM, встроенные аппаратные SPI, UART, TRIAC, WUT, GPT, WatchDog, USB, IR-контроллер с обучающей функцией, аппаратный шифровальный модуль AES 128 бит, сканер 128 кнопок.
Sigma Designs анонсировала выход следующего 5 поколения чипов на первый квартал 2013 года.
Стоит отметить, что каждое следующее поколение чипов отличается не только увеличенным набором встроенных аппаратных средств, но и меньшим энергопотреблением. Например, самый популярный модуль ZM3102 потребляет 36 мА в режиме отправки данных, 23 мА в режиме приёма и всего 2.5 мкА в режиме сна.
Более подробную информацию о чипах и модулях можно получить на сайте Sigma Designs.
Большинство устройств Z-Wave не содержат больше никаких микроконтроллеров, кроме модуля Z-Wave от Sigma Desgins и EEPROM (опционально). Это существенно упрощает разработку новых устройств и уменьшает их себестоимость.
Выше мы уже упоминали о наличии маршрутизации в протоколе. Здесь стоит отвлечься и рассказать о разных типах узлов в Z-Wave.
Устройство, хранящее информацию о соседях всех узлов сети (топологию сети) и способное на базе этой информации найти маршрут к любому узлу сети. Кроме того данное устройство может перемещаться в сети и способно достучаться до всех узлов сети из любой точки сети (конечно при условии, что сеть односвязна). К устройствам данного типа нельзя обратится, т.к. они не фигурируют в таблице маршрутизации (будучи портативными) — им можно только отвечать на их запрос. Возможное применение: пульт дистанционного управления. Такому прибору требуется энергонезависимая память EEPROM.
Аналогичен портативному, но он не должен перемещаться в пространстве и призван быть всегда доступным другим участникам сети. Типичное применение: контроллер ПК, исполнитель. Такому прибору требуется энергонезависимая память EEPROM.
Устройство, способное только ответить на пришедший к нему запрос, т.к. не знает топологии сети и не хранит никаких маршрутов. Такие устройства могут быть только датчиками, питающимися от сети и опрашиваемыми другими узлами, или исполнителями. Они не умеют инициировать отправку данных самостоятельно (отправлять непрошенные пакеты — unsolicited packets). Таких устройств уже не производят, но на рынке они ещё остались.
Устройство, способное хранить до 4 маршрутов для 5 узлов (так называемые «обратные маршруты»). Эти устройства могут инициировать отправку данных (отправлять непрошенные пакеты — unsolicited packets), а также могут быть спящими или «часто слушающими». Типичное применение: датчики, исполнители, неподвижные пульты управления (датчик движения, кнопка включения на батарейках).
Как и дочернее маршрутизирующее устройство, но хранящее маршруты ко всем узлам сети, а не только к 5. Такому прибору требуется энергонезависимая память EEPROM.
Как мы видим, большинство узлов знает маршруты до некоторых узлов через своих соседей. Полные списки соседей всех узлов хранятся на контроллерах, которые полагаются на их достоверность при формировании маршрутов. Это означает, что все устройства (кроме портативных контроллеров) не следует перемещать в пространстве. Однако, с появлением функции Explorer Frame (см. ниже) это условие стало менее жёстким. После перемещения устройств сети нерабочие маршруты автоматически исправляются при первой необходимости.
Контроллеры (как статические, так и портативные) могут иметь разные роли в сети:
Первичный контроллер — координатор сети. Это единственный узел, способный включать в сеть новые узлы и исключать существующие. Он же хранит самую свежую информацию о топологии сети и может обновлять списки соседей для всех остальных (вторичных) контроллеров и формировать маршруты во всех дочерних узлах. Первичный контроллер может быть только один в сети. Обычно первичным является тот контроллер, с которого началось построение сети. Однако в дальнейшем первичный контроллер может включить в сеть новый контроллер, передав ему свою роль.
Вторичными контроллерами называются все остальные контроллеры в сети. Для нормально работы им следует периодически запрашивать информацию о топологии сети (соседях каждого узла) у первичного контроллера.
Сеть Z-Wave определяется уникальным параметром Home ID (генерируется при создании сети генератором случайных чисел с шумом от радиоприёмника в качестве источника случайных числе или назначается Sigma Designs для старых контроллеров). На одной территории может сосуществовать несколько сетей Z-Wave с разными Home ID. При этом они не будут друг друга видеть и друг с другом взаимодействовать. Благодаря обязательному требованию скважности (не более 1% времени находится в состоянии передачи), эти сети не будут друг другу мешать.
У каждого узла в сети есть свой уникальный Node ID, который присваивается первичным контроллером при включении устройства в сеть. Также при включении в сеть включаемое устройство запоминает Home ID первичного контроллера для дальнейшего общения. Сеть может содержать до 232 устройств.
Включение происходит переводом контроллера в специальный режим Включения (Inclusion mode; обычно какой-то специальной кнопкой или комбинацией клавиш), а включаемого устройства в режим Обучения (Learn mode; обычно одинарным или тройным нажатием на кнопку). При этом контроллер и включаемое устройство должны находиться в прямой видимости. Многие современные (версии протокола 4.5x или 6.x) постоянно питающиеся (не спящие) устройства первые 3-5 минут после включения в сеть электропитания самостоятельно переходят в специальный режим обучения (Network Wide Inclusion, NWI), если они ещё не включены в сеть. При этом условие нахождения в прямой видимости уже не требуется. Это позволяет достаточно легко включать в сеть новые устройства, не бегая по дому.
Исключение из сети происходит аналогично: контроллер переводится в режим Исключения (Exclusion mode), а дочерний узел в режим Обучения. После исключения Node ID и Home ID устройства сбросятся на 0 (для контроллеров NodeID сбросится на 1, а HomeID на заводское значение). Большинство устройств при исключении сбросит и все остальные пользовательские настройки на заводские значения.
Стоит отметить, что устройство уже прописанное в одной сети не включится в другую сеть. Но исключить из сети может любой первичный контроллер (даже устройство не из своей сети).
Контроллеры и дочерние устройства включаются в сеть и исключаются из неё одинаковым образом.
При включение в сеть первичный контроллер получает информацию о типе включённого узла и его NIF (см. далее).
Большой плюс протокола Z-Wave — это возможность для устройств работать на батарейках. Существует два типа устройств, работающих от батареек:
Спящие. Такие устройства не будут участвовать в маршрутизации сети как ретранслятор, но сами могут использовать другие узлы для передачи своих пакетов. Оповещение о пробуждении, периоды просыпания и уход в сон регулируются Классом Команд Wakeup, т.е. на уровне приложения. Проснувшись, эти устройства сообщают, о своём пробуждении, ждут команд от других устройств сети, после чего засыпают назад. Чем раньше устройство уснёт, тем меньше будет израсходовано заряда батареек. При правильном управлении такими устройствами, они могут прожить на одном комплекте батареек год и более. Портативные контроллеры тоже являются спящими устройствами.
Часто слушающие (FLiRS = Frequently Listening Routing Slave) — это устройства просыпающиеся раз в 0.25 или 1 секунду на короткое время (несколько миллисекунд) для того, чтобы проверить, нет ли в эфире специального пакета «проснись» (wake up beam). Такой пакет им посылают другие устройства перед тем, как начать общение с ними. Данный пакет длится 0.25 или 1 секунду соответственно, занимает эфир на всё это время, и позволяет часто спящему устройству, ненадолго проснувшись, увидеть, что для него есть пакет. Увидев пакет «проснись», оно полноценно просыпается, принимает предназначенные для него данные, обрабатывает их, возможно, посылает ответ, после чего засыпает назад. Такой механизм позволяет создавать устройства, доступ к которым должен всегда, но возможности провести сеть электропитания к месту их установки нет возможности. Типичный пример таких устройств: дверные замки, сирены.
Все данные уровня приложения передаются в виде коротких пакетов следующего вида:
Сначала идёт Класс Команды, потом команда в этом классе, далее данные специфичные для этой команды. Благодаря строгому стандарту, описывающему Классы Команд, устройства разных производителей могут понимать друг друга без каких-либо проблем.
Приведём пример популярных классов и опишем из назначение.
Basic — самый популярный класс, позволяющий устройствам разного типа быть совместимыми на минимальном уровне. Например, выключатель умеет посылать команды Включить/Выключить, которые диммер и реле будут интерпретировать как включение/выключение света, термостат как переход между режимами нормальный/энергосберегающий, а устройство управления жалюзи как ход/остановка движения ставней.
Список поддерживаемых устройством Классов Команд содержится в пакете NIF (Node Information Frame — пакет описания устройства). Благодаря ему можно определить Класс Устройства (Device Class, см. ниже) и список возможностей устройства. Этот пакет приходи первичному контроллеру при включении устройства в сеть, а также при нажатии один или три раза на кнопку (у большинства устройств, см. документацию к конкретному устройству).
Каждое устройство характеризуется своим функциональным типом (Классом Устройства, Device Class). Каждый класс определяет обязательные Классы Команд, поддерживаемые устройством, и способы интерпретации их команд. Например, команды класса команд Basic могут совершенно по-разному интерпретироваться для различных классов устройств: для двухпозиционного реле Basic Set 0 выключает, 1-99 или 255 включают, в то время как для термостата могут интерпретироваться как температура в единицах или 1/10 градусов Цельсия, т.е. от 0 до 255 или от 0 до 25.5 градусов, соответственно. Все остальные Классы Команд чётко прописаны вплоть интерпретации каждой команды.
Z-Wave — это ячеистая сеть (mesh network), где каждый узел знает окружающие его узлы и может направлять через них пакеты. Использование маршрутизации позволяет успешно преодолевать препятствия между узлами, не позволяющие им общаться напрямую. Однако перестановки мебели и другие изменения в обстановке, а также выход из строя одного узла могут привести к появлению нерабочих маршрутов. Для этого их нужно периодически обновлять. Первичный контроллер может это делать профилактически раз в неделю или по запросу пользователя.
Но в протоколе Z-Wave есть и другое средство для замены нерабочих маршрутов рабочими, появившееся в версии протокола 4.5. Если узел не смог достучаться до точки назначения, он посылает всем соседям специальный пакет Explore Frame. Те в свою очередь распространяют его дальше по сети, пока какой-нибудь узел не скажет, что искомый узел нашёлся у него в прямой видимости. Таким образом отправитель найдёт новый маршрут и запомнит его в своих таблицах. Данный метод менее экономный, чем централизованное обновление маршрутов всей сети: для обхода умершего узла требуется, чтобы каждый узел обновил каждый маршрут, идущий через нерабочий, путём посылки Explorer Frame. Кроме того, использование Explorer Frame занимает около 0.5-1 секунды, и на это время сеть забивается этими пакетами.
На пути следования может содержаться до 4 узлов передатчиков. Учитывая предельные расстояния между устройствами 10-30 метров в прямой видимости (зависит от антенн), можно сказать, что предельная дальность доставки пакета — 40-120 метров. Естественно при прохождении перекрытий и стен мощность сигнала существенно падает, что приводит и к уменьшению дальности передачи. На практике 4 этажный дом с общей площадью в 500 квадратных метров — это предел одной сети протокола Z-Wave с качественной передачей данных.
Вывод простой: обновляйте маршруты после изменения топологии сети и перестановок мебели или используйте только устройства, основанные на версиях протокола 4.5x и 6.x.
Естественно при создании хоть сколько-нибудь достойной автоматизации встаёт вопрос о связи с ПО, работающем на ПК. Существует несколько программных комплексов для этой цели:
Кроме того, есть облачный сервис:
Sigma Designs продаёт не только чипы, но и DevKit — набор плат для прототипирования новых устройств. Считающие себя крутыми могут сразу делать прототипы на голых модулях ZM3102. Кроме того, для создания устройств Z-Wave вам понадобится SDK (Software Development Kit) от той же Sigma Desgins, которая имплементирует протокол Z-Wave вплоть до транспортного уровня включительно. Это сильно упрощает работу разработчиков, которым лишь нужно освоить этот API (с документацией на 500 страницах) и написать весь «пользовательский» код, реализующий прикладной уровень и поведение самого устройства (кнопки, экранчик, светодиоды и т.д.). Стоимость DevKit с SDK составляет $3000.
В добавок к этом понадобится компилятор C51 от компании Keil (ныне принадлежит ARM). Ещё где-то $3000. И много-много терпения и навыков характерных для разработки emdedded устройств.
Естественно, будучи радио протоколом, Z-Wave достаточно легко прослушивается (ну, мы-то знаем, что на всю страну осталось совсем мало способных радиолюбителей :) Взломать можно любую систему — вопрос денег и времени. Став разработчиком железа, купив SDK и обретя много знаний можно сделать и не такое! Но учитывая, что это система домашней автоматизации света и климата, не думаю, что кому-то придёт в голову потратить пару сотен тысяч рублей на взлом вашей автоматизации. Лом стóит сильно дешевле!
Но и здесь есть ответ параноикам: в Z-Wave есть полноценное шифрование AES с длиной ключа 128 бит. Естественно, шифрование накладывает свои ограничения: оно работает медленнее, т.к. уже не достаточно просто отправить пакет — надо до этого обменяться одноразовыми ключами (nonce). Потому шифрование реализовано пока только в оконных системах, дверных замках и ПК контроллерах.
Говорить здесь о проводных технологиях — смысла нет. У них совсем разные характеристики и применение. В готовых объектах, созданных без закладки проводов во все важные места квартиры, можно использовать только радио технологии автоматизации.
Кто же ещё есть в беспроводном мире?
Сам протокол Z-Wave, а также патенты на используемые в протоколе решения, является собственностью компании Sigma Designs. Функции координации производителей, развития протокола и проведение рекламных и обучающих мероприятий возложены на Z-Wave Aliance — консорциум производителей оборудования Z-Wave. Контроль совместимости возложен на сертификационные конторы (в США BuLogics и в Германии PepperoOne), которые сертифицируют все выходящие на рынок устройства, гарантируя полную совместимость между устройствами разных производителей. Только пройдя такую сертификацию можно нарисовать на своём устройстве логотип Speaks Z-Wave и продавать его как устройство, работающее на протоколе Z-Wave.
Компания Sigma Designs и Z-Wave Aliance постоянно проводят семинары для технических специалистов разного уровня, помогая быстрее выйти на рынок с качественными устройствами.
До недавнего времени Z-Wave не развивался в России из-за отсутствия разрешённой частоты. Европейская частота 868.42 МГц не была разрешена ГКРЧ, хотя правительство РФ и присоединилось к некоторым рекомендациям CEPT, применяемым к устройствам малого радиуса действия. С февраля 2012 года Sigma Designs выделила отдельную частоту 869.0 МГц для России. Данная частота попадает под решение ГКРЧ № 07-20-03-001 от 07.05.2007 (приложение 11). Для Российской частоты используется тот же чип, что и для Европы.
Достаточно много информации о протоколе можно получить из таких open source проектов, как OpenZWave, AZW, Linux MCE, а также из этого wiki-сайта и следующих статей: первая, вторая, третья
Для тех, кто ещё не держал в руках оборудование Z-Wave, посмотреть и пощупать можно в первом салоне МГТС по адресу Новый Арбат, дом 2
В данной статье полностью опущены описания таких понятий протокола Z-Wave, как SUC/SIS, Zensor и многое другое устаревшее и не являющееся актуальным на взгляд автора.
Что такое Z-Wave?
Z-Wave — это распространённый радио протокол передачи данных, предназначенный для домашней автоматизации. Характерной особенностью Z-Wave является стандартизация от физического уровня, до уровня приложения. Т.е. протокол покрывает все уровни OSI классификации, что позволяет обеспечивать совместимость устройств разных производителей при создании гетерогенных сетей.
Что позволяет делать технология Z-Wave?
- Управление освещением (реле/диммеры), шторами, рольставнями и воротами
- Управление жалюзи и другими моторами (10-230 В)
- Включение/выключение любых нагрузок до 3.5 кВт (модуль в розетку или встраиваемое реле)
- Дистанционное управление с ПДУ
- Управление обогревом (электрические тёплые полы с защитой от перегрева, электро котлы и радиаторы, термостаты для водяных клапанов радиаторов)
- Управление кондиционерами (через ИК интерфейс имитируя пульт)
- Детектирование тревожных событий (датчики движения, открытия двери/окна, протечки, сухие контакты)
- Мониторинг состояния (датчики температуры, влажности, освещённости)
- Управление A/V аппаратурой (по протоколу Z-Wave или через ИК интерфейс имитируя пульт)
- Связь с любым программным обеспечением через ПК контроллер
- Сбор данных со счётчиков
Какие задачи лучше всего решает Z-Wave?
Протокол Z-Wave был разработан для квартир и небольших домов. Обычно такие системы содержать от 5 до 100 устройств. Основная особенность Z-Wave состоит в том, что он относится к формату «сделай сам» (DIY), т.е. установку и настройку системы владелец жилья может сделать самостоятельно. Протокол разрабатывался специально для управления такими устройствами как свет, жалюзи, ворота, термостаты и другими путём передачи коротких команд, требующих небольшого энергопотребления. Типичные небольшие задачи, решаемые при помощи Z-Wave — это установка проходных выключателей, перенос выключателей на более удобный уровень, дистанционное управление воротами и жалюзи, включение света по датчикам движения. Все эти задачи не требуют перекладывания проводов. Существуют и более сложные проекты автоматизации квартир, не уступающие по сложности промышленным системам автоматизации.
Протокол передачи данных
Пройдёмся по всем уровням модели OSI (кроме отсутствующего представительного) и опишем основные характеристики Z-Wave.
Физический уровень
Передача данных осуществляется на частоте 869.0 МГц (Россия), 868.42 МГц (Европа, страны CEPT, Китай, Сингапур, ОАЭ, ЮАР), 908.42 МГц (США, Мексика), 921.42 МГц (Австралия, Бразилия, Новая Зеландия), 919.8 МГц (Гонконг), 865.2 МГц (Индия), 868.2 МГц (Малайзия), Япония (951-956 и 922-926 МГц). Модуляция FSK (частотная манипуляция). Скорость передачи: 42 кбит/с, 100 кбит/с и 9.6 кбит/с (для совместимостью со старыми устройствами). Скважность не более 1%. Предельная мощность передачи 1 мВт.
Канальный уровень
Используются пакеты с контролем целостности данных (контрольная сумма) и адресацией получателя и отправителя. В качестве получателя может использоваться multicast адрес или broadcast (в этом случае пакет принимается всеми участниками сети с включенным радио-модулем).
Сетевой уровень
Протокол Z-Wave определяет алгоритм маршрутизации, позволяющий передавать данные между устройствами вне прямой видимости. Все постоянно работающие узлы сети (бывают ещё спящие и «часто слушающие» узлы) могу участвовать в пересылке пакетов между другими участниками сети. Z-Wave использует механизм Source Routing, т.е. маршрут следования определяется отправителем. Broadcast и multicast пакеты не маршрутизируются. При невозможности найти нужный узел по маршрутам, записанным в памяти, существует механизм поиска узла по всей сети путём посылки специального пакета Explorer Frame (см. ниже) всем узлам сети. После успешного нахождения узла новый маршрут записывается отправителем в память для последующего использования.
Транспортный уровень
На данном уровне Z-Wave гарантирует подтверждение доставки и повторную отправку в случае, если пакет не был доставлен до получателя. Каждый узел, участвующий в пересылке, подтверждает факт получения сообщения. Для уменьшения загрузки эфира в Z-Wave используется механизм «молчаливых подтверждений»: узел (А), передавший пакет следующему узлу (Б) на пути следования пакета не ждёт подтверждения от него, а видит, что Б отправил пакет дальше узлу С и воспринимает это как факт подтверждения успешной пересылки пакета от А к Б. Получив пакет, конечный узел передаёт назад подтверждения доставки, которое путешествует назад тем же маршрутом до исходного отправителя. Таким образом отправитель всегда знает, дошёл ли пакет до точки назначения или нет.
Сеансовый уровень
Используется только при использовании шифрования, где определяются короткие сеансы с одноразовым ключом.
Прикладной уровень
Z-Wave также определяет алгоритм интерпретации получаемых на прикладном уровне команд. Данный уровень описан набором Классов Команд (Command Classes). Для некоторых Классов существует несколько вариантов интерпретации команд, которые зависят от Класса Устройства (Device Class), определяющего тип устройства.
С 2012 года физический и канальный уровни протокола Z-Wave вошли в стандарт ITU-T G.9959 (рекомендации сектора стандартизации электросвязи Международного союза электросвязи).
Уровни от транспортного до канального реализованы в программном коде Sigma Designs и поставляются в прекомпилированном виде (в комплекте SDK). С одной стороны проприетарный код — это минус, но в закрытости данного протокола есть и свои плюсы: ни один производитель не может изменить нижние уровни протокола, что позволяет легче обеспечивать совместимость — все устройства основаны на одном хорошо отлаженном коде.
Все команды в Z-Wave предельно компактно упакованы. Это нужно для уменьшения размера пакета, что положительно влияет на занимаемое в эфире время, а также на уменьшение потерь при передаче. Z-Wave предназначен для передачи коротких команд без открытия сессии, т.е. совсем не подходит для потоковой передачи потоковых данных. Максимальный полезный размер передаваемых данных составляет 46 байт (размер данных прикладного уровня без шифрования).
Решение на одном чипе
Теоретически реализовать протокол Z-Wave можно было бы на любом железе, но и здесь производитель протокола Sigma Designs (ранее Zensys, вошедшая в структуру Sigma Designs) предлагают собственное решение.
Все устройства Z-Wave основаны на чипах одной серии от двух производителей (Sigma Designs и Mitsumi). Данные микросхемы доступны в двух вариантах: собственно чип и модуль, содержащий минимальный необходимый набор компонентов для роботы радио-модуля. Для многих устройств ещё может понадобиться дополнительно микросхема энергонезависимой памяти EEPROM, однако она не является обязательным компонентом. Чипы семейства Z-Wave — это ZW0201, более новый и 100% совместимый с предыдущим ZW0301, SD3402. На их базе сделаны модули ZM2102, ZM3102, ZM4101 и ZM4102. Все упомянутые чипы основаны на ядре Inventra, совместимом с Intel 8051.
Чипы ZW0201 и ZW0301 имеют 2 Кб ОЗУ, 32 Кб ПЗУ, встроенные аппаратные SPI, UART, TRIAC, WUT, GPT, WatchDog, четыре 12-битных АЦП, ШИМ (PWM), 2 входа прерываний, а также Digital I/O ноги.
Четвёртое поколение чипов SD3402 имеет 16 Кб ОЗУ, 64 Кб ПЗУ, 64 байта NVRAM, встроенные аппаратные SPI, UART, TRIAC, WUT, GPT, WatchDog, USB, IR-контроллер с обучающей функцией, аппаратный шифровальный модуль AES 128 бит, сканер 128 кнопок.
Sigma Designs анонсировала выход следующего 5 поколения чипов на первый квартал 2013 года.
Стоит отметить, что каждое следующее поколение чипов отличается не только увеличенным набором встроенных аппаратных средств, но и меньшим энергопотреблением. Например, самый популярный модуль ZM3102 потребляет 36 мА в режиме отправки данных, 23 мА в режиме приёма и всего 2.5 мкА в режиме сна.
Более подробную информацию о чипах и модулях можно получить на сайте Sigma Designs.
Большинство устройств Z-Wave не содержат больше никаких микроконтроллеров, кроме модуля Z-Wave от Sigma Desgins и EEPROM (опционально). Это существенно упрощает разработку новых устройств и уменьшает их себестоимость.
Типы узлов
Выше мы уже упоминали о наличии маршрутизации в протоколе. Здесь стоит отвлечься и рассказать о разных типах узлов в Z-Wave.
Портативный контроллер (Portable Controller)
Устройство, хранящее информацию о соседях всех узлов сети (топологию сети) и способное на базе этой информации найти маршрут к любому узлу сети. Кроме того данное устройство может перемещаться в сети и способно достучаться до всех узлов сети из любой точки сети (конечно при условии, что сеть односвязна). К устройствам данного типа нельзя обратится, т.к. они не фигурируют в таблице маршрутизации (будучи портативными) — им можно только отвечать на их запрос. Возможное применение: пульт дистанционного управления. Такому прибору требуется энергонезависимая память EEPROM.
Статический контроллер (Static Controller)
Аналогичен портативному, но он не должен перемещаться в пространстве и призван быть всегда доступным другим участникам сети. Типичное применение: контроллер ПК, исполнитель. Такому прибору требуется энергонезависимая память EEPROM.
Дочернее устройство (Slave)
Устройство, способное только ответить на пришедший к нему запрос, т.к. не знает топологии сети и не хранит никаких маршрутов. Такие устройства могут быть только датчиками, питающимися от сети и опрашиваемыми другими узлами, или исполнителями. Они не умеют инициировать отправку данных самостоятельно (отправлять непрошенные пакеты — unsolicited packets). Таких устройств уже не производят, но на рынке они ещё остались.
Дочернее маршрутизирующее устройство (Routing Slave)
Устройство, способное хранить до 4 маршрутов для 5 узлов (так называемые «обратные маршруты»). Эти устройства могут инициировать отправку данных (отправлять непрошенные пакеты — unsolicited packets), а также могут быть спящими или «часто слушающими». Типичное применение: датчики, исполнители, неподвижные пульты управления (датчик движения, кнопка включения на батарейках).
Продвинутое дочернее маршрутизирующее устройство (Routing Enhanced Slave)
Как и дочернее маршрутизирующее устройство, но хранящее маршруты ко всем узлам сети, а не только к 5. Такому прибору требуется энергонезависимая память EEPROM.
Как мы видим, большинство узлов знает маршруты до некоторых узлов через своих соседей. Полные списки соседей всех узлов хранятся на контроллерах, которые полагаются на их достоверность при формировании маршрутов. Это означает, что все устройства (кроме портативных контроллеров) не следует перемещать в пространстве. Однако, с появлением функции Explorer Frame (см. ниже) это условие стало менее жёстким. После перемещения устройств сети нерабочие маршруты автоматически исправляются при первой необходимости.
Контроллеры (как статические, так и портативные) могут иметь разные роли в сети:
Первичный контроллер — координатор сети. Это единственный узел, способный включать в сеть новые узлы и исключать существующие. Он же хранит самую свежую информацию о топологии сети и может обновлять списки соседей для всех остальных (вторичных) контроллеров и формировать маршруты во всех дочерних узлах. Первичный контроллер может быть только один в сети. Обычно первичным является тот контроллер, с которого началось построение сети. Однако в дальнейшем первичный контроллер может включить в сеть новый контроллер, передав ему свою роль.
Вторичными контроллерами называются все остальные контроллеры в сети. Для нормально работы им следует периодически запрашивать информацию о топологии сети (соседях каждого узла) у первичного контроллера.
Построение сети и сосуществование нескольких сетей
Сеть Z-Wave определяется уникальным параметром Home ID (генерируется при создании сети генератором случайных чисел с шумом от радиоприёмника в качестве источника случайных числе или назначается Sigma Designs для старых контроллеров). На одной территории может сосуществовать несколько сетей Z-Wave с разными Home ID. При этом они не будут друг друга видеть и друг с другом взаимодействовать. Благодаря обязательному требованию скважности (не более 1% времени находится в состоянии передачи), эти сети не будут друг другу мешать.
У каждого узла в сети есть свой уникальный Node ID, который присваивается первичным контроллером при включении устройства в сеть. Также при включении в сеть включаемое устройство запоминает Home ID первичного контроллера для дальнейшего общения. Сеть может содержать до 232 устройств.
Включение происходит переводом контроллера в специальный режим Включения (Inclusion mode; обычно какой-то специальной кнопкой или комбинацией клавиш), а включаемого устройства в режим Обучения (Learn mode; обычно одинарным или тройным нажатием на кнопку). При этом контроллер и включаемое устройство должны находиться в прямой видимости. Многие современные (версии протокола 4.5x или 6.x) постоянно питающиеся (не спящие) устройства первые 3-5 минут после включения в сеть электропитания самостоятельно переходят в специальный режим обучения (Network Wide Inclusion, NWI), если они ещё не включены в сеть. При этом условие нахождения в прямой видимости уже не требуется. Это позволяет достаточно легко включать в сеть новые устройства, не бегая по дому.
Исключение из сети происходит аналогично: контроллер переводится в режим Исключения (Exclusion mode), а дочерний узел в режим Обучения. После исключения Node ID и Home ID устройства сбросятся на 0 (для контроллеров NodeID сбросится на 1, а HomeID на заводское значение). Большинство устройств при исключении сбросит и все остальные пользовательские настройки на заводские значения.
Стоит отметить, что устройство уже прописанное в одной сети не включится в другую сеть. Но исключить из сети может любой первичный контроллер (даже устройство не из своей сети).
Контроллеры и дочерние устройства включаются в сеть и исключаются из неё одинаковым образом.
При включение в сеть первичный контроллер получает информацию о типе включённого узла и его NIF (см. далее).
Работа от батареек
Большой плюс протокола Z-Wave — это возможность для устройств работать на батарейках. Существует два типа устройств, работающих от батареек:
Спящие. Такие устройства не будут участвовать в маршрутизации сети как ретранслятор, но сами могут использовать другие узлы для передачи своих пакетов. Оповещение о пробуждении, периоды просыпания и уход в сон регулируются Классом Команд Wakeup, т.е. на уровне приложения. Проснувшись, эти устройства сообщают, о своём пробуждении, ждут команд от других устройств сети, после чего засыпают назад. Чем раньше устройство уснёт, тем меньше будет израсходовано заряда батареек. При правильном управлении такими устройствами, они могут прожить на одном комплекте батареек год и более. Портативные контроллеры тоже являются спящими устройствами.
Часто слушающие (FLiRS = Frequently Listening Routing Slave) — это устройства просыпающиеся раз в 0.25 или 1 секунду на короткое время (несколько миллисекунд) для того, чтобы проверить, нет ли в эфире специального пакета «проснись» (wake up beam). Такой пакет им посылают другие устройства перед тем, как начать общение с ними. Данный пакет длится 0.25 или 1 секунду соответственно, занимает эфир на всё это время, и позволяет часто спящему устройству, ненадолго проснувшись, увидеть, что для него есть пакет. Увидев пакет «проснись», оно полноценно просыпается, принимает предназначенные для него данные, обрабатывает их, возможно, посылает ответ, после чего засыпает назад. Такой механизм позволяет создавать устройства, доступ к которым должен всегда, но возможности провести сеть электропитания к месту их установки нет возможности. Типичный пример таких устройств: дверные замки, сирены.
Command Classes (Классы Команд)
Все данные уровня приложения передаются в виде коротких пакетов следующего вида:
Command Class ID |
Command ID |
специфические данные для команды |
Сначала идёт Класс Команды, потом команда в этом классе, далее данные специфичные для этой команды. Благодаря строгому стандарту, описывающему Классы Команд, устройства разных производителей могут понимать друг друга без каких-либо проблем.
Приведём пример популярных классов и опишем из назначение.
Basic — самый популярный класс, позволяющий устройствам разного типа быть совместимыми на минимальном уровне. Например, выключатель умеет посылать команды Включить/Выключить, которые диммер и реле будут интерпретировать как включение/выключение света, термостат как переход между режимами нормальный/энергосберегающий, а устройство управления жалюзи как ход/остановка движения ставней.
- Switch Binary / Switch Multilevel — используются для управления освещением (реле/диммер), а также для управления моторами (для ставней или ворот).
- Sensor Binary / Sensor Multilevel — для бинарного датчика (открытия двери, протечки, дыма, движения) и многопозиционного датчика (температуры, освещённости, влажности).
- Meter — используется для снятия показаний и сброса накопленных значений счётчиков.
- Association — позволяет устанавливать связи между устройствами. Например, на устройстве есть 3 кнопки. Для них есть 3 соответствующие кнопкам группы ассоциаций. При нажатии на кнопку посылаются команды Basic Set Включить соответствующей группе. Класс Association используется для ведения списка узлов в этой группе. Такой подход позволяет просто и эффективно настраивать прямые взаимосвязи между устройствами сети.
- Configuration — позволяет менять некоторые заложенные производителем параметры устройств. Например, скорость диммирования света или чувствительность датчика движения.
- Battery — позволяет запрашивать заряд батареек устройств.
- Wakeup — для управление параметрами просыпания спящих устройств.
- MultiChannel — используется для адресации к конкретной компоненте сложного устройства, состоящего из нескольких элементов. Обычные Классы Команд (Basic, Switch/Sensor Binary/Multilevel, Meter) инкапсулируются в команду данного класса с указанием номера элемента. Например, устройство может содержать два реле или три датчика (температуры, влажности и движения).
Список поддерживаемых устройством Классов Команд содержится в пакете NIF (Node Information Frame — пакет описания устройства). Благодаря ему можно определить Класс Устройства (Device Class, см. ниже) и список возможностей устройства. Этот пакет приходи первичному контроллеру при включении устройства в сеть, а также при нажатии один или три раза на кнопку (у большинства устройств, см. документацию к конкретному устройству).
Device Classes
Каждое устройство характеризуется своим функциональным типом (Классом Устройства, Device Class). Каждый класс определяет обязательные Классы Команд, поддерживаемые устройством, и способы интерпретации их команд. Например, команды класса команд Basic могут совершенно по-разному интерпретироваться для различных классов устройств: для двухпозиционного реле Basic Set 0 выключает, 1-99 или 255 включают, в то время как для термостата могут интерпретироваться как температура в единицах или 1/10 градусов Цельсия, т.е. от 0 до 255 или от 0 до 25.5 градусов, соответственно. Все остальные Классы Команд чётко прописаны вплоть интерпретации каждой команды.
Надёжность
Z-Wave — это ячеистая сеть (mesh network), где каждый узел знает окружающие его узлы и может направлять через них пакеты. Использование маршрутизации позволяет успешно преодолевать препятствия между узлами, не позволяющие им общаться напрямую. Однако перестановки мебели и другие изменения в обстановке, а также выход из строя одного узла могут привести к появлению нерабочих маршрутов. Для этого их нужно периодически обновлять. Первичный контроллер может это делать профилактически раз в неделю или по запросу пользователя.
Но в протоколе Z-Wave есть и другое средство для замены нерабочих маршрутов рабочими, появившееся в версии протокола 4.5. Если узел не смог достучаться до точки назначения, он посылает всем соседям специальный пакет Explore Frame. Те в свою очередь распространяют его дальше по сети, пока какой-нибудь узел не скажет, что искомый узел нашёлся у него в прямой видимости. Таким образом отправитель найдёт новый маршрут и запомнит его в своих таблицах. Данный метод менее экономный, чем централизованное обновление маршрутов всей сети: для обхода умершего узла требуется, чтобы каждый узел обновил каждый маршрут, идущий через нерабочий, путём посылки Explorer Frame. Кроме того, использование Explorer Frame занимает около 0.5-1 секунды, и на это время сеть забивается этими пакетами.
На пути следования может содержаться до 4 узлов передатчиков. Учитывая предельные расстояния между устройствами 10-30 метров в прямой видимости (зависит от антенн), можно сказать, что предельная дальность доставки пакета — 40-120 метров. Естественно при прохождении перекрытий и стен мощность сигнала существенно падает, что приводит и к уменьшению дальности передачи. На практике 4 этажный дом с общей площадью в 500 квадратных метров — это предел одной сети протокола Z-Wave с качественной передачей данных.
Вывод простой: обновляйте маршруты после изменения топологии сети и перестановок мебели или используйте только устройства, основанные на версиях протокола 4.5x и 6.x.
Связь с ПК
Естественно при создании хоть сколько-нибудь достойной автоматизации встаёт вопрос о связи с ПО, работающем на ПК. Существует несколько программных комплексов для этой цели:
- Z-Wave.Me Z-Way (универсальное ПО для Unix/Linux/Mac OS X/Windows с движком автоматизации и простым GUI, поставляется только B2B)
- Mi Casa Verde Vera (с движком автоматизации и простым GUI, работает на роутерах под клоном OpenWRT, продаётся в виде коробки-роутера)
- Fibaro Home Center (с движком автоматизации и простым GUI, работает собственном железе от Fibaro, продаётся в виде коробки)
- Z-Wave.Me Z-Way.C (библиотека C для работы со стеком Z-Wave под Unix/Linux/Mac OS X/Windows, поставляется только B2B, но скоро появится недорогое расширение для Raspberry Pi)
- OpenZWave (библиотека C++ для работы с Z-Wave под Unix/Linux/Mac OS X/(возможно)Windows, Open Source)
- HomeSeer (под Windows, платный)
- Z-Command (под Windows, платный)
- LinuxMCE (ОС на базе Linux для медиа-центров)
Кроме того, есть облачный сервис:
- Z-Wave.Me Z-Cloud (для Unix/Linux/Mac OS X/Windows, бесплатный)
Создание новых устройств
Sigma Designs продаёт не только чипы, но и DevKit — набор плат для прототипирования новых устройств. Считающие себя крутыми могут сразу делать прототипы на голых модулях ZM3102. Кроме того, для создания устройств Z-Wave вам понадобится SDK (Software Development Kit) от той же Sigma Desgins, которая имплементирует протокол Z-Wave вплоть до транспортного уровня включительно. Это сильно упрощает работу разработчиков, которым лишь нужно освоить этот API (с документацией на 500 страницах) и написать весь «пользовательский» код, реализующий прикладной уровень и поведение самого устройства (кнопки, экранчик, светодиоды и т.д.). Стоимость DevKit с SDK составляет $3000.
В добавок к этом понадобится компилятор C51 от компании Keil (ныне принадлежит ARM). Ещё где-то $3000. И много-много терпения и навыков характерных для разработки emdedded устройств.
Безопасность
Естественно, будучи радио протоколом, Z-Wave достаточно легко прослушивается (ну, мы-то знаем, что на всю страну осталось совсем мало способных радиолюбителей :) Взломать можно любую систему — вопрос денег и времени. Став разработчиком железа, купив SDK и обретя много знаний можно сделать и не такое! Но учитывая, что это система домашней автоматизации света и климата, не думаю, что кому-то придёт в голову потратить пару сотен тысяч рублей на взлом вашей автоматизации. Лом стóит сильно дешевле!
Но и здесь есть ответ параноикам: в Z-Wave есть полноценное шифрование AES с длиной ключа 128 бит. Естественно, шифрование накладывает свои ограничения: оно работает медленнее, т.к. уже не достаточно просто отправить пакет — надо до этого обменяться одноразовыми ключами (nonce). Потому шифрование реализовано пока только в оконных системах, дверных замках и ПК контроллерах.
А как же другие технологии?
Говорить здесь о проводных технологиях — смысла нет. У них совсем разные характеристики и применение. В готовых объектах, созданных без закладки проводов во все важные места квартиры, можно использовать только радио технологии автоматизации.
Кто же ещё есть в беспроводном мире?
- 433 МГц — дешёвая и широко распространённая технология.
- Плюсы — дёшево и сердито, большая дальность (частота ниже), малая цена
- Минусы — полная несовместимость устройств разных производителей (т.е. завязка на одном), нестыкуемость комплектов (полное отсутствие масштабируемости), обычно без маршрутизации, отсутствие правил со стороны регулятора по скважности сигнала, невозможность построения нескольких сетей рядом, полоса частот замусорена множеством устройств от бытовых до радиоуправляемых машинок.
- EnOcean — похожий на Z-Wave стандарт автоматизации домов и зданий (868.3 МГц)
- Плюсы — как и в Z-Wave есть стандартизация до прикладного уровня, возможность делать устройства без батареек на солнечных батареях и пьезо/индукционных элементах
- Минусы — нет подтверждения доставки пакета (особенно для устройств на пьезоэлементах, где энергии едва хватает на отправку, их ещё сложнее настраивать, т.к. долго они не могут принимать данные; в новых версиях протокола добавили обратную связь), частота не разрешена на территории РФ (разрешен к ввозу и использованию ограниченный список устройств нескольких компаний)
- ZigBee — очень популярный промышленный протокол. Используется в некоторых странах как стандарт для сбора данных с счётчиков и доставки до концентратора
- Плюсы — хорошо развит, имеет динамическую маршрутизацию (самоорганизующаяся сеть, где каждый узел хранит лишь таблицу с со списком кластеров и ближайшего соседа, который может доставить туда пакет — почти как в IP сетях), принят на вооружения многими телекомами и управляющими компаниями.
- Минусы — использует более загруженную полосу 2.4 ГГц (есть полоса 868 МГц, но она реже используется), стандартизирован лишь до транспортного уровня, что делает устройства разных производителей несовместимыми на прикладном уровне.
- ONE-NET, Bluetooth 3, Wifi,… на рынке нет готовых решений на базе этих протоколов. Думаю, в ближайшие годы они появятся.
Организационно-правовые аспекты
Сам протокол Z-Wave, а также патенты на используемые в протоколе решения, является собственностью компании Sigma Designs. Функции координации производителей, развития протокола и проведение рекламных и обучающих мероприятий возложены на Z-Wave Aliance — консорциум производителей оборудования Z-Wave. Контроль совместимости возложен на сертификационные конторы (в США BuLogics и в Германии PepperoOne), которые сертифицируют все выходящие на рынок устройства, гарантируя полную совместимость между устройствами разных производителей. Только пройдя такую сертификацию можно нарисовать на своём устройстве логотип Speaks Z-Wave и продавать его как устройство, работающее на протоколе Z-Wave.
Компания Sigma Designs и Z-Wave Aliance постоянно проводят семинары для технических специалистов разного уровня, помогая быстрее выйти на рынок с качественными устройствами.
До недавнего времени Z-Wave не развивался в России из-за отсутствия разрешённой частоты. Европейская частота 868.42 МГц не была разрешена ГКРЧ, хотя правительство РФ и присоединилось к некоторым рекомендациям CEPT, применяемым к устройствам малого радиуса действия. С февраля 2012 года Sigma Designs выделила отдельную частоту 869.0 МГц для России. Данная частота попадает под решение ГКРЧ № 07-20-03-001 от 07.05.2007 (приложение 11). Для Российской частоты используется тот же чип, что и для Европы.
Черпаем ещё инфу
Достаточно много информации о протоколе можно получить из таких open source проектов, как OpenZWave, AZW, Linux MCE, а также из этого wiki-сайта и следующих статей: первая, вторая, третья
Увидеть живьём
Для тех, кто ещё не держал в руках оборудование Z-Wave, посмотреть и пощупать можно в первом салоне МГТС по адресу Новый Арбат, дом 2
Не охваченное
В данной статье полностью опущены описания таких понятий протокола Z-Wave, как SUC/SIS, Zensor и многое другое устаревшее и не являющееся актуальным на взгляд автора.