VariFlight ADS-B-Flightradar中文

在某些方面, Flightradar已成为家喻户晓的名字,实际上取代了“您可以实时观看飞机的站点”的概念。 尽管实际上有几个这样的大型站点,甚至还有一些小型项目,但是您经常可以在媒体上看到有关航空事件的新闻,其中包括“根据Flightradar网站”和来自其他资源的屏幕截图。

在哈布雷(Habré)上有许多有关雷达端口的出版物,其中或仅在评论中提到了Flightradar。 在本出版物中,我将讨论中国的空中交通跟踪服务及其免费的ADSB接收器。



雷达探空是一项有趣的活动,足以吸引大量的人。 关于哈布雷的几篇文章很好地描述了本课程的本质:


接收机接收飞机发送的1090 MHz频率的信号,然后解密并以某种格式发送。 例如,像这样:

{"updatetime":1537902225,"UTC Time":"2018-09-25 19:03:45","anum":"TCETM","fnum":"KKK6944","position":{"long":30.66455078125,"lat":39.351677},"height":10005.06,"speed":888.96,"angle":130}, 

该活动不仅有趣,而且已成为多家公司的活动:


很少有人想到他们如何谋生以及像Flightradar这样的服务如何工作。 在Wikipedia“ 允许实时监视飞机在空中的位置的公共Web服务 ”中可以看到一个示例。 文章本身和标题对Flightradar作为一种娱乐服务产生了错误的印象。

实际上,这些公司在2000年代初开始成为一种业余爱好,因此很快就达到了投资回收期并逐年增加收入。 例如,成立于2005年的Flightaware在2006年就已经开始盈利,在前18个月的收入超过100万美元,并且每年以40-75%的速度增长。 根据一些资源,Flightaware的年收入超过900万美元,Flightradar的年收入超过200万美元。

如果在欧洲有Flightradar,在美国有Flightaware,那么在中国有VariFlight。 类似地,该服务交易航班状态,统计数据和航班档案,为客户(组织和个人客户)执行分析和预测。

VariFlight自己的话:

  <meta name="description" content="VariFlight         .    ,      ,    .    ,     ,         ."> <meta name="keywords" content=" ,   ,  ,  ,  ,  ,  ,  ,  ,   ,  ,  ,  ,  ,  "> <meta property="og:url" content="http://www.variflight.com/ru/"> 

公司交易自己的数据和例如从美国联邦航空管理局获得的数据。 但是,您可以从自己的接收器中获得最大利润,而接收器的运行对公司没有任何影响。 它们由雷达探测爱好者安装,您只需要在制造和运输上花钱。 因此,从某个时候开始,公司开始免费出售和分发其接收器。 免费到公司尚未覆盖其接收器网络且没有数据的地方。

数据成本证明了接收器的“免费”分发是合理的(请注意表格下方的文本-接收器仍然是Flightaware的财产,已正式免费租赁)。


到2015年,Flightradar网络已拥有8000多个活动接收器,Flightaware拥有约4500个接收器,但Flightaware在两年前就开始分发接收器,而Flightradar已经建立了将近十年的网络。 目前 ,Flightaware网络上的接收器超过15,000。 Flightaware接收器软件正在不断改进,目前可与FMSDATA,FMSWX数据一起使用。

2017年3月接收器的位置图:

图片

橙色是免费的Flightaware接收器,白色是自制的接收器,红色是付费的PlanePlotter

以下是2015年12月Flightaware接收器网络的覆盖范围:


2017年3月,Flightaware接收器网络( 场外的当前状态 )提供了以下覆盖范围:

图片

并非总是可以安装接收器,因此在2018年,来自地面接收器的数据将由Iridium NEXT卫星提供的数据进行补充: “这将是首次有可能连续监视飞机在世界任何地方


灰蓝色-来自铱星NEXT卫星的数据。 绿色和黄色(最后一个是MLAT )-来自地面接收器的数据。

一个站所覆盖的区域的半径受地球表面的曲率和覆盖地平线的障碍物的限制,并且最多不超过450公里。 并在“通常情况下”约150公里。 由于此射频具有罕见的对流层通道 ,因此有可能超越视野。 Planeradar.ru上广播电台的最大覆盖区域的示例:


接收图中的尖峰只是很远距离的孤立接收情况。


下面的动画显示了导致发送接收方的原因。 在欧盟/美国以外,这种爱好不是很受欢迎。 业余爱好的花费可能是有原因的,并且此地图间接指示了该地区的福利水平,技术教育和人口密度。 也许这件事是切合实际的-传输接收者数据的用户将获得一个免费的公司Flightaware帐户 ,每月费用为90美元。


因此,概述了这种情况。 该服务的市场正在增长,市场需要更多数据,VariFlight也开始部署其网络。 2018年4月,VariFlight宣布它正在寻找志愿者来托管免费设备。 Instagram帖子中此类帖子的示例。

在8月,我在http://flightadsb.feeyo.com上免费订购了该接收器(该站点于2019年9月关闭-新站点flightadsb.variflight.com以及此处订购设备的链接)。 在研究了该站点之后,我注意到该公司正在寻找中国边境附近国家的自愿网络成员。 在填写调查表时,他并不特别希望南部联邦区在公司的关注范围内。


在应用程序本身中,需要在地图上指示安装位置( 安装位置 ),建筑物上天线安装的楼层(安装楼层 ,例如9层建筑物的7/9-7楼),最近的机场代码机场代码 -我表示了IATA代码)和从安装站点下载地平线照片。 除标题,国籍,职业,公司等项目外,其余与Aliexpress上的订单几乎相同。 它用英文全名填写。

几周后检查邮件后,我发现来自ADSB展示系统(ADS-B的显示系统)的两封电子邮件表明,该申请几乎立即获得批准,并且包裹已经很早就送给我了很长时间,当时已经通过了海关检查。


在第二个字母中,有包裹的用户名,密码和磁道号。 还有一条我什么时候都没有注意到和阅读的指令……您自己知道他们何时通常会阅读该指令。


登录名与应用程序中的全名相对应,并且密码显然也发送给了所有人。 因此,请立即更改密码(如果需要,请登录)。

通常,如果有人记得德国人在口音游戏中讲俄语的话,“突击罢工”游戏中的“这有点废话”这个短语越来越多地出现在我的脑海中。 有时安静,有时响亮。

顺便说一句,个人资料是唯一的英文页面,然后所有内容都将以中文显示。 在Habréwtigga上,发表了一篇有关中文互联网的出色文章“中文互联网与软件:关于痛苦” 。 刚才我感到所有的痛苦。 如果您还没有阅读,那么是时候准备了。


具有翻译功能的Google Chrome浏览器将帮助您在网站上工作,但是许多页面对他而言并不总是可行的。


这些地方将是有趣的短语。


因此,使用第二封电子邮件中的数据登录。


并转到个人信息 。 事实证明,谷歌浏览器不能总是翻译页面,或者它不是第一次失败,在这种情况下,经过多次尝试自动翻译之后,我们不得不将文本复制到Google翻译。 因此,我为遇到相同问题的人提供了提示。

页面上有两个选项卡,其中的活动选项卡用红线标记。 首先,您无法触摸任何东西。


  1. 全名
  2. 您的电话号码
  3. 您的电邮
  4. 机场代码
  5. 您的ADSB接收器的名称

QQ点是腾讯QQ中文信使

在第二个标签上,更改密码


  1. 旧密码
  2. 新密码
  3. 重复输入新密码

除此之外,自动翻译几乎总是可行的。 站点地图的设计非常接近Flightradar站点,并且翻译的“功能”并不妨碍其使用。


经过详细检查,该服务有所不同,例如,Flightaware没有的有趣功能 - 热图 ,由Google Chrome浏览器翻译为“热分析”。


一些航班上的一个有趣功能:


可能没有有关此航班的起降机场的信息。

包装和接收器概述


根据快递单号,包裹已于9月6日发送并于9月18日收到。 盒子的尺寸实实在在地使邮政工作人员惊讶。 在从邮局里面的途中,有些东西嘎嘎作响,叮叮当当和滚动。


由于缺少包装材料,打开的盒子有些惊讶。


为了进行比较,请在Flightaware接收器上的包装盒内。


令人惊讶的是,盒子里的东西似乎没有受到影响。 仅在天线上有刮痕-胶片被撕下。


接收器本身只有两个连接器的铭文-电源和HDMI。 除两个外,所有连接器都显示在一侧。 LAN,2个USB端口,四针连接器(假设已通过拨打BCM 14(8针TXD /发送)确认了此串行接口,
BCM 15(10针RXD /接收),5伏电源和SMA(母)天线连接器。


在相对的一侧,在壳体的两个孔后面,有绿色和红色的LED。 旁边是带有接收者“序列号”的标签,用手记录下来。 接收器还具有HDMI和microUSB。


接收器盖有两个用于壁挂式安装的耳朵,这使它与Flightaware接收器的几乎相同的外壳区分开来,制造商在底部只提供了四个硅胶腿。


检查这两个耳朵是否可以用于安装接收器:


Flightaware Flightfeeder倒置:


要比较接收器尺寸:


自然的问题是“里面有什么?” 卸下用4颗螺丝固定的盖子后,我们看到了这样的布置。


连接器位于单独的接收板上,以Raspberry Pi 3 Model B V1.2的扩展卡的形式制成。

为了进行比较,提供了没有盖子的Flightaware Flightfeeder(G6)的照片。 这一代接收器一直被发送到2017年左右。 基于RPi 2 Model B v.1.1和Mode-S Beast接收器-解码器简化为一个通道。


此设计的背面隐藏了意外的元素。 位于电路板底部的巨大散热器令人惊讶。 对此的需求是不可理解的(一周后,我认为这是“热带性能”。在我的条件下,散热器略微发热)。


此外,扩展板通过三根线焊接到测试点PP27(USB VCC),PP44(USB D-),
PP45(USB D +)。


即 右上方的USB接口无法连接任何东西。 因此,位于上方的机箱照片显示了两个成对的USB连接器,机箱中的插槽仅与最靠近LAN的插槽相对。


他们在Flightaware中做同样的事情,将接收器焊接到其中一个连接器的触点上。

大部分扩展板是金属屏幕。 在可见部分中,连接器在一侧,而在另一侧是两个指示器和带有水龙头的特定“线圈”。 提醒分流器使用可变电阻。 也许是1div0 ,这是“为什么要弯曲轨道?”一文的作者。 知道是什么。 在正常操作期间,绿色LED指示灯亮。 在哪种情况下,红灯会亮起-我不知道。 直到我看到它的包含。


在连接器的侧面有电源和天线连接器,以及目的不明的四针连接器。

所有电子设备都隐藏在屏幕的大锡盖下。 使用Flightaware Flightfeeder,接收器板未屏蔽。 在Flightaware论坛上,开发人员回答了这个问题,即接收器本身的金属外壳足以保护它免受外部干扰。


尝试从屏幕下方看是第二种方法的成功。 盖子掉了,原来是...


...事实证明,一切都徒劳无功-小心翼翼地切下了带有微芯片的标记。


展望未来,我要说的是,它几乎是一款普通的RTLSDR接收器-RTL2832U DVB-T (0bda:2838),称为“加密狗”,“吹口哨”,并专门介绍了哈布雷(Habré)上的几篇文章,这些文章对这些设备以及如何使用它们进行了介绍他们简化并降低了计算机上无线电信号的接收和处理的实现。 例如:


最后一个很好地描述了问题的背景:
DVB-T格式的用于数字电视接收机的RTL2832U芯片的发布并没有引起任何轰动,因为Realtek的发布已经有点晚了。 在2010年,已经引入了具有更高效率的信息编码的更先进的DVB-T2标准,因此最初的新颖性并未引起太多关注。 两年来,基于它的廉价USB调谐器一直用于其预定目的,直到2012年初,有关该芯片工作模式的一些技术信息仍在泄漏。 事实证明,为了接收VHF频段的模拟(FM)和数字(DAB)无线电,该芯片采用了对以前从以太数字化的频段进行软件解码的原理。 即 粗略地说,它会将来自天线输入的高频信号数字化,然后对特定载波进行滤波并从接收到的数字流中进行检测(提取有用信息),然后交给中央处理器。 显然,这样做是出于经济原因,与日落拨号时一样,极其便宜的“软调制解调器”(也只代表一对高级DAC和ADC)普及了起来,所有信号处理均由CPU进行。优先级最高的线程。

与我拥有的“常规调谐器”不同,此USB ID 0bda:2832实例的序列号为17位。
总线001设备005:ID 0bda:2832 Realtek Semiconductor Corp. RTL2832U DVB-T
找到Rafael Micro R820T调谐器
即 与用于创建自制ADSB接收器的“蓝哨”类似。 在照片中,接收器在OrangePI上。


将接收器组装回去,我安装了一个散热器以防万一。 专为完成路由器和其他家用设备而购买。


电源5V 2A。 它看起来比Flightaware Flightfeeder的电源更坚固。 但是用中文插头...我试图记住适配器在哪里。


一盒白色的硬纸板装着一个漂亮的天鹅绒小袋。


“……在胸部-野兔,在野兔-鸭子,在鸭子-鸡蛋,在鸡蛋-针头……”


里面有三个适配器的谜题,解决了“我的适配器在哪里”的问题。


在一个棕色纸板箱中装有避雷器“ CA-23RP 2.5GHZ 400W日本制造”。 我不知道其他ADS-B接收器的这种配置。 对于低功率事故保护非常合理。


室内天线很可能无需安装外部天线即可测试接收器。 不适合实际使用。 但它在Aliexpress / Ebay上以“ ADS-B天线”的形式出售,但其真正目的是通过磁性鞋底上的铭文给出的。 我曾经在不超过30-40 km的半径内抓住此天线上的飞机。

在适配器N(母)-SMA(公)附近。 如果连接滤波器或低噪声放大器,则可能是礼物。


带N和SMA连接器的5米天线天线电缆和10米双绞线电缆(“ 100%无氧铜,blablabla”)。


标记为KOPA PLESS RG400-KF MIL-C-17的天线电缆。 谷歌M17 / 128-RG400 RG-400双编织软同轴电缆 ,具有不同的护套颜色:

  • 最高工作频率6 GHz
  • 在1.20 GHz的频率下,最大衰减为0.54 dB / m

这些是中国电缆的特征,这令人怀疑。 顺便说一句,尽管意大利,Flightaware附带了一条糟糕的天线电缆。 将天线的电缆缩短到几十厘米的三倍,这增加了Flightaware接收器接收到的数据包数量。


室外天线及其与桅杆的连接。


Facebook上FlightFeeder ADS-B VariFlight的奇怪之


天线的直径略小于Flightaware


来自Duralumin的Flightaware桅杆支架


带有VariFlight符号的礼物。 从背面的铭文判断,如果在机场丢失,应将此标签夹在行李中,并填写所有者的联系方式。



首次列入


开启电源并没有从根本上改变设备的外观。 仅LAN指示灯亮起,路由器在已发布的dhcp IP地址列表中具有新的raspberrypi主机名。 HDMI具有通常的RPi引导输出和登录请求。


就是这样。 IP:8080的这些设备的预期Web界面不可用。 扫描设备端口时,仅找到端口22。试图以默认用户名和密码登录时,无论是在控制台还是在ssh中,他都被发送出去了:

 login as: pi pi@raspberrypi's password: Access denied 

接收器多次打开和关闭,并假设在那时可能正在下载某些内容或试图访问中国的服务器,因此打开了几天。 红色或绿色指示灯均不亮。

这时,我去了异地寻找FAQ,技术支持或其他可能表明该设备应该或不应该使用的设备。 我是第一次登录,但这并没有从根本上改变任何东西-没有联系表格或反馈表格。 唯一发现的是收款人绑定到一个帐户,并且状态为脱机。 我注意到一个事实,即系统最后一次在9月2日北京时间17:18在网络上看到它,这是通过邮件发送的前4天。 即 已检查并连接到该帐户。


在花了几天的时间在“中文互联网”的站点上徘徊了几天之后,我厌倦了该产品没有任何技术支持。“中文因特网”的某些链接指的是场外链接,或者是从场外链接的。 那时我还记得两封来自ADSB展示系统(ADS-B的显示系统)的电子邮件。

“这是胡说八道”-我再一次听到一个熟悉的声音,脑子里有一个重音。 我发送到该地址的电子邮件转回了PostMaster Feeyo.com


然后,目光投向了第二个字母的附件,该附件以前已经避开了视线(由于不寻常的新GMail设计)。原来这是VariFlight ADS-B的安装说明。现在是时候找出它应该如何工作了。

满足飞常准ADS-B设备安装说明


以下是6页和两种语言的说明的译文,其中大多数是插图。

VariFlight ADS-B安装说明



简短说明


VariFlight ADS-B是为民航爱好者设计的用于跟踪飞机的设备。该套件包括ADS-B接收器,电源,跳线(跳线),天线和用于它的电缆。


天线位置


, ; . ADS-B , .


, ADS-B , :

  1. .
  2. - ADS-B .
  3. .


, . IP , DHCP.





ADS-B


第一种方法。
在路由器的设置中,找到ADS-B接收器的IP地址,然后在Web浏览器中打开http:// XXX.XXX.XXX:8080,其中XXX.XXX.XXX是本地网络上的内部IP地址。


方法二: 在Web浏览器中

打开flightadsb.variflight.com链接,登录并单击“ 机场”


第三种方法,仅适用于中国志愿者

对于中国用户,可以使用微信。


在此指令结束。根据此指令,该设备可以部分工作-它在本地网络上接收IP,但不显示可识别 dump1090的Web界面-专为RTLSDR软件狗设计并在此类设备中使用的S模式解码器。

图片

如果不运行dump1090,则没有数据将到达服务器。奇怪的是,该设备在出厂前的验证过程中以某种方式工作。“这是胡说八道。” 由于中国人对设备的命运毫无兴趣,也找不到技术支持的迹象,所以如果我自己修理,我的良心是完全干净的。

我们控制设备


拆卸接收器后,我立即收到它,就在第一次上电之前制作了microSD映像并检查了一下内容,立即怀疑接收器正在向服务器发送数据-在/ root /中有服务地址的文件和脚本。

重置PI用户密码


在此链接中可以找到有关更改带有图片的“忘记密码”的说明

我再次拆卸接收器。要进入microSD,您需要拧松所有螺钉并卸下两块板。将来,在与接收器一起工作时,我没有将其组装回建筑物中。必须使用不同的系统更改两个microSD。

我们从Rpi中取出microSD,如果尚未备份,请在计算机上进行备份,然后编辑-cmdline.txt文件

 dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait 

在此行的末尾,添加

 init=/bin/sh 

我们将microSD返回RPi,连接显示器和键盘。我们接通电源。当这些行停止在屏幕上运行时,请按Enter。出现一个控制台提示,我们在其中键入

 mount -rw -o remount / passwd pi sync exec /sbin/init 

线路再次运行,等待它们停止运行,然后将其关闭。我们从RPi获得microSD。在计算机上,我们编辑或还原cmdline.txt的备份副本-删除“ init = / bin / sh”。

上一次我们将microSD返回RPi。打开 使用新密码成功登录。我们通过输入raspi-config并从菜单中选择SSH来启用ssh。

然后,使用top命令,我想查看接收器的运行状况,并意外地注意到wget和... dump-1090进程。无声的场面。我在网络浏览器中签入http:// XXX.XXX.XXX:8080-有一个界面。


并不是说这出乎意料,而是绝对不寻常。我从说明中检查了第二种方法 -那里也一切正常:接收器图标变为绿色,并且在他听到的飞机列表下方。

可能会以此结束,但是首先,仅出于此目的而使用RPi3是不可原谅的。其次,如果该设备运行稳定。例如,它从DHCP路由器的IP地址列表中消失,而在访问先前接收的IP时可用,并且在HDMI上没有图像。但是最重​​要的是广播的不稳定。根据接收者页面上的统计数据,它每天工作几个小时。有时一整天,有时几个小时,有时零小时。研究系统花费了几天的时间-并非所有软件都已安装。中国的存储库...德国的声音终于说服我们,我们需要为健康的人制作ADS-B接收器,为此,我们需要将PiAware图像滚动到另一个microSD上。原始的microSD仍然有助于发现其工作原理。至少要从/根目录保存文件。使图像令人满意。

PiAware


PiAware是用于将航班数据传输到FlightAware的Linux软件。包含fork dump1090可变性。根据开发人员的说法,区别之一是,如果它们与第一个服务器没有区别,则不会将软件包发送到FlightAware服务器。如果飞机没有改变速度,高度,则不需要处理此数据,从而减轻了服务器的负担。

大约两年前,FlightAware开始将网站上的文字翻译成俄语。可以在异地找到很多创建自己的PiAware站的方法。使用RTLSDR在RPi上创建工作站的本质是使用Etcher在Raspbian Linux映像上写入完成的PiAware的microSD 。接下来,在将卡插入RPi并等待下载之前,需要进行一些更改。要启用SSH访问,请在引导分区(/引导分区)中创建一个不带扩展名ssh的空文件。在piaware-config.txt文件中,您可以进行必要的设置例如,如果连接了受支持的USB WiFi适配器,请指定静态IP或启用WiFi并指定SSID /密码。可以使用piaware-config设置名称可能值命令从控制台进行相同的设置

如果您已经有一个Flightaware帐户,则5分钟后,该电台将被连接到该帐户,并收到一个唯一标识符。接收者将拥有自己的统计页面。

默认情况下,PI用户具有Flightaware密码。最好立即更改密码。

“测试”


测试用引号引起,只是印象。具有两个几乎具有相同软件的设备可以评估其功能。

我有一个免费的Flightaware接收器,体验的第一件事就是完整的VariFlight天线。我只是用它替换了Flightaware天线。在我研究VariFlight接收器时,在Flightaware页面上收集了FlightFeeder统计信息。结论令人失望。尽管在最大范围内没有任何变化,例如FlightFeeder,在直接可见的方向上捕捉了一些400公里的距离,但每小时/每天的飞机统计数据却下降了2-3倍。当然可以接受双方300多公里的路程,但是看到的消息却少了一些。我不知道天线本身的内部是什么-它不能折叠。

将Flightaware天线连接到VariFlight接收器,并显示相同顺序的统计信息。并带有更低的原生天线。


我将解码统计数据。统计信息10-05至10-07是带有Flightaware天线的VariFlight接收器。在10-08,连接了完整的天线,从10-09到10-11,连接了VariFlight套件的统计信息。10-12,send_message.py脚本已更改为从Flightaware Flightfeeder收集数据。此后,VariFlight从中发送数据以及10到13天-基于Flightaware Flightfeeder数据的每日统计信息。另外,例如,对于10-18-396航班,814176包,对于10-19-471航班,860415包。

让我们评估一下VariFlight接收机对无线电干扰的敏感程度。为此,请扫描800 MHz-1200 MHz的范围并生成热图。

 sudo apt-get install python-imaging sudo wget https://raw.githubusercontent.com/keenerd/rtl-sdr-misc/master/heatmap/heatmap.py sudo chmod +x heatmap.py sudo systemctl stop dump1090-fa sudo rtl_power -f 800M:1200M:100k -i 30 -c 50% -e 30m -g 30 -F 9 >scan.csv 

半小时(-e 30m)后,扫描停止并生成图像。
 ./heatmap.py scan.csv scan.png 

重新启动设备以还原dump1090。
并使用(win)scp将生成的图像复制到计算机。
这是在1090 MHz频率下的热图扫描的一部分。单击可获得完整图像。



明亮的黄色条纹是移动通信。没什么不寻常的-他没有像Flightfeeder这样的前置过滤器,而且他被移动台打断了。在此,它与前面提到的简单的“蓝哨”绝对相同。也许以特殊扩展板的形式进行制造是有意义的,例如,板上的“弯曲轨道”的作用尚不明确。制作专门的电路板,可以同时安装低噪声放大器和1090 MHz的SAW滤波器。仅查看设备中的脚本,我就知道为什么要这样做-一个名为acars.py的脚本。


放大器和滤波器将在多大程度上改善接收器的性能,显示了上述Facebook小组的一个例子。一名VariFlight Box用户没有使用常规的接收器,而是连接了来自Flightaware的专用加密狗,这使他获得了大约一千个用户的最高评价(当然,安装位置和另一根天线也受到了影响)。

FlightAware发布了两种加密狗模型-Pro Stick和Pro Stick Plus,它们仍然是相同的“蓝哨声”,但具有预备信号放大器,后者还具有SAW滤波器,可消除干扰较大的区域中的不必要信号,例如在城市中,以及这些型号都配备了SMA天线连接器。这些加密狗用于Flightaware Flightfeeder Orange接收器。


取下盖子


脚本名称“ acars.py”表明没有任何过滤器并不是错误和节省。航空通讯地址和报告系统飞机通信寻址和报告系统(ACARS)是一种数字无线电通信系统,用于航空领域,用于在飞机和地面站之间传输短消息。欧洲ACARS的工作频率为131.725 MHz。因此,该设备不能仅具有1090 MHz的滤波器,否则它将无法接收131 MHz的信号。天线内的东西是未知的,我不会破坏它,但很明显,创作者也提供了它的“广泛覆盖”。与上述方法类似,在100 MHz-500 MHz范围内生成了一个热图。在450 MHz频率下扫描的热图的片段。单击也可以查看完整图像。



在热图上,您可以看到控制面板,安全传感器,无线门铃,气象站,无线电业余爱好者,FM广播电台等的无线传感器。

例如,通过设置rtl_433,您可以查看来自气象站的相邻无线传感器的数据,并且,如果需要,可以将其用作本文的作者


通过运行rtl_tcp,您可以收听火腿广播和FM广播。


有趣的是,并非所有的火腿对讲机都能精确地保持频率。看到无线电爱好者如何评估他们如何听见对话者,以及其中一个广播电台的频率在场外,真是有趣。

但是,本机系统上的中文接收器显示出精度-0 PPM。您可以在有争议的 文章“再次关于RTL-SDR上的HF接收”中阅读有关Habr的PPM测量技术强烈建议调整PPM以获得最佳接收效果。中国人是做什么的。在Piaware上有一个小错误,可以并且应该通过使用sudo piaware-config rtlsdr-ppm <PPM value>命令指定正确的PPM值来解决。
带有rtl_test和kalibrate-rtl的RTLSDR校准指令
  rtl_test -p 

10 , . ppm.

kalibrate-rtl.
 sudo apt-get install libtool autoconf automake libfftw3-dev git clone https://github.com/asdil12/kalibrate-rtl.git cd kalibrate-rtl git checkout arm_memory ./bootstrap ./configure make sudo make install kal -s GSM900 

, «power» .
kal -c < > -e < PPM, rtl_test> -v
«average absolute error». ppm, , sudo piaware-config rtlsdr-ppm < PPM>


结果,可以说,用于铁的VariFlight接收器比您自己组装的接收器要好一些。这是开始练习此业余爱好的良好基础(它显示了可用于多种其他任务的铁测试。此外,还有三个免费的USB端口)。

作为ADSB接收器的明显缺点是软件和中文站点界面。如果您无法在中文网站上进行任何操作,则可以修改接收器本身的软件。最简单的方法是在VariFlight上安装PiAware并配置发行版。然后,您可以在Flightradar24上设置分销,并在那里也获得具有特殊条件的帐户。使用具有特殊功能的帐户的一个示例是访问Flightaware存档数据(An-148萨拉托夫航空公司的坠机)。
图片


我们将数据提供给VariFlight


我们返回到根目录的内容。可以在GitHub上找到它文件名明确地暗示了它们的功能。

 root@raspberrypi:/home/pi# ls /root -l total 24 drwxr-xr-x 8 root root 4096 Nov 22 2016 dump1090 drwxr-xr-x 5 root root 4096 Oct 16 18:54 get_message -rwxr-xr-x 1 root root 567 Nov 22 2016 install.sh drwxr-xr-x 7 root root 4096 Nov 22 2016 rtl-sdr -rwxr-xr-x 1 root root 62 Nov 22 2016 synctime.sh -rwxr-xr-x 1 root root 1300 Nov 29 2016 task.sh 

install.sh
 #!/bin/bash apt-get update apt-get install cmake libusb-1.0-0-dev build-essential vim ntpdate -y apt-get remove ntp cd get_message/ mv rtl-sdr-blacklist.conf /etc/modprobe.d/ mv dump.sh /etc/init.d/dump chmod +x /etc/init.d/dump mv task.sh ../ chmod +x ../task.sh cd ../rtl-sdr/ mkdir rtl cd rtl cmake ../ -DINSTALL_UDEV_RULES=ON make install ldconfig cd ../../dump1090/ make cd /root/get_message/ python get_ip.py ps aux | grep py update-alternatives --config editor crontab -e * * * * * /root/task.sh >/dev/null 2>&1 * * */6 * * /root/synctime.sh >/dev/null 2>&1 


install.sh的最后几行显示cron添加了两个作业-每分钟运行task.sh和每6天运行synctime.sh

同步时间
 #!/bin/bash /usr/sbin/ntpdate 115.182.42.248 > /dev/null 2>&1 


115.182.42.248-北京王联讯通电信技术有限公司,北京,中国。
备注:请注意,CNNIC不是ISP,也不是
备注:有权调查网络滥用投诉。
备注:请联系网络的技术人员或管理员。
task.sh
 #!/bin/bash ps -eaf | grep dump1090 | grep -v grep if [ $? -eq 1 ] then /etc/init.d/dump stop sleep 1 /etc/init.d/dump start echo `date "+%G-%m-%d %H:%M:%S"`" dump1090 restart" echo "------------------------------------------------------------------------" else echo `date "+%G-%m-%d %H:%M:%S"`" dump1090 running" echo "------------------------------------------------------------------------" fi ps -eaf | grep send_message.py | grep -v grep # if not found - equals to 1, start it if [ $? -eq 1 ] then python -O /root/get_message/send_message.py & echo `date "+%G-%m-%d %H:%M:%S"`" send_message restart" echo "------------------------------------------------------------------------" else echo `date "+%G-%m-%d %H:%M:%S"`" send_message running" echo "------------------------------------------------------------------------" fi ps -eaf | grep get_ip.py | grep -v grep # if not found - equals to 1, start it if [ $? -eq 1 ] then python /root/get_message/get_ip.py echo `date "+%G-%m-%d %H:%M:%S"`" get_ip restart" echo "------------------------------------------------------------------------" else echo `date "+%G-%m-%d %H:%M:%S"`" get_ip running" echo "------------------------------------------------------------------------" fi 


cron每分钟运行一次task.sh脚本,检查并在必要时重新启动dump1090,send_message.py和get_ip.py脚本。
 pi@raspberrypi:~ $ ps -eaf | grep dump1090 | grep -v grep root 830 1 14 Oct12 ? 13:49:25 ./dump1090 --net --net-sbs-port 30003 pi@raspberrypi:~ $ ps -eaf | grep get_ip.py | grep -v grep pi@raspberrypi:~ $ ps -eaf | grep send_message.py | grep -v grep root 838 1 0 Oct12 ? 00:09:20 python -O /root/get_message/send_message.py 

get_message目录包含python脚本,其中之一send_message.py发送数据。

 root@raspberrypi:/home/pi# ls /root/get_message -l total 40 -rw-r--r-- 1 root root 954 Nov 22 2016 acars.py -rw-r--r-- 1 root root 1341 Nov 22 2016 acars.sh -rw-r--r-- 1 root root 173 Nov 22 2016 config.ini drwxr-xr-x 8 root root 4096 Nov 22 2016 dump1090 -rwxr-xr-x 1 root root 1731 Nov 22 2016 get_ip.py drwxr-xr-x 3 root root 4096 Nov 22 2016 get_message1117 -rwxr-xr-x 1 root root 3400 Dec 7 2016 init.sh -rw-r--r-- 1 root root 33 Oct 16 18:51 md5.txt -rwxr-xr-x 1 root root 1143 Oct 12 18:16 send_message.py -rw-r--r-- 1 root root 16 May 27 2016 UUID 

初始化文件
 #!/bin/bash path='/root/get_message/' DATE=`date -d "today" +"%Y-%m-%d_%H:%M:%S"` result="" UUID="" execom="" FromServer="" SourceMD5="" device="" if ps -ef |grep dump1090 |grep -v grep >/dev/null then device="adsb" elif ps -ef |grep acarsdec |grep -v grep >/dev/null then device="acars" else device="unknow" fi IpAddr=`/sbin/ifconfig |grep "addr:" |grep -v 127.0.0.1 |cut -d ':' -f2 |cut -d ' ' -f1` if [ -f "/root/get_message/UUID" ] then UUID=`cat /root/get_message/UUID` fi execut(){ while read command do eval $command if [ $? -ne 0 ] then execom=$command result=0 break fi result=1 done <$path/package/exe.txt } removefile(){ rm -rf $path/package rm -f $path/*tar.gz* } main(){ ps -eaf | grep "pic.veryzhun.com/ADSB/update/newpackage.tar.gz" | grep -v grep if [ $? -eq 1 ] then /usr/bin/wget -P $path -c -t 1 -T 2 pic.veryzhun.com/ADSB/update/newpackage.tar.gz if [ -f "$path/newpackage.tar.gz" ] then dmd5=`md5sum $path/newpackage.tar.gz|cut -d ' ' -f1` if [ "$SourceMD5" = "$dmd5" ] then /bin/tar -xzf $path/newpackage.tar.gz -C $path echo $SourceMD5 > $path/md5.txt /bin/touch /usr/src/start.pid echo $DATE > /usr/src/start.pid execut if [ $result -eq 1 ] then curl -m 2 -s -d UUID=$UUID -d date=$DATE -d execom=$execom -d message="success" http://receive.cdn35.com/ADSB/result.php else curl -m 2 -s -d UUID=$UUID -d date=$DATE -d execom=$execom -d message="fail" http://receive.cdn35.com/ADSB/result.php fi removefile else curl -m 2 -s -d UUID=$UUID -d date=$DATE -d execom="------" -d message="post file has been changed" http://receive.cdn35.com/ADSB/result.php removefile fi else curl -m 2 -s -d UUID=$UUID -d date=$DATE -d execom="------" -d message="download failed" http://receive.cdn35.com/ADSB/result.php removefile fi fi } if curl -m 2 -s pic.veryzhun.com/ADSB/update.php >/dev/null;then removefile FromServer=`curl -m 2 -s -d UUID="$UUID" -d IpAddr="$IpAddr" -d Device="$device" pic.veryzhun.com/ADSB/update.php` SourceMD5=`echo $FromServer|cut -d ' ' -f1` length=`echo $SourceMD5 |wc -L` if [ $length -ne 32 ] then curl -m 2 -s -d UUID=$UUID -d date=$DATE -d execom="------" -d message="md5 style error" http://receive.cdn35.com/ADSB/result.php exit fi else curl -m 2 -s -d UUID=$UUID -d date=$DATE -d execom="------" -d message="curl failed" http://receive.cdn35.com/ADSB/result.php exit fi DesMD5=`cat $path/md5.txt` if [ "$SourceMD5" = "$DesMD5" ] then curl -m 2 -s -d UUID=$UUID -d date=$DATE -d execom="------" -d message="no update,md5 without change " http://receive.cdn35.com/ADSB/result.php exit else main fi 


init.sh脚本检查是否有更新,并设置一个新的send_message.py
get_ip.py
 import socket import fcntl import struct import urllib2 import urllib import sys,os import ConfigParser import hashlib import json import uuid config = ConfigParser.ConfigParser() config.readfp(open(sys.path[0]+'/config.ini',"rb")) uuid_file=sys.path[0]+'/UUID' if os.path.exists(uuid_file) : file_object = open(uuid_file) mid = file_object.read() file_object.close() else : mid = uuid.uuid1().get_hex()[16:] file_object = open(uuid_file , 'w') file_object.write( mid ) file_object.close() def send_message(source_data): source_data=source_data.replace('\n','$$$') f=urllib2.urlopen( url = config.get("global","ipurl"), data = source_data, timeout = 60 ) tmp_return=f.read() request_json=json.loads(tmp_return) request_md5=request_json['md5'] del request_json['md5'] tmp_hash='' for i in request_json: if tmp_hash=='' : tmp_hash=tmp_hash+request_json[i] else : tmp_hash=tmp_hash+','+request_json[i] md5=hashlib.md5(tmp_hash.encode('utf-8')).hexdigest() if (md5 == request_md5): operate(request_json) else : print 'MD5 ERR' print "return: "+tmp_return; def get_ip_address(ifname): skt = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) pktString = fcntl.ioctl(skt.fileno(), 0x8915, struct.pack('256s', ifname[:15])) ipString = socket.inet_ntoa(pktString[20:24]) return ipString def operate(request_json): if request_json['type'] == 'reboot' : os.system('/sbin/reboot') elif request_json['type'] == 'code' : fileHandle = open ( urllib.unquote( request_json['path'] ) , 'w' ) fileHandle.write( urllib.unquote( request_json['content'] ) ) fileHandle.close() else : print 'OK' eth=get_ip_address('eth0') send_message(mid+'|'+eth+'|') 


通过脚本执行网络交换的含义,我并不特别了解。如果缺少一个唯一的UUID。并且与config.ini文件中指定的地址进行了某种交换。该特定脚本可能负责将传输的数据和IP与帐户链接起来。

值得注意的是“ if request_json ['type'] =='reboot':os.system('/ sbin / reboot')”这一行。

 [global] name = NEW ipurl = http://receive.cdn35.com/ADS-B_IP.php sendurl = http://adsb.feeyo.com/adsb/ReceiveCompressADSB.php version = 1.0 passwd = 'null' 

最后,脚本发送数据
send_message.py
 import socket import urllib2 import urllib import sys import ConfigParser import zlib import base64 import os,uuid serverHost = 'localhost' serverPort = 30003 config = ConfigParser.ConfigParser() config.readfp(open(sys.path[0]+'/config.ini',"rb")) uuid_file=sys.path[0]+'/UUID' if os.path.exists(uuid_file) : file_object = open(uuid_file) mid = file_object.read() file_object.close() else : mid = uuid.uuid1().get_hex()[16:] file_object = open(uuid_file , 'w') file_object.write( mid ) file_object.close() sockobj = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sockobj.connect((serverHost,serverPort)) def send_message(source_data): try: source_data=base64.b64encode(zlib.compress(source_data)) f=urllib2.urlopen(url = config.get("global","sendurl"),data = urllib.urlencode({'from':mid,'code':source_data}),timeout = 2) return True except Exception,e: print str(e) return True tmp_buf='' while 1: buf = sockobj.recv(1024) if not buf: break if len(buf) != 0: tmp_buf=tmp_buf+buf if buf[len(buf)-1] == '\n': if send_message(tmp_buf) : tmp_buf='' 


我编辑了serverHost ='localhost'行,方法是将'localhost'替换为'ff-1234'-Flightaware Flightfeeder的网络名称,然后重新启动VariFlight接收器。之后,来自Flightfeeder的数据进入了VariFlight。

剩下的脚本是ACARS消息的接收。也许某些功能的剩余部分或将来要实现的功能。该脚本与/root/acarsdec-3.0/acarsdec一起使用,在此路径中缺少该脚本。 ACARSDEC是ACARS SDR解码器,用于以131.725 MHz的频率解码消息。显然,基于该频率的接收,接收器输入端没有1090 MHz的滤波器。


地址和报告航空通信系统(ACARS)是一种数字通信系统,用于航空中,可通过直接无线电通信或通过卫星系统在飞机和地面站之间传输相对简短的短消息。
例如,可以在此处找到有关ACARS的更多信息

acars.sh脚本的实现与task.sh相似-如果未检测到必要的进程,它将重新启动acarsdec和脚本get_ip.py和acars.py。

acars.sh
 #!/bin/bash ps -eaf | grep acarsdec | grep -v grep if [ $? -eq 1 ] then /root/acarsdec-3.0/acarsdec -n 127.0.0.1:8888 -o 0 -p -8 -r 0 127.272 126.475 & echo `date "+%G-%m-%d %H:%M:%S"`" acarsdec restart" echo "------------------------------------------------------------------------" else echo `date "+%G-%m-%d %H:%M:%S"`" acarsdec running" echo "------------------------------------------------------------------------" fi ps -eaf | grep get_ip.py | grep -v grep # if not found - equals to 1, start it if [ $? -eq 1 ] then python /root/get_message/get_ip.py echo `date "+%G-%m-%d %H:%M:%S"`" get_ip restart" echo "------------------------------------------------------------------------" else echo `date "+%G-%m-%d %H:%M:%S"`" get_ip running" echo "------------------------------------------------------------------------" fi ps -eaf | grep acars.py | grep -v grep # if not found - equals to 1, start it if [ $? -eq 1 ] then python /root/get_message/acars.py echo `date "+%G-%m-%d %H:%M:%S"`" acars restart" echo "------------------------------------------------------------------------" else echo `date "+%G-%m-%d %H:%M:%S"`" acars running" echo "------------------------------------------------------------------------" fi /usr/sbin/ntpdate cn.pool.ntp.org > /dev/null 


acars.py
 #!/usr/bin/env python import socket, traceback ,time,urllib2,urllib,sys,ConfigParser def send_message(source_data): try: f=urllib2.urlopen(url = config.get("global","sendurl"),data = urllib.urlencode({'from':config.get("global","name"),'code':source_data}),timeout = 10) print "return: "+f.read(); return True except Exception,e: print str(e) return False host = '127.0.0.1' port = 8888 config = ConfigParser.ConfigParser() config.readfp(open(sys.path[0]+'/config.ini',"rb")) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port)) while 1: try: message, address = s.recvfrom(8192) socket_udp_str='{0} :{1} \n\n'.format(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),message) send_message(socket_udp_str) except (KeyboardInterrupt, SystemExit): raise except: traceback.print_exc() 


在工作中,它看起来像这样:

 PID TTY STAT TIME COMMAND 20726 ? Ss 0:00 \_ sshd: pi [priv] 20732 ? S 0:00 \_ sshd: pi@pts/0 20734 pts/0 Ss 0:00 \_ -bash 20744 pts/0 R+ 0:00 \_ ps -afx 777 tty1 Ss+ 0:00 /sbin/agetty --noclear tty1 linux 907 ? Sl 737:23 ./dump1090 --net --net-sbs-port 30003 915 ? S 11:11 python -O /root/get_message/send_message.py 

ps -afx完全
 pi@raspberrypi:~ $ ps -afx PID TTY STAT TIME COMMAND 2 ? S 0:00 [kthreadd] 3 ? S 0:59 \_ [ksoftirqd/0] 5 ? S< 0:00 \_ [kworker/0:0H] 7 ? S 5:28 \_ [rcu_sched] 8 ? S 0:00 \_ [rcu_bh] 9 ? S 0:01 \_ [migration/0] 10 ? S 0:01 \_ [migration/1] 11 ? S 0:05 \_ [ksoftirqd/1] 13 ? S< 0:00 \_ [kworker/1:0H] 14 ? S 0:01 \_ [migration/2] 15 ? S 0:04 \_ [ksoftirqd/2] 17 ? S< 0:00 \_ [kworker/2:0H] 18 ? S 0:01 \_ [migration/3] 19 ? S 0:04 \_ [ksoftirqd/3] 21 ? S< 0:00 \_ [kworker/3:0H] 22 ? S 0:00 \_ [kdevtmpfs] 23 ? S< 0:00 \_ [netns] 24 ? S< 0:00 \_ [perf] 25 ? S 0:00 \_ [khungtaskd] 26 ? S< 0:00 \_ [writeback] 27 ? S< 0:00 \_ [crypto] 28 ? S< 0:00 \_ [bioset] 29 ? S< 0:00 \_ [kblockd] 31 ? S< 0:00 \_ [rpciod] 32 ? S 0:00 \_ [kswapd0] 33 ? S< 0:00 \_ [vmstat] 34 ? S 0:00 \_ [fsnotify_mark] 35 ? S< 0:00 \_ [nfsiod] 44 ? S< 0:00 \_ [kthrotld] 46 ? S< 0:00 \_ [bioset] 47 ? S< 0:00 \_ [bioset] 48 ? S< 0:00 \_ [bioset] 49 ? S< 0:00 \_ [bioset] 50 ? S< 0:00 \_ [bioset] 51 ? S< 0:00 \_ [bioset] 52 ? S< 0:00 \_ [bioset] 53 ? S< 0:00 \_ [bioset] 54 ? S< 0:00 \_ [bioset] 55 ? S< 0:00 \_ [bioset] 56 ? S< 0:00 \_ [bioset] 57 ? S< 0:00 \_ [bioset] 58 ? S< 0:00 \_ [bioset] 59 ? S< 0:00 \_ [bioset] 60 ? S< 0:00 \_ [bioset] 61 ? S< 0:00 \_ [bioset] 62 ? S< 0:00 \_ [bioset] 63 ? S< 0:00 \_ [bioset] 64 ? S< 0:00 \_ [bioset] 65 ? S< 0:00 \_ [bioset] 66 ? S< 0:00 \_ [bioset] 67 ? S< 0:00 \_ [bioset] 68 ? S< 0:00 \_ [bioset] 69 ? S< 0:00 \_ [bioset] 70 ? S< 0:00 \_ [VCHIQ-0] 71 ? S< 0:00 \_ [VCHIQr-0] 72 ? S< 0:00 \_ [VCHIQs-0] 73 ? S< 0:00 \_ [iscsi_eh] 74 ? S< 0:00 \_ [dwc_otg] 75 ? S< 0:00 \_ [DWC Notificatio] 77 ? S 0:00 \_ [irq/92-mmc1] 78 ? S 0:00 \_ [VCHIQka-0] 79 ? S< 0:00 \_ [SMIO] 80 ? S< 0:00 \_ [deferwq] 83 ? S< 0:00 \_ [bioset] 84 ? S 0:11 \_ [mmcqd/0] 87 ? S 0:04 \_ [jbd2/mmcblk0p2-] 88 ? S< 0:00 \_ [ext4-rsv-conver] 89 ? S< 0:00 \_ [ipv6_addrconf] 172 ? S 415:15 \_ [w1_bus_master1] 224 ? S< 0:00 \_ [cfg80211] 227 ? S< 0:00 \_ [brcmf_wq/mmc1:0] 229 ? S 0:00 \_ [brcmf_wdog/mmc1] 493 ? S< 0:00 \_ [kworker/1:1H] 550 ? S< 0:00 \_ [kworker/3:1H] 632 ? S< 0:00 \_ [kworker/u9:0] 633 ? S< 0:00 \_ [hci0] 634 ? S< 0:00 \_ [hci0] 638 ? S< 0:00 \_ [kworker/u9:2] 3856 ? S< 0:00 \_ [kworker/2:1H] 9346 ? S< 0:00 \_ [kworker/0:1H] 15564 ? S 0:00 \_ [kworker/1:0] 17556 ? S 0:00 \_ [kworker/u8:2] 17878 ? S 0:00 \_ [kworker/0:0] 17879 ? S 0:00 \_ [kworker/2:2] 19234 ? S 0:00 \_ [kworker/u8:4] 19566 ? S 0:00 \_ [kworker/3:1] 20143 ? S 0:00 \_ [kworker/2:1] 20259 ? S 0:00 \_ [kworker/3:2] 20352 ? S 0:00 \_ [kworker/0:2] 20416 ? S 0:00 \_ [kworker/1:2] 20600 ? S 0:00 \_ [kworker/3:0] 20601 ? S 0:00 \_ [kworker/2:0] 20605 ? S 0:00 \_ [kworker/u8:0] 20725 ? S 0:00 \_ [kworker/0:1] 1 ? Ss 0:10 /sbin/init 134 ? Ss 1:00 /lib/systemd/systemd-journald 136 ? Ss 0:08 /lib/systemd/systemd-udevd 416 ? Ss 0:09 /usr/sbin/cron -f 426 ? Ss 0:01 /lib/systemd/systemd-logind 429 ? Ss 0:00 avahi-daemon: running [raspberrypi.local] 458 ? S 0:00 \_ avahi-daemon: chroot helper 433 ? Ss 0:00 /usr/bin/dbus-daemon --system --address=systemd: --no 450 ? Ss 0:02 /usr/sbin/thd --daemon --triggers /etc/triggerhappy/t 496 ? Ss 0:03 /sbin/wpa_supplicant -s -B -P /run/wpa_supplicant.wla 498 ? Ssl 0:13 /usr/sbin/rsyslogd -n 636 ? S 0:00 /usr/bin/hciattach /dev/serial1 bcm43xx 921600 noflow 640 ? Ss 0:00 /usr/lib/bluetooth/bluetoothd 729 ? Ss 0:02 /sbin/dhcpcd -q -w 749 ? Ss 0:00 /usr/sbin/sshd -D 20726 ? Ss 0:00 \_ sshd: pi [priv] 20732 ? S 0:00 \_ sshd: pi@pts/0 20734 pts/0 Ss 0:00 \_ -bash 20744 pts/0 R+ 0:00 \_ ps -afx 777 tty1 Ss+ 0:00 /sbin/agetty --noclear tty1 linux 907 ? Sl 737:23 ./dump1090 --net --net-sbs-port 30003 915 ? S 11:11 python -O /root/get_message/send_message.py 


这表明您几乎可以从PiAware提取数据,而不会费力,事实上,只需将脚本传输到新系统即可。并且,如果您已经拥有一个现有的adb站-自制的Flightradar24,Flightaware,则可以完全凭良心自决地将现有的接收器用于其他个人目标和任务。

在PiAware上安装VariFlight


我们将必要的文件从旧文件传输到新系统。 根目录的内容:
get_message目录和install.sh,synctime.sh,task.sh文件。

在get_message目录中:
  • acars.py
  • acars.sh
  • config.ini
  • get_ip.py
  • 初始化文件
  • send_message.py

UUID文件是您在VariFlight网络上的标识符。

如果要在不使用VariFlight Feeder的情况下开始共享数据,则第一次运行脚本时,将生成UUID。该文件和最近的机场名称必须发送到chengyi(at)variflight.com,以在该服务上创建您的帐户。

下一个:
 pi@piaware:~ $ sudo apt-get install -y python ntpdate pi@piaware:~ $ su root@piaware:~# sh task.sh root@piaware:~# crontab -e 

通过粘贴在Nano中编辑crontab
 * * * * * /root/task.sh >/dev/null 2>&1 

通过按[Ctrl + O]保存文件,然后关闭[Ctrl + X]。
 root@piaware:~# chmod 777 task.sh root@piaware:~# reboot 

重新启动后,我们会检查页面及其统计信息flightadsb.feeyo.com/user/rank
在第四列中,应该有一个绿色的在线铭文。机场列表中可接受登机板(第三列-几秒钟前从飞机收到信号)。

在这一点上,我的草案无限期“挂起”,因为 在这里,我想写一下如何使用openwrt和ModeSMixer在路由器上运行脚本以将数据分发到服务,从而关闭此接收器并将其用于其他目的。但我仍然不希望有空闲时间,因此决定按原样发布。也许有人想订购 免费的接收器,这篇文章会很有用。

调制解调器


一个接收器可以将数据分发到多个服务,并且为此使用ModeSMixer程序。

ModeSMixer是一个控制台应用程序,用于组合和中继具有各种格式的Mode-S数据流。用例示例:


该程序旨在合并和中继不同格式的ModeS数据流。该程序没有默认设置。一切都由参数设置。

--inConnect参数指定从中接收数据的地址和端口。--outServer参数定义中继数据的格式和端口。图片中的示例如下所示:
 ./modesmixer2 --inConnect 192.168.0.105:30005 --inConnect 127.0.0.1:30005 --outServer sbs10001:10001 --outServer beast:31001 --globes 32000:tablename:home --location XX.XXXXX:YY.YYYYY --web 8765 & 

--location参数确定工作站安装位置的纬度和经度,而--web参数确定程序的Web界面将在其上运行的端口。在此处阅读有关该程序的更多信息

设置好几种服务的分配后,车站所有者将获得每种服务的特殊成员资格,并在一段时间内访问非公共信息和航班档案。

在使用PiAware的情况下,数据已经发送到FlightAware,剩下的就是使用modemixer2收集此数据。对于Variflight,您需要在某个空闲端口上获取BaseStation数据,例如10001。该参数将看起来像--outServer msg:10001。如有必要,您可以为VirtualRadar程序添加端口10002:--outServer野兽:10002
 ./modesmixer2 --inConnect localhost:30005 --inConnect localhost:30105 --outServer msg:10001 --outServer beast:10002 --location <>:<> --web 8765 & 

为了自动启动和重新启动,您需要编辑task.sh,并添加:
 ps -eaf | grep modesmixer2 | grep -v grep # if not found - equals to 1, start it if [ $? -eq 1 ] then ./modesmixer2 --inConnect localhost:30005 --inConnect localhost:30105 --outServer msg:10001 --location <>:<> --web 8765 & echo `date "+%G-%m-%d %H:%M:%S"`" modesmixer2 restart" echo "------------------------------------------------------------------------" else echo `date "+%G-%m-%d %H:%M:%S"`" modesmixer2 running" echo "------------------------------------------------------------------------" fi 

最后,编辑get_message / send_message.py脚本,并指定一个新的数据端口:
 serverHost = 'localhost' serverPort = 10001 


同时,


在撰写本文时,有关这些服务的消息传出中国。2018年11月,中国当局开始关闭ADSB接收外国服务的接收器。这可以从中国的Flightaware站的公共统计数据中看出:



消息是,中国的雷达发烧友表示,他们是由中国当局的代表召集的,并遭到了警察的探访,警察“非常有礼貌”要求他们停止向海外发送ADS-B数据服务,显然“危害中国的国家安全和主权”。

一些人声称,即使他们没有收到来自FlightRadar24和FlightAware的接收器,也接到了电话。这些事件在发烧友之间引起了轰动,其中许多人停止传输ADS-B数据。众所周知,FlightRadar24曾试图使中国的用户站匿名。目前尚不清楚这有多壮观。

用中文通知中国当局:


“这危及中国的国家安全和主权”,这种服务使中国(美国,欧洲以及前苏联国家以外的)军用飞机得以定位这一事实。例如,美国战略侦察无人机在16公里高空的国际水域上的每周轨迹:

图片

世界上有来自美国和苏联的两个辅助雷达系统。因此,这些接收器和服务无法显示大多数“苏联”飞机,直升飞机的下落,除非它们配备了“美国”雷达应答器,只有在空中飞行时才需要,例如美国或欧盟。因此,您可以在边境的俄罗斯联邦领土上看到一些有趣的东西,最好是在海边。例如,从克拉斯诺达尔可以明显看到上述美国情报官员。由于接收器的沿海位置,上述PlaneRadar服务定期进入俄罗斯媒体的新闻。


PS VariFlight ADS-B 推出英文版-flightadsb.variflight.com

Source: https://habr.com/ru/post/zh-CN423989/


All Articles