added DK0WCY-3 WWV announce beacon parsing into local WWV file
authordjk <djk>
Wed, 20 Oct 1999 16:11:08 +0000 (16:11 +0000)
committerdjk <djk>
Wed, 20 Oct 1999 16:11:08 +0000 (16:11 +0000)
Changes
perl/Console.pm
perl/DXProt.pm
perl/Geomag.pm

diff --git a/Changes b/Changes
index acfddda82121991d05153fa3421f7198943d33b9..0cec4e69eebc34909b69eaccbe595eba0a317b01 100644 (file)
--- a/Changes
+++ b/Changes
@@ -4,6 +4,8 @@
 (def 72)
 3. help command should now return stuff that you expect.
 4. reduced necessary privilege to use 'MSG' command to 6.
+5. Correct the count of spots and wwv for a merge.
+6. Allow decodes of DK0WCY-3 WWV data beacon announces
 18Oct99=======================================================================
 1. changed help command so that it works correctly with multiple title lines.
 2. added to address to the list of things a message checks to see whether it
index 453cf97db2a6e36824a8c4bce9fdc53da61e6f47..052d1073a01ccf67f41d599ff0fc02449eecc06b 100644 (file)
@@ -30,7 +30,7 @@ if ($ENV{'TERM'} =~ /(xterm|ansi)/) {
        $foreground = COLOR_BLACK();
        $background = COLOR_WHITE();
        @colors = (
-                  [ '^DX de [\-A-Z0-9]+:\s+(14[45]\d\d\d|5[01]\d\d\d)', COLOR_PAIR(1) ],
+                  [ '^DX de [\-A-Z0-9]+:\s+([57][01]\d\d\d\.|\d\d\d\d\d\d+.)', COLOR_PAIR(1) ],
                   [ '^DX', COLOR_PAIR(5) ],
                   [ '^To', COLOR_PAIR(3) ],
                   [ '^WWV', COLOR_PAIR(4) ],
@@ -44,7 +44,7 @@ if ($ENV{'TERM'} =~ /(console|linux)/) {
        $foreground = COLOR_WHITE();
        $background = COLOR_BLACK();
        @colors = (
-                  [ '^DX de [\-\w]+:\s+(14[45]\d\d\d|5[01]\d\d\d)', COLOR_PAIR(1) ],
+                  [ '^DX de [\-A-Z0-9]+:\s+([57][01]\d\d\d\.|\d\d\d\d\d\d+.)', COLOR_PAIR(1) ],
                   [ '^DX', COLOR_PAIR(4) ],
                   [ '^To', COLOR_PAIR(3) ],
                   [ '^WWV', COLOR_PAIR(5) ],
index caa01789bab372380a05bdee908c6ce1f0a7e3fa..6d2a7231063393a50cbe608f7a0565187810978b 100644 (file)
@@ -31,9 +31,10 @@ use strict;
 use vars qw($me $pc11_max_age $pc23_max_age $pc11_dup_age $pc23_dup_age
                        %spotdup %wwvdup $last_hour %pings %rcmds
                        %nodehops @baddx $baddxfn $pc12_dup_age
-                       %anndup $allowzero $pc12_dup_lth);
+                       %anndup $allowzero $pc12_dup_lth $decode_dk0wcy);
 
 $me = undef;                                   # the channel id for this cluster
+$decode_dk0wcy = undef;                        # if set use this callsign to decode announces from the EU WWV data beacon
 $pc11_max_age = 1*3600;                        # the maximum age for an incoming 'real-time' pc11
 $pc23_max_age = 1*3600;                        # the maximum age for an incoming 'real-time' pc23
 $pc11_dup_age = 24*3600;               # the maximum time to keep the spot dup list for
@@ -270,7 +271,7 @@ sub normal
                        }
                        $anndup{$dupkey} = $main::systime;
                        
-                       # global ann filtering
+                       # global ann filtering on INPUT
                        my ($filter, $hops) = Filter::it($self->{annfilter}, @field[1..6], $self->{call} ) if $self->{annfilter};
                        if ($self->{annfilter} && !$filter) {
                                dbg('chan', "Rejected by filter");
@@ -306,6 +307,11 @@ sub normal
                                }
                                Log('ann', $target, $field[1], $text);
                                
+                               if ($decode_dk0wcy && $field[1] eq $decode_dk0wcy) {
+                                       my ($hour, $k, $next, $a, $r, $sfi) = $field[3] =~ /^Aurora Beacon\s+(\d+)UTC,\s+Kiel\s+K=(\d+),.*ed\s+K=(\d+),\s+A=(\d+),\s+R=(\d+),\s+SFI=(\d+),/;
+                                       my $wwv = Geomag::update($main::systime, $hour, $sfi, $a, $k, "R=$r, Next K=$next", $decode_dk0wcy, $field[5], $r);
+                               }
+                               
                                return if $field[2] eq $main::mycall; # it's routed to me
                        } else {
                                route($field[2], $line);
@@ -509,26 +515,27 @@ sub normal
                        my $sfi = unpad($field[3]);
                        my $k = unpad($field[4]);
                        my $i = unpad($field[5]);
+                       my $r = $field[6] =~ /R=(\d+)/ || 0;
                        my $dupkey = "$d.$sfi$k$i";
                        if ($wwvdup{$dupkey}) {
                                dbg('chan', "Dup WWV Spot ignored\n");
                                return;
                        }
-                       if ($d < $main::systime - $pc23_max_age || $d > $main::systime + 900 || $field[2] < 0 || $field[2] > 23) {
+                       if (($pcno == 23 && $d < $main::systime - $pc23_max_age) || $d > $main::systime + 900 || $field[2] < 0 || $field[2] > 23) {
                                dbg('chan', "WWV Date ($field[1] $field[2]) out of range");
                                return;
                        }
                        $wwvdup{$dupkey} = $d;
                        $field[6] =~ s/-\d+$//o;            # remove spotter's ssid
                
-                       my $wwv = Geomag::update($d, $field[2], $sfi, $k, $i, @field[6..8]);
+                       my $wwv = Geomag::update($d, $field[2], $sfi, $k, $i, @field[6..8], $r);
 
-                       my $r;
+                       my $rep;
                        eval {
-                               $r = Local::wwv($self, $field[1], $field[2], $sfi, $k, $i, @field[6..8]);
+                               $rep = Local::wwv($self, $field[1], $field[2], $sfi, $k, $i, @field[6..8], $r);
                        };
 #                      dbg('local', "Local::wwv2 error $@") if $@;
-                       return if $r;
+                       return if $rep;
 
                        # DON'T be silly and send on PC27s!
                        return if $pcno == 27;
@@ -559,7 +566,7 @@ sub normal
                        
                        # spots
                        if ($field[3] > 0) {
-                               my @in = reverse Spot::search(1, undef, undef, 0, $field[3]-1);
+                               my @in = reverse Spot::search(1, undef, undef, 0, $field[3]);
                                my $in;
                                foreach $in (@in) {
                                        $self->send(pc26(@{$in}[0..4], $field[2]));
index 225cb542f087155c84bbe7c2cd9a487dc20bbc10..d78ff2cd3f007fd67cd7b5233ec3db33551ff699 100644 (file)
@@ -18,13 +18,14 @@ use IO::File;
 use Carp;
 
 use strict;
-use vars qw($date $sfi $k $a $forecast @allowed @denied $fp $node $from);
+use vars qw($date $sfi $k $a $r $forecast @allowed @denied $fp $node $from);
 
 $fp = 0;                                               # the DXLog fcb
 $date = 0;                                             # the unix time of the WWV (notional)
 $sfi = 0;                                              # the current SFI value
 $k = 0;                                                        # the current K value
 $a = 0;                                                        # the current A value
+$r = 0;                                                        # the current R value
 $forecast = "";                                        # the current geomagnetic forecast
 $node = "";                                            # originating node
 $from = "";                                            # who this came from
@@ -51,6 +52,7 @@ sub store
        print $fh "\$sfi = $sfi;\n";
        print $fh "\$a = $a;\n";
        print $fh "\$k = $k;\n";
+       print $fh "\$r = $r;\n";
        print $fh "\$from = '$from';\n";
        print $fh "\$node = '$node';\n";
        print $fh "\@denied = qw(", join(' ', @denied), ");\n" if @denied > 0;
@@ -58,13 +60,13 @@ sub store
        close $fh;
        
        # log it
-       $fp->writeunix($date, "$from^$date^$sfi^$a^$k^$forecast^$node");
+       $fp->writeunix($date, "$from^$date^$sfi^$a^$k^$forecast^$node^$r");
 }
 
 # update WWV info in one go (usually from a PC23)
 sub update
 {
-       my ($mydate, $mytime, $mysfi, $mya, $myk, $myforecast, $myfrom, $mynode) = @_;
+       my ($mydate, $mytime, $mysfi, $mya, $myk, $myforecast, $myfrom, $mynode, $myr) = @_;
        if ((@allowed && grep {$_ eq $from} @allowed) || 
                (@denied && !grep {$_ eq $from} @denied) ||
                (@allowed == 0 && @denied == 0)) {
@@ -72,6 +74,7 @@ sub update
                #       my $trydate = cltounix($mydate, sprintf("%02d18Z", $mytime));
                if ($mydate >= $date) {
                        $sfi = 0 + $mysfi;
+            $r = 0 + $myr unless !$r && $myk == $k;
                        $k = 0 + $myk;
                        $a = 0 + $mya;
                        $forecast = $myforecast;
@@ -125,6 +128,11 @@ sub k
        @_ ? $k = shift : $k ;
 }
 
+sub r
+{
+       @_ ? $r = shift : $r ;
+}
+
 sub a
 {
        @_ ? $a = shift : $a ;
@@ -135,6 +143,7 @@ sub forecast
        @_ ? $forecast = shift : $forecast ;
 }
 
+
 #
 # print some items from the log backwards in time
 #