LoRaWAN网络中的chirpstack

目录

一、chirpstack介绍

二、网关与chirpstack之间的通信

三、NS与AS之间的通信

1、Protobuf

2、gRPC


一、chirpstack介绍

        ChirpStack 是一个开源的 LoRaWAN 网络服务器,可用于 设置私有或公共 LoRaWAN 网络。ChirpStack 提供了一个 Web 界面 用于管理网关、设备和应用程序。ChirpStack 还提供了一个基于 gRPC 的 API,可以 用于集成或扩展 ChirpStack。我是在 Linux下 使用 Docker 进行搭建chirpstack 服务器,不熟悉的朋友可以看《在Linux下使用Docker部署chirpstack》。本篇文章主要讲解chirpstack中的内容。

        chirpstack由以下几部分组成:

(1)ChirpStack Network Server: 简称NS,作用是确保 LoRaWAN 网络的正常运行和管理设备通信。其负责 LoRaWAN 网络的核心逻辑。它处理设备的加入过程、下行链路调度、设备活动状态跟踪等。它还负责处理从 LoRa 网关接收到的上行数据,并将下行数据发送到网关。

(2)ChirpStack Application Server: 简称AS,作用是管理和处理应用层数据,提供用户界面和 API 接口。其负责处理和管理 LoRaWAN 应用层数据。它允许用户定义应用程序、设备配置和数据解码器。它还提供 API 和 Web 界面,用于管理设备、监控网络流量、处理数据解码和发送应用层数据到外部应用程序。

(3)ChirpStack Gateway Bridge:充当网关和网络服务器之间的中间件。该组件可以将LoRa网关传输来的LoRa数据包转发器协议转换成ChirpStack网络服务器通用的数据格式(JSON等)。

(4)PostgreSQL:这是一个开源的关系型数据库管理系统,用于持续化存储 ChirpStack 的配置数据、设备信息、网关信息、应用程序数据等。

(5)Redis:这是一个开源的内存中数据结构存储系统,通常用作数据库、缓存和消息代理。ChirpStack 使用 Redis 来缓存和处理一些实时数据,提高系统性能和响应速度。

(6)Mosquitto:Mosquitto是一个MQTT协议的代理服务器,用于处理设备和ChirpStack组件之间的通信。它允许LoRaWAN网关和ChirpStack服务之间的消息传递。

二、网关与chirpstack之间的通信

        我们先来看一下LoRaWAN网络的通信架构:

         LoRaWAN网络大体上规定了一个这样的架构:终端节点、网关、服务器(NS、AS)。我们需要注意一下。在这个架构中,各个部分之间并不都是通过 LoRaWAN协议 进行通信的。终端节点与网关之间走的是标准的LoRaWAN协议,使用LoRa调制技术在无线电频段发送封装好的数据包。这些数据包由网关接收,通常采用 UDP协议 将数据转发至相应的服务器。

        网关收到数据后,并不是直接把数据转发至服务器。网关会对有效负载 payload 进行 base64 编码。然后,再添加对应的元数据(如信号强度、信噪比等)。刚刚已经提到过网关和服务器之间是采取UDP协议进行通信的。显然,网关收到的数据包不进行处理肯定是无法传输的,这就需要介绍一下Semtech UDP Packet Forwarder(Semtech UDP 格式转换器)了。Semtech UDP 格式转换器用于将 LoRaWAN 数据转换成标准的 UDP 数据包格式。

        前面我们提到了chirpstack的几个组件,我们可以看出来,在网关发送消息给服务器首先发给的是网关桥(如果网关桥安在了网关上则直接发给MQTT代理器)。网关桥起到了怎么一个角色呢?网关桥会解析传来的数据,并封装成标准的消息格式(如JSON或自定义格式),通过MQTT协议,经MQTT代理器转发至网络服务器NS。

三、NS与AS之间的通信

1、Protobuf

        Protobuf 是一种数据交换格式,相对于XML、JSON,有着属于自己独特的优势。在了解NS与AS之间的数据传输,就一定要了解这种数据格式。Protobuf 是一种结构化数据的序列化方法,提供了高效率的序列化和反序列化机制,序列化就是把对象转换成二进制数据发送给服务端,反序列化就是将收到的二进制数据转换成对应的对象。

        大家比较熟悉的应该是JSON吧,那我们来对比一下Protobuf 和 JSON 吧!

        我们先来看看JSON的格式:

{ "int":12345, "str": "hello", "bool": true }

        JSON主要有两个缺点:一是非字符串的编码低效。比如说12345,在内存中只占两个字节,但是转成JSON格式却要占五个字节;二是信息冗余,同一个接口同一个对象,只是 int 字段的值不同,每次都还要传输“int”这个字段名。

        但是JSON有着很好的可读性,易于人阅读和编写,这也是JSON为什么编码效率较低但依然广受欢迎的原因。

        我们再来看一下Protobuf的格式:

message Demo 
{int32 i = 1;string s = 2;bool b = 3;
}

        Protobuf选用了Varlnts对数字进行编码,解决了效率问题。另外给每一个字段指定一个整数编号,传输的时候只传字段编号,解决了冗余问题。

        但是,使用Protobuf数据交换格式,就必须要求通信双方事先约定好各个编号分别对应哪个字段。通过使用特定的编译器将.proto 文件转换为各种编程语言的源代码,以便开发人员在各种语言中使用Protobuf。在.proto文件中使用的是接口定义语言(IDL),通过编写接口定义语言,可以定义如何通过不同的进程或模块进行通信,并定义如何序列化和反序列化数据。因为其独特的特性,gRPC 默认选用Protobuf。

2、gRPC

        chirpstack 的网络服务器NS 和应用服务器AS 就是通过gRPC来通信的。gRPC 是 谷歌研发的一套RPC协议框架。RPC框架的目标就是让远程服务调用更加简单,服务调用者可以像调用本地接口一样调用远程的服务提供者。

        gRPC 使用http2 作为网络传输层,使用 protobuf 这个高性能的数据包序列化协议。  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3269106.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

重塑与整合奖励机制以对齐大模型

人工智能咨询培训老师叶梓 转载标明出处 大模型的对齐问题,即如何使模型的输出倾向于具备期望的属性(如有帮助、无害、真实或创造性),是当前人工智能领域的热点问题。来自芝加哥大学、Google Research、Google DeepMind 和斯坦福大…

搜索引擎搜索功能(三)

SearchEngine 王宇璇/submit - 码云 - 开源中国 (gitee.com)https://gitee.com/yxuan-wang/submit/tree/master/SearchEngine 搜索功能: 对用户输入的词语,短语或句子进行分词,然后将分词后的结果进行查询,得到多个数组&#x…

C#基础——类、构造函数和静态成员

类 类是一个数据类型的蓝图。构成类的方法和变量称为类的成员,对象是类的实例。类的定义规定了类的对象由什么组成及在这个对象上可执行什么操作。 class 类名 { (访问属性) 成员变量; (访问属性) 成员函数; } 访问属性:public(公有的&…

ubuntu22.04 安装 NVIDIA 驱动以及CUDA

目录 1、事前问题解决 2、安装 nvidia 驱动 3、卸载 nvidia 驱动方法 4、安装 CUDA 5、安装 Anaconda 6、安装 PyTorch 1、事前问题解决 在安装完ubuntu之后,如果进入ubuntu出现黑屏情况,一般就是nvidia驱动与linux自带的不兼容,可以通…

[ECharts] There is a chart instance already initialized on the dom. 已存在图表,渲染重复

报错:已存在图表,渲染重复 解决: 在合适的时机执行 dispose 方法即可 // echarts 全局存入 实例 let myChart: any;// 在你的 initChart 初始化 Echarts 方法中 先执行清理方法 const initChart () > {// 执行清理方法然后初始化if(myChart){cons…

MATLAB怎么实现多条曲线共用一个图例

y1 sin(x); y2 3*sin(x); y3 cos(x); y4 3*cos(x); 例子:如果我们有4条曲线,分布是cos类和sin类,我们的图例就想区分是cos类还是sin类。 第一步(关键步骤) 我们要把我们所需要的类别曲线先画一遍, …

揭秘Django与Neo4j:构建智能知识图谱的终极指南

揭秘Django与Neo4j:构建智能知识图谱的终极指南 前言 图是一种用于对象之间的成对关系进行建模的数学结构。 它由两个主要元素组成:节点和关系。 节点:节点可以看作是传统数据库中的记录。每个节点代表一个对象或实体,例如一个人或一个地方。节点按标签分类,这有助于根…

【SpringBoot】1 Gitee

本项目 Gitee 地址:https://gitee.com/Lin_DH/system idea中可能装个gitee的插件,这样操作起来比较方便。 1)登录 Gitee 官网(https://gitee.com/),新建仓库。 2)复制新建的 Gitee 仓库地址&am…

Intellij IDEA多模块分组 实现move to group

新版本idea,没有了move to group的功能,导致模块很多的时候不能分组。2018版本有。 这个分组是虚拟的,不会在磁盘中实际存在。 要实现这个功能,只需要改modules.xml即可。 步骤 1. 找到配置文件 .idea目录下的moudules.xml 2.…

2024年钉钉杯大数据竞赛A题超详细解题思路+python代码手把手保姆级运行讲解视频+问题一代码分享

初赛A:烟草营销案例数据分析 AB题综合难度不大,难度可以视作0.4个国赛,题量可以看作0.35个国赛题量。适合于国赛前队伍练手,队伍内磨合。竞赛获奖率50%,八月底出成绩,参赛人数3000队左右。本文将为大家进行…

古训如金,指引前行(感受古人的智慧与洞见)

文章目录 古语佳句我与我周旋久,宁作我。花看半开,酒饮微醉,毋意,毋必,毋固,毋我。居逆境中,周身皆针砭药石,好而知其恶,恶而知其美。天下皆知取之为取,而莫知与之为取。喜时之言多失信,怒时之言多失体。仁者如射,射者正己而后发。私视使目盲,达人撒手悬崖,俗子沉…

【React】useEffect 钩子详解

文章目录 一、useEffect 概念二、useEffect 的基本用法1. 无依赖项2. 空依赖项数组3. 带依赖项的 useEffect 三、useEffect 的常见应用场景1. 数据获取2. 订阅与清除3. 动画与定时器 四、useEffect 的进阶用法1. 多个 useEffect2. 条件执行副作用 五、注意事项 useEffect 是 Re…

微信公众号获取用户openid(PHP版,snsapi_base模式)

微信公众号获取用户openid的接口有2个:snsapi_base、snsapi_userinfo 详情见微信公众号开发文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 本文介绍用PHP方式调用snsapi_base接口获取微信用户…

Tomcat中的WebSocket是如何实现的?

Tomcat中的WebSocket是如何实现的? WebSocket是一种在客户端和服务器之间提供长期、双向、实时通信的协议 全双工通信:WebSocket允许数据同时在客户端和服务器双向通信,无需像HTTP等待请求和响应的循环 单个TCP连接:建立一次连…

Golang | Leetcode Golang题解之第287题寻找重复数

题目: 题解: func findDuplicate(nums []int) int {slow, fast : 0, 0for slow, fast nums[slow], nums[nums[fast]]; slow ! fast; slow, fast nums[slow], nums[nums[fast]] { }slow 0for slow ! fast {slow nums[slow]fast nums[fast]}return s…

【漏洞复现】Jenkins CLI 接口任意文件读取漏洞(CVE-2024-23897)

漏洞简介 Jenkins是一款基于JAVA开发的开源自动化服务器。 Jenkins使用args4j来解析命令行输入,并支持通过HTTP、WebSocket等协议远程传入命令行参数。在args4j中,用户可以通过字符来加载任意文件,这导致攻击者可以通过该特性来读取服务器上…

物联网主机 E6000:智慧应急领域的创新力量

在当今瞬息万变的世界中,突发事件和紧急情况时有发生。如何迅速、准确地应对这些挑战,保障人民生命财产安全,成为了社会发展的重要课题。而物联网主机 E6000 的出现,为智慧应急领域带来了全新的解决方案。 一、强大的性能与功能 物…

好用的缺陷(BUG)跟踪管理系统有哪些?

以下是一些常用的缺陷(BUG)跟踪管理系统,并对它们进行详细列出和比较,同时讨论哪些系统与LabVIEW兼容或常用于LabVIEW项目中。 1. Jira 功能 强大的问题跟踪和项目管理功能。丰富的自定义选项和插件支持。适用于敏捷开发的看板和…

第七章:贝叶斯分类器

目录 7.1 贝叶斯决策论 7.2 极大似然估计 7.3 朴素贝叶斯分类器 7.4 半朴素贝叶斯分类器 7.5 贝叶斯网 7.5.1 结构 7.5.2 学习 7.5.3 推断 7.6 EM算法 7.1 贝叶斯决策论 概率框架下实施决策的基本理论 给定N个类别,令代表将第j类样本误分类为第i类所产生的…

BFS实现迷宫最短路径

结合队列的知识利用 广度优先遍历,通过对能走的路径的记录以及对走过路径的标记,进行多条路搜查 一、理论基础 如下图的迷宫: 选取所走方向(针对某一个位置)下,右,上,左&#xff0…