Microsoft уже давно проявляет заметную активность в сфере Интернета вещей: Специализированные облачные сервисы, IoT-редакция Windows 10, версия .Net для микроконтроллеров, множество хакатонов и т.д. Не так давно был представлен новый проект, который, теоретически, может существенно упростить жизнь многим разработкам IoT-систем. Называется он Open Translators to Things(OpenT2T). Если в двух словах, этот проект можно описать, как "Интерфейс всего". Более подробное описание далее в этой статье.
Любой, кто разрабатывал программное обеспечение для устройств, сталкивался с большим разнообразием протоколов и подходов при использовании одного и того же класса компонентов. Казалось бы, все датчики температуры работают примерно одинаково. Нужно просто считать с них показания, и все. Однако на практике видим следующее:
Чтение данных с температурного датчика LM35 происходит так (взято отсюда):
tempCC = (5.0 * reading(tempPin) * 100.0) / 1024.0
Для датчика TMP36 код будет такой (взято отсюда):
tempC = (5.0 * reading(tempPin) - 0.5) * 100
Если же использовать термистор в 10K Ом, то может получиться такой код (взято отсюда):
tempC = log(((10240000/ reading(tempPin)) - 10000))
tempC = 1 / (0.001129148 + (0.000234125 + 0.0000000876741 * tempC ^ 2)) * tempC )
tempC = temp - 273.15
Вот, например, разные варианты работы с лампочкой:
Philips Hue (взято отсюда):
PUT http://<bridge ip>/api/<username>/lights/1/state {"bri":254}
PUT https://api.wink.com/light_bulb/<device_id> {“desired_state": { “powered” : true} }
И так во всем.
В Microsoft решили попробовать устранить данную проблему с помощью новой инициативы: Open Translators to Things(OpenT2T). Идея заключается в том, чтобы попросить самих разработчиков помочь создать "схемы работы" для разных классов устройств. Нужно сказать, что эта идея не нова. Например, существует Open Connectivity Foundation. Microsoft хочет объединить усилия подобных групп, отдельных производителей и разработчиков. Специально для этого был создан репозиторий на GitHub, благодаря которому любой желающий может присоединиться к этому процессу.
Технически "интерфейсы всего" предлагается создавать на JavaScript/Node.js. Результат получается кросс-платформенным. Есть примеры для Windows, OS X, Android, Azure и AWS. Каждый "интерфейс" состоит из трех частей:
- Схема
- Транслятор
- Приложение
Схема объединяет устройства одного и того же класса. Это и есть обобщенный "интерфейс" для одинаковых устройств. Для примера на GitHub можно найти схему для датчиков температуры. Сейчас используются схемы в формате AllSeen.
Транслятор — это реализация схемы для конкретного устройства. Он должен скрывать особенности работы с устройством, что поможет разработчикам не тратить время на изучение документации, а сразу преступить к работе. Трансляторы могут быть запущены как на локальных устройствах (ПК, телефоны, планшеты, специализированные контроллеры и т.д.), так и в облаке. Все зависит от принципов работы управляемого устройства. Примеры трансляторов написаны на JavaScript с использованием Node.js. Но никто не запрещает использовать и другие языки и платформы: C++, C#, Java и т.д.
Приложение — это примеры работы схемы и транслятора для разных платформ.
Как же этим все пользоваться? Предположим, мы хотим считать температуру с датчика CC2650.
- Для начала нам нужно найти подходящую схему. В нашем случае она находится [тут]( https://github.com/openT2T/translators/blob/master/org.OpenT2T.Sample.SuperPopular.TemperatureSensor/org.OpenT2T.Sample.SuperPopular.TemperatureSensor.xml). Если схема вас чем-то не устраивает, то можно вынести это на обсуждение и внести в нее правки.
- Затем найти и использовать подходящий вам транслятор или написать собственный. В нашем случае транслятор находится тут.
- Далее написать приложение, использующее выбранное вами устройство. Для датчика CC2650 OpenT2T уже содержит несколько тестовых примеров для разных платформ: UWP С#, Java для Android, Azure IoT Hub и AWS Kinesis.
Чтобы понять, какую помощь ожидает Microsoft от сообщества, нужно заглянуть в Roadmap. Проект сейчас находится в Alpha-стадии и разделен на несколько частей:
- Схемы и трансляторы. Всем желающим предлагается поучаствовать в формировании схем устройств и создании новых трансляторов.
- Console. Предполагается, что разработчики будут использовать консольные приложения на своих устройствах для первоначальной настройки модулей, которые содержат node.js процесс, распознающий новые устройства и загружающий соответствующие трансляторы. Тут требуется помощь для создания полноценных приложений для всех операционных систем (Windows, OS X, Android и iOS).
- Облако. Работа с устройствами может осуществляться и через разнообразные облака. На этом направлении много работы, связанной с поддержкой разных протоколов и форматов для пересылки данных в облачные сервисы.
- CLI. Сommand Line Interface, который будет использоваться разработчиками для тестирования JavaScript трансляторов. От сообщества ожидают помощи для доработки этого инструмента.
- Sampleapps. Репозиторий уже содержит примеры для разных платформ. Но чем больше примеров, тем лучше. Поэтому, предлагается добавлять примеры для всего, что вам интересно. Например, актуальными будут Xamarin, Cordova или Swift, а также другие облака (Google Cloud).
- Voice. Добавление новых голосовых файлов позволит использовать Cortana и других голосовых помощников для управления устройствами.
Принять участие в этом процессе достаточно просто. Можно начать с просмотра этого и этого видео. Можно почитать tutorial. А можно поучаствовать в дискуссии на GitHub. Другие площадки для общения находятся тут и тут. Приглашаются все желающие.
Подводя итог, можно отметить, что идея правильная и своевременная. Но на мой взгляд, несколько наивная. Вызывает вопросы и стек технологий. Но, учитывая ресурсы, которые Microsoft может включить в этот проект, из него может что-то и получится. В любом случае, инициатива полезна, как площадка для обсуждения проблемы и поиска ее решения. А это уже половина дела.
Автор: AlexandrSurkov