AllJoyn и Windows 10 — делаем так, чтобы наши устройства говорили на одном языке

Выражаем большое спасибо за подготовку статьи sgrebnov из компании Akvelon (Иваново), за помощь в написании данной статьи как непосредственному разработчику AllJoyn и эксперта по IoT/Windows. Остальные наши статьи по теме IoT можно найти по тегу iotweek.


Привет!

Не так давно мы уже затрагивали тему IoT или «Интернета Вещей» в рамках прошедшей конференции WinHEC (Hardware Engineering Conference) 2015.

Одной из главных проблем, волнующих многих, это вопрос обеспечения связности и обнаружения устройств, говорящих на разных языках, протоколах и др. Эту проблему призван решить фреймворк AllJoyn, в совокупности с протоколом Thread, к рабочей группе над которым Microsoft присоединился 1 июля. Об AllJoyn и пойдёт наша речь.

c8968bf426664aae8ff25464c825ab47.png


Отдельно мы решили рассмотреть одну из очень важных частей этой концепции в разрезе Windows 10 (но, конечно, не ограничивающейся этой ОС) — популярный протокол взаимодействия устройств AllJoyn, который уже стал де-факто стандартом. Тем более, что Windows 10 и сопутствующий Windows 10 SDK предоставляют специальную поддержку данного протокола.

Что за AllJoyn?


AllJoyn — это фреймворк (и соответствующий протокол) с открытым исходным кодом, предназначенный для взаимодействия приложений, устройств и пользователей через WiFi и Bluetooth (и другие типы сетей) вне зависимости от типа устройства.

Основной заслугой данного протокола является специальный уровень абстракции, позволяющий утсройствам и приложениям предлагать себя в качестве провайдера определенных услуг и находить другие устройсва и приложения без использования какого-либо дополнительного оборудования и специальных серверов.

Архитектурно это выглядит следующим образом — AllJoyn-сеть состоит из виртуальный роутеров (Routers) и непосредственно приложений (Apps). Приложения общаются со своим роутером, а роутеры в свою очередь с другими роутерами и другими приложениям, относящимися к данному роутеру. Таким образом, приложения могут общаться друг с другом посредсвом сети этих виртуальных роутеров. При этом приложение и вирутальный роутер, к которому он прикреплен, могут находится на разных физических устройствах.

Подробнее про архитектуру AllJoyn можно почитать тут (общая информация) и тут (Windows 10 IoT).

6410781abcce4a47bf37b62ab7c10bd3.png

Windows 10 IoT AllJoyn


Спешу порадовать — в Windows 10 включена полная поддержка данного протокола, а именно:
Во-первых, вам не нужно заботиться об AllJoyn-роутере, описанном выше, так как Windows 10 включает специальный сервис AllJoyn Router Service, который может использоваться, как вашими приложениями, так и другими устройствами в сети.

48f053792cf94587b198f93cd119feb2.png

Во-вторых, Windows 10 включает специальный API для работы с AllJoyn-протоколом, который находится в пространстве имен Windows.Devices.AllJoyn (https://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.alljoyn.aspx) (поддерживаются С++, C#, JavaScript). Таким образом, вам не нужно ставить дополнительные SDK и инструменты, все уже готово и работает.

И, конечно же, дополнительные инструменты для разработчиков:

  • AllJoynCodeGen — часть Windows 10 SDK (лежит в C:\Program Files (x86)\Windows Kits\10\bin\x64\), позволяет сгенерировать полностью готовую Windows Runtime библиотеку для работы с AllJoyn-сервисом, используя описание сервиса в формате xml (AllJoyn Introspection XML). Посмотреть и послушать подробнее.
  • getajxml — специальная утилита, которая позволяет обнаружить все AllJoyn-устройства в сети, получить детальную информацию, в том числе сгенерировать AllJoyn Introspection XML, который можно использовать для автогенерации кода. Подробнее можно посмотреть по видео выше.
  • AllJoyn Explorer — похожая утилита, но выполненная в виде Windows приложения и позволяющая не только увидеть интерфейс, но и динамически вызвать методы. Скачать можно здесь.


Пример создания AllJoyn-приложения на Windows 10


Ниже мы будем использовать Windows 10 Insider Preview и бесплатную версию Visual Studio 2015 Community Edition (RC) (скачать).

Одним из популярных примеров AllJoyn является проект Connected Lighting Project, который представляет ни что иное, как лампочку, реализующую AllJoyn-интерфейс для получения информации и управления устройством.
Ниже посмотрим на процесс создания Windows 10-клинета для управления такой умной лампочкой. Полный исходный код приложения можно найти на GitHub. Итак…

Шаг 1. Создаем новый Widows Runtime C++ компонент и используем AllJoynCodeGen (см. выше) для автогенерации кода.
Публичный AllJoyn Introspection XML для данного проекта можно найти тут

8fbfe89d70f04804927798c785f2de7f.png

Детальные инструкции лежат здесь.
Шаг 2. Создаем новое Windows 10 C#/XAML приложение и добавляем в зависимости только что созданный Windows Runtime компонент.
Шаг 3. Теперь мы можем реализовать логику по нахождению и управлению нашей лампочкой
Для того, чтобы найти и подсоединиться к лампочке:

1b4584b600624490a1da74db51043b7f.png

Чтобы изменить яркость:

7fccd36cde674da7a929b566b548db6a.png

Это действительно весь код :) Основные AllJoyn клссы были предоставлены Windows 10 API, остальные сгенерированы c помощью AllJoynCodeGen.

Шаг 4. Тестируем:
В качестве тестовой лампочки можно использовать Lamp Simulator Application (Android, скачать). Итак, запускаем наше приложение на Windows Phone 10 телефоне и Lamp Simulator на Android, и тестируем как это все работает вместе.

d88ef4b56adc4578b38df79d49205cf2.png

Ресурсы


AllJoyn и Windows10
Архитектура AllJoyn
Building AllJoyn Apps on Windows 10
AllJoyn Interfaces in Windows 10
AllJoyn Connected Lighting Project

© Habrahabr.ru