IoT设备接入物联网平台华北2(北京) 节点开发实战

简介: IoT设备接入华北2(北京) 节点

华北2(北京) IoT物联网平台实例化开发实战

今天,阿里云IoT物联网平台在华北2(北京)节点正式上线!对于华北地区的设备接入延时可以做到<10ms,比跨地域接入延时减少了3倍以上,同时支持通过规则引擎接入其他阿里云产品。

按需开通实例   


我们登录IoT物联网控制台,在左上角华北2(北京),即可在华北2创建IoT物联网平台实例,如下图:
image.png


在实例规格页面的地域和可用区,选择华北2(北京),其他规格可以根据实际业务情况选择,如下图:
image.png
在线支付后,稍等几分钟,实例初始化完成。
在实例设置页面,我们可以查看实例MQTT,CoAP,HTTP,AMQP,云端API的接入点信息,以及VPC内网接入点信息。
image.png

设备接入实战


我们以温控器为例,完成IoT设备接入华北2节点的开发实战。

设备接入和上报数据

创建产品和注册设备

在实例中,我们创建产品,选择直连设备,以设备秘钥方式认证身份。
image.png

在产品详情的Topic类列表创建用于业务通信的Topic,具体如下图:
image.png
image.png


然后,我们注册一个设备。
image.png

设备开发


const mqtt = require('aliyun-iot-mqtt');
// 1. 设备身份信息
var options = {
    productKey: "替换",
    deviceName: "替换",
    deviceSecret: "替换",
    host: "替换MQTT接入点"
};
// 2. 建立MQTT连接
const client = mqtt.getAliyunIotMqttClient(options);

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



设备运行

image.png

image.png

2.业务数据流转ECS服务器

创建消费组

首先,我们创建服务端订阅消费组,用来消费设备产生的业务数据,如下图:
image.png

规则引擎配置

然后,我们配置规则引擎,把数据流转到刚刚创建的消费组,如下图:
image.png
image.png

image.png

服务端AMQP订阅代码

业务服务器与IoT物联网平台建立AMQP长连接:

public static void main(String[] args) throws Exception {
        //参数说明
        long timeStamp = System.currentTimeMillis();
        //签名方法:支持hmacmd5,hmacsha1和hmacsha256
        String signMethod = "hmacsha1";
        //控制台服务端订阅中消费组状态页客户端ID一栏将显示clientId参数。
        //建议使用机器UUID、MAC地址、IP等唯一标识等作为clientId。便于您区分识别不同的客户端。
        String clientId = "ecs_"+System.currentTimeMillis();
        //UserName组装方法,请参见上一篇文档:AMQP客户端接入说明。
        String userName = clientId + "|authMode=aksign"
                + ",signMethod=" + signMethod
                + ",timestamp=" + timeStamp
                + ",authId=" + accessKey
                + ",iotInstanceId=" + iotInstanceId
                + ",consumerGroupId=" + consumerGroupId
                + "|";
        //password组装方法,请参见上一篇文档:AMQP客户端接入说明。
        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 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);
    }


回调中处理接收的数据

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();
                //如果创建Session选择的是Session.CLIENT_ACKNOWLEDGE,这里需要手动ACK。
                message.acknowledge();
                //如果要对收到的消息做耗时的处理,请异步处理,确保这里不要有耗时逻辑。
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };


设备上报数据后,通过规则引擎流转到ECS服务器,IoT控制台日志服务记录如下:
image.png

3.云端ECS下发指令到设备



设备订阅下行Topic

client.subscribe(`/${options.productKey}/${options.deviceName}/user/get`)

client.on('message', function(topic, message) {
    console.log("topic " + topic)
    console.log("message " + message)
})

订阅成功会在控制台展示出已订阅Topic
image.png

服务端发起下行指令

ECS调用云端API下行指令:

public static void main(String[] args)  {
        
        IClientProfile profile = DefaultProfile.getProfile("cn-beijing", accessKey, accessKeySecret);
        IAcsClient client = new DefaultAcsClient(profile);
        PubRequest request = new PubRequest();
        request.setSysEndpoint("iot.cn-beijing.aliyuncs.com");
        request.setTopicFullName("/xxxxx/xxxxxx/user/get");
        request.setMessageContent("Q01ELDgyOTIzLGFkMzIyCiA=");//原始报文 : CMD,82923,ad322
        request.setProductKey("xxxxx");
        request.setIotInstanceId(iotInstanceId);
        request.setQos(1);
        
        PubResponse response = client.getAcsResponse(request);
        System.out.println(new Gson().toJson(response));
    }

image.pngimage.pngimage.png
云端ECS服务器下发指令后,IoT物联网平台的日志记录如下:
image.png

4.端到云时延监测

当前IoT设备在上海,通过电信WiFi网络接入华北2(北京)网络通信时延监测。
image.png


【往期回顾】

1.自建MQTT集群迁移阿里云IoT平台
2.IoT时代:WiFi配网技术剖析
3.微信小程序和IoT智能家居实践
4.IoT云端通用数据解析脚本实践

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
9天前
|
安全 物联网 网络安全
智能设备的安全隐患:物联网(IoT)安全指南
智能设备的安全隐患:物联网(IoT)安全指南
34 12
|
5天前
|
Web App开发 网络协议 安全
基于Web攻击的方式发现并攻击物联网设备介绍
基于Web攻击的方式发现并攻击物联网设备介绍
|
8天前
|
传感器 监控 安全
物联网(IoT):定义、影响与未来
物联网(IoT):定义、影响与未来
24 3
|
16天前
|
安全 物联网 物联网安全
智能物联网安全:物联网设备的防护策略与最佳实践
【10月更文挑战第26天】随着物联网(IoT)技术的快速发展,智能设备已广泛应用于智能家居、工业控制和智慧城市等领域。然而,设备数量的激增也带来了严重的安全问题,如黑客攻击、数据泄露和恶意控制,对个人隐私、企业运营和国家安全构成威胁。因此,加强物联网设备的安全防护至关重要。
42 7
|
16天前
|
存储 JSON 运维
智能物联网平台:Azure IoT Hub在设备管理中的实践
【10月更文挑战第26天】随着物联网技术的发展,Azure IoT Hub成为企业管理和连接数百万台设备的强大平台。本文介绍Azure IoT Hub的设备管理功能,包括设备注册、设备孪生、直接方法和监控诊断,并通过示例代码展示其应用。
21 4
|
18天前
|
监控 安全 物联网
确保互联世界中物联网设备安全的三个技巧
确保互联世界中物联网设备安全的三个技巧
|
26天前
|
物联网
物联网卡不能使用在什么设备上
“物联网卡不能使用在什么设备上”这一操作或规定,通常基于物联网卡的特性、使用条款以及设备兼容性等因素。以下是对这一问题的详细分析和操作建议:
|
29天前
|
存储 监控 物联网
医疗物联网设备精细化管理系统解决方案
华汇数据智慧医院物联网管理系统解决方案是一种集物联网、云计算、大数据和人工智能等先进技术于一体的综合性解决方案,旨在提升医院的运营效率、医疗质量和患者满意度。
67 3
|
1月前
|
安全 物联网
物联网卡不能更换设备使用吗
物联网卡(IoT SIM卡)是否允许更换设备使用,这主要取决于物联网服务提供商的具体政策和服务条款。通常,物联网卡是为特定设备或应用场景设计的,因此一些服务提供商会限制卡的更换使用,主要是出于安全、管理、网络优化和避免滥用等考虑
|
1月前
|
Rust 资源调度 安全
为什么使用 Rust over C++ 进行 IoT 解决方案开发
为什么使用 Rust over C++ 进行 IoT 解决方案开发
67 7

相关产品

  • 物联网平台