Toistinaseman mainostaminen APRS-asemille
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