SVX-Link Hotspot Shari SA818

Ein Beispiel eines SVX-Link Hotspots ist der Shari SA818

                                 

Der Shari SA818 kann online bei den bekannten Seiten wie Amazon oder Aliexpress bestellt werden. Die Preise variieren von Tag zu Tag betragen aber unter 100 Euro. Es gibt aber auch Funkamateure, welche die Sharis für einen konfigurieren, damit er gleich betriebsbereit ist. Am besten fragt Ihr einfach mal nach. Man kann sich so viel Mühe ersparen.

Nebst dem Shari SA818 wird ein Raspberry Pi benötigt. Es genügt das Raspberry Pi Model 2 b oder 3 b. Auf die Micro SD-Karte ist die SVX-Link Software zu installieren. Der Shari SA818 selber konfiguriert man direkt über den Raspberry Pi, indem man ihn mit den beiden USB-Steckern direkt mit dem Raspberry Pi verbindet. Er kann auch gleich so betrieben werden. Für den Betrieb genügt aber auch, dass der USB-Stecker der Soundkarte mit dem Raspberry Pi verbunden wird. Für das Programmieren des Shari müssen aber beide USB-Stecker mit dem Raspberry Pi verbunden werden.

Der Shari SA818 kriegt den Strom via USB direkt vom Raspberry Pi und braucht selber weder einen eigenen Stromzugang noch eine eigene Internetanbindung. Er übernimmt alles vom Raspberry Pi.

Die Modulplatine besitzt einen nicht bestückten Jumperblock. Ergänzt man den und brückt diesen Jumper, verringert sich die Sendeleistung von 1W auf dann nur 0.5W. Leider lässt sich das SA818 nicht per Software auf kleinere Leistung umschalten, das ist nur durch diese zusätzliche Brücke möglich.

Sollte es zu Brummproblemen kommen, ist in 95% aller Fälle das Problem einer fehlenden Masseverbindung in der Spannungsversorgung des Pi die Ursache, denn dann kommt es zu Netzbrummen in Kombination mit der Soundkarte. HF-Einstreuung ist bei diesem Hotspot eher seltener die Ursache. Hier also mal einfach mit verschiedenen Netzteilen experimentieren und wenn man sich nicht sicher ist, einfach mal einen Akku-Powerpack anstatt eines Netzteils verwenden. Es wird ca. 5,1V und mind. 2,5A für den Raspberry Pi (bzw. 3A für den Pi4) benötigt. Ist das Brummen dann weg, liegt es eindeutig an der Spannungsversorgung bzw. deren fehlender oder unzureichender Masseverbindung.

 

 

Konfiguration der für Svx-Link benötigten Dateien

Musterdateien zum Anpassen und auf den Raspberry Pi kopieren gibt es im Download auf https://fm.dstaraustria.at im Menüpunkt «FM Österreich» «SVXLink Austria»  «Download» oder direkt unter https://www.mycloud.ch/s/S00ADAF97F6CECCF801F0B5ACDDEF71423D6A5E5B9C  Passwort ist
svx oe8vik .

Zum Bearbeiten und kopieren empfehle ich die Gratis-Software WinSCP. Diese gibt es unter https://winscp.net/eng/download.php .

Die farbig markierten Stellen müssen mit den persönlichen Daten angepasst werden

svxlink.conf (/etc/svxlink/svxlink.conf)

[GLOBAL]
LOGIC_CORE_PATH = /usr/lib/arm-linux-gnueabihf/svxlink
LOGICS = SimplexLogic,ReflectorLogic
CFG_DIR = svxlink.d
TIMESTAMP_FORMAT = “%c”
CARD_SAMPLE_RATE = 48000
CARD_CHANNELS = 1
LINKS = LinkToReflector

 

[SimplexLogic]
TYPE = Simplex
RX = Rx1
TX = Tx1
MODULES = ModuleHelp,ModuleParrot,ModuleEchoLink
CALLSIGN = OExxx
EVENT_HANDLER = /usr/share/svxlink/events.tcl
DEFAULT_LANG = de_DE
MACROS = Macros
FX_GAIN_NORMAL = 0
FX_GAIN_LOW = -12
MUTE_RX_ON_TX = 1
MUTE_TX_ON_RX = 1
OPEN_ON_SQL=500
DTMF_CTRL_PTY = /tmp/dtmf_svx

[ReflectorLogic]
TYPE = ReflectorV2
HOSTS = oe9xvi.dyndns.org:5300
CALLSIGN = “OExxx-HS”
AUTH_KEY = “Passwort”
DEFAULT_TG = 2329
MONITOR_TGS = 232,2321,2322,2323,2324,2325,2326,2327,2328,2329,232951,23277
TG_SELECT_TIMEOUT = 60
ANNOUNCE_REMOTE_MIN_INTERVAL = 300
EVENT_HANDLER = /usr/share/svxlink/events.tcl
NODE_INFO_FILE = /etc/svxlink/node_info.json
MUTE_FIRST_TX_LOC = 0MUTE_FIRST_TX_REM = 0
TMP_MONITOR_TIMEOUT = 6000
QSY_PENDING_TIMEOUT = 15
DEFAULT_LANG = de_DE
VERBOSE = 0
TX_ON_DELAY=15        # Verzögerung der Übertragung

[LinkToReflector]

CONNECT_LOGICS=SimplexLogic:9:,ReflectorLogic
DEFAULT_ACTIVE=1
OPTIONS = DEFAULT_CONNECT,NO_DISCONNECT
TIMEOUT=120

[Macros]
1 = EchoLink:9999#
9 = Parrot:0123456789#
03400 = EchoLink:9999#

[QsoRecorder]
REC_DIR = /var/spool/svxlink/qso_recorder
MAX_TIME = 3600
SOFT_TIME = 300
MAX_DIRSIZE = 1024

[Voter]
TYPE = Voter
RECEIVERS = Rx1,Rx2,Rx3
VOTING_DELAY = 200
BUFFER_LENGTH = 0

 

[MultiTx]
TYPE = Multi
TRANSMITTERS = Tx1,Tx2,Tx3

[NetRx]
TYPE = Net
HOST = remote.rx.host
TCP_PORT = 5210
AUTH_KEY = “Change this key now!”
CODEC = S16

[NetTx]
TYPE = Net
HOST = remote.tx.host
TCP_PORT = 5210
AUTH_KEY = “Change this key now!”
CODEC = S16

[Rx1]
TYPE = Local
AUDIO_DEV = alsa:plughw:0
AUDIO_CHANNEL = 0
LIMITER_THRESH = -6
SQL_DET = HIDRAW
SQL_START_DELAY = 50
HID_DEVICE = /dev/cm108gpio
HID_SQL_PIN = VOL_DN
SIGLEV_DET = TONE
SIGLEV_SLOPE = 1
SIGLEV_OFFSET = 0
SQL_SIGLEV_OPEN_THRESH = 30
SQL_SIGLEV_CLOSE_THRESH = 10
DEEMPHASIS = 1
PEAK_METER = 1
DTMF_DEC_TYPE = INTERNAL
DTMF_MUTING = 1
DTMF_HANGTIME = 40
DTMF_SERIAL = /dev/ttyS0
1750_MUTING = 1

[WbRx1]

[Tx1]
TYPE = Local
TX_ID = T
AUDIO_DEV = alsa:plughw:0
AUDIO_CHANNEL = 0
LIMITER_THRESH = -6
PTT_TYPE = Hidraw
PTT_PORT = /dev/ttyS0
PTT_PIN = DTRRTS
HID_DEVICE = /dev/cm108gpio
HID_PTT_PIN = GPIO3
TIMEOUT = 30000
TX_DELAY = 700
PREEMPHASIS = 1
DTMF_TONE_LENGTH = 100
DTMF_TONE_SPACING = 50
DTMF_DIGIT_PWR = -15

 

[LocationInfo]
APRS_SERVER_LIST = euro.aprs2.net:14580
STATUS_SERVER_LIST = aprs.echolink.org:5199
LON_POSITION = xx.xx.xxxE
LAT_POSITION = xx.xx.xxxN
CALLSIGN = EL-OExxxx
FREQUENCY = 43x.xxx
PATH = WIDE1-1
BEACON_INTERVAL = 10
COMMENT = SvxLink by SM0SVX (www.svxlink.org)

 

 

node_info.json (/etc/svxlink/ node_info.json)

{

    “Location”: “Ort”,
                                               “Locator”: “JNxxxx”,
                                               “LAT”: “xx.xxxxx”,
                                               “LONG”: “xx.xxxxx”,
                                               “Location”: “Ort”,
                                               “TXFREQ”: “43x.xxx”,
                                               “RXFREQ”: “43x.xxx”,
                                               “SysOp”: “OExxxx  Name”,
                                               “Echolink”: “xxxxx”,
                                               “CTCSS”: “88,5 Hz”,
                                               “Verbund”: “xxxxx”,
                                               “nodeLocation”: “Ort Land”,
    “hidden”: false,
    “Sysop”: “OExxxx Name”,
    “qth”: [
        {
            “name”: “Ort Land”,
            “pos”: {
                “lat”: “xx.xxxxx”,
                “long”: “xx.xxxxx”,
                “loc”: “JNxxxx”
            },
            “rx”: {
                “K”: {
                    “name”: “SvxLink Austria”,
                    “freq”: 43x.xxx,
                    “sqlType”: “”
                }
            },
            “tx”: {
                “K”: {
                    “name”: “”,
                    “freq”: 4xx.x,
                    “pwr”: “500mW”
                }
            }
        }
    ]

}

 

ModuleEchoLink.conf (/etc/svxlink/svxlink.d/ModuleEchoLink.conf)

[ModuleEchoLink]
NAME=EchoLink
ID=2
TIMEOUT=60
SERVERS=servers.echolink.org
CALLSIGN=OExxxx-L
PASSWORD=Passwort
SYSOPNAME=Name
LOCATION=[Svx] Ort
MAX_QSOS=10
MAX_CONNECTIONS=11
LINK_IDLE_TIMEOUT=7200
DESCRIPTION=”You have connected to a SvxLink node,\n”
                                                   “a voice services system for Linux with EchoLink\n”
                                                   “support.\n”
                                                   “Check out http://svxlink.sf.net/ for more info\n”
                                                   “\n”
                                                   “QTH:     My_QTH Ort JNxxxx\n”
                                                   “QRG:     Simplex link on 43x.xxx MHz\n”
                                                   “CTCSS:   My_CTCSS_is 88,5Hz/n”
                                                   “Trx:     My_transceiver Shari HS\n”
                                                   “Antenna: Antenne\n”

 

 

config.inc.php (/var/www/html/include/config.inc.php)

<?php
//Access to the Webserver for editing the config files
define(“PHP_AUTH_USER”, “Benutzername Raspberry”);
define(“PHP_AUTH_PW”, “Passwort Raspberry”);

// header lines for information
define(“HEADER_CAT”,”FM-Repeater”);
define(“HEADER_QTH”,”null”);
define(“HEADER_QRG”,”null”);
define(“HEADER_SYSOP”,””);
define(“FMNETWORK_EXTRA”,””);
define(“EL_NODE_NR”,”null”);
define(“FULLACCESS_OUTSIDE”, 0);
define(“ADD_BUTTONS”, 1);

///Variables for the webpages
define(“MODULE_PATH”, “”);
define(“LOGIC_CORE_PATH”, “”);
define(“CFG_DIR”, “”);
define(“TIMESTAMP_FORMAT”, “”);
define(“TIME_FORMAT”, “”);
define(“CARD_SAMPLE_RATE”, “”);
define(“CARD_CHANNELS”, “”)
define(“LOCATION_INFO”, “”);
define(“TYPE”, “”);
define(“RX”, “”);
define(“TX”, “”);
define(“MODULES”, “”);
define(“SHORT_IDENT_INTERVAL”, “”);
define(“LONG_IDENT_INTERVAL”, “”);
define(“IDENT_ONLY_AFTER_TX”, “”);
define(“EXEC_CMD_ON_SQL_CLOSE”, “”);
define(“EVENT_HANDLER”, “”);
define(“RGR_SOUND_DELAY”, “”);
define(“RGR_SOUND_ALWAYS”, “”);
define(“TX_CTCSS”, “”);
define(“MACROS”, “”);
define(“ACTIVATE_MODULE_ON_LONG_CMD”, “”);
define(“QSO_RECORDER”, “”);
define(“ONLINE_CMD”, “”);
define(“ONLINE”, “”);
define(“MUTE_RX_ON_TX”, “”);
define(“MUTE_TX_ON_RX”, “”);
define(“STATE_PTY”, “”);
define(“CTCSS_TO_TG”, “”);
define(“CTCSS_TO_TG_DELAY”, “”);
define(“DNS_DOMAIN”, “”);
define(“HOST_PORT”, “”);
define(“HOST_PRIO”, “”);
define(“HOST_PRIO_INC”, “”);
define(“HOST_WEIGHT”, “”);
define(“JITTER_BUFFER_DELAY”, “”);
define(“DEFAULT_TG”, “”);
define(“MONITOR_TGS”, “”);
define(“TG_SELECT_TIMEOUT”, “”);
define(“TG_SELECT_INHIBIT_TIMEOUT”, “”);
define(“ANNOUNCE_REMOTE_MIN_INTERVAL”, “”);
define(“MUTE_FIRST_TX_LOC”, “”);
define(“MUTE_FIRST_TX_REM”, “”);
define(“TMP_MONITOR_TIMEOUT”, “”);
define(“UDP_HEARTBEAT_INTERVAL”, “”);
define(“QSY_PENDING_TIMEOUT”, “”);
define(“VERBOSE”, “”);
define(“CONNECT_LOGICS”, “”);
define(“DEFAULT_ACTIVE”, “”);
define(“TIMEOUT”, “”);
define(“ACTIVATE_ON_ACTIVITY”, “”);
define(“REC_DIR”, “”);
define(“MIN_TIME”, “”);
define(“MAX_TIME”, “”);
define(“SOFT_TIME”, “”);
define(“MAX_DIRSIZE”, “”);
define(“QSO_TIMEOUT”, “”);
define(“ENCODER_CMD”, “”);
define(“RECEIVERS”, “”);
define(“VOTING_DELAY”, “”);
define(“BUFFER_LENGTH”, “”);
define(“REVOTE_INTERVAL”, “”);
define(“HYSTERESIS”, “”);
define(“SQL_CLOSE_REVOTE_DELAY”, “”);
define(“RX_SWITCH_DELAY”, “”);
define(“COMMAND_PTY”, “”);
define(“TRANSMITTERS”, “”);
define(“HOST”, “”);
define(“TCP_PORT”, “”);
define(“LOG_DISCONNECTS_ONCE”, “”);
define(“CODEC”, “”);
define(“SPEEX_ENC_FRAMES_PER_PACKET”, “”);
define(“SPEEX_ENC_QUALITY”, “”);
define(“SPEEX_ENC_BITRATE”, “”);
define(“SPEEX_ENC_COMPLEXITY”, “”);
define(“SPEEX_ENC_VBR”, “”);
define(“SPEEX_ENC_VBR_QUALITY”, “”);
define(“SPEEX_ENC_ABR”, “”);
define(“SPEEX_DEC_ENHANCER”, “”);
define(“OPUS_ENC_FRAME_SIZE”, “”);
define(“OPUS_ENC_COMPLEXITY”, “”);
define(“OPUS_ENC_BITRATE”, “”);
define(“OPUS_ENC_VBR”, “”);
define(“TX_ID”, “”);
define(“AUDIO_DEV”, “”);
define(“AUDIO_DEV_KEEP_OPEN”, “”);
define(“LIMITER_THRESH”, “”);
define(“PTT_TYPE”, “”);
define(“PTT_PORT”, “”);
define(“PTT_PIN”, “”);
define(“HID_PTT_PIN”, “”);
define(“SERIAL_SET_PINS”, “”);
define(“PTT_GPIOD_CHIP”, “”);
define(“PTT_GPIOD_LINE”, “”);
define(“PTT_HANGTIME”, “”);
define(“CTCSS_LEVEL”, “”);
define(“DTMF_TONE_LENGTH”, “”);
define(“DTMF_TONE_SPACING”, “”);
define(“DTMF_DIGIT_PWR”, “”);
define(“MASTER_GAIN”, “”);
define(“OB_AFSK_ENABLE”, “”);
define(“OB_AFSK_VOICE_GAIN”, “”);
define(“OB_AFSK_LEVEL”, “”);
define(“OB_AFSK_TX_DELAY”, “”);
define(“IB_AFSK_ENABLE”, “”);
define(“IB_AFSK_LEVEL”, “”);
define(“IB_AFSK_TX_DELAY”, “”);
define(“SQL_DET”, “”);
define(“SQL_START_DELAY”, “”);
define(“SQL_HANGTIME”, “”);
define(“SQL_EXTENDED_HANGTIME”, “”);
define(“SQL_EXTENDED_HANGTIME_THRESH”, “”);
define(“SQL_TIMEOUT”, “”);
define(“VOX_FILTER_DEPTH”, “”);
define(“VOX_THRESH”, “”);
define(“CTCSS_MODE”, “”);
define(“CTCSS_SNR_OFFSET”, “”);
define(“CTCSS_SNR_OFFSETS”, “”);
define(“CTCSS_OPEN_THRESH”, “”);
define(“CTCSS_CLOSE_THRESH”, “”);
define(“CTCSS_BPF_LOW”, “”);
define(“CTCSS_BPF_HIGH”, “”);
define(“CTCSS_EMIT_TONE_DETECTED”, “”);
define(“SERIAL_PORT”, “”);
define(“SERIAL_PIN”, “”);
define(“EVDEV_DEVNAME”, “”);
define(“EVDEV_OPEN”, “”);
define(“EVDEV_CLOSE”, “”);
define(“GPIO_PATH”, “”);
define(“GPIO_SQL_PIN”, “”);
define(“SQL_GPIOD_CHIP”, “”);
define(“SQL_GPIOD_LINE”, “”);
define(“SQL_GPIOD_BIAS”, “”);
define(“PTY_PATH”, “”);
define(“HID_SQL_PIN”, “”);
define(“SIGLEV_DET”, “”);
define(“SIGLEV_SLOPE”, “”);
define(“SIGLEV_OFFSET”, “”);
define(“SIGLEV_BOGUS_THRESH”, “”);
define(“TONE_SIGLEV_MAP”, “”);
define(“SQL_SIGLEV_OPEN_THRESH”, “”);
define(“SQL_SIGLEV_CLOSE_THRESH”, “”);
define(“DEEMPHASIS”, “”);
define(“SQL_TAIL_ELIM”, “”);
define(“PREAMP”, “”);
define(“PEAK_METER”, “”);
define(“DTMF_DEC_TYPE”, “”);
define(“DTMF_MUTING”, “”);
define(“DTMF_HANGTIME”, “”);
define(“DTMF_SERIAL”, “”);
define(“DTMF_PTY”, “”);
define(“DTMF_MAX_FWD_TWIST”, “”);
define(“DTMF_MAX_REV_TWIST”, “”);
define(“1750_MUTING”, “”);
define(“SEL5_DEC_TYPE”, “”);
define(“SEL5_TYPE”, “”);
define(“LADSPA_PLUGINS”, “”)
define(“FQ”, “”);
define(“MODULATION”, “”);
define(“WBRX”, “”);
define(“DEV_MATCH”, “”);
define(“PORT”, “”);
define(“CENTER_FQ”, “”);
define(“FQ_CORR”, “”);
define(“GAIN”, “”);
define(“SAMPLE_RATE”, “”);
define(“APRS_SERVER_LIST”, “”);
define(“STATUS_SERVER_LIST”, “”);
define(“LON_POSITION”, “”);
define(“LAT_POSITION”, “”);
define(“FREQUENCY”, “”);
define(“TX_POWER”, “”);
define(“ANTENNA_GAIN”, “”);
define(“ANTENNA_HEIGHT”, “”);
define(“ANTENNA_DIR”, “”);
define(“PATH”, “”);
define(“BEACON_INTERVAL”, “”);
define(“TONE”, “”);
define(“COMMENT”, “”);
define(‘AUTHORISED’, ‘AUTHORISED’);
define(‘UNAUTHORISED’, ‘UNAUTHORISED’);

//

// Button keys define: description button, DTMF command or command, color of button

//

// DTMF keys

// syntax: ‘KEY number,’Description’,’DTMF code’,’color button’.

//

define(“KEY1”, array(‘       Parrot      ‘,’*1#’,’red’));
define(“KEY2”, array(‘  Node-Status      ‘,’*#’,’green’));
define(“KEY3”, array(‘  Sys-Infos      ‘,’*0#’,’green’));
define(“KEY4”, array(‘  TG Status      ‘,’*9*#’,’green’));
define(“KEY5”, array(‘TG trennen’,’*910#’,’green’));
define(“KEY6”, array(‘TG2329 OE9′,’*912329#’,’red’));

define(“KEY7”, array(‘EL-Repeater’,’*2#123456#’,’blue’));
define(“KEY8”, array(‘EL-Repeater’,’*2#236587#’,’blue’));
define(“KEY9”, array(‘EL-Nebelstein’,’*2#573907#’,’blue’));
define(“KEY10”, array(‘EL-Lachtal’,’*2#827580#’,’blue’));
define(“KEY11”, array(‘EL-Kahlenberg’,’*2#6406#’,’blue’));
define(“KEY12”, array(‘EL-Kaiserkogel’,’*2#341109#’,’blue’));
define(“KEY13”, array(‘EL-Krippenstein’,’*2#534058#’,’blue’));
define(“KEY14”, array(‘EL-Südtirol’,’*2#55883#’,’blue’));
define(“KEY15”, array(‘EL-Muttenz’,’*2#438675#’,’blue’));
define(“KEY16”, array(‘EL-GL’,’*2#41140#’,’blue’));
define(“KEY17”, array(‘EL-Lägern’,’*2#9663#’,’blue’));
define(“KEY18”, array(‘EL-Pilatus’,’*2#438800#’,’blue’));
define(“KEY19”, array(‘EL-Trennen’,’##’,’red’));
define(“KEY20”, array(‘EL-Trennen’,’##’,’red’));

 

define(“SVXCONFPATH”, “/etc/svxlink/”);
define(“SVXCONFIG”, “svxlink.conf”);
define(“SVXLOGPATH”, “/var/log/”);
define(“SVXLOGPREFIX”,”svxlink”);
define(“CALLSIGN”,”null”);
define(“LOGICS”,”null”);
define(“REPORT_CTCSS”,”null”);
define(“DTMF_CTRL_PTY”,”null”);
define(“API”,”null”);
define(“FMNET”,”null”);
define(“TG_URI”,”null”);
define(“NODE_INFO_FILE”,”/etc/svxlink/node_info.json”);
define(“RF_MODULE”,”null”);
define(“QTH”,”null”);
define(“FREQ”,”null”);
define(“LOCATION”,”null”);
define(“CW_AMP”,”inCwAmp”);
define(“CW_PITCH”,”inCwPitch”);
define(“CW_CPM”,”inCwCpm”);
define(“LINKS”,”null”);
define(“AUTH_KEY”,”password”);
define(“FMNETWORK”,”inFmnetwork”);
define(“DEFAULT_LANG”,”inReflectorDefaultLang”);
define(“RGR_DELAY”,”inRgrDelay”);
define(“IDLE_INTERVAL_TIME”,”inIdleIntervalTime”);
define(“FX_GAIN_NORMAL”,”inFxGainNormal”);
define(“FX_GAIN_LOW”,”inFxGainLow”);
define(“AUDIO_CHANNEL”,”inRxAudioChannel”);
define(“SQL_DELAY”,”inSqlDelay”);
define(“HID_DEVICE”,”inRxHidDevice”);

define(“HOSTS”,”null”);
define(“DATABASES”,”/var/www/html/databases”);

 

$svxConfigFile = ‘/etc/svxlink/svxlink.conf’;
if (fopen($svxConfigFile, ‘r’)) {
    $svxconfig = parse_ini_file($svxConfigFile, true, INI_SCANNER_RAW);
    $refApi = isset($svxconfig[‘ReflectorLogic’][‘API’]) ? $svxconfig[‘ReflectorLogic’][‘API’] : ”;
    $fmnetwork = isset($svxconfig[‘ReflectorLogic’][‘HOSTS’]) ? $svxconfig[‘ReflectorLogic’][‘HOSTS’] : ”;
    $qth = isset($svxconfig[‘LocationInfo’][‘QTH’]) ? $svxconfig[‘LocationInfo’][‘QTH’] : ”;
    $freq = isset($svxconfig[‘Rx1’][‘FREQ’]) ? $svxconfig[‘Rx1’][‘FREQ’] : ”;
    $EL_node = isset($svxconfig[‘LocationInfo’][‘LOCATION’]) ? $svxconfig[‘LocationInfo’][‘LOCATION’] : ”;
} else {
    $callsign = “NOCALL”;
    $fmnetwork = “not registered”;
    $EL_node = “unknown”;
}

 

 

sa818-running.py (/opt/sa818-running.py)

#!/usr/bin/env python3

import serial

serport = ‘/dev/ttyUSB0’

baud = ‘9600’

channelspace = ‘1’      # 0=12.5kHz, 1=25kHz

rxfreq = ‘433.9000’     # TX frequency
txfreq = rxfreq         # Same as rx freq – we work simplex

squelch = ‘1’           # 0-8 (0 = open)

txcxcss = ‘0008’        # CTCSS 88,5Hz
rxcxcss = ‘0008’        # CTCSS 88,5Hz
# txcxcss = rxcxcss

#txcxcss = ‘023N’        # CTCSS / CDCSS TX
#rxcxcss = ‘023N’        # CTCSS / CDCSS RX

flataudio = ‘1’           # switch to discriminator output and input if value = 1
bypass_lowpass = ‘1’      # bypass lowpass-filter if value = 1
bypass_highpass = ‘1’     # bypass highpass-filter if value = 1

volume = ‘7’              # betweeen 0..8

ser = serial.Serial(serport, baud, timeout=2)
print(‘Opening port: ‘ + ser.name)

print (‘\r\nConnecting…’)
ser.write(b’AT+DMOCONNECT\r\n’)

output = ser.readline()
print (‘reply: ‘ + output.decode(“utf-8”))

print (‘\r\nConfiguring radio…’)
config = ‘AT+DMOSETGROUP={},{},{},{},{},{}\r\n’.format(channelspace, txfreq, rxfreq, txcxcss, squelch, rxcxcss)
print (config)
ser.write(config.encode())
output = ser.readline()
print (‘reply: ‘ + output.decode(“utf-8”))

print (‘\r\nSet filter…’)
config = ‘AT+SETFILTER={},{},{}\r\n’.format(flataudio, bypass_highpass, bypass_lowpass)
print(config)
ser.write(config.encode())
output = ser.readline()
print (‘reply: ‘ + output.decode(“utf-8”))

print (‘\r\nSetting volume…’)
config = ‘AT+DMOSETVOLUME={}\r\n’.format(volume)
print(config)
ser.write(config.encode())
output = ser.readline()
print (‘reply: ‘ + output.decode(“utf-8”))

print (‘\r\nSetting emission tail tone…’)
ser.write(b’AT+SETTAIL=0\r\n’)
output = ser.readline()
print (‘reply: ‘ + output.decode(“utf-8”))

print (‘\r\nGetting Module Version…’)
ser.write(b’AT+VERSION\r\n’)
output = ser.readline()
print (‘reply: ‘ + output.decode(“utf-8”))

print (‘\r\nGetting Settings…’)
ser.write(b’AT+DMOREADGROUP\r\n’)
output = ser.readline()
print (‘reply: ‘ + output.decode(“utf-8”))

 

 

FM Hotspot Shari SA818 programmieren:

Vorgängig ist auf dem Raspberry Pi die Datei sa818-running.py (zu finden im Verzeichnis /opt/sa818-running.py) zu konfigurieren. Ein paar Zeilen weiter oben in dieser Anleitung ist das Muster zu finden.

Um die Konfiguration in den Shari zu schreiben, benützt man die Gratis-Software WinSCP. Mit WinSCP kann auf den Raspberry zugegriffen werden.

Bitte das Verzeichnis opt doppelklicken, damit die Datei sa818-running.py zu sehen ist.

Nun auf das eingekreiste Symbol klicken.

Den Befehl  sudo phython3 /opt/sa818-running.py in das Feld recht vom Text «Befehl eingeben» eintragen und dann auf «Ausführen» klicken. Nun wird die Konfiguration wie Frequenz, CTCSS, usw. übertragen.

Der Shari selber ist nun fertig programmiert. Solange weder Frequenz, noch CTCSS, Squelch oder Lautstärke verändert werden muss, muss der Shari nicht mehr in den Raspberry Pi gesteckt werden, sondern kann mit einem USB-Verbindungskabel vom USB-Anschluss der Soundkarte mit dem Raspberry Pi verbunden werden. Alle anderen Konfigurationen sind in der SVX-Link Software vorzunehmen.

 

 

CTCSS Code Tabelle

Hier ist die CTCSS Code-Tabelle zu finden.