最近跟物联网行业和移动互联网行业的一些资深从业人员做了深入交流,就物联网操作系统的概念和必要性、定位等进行了充分深入的沟通。首先说明的是,物联网操作系统的概念被广泛认同。同时,对物联网操作系统在整个物联网领域的功能和地位,又有了更进一步的认识。下面简单总结,供业界的朋友们参考评论。
物联网操作系统的最基本功能,与Android操作系统在移动互联网领域的地位和作用类似。先看一下Android,其最大的贡献在于,实现了智能终端硬件和软件的分离。任何应用程序开发者,基本不用考虑智能终端的物理硬件配置(CPU型号、内存、各种外设等),只需根据Android提供的编程接口编写应用程序,就可以运行在所有基于Android的智能终端上。硬件的功能是有限的,如果软件和硬件紧密捆绑不分离,则整个系统的功能也是有限的。但是一旦把硬件功能剥离出来,则通过软件的变动,可以使得整个系统的功能大大扩充。举例来说,带闪光灯的拍照手机,如果硬件和软件捆绑,则其功能就仅仅局限于一台照相机和一部手机。但是软硬件分离后,就可以变成手电筒、信号灯等原来无法实现的功能。对于物联网来说,要实现类似移动互联网一样的良性发展,也需要达到软硬件分离的效果。物联网终端的硬件功能很有限,比如一个传统的车载OBD模块,仅仅提供定位、GPRS、车辆信息读取等功能。但是通过额外的应用软件,则可以把OBD模块变成一个防盗器(事先划定位置范围,超出后报警),甚至其它功能设备。保险公司也可以定制开发自己的程序,安装到OBD上,获取必要的数据。这种通过软件创新,把已知(硬件功能)变成未知(软件功能)的能力,才是激发人类兴趣的源泉,也是为行业带来活力的关键。
除此之外,物联网还需要达到另外一种分离:硬件驱动程序与操作系统内核的分离。考虑这样一种场景:电冰箱的内置摄像头坏了,重新更换了一个新型号、功能更强大的摄像头。这时候运行在冰箱内的操作系统,必须能够根据新摄像头的硬件特征(比如设备ID等),自动从网上下载对应的驱动程序,然后安装。这个过程对运行在操作系统上的应用程序来说是透明的。Android貌似是无法做到硬件驱动程序与操作系统内核分离的,一旦增加一个新的硬件,必须编写对应的驱动程序,然后重新编译Android内核。
下图示意了基于这两种分离思想(应用软件与硬件分离、设备驱动与操作系统内核分离),构筑的一个物联网生态体系:
图中的实线表示永久逻辑连接,虚线表示临时的逻辑交互。大概过程是这样的:
1、物联网终端(大到汽车、冰箱,小到门锁、追踪卡、手环等)上运行物联网操作系统,以及基于物联网操作系统的应用(APP)。APP从“M2MAPPStore”上下载;
2、物联网终端上运行的应用程序,由用户通过智能手机进行控制。智能手机通过本地通道(比如蓝牙、WiFi、Zigbee等)连接到物联网终端,控制终端上的APP的安装和卸载,以及M2M终端的相关配置(安全信息等);
3、一旦物联网终端上运行了一个APP,如果该APP是基于client-server模式(比如智能手机上的微信),则物联网终端需要跟APP的“应用程序后台”进行交互,实现业务逻辑;
4、物联网终端跟“终端管理后台”建立持久的通信连接,用于实时更新物联网操作系统内核版本、实时更新物联网终端的硬件驱动程序等。还是上面讲的例子,一台冰箱更换了内置摄像头,这时候物联网终端需要连接到终端管理后台,去下载对应的驱动程序。一般情况下,终端管理后台由物联网终端制造厂商建立并维护,比如针对家电领域,是由家电厂商建设的,针对汽车领域,则是由车厂建设;
5、物联网终端上运行的APP,由第三方开发者或者ICP/ISP开发,并上载到M2MAPPStore,供用户按照需求下载;
6、物联网终端之间能够通过本地通信通道(蓝牙、WiFi、Zigbee等)进行通信,这种通信无需借助后台。比如,汽车到达路口后,可以跟信号灯通信,向信号灯注册。这样信号灯就能够掌握各个方向的排队汽车数量,然后根据数量来决定信号的变换,达到优化交通的目的。物联网终端之间的直接通信(端端通信)是物联网关键能力之一,也是物联网区别于移动互联网的关键地方之一。
为加深对这个生态模型的理解,举一个餐饮行业的例子。先说一下需求吧,我经常去家门口的一家餐馆吃饭,而且每次去,点的餐食基本都一样。但现在的问题是,每次去都要排队,点餐,交钱,然后拿餐牌,找座位,等待。显然这是一个重复乏味的过程,如果能够通过自动化的物联网应用,使得这个过程简化或者自动化,那就很理想了。
我们开发一种通用的智能手环,智能手环上运行物联网操作系统。手环除了具备通用的闹钟提醒、身体生物指标测量和报告等功能外,还具备RFID功能,该功能的打开与否,由用户控制,比如甩一下手环、按一个按钮等。在餐馆门口,安装一套ID识别设备,一旦一个带手环的人进入餐馆,并打开了RFID功能,就立即被检测到。检测设备把进入者的ID上报给后端服务器,后端服务器进一步判断这个人是否已经有消费记录。如果没有,OK,遵循通常的点餐、交钱、等待等流程,但是这个过程中,后台系统会建立针对这个人的档案,并记录其点餐列表、等待时间、座位号等信息。
如果这个人第二次来就餐,那好了,运行在手环上的APP(由餐馆开发并上载到M2MAPPStore,由用户安装到手环上)会立即震动提醒消费者,并通过自带的小屏幕,自动把上一次点的餐食列表等信息呈现给消费者,让消费者确认是否点同样的餐食。如果确认点同样的餐食,则消费者只需要找个空闲的位置坐下,然后等待即可,手环上的APP会自动检测出座位号,并联系餐馆的后台服务器下订单。吃完后,通过手环确认一下,可自动完成支付,甚至可以对本次消费满意度点评。显然,排队、点餐、交钱等过程完全省略了,大大提升了就餐方便程度。
要实现这个过程,最关键的一点就是,手环上需要运行一个餐馆特定的APP,这个APP能够跟RFID联动,并跟餐馆后台交互,完成就餐过程的自动化。这样的APP可能有多个,因为你可能要去很多餐馆就餐。如果没有物联网操作系统的支持,这是无法做到的。或者说也可以做到,但是你的手腕上需佩戴很多手环,一个餐馆一个。这样的话,你的职业也变了,变成餐馆的活体广告牌了。
这个餐饮行业的应用,几乎把上面生态模型中的每个模块都涉及到了:手环与餐馆检测系统的交互,属于端端通信,手环上运行的APP,需要从M2MAPPStore下载。具体下载哪些餐馆的APP,由消费者通过智能手机控制。手环上的任何一个APP,都需要跟自己的后台进行通信。假设手环上的某个配件(比如某个按钮、甚至RFID等)坏了,需要更换一个新的,这时候手环需要跟终端管理后台进行通信,下载新配件的驱动程序。
上述过程的最核心需求,就是物联网操作系统支持的两大分离特性:应用软件和硬件分离,操作系统内核和硬件设备驱动程序的分离。
在物联网领域,很多情况下,硬件终端的功能比手环简单得多,无需或者无法运行第三方开发的APP。这种场景下,上述架构也可以很好的实现人与物的交互。举例来说,为了实现对环境的实时检测,未来可能会开发很多依靠太阳能供电、无显示屏等外设的“环境监测器”,以公共服务的形式,安装到任何可以安装的地方。用户通过智能手机,可以随时读取这些小玩意儿上的检测数据。这时候,如果是第一次读取某种型号监测器上的数据,则首先用手机上的M2MAPPStore客户端软件,扫一下监测器上的二维码,客户端会自动根据二维码中记录的信息,到M2MAPPStore上下载一个应用程序。这个应用程序调用蓝牙、Zigbee等无线服务,从监测器上获取数据,然后显示出来。
基于这样的一个物联网生态环境,可以改变很多既有的商业模式,达到更高效率的整体效果。比如下面这张图,说明了这个效果:
如果没有物联网操作系统,那么应用程序提供商(腾讯/阿里等)就需要跟硬件设备提供商进行紧密捆绑,形成联盟。这一个一个的联盟,有点“龙虎结姻”的感觉,强强联合,但又不是一类生物。对消费者来说,也非常麻烦。比如你买了跟阿里结成联盟的家电,那么就必须购买阿里的智能家居服务,即使腾讯做得更好,你也无法更换。但是如果有了物联网操作系统,那么就会打破这种紧密耦合的关系。硬件厂商只需要通过物联网操作系统,把硬件的能力暴露出来即可。互联网厂商只需要开发对应的应用程序,放到M2MAPPStore即可。具体怎么组合,由最终用户决定。可能的一种场景是,阿里的家电控制、节能等功能做得很好,而腾讯的用户感知、大数据分析做得更好,用户会在家电上同时安装两个APP,分别获取最好的体验。显然,这在没有物联网操作系统的时候是无法做到的。
还有一个好处,就是让更专业的人,去做更专业的事。互联网公司聚焦做用户体验,硬件厂商聚焦做硬件,GodgodandSatanuntoSatan。
基于这样一个生态环境架构,物联网操作系统的架构大致如下:
通过定义标准的硬件驱动程序接口,实现操作系统内核与硬件驱动程序的分离。通过引入Java虚拟机,并定义基于C语言的标准API接口,实现应用程序与硬件的分离。这与Android的实现思路有雷同的地方,但是也有不同的地方:
1、物联网操作系统的整体映像尺寸,必须是能够高度伸缩的,以适应硬件资源受限的应用场景。比如既能够适应手环等硬件资源相对丰富的应用场景,也能够适应环境监测器等不是非常智能的应用。具体来说,操作系统的尺寸,应该能够从10几K甚至更小,到数十M的伸缩量级;
2、除提供Java接口外,物联网操作系统还应该提供标准的C语言接口,以应对高效率、高实时性的应用。比如,物联网终端的生产厂商可以使用C接口,开发针对该硬件的高效应用,第三方企业则可以使用Java接口,开发可广泛移植到同类设备上的应用;
3、物联网操作系统的驱动程序框架,应该设计的足够灵活和足够兼容性,并能够动态加载和卸载设备驱动程序;
4、物联网操作系统的版本分支或者变种数量,会非常大。针对每隔行业,甚至每种硬件(比如汽车、冰箱等),都会有一个对应的版本,这需要编译开发工具进行良好的支持。
除此之外,物联网操作系统还有很多其它不同于一般智能操作系统的不同之处,在此不做详细描述。