X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=loop.pl;h=86a0935904817a080119301a0869525c527e3601;hb=cbd2b59b72806c032e15c2d1e2295c50331bebe0;hp=bdc06d6e01f6e87d8d0d93f2573b3784706af69e;hpb=7d448d5b675b856fbce833f0fe6de953ef78daad;p=dweather.git diff --git a/loop.pl b/loop.pl index bdc06d6..86a0935 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,24 +421,35 @@ sub process my $ts = time; my $s; my $dayno = int($ts/86400); + my $writeld; + my $cycledata; + if ($dayno > $ld->{last_day}) { + $ld->{Wind_Max} = $wind->{w}; $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_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) { $h{Pressure_Trend} = unpack("C", substr $blk,3,1); $h{Pressure_Trend_txt} = $bar_trend{$h{Pressure_Trend}}; @@ -450,11 +461,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 +473,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 +497,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}}); @@ -498,13 +511,17 @@ sub process $h{Wind_1m} = nearest(0.1, $a->{w}); $h{Dir_1m} = nearest(1, $a->{d}); ($h{Rain_1m}, $h{Rain_1h}, $h{Rain_24h}) = calc_rain($rain); + + my $wkph = $a->{w} * 3.6; + $h{WindChill} = nearest(0.1, $a->{w} >= 1.2 ? 13.12 + 0.6215 * $temp - 11.37 * $wkph ** 0.16 + 0.3965 * $temp * $wkph ** 0.16 : $temp); } $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 +531,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 +550,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!";