From dca232ce313c1d0ff8063ac4adb8e18ab4e1b5a2 Mon Sep 17 00:00:00 2001 From: dcapslock Date: Sat, 14 Jan 2017 15:49:27 +1100 Subject: [PATCH] Add tag time periods of last_hour, last_day, last_week, last_month and last_year. Add month_delta and year_delta to span. YOu can iterate over those periods. See http://carlingfordweather.sydney/TEST/tag-test.txt for Top Temperatures over the last immediate week. --- bin/weeutil/weeutil.py | 11 ++++++++--- bin/weewx/tags.py | 17 +++++++++++++---- docs/customizing.htm | 37 ++++++++++++++++++++++++++++++++++++- 3 files changed, 57 insertions(+), 8 deletions(-) diff --git a/bin/weeutil/weeutil.py b/bin/weeutil/weeutil.py index 765ed904..fffcaf9e 100644 --- a/bin/weeutil/weeutil.py +++ b/bin/weeutil/weeutil.py @@ -473,9 +473,10 @@ def archiveHoursAgoSpan(time_ts, hours_ago=0, grace=1): return TimeSpan(time.mktime(start_span_dt.timetuple()), time.mktime(stop_span_dt.timetuple())) -def archiveSpanSpan(time_ts, time_delta=0, hour_delta=0, day_delta=0, week_delta=0): +def archiveSpanSpan(time_ts, time_delta=0, hour_delta=0, day_delta=0, week_delta=0, month_delta=0, year_delta=0): """ Returns a TimeSpan for the last xxx seconds where xxx equals - time_delta sec + hour_delta hours + day_delta days + week_delta weeks + time_delta sec + hour_delta hours + day_delta days + week_delta weeks + month_delta months + year_delta years + Note: For month_delta, 1 month = 30 days, For year_delta, 1 year = 365 days Example: >>> os.environ['TZ'] = 'Australia/Brisbane' @@ -490,6 +491,10 @@ def archiveSpanSpan(time_ts, time_delta=0, hour_delta=0, day_delta=0, week_delta [2015-07-20 08:05:35 AEST (1437343535) -> 2015-07-21 09:05:35 AEST (1437433535)] >>> print archiveSpanSpan(time_ts, week_delta=4) [2015-06-23 09:05:35 AEST (1435014335) -> 2015-07-21 09:05:35 AEST (1437433535)] + >>> print archiveSpanSpan(time_ts, month_delta=1) + [2015-06-21 09:05:35 AEST (1434841535) -> 2015-07-21 09:05:35 AEST (1437433535)] + >>> print archiveSpanSpan(time_ts, year_delta=1) + [2014-07-21 09:05:35 AEST (1405897535) -> 2015-07-21 09:05:35 AEST (1437433535)] >>> print archiveSpanSpan(time_ts) [2015-07-21 09:05:34 AEST (1437433534) -> 2015-07-21 09:05:35 AEST (1437433535)] """ @@ -497,7 +502,7 @@ def archiveSpanSpan(time_ts, time_delta=0, hour_delta=0, day_delta=0, week_delta if time_ts is None: return None start_ts = time_ts - time_delta - hour_delta * 3600 - day_delta * 86400 - \ - week_delta * 604800 + week_delta * 604800 - month_delta * 2592000 - year_delta * 31536000 if start_ts == time_ts: start_ts -= 1 return TimeSpan(start_ts, time_ts) diff --git a/bin/weewx/tags.py b/bin/weewx/tags.py index 1df3bdca..16850285 100644 --- a/bin/weewx/tags.py +++ b/bin/weewx/tags.py @@ -82,9 +82,9 @@ class TimeBinder(object): def hour(self, data_binding=None): return self.hours_ago(data_binding) - def span(self, data_binding=None, time_delta=0, hour_delta=0, day_delta=0, week_delta=0): + def span(self, data_binding=None, time_delta=0, hour_delta=0, day_delta=0, week_delta=0, month_delta=0, year_delta=0): return TimespanBinder(weeutil.weeutil.archiveSpanSpan(self.report_time, time_delta=time_delta, - hour_delta=hour_delta, day_delta=day_delta, week_delta=week_delta), + hour_delta=hour_delta, day_delta=day_delta, week_delta=week_delta, month_delta=month_delta, year_delta=year_delta), self.db_lookup, data_binding=data_binding, context='day', formatter=self.formatter, converter=self.converter, **self.option_dict) @@ -124,8 +124,17 @@ class TimeBinder(object): self.db_lookup, data_binding=data_binding, context='rainyear', formatter=self.formatter, converter=self.converter, **self.option_dict) - - + def last_hour(self, data_binding=None): + return self.span(data_binding, hour_delta=1) + def last_day(self, data_binding): + return self.span(data_binding, day_delta=1) + def last_week(self, data_binding=None): + return self.span(data_binding, week_delta=1) + def last_month(self, data_binding=None): + return self.span(data_binding, month_delta=1) + def last_year(self, data_binding=None): + return self.span(data_binding, year_delta=1) + #=============================================================================== # Class TimespanBinder #=============================================================================== diff --git a/docs/customizing.htm b/docs/customizing.htm index b79bdaf8..610a997f 100644 --- a/docs/customizing.htm +++ b/docs/customizing.htm @@ -1,4 +1,4 @@ - @@ -1078,6 +1078,31 @@ $month.outTemp.max set by option rain_year_start. + + $last_hour + $last_hour.barometer.avg + The average barometer over the immediate last hour. + + + $last_day + $last_day.dewpoint.max + The maximum dewpoint over the immediate last day (24 hours). + + + $last_week + $last_week.outTemp.max + The maximum temperature over the immediate last week (7 days). + + + $last_month + $last_month.outTemp.min + The minimum temperature over the immediate last month (30 days). + + + $last_year + $last_year.rain.sum + The accumulated rain over the immediate last year (365 days). +

Unit conversion options

@@ -1545,6 +1570,16 @@ or in foobar units: $day.barometer.min.foobar $span($week_delta=2).barometer.max The maximum barometric pressure over the last immediate 2 weeks. + + $month_delta=months + $span($month_delta=3).outTemp.min + The minimum temperture over the last immediate 3 months (90 days). + + + $year_delta=years + $span($year_delta=1).windchill.min + The minimum wind chill over the last immediate 1 year (365 days). +