SDRReceiver and Jaero

Since today (16JAN22) I am using the program SDRReceiver to feed 20 Jaero VFO’s. So I pull in data from 20 L-band frequencies. SDRReceiver feeds Jaero with so-called ZMQ datapipes (https://en.wikipedia.org/wiki/ZeroMQ)

This ZMQ concept is much more stable than using Virtual Audio Cables with Jaero because I really struggled with maintaining frequency synchronization. So I recommend using SDRReceiver with the added advantage that it is much more CPU usage friendly.

SDRReceiver screenshot
Jaero – 600BPS link
Jaero – 1500BPS link

An excellent instruction for setting up the system can be found on https://thebaldgeek.github.io/SDRReceiver.html

Update: since 24JAN22 I am monitoring 22VFO with the following frequencies:

VFO1 1545050 600 C1 25E EMEA

VFO2 1545015 600 43 54W AORE

VFO3 1545025 600 44 2 54W AORE

VFO4 1545030 600 43 2 54W AORE

VFO5 1545115 600 90 25E EMEA

VFO6 1545120 600 90 25E EMEA

VFO7 1545125 1200 90 2 25E EMEA

VFO8 1545130 600 90 2 25E EMEA

VFO9 1545160 600 C5 2 25E EMEA

VFO10 1545165 600 C5 25E EMEA

VFO11 1545185 600 C5 2 25E EMEA

VFO12 1545190 600 C5 25E EMEA

VFO13 1545195 600 44 54W AORE

VFO14 1545215 600 C1 2 25E EMEA

VFO15 1545220 600 C1 2 25E EMEA

VFO16 1545225 600 C1 2 25E EMEA

VFO17 1546000 10500 90 2 25E EMEA

VFO18 1546015 10500 90 2 25E EMEA

VFO19 1546030 10500 C1 2 25E EMEA

VFO20 1546080 10500 C1 2 25E EMEA

VFO21 1546095 10500 C5 2 25E EMEA

VFO22 1546110 10500 C5 2 25E EMEA

Basic Message Composition

On this page I will detail information on satellite ACARS messages. I only started monitoring these messages at the end of 2021 so I am still in the process of getting a basic understanding. Luckily there is a lot of information available on the internet concerning these messages and I will also point out relevant websites or documents.

Green: UTC time and date

Yellow: Aircraft Earth Station [AES] – the unique identifier of the aircraft

Purple: The identifier of the specific Inmarsat satellite (1 of 4) being used for the transmission of the message

Red: The registration of the aircraft, the type of aircraft and the company [AES code based database look-up]

Gray: Air Traffic Services Unit (ATSU) ACARS address of the ground station, in this case Gander Oceanic

Dark Green: Future Air Navigation System. See https://en.wikipedia.org/wiki/Future_Air_Navigation_System

Light blue: I assume the recipient of the aircraft data, in this case Gander Domestic [ICAO code CDQX]


ATSU ACARS Groundstations

Control area (CTA) AFN address ATSU ACARS Address 
Bodø ENOB 
Edmonton (Canada) CZEG YEGE2YA for CPDLC and YEGCDYA for ADS-C 
Gander Oceanic CZQX YQXE2YA 
Gander domestic CDQX YQXD2YA 
Montreal domestic CZUL YULE2YA 
Moncton Domestic CZQM YQME2YA 
New York KZWY NYCODYA 
Reykjavik BIRD REKCAYA 
Santa Maria LPPO SMACAYA 
Shanwick EGGX PIKCPYA 
Vancouver Domestic CZVR YVRE2YA 
Winnipeg Domestic CZWG YWGE2YA 
Source: https://www.icao.int/APAC/Documents/edocs/GOLD_2Edition.pdf

Besides the official document with addresses here above I also found the following overviews:

Source: https://acars-vdl2.groups.io/g/main/topic/abbrievation_translate/78497621?p=
Source: https://acars-vdl2.groups.io/g/main/topic/abbrievation_translate/78497621?p=

Making sense of the data

I’m currently monitoring 22VFO’s with Jaero and SDRR and that generates a lot of data. To deal with the data I have been experimenting a little bit with the Mac OS Terminal which has some powerful features.

What I do first is combine the 22 text files into one file. I paste all the files into one folder on my Mac and then I execute the following code in terminal (make sure the terminal prompt is in the same directory as the files):

cat *.txt >04FEB22.txt

This generates a txt file with all the Jaero data of a single day (04FEB etc. can be changed of course). On my side it is about 30Mb in size. But I am only interested in military aviation so what I do next is this:

grep -B 2 #MDINI 04FEB22.txt >04FEB22_MIL.txt

When you enter that code in terminal all the lines with #MDINI data and 2 lines before (-B 2) (which is the aircraft data and a blank line) is copied to a new file named 04FEB22_MIL.txt

In my own, non programming words: grep is the command, -B 2 = search for the specific text and 2 lines before (-A 2 is 2 lines after for example), #MDINI is the text to look for, 04FEB22.txt is the file where to look in and >04FEB22_MIL.txt is the file where to write the results to.

The result looks like this:

05:19:05 04-02-22 UTC AES:AE2FAD GES:C1 2 .88201A ! H1 E MCDONNELL DOUGLAS Boeing C-17A Globemaster III United States Air Force

– #MDINI/ID88201A,RCH235,PVZA101UC035/MR0,0/AFETAR,KPOB/TD042020,06353D57

06:04:05 04-02-22 UTC AES:AE20C8 GES:C1 2 .77187A ! H1 S MCDONNELL DOUGLAS C-17A Globemaster III United States Air Force

– #MDINI/ID77187A,MOOSE68,AMYF399YT035/MR0,0/AFOMNK,OYRN/TD040800,08056E8F

06:42:03 04-02-22 UTC AES:AE123D GES:C1 2 .44132A ! H1 C MCDONNELL DOUGLAS C-17A Globemaster III United States Air Force

– #MDINI/ID44132A,MOOSE98,AMYF400YT035/MR0,0/AFOTBH,OMNK/TD040800,08007D5A

And now you can add on this bij using:

#MDFTX
#MD/A0
#MDWXR
#MDREQPOS/

Be aware that the first time you have to create a file and you do that with > but after that you have to use >> so the data gets added to the file and does not overwrite earlier data. So for example:

grep -B 2 #MDFTX 04FEB22.txt >>04FEB22_MIL.txt

And then you get data like this:

22:37:04 04-02-22 UTC AES:AE20C5 GES:C1 2 .77184A ! H1 V MCDONNELL DOUGLAS C-17A Globemaster III United States Air Force

– #MDFTX/ID77184A,RCH247,AMZA105UC035/MR13,/FXETAR WOULD LIKE YOUR 3 HOUR OUT INFO. THEY THINK THERE IS A COMM OSSUE. FM6041D

22:42:02 04-02-22 UTC AES:AE20C5 GES:C1 2 .77184A ! H1 Y MCDONNELL DOUGLAS C-17A Globemaster III United States Air Force

– #MDFTX/ID77184A,RCH247,AMZA105UC035/MR14,/FXPLZ ADVISE ETA TO ETAR. FM6C4FA

13:00:20 04-02-22 UTC AES:AE2FAD GES:44 2 .88201A ! H1 Y MCDONNELL DOUGLAS Boeing C-17A Globemaster III United States Air Force

– #MDFTX/ID88201A,RCH235,PVZA101UC035/MR4,/FXGOOD MORNING GLOBAL EAGLES AS U HEAD TO UR ETP I REVIEWED THE WX AND NOTAMS FOR EINN AND KPOB WX REMAINS IN THE GREEN AND NO SHOW STOPPER NOTAMS HAPPY CONTINUED CROSSING DON-F-

So, this does not replace more refined tools like Node RED but on an entry level the results are encouraging.

Combining Code

In the end I succeeded in combining all of the separate lines of code in the following:

echo >b.txt ; echo START OF JAERO LOG FILE # FLIGHTWATCH.NL 2022 >>b.txt ; echo >>b.txt ; grep -B 2 INI/ID a.txt >>b.txt ; echo >>b.txt ; echo END OF INI/ID >> b.txt ; echo  >>b.txt ; grep -B 2 #MDWXR a.txt >>b.txt ; echo  >>b.txt ; echo END OF #MDWXR >>b.txt; echo  >>b.txt ; grep -B 2 #MDFTX a.txt >>b.txt ; echo >>b.txt ; echo END OF #MDFTX >>b.txt; echo >>b.txt ; ; grep -B 2 #MDREQPOS/ a.txt >>b.txt ; echo >>b.txt ; echo END OF #MDREQPOS >>b.txt ; echo >>b.txt ; grep -C 2 AMCTACC a.txt >>b.txt ; echo >>b.txt ; echo END OF AMCTACC >>b.txt ; echo >>b.txt ; grep -B 2 FMHRRR a.txt >>b.txt ; echo >>b.txt ; echo END OF FMHRRR >>b.txt ; echo >>b.txt ; grep -B 2 FMHCTM a.txt >>b.txt ; echo >>b.txt ; echo END OF FMHCTM >>b.txt ; echo >>b.txt ; grep SELCAL a.txt >>b.txt ; echo >>b.txt ; echo END OF SELCAL >>b.txt ; echo >>b.txt ; grep -B 2 ” HF” a.txt >>b.txt ; echo >>b.txt ; echo END OF HF >>b.txt ; echo >>b.txt ; grep -B 2 #MD/A0 a.txt >>b.txt ; echo >>b.txt ; echo END OF #MD/A0 >>b.txt ; echo >>b.txt ; echo END OF JAERO LOG FILE >>b.txt ; echo >>b.txt

This code, when pasted in the Mac OS terminal, generates my daily log file from all the Jaero data.

Update 16FEB22

I have updated the code above and it now generates 4 daily log files; all callsigns, military callsigns, important messages and Selcal / AES and HF information. The code is updated on a regular basis by me (especially to add callsigns) but this is the basic composition:

grep -i “MDINI/ID” a.txt | cut -c -26 |  cut -c 13-35 | sed ‘s/[A]//’ | awk -F, ‘{print $2,$1}’ | sed ‘s/[ ]/,/’ | sort | uniq >cs_temp.txt ; grep MD/A0 a.txt |cut -b 26-40 | sed ‘s/[,]/ /’ | sed ‘s/[.]//’ | sed ‘s/[,].*//’ | sed ‘s/[/].*//’ | sed ‘s/[.]//’ | sed ‘s/[ ]/,/’ | sort | uniq >>cs_temp.txt ; grep -i “INI/ID” a.txt | cut -c -26 | grep -v “-” | cut -c 8-25 | cut -c1-5,7- | awk -F, ‘{print $2,$1}’ | sed ‘s/[ ]/, /’ | sed ‘s/[ ]//’ | sort | uniq >>cs_temp.txt ; grep -i ‘.AFN/’ a.txt | cut -c 18- | sort | sed ‘s/[ ]/.AFN/’ | cut -c -20 | sed ‘s/[,]/ /’ | sed ‘s/[.]//’ | sed ‘s/[/].*//’ | sed ‘s/[,].*//’ | sed ‘s/[ ]/,/’ | sed ‘s/[.]//’| sort | uniq >>cs_temp.txt ; grep -i ‘.AFN/’ a.txt | cut -c 18- | sort | grep .AFN | cut -b 9-30 | sed ‘s/[,.]/ /’ | sed ‘s/[.]//’ | sed ‘s/[.]//’ | sed ‘s/[/].*//’ | sed ‘s/[,/].*//’ | sed ‘s/[ ]/,/’ | sort | uniq | >>cs_temp.txt ; sort cs_temp.txt | uniq | column -s “,” -t >cs2.txt ; grep ‘RCH\|CROME\|SAM\|DEED\|LAGR\|CTM\|RRR\|SOUND\|NAF\|BNDGE\|BOXER\|BRK\|CNV\|IAM\|MOOSE\|PITT\|QID\|TABOO\|SWATH\|EPIC\|DECOY\|UAF\|SUI\|MEDVC\|TOPCAT\|SUHL\|PICO\|ROMA\|MMF\|TURTLE\|PRIME\|NGR\|CLEAN\|KAF\|LION\|LHOB\|TOW\|BRONZE\|CLEAN\|KAF\|GOLD\|FAF\|SPAR\|GAF\|BAF\|CFC’ cs2.txt >cs3.txt ; sort -k1,1 -u cs2.txt >XX_CALLSIGNS_JAERO.txt ; sort -k1,1 -u cs3.txt >XX_MIL_CALLSIGNS_JAERO.txt ; rm cs2.txt ; rm cs3.txt ; rm cs_temp.txt

;

grep -B 2 INI/ID a.txt >>b.txt ; echo >>b.txt ; echo END OF INI/ID >> b.txt ; echo  >>b.txt ; grep -B 2 #MDWXR a.txt >>b.txt ; echo  >>b.txt ; echo END OF #MDWXR >>b.txt; echo  >>b.txt ; grep -B 2 “FTX/ID” a.txt >>b.txt ; echo >>b.txt ; echo END OF #MDFTX/ID >>b.txt; echo >>b.txt ; grep -B 2 #MDREQPOS/ a.txt >>b.txt ; echo >>b.txt ; echo END OF #MDREQPOS >>b.txt ; echo >>b.txt ; grep -C 2 AMCTACC a.txt >>b.txt ; echo >>b.txt ; echo END OF AMCTACC >>b.txt ; echo >>b.txt ; grep -B 2 FMHRRR a.txt >>b.txt ; echo >>b.txt ; echo END OF FMHRRR >>b.txt ; echo >>b.txt ; grep -B 2 FMHCTM a.txt >>b.txt ; echo >>b.txt ; echo END OF FMHCTM >>b.txt ; echo >>b.txt ; mv b.txt XX_MISSION_DETAILS_JAERO.txt

;

Echo >b.txt ; grep SELCAL a.txt >>b.txt ; echo >>b.txt ; echo END OF SELCAL >>b.txt ; echo >>b.txt ; grep -B 2 ” HF” a.txt >>b.txt ; echo >>b.txt ; echo END OF HF >>b.txt ; echo >>b.txt ; grep AES:AE a.txt |cut -b 27-33,44-50,58-180 | sort | uniq >>b.txt ; echo >>b.txt ; echo END OF UNITED STATES HEX AE >>b.txt ; echo >>b.txt ; grep AES:43C a.txt |cut -b 27-33,44-50,58-180 | sort | uniq >>b.txt ; echo >>b.txt ; echo END OF UNITED KINGDOM HEX 43C >>b.txt ; echo >>b.txt ; grep AES:3B7 a.txt  |cut -b 27-33,44-50,58-180 | sort | uniq >>b.txt ; echo >>b.txt ; echo END OF FRANCE HEX 3B7 >>b.txt ; echo >>b.txt ; grep AES:3E a.txt |cut -b 27-33,44-50,58-180 | sort | uniq >>b.txt ; echo >>b.txt ; echo END OF GERMANY HEX 3E >>b.txt ; echo >>b.txt ; grep AES:3F a.txt |cut -b 27-33,44-50,58-180 | sort | uniq>>b.txt ; echo >>b.txt ; echo END OF GERMANY HEX 3F >>b.txt ; echo >>b.txt ; grep AES:3E a.txt |cut -b 27-33,44-50,58-180 | sort | uniq>>b.txt ; echo >>b.txt ; echo END OF GERMANY HEX 3E >>b.txt ; echo >>b.txt ; grep AES:480 a.txt |cut -b 27-33,44-50,58-180 | sort | uniq>>b.txt ; echo >>b.txt ; echo END OF THE NETHERLANDS HEX 480 >>b.txt ; echo >>b.txt ; mv b.txt XX_SELCAL#HF#AES.txt