my graph for outdoors variables temp, humidity, are plotting dots not 
lines.  the gap_fraction = 0.3 which is very large.  the archive interval = 
300 which could be more.  my driver is based on the rtl_433/rtl-sdr 
driver.  the weewx server is on a raspberry pi connected to a hub which is 
connected both to an arduino with a temp/humidity/pressure sensor for 
indoors and the hub is also connected to the RTL-SDR radio receiver which 
receives packets from device 40 (Acurite Atlas).  The modified driver has 
three AsyncInput  threads reading stdin/stdout from rtl_433 and also the 
ttyACM0 (serial over USB) from the arduino.  It all works but the 
AsyncInput class is much slower when there are three streams being read by 
the raspberry pi.  I am getting packets in debug mode of weewx somewhat 
slower than the respective streams.

So to make a long story short
(1) should I divide the driver into two separate drivers and run one as a 
service like the example in the "adding a new variable to weewx".
(2) I get a lot of nulls in the database.  the atlas sends three separate 
packets for a complete set of data.  does this cause the gaps / separate 
points not lines in plots?

-- 
You received this message because you are subscribed to the Google Groups 
"weewx-development" 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-development/05550ea3-3201-40df-b8f9-5903a9d81502n%40googlegroups.com.
# WEEWX CONFIGURATION FILE
#
# Copyright (c) 2009-2022 Tom Keffer <[email protected]>
# See the file LICENSE.txt for your rights.

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

# This section is for general configuration information.

# Set to 1 for extra debug info, otherwise comment it out or set to zero
# garberw fixme turned debugging on
debug = 0
# debug = 1

# Root directory of the weewx data file hierarchy for this station
WEEWX_ROOT = /

# Whether to log successful operations. May get overridden below.
# garberw
# log_success = True
log_success = False

# Whether to log unsuccessful operations. May get overridden below.
log_failure = True
# log_failure = False

# How long to wait before timing out a socket (FTP, HTTP) connection    (note 
this is from version 4.6.1 may not apply here garberw)
socket_timeout = 20

# Do not modify this. It is used when installing and updating weewx.
version = 4.7.0

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

#   This section is for information about the station.

[Station]

    # Description of the station location
    # garberw
    #    location = "My Little Town, Oregon"
    location = USA; CA; San Rafael; Lucas Valley; Creekside Dr.; Atlas;

    # Latitude in decimal degrees. Negative for southern hemisphere
    # garberw
    # latitude = 0.00
    latitude = 38.03511971394813
    # Longitude in decimal degrees. Negative for western hemisphere.
    # garberw
    # longitude = 0.00
    longitude = -122.5868406517824

    # Altitude of the station, with the unit it is in. This is used only
    # if the hardware cannot supply a value.
    # garberw
    # altitude = 700, foot    # Choose 'foot' or 'meter' for unit
    # garberw ground
    # altitude = 192, foot    # Choose 'foot' or 'meter' for unit
    # garberw ground fixme add 13' or so for pole acurite atlas is on
    # 63 meters
    altitude = 207, foot    # Choose 'foot' or 'meter' for unit

    # Set to type of station hardware. There must be a corresponding stanza
    # in this file, which includes a value for the 'driver' option.
    # garberw
    # station_type = Simulator
    station_type = SDR

    # If you have a website, you may specify an URL. This is required if you
    # intend to register your station.
    #station_url = http://www.example.com

    # The start of the rain year (1=January; 10=October, etc.). This is
    # downloaded from the station if the hardware supports it.
    rain_year_start = 1

    # Start of week (0=Monday, 6=Sunday)
    # garberw
    # week_start = 6
    week_start = 0

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

[SDR]
    # This section is for the software-defined radio driver.

    # The driver to use
    # /usr/share/weewx/user/sdr.py    --OR--
    # /usr/share/weewx/user/weewx_atlas_adafruit.py
    # driver = user.sdr
    driver = user.weewx_atlas_adafruit

    # garberw   default
    # this is configured in /etc/rtl_433/rtl_433.conf
    # cmd = rtl_433 -M utc -F json

    # garberw   added because
    # lacrosse uses freq -f 433.92M protocol -R 73 (can be listed twice -R 73 
-R 73)
    # acurite  uses freq -f 433.92M protocol -R 40
    # ambient  uses freq -f 915.??M protocol -R 78 (same as fine offset)
    # -H 30 means hop freq every 30 seconds
    # cmd = rtl_433 -f 433.92M -f 915M -H 30 -M utc -F json -R 40 -R 78

    # garberw   default
    # filename of usb port to read indoor temperature; humidity; pressure;
    # weewx server usb port /dev/ttyACMwa connected to arduino with program
    # /home/garberw/Atlas/weather_atlas/weather_atlas.ino
    # fname_thpusb = /dev/ttyACMwa

    # garberw
    # fixme
    # log_unknown_sensors = False
    log_unknown_sensors = True
    # garberw
    # fixme
    # log_unmapped_sensors = False
    log_unmapped_sensors = True
    # garberw added sensor_map
    [[sensor_map]]
        # calculated begin ====================================== from 
[StdWXCalculate]
        # shown based on /usr/share/weewx/weewx/wxformulas.py
        # shown based on /usr/share/weewx/weewx/wxxtypes.py
        # which can be derived from (inTemp inHumidity outTemp outHumidity 
altitude);
        # not anything else like rain or wind;
        ###### T = temperature
        ###### H = relative humidity
        ###### V = wind speed
        ###### A = altitude
        ###### P = pressure  ## basic or derived from B
        ###### B = barometer ## basic or derived from P
        ###### W = rain
        ###### LA= latitude
        ###### LO= longitude
        ### pressure   (T,H,B)   ## either P or B;
        ### altimeter  (P)
        ### appTemp    (T,H,V)
        ### barometer  (P,A)     ## either P or B;
        ### cloudbase  (T,H,A)
        ### dewpoint   (T,H)
        ### ET         (many)    ## ????
        ### heatindex  (T,H)
        ### humidex    (T,H)
        ### inDewpoint (T,H)
        ### maxSolarRad(LA,LO,A)
        ### rainRate   (W)
        ### windchill  (T,V)
        ### windrun    (V)
        # calculated end ======================================
        # driver weewx-sdr and rtl_433 output begin 
======================================
        # assign to fields of database in 
/usr/share/weewx/user/garberw_schema.py
        # Fine Offset WH32B ============================ INSIDE; has pressure P;
        # Ambient Weather WH32B = Fine Offset WH32B
        # fixme changed 80.FOWH32BPacket to 202.FOWH32BPacket
        #   switching from WH25 to WH32B 2022.08.09
        # inTempBatteryStatus = battery.202.FOWH32BPacket
        # inTemp = temperature.202.FOWH32BPacket
        # inHumidity = humidity.202.FOWH32BPacket
        ## fixme check this is actually pressure and not barometer
        # pressure = pressure.202.FOWH32BPacket
        ## inRssi = rssi.202.FOWH32BPacket
        ## inSnr = snr.202.FOWH32BPacket
        ## inNoise = noise.202.FOWH32BPacket

        # AcuRite Atlas ============================ OUTSIDE
        # this id was 0229; can use wildcard *;
        outTempBatteryStatus = battery.*.AcuriteAtlasPacket
        outTemp = temperature.*.AcuriteAtlasPacket
        outHumidity = humidity.*.AcuriteAtlasPacket
        luminosity = lux.*.AcuriteAtlasPacket
        # fixme need conversion; this is made-up;
        # radiation = lux.*.AcuriteAtlasPacket
        rain_total = rain_total.*.AcuriteAtlasPacket
        UV = uv.*.AcuriteAtlasPacket
        windSpeed = wind_speed.*.AcuriteAtlasPacket
        windDir = wind_dir.*.AcuriteAtlasPacket
        # outRssi = rssi.*.AcuriteAtlasPacket
        # outSnr = snr.*.AcuriteAtlasPacket
        # outNoise = noise.*.AcuriteAtlasPacket
        rxCheckPercent = snr.*.AcuriteAtlasPacket
        # AcuriteAtlas with Adafruit extension ==================== INSIDE
        inTemp = inTemp.*.AcuriteAtlasPacket
        inHumidity = inHumidity.*.AcuriteAtlasPacket
        # fixme check this is actually pressure and not barometer
        pressure = pressure.*.AcuriteAtlasPacket
        altitude = altitude.*.AcuriteAtlasPacket
        gas_resistance = gas_resistance.*.AcuriteAtlasPacket
        iaq = iaq.*.AcuriteAtlasPacket
    # driver weewx-sdr and rtl_433 output end 
======================================
    [[deltas]]
        rain = rain_total

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

[Simulator]
    # This section is for the weewx weather station simulator

    # The time (in seconds) between LOOP packets.
    loop_interval = 2.5

    # The simulator mode can be either 'simulator' or 'generator'.
    # Real-time simulator. Sleep between each LOOP packet.
    mode = simulator
    # Generator.  Emit LOOP packets as fast as possible (useful for testing).
    #mode = generator

    # The start time. Format is YYYY-mm-ddTHH:MM. If not specified, the default
    # is to use the present time.
    #start = 2011-01-01T00:00

    # The driver to use:
    driver = weewx.drivers.simulator

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

#   This section is for uploading data to Internet sites

[StdRESTful]

    # Uncomment and change to override logging for uploading services.
    # log_success = True
    # log_failure = True
    log_success = False
    log_failure = True

    [[StationRegistry]]
        # To register this weather station with weewx, set this to true,
        # then fill out option 'station_url' above.
        register_this_station = false

    [[AWEKAS]]
        # This section is for configuring posts to AWEKAS.

        # If you wish to post to AWEKAS, set the option 'enable' to true, then 
specify a username
        # and password. To guard against parsing errors, put the password in 
quotes.
        enable = false
        username = replace_me
        password = replace_me

    [[CWOP]]
        # This section is for configuring posts to CWOP.

        # If you wish to post to CWOP, set the option 'enable' to true,
        # then specify the station ID (e.g., CW1234).
        enable = false
        station = replace_me
        # If this is an APRS (radio amateur) station, specify the
        # passcode (e.g., 12345). Otherwise, ignore.
        passcode = replace_me


    [[PWSweather]]
        # This section is for configuring posts to PWSweather.com.

        # If you wish to post to PWSweather.com, set the option 'enable' to 
true, then specify a
        # station and password. To guard against parsing errors, put the 
password in quotes.
        enable = false
        station = replace_me
        password = replace_me

    [[WOW]]
        # This section is for configuring posts to WOW.

        # If you wish to post to WOW, set the option 'enable' to true, then 
specify a station and
        # password. To guard against parsing errors, put the password in quotes.
        enable = false
        station = replace_me
        password = replace_me

    [[Wunderground]]
        # This section is for configuring posts to the Weather Underground.

        # If you wish to post to the Weather Underground, set the option 
'enable' to true,  then
        # specify a station (e.g., 'KORHOODR3') and password. To guard against 
parsing errors, put
        # the password in quotes.
        enable = false
        station = replace_me
        password = replace_me

        # If you plan on using wunderfixer, set the following
        # to your API key:
        api_key = replace_me

        # Set the following to True to have weewx use the WU "Rapidfire"
        # protocol. Not all hardware can support it. See the User's Guide.
        rapidfire = False

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

#   This section specifies what reports, using which skins, to generate.

[StdReport]

    # Where the skins reside, relative to WEEWX_ROOT
    # SKIN_ROOT = /etc/weewx/skins
    SKIN_ROOT = /usr/share/weewx/user/skins

    # Where the generated reports should go, relative to WEEWX_ROOT
    # fixme
    HTML_ROOT = /var/www/html/weewx/weewx_atlas

    # Uncomment and change to override logging for reports
    # garberw
    # log_success = True
    # log_failure = True
    log_success = False
    log_failure = True

    # The database binding indicates which data should be used in reports.
    data_binding = wx_binding

    # Each of the following subsections defines a report that will be run.
    # See the customizing guide to change the units, plot types and line
    # colors, modify the fonts, display additional sensor data, and other
    # customizations. Many of those changes can be made here by overriding
    # parameters, or by modifying templates within the skin itself.

    [[SeasonsReport]]
        # The SeasonsReport uses the 'Seasons' skin, which contains the
        # images, templates and plots for the report.
        skin = Seasons
        enable = true
        # garberw added next two sections ========>
        # names for plot groups are from plot names defined in ImageGenerator 
section of
        # skin.conf e.g. daytempdew; weektempdew; monthtempdew; yeartempdew;
        [[[DisplayOptions]]]
            plot_groups = tempdew, hum, tempfeel, tempin, humin, barometer, 
wind, winddir, windvec, UV, radiation, ET, gas_resistance, iaq, rain, tempext, 
humext, tempext2, humext2, lightning, templeaf, wetleaf, tempsoil, moistsoil, pm
        [[[ImageGenerator]]]
            # garberw default
            # vector_rotate = 90
            vector_rotate = 0
            # garberw do not plot gaps >= 0.05 * 24hr
            # garberw default
            # line_gap_fraction = 0.05
            line_gap_fraction = 0.3
            # default
            # top_label_font_size = 14
            top_label_font_size = 12
            
           [[[[day_images]]]]
                # garberw undocumented; not sure if this does anything
                xscale = None, None, 1
                # garberw
                x_label_format = %H:%M
                # x_label_format = %H
                # garberw undocumented; must be > 0
                x_label_spacing = 1
                # garberw undocumented; not sure if this does anything
                # x_nticks = 16
                x_interval = 7200
                color = "#66CDAA"
                [[[[[daytempdew]]]]]
                    [[[[[[dewpoint]]]]]]
                        color = DarkGreen
                [[[[[daytempfeel]]]]]
                    [[[[[[heatindex]]]]]]
                        color = DarkGreen
                [[[[[dayrain]]]]]
                    # Make sure the y-axis increment is at least 0.02 for the 
rain plot
                    yscale = None, None, 0.02
                    [[[[[[rain]]]]]]
                        fill_color = "#000000"
                        label = AT Rain (hourly total)
                [[[[[daywind]]]]]
                    [[[[[[windGust]]]]]]
                        color = DarkGreen
                [[[[[dayET]]]]]
                    # Make sure the y-axis increment is at least 0.02 for the 
ET plot
                    yscale = None, None, 0.02
                    [[[[[[ET]]]]]]
                        label = AT Evapotranspiration (hourly total)
                [[[[[dayUV]]]]]
                    # If your radiation sensor has a bounded scale, enforce 
that here.
                    # yscale = 0, 16, 1

           [[[[week_images]]]]
                color = "#66CDAA"
                [[[[[weektempdew]]]]]
                    [[[[[[dewpoint]]]]]]
                        color = DarkGreen
                [[[[[weektempfeel]]]]]
                    [[[[[[heatindex]]]]]]
                        color = DarkGreen
                [[[[[weekrain]]]]]
                    # Make sure the y-axis increment is at least 0.02 for the 
rain plot
                    yscale = None, None, 0.02
                    [[[[[[rain]]]]]]
                        fill_color = "#000000"
                        label = AT Rain (daily total)
                [[[[[weekwind]]]]]
                    [[[[[[windGust]]]]]]
                        color = DarkGreen
                [[[[[weekET]]]]]
                    # Make sure the y-axis increment is at least 0.02 for the 
ET plot
                    yscale = None, None, 0.02
                    [[[[[[ET]]]]]]
                        label = AT Evapotranspiration (daily total)
                [[[[[weekUV]]]]]
                    # If your radiation sensor has a bounded scale, enforce 
that here.
                    # yscale = 0, 16, 1

           [[[[month_images]]]]
                color = "#66CDAA"
                [[[[[monthtempdew]]]]]
                    [[[[[[dewpoint]]]]]]
                        color = DarkGreen
                [[[[[monthtempfeel]]]]]
                    [[[[[[heatindex]]]]]]
                        color = DarkGreen
                [[[[[monthrain]]]]]
                    # Make sure the y-axis increment is at least 0.02 for the 
rain plot
                    yscale = None, None, 0.02
                    [[[[[[rain]]]]]]
                        fill_color = "#000000"
                        label = AT Rain (daily total)
                [[[[[monthwind]]]]]
                    [[[[[[windGust]]]]]]
                        color = DarkGreen
                [[[[[monthET]]]]]
                    # Make sure the y-axis increment is at least 0.02 for the 
ET plot
                    yscale = None, None, 0.02
                    [[[[[[ET]]]]]]
                        label = AT Evapotranspiration (daily total)
                [[[[[monthUV]]]]]
                    # If your radiation sensor has a bounded scale, enforce 
that here.
                    # yscale = 0, 16, 1

           [[[[year_images]]]]
                color = "#66CDAA"
                [[[[[yeartempdew]]]]]
                    [[[[[[dewpoint]]]]]]
                        color = DarkGreen
                [[[[[yeartempfeel]]]]]
                    [[[[[[heatindex]]]]]]
                        color = DarkGreen
                [[[[[yearrain]]]]]
                    # Make sure the y-axis increment is at least 0.02 for the 
rain plot
                    yscale = None, None, 0.02
                    [[[[[[rain]]]]]]
                        fill_color = "#000000"
                        label = AT Rain (weekly total)
                [[[[[yearwind]]]]]
                    [[[[[[windGust]]]]]]
                        color = DarkGreen
                [[[[[yearET]]]]]
                    # Make sure the y-axis increment is at least 0.02 for the 
ET plot
                    yscale = None, None, 0.02
                    [[[[[[ET]]]]]]
                        label = AT Evapotranspiration (weekly total)
                [[[[[yearUV]]]]]
                    # If your radiation sensor has a bounded scale, enforce 
that here.
                    # yscale = 0, 16, 1
    # garberw added prev section <========

    [[SmartphoneReport]]
        # The SmartphoneReport uses the 'Smartphone' skin, and the images and
        # files are placed in a dedicated subdirectory.
        skin = Smartphone
        enable = false
        HTML_ROOT = /var/www/html/weewx/smartphone/weewx_atlas

    [[MobileReport]]
        # The MobileReport uses the 'Mobile' skin, and the images and files
        # are placed in a dedicated subdirectory.
        skin = Mobile
        enable = false
        HTML_ROOT = /var/www/html/weewx/mobile/weewx_atlas

    [[StandardReport]]
        # This is the old "Standard" skin. By default, it is not enabled.
        skin = Standard
        enable = false

    [[FTP]]
        # FTP'ing the results to a webserver is treated as just another report,
        # albeit one with an unusual report generator!
        skin = Ftp

        # If you wish to use FTP, set "enable" to "true", then
        # fill out the next four lines.
        # Use quotes around passwords to guard against parsing errors.
        enable = false
        user = replace_me
        password = replace_me
        server = replace_me    # The ftp server name, e.g, www.myserver.org
        path = replace_me    # The destination directory, e.g., /weather

        # Set to True for an FTP over TLS (FTPS) connection. Not all servers
        # support this.
        secure_ftp = False

        # To upload files from something other than what HTML_ROOT is set
        # to above, specify a different HTML_ROOT here.
        #HTML_ROOT = /var/www/html/weewx

        # Most FTP servers use port 21
        port = 21

        # Set to 1 to use passive mode, zero for active mode
        passive = 1

    [[RSYNC]]
        # rsync'ing to a webserver is treated as just another report
        skin = Rsync

        # If you wish to use rsync, you must configure passwordless ssh using
        # public/private key authentication from the user account that weewx
        # runs to the user account on the remote machine where the files
        # will be copied.
        #
        # If you wish to use rsync, set "enable" to "true", then
        # fill out server, user, and path.
        # The server should appear in your .ssh/config file.
        # The user is the username used in the identity file.
        # The path is the destination directory, such as /var/www/html/weather.
        # Be sure that the user has write permissions on the destination!
        enable = false
        server = replace_me
        user = replace_me
        path = replace_me

        # To upload files from something other than what HTML_ROOT is set
        # to above, specify a different HTML_ROOT here.
        #HTML_ROOT = /var/www/html/weewx

        # Rsync can be configured to remove files from the remote server if
        # they don't exist under HTML_ROOT locally. USE WITH CAUTION: if you
        # make a mistake in the remote path, you could could unintentionally
        # cause unrelated files to be deleted. Set to 1 to enable remote file
        # deletion, zero to allow files to accumulate remotely.
        delete = 0

    # Options in the [[Defaults]] section below will apply to all reports.
    # What follows are a few of the more popular options you may want to
    # uncomment, then change.
    [[Defaults]]

        # Which language to use for all reports. Not all skins support all 
languages.
        # You can override this for individual reports.
        lang = en

        # Which unit system to use for all reports. Choices are 'us', 'metric', 
or 'metricwx'.
        # You can override this for individual reports.
        unit_system = us

        [[[Units]]]

            # Option "unit_system" above sets the general unit system, but 
overriding specific unit
            # groups is possible. These are popular choices. Uncomment and set 
as appropriate.
            # NB: The unit is always in the singular. I.e., 'mile_per_hour',
            # NOT 'miles_per_hour'
            [[[[Groups]]]]
                # group_altitude     = meter              # Options are 'foot' 
or 'meter'
                # group_pressure     = mbar               # Options are 'inHg', 
'mmHg', 'mbar', or 'hPa'
                # group_rain         = mm                 # Options are 'inch', 
'cm', or 'mm'
                # group_rainrate     = mm_per_hour        # Options are 
'inch_per_hour', 'cm_per_hour', or 'mm_per_hour'
                # group_temperature  = degree_C           # Options are 
'degree_C', 'degree_F', or 'degree_K'
                # The following line is used to keep the above lines indented 
properly.
                # It can be ignored.
                unused = unused

            # Uncommenting the following section frequently results in more
            # attractive formatting of times and dates, but may not work in
            # your locale.
            [[[[TimeFormats]]]]
                # day        = %H:%M
                # week       = %H:%M on %A
                # month      = %d-%b-%Y %H:%M
                # year       = %d-%b-%Y %H:%M
                # rainyear   = %d-%b-%Y %H:%M
                # current    = %d-%b-%Y %H:%M
                # ephem_day  = %H:%M
                # ephem_year = %d-%b-%Y %H:%M
                # The following line is used to keep the above lines indented 
properly.
                # It can be ignored.
                unused = unused

        [[[Labels]]]
            # Users frequently change the labels for these observation types
            [[[[Generic]]]]
                # inHumidity     = Inside Humidity
                # inTemp         = Inside Temperature
                # outHumidity    = Outside Humidity
                # outTemp        = Outside Temperature
                # extraTemp1     = Temperature1
                # extraTemp2     = Temperature2
                # extraTemp3     = Temperature3
                # garberw ==================================
                barometer   = AT barometer
                outTemp     = AT outTemp
                outHumidity = AT outHumidity
                inTemp      = AT inTemp
                inHumidity  = AT inHumidity
                windSpeed   = AT windSpeed
                windGust    = AT windGust
                windDir     = AT windDir
                windvec     = AT windvec
                UV          = AT UV
                radiation   = AT radiation
                altitude    = AT altitude
                gas_resistance = AT gas_resistance
                iaq         = AT iaq
                # garberw ==================================
                # The following line is used to keep the above lines indented 
properly.
                # It can be ignored.
                unused = unused

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

#   This service acts as a filter, converting the unit system coming from
#   the hardware to a unit system in the database.

[StdConvert]

    # The target_unit affects only the unit system in the database. Once
    # chosen it cannot be changed without converting the entire database.
    # Modification of target_unit after starting weewx will result in
    # corrupt data - the database will contain a mix of US and METRIC data.
    #
    # The value of target_unit does not affect the unit system for
    # reporting - reports can display US, Metric, or any combination of units.
    #
    # In most cases, target_unit should be left as the default: US
    #
    # In particular, those migrating from a standard wview installation
    # should use US since that is what the wview database contains.

    # DO NOT MODIFY THIS VALUE UNLESS YOU KNOW WHAT YOU ARE DOING!
    target_unit = US    # Options are 'US', 'METRICWX', or 'METRIC'

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

#   This section can adjust data using calibration expressions.

[StdCalibrate]

    [[Corrections]]
        # For each type, an arbitrary calibration expression can be given.
        # It should be in the units defined in the StdConvert section.
        # Example:
        foo = foo + 0.2
        # garberw added this line; see;
        # https://groups.google.com/g/weewx-user/c/oWp-9LivDJo/m/TCRPIKq3AgAJ
        # approximation;
        inTemp = inTemp - 4.0
        radiation = luminosity / 126.7
        pressure = pressure + 0.05
        UV = UV * 3.3333333333

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

#   This section is for quality control checks. If units are not specified,
#   values must be in the units defined in the StdConvert section.

[StdQC]

    [[MinMax]]
        barometer = 26, 32.5, inHg
        pressure = 24, 34.5, inHg
        outTemp = -40, 120, degree_F
        inTemp = 10, 120, degree_F
        outHumidity = 0, 100
        inHumidity = 0, 100
        windSpeed = 0, 120, mile_per_hour
        rain = 0, 10, inch

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

#   This section controls the origin of derived values.

[StdWXCalculate]

    [[Calculations]]
        # How to calculate derived quantities.  Possible values are:
        #  hardware        - use the value provided by hardware
        #  software        - use the value calculated by weewx
        #  prefer_hardware - use value provide by hardware if available,
        #                      otherwise use value calculated by weewx

        pressure = prefer_hardware
        altimeter = prefer_hardware
        appTemp = prefer_hardware
        barometer = prefer_hardware
        cloudbase = prefer_hardware
        dewpoint = prefer_hardware
        ET = prefer_hardware
        heatindex = prefer_hardware
        humidex = prefer_hardware
        inDewpoint = prefer_hardware
        maxSolarRad = prefer_hardware
        rainRate = prefer_hardware
        windchill = prefer_hardware
        windrun = prefer_hardware

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

#   For hardware that supports it, this section controls how often the
#   onboard clock gets updated.

[StdTimeSynch]

    # How often to check the weather station clock for drift (in seconds)
    clock_check = 14400

    # How much it can drift before we will correct it (in seconds)
    max_drift = 5

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

#   This section is for configuring the archive service.

[StdArchive]

    # must be evenly divisible by 60 !!!!!!!!!!!!!!!!!!!!
    # If the station hardware supports data logging then the archive interval
    # will be downloaded from the station. Otherwise, specify it (in seconds).
    # default
    archive_interval = 300
    # garberw   FIXME set to read weather period T=60 sec
    # archive_interval = 30
    # archive_interval = 120
    # this works for two frequencies with atlas (433mhz) and wh32b (915mhz)
    # archive_interval = 300
    # this works for one frequency with atlas (433mhz) and wh25 (433mhz)
    # minimum would be 60 assuming no errors (nulls)
    # this rapid interval generates a lot of data; check for nulls;
    # archive_interval = 120
    # archive_interval = 240

    # If possible, new archive records are downloaded from the station
    # hardware. If the hardware does not support this, then new archive
    # records will be generated in software.
    # Set the following to "software" to force software record generation.
    record_generation = hardware

    # Whether to include LOOP data in hi/low statistics
    loop_hilo = True

    # Uncomment and change to override logging for archive operations
    # garberw default
    # log_success = True
    # log_failure = True
    log_success = False
    log_failure = True

    # The data binding used to save archive records
    data_binding = wx_binding

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

#   This section binds a data store to a database.

[DataBindings]

    [[wx_binding]]
        # The database must match one of the sections in [Databases].
        # This is likely to be the only option you would want to change.
        database = archive_sqlite
        # The name of the table within the database
        table_name = archive
        # The manager handles aggregation of data for historical summaries
        manager = weewx.manager.DaySummaryManager
        # The schema defines the structure of the database.
        # It is *only* used when the database is created.
        # schema = schemas.wview_extended.schema
        schema = user.garberw_schema.schema

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

#   This section defines various databases.

[Databases]

    # A SQLite database is simply a single file
    [[archive_sqlite]]
        database_name = weewx_atlas.sdb
        database_type = SQLite

    # MySQL
    [[archive_mysql]]
        database_name = weewx_atlas
        database_type = MySQL

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

#   This section defines defaults for the different types of databases.

[DatabaseTypes]

    # Defaults for SQLite databases
    [[SQLite]]
        driver = weedb.sqlite
        # Directory in which the database files are located
        SQLITE_ROOT = /var/lib/weewx

    # Defaults for MySQL databases
    [[MySQL]]
        driver = weedb.mysql
        # The host where the database is located
        host = localhost
        # The user name for logging in to the host
        user = weewx
        # The password (use quotes to guard against parsing errors)
        password = weewx

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

#   This section configures the internal weewx engine.

[Engine]

    # The following section specifies which services should be run and in what 
order.
    [[Services]]
        prep_services = weewx.engine.StdTimeSynch
        data_services = ,
        process_services = weewx.engine.StdConvert, weewx.engine.StdCalibrate, 
weewx.engine.StdQC, weewx.wxservices.StdWXCalculate
        xtype_services = weewx.wxxtypes.StdWXXTypes, 
weewx.wxxtypes.StdPressureCooker, weewx.wxxtypes.StdRainRater, 
weewx.wxxtypes.StdDelta
        archive_services = weewx.engine.StdArchive
        restful_services = weewx.restx.StdStationRegistry, 
weewx.restx.StdWunderground, weewx.restx.StdPWSweather, weewx.restx.StdCWOP, 
weewx.restx.StdWOW, weewx.restx.StdAWEKAS
        report_services = weewx.engine.StdPrint, weewx.engine.StdReport
###############################################################################
# SEASONS SKIN CONFIGURATION FILE                                             #
# Copyright (c) 2018-2021 Tom Keffer <[email protected]> and Matthew Wall     #
# See the file LICENSE.txt for your rights.                                   #
###############################################################################

SKIN_NAME = Seasons
SKIN_VERSION = 4.8.0

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

# 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 = 
https://radblast.wunderground.com/cgi-bin/radar/WUNIDS_map?station=RTX&brand=wui&num=18&delay=15&type=N0R&frame=0&scale=1.000&noclutter=1&showlabels=1&severe=1
    # This URL will be used as the image hyperlink:
    # radar_url =       
https://radar.weather.gov/?settings=v1_eyJhZ2VuZGEiOnsiaWQiOm51bGwsImNlbnRlciI6Wy0xMjEuOTE3LDQ1LjY2XSwiem9vbSI6OH0sImJhc2UiOiJzdGFuZGFyZCIsImNvdW50eSI6ZmFsc2UsImN3YSI6ZmFsc2UsInN0YXRlIjpmYWxzZSwibWVudSI6dHJ1ZSwic2hvcnRGdXNlZE9ubHkiOmZhbHNlfQ%3D%3D#/

    # 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


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

# The following section contains variables that determine which observations
# and plots will be shown in the template files, and their order.  Like other
# configuration options, these can be overridden in the weewx config file.

[DisplayOptions]

    # Show link to RSS feed?
    show_rss = True

    # Show link to NOAA-style summary reports?
    show_reports = True

    # This list determines which types will appear in the "current conditions"
    # section, as well as in which order.
    # garberw
    observations_current = outTemp, heatindex, windchill, dewpoint, 
outHumidity, barometer, windSpeed, rain, rainRate, UV, radiation, 
lightning_strike_count, inTemp, inHumidity, gas_resistance, iaq, extraTemp1, 
extraHumid1, extraTemp2, extraHumid2, caseTemp1, caseHumid1, pm1_0, pm2_5, 
pm10_0

    # This list determines which types will appear in the "statistics" and
    # "statistical summary" sections, as well as in which order.
    # garberw removed cpuTemp1 ... cpuTemp8
    observations_stats = outTemp, heatindex, windchill, dewpoint, outHumidity, 
barometer, windSpeed, rain, rainRate, ET, hail, hailRate, snow, UV, radiation, 
lightning_strike_count, lightning_distance, inTemp, inHumidity, gas_resistance, 
iaq, extraTemp1, extraHumid1, extraTemp2, extraHumid2, extraTemp3, extraHumid3, 
extraTemp4, extraHumid4, extraTemp5, extraHumid5, extraTemp6, extraHumid6, 
extraTemp7, extraHumid7, extraTemp8, extraHumid8, caseTemp1, caseTemp2, 
caseTemp3, caseTemp4, caseTemp5, caseTemp6, caseTemp7, caseTemp8, caseHumid1, 
caseHumid2, caseHumid3, caseHumid4, caseHumid5, caseHumid6, caseHumid7, 
caseHumid8, leafTemp1, leafTemp2, leafWet1, leafWet2, soilTemp1, soilTemp2, 
soilTemp3, soilTemp4, soilMoist1, soilMoist2, soilMoist3, soilMoist4, pm1_0, 
pm2_5, pm10_0, co, co2, nh3, no2, o3, so2

    # This list determines which types will appear in the RSS feed.
    observations_rss = outTemp, inTemp, barometer, windSpeed, rain, rainRate, 
windchill, heatindex, dewpoint, outHumidity, inHumidity

    # Some observations display a sum rather than min/max values
    obs_type_sum = rain, ET, hail, snow, lightning_strike_count

    # Some observations display only the max value
    obs_type_max = rainRate, hailRate, snowRate, UV

    # The sensor status information is used in the sensor pages.  These lists
    # determine which database fields will be shown, as well as the order in
    # which they will be displayed.
    sensor_connections = rxCheckPercent, signal1, signal2, signal3, signal4, 
signal5, signal6, signal7, signal8
    sensor_batteries = outTempBatteryStatus, inTempBatteryStatus, 
rainBatteryStatus, hailBatteryStatus, snowBatteryStatus, windBatteryStatus, 
uvBatteryStatus, txBatteryStatus, batteryStatus1, batteryStatus2, 
batteryStatus3, batteryStatus4, batteryStatus5, batteryStatus6, batteryStatus7, 
batteryStatus8
    sensor_voltages = consBatteryVoltage, heatingVoltage, supplyVoltage, 
referenceVoltage

    # This list determines which plots will be shown, as well as the order in
    # which they will be displayed.  The names refer to the plots defined in
    # the ImageGenerator section, without any time span prefix.  For example,
    # the name 'wind' refers to 'daywind', 'weekwind', 'monthwind', and
    # 'yearwind'.
    # garberw
    plot_groups = barometer, tempdew, tempfeel, hum, wind, winddir, windvec, 
rain, ET, UV, radiation, lightning, tempin, humin, gas_resistance, iaq, 
tempext, humext, tempext2, humext2, tempcpu, tempcpu2, tempcase, tempcase2, 
humcase, humcase2, templeaf, wetleaf, tempsoil, moistsoil, pm
    telemetry_plot_groups =rx, volt

    # The list of time spans used within the skin
    periods = day, week, month, year


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

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

[CheetahGenerator]

    # Possible encodings include 'html_entities', 'strict_ascii', 
'normalized_ascii',
    # as well as those listed in 
https://docs.python.org/3/library/codecs.html#standard-encodings
    encoding = html_entities

    [[SummaryByMonth]]
        # Reports that summarize "by month"
        [[[NOAA_month]]]
            encoding = normalized_ascii
            template = NOAA/NOAA-%Y-%m.txt.tmpl

    [[SummaryByYear]]
        # Reports that summarize "by year"
        [[[NOAA_year]]]
            encoding = normalized_ascii
            template = NOAA/NOAA-%Y.txt.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 generate a celestial page only once
            # an hour instead of every report cycle.
            # 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.
    #
    # Nearly all types in the wview-extended schema are included. However, 
because of the
    # 'skip_if_empty' option, only the plots with non-null data will be 
actually produced.
    #
    # Fonts can be anything accepted by the Python Imaging Library (PIL), which 
includes truetype
    # (.ttf), or PIL's own font format (.pil). 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 = "#ffffff"
    
    chart_background_color = "#ffffff"
    chart_gridline_color = "#d0d0d0"

    # 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 = "#787878"

    bottom_label_font_path = font/OpenSans-Regular.ttf
    bottom_label_font_size = 12
    bottom_label_font_color = "#787878"
    bottom_label_offset = 3

    axis_label_font_path = font/OpenSans-Regular.ttf
    axis_label_font_size = 10
    axis_label_font_color = "#787878"
    
    # 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 = "#222222"

    # Default colors for the plot lines. These can be overridden for
    # individual lines using option 'color'.
    chart_line_colors = "#4282b4", "#b44242", "#42b442", "#42b4b4", "#b442b4"
    
    # Default fill colors for bar charts. These can be overridden for
    # individual bar plots using option 'fill_color'.
    chart_fill_colors = "#72b2c4", "#c47272", "#72c472", "#72c4c4", "#c472c4"
    
    # 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.
    # garberw
    # line_gap_fraction = 0.05
    line_gap_fraction = 0.3

    # 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   = "#fdfaff"
    daynight_night_color = "#dfdfe2"
    daynight_edge_color  = "#e0d8d8"
    # Here's an alternative, using a blue/yellow tint:
    #daynight_day_color   = "#fffff8"
    #daynight_night_color = "#f8f8ff"
    #daynight_edge_color  = "#fff8f8"

    # Default will be a line plot of width 1, without aggregation.
    # Can get overridden at any level.
    plot_type = line
    width = 1
    aggregate_type = none

    # Do not generate a plot if it does not have any non-null data:
    skip_if_empty = year

    # 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.

    [[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]]]]

        [[[dayhum]]]
            [[[[outHumidity]]]]

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

        [[[dayhumin]]]
            [[[[inHumidity]]]]

        # Plot extra temperatures.  You can add more temperature sensors here.
        # However, you might want to make a second plot if your system has more
        # than 3 extra sensors, otherwise the plots can become rather busy.
        [[[daytempext]]]
            yscale = None, None, 0.5
            [[[[extraTemp1]]]]
            [[[[extraTemp2]]]]
            [[[[extraTemp3]]]]
            [[[[extraTemp4]]]]

        [[[daytempext2]]]
            yscale = None, None, 0.5
            [[[[extraTemp5]]]]
            [[[[extraTemp6]]]]
            [[[[extraTemp7]]]]
            [[[[extraTemp8]]]]

        [[[dayhumext]]]
            [[[[extraHumid1]]]]
            [[[[extraHumid2]]]]
            [[[[extraHumid3]]]]
            [[[[extraHumid4]]]]

        [[[dayhumext2]]]
            [[[[extraHumid5]]]]
            [[[[extraHumid6]]]]
            [[[[extraHumid7]]]]
            [[[[extraHumid8]]]]

        [[[daytempcpu]]]
            yscale = None, None, 0.5
            [[[[cpuTemp1]]]]
            [[[[cpuTemp2]]]]
            [[[[cpuTemp3]]]]
            [[[[cpuTemp4]]]]

        [[[daytempcpu2]]]
            yscale = None, None, 0.5
            [[[[cpuTemp5]]]]
            [[[[cpuTemp6]]]]
            [[[[cpuTemp7]]]]
            [[[[cpuTemp8]]]]

        [[[daygas_resistance]]]
            [[[[gas_resistance]]]]
                aggregate_type = avg
                aggregate_interval = 120
                label = gas resistance (kOhm)
        [[[dayiaq]]]
            [[[[iaq]]]]
                aggregate_type = avg
                aggregate_interval = 120
                label = index of air quality (IAQ)

        [[[daytempcase]]]
            yscale = None, None, 0.5
            [[[[caseTemp1]]]]
            [[[[caseTemp2]]]]
            [[[[caseTemp3]]]]
            [[[[caseTemp4]]]]

        [[[daytempcase2]]]
            yscale = None, None, 0.5
            [[[[caseTemp5]]]]
            [[[[caseTemp6]]]]
            [[[[caseTemp7]]]]
            [[[[caseTemp8]]]]

        [[[dayhumcase]]]
            [[[[caseHumid1]]]]
            [[[[caseHumid2]]]]
            [[[[caseHumid3]]]]
            [[[[caseHumid4]]]]
            
        [[[dayhumcase2]]]
            [[[[caseHumid5]]]]
            [[[[caseHumid6]]]]
            [[[[caseHumid7]]]]
            [[[[caseHumid8]]]]

        [[[daytempleaf]]]
            [[[[leafTemp1]]]]
            [[[[leafTemp2]]]]

        [[[daywetleaf]]]
            [[[[leafWet1]]]]
            [[[[leafWet2]]]]

        [[[daytempsoil]]]
            [[[[soilTemp1]]]]
            [[[[soilTemp2]]]]
            [[[[soilTemp3]]]]
            [[[[soilTemp4]]]]

        [[[daymoistsoil]]]
            [[[[soilMoist1]]]]
            [[[[soilMoist2]]]]
            [[[[soilMoist3]]]]
            [[[[soilMoist4]]]]

        [[[daypm]]]
            [[[[pm1_0]]]]
            [[[[pm2_5]]]]
            [[[[pm10_0]]]]

        [[[daylightning]]]
            yscale = None, None, 1
            plot_type = bar
            [[[[lightning_strike_count]]]]
                aggregate_type = sum
                aggregate_interval = hour
                label = Lightning (hourly total)

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

    
        [[[daywindvec]]]
            # garberw was under subtopic
            aggregate_type = avg
            aggregate_interval = 3600
            plot_type = vector
            [[[[windvec]]]]

        [[[dayET]]]
            # Make sure the y-axis increment is at least 0.02 for the ET plot
            yscale = None, None, 0.02
            plot_type = bar
            # garberw was under subtopic
            aggregate_type = sum
            aggregate_interval = hour
            [[[[ET]]]]
                label = Evapotranspiration (hourly total)

        [[[dayUV]]]
            # If your radiation sensor has a bounded scale, enforce that here.
#            yscale = 0, 16, 1
            # garberw was under subtopic
            aggregate_type = avg
            aggregate_interval = 600
            [[[[UV]]]]

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

        [[[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 = hour
        
        [[[weekbarometer]]]
            [[[[barometer]]]]
        
        [[[weektempdew]]]
            [[[[outTemp]]]]
            [[[[dewpoint]]]]
        
        [[[weektempfeel]]]
            [[[[windchill]]]]
            [[[[heatindex]]]]
        
        [[[weektempin]]]
            [[[[inTemp]]]]

        [[[weektempext]]]
            yscale = None, None, 0.5
            [[[[extraTemp1]]]]
            [[[[extraTemp2]]]]
            [[[[extraTemp3]]]]
            [[[[extraTemp4]]]]

        [[[weektempext2]]]
            yscale = None, None, 0.5
            [[[[extraTemp5]]]]
            [[[[extraTemp6]]]]
            [[[[extraTemp7]]]]
            [[[[extraTemp8]]]]

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

        [[[weekhumin]]]
            [[[[inHumidity]]]]

        [[[weekhumext]]]
            [[[[extraHumid1]]]]
            [[[[extraHumid2]]]]
            [[[[extraHumid3]]]]
            [[[[extraHumid4]]]]

        [[[weekhumext2]]]
            [[[[extraHumid5]]]]
            [[[[extraHumid6]]]]
            [[[[extraHumid7]]]]
            [[[[extraHumid8]]]]

        [[[weektempcpu]]]
            yscale = None, None, 0.5
            [[[[cpuTemp1]]]]
            [[[[cpuTemp2]]]]
            [[[[cpuTemp3]]]]
            [[[[cpuTemp4]]]]

        [[[weektempcpu2]]]
            yscale = None, None, 0.5
            [[[[cpuTemp5]]]]
            [[[[cpuTemp6]]]]
            [[[[cpuTemp7]]]]
            [[[[cpuTemp8]]]]

        [[[weekgas_resistance]]]
            [[[[gas_resistance]]]]
                aggregate_type = avg
                aggregate_interval = hour
                label = gas resistance (kOhm)

        [[[weekiaq]]]
            [[[[iaq]]]]
                aggregate_type = avg
                aggregate_interval = hour
                label = index of air quality (IAQ)

        [[[weektempcase]]]
            yscale = None, None, 0.5
            [[[[caseTemp1]]]]
            [[[[caseTemp2]]]]
            [[[[caseTemp3]]]]
            [[[[caseTemp4]]]]

        [[[weektempcase2]]]
            yscale = None, None, 0.5
            [[[[caseTemp5]]]]
            [[[[caseTemp6]]]]
            [[[[caseTemp7]]]]
            [[[[caseTemp8]]]]

        [[[weekhumcase]]]
            [[[[caseHumid1]]]]
            [[[[caseHumid2]]]]
            [[[[caseHumid3]]]]
            [[[[caseHumid4]]]]
            
        [[[weekhumcase2]]]
            [[[[caseHumid5]]]]
            [[[[caseHumid6]]]]
            [[[[caseHumid7]]]]
            [[[[caseHumid8]]]]

        [[[weektempleaf]]]
            [[[[leafTemp1]]]]
            [[[[leafTemp2]]]]

        [[[weekwetleaf]]]
            [[[[leafWet1]]]]
            [[[[leafWet2]]]]

        [[[weektempsoil]]]
            [[[[soilTemp1]]]]
            [[[[soilTemp2]]]]
            [[[[soilTemp3]]]]
            [[[[soilTemp4]]]]

        [[[weekmoistsoil]]]
            [[[[soilMoist1]]]]
            [[[[soilMoist2]]]]
            [[[[soilMoist3]]]]
            [[[[soilMoist4]]]]

        [[[weekpm]]]
            [[[[pm1_0]]]]
            [[[[pm2_5]]]]
            [[[[pm10_0]]]]

        [[[weeklightning]]]
            yscale = None, None, 1
            plot_type = bar
            [[[[lightning_strike_count]]]]
                aggregate_type = sum
                aggregate_interval = day
                label = Lightning (daily total)

        [[[weekrain]]]
            yscale = None, None, 0.02
            plot_type = bar
            # garberw was under subtopic
            aggregate_type = sum
            aggregate_interval = day
            [[[[rain]]]]
                label = Rain (daily total)
        
        [[[weekwind]]]
            # garberw was under subtopic
            # garberw
            # line_type = None
            line_type = solid
            marker_type = box
            marker_size = 2
            [[[[windSpeed]]]]
                aggregate_type = avg
            [[[[windGust]]]]
                aggregate_type = max
        
        [[[weekwinddir]]]
            yscale = 0.0, 360.0, 45.0
            # garberw
            # line_type = None
            line_type = solid
            # --------
            marker_type = box
            marker_size = 2
            [[[[windDir]]]]
    
        [[[weekwindvec]]]
            # garberw was under subtopic
            plot_type = vector
            [[[[windvec]]]]

        [[[weekET]]]
            yscale = None, None, 0.02
            plot_type = bar
            # garberw was under subtopic
            aggregate_type = sum
            aggregate_interval = day
            [[[[ET]]]]
                label = Evapotranspiration (daily total)

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

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

        [[[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]]]]

        [[[monthtempext]]]
            yscale = None, None, 0.5
            [[[[extraTemp1]]]]
            [[[[extraTemp2]]]]
            [[[[extraTemp3]]]]
            [[[[extraTemp4]]]]

        [[[monthtempext2]]]
            yscale = None, None, 0.5
            [[[[extraTemp5]]]]
            [[[[extraTemp6]]]]
            [[[[extraTemp7]]]]
            [[[[extraTemp8]]]]

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

        [[[monthhumin]]]
            [[[[inHumidity]]]]

        [[[monthhumext]]]
            [[[[extraHumid1]]]]
            [[[[extraHumid2]]]]
            [[[[extraHumid3]]]]
            [[[[extraHumid4]]]]

        [[[monthhumext2]]]
            [[[[extraHumid5]]]]
            [[[[extraHumid6]]]]
            [[[[extraHumid7]]]]
            [[[[extraHumid8]]]]

        [[[monthtempcpu]]]
            yscale = None, None, 0.5
            [[[[cpuTemp1]]]]
            [[[[cpuTemp2]]]]
            [[[[cpuTemp3]]]]
            [[[[cpuTemp4]]]]

        [[[monthtempcpu2]]]
            yscale = None, None, 0.5
            [[[[cpuTemp5]]]]
            [[[[cpuTemp6]]]]
            [[[[cpuTemp7]]]]
            [[[[cpuTemp8]]]]

        [[[monthgas_resistance]]]
            [[[[gas_resistance]]]]
                aggregate_type = avg
                aggregate_interval = 10800
                label = gas resistance (kOhm)

        [[[monthiaq]]]
            [[[[iaq]]]]
                aggregate_type = avg
                aggregate_interval = 10800
                label = index of air quality (IAQ)

        [[[monthtempcase]]]
            yscale = None, None, 0.5
            [[[[caseTemp1]]]]
            [[[[caseTemp2]]]]
            [[[[caseTemp3]]]]
            [[[[caseTemp4]]]]

        [[[monthtempcase2]]]
            yscale = None, None, 0.5
            [[[[caseTemp5]]]]
            [[[[caseTemp6]]]]
            [[[[caseTemp7]]]]
            [[[[caseTemp8]]]]

        [[[monthhumcase]]]
            [[[[caseHumid1]]]]
            [[[[caseHumid2]]]]
            [[[[caseHumid3]]]]
            [[[[caseHumid4]]]]
            
        [[[monthhumcase2]]]
            [[[[caseHumid5]]]]
            [[[[caseHumid6]]]]
            [[[[caseHumid7]]]]
            [[[[caseHumid8]]]]

        [[[monthtempleaf]]]
            [[[[leafTemp1]]]]
            [[[[leafTemp2]]]]

        [[[monthwetleaf]]]
            [[[[leafWet1]]]]
            [[[[leafWet2]]]]

        [[[monthtempsoil]]]
            [[[[soilTemp1]]]]
            [[[[soilTemp2]]]]
            [[[[soilTemp3]]]]
            [[[[soilTemp4]]]]

        [[[monthmoistsoil]]]
            [[[[soilMoist1]]]]
            [[[[soilMoist2]]]]
            [[[[soilMoist3]]]]
            [[[[soilMoist4]]]]

        [[[monthpm]]]
            [[[[pm1_0]]]]
            [[[[pm2_5]]]]
            [[[[pm10_0]]]]

        [[[monthlightning]]]
            yscale = None, None, 1
            plot_type = bar
            [[[[lightning_strike_count]]]]
                aggregate_type = sum
                aggregate_interval = day
                label = Lightning (daily total)

        [[[monthrain]]]
            yscale = None, None, 0.02
            plot_type = bar
            # garberw was under subtopic
            aggregate_type = sum
            aggregate_interval = day
            [[[[rain]]]]
                label = Rain (daily total)
        
        [[[monthwind]]]
            # garberw was under subtopic
            # garberw
            # line_type = None
            line_type = solid
            marker_type = box
            marker_size = 2
            [[[[windSpeed]]]]
                aggregate_type = avg
            [[[[windGust]]]]
                aggregate_type = max
        
        [[[monthwinddir]]]
            yscale = 0.0, 360.0, 45.0
            # garberw
            # line_type = None
            line_type = solid
            # --------
            marker_type = box
            marker_size = 2
            [[[[windDir]]]]
    
        [[[monthwindvec]]]
            # garberw was under subtopic
            plot_type = vector
            [[[[windvec]]]]

        [[[monthET]]]
            yscale = None, None, 0.02
            plot_type = bar
            # garberw was under subtopic
            aggregate_type = sum
            aggregate_interval = day
            [[[[ET]]]]
                label = Evapotranspiration (daily total)

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

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

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

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

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

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

        [[[yeartempext]]]
            yscale = None, None, 0.5
            [[[[extraTemp1]]]]
            [[[[extraTemp2]]]]
            [[[[extraTemp3]]]]
            [[[[extraTemp4]]]]

        [[[yeartempext2]]]
            yscale = None, None, 0.5
            [[[[extraTemp5]]]]
            [[[[extraTemp6]]]]
            [[[[extraTemp7]]]]
            [[[[extraTemp8]]]]

        [[[yearhum]]]
            [[[[outHumidity]]]]

        [[[yearhumin]]]
            [[[[inHumidity]]]]

        [[[yearhumext]]]
            [[[[extraHumid1]]]]
            [[[[extraHumid2]]]]
            [[[[extraHumid3]]]]
            [[[[extraHumid4]]]]

        [[[yearhumext2]]]
            [[[[extraHumid5]]]]
            [[[[extraHumid6]]]]
            [[[[extraHumid7]]]]
            [[[[extraHumid8]]]]

        [[[yeartempcpu]]]
            yscale = None, None, 0.5
            [[[[cpuTemp1]]]]
            [[[[cpuTemp2]]]]
            [[[[cpuTemp3]]]]
            [[[[cpuTemp4]]]]

        [[[yeartempcpu2]]]
            yscale = None, None, 0.5
            [[[[cpuTemp5]]]]
            [[[[cpuTemp6]]]]
            [[[[cpuTemp7]]]]
            [[[[cpuTemp8]]]]

        [[[yeargas_resistance]]]
            [[[[gas_resistance]]]]
                aggregate_type = avg
                aggregate_interval = day
                label = gas resistance (kOhm)

        [[[yeariaq]]]
            [[[[iaq]]]]
                aggregate_type = avg
                aggregate_interval = day
                label = index of air quality (IAQ)

        [[[yeartempcase]]]
            yscale = None, None, 0.5
            [[[[caseTemp1]]]]
            [[[[caseTemp2]]]]
            [[[[caseTemp3]]]]
            [[[[caseTemp4]]]]

        [[[yeartempcase2]]]
            yscale = None, None, 0.5
            [[[[caseTemp5]]]]
            [[[[caseTemp6]]]]
            [[[[caseTemp7]]]]
            [[[[caseTemp8]]]]

        [[[yearhumcase]]]
            [[[[caseHumid1]]]]
            [[[[caseHumid2]]]]
            [[[[caseHumid3]]]]
            [[[[caseHumid4]]]]
            
        [[[yearhumcase2]]]
            [[[[caseHumid5]]]]
            [[[[caseHumid6]]]]
            [[[[caseHumid7]]]]
            [[[[caseHumid8]]]]

        [[[yeartempleaf]]]
            [[[[leafTemp1]]]]
            [[[[leafTemp2]]]]

        [[[yearwetleaf]]]
            [[[[leafWet1]]]]
            [[[[leafWet2]]]]

        [[[yeartempsoil]]]
            [[[[soilTemp1]]]]
            [[[[soilTemp2]]]]
            [[[[soilTemp3]]]]
            [[[[soilTemp4]]]]

        [[[yearmoistsoil]]]
            [[[[soilMoist1]]]]
            [[[[soilMoist2]]]]
            [[[[soilMoist3]]]]
            [[[[soilMoist4]]]]

        [[[yearpm]]]
            [[[[pm1_0]]]]
            [[[[pm2_5]]]]
            [[[[pm10_0]]]]

        [[[yearlightning]]]
            yscale = None, None, 1
            plot_type = bar
            [[[[lightning_strike_count]]]]
                aggregate_type = sum
                aggregate_interval = week
                label = Lightning (weekly total)

        [[[yearrain]]]
            yscale = None, None, 0.02
            plot_type = bar
            # garberw was under subtopic
            aggregate_type = sum
            aggregate_interval = week
            [[[[rain]]]]
                label = Rain (weekly total)

        [[[yearwind]]]
            # garberw was under subtopic
            # garberw
            # line_type = None
            line_type = solid
            marker_type = box
            marker_size = 2
            [[[[windSpeed]]]]
                aggregate_type = avg
            [[[[windGust]]]]
                aggregate_type = max
        
        [[[yearwinddir]]]
            yscale = 0.0, 360.0, 45.0
            # garberw
            # line_type = None
            line_type = solid
            # --------
            marker_type = box
            marker_size = 2
            [[[[windDir]]]]

        [[[yearwindvec]]]
            # garberw was under subtopic
            plot_type = vector
            [[[[windvec]]]]

        [[[yearET]]]
            yscale = None, None, 0.02
            plot_type = bar
            # garberw was under subtopic
            aggregate_type = sum
            aggregate_interval = week
            [[[[ET]]]]
                label = Evapotranspiration (weekly total)

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

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

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

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

        # This is how to generate a plot of high/low temperatures for the year:
#        [[[yearhilow]]]
#            [[[[hi]]]]
#                data_type = outTemp
#                aggregate_type = max
#                label = High
#            [[[[low]]]]
#                data_type = outTemp
#                aggregate_type = min
#                label = Low Temperature


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

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

Reply via email to