传送门:5个视频讲解,30个场景案例汇总

一、企业物联网平台开发实战

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

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

二、创建企业实例

首先,我们登录物联网平台控制台(https://iot.console.aliyun.com), 点击购买实例来创建一个企业实例。 也可以用公共实例免费测试。

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

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

三、创建产品和注册设备

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

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

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

四、设备接入和上报数据

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

完整的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);
}

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

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

也可以无需编程,采用设备模拟器做设备行为模拟

五、数据存储到数据库

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

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

数据处理SQL编辑界面:

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

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

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

六、业务服务器实时接收数据

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

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

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

最后,我们在业务服务器编写程序,使用阿里云账号的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和hmacsha256String 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 + "&timestamp=" + 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 ConnectionConnection 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 LinkMessageConsumer consumer = session.createConsumer(queue);consumer.setMessageListener(messageListener);}

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

private static MessageListener messageListener = new MessageListener() {@Overridepublic 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物联网平台提供的HTTPS API 可以给指定设备下发控制指令,调用过程如下:

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));}
});

运行日志:

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

物联网平台产品介绍详情:物联网平台_设备接入_设备管理_监控运维_数据分析-阿里云

阿里云物联网平台客户交流群

原来这就是物联网平台典型应用场景相关推荐

  1. 阿里云 IoT 物联网平台 MQTT 通讯模式

    阿里云 IoT企业物联网平台为不同场景的硬件提供了多种通信模式,例如设备到云,云到设备,设备到设备之间的通信.尽管不同业务场景设备和交互行为差异很大,但是大多数底层数据流通信模型都可以归类为三种MQT ...

  2. 阿里云 IoT 企业物联网平台 MQTT 通讯模式

    阿里云 IoT企业物联网平台为不同场景的硬件提供了多种通信模式,例如设备到云,云到设备,设备到设备之间的通信.尽管不同业务场景设备和交互行为差异很大,但是大多数底层数据流通信模型都可以归类为三种MQT ...

  3. IOT(10)---NB-IOT的物联网十大典型应用场景

    NB-IOT的物联网十大典型应用场景 窄带物联网(Narrow Band Internet of Things, NB-IoT)成为万物互联网络的一个重要分支.NB-IoT构建于蜂窝网络,只消耗大约1 ...

  4. 5G+智能制造十大典型应用场景 | 附下载

    5G技术切合了传统制造企业智能制造转型对无线网络的应用需求,能满足工业环境下设备互联和远程交互应用需求,在协同设计. 自动控制.柔性生产.辅助装配等十大工业典型应用领域中起着关键支撑作用. 下面我们来 ...

  5. BC:带你温习并解读《中国区块链技术和应用发展白皮书》—区块链典型应用场景

    BC:带你温习并解读<中国区块链技术和应用发展白皮书>-区块链典型应用场景 目录 区块链典型应用场景 3.1 区块链与医疗健康 3.2 区块链与金融服务 3.3 区块链与供应链管理 3.4 ...

  6. IoT -- (一) 物联网平台架构设计分析

    现在网上讨论的有关物联网的帖子非常之多,但大部分都是介绍理论或者有关硬件,通讯相关的问题,比如物联网模块,物联网通讯协议MQTT.XMPP.NB_IOT等,个人认为这些只是物联网中一部分,而涉及到物联 ...

  7. IOT(31)---物联网平台架构设计

    物联网平台架构设计 现在网上讨论的有关物联网的帖子非常之多,但大部分都是介绍理论或者有关硬件,通讯相关的问题,比如物联网模块,物联网通讯协议MQTT.XMPP.NB_IOT等,个人认为这些只是物联网中 ...

  8. IOT(7)---物联网平台架构设计

    物联网平台架构设计 现在网上讨论的有关物联网的帖子非常之多,但大部分都是介绍理论或者有关硬件,通讯相关的问题,比如物联网模块,物联网通讯协议MQTT.XMPP.NB_IOT等,个人认为这些只是物联网中 ...

  9. IOT---(4)物联网平台架构设计

    现在网上讨论的有关物联网的帖子非常之多,但大部分都是介绍理论或者有关硬件,通讯相关的问题,比如物联网模块,物联网通讯协议MQTT.XMPP.NB_IOT等,个人认为这些只是物联网中一部分,而涉及到物联 ...

最新文章

  1. Java 反射 (快速了解反射)
  2. golang浮点型及使用细节
  3. ConditionObject源码
  4. Qt笔记-获取Windows下目前运行的进程信息
  5. 华硕ROG5电竞手机跑分数据曝光:骁龙888+16G超大运存
  6. 宴席终将散场!苹果首席设计师将离职创业 已供职于苹果近30年
  7. try except 异常捕获的方法、断言的使用
  8. 用Arcgis把离散的点画出等值线和等值面(色斑图)
  9. go语言实现家庭收支记账本
  10. 官网Tomcat下载方法(亲测)
  11. linux怎么进入系统安装界面,Linux图形化界面安装全过程
  12. 依旧乐观的李彦宏,十年寻光的百度AI
  13. excel打开表 正在计算机,事实:在Excel中打开表格时响应缓慢的解决方案技术
  14. 活着的传奇——《DOOM启世录》摘录
  15. Python中常用的四个小技巧总结
  16. 一个用python实现的东方时尚(驾校)抢课程序
  17. 前端项目实战176-栅格顺序
  18. Java中输入一个整数n,实现n的阶乘
  19. Linux之创建组名和删除组名
  20. 计算机制作请柬,婚礼邀请函制作软件免费版

热门文章

  1. webrtc不支持怎么调用设想吐_关于webRTC中video的使用实践
  2. Java Convert
  3. 洛谷1594 护卫队 (st算法)
  4. Linux字符截取命令-cut
  5. Docker CI: 安装 SonarQube 异常 max virtual memory areas vm.max_map_count [65530] is too low
  6. 如何在路由器上刷DD-WRT固件
  7. smobiler仿自如app筛选页面
  8. 毫米和像素怎么换算_像素(px)与毫米(mm)间的转换
  9. [iOS]设备型号判断大全(包括iPhoneX)
  10. 视频抽帧Java实现