NB-IoT VS LoRA VS Wi-Fi и почему ZigBee мертв. Часть первая
@EvilWirelessManОбещал статью-длиннопост, а в итоге получился цикл статей. Не влезло. Ну, сорян.
Это заготовка для научной статьи, так что любое использование материалов только с согласия автора.
Время чтения - 15 минут.
Любая система нуждается в обновлении, будь это умный утюг или датчик потока нефти в трубе. Потому что мы живем в реальном мире, где все меняется. В софте находят баги, исправляются ошибки компилятора, стандарты шифрования теряют актуальность с годами, итд. Полировка торпеды до состояния “идеальный код, который не нужно менять” может привести к откладыванию выпуска продукта вплоть до его смерти/смерти автора или к тому, что ракета, запущенная с другого космодрома, теряет ориентацию и падает, так как полировали еще задолго до существования альтернативной стартовой площадки (кто же знал). В мире до сих пор находятся адепты идеального кода и делать с ними нужно ровно то же, что и с теми, кто говорит об отсутствии конкурентных технологических разработок в России (ссать на лицо).
Короче, мы с вами правильные и считаем, что системы связи должны быть двусторонними, а софт этих систем - обновляемым.
Мы же не какой-нибудь сраный “Стриж”, правда?
Но есть с обновлением софта одна проблема - энергопотребление устройства. Если устройство питается от сети, то она не такая существенная. Но все меняется, когда приходят они - батареечки. Можно сказать, что это достаточно жестко связывает разработчиков сенсорных устройств по рукам и ногам. Экономится буквально каждый миллиампер. Именно по этой причине обновление в долгоживущих датчиках отсутствует и мои коллеги ездят обновлять LoRA устройства руками. Разве мы заслужили такой интернет вещей? Нет, не заслужили.
Попробуем же разобраться, настолько ли страшен черт и во что нам встанет обновление устройств на таких миниатюрных устройствах с аккумуляторами/батареями. Сразу оговорюсь, что подсчеты очень грязные и приблизительные. Ни в коем случае не стоит задача точно подсчитать все накладные расходы на передачу трафика. Скорее, это попытка разобраться в целесообразности использования той или иной технологии. Погнали!
NB-IoT и LoRA примерно одинаковы по своим характеристикам, но уже сейчас на рынке есть готовые модули для того и другого стандарта. В первой версии этой статьи я хотел сравнять показатели подобных модулей, но потом внимательнее ознакомился с даташитами и теперь все стало еще хуже для NB-IoT (спойлер).
Максимальная мощность у обоих заявлена как 20dBm. Это внушительно. В реальности не так много LoRA модулей могут похвастаться этой циферкой. Впрочем, как и основная масса NB-IoT модулей имеет более скромную выходную мощность. Если все усреднить, то она у обоих колеблется от 14dBm до 16 dBm. Так и запишем. Да, я знаю, что эти цифры отличаются в полтора раза. Будем считать, что это эксперимент. Потом уточним показатели, приведем все к одной мощности и пересчитаем. Посмотрим на сколько такие усреднения влияют и как это меняет общую картину.
Напряжение питания возьмем примерно 3,7V. Это же встраиваемое устройство, откуда там несколько банок аккумуляторов или гирлянда из батарей?
LoRA датчики бывают разные, но мы ищем что-то не слишком прожорливое. Например, это RN2483 от Microchip.
Если обратить свой взор на Wi-Fi модули и поискать даташиты, то это однозначно ESP8266/ESP8285 и RTL8710. В плане энергопотребления они очень похожи, но модуль от Realtek чуть более прожорлив.
Прошерстив по датчикам NB-IoT, понял, что они имеют большой разброс по параметрам, а производители не указывают большую часть. В итоге пришлось усреднять значения.
Так же, что-то я не нашел готовых модулей на уровне ESP8266 для LoRA и NB-IoT. Может, плохо искал? Подкиньте если кто знает. А пока дадим фору последним двум и будем считать, что девайсы с ними сделаны на STM32l0, для которого типичное энергопотребление составляет 5 mA.
На выходе получилась вот такая таблица с приблизительными цифрами.

Чтобы встраиваемое устройство не напоминало по размеру кирпич, будем исходить из небольшой емкости аккумулятора.
На что бы нам ориентироваться... О! Можно на смарт часы.
Sony Smartwatch 3 - 420mAh
Samsung Gear - 300mAh
Apple Watch - 205mAh (Ха-Ха-Ха)
Возьмем среднее в 300mAh.
Допустим, разработчики все оптимизировали, ужались и прошивка занимает 1 Мбайт со всеми библиотеками шифрования, сетевым стеком и непосредственно “умной” частью. На всякий случай уменьшим до 512 КБ и рассмотрим второй вариант, вдруг я чего-то не понимаю.
Считаем сколько займет обновление такого устройства.
Итого, выходит нехитрая формула.
Общее время обновления = (Время на прием всех данных + время на подтверждение доставки) * усредненный коэффициент переповторов, численно равный 1 + вероятность потери кадра.
Образ прошивки в битах - 8192000 бит.
Скорость передачи с БС до датчика - 250 kbit/s или 250000 bit/s
Время на подтверждение доставки возьмем как 5% от времени передачи.
Общий коэффициент переповторов возьмем тоже 5%.
В таблице это выглядит так:

Для Wi-Fi Этот параметр может выглядеть как преимущество, но по факту бесполезен, потому что сеть в любом случае распределенная и несколько сотен устройств вполне могут обновляться одновременно/через соседей, да и построение сетей на Wi-Fi сильно отличается, потому что нет никаких базовых станций. Если даже в одной сети и находится 200 умных устройств (что довольно много) и они никак не могут обновляться одновременно (что весьма маловероятно), то обновляются они максимум за минуту.
Чего не скажешь про NB-IoT с LoRA, потому что устройства могут обновляться ТОЛЬКО с базовой станции. Нам обещают 2 млн устройств на такой LoRA БС, но давайте будем реалистами и возьмем 100 000. Выйдет, что обновление прошивки на всех устройствах займет 1004 часов (41 день) без перерыва на чай, а ведь нам еще и данные передавать надо. Так что в реальности можно это значение смело умножать на два. То есть, в случае обновления оно растягивается у нас минимум на два месяца, а то и на три, загрузив радио эфир “в полку”. NB-IoT в этом плане чуть получше, потому что на одной базовой станции может висеть “до 25 000 абонентов”, но мы опять будем реалистами и снизим это значение до 10 000. Получится около 100 часов (4 дня). Которые, опять же, нужно умножить минимум на два, так как еще и данные передаются. Короче, для NB-IoT это примерно неделя.
Эксплуатация сетей с временем обновления, исчисляемым неделями и месяцами, будет тяжким бременем, а с учетом скорости распространения эксплойтов в паблике, все заверения о безопасности таких сетей - наглый пиздеж.
Но это только пол беды. Не зря же в самом начале было указание на емкости батарей. Да и без учета энергетических затрат этот разгром был бы неполным.
Можно сказать, мы вводим понятие “бюджет обновлений” или “update budget”. Он должен показывать сколько обновлений данного устройства мы можем произвести. Итак, считаем.
Для начала определимся с затратами на передачу пакетов. Чтобы исключить когнитивный диссонанс и было проще считать, возьмем его размер в 1500 Байт.
Введем два параметра, такие как “бюджет на передачу” ("transmission budget") и “бюджет на прием” ("receive budget"). Оба считаются в пакетах, разумеется.
Оба указывают значение пакетов, которое девайс потянет на одном заряде батареи в случае работы только на отправку или только на прием.

Я сам офигел. Всегда было очевидно, что передавать долго и на низких битрейтах, пусть и с пониженным потреблением - это не так эффективно как передавать быстро на высоких битрейтах. Но вот тут цифры говорят сами за себя. Реально видно насколько такой подход менее эффективен.
Мне вот тут очень хочется процитировать слова Олега Артамонова, сказанные на конференции InoThings++ 2018 - “У нас нет батарей на которых мы можем сделать NB-IoT устройства без существенных доработок”. Хотя там было про максимальный ток батарей, но все же.
20 000 пакетов и все, наша маленькая батарейка кончилась. Да еще и по пол секунды на каждое сообщение. Ужас. Сколько они там устройств на базовую станцию обещали? 25 тысяч? Это будет возможно только при условии отправки одного-двух сообщений от каждого датчика в день. В таком варианте маленькие датчики действительно смогут прожить год-полтора, после чего их придется их заряжать. Весело =)
Собственно, как и то, что фраза “Wi-Fi на порядок лучше” теперь математически доказана.
Ах, да… Помимо передачи у нас еще и прием.
Тут все примерно так же.

Wi-Fi рвет всех.
Вот мы и подошли к тому чтобы рассчитать энергетические затраты на обновление устройства. Формула немного изменится.
Энергетические затраты обновления = (время приема * потребление приема + время передачи * потребление при передаче) * усредненный коэффициент переповторов.
Время передачи опять возьмем как 5% от времени на прием и переповторы где-то 5%.

Получается, что вайфайный модуль с самой маленькой батарейкой можно уверенно обновить 15 раз, а вот LoRA и NB-IoT, ну, никак не укладываются в бюджет. Чтобы хоть что-то получилось, нам нужно увеличить емкость аккумулятора до 2500 mAh и то, обновить получится только датчик LoRA.
Попробуем посчитать второй вариант с меньшим размером прошивки.

АЛЛИЛУЙЯ! NB-IoT модуль, наконец, влез в бюджет с условием питания от энергоемкой банки 18650 с объемом 2500 mAh. Теперь его можно обновить аж целый один раз!
LoRA тоже будет чувствовать себя увереннее с таким аккумулятором и
в реальных боевых условиях можно осторожно надеяться хотя бы на одно обновление при редких выходах в эфир.
Вывод:
Итак, прямо на ваших глазах мы только что развенчали миф о том, что Wi-Fi является слишком энергоемким и его нельзя использовать в качестве основы для нфраструктуры IoT. На выходе получилось четкое обоснование того, что сегодня это лучшая технология с точки зрения энергозатрат. А вот NB-IoT наоборот, вопреки заявлениям маркетологов, оказался худшей технологией. Что касается LoRA, то лично мне ее будущее видится как новой народной технологии для передачи коротких сообщений на дистанции 1-2 км. Домашний шлюз стоит уже непомерно мало, а модули продаются тысячами на алишечке. Нас ждет стандартизация всего этого дерьма с автоматическими воротами, замками, погодными станциями и другими устрйоствами на 0.4 ГГц и 0.8 ГГц. Пусть провайдеры и постараются отжать LoRA себе, но низкая стоимость и доступность сделают ее именно технологией людей для людей. А вот провайдерам, как раз, достанется ниша вайфайной инфраструктуры, но только тем, кто первыми осознает потенциал провода, заходящего в квартиру. Это я раскрою в следующей части вместе с экономическими аспектами и в качестве вишенки на торте поясню за ZigBee, ибо достали (наболело).