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://www.mzph.cn/bicheng/50756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HBuilder X中配置vue-cli项目和UI库

目录 一.前端项目结构 二.在HBuilder X中搭建vue-cli项目 1. 安装node.js前端环境 2. HBuilder X创建一个vue-cli项目 3. vue-cli项目结构 4. 如何运行前端项目 5. 创建组件 6. 组件路由(页面跳转) 6.1 创建router目录 6.2 使用路由 6.3 在main.js中配置路由 6.4 路…

【IoTDB 线上小课 05】时序数据文件 TsFile 三问“解密”!

【IoTDB 视频小课】持续更新!第五期来啦~ 关于 IoTDB,关于物联网,关于时序数据库,关于开源... 一个问题重点,3-5 分钟详细展开,为大家清晰解惑: IoTDB 的 TsFile 科普! 了解了时序数…

系统移植(三)u-boot移植 ① 相关概念

文章目录 一、u-boot概念(一)概念(二)获取u-boot源码1.从u-boot官网获取2. 从 STM官网3. 开发板厂商获取 (三)分析u-boot源码1. u-boot源码的目录结构2. 获取make的帮助信息3. 分析README文件 (…

讨逆猴子剪切板,浏览器复制失败?

讨逆猴子剪切板,复制失败? 问题:本地开发情况下可以直接复制,公网就不行了…触发了安全机制。 const link 内容;navigator.clipboard.writeText(link);报错: 解决方案: if (navigator.clipboard &&…

使用代理IP进行本地SEO优化:如何吸引附近的客户?

在今天竞争激烈的互联网时代,如何利用代理IP进行本地SEO优化并吸引附近的客户已经成为许多企业和网站面临的关键挑战。本文将探讨使用代理IP的策略和技巧,以帮助公司提高在本地市场的可见性和吸引力,从而扩大本地客户群体。 1. 代理IP在本地…

Windosw下Visual Studio2022编译FFmpeg(支持x264、x265、fdk-acc)

FFmpeg 7.0 版本移除了 6.0 之前已弃用的 API,无法向下兼容。所以编译的版本选择FFmpeg 6.1.1。 一、安装Visual Studio2022 可参考另外一篇文章:Windows安装Visual Studio2022 QT5.15开发环境_qt5.15.2 vs2022-CSDN博客 二、安装MSYS2 下载地址&…

lua 游戏架构 之 游戏 AI (四)ai_autofight_find_target

定义一个名为 ai_autofight_find_target 的类,继承自 ai_base 类。 lua 游戏架构 之 游戏 AI (一)ai_base-CSDN博客文章浏览阅读237次。定义了一套接口和属性,可以基于这个基础类派生出具有特定行为的AI组件。例如,可…

大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

Docker+consul容器服务的更新与发现

1、Consul概述 (1)什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点…

Spark实时(三):Structured Streaming入门案例

文章目录 Structured Streaming入门案例 一、Scala代码如下 二、Java 代码如下 三、以上代码注意点如下 Structured Streaming入门案例 我们使用Structured Streaming来监控socket数据统计WordCount。这里我们使用Spark版本为3.4.3版本,首先在Maven pom文件中导…

在 Spring Boot 中使用 Filters 实现请求过滤和预处理

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 什么是过滤器 过滤器(Filter)是一种在Web应用中用于拦截和处理HTTP请求和响应的对象。 在Java Web开发中,过滤器是实现特定功能,如认证、日志记录和字符编码处…

X-AnyLabeling标注软件使用方法

第一步 下载 官方X-AnyLabeling下载地址 github:X-AnyLabeling 第二步 配置环境 使用conda创建新的虚拟环境 conda create -n xanylabel python3.8进入环境 conda activate xanylabel进入X-AnyLabeling文件夹内,运行下面内容 依赖文件系统环境运行环…

MyBatisPlus复习

目录 自定义sql swagger工具 IService批量新增 代码生成器 DB静态工具,hutool工具 逻辑删除 枚举处理器 Json处理器 分页 自定义sql swagger工具 IService批量新增 代码生成器 DB静态工具,hutool工具 逻辑删除 枚举处理器 Json处理器 分页

ks滑块验证码逆向分析与python识别

文章目录 1. 写在前面3. 接口分析3. 算法实现 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…

大模型技术:发展历程、经典模型、微调与应用[更新中...]

文章目录 一、预训练语言模型发展历程二、经典的Pre-trained任务2.1 Masked Language Modeling2.2 Next Sentence Prediction 三、Task-specific Fine-tuning 任务3.1 Single-text Classification (单句分类)3.2 Sentence-pair Classification (句子匹配/成对分类)3.3 Span Tex…

谷粒商城实战笔记-71-商品服务-API-属性分组-前端组件抽取父子组件交互

文章目录 一,一次性创建所有的菜单二,开发属性分组界面1,左侧三级分类树形组件2,右侧分组列表3,左右两部分通信3.1 子组件发送数据3.2,父组件接收数据 Vue的父子组件通信父组件向子组件传递数据子组件向父组…

【BUG】已解决:The above exception was the direct cause of the following exception:

The above exception was the direct cause of the following exception: 目录 The above exception was the direct cause of the following exception: 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c…

【杰理蓝牙开发】AC695x 音频部分

本文主要记录 杰理蓝牙audio接口的使用,包括ADC和DAC原理的介绍和API接口的使用。 【杰理蓝牙开发】AC695x 音频部分 0. 个人简介 && 授权须知1. ADC【音频数据采集】硬件部分1.1 单片机引脚1.2 硬件电路设计1.3 MIC 输入通路解释 2. 【DAC】音频信号编解码…

Super 4PCS配准算法

Nicolas Mellado,CNRS(Centre national de la recherche scientifique,法国国家科学研究中心)的研究员,在IRIT(Institut de Recherche en Informatique de Toulouse,图卢兹计算机科学研究所&…

SAPUI5基础知识20 - 对话框和碎片(Dialogs and Fragments)

1. 背景 在 SAPUI5 中,Fragments 是一种轻量级的 UI 组件,类似于视图(Views),但它们没有自己的控制器(Controller)。Fragments 通常用于定义可以在多个视图中重用的 UI 片段,从而提…