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 ,使用页面上的用户名密码在命令行上登录:

image.png | center | 752x289

image.png | center | 752x164

看到“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 控制台,新建一个项目,例如“测试项目”,然后进入项目。

1.png | center | 752x407

2. 创建产品

从项目控制台的左侧菜单进入“设备-产品开发”,进入产品创建流程,创建一个路灯照明设备用来当做我们的设备产品。

2.png | center | 752x504

创建完成后我们点击“进入开发”。

3. 创建测试设备

在设备页面上切换到“设备开发”Tab,点击“设备列表”表格上方的“新增测试设备”,弹出的对话框 DeviceName 输入框留空直接点“确定”,我们就得到了一个份设备的“三元组”凭证,设备上线时云端根据该凭证进行认证鉴权。

3.png | center | 752x501

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

查看设备属性上报

从“设备列表”表格里找到刚才创建的路灯设备,点击“查看”,可以看到,云端已经收到设备上报的数据了。

4.png | center | 752x550

调用设备服务

在设备页面上切换到“设备开发”Tab,在“设备列表”表格里找到刚才创建的路灯设备,点击“调试”,在“选择调试功能”里选择“工作状态 (LightStatus)”,方法选择“设置”,编辑输入框中 JSON,将 LightStatus 属性的值从 1 改为 0,点击“发送指令”,可以看到页面提示“下发指令成功”。

5.png | center | 752x155

在终端里可以看到“receieve property/set serivce call, params is:...”的日志,表示设备已接到从云端发来的服务调用消息,此时设备程序会修改本地属性值,并将新属性值上报给服务端。

6.png | center | 752x61

从“设备列表”表格里找到刚才创建的路灯设备,点击“查看”,可以看到,云端也已经收到设备上报的新数据了,因为属性值从 1 变成了 0。

7.png | center | 1140x682

小结

本文介绍了在 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 重连

results matching ""

    No results matching ""