• Stars
    star
    862
  • Rank 52,908 (Top 2 %)
  • Language
    C++
  • License
    GNU General Publi...
  • Created almost 10 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Records calls from a Trunked Radio System (P25 & SmartNet)

Trunk Recorder - v4.5.0

Sponsors

Do you find Trunk Recorder and OpenMHz useful? Become a Sponsor to help support continued development and operation! Thank you to everyone who has contributed!

Overview

Need help? Got something working? Share it!

Discord Server - and don't forget the Wiki

Trunk Recorder is able to record the calls on trunked and conventional radio systems. It uses 1 or more Software Defined Radios (SDRs) to do this. The SDRs capture large swathes of RF and then use software to process what was received. GNU Radio is used to do this processing because it provides lots of convenient RF blocks that can be pieced together to allow for complex RF processing. The libraries from the amazing OP25 project are used for a lot of the P25 functionality. Multiple radio systems can be recorded at the same time.

Trunk Recorder currently supports the following:

  • Trunked P25 & SmartNet Systems
  • Conventional P25 & analog systems, where each group has a dedicated RF channel
  • P25 Phase 1, P25 Phase 2 & Analog voice channels

Supported platforms:

Ubuntu (18.04, 20.04, 21.04, 22.04); Raspberry Pi (Raspberry OS/Raspbian & Ubuntu 21.04, 22.04); Arch Linux (2021.09.20); Debian (9.x); macOS

GNU Radio 3.7 - 3.10

...and SDRs:

RTL-SDR dongles; HackRF; Ettus USRP B200, B210, B205; BladeRF; Airspy


Version Notes

V4.0

  • The executable generated has changed from recorder to trunk-recorder to help differentiate it from other applications that maybe installed.
  • A new method is used to detect the end of call. Instead of waiting for a timeout after the last trunking message is received, the voice channel is monitored for messages announcing the end of a transmission. Each transmission is stored in a separate file and then merged together after a talkgroup stops using a frequency.
  • The format for audio filenames has changed slightly. It is now: [ Talkgroup ID ]_[ Unix Timestamp ]-[ Frequency ]-call_[ Call Counter ].wav

*See past notes in the ChangeLog. If you upgrade and things are not working, check here


Install

Docker Ubuntu RaspberryOS Arch Linux Homebrew MacPorts
Linux πŸ“„ πŸ“„ πŸ“„
Raspberry Pi πŸ“„ πŸ“„ πŸ“„ 🎬
MacOS πŸ“„ πŸ“„

Setup

Playback & Sharing

By default, Trunk Recorder just dumps a lot of recorded files into a directory. Here are a couple of options to make it easier to browse through recordings and share them on the Internet.

Plugins

  • MQTT Status - Publishes the current status of a Trunk Recorder instance over MQTT
  • MQTT Statistics - Publishes statistics about a Trunk Recorder instance over MQTT
  • Decode rates logger - Logs trunking control channel decode rates to a CSV file, and includes a PHP file that outputs an SVG graph

Troubleshooting

If are having trouble, check out the FAQ and/or ask a question on the Discord Server


How Trunking Works

For those not familiar, trunking systems allow a large number of user groups to share a limited number of radio frequencies by temporarily, dynamically assigning radio frequencies to talkgroups (channels) on-demand. It is understood that most user groups actually use the radio very sporadically and don't need a dedicated frequency.

Most trunking system types (such as SmartNet and P25) set aside one of the radio frequencies as a "control channel" that manages and broadcasts radio frequency assignments. When someone presses the Push to Talk button on their radio, the radio sends a message to the system which then assigns a voice frequency and broadcasts a Channel Grant message about it on the control channel. This lets the radio know what frequency to transmit on and tells other radios set to the same talkgroup to listen.

In order to follow all of the transmissions, Trunk Recorder constantly listens to and decodes the control channel. When a frequency is granted to a talkgroup, Trunk Recorder creates a monitoring process which decodes the portion of the radio spectrum for that frequency from the SDR that is already pulling it in.

No message is transmitted on the control channel when a conversation on a talkgroup is over. The monitoring process keeps track of transmissions and if there has been no activity for a specified period, it ends the recording.

More Repositories

1

ble-ancs

A NodeJS library for Apple Notification Center Service over BLE
JavaScript
78
star
2

smartnet-recorder

This project is no longer active, checkout Trunk Recorder instead
C++
42
star
3

smartnet-scanner

GNURadio based scanner for SmartNet II Digital radio systems.
C++
26
star
4

p25-decoder

CMake
24
star
5

smartnet-player

A NodeJS based website that allows for the playback of captured SmartNet II Radio Transmissions
JavaScript
22
star
6

smartband

C
20
star
7

trunk-recorder-status-server

Lets you monitor the status of recordings
HTML
14
star
8

pi-led

Connect LED Message Boards to your Raspberry PI using the SPI bus
C++
13
star
9

trunk-recorder-docker

a version of trunk-recorder that is designed for docker
11
star
10

SPI-LED-Print

Prints to an LED Matrix using SPI. Designed to work on the Raspberry Pi
C
7
star
11

sdr

My exerpiments with SDR
C++
6
star
12

KMLWidget

KML Widget for the ESRI Flex Viewer
ActionScript
5
star
13

macropad-tic-tac-toe

Tic Tac Toe on the Adafruit MacroPad
Python
4
star
14

trunk-recorder-configs

Example config.json files for Trunk Recorder
4
star
15

pi-place

Uses socket.io to create a publically changable message board
JavaScript
4
star
16

trunk-recorder-mqtt-status

Trunk Recorder Plugin that sends current status over MQTT
CMake
3
star
17

CircuitPython_UsefulSensors_PersonDetector

Python
3
star
18

docker-gnuradio

Dockerfile
3
star
19

trunk-recorder-mqtt-statistics

Publish status using MQTT
CMake
3
star
20

documents

In progress writing
2
star
21

trunk-recorder-plugin

Example of a plugin for Trunk Recorder
CMake
2
star
22

ei-spresense-bicycle

C++
2
star
23

gr-smartnet

Python
2
star
24

DSD-P25-Samples

Samples for testing DSD
2
star
25

Local-Spending

A great way to see how federal money is being spent locally
2
star
26

trunk-recorder-docker-gr3.8

A docker container for building GR3.8 and Trunk Recorder
Dockerfile
2
star
27

led-dump1090

displays stuff on a LED matrix
C
2
star
28

CircuitPython-Face-Pong

Play Pong using your Face!
Python
2
star
29

infinite-doodles

Use Sketch-RNN to make ML generated doodles for Line-Us to draw
JavaScript
2
star
30

LED-Print

A Linux Driver for the Sure Electronics DE-DD22111
C
1
star
31

trunk-site

JavaScript
1
star
32

trunk-server

1
star
33

Recipe-Schema

A Wordpress plugin for Recipes
PHP
1
star