From 9b87b2428a5050fb2fd2803d0d568ca916365738 Mon Sep 17 00:00:00 2001 From: Dirk Koopman Date: Wed, 9 Dec 2015 22:27:54 +0000 Subject: [PATCH] add maxwind, pressure to .1, improve ui Added facility to record the maximum wind gust and time per day. Change the accuracy of the barometer from int to one dec pl. Fix the size of the columns in the UI to stop the constant changing of widths with data changes --- loop.pl | 54 ++++++++++++++++++++++++++--------------- templates/index.html.ep | 42 ++++++++++++++++---------------- 2 files changed, 55 insertions(+), 41 deletions(-) diff --git a/loop.pl b/loop.pl index bdc06d6..02a463a 100755 --- a/loop.pl +++ b/loop.pl @@ -348,7 +348,7 @@ 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)); @@ -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!"; diff --git a/templates/index.html.ep b/templates/index.html.ep index 1b907ee..c8ef3b5 100644 --- a/templates/index.html.ep +++ b/templates/index.html.ep @@ -691,36 +691,36 @@

- - - - - + + + + + - + - - + + - - - - - + + + + + - - - + + + - - - - - + + + + +
Time: Sunrise: Sunset: Console Volts: TX Battery OK: Time: Sunrise: Sunset: Console Volts: TX Battery OK:
Pressure: Pressure: mb Trend:
Temperature in: Humidity: Temperature in: °CHumidity: %
Temperature out: Min: @ Max: @ Humidity: Dew Point:
Temperature out: °CMin: °C @ Max: °C @ Humidity: %Dew Point: °C
Wind: m/s @ degWind Dir Minute Avg: Wind Speed Minute Avg:
Wind: ° @ m/sWind Minute Avg: ° @ m/s Day Max Speed: m/s @
Rain 30mins: Day: 24hrs: Month: Year: Rain 30mins: mmDay: mm24hrs: mmMonth: mmYear: mm
-- 2.34.1