Performed a sudo apt update and a sudo apt full-upgrade on my Raspberry Pi and caused WeeWx with the WDC skin to stop working. My weather page now says "403 forbidden and nginx 1.18.0"
I have attached the syslog, the weewx.conf and the skin.conf files.
Any help is much appreciated.
Relevant parts of a syslog dump:
Apr 10 19:12:49 raspberrypi weectl[3350]: INFO weectllib: Command line: /usr/share/weewx/weectl.py report run WdcReport
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.engine.StdTimeSynch
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.engine.StdTimeSynch
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.engine.StdConvert
Apr 10 19:12:49 raspberrypi weectl[3350]: INFO weewx.engine: StdConvert target unit is 0x1
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.engine.StdConvert
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.engine.StdCalibrate
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.engine.StdCalibrate
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.engine.StdQC
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.engine.StdQC
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.wxservices.StdWXCalculate
Apr 10 19:12:49 raspberrypi weectl[3350]: INFO weewx.wxservices: StdWXCalculate will use data binding wx_binding
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.manager: Daily summary version is 4.0
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.wxservices.StdWXCalculate
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.wxxtypes.StdWXXTypes
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdWXXTypes
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.wxxtypes.StdPressureCooker
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdPressureCooker
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.wxxtypes.StdRainRater
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdRainRater
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.wxxtypes.StdDelta
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdDelta
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.engine.StdArchive
Apr 10 19:12:49 raspberrypi weectl[3350]: INFO weewx.engine: Archive will use data binding wx_binding
Apr 10 19:12:49 raspberrypi weectl[3350]: INFO weewx.engine: Record generation will be attempted in 'hardware'
Apr 10 19:12:49 raspberrypi weectl[3350]: INFO weewx.engine: Using archive interval of 300 seconds (specified by hardware)
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Use LOOP data in hi/low calculations: 1
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.engine.StdArchive
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.restx.StdStationRegistry
Apr 10 19:12:49 raspberrypi weectl[3350]: INFO weewx.restx: StationRegistry: Registration not requested.
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.restx.StdStationRegistry
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.restx.StdWunderground
Apr 10 19:12:49 raspberrypi weectl[3350]: INFO weewx.restx: Wunderground: Posting not enabled.
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.restx.StdWunderground
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.restx.StdPWSweather
Apr 10 19:12:49 raspberrypi weectl[3350]: INFO weewx.restx: PWSweather: Posting not enabled.
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.restx.StdPWSweather
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.restx.StdCWOP
Apr 10 19:12:49 raspberrypi weectl[3350]: INFO weewx.restx: CWOP: Data for station N0DP will be posted
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.restx.StdCWOP
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.restx.StdWOW
Apr 10 19:12:49 raspberrypi weectl[3350]: INFO weewx.restx: WOW: Posting not enabled.
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.restx.StdWOW
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.restx.StdAWEKAS
Apr 10 19:12:49 raspberrypi weectl[3350]: INFO weewx.restx: AWEKAS: Posting not enabled.
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.restx.StdAWEKAS
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.engine.StdPrint
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.engine.StdPrint
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Loading service weewx.engine.StdReport
Apr 10 19:12:49 raspberrypi weectl[3350]: INFO weewx.engine: 'pyephem' detected, extended almanac data is available
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.engine: Finished loading service weewx.engine.StdReport
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.manager: Daily summary version is 4.0
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.manager: Daily summary version is 4.0
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.reportengine: Running reports for time 2024-04-04 09:40:00 CDT (1712241600)
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.reportengine: Running report 'WdcReport'
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.reportengine: Found configuration file /etc/weewx/skins/weewx-wdc/skin.conf for report 'WdcReport'
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.reportengine: Running generators for report 'WdcReport' in directory '/etc/weewx/skins/weewx-wdc'
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.cheetahgenerator: Using search list ['user.weewx_wdc.WdcGeneralUtil', 'user.weewx_wdc.WdcStatsUtil', 'user.weewx_wdc.WdcDiagramUtil', 'user.weewx_wdc.WdcCelestialUtil', 'user.weewx_wdc.WdcArchiveUtil', 'user.weewx_wdc.WdcTableUtil', 'user.weewx_wdc.WdcForecastUtil', 'user.weewx_wdc.RainTags', 'weewx.cheetahgenerator.Almanac', 'weewx.cheetahgenerator.Current', 'weewx.cheetahgenerator.DisplayOptions', 'weewx.cheetahgenerator.Extras', 'weewx.cheetahgenerator.Gettext', 'weewx.cheetahgenerator.JSONHelpers', 'weewx.cheetahgenerator.PlotInfo', 'weewx.cheetahgenerator.SkinInfo', 'weewx.cheetahgenerator.Station', 'weewx.cheetahgenerator.Stats', 'weewx.cheetahgenerator.UnitInfo']
Apr 10 19:12:49 raspberrypi weectl[3350]: DEBUG weewx.manager: Daily summary version is 4.0
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: Evaluation of template /etc/weewx/skins/weewx-wdc/index.html.tmpl failed with exception '<class 'weewx.UnknownBinding'>'
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** Ignoring template /etc/weewx/skins/weewx-wdc/index.html.tmpl
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** Reason: Unknown data binding ''forecast_binding''
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** Traceback (most recent call last):
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** File "/usr/share/weewx/weewx/manager.py", line 862, in get_manager_dict_from_config
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** manager_dict = dict(config_dict['DataBindings'][data_binding])
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** File "/usr/lib/python3/dist-packages/configobj.py", line 554, in __getitem__
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** val = dict.__getitem__(self, key)
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** KeyError: 'forecast_binding'
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: ****
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** During handling of the above exception, another exception occurred:
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: ****
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** Traceback (most recent call last):
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** File "/usr/share/weewx/weewx/cheetahgenerator.py", line 334, in generate
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** unicode_string = compiled_template.respond()
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** File "_etc_weewx_skins_weewx_wdc_index_html_tmpl.py", line 326, in respond
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** File "/usr/lib/python3/dist-packages/Cheetah/Template.py", line 1708, in _handleCheetahInclude
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** self._CHEETAH__cheetahIncludes[_includeID].respond(trans)
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** File "_etc_weewx_skins_weewx_wdc_includes_body_alternative_inc.py", line 290, in respond
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** File "/usr/lib/python3/dist-packages/Cheetah/Template.py", line 1708, in _handleCheetahInclude
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** self._CHEETAH__cheetahIncludes[_includeID].respond(trans)
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** File "_etc_weewx_skins_weewx_wdc_includes_forecast_inc.py", line 177, in respond
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** File "/usr/lib/python3/dist-packages/Cheetah/Template.py", line 1458, in varExists
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** valueFromSearchList(self.searchList(),
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** File "/etc/weewx/bin/user/forecast.py", line 4385, in zambretti
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** dbm_dict = weewx.manager.get_manager_dict_from_config(self.generator.config_dict, self.binding)
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** File "/usr/share/weewx/weewx/manager.py", line 864, in get_manager_dict_from_config
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** raise weewx.UnknownBinding("Unknown data binding '%s'" % e)
Apr 10 19:13:02 raspberrypi weectl[3350]: ERROR weewx.cheetahgenerator: **** weewx.UnknownBinding: Unknown data binding ''forecast_binding''
Apr 10 19:13:33 raspberrypi weectl[3350]: DEBUG weewx.cheetahgenerator: Skip 'statistics.html': last_mod=1712758227.333116 age=36186.55059289932 stale=43200
Apr 10 19:13:35 raspberrypi weectl[3350]: INFO weewx.cheetahgenerator: Generated 11 files for report WdcReport in 45.88 seconds
Apr 10 19:13:35 raspberrypi weectl[3350]: INFO weewx.reportengine: Copied 19 files to /var/www/html/weewx
Apr 10 19:13:35 raspberrypi weectl[3350]: DEBUG weewx.restx: Shut down CWOP thread.
Apr 10 19:17:01 raspberrypi CRON[3389]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Here is the weewx.conf file:
# WEEWX CONFIGURATION FILE
#
# Copyright (c) 2009-2024 Tom Keffer <
tke...@gmail.com>
# 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.
debug = 1
# Whether to log successful operations. May get overridden below.
log_success = True
# Whether to log unsuccessful operations. May get overridden below.
log_failure = True
# This configuration file was created by ...
version = 5.0.2
##############################################################################
# This section is for information about the station.
[Station]
# Description of the station location, such as your town.
location = "Minnetonka, MN"
# Latitude in decimal degrees. Negative for southern hemisphere.
latitude = 44.922
# Longitude in decimal degrees. Negative for western hemisphere.
longitude = -93.513
# Altitude of the station, with the unit it is in. This is used only
# if the hardware cannot supply a value.
altitude = 900, 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.
station_type = Vantage
# If you have a website, you may specify an URL. The URL is required if you
# intend to register your station. The URL must include the scheme, for
# example, "http://" or "https://"
#station_url =
https://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)
week_start = 6
##############################################################################
[Vantage]
# This section is for the Davis Vantage series of weather stations.
# Connection type: serial or ethernet
# serial (the classic VantagePro)
# ethernet (the WeatherLinkIP or Serial-Ethernet bridge)
type = serial
# If the connection type is serial, a port must be specified:
# Debian, Ubuntu, Redhat, Fedora, and SuSE:
# /dev/ttyUSB0 is a common USB port name
# /dev/ttyS0 is a common serial port name
# BSD:
# /dev/cuaU0 is a common serial port name
port = /dev/ttyUSB0
# If the connection type is ethernet, an IP Address/hostname is required:
host = 1.2.3.4
######################################################
# The rest of this section rarely needs any attention.
# You can safely leave it "as is."
######################################################
# Serial baud rate (usually 19200)
baudrate = 19200
# TCP port (when using the WeatherLinkIP)
tcp_port = 22222
# TCP send delay (when using the WeatherLinkIP):
tcp_send_delay = 0.5
# The type of LOOP packet to request: 1 = LOOP1; 2 = LOOP2; 3 = both
loop_request = 1
# The id of your ISS station (usually 1). If you use a wind meter connected
# to a anemometer transmitter kit, use its id
iss_id = 1
# How long to wait for a response from the station before giving up (in
# seconds; must be greater than 2)
timeout = 4
# How long to wait before trying again (in seconds)
wait_before_retry = 1.2
# How many times to try before giving up:
max_tries = 4
# Vantage model Type: 1 = Vantage Pro; 2 = Vantage Pro2
model_type = 2
# The driver to use:
driver = weewx.drivers.vantage
##############################################################################
[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
[[StationRegistry]]
# To register this weather station at
weewx.com, set this to true, and
# set option 'station_url', located in the [Station] section 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.
# Use quotes around the password to guard against parsing errors.
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 = true
station = N0DP
# If this is an APRS (radio amateur) station, specify the
# passcode (e.g., 12345). Otherwise, ignore.
passcode = 31106
[[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.
# Use quotes around the password to guard against parsing errors.
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.
# Use quotes around the password to guard against parsing errors.
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'). Use
# the station key (find it at
#
https://www.wunderground.com/member/devices) for the password.
enable = false
station = replace_me
password = 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 = skins
# Where the generated reports should go, relative to WEEWX_ROOT
HTML_ROOT = /var/www/html/weewx
# Uncomment and change to override logging for reports.
# log_success = True
# 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 = false
[[SmartphoneReport]]
# The SmartphoneReport uses the 'Smartphone' skin, and the images and
# files are placed in a dedicated subdirectory.
skin = Smartphone
enable = true
HTML_ROOT = /var/www/html/weewx/smartphone
[[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
[[StandardReport]]
# This is the old "Standard" skin. By default, it is not enabled.
skin = Standard
enable = false
[[WdcReport]]
skin = weewx-wdc
enable = true
[[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 the password 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. The unit is always
# in the singular, e.g., '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
# The following line is used to keep the above lines indented
# properly. It can be ignored.
unused = unused
##############################################################################
# This service converts 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
##############################################################################
# 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]
# If the station hardware supports data logging then the archive interval
# will be downloaded from the station. Otherwise, specify it (in seconds).
archive_interval = 300
# 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.
# log_success = True
# 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
##############################################################################
# This section defines various databases.
[Databases]
# A SQLite database is simply a single file.
[[archive_sqlite]]
database_name = weewx.sdb
database_type = SQLite
# MySQL
[[archive_mysql]]
database_name = weewx
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 database files are located, relative to WEEWX_ROOT
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
# Use quotes around the password to guard against parsing errors.
password = weewx
##############################################################################
# This section configures the internal weewx engine.
[Engine]
# This 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
Here is the skin.conf file:
# configuration file for the weewx-wdc skin
SKIN_NAME = Weather Data Center
SKIN_VERSION = 3.5.1
# For instructions, see
https://github.com/Daveiano/weewx-wdc/wiki/Custom-data-bindings[ObservationBindings]
[[custom_obs_1]]
data_binding = extension_1_binding # eg wx_binding
observation = obs_key # eg. outTemp
[[custom_obs_2]]
data_binding = extension_2_binding
observation = another_obs_key
[Extras]
# Only change this if the generated files are deployed to some
# sub-folder of your web server.
# E.g. If you are accessing your site via "
http://my-weewx.com/weewx-wdc/"
# the base_path should be "/weewx-wdc/".
base_path = /weewx/
# Full URL to your own, custom logo (top left - works best as 32 x 32px).
#logo_image = ""
# If activated the Fontpage (index.html) will be automatically be
# refreshed in the browser every 300 seconds.
#refresh_interval = 300
# Show a link to the GitHub respository of this skin. Set to False to hide.
github_link = True
# The radar code. Full html allowed.
#radar_html = ''
# The Foreacst/Radar/Webcam section heading.
#forecast_radar_heading = "Forecast & Recent radar"
# Open the radar and external images/videos in a modal.
open_radar_and_externals_modal = False
# Set to True to have the Forecast tile and the radar/externals tile to have the same width.
# Default is forecast = 2/3 and radar tile = 1/3.
forecast_radar_equal_width = False
# For instructions, see
https://github.com/Daveiano/weewx-wdc/wiki/Support-for-weewx-mqtt [[mqtt]]
mqtt_websockets_enabled = 0
mqtt_websockets_host = "localhost"
mqtt_websockets_port = 9001
mqtt_websockets_ssl = 0
mqtt_websockets_topic = "weather/loop"
mqtt_websockets_username = ""
mqtt_websockets_password = ""
# For instructions, see
https://github.com/Daveiano/weewx-wdc/wiki/Webcams-and-Externals-Page # Include various external sources (eg. webcams) here.
#[[externals]]
# description = 'This description will be shown at the Webcams/Externals page.
#
# [[[current_backyard_image]]]
# source = '<img src="
https://my-server.com/current/image.jpg" />'
# title = Current image
# title_long = "Webcam facing North"
# description = 'The image is updated every 80 seconds, nighttime every 100 seconds.'
# show_on_front = True
# show_on_page = True
# For instructions, see
https://github.com/Daveiano/weewx-wdc/wiki/Support-for-weewx-forecast [[forecast_zambretti]]
enable = False
[[forecast_table_settings]]
source = WU
num_periods = 72
num_days = 5
show_hourly = 1
show_day = 1
show_date = 1
show_outlook = 1
show_temp = 1
show_dewpoint = 0
show_humidity = 0
show_wind = 1
show_tides = 0
show_sun = 1
show_moon = 1
show_pop = 1
show_precip = 1
show_precip_detail = 1
# For instructions, see
https://github.com/Daveiano/weewx-wdc/wiki/Support-for-weewx-DWD #[[weewx-DWD]]
# show_text_forecast = True
# text_forecast_VHDL = DWLG
# dwd_link =
https://www.dwd.de/DE/wetter/wetterundklima_vorort/sachsen/sac_node.html # show_pressure_map = True
# show_warning_map = True
# warning_map_filename = 'SchilderLZ.jpg'
# show_text_warnings = True
# show_warnings_on_front = XXX
# show_forecast = True
# mosmix_id = XXXX
# [[[forecast_table_settings]]]
# show_hourly = 1
# show_date = 1
# show_outlook = 1
# show_temp = 1
# show_dewpoint = 1
# show_pressure = 1
# show_wind= 1
# show_pop = 1
# show_precip = 1
# show_cloud_cover = 1
# show_sun_dur = 1
# carbon_icons = 0
[DisplayOptions]
# 'alternative' or 'classic'.
layout = 'alternative'
# 'auto', 'light' or 'dark'.
default_theme = 'auto'
# Date/Time localization for charts. Available locales: de-DE, en-US, en-GB, it-IT, nl-NL.
# If not set, the value from weewx.conf (reports section) will be used. If lang = en, then en-US will be used (sorry GB!).
#date_time_locale = en-US
# These days will be shown on the year and statistics pages.
climatological_days = rainDays, summerDays, hotDays, desertDays, tropicalNights, stormDays, iceDays, frostDays
climatological_days_per_month = True
show_last_rain = True
show_most_days_with_rain = True
show_most_days_without_rain = True
show_most_rain_within_one_day = True
# What to show in the tables.
table_tile_observations = outTemp, outHumidity, barometer, windSpeed, windGust, windDir, rain, rainRate, snowDepth, dewpoint, windchill, heatindex, UV, ET, radiation, appTemp, cloudbase, extraTemp1, extraHumid1, extraTemp2, extraHumid2, extraTemp3, extraHumid3, extraTemp4, extraHumid4, extraTemp5, extraHumid5, extraTemp6, extraHumid6, extraTemp7, extraHumid7, extraTemp8, extraHumid8
# What to show for the stat tiles.
stat_tile_observations = outTemp, outHumidity, barometer, windSpeed, windDir, windGust, windGustDir, windrun, rain, rainRate, snowDepth, dewpoint, windchill, heatindex, UV, ET, radiation, appTemp, cloudbase, extraTemp1, extraHumid1, extraTemp2, extraHumid2, extraTemp3, extraHumid3, extraTemp4, extraHumid4, extraTemp5, extraHumid5, extraTemp6, extraHumid6, extraTemp7, extraHumid7, extraTemp8, extraHumid8
# Stat tiles: Min/Max/Sum settings.
stat_tiles_show_min = outTemp, outHumidity, barometer, pressure, altimeter, snowDepth, heatindex, dewpoint, windchill, cloudbase, appTemp, rxCheckPercent, consBatteryVoltage
stat_tiles_show_max = rainRate, hailRate, snowRate, UV
stat_tiles_show_sum = rain, ET, hail, snow, lightning_strike_count, windrun
# Stat tiles: show time when the min/max was reached.
show_min_max_time_day = False
show_min_max_time_yesterday = False
show_min_max_time_week = False
show_min_max_time_month = False
# Color the outTemp stat tile based on the temperature. Only available for alternative layout.
outTemp_stat_tile_color = False
outTemp_stat_tile_color_transparency = 0.35
outTemp_stat_tile_color_min = -20
outTemp_stat_tile_color_max = 40
# windDir as oridnals (N, E, S, W).
stat_tile_winddir_ordinal = True
diagram_tile_winddir_ordinal = True
# Windrose.
windRose_colors = "#f3cec9", "#e7a4b6", "#cd7eaf", "#a262a9", "#6f4d96", "#3d3b72"
windRose_show_beaufort = True
windRose_legend_show_units = True
# Climatogram on year and statistics pages.
climatogram_enable_stats = True
climatogram_enable_year_stats = True
# Sensor status page.
# For instructions, see
https://github.com/Daveiano/weewx-wdc/wiki/Sensor-Status-Page sensor_stat_tile_observations = rxCheckPercent, signal1, signal2, signal3, signal4, signal5, signal6, signal7, signal8, consBatteryVoltage, heatingVoltage, supplyVoltage, referenceVoltage
sensor_diagram_observations = rxCheckPercent, signal1, signal2, signal3, signal4, signal5, signal6, signal7, signal8, consBatteryVoltage, heatingVoltage, supplyVoltage, referenceVoltage
sensor_table_observations = rxCheckPercent, signal1, signal2, signal3, signal4, signal5, signal6, signal7, signal8, consBatteryVoltage, heatingVoltage, supplyVoltage, referenceVoltage
sensor_battery_status = outTempBatteryStatus, inTempBatteryStatus, rainBatteryStatus, hailBatteryStatus, snowBatteryStatus, windBatteryStatus, uvBatteryStatus, txBatteryStatus, batteryStatus1, batteryStatus2, batteryStatus3, batteryStatus4, batteryStatus5, batteryStatus6, batteryStatus7, batteryStatus8
# Time period of diagrams (day, week, month or year).
sensor_diagram_period = week
# Computer monitor page.
# For instructions, see
https://github.com/Daveiano/weewx-wdc/wiki/Support-for-weewx-cmon computer_monitor_stat_tile_observations = cpu_user, cpu_system, cpu_temp, load1, load5, load15, mem_used, mem_free, net_eth0_rbytes, net_eth0_rpackets, net_eth0_tbytes, net_eth0_tpackets, net_wlan0_rbytes, net_wlan0_rpackets, net_wlan0_tbytes, net_wlan0_tpackets, proc_active, proc_total
computer_monitor_diagram_observations = cpu_user, cpu_system, cpu_temp, load1, mem_used, proc_active, net_eth0_rbytes, net_eth0_tbytes, net_wlan0_rbytes, net_wlan0_tbytes
computer_monitor_table_observations = cpu_user, cpu_system, cpu_temp, load1, load5, load15, mem_used, mem_free, net_eth0_rbytes, net_eth0_rpackets, net_eth0_tbytes, net_eth0_tpackets, net_wlan0_rbytes, net_wlan0_rpackets, net_wlan0_tbytes, net_wlan0_tpackets, proc_active, proc_total
computer_monitor_diagram_period = week
# For instructions, see
https://github.com/Daveiano/weewx-wdc/wiki/Gauges # Only applies when using the alternative layout.
# One of 'before' or 'after'.
gauges_display = before
# One of small, medium or large.
gauges_size = medium
[[Gauges]]
tick_number = 7
arc = 1.2
offset = 20
# normal or invert
mode = normal
color_scheme = interpolateRdBu
invert_color_scheme = 1
show_min_max = 1
hide_tick_unit = 0
# For instructions, see
https://github.com/Daveiano/weewx-wdc/wiki/Support-for-weewx-xaggs # ONLY enable these if you have weewx-xaggs installed!
#[[stat_tiles_xaggs]]
# [[[outTemp]]]
# aggregate_types = historical_max, historical_min, historical_avg, avg_ge_1, avg_ge_2, avg_ge_3
# avg_ge_1 = 5.0, 'degree_C', 'group_temperature'
# avg_ge_2 = 10.0, 'degree_C', 'group_temperature'
# avg_ge_3 = 15.0, 'degree_C', 'group_temperature'
# show_extra_row = False
# avg_context = year, alltime
[[Icons]]
#rain = "includes/icons/barometer.svg"
#[[Rounding]]
#dewpoint = 3
# For instructions, see
https://github.com/Daveiano/weewx-wdc/wiki/Configuration#stat_tables [[stat_tables]]
[[[tables_outtemp]]]
observation = "outTemp"
label = "Temperature Stat Table"
aggregate_types = "min", "avg", "max"
[[[tables_rain]]]
observation = "rain"
label = "Rain Stat Table"
aggregate_types = "sum", "avg"
[[tables]]
#[[[Rounding]]]
#outTemp = 3
[[[day]]]
aggregate_interval = 3600 # 1 hour
[[[week]]]
aggregate_interval = 21600 # 6 hours
[[[month]]]
aggregate_interval = 43200 # 12 hours
[[[year]]]
aggregate_interval = 86400 # 1 day
[[[alltime]]]
aggregate_interval = 86400 # 1 day
[[diagrams]]
#[[[Rounding]]]
#barometer = 3
[[[combined_observations]]]
[[[[climatogram_year]]]]
label = "Climatogram"
curve="natural"
aggregate_interval = month
bottom_date_time_format = "%b"
tooltip_date_time_format = "%B"
[[[[[obs]]]]]
[[[[[[rain]]]]]]
observation = "rain"
[[[[[[outTemp]]]]]]
observation = "outTemp"
[[[[climatogram_statistics]]]]
label = "Climatogram"
curve="natural"
aggregate_interval = year
bottom_date_time_format = "%Y"
tooltip_date_time_format = "%Y"
[[[[[obs]]]]]
[[[[[[rain]]]]]]
observation = "rain"
[[[[[[outTemp]]]]]]
observation = "outTemp"
[[[[temp_min_max_avg]]]]
label = "Temperature Min/Max/Avg"
pointSize = 3
yScaleOffset = 0.5
markerValue = 0
markerColor = "#00BFFF"
[[[[[obs]]]]]
[[[[[[outTemp_max]]]]]]
observation = "outTemp"
aggregate_type = "max"
color = "#8B0000"
[[[[[[outTemp_average]]]]]]
observation = "outTemp"
aggregate_type = "avg"
color = "#666666"
[[[[[[outTemp_min]]]]]]
observation = "outTemp"
aggregate_type = "min"
color = "#0198E1"
[[[[tempdew]]]]
label = 'Temperature / Dewpoint'
markerValue = 0
markerColor = "#00BFFF"
[[[[[obs]]]]]
[[[[[[temp]]]]]]
observation = "outTemp"
[[[[[[dew]]]]]]
observation = "dewpoint"
color = "#5F9EA0"
[[[[windchill_heatindex]]]]
label = 'Windchill / Heatindex'
yScaleOffset = 0.5
markerValue = 0
markerColor = "#00BFFF"
[[[[[obs]]]]]
[[[[[[chill]]]]]]
observation = "windchill"
color = '#0099CC'
[[[[[[heat]]]]]]
observation = "heatindex"
color = '#610000'
[[[[wind]]]]
label = 'Wind speed / Gust speed'
yScaleMin = 0
enableArea = True
areaOpacity = 0.5
curve = linear
[[[[[obs]]]]]
[[[[[[gust]]]]]]
observation = "windGust"
color = "#666666"
[[[[[[speed]]]]]]
observation = "windSpeed"
color = "#ffc000"
# Diagram-type specific settings.
[[[line]]]
lineWidth = 2
pointSize = 5
isInteractive = True
enablePoints = True
enableCrosshair = True
yScaleOffset = 3
enableArea = False
areaOpacity = 0.07
# @see
https://github.com/Daveiano/weewx-wdc/wiki/Configuration#diagrams, at "curve".
curve = "natural"
legendPosition = "top right"
[[[bar]]]
enableLabel = False
isInteractive = True
enableCrosshair = True
yScaleOffset = 3
# Observation specific settings.
[[[outTemp]]]
type = line
color = "#8B0000"
[[[dewpoint]]]
type = line
color = "#5F9EA0"
[[[outHumidity]]]
yScaleMin = 0
yScaleMax = 103
type = line
enableArea = True
color = "#0099CC"
[[[pressure]]]
yScaleOffset = 1
type = line
enableArea = True
color = "#666666"
[[[barometer]]]
yScaleOffset = 1
type = line
enableArea = True
color = "#666666"
[[[altimeter]]]
yScaleOffset = 1
type = line
enableArea = True
color = "#666666"
[[[windchill]]]
type = line
color = "#0099CC"
[[[heatindex]]]
type = line
color = "#610000"
[[[windDir]]]
curve = "basis"
lineWidth = 0
yScaleMin = 0
yScaleMax = 360
type = line
color = "#161616"
[[[windSpeed]]]
yScaleMin = 0
type = line
enableArea = True
color = "#ffc000"
[[[windGust]]]
aggregate_type = "max"
yScaleMin = 0
type = line
enableArea = True
color = "#666666"
[[[rain]]]
aggregate_type = "sum"
yScaleMin = 0
yScaleOffset = 0.25
type = bar
color = "#0198E1"
[[[rainRate]]]
aggregate_type = "max"
curve = "linear"
yScaleMin = 0
yScaleOffset = 0.25
type = line
color = "#0a6794"
[[[UV]]]
aggregate_type = "max"
curve = "step"
yScaleMin = 0
yScaleOffset = 1
type = line
enableArea = True
color = "#e61919"
[[[ET]]]
aggregate_type = "sum"
yScaleMin = 0
yScaleOffset = 0.02
type = bar
color = "#E97451"
[[[radiation]]]
curve = "basis"
yScaleMin = 0
type = line
enableArea = True
color = "#ff8c00"
[[[cloudbase]]]
yScaleMin = 0
yScaleOffset = 300
type = line
enableArea = True
color = "#92b6f0"
[[[appTemp]]]
type = line
color = "#C41E3A"
markerValue = 0
markerColor = "#00BFFF"
[[[rxCheckPercent]]]
yScaleMax = 100
color = "#990033"
[[[consBatteryVoltage]]]
yScaleOffset = 0.25
color = "#666699"
[[[heatingVoltage]]]
yScaleOffset = 0.25
[[[supplyVoltage]]]
yScaleOffset = 0.25
[[[referenceVoltage]]]
yScaleOffset = 0.25
# Set which diagrams you want to see on the day, week month, etc pages.
# Note for alltime: if aggregate_interval is not set,
# it will be calculated automatically based on the number of days/records.
[[[day]]]
aggregate_interval = 1800 # 30 minutes
bottom_date_time_format = "%H:%M"
tooltip_date_time_format = "%x %X"
[[[[observations]]]]
[[[[[tempdew]]]]]
[[[[[outHumidity]]]]]
[[[[[barometer]]]]]
[[[[[windchill_heatindex]]]]]
[[[[[wind]]]]]
[[[[[windDir]]]]]
[[[[[windRose]]]]]
[[[[[rain]]]]]
aggregate_interval = 7200 # 2 hours
tooltip_date_time_format = "%X"
[[[[[rainRate]]]]]
[[[[[UV]]]]]
[[[[[ET]]]]]
aggregate_interval = 7200 # 2 hours
tooltip_date_time_format = "%X"
[[[[[radiation]]]]]
[[[[[cloudbase]]]]]
[[[[[appTemp]]]]]
[[[week]]]
aggregate_interval = 7200 # 2 hours
bottom_date_time_format = "%m/%d"
tooltip_date_time_format = "%x %X"
[[[[observations]]]]
[[[[[tempdew]]]]]
[[[[[outHumidity]]]]]
[[[[[barometer]]]]]
[[[[[windchill_heatindex]]]]]
[[[[[wind]]]]]
[[[[[windDir]]]]]
[[[[[windRose]]]]]
[[[[[rain]]]]]
aggregate_interval = 86400 # 1 day
tooltip_date_time_format = "%x"
[[[[[rainRate]]]]]
[[[[[UV]]]]]
[[[[[ET]]]]]
aggregate_interval = 86400 # 1 day
tooltip_date_time_format = "%x"
[[[[[radiation]]]]]
[[[[[cloudbase]]]]]
[[[[[appTemp]]]]]
[[[month]]]
aggregate_interval = 21600 # 6 hours
bottom_date_time_format = "%m/%d"
tooltip_date_time_format = "%x %X"
[[[[observations]]]]
[[[[[temp_min_max_avg]]]]]
[[[[[tempdew]]]]]
[[[[[outHumidity]]]]]
[[[[[barometer]]]]]
[[[[[windchill_heatindex]]]]]
[[[[[wind]]]]]
[[[[[windDir]]]]]
[[[[[windRose]]]]]
[[[[[rain]]]]]
aggregate_interval = 172800 # 2 days
tooltip_date_time_format = "%x"
[[[[[rainRate]]]]]
[[[[[UV]]]]]
[[[[[ET]]]]]
aggregate_interval = 172800 # 2 days
tooltip_date_time_format = "%x"
[[[[[radiation]]]]]
[[[[[cloudbase]]]]]
[[[[[appTemp]]]]]
[[[year]]]
aggregate_interval = 172800 # 2 days
bottom_date_time_format = "%m/%d"
tooltip_date_time_format = "%x"
[[[[observations]]]]
[[[[[temp_min_max_avg]]]]]
[[[[[tempdew]]]]]
[[[[[outHumidity]]]]]
[[[[[barometer]]]]]
[[[[[windchill_heatindex]]]]]
[[[[[wind]]]]]
[[[[[windDir]]]]]
[[[[[windRose]]]]]
[[[[[rain]]]]]
aggregate_interval = 1555200 # 8 days
[[[[[rainRate]]]]]
[[[[[UV]]]]]
[[[[[ET]]]]]
aggregate_interval = 1555200 # 8 days
[[[[[radiation]]]]]
[[[[[cloudbase]]]]]
[[[[[appTemp]]]]]
[[[alltime]]]
bottom_date_time_format = "%m/%y"
tooltip_date_time_format = "%m/%Y"
[[[[observations]]]]
[[[[[temp_min_max_avg]]]]]
[[[[[tempdew]]]]]
[[[[[outHumidity]]]]]
[[[[[barometer]]]]]
[[[[[windchill_heatindex]]]]]
[[[[[wind]]]]]
[[[[[windDir]]]]]
[[[[[windRose]]]]]
[[[[[rain]]]]]
[[[[[rainRate]]]]]
[[[[[UV]]]]]
[[[[[ET]]]]]
[[[[[radiation]]]]]
[[[[[cloudbase]]]]]
[[[[[appTemp]]]]]
# Diagram heights.
[[[heights]]]
[[[[classic]]]]
height = "220px"
height_md = "300px"
height_lg = "250px"
height_xlg = "225px"
height_max = "225px"
[[[[alternative]]]]
height = "220px"
height_md = "325px"
height_lg = "325px"
height_xlg = "250px"
height_max = "250px"
[CheetahGenerator]
encoding = html_entities
search_list_extensions = user.weewx_wdc.WdcGeneralUtil, user.weewx_wdc.WdcStatsUtil, user.weewx_wdc.WdcDiagramUtil, user.weewx_wdc.WdcCelestialUtil, user.weewx_wdc.WdcArchiveUtil, user.weewx_wdc.WdcTableUtil, user.weewx_wdc.WdcForecastUtil, user.weewx_wdc.RainTags
#[[SummaryByDay]]
# [[[summary_day]]]
# template = day-archive/day-%Y-%m-%d.html.tmpl
[[SummaryByMonth]]
# Reports that summarize "by month"
[[[NOAA_month]]]
encoding = normalized_ascii
template = NOAA/NOAA-%Y-%m.txt.tmpl
#stale_age = 3600 # Every hour
[[[summary_month]]]
template = month-%Y-%m.html.tmpl
#stale_age = 3600 # Every hour
[[SummaryByYear]]
# Reports that summarize "by year"
[[[NOAA_year]]]
encoding = normalized_ascii
template = NOAA/NOAA-%Y.txt.tmpl
#stale_age = 3600 # Every hour
[[[summary_year]]]
template = year-%Y.html.tmpl
#stale_age = 3600 # Every hour
# Reports that show statistics "to date", such as day-to-date,
# week-to-date, month-to-date, etc.
[[ToDate]]
[[[day]]]
template = index.html.tmpl
#[[[yesterday]]]
# template = yesterday.html.tmpl
[[[week]]]
template = week.html.tmpl
[[[month]]]
template = month.html.tmpl
[[[year]]]
template = year.html.tmpl
#stale_age = 3600 # Every hour
[[[statistics]]]
template = statistics.html.tmpl
stale_age = 43200 # Twice a day
[[[celestial]]]
template = celestial.html.tmpl
#[[[sensor_status]]]
# template = sensor-status.html.tmpl
#[[[computer_monitor]]]
# template = computer-monitor.html.tmpl
[[Org]]
# Other 'static' templates
[[[offline]]]
template = offline.html.tmpl
[[[manifest]]]
template = manifest.json.tmpl
# Static pages, add as many as you want.
[[Static]]
[[[about]]]
template = about.html.tmpl
title = About
#[[[externals]]]
#template = externals.html.tmpl
#title = Webcams/Externals
#[[[DWD]]]
#template = dwd.html.tmpl
#title = Vorhersage vom DWD
[Units]
[[TimeFormats]]
# @see
https://weewx.com/docs/customizing.htm#Units_TimeFormats day = %X
week = %x
month = %x
year = %x
rainyear = %x
current = %x %X
ephem_day = %X
ephem_year = %x
stats = %x %X
daily_archive = %Y-%m-%d
[CopyGenerator]
copy_once = dist/main.js, dist/main.css, plotly-custom-build.min.js, dist/live-updates.js, dist/colored-temperature.js, favicon.ico, icon-192x192.png, icon-256x256.png, icon-384x384.png, icon-512x512.png, service-worker.js, dist/assets
# copy_always =
[Generators]
generator_list = weewx.cheetahgenerator.CheetahGenerator, weewx.reportengine.CopyGenerator