IoT-рішення на базі Wirepas Mesh: особливості

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

Привіт! Я Михайло Когут, Solution Architect у компанії N-iX. Зараз працюю на проєкті, який займається розробкою asset and inventory tracking рішень для промислового виробництва та спорту.

У цій статті я розповім про mesh-мережі, де їх можна використовувати, а також про технічні особливості побудови ІоТ-рішення на базі Wirepas Mesh.

Для зручності я поділив статтю на кілька частин:

  • Що таке mesh-мережі і де їх використовують.
  • Хто такі Wirepas і які особливості їхньої mesh-мережі.
  • Як розробити рішення на базі Wirepas Mesh.

Що таке mesh-мережі

Мesh-мережі — одне з найбільш популярних рішень для розподілених ІоТ-систем. Вони не лише дозволяють швидко побудувати мережу, але й роблять цю мережу надійною, гнучкою та безпечною. Ось неповний перелік IoT-напрямків, де mesh-мережі можуть бути хорошим рішенням:

  • Indoor positioning;
  • Asset tracking;
  • Smart home/Smart office;
  • Industrial IoT;
  • Manufacturing;
  • Smart lighting;
  • Smart metering;
  • Beacon management.

Як зазначено в Wikipedia, mesh-мережа — це топологія локальної мережі, в якій мережі (ноди) під’єднані до якої завгодно кількості інших елементів мережі. На відміну від зіркової топології, де ноди об’єднані ієрархічно, в mesh-топології немає стійкої ієрархії. Всі зв’язки будуються динамічно і можуть змінюватися з часом. Mesh-мережі можуть самоорганізовуватись, самовідновлюватися та самоконфігуруватися, що значно спрощує встановлення таких мереж та їх підтримку.

Хоча дротові варіанти mesh-мереж можливі, більш розповсюдженими є mesh-мережі в бездротових рішеннях — Zigbee, Thread, Bluetooth Mesh. Крім стандартних рішень, на ринку є багато пропрієтарних, одним з яких є Wirepas Mesh.

Wirepas

Wirepas — технологічна компанія з Фінляндії (м. Тампере), заснована в 2010 році вихідцями з Nokia. Засновники Wirepas, маючи багаторічний досвід роботи з бездротовими комунікаціями, вирішили побудувати власну технологію, яка вилилася в Wirepas mesh.

Минулого року N-iX став офіційним партнером та системним інтегратором Wirepas. Технології компанії підходять для вирішення багатьох завдань, які ставлять перед нами наші замовники.

Wirepas Mesh пропонує:

  • Mesh-мережу з більш ніж 920 000 нод.
  • Підтримку low power нод (з живленням від батареї).
  • Надійний OTA (over-the-air) update.
  • Гарантовану доставку пакетів в мережі.
  • Захищену комунікацію між нодами, а також безпечне додавання нових нод в мережу (provisioning).
  • Автоматичне розподілення нод між кількома гейтвеями.

Розглянемо найбільш важливі сервіси Wirepas детальніше.

Оver-the-air programming (OTAP)

OTAP — процедура для FW update mesh-мережі. Це один з обов’язкових сервісів, без якого функціонування mesh-мережі годі й уявити. Wirepas дозволяє розділити оновлення на 2 частини — отримання package і власне апдейт. Це дуже зручно, коли в мережі працює одночасно багато різних аплікацій, а оновлення потрібне для всієї мережі одночасно. Крім того, вони пропонують підтримку оновлення low power нод та нових нод. Такі ноди просто отримують оновлення від найближчого сусіда.

Provisioning

Provisioning — це процедура додавання нової ноди у вже створену mesh-мережу. Оскільки в мережі Wirepas комунікація зашифрована, новій ноді потрібно отримати пару ключів для повноцінної комунікації з іншими учасниками мережі. Для цього кожна нова нода шукає proxy ноду, яка дозволяє передати адресу нової ноди до provisioning server. Будь яка інша комунікація з мережею на цьому етапі для нової ноди неможлива. Якщо provisioning server підтвердить адресу нової ноди, то нода отримає ключі і стане повноцінним учасником мережі.

Діагностика

Цей сервіс дозволяє моніторити поточний стан мережі. Це значно спрощує підтримку існуючих та встановлення нових мереж, оскільки завжди можна знайти проблемні місця в мережі і виправити їх. Діагностика містить наступну інформацію:

  1. Топографію мережі з графічним відображенням зв’язків між нодами та рівнями сигналів.
  2. Поточну версію аплікації кожної ноди.
  3. Повну статистику кожної ноди — кількість відправлених\отриманих\загублених пакетів тощо.
  4. У випадку помилок кожна нода відправить інформацію про те, де саме сталася помилка.

Структура

Як і будь яке mesh-рішення, Wirepas складається з:

  1. Нод.
  2. Gateway.
  3. Back-end.

Ноди — елементи мережі, які якраз і виконують всю корисну роботу — збирають дані, виконують команди тощо. Зазвичай, це MCU від Nordic Semiconductors чи Silicon Labs. Всі ноди отримають команди та надсилають дані на один або декілька gateway.

Gateway — переважно Linux-based PC, який виступає проміжною ланкою між нодами та backend. Його можна повністю сконфігурувати з back-end. Обов’язковою складовою gateway є sink нода — схожий MCU, як і в ноді, що відповідає за комунікацію з mesh-мережею.

Back-end містить всю бізнес логіку, а також відповідає за менеджмент нод, їхній FW update, provisioning та діагностику.

Зауважте, що, як і будь яке інше рішення, Wirepas Mesh має свої переваги та недоліки.

Переваги Wirepas Mesh

Крім переваг, які я описав раніше, Wirepas пропонує:

  1. Developer portal — місце, де можна почитати документацію, зареєструвати баг чи питання та отримати кваліфіковану відповідь в межах кількох днів.
  2. Велику мережу партнерів, які пропонують готові до використання пристрої. Можна також домовитися про кастомні модифікації готових рішень чи розробку продукту з нуля.
  3. Багато прикладів використання в SDK. Код SDK відкритий, що дозволяє ознайомитися з ним ще до початку використання.
  4. Широку інфраструктуру. Крім mesh SDK, Wirepas пропонує готовий до використання GW та back-end бібліотеки. Тому PoC можна зробити буквально за день.
  5. Діагностику. Це дозволяє показати стан мережі та відслідковувати проблемні місця.

Недоліки Wirepas Mesh

Хоч Wirepas є хорошою альтернативою іншим mesh-мережам, все ж має деякі моменти, на які варто звернути увагу при виборі цієї мережі.

  1. Wirepas Mesh не є стандартом. Тож пристрої різних виробників не зможуть працювати разом без додаткової інтеграції.
  2. Wirepas Mesh повністю контролює MCU і видає для аплікації лише маленькі часові слоти. Для аплікацій з точними таймінгами це може бути серйозним обмеженням.
  3. Слабка підтримка мультикаст-пакетів. Всі мультикаст-пакети трактуються як бродкасти, що може створювати непотрібне навантаження на мережу.
  4. Дорога ліцензія для розробника. Відсутність ліцензії не дозволить випробувати мережу повноцінно, оскільки відкритий код дозволить лише теоретично ознайомитися з можливостями mesh-мережі. Для запуску mesh потрібен сам стек.
  5. Складність дебагу. Враховуючи захищеність стеку, використання дебагера є неможливим. Залишається лише логування.

А тепер — до найцікавішого. Спробуємо Wirepas в дії і розробимо найпростішу мережу температурних сенсорів.

Розробка mesh-мережі

Для найпростішого ІоТ рішення на базі Wirepas Мesh потрібні 3 складові:

  1. Одна або декілька нод.
  2. Gateway.
  3. Back-end.

Кожна нода вичитуватиме значення температури внутрішнього сенсора кожні 10 секунд, надсилатиме їх на gateway, а gateway по MQTT через MQTT brocker далі на back-end. Back-end просто виводитиме отримані значення. В якості нод використаємо nRF52840 DK від Nordic Semiconductor, а в якості gateway Raspberry Pi v3 Model B та ще одну nRF52840 DK.

Back-end рівень

Back-end візьмемо елементарний, той, що просто слухатиме MQTT і виводитиме отримані дані.

Для початку нам необхідний MQTT broker. Можна запустити свій, наприклад як описано тут, або використати тестовий.

Для back-end Wirepas пропонує MQTT бібліотеку, яка надсилає та отримує пакети. Її можна завантажити звідси.

В цьому репозиторії багато прикладів, для нашого тестового проєкту можемо взяти один з них:

wirepas-mqtt-library /examples/example_send_data.py

При запуску необхідно вказати параметри MQTT broker:

python wirepas-mqtt-library /examples/example_send_data.py –host <MQTT broker hostname> –port <MQTT broker port> –username <MQTT broker username> –password <MQTT broker password>

Все, back-end готовий до використання.

Gateway рівень

Найпростіший gateway — це linux PC (у нашому випадку, Raspberry Pi v3 Model B) та sink нода (nRF52840 DK), з’єднані між собою micro USB кабелем.

Wirepas пропонує готовий raspberryPi image, який можна знайти за посиланням.

Виконуючи інструкції з wirepas порталу для розробників, gateway можна запустити порівняно просто. Важливим є етап конфігурації. Для комунікації з MQTT сервером потрібно ввести наступну конфігурацію:

WM_SERVICES_MQTT_HOSTNAME=<MQTT broker hostname>
WM_SERVICES_MQTT_PORT=<MQTT broker port>
WM_SERVICES_MQTT_USERNAME=<MQTT broker username>
WM_SERVICES_MQTT_PASSWORD=<MQTT broker password>
WM_GW_ID=test_gw

Для комунікації з mesh частиною спершу потрібно конфігурувати серіал порт:

WM_GW_SINK_UART_PORT=/dev/ttyAMA0
WM_GW_SINK_BITRATE=125000

Після цього можна конфігурувати sink ноду — ноду, через яку gateway спілкується з mesh:

WM_CN_NODE_ADDRESS=0x12345
WM_CN_NETWORK_ADDRESS=0xA1B2C3
WM_CN_NETWORK_CHANNEL=2
WM_CN_AUTHENTICATION_KEY=
WM_CN_CIPHER_KEY=

Тепер можемо підготувати sink ноду. Для цього потрібно збудувати і прошити на nRF52840DK dualmcu аплікацію. Детальніше про компіляцію та прошивку — в наступному розділі.

Device рівень

Розробка аплікації. SDK можна завантажити за посиланням.

Це середовище містить багато готового коду — як драйверів, так і аплікацій. Для нашого тесту використаємо:

wm_sdk/source/example_apps/custom_app.  

Така аплікація вже періодично відправляє дані. Залишилось написати функцію отримання температури:

static uint32_t get_temp()
{
    uint32_t temp = 0;
    NRF_TEMP->TASKS_START = 1;
    for (uint8_t i = 0; i < 0xFF; i++)
    {
	if (NRF_TEMP->EVENTS_DATARDY == 1)
	{
	    temp = (NRF_TEMP->TEMP / 4);
	    break;
	}
    }
    NRF_TEMP->EVENTS_DATARDY = 0;
    NRF_TEMP->TASKS_STOP = 1;

    return temp;
}

Та внести зміни в функцію send_data(), щоб вона відправляла значення температури:

static uint32_t send_data(void)
{
    // This function will be called every period_us microseconds by the stack.
    // You can do anything you want for EXECUTION_TIME_US. In this example, a
    // monotonically increasing 32-bit value is sent to the sink.

    uint32_t temp = get_temp(); // Value to send

    // Create a data packet to send
    app_lib_data_to_send_t data_to_send;
    data_to_send.bytes = (const uint8_t *) &temp;
    data_to_send.num_bytes = sizeof(temp);
    data_to_send.dest_address = APP_ADDR_ANYSINK;
    data_to_send.src_endpoint = DATA_EP;
    data_to_send.dest_endpoint = DATA_EP;
    data_to_send.qos = APP_LIB_DATA_QOS_HIGH;
    data_to_send.delay = 0;
    data_to_send.flags = APP_LIB_DATA_SEND_FLAG_NONE;
    data_to_send.tracking_id = APP_LIB_DATA_NO_TRACKING_ID;

    // Send the data packet
    lib_data->sendData(&data_to_send);

    // Inform the stack that this function should be called again in
    // period_us microseconds. By returning APP_LIB_SYSTEM_STOP_PERIODIC,
    // the stack won't call this function again.
    return period_us;
}

Компіляція та прошивка. Компілюється така аплікація просто — достатньо викликати команду make, вказати нашу аплікацію та платформу. Для ноди ім’я аплікації вказуємо custom_app, а для sink ноди — dualmcu_app:

make target_board=pca10056 app_name=custom_app

Результатом компіляції є файл:

SDK/build/pca10056/custom_app/final_image_custom_app.hex. 

Його потрібно прошити на nRF52840 DK будь-яким зручним способом, наприклад, за допомогою nrfjprog від Nordic Semiconductors.

Тест

Після того, як всі елементи системи готові, ми почнемо отримувати дані на тестовому back-end у вигляді:

RX from test_gw:sink => b'\0x00\x00\x00\x17'

Можна прошити більшу кількість нод, спробувати збільшити між ними відстань тощо.

Висновок

Приклад, описаний вище, показує, що найпростіше IoT-рішення на базі Wirepas Mesh можна зробити за кілька годин. Wirepas-інфраструктура дає таку можливість. Звичайно, повноцінний продукт буде складнішим, буде включати security, provisioning, FW update, які я не розглядав у цій статті. Проте цей приклад підійде тим, хто хоче ознайомитися з mesh-мережами і спробувати збудувати свою.

Для ІТ-компаній Wirepas пропонує партнерську програму, яка дозволяє отримати доступ до mesh-стеку, нових релізів та development-порталу. Наразі з українських ІТ-компаній лише N-iX є партнером Wirepas. Тому якщо вас цікавлять mesh мережі загалом та Wirepas зокрема, N-iX активно розвиває IoT напрямок, приєднуйтеся в мою команду.

Посилання

  1. Mesh Networking, Wikipedia.
  2. Wirepas.
  3. Wirepas, GitHub.

Сподобалась стаття? Натискай «Подобається» внизу. Це допоможе автору виграти подарунок у програмі #ПишуНаDOU

👍ПодобаєтьсяСподобалось3
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Досить цікавий огляд, дякую. Також питання: а які альтернативи з mesh платформ може пропонувати opensource?

Дякую за відгук, Ярославе. З тих, з якими мені доводилося мати справу — Zephyr OS Mesh та nRF5 SDK for Mesh від Nordic Semiconductors — зараз він є частиною nRF Connect SDK. По останньому планував написати схожий огляд.

скоже, що в military сфері використовують ZigBee mesh network (можливо рашисти взяли Z саме звідси ;) ) www.ijsr.net/...​rchive/v5i5/NOV163690.pdf

Ну дуже вже нестандартне рішення :). ZigBee заточений під HomeAutomation восновному.

так, дешево і сердито. Може і в їх ракетах використовують якісь ZigBee модулі для gps-навігації (чи щось подібне), що можна хакнути побудувавши якусь FANET (Flying ad hoc network ). Цікаво, що ще й в роботехніці використовують www.researchgate.net/...​for_Military_Applications

Підписатись на коментарі