X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=loop.pl;h=f19b48041a62a784bfdee996e2a47b347c4be082;hb=04af13055d99ef1db7da3bd7ae6600b3ca709ea8;hp=bdc06d6e01f6e87d8d0d93f2573b3784706af69e;hpb=7d448d5b675b856fbce833f0fe6de953ef78daad;p=dweather.git diff --git a/loop.pl b/loop.pl index bdc06d6..f19b480 100755 --- a/loop.pl +++ b/loop.pl @@ -348,14 +348,14 @@ sub process # Common ones $tmp = unpack("s", substr $blk,7,2) / 1000; - $h{Pressure} = nearest(1, in2mb($tmp)); + $h{Pressure} = nearest(0.1, in2mb($tmp)); $tmp = unpack("s", substr $blk,9,2) / 10; $h{Temp_In} = nearest(0.1, f2c($tmp)); $temp = nearest(0.1, f2c(unpack("s", substr $blk,12,2) / 10)); $h{Temp_Out} = $temp; - if ($temp > 75 || $temp < -75) { + if ($temp > 60 || $temp < -60) { dbg "LOOP Temperature out of range ($temp), record ignored"; return; } @@ -421,22 +421,31 @@ sub process my $ts = time; my $s; my $dayno = int($ts/86400); + my $writeld; + my $cycledata; + if ($dayno > $ld->{last_day}) { - $ld->{Temp_Out_Max} = $ld->{Temp_Out_Min} = $temp; - $ld->{Temp_Out_Max_T} = $ld->{Temp_Out_Min_T} = clocktime($ts, 0); + $ld->{Temp_Out_Max} = $ld->{Temp_Out_Min} = $ld->{Wind_Max} = $temp; + $ld->{Temp_Out_Max_T} = $ld->{Temp_Out_Min_T} = $ld->{Wind_Max_T} = clocktime($ts, 0); $ld->{last_day} = $dayno; - write_ld(); - cycle_loop_data_files(); + ++$writeld; + ++$cycledata; } if ($temp > $ld->{Temp_Out_Max}) { - $ld->{Temp_Out_Max} = $temp; - $ld->{Temp_Out_Max_T} = clocktime($ts, 0); - write_ld(); + $h{Temp_Out_Max} = $ld->{Temp_Out_Max} = $temp; + $h{Temp_Out_Max_T} = $ld->{Temp_Out_Max_T} = clocktime($ts, 0); + ++$writeld; } if ($temp < $ld->{Temp_Out_Min}) { - $ld->{Temp_Out_Min} = $temp; - $ld->{Temp_Out_Min_T} = clocktime($ts, 0); - write_ld(); + $h{Temp_Out_Min} = $ld->{Temp_Out_Min} = $temp; + $h{Temp_Out_Min_T} = $ld->{Temp_Out_Min_T} = clocktime($ts, 0); + ++$writeld; + } + + if ($wind->{w} > $ld->{Wind_Max}) { + $h{Wind_Max} = $ld->{Wind_Max} = $wind->{w}; + $h{Wind_Max_T} = $ld->{Wind_Max_T} = clocktime($ts, 0); + ++$writeld; } if ($ts >= $ld->{last_hour} + 1800) { @@ -450,11 +459,6 @@ sub process $h{Sunrise} =~ s/(\d{2})(\d{2})/$1:$2/; $h{Sunset} = sprintf( "%04d", unpack("S", substr $blk,93,2) ); $h{Sunset} =~ s/(\d{2})(\d{2})/$1:$2/; - $h{Temp_Out_Max} = $ld->{Temp_Out_Max}; - $h{Temp_Out_Min} = $ld->{Temp_Out_Min}; - $h{Temp_Out_Max_T} = $ld->{Temp_Out_Max_T}; - $h{Temp_Out_Min_T} = $ld->{Temp_Out_Min_T}; - if ($loop_count) { # i.e not the first my $a = wind_average(scalar @{$ld->{wind_hour}} ? @{$ld->{wind_hour}} : {w => $h{Wind}, d => $h{Dir}}); @@ -467,8 +471,15 @@ sub process $h{Dir_1m} = nearest(1, $a->{d}); ($h{Rain_1m}, $h{Rain_1h}, $h{Rain_24h}) = calc_rain($rain); + } $ld->{last_rain_min} = $ld->{last_rain_hour} = $rain; + $h{Temp_Out_Max} = $ld->{Temp_Out_Max}; + $h{Temp_Out_Max_T} = $ld->{Temp_Out_Max_T}; + $h{Temp_Out_Min} = $ld->{Temp_Out_Min}; + $h{Temp_Out_Min_T} = $ld->{Temp_Out_Min_T}; + $h{Wind_Max} = $ld->{Wind_Max}; + $h{Wind_Max_T} = $ld->{Wind_Max_T}; $last_hour_h = {%h}; $s = genstr($ts, 'h', \%h); @@ -484,7 +495,7 @@ sub process push @last5daysh, $s; shift @last5daysh if @last5daysh > 5*24; } - write_ld(); + ++$writeld; } elsif ($ts >= $ld->{last_min} + 60) { my $a = wind_average(@{$ld->{wind_min}}); @@ -500,11 +511,12 @@ sub process ($h{Rain_1m}, $h{Rain_1h}, $h{Rain_24h}) = calc_rain($rain); } $ld->{last_rain_min} = $rain; - $h{Temp_Out_Max} = $ld->{Temp_Out_Max}; - $h{Temp_Out_Min} = $ld->{Temp_Out_Min}; $h{Temp_Out_Max_T} = $ld->{Temp_Out_Max_T}; + $h{Temp_Out_Min} = $ld->{Temp_Out_Min}; $h{Temp_Out_Min_T} = $ld->{Temp_Out_Min_T}; + $h{Wind_Max} = $ld->{Wind_Max}; + $h{Wind_Max_T} = $ld->{Wind_Max_T}; $last_min_h = {%h}; $s = genstr($ts, 'm', \%h); @@ -514,7 +526,7 @@ sub process @{$ld->{wind_min}} = (); output_str($s, 1) if $s; - write_ld(); + ++$writeld; } else { my $o = gen_hash_diff($ld->{last_h}, \%h); @@ -533,6 +545,8 @@ sub process output_str($s, 0) if $s; } $ld->{last_h} = \%h; + write_ld() if $writeld; + cycle_loop_data_files() if $cycledata; ++$loop_count; } else { dbg "CRC check failed for LOOP data!";