概述 #
本文以Node.js为例,介绍通过MQTTS/MQTT协议接入平台,基于平台接口实现“属性上报”、“订阅接收命令”等功能。
说明:
本文中使用的代码为样例代码,仅用于体验平台通信功能,如需进行商用,可以参考资源获取获取对应语言的IoT Device SDK进行集成。
前提条件 #
- 已安装Node.js,若未安装请参考安装Node.js。
- 已在管理控制台获取设备接入地址。获取地址的操作步骤,请参考平台对接信息。
- 已在管理控制台创建产品和设备。创建产品和设备的具体操作细节,请参考创建产品、注册单个设备或批量注册设备。
准备工作 #
- 安装Node.js访问Node.js官网,选择合适系统的版本下载。(本文以windows 64-bit系统,Node.js版本v12.18.0(npm 6.14.4)为例)。
- 下载完成后,运行安装文件,根据界面提示安装。
- 检查Node.js是否安装成功。Win键 + r –>输入 cmd–>回车,进入命令行窗口。输入node –v,回车后显示Node.js版本,输入npm -v显示版本信息,即表示安装成功
const mqtt = require('mqtt') const fs = require('fs'); // MQTT 服务器地址 const MQTT_BROKER = "iot.modbus.cn"; // MQTT 端口号 const MQTT_PORT = 1883; // MQTT 客户端 ID const MQTT_CLIENT_ID = "4QR8TZ9ThuL4G"; // MQTT 用户名 const MQTT_USERNAME = "ceshi"; // MQTT 密码 const MQTT_PASSWORD = "123456"; // 订阅的主题 const MQTT_TOPIC_SUBSCRIBE = "/server/coo/4QR8TZ9ThuL4G"; // 发布的主题 const MQTT_TOPIC_PUBLISH = "/dev/coo/4QR8TZ9ThuL4G"; // 创建 MQTT 客户端 const client = mqtt.connect({ host: MQTT_BROKER, port: MQTT_PORT, clientId: MQTT_CLIENT_ID, username: MQTT_USERNAME, password: MQTT_PASSWORD }); // 连接成功回调函数 client.on('connect', function () { console.log("Connected with result code " + MQTT_CLIENT_ID); // 订阅主题 client.subscribe(MQTT_TOPIC_SUBSCRIBE); }); // 接收消息回调函数 client.on('message', function (topic, message) { console.log(`Received message: ${topic} ${message.toString()}`); }); // 发布消息 function publishMessage(client, topic, payload) { client.publish(topic, payload); } // 心跳函数 function sendHeartbeat() { console.log("Sending heartbeat"); // 发送心跳消息 publishMessage(client, MQTT_TOPIC_PUBLISH, "heartbeat"); // 定时调用自身 setTimeout(sendHeartbeat, 60 * 1000); } // 定时上报函数 function reportData() { console.log("Reporting data"); // 待上报的数据 const message = [ { "sensor_device_id": 1, "port_id": 1, "sdata": 33 }, { "sensor_device_id": 1, "port_id": 2, "sdata": 60 } ]; const payload = JSON.stringify(message); // 发布数据 publishMessage(client, MQTT_TOPIC_PUBLISH, payload); // 定时调用自身 setTimeout(reportData, 10 * 1000); } // 启动心跳定时器 sendHeartbeat(); // 启动定时上报定时器 reportData();
require('mqtt')
:引入了 mqtt 库,用于提供 MQTT 客户端的功能。这是一个 MQTT 客户端模块,用于 Node.js 应用程序。require('fs')
:引入了 fs 库,用于处理文件系统操作。在本示例中,它并未使用。- 声明和初始化一些全局常量,比如 MQTT 服务器的地址、端口号、客户端ID、用户名、密码以及用于订阅和发布的主题。
- 使用
mqtt.connect()
方法连接到 MQTT 服务器,这个方法需要提供服务器的地址、端口号、客户端ID、用户名和密码。 - 使用
client.on('connect', callback)
方法设置当连接成功时的回调函数,这个函数会订阅 MQTT 服务器的一个主题。 - 使用
client.on('message', callback)
方法设置当接收到消息时的回调函数,这个函数会打印出接收到的消息。 publishMessage()
函数用于发布消息到 MQTT 服务器的指定主题。sendHeartbeat()
函数用于定期向 MQTT 服务器发送心跳消息,用于告知服务器客户端还在线。reportData()
函数用于定期向 MQTT 服务器上报数据。setTimeout(function, delay)
用于设置定时器,function
是定时器触发时需要执行的函数,delay
是触发定时器的延迟时间,单位是毫秒。
在运行该示例之前,需要确保已经安装了 mqtt
库。如果还未安装,可以使用 npm 安装,运行命令 npm install mqtt
。