• 阿里云物联网平台测评:以温度报警器开发为例


    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个。用于实时消息推送的扩容。
    hostAMQP接入域名。{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}}}
    
    • 1

    可以看到,设备上报的温度计对应的时间信息,已经发送到我们的客户端程序了。

    对于业务平台而言,我们只需要构建一个maven工程,然后引入阿里云Demo项目中的依赖,并将AmqpClient客户端加入到我们的业务平台即可。

    5. 小结

    第一,说一下真实设备接入问题,上面的测试我使用了设备模拟器,这个比较简单快速。如果企业具有硬件研发人员,则可以使用阿里云物联网平台的Link SDK实现硬件的快速接入。

    第二,说一下上行指令和下行指令问题,上行指的是设备将消息发送到物联网平台,然后物联网平台将消息传输给业务平台的过程。前面所描述的温度报警器上报温度值即为上行指令。

    而下行指令指的是业务平台主动发送命令给物联网平台(一般通过HTTP/HTTPS),然后物联网平台将命令发送给设备的过程。

    第三,说一下业务平台的功能设计。上面我们已经接收到报警器上传的温度值了,我们可以根据具体情况(例如温度大于50度)给用户发送报警信息。可以通过短信、电话、微信消息来通知用户。

    真实设备出厂时,贴上包含设备信息的二维码,用户扫码后填入自己的手机号、住址等信息,这样用户信息就跟设备信息绑定起来了。

    最后总结:使用阿里云物联网平台,软硬件研发人员都只需要跟物联网平台对接,阿里云物联网平台具备完善的SDK和文档,十分方便。另外,基于阿里云的技术基石,企业可以轻易的享受高性能、高并发、高可用、高度安全、高性价比,非常有意义。

  • 相关阅读:
    Unity Samples和帧动画的问题
    C++之Singleton单例和单例模板类讲解
    App前端开发跨平台框架比较:React Native、Flutter、Xamarin等
    php实战案例记录(1)删除语句之TRUNCATE TABLE和DELETE FROM
    独立站建站实操:斗篷使用、AB收款【FP商家不能错过】
    Reactor和Proactor
    基准测试工具 --- BenchmarkDotNet
    Laravel swagger接口文档生成和管理
    QT自定义拖放_图片的移动
    解决websocket使用@Autowired、@Value获取值为null解决方法
  • 原文地址:https://blog.csdn.net/woshisangsang/article/details/125757586