[weewx-user] Re: adding last to 24 hrs to xstats

2018-05-18 Thread Andrew Milner
as far as I can see aprs.py appears to be a service which is bound to the 
generation of an archive record.  It is using data from a single archive 
record and creating the aprs data file in the required format FROM A SINGLE 
RECORD.

In order to do what you are trying to do you need to somehow have a 
database archive record field already containing the 24 hour data.

I do not believe you can do what you want to do by the method you are 
attempting.

An alternative is to use cheetah to generate the aprs file as a separate 
report, accessing the database as required and generating/accumulating the 
24 hour data, and use the tags which I gave you.

when creating a cheetah template file call the template for example 
awrs.txt.tmpl and add a new report to the daily reports in your skin called 
[awrs]

for the data from the latest archive record just use $current.outTemp and 
$current.outHumidity for example - or even $latest.outTemp and 
$latest.outHumidity which should be able to then replicate the existing 
awrs file.
for the 24 hr rain try the tags I gave you with span and delta to have 
cheetah calculate the rolling 24 hr rainfall every record

well a few ideas there anyway!!





On Friday, 18 May 2018 16:03:00 UTC+3, Lorin Tremblay wrote:
>
> OK here is the final goal
>
> I've been trying to complement the extension, APRS.py to have all the info 
> required to properly publish an APRS weather beacon.
>
> Originally it was missing the rain since midnight, but manage to fix that 
> one.
> Now i'm still missing the rain in the last 24 hrs and have been looking a 
> different approach on how to resolve issues.
> First I posted a request for help with that and got some answer and that I 
> should learn on my now which I've been trying.
> So I tried to generate the info via xstat, but with you suggestion i 
> thought that I might just be simpler to add straight into the APRS.py 
> code...
> It runs at the same time that the .html files are generated.
>  
>
> Here is the entire code that i'm trying to add rain in the last 24 hrs:
>
>
> *from* datetime *import* datetime
>
> *import* os
>
>
> *import* weeutil.weeutil
>
> *import* weewx.engine
>
> *import* weewx.units
>
>
>
> *class* APRS(weewx.engine.StdService):
>
> *def** __init__*(self, engine, config_dict):
>
> super(APRS, self).__init__(engine, config_dict)
>
> conf = config_dict[*'APRS'*]
>
> self._output_filename = conf[*'output_filename'*]
>
> self._output_filename_tmp = self._output_filename + *'.tmp'*
>
> self._include_position = int(conf.get(*'include_position'*, 0))
>
> self._symbol_table = conf.get(*'symbol_table'*, *'/'*)
>
> self._symbol_code = conf.get(*'symbol_code'*, *'_'*)
>
> self._comment = conf.get(*'comment'*, '')
>
>
> self._message_type = *'_'* * # Weather report (no position)*
>
> self._time_format = *'%m%d%H%M'*
>
> self._latitude = None
>
> self._longitude = None
>
> self._wind_direction_marker = *'c'*
>
> self._wind_speed_marker = *'s'*
>
> *if* self._include_position:
>
>* # Position with timestamp (no APRS messaging)*
>
> self._message_type = *'/'*
>
> self._time_format = *'%d%H%Mz'*
>
> self._latitude = ''.join(weeutil.weeutil.latlon_string(
>
> self.engine.stn_info.latitude_f,
>
> (*'N'*, *'S'*), *'lat'*))
>
> self._longitude = ''.join(weeutil.weeutil.latlon_string(
>
> self.engine.stn_info.longitude_f,
>
> (*'E'*, *'W'*), *'lon'*))
>
> self._wind_direction_marker = ''
>
> self._wind_speed_marker = *'/'*
>
>
> self.bind(weewx.NEW_ARCHIVE_RECORD, 
> self._handle_new_archive_record)
>
>
> *def** _handle_new_archive_record*(self, event):
>
> *"""Generate a positionless APRS weather report and write it to a 
> file"""*
>
> record = event.record
>
> data = [
>
> self._message_type,
>
> datetime.strftime(
>
> datetime.utcfromtimestamp(record[*'dateTime'*]),
>
> self._time_format),
>
> ]
>
> *if* self._include_position:
>
> data.append(self._latitude)
>
> data.append(self._symbol_table)
>
> data.append(self._longitude)
>
> data.append(self._symbol_code)
>
>
> *if* record.get(*'windDir'*) *is* *not* None:
>
>* # Wind direction (in degrees)*
>
>* # Wind from North needs to be reported as 360.*
>
>* # Wind from 0 means N/A in the APRS standard.*
>
>* # We need to make sure it does not get to 0, so do not rely 
> on*
>
>* # the format string rouding, but round to no decimals before*
>
>* # comparing with 0*
>
> wind_dir = int(round(record[*'windDir'*], 0))
>
> *if* wind_dir <= 0:
>
> wind_dir = 360

[weewx-user] Re: adding last to 24 hrs to xstats

2018-05-18 Thread Lorin Tremblay
OK here is the final goal

I've been trying to complement the extension, APRS.py to have all the info 
required to properly publish an APRS weather beacon.

Originally it was missing the rain since midnight, but manage to fix that 
one.
Now i'm still missing the rain in the last 24 hrs and have been looking a 
different approach on how to resolve issues.
First I posted a request for help with that and got some answer and that I 
should learn on my now which I've been trying.
So I tried to generate the info via xstat, but with you suggestion i 
thought that I might just be simpler to add straight into the APRS.py 
code...
It runs at the same time that the .html files are generated.
 

Here is the entire code that i'm trying to add rain in the last 24 hrs:


*from* datetime *import* datetime

*import* os


*import* weeutil.weeutil

*import* weewx.engine

*import* weewx.units



*class* APRS(weewx.engine.StdService):

*def** __init__*(self, engine, config_dict):

super(APRS, self).__init__(engine, config_dict)

conf = config_dict[*'APRS'*]

self._output_filename = conf[*'output_filename'*]

self._output_filename_tmp = self._output_filename + *'.tmp'*

self._include_position = int(conf.get(*'include_position'*, 0))

self._symbol_table = conf.get(*'symbol_table'*, *'/'*)

self._symbol_code = conf.get(*'symbol_code'*, *'_'*)

self._comment = conf.get(*'comment'*, '')


self._message_type = *'_'* * # Weather report (no position)*

self._time_format = *'%m%d%H%M'*

self._latitude = None

self._longitude = None

self._wind_direction_marker = *'c'*

self._wind_speed_marker = *'s'*

*if* self._include_position:

   * # Position with timestamp (no APRS messaging)*

self._message_type = *'/'*

self._time_format = *'%d%H%Mz'*

self._latitude = ''.join(weeutil.weeutil.latlon_string(

self.engine.stn_info.latitude_f,

(*'N'*, *'S'*), *'lat'*))

self._longitude = ''.join(weeutil.weeutil.latlon_string(

self.engine.stn_info.longitude_f,

(*'E'*, *'W'*), *'lon'*))

self._wind_direction_marker = ''

self._wind_speed_marker = *'/'*


self.bind(weewx.NEW_ARCHIVE_RECORD, self._handle_new_archive_record)


*def** _handle_new_archive_record*(self, event):

*"""Generate a positionless APRS weather report and write it to a 
file"""*

record = event.record

data = [

self._message_type,

datetime.strftime(

datetime.utcfromtimestamp(record[*'dateTime'*]),

self._time_format),

]

*if* self._include_position:

data.append(self._latitude)

data.append(self._symbol_table)

data.append(self._longitude)

data.append(self._symbol_code)


*if* record.get(*'windDir'*) *is* *not* None:

   * # Wind direction (in degrees)*

   * # Wind from North needs to be reported as 360.*

   * # Wind from 0 means N/A in the APRS standard.*

   * # We need to make sure it does not get to 0, so do not rely on*

   * # the format string rouding, but round to no decimals before*

   * # comparing with 0*

wind_dir = int(round(record[*'windDir'*], 0))

*if* wind_dir <= 0:

wind_dir = 360

data.append(*'%s%03u'* % (self._wind_direction_marker,

wind_dir))

*else*:

data.append(*'%s...'* % self._wind_direction_marker)


*if* record.get(*'windSpeed'*) *is* *not* None:

   * # Sustained one-minute wind speed (in mph)*

data.append(*'%s%03.f'* % (self._wind_speed_marker,

 record[*'windSpeed'*]))

*else*:

data.append(*'%s...'* % self._wind_speed_marker)


*if* record.get(*'windGust'*) *is* *not* None:

   * # Gust (peak wind speed in mph in the last 5 minutes)*

data.append(*'g%03.f'* % record[*'windGust'*])

*else*:

data.append(*'g...'*)


*if* record.get(*'outTemp'*) *is* *not* None:

   * # Temperature (in degrees Fahrenheit)*

data.append(*'t%03.f'* % record[*'outTemp'*])

*else*:

data.append(*'t...'*)


*if* record.get(*'rainRate'*) *is* *not* None:

   * # Rainfall (in hundredths of an inch) in the last hour*

data.append(*'r%03.f'* % (record[*'rainRate'*] * 100))


*if* record.get(*'rain'*) *is* *not* None:

   * # Rainfall (in hundredths of an inch) in the last 24hrs.*

data.append(*'p%03.f'* % (record[*'rain'*] * 100))


#*if* record.get(*'MISSSING INFO'*) *is* *not* None:

#   * # Rainfall (in hundredths of an inch) since 

[weewx-user] Re: adding last to 24 hrs to xstats

2018-05-18 Thread Andrew Milner
where is this code from? when is it being run?  

Originally you were trying to amend xstats - which effectively makes extra 
tags become available to the cheetah template engine

I gave a method of generating the required data without needing additional 
24 hour tags, by using existing tags available to the cheetah template 
engine.

You have now come up with some code which appears to be processing records 
obtained from somewhere other than directly from the weewx database and 
appending the output somewhere else.

Being in the dark somewhat my answer is "I do not know"

Sorry - cannot help more - I do not know where the code comes from, when it 
is run or how it is used, so cannot answer.  Sorry





On Friday, 18 May 2018 14:54:36 UTC+3, Lorin Tremblay wrote:
>
> So not being a coder or someone that know how to code
> How do you add it to this where the question mark are?
>
> *if* record.get(*'rainRate'*) *is* *not* None:
>
>* # Rainfall (in hundredths of an inch) in the last hour*
>
> data.append(*'r%03.f'* % (record[*'rainRate'*] * 100))
>
>
> #   *if* record.get(*'?'*) *is* *not* None:
>
> #  * # Rainfall (in hundredths of an inch) last 24hrs*
>
> #data.append(*'p%03.f'* % (record[*'?'*] * 100))
>
>
> *if* record.get(*'rain'*) *is* *not* None:
>
>* # Rainfall (in hundredths of an inch) since midnight*
>
> data.append(*'P%03.f'* % (record[*'rain'*] * 100))
>
>
> Thanks for your help andrew!
>
>
>
> On Thursday, May 17, 2018 at 9:50:38 PM UTC-4, Andrew Milner wrote:
>>
>> you could just use span with a day delta:
>>
>> eg
>> $span($day_delta=1).rain.sum for the rain total for previous 24 hours 
>> according to the customisation guide
>> or
>> $span($day_delta=1).outTemp.avg for the average temperature during 
>> previous 24 hours
>>
>>
>>
>> On Friday, 18 May 2018 01:09:48 UTC+3, Lorin Tremblay wrote:
>>>
>>> Hi!
>>>
>>> Trying to modify the xstats to add the last 24hrs to stats.
>>>
>>> here is the modification that I have made, but obviously not being a 
>>> coder there is one or more mistake, can anyone help me sort it out?
>>>
>>> "*#*
>>>
>>> *#Copyright (c) 2009-2015 Tom Keffer *
>>>
>>> *#*
>>>
>>> *#See the file LICENSE.txt for your full rights.*
>>>
>>> *#*
>>>
>>> *"""Extended stats based on the xsearch example*
>>>
>>>
>>> *This search list extension offers extra tags:*
>>>
>>>
>>> *  'alltime':All time statistics.*
>>>
>>>
>>> *  '24_hrs':  Statistics for the last 24 hours.* 
>>>
>>>
>>> *  'seven_day':  Statistics for the last seven days.* 
>>>
>>>
>>> *  'thirty_day': Statistics for the last thirty days.*
>>>
>>>
>>> *You can then use tags such as $alltime.outTemp.max for the all-time max*
>>>
>>> *temperature, or $seven_day.rain.sum for the total rainfall in the last 
>>> seven*
>>>
>>> *days, or $thirty_day.wind.max for maximum wind speed in the past thirty 
>>> days.*
>>>
>>> *"""*
>>>
>>> *import* datetime
>>>
>>> *import* time
>>>
>>>
>>> *from* weewx.cheetahgenerator *import* SearchList
>>>
>>> *from* weewx.tags *import* TimespanBinder
>>>
>>> *from* weeutil.weeutil *import* TimeSpan
>>>
>>>
>>> *class* ExtendedStatistics(SearchList):
>>>
>>> 
>>>
>>> *def** __init__*(self, generator):
>>>
>>> SearchList.__init__(self, generator)
>>>
>>>   
>>>
>>> *def** get_extension_list*(self, timespan, db_lookup):
>>>
>>> *"""Returns a search list extension with additions.*
>>>
>>>
>>> *timespan: An instance of weeutil.weeutil.TimeSpan. This holds*
>>>
>>> *  the start and stop times of the domain of valid 
>>> times.*
>>>
>>>
>>> *db_lookup: Function that returns a database manager given a*
>>>
>>> *   data binding.*
>>>
>>> *"""*
>>>
>>>
>>>* # First, create a TimespanBinder object for all time. This one 
>>> is easy*
>>>
>>>* # because the object timespan already holds all valid times to 
>>> be*
>>>
>>>* # used in the report.*
>>>
>>> all_stats = TimespanBinder(timespan,
>>>
>>>db_lookup,
>>>
>>>context=*'alltime'*,
>>>
>>>formatter=self.generator.formatter,
>>>
>>>converter=self.generator.converter)
>>>
>>> 
>>>
>>>* # Now use a similar process to get statistics for the last 24 
>>> hours.*
>>>
>>> hour_dt = datetime.date.fromtimestamp(timespan.stop) - 
>>> datetime.timedelta(hour=24)
>>>
>>> hour_ts = time.mktime(hour_dt.timetuple())
>>>
>>> 24_hours_stats = TimespanBinder(TimeSpan(hour_ts, timespan.stop),
>>>
>>>   db_lookup,
>>>
>>>   context=*'24_hrs'*,
>>>
>>>   
>>> formatter=self.generator.formatter,
>>>
>>>   
>>> 

[weewx-user] Re: adding last to 24 hrs to xstats

2018-05-18 Thread Lorin Tremblay
So not being a coder or someone that know how to code
How do you add it to this where the question mark are?

*if* record.get(*'rainRate'*) *is* *not* None:

   * # Rainfall (in hundredths of an inch) in the last hour*

data.append(*'r%03.f'* % (record[*'rainRate'*] * 100))


#   *if* record.get(*'?'*) *is* *not* None:

#  * # Rainfall (in hundredths of an inch) last 24hrs*

#data.append(*'p%03.f'* % (record[*'?'*] * 100))


*if* record.get(*'rain'*) *is* *not* None:

   * # Rainfall (in hundredths of an inch) since midnight*

data.append(*'P%03.f'* % (record[*'rain'*] * 100))


Thanks for your help andrew!



On Thursday, May 17, 2018 at 9:50:38 PM UTC-4, Andrew Milner wrote:
>
> you could just use span with a day delta:
>
> eg
> $span($day_delta=1).rain.sum for the rain total for previous 24 hours 
> according to the customisation guide
> or
> $span($day_delta=1).outTemp.avg for the average temperature during 
> previous 24 hours
>
>
>
> On Friday, 18 May 2018 01:09:48 UTC+3, Lorin Tremblay wrote:
>>
>> Hi!
>>
>> Trying to modify the xstats to add the last 24hrs to stats.
>>
>> here is the modification that I have made, but obviously not being a 
>> coder there is one or more mistake, can anyone help me sort it out?
>>
>> "*#*
>>
>> *#Copyright (c) 2009-2015 Tom Keffer *
>>
>> *#*
>>
>> *#See the file LICENSE.txt for your full rights.*
>>
>> *#*
>>
>> *"""Extended stats based on the xsearch example*
>>
>>
>> *This search list extension offers extra tags:*
>>
>>
>> *  'alltime':All time statistics.*
>>
>>
>> *  '24_hrs':  Statistics for the last 24 hours.* 
>>
>>
>> *  'seven_day':  Statistics for the last seven days.* 
>>
>>
>> *  'thirty_day': Statistics for the last thirty days.*
>>
>>
>> *You can then use tags such as $alltime.outTemp.max for the all-time max*
>>
>> *temperature, or $seven_day.rain.sum for the total rainfall in the last 
>> seven*
>>
>> *days, or $thirty_day.wind.max for maximum wind speed in the past thirty 
>> days.*
>>
>> *"""*
>>
>> *import* datetime
>>
>> *import* time
>>
>>
>> *from* weewx.cheetahgenerator *import* SearchList
>>
>> *from* weewx.tags *import* TimespanBinder
>>
>> *from* weeutil.weeutil *import* TimeSpan
>>
>>
>> *class* ExtendedStatistics(SearchList):
>>
>> 
>>
>> *def** __init__*(self, generator):
>>
>> SearchList.__init__(self, generator)
>>
>>   
>>
>> *def** get_extension_list*(self, timespan, db_lookup):
>>
>> *"""Returns a search list extension with additions.*
>>
>>
>> *timespan: An instance of weeutil.weeutil.TimeSpan. This holds*
>>
>> *  the start and stop times of the domain of valid times.*
>>
>>
>> *db_lookup: Function that returns a database manager given a*
>>
>> *   data binding.*
>>
>> *"""*
>>
>>
>>* # First, create a TimespanBinder object for all time. This one 
>> is easy*
>>
>>* # because the object timespan already holds all valid times to 
>> be*
>>
>>* # used in the report.*
>>
>> all_stats = TimespanBinder(timespan,
>>
>>db_lookup,
>>
>>context=*'alltime'*,
>>
>>formatter=self.generator.formatter,
>>
>>converter=self.generator.converter)
>>
>> 
>>
>>* # Now use a similar process to get statistics for the last 24 
>> hours.*
>>
>> hour_dt = datetime.date.fromtimestamp(timespan.stop) - 
>> datetime.timedelta(hour=24)
>>
>> hour_ts = time.mktime(hour_dt.timetuple())
>>
>> 24_hours_stats = TimespanBinder(TimeSpan(hour_ts, timespan.stop),
>>
>>   db_lookup,
>>
>>   context=*'24_hrs'*,
>>
>>   
>> formatter=self.generator.formatter,
>>
>>   
>> converter=self.generator.converter)
>>
>>
>>* # Now create a TimespanBinder for the last seven days. This one 
>> we*
>>
>>* # will have to calculate. First, calculate the time at 
>> midnight, seven*
>>
>>* # days ago. The variable week_dt will be an instance of 
>> datetime.date.*
>>
>> week_dt = datetime.date.fromtimestamp(timespan.stop) - 
>> datetime.timedelta(weeks=1)
>>
>> week_ts = time.mktime(week_dt.timetuple())
>>
>> seven_day_stats = TimespanBinder(TimeSpan(week_ts, timespan.stop),
>>
>>  db_lookup,
>>
>>  context=*'seven_day'*,
>>
>>  
>> formatter=self.generator.formatter,
>>
>>  
>> converter=self.generator.converter)
>>
>>
>>* # Now use a similar process to get statistics for the last 30 
>> days.*
>>
>> days_dt = 

[weewx-user] Re: adding last to 24 hrs to xstats

2018-05-17 Thread Andrew Milner
you could just use span with a day delta:

eg
$span($day_delta=1).rain.sum for the rain total for previous 24 hours 
according to the customisation guide
or
$span($day_delta=1).outTemp.avg for the average temperature during previous 
24 hours



On Friday, 18 May 2018 01:09:48 UTC+3, Lorin Tremblay wrote:
>
> Hi!
>
> Trying to modify the xstats to add the last 24hrs to stats.
>
> here is the modification that I have made, but obviously not being a coder 
> there is one or more mistake, can anyone help me sort it out?
>
> "*#*
>
> *#Copyright (c) 2009-2015 Tom Keffer *
>
> *#*
>
> *#See the file LICENSE.txt for your full rights.*
>
> *#*
>
> *"""Extended stats based on the xsearch example*
>
>
> *This search list extension offers extra tags:*
>
>
> *  'alltime':All time statistics.*
>
>
> *  '24_hrs':  Statistics for the last 24 hours.* 
>
>
> *  'seven_day':  Statistics for the last seven days.* 
>
>
> *  'thirty_day': Statistics for the last thirty days.*
>
>
> *You can then use tags such as $alltime.outTemp.max for the all-time max*
>
> *temperature, or $seven_day.rain.sum for the total rainfall in the last 
> seven*
>
> *days, or $thirty_day.wind.max for maximum wind speed in the past thirty 
> days.*
>
> *"""*
>
> *import* datetime
>
> *import* time
>
>
> *from* weewx.cheetahgenerator *import* SearchList
>
> *from* weewx.tags *import* TimespanBinder
>
> *from* weeutil.weeutil *import* TimeSpan
>
>
> *class* ExtendedStatistics(SearchList):
>
> 
>
> *def** __init__*(self, generator):
>
> SearchList.__init__(self, generator)
>
>   
>
> *def** get_extension_list*(self, timespan, db_lookup):
>
> *"""Returns a search list extension with additions.*
>
>
> *timespan: An instance of weeutil.weeutil.TimeSpan. This holds*
>
> *  the start and stop times of the domain of valid times.*
>
>
> *db_lookup: Function that returns a database manager given a*
>
> *   data binding.*
>
> *"""*
>
>
>* # First, create a TimespanBinder object for all time. This one 
> is easy*
>
>* # because the object timespan already holds all valid times to 
> be*
>
>* # used in the report.*
>
> all_stats = TimespanBinder(timespan,
>
>db_lookup,
>
>context=*'alltime'*,
>
>formatter=self.generator.formatter,
>
>converter=self.generator.converter)
>
> 
>
>* # Now use a similar process to get statistics for the last 24 
> hours.*
>
> hour_dt = datetime.date.fromtimestamp(timespan.stop) - 
> datetime.timedelta(hour=24)
>
> hour_ts = time.mktime(hour_dt.timetuple())
>
> 24_hours_stats = TimespanBinder(TimeSpan(hour_ts, timespan.stop),
>
>   db_lookup,
>
>   context=*'24_hrs'*,
>
>   
> formatter=self.generator.formatter,
>
>   
> converter=self.generator.converter)
>
>
>* # Now create a TimespanBinder for the last seven days. This one 
> we*
>
>* # will have to calculate. First, calculate the time at midnight, 
> seven*
>
>* # days ago. The variable week_dt will be an instance of 
> datetime.date.*
>
> week_dt = datetime.date.fromtimestamp(timespan.stop) - 
> datetime.timedelta(weeks=1)
>
> week_ts = time.mktime(week_dt.timetuple())
>
> seven_day_stats = TimespanBinder(TimeSpan(week_ts, timespan.stop),
>
>  db_lookup,
>
>  context=*'seven_day'*,
>
>  
> formatter=self.generator.formatter,
>
>  
> converter=self.generator.converter)
>
>
>* # Now use a similar process to get statistics for the last 30 
> days.*
>
> days_dt = datetime.date.fromtimestamp(timespan.stop) - 
> datetime.timedelta(days=30)
>
> days_ts = time.mktime(days_dt.timetuple())
>
> thirty_day_stats = TimespanBinder(TimeSpan(days_ts, timespan.stop),
>
>   db_lookup,
>
>   context=*'thirty_day'*,
>
>   
> formatter=self.generator.formatter,
>
>   
> converter=self.generator.converter)
>
>
> *return* [{*'alltime'*: all_stats,
>
>  *'24_hrs'*: 24_hours_stats,
>
>  *'seven_day'*: seven_day_stats,
>
>  *'thirty_day'*: thirty_day_stats}]
>
>
> *# For backwards compatibility:*
>
> ExtStats = ExtendedStatistics
> "
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"weewx-user" group.
To unsubscribe from this group and stop receiving emails from