打造自己的LoRaWAN网关,进阶2:处理异常
如果您只关心:打造一个LoRaWAN 网关,请参考《花一个小时,打造自己的LoRaWAN网关》
https://blog.csdn.net/jiangjunjie_2005/article/details/79758720
如果您感兴趣:如何让LoRaWAN 网关更稳定健壮,那本文再适合不过了。尽管它需要一点儿
Linux 知识,然而,这是每个“有耐心”的人都可以掌握的。
在LoRaWAN设备长期稳定性测试(冒烟测试)中发现,SX1301会停机,查看日志:"RF packets receivedby concentrator: 0"。
有一个差异:当SX1301 处于屏蔽良好的金属盒中,几乎没有该错误;而当 SX1301 裸露时,该错误很容易发生。
判断:这是因为SX1301接受到LoRa噪声而引发的停机。
所幸的是,当SX1301停机时,通过lgw_get_trigcnt()读取的值总是等于0x7E000000。这意味着,该异常是可以被检测到的。
一旦检测到该异常,将EXIT进程packet_forwarder。
Linux系统的systemd(初始化进程)会持续检测rime_gateway.service的状态,一旦EXIT,将重启该service。
当SX1301停机时,packet_forwarder捕捉到了该异常;systemd重启service时,会复位SX1301;这样又可以让SX1301正常工作。
一般而言,拨号网关会提供DNS服务,有时候,它会解析域名失败,导致Gateway无法与 Server 连接。
在 Gateway 上添加备用的DNS服务器IP
(8.8.8.8=GoogleDNS, 114.114.114.114=ChinaNet DNS)。
小心,不能直接添加在“/etc/resolv.conf”中,那样,上电时会被 DHCP 覆盖。
正确的办法是修改“/etc/network/interfaces”:
提高rime帐号的密码强度:sudo passwd rime(使用level_2密码)
修改root帐号密码:sudo passwd root(设置level_5密码)
禁止root帐号登录:sudo passwd –l root
查询其他帐号:grep ‘/bin/bash’/etc/passwd
删除其他帐号:sudouserdel –r pi(删除pi帐号)
使用同一网络的Linux机器,使用nmap扫描 Gateway的端口:
sudo nmap –sT 192.168.2.154(扫描TCP端口)
结果:仅sshd打开了端口,考虑ssh远程登录的需求,暂时保留。
sudo nmap –sU 192.168.2.154(扫描UDP端口)
在LoRaWAN设备长期稳定性测试(冒烟测试)中发现,SX1301会停止向 Server 推送数据包,查看日志,出现多个:"CRC_FAIL:100.00%"。
暂不清楚!
在lora_pkt_fwd.c:main() 中检测 "CRC_FAIL: 100.00%" 的次数,如果连续超过 3 次,将认为 SX1301 内部出现异常。
一旦检测到该异常,将EXIT进程packet_forwarder。
Linux系统的systemd(初始化进程)会持续检测rime_gateway.service的状态,一旦EXIT,将重启该service。
当SX1301连续出现 "CRC_FAIL: 100.00%" 时,packet_forwarder捕捉到了该异常;systemd重启service时,会复位SX1301;这样又可以让SX1301正常工作。
将 SX1278(节点)和 SX1301(网关)放置于同一实验桌,测试射频性能时发现丢包率大增,查看网关日志:CRC_FAIL超过 20%。
sx1301内部的信道划分是由带通滤波器完成的,距离过近,主频信号会在相邻信道产生很多谐波,而这些谐波会干扰 sx1301 的接收,也会增加主频信号的底噪,从而导致丢包率过高。
Node 和 Gateway 的距离至少需要 2 米。
SX1301模块最大允许输入功率为-15dBm,过大功率容易造成接收机饱和,甚至损坏硬件。如果距离很近(<10m),SX1278发射功率尽可能限制在10dBm内。
将 SX1278(节点)和 SX1301(网关)放置于不同的房间(距离超过 10 米),丢包率降低到可接受范围。
下载本文 PDF 文档:http://www.rimelink.com/nd.jsp?id=70#_np=107_316