2022年1月基本站2.0.6文档
LNS协议¶
连接一个罗拉基础™站LoRaWAN®网络服务器(LNS)是一个两步的过程使用WebSocket传输协议交换文本记录包含json编码的对象。
首先,车站查询的LNS LNS的实际连接端点的URI。第二,它建立了一个数据连接端点接收设置信息。从那时起,罗拉®上行和下行帧交换连接。这种方式,一个LNS可能动态网关分配给不同的数据连接端点为了,例如,分发负载或地理相邻。
请注意
LNS服务分配数据连接端点可以LNS分开。同时,服务可以运行在服务器分开LNS连接端点,这可能是分布在不同的服务器。
查询LNS连接端点(发现)¶
默认情况下,最初的URI查询是由文件的内容tc.uri
通过添加路径/ router-info
(见凭证其他选项)。这形成一个WebSocket端点提交以下JSON对象:
{“路由器”:ID6|行,|整数}
这里车站仅仅是宣布其身份和问路LNS应当连接到连接端点。身份是一个64位的行提供的字段路由器
,无论是在一个字符串的形式编码的行ID6或行,格式,或作为一个整数值代表行。
根据授权方案(见身份验证模式),LNS应当确认声明的身份匹配提供的凭证并回答以下JSON对象,之后立即关闭连接:
{“路由器”:ID6,“mux”:ID6,“uri”:“URI”,“错误”:字符串/ /只有在出错的情况下}
这个领域路由器
包含标准化的网关的身份。的mux
字段包含LNS的身份连接端点选择LNS的领域uri
包含此连接端点的地址。车站然后连接到这个URI与LNS建立数据连接。
如果不能确定网关,或者有其他问题,响应包含一个对象错误
字段描述问题。这可能是因为字段mux
和uri
人失踪。
连接到一个LNS¶
查询成功后的LNS数据连接端点,车站会连接到端点URI,使用当前配置的凭证。如前所述,建立链接是一个WebSocket连接站,LNS交换JSON对象。每一个JSON对象,一个上行(即是否,from Station to LNS) or a downlink (i.e., from LNS to Station), must have a field namedmsgtype
标识消息的类型,决定了结构的JSON对象。
对WebSocket连接已经建立后,车站发送一个版本
消息。接下来,LNS应当回应router_config
消息。正常运行之后,开始上行/下行消息如下所述。
版本消息¶
第一站发送的消息是一个版本
消息,报告对LNS的版本信息(例如,站
,固件
,模型
),协议版本(常数2
现在),和一个可选特性列表支持的网关。那就是:
{“msgtype”:“版本”“站”:字符串“固件”:字符串“包”:字符串“模型”:字符串“协议”:INT“特征”:字符串}
的特性
字符串的空格分隔的列表下面的关键词:
rmtsh
车站:支持远程shell访问与LNS通过建立WebSocket连接。刺激
:车站是建立在生产水平,也就是说,某些测试和调试功能可能被禁用。全球定位系统(gps)
车站能够访问一个GPS设备。
router_config消息¶
LNS必回复版本
消息,该消息带有一个router_config
消息指定一个电台频道计划和定义一些基本操作模式:
{“msgtype”:“router_config”“NetID”:(INT,。。]“JoinEui”:((INT,INT),。。]/ /范围:乞讨,包容“地区”:字符串/ /可选的,如“EU868”、“US915”. .“max_eirp”:浮动/ /可选“hwspec”:字符串“freq_range”:(INT,INT]/ /分钟,马克斯(赫兹)“博士”:((INT,INT,INT),。。]/ /科幻、bw dnonly“sx1301_conf”:(SX1301CONF,。。]“bcn”::BCNCONF“nocca”:BOOL“nodc”:BOOL“nodwell”:BOOL}
的字段NetID
和JoinEui
用于过滤罗拉帧接收到车站。NetID
是接受NetID值的列表。任何罗拉数据帧携带NetID以外的上市将会下降。JoinEui
是对整数值的列表加入行编码范围。加入请求帧将下降了车站,除非该领域JoinEui
在消息满足条件BegEui < = JoinEui < = EndEui至少一对[BegEui, EndEui]。
的字段nocca
,nodc
,nodwell
只在调试版的车站。他们的目的是禁用某些监管输电约束,即clear channel评估、频宽比限制,和停留时间限制。
的地区
字段中指定的区域渠道计划。它控制某些监管行为如clear channel评估、频宽比限制和停留时间限制。有效的名字是兼容常见名字LoRaWAN区域参数规范中指出。此外,为了向后兼容,除外,以下名称映射到各自的名称在括号:EU863 (EU868) US902 (US915)。如果省略该字段然后站在一个地区不可知论者模式。
的max_eirp
字段指定一个maxmimum输出功率。如果没有这个字段,那么有针对性马克斯附近使用价值。在缺席的情况下区域说明符,它默认为14。如果max_eirp
存在,只有通过降低区域价值。
的hwspec
字段描述所需的集中器硬件操作通道计划交付router_config
消息。指定字符串必须有以下形式:sx1301 / N
,在那里N表示SX1301集中器芯片的数量需要操作通道计划。车站将检查这个需求对其硬件功能。
的freq_range
字段定义的可用频谱的上限和下限为该地区集。车站不允许这个频率范围以外的下行传输。
的DRs
通道内的字段定义了可用的数据率的计划。它必须是一个数组的16个条目。每个条目是一个数组的三(3)整数编码扩频因子(科幻小说
)、带宽(BW
),以及一个DNONLY
国旗。科幻小说
必须在7 - 12范围罗拉®,或0移频键控。BW
必须的数字:125,250,500。BW
移频键控的被忽略。
请注意
DNONLY
必须1如果下行帧的数据率是有效的,和0如果不是。
的sx1301_conf
字段定义了如何映射到单个SX1301芯片通道计划。它的值是一个数组SX1301CONF对象。数组元素的数量必须符合的价值hwspec
字段。
的布局SX1301CONF
对象是这样的:
{“radio_0”:{。。}/ /与radio_1相同的结构“radio_1”:{“启用”:BOOL,“频率”:INT},“chan_FSK”:{“启用”:BOOL,“广播”:0|1,“如果”:INT},“chan_Lora_std”:{“启用”:BOOL,“广播”:0|1,“如果”:INT,“带宽”:INT,“spread_factor”:INT},“chan_multiSF_0”:{。。}/ / _0 . ._7都有相同的结构。。“chan_multiSF_7”:{“启用”:BOOL,“广播”:0|1,“如果”:INT}}
的bcn
字段是没有一个
或BCNCONF对象布局如下:
{“博士”:INT“布局”:(INT,INT,INT]“频率”:(INT,。。]}
这些字段的值可以从区域中提取目的规范LoRaWAN标准。的博士
字段定义了数据率用于灯塔。的布局
消息的字段指定插入的八位字节偏移量字段时间
和GwSpecific
,其次是beacom PDU的长度。的频率
字段定义了广播的频率信号。一个典型的设置将{“博士”:3,“布局”:[2,8,17],“频率”:为区域EU868 [869525000]。
上行消息¶
上行信息可以分为两类:
反映LoRaWAN广播帧的接收的消息。
管理信息与LoRaWAN网络服务器交互。
都共享一个公共组字段在下一节中描述。后续部分描述个人广播消息类型编码和管理信息,分别。
电台的元数据¶
以下字段的所有消息编码LoRaWAN广播帧。这些字段反映任何附带的元数据和时间信息广播帧:
{…“博士”:INT,“频率”:INT,“upinfo”:{“rctx”:INT64,“xtime”:INT64,“gpstime”:INT64,“rssi”:浮动,“信噪比”:浮动}}
的博士
字段是数据帧接收速率;可能的值是整数的范围从0到15。的频率
在赫兹编码接收频率。可能的值的博士
和频率
取决于当前频道的计划。
的upinfo
对象包含一些站所需的上下文来处理后续匹配下行帧。的字段rctx
和xtime
通过LNS传递,必须添加到下行消息匹配的类。
的gpstime
字段是接收帧的时间戳,表达了GPS时代以来微秒。如果车站没有访问PPS GPS时间同步,这个字段的值是0。
LoRaWAN加入请求¶
加入请求帧解析和各个部分返回字段,如下所示。这种类型的消息也字段中讨论电台的元数据。
{“msgtype”:“jreq”,“MHdr”:使用UINT,“JoinEui”:行,,“DevEui”:行,,“DevNonce”:使用UINT,“麦克风”:INT32,。。}
请注意
这个领域麦克风
被表示为一个32位带符号整数。
LoRaWAN数据帧¶
数据帧解析和各个部分返回字段,如下所示。这种类型的消息也领域讨论的部分电台的元数据。
{“msgtype”:“updf”,“MHdr”:使用UINT,“DevAddr”:INT32,“FCtrl”:使用UINT,“FCnt”,:使用UINT,“录像”:“六角”,“FPort”:INT(- - - - - -1 . . 255),“FRMPayload”:“六角”,“麦克风”:INT32,。。}
如果帧不包含一个港口,字段的值FPort
是1。如果不带选项或数据帧,字段的值录像
或FRMPayload
分别将空字符串。否则这些字段包含十六进制字符的字符串。
请注意
的字段DevAddr
和麦克风
表示为32位有符号整数。
LoRaWAN专有的帧¶
帧标记为私有转发以下形式,即整个帧载荷沿粗略的传递。这种类型的消息也领域讨论的电台的元数据的话题。
{“msgtype”:“propdf”,“FRMPayload”:“六角”,。。}
请注意
这个领域FRMPayload
包含整个LoRaWANPHYPayload
在的情况下msgtype: propdf
发送确认¶
车站承认LNS的传输请求消息的类型dntxed
。这个消息只发送一帧被实况转播的。没有反馈LNS如果不能发送一帧(例如,因为它已经太迟了,有一个冲突不断传播,或网关的工作周期是耗尽)。总结了这些条件在健康状态信息,不引发个体的反应。
{“msgtype”:“dntxed”,“也”发誓:INT64,“DevEui”:“行,”,“rctx”:INT64,“xtime”:INT64,“txtime”:浮动,“gpstime”:INT64}
的diid
字段是一个副本diid
字段dnmsg
消息。它能够识别一个特定的设备交互和使用LNS引用一些内部状态。它是传递不变的车站。
的rctx
字段指定用于传输的天线,xtime
场的内部时间帧时将实况转播的。
下行消息¶
本节将介绍使用的所有消息类型LNS LoRaWAN传输数据帧。
单帧下行是回应一个类或类C上行帧,或者主动下行帧类B或C类交互。使用多帧下行调度多播帧序列。
单帧下行¶
站支持下行的A类、B和c三个类,使用相同的消息类型,但不同领域需要礼物。
一个类一下行框架是一个回应此前发送的上行。类的布局需要以下字段:
{“msgtype”:“dnmsg”,“DevEui”:“行,”,“直流”:0,/ /类“也”发誓:INT64,“pdu”:“六角”,“RxDelay”:INT(15 0 . .),“RX1DR”:INT(15 0 . .),“RX1Freq”:INT,“RX2DR”:INT(15 0 . .),“RX2Freq”:INT,“优先”:INT(255年0 . .),“xtime”:INT64,“rctx”:INT64}
的diid
字段是一个数字发行的LNS识别一个特定的设备交互。这两个,diid
和DevEui
站的传递吗dntxed
消息。DevEui
的情况下可以使用LNS维护吗diid
作为一个特定于设备的标识符。同时,知道了DevEUI
特定的下行所属可以有利于检查网关日志。LNS可以选择集DevEUI
任何非零值。的pdu
字段是广播帧,因为它将实况转播的。
车站会选择RX1或RX2传输参数,在RX1优先。如果帧到达太晚,或者传输阻塞,它将尝试RX2。力决定,LNS可以省略RX1或RX2参数。在任何情况下,RxDelay
之间的延迟是年底RX1开始上行传输和接收设备的窗口。准确的结束时间是隐式地编码在传播xtime
。RxDelay
应该有相同的价值吗RxDelay
在加入接受消息。站会自动推断RX2延迟增加1秒。
的优先级
字段是遇到冲突时使用的传输请求。LNS可以更高的优先级帧携带确认或一些重要的MAC命令。如果两个帧冲突,越高优先级
值是首选。
的xtime
和rctx
字段包含的值来自相应的上行消息。这些值必须被LNS传递而不被改变。他们使用的车站管理适当的传输时间和处理天线关联。
一个C类下行框架回答一个上行和旨在RX1,看起来几乎相同的类dnmsg
消息。唯一的区别是直流
声明一个C类交互。如果传输不能使RX1机会,车站就会切换到RX2参数和选择一个方便的时间发送帧。有一个最长时间站将推迟之前传输帧将被丢弃。自从RX2下行机会为C类设备是任意的,RxDelay
只是用来计算RX1机会在这种情况下。
{“msgtype”:“dnmsg”,“DevEui”:“行,”,“直流”:2,/ / C类“也”发誓:INT64,“pdu”:“六角”,“RxDelay”:INT(15 0 . .),“RX1DR”:INT(15 0 . .),“RX1Freq”:INT,“RX2DR”:INT(15 0 . .),“RX2Freq”:INT,“优先”:INT(255年0 . .),“xtime”:INT64,“rctx”:INT64}
一个C类下行不回答一个上行帧必须在下面的例子中显示的字段。传输将推迟到车站发现一个方便的时间段。如果没有这样的机会,框架将下降后可配置的时间;默认是一个(1)。
虽然rctx
字段是可选的,它可以用来选择天线的偏好。LNS可以复制这个领域从先前的a类上行和指导车站使用相同的天线收到该类上行。
{“msgtype”:“dnmsg”,“DevEui”:“行,”,“直流”:2,/ / C类“也”发誓:INT64,“pdu”:“六角”,“RX2DR”:INT(15 0 . .),“RX2Freq”:INT,“优先”:INT(255年0 . .),“rctx”:INT64}
一个B类下行框架需要以下字段:
{“msgtype”:“dnmsg”,“DevEui”:“行,”,“直流”:1,/ / B类“也”发誓:INT64,“pdu”:“六角”,“博士”:INT(15 0 . .),“频率”:INT,“优先”:INT(255年0 . .),“gpstime”:INT64,“rctx”:INT64}
类B帧的传输要求LNS提供GPS-aligned时间。GPS时代以来的值是用毫秒表示。
可选rctx
字段可以用来选择天线的偏好。LNS可能复制这类字段从先前的上行和指导车站使用相同的天线收到该类上行。
请注意
的DevEui
在所有dnmsg
消息不能为零。零是一个保留值。
多播的时间表¶
消息的类型dnsched
可以用来安排一组多播消息。每个消息的元素需要指定一个GPS时间应当被发送。这种类型的传输不会生成dntxed
从车站的反应。
{“msgtype”:“dnsched”,“安排”:({“pdu”:“六角”,“博士”:INT(15 0 . .),“频率”:INT,“优先”:INT(255年0 . .),“gpstime”:INT64,“rctx”:INT64},…]}
可选rctx
字段可以用来选择天线的偏好。LNS可能复制这类字段从先前的上行和指导车站使用相同的天线收到该类上行。
监控往返时间¶
站之间的消息交换和LNS允许监视跟踪某些字段到正常往返次消息交换。LNS可能添加MuxTime
场每一个下行发送到一个站:
{“msgtype”:“. .”“MuxTime”:浮动/ /下行。。}
的MuxTime
字段包含一个浮动值,它代表了UTC时间戳,分数秒,标志着当时LNS的消息被发送。车站就会回应通过添加字段RefTime
:
{“msgtype”:“. .”“RefTime”:浮动/ /上行。。}
的RefTime
从去年收到场计算MuxTime
调整后的时间间隔之间的路由器的到来MuxTime
和发送RefTime
。因为频繁的下行流量小于上行消息,很有可能MuxTime
可能被重用构建多个RefTime
字段。这意味着往返延迟的测量是由过去的下行消息和最新的上行消息。
时间同步¶
时间同步有两种操作模式:
访问pp
PPS的独立。
PPS GPS时间同步¶
如果一个站访问PPS一致的GPS秒,它会推断出GPS时间同步与LNS通过运行一个协议。推断出正确的GPS时间标签对于给定的PPS脉冲,车站将继续发送timesync
上行消息LNS下游应及时回答timesync
消息。
格式的上游信息:
{“msgtype”:“timesync”“txtime”:INT64,}
下游反应后应立即由LNS发送接收相应的上游timesync
。LNS将插入gpstime
场和通过txtime
场,收到站,txtime
一些当地未指定的时间到车站。
这个领域gpstime
标志着当时LNS的即时处理timesync
消息。它的值是GPS时代以来的时间以微秒为单位。
{“msgtype”:“timesync”“txtime”:INT64,“gpstime”:INT64}
将GPS时间¶
LNS应当定期发送以下信息传输GPS时间到车站。
{“msgtype”:“timesync”“xtime”:INT64,“gpstime”:INT64}
这个领域xtime
特定的车站和GPS时间推断从上游帧到达LNS重叠。
远程命令¶
站支持两种机制运行远程命令网关:
{“msgtype”:“runcmd”“命令”:字符串,“参数”:(字符串,…]}
的命令
字段包含实际的命令来执行。根据其内容,车站会表现如下:
如果设置了可执行的旗帜,车站运行命令指定的一组参数。
如果它是一个文件但不执行,车站将包含一个shell脚本,并将它作为一个文件,连同参数,为解释系统的本地shell。
如果以上都不是是真的,车站假设
命令
值代表壳牌语句。它运行本地shell和传递参数的值作为表述一起执行。
的参数
字段是可选的,可以缺席或一个空数组。如果现在和非空,这些参数传递的命令。
远程Shell¶
站支持远程shell会话隧道通过WebSocket LNS。会话启动的命令如下所示。在会话建立之后,壳牌的输入数据和输出数据生成的外壳和其命令通过WebSocket隧道作为二进制记录。一个站可以维护多个会话。是这样的话,第一个字节的二进制记录会话指数。剩余的字节的二进制记录的输入/输出数据。WebSocket传输的编码是透明的。
查询、启动或停止一个会话,LNS必须发送以下信息:
{“msgtype”:“rmtsh”,“用户”:字符串,“术语”:字符串,“开始”:INT,“停止”:INT}
如果字段开始
和停止
缺席,当前会话状态查询。否则,只有一两个字段的存在,分别指示一个会话启动或停止。
的值术语
字段的值术语
环境变量。这是之前设置本地shell启动。
的用户
字段描述用户操作会话。对车站这只是信息上下文数据。
车站就会回复以下消息描述所有会话的当前状态:
{“msgtype”:“rmtsh”,“rmtsh”:({“用户”:字符串,“开始”:BOOL,“年龄”:INT,“pid”:INT},。。]}
的年龄
场以来的时间间隔,以秒为单位的输入/输出操作远程shell会话。
的pid
字段是本地进程标识符开始的壳。
的开始
现场实际运行表明,壳过程。