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 может включить в этот проект, из него может что-то и получится. В любом случае, инициатива полезна, как площадка для обсуждения проблемы и поиска ее решения. А это уже половина дела.
Комментарии (20)
jamakasi666
19.04.2016 07:02Который раз ловлю себя на мысли что похоже я все меньше понимаю современные тенденции и новомодные языки и их проблемы. Вот учил и писал когда то на чистых С и С++, появился .Net и потихоньку ушел от него к Java которая понравилась своей консервативностью. Вот если бы встала такая задача, как та которую поставили MS, я бы сделал по интерфейсу к каждому типу датчиков и для каждого датчика реализацию конкретного интерфейса.
Написали бы это на С или С++ сразу кроссплатформенно, к сожалению я не настолько гуру в С++ и не знаю есть ли там подобие интерфейсам явы, все бы сказали огромное спасибо, потом просто бы приликновали нужные dll\so\dylib'ы к любому языку, избежали бы кучу костылей. Вот полюбому найдутся люди котоые сделают кашу из С и какойнибудь ноды, а потом будут удивляться, а чей то у меня 1 датчик работает быстрее быстрее другого и дальше идут ошибки логики и правил работы.
mrsimba
19.04.2016 07:07+2Под заголовком «интернет всего» первое, что бросилось в глаза, это круглый унитаз… и лампочка в него )))
AlexandrSurkov
19.04.2016 07:14Лампочкой и унитазом, если он японский, тоже можно управлять со смартфона через Azure :)
mrsimba
19.04.2016 07:21+1Не дай бог, унитаз под управлением чего бы ни было, кроме ручного…
А вдруг перезагрузка во время процесса или «программа выполнила недопустимую операцию и будет закрыта..» Нафиг нафиг...))
hdfan2
19.04.2016 09:24Situation: there are 14 competing standards. Боюсь, всё кончится именно как в xkcd.
Costic
19.04.2016 13:44-1Мне кажется всем будет лучше, если Microsoft не будет лезть в область IoT.
А то ещё заставят для каждой прошивки покупать у них цифровые подписи.
si1v3r
AlexandrSurkov
Какой?
si1v3r
Серьезно? Не знаете мема? Первая ссылка яндекса.
Trilium
А это похоже на сайт для развлечений? Юмор может не всем понятен быть, а информацию не всю знать. Ответить по существу было бы ценнее, чем такой тип насмешки, как в вашем комментарии.
si1v3r
Да ладно Вам. Не понятно — пройдите мимо. Насмешка была на Микрософт, а не над автором.
tangro
Да, а что? Вы тут работаете, что ли?
AlexandrSurkov
Серьезно, не знаю. Первая ссылка в яндексе — сайт OCF.
Расскажите пожалуйста поподробнее.
si1v3r
Не. Искать нужно было «фатальный недостаток». Мему лет пятнадцать. О том, как Микрософт изобретает собственные версии существующих продуктов.
AlexandrSurkov
Ну, в этом есть доля шутки :) Самое интересное, что Microsoft является одной из создателей Open Connectivity Foundation наряду с Cisco, Intel, Samsung, IBM, Dell и т.д.
dkv
Всё просто. Майкрософт испокон веков занимается внедрением новых альтернативных технологий, не успев довести до ума ту, которой ещё вчера пророчила светлое будущее. Silverlight, DirectShow, недосистема для недопланшетов surface и куча велосипедов в рамках платформы .net Найдя «фатальный недостаток» в очередной своей-же технологии, Майкрософт бросается клепать альтернативу ей с нуля, полностью переворачивая всё с ног на голову ради реализации пары фич.
Krey
Совершенно согласен. Мне это настолько надоело что я вообще перестал пробовать новые технологии, если их автор Microsoft. Но в последние время мое отношение меняется в связи с тем что МС существенно двинулась в сторону open source. Надо полагать теперь технологии будут угасать не потому что их МС забрасывает, а потому что просто не взлетели. Причем они не будут исчезать совершенно, а по-тихому продолжать развиваться, если смогут собрать вокруг себя хоть какое-то community. Как и должно быть.
Romiro_Orimor
Ох, уж этот персонализированный поиск.
kail
Окей, гугл
Ничего не напоминает? :)История программных революций от Microsoft, вкратце
полная версия и оригинал
Более того, и года не прошло, как была статья на хабре от всё тех же про всё то же. Цитаты:
На самом деле, это больше похоже на развитие идеи AllJoyn. Тем более, они схемы используют в формате из этого проекта. Но раз в данной статье AllJoyn не упомянули, то, вероятно, проекты пересекаются слабо, и см. первую ссылку :)