The Omni Scanner Luke Berndt luke@robotastic.com
Game plan What I built Why I built it How it works Why it is useful Why its days maybe numbered Where it could go
DC Radio System DC s Fire & EMS have a digital 800MHz trunked sys Motorola SmartZone II - proprietary control channel, P25 CAI for the voice DC City services also on the system Channels span 855.2125MHz - 859.9875MHz 11 voice channels + 1 control channel = lots of CPU Too wide for RTLSDR HackRF Jawbreaker @ 8MHz & I7 Mac Mini and GR 3.6.5.1
OpenMHz.com Records and archives (almost) all of the radio traffic on the system Captures lots of metadata, including radio Unit IDs Streams new calls using WebSockets Integrates with Twitter Filterable
Motivation
Motivation Scanners for Trunked Digital radio system are expensive and complex Recording and Archiving is even tougher and usually only possible for single channel Transform stream of audio in to packets/snippets Bring the RF world to Social Media Trunking and Twitter are sort of similar
Trunking 101 Create private channels without permanently reserving physical resources Talkgroups are abstractions - a channel is assigned with each talkgroup transmission Talkgroups Channels A channel is dedicated for sending out control message and channel assignments
Approach Started from gr-smartnet code by Nick Foster Python based program that can record SmartNet II transmission Only works with Analog voice, DC is Digital Python was happy with multiple GnuRadio graphs running at the same time Moved to C++ and created a recorder that uses DSD to decode the Digital voice
Gnuradio Program Decode New TG? Update Keep Alive Control Channel 5MHz Capture Decode Voice Store & Upload Active TG Thread Capture Decode Voice Store & Upload Inactive TG Thread
1616 01 Dispatch 34192 Medical Holding Unit 1632 02 Main 34288 St. Elizabeth's Hospital - Maintenance/Motor Pool 1648 03 Fireground 3 34320 St. Elizabeth's Hospital - Ops 1 1680 05 Fireground 5 34352 St. Elizabeth's Hospital - Security 1696 06 Fireground 1A 34384 St. Elizabeth's Hospital - Ops 2 1712 07 Fireground 7 34368 St. Elizabeth's Hospital - Maintenance 1744 09 Fireground 9 34416 Department of Human Services Ops 1760 010 Fireground 2A 34448 Department of Health 1776 0A3 Fireground A3 34480 Office of the Chief Medical Examiner (OCME) 1808 0A5 Fireground A5 34512 Department of TransportaUon Traffic Control 1824 0A6 Fireground 3A 34576 Department of TransportaUon 1840 0A7 Fireground A7 34608 Parking Enforcement 1872 0A9 Fireground A9 35024 Water and Sewer Authority 1 1888 0A10 Fireground 4A 35056 Water and Sewer Authority 2
SmartNet Trunking Messages are 27 bits [ 16bits ID ][ 1bit Group Flag ][ 10bits Command ] Channel Grant - Assign a talkgroup a channel 508D G 308 DAD0 G 141 Channel Grant 141 I 508D -> G DAD0 Keep the channel assigned DAD0 G 141 Continuation 141 G DAD0 Affiliate a radio to the system 0B0D I 308 065A I 310 Affiliation I 0B0D -> G 065A
Control Chan Decode gr_freq_xlating_fir_filter_ccf digital_fll_band_edge_cc gr_pll_freqdet_cf A 0 Balint Graph! digital_clock_recovery_mm_ff digital_binary_slicer_fb gr_correlate_access_code_tag_bb smartnet_deinterleave smartnet_crc
Voice Channel Decode freq_xlating_fir_filter_ccf rational_resampler_base_ccf quadrature_demod_cf fir_filter_fff multiply_const_ff gr_dsd wavfile_sink Graph connected to NULL Source/Sink when not active Don t have have stop/start top block to add & remove voice chan recorders
System View Website Capture Decode Process Store Record Upload Web Socket Push App GnuRadio Web Server
Web Side Nothing special NodeJS & NGINX for the Server MongoDB for the DB to store call info Audio stored in static MP4 files Socket.IO library provides Web Sockets for polling for new calls Bootstrap for a responsive UI
The Benefit Transparency - make an opaque system accessible Give citizens a better sense of how well things are working Give journalists better additional sources to work with Allow for fact checking after an event
Challenges Jurisdictions are moving to more advanced Trunking - P25 Phase II OP25 is working on / has support FirstNET? Encryption! Do Citizens have a right to monitor non-sensitive communication by public officials? Linux + GnuRadio + Custom Program + RT = Pain Tough tracking down problems, upgrading systems Codecs - transcoding is dumb, IMBE -> MP4
PublicRecord Advanced Emergency Radio Scanner & Repository Selected for Knight Foundation Prototype funding Builds on open source OpenMhz code Collaborating with news outlets in MA, FL and WA Delivering an initial barebone system and then working with journalists to build UX
Analytics & Metadata Lots of data besides the audio - Handset joining, IDs Is it possible to sort all the calls and figure out which are the Important ones? Which ones are to & from your local Engine Co? Speech to text?
Links Website: http://openmhz.com/ ios App: https://itunes.apple.com/us/app/scan-dc/ id875880855?mt=8 GnuRadio Program: https://github.com/robotastic/ smartnet-recorder Web Code: https://github.com/robotastic/smartnetplayer Email: luke@robotastic.com