I apologise to the Gurus who will sigh 'not this again!"

I have been working on getting WeeWx to work with Belchertown for several 
weeks and admit defeat. My head is spinning from days going in circles with 
ChatGPT on multiple related issues (TLS, MQTT over TCP yada yada).

Summary of my setup that I feel is relevant:

Local DNS record on Pi-Hole (with unbound) points broker 
(mqtt.dreamwoodestate.net) to the Traefik IP.

Mikrotik router has dst-nat pointing 8883 and 9011 to those ports on the 
Traefik VM.
There are also Input rules to allow those ports.

Cloudflare has a proxied A record for the broker, pointing to my static IP 
which resolves to my HomeLab domain (dreamwoodestate.net)

Traefik (in own VM) supplies Letsencrypt certificate for use by browser 
wanting to securely access my website with Belchertown.

MQTT broker (Mosquitto 2.0.18) is running on its own VM also.

WeeWx also has its own VM.

So far, MQTT Explorer on my LM PC can see the broker, SSYS, broker - and 
all the groups below broker.

WeeWx appears to be outputting MQTT data, with rows like:
DEBUG user.mqtt: data: {'dateTime': '1754316352.0', 'barometer_mbar'....
INFO weewx.restx: MQTT: Published record 2025-08-05 00:05:52 AEST 
(1754316352)

However, MQTT Explorer is not displaying any 'weather' messages from the 
WeeWx MQTT client (I think this is the way to describe it).
It is subscribed to topic=weather/loop

BTW, I have chosen port '9011' for websockets as Portainer Agent is using 
'9001' traditionally used around WeeWx/MQTT

weexw.log is empty - don't know if that is good or bad

Browsing to my weather data is 'working' in all respects except for the 
MQTT driven 2 second updates (and that strange appearance of 'current temp' 
at the top of graphs and reports - minor problem I'm sure).
Using '?debug=true' in browser shows 'MQTT: MQTT Connected. Subscribing.' 
as the last entry.

Hopefully there are sufficient clues and suitable obfuscation in the 
attached.
Please let me know what other info I can provide. 

-- 
You received this message because you are subscribed to the Google Groups 
"weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/weewx-user/7f98a9b2-0334-4202-80ff-2022b17a512bn%40googlegroups.com.
# pid_file /var/run/mosquitto.pid
persistence false

allow_anonymous true
password_file /etc/mosquitto/passwd
acl_file /etc/mosquitto/acl

# Insecure mqtt to localhost only, and secure mqtt
listener 1883
listener 8883
cafile /etc/letsencrypt/live/mqtt.dreamwoodestate.net/chain.pem
certfile /etc/letsencrypt/live/mqtt.dreamwoodestate.net/cert.pem
keyfile /etc/letsencrypt/live/mqtt.dreamwoodestate.net/privkey.pem
protocol mqtt

# websockets
listener 9011
protocol websockets
# cafile /etc/letsencrypt/live/mqtt.dreamwoodestate.net/chain.pem
# certfile /etc/letsencrypt/live/mqtt.dreamwoodestate.net/cert.pem
# keyfile /etc/letsencrypt/live/mqtt.dreamwoodestate.net/privkey.pem

# next log related lines from 
# log_type all
# websockets_log_level 1023
# connection_messages true
# log_dest file /var/log/mosquitto/mosquitto.log

# log_type error
# log_type warning
# log_type notice
# log_type information

###############################################################################
# SKIN CONFIGURATION FILE                                                     #
# Copyright (c) 2010 Tom Keffer <[email protected]>                           #
# Updated for the Belchertown Skin by Pat O'Brien, 2019                       #
###############################################################################

[Extras]

    # General Site Defaults
    belchertown_debug = 0
    belchertown_locale = "auto"
    theme = light
    theme_toggle_enabled = 1
    site_title = "My Weather Website"
    logo_image = ""
    logo_image_dark = ""
    radar_html = ""
    radar_html_dark = ""
    radar_width = 650
    radar_height = 360
    aeris_map = 0
    almanac_extras = 1

    # Station Observations. Special observation rainWithRainRate combines Daily 
Rain with Rain Rate in 1 line
    station_observations = "barometer", "dewpoint", "outHumidity", 
"rainWithRainRate"

    # Manifest Settings for Mobile Phones
    manifest_name = "WinderaWx"
    manifest_short_name = "WWx"

    # Highcharts settings
    highcharts_enabled = 1
    graph_page_show_all_button = 1
    graph_page_default_graphgroup = "day"
    highcharts_homepage_graphgroup = "homepage"
    highcharts_decimal = "auto"
    highcharts_thousands = "auto"

    # MQTT Websockets defaults
    mqtt_websockets_enabled = 1
    mqtt_websockets_host = "mqtt.dreamwoodestate.net"
    mqtt_websockets_port = 9001
    mqtt_websockets_ssl = 1
    mqtt_websockets_topic = "weather/loop"
    mqtt_websockets_username = ""
    mqtt_websockets_password = ""
    # disconnect_live_website_visitor = 1800000

    # Show an alert if the page updated timestamp is older than expected with 
this setting. Does not apply to MQTT Websocket enabled websites
    # The late time threshold is defined in seconds. This should be greater 
than your archive_interval from weewx.conf.
    # Typically you would want this 2 or 3 times archive_interval
    show_last_updated_alert = 0
    last_updated_alert_threshold = 1800

    # If mqtt_websockets_enabled is set to 0, but want the page to full reload 
on an interval, specify this below in milliseconds. 300000 = 5 minutes
    webpage_autorefresh = 0

    # Image Reload Section.
    # Set reload_hook_images to 1 to enable, then set the number of *seconds* 
for each section to reload.
    # A value of -1 will disable reloading images in that section.
    # radar = the radar image if you used radar_html setting
    # asi = index_hook_after_station_info.inc
    # af = index_hook_after_forecast.inc
    # as = index_hook_after_snapshot.inc
    # ac = index_hook_after_charts.inc
    reload_hook_images = 0
    reload_images_radar = 300
    reload_images_hook_asi = -1
    reload_images_hook_af = -1
    reload_images_hook_as = -1
    reload_images_hook_ac = -1

    # Forecast defaults
    forecast_enabled = 0
    forecast_provider = "aeris"
    forecast_api_id = ""
    forecast_api_secret = ""
    forecast_units = "us"
    forecast_interval_hours = 24                                                
# values are 0,1,3 or 24

    forecast_lang = "en"
    forecast_stale = 3540
    forecast_aeris_use_metar = 1
    forecast_alert_enabled = 0
    forecast_alert_limit = 1
    forecast_show_daily_forecast_link = 0
    forecast_daily_forecast_link = ""
    forecast_show_humidity_dewpoint = 0

    # Air Quality Index (AQI) defaults
    aqi_enabled = 0
    aqi_location_enabled = 0

    # Show Beaufort wind scale category under wind table
    beaufort_category = 0

    # Earthquake defaults
    earthquake_enabled = 0
    earthquake_maxradiuskm = 1000
    earthquake_stale = 10740
    earthquake_server = USGS
    geonet_mmi = 4

    # Social Share Button Defaults. Define the text below under Labels
    facebook_enabled = 0
    twitter_enabled = 0
    social_share_html = "http://yourwebsite";

    # Google Analytics
    #googleAnalyticsId = UA-12345678-1

    # This is the display of the Pi Kiosk which is in the /pi folder
    pi_kiosk_bold = "false"
    pi_theme = "auto"

    # This is the display of the kiosk page which is kiosk.html
    radar_html_kiosk = ""
    radar_width_kiosk = 490
    radar_height_kiosk = 362
    mqtt_websockets_host_kiosk = ""
    mqtt_websockets_port_kiosk = ""
    mqtt_websockets_ssl_kiosk = ""
    forecast_interval_hours_kiosk = 24
    aqi_enabled_kiosk = 0

    # Display a Back To Top Button
    back_to_top_button_enabled = 0
    # Button position, 0 for right side , 1 for left side
    back_to_top_button_position = 0
    # Button opacity from 0.1 to 1.0
    back_to_top_button_opacity = 0.8

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

[Labels]
    # Labels used in this skin

    [[Generic]]
        # Generic labels, keyed by an observation type.
        # To change a label or translate it to your language
        # change the text after the equal sign.

        # Extra Observation labels
        appTemp              = Apparent Temperature
        cloudbase            = Cloud Base
        visibility           = Visibility
        windrun              = Wind Run
        cloud_cover          = Cloud Cover
        aqi                  = AQI
        inTemp               = Inside Temp
        inHumidity           = In Humid

        # HTML Header Meta Tags and HTML Title. These labels have a default 
value
        # set inside of header.html.tmpl. Leave as "" to use the default value.
        html_title         = ""
        html_description   = ""

        # Footer Information
        footer_copyright_text = "Dreamwood Estate"
        footer_disclaimer_text = "Forecast data is approximate."

        # Twitter Social Share
        twitter_text = "Check out my website: My Weather Website Weather 
Conditions"
        twitter_owner = "YourTwitterUsernameHere"
        twitter_hashtags = "weewx #weather"

        # Station Observation Table
        rainWithRainRate     = Rain

        # Navigation Menu
        nav_home        = Home
        nav_graphs      = Graphs
        nav_records     = Records
        nav_reports     = Reports
        nav_about       = About

        # Default page headers
        home_page_header        = "Windera NSW - Weather"
        graphs_page_header      = "Weather Observation Graphs"
        records_page_header     = "Weather Observation Records"
        reports_page_header     = "Weather Observation Reports"
        about_page_header       = "About This Weather Station"
        powered_by              = "Observations: Davis Vantage PRO2 Weather 
Station"

        # Earthquake translations
        earthquake_no_data          = No recent earthquake data available!

        # Home Page Text and Titles
        second                      = "second", "seconds"
        minute                      = "minute", "minutes"
        hour                        = "hour", "hours"
        sun                         = Sun
        moon                        = Moon
        sun_and_moon                = Sun & Moon
        moon_visible                = visible
        wind_speed                  = Speed
        wind_gust                   = Gust
        wind_today_max              = Today Max
        feels_like                  = Feels like
        highest_temperature         = High
        lowest_temperature          = Low
        average_temperature         = Average
        header_last_updated_alert   = Notice: This page hasn't been updated 
recently and may contain stale data!
        header_last_updated         = Last Updated
        mqtt_websockets_connecting  = Connecting to weather station real time 
data.
        mqtt_websockets_waiting     = Connected. Waiting for data.
        mqtt_websockets_connected   = Connected to weather station live. Data 
received
        mqtt_websockets_stopped     = Live updates have stopped.
        mqtt_websockets_continue    = Continue live updates
        mqtt_websockets_failed      = Failed connecting to the weather station. 
Please try again later!
        mqtt_websockets_lost        = Lost connection to the weather station. 
Please try again later!
        weather_snapshots           = Weather Record Snapshots.
        weather_snapshots_link      = View all weather records here.
        snapshot_high               = High
        snapshot_low                = Low
        snapshot_today_avg_wind     = Average Wind
        snapshot_today_high_wind    = Highest Wind
        snapshot_today_high_uv      = Highest UV
        snapshot_today_rain         = Today's Rain
        snapshot_today_rainrate     = Highest Rate
        snapshot_month_avg_wind     = Average Wind
        snapshot_month_high_wind    = Highest Wind
        snapshot_month_high_uv      = Highest UV
        snapshot_month_rain         = Total Rain
        snapshot_month_rainrate     = Highest Rate
        earthquake_title            = Recent Local Earthquake
        earthquake_magnitude        = Magnitude
        homepage_graphs_link        = View more here.
        copyright                   = Copyright

        # Forecast alert and almanac Popup
        close                       = Close

        # Almanac Popup
        almanac_more_details        = More Almanac Information
        almanac_modal_title         = Almanac Information
        sun_always_down             = Always down
        sun_always_up               = Always up
        more_than_yesterday         = more than yesterday
        less_than_yesterday         = less than yesterday
        start_civil_twilight        = Start civil twilight
        rise                        = Rise
        transit                     = Transit
        set                         = Set
        end_civil_twilight          = End Civil Twilight
        azimuth                     = Azimuth
        altitude                    = Altitude
        right_ascension             = Right ascension
        declination                 = Declination
        equinox                     = Equinox
        solstice                    = Solstice
        total_daylight              = Total daylight
        full_moon                   = Full moon
        new_moon                    = New moon
        phase                       = Phase
        full                        = full
        install_pyephem             = Install pyephem for detailed celestial 
timings.

        # General Forecast translations
        forecast_header             = Forecast
        daily_forecast              = Daily Forecast
        alert_in_effect             = in effect until
        forecast_last_updated       = Last Updated on
        forecast_interval_caption   = Forecast Interval (hours):

        # Air Quality Index label defaults
        aqi_good                    = good
        aqi_moderate                = moderate
        aqi_usg                     = unhealthy for some # Official wording: 
"unhealthy for sensitive groups"
        aqi_unhealthy               = unhealthy
        aqi_very_unhealthy          = very unhealthy
        aqi_hazardous               = hazardous
        aqi_unknown                 = unknown

        # Aeris Weather Forecast Codes. From 
https://www.aerisweather.com/support/docs/api/reference/weather-codes/
        forecast_cloud_code_CL           = "Clear"
        forecast_cloud_code_FW           = "Mostly Clear"
        forecast_cloud_code_SC           = "Partly Cloudy"
        forecast_cloud_code_BK           = "Mostly Cloudy"
        forecast_cloud_code_OV           = "Cloudy"

        forecast_coverage_code_AR        = "Areas of"
        forecast_coverage_code_BR        = "Brief"
        forecast_coverage_code_C         = "Chance of"
        forecast_coverage_code_D         = "Definite"
        forecast_coverage_code_FQ        = "Frequent"
        forecast_coverage_code_IN        = "Intermittent"
        forecast_coverage_code_IS        = "Isolated"
        forecast_coverage_code_L         = "Likely"
        forecast_coverage_code_NM        = "Numerous"
        forecast_coverage_code_O         = "Occasional"
        forecast_coverage_code_PA        = "Patchy"
        forecast_coverage_code_PD        = "Periods of"
        forecast_coverage_code_S         = "Slight Chance of"
        forecast_coverage_code_SC        = "Scattered"
        forecast_coverage_code_VC        = "In the Vicinity"
        forecast_coverage_code_WD        = "Widespread"

        forecast_intensity_code_VL      = "Very Light"
        forecast_intensity_code_L       = "Light"
        forecast_intensity_code_H       = "Heavy"
        forecast_intensity_code_VH      = "Very Heavy"

        forecast_weather_code_A         = "Hail"
        forecast_weather_code_BD        = "Blowing Dust"
        forecast_weather_code_BN        = "Blowing Sand"
        forecast_weather_code_BR        = "Mist"
        forecast_weather_code_BS        = "Blowing Snow"
        forecast_weather_code_BY        = "Blowing Spray"
        forecast_weather_code_F         = "Fog"
        forecast_weather_code_FR        = "Frost"
        forecast_weather_code_H         = "Haze"
        forecast_weather_code_IC        = "Ice Crystals"
        forecast_weather_code_IF        = "Ice Fog"
        forecast_weather_code_IP        = "Sleet"
        forecast_weather_code_K         = "Smoke"
        forecast_weather_code_L         = "Drizzle"
        forecast_weather_code_R         = "Rain"
        forecast_weather_code_RW        = "Rain Showers"
        forecast_weather_code_RS        = "Rain/Snow Mix"
        forecast_weather_code_SI        = "Snow/Sleet Mix"
        forecast_weather_code_WM        = "Wintry Mix"
        forecast_weather_code_S         = "Snow"
        forecast_weather_code_SW        = "Snow Showers"
        forecast_weather_code_T         = "Thunderstorms"
        forecast_weather_code_UP        = "Unknown Precipitation"
        forecast_weather_code_VA        = "Volcanic Ash"
        forecast_weather_code_WP        = "Waterspouts"
        forecast_weather_code_ZF        = "Freezing Fog"
        forecast_weather_code_ZL        = "Freezing Drizzle"
        forecast_weather_code_ZR        = "Freezing Rain"
        forecast_weather_code_ZY        = "Freezing Spray"

        # Aeris US/Canada Alert Codes. From 
https://www.aerisweather.com/support/docs/aeris-maps/reference/alert-types/
        forecast_alert_code_TOE         = "911 Telephone Outage"
        forecast_alert_code_ADR         = "Administrative Message"
        forecast_alert_code_AQA         = "Air Quality Alert"
        forecast_alert_code_AQ_S        = "Air Quality Alert"
        forecast_alert_code_AS_Y        = "Air Stagnation Advisory"
        forecast_alert_code_AR_W        = "Arctic Outflow Warning"
        forecast_alert_code_AF_Y        = "Ashfall Advisory"
        forecast_alert_code_MH_Y        = "Ashfall Advisory"
        forecast_alert_code_AF_W        = "Ashfall Warning"
        forecast_alert_code_AVW         = "Avalanche Warning"
        forecast_alert_code_AVA         = "Avalanche Watch"
        forecast_alert_code_BH_S        = "Beach Hazard Statement"
        forecast_alert_code_BZ_W        = "Blizzard Warning"
        forecast_alert_code_DU_Y        = "Blowing Dust Advisory"
        forecast_alert_code_BS_Y        = "Blowing Snow Advisory"
        forecast_alert_code_BW_Y        = "Brisk Wind Advisory"
        forecast_alert_code_CAE         = "Child Abduction Emergency"
        forecast_alert_code_CDW         = "Civil Danger Warning"
        forecast_alert_code_CEM         = "Civil Emergency Message"
        forecast_alert_code_CF_Y        = "Coastal Flood Advisory"
        forecast_alert_code_CF_S        = "Coastal Flood Statement"
        forecast_alert_code_CF_W        = "Coastal Flood Warning"
        forecast_alert_code_CF_A        = "Coastal Flood Watch"
        forecast_alert_code_FG_Y        = "Dense Fog Advisory"
        forecast_alert_code_MF_Y        = "Dense Fog Advisory"
        forecast_alert_code_FO_Y        = "Fog Advisory"
        forecast_alert_code_SM_Y        = "Dense Smoke Advisory"
        forecast_alert_code_MS_Y        = "Dense Smoke Advisory"
        forecast_alert_code_DS_W        = "Dust Storm Warning"
        forecast_alert_code_EQW         = "Earthquake Warning"
        forecast_alert_code_EVI         = "Evacuation - Immediate"
        forecast_alert_code_EH_W        = "Excessive Heat Warning"
        forecast_alert_code_EH_A        = "Excessive Heat Watch"
        forecast_alert_code_EC_W        = "Extreme Cold Warning"
        forecast_alert_code_EC_A        = "Extreme Cold Watch"
        forecast_alert_code_RFD         = "Extreme Fire Danger"
        forecast_alert_code_EW_W        = "Extreme Wind Warning"
        forecast_alert_code_FRW         = "Fire Warning"
        forecast_alert_code_FW_A        = "Fire Weather Watch"
        forecast_alert_code_FF_S        = "Flash Flood Statement"
        forecast_alert_code_FF_W        = "Flash Flood Warning"
        forecast_alert_code_FF_A        = "Flash Flood Watch"
        forecast_alert_code_FE_W        = "Flash Freeze Warning"
        forecast_alert_code_FL_Y        = "Flood Advisory"
        forecast_alert_code_FL_S        = "Flood Statement"
        forecast_alert_code_FL_W        = "Flood Warning"
        forecast_alert_code_FA_W        = "Flood Warning"
        forecast_alert_code_FL_A        = "Flood Watch"
        forecast_alert_code_FA_A        = "Flood Watch"
        forecast_alert_code_FZ_W        = "Freeze Warning"
        forecast_alert_code_FZ_A        = "Freeze Watch"
        forecast_alert_code_ZL_Y        = "Freezing Drizzle Advisory"
        forecast_alert_code_ZF_Y        = "Freezing Fog Advisory"
        forecast_alert_code_ZR_W        = "Freezing Rain Warning"
        forecast_alert_code_UP_Y        = "Freezing Spray Advisory"
        forecast_alert_code_FR_Y        = "Frost Advisory"
        forecast_alert_code_GL_W        = "Gale Warning"
        forecast_alert_code_GL_A        = "Gale Watch"
        forecast_alert_code_HZ_W        = "Hard Freeze Warning"
        forecast_alert_code_HZ_A        = "Hard Freeze Watch"
        forecast_alert_code_HMW         = "Hazardous Materials Warning"
        forecast_alert_code_SE_W        = "Hazardous Seas Warning"
        forecast_alert_code_SE_A        = "Hazardous Seas Watch"
        forecast_alert_code_HWO         = "Hazardous Weather Outlook"
        forecast_alert_code_HT_Y        = "Heat Advisory"
        forecast_alert_code_HT_W        = "Heat Warning"
        forecast_alert_code_UP_W        = "Heavy Freezing Spray Warning"
        forecast_alert_code_UP_A        = "Heavy Freezing Spray Watch"
        forecast_alert_code_SU_Y        = "High Surf Advisory"
        forecast_alert_code_SU_W        = "High Surf Warning"
        forecast_alert_code_HW_W        = "High Wind Warning"
        forecast_alert_code_HW_A        = "High Wind Watch"
        forecast_alert_code_HF_W        = "Hurricane Force Wind Warning"
        forecast_alert_code_HF_A        = "Hurricane Force Wind Watch"
        forecast_alert_code_HU_S        = "Hurricane Local Statement"
        forecast_alert_code_HU_W        = "Hurricane Warning"
        forecast_alert_code_HU_A        = "Hurricane Watch"
        forecast_alert_code_FA_Y        = "Hydrologic Advisory"
        forecast_alert_code_IS_W        = "Ice Storm Warning"
        forecast_alert_code_LE_W        = "Lake Effect Snow Warning"
        forecast_alert_code_LW_Y        = "Lake Wind Advisory"
        forecast_alert_code_LS_Y        = "Lakeshore Flood Advisory"
        forecast_alert_code_LS_S        = "Lakeshore Flood Statement"
        forecast_alert_code_LS_W        = "Lakeshore Flood Warning"
        forecast_alert_code_LS_A        = "Lakeshore Flood Watch"
        forecast_alert_code_LEW         = "Law Enforcement Warning"
        forecast_alert_code_LAE         = "Local Area Emergency"
        forecast_alert_code_LO_Y        = "Low Water Advisory"
        forecast_alert_code_MA_S        = "Marine Weather Statement"
        forecast_alert_code_NUW         = "Nuclear Power Plant Warning"
        forecast_alert_code_RHW         = "Radiological Hazard Warning"
        forecast_alert_code_RA_W        = "Rainfall Warning"
        forecast_alert_code_FW_W        = "Red Flag Warning"
        forecast_alert_code_RFW         = "Red Flag Warning"
        forecast_alert_code_RP_S        = "Rip Current Statement"
        forecast_alert_code_SV_W        = "Severe Thunderstorm Warning"
        forecast_alert_code_SV_A        = "Severe Thunderstorm Watch"
        forecast_alert_code_SV_S        = "Severe Weather Statement"
        forecast_alert_code_TO_S        = "Severe Weather Statement"
        forecast_alert_code_SPW         = "Shelter In Place Warning"
        forecast_alert_code_NOW         = "Short Term Forecast"
        forecast_alert_code_SC_Y        = "Small Craft Advisory"
        forecast_alert_code_SW_Y        = "Small Craft Advisory For Hazadous 
Seas"
        forecast_alert_code_RB_Y        = "Small Craft Advisory for Rough Bar"
        forecast_alert_code_SI_Y        = "Small Craft Advisory for Winds"
        forecast_alert_code_SO_W        = "Smog Warning"
        forecast_alert_code_SQ_W        = "Snow Squall Warning"
        forecast_alert_code_SQ_A        = "Snow Squall Watch"
        forecast_alert_code_SB_Y        = "Snow and Blowing Snow Advisory"
        forecast_alert_code_SN_W        = "Snowfall Warning"
        forecast_alert_code_MA_W        = "Special Marine Warning"
        forecast_alert_code_SPS         = "Special Weather Statement"
        forecast_alert_code_SG_W        = "Storm Surge Warning"
        forecast_alert_code_SS_W        = "Storm Surge Warning"
        forecast_alert_code_SS_A        = "Storm Surge Watch"
        forecast_alert_code_SR_W        = "Storm Warning"
        forecast_alert_code_SR_A        = "Storm Watch"
        forecast_alert_code_TO_W        = "Tornado Warning"
        forecast_alert_code_TO_A        = "Tornado Watch"
        forecast_alert_code_TC_S        = "Tropical Cyclone Statement"
        forecast_alert_code_TR_S        = "Tropical Storm Local Statement"
        forecast_alert_code_TR_W        = "Tropical Storm Warning"
        forecast_alert_code_TR_A        = "Tropical Storm Watch"
        forecast_alert_code_TS_Y        = "Tsunami Advisory"
        forecast_alert_code_TS_W        = "Tsunami Warning"
        forecast_alert_code_TS_A        = "Tsunami Watch"
        forecast_alert_code_TY_S        = "Typhoon Local Statement"
        forecast_alert_code_TY_W        = "Typhoon Warning"
        forecast_alert_code_TY_A        = "Typhoon Watch"
        forecast_alert_code_VOW         = "Volcano Warning"
        forecast_alert_code_WX_Y        = "Weather Advisory"
        forecast_alert_code_WX_W        = "Weather Warning"
        forecast_alert_code_WI_Y        = "Wind Advisory"
        forecast_alert_code_WC_Y        = "Wind Chill Advisory"
        forecast_alert_code_WC_W        = "Wind Chill Warning"
        forecast_alert_code_WC_A        = "Wind Chill Watch"
        forecast_alert_code_WI_W        = "Wind Warning"
        forecast_alert_code_WS_W        = "Winter Storm Warning"
        forecast_alert_code_WS_A        = "Winter Storm Watch"
        forecast_alert_code_LE_A        = "Winter Storm Watch"
        forecast_alert_code_BZ_A        = "Winter Storm Watch"
        forecast_alert_code_WW_Y        = "Winter Weather Advisory"
        forecast_alert_code_LE_Y        = "Winter Weather Advisory"
        forecast_alert_code_ZR_Y        = "Winter Weather Advisory"

        # Aeris European Alert Codes. From 
https://www.aerisweather.com/support/docs/aeris-maps/reference/alert-types/
        forecast_alert_code_AW_WI_MN        = "Minor Wind"
        forecast_alert_code_AW_WI_MD        = "Moderate Wind"
        forecast_alert_code_AW_WI_SV        = "Servere Wind"
        forecast_alert_code_AW_WI_EX        = "Extreme Wind"
        forecast_alert_code_AW_SI_MN        = "Minor Snow/Ice"
        forecast_alert_code_AW_SI_MD        = "Moderate Snow/Ice"
        forecast_alert_code_AW_SI_SV        = "Servere Snow/Ice"
        forecast_alert_code_AW_SI_EX        = "Extreme Snow/Ice"
        forecast_alert_code_AW_TS_MN        = "Minor Thunderstorm"
        forecast_alert_code_AW_TS_MD        = "Moderate Thunderstorm"
        forecast_alert_code_AW_TS_SV        = "Servere Thunderstorm"
        forecast_alert_code_AW_TS_EX        = "Extreme Thunderstorm"
        forecast_alert_code_AW_LI_MN        = "Minor Lightning"
        forecast_alert_code_AW_LI_MD        = "Moderate Lightning"
        forecast_alert_code_AW_LI_SV        = "Servere Lightning"
        forecast_alert_code_AW_LI_EX        = "Extreme Lightning"
        forecast_alert_code_AW_FG_MN        = "Minor Fog"
        forecast_alert_code_AW_FG_MD        = "Moderate Fog"
        forecast_alert_code_AW_FG_SV        = "Servere Fog"
        forecast_alert_code_AW_FG_EX        = "Extreme Fog"
        forecast_alert_code_AW_HT_MN        = "Minor High Temperature"
        forecast_alert_code_AW_HT_MD        = "Moderate High Temperature"
        forecast_alert_code_AW_HT_SV        = "Servere High Temperature"
        forecast_alert_code_AW_HT_EX        = "Extreme High Temperature"
        forecast_alert_code_AW_LT_MN        = "Minor Low Temperature"
        forecast_alert_code_AW_LT_MD        = "Moderate Low Temperature"
        forecast_alert_code_AW_LT_SV        = "Servere Low Temperature"
        forecast_alert_code_AW_LT_EX        = "Extreme Low Temperature"
        forecast_alert_code_AW_CE_MN        = "Minor Coastal Event"
        forecast_alert_code_AW_CE_MD        = "Moderate Coastal Event"
        forecast_alert_code_AW_CE_SV        = "Servere Coastal Event"
        forecast_alert_code_AW_CE_EX        = "Extreme Coastal Event"
        forecast_alert_code_AW_FR_MN        = "Minor Forest Fire"
        forecast_alert_code_AW_FR_MD        = "Moderate Forest Fire"
        forecast_alert_code_AW_FR_SV        = "Servere Forest Fire"
        forecast_alert_code_AW_FR_EX        = "Extreme Forest Fire"
        forecast_alert_code_AW_AV_MN        = "Minor Avalanche"
        forecast_alert_code_AW_AV_MD        = "Moderate Avalanche"
        forecast_alert_code_AW_AV_SV        = "Servere Avalanche"
        forecast_alert_code_AW_AV_EX        = "Extreme Avalanche"
        forecast_alert_code_AW_RA_MN        = "Minor Rainfall"
        forecast_alert_code_AW_RA_MD        = "Moderate Rainfall"
        forecast_alert_code_AW_RA_SV        = "Servere Rainfall"
        forecast_alert_code_AW_RA_EX        = "Extreme Rainfall"
        forecast_alert_code_AW_FL_MN        = "Minor Flooding"
        forecast_alert_code_AW_FL_MD        = "Moderate Flooding"
        forecast_alert_code_AW_FL_SV        = "Servere Flooding"
        forecast_alert_code_AW_FL_EX        = "Extreme Flooding"
        forecast_alert_code_AW_RF_MN        = "Minor Rain Flooding"
        forecast_alert_code_AW_RF_MD        = "Moderate Rain Flooding"
        forecast_alert_code_AW_RF_SV        = "Servere Rain Flooding"
        forecast_alert_code_AW_RF_EX        = "Extreme Rain Flooding"
        forecast_alert_code_AW_UK_MN        = "Minor Unknown"
        forecast_alert_code_AW_UK_MD        = "Moderate Unknown"
        forecast_alert_code_AW_UK_SV        = "Servere Unknown"
        forecast_alert_code_AW_UK_EX        = "Extreme Unknown"

        # Beaufort Scale Default Labels
        beaufort0  = "calm"
        beaufort1  = "light air"
        beaufort2  = "light breeze"
        beaufort3  = "gentle breeze"
        beaufort4  = "moderate breeze"
        beaufort5  = "fresh breeze"
        beaufort6  = "strong breeze"
        beaufort7  = "near gale"
        beaufort8  = "gale"
        beaufort9  = "strong gale"
        beaufort10 = "storm"
        beaufort11 = "violent storm"
        beaufort12 = "hurricane force"

        # DarkSky Specific Codes
        forecast_weather_code_W         = "Windy"
        forecast_weather_code_TO        = "Tornado"

        # Graphs Page Text and Titles
        graphs_page_all_button      = All
        graphs_windrose_frequency   = Frequency
        graphs_windDir_ordinals     = '{ 0: "N", 90: "E", 180: "S", 270: "W", 
360: "N" }'

        # Records Page Text and Titles
        records_ending                      = ending
        records_days_text                   = days
        records_all_time                    = All Time
        records_temperature_records         = Temperature Records
        records_high_temp                   = Highest Temperature
        records_low_temp                    = Lowest Temperature
        records_high_apptemp                = Highest Apparent Temperature
        records_low_apptemp                 = Lowest Apparent Temperature
        records_high_heatindex              = Highest Heat Index
        records_low_windchill               = Lowest Wind Chill
        records_largest_temp_range          = Largest Daily Temperature Range
        records_smallest_temp_range         = Smallest Daily Temperature Range
        records_wind_records                = Wind Records
        records_strongest_wind              = Strongest Wind Gust
        records_daily_windrun               = Highest Daily Wind Run
        records_rain_records                = Rain Records
        records_highest_daily_rainfall      = Highest Daily Rainfall
        records_highest_daily_rainrate      = Highest Daily Rain Rate
        records_month_high_rainfall         = Month with Highest Total Rainfall
        records_total_rainfall              = Total Rainfall for
        records_consec_days_with_rain       = Consecutive Days With Rain
        records_consec_days_without_rain    = Consecutive Days Without Rain
        records_humidity_records            = Humidity Records
        records_high_humidity               = Highest Humidity
        records_lowest_humidity             = Lowest Humidity
        records_highest_dewpoint            = Highest Dewpoint
        records_lowest_dewpoint             = Lowest Dewpoint
        records_barometer_records           = Barometer Records
        records_high_barometer              = Highest Barometer
        records_low_barometer               = Lowest Barometer
        records_sun_records                 = Sun Records
        records_high_solar_rad              = Highest Solar Radiation
        records_high_uv                     = Highest UV
        records_inTemp_records              = Inside Temp Records
        records_high_inTemp                 = Highest inside Temp
        records_low_inTemp                  = Lowest inside Temp

        # NOAA Reports Page Text and Titles
        reports_title               = NOAA Reports
        reports_click_here_link     = Click here
        reports_view_more           = to view this report directly or click on 
a month or year to change the NOAA report.

        # Pi Page Text and Titles
        mqtt_websockets_waiting_pi          = Connecting.
        mqtt_websockets_connected_pi        = Connected. Received

        # moment.js default labels formats
        time_earthquake                         = "LLL"
        time_last_updated                       = "LL, LTS"
        time_snapshot_records_today_header      = "dddd, LL"
        time_snapshot_records_month_header      = "MMMM YYYY"
        time_sunrise                            = "LT"
        time_sunset                             = "LT"
        time_forecast_alert_expires             = "LLL"
        time_forecast_date                      = "ddd M/DD"
        time_forecast_time                      = "ddd LT"                      
    # must be {day} {time} format
        time_forecast_last_updated              = "LLL"
        time_records_page_full_date             = "LLL"
        time_records_page_month_day_year        = "LL"
        time_records_page_rainfall_range_begin  = "MMMM DD"
        time_records_page_rainfall_range_end    = "LL"

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

[Almanac]
    # The labels to be used for the phases of the moon:
    moon_phases = New Moon, Waxing Crescent, First Quarter, Waxing Gibbous, 
Full Moon, Waning Gibbous, Last Quarter, Waning Crescent

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

[Units]
    # This section is for managing the selection and formatting of units.

    [[Groups]]
        # For each group of measurements, this section sets what units to
        # use for it.
        # NB: The unit is always in the singular. I.e., 'mile_per_hour',
        # NOT 'miles_per_hour'

        group_altitude     = foot                 # Options are 'foot' or 
'meter'
        group_degree_day   = degree_F_day         # Options are 'degree_F_day' 
or 'degree_C_day'
        group_direction    = degree_compass
        group_distance     = mile                 # Options are 'mile' or 'km'
        group_moisture     = centibar
        group_percent      = percent
        group_pressure     = inHg                 # Options are 'inHg', 'mmHg', 
'mbar', or 'hPa'
        group_radiation    = watt_per_meter_squared
        group_rain         = inch                 # Options are 'inch', 'cm', 
or 'mm'
        group_rainrate     = inch_per_hour        # Options are 
'inch_per_hour', 'cm_per_hour', or 'mm_per_hour'
        group_speed        = mile_per_hour        # Options are 
'mile_per_hour', 'km_per_hour', 'knot', or 'meter_per_second'
        group_speed2       = mile_per_hour2       # Options are 
'mile_per_hour2', 'km_per_hour2', 'knot2', or 'meter_per_second2'
        group_temperature  = degree_F             # Options are 'degree_F' or 
'degree_C'
        group_uv           = uv_index
        group_volt         = volt

        # The following are used internally and should not be changed:
        group_count        = count
        group_interval     = minute
        group_time         = unix_epoch
        group_elapsed      = second

    [[StringFormats]]
        # This section sets the string formatting for each type of unit.

        centibar           = %.0f
        cm                 = %.2f
        cm_per_hour        = %.2f
        degree_C           = %.1f
        degree_F           = %.1f
        degree_compass     = %.0f
        foot               = %.0f
        hPa                = %.1f
        hour               = %.1f
        inHg               = %.3f
        inch               = %.2f
        inch_per_hour      = %.2f
        km                 = %.2f
        km_per_hour        = %.0f
        km_per_hour2       = %.1f
        knot               = %.0f
        knot2              = %.1f
        mbar               = %.1f
        meter              = %.0f
        meter_per_second   = %.1f
        meter_per_second2  = %.1f
        mile               = %.2f
        mile_per_hour      = %.0f
        mile_per_hour2     = %.1f
        mm                 = %.1f
        mmHg               = %.1f
        mm_per_hour        = %.1f
        percent            = %.0f
        second             = %.0f
        uv_index           = %.1f
        volt               = %.1f
        watt_per_meter_squared = %.0f
        NONE               = "N/A"

    [[Labels]]
        # This section sets a label to be used for each type of unit.

        centibar          = " cb"
        cm                = " cm"
        cm_per_hour       = " cm/hr"
        degree_C          =  " °C"
        degree_F          =  " °F"
        degree_compass    =   °
        foot              = " feet"
        hPa               = " hPa"
        inHg              = " inHg"
        inch              = " in"
        inch_per_hour     = " in/hr"
        km                = " km"
        km_per_hour       = " km/h"
        km_per_hour2      = " km/h"
        knot              = " knots"
        knot2             = " knots"
        mbar              = " mbar"
        meter             = " meters"
        meter_per_second  = " m/s"
        meter_per_second2 = " m/s"
        mile              = " miles"
        mile_per_hour     = " mph"
        mile_per_hour2    = " mph"
        mm                = " mm"
        mmHg              = " mmHg"
        mm_per_hour       = " mm/hr"
        percent           =   %
        volt              = " V"
        watt_per_meter_squared = " W/m²"
        day               = " day",    " days"
        hour              = " hour",   " hours"
        minute            = " minute", " minutes"
        second            = " second", " seconds"
        NONE              = ""

    [[TimeFormats]]
        # This section sets the string format to be used for each time scale.
        # The values below will work in every locale, but may not look
        # particularly attractive. See the Customization Guide for alternatives.

        day        = %X
        week       = %X (%A)
        month      = %x %X
        year       = %x %X
        rainyear   = %x %X
        current    = %x %X
        ephem_day  = %X
        ephem_year = %x %X

    [[TimeZone]]
        # The time zone in 'Area/Location' format. e. g. America/New_York
        time_zone  = "Australia/Sydney"

    [[Ordinates]]
        # The ordinal directions. The last one should be for no wind direction
        directions = N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, 
NW, NNW, N/A

    [[DegreeDays]]
        # This section sets the base temperatures used for the calculation
        # of heating and cooling degree-days.

        # Base temperature for heating days, with unit:
        heating_base = 65, degree_F
        # Base temperature for cooling days, with unit:
        cooling_base = 65, degree_F

    [[Trend]]
        time_delta = 10800  # 3 hours
        time_grace = 300    # 5 minutes

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

[CheetahGenerator]
    # This section is used by the generator CheetahGenerator, and specifies
    # which files are to be generated from which template.

    search_list_extensions = user.belchertown.getData

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

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

    [[SummaryByYear]]
        # Reports that summarize "by year"
        [[[NOAA_year]]]
            encoding = utf8
            template = NOAA/NOAA-YYYY.txt.tmpl

    [[ToDate]]
        # Reports that show statistics "to date", such as day-to-date,
        # week-to-date, month-to-date, etc.
        [[[weewx_data]]]
            template = json/weewx_data.json.tmpl

        [[[Belchertown]]]
            template = js/belchertown.js.tmpl

        [[[home]]]
            template = index.html.tmpl

        [[[about]]]
            template = about/index.html.tmpl

        [[[graphs]]]
            template = graphs/index.html.tmpl

        [[[records]]]
            template = records/index.html.tmpl

        [[[reports]]]
            template = reports/index.html.tmpl

        [[[pi]]]
            template = pi/index.html.tmpl

        [[[kiosk]]]
            template = kiosk.html.tmpl

        [[[manifest]]]
            encoding = utf8
            template = manifest.json.tmpl

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

[CopyGenerator]

    # This section is used by the generator CopyGenerator

    # List of files to be copied only the first time the generator runs
    copy_once = favicon.ico, images/*, json/index.html, js/index.html, 
js/responsive-menu.js, robots.txt

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


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

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

Attachment: traefik.yaml
Description: application/yaml

# WEEWX CONFIGURATION FILE
#
# Copyright (c) 2009-2024 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.
debug = 0

# Suggested by Mike Wall on Google groups at 
https://groups.google.com/g/weewx-user/c/oOg5qB6SCL4
# loop_on_init = true

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

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

#   This section is for information about the station.

[Station]
    
    # Description of the station location, such as your town.
    location = Dreamwood Estate
    
    # Latitude in decimal degrees. Negative for southern hemisphere.
    latitude = -33.214868
    # Longitude in decimal degrees. Negative for western hemisphere.
    longitude = 149.022575
    
    # Altitude of the station, with the unit it is in. This is used only
    # if the hardware cannot supply a value.
    altitude = 735, meter    # 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://dreamwoodinternational.com/weewx/belchertown
    
    # 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 = 0

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

[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 = 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.
        # Use quotes around the password to guard against parsing errors.
        enable = true
        station = redacted
        password = redacted
    
    [[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
    
    [[WeatherCloud]]
        # This section added by PAS 21/6/2025
        # This section is for configuring posts to WeatherCloud.
        
        # If you wish to post to WeatherCloud, set the option 'enable' to true, 
then
        # specify a station and password.
        # Use quotes around the password to guard against parsing errors.
        enable = true
        id = redacted
        key = redacted
    
    [[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 = true
        station = redacted
        password = redacted
        
        # 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
    
    [[MQTT]]
        server_url = mqtts://user:[email protected]:8883/
        topic = weather/loop
        unit_system = METRICWX
        binding = loop,archive
        aggregation = aggregate  
        retain = false

        log_success = true
        log_failure = true
       
##############################################################################

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

[StdReport]
    
    # Where the skins reside, relative to WEEWX_ROOT
    SKIN_ROOT = /etc/weewx/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 = true
    
    [[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 = true
        HTML_ROOT = /var/www/html/weewx/mobile
    
    [[StandardReport]]
        # This is the old "Standard" skin. By default, it is not enabled.
        skin = Standard
        enable = true
    
    [[Belchertown]]
        skin = Belchertown
        HTML_ROOT = /var/www/html/weewx/belchertown
        enable = true
        
        [[[Extras]]]
            
            # For help refer to the docs at 
https://github.com/poblabs/weewx-belchertown
            # and consult skin.conf for the configurable elements and their 
hierarchy
            
            #--- General Options ---
            belchertown_debug = 0
            # belchertown_locale = "auto"
            belchertown_locale = en_AU.utf8
            theme = auto
            theme_toggle_enabled = 1
            # logo_image = ""
            # logo_image_dark = ""
            site_title = Dreamwood Estate
            station_observations = barometer, dewpoint, outHumidity, 
rainWithRainRate
            beaufort_category = 1
            manifest_name = Windera NSW
            manifest_short_name = WinderaWx
            # aeris_map = 0
            radar_html = ""    #  (default seems to center on your lat/lon)
            radar_html_dark = None
            radar_zoom = 7
            radar_marker = 1
            almanac_extras = 1
            # Manifest Settings for Mobile Phones
            # manifest_name = "WinderaWx"
            # manifest_short_name = "Wx"
            highcharts_enabled = 1
            graph_page_show_all_button = 1
            graph_page_default_graphgroup = day
            highcharts_homepage_graphgroup = homepage
            highcharts_decimal = auto
            highcharts_thousands = auto
            # googleAnalyticsId = ""
            # pi_kiosk_bold = "false"
            # pi_theme = "auto"
            # webpage_autorefresh = 0
            reload_hook_images = 1
            reload_images_radar = 300
            # reload_images_hook_asi = -1
            # reload_images_hook_af = -1
            # reload_images_hook_as = -1
            # reload_images_hook_ac = -1
            # show_last_updated_alert = 0
            # last_updated_alert_threshold = 1800
            
            #--- MQTT Websockets (for Real Time Streaming) Options ---
            mqtt_websockets_enabled = 1
            mqtt_websockets_host = mqtt.dreamwoodestate.net
            mqtt_websockets_port = 9011
            mqtt_websockets_ssl = 1
            mqtt_websockets_topic = weather/loop
            # disconnect_live_website_visitor = 1800000
            
            #--- Forecast Options ---
            forecast_enabled = 1
            forecast_provider = aeris
            forecast_api_id = redacted
            forecast_api_secret = redacted
            forecast_units = ca
            forecast_lang = en
            forecast_stale = 3540
            forecast_aeris_use_metar = 0
            forecast_interval_hours = 24
            forecast_alert_enabled = 0
            # forecast_alert_limit = 1
            # forecast_show_daily_forecast_link = 0
            # forecast_daily_forecast_link = ""
            # aqi_enabled = 0
            # aqi_location_enabled = 0
            
            #--- Earthquake Options ---
            earthquake_enabled = 1
            earthquake_maxradiuskm = 5000
            earthquake_stale = 10740
            earthquake_server = USGS
            geonet_mmi = 4
            
            #--- Social Options ---
            # facebook_enabled = 0
            # twitter_enabled = 0
            # twitter_hashtags = "weewx #weather"
            # social_share_html = ""
            
            #--- Kiosk Options ---
            radar_html_kiosk = ""
            radar_width_kiosk = 490
            radar_height_kiosk = 362
            mqtt_websockets_host_kiosk = mqtt.dreamwoodestate.net
            mqtt_websockets_port_kiosk = 9011
            mqtt_websockets_ssl_kiosk = 1
            forecast_interval_hours_kiosk = 24
            aqi_enabled_kiosk = 0

            # Display a Back To Top Button
            back_to_top_button_enabled = 1
            # Button position, 0 for right side , 1 for left side
            back_to_top_button_position = 0
            # Button opacity from 0.1 to 1.0
            back_to_top_button_opacity = 0.5
            
            #-------------------------------------------------------------
            #---
            #--- python's ConfigObj has a limitation in how it processes
            #--- comments, so we need to define an 'unused' variable below
            #--- to ensure that this whole stanza makes it into weewx.conf
            #--- 
            #--- please ignore the following 'unused' variable
            #---
            #-------------------------------------------------------------
            work_around_ConfigObj_limitations = true

#    [[sqlbackup]]
#        skin = sqlbackup
#        HTML_ROOT = /var/www/html/weewx/sqlbackup
    
    [[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 = true
        user = redacted
        password = redacted
        server = redacted    # The ftp server name, e.g, www.myserver.org
        path = ""    # 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 = metricwx
        
        [[[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 = hPa    # 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'
                group_distance = km
                group_degree_day = degree_C_day
                group_speed = km_per_hour
                # 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 = Radio Shack
                inTemp = Radio Shack
                # 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
#       beaufort = software

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

#   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
    # record_generation = software
    
    # 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, user.mqtt.MQTT
        report_services = weewx.engine.StdPrint, weewx.engine.StdReport

Attachment: fileConfig.yaml
Description: application/yaml

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example


pid_file /run/mosquitto/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log

log_dest syslog

connection_messages false

include_dir /etc/mosquitto/conf.d

Attachment: docker-compose.yaml
Description: application/yaml

Reply via email to