全部产品
Search
文档中心

阿里云物联网平台:MQTT-WebSocket认证接入示例

更新时间:Apr 19, 2023

本文提供Node.js语言的示例代码,介绍设备通过MQTT-WebSocket通道接入物联网平台。

前提条件

已在物联网平台控制台对应实例下,创建产品和设备(例如device2),并获取设备证书信息(ProductKey、DeviceName和DeviceSecret)。具体操作,请参见:

背景信息

使用WebSocket方式接入设备的详细说明,请参见MQTT-WebSocket连接通信

本示例使用物联网平台提供的设备端Link SDK,模拟设备接入和上下行通信过程。

说明 设备端Link SDK已配置TLS加密,您无需自行配置。

操作步骤

  1. 在Windows系统或Linux系统下载并安装Node.js。本文以Windows 10(64位)系统为例,下载安装包node-v14.15.1-x64.msi。
  2. 安装成功后,打开CMD窗口,通过以下命令查看node版本。
    node --version
    显示如下版本号,表示安装成功。
    v14.15.1
  3. 在本地计算机创建一个JavaScript文件(例如iot_device.js),用来存放Node.js示例代码。
    Node.js示例代码如下:
    const iot = require('alibabacloud-iot-device-sdk');
    
    // 设备证书信息。
    const productKey = 'a1W***';
    const deviceName = 'device2';
    const deviceSecret = 'ff01e59d1a***';
    
    // 新版公共实例和企业版实例,必须填写实例ID,旧版公实例无需填写。
    const instanceId = '';
    
    // 当前产品和设备所属地域的ID。
    const region = 'cn-shanghai';
    
    const brokerUrl = instanceId
      ? `wss://${instanceId}.mqtt.iothub.aliyuncs.com:443`
      : `wss://${productKey}.iot-as-mqtt.${region}.aliyuncs.com:443`;
    
    const device = iot.device({
      productKey: `${productKey}`,
      deviceName: `${deviceName}`,
      deviceSecret: `${deviceSecret}`,
      brokerUrl,
      tls: true,
    });
    
    // 监听connect事件:建立MQTT连接,订阅自定义Topic,通过自定义Topic向物联网平台发送消息。
    device.on('connect', () => {
      device.subscribe(`/${productKey}/${deviceName}/user/get`);
      console.log('connect successfully!');
      device.publish(`/${productKey}/${deviceName}/user/update`, 'hello world!');
    });
    
    // 监听message事件。
    device.on('message', (topic, payload) => {
      console.log(topic, payload.toString());
    });
    
    // 监听error事件。
    device.on('error', (error) => {
      console.error(error);
    });
    
    // 如果您希望主动断开与物联网平台的连接,可以删除下一行注释符号,调用end函数断开与物联网平台的连接。
    //device.end();

    您需参照下表,替换对应参数的值为实际场景中设备的信息。

    参数示例说明
    productKeya1W***您添加设备后,保存的设备证书信息,请参见获取设备证书

    您也可在控制台中设备device2设备详情页面查看。

    deviceNamedevice2
    deviceSecretff01e59d1a***
    instanceId''实例ID。您可在物联网平台控制台实例概览页面,查看当前实例的ID。
    • 若有ID值,必须传入该ID值。
    • 若无实例概览页面或ID值,传入空值,即iotInstanceId = ''

    实例的详细说明,请参见实例概述

    region cn-shanghai您物联网平台设备所在地域的代码。地域代码表达方法,请参见地域列表
  4. 打开CMD窗口,使用cd命令找到iot_device.js文件所在路径,在该路径下使用npm命令下载阿里云IoT的Link SDK库。下载后的库文件如下图所示。
    npm install alibabacloud-iot-device-sdk --saveMQTT库
  5. 在CMD窗口输入如下命令,运行iot_device.js代码,启动设备。
    node iot_device.js
    返回如下信息,表示设备接入成功,并成功发布消息。接入设备

查看运行日志和测试下行通信

  1. 登录物联网平台控制台
  2. 在控制台左上方,选择物联网平台设备所在地域,然后在实例概览页面,单击目标实例
    说明 若无实例概览页面,会直接进入物联网平台功能页面。
  3. 在左侧导航栏,选择设备管理 > 设备
    设备列表页签,可查看设备device2的状态为在线设备在线
  4. 单击设备device2对应操作栏的查看,在设备详情页面,单击日志服务,然后单击前往查看
    云端运行日志页签,查看日志消息。日志信息
  5. 在日志列表,找到设备到云消息,单击查看,查看设备上报到物联网平台的信息。
    上报消息
  6. 测试下行通信:从物联网平台向设备发送消息。
    1. 返回设备管理 > 设备页面,在设备列表页签,单击设备device2操作栏的查看
    2. 设备详情页面,单击Topic列表页签,找到已订阅的Topic:/a1W***/device2/user/get,单击发布消息
    3. 输入消息内容,单击确认
      发送消息
    4. 返回设备运行窗口,查看设备能接收消息,表示通信正常。
      接收消息

      您也可返回云端运行日志页签,查看详细的通信日志。

      通信日志