本文介绍登云梯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,默认值 阿里云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();
});
}