1. 物联网平台概述
我曾在一家智能仪表公司担任软件研发部负责人,对物联网相关业务还是比较熟悉的。在公司的3年期间,主持或参与了多个物联网相关项目的开发工作。
一般来说,物联网项目可以划分为设备--物联网平台--业务平台,如下图:
具体解释下:
- 设备即真实硬件设备,可以通过各种网络协议与物联网平台通讯,最容易理解的就是通过2G/3G/4G进行通讯。当然,由于物联网设备往往要求耗电量低(长续航)、通讯流量低(低成本),所以会采用COAP/MQTT等专门设计的协议进行通信。
- 物联网平台可以与设备进行通信,包括接收设备上报的数据,以及对设备下发命令。
业务平台一般意义上就是我们开发的应用系统了,我们的业务平台无需直接跟设备协议对接,而是通过物联网平台处理。
上图中,我使用了阿里云物联网平台的示意图。实际上,设备与物联网平台之间的对接协议是多样化的(包括MQTT/COAP等),物联网平台与业务平台的对接也是多样化的(包括消息队列/HTTP消息推送等)。
2. 阿里云物联网平台的优势
物联网平台的搭建,其实可以有2种路线。
第一种是企业自研。由于物联网平台的复杂性,这种方式成本高、周期长,尤其是物联网平台往往面向海量物联网设备,技术难度是相当大的。
在物联网领域,百万、千万级的设备在线,十亿、百亿级的数据流量是比较常见的。
第二种是使用成熟的物联网平台,例如运营商提供的物联网平台,再就是云厂商提供的物联网平台。
此处以阿里云物联网平台为例,介绍下其优势。
2.1 快速接入
如果是自研的话,免不了跟硬件研发人员沟通设备接入细节。由于应用软件开发人员往往不懂底层硬件通讯协议和机制,所以这样的沟通环节会令人头痛。
如果使用物联网平台,硬件研发人员可以使用设备端SDK,快速连接设备上云,效率高。
如下图,阿里云物联网平台已经提供了多种Link SDK并具备详细文档,相关技术也很成熟。硬件研发人员可以直接使用SDK接入,软件开发人员也只需要面向物联网平台编程,双方都可以实现快速开发。
2.2 超高负载能力
阿里云支持亿级设备规模,自动扩展,保证连接稳定性,设备消息到平台处理时长在50ms以内。
同时具备百万并发能力,架构可水平扩展。核心消息处理系统采用无状态架构,无单点依赖,消息发送失败可自动重试。
原来在开发过程中的高并发、高性能等核心痛点问题,直接就解决了。
2.3 可用性
一些物联网使用场景,例如消防设备报警,是要求极高的可用性的。
阿里云物联网平台采用去中心化,无单点依赖,拥有多数据中心支持。承诺服务可用性达到99.95%以上,未达到可按标准理赔。故障处理1分钟发现、5分钟定位、30分钟解决。
所以采用物联网平台,可用性这块也是相当放心了。
2.4 安全性
看看阿里云物联网提供的安全机制,如果企业自己实现未免有点太复杂了。
- 等保2.0版(三级等保),提供多重防护,保障设备数据安全。
- 接入层使用高防IP防止DDoS攻击。
- 设备认证保障设备安全与唯一性。
- 设备数据传输链路支持TLS加密,保障数据不被篡改。
- 核心密钥和数据加密存储防窃取。
- 云盾护航和权限校验保障云端安全。
- 平台安全由阿里云安全团队守护。
2.5 性价比
除去研发成本,企业在运营阶段要维护的服务器、数据库、消息队列、缓存,无疑会产生庞大的时间和金钱成本。
使用物联网平台的话,计费方式灵活多变,而且性价比很高。
以阿里云物联网平台为例:购买设备数为1万个、消息上下行TPS为100条/秒,规则引擎TPS为100条/秒、总费用在7416元/年。
3. 温度报警器开发
接下来以温度报警器为例,介绍使用阿里云物联网平台开发该产品的全流程。
3.1 开通物联网平台
阿里云产品较多,按下图选择【物联网平台】
进入物联网平台后,点击【立即开通】。
开通后可以看到一个公共实例,这个目前是免费的,我们就用公共实例进行温度报警器开发。
3.2 创建产品
进入公共实例,依次点击【设备管理】-【产品】-【创建产品】:
按下图创建温度报警器产品即可,可以看出我们的设备是通过wifi连网的,然后通过设备密钥进行认证。
3.3 添加设备
接下来,我们添加一个温度报警器产品类型的设备,此处的设备就是与现实中的硬件设备对应的。
点击【添加设备】后,按下图示例添加一台设备。
添加完成后,点击【一键复制设备证书】。
证书信息建议保存备用,具体内容如下:
3.4 定义产品模型
虽然我们创建了产品,但是产品能干啥,有什么属性和功能,目前都不明确。我们可以通过定义产品模型来明确。
进入公共实例的【产品】菜单,点击【查看】:
在【功能定义】中,点击【编辑草稿】。
然后点击【添加自定义功能】。
按下图添加温度属性,对应设备上报的温度。
最后别忘了点击【发布上线】,否则新增的功能不会生效。
3.5 开发硬件设备
此时可以让硬件研发人员,使用阿里云设备端SDK,开发硬件设备。在此期间如果业务平台软件开发人员需要测试,可以用物联网平台提供的【设备模拟器】先行测试,后面会演示如何使用模拟器。
3.6 订阅设备消息
阿里云物联网平台提供了订阅设备消息的功能,如下图,通过AMQP通道将消息传送到我们自己开发的业务系统。
进入公共实例,依次点击【规则引擎 】-【 服务端订阅】-【消费组】-【创建消费组】。
如下图创建温度报警器消费组。
然后依次点击【规则引擎】-【 服务端订阅】-【订阅列表】-【创建订阅】。如下图所示,完成温度报警器产品的设备上报消息订阅。
3.7 开发业务平台
接下来可以开发业务平台,接收设备上报的消息了。
首先下载阿里提供的示例代码包。
该示例是一个maven工程,将工程导入到开发环境如IDEA或Eclipse。
然后打开AmqpClient.java
,修改如下参数:
具体参数说明如下:
参数 | 说明 |
---|---|
accessKey | 登录物联网平台控制台,将鼠标指针移至账号头像上,然后单击AccessKey管理,获取AccessKey ID和AccessKey Secret。 |
accessSecret | 同上 |
consumerGroupId | 消费组ID |
iotInstanceId | 实例ID,只需传入空值。 |
clientId | 客户端ID,需您自定义,长度不可超过64个字符。可以使用AMQP客户端所在服务器UUID、MAC地址、IP等唯一标识。 |
connectionCount | 启动AMQP客户端的连接数,最大不超过64个。用于实时消息推送的扩容。 |
host | AMQP接入域名。{uid}.iot-amqp.{YourRegionId}.aliyuncs.com,其中{uid}:您的阿里云账号ID。可登录物联网平台控制台,将鼠标指针移动到账号头像,查看账号ID。{YourRegionId}:请替换为您的物联网平台设备所在地域的Region ID。 |
4. 温度报警器测试
项目参数配置完成后,运行AmqpClient类。此时在消费组详情中可以看到,客户端已经在线了。
此处的客户端ID,即配置的clientId
参数,说明订阅已经生效。
依次点击【监控运维】-【设备模拟器】-【启动设备模拟器】。
然后上报一个温度值100,如下图
点击【发送指令】后,控制台日志输出如下:
由于内容太长,截图不好展示,我提取关键信息如下:
{"deviceType":"CustomCategory","requestId":"1657767675834","gmtCreate":1657767676363,"deviceName":"alarmDevice1","items":{"temperature":{"value":100,"time":1657767676360}}}
可以看到,设备上报的温度计对应的时间信息,已经发送到我们的客户端程序了。
对于业务平台而言,我们只需要构建一个maven工程,然后引入阿里云Demo项目中的依赖,并将AmqpClient客户端加入到我们的业务平台即可。
5. 小结
第一,说一下真实设备接入问题,上面的测试我使用了设备模拟器,这个比较简单快速。如果企业具有硬件研发人员,则可以使用阿里云物联网平台的Link SDK实现硬件的快速接入。
第二,说一下上行指令和下行指令问题,上行指的是设备将消息发送到物联网平台,然后物联网平台将消息传输给业务平台的过程。前面所描述的温度报警器上报温度值即为上行指令。
而下行指令指的是业务平台主动发送命令给物联网平台(一般通过HTTP/HTTPS),然后物联网平台将命令发送给设备的过程。
第三,说一下业务平台的功能设计。上面我们已经接收到报警器上传的温度值了,我们可以根据具体情况(例如温度大于50度)给用户发送报警信息。可以通过短信、电话、微信消息来通知用户。
真实设备出厂时,贴上包含设备信息的二维码,用户扫码后填入自己的手机号、住址等信息,这样用户信息就跟设备信息绑定起来了。
最后总结:使用阿里云物联网平台,软硬件研发人员都只需要跟物联网平台对接,阿里云物联网平台具备完善的SDK和文档,十分方便。另外,基于阿里云的技术基石,企业可以轻易的享受高性能、高并发、高可用、高度安全、高性价比,非常有意义。