时下,在操作系统界,有一个热得发紫的名词“物联网操作系统”,但物联网和操作系统究竟是什么关系,物联网将面临什么问题,操作系统又能为其解决什么问题呢?许多人都说协议是物联网的最大问题,但物联网需要哪些协议,什么问题能用协议解决,什么问题不能用协议解决,为什么有些协议永远不会有,本文和大家一起探讨上述问题。
操作系统和其他电子产品一样,是个不断迭代、与时俱进的一个东西,由用户需求、软件积累、硬件成本等共同推动发展,反过来又激发需求、定义硬件。在物联网时代,大家都在谈论物联网操作系统,我们要分析物联网的核心问题是什么,操作系统对于物联网,能做什么,不能做什么,它如何影响操作系统设计。最后,我们会发现,物联网的核心问题中,大多数问题,操作系统会表示很无奈,无能为力,OS能做的事情很少,只能解决非常有限的问题。我们设计操作系统,要服务于物联网应用的话,就要分析清楚物联网面临的问题,要集中精力于解决核心问题,有的放矢,不要人云亦云地跟着感觉走。
物联网,我们首先要解决的是“连接、区别、识别、沟通、操作”这五大问题,只有这些问题解决了,才有机会谈论安全性、易用性、低成本等问题。
物联网是物体的社会,就是人类企图组建一个智慧的物体网络,来替人类服务,要发挥物体网络的智慧,其实跟人类社会网络有很多共同点。人与人之间,也存在连接、区别、识别、沟通、互动(也就是物联网说的互操作)这些问题。人和人之间,首先要通过见面、电话、信函等方式建立连接,才有机会交流吧。不同的人,必须能够区别开来吧,世界上没有完全一样的两张脸,就提供了区别的基础;有了区别后,你和你交流的对象,必须认识吧,你不能稀里糊涂就跟人走吧;能识别还是不行啊,必须能沟通啊,鸡跟鸭讲是不行的,得有相同的语言,配翻译也行。以上条件都具备了,才有互动(物联网中的互操作)的可能。以上过程,由于人具有高级智慧而变得简单,例如语言不通的人之间,还可以通过场景、手势、画画、眼神等来交流;对于只有非常有限的智慧的电子产品来说,会变得复杂和困难。
物联网中,连接问题是最简单最基本的问题,也是当今操作系统支持最为充分的,业内很多人都在谈论的所谓协议,多数指的是通信协议。为什么说它简单呢?俗话说,能用钱解决的问题,都不是问题。这句话套用到物联网中就是,能用技术解决的问题,都不是问题。连接就是一个能用技术解决的问题,我们接下来会谈到,物联网面临的问题,大多数都不是技术能解决的问题,设计操作系统,要充分认识物联网面临的问题的基础上,把现阶段能解决的问题做到极致,尚不具备条件的,逐步地提出解决方案,或者为解决这些问题提供一些必要的支持。当前,连接的技术方面,虽然还有些纷扰,但也就WiFi、ZigBee、蓝牙等少数几个协议在竞争,已经算是进入了诸侯争霸时代,无论是连接还是组网方式,技术上都比较成熟。而事关设备识别和沟通方面,还一盘散沙呢。还有一些物联网开发平台,或者操作系统,发展自己的网络协议,企图形成技术准入门槛,进而垄断。巨头可以这样做,但我认为那是不可能成功的,为什么呢?Android、iOS能形成垄断的原因是什么?那是因为它足够复杂,一般人做不出来,而且手机操作系统作为应用分发和服务投送的平台,其生态系统上的APP厂商客观上不希望有太多平台,做一个APP,需要同时推出iOS、Android、win-mobile三个版本,已经够烦的了,再多几个操作系统的话,还不晕死,所以厂商会主动地选择少数几个最受欢迎的操作系统予以支持。所以在通用操作系统上,容易形成一将功成万骨枯的垄断局面。而对于物联网的接入协议来说,接入公网的技术已经成型,就是TCPIP,没什么好争的了,它是个公共协议,大家都能用;而局域无线网络,分两大类,一类是像智能家居一样,需要接入不同厂家的设备的,这种网络,必须使用统一的网络协议,一致性高的网络协议,不要搞成不同厂家的芯片互不兼容;另一类是不需要接入不同厂家设备的无线局域网,例如某些工业控制网。大多数无线局域网应用都比较简单,其所承载的业务也往往单一,就像开关插座不可能形成垄断一样,局部物联网的网络协议,也不太可能像IP网络那样,形成一个协议独大的局面,大家都有机会,更不可能形成少数几家开发工具垄断的局面,操作系统也会呈百花齐放的精彩。
对于网络,无非是以下几种,就物联网整体来说,应该是以下多种网络的混合体。
- 中心服务网广域,就是有一个数据和运算中心,执行各种各样的服务,如数据存储、分析、分发、查询等。
- 无中心网广域,任何终端都可以找到另一个终端,而无需通过任何服务器,从安全性角度来讲,它能避开不受信任的服务器,这是未来组网的发展方向之一。
- 固定局域网,例如一个固定位置安装的无线传感器网络,这种网络,往往内部组成一个mesh网,然后通过一个公共出口连接到公网,或者根本就不连接到公网。
- 流动区域网,例如智能交通,汽车到了哪一个路口,就和哪一个路口的信号灯联网;跑到哪条路上,就跟那条路的路灯联网,是否连入公网,并不重要。
连接也包含组网、维持网络连接、设备发现的问题,维持连接在物联网中是一个很重要的问题,为什么呢?因为物联网中有许多低功耗设备,这些设备绝大部分时间是休眠的,又要省电,又要不丢失连接,需要有点智慧。维持连接一般是用心跳的方式,对低功耗设备,合理的心跳间隔、快速唤醒、快速连接,连接完后快速返回休眠状态,就非常重要了。操作系统能做啥?只需要支持常见的无线连接如ZigBee、蓝牙、WiFi等,并实现组网,在低功耗上做足文章就可以了。至于几种连接方式,诸侯争霸最终谁执牛耳,没操作系统什么事,只能隔岸观火、且看风云。
谈到设备区别,就开始出现问题了,网络中的两个设备,你必须能够区别出他们是不同的个体,就像人的身份证号一样,每个设备也必须有一个身份证号,或者在你所在的区域网中有一个唯一的号码也行。这个唯一的号码,谁来分配呢,就成了问题,分配号码的人,就成了老大,谁是谁啊,凭什么你当老大?其实设备区别这个问题,很早就有人想解决了,IPV4有一个32位地址,当时觉得32位足够大了,网卡考虑的周全些,有48位MAC地址,也不够大。maxim公司的iButton以及802.15.4,都有一个64位的唯一地址,理论上,64位够用了,但maxim公司是一个企业,自然无法成为老大;802.15.4绑定了特殊的连接方式,也无法成为老大,WiFi节点、有线网络的MAC节点,都会站出来反对你。那只剩下IPV6了,将来,只要需要接入网络的物联网节点,都会有一个固定的IPV6号码。但802.15.4的64位地址,802.11n的48位地址也不会消亡,有许多设备根本就不上广域网,只要在其局域网内有唯一地址就足够了。当然,IPV6也有问题,万物联网时代,一个生产水杯的小工厂,怎么低成本地获得IP呢?又如何收回其IP呢?如果不收回,垃圾桶里,每天都会有无数的IP,即使128位的IP,也迟早会消耗完的。这个问题,操作系统能做什么?操作系统不需要做多少事,只需要支持IPV6就可以了。
说到设备识别,头痛的问题,就开始来了,就目前而言,并没有任何一个物联网方案能完美解决设备识别的问题。一个最简单的智能交通系统,要实现这样的功能,哪个方向有车来,就开哪个方向的绿灯,都有车来,就根据流量智能调整红绿灯周期。问题就来了,你如何判断路上过来的是一辆车,还是一条狗!东西向有车来,南北向跑来一只狗,绿灯给谁放行?
识别车和狗,还是最基本的识别问题,只是识别物种,还没有要你识别个体呢。识别有两个层次,一是人和物之间的互相识别,当然主要是人识别物,另一个是物和物之间的识别。由于人的智慧,人会根据许多的参考条件来进行模糊识别,人工智能也可以这样做,但人工智能毕竟无法跟人比,只能在有限条件下,做简单的辅助识别。物联网不是要有智慧么?要为个体提供专属服务么?做不到识别,一切妄谈。有些朋友会想到,用它的128位IP,或者唯一的MAC地址,不就可以了么?对不起,地址只能起到区别的作用,是起不到识别作用的,除非你为地球上的每一类物体都进行分类,不同种类的物体,给分配不同的IP段。可行么?拉倒吧,不说自然界每天都在诞生的新物种,或者新发现的物种,就是在创客之都深圳,创客们每天新设计出来的新奇玩意,你都数不过来。自描述是一个办法,因为绝大多数的物联网应用,只是要求识别部分类别的物体,回到前面所讲的智能交通,只要所有的汽车,都用一句“I am a car,。。。”来描述,就不会跟跑过来的狗弄混。当然,对于具体应用而言,它不需要识别全地球的智能设备,能够识别跟具体应用相关的设备就行了,可以自己定义识别规则,这纯粹是应用自己的事,操作系统真的没有太多事做,你只能做些辅助线的工作,例如把物体的身份证号和自描述语句传递给应用程序,仅此而已。
最大的问题是沟通,沟通也分为人和物沟通与物和物之间沟通,就是互相明白对方在说什么。让“物体”说同样的话,互相听懂,这是最困难也最缺乏标准也是不可能有标准的。如果是物与人之间沟通,就好办多了,举个例子吧,一个智能温控器,显示一个按钮,无论在按钮上显示向上箭头,还是三角符号,或者英文“up”,或者中文“上”,人一看,都能知道这是控制温度上升用的。但机器不行,你必须转化为编码,像“03”表示温度上升,“04”表示下降,其他厂家生产的主控设备,如何知道“03”而不是“08”表示上升,如何让所有厂家生产的温控器也用“03”表示温度上升,“04”表示下降,这就有很大的问题。能够用标准去统一千万种物联网节点输出的数据和接受的控制信息格式呢吗?你能穷举物联网中数以千万计的物体所需要输出的数据和接受的控制命令,一一予以编号么?即使现有的物体都编号了,新冒出来的物种如何及时编号呢?即使解决了编号问题,还有传输顺序呢?数据包里面如果有温度,有湿度,也有告警信息,这些东西在数据包里面怎么排列,都能搞出无数种组合出来。所以,根本不可能有标准去规范物联网中万千种物体的状态、测量、控制命令的格式,各智能硬件的生产厂家,一定是自由飞翔的。事实上,也确实有通过穷举网络中所有需要传输的信息的规范,例如CANOPEN的“对象字典”,每一个CANopen设备里,都存储了一部字典,其主要构成部分是通用字典,这样的话设备与设备之间就能直接进行对话了。ZigBee协议通过profile和cluster ID编码,来列举部分ZigBee设备常“说”的话,使ZigBee设备之间互相听懂。但这两协议,都没有局限于穷举,都是开放的,CANOPEN允许在通用字典外,定义个性化字典,ZigBee也没有允许使用非标准定义的profile和cluster。无论是对象字典,还是profile,都只是在极小的一个领域中穷举,它所规范的信息,与物联网中的信息相比,沧海一栗而已啊。而且标准其实是很不靠谱的,所有标准,都是围绕一个非常小的领域进行,尚且无法避免人们阅读标准后的不同理解,不同理解导致的是不同的执行结果。变电站自动化,这么小的一个领域,有严谨规范的协议,全国只有几十个厂家,而且在国家电网的强力推动下,花了不下几十亿,几年时间,做过无数次互操作测试,才基本统一了设备间传输的信息格式,设备之间才勉强可以对话。
如果能解决设备识别和设备间“沟通”问题,那么智能设备间的互操作就水到渠成了,由于在“识别”和“沟通”方面,无法形成一个开放的、广泛适用的标准,许多物联网系统就另辟蹊径,尽可能绕过标准问题。同时提供智能硬件开发平台以及通用操作系统的中间件,或者开发一个跨界系统,使物联网中不同设备上使用相同的开发工具,例如liteOS,就提供了iOS和Android上的中间件,我则直接把操作系统设计成既适用于通用设备,又可以在智能硬件上跑。人与物之间的操作问题,可以通过远程终端的方案,完美地解决。传统的非智能设备,人和物直接的操作,是通过文字、图形、按键、触屏这些介质来完成的,在物联网世界里,无非是操作介质和执行操作的智能硬件之间,隔了个空间距离而已。手持的操作界面,就是一个显示和操作终端而已,所有操作,对于设备来说,就像在设备上直接操作一样,这样才能规避没有标准的实事。例如空调的控制命令,你就告诉空调,用户按了向下的箭头就好了,空调自己知道那是要降温。但如果手机把遥控命令翻译成命令码下发的话,因为没有标准,每家的命令码都不一样,怎么办?这不是踏进没有标准的泥潭了么?下面我们来谈一种不靠谱但广泛使用的方案,和两种比较靠谱的方案。
先谈谈不靠谱的方案,现在有些智能硬件厂家,开发专门的APP让用户操作智能硬件,这是死路一条,为什么呢?就以智能家居为例吧,假设家里安装了海尔的智能冰箱,美的的智能微波炉,西门子的智能热水器,创维的智能电视,格力的智能空调,还有各种智能开关,温度、湿度传感器等等。你的手机要为每个智能设备安装一个APP,密密麻麻摆满你的手机,那些密集恐惧症的患者,非跳楼不可。所以,需要安装厂家专门开发的APP才能操作的物联网方案,都是不靠谱的。
两种靠谱的方案,是HTML和远程桌面。
远程桌面是一个很好的解决方案,手机只是一个远程显示终端,而不是一个功能终端,手机只充当节点的显示器和触摸屏,这就要求,节点上的操作系统,其gui必须支持远程桌面,该远程桌面必须具备以下特性:
- 极其省资源,必须能够在只有几十K内存的节点上运行,你总不能要求一个微波炉控制器拥有数M的内存吧。
- 极其节省带宽,有些节点的功耗非常低,低功耗意味着低主频,即使你用WiFi接口,其传输带宽也必然非常小,要在非常低的速率下实现远程桌面,是一个挑战。我做过测试,普通的非动画桌面,串口就可以流畅传输。
- 无论节点本身是否有显示器、触摸屏、按钮,都可以实现远程界面。
使用远程桌面后,你的手机只需要安装一个智能设备APP,点开该APP后,你家里的所有智能设备都会被罗列在里面。
远程桌面的缺点是,动画显示很困难,尤其是大面积的动画,有些消费品是有这个需求的,这种时候,就要使用HTML了。除了动画外,远程界面的优势还是很明显的。
首先是兼容性问题,浏览器的标准化程度其实不高,网银挑浏览器大家都知道了,就是准备这次视频之前,测试过几个直播网站,既挑浏览器,又挑操作系统,很令人失望。
其次是一致性问题,有许多智能硬件,本机是有显示界面的,比如冰箱,在家里,你可能习惯于直接在冰箱上操作,用冰箱本身的界面操控设备,在外面,你就用手机操作,界面跟冰箱上的界面完全一样,就像站在冰箱前操作一样,无须学习两套界面。如果冰箱上和手机上的界面不一样的话,你会抓狂的,远程桌面天生就是完全一样的。而使用HTML的话,你则要自己维护两份界面的一致性,不要小看维护这个一致性问题,搞过硬件的人就知道,维护原理图和bom表的一致性,是一个致命的工作;维护过两个以上并行软件版本的人也应该清楚,确保两个版本应该相同的部分是一致的,是非常困难的。
大家来看一个有趣的图片,某网站的NBA转播界面,比分以不同的形式,出现在同一个界面的3个位置,居然都不一样。
说了那么多物联网应用,气质在工业控制上,才是远程界面真正体现价值的地方,有兴趣的同学,欢迎私下跟我交流。
以上是物联网的核心基础问题,其实物联网的问题远远不止这些,试举几个:
- 信息安全问题,斯诺登事件,使人无法相信网络,特别是中心服务器,过去,人们认为闭源可以确保安全,但斯诺登事件,使人们不相信闭源服务器的运维组织,反而开源更易于获得信任。无中心的可信连接,点对点通信可以绕开不受信任的云。
- 普通老百姓对于安全性的担心,更为直接些,例如,智能门锁会不会被人破解呢?黑客贼是否可以通过家里电器的开关情况知道何时家里没人而方便下手呢?家里的摄像机是否会被黑客控制?
- 使用寿命问题,长寿命的基础设施,长期维护和服务很困难,坏了谁来修,供应商倒闭了呢?比如智能门锁,普通门锁用几十年基本不会坏,而智能门锁则不然,电子设备普遍不能超过10年,大多数5年就坏了。
- 电子设备可靠性问题,智能灯泡的控制器坏了,开不了或者关不掉怎么办?
- 降低研发成本,操作系统需要提供提供易学易用的开发方法和开箱即用的解决方案。
稍微总结一下,操作系统究竟解决了物联网的什么问题。
连接:操作系统通过集成常见的网络协议栈,例如TCP/IP、ZigBee、蓝牙、WiFi驱动等,算是为解决连接问题作出了贡献。
智能硬件间的区别和识别:这两个问题,似乎真的跟操作系统没啥关系,基本上只能为同一厂家产品之间的“区别和识别”提供部分帮助。
沟通和互操作:物和物之间的沟通和互操作,操作系统基本上看热闹而已,同样只能对使用同一个厂商提供的开发工具开发的特定应用提供一些帮助,其互操作,基本仅限于使用它们的开发工具开发的智能硬件,且主要是物和人之间;人和物之间的互操作,支持支持远程桌面和webserver的操作系统能够提供比较完善的帮助。
作者简介:罗侍田 都江堰操作系统(简称djyos)创始人,长期从事嵌入式系统开发。