Toistinaseman mainostaminen APRS-asemille

Radioamatööriwikistä
Versio hetkellä 21. joulukuuta 2010 kello 18.04 – tehnyt >OH6KTT (scripti fiksauksia)
Siirry navigaatioon Siirry hakuun


Scripti joka tutkii ajastettuna OH6RUC toistimen linuxissa aprx ohjelman tekemää /tmp/aprx-rf.log tiedostoa. Jos logissa näkyy APRS-asema joka on lähempänä kuin 30km OH6RUC toistinta ja kyseistä APRS-asemaa ei ole kuultu edellisen 24h kuluessa, ja toistin on vapaana, scripti aukaisee toistimen ja mainostaa iseaään APRS-asemalle puheella. Puhe generoidaan festival puhesyntetisaattorilla.

"Tervetuloa OH6RUC toistinaseman kuuluvuusalueelle OH6KTT. Minä olen Kaustisen OH6RUC toistinasema taajuudella 434.900 MHz. Ripiitterierotukseni on -2 MHz. Toistan. Ripiitterierotus on -2 MHz. Automaattinen tiedote ripiitteriä lähestyville APRS-asemille päättyy."

Sama scripti pitää logia suoraan RF:llä kuulluista APRS-asemista.

Ideoita jatkokehitystä varten:

  • 2m tropokelit on mahdollista havaita suoraan RF:llä kuulluista asemista
  • Pitkän historian avulla db:stä voisi saada selville digiripiitterin kuuntelukyky eri ilmansuuntiin
#!/usr/bin/php -q
<?php
ini_set('memory_limit','50M'); 
$debug		= false;
$stationdbfile	= "/tmp/oh6ruc-aprs-db.txt"; /* aprs-repeater-advertiser.php scripts database */
$stationdb	= unserialize(@file_get_contents($stationdbfile));
$timelimit	= time()-3600*24;
$max		= 10; /* max stations to speak out */

function callsign2finnish($callsign) {
	$chartospeech = array();
	$chartospeech["-"] = "viiva";
	$chartospeech["a"] = "aa";
	$chartospeech["b"] = "bee";
	$chartospeech["c"] = "see";
	$chartospeech["d"] = "dee";
	$chartospeech["e"] = "ee";
	$chartospeech["f"] = "äf";
	$chartospeech["g"] = "gee";
	$chartospeech["h"] = "hoo";
	$chartospeech["i"] = "hee";
	$chartospeech["j"] = "jii";
	$chartospeech["k"] = "koo";
	$chartospeech["l"] = "äl";
	$chartospeech["m"] = "äm";
	$chartospeech["n"] = "äm";
	$chartospeech["o"] = "oo";
	$chartospeech["p"] = "pee";
	$chartospeech["q"] = "kuu";
	$chartospeech["r"] = "är";
	$chartospeech["s"] = "äs";
	$chartospeech["t"] = "tee";
	$chartospeech["u"] = "uu";
	$chartospeech["v"] = "vee";
	$chartospeech["w"] = "tuplavee";
	$chartospeech["x"] = "äks";
	$chartospeech["y"] = "yy";
	$chartospeech["z"] = "tseta";
	$chartospeech["å"] = "oo";
	$chartospeech["ä"] = "ää";
	$chartospeech["ö"] = "öö";
	$chartospeech["1"] = "yks";
	$chartospeech["2"] = "kaks";
	$chartospeech["3"] = "kol";
	$chartospeech["4"] = "nel";
	$chartospeech["5"] = "viis";
	$chartospeech["6"] = "kuus";
	$chartospeech["7"] = "seiska";
	$chartospeech["8"] = "kasi";
	$chartospeech["9"] = "ysi";
	$chartospeech["0"] = "nolla";
	$msg = "";
	for ($tmp = 0; $tmp < strlen($callsign); $tmp++) {
		$character = substr($callsign, $tmp, 1);
                /* don't say -9 */
		if ($character == "-") {
		        return $msg;
                }
		$vocal = $chartospeech[$character];
		$msg.= $vocal;		
	}
	return ($msg);
}

$hamssilkm = 0;
$jorina = "";
foreach ($stationdb as $callsign => $attcheddata) {
        $lastheard = $attcheddata["lastheard"];
        if ($timelimit <= $lastheard) {
                if ($hamssitlkm >= $max) continue;
                $hamssitlkm++;
                $distance = ceil($attcheddata["distance"]);
                $lat = $attcheddata["lat"];
                $long = $attcheddata["long"];
                $coordtype = $attcheddata["coordtype"];
                $bearing = round($attcheddata["bearing"],0);
                $jorina .= callsign2finnish($callsign) . " $distance kilometriä suunnassa $bearing astetta. ";
        } 
}

$msg = "oohookuusärruusee toistimen alueella ";
if ($hamssitlkm == 0) {
        $msg .= "ei ole kuultu yhtään aapeeärräss asemaa, ";
} else {
        if (count($hamssit) == 1) {
                $msg .="on kuultu vain aapeeärräss asema ";
        } else {
                $msg .="on kuultu seuraavat aapeeärräss asemat. ";
        }
        $msg .= $jorina;
}
if ($hamssitlkm >0 && $hamssitlkm < $max) $msg .= " Ei muita.  ";
if ($hamssitlkm >= $max) $msg.=" Muitakin vielä olisi.  ";
$msg = substr($msg,0,-2);
$msg = preg_replace( "{[ \t]+}", ' ', $msg );
/* Toistetaan wav tiedosto radioporttiin */
if (!$debug) {
  system("/usr/sbin/tlbcmd \"port OH6RUC-Kaustinen; say -c $msg\"");
} else {
  echo $msg;
}
?>

Tämä scripti on ajastettu crontabissa

# Katsotaan onko kuuluvuusalueella uusia APRS-asemia ja mainostetaan jos on
4,8,12,16,20,24,28,32,36,40,44,48,52,56 * * * * tlb /opt/thelinkbox/scripts/aprs-repeater-advertiser.php > /dev/null