Setting up Virtual Radar Server
10.07.2016 - Louis Kowolowski - ~10 Minutes
Virtual Radar Server is an alternative way to visualize and consume information that is extruded by devices like PiAware (written about here ).
There is documentation on the VRS website for setting up mono/Linux, but this shows how to do it on FreeBSD.
Install FreeBSD
Nothing fancy. Basic FreeBSD installation. I skipped all the pkg customization stuff and just installed binary packages for this experiment. The following pkgs ended up being installed:
accessibility/atk
accessibility/atkmm
converters/fribidi
converters/libiconv
databases/gdbm
databases/sqlite3
devel/autoconf
devel/autoconf-wrapper
devel/automake
devel/automake-wrapper
devel/bison
devel/cscope
devel/dbus
devel/dbus-glib
devel/gettext-runtime
devel/gettext-tools
devel/glib20
devel/glibmm
devel/gmake
devel/gmake-lite
devel/gobject-introspection
devel/icu
devel/libdaemon
devel/libdevq
devel/libedit
devel/libevent2
devel/libffi
devel/libglade2
devel/libnotify
devel/libpciaccess
devel/libpthread-stubs
devel/libsigc++20
devel/llvm37
devel/m4
devel/mono-addins
devel/p5-Locale-gettext
devel/pcre
devel/pkgconf
dns/libidn
editors/vim
emulators/open-vm-tools
emulators/tpm-emulator
graphics/cairo
graphics/cairomm
graphics/dri
graphics/gbm
graphics/gdk-pixbuf2
graphics/giflib
graphics/graphite2
graphics/gtk-update-icon-cache
graphics/jasper
graphics/jbigkit
graphics/jpeg-turbo
graphics/libEGL
graphics/libGL
graphics/libdrm
graphics/libepoxy
graphics/libglapi
graphics/libglesv2
graphics/png
graphics/tiff
lang/mono
lang/perl5.20
lang/python
lang/python2
lang/python27
lang/ruby22
math/gmp
misc/help2man
misc/hicolor-icon-theme
misc/pciids
misc/shared-mime-info
net/avahi-app
net/avahi-sharp
net/libdnet
net/mono-zeroconf
net/rsync
ports-mgmt/dialog4ports
ports-mgmt/pkg
ports-mgmt/portmaster
print/cups
print/freetype2
print/harfbuzz
print/indexinfo
print/libpaper
security/ca_root_nss
security/gnutls
security/libtasn1
security/nettle
security/p11-kit
security/sudo
security/trousers
shells/bash
sysutils/fusefs-libs
sysutils/gnome_subr
sysutils/mono-kmod
sysutils/tmux
textproc/expat2
textproc/libxml++26
textproc/libxml2
textproc/libyaml
textproc/p5-XML-LibXML
textproc/p5-XML-NamespaceSupport
textproc/p5-XML-SAX
textproc/p5-XML-SAX-Base
textproc/xmlcatmgr
x11-clocks/xclock
x11-drivers/xf86-input-keyboard
x11-drivers/xf86-input-mouse
x11-drivers/xf86-video-ati
x11-drivers/xf86-video-intel
x11-drivers/xf86-video-mach64
x11-drivers/xf86-video-nv
x11-drivers/xf86-video-openchrome
x11-drivers/xf86-video-r128
x11-drivers/xf86-video-vesa
x11-drivers/xorg-drivers
x11-fonts/dejavu
x11-fonts/encodings
x11-fonts/font-adobe-100dpi
x11-fonts/font-adobe-75dpi
x11-fonts/font-adobe-utopia-100dpi
x11-fonts/font-adobe-utopia-75dpi
x11-fonts/font-adobe-utopia-type1
x11-fonts/font-alias
x11-fonts/font-arabic-misc
x11-fonts/font-bh-100dpi
x11-fonts/font-bh-75dpi
x11-fonts/font-bh-lucidatypewriter-100dpi
x11-fonts/font-bh-lucidatypewriter-75dpi
x11-fonts/font-bh-ttf
x11-fonts/font-bh-type1
x11-fonts/font-bitstream-100dpi
x11-fonts/font-bitstream-75dpi
x11-fonts/font-bitstream-type1
x11-fonts/font-cronyx-cyrillic
x11-fonts/font-cursor-misc
x11-fonts/font-daewoo-misc
x11-fonts/font-dec-misc
x11-fonts/font-ibm-type1
x11-fonts/font-isas-misc
x11-fonts/font-jis-misc
x11-fonts/font-micro-misc
x11-fonts/font-misc-cyrillic
x11-fonts/font-misc-ethiopic
x11-fonts/font-misc-meltho
x11-fonts/font-misc-misc
x11-fonts/font-mutt-misc
x11-fonts/font-schumacher-misc
x11-fonts/font-screen-cyrillic
x11-fonts/font-sony-misc
x11-fonts/font-sun-misc
x11-fonts/font-util
x11-fonts/font-winitzki-cyrillic
x11-fonts/font-xfree86-type1
x11-fonts/fontcacheproto
x11-fonts/fontconfig
x11-fonts/fontsproto
x11-fonts/libFS
x11-fonts/libXfont
x11-fonts/libXfontcache
x11-fonts/libXft
x11-fonts/libfontenc
x11-fonts/mkfontdir
x11-fonts/mkfontscale
x11-fonts/xorg-fonts
x11-fonts/xorg-fonts-100dpi
x11-fonts/xorg-fonts-75dpi
x11-fonts/xorg-fonts-cyrillic
x11-fonts/xorg-fonts-miscbitmaps
x11-fonts/xorg-fonts-truetype
x11-fonts/xorg-fonts-type1
x11-servers/xorg-server
x11-themes/xcursor-themes
x11-toolkits/gtk-sharp20
x11-toolkits/gtk20
x11-toolkits/gtkmm24
x11-toolkits/libXaw
x11-toolkits/libXmu
x11-toolkits/libXt
x11-toolkits/libgdiplus
x11-toolkits/pango
x11-toolkits/pangomm
x11-wm/fluxbox
x11-wm/twm
x11/appres
x11/bitmap
x11/compositeproto
x11/damageproto
x11/dmxproto
x11/dri2proto
x11/fixesproto
x11/glproto
x11/iceauth
x11/inputproto
x11/kbproto
x11/libICE
x11/libSM
x11/libX11
x11/libXScrnSaver
x11/libXTrap
x11/libXau
x11/libXcomposite
x11/libXcursor
x11/libXdamage
x11/libXdmcp
x11/libXevie
x11/libXext
x11/libXfixes
x11/libXi
x11/libXinerama
x11/libXp
x11/libXpm
x11/libXrandr
x11/libXrender
x11/libXres
x11/libXtst
x11/libXv
x11/libXvMC
x11/libXxf86dga
x11/libXxf86misc
x11/libXxf86vm
x11/libdmx
x11/liboldX
x11/libxcb
x11/libxkbfile
x11/libxkbui
x11/libxshmfence
x11/luit
x11/pixman
x11/printproto
x11/randrproto
x11/recordproto
x11/renderproto
x11/scrnsaverproto
x11/sessreg
x11/setxkbmap
x11/smproxy
x11/trapproto
x11/videoproto
x11/x11perf
x11/xauth
x11/xbacklight
x11/xbitmaps
x11/xcalc
x11/xcb-util
x11/xcb-util-renderutil
x11/xcmsdb
x11/xconsole
x11/xcursorgen
x11/xdpyinfo
x11/xdriinfo
x11/xev
x11/xextproto
x11/xf86dga
x11/xf86dgaproto
x11/xf86miscproto
x11/xf86vidmodeproto
x11/xgamma
x11/xgc
x11/xhost
x11/xineramaproto
x11/xinit
x11/xinput
x11/xkbcomp
x11/xkbevd
x11/xkbutils
x11/xkeyboard-config
x11/xkill
x11/xlsatoms
x11/xlsclients
x11/xmessage
x11/xmodmap
x11/xorg
x11/xorg-apps
x11/xorg-docs
x11/xorg-libraries
x11/xpr
x11/xprop
x11/xproto
x11/xrandr
x11/xrdb
x11/xrefresh
x11/xset
x11/xsetmode
x11/xsetroot
x11/xterm
x11/xtrans
x11/xvinfo
x11/xwd
x11/xwininfo
x11/xwud
With this, I ended up with a graphical (capable) system, running fluxbox . The point of this system is to run VRS, headless, so I don’t need a fancy interface. I’d be happy of VRS didn’t need a gui, but I digress.
Mono and friends
Download the mono version of the VRS tarball from the VRS site (mentioned in the footnotes).
Once you have mono installed, you can fetch the tarball for VRS (don’t get the windows installer). Unpack it into a directory (by default, it unpacks into the current directory, which is messy). I chose VRS. Because reasons, you need to create a ‘VirtualRadar.exe.config’ file in the same directory as your VirtualRadar.exe file. The contents are:
<?xml version="1.0"?>
<configuration>
<configSections>
</configSections>
<startup>
<supportedRuntime version="v2.0.50727"/>
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Mono.Data.Sqlite"
publicKeyToken="0738eb9f132ed756"
culture="neutral" />
<bindingRedirect oldVersion="2.0.0.0"
newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
This fixes some mono/.net version mismatch/compat stuff.
You should now be able to run
mono VirtualRadar.exe
Most of the options are pretty straight forward. If you don’t know the lat/long of your basestation (PiAware?) you can use Google Maps to find your location.
- Download the Silhouette Logos : Unzip this into your VRS directory that has the VirtualRadar.exe.config
- Download the Country Flags : Unzip this into your VRS directory that has the VirtualRadar.exe.config
- Download the Operator Logos (1-4) : I made a directory for this called Logos and then unzipped all four of the archives into the directory (There may be some overwriting, I just said ‘yes’). The logos directory is in the VRS directory that contains the VirtualRadar.exe.config.
Once you get it connected, it should look similar to this.
![](/2016/07/setting-up-virtual-radar-server/gallery/vrs_on_freebsd_01.png)
I’ve noticed that it seems to crash if I attempt to go into options or plugins more than once. Annoying, but only at the beginning. Once things are configured, it seems moderately stable.
Virtual Radar Server Addons
Download the SQB files
Unzip this into your VRS directory that has the VirtualRadar.exe.config Download the Database Writer Plugin
This is used for keeping a history of the planes you see. When you load VRS, under Tools -> Plugins, you should s
Sample screenshots
You can point your browser at http://<your_vrs_ip>:8080/VirtualRadar/ and you should see something similar to this (Depending on where you live and how busy your skys are).
I periodically add to the gallery below as I see interesting things.
Reporting
All this is fun, but really, who has time to watch this 24/7? Since the BaseStation.sqb file is just an SQLite database, you can script queries and generate reports for yourself. A script like this will find all the flights in the last 24hrs that have an owner that starts with ‘United States’. It will then print out a collection of fields. It looks like this:
ModeS Country Registration Owner Callsign ICAO Type Oper Last Seen
------- ------------- ------------ ------------------------------ ---------- ----- ------------------------------ ----- -------------------
AE26A7 United States 6581 United States Coast Guard CG6581 AS65 Aerospatiale MH-65D Dolphin 2016-10-09 00:07:35
AE1E6A United States 166012 United States Navy BOILERUP TEX2 Raytheon Aircraft Company T-6B 2016-10-09 00:21:10
AE14AA United States 160854 United States Navy BE9L Beech T-44A Pegasus 2016-10-09 00:22:07
AE26BA United States 6603 United States Coast Guard C6603 AS65 Aerospatiale MH-65D Dolphin 2016-10-09 00:45:23
ADFFC8 United States 64-13304 United States Air Force T38 Northrop T-38A Talon 2016-10-09 00:55:04
AE4EAD United States 166196 United States Navy TEX2 Raytheon Aircraft Company T-6B 2016-10-09 01:13:29
AE147A United States 166693 United States Navy CNV4584 B737 Boeing C-40A 2016-10-09 01:14:38
AE1ED9 United States 166084 United States Navy TEX2 Raytheon Aircraft Company T-6B 2016-10-09 01:20:27
AE0478 United States 58-0046 United States Air Force ZOMBE23 K35R Boeing KC-135T RCH 2016-10-09 01:24:51
AE4C5F United States 10-0729 United States Air Force RAIL11 B350 Hawker Beechcraft Corp MC-12W 2016-10-09 01:30:34
A92FB5 United States 07-0691 United States Air Force PC12 Pilatus PC-XII U-28B 2016-10-09 01:32:02
AE26BA United States 6603 United States Coast Guard C6603 AS65 Aerospatiale MH-65D Dolphin 2016-10-09 02:13:59
ADFCCB United States 93-0651 United States Air Force BE40 Beech T-1A Jayhawk 2016-10-09 02:26:52
AE145D United States 06-6159 United States Air Force RCH111 C17 Boeing C-17A Globemaster III RCH 2016-10-09 02:29:56
ADFCB1 United States 93-0625 United States Air Force BE40 Beech T-1A Jayhawk 2016-10-09 02:37:31
AE1E85 United States 166039 United States Navy TEX2 Raytheon Aircraft Company T-6B 2016-10-09 02:46:17
AE1E79 United States 166027 United States Navy TEX2 Raytheon Aircraft Company T-6B 2016-10-09 02:47:08
AE1E6A United States 166012 United States Navy BOILERUP TEX2 Raytheon Aircraft Company T-6B 2016-10-09 02:49:45
AE059C United States 60-0350 United States Air Force OILER47 K35R Boeing KC-135R RCH 2016-10-09 03:10:36
AE4C5F United States 10-0729 United States Air Force RAIL11 B350 Hawker Beechcraft Corp MC-12W 2016-10-09 03:41:04
AE0478 United States 58-0046 United States Air Force ZOMBE23 K35R Boeing KC-135T RCH 2016-10-09 03:53:49
AE1494 United States 97-0100 United States Air Force DRACO21 Boeing E-8C Joint STARS RCH 2016-10-09 10:31:46
AE2EE4 United States 166103 United States Navy TEX2 Raytheon Aircraft Company T-6B 2016-10-09 14:07:11
ADFF57 United States 68-8112 United States Air Force T38 Northrop T-38C Talon 2016-10-09 15:01:32
AE4C5F United States 10-0729 United States Air Force RONIN20 B350 Hawker Beechcraft Corp MC-12W 2016-10-09 15:13:48
AE04F1 United States 84-00161 United States Army PAT571 BE20 Beech C-12U-3 Huron 2016-10-09 15:18:44
AE57C7 United States 169002 United States Navy VVLL811 P8 Boeing P-8A Poseidon 2016-10-09 15:32:17
AE14CD United States 161076 United States Navy BE9L Beech T-44A Pegasus 2016-10-09 15:52:49
ADFE8A United States 61-2666 United States Air Force SAME40 C135 Boeing NC-135W RCH 2016-10-09 15:56:48
AE04D7 United States 165829 United States Navy CNV4601 B737 Boeing C-40A 2016-10-09 16:00:19
AE1E5A United States 07-3890 United States Air Force TEX2 Hawker Beechcraft Corp T-6A Te 2016-10-09 16:44:42
AE4BEE United States 2314 United States Coast Guard CN35 CASA HC-144A Ocean Sentry 2016-10-09 16:46:48
ADFE8A United States 61-2666 United States Air Force SAME40 C135 Boeing NC-135W RCH 2016-10-09 17:23:33
AE0566 United States 85-0009 United States Air Force RCH148 C5M Lockheed C-5M Galaxy RCH 2016-10-09 17:36:18
AE4EBA United States 168436 United States Navy MADFX22 P8 Boeing P-8A Poseidon 2016-10-09 17:59:29
AE14CB United States 161074 United States Navy BE9L Beech T-44A Pegasus 2016-10-09 18:00:17
AE0570 United States 86-0019 United States Air Force C5M Lockheed C-5M Galaxy RCH 2016-10-09 18:00:58
A3522F United States N313CG United States Dept of Justice AT43 Avions de Transport Regional A DOJ 2016-10-09 18:20:24
AE04F1 United States 84-00161 United States Army PAT571 BE20 Beech C-12U-3 Huron 2016-10-09 18:21:31
AE4C5F United States 10-0729 United States Air Force RONIN20 B350 Hawker Beechcraft Corp MC-12W 2016-10-09 18:26:27
AE01E3 United States 96-3011 United States Air Force TEX2 Raytheon Aircraft Company T-6A 2016-10-09 18:27:03
ADFC69 United States 90-0407 United States Air Force BE40 Beech T-1A Jayhawk 2016-10-09 18:31:31
AE2EE4 United States 166103 United States Navy TEX2 Raytheon Aircraft Company T-6B 2016-10-09 18:31:49
ADFF57 United States 68-8112 United States Air Force T38 Northrop T-38C Talon 2016-10-09 18:32:00
ADFE8A United States 61-2666 United States Air Force SAME40 C135 Boeing NC-135W RCH 2016-10-09 18:48:16
AE03EB United States 165314 United States Navy C130 Lockheed C-130T Hercules 2016-10-09 19:23:31
AE0577 United States 86-0026 United States Air Force RCH622 C5M Lockheed C-5M Galaxy RCH 2016-10-09 19:26:40
AE1E5A United States 07-3890 United States Air Force TEX2 Hawker Beechcraft Corp T-6A Te 2016-10-09 19:40:21
AE05DA United States 85-0041 United States Air Force HANK41 C130 Lockheed C-130H Hercules RCH 2016-10-09 20:00:25
AE020F United States 79-1951 United States Air Force PRIMO85 DC10 Douglas KC-10A Extender RCH 2016-10-09 20:02:48
ADFE8A United States 61-2666 United States Air Force SAME40 C135 Boeing NC-135W RCH 2016-10-09 20:10:07
AE14CB United States 161074 United States Navy BE9L Beech T-44A Pegasus 2016-10-09 20:13:42
AE0429 United States 62-3530 United States Air Force MASH63 K35R Boeing KC-135R RCH 2016-10-09 20:25:26
AE04F1 United States 84-00161 United States Army PAT571 BE20 Beech C-12U-3 Huron 2016-10-09 20:53:47
AE2EE4 United States 166103 United States Navy TEX2 Raytheon Aircraft Company T-6B 2016-10-09 21:02:31
AE03E7 United States 165159 United States Navy C130 Lockheed C-130T Hercules 2016-10-09 21:05:54
AE2F6A United States 09-0659 United States Air Force SAME90 B350 Hawker Beechcraft Corp MC-12W 2016-10-09 21:16:42
ADFEA1 United States 94-7321 United States Air Force DAWG88 C130 Lockheed C-130H Hercules RCH 2016-10-09 21:21:44
AE12B7 United States 87-0023 United States Air Force CHAIN21 C130 Lockheed MC-130H Hercules RCH 2016-10-09 21:41:37
AE0484 United States 62-3509 United States Air Force BACKY91 K35R Boeing KC-135R RCH 2016-10-09 21:54:38
AE4AF2 United States 08-3177 United States Air Force HAVOC63 C30J Lockheed C-130J-30 Hercules RCH 2016-10-09 21:58:23
AE0859 United States 59-1506 United States Air Force E91506 K35R Boeing KC-135R RCH 2016-10-09 22:14:29
ADFC69 United States 90-0407 United States Air Force BE40 Beech T-1A Jayhawk 2016-10-09 22:19:55
AE04F1 United States 84-00161 United States Army PAT571 BE20 Beech C-12U-3 Huron 2016-10-09 22:29:15
ADFCBE United States 93-0638 United States Air Force BE40 Beech T-1A Jayhawk 2016-10-09 22:29:44
ADFCCA United States 93-0650 United States Air Force BE40 Beech T-1A Jayhawk 2016-10-09 22:30:59
AE03E1 United States 164994 United States Navy C130 Lockheed C-130T Hercules 2016-10-09 22:58:00
AE0566 United States 85-0009 United States Air Force RCH148 C5M Lockheed C-5M Galaxy RCH 2016-10-09 23:11:07
AE1E84 United States 166038 United States Navy TEX2 Raytheon Aircraft Company T-6B 2016-10-09 23:13:57
AE4AF1 United States 08-3176 United States Air Force E83176 C30J Lockheed C-130J-30 Hercules RCH 2016-10-09 23:23:26
AE14D0 United States 161079 United States Navy BE9L Beech T-44A Pegasus 2016-10-09 23:27:55
AE1258 United States 166376 United States Navy VV100 GLF5 Gulfstream Aerospace C-37B 2016-10-09 23:29:50
The script looks like this:
#!/usr/bin/env bash
set -e
date=`date -v -24H +%Y-%m-%d`
dbfile=/path/to/BaseStation.sqb
mailto='user@domain.tld'
output_file="/tmp/flights_$$.txt"
touch ${output_file}
if [ -e ${output_file} ] ; then
SQL="select Aircraft.ModeS, Aircraft.ModeSCountry as Country, Aircraft.Registration, Aircraft.RegisteredOwners as Owner, Flights.Callsign, Aircraft.ICAOTypeCode as 'ICAO', Aircraft.Type, Aircraft.OperatorFlagCode as 'Oper', Flights.EndTime as 'Last Seen' from Aircraft INNER JOIN Flights ON (Aircraft.AircraftID=Flights.AircraftID) where Flights.EndTime like '${date}%' and Owner like 'United States%' order by Flights.EndTime ASC;"
sqlite3 -header -column -cmd '.width 7 0 0 30 0 5 30 5' ${dbfile} "${SQL}" \
> ${output_file} 2>/dev/null
echo "${date}" | /usr/local/bin/mutt -s "Interesting flights from yesterday" -a "${output_file}" \
-- "${mailto}"
fi
You can cause it to run once a day (midnight?) and email you the output. If there is something you want to get more information about, you can always come back to VRS and use its reporting to show any additional information, potentially overlayed on a map.
Summary
Everything pretty much works as advertised. I noticed that you don’t get the option to display receiver range on the map if you use merged feeds (more than one basestation contributing to the same VRS instance) which makes sense. Reports work. Its an SQLite database, so you can run your own queries against it, and even automate text based reports if you want. All in all, pretty slick.