译者序
物联网(IoT)正在悄然改变着整个世界。以前收快递,快递员要拿着单子给收货人手签,现在只要扫描一下就可以了。在图书馆里借阅和归还图书,不再需要人工一本一本地记录,只需要将一叠书放在扫描器上,贴着RFID 标签的书就能被图书管理员的电脑记录和自动跟踪。连接到智能手机的健康手环能够随时监控你的健康状况。自己不在家时,如果家中有异常,安装在家里的智能摄像机会第一时间拍下险情或入侵者照片并发送警报给你。家中的一些小家电开始具备上网的功能,当你下班将要回家时,可以通过手机控制家中的暖气或空调开始工作,以便于你进入家门时,家中已经达到了令人舒适的温度。这一切都多亏了物联网的发展。
人们对于生活的追求是无止尽的。随着身边的智能产品逐渐增加,我们总想要这些设备更加方便和智能。比如,有这样一个需求:“当我人在客厅时,如果是白天,则调节窗帘打开的尺度,以保证一个让我感到舒适的亮度”,又或者“当我打开衣柜时,我的智能语音助手能为我播报一下今天的天气”,再或者“当晚上8 点半时,如果我坐在书桌前,请热水器为我开始加热洗澡水,等水温到达60 度时,有闹铃提醒我去洗澡”。想象上面这些场景,或许这些场景在未来会渐渐多起来。这里遇到的一个问题是,我如何让窗帘知道我人在客厅,并且时间是白天?我打开衣柜时,又如何知道今天的天气?我坐在书桌前,如何知道是晚上8 点半,又如何通知热水器加热和设置闹钟?这是比物联网更高一层次的问题,它涉及“如何建立一种通用的语言,让不同厂商的智能产品能够彼此通信并协同工作”的问题,而这就是本书的核心概念,即万维物联网(WoT)。如果说,万维网是通过浏览器连接人与内容、人与人,那么WoT 就是连接智能产品与智能产品、智能产品与应用程序、智能产品与数据,以及智能产品与人,这样就能形成一个全球化的、万物互联的公共网络。
作者在本书中提出WoT 这样的设想,即利用现成的Web 标准,以树莓派这样的单板计算机或者Arduino 这样更低成本的RTOS 设备作为网关,让众多设备以HTTP 协议进行通信,内容以JSON 或HTML 形式呈现。这样的话,未来开发和维护IoT 设备,让IoT 设备彼此通信,就和Web 工程师维护网页没有太大的区别。更关键的是,通过本书的分析,作者指出,使用现有的Web 标准和相关技术,完全可以解决IoT 相互通信面临的各种问题,让智能产品进入WoT 时代!
回到前面的三个场景,如果用WoT 来解决,也就是智能红外传感器检测到客厅有人,则推送一个事件给网关的Web 服务,随后Web 服务发送一个POST 请求给窗帘控制器,它控制窗帘打开一定的幅度,并将结果返回;衣柜门锁检测到被开启,则推送一个事件给网关的Web 服务,随后Web 服务请求网络上的天气服务,获得当地此刻的天气,将数据发送给语音助手,语音助手开始播报天气;桌面上的智能摄像机检测到我坐在书桌前,则推送一个事件给网关的Web 服务,随后Web 服务发送一个GET 请求获得当前时间,判断时间是否是八点半,如果已经到八点半,POST 请求就被发送给热水器控制器,让热水器开始加热。如果红外传感器、窗帘控制器、衣柜门、语音助手、智能摄像机、热水器控制器都能与Web 网关通信,那么它们之间的相互控制逻辑就可以用JavaScript 发送简单的HTTP 请求来轻松完成,而且可以用HTML 和CSS 来生成控制界面,将各个智能产品由封闭的孤岛转变成可以任意组合的物理网聚合应用。这就是WoT 最大的魅力!
本书的两位作者Dominique Guinard 和Vlad Trifa 是IoT 世界的领军人,也是WoT 的先行者,提出以Web 的思路解决IoT 的互通问题,为我们描绘了万物互联的美好前景。而像树莓派这样体积小巧、功耗低并且廉价的单板计算机,也许是未来智能家居网关最合适的选择。
如果你想探索未知的智能产品世界,同时又想让生活更美好,那么只要阅读本书,你就能通过一张名片大小的“电脑”和前端程序员熟悉的HTML、CSS 和JavaScript 技术来实现,这是多么棒的一件事!
本书没有难懂晦涩的专业术语和多么高深的理论,所有的技术内容都没有脱离Web 技术的范畴,一位稍有经验的Web 工程师应该能轻松理解和掌握书中所讲述的内容。作者还为本书提供了丰富的例子,甚至考虑到没有购买树莓派硬件的情况,为例子提供了PC 模拟的方式,便于读者理解书中的概念。当然,购买一款树莓派和一些外设来自己动手实践,无疑会更有趣一些。
由于Node.js 和树莓派在最近几年发展很快,一些标准和API 也可能发生变化,作者也考虑了这种情况,将书中所有例子以开源的形式放在了GitHub 上,如果你发现书中例子代码不能正常运行,可以访问 github.com/webofthings/wot-book 获取代码的最新版本。
本书作者在Web 和IoT 领域都有丰富的经验,知识面广泛,行文流畅,介绍的内容深入浅出。非常感谢博文视点侠少(张春雨)将这样一本好书给我翻译。我拿到本书时,就被书中内容深深吸引,迫不及待地入手树莓派深入学习。这是我独自翻译的第一本技术书籍,我深知自己知识面有限,翻译过程难免疏漏。对我翻译的书稿,奇舞团李松峰老师、博文视点恩惠编辑帮忙耐心审阅,提出了许多中肯的修改意见,非常感谢他们。希望读者能从书中得到知识,收获乐趣,用树莓派做出更有趣的WoT 应用。期待未来WoT 让这个世界变得更美好!
月影
序
我们对这本书最大的希望是它可以很好地让你深入了解物联网(Internet of Things,IoT)的未来大概是什么样的。尽管网络上各种谈资铺天盖地,但是关于这个话题的实用性和权威性内容仍然很少。我们希望这本书能够通过提出一个务实的和结构化的方法论来建立物联网设备和服务,为混沌的物联网领域带来一些秩序,这个方法论来自我们为连接设备构建大型商业系统的经验。
人人都想从未来的发展中分一杯羹,因此有数以百计的连接设备标准参与竞争。“我的协议比你的更好”的态度是物联网世界分裂的主因,也是不断重复发明轮子和严重缺乏创新的缘由。现有的应用、工具和机制需要支持每一个新协议,而如今已有数以百计的协议需要被集成和维护——好吧,我想你明白了!
从10 年前我们开始致力于物联网起,我们的目标就是时不时停下来反思什么可以做,从而发挥物联网的全部潜力。当时,很明显大多数项目都只解决了物联网的小问题。几乎没有项目尝试从物联网大局出发并询问:“我们真正要解决什么问题,以及我们如何才能更容易创新?”
几乎每个人都在尝试从头开始建立一个针对设备优化的全局网络及数据驱动的应用程序!另一边,像我们这样从事万维物联网(Web of Things,WoT)的人,决定审视和学习这其中最成功的应用层:万维网。万维网具有规模,它是开放的且易于参与,而最重要的是,它是通用的。如果它能足够好地支持银行服务、游戏、聊天室并且改变传媒业,那么它为什么不能足够好地支持物联网呢?对,就是它了!我们写这本书,不仅告诉你为什么,也告诉你怎么做。我们希望它能带给你对万维物联网的深刻理解,并了解必要的工具,让你在因为有了万维网协议,大多数物理对象都被数字化的世界里能够茁壮成长。这本书也让你知道不必要的时候不要重复发明轮子。而且,如你将看到的,重新用坚实的万维网协议来建立更大的、更智能的、更简单的万维物联网会很有乐趣!
DOM & VLAD
前言
在过去的几年里,物联网(IoT)已经成为技术和商业领域的一个热门话题。从博客到执行报告再到各种会议,每个人都在问同样的问题:“物联网这东西是什么,又如何在我的生意和生活中使用它?”
由于物联网的巨大潜力,每一个人都急于为它建立策略或解决方案,这通常听起来像是在说:“喂,让我们将建筑、供应链、工厂和办公室等一切都连接起来,这样我们就能追踪和分析这些海量的数据了!”听起来很美,但是每个人需要回答的第一个问题是:“我们究竟想要连接什么,更重要的是,为什么要连接它们?”物联网面临的真实挑战与技术(怎么做)关系不大,与实际用例(是什么)关系比较大。真的,物联网是如此年轻,以至于它的技术图景是高度碎片化的。物联网技术领域有数百种工具、标准、协议及物联网云服务可供选择,而且这个数量每天还在不断增加。自我标榜的所谓物联网专家和一夜之间冒出来的博主鱼龙混杂。确实,你可以很容易找到看起来很棒的在线教程,它能够教会你如何通过 Arduino 和一些传感器将你的喵星人或者私人汽车连上互联网,然而当你想要建立一个端到端的、可扩展的安全系统,并将硬件、数据集、存储器、处理过程、可视化及人机交互放到一起的时候,那就得另说了!
有一些很棒的书籍介绍了可用的物联网技术,其中一些非常具体并有技术含量。比如,它们非常详细地讨论硬件或者数据处理,但是没有展示更大的图景及如何完整地建立物联网。其余一些书籍则写得非常高大上,讨论了物联网的绝大多数原理,但只是蜻蜓点水,所以你学不会如何使用它们。
这正是我们写这本书想要填补的空白。我们想让这本书足够简单,简单到能够让一个物联网新手阅读,它涵盖建立一个完整的端到端物联网的必要工具,并且有足够的技术含量,因此你可以实际学到如何自己创建每一个元素。
有了这个目标,我们决定提炼出十多年来我们作为工程师、研究员和企业家,在从事物联网工作的过程中所学到的一切,这样通过学习本书你至少能够成为一名熟练的物联网开发者。我们的目标是讲授需要的技术,用这些技术能够基于万维网生态系统和基础设施来建立物联网的原型、产品及应用软件。因此我们很高兴地说,本书是学习关于物联网与万维网技术交集的一本全面的实际指导书。在泛泛介绍物联网的具体细节后(这些细节包括设备、传感器、标准及工具),我们将快速转到协议栈,把焦点集中在万维物联网——物联网的应用层上。