OP25 feature update

Status
Not open for further replies.

marklt1

Member
Feed Provider
Joined
Mar 5, 2005
Messages
53
Location
Streetsboro, OH
I am looking to convert my working traditional rx.py based configuration over to the new multi_rx.py JSON format on a Raspberry Pi 3B. I have looked at many examples by cannot fined anything close using a single dongle on a P25 Phase 1 system with raw UDP audio streamed to my PC. The below configuration has worked for years. I have attached my attempt of a JSON file although I am sure it has issues. Can some suggest what I may be missing?

Command line
./rx.py --args 'rtl' --gains 'lna:45' -S 256000 -f 800e6 -D cqpsk -n -g 100 -x 4.0 -l http:0.0.0.0:8080 -q 0 -o 25000 -T ./realtime.tsv -V -2 -w -W 10.1.1.3 -u 23180 -v 2 2> /var/log/scanner.log

realtime.tsv
"Sysname" "Control Channel List" "Offset" "NAC" "Modulation" "TGID Tags File" "Whitelist" "Blacklist" "Center Frequency"
"MARCS Cuyahoga " "774.78125,773.83125,774.28125,774.53125" "-25" "0x340" "CQPSK" "trs_6643.tsv" "" "trs_6643_bl.tsv" ""
 

Attachments

  • p25tune.json.txt
    1.9 KB · Views: 22

boatbod

Member
Joined
Mar 3, 2007
Messages
3,316
Location
Talbot Co, MD
I am looking to convert my working traditional rx.py based configuration over to the new multi_rx.py JSON format on a Raspberry Pi 3B. I have looked at many examples by cannot fined anything close using a single dongle on a P25 Phase 1 system with raw UDP audio streamed to my PC. The below configuration has worked for years. I have attached my attempt of a JSON file although I am sure it has issues. Can some suggest what I may be missing?

Command line
./rx.py --args 'rtl' --gains 'lna:45' -S 256000 -f 800e6 -D cqpsk -n -g 100 -x 4.0 -l http:0.0.0.0:8080 -q 0 -o 25000 -T ./realtime.tsv -V -2 -w -W 10.1.1.3 -u 23180 -v 2 2> /var/log/scanner.log

realtime.tsv
"Sysname" "Control Channel List" "Offset" "NAC" "Modulation" "TGID Tags File" "Whitelist" "Blacklist" "Center Frequency"
"MARCS Cuyahoga " "774.78125,773.83125,774.28125,774.53125" "-25" "0x340" "CQPSK" "trs_6643.tsv" "" "trs_6643_bl.tsv" ""
Try this. It's about as close to your original as I can make it. Local audio disabled, terminal set to http, RTL device set to tunable.
Do you really need a 25khz offset?
 

Attachments

  • p25tune.json.txt
    1.9 KB · Views: 67

marklt1

Member
Feed Provider
Joined
Mar 5, 2005
Messages
53
Location
Streetsboro, OH
Try this. It's about as close to your original as I can make it. Local audio disabled, terminal set to http, RTL device set to tunable.
Do you really need a 25khz offset?

Thanks SO MUCH , that actually go it to work. The 25khz offset was just something that I always had in my configuration. as long as I don't need it, I'll eliminate it.
Anyhow, its working now for Ohio MARCS P25. I attached a copy of the configuration for anyone else reading this that may be curious.
 

Attachments

  • p25digital.json.txt
    2 KB · Views: 38

marklt1

Member
Feed Provider
Joined
Mar 5, 2005
Messages
53
Location
Streetsboro, OH
Is there a possibility for UDP streaming of call data into a future multi_rx.py edition?
Currently, I am customizing trunking.py to send call data to a windows application where I can post-process, replay, and archive the calls.
From what I can tell, tk_p25.py takes the place of trunking.py

Most of the sending happens from this function below. I have attached a current working copy as an example
def send_data(self, datatosend):
mymessage = datatosend
byt = mymessage.encode()
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.connect(('10.1.1.3',25180))
sock.send(byt)

The types of data that I use are:
<NEW_CALL> Start of transmission​
<CURRENT_CALL> Existing call with UID updates​
<END_OF_TRANSMISSION>​
Emergency Button pressed​
Group Adds and Group Removes (I keep the forwarded calls in their original group folder, not the forwarded one)​
<CC_TIMEOUT> I use this to gauge the quality of the signal based on how many timeouts per block of time​

20:55:53.807<VOICE_GRANT><TGID>13611<UID>1892487<ENC>0<EMERG>0<END>
20:55:53.865<VOICE_GRANT><TGID>13611<UID>1892487<ENC>0<EMERG>0<END>
20:55:55.547<HEARTBEAT>
20:55:55.561<CLEARHOLD>
20:55:55.569<NEW_CALL><TGID>51591<UID>0<TAG>OSP Turnpike West<SYSTEM>All MARCS Cuyahoga Tower - Cuyahoga County (Ohio MARCS-IP: Multi-Agency Radio Communications) <ENC>0<END>
20:55:55.581<HEARTBEAT>
20:55:55.970<CURRENT_CALL><TGID>51591<UID>9004824<TAG>OSP Turnpike West<SYSTEM>All MARCS Cuyahoga Tower - Cuyahoga County (Ohio MARCS-IP: Multi-Agency Radio Communications) <ENC>0<END>
20:55:56.727<END_OF_TRANSMISSION>
20:55:56.760<HEARTBEAT>
 

Attachments

  • trunking.py.txt
    71.8 KB · Views: 12

boatbod

Member
Joined
Mar 3, 2007
Messages
3,316
Location
Talbot Co, MD
All the pcm audio passes through op25_audio::send_audio() in the c++ library code.
tk_p25.py does replace trunking.py for P25, but there are other trunking modules too (tk_smartnet, tk_trbo) for alternate protocols.
 

marklt1

Member
Feed Provider
Joined
Mar 5, 2005
Messages
53
Location
Streetsboro, OH
Actually, I was looking for the control channel data written to a UDP stream instead of a file .
Running at log level 5 gives me most of what I am interested in seeing. I coded that information in parallel to the corresponding log entry in trunking.py and streamed it out via UDP to my PC.
The ability to stream the control channel data would be awesome. Streaming the log data would be beneficial too.

08/04/20 15:18:52.610027 voice update: tg(56129), freq(855187500), slot(-), prio(3)
08/04/20 15:18:52.610196 do_metadata state=0: [56129] CPD 1st District
08/04/20 15:18:52.193314 duid15, tg(56132)
08/04/20 15:19:11.349247 new tgid=56723 ValleyView73 BrooklynHts23 CuyHts29 NwbrgHts51 prio 3
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,316
Location
Talbot Co, MD
Actually, I was looking for the control channel data written to a UDP stream instead of a file .
Running at log level 5 gives me most of what I am interested in seeing. I coded that information in parallel to the corresponding log entry in trunking.py and streamed it out via UDP to my PC.
The ability to stream the control channel data would be awesome. Streaming the log data would be beneficial too.

08/04/20 15:18:52.610027 voice update: tg(56129), freq(855187500), slot(-), prio(3)
08/04/20 15:18:52.610196 do_metadata state=0: [56129] CPD 1st District
08/04/20 15:18:52.193314 duid15, tg(56132)
08/04/20 15:19:11.349247 new tgid=56723 ValleyView73 BrooklynHts23 CuyHts29 NwbrgHts51 prio 3
By "control channel data" do you mean Tags and TGIDs or do you really mean the control channel data (P25 protocol)?
If it's tags you're after, look at the icemeta.py thread and/or the meta_update() call from trunking.
 

marklt1

Member
Feed Provider
Joined
Mar 5, 2005
Messages
53
Location
Streetsboro, OH
The Tag and TGIDs with icemeta.py and the meta_update() call from trunking are definitely the direction I want to go.
Is there any way of sending out the UID (srcaddr) updates through the Icecast? I know it could be more updates since each call could have several UIDs attached to it.
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,316
Location
Talbot Co, MD
The Tag and TGIDs with icemeta.py and the meta_update() call from trunking are definitely the direction I want to go.
Is there any way of sending out the UID (srcaddr) updates through the Icecast? I know it could be more updates since each call could have several UIDs attached to it.
Icecast only appears to allow one string of data to be sent. How you format it is application-dependent so you can build the string however you want and send it how ever often you want.
 

marklt1

Member
Feed Provider
Joined
Mar 5, 2005
Messages
53
Location
Streetsboro, OH
That ended up worked out well for me. You did a fantastic job on those modules.
As always, thanks again for all you have done on this project.
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,316
Location
Talbot Co, MD
That would be very cool..
One little wrinkle is that the gain values are a string that gets passed to the underlying driver. Devices like the RTL only require "LNA:xx" where 'xx' is the gain, but others such as the Airspy have multiple parameters in a string of the form "LNA:15,MIX:15,IF:15". It would be simple enough to pass the string down to the driver and have it set, but fancier controls such as sliders or increment/decrement buttons would require the app to have knowledge of the underlying hardware.
 

HankFrank

Member
Joined
Nov 6, 2009
Messages
122
Location
Central VA
Does anyone have a sample of a simple working config for a single RTL dongle on a Smartnet system? I kind of have it working... But it seems like the program won’t leave the control channel to tune to the voice frequency when one is active.
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,316
Location
Talbot Co, MD
Does anyone have a sample of a simple working config for a single RTL dongle on a Smartnet system? I kind of have it working... But it seems like the program won’t leave the control channel to tune to the voice frequency when one is active.

Sorry, this is not possible unless you are using sdr hardware that can capture the entire system spectrum at one time. The smartnet implementation requires one channel dedicated to monitor the control channel, and at least one more to handle voice traffic.
 

SFusion

Newbie
Joined
Jan 25, 2017
Messages
4
@boatbod - Thanks once again for all of your amazing work on this system!

Question: I live in an area that runs P25 II, but as a Simulcast with only 1 primary control channel. As far as I know, I have no need for multi-receive.

I just autostart rx.py via systemd on the RPI3 when it boots, and play it over the RPI3 3.5mm output. Nice and simple.

Is there any reason I should move to your improved/updated multi_rx version?

Are there under-the-hood improvements in multi_rx that now make it better than rx.py for a simple listening system like mine?

Thanks!
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,316
Location
Talbot Co, MD
@boatbod - Thanks once again for all of your amazing work on this system!

Question: I live in an area that runs P25 II, but as a Simulcast with only 1 primary control channel. As far as I know, I have no need for multi-receive.

I just autostart rx.py via systemd on the RPI3 when it boots, and play it over the RPI3 3.5mm output. Nice and simple.

Is there any reason I should move to your improved/updated multi_rx version?

Are there under-the-hood improvements in multi_rx that now make it better than rx.py for a simple listening system like mine?

Thanks!
Long ago a wise person once said "If it works, don't mess with it". In a nutshell, if you are happy with what you currently run, there is no need to change anything.

In the bigger picture, the main push for transitioning to multi_rx.py would be that I don't plan on making additional feature enhancements to rx.py. There may be some small fixes that come along here and there as a result of changes to shared code, but anything new will be written under the far more flexible architecture afforded by the multi receiver.
 

W4KRR

Member
Premium Subscriber
Joined
Apr 1, 2001
Messages
3,434
Location
Coconut Creek
Help!
I can successfully run OP25 on P25 digital systems. For P25, I use this command:

./rx.py --args "rtl" --nocrypt --gains "LNA:10,MIX:10,IF:8" -S 640000 -q -1 -T fltrunk.tsv -V -2 -U 2> stderr.2
Works fine.

However, I am trying to get it to run on a Motorola Smartnet system with no success. I found some instructions on the web that instructed to edit the "smartnet_example.json" file. However, I don't recall having to edit a .json file to run P25 successfully. I did edit the file with the proper control channel, but nothing happens when I use the suggested command.

I tried this:
./multi_rx.py --args "rtl" --nocrypt --gains "LNA:10,MIX:10,IF:8" -S 640000 -q -1 -T 1f25trunk.tsv -V -2 -U 2> stderr.2

But this doesn't work. Does Smartnet require a .tsv file? If so, how should it be set up?

*I created separate .tsv files depending on the trunked system I want to monitor.
 

maus92

Member
Premium Subscriber
Joined
Jun 23, 2004
Messages
7,975
Location
The OP
Help!
I can successfully run OP25 on P25 digital systems. For P25, I use this command:

./rx.py --args "rtl" --nocrypt --gains "LNA:10,MIX:10,IF:8" -S 640000 -q -1 -T fltrunk.tsv -V -2 -U 2> stderr.2
Works fine.

However, I am trying to get it to run on a Motorola Smartnet system with no success. I found some instructions on the web that instructed to edit the "smartnet_example.json" file. However, I don't recall having to edit a .json file to run P25 successfully. I did edit the file with the proper control channel, but nothing happens when I use the suggested command.

I tried this:
./multi_rx.py --args "rtl" --nocrypt --gains "LNA:10,MIX:10,IF:8" -S 640000 -q -1 -T 1f25trunk.tsv -V -2 -U 2> stderr.2

But this doesn't work. Does Smartnet require a .tsv file? If so, how should it be set up?

*I created separate .tsv files depending on the trunked system I want to monitor.
You need a properly edited json file to run multi_rx.py - it provides the configuration info for the program.
 
Status
Not open for further replies.
Top