IoT(Gateway)-阿里云IoT平台网关连接组件

本文介绍登云梯JS开发框架中连接阿里云IoT平台网关设备连接组件所提供的相关方法说明,支持的硬件平台列表以及参考示例代码。

说明

该组件依赖网络,请使用NetWork组件,保证网络连接正常。

硬件平台

产品型号

是否支持

硬件类型

固件版本号

HaaS600Kit

开发板

4.0.1

HaaS510

DTU

4.0.1

HaaS520

DTU

4.0.1

HaaS530

DTU

4.0.1

HaaS531

DTU

4.0.1

HaaS632-LT32V

模组

4.0.1

HaaS600-EC600S

模组

4.0.1

HaaS600-EC600N

模组

4.0.1

HaaS600-EC600U

模组

4.0.1

HaaS600-N715

模组

4.0.1

gateway(Object option)

创建IoT Gateway实例,同时开始尝试连接阿里云IoT平台。

入参

属性

类型

是否必填

描述

productKey

String

网关设备的ProdctKey

deviceName

String

网关设备的DeviceName

deviceSecret

String

网关设备的DeviceSecret

clientId

String

使用免白动态注册获取的MQTT ClientId

userName

String

使用免白动态注册获取的MQTT UserName

passWord

String

使用免白动态注册获取的MQTT PassWord

heartBeatSec

String

设备心跳周期,单位为秒,默认25秒。

keepaliveSec

String

设备跟云端协议的保活时间,单位为秒,默认1200秒。

region

String

阿里云Region,默认值cn-shanghai

阿里云Region详细说明,请参见阿里云物联网平台 - 地域和可用区

说明

如果是企业实例,此处填写企业实例ID。

返回

IoT Gateway实例。

addTopo(array option)

添加子设备网络拓扑。

入参

Object Array类型,其属性有:

属性

类型

是否必填

描述

productKey

String

子设备的ProductKey

deviceName

String

子设备的DeviceName

deviceSecret

String

子设备的DeviceSecret

返回

Number类型。

  • 0:成功。

  • 其他:失败。

getTopo(Function callback)

获取子设备网络拓扑。

入参

Function类型,回调函数返回值是Object Array对象,其属性值有:

属性

类型

描述

productKey

String

子设备的ProductKey

deviceName

String

子设备的DeviceName

deviceSecret

String

子设备的DeviceSecret

返回

Number类型。

  • 0:成功。

  • 其他:失败。

removeTopo(Object option)

删除子设备网络拓扑。

入参

Object Array类型,其属性有:

属性

类型

是否必填

描述

productKey

String

子设备的ProductKey

deviceName

String

子设备的DeviceName

deviceSecret

String

子设备的DeviceSecret

返回

Number类型。

  • 0:成功。

  • 其他:失败。

login(Object option)

登录子设备至阿里云物联网平台。

入参

Object Array类型,其属性有:

属性

类型

是否必填

描述

productKey

String

子设备的ProductKey

deviceName

String

子设备的DeviceName

deviceSecret

String

子设备的DeviceSecret

返回

Number类型。

  • 0:成功。

  • 其他:失败。

logout(Object option)

子设备退出阿里云物联网平台。

入参

Object Array类型,其属性有:

属性

类型

是否必填

描述

productKey

String

子设备的ProductKey

deviceName

String

子设备的DeviceName

deviceSecret

String

子设备的DeviceSecret

返回

Number类型。

  • 0:成功。

  • 其他:失败。

registerSubDevice(Object option)

网关动态注册子设备至阿里云物联网平台。

入参

Object Array类型,其属性有:

属性

类型

是否必填

描述

productKey

String

子设备的ProductKey

deviceName

String

子设备的DeviceName

返回

Number类型。

  • 0:成功。

  • 其他:失败。

subscribe(Object option)

订阅主题。

入参

Object类型,其属性有:

属性

类型

是否必填

描述

topic

String

要订阅的主题名称。

qos

Number

数据通信的QoS值。

返回

Number类型。

  • 0:成功。

  • 其他:失败。

unsubscribe(String topic)

取消订阅主题。

入参

String类型:topic。

返回

Number类型。

  • 0:成功。

  • 其他:失败。

publish(Object option)

向某个主题发布消息。

入参

Object类型,其属性有:

属性

类型

是否必填

描述

topic

String

要订阅的主题名称。

message

String | Array

发布的消息内容。

qos

Number

数据通信的QoS值。

返回

Number类型。

  • 0:成功。

  • 其他:失败。

getNtpTime(Function callback)

获取网络实时时间。

入参

Function类型,回调函数返回值是Object对象,其属性值有:

属性

类型

描述

year

Number

年。

month

Number

月。

day

Number

日。

hour

Number

时。

minute

Number

分。

second

Number

秒。

msecond

Number

毫秒。

timestamp

Number

从1970年开始的毫秒数。

返回

Number类型。

  • 0:成功。

  • 其他:失败。

end()

断开网关和阿里云物联网平台的连接并注销实例。

入参

无。

返回

Number类型。

  • 0:成功。

  • 其他:失败。

事件

事件

说明

connect

网关成功连接阿里云物联网平台。

disconnect

网关断开阿里云物联网平台。

reconnect

网关重连阿里云物联网平台成功。

message

接收到阿里云物联网平台发布MQTT消息。

error

MQTT消息错误。

示例代码

import * as iot from 'iot';
import * as network from 'network';

var net = network.openNetWorkClient();

var productKey = '';   /* your gateway productKey*/
var deviceName = '';   /* your gateway deviceName */
var deviceSecret = ''; /* your gateway deviceSecret */

var lightSwitch = 0;
var gateway;

var subdev = [
    {
        productKey: '',   /* your subdev1 productKey */   
        deviceName: '',   /* your subdev1 deviceName */
        deviceSecret: ''  /* your subdev1 deviceSecret */
    },
    {
        productKey: '',   /* your subdev2 productKey */ 
        deviceName: '',   /* your subdev2 deviceName */ 
        deviceSecret: ''  /* your subdev2 deviceSecret */ 
    }
];

/* post property */
function postProperty(id, devInfo, content) {
    var topic = '/sys/' + devInfo.productKey + '/' + devInfo.deviceName + '/thing/event/property/post';
    var payload = JSON.stringify({
        id: id,
        version: '1.0',
        params: content,
        method: 'thing.event.property.post'
    });

    gateway.publish({
        topic: topic,
        payload: payload
    });
}

/* post event */
function postEvent(id, devInfo, eventId, content) {
    var topic = '/sys/' + devInfo.productKey + '/' + devInfo.deviceName + '/thing/event/' + eventId + '/post';
    var payload = JSON.stringify({
        id: id,
        version: '1.0',
        params: content,
        method: 'thing.event.' + eventId + '.post'
    });

    gateway.publish({
        topic: topic,
        payload: payload
    });
}

function createGateway() {
    gateway = iot.gateway({
        productKey: productKey,
        deviceName: deviceName,
        deviceSecret: deviceSecret
    });

    gateway.on('connect', function () {
        console.log('(re)connected');

        gateway.addTopo(subdev);

        gateway.login(subdev);

        setInterval(function () {
            postProperty(1, subdev[0], { 'PowerSwitch_1': lightSwitch });
            postEvent(1, subdev[0], 'Error', { 'ErrorCode': 0 });
        }, 2000);
    });

    /* 网络断开事件 */
    gateway.on('disconnect', function () {
        console.log('disconnect ');
    });

    /* mqtt消息 */
    gateway.on('message', function (res) {
        /* 通过 topic中的pk和dn信息,判断是对哪个子设备的调用 */
        var pk = res.topic.split('/')[2];
        var dn = res.topic.split('/')[3];
        console.log('mqtt message')
        console.log('mqtt topic is ' + res.topic);
        console.log('PK: ' + pk)
        console.log('DN: ' + dn)
        console.log('mqtt payload is ' + res.payload);
    })

    /* 关闭连接事件 */
    gateway.on('end', function () {
        console.log('iot client just closed');
    });

    /* 发生错误事件 */
    gateway.on('error', function (err) {
        console.log('error ' + err);
    });
}


var status = net.getStatus();
console.log('net status is: ' + status);

if (status == 'connect') {
    createGateway();
} else {
    net.on('connect', function () {
        createGateway();
    });
}