4.4.16 • Published 3 days ago

@airiot/sdk-nodejs v4.4.16

Weekly downloads
-
License
ISC
Repository
-
Last release
3 days ago

Node SDK开发文档

前沿

使用前请先阅读《创建第三方应用文档》创建第三方应用。

概述

本文档主要介绍Air IOT JavaScript SDK的安装和使用。在使用本文档前,您需要先了解Air IOT的一些基本知识,并已经安装了Air IOT平台服务。 JavaScript SDK可以运行在Node.js环境中,开发者通过调用API简单便捷地创建驱动、任务和接口服务。

安装SDK

Node.js环境

支持的Node.js版本

  • Node 10.x 以及更高版本

安装步骤

  1. JavaScript包已经上传npm管理器,直接使用npm安装SDK的开发包:
npm install @gtiot/sdk-nodejs
  1. 然后在你的程序中使用:
const { App, Driver } = require('@gtiot/sdk-nodejs')
const cfg = {
  host: "localhost", // 网关IP地址
  port: 80, // 网关端口
  mqtt: { // 消息队列配置
    host: "localhost" // 消息队列IP地址
    port: 1883, // 消息队列端口
  },
  credentials: {
    ak: "ak",  // 您的AK
    sk: "sk"   // 您的SK
  },
  log: {
    level:"debug" // 日志等级
  },
  driver: {
    id: "test",  // 驱动唯一标识
    name: "test" // 驱动名称
  } 
}

class TestDriver extends Driver {
  init() {
    app.log.debug('init')
  }

  start(app, driverConfig, cb) {
    app.log.debug('启动')
    cb(null)
  }

  reload(app, driverConfig, cb) {
    app.log.debug('驱动重启')
    cb(null)
  }

  run(app, nodeId, command, cb) {
    app.log.debug('运行指令', nodeId, command)
    cb(null)
  }

  debug(app, debugConfig, cb) {
    app.log.debug('运行测试', debugConfig)
    cb(null)
  }

  stop(app, cb) {
    app.log.debug('驱动停止处理')
    this.cron.cancel()
    cb(null)
  }
}

// 实例化并开始运行
new App(cfg).start(new TestDriver())

日志

引入日志通用包,设置日志等级,包含debug、info、warn、error方法。

示例代码

// 导入包
const log = require('@gtiot/sdk-nodejs/log')('debug')

// 测试
describe('log', function () {
  it('debug', (done) => {
    log.debug(1)
    done()
  })
  it('info', (done) => {
    log.info(1)
    done()
  })
  it('warn', (done) => {
    log.warn(1)
    done()
  })
  it('error', (done) => {
    log.error(1)
    done()
  })
})

初始化

驱动开发快速入门

初始化配置

与服务端交互,包含网关地址、消息队列地址、认证信息、驱动信息、日志等配置信息。

示例代码

const { App, Driver } = require('@gtiot/sdk-nodejs/driver')

let config = {
  host: "localhost", // 网关IP地址
  port: 80, // 网关端口
  mqtt: { // 消息队列配置
    host: "localhost" // 消息队列IP地址
    port: 1883, // 消息队列端口
  },
  credentials: {
    ak: "ak",  // 您的AK
    sk: "sk"   // 您的SK
  },
  log: {
    level:"debug" // 日志等级
  },
  driver: {
    id: "test",  // 驱动唯一标识
    name: "test" // 驱动名称
  } 
}

驱动App类方法

驱动启动

方法start(driver) 
参数说明参数名必选说明
driver驱动的实例化对象
返回值

保存数据

方法writePoints({ modelId, uid, nodeId, fields, time })
参数说明参数名必选说明
modelId模型id
nodeId设备id
uid设备编号
time数据更新时间,时间戳毫秒数(1596440650000)
fields数组对象,{tag:{},value:0},tag为数据点对象,value为数据值
返回值

将日志发送到消息队列

方法logMsg(topic,msg) 
参数说明参数名必选说明
topic日志消息主题
msgstring,日志数据
返回值

将debug日志发送到消息队列

方法logDebug(uid,msg) 
参数说明参数名必选说明
uid设备编号
msgstring,日志数据
返回值

将info日志发送到消息队列

方法logInfo(uid,msg) 
参数说明参数名必选说明
uid设备编号
msgstring,日志数据
返回值

将warn日志发送到消息队列

方法logWarn(uid,msg) 
参数说明参数名必选说明
uid设备编号
msgstring,日志数据
返回值

将error日志发送到消息队列

方法logError(uid,msg) 
参数说明参数名必选说明
uid设备编号
msgstring,日志数据
返回值

新建一个class

class继承Driver类包含init、start、schema、reload、run、debug、stop等函数,驱动的读、写数据都是通过此类完成的。

示例代码

/**
 * @name: TestDriver
 * @msg: 测试驱动
 * @param {type} 
 * @return: 
 */
class TestDriver extends Driver {
  /**
   * @name: init
   * @msg: 初始化驱动,如初始化连接
   * @param {type} 
   * @return: 
   */
  init() {
    app.log.debug('init')
  }

  /**
   * @name: schema
   * @msg: 查询返回驱动配置schema js内容
   * @return: string 驱动配置schema
   */
  schema(){}
  
  /**
   * @name: start
   * @msg: 驱动启动
   * @param driverConfig array 包含模型及设备数据
   * @return: 
   */
  start(app, driverConfig, cb) {
    app.log.debug('启动')
    cb(null)
  }

  /**
   * @name: reload
   * @msg: 驱动重启
   * @param driverConfig array 包含模型及设备数据
   * @return: 
   */
  reload(app, driverConfig, cb) {
    app.log.debug('驱动重启')
    cb(null)
  }

  /**
   * @name: run
   * @msg: 运行指令,向设备写入数据
   * @param nodeId string 设备id
   * @param command object 指令内容
   * @return: 
   */
  run(app, nodeId, command, cb) {
    app.log.debug('运行指令', nodeId, command)
    cb(null)
  }

  /**
   * @name: debug
   * @msg: 调试驱动
   * @param debugConfig object 驱动配置,包含连接信息
   * @return: 
   */
  debug(app, debugConfig, cb) {
    app.log.debug('运行测试', debugConfig)
    cb(null)
  }

  /**
   * @name: stop
   * @msg: 驱动停止处理
   * @param {type} 
   * @return: 
   */
  stop(app, cb) {
    app.log.debug('驱动停止处理')
    this.cron.cancel()
    cb(null)
  }
}

驱动启动

 实例化并开始运行驱动

示例代码

new App(config).start(new TestDriver())

任务类(计算类)服务开发快速入门

开发计算类或者任务类等服务。

任务App类属性

调度程序

属性schedule
参数说明属性名必选说明
schedule计划任务
返回值

任务App类方法

驱动启动

方法start(task) 
参数说明参数名必选说明
task任务的实例化对象
返回值

导入程序包

const { App, Task } = require('@gtiot/sdk-nodejs/task')

新建一个class

class继承Task类包含init、start、stop等函数任务的启动、停止通过此类完成的。

示例代码

// 继承Task类
class TestTask extends Task {

  /**
   * @name: init
   * @msg: 初始化
   * @param {type} 
   * @return: 
   */
  init() {
    log.info('初始化')
  }

  /**
    * @name: start
    * @msg: 启动处理
    * @param {type} 
    * @return {type} 
    */
  start(app) {
    log.info('启动')
    app.schedule.scheduleJob('* * * * * *', () => {
      log.debug(`测试`)
    })
  }

  /**
   * @name: stop
   * @msg: 停止处理
   * @param {type} 
   * @return {type} 
   */
  stop(app) {
    log.info('停止')
  }
}

任务启动

 实例化并开始运行任务

示例代码

// 实例化并开始运行
new App().start(new TestTask())

接口服务开发快速入门

开发接口类等服务。 如在平台内使用,接口需增加统一URL PATH路径,如http://localhost:8080/路径/node。

接口App类属性

Web服务

属性http
参数说明属性名必选说明
httpweb服务
返回值

任务App类方法

驱动启动

方法start(service, port) 
参数说明参数名必选说明
service接口的实例化对象
port接口服务端口
返回值

导入程序包

const { App, Service } = require('@gtiot/sdk-nodejs/service')

新建一个class

class继承Service类包含init、start、stop等函数接口的启动、停止通过此类完成的。

示例代码

// 继承Service类
class TestService extends Service {

  /**
   * @name: init
   * @msg: 初始化
   * @param {type} 
   * @return: 
   */
  init() {
    log.info('初始化')
  }

  /**
    * @name: start
    * @msg: 启动处理
    * @param {type} 
    * @return {type} 
    */
  start(app) {
    log.info('启动')
    app.http.get('/', (req, res) => res.send('Hello World!'))
  }

  /**
   * @name: stop
   * @msg: 停止处理
   * @param {type} 
   * @return {type} 
   */
  stop(app) {
    log.info('停止')
  }
}

服务启动

 实例化并开始运行接口

示例代码

// 实例化并开始运行
new App().start(new TestService())

通用连接

MQTT连接

客户端使用快速入门

实例化客户端,传入地址、端口、认证信息等。

示例代码

// 引入包
const Mqtt = require('@gtiot/sdk-nodejs/conn/mqtt')
// 实例化
let m = new Mqtt({ host, port, username, password })

客户端方法

关闭连接

方法close(cb) 
参数说明参数名必选说明
cb成功回调function callback(){}
返回值

发送数据点数据到平台

方法sendDefault(data)
参数说明参数名必选说明
data{ uid, nodeId, modelId, fields:{"数据点":"值"} }
返回值promise

发送数据

方法send(topic, data)
参数说明参数名必选说明
topicstring 主题
datastringBuffer 数据
返回值promise

订阅并接收消息

方法receive({ topic, qos = 0 }, cb)
参数说明参数名必选说明
topicstring 主题
qos服务质量等级
cb成功回调function callback(topic, payload){}
返回值

订阅主题

方法subscribe({ topic, qos = 0 }, cb) 
参数说明参数名必选说明
topicstring 主题
qos服务质量等级
cb成功回调function callback(err){}
返回值

接收消息数据

方法message(cb)
参数说明参数名必选说明
cb成功回调function callback(topic, payload){}
返回值

AMQP连接

客户端使用快速入门

实例化客户端,传入地址、端口、认证信息等。

示例代码

// 引入包
const RabbitMQ = require('@gtiot/sdk-nodejs/conn/rabbit')
// 实例化
let m = new RabbitMQ({ host, port, username, password })

客户端方法

关闭连接

方法close(cb) 
参数说明参数名必选说明
cb成功回调function callback(err){}
返回值

发送数据点数据到平台

方法sendDefault(data)
参数说明参数名必选说明
data{ uid, nodeId, modelId, fields:{"数据点":"值"} }
返回值promise

发送数据

方法send(exchange, routingKey, data)
参数说明参数名必选说明
exchange消息交换机
routingKeystring 路由
dataBuffer 数据
返回值promise

接收消息数据

方法receive(queue, cb)
参数说明参数名必选说明
queuestring 队列
cb成功回调function callback(err, msg){}
返回值

TCP客户端连接

客户端使用快速入门

实例化客户端,传入地址、端口等。

示例代码

// 引入包
const Socket = require('@gtiot/sdk-nodejs/conn/tcp')
// 实例化
let socket = new Socket( host, port )

客户端方法

关闭连接

方法close() 
参数说明参数名必选说明
返回值

向服务端写入数据

方法write(data, encoding, cb)
参数说明参数名必选说明
datastringBufferUint8Array 数据
encodingstring 编码,默认utf-8
cb成功回调function callback(err){}
返回值

接收数据

方法message(cb)
参数说明参数名必选说明
cb成功回调function callback(data){}
返回值

UDP客户端连接

客户端使用快速入门

实例化客户端,传入地址、端口等。

示例代码

// 引入包
const UDP = require('@gtiot/sdk-nodejs/conn/udp')
// 实例化
let udp = new UDP( host, port )

客户端方法

向服务端写入数据

方法write(data, cb)
参数说明参数名必选说明
datastring 数据
cb成功回调function callback(err,b){}
返回值

接收数据

方法message(cb)
参数说明参数名必选说明
cb成功回调function callback(msg, rinfo){}
返回值

WebSocket客户端连接

客户端使用快速入门

实例化客户端,传入WebSocket url地址。

示例代码

// 引入包
const WebSocket = require('@gtiot/sdk-nodejs/conn/ws')
// 实例化
let ws = new WebSocket(url)

客户端方法

关闭连接

方法close() 
参数说明参数名必选说明
返回值

向服务端写入数据

方法sendObject(data, cb)
参数说明参数名必选说明
dataobject 数据
cb成功回调function callback(err){}
返回值

向服务端写入字符串数据

方法send(data, cb)
参数说明参数名必选说明
datastring 数据
cb成功回调function callback(err){}
返回值

接收数据

方法message(cb)
参数说明参数名必选说明
cb成功回调function callback(data){}
返回值

接口客户端

客户端使用快速入门

实例化客户端,传入网关协议(http、https)、地址、端口、认证信息等。

参数参数说明类型说明
protocol接口协议string非必填,默认http
host网关IP地址string
port网关端口number
credentials认证信息object
ak应用app idstring创建应用获取
sk应用秘钥string创建应用获取

示例代码

// 引入包
const Api = require('@gtiot/sdk-nodejs/api')
// 实例化
let api = new Api({ protocol, host, port, credentials: { ak, sk } })

接口详情

查询token

方法authToken() 
参数说明参数名必选说明
返回值{"expires": 0,"token": ""},expires:超时时间,单位ns

GET方法

方法get(url)
参数说明参数名必选说明
url请求地址,如http://localhost:80/core/model/{id}
返回值返回get请求结果

POST方法

方法post(url, data)
参数说明参数名必选说明
url请求地址,如http://localhost:80/core/model
data请求数据
返回值返回post请求结果

DELETE方法

方法delete(url)
参数说明参数名必选说明
url请求地址,如http://localhost:80/core/model/{id}
返回值返回delete请求结果

PUT方法

方法put(url, data)
参数说明参数名必选说明
url请求地址,如http://localhost:80/core/model/{id}
data请求数据
返回值返回put请求结果

PATCH方法

方法patch(url, data)
参数说明参数名必选说明
url请求地址,如http://localhost:80/core/model/{id}
data请求数据
返回值返回patch请求结果

查询最新采集数据

方法getDataLatest(query) 
参数说明参数名必选说明
query设备编号及数据点唯一标识数组,如 {"uid":"设备编号","tagId":"数据点"},参数具体信息请参考《平台接口文档》
返回值返回最新数据点信息及数据数组,{"tagId":"数据点","time":时间戳,"uid":"设备编号","value":最新数据值}

查询时序数据,如实时数据及历史数据

方法getDataQuery(query) 
参数说明参数名必选说明
query查询条件数组,[{"fields":"查询字段","uid":"设备编号","where":"查询条件","group":"分组","deartment":"部门","fill":"时序查询填充值","order":"排序","limit":5,"offset":0}],数组中包含json对象,json对象属性非全部必要,可根据需求选取,fields为查询字段,可包含聚合函数(COUNT(计数)、MEAN(平均值)、SUM(求和)等,也可使用其他查询函数)。例: [{"fields":"MEAN("tagid3") as XXX","MEAN("tagid4") as YYY","uid":"adg","where":"time >= '2019-04-15 00:00:00'","time <= '2019-04-16 00:00:00'","group":"time(5m)","deartment":"5cceba2cc7157e23ae172c28","fill":"0","order":"time asc","limit":5,"offset":0}],参数具体信息请参考《平台接口文档》
返回值返回数据点数据,{"results":[{"series":[{"columns":"数据点","name":"模型id","values":[{值}]}]}]}image.png

根据过滤器查询模型数据

方法getModel(query) 
参数说明参数名必选说明
queryjson对象属性非全部必要,可根据需求选取,详情请看接口文档,例{"limit":30,"skip":20,"sort":{"age":-1,"posts":1},"filter":{"name":"Tom","fullname":{"$regex":"la"},,"project":{"name":1,"model":1,"warning":{"hasWarning":1}},"withCount":true},参数具体信息请参考《平台接口文档》
返回值返回模型数组{"id":"id","name":"模型名称"...}

根据id查询模型数据

方法getModelById(id)
参数说明参数名必选说明
id模型id
返回值返回模型数据{"id":"id","name":"模型名称"...}

保存模型数据

方法saveModel(data)
参数说明参数名必选说明
data模型对象数据,例子{"name":"模型名称"...}
返回值返回保存结果{"InsertedID":"模型唯一标识"}

根据id删除模型数据

方法deleteModelById(id)
参数说明参数名必选说明
id模型id
返回值返回删除结果{"DeletedCount":1}

根据id及数据替换原有模型数据

方法replaceModelById(id, data) 
参数说明参数名必选说明
id模型id
data模型对象数据,例子{"name":"模型名称"...}
返回值返回数据更新结果{"MatchedCount":1,"ModifiedCount":1,"UpsertedCount":0,"UpsertedID":null}

根据id更新模型数据

方法updateModelById(id, data) 
参数说明参数名必选说明
id模型id
data模型对象数据,例子{"name":"模型名称"...}
返回值返回数据更新结果{"MatchedCount":1,"ModifiedCount":1,"UpsertedCount":0,"UpsertedID":null}

根据过滤器查询资产数据

方法getNode(query) 
参数说明参数名必选说明
queryjson对象属性非全部必要,可根据需求选取,详情请看接口文档,例{"limit":30,"skip":20,"sort":{"age":-1,"posts":1},"filter":{"name":"Tom","fullname":{"$regex":"la"},"withCount":true},参数具体信息请参考《平台接口文档》
返回值返回资产数组{"id":"id","name":"资产名称"...}

根据id查询资产数据

方法getNodeById(id)
参数说明参数名必选说明
id资产id
返回值返回模型数据{"id":"id","name":"模型名称"...}

保存资产数据

方法saveNode(data)
参数说明参数名必选说明
data资产对象数据,例 {"name":"模型名称"...}
返回值返回保存结果{"InsertedID":"资产唯一标识"}

根据id删除资产数据

方法deleteNodeById(id)
参数说明参数名必选说明
id资产id
返回值返回删除结果{"DeletedCount":1}

根据id及数据替换原有资产数据

方法replaceNodeById(id, data) 
参数说明参数名必选说明
id资产id
data资产对象数据,例子{"name":"资产名称"...}
返回值返回数据更新结果{"MatchedCount":1,"ModifiedCount":1,"UpsertedCount":0,"UpsertedID":null}

根据id更新资产数据

方法updateNodeById(id, data) 
参数说明参数名必选说明
id资产id
data资产对象数据,例子{"name":"资产名称"...}
返回值返回数据更新结果{"MatchedCount":1,"ModifiedCount":1,"UpsertedCount":0,"UpsertedID":null}

根据表名及过滤器查询工作表数据

方法getExtData(tableName, query) 
参数说明参数名必选说明
tableName工作表名称
queryjson对象属性非全部必要,可根据需求选取,详情请看接口文档,例{"limit":30,"skip":20,"sort":{"age":-1,"posts":1},"filter":{"name":"Tom","fullname":{"$regex":"la"},"withCount":true},参数具体信息请参考《平台接口文档》
返回值返回工作表数据数组{"id":"id"...}

根据表名及id查询工作表数据

方法getExtDataById(tableName, id)
参数说明参数名必选说明
tableName工作表名称工作表名称
id主键id
返回值返回工作表数据{"id":"id","name":"名称"...}

根据表名保存一条工作表数据

方法saveExtData(tableName, data)
参数说明参数名必选说明
tableName工作表名称
data工作表对象数据,例 {"name":"名称"...}
返回值返回保存结果{"InsertedID":"唯一标识"}

根据表名及id删除一条工作表数据

方法deleteExtDataById(tableName, id)
参数说明参数名必选说明
tableName工作表名称
id主键id
返回值返回删除结果{"DeletedCount":1}

根据表名、id及数据替换原有工作表数据

方法replaceExtDataById(tableName, id, data) 
参数说明参数名必选说明
tableName工作表名称
id主键id
data工作表对象数据,例 {"name":"名称"...}
返回值返回数据更新结果{"MatchedCount":1,"ModifiedCount":1,"UpsertedCount":0,"UpsertedID":null}

根据表名、id及数据更新工作表数据

方法updateExtDataById(tableName, id, data) 
参数说明参数名必选说明
tableName工作表名称
id主键id
data工作表对象数据,例 {"name":"名称"...}
返回值返回数据更新结果{"MatchedCount":1,"ModifiedCount":1,"UpsertedCount":0,"UpsertedID":null}

根据过滤器查询报警数据

方法getWarning(query, archive) 
参数说明参数名必选说明
archivetrue表示操作归档报警
queryjson对象属性非全部必要,可根据需求选取,详情请看接口文档,例{"limit":30,"skip":20,"sort":{"age":-1,"posts":1},"filter":{"name":"Tom"},withCount":true},参数具体信息请参考《平台接口文档》
返回值返回报警数据数组{"id":"id","name":"报警名称"...}

根据报警id查询报警数据

方法getWarningById(id, archive)
参数说明参数名必选说明
id报警id
archivetrue表示操作归档报警
返回值返回模型报警{"id":"id","desc":"描述"...}

保存一条报警数据

方法saveWarning(data, archive)
参数说明参数名必选说明
data报警对象数据,例 {"desc":"报警信息描述"...}
archivetrue表示操作归档报警
返回值返回保存结果{"InsertedID":"报警唯一标识"}

删除一条报警数据

方法deleteWarningById(id, archive)
参数说明参数名必选说明
id报警id
archivetrue表示操作归档报警
返回值返回删除结果{"DeletedCount":1}

根据id及数据替换原有报警数据

方法replaceWarningById(id, archive, data)
参数说明参数名必选说明
id报警id
archivetrue表示操作归档报警
data报警对象数据,例 {"desc":"报警信息描述"...}
返回值返回数据更新结果{"MatchedCount":1,"ModifiedCount":1,"UpsertedCount":0,"UpsertedID":null}

根据id更新报警数据

方法updateWarningById(id, archive, data)
参数说明参数名必选说明
id报警id
archivetrue表示操作归档报警
data资产对象数据,例子{"name":"资产名称"...}
返回值返回数据更新结果{"MatchedCount":1,"ModifiedCount":1,"UpsertedCount":0,"UpsertedID":null}

获取驱动配置,驱动服务使用此接口

方法driverConfig(driverId, serviceId) 
参数说明参数名必选说明
driverId驱动id
serviceId服务id
返回值返回启动配置{"id":"","name":""}

部署发布

通过docker打包部署,部署方式,参考《服务发布部署文档》。

4.4.16

3 days ago

4.4.15

3 days ago

4.4.14

4 days ago

4.4.13

4 days ago

4.4.12

4 days ago

4.4.11

1 month ago

4.4.10

2 months ago

4.4.9

2 months ago

4.4.8

3 months ago

4.4.5

4 months ago

4.4.4

4 months ago

4.4.7

4 months ago

4.4.6

4 months ago

4.4.3

4 months ago

4.4.2

4 months ago

4.4.1

4 months ago

4.4.0

5 months ago

4.3.6

7 months ago

4.3.5

7 months ago

4.2.6

9 months ago

4.3.7

7 months ago

3.0.3

9 months ago

3.0.2

10 months ago

4.3.2

7 months ago

4.2.3

9 months ago

4.1.4

11 months ago

4.3.1

8 months ago

4.2.2

9 months ago

4.3.4

7 months ago

4.2.5

9 months ago

4.1.6

9 months ago

4.3.3

7 months ago

4.2.4

9 months ago

4.1.5

10 months ago

4.3.0

8 months ago

4.2.1

9 months ago

4.2.0

9 months ago

4.1.3

11 months ago

4.1.2

11 months ago

4.1.1

11 months ago

4.1.0

11 months ago

4.0.11

1 year ago

3.0.1

1 year ago

3.0.0

1 year ago

0.4.5

1 year ago