惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
博客园_首页
博客园 - 聂微东
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
The Cloudflare Blog
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
D
Docker
人人都是产品经理
人人都是产品经理
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
Microsoft Azure Blog
Microsoft Azure Blog
Recent Announcements
Recent Announcements
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
B
Blog RSS Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
L
LangChain Blog
Jina AI
Jina AI
博客园 - Franky
D
DataBreaches.Net

Hi,I`m lan

MCP协议新进展: 使用 Streamable HTTP 替换当前的 HTTP+SSE 实现。-liangyuanpeng 的博客 我的 AI 员工们开发的微信小程序上线了!-liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog vercel 记录-liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog [长期更新]cocos creator问题列表-liangyuanpeng 的博客 | liangyuanpeng's Blog go问题列表记录-liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog node镜像的更多选择-liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog containerd 中的弃用警告 - 为 2.0 做好准备!-liangyuanpeng 的博客 liangyuanpeng 的博客 | liangyuanpeng's Blog kep-1880-多服务CIDR-liangyuanpeng 的博客 | liangyuanpeng's Blog [长期更新]argoworkflow 的一些实践和思考-liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog 将Etcd作为一个kubernetes sig来运作-liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog argoworkflow 云原生工作流引擎-liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog kubecon china 2023将在上海举办-liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog liangyuanpeng 的博客 | liangyuanpeng's Blog
ChirpStack自定义JS codec函数-liangyuanpeng 的博客 | liang...
2021-03-06 · via Hi,I`m lan

TOC

前言

ChirpStack作为Lorawan Server,可以同时接收不同客户的设备数据(通过Application或Org区分开),而如果这些客户都希望可以从ChirpStack拿到设备数据的话,他们各自都会拿到base64编码过的数据并且都需要各自实现一次逻辑将数据解码转换成数字。

而ChirpStack可以做到在ChirpStack层将数据解码并且转换成人类能够看懂的json数据,下行数据也是一样的道理,下行数据时需要将数据base64编码,有了JS编解码函数后下行调用方可以直接使用json数据,编码的事情由JS编解码函数来做。

默认是不开启的,需要在ChirpStack的Dashboard页面上找到对应的devicefile开启Custom JavaScript codec functions这个功能。

理解JS解编码函数功能

可以看到默认情况下函数是什么都不做的。

其中解码函数有两个传参:fPortbytes,fPort是数据上传的端口号,bytes是上传的数据。

我们可以只给特定端口的数据进行JS解码,通过JS解码后的数据会在原先json数据之上多一个object字段。

假设101端口上传的数据是空气质量设备的数据,而数据的第十三字节是TVOC的数据,那么可以添加以下的代码,只对空气质量的设备数据解码TVOC的数据。

  if(fPort==101){
   var data = {
    "tvoc": 22.5
  };
  data.tvoc= bytes[13];
  return data;
  }

设置JS解编码函数之前设备的数据格式:

设置JS解编码函数之后设备的数据格式:

可以看到object字段下多了字段tvoc,而这个字段是我们在JS解码函数中返回的。

JS解码函数小结

这样的话当有多个客户希望拿到设备数据时就可以直接从Object字段中获取对应的数据,而不需要再写程序去解码lorawan数据以及处理字节数据了。

下行也是一样的,首先我们在dashboard尝试使用原生的下行数据功能。

假设需要给设备发送一个1的下行数据,我们首先需要将1进行base64编码,然后将编码后的字符串在dashboard填写到对应的文本框中,点击下行按钮。

注意我们每次在下行数据时都需要将我们希望下行的数据进行base64编码,然后才能下行。而利用JS编码函数功能我们就可以将这个编码操作交给JS编码函数,不需要在每次发送数据前都去自行编码一次。

回到刚才设置JS解编码函数的地方,在编码的代码框中添加编码的逻辑代码,这里以处理端口号为123的数据作为 演示。

注意:编码函数返回的数据需要是字节数组,代码框中也有提示。

  if(fPort==123){
   var data = new Array();
   data[0] = (obj.command >> 8) & 0x00FF;
   data[1] = (obj.command ) & 0x00FF;
   return data;
  }

当端口号是123时,将json格式的下行数据中的command转换成两个字节数据。

回到刚才发送下行数据的地方,选择JSON OBJECT,填写我们需要的json格式数据:

{
"command":369
}

端口号填写为123,确认没问题后点击发送下行数据。在下方提示队列会得到一个下行的数据结果,按照本文步骤来的话会显示AXE=.

验证下行结果

将字符串AXE=解码后得到的结果是01和71,将两个字节进行01*256+71计算后得到的是369,正是下行数据command字段的值。

JS编码函数小结

这样就省去了在发送下行数据时每次都需要自行将数据编码的过程,同理,如果多个客户都需要对各自的传感器进行下行数据的话,就省去了他们各自将下行数据编码的过程(前提是已经设置好对应的JS编码函数了)。

https://blog.csdn.net/iotisan/article/details/104070445

微信公众号

扫描下面的二维码关注我们的微信公众号,第一时间查看最新内容。同时也可以关注我的Github,看看我都在了解什么技术,在页面底部可以找到我的Github。

wechat-qrcode