Re: ASL to DMR Bridge...changing talkgroups


 

I think this deserves to be on the wiki!
It sounds like this is working reliably for everyone that's tried it, is that correct?

To sum up:

This is the script:

#!/bin/bash
 
# /*
#  * Copyright (C) 2018 N4IRR
#  *
#  * Permission to use, copy, modify, and/or distribute this software for any
#  * purpose with or without fee is hereby granted, provided that the above
#  * copyright notice and this permission notice appear in all copies.
#  *
#  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
#  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
#  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
#  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
#  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
#  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
#  * PERFORMANCE OF THIS SOFTWARE.
#  */
 
function tune() {
python - <<END
#!/usr/bin/env python
 
import sys
import socket
import struct
 
cmd = "txTg=$1".encode("utf-8")
_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
cmd = struct.pack("BB", 0x05, len(cmd))[0:2] + cmd
# Set the second value below to match the rxPort in the [AMBE_AUDIO] stanza of Analog_Bridge.ini
_sock.sendto(cmd, ('127.0.0.1', 31100))
_sock.close()
 
END
}
 
tune $1

question: is that tune $1 part of the script?

create the script here: /usr/local/sbin and name it tune.sh 
make the script executable: chmod +x tune.sh  

then this email tells you how to make it available for DTMF and Allmon:
OK,
Now we have a script to change TG "on the fly" Let's make it available to DTMF and Allmon.
First we need ASL to execute the script from within. There is more then one way to do this. I'll use the internal command.
Lets assume you placed the script in /usr/local/sbin and called it tune.sh
You can run the program from the Linux command prompt with /usr/local/sbin/tune.sh 1234 to tune to TG 1234

Let's add it to rpt.conf
To run a external script the ASL command is:
4321=cmd,/usr/local/sbin/tune.sh 1234 (This ASSUMES 4321 is not in use nor is 43 or 432) 
When a user on the node sends *4321 ASL will execute the script /usr/local/sbin/tune.sh with a parameter of  1234

So far so good? Now let's add it to Allmon2
in the allmon directory is a file, controlpanel.ini in that file as a example you will find:

labels[] = "Say Time of Day (local only) the TT way"
cmds[] = "rpt fun %node% *74"
 
Lets add a command. Copy and edit above:
labels[] = "Tune DMR to Talk Group 1234"
cmds[] = "rpt fun %node% *4321"

Poof! you have added a command to Allmon2 which will tell ASL to execute the script.
Clear as mud?

73, Steve N4IRS 

Is that everything needed? 

On Thu, Mar 7, 2019 at 12:07 AM Matt <ve3oy@...> wrote:

[Edited Message Follows]

I just copied the script you posted above ...
This is my script (changeTG.sh)

#!/bin/bash
 
# /*
#  * Copyright (C) 2018 N4IRR
#  *
#  * Permission to use, copy, modify, and/or distribute this software for any
#  * purpose with or without fee is hereby granted, provided that the above
#  * copyright notice and this permission notice appear in all copies.
#  *
#  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
#  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
#  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
#  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
#  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
#  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
#  * PERFORMANCE OF THIS SOFTWARE.
#  */
 
function tune() {
python - <<END
#!/usr/bin/env python
 
import sys
import socket
import struct
 
cmd = "txTg=$1"
_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
cmd = struct.pack("BB", 0x05, len(cmd))[0:2] + cmd
# Set the second value below to match the rxPort in the [AMBE_AUDIO] stanza of Analog_Bridge.ini
_sock.sendto(cmd, ('127.0.0.1', 31100))
_sock.close()
 
END
}
 
tune $1


====
After doing some more research (about Python) it would seem that this is a known problem.
[SNIP]
Python3 has several different 'string' types.
You are trying to combine a bytes string (basically an immutable character array) to a unicode string. 
[/SNIP]

I may have fixed the script by changing this one line:
cmd = "txTg=$1".encode("utf-8")

So far, it has not returned an error.
I can't test further until later tonight, but I am hoping this has fixed it.
I'll update later with any results.

====
A little more information ...
I am running "Asterisk 1.4.23-pre.hamvoip-V1.5.3-27-app_rpt-0.327-04/04/2018" which comes with Python 3.5.1

After reading more on this problem, it has been reported that the issue did not appear in Python 2.
I cannot confirm or deny the claim, but if anyone runs into this error - try the fix I've included above.

73 de Matt
VE3OY


Join main@DVSwitch.groups.io to automatically receive all group messages.