LoRaWAN网络中的chirpstack

news2024/11/27 7:36:28

目录

一、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.coloradmin.cn/o/1952236.html

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

相关文章

【计算机网络】OSPF单区域实验

一:实验目的 1:掌握在路由器上配置OSPF单区域。 2:学习OSPF协议的原理,及其网络拓扑结构改变后的变化。 二:实验仪器设备及软件 硬件:RCMS交换机、网线、内网网卡接口、Windows 2019操作系统的计算机等。…

OpenSSL学习笔记及在项目中的使用

OpenSSL官方命令手册:OpenSSL commands - OpenSSL Documentation 参考教程: 操作:OpenSSL的基本使用教程(一)_openssl.exe使用教程-CSDN博客 操作:Linux和Shell回炉复习系列文章总目录 - 骏马金龙 - 博客园 (cnblog…

微服务安全——OAuth2.1详解、授权码模式、SpringAuthorizationServer实战、SSO单点登录、Gateway整合OAuth2

文章目录 Spring Authorization Server介绍OAuth2.0协议介绍角色OAuth2.0协议的运行流程应用场景授权模式详解客户端模式密码模式授权码模式简化模式token刷新模式 OAuth 2.1 协议介绍授权码模式PKCE扩展设备授权码模式拓展授权模式 OpenID Connect 1.0协议Spring Authorizatio…

揭秘!西藏首个基础教育信创示范基地,有何特殊之处?

学生可以通过玩游戏的方式来学习汉字,可以通过编程课件控制小汽车的行动轨迹,老师可以根据学生作业大数据,现场作精准解析与辅导……一个鼠标、一个键盘、一块屏幕,这是西藏首个基础教育信创示范基地的教学场景。 值得注意的是&am…

linux多线程概述和基本管理

线程概念 什么是线程? 线程是参与系统调度的最小单位。它被包含在进程之中,是进程中的实际运行单位。一个线程指的是进程中一个单一顺序的控制流(或者说是执行路线、执行流),一个进程中可以创建多个线程,…

流量卡流量与实际不符,这种是套路吗?

购买的流量卡与宣传不符,是不是套餐呢,这种并不是全部都是套路,目前常见的流量与实际不符的原因有:到账延迟、首月扣费模式、流量限制、虚假宣传等等,具体我们一块来看一下。 ​ 流量卡与实际不符的原因: …

git等常用工具以及cmake

一、将git中的代码克隆进电脑以及常用工具介绍 1.安装git 首先需要安装git sudo apt install git 注意一定要加--recursive,因为文件中有很多“引用文件“,即第三方文件(库),加入该选项会将文件中包含的子模…

怎样确保eBay自养号测评的真实性?高效运作与实操技巧

在eBay平台上,销量是衡量一个店铺成功与否的重要指标。然而,对于一些新开的店铺或者想要快速提升销量的卖家来说,仅仅依靠自然流量是不够的。这时候,自养号测评就成为了一种有效的手段。本文将从注册到提高销量的全过程&#xff0…

HTTP ESP8266 获取天气请求 单片机,嵌入式 2024/7/26 日志

通过http请求获取天气信息: 这里借鉴一下 中国气象局网站举例 首先根据网址 分析: http://weather.cma.cn/ 通过vscode插件:REST Client 发送请求我们会得到内容 首先我们的打开浏览器调试工具查看请求格式 筛选以下几个关键的格式,试着用插件发送请求 GET /web/weather…

昇思25天学习打卡营第23天|基于MobileNetV2的垃圾分类

文章目录 昇思MindSpore应用实践1、MobileNetv2模型原理介绍2、数据准备数据预处理操作 3、基于MindSpore的MobileNetV2模型搭建ReLU6激活函数深度可分离卷积MobileNetV2网络结构 4、模型训练与测试5、模型推理 Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25…

mysql面试(七)

前言 本章节列出了mysql在增删改查的时候,分别会涉及到哪些锁类型,又是如何交互的。 这个章节也是mysql面试基础系列的最后一章,后面准备更新redis数据类型和分布式锁相关问题。如果各位看官有什么问题的话,可以留言。 锁 之前…

【动态规划】不同路径

不同路径&#xff08;难度&#xff1a;中等&#xff09; AC代码 有点水 class Solution { public:int uniquePaths(int m, int n) {//以m为行&#xff0c;n为列&#xff0c;创建二维数组vector <vector<int>> dp(m1,vector<int>(n1));dp[0][1]1;dp[1][0]1;…

Python 教程(三):字符串特性大全

目录 专栏列表前言1. 字符串基础2. 字符串方法字符串查询字符串修改字符串切片 3. 字符串格式化旧式格式化&#xff08;% 操作符&#xff09;str.format() 方法f-string&#xff08;Python 3.6&#xff09; 4. 字符串编码5. Unicode 和 ASCII6. 正则表达式7. 字符串比较8. 字符…

LongAlign:大模型长文本处理能力提升之道

人工智能咨询培训老师叶梓 转载标明出处 大模型&#xff08;LLMs&#xff09;在处理长文本时&#xff0c;需要在输入序列上进行指令微调&#xff08;instruction finetuning&#xff09;&#xff0c;以确保它们能够有效地处理长文本。现有的方法主要集中在上下文扩展&#xff0…

ACC2.【C语言】经验积累 栈区简单剖析

int main() {int i0;int arr[10]{1,2,3,4,5,6,7,8,9,10};for (i0;i<12;i){arr[i]0;printf("A");}return 0; } 执行后无限打印A 在VS2022&#xff0c;X86,Debug环境下&#xff0c;用监视后&#xff0c;原因是arr[12]的地址与i的地址重合&#xff08;数组越界&…

c++语言学习注意事项

当学习C语言时&#xff0c;有几个重要的注意事项可以帮助初学者更有效地掌握这门强大的编程语言&#xff1a; 1. 理解基本概念和语法 C 是一门复杂且功能强大的编程语言&#xff0c;因此理解其基本概念和语法至关重要。初学者应该重点掌握以下几个方面&#xff1a; 基本语法和…

BIO示例代码

一个请求开一个线程 package org.example.demo;import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;/*** author hrui* …

2024年第四届网络通信与信息安全国际学术会议(ICNCIS 2024,8月23-25)

2024年第四届网络通信与信息安全国际学术会议&#xff08;ICNCIS2024&#xff09;将于2024年8月23-25日于杭州召开。 会议围绕网络通信在信息安全领域中的最新研究成果&#xff0c;为来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者、工程师等提供一个分享专业经…

智能化车载视频监控技术的崭新发展与应用

随着国内4G网络的快速建设和发展&#xff0c;智能车载终端监控领域的高清化进程也日益加快。尽管传统的车载终端监控已经在视频录像、GPS定位等基本应用方面取得了一定的成果&#xff0c;但随着视频分析技术的不断进步&#xff0c;普通视频监控已经无法满足日益增长的车载监控新…

基于DMASM镜像的DMDSC共享存储集群部署

DMv8镜像模式共享存储集群部署 环境说明 操作系统&#xff1a;centos7.6 服务器&#xff1a;2台虚拟机 达梦数据库版本&#xff1a;达梦V8 安装前准备工作 参考文档《DM8共享存储集群》-第11、12章节 参考文档《DM8_Linux服务脚本使用手册》 1、系统环境(all nodes) 1…