| Automatic Position Reporting SystemWhat is APRS?APRS is a simple way to exchange position information on a amateur radio network. Also, it permits to send short messages to other stations, queries, bulletins, and so on... On ir3ip you will found a forum dedicated to the APRS activity; also, if you need other information or know available APRS projects, you can enter the APRS hamradio directory. aprs.ir3ip.net: the APRS serverDo you know that ir3ip is a APRS server?Now there are several port available to the hamradio users, to exchange APRS traffic. The main ports are:
If you have installed APRSD server, and you are interested about knowing an easy way to filter data, just take a look at the following Tcl script: #! /usr/bin/tclsh #aprslocal: Tcl script which filter data read from APRSD daemon #Called by xinetd superdaemon (file /etc/xinetd.d/aprslocal) #service aprslocal #{ # socket_type = stream # wait = no # user = nobody # server = /usr/local/bin/aprslocal # log_on_success += USERID # log_on_failure += USERID #} # Written by Paolo Subiaco iw3grx@ir3ip.net http://www.ir3ip.net/iw3grx # set sd [socket 44.134.177.204 10152] fconfigure stdin -blocking 0 ; #nonblocking stdin for {set i 0} {$i<10} {incr i} { if {[gets stdin linein]>0} { puts $sd "$linein\r" flush $sd } if {[gets $sd line]>0} { puts "$line\r" } } while {[gets $sd line]>=0} { if {[regexp {^I|:I[0-Z]+|^T7|:T7|^HB9|:HB9|^S5[0-9]|:S5[0-9]|^OE[0-9]|:OE[0-9]|^9A[0-9]|:9A[0-9]} "$line"]} { puts "$line\r" } if {[gets stdin linein]>0} { puts $sd "$linein\r" flush $sd } }Do you think there will be several buffer overflows? If you think so, please help me improving the script security! :-) SuperVozelj telemetry transmission on APRS networkThe small Perl script below permit to extract temperature information from svstat data file which may be transmitted on the APRS network as weather stations do.The script may be called from the crontab: 59 * * * * /path/to/aprstelem.pl Here is the perl script: #! /usr/bin/perl # Small script which read SuperVozelj temperature from svstat data, and send # the telemetric information on APRS internet server aprsd use Socket; $aprsServer = "ir3ip.ampr.org"; $port = 1315; $datapath="/home/iw3grx/svstat/dat/"; #$datapath="/home/iw3grx/projects/svstat/dat/"; ($d1, $d2, $d3, $d4, $rawserver) = gethostbyname($aprsServer); $serveraddr = pack("Sna4x8",2,$port,$rawserver); $prototype = getprotobyname('udp'); socket(SOCKET,2,SOCK_DGRAM,$prototype) || die("No Socket\n"); $nodenum=0; $callsign[$nodenum]="ir3cv"; # callsign in lowercase (as data filename) $coord[$nodenum]="4603.50N/01218.10E_"; # Latitude/Longitude; '_' specify the WX symbol $channel[$nodenum]=3; # Number of AD channel (from 1 to 11) $qth[$nodenum]="Col Visentin"; # Node location $altitude[$nodenum]=1760; # Node altitude (in metres) $nodenum++; $callsign[$nodenum]="ir3csm"; $coord[$nodenum]="4554.10N/01205.00E_"; $channel[$nodenum]=4; $qth[$nodenum]="Col San Martino"; $altitude[$nodenum]=156; $nodenum++; $callsign[$nodenum]="ir3mco"; $coord[$nodenum]="4548.43N/01132.38E_"; $channel[$nodenum]=3; $qth[$nodenum]="Monte Corno"; $altitude[$nodenum]=1350; $nodenum++; $callsign[$nodenum]="ir3fon"; $coord[$nodenum]="4606.30N/01307.10E_"; $channel[$nodenum]=3; $qth[$nodenum]="Savalons"; $altitude[$nodenum]=105; $nodenum++; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday)=gmtime(); $now=time(); for ($i=0; $i<$nodenum; $i++) { $filename=$datapath.$callsign[$i].".dat"; if (!open($fd,$filename)) { # Error opening data file printf(stderr "Data file %s does not exist or is not readable!\n",$filename); next; } # must be improved (read in the file header): $size=48 $size=48; seek($fd,-1*$size,2); if (read($fd,$buffer,4)!=4) { # Error reading the first 4 bytes (timestamp) printf(stderr "Error reading timestamp from data file %s!\n",$filename); close($fd); next; } $time=unpack("I",$buffer); if (abs($now-$time) > 9000) { printf(stderr "Temperature from %s node is too old (%d seconds)\n",$callsign[$i],($now-$time)); close($fd); next; } if ($channel[$i]>1) { seek($fd,4*($channel[$i]-1),1); } if (read($fd,$buffer,4)!=4) { # Error reading temperature value printf(stderr "Error reading temperature value from data file %s!\n",$filename); close($fd); next; } $temp=unpack("f",$buffer); $message=sprintf("%s>APWX,WIDE:@%02d%02d%02dz%s.../...g...t%03d\0", uc($callsign[$i]),$mday,$hour,$min,$coord[$i],int($temp*1.8+32)); send(SOCKET,$message,0,$serveraddr); $message=sprintf("%s>APWX,WIDE:@%02d%02d%02dz%s/A=%06d SuperVozelj node %s, %dm asl\0", uc($callsign[$i]),$mday,$hour,$min,$coord[$i],$altitude[$i]/0.305,$qth[$i],$altitude[$i]); send(SOCKET,$message,0,$serveraddr); close($fd); } Interesting messagesXastir APRS programXastir is a nice APRS program for Linux. Take a look at the primary website www.xastir.org!A collection of MAPS is available in the ir3ip webserver, at http://www.ir3ip.net/pub/ham/aprs/ The best, simple and very fast Europe vectorial map is available here Other maps are available via ftp at ftp://aprs.rutgers.edu/pub/hamradio/APRS Here is a screenshot of Xastir where you can see S53SM around North-East of Italy with his airplane! printfooter('../','aprs','20020102'); ?> |