사물 설명
Thing Description![]() 최신 버전의 로고, Thing Description | |
파일 이름 확장명 | .jsontd, .nf.json, .nf.jsonld |
---|---|
인터넷 미디어 유형 | 애플리케이션/프로토콜+json |
개발자 | W3C |
초기 릴리즈 | 2020년 4월 9일 |
형식 유형 | 제이슨-엘드 |
표준 | W3C 웹 오브 사물 |
오픈 포맷? | 네 |
웹사이트 | https://www.w3.org/TR/wot-thing-description/ |
Thing Description(TD)(또는 W3C WoT Thing Description(TD))은 사물인터넷(IoT)을 위한 JSON 기반 표현 형식을 가진 로열티 없는 개방형 정보 모델이다.TD는 제공된 데이터 모델 및 기능, 프로토콜 사용 및 추가 메타데이터를 통해 IoT 기기 또는 서비스의 기능을 설명할 수 있는 통일된 방법을 제공한다.Thing Description을 사용하면 IoT 기기 및 그 기능을 IoT 애플리케이션에 통합하는 복잡성을 줄일 수 있다.[1]
TD는 W3C의 국제표준기구의 WoT(Web of Things) 이니셔티브에서 비롯된 것으로 IoT의 상호운용성을 높이려는 의도가 있다.[2]2020년 4월부터 Thing Description은[3] W3C 권장사항이다.
원칙
Thing Description의 주요 원칙은 IoT 장치/사물에 대해 사람이 판독할 수 있고 기계로 해석할 수 있는 인터페이스 설명을 제공하는 것이다.이러한 맥락에서 WoT Thing Description은 IoT에 어떤 index.html을 웹 사이트에 제공하는가? 물리적 또는 가상 Thing/기기의 진입점으로 간주할 수 있다.[4]Thing Description은 특정 통신 프로토콜에만 국한되지 않고 WoT 바인딩 템플릿이라는 프레임워크를 제공한다.[5]그러한 프로토콜 바인딩은 MQTT, HTTP, CoAP, Modbus 또는 OPC UA와 같은 특정 IoT 프로토콜의 구체적인 메시지에 대한 상호 작용 가능성의 매핑을 정의한다.
WoT Thing Description은 속성, 행동 및 이벤트라는 세 가지 종류의 상호작용을 정의한다.
속성
IoT 장치의 상태를 표시하는 상호 작용 제공성.그런 다음 이 상태를 검색(읽기)하고 선택적으로 업데이트(쓰기)할 수 있다.또한 기기는 변경 후 새로운 상태를 눌러 속성을 관측할 수 있도록 선택할 수 있다.
액션
상태를 조작하거나(예: 램프를 켜거나 끄는 경우) 장치에 프로세스를 트리거하는 IoT 장치의 기능을 호출할 수 있는 인터랙션 어베넌스(예: 시간이 지남에 따라 램프를 어둡게 하는 경우)
이벤트
이벤트 소스를 설명하는 인터랙션 제공, 이벤트 데이터를 이벤트 가입자에게 비동기적으로 푸시(예: 과열 경보)한다.
구성 요소 및 표준 기술
일반적으로 Thing Description은 기존의 인터넷 및 웹 표준을 재사용하고 의존하도록 설계되었으며, 여기에는 다음이 포함된다.
- 직렬화:TD 정보 모델의 JSON 직렬화는 JSON-LD 1.1의 구문에 맞추어 조정된다.[6] JSON-LD는 Schema.org과 같은 추가적인 (예: 도메인별) 의미론들로 문맥 확장의 기회를 열고 Thing Description 인스턴스를 풍부하게 한다.또한 IoT 애플리케이션의[7] 검색 시나리오와 같은 관련 정보의 추출과 이해를 지원한다.
- 보안:Thing Description에는 OAuth2 또는 Digest Access Authentication과 같은 기존 보안 체계를 따르도록 메타데이터를 제공할 수 있는 프레임워크가 함께 제공된다.[8]Thing Description의 컨텍스트 확장 개념으로 인해 특정 보안 체계를 가져올 수 있다.
- 연결 중:사물은 다른 사물에 대한 참조를 가지고 있거나 더 많은 정보와 연결하기를 좋아할 수 있다.그러한 종류의 관계를 정의하기 위해 Thing Description은 잘 알고 있는 Web Linking[9] 개념에 의존한다.
- 교호작용:사물의 제공된 데이터 및/또는 기능은 해당 상호 작용 제공 특성, 작용 및 이벤트에 할당된다.
- 데이터 스키마:교환할 수 있는 Thing의 데이터를 모델링하기 위해 JSON 스키마의[10] 개념이 Thing Description에 내장되어 있다.
- 바인딩:바인딩 템플릿은 Thing의 속성, 작업 및 이벤트에 대한 특정 프로토콜과 직렬화 방법을 정의한다.프로토콜 식별 및 주소 지정 방법 URI 식별자가[11] 사용된다.데이터 스키마에 의해 지정된 페이로드의 직렬화 인코딩(예: JSON, CBOR, XML, Efficient XML Interchange)을 알리는 경우 미디어 유형[12] 할당이 Thing Description에 적용된다.
사물 설명 예제
아래는 JSON-LD 형식으로 직렬화된 TD의 예로서, 하나의 속성, 하나의 동작, 하나의 이벤트를 가지고 있다.이 TD로 대표되는 IoT 장치는 HTTP 프로토콜을 사용하지만 TD는 아래 예와 같이 URI 방식으로 모든 프로토콜을 대표할 수 있다.
{ "@context": "https://www.w3.org/2019/wot/td/v1", "id": "urn:dev:ops:32473-WoTLamp-1234", "title": "MyLampThing, "보안 정의": { "basic_sc": {"scheme": "기본", "인":"header"} }, "보안": ["basic_sc"], "properties": { "상태" : { "형식": "끈", "forms": [{ "흐레프": "https://mylamp.example.com/status", "htv:methodName":"GET" }] } }, "행동": { "toggle" : { "forms": [{ "흐레프": "https://mylamp.example.com/toggle", "htv:methodName":"포스트" }] } }, "events":{ "overheating":{ "데이터": {"형식": "끈"}, "forms": [{ "흐레프": "https://mylamp.example.com/oh", "htv:methodName":"GET", "하위 프로토콜": "롱폴" }] } } }
이 TD는 필립스 휴 램프의 단순한 버전이라고 생각할 수 있는 인터넷 연결 램프를 대표한다.
이 TD 예를 통해, 고객은 타이틀 상태(10-16행)에 대한 하나의 속성 제공이 존재한다는 것을 알고 있다.또한 URI에 대한 HTTP GET 요청으로 이 속성을 읽을 수 있다는 정보가 13-14행으로 제공된다. https://mylamp.example.com/status
그리고 문자열 기반 상태 값을 반환한다.유사한 방법으로, 동작 제공성은 의 POST 방법을 사용하여 스위치 상태를 전환하도록 지정된다.https://mylamp.example.com/toggle
자원이벤트 제공은 사물에서 비동기 메시지를 보낼 수 있는 메커니즘을 가능하게 한다.여기서 램프의 과열 발생 가능성이 있는 경우 고지할 구독은 긴 폴링 서브 프로토콜이 켜진 상태에서 HTTP를 사용하여 얻을 수 있다.https://mylamp.example.com/oh
. GET 또는 POST 방법의 사용은 명시적으로 명시되어 있지만 TD 규격에 명시된 기본 가정을 사용하여 생략할 수 있다.HTTP 방법은 다음을 사용하여 정의됨을 알 수 있다."htv:methodName"
어휘 용어HTTP에 대한 이 어휘 용어는 다음에서 찾을 수 있는 TD 어휘에 포함되어 있다."@context"
가치를 매기다
이 예에서는 또한basic
액세스에 사용자 이름과 암호가 필요한 보안 구성표.보안 체계는 먼저 이름과 그에 상응하는 체계가 주어진다.securityDefinitions
그리고 나서 그 이름을 에 지정함으로써 활성화된다.security
단면HTTP의 사용과 함께 이 예는 기본 접근 인증의 사용을 보여준다.
아래는 동일한 연결 램프지만 MQTT 프로토콜을 사용하고 보안은 없다.
{ "@context": [ "https://www.w3.org/2019/wot/td/v1", {"mqv": "http://www.example.org/mqtt-binding#"} ], "id": "urn:dev:ops:32473-WoTLamp-1234", "title": "MyLampThing, "보안 정의": { "nosec_sc": {"scheme": "nosec"} }, "보안": ["nosec_sc"], "properties": { "상태" : { "형식": "끈", "forms": [{ "흐레프": "mqtt:///mylamp.example.com/status", "mqv:controlPacketValue": "Subscribe" }] } }, "행동": { "toggle" : { "forms": [{ "흐레프": "mqtt:///mylamp.example.com/toggle", "mqv:controlPacketValue": "게시" }] } }, "events":{ "overheating":{ "데이터": {"형식": "끈"}, "forms": [{ "흐레프": "mqtt:///mylamp.example.com/oh", "mqv:controlPacketValue": "Subscribe" }] } } }
지난 TD와 달리, 여기 양식은 WoT 바인딩 템플릿에서 지정한 MQTT 프로토콜을 포함한다.좀 더 구체적으로, 17, 25 및 34행은 제공권을 사용하기 위해 어떤 메시지 유형을 사용해야 하는지를 설명한다.예를 들어 과열 이벤트를 관찰하기 위해 HTTP GET와 롱폴 서브 프로토콜 대신 클라이언트가 MQTT 프로토콜을 사용하여 이 이벤트에 가입할 수 있다.게다가, MQTT 프로토콜이 있는 WoT 장치는 출판사와 구독자 둘 다 될 수 있다.속성 및 이벤트 제공의 경우 값을 게시하는 반면, 조치 제공의 경우 다른 MQTT 출판사가 이러한 주제에 게시함으로써 트리거할 수 있는 액션 주제에 구독하는 것이다.
구현
Thing Description 편집 및 검증 도구
- 이클립스 에디{TD}or:[13] W3C Thing Description 및 Thing Model을 단순하게 설계하기 위한 도구
- TD 플레이그라운드:[14]Thing Description 인스턴스 검증을 위한 플레이그라운드
Thing Description을 사용한 구현
- Eclipse Node-wot:[15] Node.js에서 W3C WoT 기술의 구현
- WoTify:[16] 사물 설명을 지원하는 WoT 구현 라이브러리
- Wot-py:[17] Python의 W3C WoT 기술 구현
- 노드-RED 노드-젠:[18] 노드-RED의 사물 설명에 기반한 노드 생성
- SANE:[19] 자바에서 W3C WoT 기술의 구현
참고 항목
참조
- ^ "Web of Things over IoT and Its Applications". InfoQ. Retrieved 2020-12-03.
- ^ "Solution for IoT Interoperability – W3C Web of Things". DATAVERSITY - Data Education for Business and IT Professionals. 13 April 2020. Retrieved 2020-04-13.
- ^ Käbisch, Sebastian; Kamiya, Takuki; McCool, Michael; Charpenay, Victor; Kovatsch, Matthias (2020-04-09). "Web of Things (WoT) Thing Description". www.w3.org. Archived from the original on 2020-04-09. Retrieved 2020-04-17.
- ^ "Solution for IoT Interoperability - W3C Web of Things (WoT)". W3C. W3C Press. Retrieved 22 December 2020.
- ^ Koster, Michael; Korkan, Ege (2019-01-30). "Web of Things (WoT) Binding Templates". www.w3.org. Archived from the original on 2020-01-30. Retrieved 2020-04-17.
- ^ Kellogg, Gregg; Champin, Pierre-Antoine; Longley, Dave (2020-07-16). "JSON-LD Syntax 1.1".
- ^ Serena, Fernando; Poveda-Villalón, María; García-Castro, Raúl (22 February 2018). Semantic Discovery in the Web of Things. Cham, Switzerland: Springer. doi:10.1007/978-3-319-74433-9_2. ISBN 978-3-319-74433-9.
- ^ Ed., R. Shekh-Yusef; Ahrens, D.; Bremer, S. "HTTP Digest Access Authentication". IETF. Retrieved 2020-09-01.
- ^ Nottingham, M. (September 2017). "Web Linking". IETF.
- ^ Wright, Austin; Andrews, Henry; Luff, Geraint. "JSON Schema Validation: A Vocabulary for Structural Validation of JSON". IETF.
- ^ Berners-Lee, T.; Fielding, R.; Masinter, L. "Uniform Resource Identifier (URI): Generic Syntax". IETF.
- ^ Freed, N.; Borenstein, N. "Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types". IETF.
- ^ Eclipse edi{TD}or project, Eclipse Foundation, 2020-12-04
- ^ Thing Description Playground, 2020-11-14
- ^ thingweb.node-wot. W3C Web of Things implementation on NodeJS., Eclipse Foundation, 2019-11-14, retrieved 2019-11-17
- ^ Korkan, Ege; Hassine, Hassib Belhaj; Schlott, Verena Eileen; Käbisch, Sebastian; Steinhorst, Sebastian (2019-09-07). "WoTify: A platform to bring Web of Things to your devices". arXiv:1909.03296 [cs.DC].
- ^ Mangas, Andrés García (2020-01-08), Experimental implementation of a W3C Web of Things runtime: agmangas/wot-py, retrieved 2020-01-15
- ^ Toumura, Kunihiko (2019-05-21), GitHub - k-toumura/node-red-nodegen, retrieved 2020-01-15
- ^ "Java-Implementation für das Web of Things veröffentlicht". sane.city. Retrieved 2020-01-28.