6.11   "skin.conf.cydia" As-Distributed Configuration

###############################################################################
# SEASONS SKIN CONFIGURATION FILE                                             #
# Copyright (c) 2018 Tom Keffer <tkeffer@gmail.com> and Matthew Wall          #
# See the file LICENSE.txt for your rights.                                   #
###############################################################################

# ccr . 2019 Feb 12 . Upgrade to weeWX 3.9.1.
# ccr . 2019 Jan 09 . Provide other GDD calculation methods.
# ccr . 2018 Mar 20 . Add copy_once Cydia/cydia.css.
# ccr . 2018 Mar 06 . CydiaGenerator parms.
# ccr . 2018 Feb 14 . Cydia *.csv report.
# ccr . 2017 Sep 26 . Customization.

skin_semantics = 2

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

# The following section is for any extra tags that you want to be available in the templates
[Extras]

    # This radar image would be available as $Extras.radar_img
    #radar_img = http://radar.weather.gov/ridge/lite/N0R/RTX_loop.gif
    # This URL will be used as the image hyperlink:
    #radar_url = http://radar.weather.gov/ridge/radar.php?product=NCR&rid=RTX&loop=yes

    # Similar to radar, but for satellite image.
    #satellite_img = http://images.intellicast.com/WxImages/SatelliteLoop/hipacsat_None_anim.gif
    #satellite_url = http://images.intellicast.com/WxImages/SatelliteLoop/hipacsat_None_anim.gif

    # To display a map, enter an API key for google maps
    #google_maps_apikey = xxx

    # If you have a Google Analytics ID, uncomment and edit the next line, and
    # the analytics code will be included in your generated HTML files:
    #googleAnalyticsId = UA-12345678-1

    radar_img = http://images.intellicast.com/WxImages/_200w/Radar/usa.gif  # 2017 Sep 26
    radar_url = http://www.intellicast.com/National/Radar/Current.aspx?location=USMN0657&animate=true

    cydia_1_img = "Cydia/C_pomonella_First_Flight.png"  # 2019 Jan 26
    cydia_1_url = "Cydia/C_pomonella_First_Flight.html"
    
    cydia_2_img = "Cydia/C_pomonella_Second_Flight.png"  # 2019 Jan 26
    cydia_2_url = "Cydia/C_pomonella_Second_Flight.html"
    
###############################################################################

[Labels]

    # Override some labels. No need to identify these as a "Battery"
    # or "Voltage", because that is included in the template.
    [[Generic]]
        txBatteryStatus      = Transmitter
        windBatteryStatus    = Wind
        rainBatteryStatus    = Rain
        outTempBatteryStatus = Outside Temperature
        inTempBatteryStatus  = Inside Temperature
        consBatteryVoltage   = Console
        heatingVoltage       = Heating
        supplyVoltage        = Supply
        referenceVoltage     = Reference

        # Some specialized labels
        rain_today           = Rain Today
        wind                 = Wind


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

# The CheetahGenerator creates files from templates.  This section
# specifies which files will be generated from which template.

[CheetahGenerator]

    # Possible encodings are 'html_entities', 'utf8', or 'strict_ascii'
    encoding = html_entities

    [[SummaryByMonth]]
        # Reports that summarize "by month"
        [[[NOAA_month]]]
            encoding = strict_ascii
            template = NOAA/NOAA-YYYY-MM.txt.tmpl

    [[SummaryByYear]]
        # Reports that summarize "by year"
        [[[NOAA_year]]]
            encoding = strict_ascii
            template = NOAA/NOAA-YYYY.txt.tmpl
        
        [[[CydiaDDData]]]  # 2018 Feb 14
            # This creates a *.csv file used by the CydiaGenerator.
            encoding = strict_ascii
        template = Cydia/NOAA-YYYY.csv.tmpl
            
    [[ToDate]]
        # Reports that show statistics "to date", such as day-to-date,
        # week-to-date, month-to-date, etc.
        [[[index]]]
            template = index.html.tmpl
        [[[statistics]]]
            template = statistics.html.tmpl
        [[[telemetry]]]
            template = telemetry.html.tmpl
        [[[tabular]]]
            template = tabular.html.tmpl
        [[[celestial]]]
            template = celestial.html.tmpl
            # Uncomment the following to have WeeWX generate a celestial page only once an hour:
            # stale_age = 3600
        [[[RSS]]]
            template = rss.xml.tmpl
            
###############################################################################

# The CopyGenerator copies files from one location to another.

[CopyGenerator]

    # List of files to be copied only the first time the generator runs
    copy_once = seasons.css, seasons.js, favicon.ico, font/*.woff, font/*.woff2

    # List of files to be copied each time the generator runs
    # copy_always = 
        

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

# The ImageGenerator creates image plots of data.

[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
    # http://www.pythonware.com/library/pil/handbook/imagefont.htm for more
    # 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-Regular.ttf
    rose_label_font_size  = 9
    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.03  # 2018 Feb 12

    # 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

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

[CydiaGenerator]  # 2018 Mar 06
    
    # This section provides options to CydiaGenerator, which predicts
    # development stages of various insects.  The generator produces a
    # *.png graph and an *.html page for each species, below.  The
    # graph inherits defaults from [[year_images]] of
    # [ImageGenerator], above.  These may be overridden.

    # CydiaGenerator reads the *.csv file, which is output by
    # CheetahGenerator according to Cydia/YTD.csv.tmpl, above.  This
    # *.csv file contains daily max/min temps, which are needed for
    # the special growing degree-day (GDD) models implemented by
    # CydiaGenerator.  These models are quite different from and ought
    # not to be confused with degree-day (DD) models used by
    # architects and building-construction engineers.  CydiaGenerator
    # performs similar calculations for each species and creates a
    # graph and a report for each one.  Species may differ by
    # temperature thresholds and cutoffs between which development can
    # occur and for which GDDs are accumulated.  CydiaGenerator
    # projects a treatment schedule for each species, based on the
    # year-to-date accumulation of GDDs.

    image_width = 600
    image_height = 360
    plot_type = line
    x_label_format = "%m '%y"
    top_label_font_size = 18
    unit_label_font_size = 12
    bottom_label_font_size = 12
    axis_label_font_size = 12
    horizon__font_color = 0x0000ff
    horizon_top_color = 0xbbbbff
    horizon_bottom_color = 0xdfdfdf
    horizon_edge_color = 0x0000ff
    horizon_gradient = 20
    horizon_label_font_path = /usr/share/fonts/truetype/freefont/FreeMonoBold.ttf
    horizon_label_font_size = 12
    horizon_label_font_color = 0x0000f0
    horizon_label_offset = 5, -15

    [[Cydia/C_pomonella_First_Flight]]

        # Biofix is the cumulative growing degree-days at which the
        # first sustained capture occurs of male codling moths in
        # pheromone traps.

        # Insect development has been shown to be linearly dependent
        # on various models of cumulative growing degree-days,
        # depending on species.  The benefit of the growing
        # degree-days models of insect development is that they are
        # more or less consistently predictive in various locations
        # and in succeeding years.  The growing degree-days
        # calculations use the max and min temps for each day.  They
        # are thus mostly immune to missing readings.  In fact,
        # precise calculation of growing degree-days is probably less
        # important than proper interpretation of results and prompt
        # application of suggested insect controls.

        # In terms of codling moth, the estimated Biofix, the
        # threshold, the cutoff, and the offsets, below, are generally
        # applicable to most apple-growing regions of the country.
        # You are encouraged to check with your County Agent of the
        # United States Department of Agriculture Cooperative
        # Extension for exact model parameters for your location.

        # The usual method of calculation for codling moth is
        # gdd_single_sine_horizontal_cutoff.  Other methods are:
        # dd_conventional, gdd_single_sine_vertical_cutoff,
        # gdd_single_sine_no_cutoff, and
        # gdd_single_sine_intermediate_cutoff.

        start_date = None  # Default New Year's Day.
        end_date = None  # Default today.
        label = Cumulative GDD -- C. pomonella (1st Flight)
        threshold = 50, degree_F
        cutoff = 88, degree_F
        method = gdd_single_sine_horizontal_cutoff  # 2019 Jan 08
        biofix_estimated = 175, degree_F_day
        biofix_actual = None

        [[[Offsets_from_Biofix]]]

            [[[[Egg Laying]]]]
                offset = 100, degree_F_day

            [[[[Egg Hatching]]]]
                offset = 250, degree_F_day

    [[Cydia/C_pomonella_Second_Flight]]

        start_date = None  # Default New Year's Day.
        end_date = None  # Default today.
        label = Cumulative GDD -- C. pomonella (2nd Flight)
        threshold = 50, degree_F
        cutoff = 88, degree_F
        method = gdd_single_sine_horizontal_cutoff
        biofix_estimated = 1175, degree_F_day
        biofix_actual = None

        [[[Offsets_from_Biofix]]]

            [[[[Egg Laying]]]]
                offset = 100, degree_F_day

            [[[[Egg Hatching]]]]
                offset = 250, degree_F_day

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

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