SDK提供了與云端長(zhǎng)鏈接的基礎(chǔ)能力接口,您可以直接使用這些接口完成自定義Topic相關(guān)的功能。提供的基礎(chǔ)能力包括:發(fā)布、訂閱、取消訂閱。

發(fā)布

  • API原型:device#publish(topic, message, [options], [callback])

    API原型說(shuō)明,具體請(qǐng)參見(jiàn)“認(rèn)證與連接”文檔中的API描述

  • 功能:向指定的topic發(fā)送一個(gè)消息。
  • 參數(shù)說(shuō)明
    參數(shù)說(shuō)明
    topic指定的topic,數(shù)據(jù)類(lèi)型為String
    message需要發(fā)送的消息,數(shù)據(jù)類(lèi)型為Buffer或者String
    options可選值,請(qǐng)參考mqtt
    qosQoS level。
    選值:
    • 0(默認(rèn)值)
    • 1
    • 2
    callback發(fā)布消息后的回調(diào)函數(shù),參數(shù)為error,只有發(fā)布消息失敗時(shí),才有該參數(shù)。

代碼示例:(請(qǐng)確保產(chǎn)品具有該topic,并且該topic的操作權(quán)限為“發(fā)布”。)

const iot = require('alibabacloud-iot-device-sdk');
// 創(chuàng)建iot.device對(duì)象將會(huì)發(fā)起到阿里云IoT的連接
const device = iot.device({
  productKey: `${productKey}`, //將${productKey}修改為實(shí)際產(chǎn)品的ProductKey
  deviceName: `${deviceName}`,//將${deviceName}修改為實(shí)際設(shè)備的DeviceName
  deviceSecret: `${deviceSecret}`,//將${deviceSecret}修改為實(shí)際設(shè)備的DeviceSecret
});
//To publish a message with QoS 0
device.publish('/<productKey>/<deviceName>/user/update', 'hello world!');
//To publish a message with QoS 1
device.publish('/<productKey>/<deviceName>/user/update', 'hello world!',{qos:1});
//To publish a Buffer
device.publish('/<productKey>/<deviceName>/user/update', new Buffer([0,1,2,3,4]));       

訂閱

  • API原型:device#subscribe(topic/topic array/topic object, [options], [callback])
  • 功能:訂閱指定topic的消息。
  • 參數(shù)說(shuō)明
    參數(shù)說(shuō)明
    topic指定的topic,數(shù)據(jù)格式為String
    options可選值。
    qosQoS level,默認(rèn)值為0。
    callback收到suback時(shí)的回調(diào)函數(shù)。
    error錯(cuò)誤信息。
    granted{topic, qos}的數(shù)組。

代碼示例:(請(qǐng)確保產(chǎn)品具有相應(yīng)的topic,并且topic具有“訂閱”權(quán)限。)

const iot = require('alibabacloud-iot-device-sdk');
// 創(chuàng)建iot.device對(duì)象將會(huì)發(fā)起到阿里云IoT的連接
const device = iot.device({
  productKey: `${productKey}`, //將${productKey}修改為實(shí)際產(chǎn)品的ProductKey
  deviceName: `${deviceName}`,//將${deviceName}修改為實(shí)際設(shè)備的DeviceName
  deviceSecret: `${deviceSecret}`,//將${deviceSecret}修改為實(shí)際設(shè)備的DeviceSecret
});

//訂閱指定topic
device.subscribe('/<productKey>/<deviceName>/user/get');
//device.subscribe('/<productKey>/<deviceName>/user/get',{qos:1});

//接收到數(shù)據(jù)時(shí)將topic以及消息打印出來(lái)
device.on('message', (topic, payload) => {
  console.log(topic, payload.toString());
});           

參考代碼:https://github.com/aliyun/alibabacloud-iot-device-sdk/blob/master/examples/origin.js

取消訂閱

  • API原型:device#unsubscribe(topic/topic array, [callback])
  • 功能:取消訂閱指定topic的消息。
  • 參數(shù)說(shuō)明
    參數(shù)說(shuō)明
    topic指定的topic,數(shù)據(jù)類(lèi)型為String
    callback收到unsuback時(shí)的回調(diào)函數(shù)。

代碼示例:

const iot = require('alibabacloud-iot-device-sdk');
// 創(chuàng)建iot.device對(duì)象將會(huì)發(fā)起到阿里云IoT的連接
const device = iot.device({
  productKey: `${productKey}`, //將${productKey}修改為實(shí)際產(chǎn)品的ProductKey
  deviceName: `${deviceName}`,//將${deviceName}修改為實(shí)際設(shè)備的DeviceName
  deviceSecret: `${deviceSecret}`,//將${deviceSecret}修改為實(shí)際設(shè)備的DeviceSecret
});
device.unsubscribe('/<productKey>/<deviceName>/user/get')