之前博文中介绍过Direwolf的网关和Tracker功能,博主也在不断研读Direwolf和APRS的官方文档,力求发掘更多有用功能和创新玩法,这次带大家了解一下APRS的遥测数据包和其在Direwolf中的应用。
APRS最常见的活动是使用GPS信息绘制移动物体的位置信标,除此之外还可以使用短信息、遥测这些方式为信标附加公告和状态信息。APRS短信息大家应该都接触过,但对于遥测可能会有一些陌生,遥测和之前介绍的气象站类似,就是APRS台站通过脚本或传感器收集一些状态数据(如温度、电压、信号强度、开关状态等)发送给APRS-IS,而APRS-IS会以历史数据及图表的方式展示给我们。遥测数据包和普通位置数据包一样也有自己的格式标准,我们可以通过APRS官方文档68页第13章节以及Direwolf遥测实例文档来学习,下面博主就用自己APRS中继网关BG9EGA-10的遥测数据包举个栗子:
————————————————————-
数据
BG9EGA-10>APDW17:T#073,048,008,015,268,000,00000000
前面黑色部分为发送者呼号-SSID+软件版本、红色T(Telemetry)表示这是一个遥测数据包、蓝色部分是数据包编号(000~999)、绿色部分是要传递的5组遥测数据值(3位,空值用000表示),紫色部分本文暂不讨论。
————————————————————-
那么收到这条遥测数据包的台站可能会一脸茫然:这5组数值代表什么?单位又是什么?
那么接下来,我们只需将名称和单位分别以短信息(APRS Message)的方式发送过去,接收台站将其一一对应来解读那几组遥测数据值,例如:
————————————————————-
名称
BG9EGA-10>APDW17::BG9EGA-10:PARM.CPUTemp,DiGi,Tx,Rx
黑色部分为发送者呼号-SSID+软件版本+接收者呼号-SSID、红色“:”表示这是一个短信息(APRS Message)数据包、橙色用途是定义数值名称,绿色是数据名称内容,因为上文只传递了4组数据,所以这里只用写4个名称(博主传递的分别是APRS中继网关的:CPU温度、已中继信标个数、发送信标个数、接收信标个数)。
————————————————————-
————————————————————-
单位
BG9EGA-10>APDW17::BG9EGA-10:UNIT.C,p,p,p
格式和上面那条类似,这条定义了单位(例如博主定义的是:摄氏度°C和包个数packets)。
————————————————————-
遥测数据包的标准格式就是这样:数据值、名称、单位,希望博主的描述大家能够看懂。。。
APRS-IS接收如下:
那么我们如何获取这些数值并组装出这三个数据包呢?Direwolf附带了相应数据包生成命令工具,工具是Perl语言编写,需要安装语言环境(sudo apt-get install perl)。
参照Direwolf遥测实例文档,在Direwolf配置文件中分别用telem-parm.pl、telem-unit.pl、telem-data.pl工具创建三个自定义信标(CBEACON参照Direwolf官方文档第119页),例如博主的:
CBEACON SENDTO=IG DELAY=1:10 EVERY=20 INFOCMD="telem-parm.pl BG9EGA-10 CPUTemp DiGi Tx Rx" CBEACON SENDTO=IG DELAY=1:11 EVERY=20 INFOCMD="telem-unit.pl BG9EGA-10 C p p p" CBEACON SENDTO=IG DELAY=1:15 EVERY=20 INFOCMD="telem-data.pl `/root/shell/seq.sh` `/root/shell/telem.sh`,0,0"
解释:以IG网络方式发送给APRS-IS、启动1分钟后发送、而后每隔20分钟发送一次、内容是双引号内命令的执行结果。
前两条是上文提到的用来定义数值名称和单位的短信息(APRS Message),第三条就是遥测数据,其中seq.sh(000~999序号循环Shell脚本)和telem.sh(数值获取Shell脚本)是博主自己写的,给大家提供借鉴,根据自己的情况修改吧。
seq.sh
#!/bin/sh SEQ=`touch /tmp/seq` SEQ=$(expr \( $SEQ + 1 \) % 1000) SEQ=`printf "%03d\n" $SEQ` echo $SEQ | tee /tmp/seq
telem.sh
#!/bin/bash TP=`cat /etc/armbianmonitor/datasources/soctemp | awk '{printf("%d",$1/1000)}'` DG=`cat /var/log/direwolf.log | grep "\[0H\]" | wc -l` TX=`cat /var/log/direwolf.log | grep "\[0L\]" | wc -l` RX=`cat /var/log/direwolf.log | grep "audio level =" | wc -l` echo "$TP $DG $TX $RX"
编辑完配置文件重启Direwolf就可以去地图上看了。
目前只有aprs.fi可以显示遥测数据,但其使用谷歌地图导致我们无法打开首页,没有关系,直接访问遥测页面即可:https://aprs.fi/telemetry/a/BG9EGA-10,把结尾呼号-SSID改成自己然后访问吧。
APRS-IS为你保存一年的数据(每个SSID),是不是很爽!
博主调出了月数据,四个图表依次为:
主机CPU温度(天变冷了)
转发信标数量(设置的过滤器生效了,偶尔会有符合规则的信标被转发)
发射信标数量(每小时发射一个自身信标,每天共发射24个)
接收信标数量(看来最近几天周围的HAM很活跃啊)。
先评论再研究学习。
学习啦?
老铁,请教您这边有没有direwolf的详细搭建流程,IT小白想折腾一下,哈哈。。。
之前有篇“IGate网关”的博文,可以参照那个。
我手头有个优酷盒子+单工板,刷了openWRT固件可以玩MMDVM,就缺个aprs的玩法,看了您的iGATE博文,这个Armbian系统的电视盒子+SDR;请教一下,我的这一套有没有办法实现?
优酷盒子是ARM架构CPU可以运行,但Direwolf不支持OpenWrt系统,虽然可以在Docker下跑,但稳定性不好。
回头教教紫色的注释怎么弄呗,感觉挺个性哈。
配置文件里加一条
CBEACON SENDTO=IG DELAY=1 EVERY=30 INFO=”>文字”
哈哈。非常感谢,我也可以骚气起来了