Alljoyn: погляд embedded розробника. Частина 1: знайомство


Не вважайте за расові забобони, але в сьогоднішній статті поняття «embedded розробка» буде означати розробку і програмування пристроїв на мікроконтролерах з використанням мови Сі, без всяких процесорів, Linux'ів, Windows'ів, Pyton'ів та іншого «не хардкору». Я навмисно зробив це застереження в самому початку, щоб не довелося постійно акцентувати увагу на цьому в подальшому.
Alljoyn — це протокол взаємодії між пристроями розробляється альянсом Allseen. На відміну від поширених нині протоколів промавтоматики (ModBus, KNX, BacNET тощо) Alljoyn спочатку розрахований на застосування в побутових пристроях, тобто той самий горезвісний " Інтернет речей. Причому Alljoyn претендує на статус глобального світового стандарту і якщо поглянути на список комнаний-учасників альянсу, цілком можна припустити, що його амбіції не безпідставні.
Сьогодні ми спробуємо зазирнути за ширму маркетингових заяв про «універсальності, кросплатформенности і простоті використання» і зрозуміти що ж за звіра намагається винайти група найвідоміших IT компаній зі всього світу.

Отже, Alljoyn — це фреймворк з відкритими вихідними кодами і документацією. Його ідея спочатку зародилася в компанії Qualcomm і з часом переросла у великий альянс. Фізичним транспортом, в теорії може служити будь середовище передачі даних, за умови, що в якості транспорту використовується стек TCP/IPv4 або TCP/IPv6. Але в реальності, на даний момент використовуються локальні мережі (ethernet і Wi-Fi). Заявлена підтримка всіх основних платформах: Linux, Windows, IOS, Android, а так само можливість портування на мікроконтролери.

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

Топологія


Цю картинку можна часто побачити, коли мова заходить про Alljoyn, і вона дійсно важлива для розуміння принципу взаємодії між пристроями. Як видно, є два базових блоки:
  • APP — блок, що реалізує бізнес-логіку. Це може бути фізичний пристрій (таке як лампочка, кондиціонер або телевізор), що надає свої інтерфейси управління Alljoyn шину. Так само це може бути додаток на смартфоні або комп'ютерна програма, яка перетворює Alljoyn-інтерфейси у візуальні інтерфейси користувача (простіше кажучи, це додаток на телефоні, за допомогою якого ми управляємо Alljoyn-пристроями). Причому, APP ніколи не взаємодіють один з одним безпосередньо, це взаємодія завжди відбувається через Router.
  • Router — блок, що реалізує взаємодію між APPs і шиною Alljoyn. Може знаходитися як одному фізичному пристрої з APP, так і на різних.
Тепер поступово підбираються до Embedded частини. Є 2 варіанти виконання фреймворку:
  • Standard Core — варіант призначений для використання в пристроях з операційними системами (смартфони, комп'ютери, телевізори тощо)
  • Thin Core — версія фреймворку на «чистому» Сі для застосування у вбудованих додатках (а саме в мікроконтролерах).
В рамках даного циклу нас в основному буде цікавити полегшена версія Thin. Так от до складу Thin-пристрої ніколи не входить Router. Найпростішим прикладом такого Thin-пристрої є «розумна лампочка» з Wi-Fi. і реалізованим в ній протоколом AllJoyn.
Таким чином, для того щоб керувати нашою «лампочкою» в мережі повинен бути хоча б один роутер, а так як до «лампочки», у відповідності з ідеологією AllJoyn, він знаходитися не може, виходить, що повинно існувати окреме фізичний пристрій, у якому реалізований блок Router. Уважний читач, заперечить: нехай Router (раз вже це просто окремий процес в операційці) буде знаходитися в телефоні, з якого ми запускаємо додаток для управління «лампочкою». Так, в окремому випадку такий варіант буде працювати. Але тільки в приватному.
По-перше, у телефоні може виявитися «неправильний» Router, який робить «неправильний мед» надає послуги роутінга тільки для APP, що знаходяться всередині телефону.

На малюнку ліворуч «правильний» Router отримує презентаційні дані від всіх APP навколо, включаючи 2 «лампочки» і починає їх презентувати у навколишнє мережу і всередину себе. В результаті отримуємо можливість керувати «лампочками».
На малюнку праворуч, Router відмовляється презентувати «лампочки», він, за задумом розробника, служить лише для виводу «назовні» своїх блоків APP. Підкреслю, що термін «неправильний» не передбачає невірне функціонування (розробник навмисно не наділяє Router подібними функціями), а лише показує неможливість безпосередньої роботи з «лампочками».
Про Windows 10 і AllJoynMicrosoft є одним з головних членів Альянсу і, судячи з усього робить певну ставку на AllJoyn. Так, тут на хабре вже була стаття з цього приводу. Цитата з цієї статті:
Windows 10 включена повна підтримка даного протоколу, а саме:
По-перше, вам не потрібно піклуватися про AllJoyn-роутері, описаному вище, так як Windows 10 включає спеціальний сервіс AllJoyn Service Router, який може використовуватися як вашими додатками, так і іншими пристроями в мережі.

На жаль, в Windows якраз той самий «неправильний» Router. Він вирішує головну поставлене перед ним завдання — прибрати необхідність написання блоку Router в своїх додатках, але не виконує маршрутизацію сторонніх Thin пристроїв.


Тепер ми можемо представити структуру мережі, при якій ми отримаємо працюючу систему в будь-якому випадку, наступним чином:

Тобто в мережі повинна знаходитися певне, завжди тримати пристрій, з запущеним на ньому блоком Router. І з цим в поточній реалізації фреймворку доведеться жити. В принципі, на практиці це не має бути якийсь серйозною проблемою — Router, як окремий сервіс, можна запускати на фізичному роутері чи на якій-небудь RPi.

Загальні принципи взаємодії в мережі

Кожне AllJoyn пристрій володіє деяким набором інтерфейсів. Це може бути один з базових наборів, кілька базових наборів, це може бути фіксований набір одного з профілів або власні інтерфейси, які необхідні саме цього пристрою.
Кожне пристрій вміє оголошувати про свої інтерфейсах мережі (це відбувається автоматично). Якщо інший пристрій «зацікавилося» одним з оголошених інтерфейсів, то він «запитує подробиці».
Крім інтерфейсів кожен пристрій може генерувати події та виконувати дії, ініційовані іншими пристроями мережі.
Технічно найперше оголошення про собі в мережу виконується одним з трьох способів:
  • Broadcast повідомлення в порт 9956 (застарілий спосіб, що використовувався в ранніх версіях)
  • Multicast повідомлення AllJoyn (адреса 224.0.0.113, порт 9956)
  • Multicast повідомлення mDNS (адреса 224.0.0.251, порт 5353)
Допускається використовувати як одного із способів, так і відразу декілька.
Всередині цих посилок запаковується інформація про TCP-з'єднання (IP-адреса і порт) по якому необхідно буде підключитися для подальшої взаємодії. Таким чином, UDP використовується тільки для знайомства та обміну первинною інформацією, а надалі робота йде через TCP-сокет. Оголошення «своїх» інтерфейсів відбувається вже по TCP. Офіційно за AllJoyn зареєстрований порт 9955 для TCP з'єднання, але дане правило не є обов'язковим, так як інформація про реальний порте передається при «знайомство». Однак, я рекомендую використовувати саме 9955, так як в WireShark саме цей порт зарезервований для AllJoyn, і WireShark парсити пакет і розбиває його на окремі поля в дуже зручній формі, що істотно спрощує життя на етапі налагодження.

Події та дії

Події і дії – це базовий механізм, який полегшує взаємодію між програмами та пристроями alljoyn. Цей механізм дозволяє додаткам і пристроїв посилати події в мережу, які будуть бачити всі інші пристрої в мережі. Схожим чином пристрої та програми можуть «розповідати» про дії, які вони можуть здійснювати по команді інших пристроїв. Наприклад, датчик руху може посилати подія, якщо хтось проходить повз, а лампочка виконувати по команді ззовні дію включення. Можливість виявлення цих подій і дій, дозволяє створювати додаток, яке включає світло при спрацьовуванні датчика. Цей простий механізм виявлення дій і подій дозволяє програмам створювати динамічні реакції на події.
Найпростіший приклад цього механізму — зворотній зв'язок: у нас є 1 лампочка і 2 телефону, які нею керують. З першого телефону вимикаємо лампочку, і на екрані другого тут же бачимо що лампочка вимкнена.

Проект «Освітлення»

Allseen альянс підтримує і розвиває свій протокол. Одним із способів розвитку є «робочі групи», в яких реалізуються різні проекти, наприклад, за профілями пристроїв.
Проект Освітлення розробляє бібліотеку сервісів освітлення Lighting Service Framework (LSF), яка реалізує відкритий та загальнодоступний спосіб взаємодії з пристроями освітлення на базі AllJoyn незалежно від виробника. Цей проект дозволяє виробникам пристроїв освітлення створювати пристрої, які можуть взаємодіяти один з одним і з іншими пристроями мережі AllJoyn, а розробникам додатків надається API для спілкування з пристроями освітлення від будь-якого виробника.

Особливості LSF включають в себе реалізацію у вигляді відкритого коду наступних можливостей:
  • Управління станом окремої лампи: включення/вимикання, відтінком, насиченістю, яскравістю і температурою кольору
  • Управління групами ламп, включаючи створення, привласнення імен, видалення груп та управління групою як ніби це одна лампа
  • Збереження налаштувань освітлення, зване пресет, дозволяючи конкретному станом лампи бути збереженим для майбутнього використання
  • Застосування ефектів, наприклад, пульсації або переходу з одного стану в інший в протягом деякого часу
  • Створення сцен освітлення, що включають у себе окремі лампи або групи ламп, і необхідні пресети і ефекти, які можуть бути встановлені для створення настрою і атмосфери


Саме на цей профіль ми звернемо свій погляд у наступній частині циклу, коли займемося практичною реалізацією «розумної» лампочки на зв'язці мікроконтролера SAMD21 (Cortex-M0) і Wi-Fi модуля WINC1500.

Що є на даний момент

На сайті альянсу є сторінка Product Showcase, на якій публікується список існуючого обладнання. Наскільки цей список сповнений і актуальний можна тільки здогадуватися. Для глобального світового стандарту, список досить скромний, але все-таки альянс знаходиться лише на початку свого шляху. Присутні тут і різні «розумні» лампочки, розетки і т. п. Але якщо придивитися до них на сайтах виробників, то побачимо, що AllJoyn реалізований як альтернативний протокол в додаток до свого проприетарному. Одна з причин цього — практично повна відсутність реальних мобільних додатків для AllJoyn.

DashBoard 14.12. На момент написання цієї статті, з невідомих мені причин, це додаток було видалено Play Маркету для Android. Додаток являє собою панель управління для різних AllJoyn пристроїв.

LSF Sample App. Додаток для Android, що реалізує панель управління для лампочок, підтримують профіль LSF. На даний момент його можна завантажити тільки у вигляді apk-файлу або вихідних кодів з сайту альянсу.

Luminaire. Додаток, що імітує на екрані телефону AllJoyn «розумну» лампочку. Використовує Thin варіант бібліотеки. Відмінна річ для налагодження, ця лампочка визначається попереднім додаток (LSF) як реальна лампочка. До того ж до складу Luminaire включений «Правильний» Router, чиїми послугами ми скористаємося надалі, коли будемо робити «розумну лампочку в залізі».


Джерело: Хабрахабр

0 коментарів

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