NPM 包 ZCL-Packet 使用教程

在前端开发中,我们经常需要处理二进制数据包,而 zcl-packet 是一个帮助我们处理 ZigBee Cluster Library (ZCL) 协议数据包的 Node.js 包。本文将介绍如何使用它来处理 ZCL 数据包。

ZCL-Packet 简介

ZCL 是 ZigBee 网络中设备之间通信时使用的一种协议,它定义了设备之间通信的方式和数据格式。ZCL 数据包由一个 ZCL 帧头和一个 ZCL 负载组成。ZCL-Packet 可以将 ZCL 数据包转化为 JavaScript 数据格式,方便我们进行操作和处理。

ZCL 数据包格式

ZCL 数据包由 ZCL 帧头和 ZCL 负载组成,下面是 ZCL 帧头的格式:

字段名 长度(byte) 描述
frame Control 1 帧控制字
manuf Code 0-2 制造商代码,如果没有则为 0xFFFE
seq Num 1 帧序列号,用于防止数据包重复发送。

ZCL 负载的格式因具体业务而异,可以是一个结构体、一个数组或一个字符串等。例如,一个简单的 ZCL 报文可以是一个包含开关状态和亮度值的 JSON 对象:

-
  -------- --
  ---------- -
    ----- -----
    ------------- ---
  -
-

安装 ZCL-Packet

首先,我们需要在 Node.js 环境中安装 ZCL-Packet 包。在命令行中输入如下命令即可:

--- ------- ---------- ------

解析一个 ZCL 数据包

使用 ZCL-Packet 解析一个 ZCL 数据包非常简单,只需将收到的数据包(Buffer 类型)传递给 parse 方法:

----- --------- - ----------------------

----- --- - -- ------- ------ ----- ---

----- ------ - -------------------- ------------- --------
-------------------- -- ---- ---- --

参数 coordinator 表示解析器是否运行在协调器中,如果是则设为 true,否则设为 false

parse 方法的返回值是一个 JSON 对象,包含 ZCL 帧头和 ZCL 负载。例如,上面提到的 JSON 对象对应的 ZCL 数据包可以这样解析:

-
  ---------- -- ---- ---
  ---------- -- ---------- ---
  ------- -- ---- ---
  ------ -- -- -- ---
  -------- -
    ------ -- ------- ---- - ------ ---
    ------------- -- ------------
  -
-

注意,解析器只会解析出有规定命令 Id 的数据包内部的负载字段,如果命令 Id 没有定义或不存在,负载将不被解析出来。例如,如果解析器是用于解析 ZCL On/Off 命令中的数据包,则只会解析出 cmdId0x40(On)、0x41(Off)的 ZCL 数据包。

编码一个 ZCL 数据包

使用 ZCL-Packet 也可以很方便地编码一个 ZCL 数据包,只需将需要发送的数据打包为一个 JSON 对象,然后将其传递给 build 方法:

----- --------- - ----------------------

----- ------- - -
  ------ -----
  ------------- --
--

----- --- - --------------------------- ----------------- -------- --------------------------- ----
-- - --- -----

build 方法的第一个参数是命令集名称(例如 genOnOff),第二个参数是具体命令名称(例如 onWithTimedOff),第三个参数是需要发送的负载数据对象,第四个参数是可选的选项参数,用于设置一些数据包属性,例如帧序列号。这里我们设置了当前的帧序列号为 3

示例代码

下面是一个简单的代码示例,它使用 zcl-packet 接收一个 ZigBee 网络中的数据包,并将其解析和编码后再通过 ZigBee 网络发送出去:

----- --------- - ----------------------
----- --- - ---------------

----- ------ - ------------------ ----- ----- ------------- ---------- -
  ---------------------- -- ----------
---

----------------- -------------- -
  ------------------------ ------ -- -------
  ----- ------ - --------------------- ------------- --------
  ---------------------- -------- -- ------ ---- --
  ----- ------- - -
    ------ ----------------------
    ------------- --
  --
  ----- --- - --------------------------- --------- -------- --------------------------- ----------------
  -------------------- ----- -- ---------
  ------------------
---

在这个例子中,我们通过 Node.js 的 net 模块建立一个 TCP 连接,然后等待设备发来的数据包。设备发来的数据包将被解析,并将其中的负载 onOff 属性取反后返回给设备(通过「开关切换」命令)。

总结

本文介绍了如何使用 zcl-packet 这个 NPM 包对 ZigBee 网络中的数据包进行解析和编码。通过本文的学习,相信大家已经掌握了使用 zcl-packet 包的基本方法,可以在工作中进行运用了。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/118134


猜你喜欢

  • npm 包 nex-symlinks 使用教程

    在前端开发中,我们经常需要对文件进行管理和组织,而使用符号链接(symlinks)可以方便的链接不同路径下的文件,以达到提高代码复用率和管理效果的目的。然而,手动创建复杂的符号链接不仅费时费力,而且容...

    5 年前
  • npm 包 nex-link-dependencies 使用教程

    前言 在日常的前端开发中,我们经常会使用到一些 npm 包,这些包不仅可以提供一些方便的功能,也可以帮助我们更加高效地管理我们的项目。而 npm 包 nex-link-dependencies 就是其...

    5 年前
  • npm 包 nex-global-dependencies 使用教程

    npm 是一个 JavaScript 包管理工具,它可以帮助我们快速安装和管理项目中需要的依赖包。在前端开发中,我们会频繁使用 npm 安装和更新依赖包。但是,当我们在多个项目中使用同样的依赖包时,每...

    5 年前
  • npm包smyte 使用教程

    在前端开发中,smyte是一个常用的npm包。它可以用来进行反垃圾邮件和欺诈检测。smyte有一个简单易用的API,支持多种语言,包括JavaScript。本文将详细介绍如何在前端项目中使用smyte...

    5 年前
  • npm 包 git-template 使用教程

    随着前端工程化的不断发展,项目管理和代码复用成为开发的重点。npm 包管理器成为了前端最为流行的包管理工具之一,其中一个使用频率非常高的功能就是创建基本模板。而 git-template 包则提供了更...

    5 年前
  • npm 包 iso8601 使用教程

    什么是 iso8601? iso8601 是表示日期和时间的国际标准,可以使用简单的文本字符串来表示日期时间信息。它的格式如下: ------------------------其中: YYYY:四...

    5 年前
  • npm 包 genie 使用教程

    1. 前言 genie 是一个方便前端开发人员管理需要打包的静态资源的工具,使用 npm 包的形式进行安装和使用。 在前端工程化的项目中,我们通常需要把多个静态资源文件打包成一个或多个文件,以便于减少...

    5 年前
  • npm 包 grunt-label-xlsx-generator 使用教程

    如果你是一个前端开发人员,那么你一定知道 grunt。grunt 是一个 JavaScript 任务运行器,它可以帮你简化 JavaScript 项目的构建流程,包括但不限于文件压缩、文件合并、代码语...

    5 年前
  • npm 包 excel_differnciate 使用教程

    前言 Excel 是办公自动化软件中最常用的之一,其可以完成数据的录入、统计、分析等操作,然而,在日常使用中,我们常常需要对 Excel 表格进行对比操作,这时候一个好用的 Excel 差异对比工具就...

    5 年前
  • npm 包 @evolvus/evolvus-charges-billing 使用教程

    近年来,随着互联网的高速发展和智能化程度的不断提高,越来越多的企业和机构开始采用自动化的方式来完成商业计费。因此,针对商业计费需求的 npm 包也应运而生,其中 @evolvus/evolvus-ch...

    5 年前
  • npm 包 @teamtagevo/evolvus-charges-billing 使用教程

    Introduction 在前端开发中,我们通常使用 npm 包来管理第三方库。其中一个非常常用的包是 @teamtagevo/evolvus-charges-billing。

    5 年前
  • npm 包 ibis 使用教程

    介绍 在前端开发中,常常需要对数组、对象等数据结构进行处理。而 ibis 是一个 npm 包,它提供了一系列实用的数组操作和迭代器工具函数。本文将介绍如何使用 ibis 包进行数组操作。

    5 年前
  • npm 包 hyper-store 使用教程

    在前端开发中,我们通常会用到一些库和工具,其中 npm 包是最受欢迎的一种使用方式。本文将给大家介绍一个名为 hyper-store 的 npm 包,它是一个轻量级的状态管理库,可以帮助我们更好地处理...

    5 年前
  • npm 包 hyper-client-wait1 使用教程

    简介 hyper-client-wait1 是一个基于 Hyper.js 的客户端插件。它主要用于在发送命令给远程服务器时,自动等待一段时间,以确保命令成功执行。这个插件对于需要频繁在远程服务器上执行...

    5 年前
  • npm 包 maker-ui 使用教程

    前言 随着前端技术的不断发展,不少框架和工具库层出不穷。其中,npm 是前端开发过程中必不可少的一个工具,而 maker-ui 则是 npm 包中的一款前端 UI 库。

    5 年前
  • npm 包 hyperagent 使用教程

    在前端领域,使用 hypermedia API 来构建 Web 应用程序已经成为一种常见的方式。hyperagent 是一个可以帮助开发人员更轻松地使用 hypermedia API 的 npm 包。

    5 年前
  • npm 包 superagent-defaults 使用教程

    在前端开发中,我们常常需要进行网络请求。其中superagent是一个常用的网络请求库,而superagent-defaults则是superagent的一个默认参数配置插件。

    5 年前
  • npm 包 links-parser 使用教程

    前言 在前端开发中,经常需要获取一个网页中的所有链接。手动解析 HTML 是一个繁琐的过程,会消耗大量的时间和精力。而 links-parser 就是一个非常好用的工具来帮助我们实现这个功能。

    5 年前
  • npm 包 reject 使用教程

    在前端开发过程中,我们经常使用 npm 包来扩展项目的功能。然而,在使用 npm 包的过程中,有时候会遇到一些问题,比如包的版本不兼容或者无法正常使用等。在这种情况下,我们可能需要使用 npm 包的 ...

    5 年前
  • npm 包 npmrc 使用教程

    在前端开发过程中,我们经常会用到 npm 包管理器来下载和安装各种基础库和第三方依赖。但是在实际开发过程中,我们会经常遇到需要配置多个不同的 npm 仓库地址的情况,例如: 需要使用公司内部搭建的 ...

    5 年前

相关推荐

    暂无文章