Note: although this is a summary of the ideas and discussions I was involved in at the WoT W3C IG meeting these are my views and they may not necessarily reflect the views of the W3C WoT IG.
A couple of weeks ago we had the chance to participate to the first face to face meeting of the W3C WoT (Web of Things) Interest Group (IG). We were reporting a little while back about the foundation of this group which was officially kicked off recently with a first face 2 face meeting that took place in Munich. This group is important for the Web of Things community, not only because it opens up the concepts we’ve been working on and actively promote since 2007 but also because it is a unique chance to push these concepts into recommendation and standards.
After an interesting open day with presentations from different projects related to the WoT at large such as Carsten Bormann from the research arm of IETF (and one of the father’s of CoAP!) and the COMPOSE research project, the W3C members-only part of the meetings began. The WoT IG currently counts 104 members from 43 member organisations ranging from Siemens, Intel, Cisco, LG, Sony and Ericsson, etc. to research institutes, startups and SME’s active in the field such as EVRYTHNG.
A lot of the first sessions were quite generic, discussing the general role of the Web of Things in the already quite overloaded space of IoT standards. Interestingly enough though it became quite clear that most of the members were sharing a common goal that can be summarized in just two words: integration and semantics.
Integration first, because the IoT space is already bloated with standards and alliances across all layers of the OSI model and this isn’t likely to change anytime soon there is really a need for thinking about the point of convergence. Just as the lower-stacks (OSI layer 1-3) of IoT networking protocols converge towards IP support via IPv6 or 6LoWPAN application layer protocols (e.g., in (e.g., Zigbee or Bluetooth, etc.) should converge towards a common set of protocols.
The whole idea of the Web of Things as we and other have been shaping it since 2007 is that this convergence should take place at level of Web protocols. Just as the Web made the Internet of documents successful and accessible, the Web of Things can push the Internet of Things to the next level and greatly facilitate the integration of Things to applications.
So the one the core ideas that floated around the W3C WoT IG face to face meeting was around the integration of IoT applications protocols to the Web via a common architectural basis: REST. There are basically two ways of implementing REST for Things: directly on a device or indirectly via a Gateway. Up until 2014 implementing REST directly on a Thing meant implementing HTTP on that Thing. This works well and is a no brainer for a number of devices but the very limited devices (especially the battery powered ones) out there needed a more optimal way than HTTP to create APIs for Things: CoAP basically filled this gap (more on the HTTP vs CoAP relationship in an upcoming post!).
Beyond the request-response pattern that REST offers the now clear need for Pub/Sub support was discussed with several options from WebRTC to WebSockets. CoAP also has an (upcoming) way of doing Pub/Sub via the Observe protocol. Our practical preference at EVRYTHNG are WebSockets or converting other Pub/Sub towards WebSockets but we’ll explain how and why in an upcoming post as well…
But just REST and HTTP (or CoAP) + Pub/Sub isn’t enough yet! This leads us to the next keyword: semantics. It is a great and necessary starting point to agree agree on a common set of application protocols and on ways of translating legacy protocols to Web protocols but it isn’t the full story yet! Just as Web APIs also created thousand of isolated Web silos a Web of Things where we only agree on using a RESTful approach creates accessible silos but still silos of Things.
More concretely, say you built a mobile (Web) application that supports the control of a particular kind of lightbulbs from Company X: knowing you can rely on a RESTful API over HTTP when integrating another type of lightbulb from Company Y in your application means that you do not need to implement a custom protocol to talk with the thermostat, however you still need to create custom code to control lightbulbs from Y as the resources (e.g., PUT /lights/x/status vs PUT /lamps/y/state), syntax of the payloads (e.g, JSON fields) and semantics of the payloads.
This is where we could go further, just as Bluetooth or Zigbee have a number of Application Profiles or HomeKit has a number of Accessory Profiles a agreed upon set of resources (URIs) for Web Things, a definition of the fields in the payloads as well as a anchor points for semantic extensions would really help fostering a reusable and interoperable Web of Things.