#onem2m
#onem2m
Вопрос:
Когда мы должны использовать < flexContainer > вместо < container > ? Я видел несколько примеров использования < flexContainer>, они использовали < flexContainer > для устройства SDT. Используется ли <flexContainer> только для устройств SDT?
Представьте, мы создаем <контейнер>, и он предназначен для хранения значений датчика температуры. Фактические значения устройства хранятся в < contentInstance >, а тип температуры (по Цельсию или Фаренгейту) определяется полем семантического дескриптора ресурса <container>. Однако мы могли бы также определить значение и его тип в поле [CustomAttribute] <flexContainer> . Итак, в этой ситуации, почему я должен определять тип данных в поле семантического дескриптора < container > или почему я должен использовать < container > вместо < flexContainer > ?
SDT определены для некоторых устройств в документе TS-0023. Если у производителя устройства не определен SDT, и если мы хотим использовать это устройство, как мы можем создать для него SDT / XML-файл?
Ответ №1:
<flexContainer> отличается от обычного ресурса <container> во многих отношениях:
- Ресурс <container> не хранит фактические значения в самом ресурсе. Дочерние ресурсы <container>, т.е. <contentInstance> или другие ресурсы <container>, выполните. Напротив, специализация <flexContainer> сама содержит фактические значения.
- Сам <flexContainer> не может быть создан напрямую, он является лишь логической основой для дальнейшей специализации (очень похоже на базовый класс в ООП). Он определяет ряд атрибутов, которые поддерживают эти специализации, например, атрибут containerDefinition содержит идентификатор, который определяет фактический тип конкретного ресурса <flexContainer> . Затем специализация <flexContainer> определяет четко определенную структуру, которая может содержать довольно сложную структуру точек данных. Упомянутые устройства и классы модулей из TS-0023 являются такими специализациями, например, температура. Эти специализации имеют четко определенную структуру с семантикой, ограничениями и т.д.
- Большим преимуществом <flexContainer> является то, что его можно обновлять, в то время как <contentInstance> в <container> можно только добавлять или удалять. Это также означает, что, если приложению требуется только текущее состояние устройства и его не интересуют более старые значения данных, одна специализация <flexContainer> — это (более или менее) все, что нужно приложению.
- Все точки данных, содержащиеся в специализации <flexContainer>, считываются и записываются одновременно. В некоторых случаях это значительно снижает затраты на связь и снижает вероятность возникновения условий гонки при чтении или записи многих точек данных.
Для SDT: Шаблон интеллектуального устройства — это метод спецификации для определения функциональных блоков «Lego», так называемых «классов модулей». Затем эти классы модулей могут быть использованы для создания прототипов «Устройств». Упомянутая спецификация oneM2M «TS-0023 : Информационная модель и отображение бытовой техники» определяет количество этих классов модулей и устройств, а также отображение специализаций <flexContainer>. Это означает, что для определения функциональности / класса модулей «температура» доступен ресурс oneM2M <hd:temperature>.
Если вы хотите создать новое определение устройства с использованием SDT, я бы посоветовал вам сначала просмотреть список уже определенных классов модулей и устройств в TS-0023. Если нужная вам функциональность недоступна, вы можете определить свой собственный ModuleClass и Device, написав свой собственный SDT-файл.
Определение SDT доступно по адресу https://git.onem2m.org/MAS/SDT .
Последняя версия SDT для классов модулей и устройств, определенных в TS-0023, доступна по адресу https://git.onem2m.org/MAS/Home-Appliances .
Инструмент для генерации необходимого XSD из вашего определения SDT можно найти по адресу https://github.com/Homegateway/SDTTool .
Еще два примечания:
- Позволяет ли CSE самостоятельно определять специализации <flexContainer>, зависит от реализации и политик CSE.
- На момент написания этой статьи (апрель 2019 года) oneM2M работает над новой версией SDT, которая поддерживает, например, определения продуктов, улучшенное наследование и дальнейшую семантическую поддержку. oneM2M также работает над новой версией спецификации TS-0023 для поддержки междоменных сценариев и устройств Интернета вещей, а не только домашнего домена.