Web of Things是啥与IoT(物联网)有何区别( 二 )


当然大家也很清楚 WoT 作为解决碎片化的方案它自己绝对不能成为第 15 种标准。所以 WoT 的观点就是,WoT 都是现有的技术的组合,而不是重复造的轮子。目前 W3C 在牵头 WoT 相关协议的起草和标准化,大家也知道 W3C 可以说是 Web 方面的权威,所以在如何充分融合现代 Web 技术和物联网技术上下了不少功夫。这个领域目前(在我看来)还是一个新的方向,研究成果还没有很多,相关标准许多都还处于 Draft(草案)阶段,远没有达到成熟的地步。
从开发者的角度来看,WoT 带给开发者的好处就是开发门槛大大降低了。假设你买了两个智能插座,但是它们都暴露 WoT 标准的接口。你可能想实现一些有趣的功能,因为它们都已经具备了接入真正的互联网的功能,特别是具备了对前端开发者来说再熟悉不过的 HTTP(甚至是 RESTful 的)接口,所以(可能作为写了多年 JavaScript 的前端程序员的)你只需要写下几行 JavaScript 代码或者 Python 代码,就能摇身一变成为一名物联网开发者。对用户来说,这些于人类而言都差不多的东西在数字世界变得真正的差不多了,又能让消费者更乐于接收智能产品。
由于 W3C 本身是一个比较开放的组织,WoT 标准的制定也是十分透明开放的。在 W3C WoT 网页和 Github 组织上都可以找到实时更新的标准草案,任何人都可以提出自己的意见、参与讨论并修改标准(虽然我自己还没有这个能力)。这和别的一些物联网协议又不同:开发者不是被标准制定者牵着鼻子走,是开发者真正地在制定标准。
当然,有一些非常省电的设备是没有能力跑 HTTP 这种在物联网世界实际上相当具有重量的协议的;它们往往只能运行 ZigBee、6LoWPAN 这类低功耗传输协议,否则电量消耗就会过快。这种情况还是需要借助网关的帮助来转换协议,但是这个网关同时也有暴露 WoT 接口的责任。所以不是说只有本身能接入互联网的设备才有资格成为 Web Thing,所有的设备都有资格;只是 WoT 作为应用层协议标准更关心的是应用层上的抽象,方便的也是使用这套抽象的人。
事情当然也没有到此为止。
我相信到这里已经有读者感到非常不满了:
既然你说用 Web 技术,用 HTTP、JSON 这种应用层的协议就能统一物联网,我难道不能自己定一套基于 HTTP 和 JSON 的协议吗?这不就又碎片化了吗?大多数人一听到 Web of Things 这个词,产生了 Web + IoT 的想象,然后对 WoT 的认知可能就到此为止了。截至数月前,我也是这样想的,所以上面这个问题实际上也是一直以来困扰我的一个问题。直到数个月前开始了解 W3C 和 Mozilla 的一些最新进展的时候才发现,WoT 还要解决的一个问题是设备之间的可发现、自描述和互操作问题。
我们现在把视角切换到网络之中。假设一个 WoT 设备被接入了网络,我们要让这个设备:
以某种方式在网络中告知自己的存在让这个网络里的其它设备知道来者何人使用户能在无额外操作的前提下快速上手设备对可发现问题,WoT 使用 mDNS 来让设备广播自己在局域网中的域名(URL)和地址。比如小米插座广播自己的域名是 mi-socket-4e8b.local,用户就可以把这串地址直接输进浏览器来操作对应设备,网关也可以在接收到这一 mDNS 广播之后和设备主动联系,把设备的属性和动作自动加入控制面板之中。对用户来说,添加一个 WoT 设备就像插一个 USB 设备一样,即插即用。 mDNS 也不是什么神仙技术了,苹果大量使用 mDNS 来做到苹果产品之间的互操作(Apple Bonjour),NAS 或媒体服务器使用 mDNS 来让同一网络下的软件自动发现服务,Windows 的“网上邻居”也是使用类似技术(UPnP)广播自己并和其它机器共享文件的。
但是就像刚才提到的,如果网关去联系新设备的时候,发现新设备发来了不太一样的信息,网关并不能理解到底是什么意思,怎么办呢?比如插座,标准规定插座有开关属性;如果一个新型插座还装备有 RGB 灯,是不是用户就没办法控制插座发出炫酷的五彩光线了呢?如果放任这种不兼容不管,很快在 WoT 的世界里又会快速制造更多分裂。所以,我们需要一种机制来让设备本身通过一些额外的信息来向另外一个设备(也就是说,机器和机器之间(M2M))描述它自己是什么。更深一步,我们希望一个设备还能描述它和其它资源之间的关系,例如设备提供了什么额外的功能(UI 等)、设备的制造商,等等;而描述这些信息的同时我们又要:


推荐阅读