При разработке нового устройства с Zigbee весьма полезно, и кроме этого рекомендуется TI, использовать сниффер пакетов, для получения всеобъемлющей информации о том, что происходит в сети. TI рекомендует два решения:
- Ubiqua Protocol Analyzer — мощное решение для анализа сетей IEEE 802.15.4, у которого есть поддержка CC2531 USB стика. Данный стик я как раз планирую использовать в качестве сниффера. Минус данного решения в том, что приложение работает по подписке, которая стоит 65$ в месяц! Если у вас есть лишние 65$ в месяц, то как работать с данной программой можно прочесть в инструкции пользователя от TI.
- Wireshark — открытая и бесплатная утилита, которая может работать в паре с TI Packet Sniffer. Это уже более интересное решение, его и попробуем запустить, тем более что все уже довольно хорошо описано на страницах проекта zigbee2mqtt.
Существует 2 версии данной утилиты: Packet Sniffer и Packet Sniffer 2, последняя работает с отладочными платами CC13xx или CC26xx Launchpad. Первая же версия работает с CC2531 USB стиком и она то нам и нужна. Первым делом нужно залить в CC2531 прошивку сниффера.
Прошивка CC2531 USB стика
Прошивка влючена в Packet Sniffer, качаем его. Т.к. прошивка доступна только как инсталлятор для Windows, то необходимо предварительно извлечь ее. Для этого нужно использовать утилиту 7zip.
$ unzip swrc045z.zip -d PACKET-SNIFFER $ 7z e PACKET-SNIFFER/Setup_SmartRF_Packet_Sniffer_2.18.0.exe bin/general/firmware/sniffer_fw_cc2531.hex
Прошить CC2531 можно несколькими способами, но самый простой это использовать CC Debugger, который у меня есть и мне не придется использовать альтернативные способы прошивки.
Нужна будет утилита CC-Tool для которой требуется установить несколько зависимостей
$ sudo apt install dh-autoreconf libusb-1.0 libboost-all-dev
После чего необходимо осуществить сборку CC-Tool
$ git clone https://github.com/dashesy/cc-tool.git $ cd cc-tool $ ./bootstrap $ ./configure $ make
Из директории /udev
утилиты скопируйте файл 90-cc-debugger.rules
в /etc/udev/rules.d
. После необходимо перезагрузить udev
$ sudo /etc/init.d/udev stop $ sudo udevadm control --reload-rules $ sudo /etc/init.d/udev start
Теперь можно подключить cc-debugger и CC2531 USB сниффер к компьютеру.
Если светодиод на отладчике горит красным, то необходимо нажать кнопку RESET, светодиод должен загореться зеленым. Если этого не происходит, то необходимо обратиться к руководству пользователя cc-debugger и искать причину неисправности. В моем случае меня ждал именно такой вариант.
Красное свечение светодиода говорит о том, что отладчик не может определить SoC, который к нему подключен. В руководстве сказано, что первым делом стоит обновить прошивку программатора. Но как оказалось проблема была в замыкании выводов GND и Target Voltage Sense на плате переходника.
После устранения замыкания прошивка сразу прошла успешно. Прошивка осуществляется командой:
$ sudo <path-to>/cc-tool -e -w <path-to>/sniffer_fw_cc2531.hex
Установка необходимых программ
$ cd /opt $ sudo apt-get install -y libusb-1.0-0-dev wireshark $ curl -L https://github.com/homewsn/whsniff/archive/v1.1.tar.gz | tar zx $ cd whsniff-1.1 $ make $ sudo make install
Запуск сниффера пакетов
Запустить сниффер можно командой
$ sudo whsniff -c ZIGBEE_CHANNEL_NUMBER | wireshark -k -i -
Откроется окно wireshark и начнется запись пакетов. Но поскольку пакеты данных зашифрованы, нам необходимо добавить 2 ключа шифрования. Первый это Trust Center ключ, который одинаков почти для всех сетей Zigbee. И второй — ключ шифрования сети (Network Key).
Первый ключ добавляется через меню Edit > Preferences > Protocols > ZigBee
. Здесь нужно выбрать уровень безопасности AES-128 Encryption, 32-bit Integrity Protection и нажать кнопку Edit. Откроется окно, в котором нужно создать новый ключ 5A:69:67:42:65:65:41:6C:6C:69:61:6E:63:65:30:39
с полем Byte Order, установленным в Normal.
Со вторым ключом все сложнее. Чтобы выяснить каков Network Key обратимся к настройкам демо проекта ccstudio, который я ранее разбирал в предыдущей статье. В моем проекте он задан последовательностью нулей, что делает сетевой ключ генерируемым случайно.
Но к счастью, ключ шифрования сети можно получить в момент добавления устройства к сети. Для этого мне пришлось отсоединить одно из устройств от сети и подключить его вновь. Ключ сети можно найти в пакете с Info полем, начинающимся со слов Device Announcement… Открываем данное сообщение и заходим в структуру ZigBee Network Layer Data > ZigBee Security Header
. Здесь лежит наш ключ сети.
Точно также как и с первым ключом копируем его и вставляем через меню Edit > Preferences > Protocols > ZigBee
. Теперь Wireshark может дешифровать сообщения, к примеру, в момент включения света можно получить сообщение, похожее на следующее:
Надеюсь статья была вам полезна, поделитесь ей, если считаете, что она может быть полезна и другим. Если вы интересуетесь разработкой Zigbee устройств, то подписывайтесь на мой канал телеграм, чтобы не пропустить новые статьи.