设备接入SDK用于您在网关上开发驱动,将设备连接到网关,进而连接到物联网平台。
Node.js版本开源的SDK源码请见开源的Node.js库。
安装和使用
- 您可以通过如下命令来安装SDK。
npm install linkedge-thing-access-sdk
- 安装完成后,您可以根据SDK接口进行驱动开发。 重要 完成驱动开发后,直接运行会提示错误,必须通过物联网平台控制台,将已开发的驱动部署到网关中方可执行。部署驱动到网关的操作请参考驱动开发。
使用SDK开发驱动的示例代码片段如下所示。
const { Config, ThingAccessClient } = require('linkedge-thing-access-sdk'); const callbacks = { setProperties: function (properties) { // Set properties to the physical thing and return the result. // Return an object representing the result or the promise wrapper of the object. return { code: 0, message: 'success', }; }, getProperties: function (keys) { // Get properties from the physical thing and return the result. // Return an object representing the result or the promise wrapper of the object. return { code: 0, message: 'success', params: { key1: 'value1', key2: 'value2', } }; }, callService: function (name, args) { // Call services on the physical thing and return the result. // Return an object representing the result or the promise wrapper of the object. return new Promise((resolve) => { resolve({ code: 0, message: 'success', }); }); } }; Config.get() .then(config => { const thingInfos = config.getThingInfos(); thingInfos.forEach(thingInfo => { const client = new ThingAccessClient(thingInfo, callbacks); client.registerAndOnline() .then(() => { return new Promise(() => { setInterval(() => { client.reportEvent('high_temperature', { temperature: 41 }); client.reportProperties({ 'temperature': 41 }); }, 2000); }); }) .catch(err => { console.log(err); client.cleanup(); }); .catch(err => { console.log(err); }); }); });
常量定义
名称 | 类型 | 描述 |
PRODUCT_KEY | String | 配置对象(传给ThingAccessClient构造函数)的键值,指定云端分配的productKey。 |
DEVICE_NAME | String | 配置对象(传给ThingAccessClient构造函数)的键值,指定云端分配的deviceName。 |
LOCAL_NAME | String | 配置对象(传给ThingAccessClient构造函数)的键值,指定本地自定义的设备名。 |
CALL_SERVICE | String | 回调对象(传给ThingAccessClient构造函数)的键值,指定调用设备服务回调函数。回调函数格式请参见callbacks.callService()。 |
GET_PROPERTIES | String | 回调对象(传给ThingAccessClient构造函数)的键值,指定获取设备属性回调函数。回调函数格式请参见callbacks.getProperties()。 |
SET_PROPERTIES | String | 回调对象(传给ThingAccessClient构造函数)的键值,指定设置设备属性回调函数。回调函数格式请参见callbacks.setProperties()。 |
RESULT_SUCCESS | Number | 操作成功。用于回调函数返回状态码。 |
RESULT_FAILURE | Number | 操作失败。用于回调函数返回状态码。 |
ERROR_CLEANUP | String | 调用cleanup()出错错误码。 |
ERROR_CONNECT | String | 调用registerAndOnline()出错错误码。 |
ERROR_DISCONNECT | String | 调用offline()出错错误码。 |
ERROR_GET_CONFIG | String | 调用getConfig()出错错误码。 |
ERROR_GET_TSL | String | 调用getTsl()出错错误码。 |
ERROR_GET_TSL_EXT_INFO | String | 调用getTslExtInfo()出错错误码。 |
ERROR_UNREGISTER | String | 调用unregister()出错错误码。 |
Config
驱动相关配置信息。
- static get()
返回全局的驱动配置对象,该配置通常在设备与驱动程序关联时由系统自动生成。
说明 该接口的Config.get()调用方法与getConfig()接口的区别在于,getConfig()返回配置字符串,Config.get()返回配置对象。返回值:Promise<Config>
- static registerChangedCallback(callback)
注册配置变更回调函数。
表 1. 请求参数 名称 类型 描述 callback(String) Function 回调函数,配置变更时被调用。 - static unregisterChangedCallback(callback)
注销配置变更回调函数。
表 2. 请求参数 名称 类型 描述 callback(String) Function 回调函数,配置变更时被调用。 - Config(string)
基于配置字符串构造新的Config对象。
表 3. 请求参数 名称 类型 描述 string String JSON配置字符串。 - getThingInfos()
返回所有设备相关信息。
返回值:ThingInfo[]
- getDriverInfo()
返回驱动相关信息。
返回值:Object
ThingInfo
此类(结构)接口用于标识连接到Link IoT Edge的设备信息,即某个设备连接到了Link IoT Edge,那么可以通过此类接口标识该设备的productKey, deviceName, 自定义配置等信息。
ThingInfo(productKey, deviceName, custom)构造一个新的ThingInfo对象。
名称 | 类型 | 描述 |
productKey | String | 产品唯一标识。 |
deviceName | String | 设备名称。 |
custom | Object | 设备自定义配置。 |
ThingAccessClient
设备接入客户端,您可以通过该客户端来主动上报设备属性或事件,也可被动接受云端下发的指令。
- ThingAccessClient(config, callbacks)
构造函数,使用指定的config和callbacks构造。
表 5. 请求参数 名称 类型 描述 config Object 元数据,用于配置该客户端。取值格式为: { "productKey": "Your Product Key", "deviceName": "Your Device Name" }
callbacks Object 回调函数对象。取值格式为: callbacks: { setProperties: function(properties) {}, getProperties: function(keys) {}, callService: function(name, args) {} }
- 指定设置设备属性的回调参数,请参见本文下方callbacks.setProperties内容
- 指定获取设备属性的回调参数,请参见本文下方callbacks.getProperties内容
- 指定调用设备服务的回调参数,请参见本文下方callbacks.callService内容
- callbacks.setProperties(properties)
设置具体设备属性的回调函数。通过回调函数,实现设置设备的属性。
表 6. 请求参数 名称 类型 描述 properties Object 设置属性的对象,取值格式为: { "key1": "value1", "key2": "value2" }
返回值:{ "code": 0, "message": "string", "params": {} }
表 7. 返回参数 名称 类型 描述 code Number 状态码。 - 0:接口调用成功。
- 非0:接口调用失败,报非0值对应的错误。
message String 可选参数,状态描述信息。 params Object 可选参数,用于返回每个属性的设置结果,其值为每个属性设置后的实际值。 - callbacks.getProperties(keys)
获取具体设备属性的回调函数。通过回调函数,实现获取设备的属性。
表 8. 请求参数 名称 类型 描述 keys String[] 获取属性对应的名称,取值格式为: ['key1', 'key2']
返回值:{ "code": 0, "message": "string", "params": {} }
表 9. 返回参数 名称 类型 描述 code Number 状态码。 - 0:接口调用成功。
- 非0:接口调用失败,报非0值对应的错误。
message String 可选参数,状态描述信息。 params Object 可选参数,用于获取属性成功时,返回对应的属性值。 - callbacks.callService(name, args)
调用设备服务回调函数。通过回调函数,实现调动设备服务。
表 10. 请求参数 名称 类型 描述 name String 设备服务名称。 args Object 服务入参列表,取值格式为: { "key1": "value1", "key2": "value2" }
表 11. 返回参数 名称 类型 描述 code Number 状态码。 - 0:接口调用成功。
- 非0:接口调用失败,报非0值对应的错误。
message String 可选参数,状态描述信息。 params Object 可选参数,用于调用设备服务成功时,返回额外的信息。 - setup()设备接入客户端初始化。重要 Link IoT Edge当前版本已不再使用该接口,之前遗留的调用不受影响。返回值:
Promise<Void>
- registerAndOnline()
将设备注册到网关中并通知网关上线设备。设备需要注册并上线后,设备端才能收到云端下发的指令或者发送数据到云端。
返回值:Promise<Void>
- online()
通知网关设备已上线,该接口一般在设备离线后再次上线时使用。
返回值:Promise<Void>
- offline()
通知网关设备已离线。
返回值:Promise<Void>
- reportEvent(eventName, args)
主动上报设备事件。
表 12. 请求参数 名称 类型 描述 eventName String 事件对应的名称,与您在产品定义中创建事件的名称一致。 args Object 事件中包含的属性key与value,取值格式为: { "key1": "value1", "key2": "value2" }
- reportProperties(properties)
主动上报设备属性。
表 13. 请求参数 名称 类型 描述 properties Object 属性中包含的属性key与value,取值格式为: { "key1": "value1", "key2": "value2" }
- getTsl()
返回TSL字符串,数据格式与云端一致。
返回值:Promise<Void>
- getTslConfig()重要 Link IoT Edge当前版本已不再使用该接口,已使用getTslExtInfo()接口代替,之前遗留的调用不受影响。
返回TSL配置字符串。
返回值:Promise<String>
- getTslExtInfo()
返回TSL扩展信息字符串。
返回值:Promise<String>
- cleanup()
资源回收接口,您可以使用该接口回收您的资源。
返回值:Promise<Void>
- unregister()
从网关中移除设备。请谨慎使用该接口。
返回值:Promise<Void>
getConfig()
获取驱动配置字符串,该配置通常在设备与驱动程序关联时由系统自动生成。
说明 该接口与static get()接口Config.get()调用方法的区别在于getConfig()返回配置字符串,Config.get()返回配置对象。
返回值:
Promise<String>
destroy()
销毁库内部所有资源。通常不再使用此库时调用destroy()接口。
返回值:
Promise<Void>
文档内容是否对您有帮助?