Node.js 设备 SDK
更新时间:2018-03-24 16:53:31
本篇文章将介绍使用 Node.js 设备端 SDK 进行设备接入和上下行通信。涉及与云端建立连接、上报属性变化、监听云端消息等。
环境准备
硬件和操作系统
准备可以运行 Linux 系统的硬件设备(如树莓派),或是可以运行 Mac OS 和 Windows 操作系统的 PC 设备。
安装 Node.js 运行环境
需要安装 8.9 LTS 以及以上版本:https://nodejs.org/zh-cn/
安装 bnpm 包管理工具
bnpm 是 Bone 应用开发方案的包管理工具,用来安装工具和模块,执行:
npm install -g bnpm --registry=https://npm.aliplus.com/api
Unix* 系统(macOS、Linux)如果提示 EACCES 权限不足的错误,请尝试执行以下命令进行修复:
sudo chown -R $(whoami) /usr/local/bin
sudo chown -R $(whoami) /usr/local/lib
登录 bnpm
在命令行终端里执行:
bnpm login
访问 https://bone.aliyun.com/profile ,使用页面上的用户名密码在命令行上登录:
看到“Logged in as ...”消息表示登录成功。
安装设备端 Node.js SDK
在终端运行以下命令以创建目录和安装 Node.js SDK:
mkdir test-device && cd test-device # 创建并进入新目录
bnpm install --save @bone/bone-device-sdk # 安装 SDK
开发过程
1. 创建项目
进入Link Develop 控制台,新建一个项目,例如“测试项目”,然后进入项目。
2. 创建产品
从项目控制台的左侧菜单进入“设备-产品开发”,进入产品创建流程,创建一个路灯照明设备用来当做我们的设备产品。
创建完成后我们点击“进入开发”。
3. 创建测试设备
在设备页面上切换到“设备开发”Tab,点击“设备列表”表格上方的“新增测试设备”,弹出的对话框 DeviceName 输入框留空直接点“确定”,我们就得到了一个份设备的“三元组”凭证,设备上线时云端根据该凭证进行认证鉴权。
4. 设备开发
设备的开发,一般会设备连接到云、设备属性上报、设备事件上报、设备服务监听等过程,具体请查看Alink协议文档, Node.js 版的设备 SDK 封装了这些异步过程,提供类似 RPC 的 API 来完成这些流程的调用。把
创建 device.js,内容如下:
const Bone = require('@bone/bone-device-sdk');
// 填入前一步创建设备时候得到的 productKey、deviceName、deviceSecret 三元组激活凭证
const device = Bone.createDevice({
productKey: '<productKey>',
deviceName: '<deviceName>',
deviceSecret: '<deviceSecret>'
});
// 监听服务调用
device.serve('property/set', params => {
console.log('Receieve property/set serivce call, params is:', params);
// 上报属性
device.postProps(params, () => {
console.log('Post new props successfully:', JSON.stringify(params, null, 2));
});
});
// 连接
device.connect((err) => {
if (err) {
return console.log('connect error: ', err);
}
console.log('connect succesfully!');
});
5. 调试设备
运行设备脚本
在终端中通过 Node.js 运行设备脚本:
$ node device.js
查看设备属性上报
从“设备列表”表格里找到刚才创建的路灯设备,点击“查看”,可以看到,云端已经收到设备上报的数据了。
调用设备服务
在设备页面上切换到“设备开发”Tab,在“设备列表”表格里找到刚才创建的路灯设备,点击“调试”,在“选择调试功能”里选择“工作状态 (LightStatus)”,方法选择“设置”,编辑输入框中 JSON,将 LightStatus
属性的值从 1 改为 0,点击“发送指令”,可以看到页面提示“下发指令成功”。
在终端里可以看到“receieve property/set serivce call, params is:...”的日志,表示设备已接到从云端发来的服务调用消息,此时设备程序会修改本地属性值,并将新属性值上报给服务端。
从“设备列表”表格里找到刚才创建的路灯设备,点击“查看”,可以看到,云端也已经收到设备上报的新数据了,因为属性值从 1 变成了 0。
小结
本文介绍了在 Link Develop 平台上硬件产品和测试设备的创建流程,使用了 Node.js SDK 进行 IoT 设备端接入,实现了设备的属性上报、服务调用等功能。
Node.js SDK API
Bone
createDevice
通过设备激活凭证(三元组)创建一个设备实例,示例代码:
const device = Bone.createDevice({
productKey: 'xxx',
deviceName: 'yyy',
deviceSecret: 'xxx'
});
device API
connect((err) => {})
将设备连接到云端。
postProps(params, (err, res) =>{})
上报设备属性。
postEvent(params, (err, res) =>{})
上报设备事件。
serve(serviceIdentifier, (params) =>{})
监听云端服务调用消息,该函数返回的是一个 deServe 函数,用来取消服务端消息监听。
subTopicAndOnMessage(topic, (err, topic, message) =>{})
监听云端下行 topic 消息,该函数返回的是一个 unSub 函数,用来取消服务端消息监听。
device event
err
mqtt 通信错误
offline
mqtt 离线
reconnect
mqtt 重连