您当前的位置:首页 > 电脑百科 > 人工智能

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

时间:2020-11-10 10:31:33  来源:  作者:

简介: IoT企业物联网平台开发实战

企业从联网平台开发实战

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


通过阅读本文你将学会一下技能:

  1. 设备通过MQTT协议与您在阿里云上购买的IoT企业实例建立双向连接,上报设备采集的数据,监听云端下达的指令;
  2. 通过规则引擎配置把上报的数据实时存储到指定数据库,无需编写代码
  3. 通过规则引擎配置把上报的数据实时流转到业务服务器,需要使用AMQP协议SDK
  4. 业务服务器调用IoT平台的API,下达控制指令到设备端

创建企业实例

首先,我们登录物联网平台控制台(https://iot.console.aliyun.com), 点击购买实例来创建一个企业实例。

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


然后,在购买页面,根据实际业务需求,选择地域、实例类型、设备数量、消息上下行TPS、规则引擎TPS等参数,点击立即购买,付费成功后,即可看到企业实例创建中。

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


稍等几分钟后,企业实例创建完成。进入企业实例,我们可以看到当前规格参数,设备接入点信息,AMQP订阅接入点信息,云端API调用接入点信息。如下图:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 

创建产品和注册设备

在企业实例的设备管理页面,我们需要先创建一个产品家庭温控器,数据通信以JSON格式,认证方式为设备秘钥

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


在产品的功能定义页面,我们添加温度和湿度两个属性,具体细节如下图:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


最后,我们在设备管理页面,基于家庭温控器产品,注册一个物理设备,并获取设备身份认证的三元组。如下图:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 

设备接入和上报数据

获取设备身份三元组后,即可通过MQTT协议接入到我们开通的企业实例。设备端应用程序逻辑如下图:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


完整的Nodejs示例代码如下:

const mqtt = require('aliyun-iot-mqtt');
// 1. 设备身份信息
var options = {
    productKey: "产品productKey",
    deviceName: "设备deviceName",
    deviceSecret: "设备deviceSecret",
    host: "实例化MQTT接入点"
};

// 2. 建立MQTT连接
const client = mqtt.getAliyunIotMqttClient(options);

client.subscribe(`/${options.productKey}/${options.deviceName}/user/get`)
client.on('message', function(topic, message) {
    console.log("topic " + topic)
    console.log("message " + message)
})

setInterval(function() {
    // 3.上报温湿度数据
    client.publish(`/sys/${options.productKey}/${options.deviceName}/thing/event/property/post`, getPostData(), { qos: 0 });
}, 5 * 1000);

function getPostData() {
    const payloadJson = {
        id: Date.now(),
        version: "1.0",
        params: {
            temperature: Math.floor((Math.random() * 20) + 10),
            humidity: Math.floor((Math.random() * 20) + 10)
        },
        method: "thing.event.property.post"

    }
    console.log("payloadJson " + JSON.stringify(payloadJson))
    return JSON.stringify(payloadJson);
}

启动模拟脚本后,我们看到设备状态为在线从模型数据中可以看到最新上报的温度和湿度值

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


监控运维日志服务里,也可以看到设备上报数据的日志。如下图:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 

数据存储到数据库

首先,我们创建一个表格存储实例 IoTDataStore,建立一张数据表iot_data,以deviceName和timestamp为主键。如下图:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 

在IoT企业实例,云产品流转中创建规则引擎,编写数据处理SQL,配置流转目的地为上面创建的数据库表。

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


数据处理SQL编辑界面:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


数据流转到表格存储编辑界面:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


当设备有数据上报后,我们就可以在表格存储的iot_data表中实时看到存储的数据了。如下图:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


在企业实例的日志服务中,我们可以查看到完整的流转日志,协助我们排查数据链路异常。如下图:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 

业务服务器实时接收数据

IoT场景中有些数据需要业务系统实时处理,这时我们可以通过服务端订阅AMQP方式,实时接收设备上报的数据。

首先,我们要在企业实例的服务端订阅中,创建一个新的消费组,用来接收特定类型的消息。如下图:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


然后,我们在云产品流转中创建规则引擎,编写数据处理SQL,配置流转目的地为上面创建的服务端订阅消费组。

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


最后,我们在业务服务器编写程序,使用阿里云账号的AccessKey与IoT企业实例建立AMQP连接,参考代码如下:

public static void main(String[] args) throws Exception {
        //参数说明
        String accessKey = "子账号accessKey";
        String accessSecret = "子账号accessSecret";
        String consumerGroupId = "消费组Id";
        String iotInstanceId = "企业实例Id";
        long timeStamp = System.currentTimeMillis();
        //签名方法:支持hmacmd5,hmacsha1和hmacsha256
        String signMethod = "hmacsha1";
        String clientId = "ecs_"+System.currentTimeMillis();
        
        String userName = clientId + "|authMode=aksign"
                + ",signMethod=" + signMethod
                + ",timestamp=" + timeStamp
                + ",authId=" + accessKey
                + ",iotInstanceId=" + iotInstanceId
                + ",consumerGroupId=" + consumerGroupId
                + "|";
        //password组装
        String signContent = "authId=" + accessKey + "×tamp=" + timeStamp;
        String password = doSign(signContent,accessSecret, signMethod);
        //按照qpid-jms的规范,组装连接URL。
        String connectionUrl = "failover:(amqps://"+iotInstanceId+".amqp.iothub.aliyuncs.com:5671?amqp.idleTimeout=80000)"
                + "?failover.reconnectDelay=30";
        Hashtable<String, String> hashtable = new Hashtable<>();
        hashtable.put("connectionfactory.SBCF",connectionUrl);
        hashtable.put("queue.QUEUE", "default");
        hashtable.put(Context.INITIAL_CONTEXT_FACTORY, "org.Apache.qpid.jms.jndi.JmsInitialContextFactory");
        Context context = new InitialContext(hashtable);
        ConnectionFactory cf = (ConnectionFactory)context.lookup("SBCF");
        Destination queue = (Destination)context.lookup("QUEUE");
        // Create Connection
        Connection connection = cf.createConnection(userName, password);
        ((JmsConnection) connection).addConnectionListener(myJmsConnectionListener);
        // Create Session
        // Session.CLIENT_ACKNOWLEDGE: 收到消息后,需要手动调用message.acknowledge()
        // Session.AUTO_ACKNOWLEDGE: SDK自动ACK(推荐)
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        connection.start();
        // Create Receiver Link
        MessageConsumer consumer = session.createConsumer(queue);
        consumer.setMessageListener(messageListener);
    }

在AMQP的回调中处理收到的业务数据,参考代码如下:

private static MessageListener messageListener = new MessageListener() {
        @Override
        public void onMessage(Message message) {
            try {
                  //如果要对收到的消息做耗时的处理,请异步处理,确保这里不要有耗时逻辑。
                byte[] body = message.getBody(byte[].class);
                String content = new String(body);
                String topic = message.getStringProperty("topic");
                String messageId = message.getStringProperty("messageId");
                String tag = message.getStringProperty("tag");
                logger.info("receive message"
                        + ",n topic = " + topic
                        + ",n messageId = " + messageId
                        + ",n tag = " + tag
                        + ",n content = " + content
                        +"n");
                System.out.println();
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };

启动业务服务器后,我们看到不断有设备数据流转过来,如下图:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


在企业实例的控制台,服务端订阅中,我们也可以看到消费组的运行情况,包括消费速率,消息堆积量,消费客户端列表,如下图:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


在企业实例的控制台,日志服务中,我们可以看到完整的消息流转日志,如下图:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 

下达云端控制指令

业务系统通过调用IoT物联网平台提供的HTTPS API 可以给指定设备下发控制指令,调用过程如下:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


Pub API调用的参考代码:

const co = require('co');
const RPCClient = require('@alicloud/pop-core').RPCClient;

const options = {
    accessKey: "子账号accessKey",
    accessKeySecret: "子账号accessKeySecret"
};

//1.初始化 API Client
const client = new RPCClient({
    accessKeyId: options.accessKey,
    secretAccessKey: options.accessKeySecret,
    endpoint: 'https://iot.cn-beijing.aliyuncs.com',
    apiVersion: '2018-01-20',
});
// 指令内容
const payload = {
    washingMode: 2,
    washingTime: 30
};
//2.构建Pub API 请求
const params = {
    TopicFullName: "下行指令的Topic",
    MessageContent: new Buffer(JSON.stringify(payload)).toString("base64"),
    ProductKey: "产品ProductKey",
    IotInstanceId: "实例化Id",
    Qos: 1
};

co(function*() {
    //3.发起Pub API调用
    try {
        const response = yield client.request('Pub', params);

        console.log("Pub SUCCESS =====>", JSON.stringify(response));
    } catch (err) {
        console.log("Pub ERROR =====>", JSON.stringify(err));
    }
});

运行日志:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

 


在企业实例的控制台,日志服务中,我们也可以追踪到完整的下行链路日志,如下图:

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战


Tags:IoT   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
背景介绍在 IoT 物联网场景中,因为消费者分布全球各地,设备会被销售到多个国家或地区使用。 如果需要通过某个固定的服务器,远程管理多个国家或地区的设备,那么可能会出现如下情...【详细内容】
2021-07-16  Tags: IoT  点击:(78)  评论:(0)  加入收藏
2月2日,阿里云AIoT宣布其物联网应用开发工具IoT Studio用户数已经突破10万。IoT Studio是阿里云在应用开发领域打造的一站式、低成本、高稳定、易定制的物联网生产力工具,可帮...【详细内容】
2021-02-04  Tags: IoT  点击:(176)  评论:(0)  加入收藏
简介: IoT企业物联网平台开发实战企业从联网平台开发实战 通过阅读本文你将学会一下技能: 设备通过MQTT协议与您在阿里云上购买的IoT企业实例建立双向连接,上报设备采集的数据...【详细内容】
2020-11-10  Tags: IoT  点击:(128)  评论:(0)  加入收藏
数字世界AI(Artificial Intelligence)和IOT(Internet of things)想必在如今的时代下,你不会陌生,一眼看去,它很高端,高高在上,很有科技感,很时髦,人人都在谈论,在政府工作报告中,在商业计...【详细内容】
2020-10-17  Tags: IoT  点击:(129)  评论:(0)  加入收藏
前不久的小米十周年演讲中,雷军带领观众回顾了小米十年经典事件并发布四款产品,演讲内容丰富到不得不删减了许多环节。智能家居硬件新品因此没能详细展示,小米智能家居生态却公...【详细内容】
2020-08-16  Tags: IoT  点击:(79)  评论:(0)  加入收藏
作为一款体积小巧的开发板,树莓派已经提供了预配置的系统环境。但对于追求更丰富的功能体验的用户来说,Windows 10 IoT Core 显然也是一个不错的选择。好消息是,曾于去年为树莓...【详细内容】
2020-07-17  Tags: IoT  点击:(106)  评论:(0)  加入收藏
引言从2G到4G时代,移动通信网络都只是为了连接“人”而生。但随着万物互联时代的到来,移动通信网络需面向连接“物”而演进。为此,3GPP在Release 13制定了NB-IoT标准来应对现阶...【详细内容】
2020-07-14  Tags: IoT  点击:(668)  评论:(0)  加入收藏
电子发烧友网报道(文/黄晶晶)日前,在一份中国移动关于2020年NB-IoT网络建设规模的通知中指出,由NB-IoT、4G Cat1/1bis技术承接2G物联网业务,决定2020年底前停止新增2G物联网用户...【详细内容】
2020-06-26  Tags: IoT  点击:(61)  评论:(0)  加入收藏
铅笔道6月10讯,日前,国内知名物联网芯片公司芯翼信息科技(上海)有限公司(以下简称“芯翼信息科技”)宣布完成近2亿A+轮融资,本轮融资由和利资本领投,华睿资本及另外3家老股东峰...【详细内容】
2020-06-11  Tags: IoT  点击:(90)  评论:(0)  加入收藏
6月9日,在2020阿里云线上峰会上,阿里云宣布旗下物联网应用开发服务IoT Studio 2.0正式上线发布,通过将“页面可视化搭建”“业务逻辑开发”“数据服务”三大能力相融合,为物联...【详细内容】
2020-06-09  Tags: IoT  点击:(103)  评论:(0)  加入收藏
▌简易百科推荐
作为数据科学家或机器学习从业者,将可解释性集成到机器学习模型中可以帮助决策者和其他利益相关者有更多的可见性并可以让他们理解模型输出决策的解释。在本文中,我将介绍两个...【详细内容】
2021-12-17  deephub    Tags:AI   点击:(15)  评论:(0)  加入收藏
基于算法的业务或者说AI的应用在这几年发展得很快。但是,在实际应用的场景中,我们经常会遇到一些非常奇怪的偏差现象。例如,Facebook将黑人标记为灵长类动物、城市图像识别系统...【详细内容】
2021-11-08  数据学习DataLearner    Tags:机器学习   点击:(32)  评论:(0)  加入收藏
11月2日召开的世界顶尖科学家数字未来论坛上,2013年诺贝尔化学奖得主迈克尔·莱维特、2014年诺贝尔生理学或医学奖得主爱德华·莫索尔、2007年图灵奖得主约瑟夫·斯发斯基、1986年图灵奖得主约翰·霍普克罗夫特、2002...【详细内容】
2021-11-03  张淑贤  证券时报  Tags:人工智能   点击:(39)  评论:(0)  加入收藏
鉴于物联网设备广泛部署、5G快速无线技术闪亮登场,把计算、存储和分析放在靠近数据生成的地方来处理,让边缘计算有了用武之地。 边缘计算正在改变全球数百万个设备处理和传输...【详细内容】
2021-10-26    计算机世界  Tags:边缘计算   点击:(45)  评论:(0)  加入收藏
这是几位机器学习权威专家汇总的725个机器学习术语表,非常全面了,值得收藏! 英文术语 中文翻译 0-1 Loss Function 0-1损失函数 Accept-Reject Samplin...【详细内容】
2021-10-21  Python部落    Tags:机器学习   点击:(43)  评论:(0)  加入收藏
要开始为开源项目做贡献,有一些先决条件:1. 学习一门编程语言:由于在开源贡献中你需要编写代码才能参与开发,你需要学习任意一门编程语言。根据项目的需要,在后期学习另一种语言...【详细内容】
2021-10-20  TSINGSEE青犀视频    Tags:机器学习   点击:(37)  评论:(0)  加入收藏
SimpleAI.人工智能、机器学习、深度学习还是遥不可及?来这里看看吧~ 从基本的概念、原理、公式,到用生动形象的例子去理解,到动手做实验去感知,到著名案例的学习,到用所学来实现...【详细内容】
2021-10-19  憨昊昊    Tags:神经网络   点击:(47)  评论:(0)  加入收藏
语言是人类思维的基础,当计算机具备了处理自然语言的能力,才具有真正智能的想象。自然语言处理(Natural Language Processing, NLP)作为人工智能(Artificial Intelligence, AI)的核心技术之一,是用计算机来处理、理解以及运...【详细内容】
2021-10-11    36氪  Tags:NLP   点击:(48)  评论:(0)  加入收藏
边缘计算是什么?近年来,物联网设备数量呈线性增长趋势。根据艾瑞测算, 2020年,中国物联网设备的数量达74亿,预计2025年突破150亿个。同时,设备本身也变得越来越智能化,AI与互联网在...【详细内容】
2021-09-22  汉智兴科技    Tags:   点击:(54)  评论:(0)  加入收藏
说起人工智能,大家总把它和科幻电影中的机器人联系起来,而实际上这些科幻场景与现如今的人工智能没什么太大关系。人工智能确实跟人类大脑很相似,但它们的显著差异在于人工智能...【详细内容】
2021-09-17  异步社区    Tags:人工智能   点击:(57)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条