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.
