+
+ my $ts = time;
+ my $s;
+ if ($ts >= $last_hour + 3600) {
+ $h{Pressure_Trend} = unpack("C", substr $blk,3,1);
+ $h{Pressure_Trend_txt} = $bar_trend{$h{Pressure_Trend}};
+ $h{Batt_TX_OK} = (unpack("C", substr $blk,86,1)+0) ^ 1;
+ $h{Batt_Console} = nearest(0.01, unpack("s", substr $blk,87,2) * 0.005859375);
+ $h{Forecast_Icon} = unpack("C", substr $blk,89,1);
+ $h{Forecast_Rule} = unpack("C", substr $blk,90,1);
+ $h{Sunrise} = sprintf( "%04d", unpack("S", substr $blk,91,2) );
+ $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/;
+
+ if ($loop_count) { # i.e not the first
+ my $a = wind_average(scalar @hour ? @hour : {w => $h{Wind}, d => $h{Dir}});
+
+ $h{Wind_1h} = nearest(0.1, $a->{w});
+ $h{Dir_1h} = nearest(0.1, $a->{d});
+
+ $a = wind_average(@min);
+ $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);
+ }
+ $last_rain_min = $last_rain_hour = $rain;
+
+ $s = genstr($ts, 'h', \%h);
+
+ $last_hour = int($ts/3600)*3600;
+ $last_min = int($ts/60)*60;
+ @hour = ();
+ @min = ();
+ } elsif ($ts >= $last_min + 60) {
+ my $a = wind_average(@min);
+ my %save;
+
+ push @hour, $a;
+
+ if ($loop_count) { # i.e not the first
+ my $rm;
+
+ $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);
+ }
+ $last_rain_min = $rain;
+
+ $s = genstr($ts, 'm', \%h);
+
+ $last_min = int($ts/60)*60;
+ @min = ();
+ } else {
+ my $o = gen_hash_diff($last_reading, \%h);
+ if ($o) {
+ $s = genstr($ts, 'r', $o);
+ }
+ else {
+ dbg "loop rec not changed" if isdbg 'chan';
+ }