Ok thanks. So I just learned what a python generator is. Cleared up a lot.

Dude, I am seriously floored by how much you put into programming this. I'm 
back-tracking my way through the code for answers, and the detail is 
mind-blowing. Do you have a donations link? 

I'll reply once I have a functioning draft. Now that I understand how to 
use the genBatchRecords generator, I should have a working xType soon

Then someone will have to explain the difference between scalar, series, 
and aggregate to me...

Thanks!

On Friday, January 21, 2022 at 6:07:28 PM UTC-6 [email protected] wrote:

> 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/53c49b11-447f-45e4-952d-72a2c36e3eden%40googlegroups.com.

Reply via email to