传送门: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,配置流转目的地为上面创建的数据库表。

配置数据源:

配置数据目的地:

创建解析规则,将数据流转到表格存储脚本编辑界面:

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

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

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

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

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

然后,我们在云产品流转中创建解析规则配置流转目的地为上面创建的服务端订阅消费组。

最后,我们在业务服务器编写程序,使用阿里云账号的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));}
});

运行日志:

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

物联网平台产品介绍详情:https://www.aliyun.com/product/iot/iot_instc_public_cn
 
阿里云物联网平台客户交流群

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战——实践类相关推荐

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

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

  2. LoRaWAN设备接入阿里云IoT企业物联网平台实战——实践类

    传送门:5个视频讲解,30个场景案例汇总 LoRaWAN设备接入阿里云IoT企业物联网平台实战 随着 IoT 物联网的高速发展,低功耗,远距离,抗干扰的低功耗广域网快速崛起,LoRa与NB-IoT就是 ...

  3. 物联网平台企业版:设备接入实例节点开发实战——实践类

    IoT物联网平台-实例化开发实战 前言 物联网平台企业版支持用户创建实例,用于设备接入和业务管理.企业版有一下优势: 根据业务规模,购买匹配的实例规格,可大幅节约您的成本. 实例规格按需选择,避免触达 ...

  4. 电信NB-IoT设备对接阿里云IoT平台实战——实践类

    众所周知,中国电信的NB-IoT设备必须直连电信CTWing平台,无法直接在阿里云IoT,AWS IoT,腾讯云IoT 管理中国电信的NB-IoT设备. 今天我们就给大家介绍如何通过阿里云IoT企业物 ...

  5. 企业物联网平台新版公共实例升级企业实例教程

    简介:2021年7月30日企业物联网平台重磅升级,发布的新版公共实例支持一键升级企业版实例,本文将为大家介绍一键升级教程 一.企业版实例,企业用户首选 企业物联网平台 提供设备上云必备的基础服务,用户 ...

  6. IoT物联网平台「设备影子」开发实战

    IoT物联网平台提供设备影子功能,在云端通过一个JSON文件持久化存储设备上报状态值和业务系统的期望值.每个设备有且只有一个设备影子,设备可以通过MQTT协议获取期望值desired和设置设备状态re ...

  7. 微信小程序连接阿里云物联网平台操控设备(IOT)三

    文章导航: 微信小程序连接阿里云物联网平台操控设备(IOT)一 设备上云 微信小程序连接阿里云物联网平台操控设备(IOT)二 微信小程序开发(一) 微信小程序连接阿里云物联网平台操控设备(IOT)三 ...

  8. 微信小程序连接阿里云物联网平台操控设备(IOT)二

    文章导航: 微信小程序连接阿里云物联网平台操控设备(IOT)一 设备上云 微信小程序连接阿里云物联网平台操控设备(IOT)二 微信小程序开发(一) 微信小程序连接阿里云物联网平台操控设备(IOT)三 ...

  9. 微信小程序连接阿里云物联网平台操控设备(IOT)一

    文章导航: 微信小程序连接阿里云物联网平台操控设备(IOT)一 设备上云 微信小程序连接阿里云物联网平台操控设备(IOT)二 微信小程序开发(一) 微信小程序连接阿里云物联网平台操控设备(IOT)三 ...

最新文章

  1. mega_[MEGA DEAL]完整的Java编程训练营(94%折扣)
  2. vue v-for指令
  3. 判断某一天是这一年的第多少天
  4. 高质量 Node.js 微服务的编写和部署
  5. 【LeetCode】剑指 Offer 31. 栈的压入、弹出序列
  6. 什么时候以及为什么基于树的模型可以超过神经网络模型?
  7. 操作系统 读者-写者问题
  8. 小米笔记本Pro15寸单系统黑果体验
  9. 暗月渗透实战靶场-项目七(下)
  10. 利用 Python 优雅地将 PDF 转换成图片
  11. 爬取《西游记》小说所有章节内容
  12. python编程基础-task5-面向对象的编程
  13. FT232H USB转串口,I2C,JTAG高速芯片
  14. Caused by: org.dom4j.DocumentException异常信息记录
  15. java和python哪个好?学java和学python哪个更有前途?
  16. MediaCodec解码AAC音频,用AudioTrack播放解码后的数据
  17. HT1621B驱动液晶LCD连接及程序
  18. SCI审稿流程(转)
  19. Alist常用样式代码
  20. Linux下逻辑测试语句参数和流程控制语句 if语句

热门文章

  1. 1139:整理药名(C C++)
  2. ES7之async、await
  3. vb6.0连接postgresql 13
  4. bootloader的作用
  5. 关于MOS管栅极和栅介质(氧化物)的材料选择
  6. STM32硬件SPI控制TM1638 按键数码管LED显示模块
  7. PreProcessIm
  8. RKMEDIA--AI/AO的使用
  9. 写入excel文件的ExcelWriter、openpyxl、xlsxwriter
  10. ganache命令行安装