登录注册   忘记密码

物联网应用开发(设备端、云端、移动端)平台调研报告

为了支持快速增长的物联网设备和应用,各式各样的物联网平台相继而出。本文是一篇详实的物联网应用开发(设备端、云端、移动端)平台调研报告。

一、背景

完整的物联网应用架构如下图所示。这幅图意味着传统的物联网应用开发包括设备端应用开发和用户端应用开发(注:用户端应用包括移动端应用和云端后台应用。移动端应用指和云平台的交互及移动端UI;云端后台应用主要是应用逻辑)。对于一个全栈工程师来讲开发一两个物联网应用或许不是件难事,但考虑到当今是一个物联网应用呈爆炸式增长的时代,物联网应用的开发至少应该是rapid和incremental的。

640.webp (29).jpg

物联网应用架构


二、现有的物联网开发平台

为了支持快速增长的物联网设备和应用,各式各样的物联网平台相继而出。但物联网平台是一个广泛的概念,细讲的话有如下分类。

TIM截图20180205170108.png

物联网平台分类

根据最近的调研情况,部分平台信息汇总如下:

1.Samsung SmartThings

描述:针对物联网用户端应用的快速开发平台,主要应用场景是Smart home。室内的智能设备基于ZigBee和Z-Wave协议连接到Samsung提供的Smart Hub,Hub通过无线或以太网直接和云端相连。移动端设备通过4G/无线接入云端,移动端App可以远程访问和控制室内设备。

640.webp (30).jpg

三星SmartThings

应用示例:

应用名称:智能温控

应用描述:当温度大于某个阈值自动打开空调制冷开关,否则关闭空调制冷开关。用户也可以手动控制空调制冷开关。

应用开发:


Step 1. 登录控制台并创建应用,参考API编写应用代码。

640.webp (31).jpg

用户端应用开发

Step 2. 安装和发布应用,在手机端导入DIY的应用。

640.webp (32).jpg

移动端App导入DIY应用

没有真实设备?没关系,使用SmartThings提供的simulator模拟真实设备来测试应用。

640.webp (33).jpg


Q&A:

Q1:使用SmartThings编写的代码可以生成什么应用,如何生成?最终的应用运行在哪里?


A1:使用SmartThings可以开发物联网用户端应用。应用生成流程可以归结为:一份(基于Groovy SmartThings API编写)应用代码自动生成手机端应用和后台应用。


手机端应用运行在手机端的SmartThings Mobile App,负责和用户交互,可以控制远程设备和获取设备数据。根据应用代码中的preferences和SmartThings定义的UI模板自动生成手机端UI。


后台应用运行在SmartThings cloud或者Smart Hub,负责执行应用逻辑。后台应用可以是简单的基于某个条件触发特定事件(例如前面应用示例中的温度大于30就打开空调开关),也可以是复杂的用户个性化定制。由于后台应用的业务逻辑完全由用户的应用代码定义,所以Smart Hub和SmartThings cloud作为应用运行的载体必须保证用户应用不能影响其他应用(注:可能是同一用户的不同应用,也可能是其他用户的应用,也可能是系统应用)的执行,所以后台应用实际运行环境是沙箱。而且为了保证应用之间不能相互影响,SmartThings禁用了一些原生的Groovy API,包括文件操作、系统调用、线程操作和一些JVM设置等。

640.webp (34).jpg

自动生成用户端应用

Q2:使用SmartThings开发应用,如何实现与设备的交互(例如控制设备和获取设备数据)?

A2:SmartThings封装了很多功能(Light、Motion、Switch等),每种功能都提供特定的接口(on、off、temperature),利用SmartThings封装的功能模块可以快速开发上层应用。功能模块就是对具有相同功能的真实设备集合的抽象,对功能模块的接口调用实际上就是向真实物理设备发送指令,对应ID或IP的物理设备收到指令后会执行相应动作,例如对theswitch.off的执行解释如下所示:

640.webp (35).jpg

theswitch接口off的实现

640.webp (36).jpg

zigbee调用off的实现


所以,SmartThings规定了一套设备交互协议(如下图所示),凡是接入到SmartThings的物理设备都要对来自SmartThings的指令做出正确的响应,所以SmartThings也提供了支持SmartThings接入协议的设备列表。

640.webp (37).jpg

交互协议(设备类型)

640.webp (38).jpg

交互协议(设备控制)


2. ARM Mbed

描述:物联网设备端应用快速开发平台和设备托管平台,主要应用场景是物联网设备端应用的prototyping。Mbed平台提出了物联网设备操作系统Mbed OS,现支持100 种开发板。基于Mbed OS(C/C )的设备端开发与具体硬件平台无关,跨平台、统一的API可以帮助开发者完成设备端应用的快速开发。

640.webp (39).jpg

ARM Mbed OS

应用示例:

应用名称:LED blink

应用描述:控制开发板(Tiny BLE)间隔闪烁LED灯。

应用开发:


Step 1. 登录控制台,选择Tiny BLE平台(这里选择平台针对的是最终的可执行文件格式,但用户代码可以在不同平台间无缝迁移),创建新的program,编写应用代码。

640.webp (40).jpg

设备端应用开发


Step 2. 下载(云端编译后的)可执行文件,烧入开发板。

640.webp (41).jpg

下载云端编译后的可执行文件

640.webp (42).jpg

应用在设备端的执行状态


Q&A:

Q1:Mbed平台如何做到设备端应用开发和具体硬件平台无关?


A1:Mbed OS支持C/C 设备端应用开发,Mbed OS为设备应用开发提供的统一API本质上就是对各类硬件平台Driver、Platform、Network等功能对应的C/C 封装。基于C/C 自身的跨平台性质,最终的设备端应用开发就和平台无关了,开发者只要选择不同硬件平台(注:选择平台好让云端选择相应的交叉编译链)就可以生成对应不同异构设备的应用程序。其实,Mbed OS并不是板子自带的,它并不内嵌于Mbed提供的硬件开发板。Mbed OS本质就是一些库(注:库就是将不同平台的相同功能实现并封装成统一的调用接口),这些库和开发者的应用程序一同编译得到可执行文件并烧入到开发板,所以当你用Mbed CLI本地编译Mbed程序就可以发现Mbed OS库也会被编译。而AliOS Things同样作为一个物联网设备的操作系统也是这么干的,它和Mbed OS的区别也仅在于API、OS提供的功能、支持的开发板类型不同而已。

640.webp (43).jpg

设备端程序编译时Mbed OS也被编译


3. IBM Watson

描述:物联网设备托管平台。IBM Watson允许用户端应用基于MQTT协议接入平台来获取托管设备数据或者控制托管设备,也允许用户端应用使用REST API(HTTP)管理(例如增、删、改、查)托管设备。IBM Watson提供了针对Python、Node.js、Java、C#的SDK,SDK包含用户端基于HTTP和MQTT接入平台、管理和控制设备的API,从某种程度上也加速了用户端应用的开发。IBM Watson允许设备端应用基于MQTT协议接入平台来上传或接收消息,也允许设备端应用使用REST API(HTTP)发布事件。IBM Watson提供了针对Python、Node.js、Java、C#、C 、C的SDK,SDK包含设备端基于HTTP和MQTT接入平台、上传数据和接收消息的API,从某种程度上也加速了设备端应用的开发。除此之外,基于规则引擎作为消息转发代理,IBM Watson把IoT和其他cloud services相结合来替代特定场景的用户端应用,例如邮件提醒、Webhook、Node-RED等。

640.webp (44).jpg

IBM Watson

应用示例:

示例一:室内环境监测

应用描述:在用户端实时查看远程设备监测的室内湿度。

应用开发:


Step 1. 使用IBM提供的设备端SDK和用户端SDK分别完成设备端应用开发和用户端应用开发。


Step 2. 将可以执行文件烧入设备,运行用户端应用程序。在控制台的可视化数据和用户端应用接受的数据一致。

640.webp (45).jpg

远程节点数据可视化服务

640.webp (46).jpg

设备端verbose

示例二:IBM Watson 规则引擎实现温度报警。

640.webp (47).jpg640.webp (48).jpg

用户定义规则规则触发后收到邮件提醒

Q&A:

Q1:IBM Watson提供的设备端和用户端应用SDK与Mbed和SmartThings平台针对的设备端、用户端应用开发有什么区别?


A1:Mbed平台和SmartThings平台都分别提供了一套跨设备的应用开发API,基于Mbed平台开发的设备端应用程序可以在不同异构设备快速迁移,基于SmartThings开发的用户端应用在移动端也是跨平台的。而IBM Watson提供的SDK仅限于设备接入平台,具体应用逻辑、设备驱动开发和传统开发模式无异(类似于阿里物联网套件和百度IoT Hub提供的设备接入SDK[1][2])。SmartThings开发的用户端应用可以在云端运行,即使用户关闭移动端应用程序,如果用户设定规则被触发,对应的事件也可以自动执行。而IBM Watson开发的用户端应用只能在移动端运行,意味着用IBM Watson开发的用户端应用如果被意外关闭或者移动端设备关机,用户事先设定的规则无法被检测,对应的触发事件也不能够执行。


4. Azure IoT

描述:物联网设备托管平台。和IBM Watson类似,提供用于快速接入平台的设备端应用SDK和用户端应用SDK。同样,基于规则引擎作为消息转发代理,Azure把IoT和其他cloud services相结合来替代特定场景的用户端应用,例如Power BI、机器学习、数据存储等。像这样利用规则引擎做消息转发,以IoT cloud services方式实现应用的云平台还有AWS IoT、百度IoT Hub和阿里物联网套件。


应用示例:

示例一:Azure IoT Web应用实现数据可视化

640.webp (49).jpg

640.webp (51).jpg

IoT 规则引擎 数据可视化

示例二:Azure IoT 逻辑应用 服务总线实现IFTTT(当温度大于30℃,发送邮件警告用户)

640.webp (50).jpg

IoT 规则引擎 邮件提醒

示例三:Azure IoT 存储服务实现数据记录(导出历史数据)

640.webp (52).jpg

IoT 规则引擎 数据存储


Q&A:

Q1:同样作为设备托管平台,IBM Watson、Azure IoT、AWS IoT、百度IoT
Hub、阿里物联网套件、中移OneNet有什么区别?


A1:设备托管平台将设备管理、数据存储和分析作为主要任务,以上平台都具备。具体区别包括:不同平台的服务种类不同(注:这里的服务种类指IoT cloud services中的cloud services,例如存储服务、可视化服务等)、计费方式不同、支持协议(MQTT、HTTP、CoAP)不同、限制不同(消息长度限制、消息条数限制、话题数量限制、消息格式限制等)。


5. 机智云

描述:物联网设备端应用和用户端应用开发平台,主要应用场景是物联网应用prototyping,面向服务对象包括个人开发者、设备厂商、产品厂商、开放服务厂商,类似于京东微联(Alpha-IoT开放平台)。基于用户配置的产品信息(例如数据点、产品Key和Secret等,本质上就是物的抽象模型。数据点指设备上行的数据流和下行的控制流,例如温度、湿度、开关)自动生成设备端应用程序和移动端应用程序。

640.webp (53).jpg

机智云自动生成设备端程序和移动端程序

应用示例:

应用名称:遥控LED

应用描述:在用户端控制远程设备的LED灯

应用开发:


Step 1. 登录控制台,创建产品,配置数据点信息。

640.webp (54).jpg

定义产品

Step 2. 下载并安装自动生成的设备端应用程序和移动端应用程序。

640.webp (55).jpg

设备端程序自动生成

640.webp (56).jpg

移动端程序自动生成


Step 3. 打开移动端App,扫描设备并将设备连接到WiFi,远程控制LED。

640.webp (58).jpg

扫描设备并连接设备

640.webp (59).jpg

控制设备

640.webp (60).jpg

Arduino板载LED灯打开


Q&A:

Q1:机智云自动生成的应用代码包括应用逻辑吗?

A1:机智云提供的应用自动生成服务,不论是移动端应用还是设备端应用都不包括应用逻辑。自动生成的应用只提供云平台接入和交互的功能(发送消息到云平台和响应来自云平台的控制命令)。如果设备端有外接传感器,则开发者还需要在设备端应用程序添加对应传感器的驱动代码。相应的,移动端应用的处理逻辑也需要用户手动编写。


Q2:设备端接入云平台为什么需要借助移动端App?

A2:具体来说,设备端入网配置如下图所示:

640.webp (61).jpg

设备入网配置

设备的无线模块必须烧入机智云提供的GAgent固件。已经连入WiFi的移动端App会在某个频段发送广播包,具有GAgent固件的无线模块以SoftAP模式收到广播包会与手机建立连接,之后由手机配置设备接入WiFi网络与机智云平台通信。这样做除了平台接入的安全认证之外,自动生成的设备端应用下载后可以直接烧入设备运行。假如设备直接和无线AP连接,那么每次无线AP的密码或SSID变更后都需要修改设备端程序并重新烧入设备。所以通过GAgent作为网络接入代理,由手机端扫描设备并设置设备接入无线AP的配置更合理,而SmartThings也是这么做的。类似于机智云使用GAgent作为设备入网代理的还有京东微联的JoyLink。


Q3:京东微联和机智云有何不同?

A3:前面提到的应用场景和设备入网代理均是两个云平台的相同之处,除此之外二者都有一站式开发的特点,基本框架是一样的(产品定义 设备端SDK 移动端SDK)。不同之处在于具体开发细节 ,包括:


代码自动生成:机智云根据产品信息自动生成设备端应用和移动端应用的代码,开发者编译安装后可以直接测试;京东微联则需开发者手动导入SDK并填写对应的产品信息(feedid、云地址和端口、accesskey等)。


移动端应用:机智云提供的移动端SDK包括Android、IOS和Web;而京东微联则只有Web(H5 JS),最终发布的Web应用会集成到京东微联App内嵌的Web view中。


6. 阿里Link平台(内测版)

描述:物联网设备端应用和用户端应用开发平台和设备托管平台,主要应用场景是物联网应用prototyping,面向服务对象包括个人开发者、设备厂商、产品厂商、开放服务厂商,和机智云类似,但不同之处在于:


让物联网开发更加规范而不仅仅是简单的定义。例如定义物模型的有TSL、定义设备和云之间数据通信的有Alink、定义规则引擎的有DSL。有了规范,产品批量生成和异构通信网络等问题就解决了一半。


物联网和云市场的结合。在Link平台上开发的服务、插件、设备都可以上架到Link平台的云市场进行出售,可以理解为物联网界的淘宝市场。


以上几点也正如云栖大会宣传的Link平台战略:云端一体化使能平台、物联网市场、ICA全球标准联盟。


应用示例:

应用名称:室内环境

应用描述:监测室内温湿度,远程控制设备的风扇装置。

应用开发:


Step 1. 登录控制台,创建项目,创建产品,定义物模型。

640.webp (62).jpg

定义物模型


Step 2. 下载IoT SDK,基于Alink协议完成设备端开发。通过Link平台调试设备端应用。

640.webp (63).jpg

设备上报数据可视化

640.webp (64).jpg

控制设备

640.webp (65).jpg

设备状态


Step 3. 服务开发。创建服务,创建API,使用流式服务编排工具完成服务定义。服务中定义的API接口可以被用户端应用程序调用,类似于IBM Watson平台的REST API,但Link平台还允许用户自定义新的REST API。有一点局限是用户自定义的API并不能直接访问设备数据表,数据操作的API还是由Link平台提供。

640.webp (66).jpg

流式服务编排


Step 4. 基于Bone框架的Web应用开发。开发流程包括本地开发、本地打包上传到云端、云端部署发布。很遗憾,数据表访问服务并没有开放,所以这里使用简单的乘法器作为用户端应用。

640.webp (67).jpg

Web应用部署成功

640.webp (68).jpg

测试Web应用


Q&A:

Q1:阿里Link平台在物联网应用开发中提供了哪些自动化的过程?


A1:机智云为开发者提供了设备端MCU代码和移动端代码自动生成的服务。Link平台也提供MCU代码的生成,但仅限于数据透传模式。其余开发环节包括设备端应用开发(注:这里特指使用Alink数据格式的产品)、用户端应用开发均需要开发者线下实现。


Q2:阿里Link平台对第三方的支持?

A2:数据上传格式除了阿里定义的Alink之外还支持自定义数据上传格式,但开发者必须编写云端的数据解析脚本(注:云端执行脚本将自定义数据格式转换成Alink格式);数据接入方式除了设备之外还支持其他云平台的数据接入;服务开发除了基于流式编排工具之外也支持第三方服务,只要第三方服务存在并且提供已定义的接口;用户端应用除了使用Bone框架开发之外,还支持第三方Web应用开发,但第三方开发的Web 应用不能被Link平台托管。


7. 中移OneNet

描述:物联网设备托管平台。在Web GUI基于IFTTT规则配置用户端应用的逻辑,基于图形拖拽完成用户端应用界面配置。


应用示例:

应用名称:温度告警

应用描述:在用户端实时查看远程设备检测的室内温度,当温度大于一个阈值时发送邮件警告用户。

应用开发:


Step 1. 登录控制台,添加触发器,配置IFTTT规则(这里假设用户已经完成产品创建、设备创建和设备端应用开发)。

640.webp (69).jpg

配置规则

Step 2. 在应用管理创建独立应用,并绑定显示组件到对应的数据流。

640.webp (70).jpg

配置UI

Step 3. 应用测试。

640.webp (71).jpg

节点数据可视化

640.webp (72).jpg

规则触发后邮件提醒

Q&A:

Q1:使用Web GUI配置用户端应用(IFTTT配置和界面组件拖拽)和直接开发移动端应用(例如IBM的用户端应用开发)有什么区别?


A1:OneNet提供基于Web GUI的用户端应用快速开发方式,用户不需要写应用代码即可完成用户端应用开发。一方面应用实现简单、快速,但另一方面基于Web GUI的应用开发不够灵活(UI风格不能DIY、无法实现数据转换和计算、基于IFTTT定义的规则不能满足较复杂的应用逻辑)。相比于纯移动端开发的应用,基于IFTTT的用户配置即使在移动端应用退出后仍能奏效,这是因为用户制定的IFTTT规则配置会上传到云平台,每当云平台接收到新的节点数据都会检查相应的规则是否触发。像这样基于IFTTT规则配置用户端应用逻辑的平台还有中移和家亲。


三、总结

1. 如何区分物联网设备托管平台和物联网应用开发平台?

两种平台的应用场景不同。正如其名,设备托管平台专注于管理设备,面向智慧工业、智慧农业等领域,提供海量设备接入服务,云平台除了负责设备管理之外还需要对传感数据进行存储或分析。因此,云平台往往通过规则引擎将传感数据转发到其他云服务(例如前面提到的邮件、存储、可视化)做数据分析。设备托管云平台为设备应用开发提供的SDK往往是基于某种协议(MQTT、CoAP等)的库封装,仅为设备快速接入平台所用。SDK不关心数据上传、平台交互,例如IBM Watson平台提供的设备端SDK并不像机智云那样的功能丰富,机智云自动生成的设备端应用囊括了用户定义的产品信息、数据点上传、GAgent配对手机接入网络,智能家居、健康生活这样得应用场景注定机智云必须为开发者提供功能丰富的设备端应用开发;相对的,应用开发平台专注于开发物联网应用,面向智能家居、健康生活等领域,提供智能应用快速开发服务。就目前出现的应用开发平台可以有三类划分:

640.webp (73).jpg

物联网应用开发平台分类


Type I 用户端应用开发

描述:专注于用户端应用逻辑开发,提供统一的用户端应用编程API,根据用户编写的代码自动生成用户端应用程序。统一的API使得开发和平台无关,开发简易允许具有基础编程知识的非专业人士(甚至是SmartThings的普通用户)DIY应用。


代表:Samsung SmartThings

Type II 设备端应用开发

描述:专注于设备端应用逻辑开发,提供统一的设备端应用开发API。设备端开发和具体硬件平台无关使得相同应用代码可以在不同硬件平台间快速迁移。


代表:ARM Mbed,AliOS Things

Type III 一站式开发

描述:专注于设备端应用和用户端应用的平台接入、平台交互功能。开发者只需关注设备端和用户端的应用逻辑开发,无需关心端和云平台的交互细节。从硬件到软件有完整需求的产品厂商,可以选择这一类平台。


代表:机智云、京东微联、庆科云、阿里Link平台


2. 如何选择物联网云平台?

640.webp (74).jpg

物联网平台简要对比

您的评论:

0

用户评价

  • 暂无评论