概述 #
本文以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。
