yearwindvec calculation problem

86 views
Skip to first unread message

jerry...@gmail.com

unread,
Jan 21, 2021, 1:14:47 AM1/21/21
to weewx-user
I noticed that something recently has gone wrong with my year wind vector graphic.  The y axis is broken.  This seems to have happened around the transition to 4.3
The monthwindvec graphic is ok

monthwindvec.png
but the yearwindvec y axis is scaled about 100 times too large
yearwindvec.png
Going back to V 4.2 on Dec 31, everything was normal
dec31yearwindvec.png
This is running on macOS 10.15.7 (Catalina) with Python 3.9.1
Any ideas where to look for fixes?

Tom Keffer

unread,
Jan 21, 2021, 12:48:05 PM1/21/21
to weewx-user
Hello, Jerry

Two questions:

1. Can we see skin.conf for the plots? In particular, the section [ImageGenerator] in skins/Seasons/skin.conf.
2. Let's check the database. Assuming you are using sqlite, use the tool sqlite3 to take a look. You may have to install first. I don't know how to do that on macOS, but I presume homebrew can do it. Then

cd /Users/Shared/weewx/archive
sqlite3 weewx.sdb
select dateTime, datetime(dateTime,'unixepoch','localtime'), xsum, ysum, dirsumtime from archive_day_wind where dateTime>1606780800;

This will give us the ingredients to the plot for dates after 1-Dec-2020





--
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 weewx-user+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/weewx-user/9aa6d4a4-8d32-4709-b1e5-b11e24a9048fn%40googlegroups.com.

jerry...@gmail.com

unread,
Jan 21, 2021, 10:36:48 PM1/21/21
to weewx-user
I just realized the python 3.9.1 path was wrong for pip and configobj leading to mismatched versions.  I corrected and will let it run overnight and check the yearwindvec tomorrow.  

jerry...@gmail.com

unread,
Jan 22, 2021, 11:13:45 PM1/22/21
to weewx-user
python 3.9.1 issues corrected.  No effect on yearwindvec.  Here's sql dump
└─[$] <> sqlite3 weewx.sdb
SQLite version 3.32.3 2020-06-18 14:16:19
Enter ".help" for usage hints.
sqlite> select dateTime, datetime(dateTime,'unixepoch','localtime'), xsum, ysum, dirsumtime from archive_day_wind where dateTime>1606780800;
1606809600|2020-12-01 00:00:00|-130203.553519314|151249.611011778|288
1606896000|2020-12-02 00:00:00|-52187.9947583369|334558.809337536|288
1606982400|2020-12-03 00:00:00|-153080.843814849|234123.104596637|288
1607068800|2020-12-04 00:00:00|-99420.8960079433|191113.904386128|288
1607155200|2020-12-05 00:00:00|-190256.166535543|-63997.1159412606|288
1607241600|2020-12-06 00:00:00|-34666.8634217707|-2021.71578460231|288
1607328000|2020-12-07 00:00:00|30124.3625862335|579428.027105184|288
1607414400|2020-12-08 00:00:00|-190910.758642127|109709.290467476|288
1607500800|2020-12-09 00:00:00|117876.621596901|360564.616051966|288
1607587200|2020-12-10 00:00:00|-110801.296843873|-95429.4246456933|288
1607673600|2020-12-11 00:00:00|-43729.9472371972|-309888.485094482|288
1607760000|2020-12-12 00:00:00|220205.009420536|41034.5716043916|288
1607846400|2020-12-13 00:00:00|-244171.679762325|-169645.365425769|288
1607932800|2020-12-14 00:00:00|-102395.07323691|169918.397158235|288
1608019200|2020-12-15 00:00:00|-22417.9273202652|19293.1247338471|288
1608105600|2020-12-16 00:00:00|-139024.644156649|78612.9897242719|288
1608192000|2020-12-17 00:00:00|-568165.92865951|130159.284577316|288
1608278400|2020-12-18 00:00:00|-27478.8703463201|104361.205410177|288
1608364800|2020-12-19 00:00:00|36037.438769948|378529.578694131|288
1608451200|2020-12-20 00:00:00|60841.5285463173|560381.729354686|288
1608537600|2020-12-21 00:00:00|-69829.7825072144|451146.231629289|288
1608624000|2020-12-22 00:00:00|12361.5448934334|195530.536831909|288
1608710400|2020-12-23 00:00:00|308287.862067983|318022.906362218|288
1608796800|2020-12-24 00:00:00|38007.7631483106|282472.618348279|288
1608883200|2020-12-25 00:00:00|-17230.6374395907|-595796.408608539|288
1608969600|2020-12-26 00:00:00|-415239.498049725|-162860.386849611|288
1609056000|2020-12-27 00:00:00|171270.104136666|240892.576970562|288
1609142400|2020-12-28 00:00:00|151298.874931467|336150.260498979|288
1609228800|2020-12-29 00:00:00|-44868.0593009285|72292.1745354697|288
1609315200|2020-12-30 00:00:00|-61615.9919150173|-370520.144783963|288
1609401600|2020-12-31 00:00:00|-124311.997370602|240223.949666045|288
1609488000|2021-01-01 00:00:00|-122534.326989786|-205708.575737604|288
1609574400|2021-01-02 00:00:00|21010.6867484957|-24099.0447729012|35271
1609660800|2021-01-03 00:00:00|-2516.97333745751|-176446.187437961|86400
1609747200|2021-01-04 00:00:00|-294785.350809428|-581263.937648814|86400
1609833600|2021-01-05 00:00:00|7324.35652411998|286084.756333686|86400
1609920000|2021-01-06 00:00:00|23910.1472753193|114969.099078222|86400
1610006400|2021-01-07 00:00:00|50945.657891678|228090.123829009|86400
1610092800|2021-01-08 00:00:00|-27376.7331763921|86157.7738906022|86400
1610179200|2021-01-09 00:00:00|-85804.0547954349|85044.0362438775|86400
1610265600|2021-01-10 00:00:00|154585.773517962|153764.917574933|86400
1610352000|2021-01-11 00:00:00|-74745.9956412178|396962.09383053|86400
1610438400|2021-01-12 00:00:00|-1989.71958901631|9871.02575870456|86400
1610524800|2021-01-13 00:00:00|22038.68095019|57482.6778240007|86400
1610611200|2021-01-14 00:00:00|-37247.3304058338|286868.83455787|86400
1610697600|2021-01-15 00:00:00|-76218.5400205464|308094.466824569|86400
1610784000|2021-01-16 00:00:00|-83608.8628539001|-22767.825453113|86400
1610870400|2021-01-17 00:00:00|-143674.811557712|92316.4065950163|86400
1610956800|2021-01-18 00:00:00|-44308.7846046671|662547.272893248|86400
1611043200|2021-01-19 00:00:00|133987.682574905|850156.22335851|86400
1611129600|2021-01-20 00:00:00|-74251.0826590378|135628.796484244|86400
1611216000|2021-01-21 00:00:00|-280128.622855439|-265275.783959067|86400
1611302400|2021-01-22 00:00:00|-307496.368251027|-229512.538746149|53700
sqlite> 
from Seasons skin.conf
[ImageGenerator]

    # This section lists all the images to be generated, what SQL types are to
    # be included in them, along with many plotting options. There is a default
    # for almost everything. Nevertheless, values for most options are included
    # to make it easy to see and understand the options.
    #
    # Fonts can be anything accepted by the Python Imaging Library (PIL), which
    # includes truetype (.ttf), or PIL's own font format (.pil). See
    # details.  Note that "font size" is only used with truetype (.ttf)
    # fonts. For others, font size is determined by the bit-mapped size,
    # usually encoded in the file name (e.g., courB010.pil). A relative path
    # for a font is relative to the SKIN_ROOT.  If a font cannot be found,
    # then a default font will be used.
    #
    # Colors can be specified any of three ways:
    #   1. Notation 0xBBGGRR;
    #   2. Notation #RRGGBB; or
    #   3. Using an English name, such as 'yellow', or 'blue'.
    # So, 0xff0000, #0000ff, or 'blue' would all specify a pure blue color.
    
    image_width = 500
    image_height = 180
    image_background_color = 0xffffff
    
    chart_background_color = 0xffffff
    chart_gridline_color = 0xd0d0d0

    # Setting to 2 or more might give a sharper image with fewer jagged edges
    anti_alias = 1

    top_label_font_path = font/OpenSans-Bold.ttf
    top_label_font_size = 14

    unit_label_font_path = font/OpenSans-Bold.ttf
    unit_label_font_size = 12
    unit_label_font_color = 0x787878

    bottom_label_font_path = font/OpenSans-Regular.ttf
    bottom_label_font_size = 12
    bottom_label_font_color = 0x787878
    bottom_label_offset = 3

    axis_label_font_path = font/OpenSans-Regular.ttf
    axis_label_font_size = 10
    axis_label_font_color = 0x787878
    
    # Options for the compass rose, used for progressive vector plots
    rose_label = N
    rose_label_font_path = font/OpenSans-Bold.ttf
    rose_label_font_size  = 10
    rose_label_font_color = 0x222222

    # Default colors for the plot lines. These can be overridden for
    # individual lines using option 'color'.
    chart_line_colors = 0xb48242, 0x4242b4, 0x42b442, 0xb4b442, 0xb442b4
    
    # Default fill colors for bar charts. These can be overridden for
    # individual bar plots using option 'fill_color'.
    chart_fill_colors = 0xc4b272, 0x7272c4, 0x72c472, 0xc4c472, 0xc472c4
    
    # Type of line. Options are 'solid' or 'none'.
    line_type = 'solid'

    # Size of marker in pixels
    marker_size = 8

    # Type of marker. Options are 'cross', 'x', 'circle', 'box', or 'none'.
    marker_type ='none'
        
    # The following option merits an explanation. The y-axis scale used for
    # plotting can be controlled using option 'yscale'. It is a 3-way tuple,
    # with values (ylow, yhigh, min_interval). If set to "None", a parameter is
    # set automatically, otherwise the value is used. However, in the case of
    # min_interval, what is set is the *minimum* y-axis tick interval. 
    yscale = None, None, None

    # For progressive vector plots, you can choose to rotate the vectors.
    # Positive is clockwise.
    # For my area, westerlies overwhelmingly predominate, so by rotating
    # positive 90 degrees, the average vector will point straight up.
    vector_rotate = 90

    # This defines what fraction of the difference between maximum and minimum
    # horizontal chart bounds is considered a gap in the samples and should not
    # be plotted.
    line_gap_fraction = 0.01

    # This controls whether day/night bands will be shown. They only look good
    # on plots wide enough to show individual days such as day and week plots.
    show_daynight = true
    # These control the appearance of the bands if they are shown.
    # Here's a monochrome scheme:
    daynight_day_color   = 0xfffafd
    daynight_night_color = 0xe2dfdf
    daynight_edge_color  = 0xd8d8e0
    # Here's an alternative, using a blue/yellow tint:
    #daynight_day_color   = 0xf8ffff
    #daynight_night_color = 0xfff8f8
    #daynight_edge_color  = 0xf8f8ff

    # What follows is a list of subsections, each specifying a time span, such
    # as a day, week, month, or year. There's nothing special about them or
    # their names: it's just a convenient way to group plots with a time span
    # in common. You could add a time span [[biweek_images]] and add the
    # appropriate time length, aggregation strategy, etc., without changing
    # any code.
    #
    # Within each time span, each sub-subsection is the name of a plot to be
    # generated for that time span. The generated plot will be stored using
    # that name, in whatever directory was specified by option 'HTML_ROOT'
    # in weewx.conf.
    #
    # With one final nesting (four brackets!) is the sql type of each line to
    # be included within that plot.
    #
    # Unless overridden, leaf nodes inherit options from their parent
    
    # Default plot parameters
    plot_type = line
    aggregate_type = none
    width = 1
    time_length = 86400 # 24 hours

    [[day_images]]
        x_label_format = %H:%M
        bottom_label_format = %x %X
        time_length = 97200 # 27 hours
        
        [[[daybarometer]]]
            [[[[barometer]]]]
        
        [[[daytempdew]]]
            [[[[outTemp]]]]
            [[[[dewpoint]]]]
        
        [[[daytempfeel]]]
            [[[[windchill]]]]
            [[[[heatindex]]]]

        [[[daytempin]]]
            [[[[inTemp]]]]

        [[[daytemp]]]
            yscale = None, None, 0.5
            [[[[extraTemp1]]]]
            [[[[extraTemp2]]]]
            [[[[extraTemp3]]]]

        [[[dayhum]]]
            [[[[outHumidity]]]]
        
        [[[dayrain]]]
            # Make sure the y-axis increment is at least 0.02 for the rain plot
            yscale = None, None, 0.02
            plot_type = bar
            [[[[rain]]]]
                aggregate_type = sum
                aggregate_interval = 3600
                label = Rain (hourly total)
        
        [[[daywind]]]
            [[[[windSpeed]]]]
            [[[[windGust]]]]
        
        [[[daywinddir]]]
            # Hardwire in the y-axis scale for wind direction
            yscale = 0.0, 360.0, 45.0
            line_type = None
            marker_type = box
            marker_size = 2
            [[[[windDir]]]]
    
        [[[daywindvec]]]
            [[[[windvec]]]]
                plot_type = vector

        [[[dayradiation]]]
            [[[[radiation]]]]

        [[[dayuv]]]
#            yscale = 0, 16, 1
            [[[[UV]]]]

        [[[dayrx]]]
            yscale = 0.0, 100.0, 25.0
            [[[[rxCheckPercent]]]]

        [[[dayvolt]]]
            [[[[consBatteryVoltage]]]]
            [[[[heatingVoltage]]]]
            [[[[supplyVoltage]]]]
            [[[[referenceVoltage]]]]

    [[week_images]]
        x_label_format = %d
        bottom_label_format = %x %X
        time_length = 604800 # 7 days
        aggregate_type = avg
        aggregate_interval = 3600
        
        [[[weekbarometer]]]
            [[[[barometer]]]]
        
        [[[weektempdew]]]
            [[[[outTemp]]]]
            [[[[dewpoint]]]]
        
        [[[weektempfeel]]]
            [[[[windchill]]]]
            [[[[heatindex]]]]
        
        [[[weektempin]]]
            [[[[inTemp]]]]

        [[[weektemp]]]
            yscale = None, None, 0.5
            [[[[extraTemp1]]]]
            [[[[extraTemp2]]]]
            [[[[extraTemp3]]]]

        [[[weekhum]]]
            [[[[outHumidity]]]]

        [[[weekrain]]]
            yscale = None, None, 0.02
            plot_type = bar
            [[[[rain]]]]
                aggregate_type = sum
                aggregate_interval = 86400
                label = Rain (daily total)
        
        [[[weekwind]]]
            [[[[windSpeed]]]]
            [[[[windGust]]]]
                aggregate_type = max
        
        [[[weekwinddir]]]
            yscale = 0.0, 360.0, 45.0
            line_type = None
            marker_type = box
            marker_size = 2
            [[[[windDir]]]]
    
        [[[weekwindvec]]]
            [[[[windvec]]]]
                plot_type = vector

        [[[weekradiation]]]
            [[[[radiation]]]]

        [[[weekuv]]]
#            yscale = 0, 16, 1
            [[[[UV]]]]

        [[[weekrx]]]
            yscale = 0.0, 100.0, 25.0
            [[[[rxCheckPercent]]]]

        [[[weekvolt]]]
            [[[[consBatteryVoltage]]]]
            [[[[heatingVoltage]]]]
            [[[[supplyVoltage]]]]
            [[[[referenceVoltage]]]]

    [[month_images]]
        x_label_format = %d
        bottom_label_format = %x %X
        time_length = 2592000 # 30 days
        aggregate_type = avg
        aggregate_interval = 10800 # 3 hours
        show_daynight = false
        
        [[[monthbarometer]]]
            [[[[barometer]]]]
        
        [[[monthtempdew]]]
            [[[[outTemp]]]]
            [[[[dewpoint]]]]
        
        [[[monthtempfeel]]]
            [[[[windchill]]]]
            [[[[heatindex]]]]
        
        [[[monthtempin]]]
            [[[[inTemp]]]]

        [[[monthtemp]]]
            yscale = None, None, 0.5
            [[[[extraTemp1]]]]
            [[[[extraTemp2]]]]
            [[[[extraTemp3]]]]

        [[[monthhum]]]
            [[[[outHumidity]]]]

        [[[monthrain]]]
            yscale = None, None, 0.02
            plot_type = bar
            [[[[rain]]]]
                aggregate_type = sum
                aggregate_interval = 86400
                label = Rain (daily total)
        
        [[[monthwind]]]
            [[[[windSpeed]]]]
            [[[[windGust]]]]
                aggregate_type = max
        
        [[[monthwinddir]]]
            yscale = 0.0, 360.0, 45.0
            line_type = None
            marker_type = box
            marker_size = 2
            [[[[windDir]]]]
    
        [[[monthwindvec]]]
            [[[[windvec]]]]
                plot_type = vector

        [[[monthradiation]]]
            [[[[radiation]]]]

        [[[monthuv]]]
#            yscale = 0, 16, 1
            [[[[UV]]]]

        [[[monthrx]]]
            yscale = 0.0, 100.0, 25.0
            [[[[rxCheckPercent]]]]

        [[[monthvolt]]]
            [[[[consBatteryVoltage]]]]
            [[[[heatingVoltage]]]]
            [[[[supplyVoltage]]]]
            [[[[referenceVoltage]]]]

    [[year_images]]
        x_label_format = %m/%d
        bottom_label_format = %x %X
        time_length = 31536000 # 365 days
        aggregate_type = avg
        aggregate_interval = 86400
        show_daynight = false
        
        [[[yearbarometer]]]
            [[[[barometer]]]]

        [[[yeartempdew]]]
            [[[[outTemp]]]]
            [[[[dewpoint]]]]
        
        [[[yeartempfeel]]]
            [[[[windchill]]]]
            [[[[heatindex]]]]
        
        [[[yeartempin]]]
            [[[[inTemp]]]]

        [[[yeartemp]]]
            yscale = None, None, 0.5
            [[[[extraTemp1]]]]
            [[[[extraTemp2]]]]
            [[[[extraTemp3]]]]

        [[[yearhum]]]
            [[[[outHumidity]]]]
        
        [[[yearrain]]]
            yscale = None, None, 0.02
            plot_type = bar
            [[[[rain]]]]
                aggregate_type = sum
                # aggregate_interval = 2629800 # the length of a nominal month
                aggregate_interval = 604800    # one week
                label = Rain (weekly total)
                
        [[[yearwind]]]
            [[[[windSpeed]]]]
            [[[[windGust]]]]
                aggregate_type = max
        
        [[[yearwinddir]]]
            yscale = 0.0, 360.0, 45.0
            line_type = None
            marker_type = box
            marker_size = 2
            [[[[windDir]]]]

        [[[yearwindvec]]]
            [[[[windvec]]]]
                plot_type = vector

        [[[yearradiation]]]
            [[[[radiation]]]]

        [[[yearuv]]]
#            yscale = 0, 16, 1
            [[[[UV]]]]

        [[[yearrx]]]
            yscale = 0.0, 100.0, 25.0
            [[[[rxCheckPercent]]]]

        [[[yearvolt]]]
            [[[[consBatteryVoltage]]]]
            [[[[heatingVoltage]]]]
            [[[[supplyVoltage]]]]
            [[[[referenceVoltage]]]]

        # Plot of high/low temperatures
        [[[yearhilow]]]
            [[[[hi]]]]
                data_type = outTemp
                aggregate_type = max
                label = High
            [[[[low]]]]
                data_type = outTemp
                aggregate_type = min
                label = Low Temperature

        # A progressive vector plot of daily gust vectors overlayed
        # with the daily wind average would look something like this:
#        [[[yeargustvec]]]
#            [[[[windvec]]]]
#                plot_type = vector
#                aggregate_type = avg
#            [[[[windgustvec]]]]
#                plot_type = vector
#                aggregate_type = max


###############################################################################

[Generators]
        # The list of generators that are to be run:
        generator_list = weewx.cheetahgenerator.CheetahGenerator, weewx.imagegenerator.ImageGenerator, weewx.reportengine.CopyGenerator

Tom Keffer

unread,
Jan 22, 2021, 11:24:40 PM1/22/21
to weewx-user
I see the problem, but I'm not quite sure what caused it. I'll have to do some experimentation.

In the meantime, you can fix things by rebuilding the daily summaries.

sudo wee_database --drop-daily
sudo wee_database --rebuild-daily



Tom Keffer

unread,
Jan 22, 2021, 11:34:09 PM1/22/21
to weewx-user
Jerry, two other questions: 

1. What version of WeeWX did you use before moving to V4.3?
2. When did you do the upgrade?

jerry...@gmail.com

unread,
Jan 23, 2021, 12:04:03 AM1/23/21
to weewx-user
I upgraded from v4.2 and installed v4.3b(final beta) on Jan 2, then upgraded to the v4.3 release on Jan 4

Tom Keffer

unread,
Jan 23, 2021, 12:21:48 AM1/23/21
to weewx-user

jerry...@gmail.com

unread,
Jan 23, 2021, 1:51:27 AM1/23/21
to weewx-user
mmm.  --drop-daily ran successfully, but --rebuild-daily ran for 10 min or so, then hung on 2020-12-02
┌─[****@weather] - [~/weewx/archive] - [Fri Jan 22, 16:11]
└─[$] <> sudo ../bin/wee_database --drop-daily
Using configuration file /Users/****/weewx/weewx.conf
Using database binding 'wx_binding', which is bound to database 'archive_sqlite'
Proceeding will delete all your daily summaries from database 'weewx.sdb'
Are you sure you want to proceed (y/n)? y
Dropping daily summary tables from 'weewx.sdb' ... 
Daily summary tables dropped from database 'weewx.sdb' in 1.43 seconds
┌─[****@weather] - [~/weewx/archive] - [Fri Jan 22, 16:11]
└─[$] <> sudo ../bin/wee_database --rebuild-daily
Using configuration file /Users/****/weewx/weewx.conf
Using database binding 'wx_binding', which is bound to database 'archive_sqlite'
All daily summaries will be rebuilt.
Proceed (y/n)? y
Rebuilding daily summaries in database 'weewx.sdb' ...
Records processed: 883000; time: 2020-12-02 07:05:00 PST (1606921500)


Tom Keffer

unread,
Jan 23, 2021, 1:54:51 AM1/23/21
to weewx-user
Can you try it again?

I have to confess, I've never tried this under MacOS.

jerry...@gmail.com

unread,
Jan 23, 2021, 1:56:48 AM1/23/21
to weewx-user
Would you recommend trying to run repair first?

jerry...@gmail.com

unread,
Jan 23, 2021, 2:29:20 AM1/23/21
to weewx-user
Tried running rebuild a second time.  Finished in 1 second and reported it was done.

└─[$] <> sudo ../bin/wee_database --rebuild-daily
Password:
Using configuration file /Users/****/weewx/weewx.conf
Using database binding 'wx_binding', which is bound to database 'archive_sqlite'
All daily summaries will be rebuilt.
Proceed (y/n)? y
Rebuilding daily summaries in database 'weewx.sdb' ...
Daily summaries up to date in 'weewx.sdb'

I'll let it run overnight again and see what happens.

jerry...@gmail.com

unread,
Jan 23, 2021, 4:59:54 PM1/23/21
to weewx-user
Solved.  After rebuilding daily, yearwindvec scale is back to normal.
Thanks, Tom.

Reply all
Reply to author
Forward
0 new messages