Реліз альфа-версії стека протоколів для Інтернету речей

Всім привіт! Святкова атмосфера вже стукає в екрани моніторів і прилітає спамом на ваші електронні адреси. Ось і ми вирішили виконати свою обіцянку і вивести у світ наш стек.


Перейдемо до головного: що ж ми такого зробили. Відразу обмовимося: порівнювати стек MOAR і IPv6 ми не будемо, оскільки говорити зараз про IPv6 — це майже те ж саме, що говорити про підлітковий секс: усі про нього говорять, мало хто про нього хоч щось знає і лише одиниці його справді пробували.

Пара слів про нашій тестовій ноде
Нодою ми будемо називати один пристрій з одним примірником стека. Нода створювалася для тестування роботи стека в прив'язці до зовнішніх датчиків.

Нам потрібно було максимально транспортабельное рішення, і спочатку все було укладено в просту картонну коробку. Але її надовго не вистачило, а постійно розкривати коробку для отримання інформації нам набридало, а з урахуванням того, що всі елементи кріпилися на проводах, складність використання в якийсь момент пересилила лінь, і було запропоновано зробити корпус. Доступ до 3D-принтера швидко поставив крапку в питанні як його виготовити. Тестове пристрій вийшов досить вдалим і проклало шлях з нами з Калінінграда в Гельсінкі і назад поштою Росії.

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

Розібравшись з периферійними питаннями, перейдемо до розгляду структури стека

Логічна структура MOAR стека містить кілька рівнів:

Інтерфейсний рівень — забезпечує пряме сполучення з найближчими нодами за деякого фізичного або логічного каналу. Інтерфейсних рівнів може бути декілька, по одному на кожен фізичний або логічний інтерфейс обміну даними. Рівень або працює з драйвером інтерфейсу, або сам виконує його роль.

Канальний рівень — вибирає найбільш підходящий спосіб зв'язку (інтерфейс) з кожної з найближчих нод і виконує супутні завдання.

Рівень маршрутизації («роутінга») — надає алгоритми для пошуку найбільш оптимальних маршрутів передачі даних.

Рівень подання — забезпечує криптографію і розбиття даних, а також зворотні перетворення.

Сервісний рівень — надає API для використання MOAR стека з інших додатків.

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

Що ж, перейдемо до опису процесу встановлення та налаштування. Для початку скачаємо репозиторій, зробити це можна за посилання, або, використовуючи git, перейти в потрібну папку і виконати команду:

git clone https://git@github.com:moarstack/moarstack.git 

Велика частина директорій в репозиторії MOAR стек мають спеціальне призначення:

./ файли представлені у кореневій директорії (такі як CMakeLists.txt призначені для складання проекту і всіх інших проектів у внутрішніх директоріях (іноді розміщених в одній піддиректорії, як це зроблено для рівнів).
layers/ — директорії з заголовками (*.h) і вихідними кодами (*.c) для кожного рівня, включаючи загальні файли з вихідними кодами і відмінності файли для всіх рівнів. Також в цю директорію можна додавати й інші рівні для компіляції разом зі стеком
interface/, channel/, routing/, presentation/ service/ — каталоги з файлами з вихідними кодами і заголовочными файлами, що мають відношення тільки до певного рівня.
shared/ — файли з визначеннями, загальними для всіх рівнів.
libmoar/ — файли з вихідними кодами і відмінності файли, які можуть бути використані в інших проектах для зв'язку з MOAR стек і використання його для передачі даних. Таким чином, ці файли реалізують функціонал API для MOAR стек
moard/ — файли з вихідними кодами і відмінності файли, які об'єднують всі рівні в linux-демона
tools/ — файли з вихідними кодами і відмінності файли додаткових службових програм, що використовують MOAR стек, або забезпечують роботу MOAR стека. Так наприклад, службова програма moсkit представляє з себе віртуальну середовище передачі даних, що дозволяє налагоджувати роботу декількох примірників стека з урахуванням загасання сигналу в середовищі (у найпростішому вигляді).
Зі структурою папок більш-менш зрозуміло, давайте приступимо до компіляції та складанні проекту:

Перейдемо в кореневу папку:

сd moarstack_linux

і послідовно виконуємо наступні команди:

cmake .
make

Після збірки докорінно повинні з'являться директорії config, lib і bin. У поточній реалізації установка в систему не передбачена, тим не менш, moard може бути запущений як демон, і, звичайно ж, ви можете використовувати screen або LSB скрипти для автозапуску.

Розглянемо конфігураційні файли:

По дорозі
config/moarstack/
розміщується основний файл конфігурації moar.conf

moardSettings.LogPath = /var/log/moard.log
— розміщення лог файлу
moardSettings.LayersEnabledDir = layers_enabled
— директорія щодо moar.conf де розташована конфігурація інших рівнів
nodeaddress.address = 0123456789abcdef
— адреса ноди в hex, 8 байт (повинні бути різними у нод, в поточній реалізації стека статична адресація. У сильному спрощення цю адресу можна представити як аналог IP адреси TCP/IP стек)
ifaceSocket.FileName = /tmp/moarIfaceChannel.sock
— сокет для взаємодії інтерфейсних рівнів з канальним рівнем
serviceSocket.FileName = /tmp/moarServiceApi.sock
— сокет для взаємодії сервісного рівня з додатками, через нього працює API

Тепер розглянемо конфіги рівнів, до речі вони лежать за адресою:

config/<moardSettings.LayersEnabledDir>/*.conf
— конфіги рівнів

загальні поля для файлів конфігурації рівнів:

libraryLocation.FileName =
— ім'я файлу скомпілованої динамічної бібліотеки. Може бути як відносний або повний шлях, так і тільки ім'я файлу. В останньому випадку пошук бібліотеки у файловій системі покладено на ld.so.
При збірці та налагодженні стека в Clion, слід звернути увагу на розташування скомпільовані файли, в залежності від версії IDE воно може відрізнятися, можливо в налаштуваннях цілі збірки треба буде задати змінну оточення LD_LIBRARY_PATH c відповідними шляхами

Нарешті ми підійшли до першого запуску стека. Аргументів для запуску moard поки небагато (як раз з цієї причини пустує --help xD):
--help -h
— у майбутньому тут буде сторінка з описом аргументів
--config=<filename.conf> -c <file.conf> 
— ім'я файлу конфігурації, крім очевидного, дозволяє запускати кілька копій стека з різними параметрами

Послідовність запуску MOAR стека:

0. Читаємо аргументи moard, якщо по дорозі в -c відсутній файл випадаємо з помилкою.
1. Якщо аргумент -c не використаний, шукаємо файл конфігурації за замовчуванням
../config/moarstack/moar.conf 
(якщо не знаходимо, випадаємо з помилкою)
2. Якщо файл конфігурації знайдений, вантажимо його, йдемо в
<moardSettings.LayersEnabledDir>/
і читаємо там всі наявні там
*.conf
файли.
3. Завантажуємо модулі за вказаними в
*.conf
шляхах.
4. Якщо вже була завантажена бібліотека з рівнем даного типу, то наступні спроби завантажити рівень того ж типу ігноруються. (За винятком інтерфейсних)
5. Всі! Можна взаємодіяти з API стека через сокет зазначений в
serviceSocket.FileName


Чому ви вибрали Linux і чому не включили в реліз стек для MCU?

Стек MOAR — програмне рішення, яке може бути встановлене на будь-який пристрій під управлінням Linux. Ми не обмежуємо користувачів стека MOAR лише нашим варіантом рішення і хочемо, щоб ви ставилися до нього як до інструменту для власних проектів, а не як до платформи з жорстко заданою архітектурою. Публікація технічної документації — тільки перший крок. Хай вибачать нас шанувальники Arduino, але ми вважаємо, що робити свої рішення без обмежень на наявні комплекти для розробки цікавіше і не на багато складніше. І якщо хтось вирішить спробувати зібрати чергову метеостанцію за допомогою паяльника і стека MOAR, то ми будемо тільки раді.

З open source публікацією версії стека для MCU ситуація складніша. На жаль, ми живемо в світі, де за їжу треба платити, а нам самим деколи хочеться їсти. Стек під MCU має більш спеціалізовану структуру і призначення, не повністю сумісні з open source ідеями, тому саме рішення для MCU ми припускаємо робити комерційними. У підсумку, опублікованій в open source код буде відставати від комерційних версій приблизно на рік.

Зворотний зв'язок.
З сьогоднішнього дня стек MOAR деякий час буде перебувати в стадії alpha, і ми не рекомендуємо використовувати його в робочих проектах щоб уникнути проблем з їх працездатністю. Тим, хто вирішить спробувати наш стек, ми пропонуємо скористатися репозиторіями з вихідними кодами і документацією. Там же можна знайти рекомендації по його використанню. Ми визнали створення окремого сайту або форуму недоцільним зараз: доступних каналів зв'язку буде достатньо для оперативного внесення правок та збору зворотного зв'язку.

За сим дозвольте відкланятися: ми вітаємо Вас з Новим Роком та зі свого боку обіцяємо радувати Вас новими релізами в наступному році.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.