Not sure why you would want to do this for times only one hour apart.
Try something like this (NOT TESTED, and highly schematic):
def get_aggregate(obs_type, timespan, aggregate_type, db_manager,
**option_dict):
if obs_type != 'chillHours':
raise weewx.UnknownType(obs_type)
if aggregate_type != 'sum':
return weewx.UnknownAggregation(aggregate_type)
# Convert 45 to the same unit as the database:
baseline = weewx.units.convertStd(ValueTuple(45, 'degree_F',
'group_temperature'),
db_manager.std_unit_system)
result = db_manager.getSql("SELECT SUM(`interval`) * 60 WHERE
outTemp<=? AND dateTime BETWEEN ? AND ?",
baseline.value, *timespan)
# Check if result are None.
# Get the proper unit and group, return as a ValueTuple.
Note that the type "interval" is escaped with backquotes. This is because
in MySQL, "interval" is a keyword unless you escape it.
Assigning the results to either group_elapsed seems reasonable.
Another option would be "group_deltatime", which is normally used for
things like system uptime. If you print it out, the results should come
back as "20 days, 7 hours, 15 minutes", which is what you want.
-tk
On Fri, Jan 21, 2022 at 2:56 PM Seth Ratner <[email protected]> wrote:
> Closer and Closer, lol
>
> row = db_manager.getSql(sql_stmt)
>
> Using: SELECT outTemp FROM archive WHERE dateTime BETWEEN 1642744800 AND
> 1642748400
>
> Is returning a single outTemp. I am not sure how to return multiple rows
> then iterate through them to check for == chilhour and add them together. I
> know how to do it in PHP, but not WeeWX...
>
> I think once I get that, I'll be there. It would be simpler to put
> chillHours in the archive then I could just use sum(chillHours) in the sql
> query, but I'd rather not at this point, to make the xtype more flexible.
>
>
> On Friday, January 21, 2022 at 4:48:30 PM UTC-6 [email protected] wrote:
>
>> Oooh. That's a perfect example! Thanks, John.
>>
>> On Fri, Jan 21, 2022 at 2:29 PM 'John Kline' via weewx-user <
>> [email protected]> wrote:
>>
>>> Another example:
>>>
>>>
>>> https://github.com/chaunceygardiner/weewx-purple/blob/e7f214539b63281d74af9e90810045dd8d1b7b80/bin/user/purple.py#L538
>>>
>>> On Jan 21, 2022, at 2:01 PM, Seth Ratner <[email protected]> wrote:
>>>
>>> It looks like there is an example in the weewx-xaggs
>>> <https://github.com/tkeffer/weewx-xaggs> repository. I'm about to dive
>>> in, but from a cursory look, unlike with the scalar, I'm going to have to
>>> figure out how to use dbmanager to pull the outtemps from the database then
>>> iterate through each one, determine which ones are chill hours, and then
>>> add those together, correct?
>>>
>>> On Friday, January 21, 2022 at 3:49:33 PM UTC-6 [email protected] wrote:
>>>
>>>> Let me see if I can come up with something. Give me some time.
>>>>
>>>> On Fri, Jan 21, 2022 at 1:37 PM Seth Ratner <[email protected]> wrote:
>>>>
>>>>> Oh boy...
>>>>>
>>>>> I cant find any examples for that. If one exists, it will greatly
>>>>> reduce the number of questions I have...
>>>>>
>>>>> On Friday, January 21, 2022 at 3:24:07 PM UTC-6 [email protected]
>>>>> wrote:
>>>>>
>>>>>> You're getting close!
>>>>>>
>>>>>> You're going to have to implement get_aggregate(), as well as
>>>>>> get_scalar().
>>>>>>
>>>>>> The xtypes framework has no way of taking the calculation for
>>>>>> get_scalar() and using it to calculate an aggregate. You're going to have
>>>>>> to do it. The good news is that once you've done it, then the framework
>>>>>> can use that to calculate a series on its own. This is where we will find
>>>>>> out how fast the calculation is.
>>>>>>
>>>>>> -tk
>>>>>>
>>>>>> On Fri, Jan 21, 2022 at 12:51 PM Seth Ratner <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> Getting Closer, but still getting errors.
>>>>>>>
>>>>>>> I can now see the result in the archive loop (gets sent over MQTT).
>>>>>>> But with the seasons skin attempts to make a chart with it, I get:
>>>>>>>
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> Caught unrecoverable exception in generator
>>>>>>> 'weewx.imagegenerator.ImageGenerator'
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> **** chillHours
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> **** Traceback (most recent call last):
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> **** File "/usr/share/weewx/weewx/reportengine.py", line
>>>>>>> 196, in
>>>>>>> run
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> **** obj.start()
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> **** File "/usr/share/weewx/weewx/reportengine.py", line
>>>>>>> 281, in
>>>>>>> start
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> **** self.run()
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> **** File "/usr/share/weewx/weewx/imagegenerator.py", line
>>>>>>> 41,
>>>>>>> in run
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> **** self.genImages(self.gen_ts)
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> **** File "/usr/share/weewx/weewx/imagegenerator.py", line
>>>>>>> 177,
>>>>>>> in genImages
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> **** start_vec_t, stop_vec_t ,data_vec_t =
>>>>>>> weewx.xtypes.get_series(var_type,
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> **** File "/usr/share/weewx/weewx/xtypes.py", line 94, in
>>>>>>> get_series
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> **** raise weewx.UnknownType(obs_type)
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> **** weewx.UnknownType: chillHours
>>>>>>> Jan 21 14:40:39 Ratner-Orchard weewx[3122] ERROR weewx.reportengine:
>>>>>>> **** Generator terminated
>>>>>>>
>>>>>>> Here's the block I added in skin.conf
>>>>>>>
>>>>>>> [[[yearchill]]]
>>>>>>> plot_type = bar
>>>>>>> [[[[chillHours]]]]
>>>>>>> aggregate_type = cumulative
>>>>>>> aggregate_interval = day
>>>>>>>
>>>>>>>
>>>>>>> On Friday, January 21, 2022 at 2:14:11 PM UTC-6 Seth Ratner wrote:
>>>>>>>
>>>>>>>> I'm close, I think, except now I'm getting this every loop or
>>>>>>>> report generation.
>>>>>>>>
>>>>>>>> DEBUG weewx.wxservices: Unknown extensible type 'chillHours'
>>>>>>>>
>>>>>>>> There are a couple things I'm unsure of that might be causing this
>>>>>>>>
>>>>>>>> - I used the group type group_elapsed because it seemed like the
>>>>>>>> best fit
>>>>>>>> - The last line of the python file, modeled after the
>>>>>>>> VaporPressure.py example, is not part of either class, so I'm not sure
>>>>>>>> what
>>>>>>>> runs it.
>>>>>>>>
>>>>>>>> Here's the code:
>>>>>>>> https://github.com/lordratner/weewx_chillHours/blob/main/chill_hours.py
>>>>>>>>
>>>>>>>> It's been added to weewx.conf engine section in xtypes, and I've
>>>>>>>> confirmed the service is loading.
>>>>>>>>
>>>>>>>> Thoughts?
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thursday, January 20, 2022 at 8:26:59 PM UTC-6 [email protected]
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> I'd try it as a pure xtype first, and see what kind of performance
>>>>>>>>> I got. If it's slow, put it in the database.
>>>>>>>>>
>>>>>>>>> You can query the database directly, but the advantage of using
>>>>>>>>> xtypes system to do your queries is that it can automatically optimize
>>>>>>>>> whether or not to use the daily summaries.
>>>>>>>>>
>>>>>>>>> There's a brief section
>>>>>>>>> <https://github.com/weewx/weewx/wiki/WeeWX-V4-user-defined-types#xtypes-api>
>>>>>>>>> in the wiki about the API. It's pretty self-explanatory, except about
>>>>>>>>> where
>>>>>>>>> db_manager comes from. That's an instance of
>>>>>>>>> weewx.manager.DaySummaryManager. Look in weewx/manager.py for how to
>>>>>>>>> create
>>>>>>>>> one. There are some convenient static methods for doing so.
>>>>>>>>>
>>>>>>>>> On Thu, Jan 20, 2022 at 6:15 PM Seth Ratner <[email protected]>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Thanks Tom
>>>>>>>>>>
>>>>>>>>>> Final questions for the night, I promise 🤣😂
>>>>>>>>>>
>>>>>>>>>> Would you put this one the database, or just let WeeWx calculate
>>>>>>>>>> it using the xtype each time?
>>>>>>>>>>
>>>>>>>>>> Second, is there an API or interface or whatever where another
>>>>>>>>>> application can query WeeWX for some sort of weather data? In this
>>>>>>>>>> case,
>>>>>>>>>> I'd like my irrigation software to query WeeWX for the ET, total
>>>>>>>>>> rain, and
>>>>>>>>>> chill hours of a given time frame.
>>>>>>>>>>
>>>>>>>>>> Or do I just have to read the database directly?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Thu, Jan 20, 2022, 19:15 Tom Keffer <[email protected]> wrote:
>>>>>>>>>>
>>>>>>>>>>> On Thu, Jan 20, 2022 at 4:01 PM Seth Ratner <[email protected]>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Would you add the step from the xType guide of adding
>>>>>>>>>>>> chillHours to [StdWXCalculate] [[Calculations]]? Or would the
>>>>>>>>>>>> "synthetic
>>>>>>>>>>>> type" concept mean it only exists when it is called on.
>>>>>>>>>>>>
>>>>>>>>>>>> As I understand it, adding it to [StdWXCalculate]
>>>>>>>>>>>> [[Calculations]] would add chillHours to the loop, but it would
>>>>>>>>>>>> not be in
>>>>>>>>>>>> the archive unless I also added a column for it with the same type
>>>>>>>>>>>> name.
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> It doesn't hurt to add to StdWXCalculate, but it's really only
>>>>>>>>>>> necessary if you want to add the results to the database. And,
>>>>>>>>>>> yes, it will only get added to the database if there's a matching
>>>>>>>>>>> column in
>>>>>>>>>>> the schema.
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> So on my Belchertown skin, where I want total Chill Hours from
>>>>>>>>>>>> Oct - May displayed, if I add it to the archive WeeWX will use the
>>>>>>>>>>>> database
>>>>>>>>>>>> to calculate the total (just adding them together), whereas if I
>>>>>>>>>>>> don't add
>>>>>>>>>>>> it to the archive, WeeWX will have to run the (if outTemp < 45 then
>>>>>>>>>>>> chillHours = archive_interval) for every archive row in that
>>>>>>>>>>>> timespan, then
>>>>>>>>>>>> sum that?
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Maybe. For the ImageGenerator that comes with WeeWX, if a type
>>>>>>>>>>> is not available in the database, it will try to calculate it "on
>>>>>>>>>>> the fly"
>>>>>>>>>>> using xtypes. However, I have no idea what the Belchertown skin
>>>>>>>>>>> does. I
>>>>>>>>>>> kind of doubt it leverages xtypes.
>>>>>>>>>>> -tk
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> You received this message because you are subscribed to a topic
>>>>>>>>>>> in the Google Groups "weewx-user" group.
>>>>>>>>>>> To unsubscribe from this topic, visit
>>>>>>>>>>> https://groups.google.com/d/topic/weewx-user/7ysYvSUMOOo/unsubscribe
>>>>>>>>>>> .
>>>>>>>>>>> To unsubscribe from this group and all its topics, send an email
>>>>>>>>>>> to [email protected].
>>>>>>>>>>> To view this discussion on the web visit
>>>>>>>>>>> https://groups.google.com/d/msgid/weewx-user/CAPq0zEAdDBGTow7i55XfnGPzncQjdmiH%2BSk%3DL9_ZoE85QXKO%3Dw%40mail.gmail.com
>>>>>>>>>>> <https://groups.google.com/d/msgid/weewx-user/CAPq0zEAdDBGTow7i55XfnGPzncQjdmiH%2BSk%3DL9_ZoE85QXKO%3Dw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>>>>>> .
>>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>>
>>>>>>>>> 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 it,
>>>>>>>>>> send an email to [email protected].
>>>>>>>>>> To view this discussion on the web visit
>>>>>>>>>> https://groups.google.com/d/msgid/weewx-user/CAHTssjOF_Q65XveoboAwRV%2Br5-oNb8curD7LZTTmuD7Y0-EAjQ%40mail.gmail.com
>>>>>>>>>> <https://groups.google.com/d/msgid/weewx-user/CAHTssjOF_Q65XveoboAwRV%2Br5-oNb8curD7LZTTmuD7Y0-EAjQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>>>>> .
>>>>>>>>>>
>>>>>>>>> --
>>>>>>> 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 it,
>>>>>>> send an email to [email protected].
>>>>>>>
>>>>>> To view this discussion on the web visit
>>>>>>> https://groups.google.com/d/msgid/weewx-user/cb666588-aced-461c-9171-9d48b89e85f5n%40googlegroups.com
>>>>>>> <https://groups.google.com/d/msgid/weewx-user/cb666588-aced-461c-9171-9d48b89e85f5n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>> .
>>>>>>>
>>>>>> --
>>>>> 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 it, send
>>>>> an email to [email protected].
>>>>>
>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/weewx-user/8bb5d647-2f69-42b5-b5db-5b4c901e32f5n%40googlegroups.com
>>>>> <https://groups.google.com/d/msgid/weewx-user/8bb5d647-2f69-42b5-b5db-5b4c901e32f5n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>> --
>>> 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 it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/weewx-user/5c169c50-b9aa-4986-b2cc-0d58494b6665n%40googlegroups.com
>>> <https://groups.google.com/d/msgid/weewx-user/5c169c50-b9aa-4986-b2cc-0d58494b6665n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>> --
>>> 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 it, send
>>> an email to [email protected].
>>>
>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/weewx-user/A8392819-685E-4BA1-93BD-BEAAF6D888C5%40johnkline.com
>>> <https://groups.google.com/d/msgid/weewx-user/A8392819-685E-4BA1-93BD-BEAAF6D888C5%40johnkline.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
> 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 it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/weewx-user/d6e37e32-94a3-4220-8bf7-8503a3f23d3cn%40googlegroups.com
> <https://groups.google.com/d/msgid/weewx-user/d6e37e32-94a3-4220-8bf7-8503a3f23d3cn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
--
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 it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/weewx-user/CAPq0zEDc-153_Q8tfnS-Fk_OStxOY0gdjPpmAn78Y3nF3%2B3i_Q%40mail.gmail.com.