Thursday, October 10, 2013
Listening Live to Scanners Feeding Online Streams
Wednesday, October 2, 2013
Linux Bash Script to get a TAF Forecast From the Console
taf [ICAO STATION ID]
Example: $taf kslc
Save the following in a file called taf:
#!/bin/bash station=$(echo "$1" | tr '[:lower:]' '[:upper:]') wget -q -O /home/$USER/taftmp http://weather.noaa.gov/pub/data/forecasts/taf/stations/$station.TXT echo " " more /home/$USER/taftmp echo " " rm /home/$USER/taftmp
Python Script to Update Icecast Stream with METAR and TAF
You can get the scripts here (use wget from a Linux command line):
http://www.k7bbr.net/files/imetarkslcExample.py
http://www.k7bbr.net/files/itafkslcExample.pySave them with whatever names you'd like (probably imetar[AirportName].py). In each script enter the server/stream information and modify the script to download your desired station name. Then run a cron job every hour (or whatever interval you choose) to update your stream metadata with the airport METAR and TAF data.
Saturday, August 17, 2013
Arduino Maxtroller Case
Thursday, June 13, 2013
Using Python to Update Icecast Scanner Audio Feeds with a Raspberry Pi
BCT8
BCT15
BCT15X
BCD996T
BCD996XT
BC346T
BC346XT
BCD396T
BCD396XT
Functionality could be added for other Uniden scanners such as the 780XLT, 785D, 796D, and 898T, but as of now I don't have access to any of these models for testing.
To implement the script, download the script by right clicking on the appropriate link below and click "Save As". You can do this from the Raspberry Pi or from another computer and use any number of tools such as ssh and scp to copy the file to your desired location on your Raspberry Pi.
Uniden MetaPy.py Script - For all models except the BCT8
Uniden MetaPy8.py Script - For the BCT8 model
Or you can use the
wget command from your Raspberry Pi's console to download and save the file:wget -O ~/metaPy.py http://www.k7bbr.net/files/metaPy.pyor for the BCT8:
wget -O ~/metaPy8.py http://www.k7bbr.net/files/metaPy8.py(The -O option allows you to give the file location and filename for the downloaded file - in this case it's saved in your home directory under the name
metaPy.py or metaPy8.py.)Once downloaded, use a text editor such as
nano or vi to change the configuration section at the top of the script to match your settings:'''-----------------USER CONFIGURATION-----------------''' port = "/dev/ttyUSB0" #enter scanner USB/serial port in quotes here baudrate = 115200 #enter scanner baudrate here icecastUser = "username" #enter icecast username in quotes here (for RR feed use "source") icecastPass = "hackme" #enter icecast password in quotes here icecastServerAddress = "192.168.1.100:8000" #enter icecast server IP Address (and port if necessary) here icecastMountpoint = "mymountpoint" #enter icecast mountpoint in quotes here - don't add leading '/' '''-----------------END USER CONFIGURATION---------------''' '''----------UNNECESSARY TO MODIFY SCRIPT BELOW----------'''To connect your scanner you'll need a USB to serial adapter. If it's the first one connected, it should show up as
/dev/ttyUSB0. You can check and see by going to /dev and list the files and look for ttyUSB0 or something similar. Also make sure that the baudrate in the script is the same as the baudrate set in your scanner.The script uses two Python modules requests and serial that may or may not be installed on your Raspberry Pi. You can install these packages by using apt-get:
sudo apt-get install python-serial, python-requestsTo run the script, change directories to the location the script is saved. Then type
python metaPy.py to begin the script. If it is running, you will see it print out talkgroup information, time information and an update status:Davis County Sim 11232 Syracuse PD 2 C
Thu Jun 13 21:07:03 2013
Icecast Update OK
Davis County Sim 10688 Davis Ops 2
Thu Jun 13 21:07:21 2013
Icecast Update OKThe script can be placed in the background by typing
ctrl-z and then bg. It can be brought back to the foreground by typing fg.You can also start the script detached from the console by adding an & to the end of the command:
python metaPy.py & .To stop the script, simply type
ctrl-c, or find the process and kill it.By using Darkice to feed the audio and this metaPy.py script to feed the alpha tags, you now have a 5W streaming media box to stream both scanner audio and text alpha tags.
Tuesday, March 5, 2013
UniTrunker Automated File Merge
These tools are great, but fairly labor-intensive. So in an effort to automate the process and spend more time viewing the files and less time processing them, I recompiled the merging program and wrote a Linux script to do the work.
This processing could be done on a Windows machine using scripts and tools there, but I decided that I'd rather work in Linux for file viewing and processing. This leaves my Windows machines to run UniTrunker and create the logfiles, and my Linux machine to copy that logfiles and do the processing.
There are a few manual tasks that I had to perform initially. These include:
1. Export the system.xml file from UniTrunker and run either msxsl.exe or xslproc to extract group and user information into a .txt file.
2. Set up the folders and file hierarchy in advance
3. Mount the shared file location of the UniTrunker-logfile on the Windows computer
Once these tasks were done, I created a script for each system I was going to export and a cron job to run them each night shortly after midnight after UniTrunker had created and zipped the daily logfiles.
A link to the Linux version of UTC to merge logfiles with user and group data can be found here: UTC.sh file (Note this is not a .sh file, but an executable with no extension. In order for it to be downloaded as a file and not shown in a browser, I added the extension. Once it's downloaded, changed the name to remove the .sh extension.)
An example of the script I created:
utcopyexample.sh
!/bin/bash
datestring=$(date +%Y%m%d)
yesterday=$(date --date="yesterday" +%Y%m%d)
yearmonth=$(date --date="yesterday" +%Y%m)
processfile=~/your/path/here/$yearmonth/SystemName/UTM$yesterday.txt
processpath=/your/path/here/$yearmonth/SystemName/
filestring=UniTrunker-$yesterday.log.Z #Name of logfile created by UniTrunker
filestring2=UT$yesterday.log.Z #Shorten filename for ease
#Copy logfile from Windows machine to Linux machine for unzipping:
cp /mnt/nameofwindows/computerRunning/unitrunker/S00000031/$filestring ~/Documents/UTSort/raw/$filestring2
gunzip /home/parallels/Documents/UTSort/raw/UT$yesterday.log.Z #unzip logfile
#Move unzipped file to log storage location:
mv /home/parallels/Documents/UTSort/raw/UT$yesterday.log /home/parallels/Documents/UTSort/$yearmonth/Davis/UT$yesterday.log
#Run UTC sort/merging program to add user names and group names to logfile in addition to UID and GID numbers
#Note: Prior to running this script, it is necessary to export the System.xml file in UT and then run MSXSL.exe in Windows
#or xsltproc in Linux to create users.txt and a groups.txt files to be used by the UTC sort/merging program
UTC /your/path/here/$yearmonth/SystemName/UT$yesterday.log /your/path/here/users.txt /your/path/here/groups.txt $processfile
#Below are examples of searches/sorts that I do on the logfiles to sort via talkgroups or users or find unknowns.
#Place your talkgroup IDs or search terms in the field after grep and create folders and change filenames to be relevant
#to your local groups and users:
more $processfile | grep ,X | grep -v XP >${processpath}/WXPD/WXPD$yesterday.txt #WX PD
more $processfile | grep 10816 >${processpath}/Ops5/Ops5$yesterday.txt #Davis County Ops 5
more $processfile | grep 10848 >${processpath}/Ops6/Ops6$yesterday.txt #Davis County Ops 6
more $processfile | grep 8544 >${processpath}/BountPD1/BountPD1$yesterday.txt #Bountiful PD 1
more $processfile | grep '9440\|9408' >${processpath}/DavisLaw/DavisLaw$yesterday.txt #Davis Law 1 and 2
more $processfile | grep 9952 >${processpath}/DavisService/DavisService$yesterday.txt #Davis Service
more $processfile | grep 17600 >${processpath}/NRegional/NRegional$yesterday.txt #Northern Regional
more $processfile | grep 18464 >${processpath}/Event2/Event2$yesterday.txt #Event 2
more $processfile | grep ', ,G' >>${processpath}/Unknown/DavisUnknown$yearmonth.txt #unknown users
more $processfile | grep 'G,.*, ,'>>${processpath}/Unknown/DavisUnknownTGID$yearmonth.txt #unknown talkgroups
sort -u -t, -k8,8 ${processpath}/Unknown/SLCUnknownTGID$yearmonth.txt | cut -d, -f8 | sort -n>${processpath}/Unknown/SLCUnknownTGIDSorted$yearmonth.txt #List unknown TGID numbers
sort -u -t, -k5,5 ${processpath}/Unknown/SLCUnknownUID$yearmonth.txt | cut -d, -f5 |sort -n>${processpath}/Unknown/SLCUnknownUIDSorted$yearmonth.txt #List unknown UID numbers
Tuesday, January 22, 2013
Virtual Radar
My radio monitoring began as the son of a volunteer fireman, but quickly turned to aviation when I bought my first scanner at around 10 years old. My love of airplanes has led to a career in flying. Strange as it may seem I still am interested in listening to the chatter of airplanes as they pass overhead even though I hear ATC all day at work.
As an addition to my ATC voice monitoring, I was interested in getting a virtual radar receiver that can plot aircraft location and/or altitude using Mode-S and ADS-B data. For a year I tried a AirNav RadarBox receiver. I enjoyed its ease of use out of the box and the ability to combine outside FAA data in one program. However, the RadarBox is limited in its ability to pass raw data to 3rd party programs such as Planeplotter.
Last month I traded in my RadarBox for a Kinetic Avionics SBS-3 Virtual Radar Receiver (http://www.kinetic.co.uk/sbs-3.php). In addition to the Mode-S reception, the SBS-3 has a couple of other features that are really great! The box has 2 SDR tuners that have a bandwidth of 8 MHz that can be divided into 6 receivers. Additionally, there is built-in ACARS decoding and for those near the coast a built-in AIS decoder as well.
The box can be connected to a PC via USB, or used stand-alone via ethernet. Kinetic provides their Basestation software to interface with the SBS-3. I've found it very robust. The main difference here between the SBS-3 and RadarBox is the lack of online data updates built into Basestation. When an aircraft is received, Basestation displays all the data that it receives, but unlike RadarBox, it doesn't go out on the web and download additional aircraft information.
The good thing is there is add-on software that interfaces with Basestation which will download the aircraft information and populate your database. I use ActiveDisplay (http://www.gatwickaviationsociety.org.uk/AD_home.asp) and decided to purchase a subscription for one year to access the Gatwick Aviation Society aircraft database. There is a lite version which is free.
My next project is to set up Planeplotter and interface the SBS-3 with it. One feature I'm interested in is Multilateration. This gives the ability to approximate the location of non-ADS-B aircraft by using data from other users in the area that can see the aircraft.
Seeing Mode-S and ADS-B data is a fascinating way to enhance aircraft monitoring and add to the awareness of who's flying around.
Saturday, July 14, 2012
One Man's Junk is Another Man's Treasure
The first acquisition was a Regency Digital Flight Scan receiver. It has a wooden case and is a bit large. I got it home and, after a bit of work to find a motorola to bnc adapter, found that it receives ATC transmissions great. I have found that modern broadband scanners have a hard time hearing ATC even though they are supposed to be such great receivers. Filtering the FM broadcast band helps, but they are poor performers. It's nice to be able to have a dedicated ATC receiver.
The next find was a Uniden BC200XLT scanner. The original owner had no use for it since it didn't do trunking. I was excited to buy it. After adding a discriminator tap and mounting a jack in the housing (an advantage of having older larger scanners - there's more room to mount an audio jack), it's up and running as an additional analog scanner and discriminator source.
Friday, May 25, 2012
Thunderbirds Practice
We got to watch the Thunderbirds practice today at Hill Air Force Base in preparation for the open house and airshow - Warriors Over the Wasatch - that begins tomorrow. It was fun to snap some pictures and snag some audio of their practice.
Thunderbirds Audio
Monday, May 7, 2012
Motorola Maxtrac 5-pin Accessory Jack
Monday, April 30, 2012
UniTrunker Logfile Merging
Prior to running the batch file, all of the needed files need to be placed in the same directory. These include:
msxsl.exe (which can be downloaded from Microsoft's website)
UTC.exe (the program file which I wrote to perform the merge)
UTMerge.bat (the batch file which calls all the programs and converts files to correct filetypes)
UTxsl.bat(the batch file which calls the msxsl.exe to apply the xsl stylesheets)
UTlog.bat(the batch file which calls UTC.exe program to create a merged log file)
System.xml (this file is exported by going to the systems tab in UniTrunker and exporting the desired system)
users.xsl, groups.xsl, sites.xsl which I have created/modified based on the example from the UT website
UniTrunker-********.LOG file (created daily by UniTrunker and archived to a gzip file)
-Note this file needs to be unzipped in order for the batch file to work
Once all the files are in the same directory, simply change directories to the location of the files, and then type "utmerge" to call the batch file.
The user will be prompted to enter the name of the .xml file. Case doesn't matter, but be sure to type it correctly. After a few seconds of processing the user will be prompted for the date of the logfile to be merged. After a few more seconds a text file with the merged data will be created in the same directory.
A zip file of the required files can be found here:
UniTrunker Merge Program files
Download and extract the UTMerge.zip file to an accessible location. Then extract a system.xml file from UniTrunker. Copy or move a .LOG file from UniTrunker's logfiles to this same directory. You can go to Run...and type CMD to open a DOS window. Then change directories to the location of your UTM files and type utm to run the batch file.
An easier way is to use windows explorer to browse to the directory and double click on UTM.bat. The program will run in a popped-up DOS window. Carefully type in the information required when prompted, and VOILA, a merged log file will be created!
UPDATE:
I created 2 additional .bat files:UTxsl and UTlog. The UTmerge file can still be used successfully. However, each time it runs it creates the same users.txt, group.txt, and sites.txt files. This does no harm, but is redundant and takes time. I spilt the processes into 2 batch files. The first to be run should be UTxsl. This will apply the xsl stylesheet once and create the necessary .txt files. After these are created, there is no need to run this batch file again unless changes are made in UniTrunker to your system files and subsequently exported.
The second batch file to be run is UTlog. This simply prompts for the date of the log file you would like to merge with the users and groups files. It can be run multiple times on logs for different dates without recreating the users.txt and groups.txt files.
UPDATE 2 (February 23, 2013)
After looking for a way to further process the merged log files, I realized the Linux grep command was perfect for looking through logs to isolate individual users or groups or both. This means I either have to run a grep program on my Windows computer, or move the files to my Linux computer to further process them. It is a little cumbersome to have to move files to a different platform, but the power to sort the data makes it worth doing.
The power of the the grep command in dissecting the large amount of information in one days' log file is impressive. For example, after a recent fire department response to a building fire, I sorted the log files based on the fire departments operations channel to see just the calls for the fire separate from the 1000's of other calls on the TRS for the day.
For a better explanation of the grep command see:
http://en.wikipedia.org/wiki/Grep
A sample output from a TG sort using the command:
~$ more UT20130220merged.txt | grep 10848
20130220210159,2,Call,I,32092,Engine 85,G,10848,Davis Ops 6 - South Davis Metro Fire (Bountiful fire response),488, -
20130220210242,2,Call,I,32014,Ambulance 83,G,10848,Davis Ops 6 - South Davis Metro Fire (Bountiful fire response),525, -
20130220210247,2,Call,I,32014,Ambulance 83,G,10848,Davis Ops 6 - South Davis Metro Fire (Bountiful fire response),497, -
20130220210256,2,Call,I,32031,Engine 85,G,10848,Davis Ops 6 - South Davis Metro Fire (Bountiful fire response),498, -
20130220210300,2,Call,I,32014,Ambulance 83,G,10848,Davis Ops 6 - South Davis Metro Fire (Bountiful fire response),498, -
Friday, April 20, 2012
Great Utah Shake Out Mock Disaster Audio
Davis County Disaster Talkgroup Audio
Great Utah Shakeout 2012
The county has a nice radio setup with capabilities on many different modes from CW to packet and band capabilities from HF to UHF. Area repeater coverage was also excellent with contacts from the North end of the state to the South end. Seeing how a good station like K7DAV is put together even gave me some ideas for improvements for my own shack.
Wednesday, November 16, 2011
Maxtroller and Maxduino
Instructions Update
Original Unmodified Code
Code Modified to Use Maxtroller Squelch
Code for Maxtroller Discrimator Audio Parking
I won't repeat these instructions here since they are well-written. There were a few differences between my 5-pin Maxtrac radios and the 16-pin Maxtrac radios used in the instructions, but the differences were resolved by comparing my radio's board and the pictures of the16-pin's board. The biggest software change I made was to wire the CSQ "squelch" circuit to the Arduino and use it to mute and unmute the Maxtrac. Without this change I was getting very long squelch tails (up to 2 seconds) that were fairly intolerable. Now the squelch tail is fairly tight and a lot less noticeable.
For my first attempt at building the Maxdunio, I crudely cut a slot in the back of the radio and ran the wires out to the Arduino. The second time I placed an RJ-45 jack in the side of the front cover next to the speaker. This allowed for an easy, clean connection to the Arduino or my homebuilt Maxtroller with an ethernet cable.
Here is the base of my Maxtroller box with a Radio Shack "Dual General-Purpose IC PC Board." I used this for both the button circuit and the discriminator audio circuit to add a resistor and capacitor inline with the audio.
Thursday, September 22, 2011
Uniden BC890XLT Discriminator Tap
Last week I bought a used Uniden BC890XLT scanner and added a discriminator audio tap. Here's how I did it:
The first thing to do was open the case. The outer sleeves come apart on the top and the bottom. There are 2 screws on each side and one screw on the back that I removed. I took both the top and bottom sleeves off to explore the inside, and discovered I only needed to remove the top to tap the discriminator audio. Once inside I found the location of the discriminator audio which is pin #10 of IC #3, 3359DA. Pin #10 is on the top right corner of the chip:
Rather than solder to the chip, I preferred to solder to the lead to the resistor at TP3 which is connected directly to PIN #10 of the IC. I put a 10K ohm resistor in series with a 10 μF tantalum capacitor.
I wanted this modification to be removable so I didn't drill a hole in the case. Rather, I ran a connected wire to the outside of the case through an opening in the side of the case.
I then ran the wire in the space between the case and the outer sleeve on the side. I then ran it around the corner to the back of the scanner. I connected the ground wire to the chassis via the screw that holds the accessory RCA jack. I put heat shrink tubing on the outside of the wires and connected them to a 1/8" mono phone jack.
Radio Shack Part Numbers:
1/4-Watt 10K ohm resistors - #271-1335
10μF Tantalum Capacitor - #272-1436
1/8" Mono In-line Phone Jack - #274-0333
Assorted Heat Shrink Tubes - #278-1627
Thursday, July 21, 2011
Saying goodbye to a good friend
It is hard to witness history as the Space Shuttle Program comes to an end. While I was never a direct participant in the program, I owe a lot to the Space Shuttle Program for who I am today.
I was four years old when Space Shuttle Columbia launched on STS-1 in 1981. I remember sitting with my parents in our living room watching on TV as the orbiter landed on the dry lakebed at Edwards Air Force base and thinking how cool it would be to be an astronaut and fly on a vehicle like that.
Days and years passed, and as much as I could, I would follow the Space Shuttle program through triumph and tragedy. I enjoyed classes and units at school on space and the U.S. space program. Hanging on the wall in my bedroom throughout elementary school, middle school, high school, and even part of college was this picture on a poster of the launch of STS-1 that I would look at when daydreaming of becoming an astronaut or a pilot.
In the end I chose a school and career path that led me to become an airline pilot, but the roots of my interest in science, math and aviation came from watching the Space Shuttle in all of it's power, majesty in ascent and grace on entry and landing. I hope that there is another vehicle to inspire my children to work hard to pursue their dreams.
So, farewell Columbia, Challenger, Discovery, Atlantis and Endeavour. I thank you. Fair winds and following seas.
Friday, June 17, 2011
Linear Birds

I was excited today to receive my new FT-857D to use on the linear birds. I realize the 857 will only provide half-duplex operation, but paired with my other handheld, it will be adequate. I'm looking forward to having additional passes available each day. I need to now work on some satellite antennas. Perhaps a couple of eggbeaters and a mounted yagi.
Duplex
Wednesday, May 11, 2011
Aging Satellites

Thursday, April 14, 2011
Yuri's Night

On April 12th I marked the 50th anniversary of the first human in space and the 30th anniversary of STS-1 by making some satellite contacts on AO-51 and an HF contact with R3K - a special event station from ARC Energia in Korolev, Russia (Russian Mission Control Center.) It's nice to dust off my arrow satellite antenna and make some new satellite contacts now that the weather is slowly getting warmer.

