lleo (lleo) wrote,
lleo
lleo

Categories:

продолжаю изучать ZigBee

это перепост заметки, оригинал находится на моем сайте: https://lleo.me/dnevnik/2020/11/16

UPD: Спасибо всем за коммментарии! Я был неправ: софтинка zigbee2mqtt в итоге оказалась легкая и безобидная. Почему в первый раз она у меня собиралась больше часа и тянула полгига исходников — для меня теперь загадка. На ноутбуке и на домашнем сервере она в итоге собралась быстро и легко, ресурсов и памяти никаких особых не требует, работает исправно. Подробнее написал здесь: http://lleo.me/dnevnik/2020/11/20#zigbee2mqtt

БЫЛО:


Временно отложил освоение Simplicity Studio до консультации со специалистами, уж больно она вся нечеловеческая — версия 5 оказалась легче и умнее, но в ней зато не собирается даже пример, который в 4-й собирался.

Пока продолжаю изучать протоколы ZigBee. Купил в ИКЕЕ выходящую из ассортимента управляемую ZigBee-лампочку ТРОДФРИ, купил на Алиэкспрессе
свисток cc2531, которые принимает сигналы ZigBee:

Свисток почему-то с завода надо первым делом перепрошить. Почему свистки WiFi и Bluetooth перепрошивать никогда не надо, а ZigBee надо — не спрашивайте. Для перепрошивки надо иметь к свистку прошивочный кабель как на картинке, подсоединить четыре проводка к Raspberry Pi, и в ней собрать и запустить некий софт, скачав нужную прошивку. Raspberry Pi у меня не было, был Orange Pi. Ребята, это пипец — сраные библиотеки GPIO на каждом чипе разные, и версия библиотеки wiringpi под Orange не работает с прошивочными софтинками. К утру после многочисленных пересборок библиотек мне удалось добиться, что GPIO поднялось, скрипты прошивки начали видеть свисток и кое-как через раз на второй считывать с него номер версии, но более долгие операции со свистком, типа прошивка, все равно не заработали. Короче, с Orange Pi прошивка не работает, не тратьте время. Пришлось временно вынуть из 3D-принтера настоящую Raspberry Pi 1, с неё свисток прошился сразу и без проблем: зажег лампочку и стал изображать порт /dev/ttyACM0

После этого я задумался, что делать далее. Логика нам как бы подсказывает, что на одном конце свистка в эфире плавают радиоволны, испускаемые ZigBee-устройствами типа лампы, а на другом образуется порт /dev/ttyACM0, в котором эти сигналы как-то доступны на пощупать.

Абсолютно все мануалы в интернете говорят, что нужно поставить софтинку zigbee2mqtt, которая возьмет эти сигналы и передаст, например, брокеру mosquitto, а там уже делай что хочешь:

С брокером mosquito я когда-то даже имел дело по каким-то своим экспериментам, он всегда выглядел довольно толковым и разумно написанным:

> sudo apt install mosquitto
Необходимо скачать 646 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 1 489 kB.

Но совершенно иначе выглядит прокладка zigbee2mqtt — сраное говно, чья задача взять сигналы из порта и передать в mosquito, который сам видеть этот порт пока не обучен. Дело в том, что у меня висит на сервере несколько похожих портов разных устройств, я сам писал для них на C демоны, которые получают с этих портов данные, чуть перерабатывают и отправляют куда надо дальше, но в ожидании этих сигналов занимают памяти и ресурсов самый мизер:

root      1801  0.0  0.0   1356   432 ?        S    ноя09   0:00 /lleo/home/arduinoid
root      1811  0.0  0.0   1392   472 ?        S    ноя09   0:00 /lleo/home/keyboardoid

Я понимаю, не всем нравится писать интерфейсы портов на C и экономить ресурсы, пусть это будет что-то более высокоуровневое, не вопрос... Но zigbee2mqtt оказался написан какими-то юными баранами на NodeJS и требует столько ресурсов, сколько не требует ни сам mosquito, ни все остальные сервисы, какие я встречал! Я поначалу запустил его установку на вышеупомянутом серверочке в коридоре, воткнув свисток в свич USB рядом с остальными свистками. Казалось бы, что может пойти не так, если у тебя двухъядерный проц, 1Гб оперативки и жесткий диск SATA? Через полчаса я заглянул в то окно снова. И увидел, что установка сраной прокладки между свистком и брокером продолжается полчаса, уже выкачано полгигабайта (!) библиотек на JavaScript, и конца этому безобразию не видно. Догадавшись, что софт, написанный такими мудрецами и с таким размахом, просто захавает мне все ресурсы домашнего сервера, закуклится и остановит время, я установку прервал и решил обратиться с вопросом к вам.

Друзья, скажите, а есть вообще какой-то иной способ получать данные с USB-свистка ZigBee, кроме как устанавливать одну на всю планету (видимо так) чудовищную софтину zigbee2mqtt, написанную криворукими любителями пожрать на гигабайт?

Влад Зайцев подсказывает, что есть проект Tasmota, где аналогичный свисток, только не USB, а чистый UART (cc2530, а не cc2531) подключается к крохотной ESP8266, а та делает ему WiFi-шлюз. Это совершенно не решает мою задачу (у меня именно USB-свисток и желание щупать данные на компе, а не в эфире WiFi), но лишь подчеркивает, что сама задача взять сигналы от свистка и передать куда-то элементарно решается даже средствами крохотного маломощного чипа, без всяких запусков NodeJS на полгига исходников. Как им это блять удалось? И почему никто в мире до сих пор не ударил школоту по рукам и не объяснил, что так нельзя писать софт, предназначенный в основном под заведомо маломощное железо всяких мелких шлюзов?



это перепост заметки, оригинал находится на моем сайте: https://lleo.me/dnevnik/2020/11/16
Subscribe

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 6 comments