Fs rpt.pl

From FreeSWITCH Wiki
Jump to: navigation, search

Contents

About

fs_rpt.pl will operate in a similar fashion to Asterisk's apt_rpt, originally written by Jim Dixon. This will let you build a repeater, a simple radio endpoint, or other operations as the situation dictates.

This was written in Perl specifically to encourage more people to modify the script to suit their needs, without requiring a compiler to be installed, and knowledge of how to compile programs to be possessed. It is released under the MPL license to encourage adoption into other projects.

Requirements

Optional

Installation and Configuration

Radio interconnect

You will need to make or buy a cable that is suitable to connect to a radio. A circuit that is suitable for many radios can be found at FT-897 TNC Interface. This schematic is easy to construct and only has 3 components. While the pinouts are for a Yaesu FT-897 amateur radio, it works for almost every radio device. If you were to take apart a family radio, you could easily wire this into the PTT button on the radio, and connect the speaker/microphone into your sound card. This circuit is known to work with a USB serial adapter using the pl2303 chipset on an eeepc. The entire circuit can be built for $10 out of very common components easily available at most electronics stores.

Conference Configuration

In order for DTMF to be acted upon by fs_rpt.pl we need to map all of the DTMF keys to the "event" option, so they are sent to Event Socket instead of being acted upon by mod_conference itself. To accomplish this we need to add a group to the <caller-controls> section of conference.conf.xml

 <group name=”radio”>
     <control action=”event” digits=”1″/>
     <control action=”event” digits=”2″/>
     <control action=”event” digits=”3″/>
     <control action=”event” digits=”4″/>
     <control action=”event” digits=”5″/>
     <control action=”event” digits=”6″/>
     <control action=”event” digits=”7″/>
     <control action=”event” digits=”8″/>
     <control action=”event” digits=”9″/>
     <control action=”event” digits=”0″/>
     <control action=”event” digits=”*”/>
     <control action=”event” digits=”#”/>
 </group>

You will also need to create a conference entry for this conference. I am only listing the important sections since most of this is particular to your configuration and preferences.

FreeSWITCH has a radio endpoint!

by trixter on Sep.03, 2009, under Radio, Telephony

I finished the initial version of my perl script that will link FreeSWITCH to a radio device. While I am primarily doing this with amateur radio in mind, you could use this to connect a FRS, GMRS, or other similar type of radio.

Using the FT-897 PTT control circuit, you can control PTT by connecting the various connectors to virtually any radio. Some will not be compatible, some will require hardware modification (removal of the mic/speaker and replacing them with headphone wires and connecting the PTT button to the serial port). I will not be discussing how to do that here. If you can’t figure that out you probably shouldn't be doing it.

In order to use the script, you must install FreeSWITCH. Once you have done that you have to configure a few things for this to work.

in autoload_configs/conference.conf.xml you must add to the “caller-controls” section:

   <group name=”radio”>
   <control action=”event” digits=”1″/>
   <control action=”event” digits=”2″/>
   <control action=”event” digits=”3″/>
   <control action=”event” digits=”4″/>
   <control action=”event” digits=”5″/>
   <control action=”event” digits=”6″/>
   <control action=”event” digits=”7″/>
   <control action=”event” digits=”8″/>
   <control action=”event” digits=”9″/>
   <control action=”event” digits=”0″/>
   <control action=”event” digits=”*”/>
   <control action=”event” digits=”#”/>
   </group>

You must also make a profile for the conference. The important thing is to set the caller-controls to the group you made in the previous step, in this example that is "radio".

 <profile name="radio">
     <param name"caller-controls" value="radio"/>
 </profile>

Dialplan Configuration

 <extension name=”radio_conference”>
     <condition field=”destination_number” expression=”^1337$”/>
     <condition field=”source” expression=”mod_portaudio” break=”never”>
         <action application=”answer”/>
         <action application=”sleep” data=”1000″/>
         <action application=”start_dtmf”/>
     </condition>
     <condition>
         <action application=”conference” data=”radio@radio”/>
     </condition>
 </extension>

This will run start_dtmf on the portaudio port so that when the radio receives DTMF tones, they can be decoded and acted upon by fs_rpt.pl. It will put all callers into a conference where they can communicate.

Script Configuration

There are a few different variables that you need to configure in the script itself. These variables control some of the functionality of the script as it interfaces with the radio. When you edit the script you will see the following:

Configure the event socket parameters. If you set the timeout too low, it will constantly try to reconnect, if you set it too high it wont notice that it lost its connection. 30 seconds is a good value and it should only be changed if you are experiencing some problem.

 my $password = "ClueCon";    # event socket password
 my $host     = "localhost";  # event socket host
 my $port     = 8021;         # event socket port
 my $timeout  = 30;           # seconds to expect a heartbeat or reconnect

Configure the serial port for PTT functionality.

 my $device   = undef;        # radio control device (/dev/ttyS0, COM1, etc)
 my $baud     = 9600;         # radio control device baud rate

Configure a courtesy tone, this is a tone played just before releasing the PTT button, so that people listening to your radio transmission know that you are finished transmitting. If its value is 'undef' then the tone is disabled.

 my $courtesy_tone = "tone_stream://%(150,150,500);%(150,0,400)"; # tone played before releasing PTT           
 #my $courtesy_tone = "/sounds/beep.wav"; # play a sound file
 #my $courtesy_tone = undef; # disable courtesy tone
 

Configure the conference information, use the extension you created in your dialplan and the conference name you created in the profile in the previous steps.

 my $confname = "radio";      # the name of the conference
 my $extension = "1337";      # this is the extension that portaudio will call to join

Configure your callsign if desired or required. This will use the morse.js script, which is required to be in the 'scripts' directory under your main FreeSWITCH install directory. If it is 'undef' then no callsign will be transmitted, which may violate some laws in some jurisdictions.

 my $callsign = undef;     # callsign for morse autoID
 my $callsign_interval = 600; # 10 minute intervals

Configure the path to Cepstral (or some other TTS engine). If you use another TTS engine you may need to edit the options that are passed to Cepstral. I do not use mod_cepstral since it is unlikely that this information is going to change frequently, so a sound file is generated once, and only updated if the file modification timestamp changes. You just make a file named "announcement.txt" and place the content in there that you want read. It will be read after your CWID.

 my $voice = "Allison";
 my $swift = "/opt/swift/bin/swift";
 my $filetime = 0;

Running

Start FreeSWITCH as normal, or reloadxml if it was already started to load the new settings. Launch fs_rpt.pl which will place a portaudio call into the conference.

Create an announcement.txt for any announcements that you want audibly read each time you do a morse code identification, delete this file to disable announcements when they are no longer relevant.

Have callers go into the conference to talk to people on the radio. It may be illegal to allow non-licensed operators into the conference with talk ability. If you need to allow non-licensed people listen it may be better to use the recording capabilities of mod_conference and have that data relayed to a shoutcast server so they can listen via that mechanism. At the very least they should be muted for the entire duration they are in the conference.