Сперва возьмем проект diyruz_rt. Надо для него обзавестись всем необходимым.
Usb zigbee Dongle - свисток координатор. Донгл можно использовать и как снифер, но я его подключил к Home Assistant (далее просто HA). В HA правда оказалось есть нюансы. Есть интеграции zigbee, но там не все можно, а может и все, но мы не знаем как, а если бы знали, но не знаем. Есть плагин zigbee2mqtt собственно и плагин mqtt сервера, но чтобы плагины можно было подключать через специальный для того раздел, нужна версия HA со встроенным супервизардом, т.е. версия supervised. Нужную версию можно установить только на Debian, на распбери как самостоятельную ОС или как виртуалку, где тоже будет самостоятельная ОС (если правильно понимаю, то самостоятельная ОС - это Дебиан только купированный, чтобы там оставить только самое необходимое).
Отладочная плата с программатором, см. инструкции по diyruz_rt (https://habr.com/ru/companies/iobroker/articles/495926/), там есть картинки, купить можно алиэкспрес или уже на агрегаторах типа Озона попадаются нужные устройства, правда по цене несколько выше.
Z-Stack 3.0 - качаем данное API с сайта TI или откуда еще, если неохото мучаться
Устанавливаем
IAR 8051. Если версия будет последней, то придется немного поплясать с бубном, ну совсем чуток, так что не страшно, все будет работать. Да система платная, но все решается.
В папке, где Z-Stack ищем папку проектов и там же в эту папку, рядом с другими проектами кладем проект diyruz_rt. Структура папок должна быть аналогичной, чтобы пути подтянулись и не пришлось много менять в настройках.
Открываем IAR и из него открываем проект из папки DIYRuZRT/CC2530DB/. Он предложит обновить версию проекта, что ни к чему особо не обязывает, потому пускай.
Если версия новая, то придется еще найти файл $PROJ_DIR$\..\..\..\Tools\CC2530DB\f8w2530.xcl (ну это все там же где Ваш проект, куда мы Z-Stack распаковали) и в конец надо добавить строчки:
Код: Выделить всё
//
// Device specific symbol definitions
// ==================================
-D?B=F0 // B register location
-D?IE=A8 // Interrupt Enable register location
-D?IP=A9 // Interrupt Priority register location
Вот... просто если этого не сделать, то будет ошибка типа "Undefined external "?B" referred in BindingTable" и другие.
Слева у вас список файлов проекта, а над ними выпадающий список из 3-х пунктов:
CoordinatorEB,
RouterEB и
EndDeviceEB. Возможно будет еще RouterZLight - не знаю, что он там делает
.
Так вот это сгруппированные настройки компилятора и линкера нацеленные на определенный вид устройств. Координатор у нас есть и еще один нам не нужен. Конечное устройство - это обычно устройство на батарейках, которое бОльшую часть своей жизни спит, чтобы не тратить энергию, т.е. какой-нибудь датчик. Датчик он что? Он просыпается иногда, отправляет показания и дальше спать. Что еще от него надо? А ничего. По наблюдениям за датчиком от xiaomi, да и sonoff вроде также работает, он просыпает, получает данные от датчика и если они изменились, то только тогда он их передает координатору. Разумно? Зачем тратить энергию на обновление данных, если они не менялись. Мне не очень нравится этот подход, т.к. графики становятся не красивыми и не точными, зато батарейка экономится. А для выключателей, где есть реле, обычно не требуется экономить энергию. Да и сами реле могут требовать постоянного запита, потому такие устройства могут быть постоянно в работе, т.е. в сети, а значит делать дополнительную полезную функцию как в колхозе! Наше устройство может быть роутером. Автор diyruz_rt задается вопросом, работает ли его прошивка как роутер, вроде подключения принимает, а далее все... Судя по всему, если выбрать конфигурацию RouterEB, то работает и ничего дополнительно делать не надо. У меня устройство подключенное через него вполне передавало данные координатору, делаем вывод, что уже все работает.
Выбираем пункт RouterEB, далее я буду говорить только про него, если кому нужны другие виды, то в них необходимо проделать те же действия. Выбираем свойства проекта, идем в настройки линкера, там видим предопределенные #define`ы, которые мы убираем и в поле выше, надо прописать файлик Source/preinclude.h с полным или относительным путем. Автор именно туда перенес все дефайны, ну и мы их будем откидывать туда.
Пробуем компилировать проект. Если сделать полный ребилд, то будут попытки откомпилировать все версии проекта, а если мы их не настраивали, то будет куча ошибок. Будут созданы соответствующие папки, куда будут помещены откомпилированные сущности. Нас интересует только RouterEB.
Совсем забыл!!! https://habr.com/ru/companies/iobroker/articles/495926/ - тут описаны еще несколько настроек компилятора, и если вы их не сделали, то плохо читали. В общем идите и читайте заного.
Получили мы наконец файлик с расширением .hex. Вот наша прошивочка и мы будем ее тестить.
Нам теперь нужен прошивальщик (прога):
SmartRF Flash programmer v1. Именно первой версии. Можно, конечно, и взять вторую версию, но она не увидит cc2530, а потому не понимаю, зачем он вам сейчас
Если вы правильно соединили отладочную плату и программатор, а также подключили все это к компу, то SmartRF увидит наше устройство, хотя называться он будет не как сс2530, но увидит в общем. Выбираем нашу прошивку .hex и нажимаем кнопочку в самом низу, такую большую длинненькую. Там поскачут всякие полосочки, заморгают надписи, а в итоге получим что-то типа success. Поздравляю, мы закончили начало.
Если у Вас тоже HA или zigbee2mqtt, то открываем последнюю, разрешаем спаринги, держим кнопочку на плате долго (только не надо жать на reset и говорить, что не работает), пока не загорится светодиодик. zigbee2mqtt сообщит, что с ним кто-то спарился и определит его как проект diyruz_rt. Да его туда внесли официально. И можно понажимать кнопочки, как в HA, так и на плате и смотреть как положение выключателя меняется и там и там. Если вы еще и датчик температуры подключите, то у вас будет и температура отображаться. У меня ds18b20 под рукой не нашлось, зато есть DHT22, где температура и влажность. Далее продолжим модернизацию и заменим один датчик на другой, добавим влажность и многое другое...