Also, the "one hour apart" thing was because a chart was pulling chill hour accumulation for a day on an hourly interval. The Utah method can actually subtract chill hours, so hourly changes wont necessarily be in hour increments.
More to follow 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/43a979e4-69b7-481f-82c9-165b7a881816n%40googlegroups.com.
