Running multiple instances of OP25

AB5ID

Member
Joined
Aug 6, 2007
Messages
261
Location
Lee's Summit, MO (Kansas City)
I'm considering adding a second dongle to my computer running OP25 and I'm having trouble finding the instructions to do this.
Is running 2 instances of OP25 and having both outputs feed the same headphone jack very difficult?
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,582
Location
Talbot Co, MD
I'm considering adding a second dongle to my computer running OP25 and I'm having trouble finding the instructions to do this.
Is running 2 instances of OP25 and having both outputs feed the same headphone jack very difficult?
With recent updates there's actually little need to run two instances because you can configure additional devices and output streams into one single application instance of multi_rx.py. There are various sample configurations included with the repo files. Assuming you are interested in P25 take a look at ~/op25/op25/gr-op25_repeater/apps/p25_example.json.

I'd be happy to guide you through the setup if you'd like. Please describe more about what you'd like to do, including link(s) to RRDB entry either in this thread or via PM.
 

AB5ID

Member
Joined
Aug 6, 2007
Messages
261
Location
Lee's Summit, MO (Kansas City)
With recent updates there's actually little need to run two instances because you can configure additional devices and output streams into one single application instance of multi_rx.py. There are various sample configurations included with the repo files. Assuming you are interested in P25 take a look at ~/op25/op25/gr-op25_repeater/apps/p25_example.json.

I'd be happy to guide you through the setup if you'd like. Please describe more about what you'd like to do, including link(s) to RRDB entry either in this thread or via PM.
Right now I'm monitoring these two sites:


With one dongle and a laptop running an older version of Skywave Linux (Ubuntu 16.04 LTS kernel 4.16.8-xanmod9)
My SDR dongle is a Nooelec NESDR SMArt v4.
A new P25 Phase 2 system became live a few months ago and a want to dedicate a new SDR just for it. Is there any benefit with having my second SDR dongle match the Nooelec NESDR SMArt v4 (I'm thinking about trying a RTL-SDR Blog V3 just to try something different)?

The second dongle would be for this site (which has very little traffic right now but traffic I want to hear as a priority):

I'll check out p25_example.json.
Thanks for any info!
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,582
Location
Talbot Co, MD
Physical sdr hardware can be the same or different... it really makes no difference to op25.

The first two RRDB entries list multiple CC freqs. Which one are you using?
For the second site (Lee Summit) I assume you want to treat it as a separate trunking system rather than it simply sharing TGIDs on the first system?
 

AB5ID

Member
Joined
Aug 6, 2007
Messages
261
Location
Lee's Summit, MO (Kansas City)
The first two RRDB entries list multiple CC freqs. Which one are you using?
For the second site (Lee Summit) I assume you want to treat it as a separate trunking system rather than it simply sharing TGIDs on the first system?
For the first two RRDB entries both are in my Trunk.tsv file on separate rows and OP25 alternates between the two entries in Trunk.tsv, currently Eastern Jackson County site is using 858.2125 Mhz and the Kansas City site is using 851.3250 Mhz.

I'm using two sites because even though the MARRS system is a large simulcast system covering Kansas City, many sites within the system only contain specific talkgroups. Here is what my Trunk.tsv file looks like.
88666

The new Lee's Summit site has its own TGIDs but shares some interop TGIDS within the MARRS System. The Lee's Summit site currently has very little traffic but the traffic that is there is what I want to listen to the most that is why I would give it a dedicated SDR dongle.
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,582
Location
Talbot Co, MD
For the first two RRDB entries both are in my Trunk.tsv file on separate rows and OP25 alternates between the two entries in Trunk.tsv, currently Eastern Jackson County site is using 858.2125 Mhz and the Kansas City site is using 851.3250 Mhz.

I'm using two sites because even though the MARRS system is a large simulcast system covering Kansas City, many sites within the system only contain specific talkgroups. Here is what my Trunk.tsv file looks like.
View attachment 88666

The new Lee's Summit site has its own TGIDs but shares some interop TGIDS within the MARRS System. The Lee's Summit site currently has very little traffic but the traffic that is there is what I want to listen to the most that is why I would give it a dedicated SDR dongle.
Ok that explains it thank you.

Really you want to monitor 3 systems and from site data it seems there is approximately 9Mhz spread from lowest to highest freq. With the newer multi_rx variant of op25 that means you either need 3 RTL devices (one for each site) or one high-end SDR such as an Airspy R2 to grab all the spectrum in one go. The disadvantage of the latter option is that it is (a) more expensive and (b) will eat up significant CPU with the USB data transfer.

Options:
i. Stick with the existing rx.py version of op25 and run two instances of the application with 2 RTL dongles and utilize the capability for op25 to jump between two control channels. Advantage: less dongles required. Disadvantage: you miss out on traffic with the switching back and forth.

ii. Convert over to multi_rx.py version of op25 and run one instance of the application with 3 trunking systems defined and 3 RTL dongles. Advantage: no traffic lost in switching. Disadvantage: needs a 3rd RTL dongle.

Either option can be configured to output audio to the same physical sound card device. It's going to get a bit confusing if you have multiple conversations going on at the same time, but as long as your brain can sort it out it will work.
 

mrwright8t8

Member
Joined
Aug 21, 2017
Messages
18
hello boadbod im trying to setup a phase 1(va state) and phase 2 (bedfordva) with two rtls output to two sound cards but im having alittle trouble understanding how im a beginner.i have rx.py working great btw awesome work
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,582
Location
Talbot Co, MD
hello boadbod im trying to setup a phase 1(va state) and phase 2 (bedfordva) with two rtls output to two sound cards but im having alittle trouble understanding how im a beginner.i have rx.py working great btw awesome work
So you can either run two completely separate instances of rx.py (with unique port numbers) or configure a single instance of multi_rx.py to use the two devices and two trunking systems. Either will work equally but IMO the multi_rx is easier to manage because the config and terminal is common to both.
 

mrwright8t8

Member
Joined
Aug 21, 2017
Messages
18
So you can either run two completely separate instances of rx.py (with unique port numbers) or configure a single instance of multi_rx.py to use the two devices and two trunking systems. Either will work equally but IMO the multi_rx is easier to manage because the config and terminal is common to both.
could you give a better example of the cfg.json file. the one example p25 has confused me im a idiot when it comes changing things around, i dont need to stream either.thanks for the replay
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,582
Location
Talbot Co, MD
Sure :)
The attached zip contains a 2 x RTL, 2 x P25 System config for local audio. You should modify the audio device names (both currently set to "pulse") so that they point at your two sound cards.

It is equally possible to define two (or more) streams with different blacklist/whitelist against the same P25 system. In that case the control channel duty will be pushed to which ever channel is idle.

Note: use the left/right arrow keys to cycle between channels/systems in the terminal screen.
 

Attachments

mrwright8t8

Member
Joined
Aug 21, 2017
Messages
18
im doing alittle testing before my sound card #2arrives and im getting
segmentation fault ( core dumped)
I've uploaded the stderr.2,
 

Attachments

boatbod

Member
Joined
Mar 3, 2007
Messages
2,582
Location
Talbot Co, MD
im doing alittle testing before my sound card #2arrives and im getting
segmentation fault ( core dumped)
I've uploaded the stderr.2,
Change the audio device from "pulse" to "default"
(For reasons that appear to be related to python c_types structure packing, the pulse audio crashes on some machines but not others)
 

mrwright8t8

Member
Joined
Aug 21, 2017
Messages
18
Change the audio device from "pulse" to "default"
(For reasons that appear to be related to python c_types structure packing, the pulse audio crashes on some machines but not others)
well that did the trick but now i can't find the control channel like i can in rx.py with the -d 1400 added.just trying to figure it out myself is giving me a headache lol
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,582
Location
Talbot Co, MD
well that did the trick but now i can't find the control channel like i can in rx.py with the -d 1400 added.just trying to figure it out myself is giving me a headache lol
I would observe that "-d 1400" is an excessive value for fine tune correction; if it's more than +/-350 or so, you should be adjusting ppm instead.
Luckily in multi_rx there is no more fine_tune :) All corrections are carried out using fractional ppm...
 

mrwright8t8

Member
Joined
Aug 21, 2017
Messages
18
thanks i got it working. now i need to figure out how to get sound out the headphone jack for one and usb speakers for the other.
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,582
Location
Talbot Co, MD
thanks i got it working. now i need to figure out how to get sound out the headphone jack for one and usb speakers for the other.
You need to know what ALSA device names have been assigned. Once you have that you use those device names in place of "default" in the config file. Try running "aplay -l" for a complete list.

You should be able to use something of the sort: "plughw:0,0" (card 0), "plughw:1,0" (card 1)

 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,582
Location
Talbot Co, MD
doent work even tried just hw: instead of plughw. only default works
"hw:x,y" can be problematic because it relies on the underlying audio card natively supporting 8khz sample rate, which I learned the hard way that not all do. "plughw:x,y" is usually more tolerant because it includes a rate-adaption module allowing an input arbitrary sample rate to work with whatever the card supports.

First step for you should be figuring out the proper hardware addreses, which you can either do with "aplay -l" and inspection of the /proc/asound hierachy.
Code:
gnorbury@yoga2 ~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC298 Analog [ALC298 Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 10: HDMI 4 [HDMI 4]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
Code:
gnorbury@yoga2 ~ $ cat /proc/asound/cards
 0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xa1328000 irq 153
Code:
gnorbury@yoga2 ~ $ ls /proc/asound/card0
codec#0  eld#2.0  eld#2.2  eld#2.4  eld#2.6  eld#2.8  pcm0c  pcm10p  pcm7p  pcm9p
codec#2  eld#2.1  eld#2.3  eld#2.5  eld#2.7  id       pcm0p  pcm3p   pcm8p
In this example I have just the one card, so all ALSA devices will be "hw:0,x".
Playback device numbers: 0, 3, 7, 8, 9, 10
Capture device number: 0

If you had multiple cards you would have more than one "cardX" entry.
If you have a small .wav file you can test the output using "aplay -D devname filename.wav"
 

mrwright8t8

Member
Joined
Aug 21, 2017
Messages
18
well aplay -D plughw:0,0 file.wave plays but not plughw:1,0 which is what aplay -l shows the usb.

ls /proc/asound/card0 shows
codec#0 id pcm0c pcm0p

ls /proc/asound/card1 shows
id pcm0p stream0 usbbus usbid usbmixer
 
Top