Having trouble setting up MQTTSubscribe

214 views
Skip to first unread message

Nick Kavanagh

unread,
Jan 14, 2022, 11:47:53 AM1/14/22
to weewx-user
Hello,

I am setting up a new weewx server, with an sdr driver, Belchertown skin, and MQTTSubscibe.

I installed weewx on a RaspberryPi 4 (4GB) using sudo apt install weewx.

When I issue the command sudo systemctl start (or restart) weewx, I get this message under status and under /var/log/syslog:

sudo systemctl status weewx
● weewx.service - LSB: weewx weather system
   Loaded: loaded (/etc/init.d/weewx; generated)
   Active: active (exited) since Fri 2022-01-14 10:27:28 EST; 1h 5min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1049 ExecStart=/etc/init.d/weewx start (code=exited, status=0/SUCCESS)

Jan 14 10:27:29 weewxserver python3[1064]: weewx[1064] CRITICAL __main__:     ****    File "/usr/share/weewx/weewxd", line 151, in main
Jan 14 10:27:29 weewxserver python3[1064]: weewx[1064] CRITICAL __main__:     ****      engine = weewx.engine.StdEngine(config_dict)
Jan 14 10:27:29 weewxserver python3[1064]: weewx[1064] CRITICAL __main__:     ****    File "/usr/share/weewx/weewx/engine.py", line 93, in __init__
Jan 14 10:27:29 weewxserver python3[1064]: weewx[1064] CRITICAL __main__:     ****      self.loadServices(config_dict)
Jan 14 10:27:29 weewxserver python3[1064]: weewx[1064] CRITICAL __main__:     ****    File "/usr/share/weewx/weewx/engine.py", line 161, in loadServices
Jan 14 10:27:29 weewxserver python3[1064]: weewx[1064] CRITICAL __main__:     ****      obj = weeutil.weeutil.get_object(svc)(self, config_dict)
Jan 14 10:27:29 weewxserver python3[1064]: weewx[1064] CRITICAL __main__:     ****    File "/usr/share/weewx/weeutil/weeutil.py", line 1119, in get_object
Jan 14 10:27:29 weewxserver python3[1064]: weewx[1064] CRITICAL __main__:     ****      mod = __import__(module)
Jan 14 10:27:29 weewxserver python3[1064]: weewx[1064] CRITICAL __main__:     ****  ModuleNotFoundError: No module named 'user.MQTTSubscribe'
Jan 14 10:27:29 weewxserver python3[1064]: weewx[1064] CRITICAL __main__:     ****  Exiting

I am unsure what I have done wrong. What other information can I provide to help track down my error? Where should user.MQTTSubscribe be located?

Thanks,
Nick

Nick Kavanagh

unread,
Jan 14, 2022, 11:49:33 AM1/14/22
to weewx-user
Also meant to add I am using an Acurite5N1 weather station. I will also have several ESP8266/ESP32 boards with temp/humidity/pressure sensors reporting via MQTT.

Nick

Stefanos Kalaitzis

unread,
Jan 14, 2022, 12:44:57 PM1/14/22
to weewx-user
hi ... I will show mine ... may help you ..
in skin.conf i have added this
# MQTT Websockets defaults
    mqtt_websockets_enabled = 1
    mqtt_websockets_host = "broker.emqx.io"
    mqtt_websockets_port = 8084
    mqtt_websockets_ssl = 1
    mqtt_websockets_topic = "whatever_name_you_want/loop"
    disconnect_live_website_visitor = 1800000

in weewx.conf i use this:
[[MQTT]]
        server_url = mqtt://broker.emqx.io:8883
        topic = same_as_in_skin.conf  #mqtt_websokets_topic
        unit_system = METRICWX
        binding = loop
        aggregation = aggregate
        log_success = False
        log_failure = True
        [[[tls]]]
            ca_certs = /etc/ssl/certs/broker.emqx.io-ca.crt
        [[[inputs]]]
            [[[[windSpeed]]]]
                units = km_per_hour
            [[[[windGust]]]]
                units = km_per_hour
the only thing to do before you done it is to download from emqx broker their free certificate and save it to /etc/ssl/certs/

storm...@gmail.com

unread,
Jan 14, 2022, 12:53:48 PM1/14/22
to weewx-user

vince

unread,
Jan 14, 2022, 1:28:24 PM1/14/22
to weewx-user
If it installed correctly, you should see it installed as /usr/share/weewx/user/MQTTSubscribe.py

Run "wee_extension --list" to see the list of extensions you have installed.

Nick Kavanagh

unread,
Jan 14, 2022, 3:53:06 PM1/14/22
to weewx-user
Running wee_extension --list showed that MQTTSubscribe was NOT installed. I really don't know how that happened, but it did solve the error no module named 'user.MQTTsubscribe'. However, when I attempt to start, it now returns a very similar error:
no module named 'user.lightning_strikes'

I suspect something in weewx.conf or skin.conf

weewx.conf:

# WEEWX CONFIGURATION FILE
#
# Copyright (c) 2009-2021 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

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

# Whether to log successful operations
log_success = True

# Whether to log unsuccessful operations
log_failure = True

# How long to wait before timing out a socket (FTP, HTTP) connection
socket_timeout = 20

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

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

#   This section is for information about the station.

[Station]
   
    # Description of the station location
    location = "Private home in rural S Knox County, TN"
   
    # Latitude in decimal degrees. Negative for southern hemisphere
    latitude = 35.912331
    # Longitude in decimal degrees. Negative for western hemisphere.
    longitude = -83.878532
   
    # Altitude of the station, with unit it is in. This is downloaded from
    # from the station if the hardware supports it.
    altitude = 974, foot
   
    # Set to type of station hardware. There must be a corresponding stanza
    # in this file with a 'driver' parameter indicating the driver to be used.
    station_type = SDR
   
    # If you have a website, you may specify an URL
    station_url = https://stonecressweather.ddns.net
   
    # 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

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

[SDR]
    # This section is for the software-defined radio driver.
    # The driver to use
    driver = user.sdr
    log_unknown_sensors = True
    log_unmapped_sensors = True
    cmd = sudo rtl_433 -M utc -F json
   
    [[sensor_map]]
        outTemp = temperature.0825.Acurite5n1PacketV2
        inTemp = temperature.1D14.AcuriteTowerPacketV2
       
        extraTemp2 = temperature.0009.AcuriteLightningPacket
        extraTemp3 = temperature.3F14.AcuriteTowerPacketV2
        outHumidity = humidity.0825.Acurite5n1PacketV2
        inHumidity = humidity.1D14.AcuriteTowerPacketV2
        extraHumid1 = humidity.0009.AcuriteLightningPacket
        extraHumid2 = humidity.3F14.AcuriteTowerPacketV2
        windDir = wind_dir.0825.Acurite5n1PacketV2
        windSpeed = wind_speed.0825.Acurite5n1PacketV2
        rain_total = rain_total.0825.Acurite5n1PacketV2
        lightning_distance = distance.0009.AcuriteLightningPacket
        strikes_total = strikes_total.0009.AcuriteLightningPacket
   
    [[deltas]]
        rain = rain_total
        lightning_strike_count = strikes_total


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

[Simulator]
    # This section is for the weewx weather station simulator
   
    # The time (in seconds) between LOOP packets.
    loop_interval = 2.5
   
    # The simulator mode can be either 'simulator' or 'generator'.
    # Real-time simulator. Sleep between each LOOP packet.
    mode = simulator
    # Generator.  Emit LOOP packets as fast as possible (useful for testing).
    #mode = generator
   
    # The start time. Format is YYYY-mm-ddTHH:MM. If not specified, the default
    # is to use the present time.
    #start = 2011-01-01T00:00
   
    # The driver to use:
    driver = weewx.drivers.simulator

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

#   This section is for uploading data to Internet sites

[StdRESTful]
   
    [[StationRegistry]]
        # To register this weather station with weewx, set this to true
        register_this_station = true
   
    [[AWEKAS]]
        # This section is for configuring posts to AWEKAS.
       
        # If you wish to do this, set the option 'enable' to true,
        # and specify a username and password.
        # To guard against parsing errors, put the password in quotes.
        enable = false
        username = replace_me
        password = replace_me
   
    [[CWOP]]
        # This section is for configuring posts to CWOP.
       
        # If you wish to do this, set the option 'enable' to true,
        # and specify the station ID (e.g., CW1234).
        enable = true
        station = FW9927
        post_interval = 900
        stale = 600
        server_list = cwop.aprs.net:14580, cwop.aprs.net:23
        log_success = true
        log_failure = true
   
    # If this is an APRS (radio amateur) station, uncomment
    # the following and replace with a passcode (e.g., 12345).
    #passcode = replace_me (APRS stations only)
   
    [[PWSweather]]
        # This section is for configuring posts to PWSweather.com.
       
        # If you wish to do this, set the option 'enable' to true,
        # and specify a station and password.
        # To guard against parsing errors, put the password in quotes.
        enable = true
        station = STONECRESS
        password = Funkytown1
   
    [[WOW]]
        # This section is for configuring posts to WOW.
       
        # If you wish to do this, set the option 'enable' to true,
        # and specify a station and password.
        # To guard against parsing errors, put the password in quotes.
        enable = false
        station = replace_me
        password = replace_me
   
    [[Wunderground]]
        # This section is for configuring posts to the Weather Underground.
       
        # If you wish to do this, set the option 'enable' to true,
        # and specify a station (e.g., 'KORHOODR3') and password.
        # To guard against parsing errors, put the password in quotes.
        enable = false
        station = replace_me
        password = replace_me
       
        # If you plan on using wunderfixer, set the following
        # to your API key:
        api_key = replace_me
       
        # Set the following to True to have weewx use the WU "Rapidfire"
        # protocol. Not all hardware can support it. See the User's Guide.
        rapidfire = False

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

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

[StdReport]
   
    # Where the skins reside, relative to WEEWX_ROOT
    SKIN_ROOT = /etc/weewx/skins
   
    # Where the generated reports should go, relative to WEEWX_ROOT
    HTML_ROOT = /var/www/html/weewx
   
    # The database binding indicates which data should be used in reports.
    data_binding = wx_binding
   
    # Whether to log a successful operation
    log_success = True
   
    # Whether to log an unsuccessful operation
    log_failure = True
   
    # 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 = false
        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
    [[Belchertown]]
        HTML_ROOT = /var/www/html/weewx/belchertown
        skin = Belchertown
        enable = true
    [[forecast]]
        HTML_ROOT = /var/www/html/weewx/forecast
        skin = forecast
        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 passwords to guard against parsing errors.
        enable = false
        user = replace_me
        password = replace_me
        server = replace_me    # The ftp server name, e.g, www.myserver.org
        path = replace_me    # The destination directory, e.g., /weather
       
        # Set to True for an FTP over TLS (FTPS) connection. Not all servers
        # support this.
        secure_ftp = False
       
        # To upload files from something other than what HTML_ROOT is set
        # to above, specify a different HTML_ROOT here.
        #HTML_ROOT = /var/www/html/weewx
       
        # Most FTP servers use port 21
        port = 21
       
        # Set to 1 to use passive mode, zero for active mode
        passive = 1
   
    [[RSYNC]]
        # rsync'ing to a webserver is treated as just another report
        skin = Rsync
       
        # If you wish to use rsync, you must configure passwordless ssh using
        # public/private key authentication from the user account that weewx
        # runs to the user account on the remote machine where the files
        # will be copied.
        #
        # If you wish to use rsync, set "enable" to "true", then
        # fill out server, user, and path.
        # The server should appear in your .ssh/config file.
        # The user is the username used in the identity file.
        # The path is the destination directory, such as /var/www/html/weather.
        # Be sure that the user has write permissions on the destination!
        enable = false
        server = replace_me
        user = replace_me
        path = replace_me
       
        # To upload files from something other than what HTML_ROOT is set
        # to above, specify a different HTML_ROOT here.
        #HTML_ROOT = /var/www/html/weewx
       
        # Rsync can be configured to remove files from the remote server if
        # they don't exist under HTML_ROOT locally. USE WITH CAUTION: if you
        # make a mistake in the remote path, you could could unintentionally
        # cause unrelated files to be deleted. Set to 1 to enable remote file
        # deletion, zero to allow files to accumulate remotely.
        delete = 0
   
    ####
   
    # Various options for customizing your reports.
   
    [[Defaults]]
       
        [[[Units]]]
           
            # The following section sets what unit to use for each unit group.
            # NB: The unit is always in the singular. I.e., 'mile_per_hour',
            # NOT 'miles_per_hour'
            [[[[Groups]]]]
               
                group_altitude = foot    # Options are 'foot' or 'meter'
                group_degree_day = degree_F_day    # Options are 'degree_F_day' or 'degree_C_day'
                group_distance = mile    # Options are 'mile' or 'km'
                group_pressure = inHg    # Options are 'inHg', 'mmHg', 'mbar', 'hPa', or 'kPa'
                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'
           
            # The following section sets the formatting for each type of unit.
            [[[[StringFormats]]]]
               
                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 = %.1f
                km_per_hour = %.0f
                km_per_hour2 = %.1f
                knot = %.0f
                knot2 = %.1f
                kPa = %.2f
                mbar = %.1f
                meter = %.0f
                meter_per_second = %.1f
                meter_per_second2 = %.1f
                mile = %.1f
                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"
           
            # The following section overrides the label used for each type of unit
            [[[[Labels]]]]
               
                meter = " meter", " meters"    # You may prefer "metre".
                day = " day", " days"
                hour = " hour", " hours"
                minute = " minute", " minutes"
                second = " second", " seconds"
                NONE = ""
           
            # The following section sets the format for each time scale.
            # The values below will work in every locale, but they may not look
            # particularly attractive.
            [[[[TimeFormats]]]]
               
                hour = %H:%M
                day = %X
                week = %X (%A)
                month = %x %X
                year = %x %X
                rainyear = %x %X
                current = %x %X
                ephem_day = %X
                ephem_year = %x %X
           
            [[[[Ordinates]]]]
               
                # Ordinal directions. The last one is for no wind direction
                directions = N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW, N/A
           
            # The following section sets the base temperatures used for the
            #  calculation of heating, cooling, and growing degree-days.
            [[[[DegreeDays]]]]
               
                # Base temperature for heating days, with unit:
                heating_base = 65, degree_F
                # Base temperature for cooling days, with unit:
                cooling_base = 65, degree_F
                # Base temperature for growing days, with unit:
                growing_base = 50, degree_F
           
            # A trend takes a difference across a time period. The following
            # section sets the time period, and how big an error is allowed to
            # still be counted as the start or end of a period.
            [[[[Trend]]]]
               
                time_delta = 10800    # 3 hours
                time_grace = 300    # 5 minutes
       
        # The labels to be used for each observation type
        [[[Labels]]]
           
            # Set to hemisphere abbreviations suitable for your location:
            hemispheres = N, S, E, W
           
            # Formats to be used for latitude whole degrees, longitude whole
            # degrees, and minutes:
            latlon_formats = %02d, %03d, %05.2f
           
            # Generic labels, keyed by an observation type.
            [[[[Generic]]]]
                barometer = Barometer
                dewpoint = Dew Point
                ET = ET
                heatindex = Heat Index
                inHumidity = Front Room Humidity
                inTemp = Front Room Temperature
                outTemp = Outside Temperature
                radiation = Radiation
                rain = Rain
                rainRate = Rain Rate
                UV = UV Index
                windDir = Wind Direction
                windGust = Gust Speed
                windGustDir = Gust Direction
                windSpeed = Wind Speed
                windchill = Wind Chill
                windgustvec = Gust Vector
                windvec = Wind Vector
                extraTemp1 = Center Room Temperature
                extraTemp2 = Back Yard Temperature
                extraTemp3 = Back Room Temperature
                extraTemp4 = Annex Temperature
                extraHumid1 = Outside Humidity
                extraHumid2 = Back Room Humidity
                extraHumid3 = Annex Humidity
                lightning_strike_count = Lightning Strikes
                pm1_0 = Indoor 1.0 Particulate
                pm2_5 = "       2.5"
                pm10_0 = "       10.0"
                pm1_0A = Outdoor 1.0 Particulate
                pm2_5A = 2.5
                pm10_0A = 10.0
                pressure = Pressure
               
                # Sensor status indicators
               
                rxCheckPercent = Signal Quality
                txBatteryStatus = Transmitter Battery
                windBatteryStatus = Wind Battery
                rainBatteryStatus = Rain Battery
                outTempBatteryStatus = Outside Temperature Battery
                inTempBatteryStatus = Inside Temperature Battery
                consBatteryVoltage = Console Battery
                heatingVoltage = Heating Battery
                supplyVoltage = Supply Voltage
                referenceVoltage = Reference Voltage
                batteryStatus1 = 5n1 Battery
                batteryStatus2 = Living Room Battery
                batteryStatus3 = Backyard Battery
       
        [[[Almanac]]]
           
            # The labels to be used for the phases of the moon:
            moon_phases = New, Waxing crescent, First quarter, Waxing gibbous, Full, Waning gibbous, Last quarter, Waning crescent

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

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

[StdConvert]
   
    # The target_unit affects only the unit system in the database. Once
    # chosen it cannot be changed without converting the entire database.
    # Modification of target_unit after starting weewx will result in
    # corrupt data - the database will contain a mix of US and METRIC data.
    # The value of target_unit does not affect the unit system for
    # reporting - reports can display US, Metric, or any combination of units.
    #
    # In most cases, target_unit should be left as the default: US
    #
    # In particular, those migrating from a standard wview installation
    # should use US since that is what the wview database contains.
   
    # DO NOT MODIFY THIS VALUE UNLESS YOU KNOW WHAT YOU ARE DOING!
    target_unit = US    # Options are 'US', 'METRICWX', or 'METRIC'

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

#   This section can adjust data using calibration expressions.

[StdCalibrate]
   
    [[Corrections]]
        # For each type, an arbitrary calibration expression can be given.
        # It should be in the units defined in the StdConvert section.
        # Example:
        foo = foo + 0.2
#lightning_distance = lightning_distance if lightning_strike_count > 0
#else lightning_distance = 0

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

#   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 = hardware
        altimeter = prefer_hardware
        appTemp = prefer_hardware
        barometer = 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 = software
        windrun = prefer_hardware
        UV = software
   
    [[deltas]]
        [[[lightning_strikes]]]
            input = lightning_strike_count

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

#   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
   
    # 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 = user.lightning_strikes.schema_with_lightning_strikes
    [[forecast_binding]]
        database = forecast_sqlite

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

#   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
    [[forecast_sqlite]]
        database_name = forecast.sdb
        database_type = SQLite

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

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

[DatabaseTypes]
   
    # Defaults for SQLite databases
    [[SQLite]]
        driver = weedb.sqlite
        # Directory in which the database files are located
        SQLITE_ROOT = /var/lib/weewx
   
    # Defaults for MySQL databases
    [[MySQL]]
        driver = weedb.mysql
        # The host where the database is located
        host = localhost
        # The user name for logging in to the host
        user = weewx
        # The password for the user name (quotes guard against parsing errors)
        password = weewx

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

#   This section configures the internal weewx engine.

[Engine]
    # The following section specifies which services should be run and in what order.
    [[Services]]
        prep_services = weewx.engine.StdTimeSynch
        data_services = user.MQTTSubscribe.MQTTSubscribeService,
        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, user.forecast.ZambrettiForecast, user.forecast.NWSForecast, user.forecast.WUForecast, user.forecast.OWMForecast, user.forecast.UKMOForecast, user.forecast.AerisForecast, user.forecast.WWOForecast, user.forecast.DSForecast, user.forecast.XTideForecast
        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
[Forecast]
    data_binding = forecast_binding
    [[OWM]]
        api_key = INSERT_OWM_API_KEY_HERE
    [[WWO]]
        api_key = INSERT_WWO_API_KEY_HERE
    [[WU]]
        api_key = INSERT_WU_API_KEY_HERE
    [[NWS]]
        lid = "INSERT_LOCATION_ID_HERE (e.g., MAZ014)"
        foid = "INSERT_FORECAST_OFFICE_ID_HERE (e.g., BOX)"
    [[UKMO]]
        api_key = INSERT_UKMO_API_KEY_HERE
        location = INSERT_UK_LOCATION_HERE
    [[XTide]]
        location = "INSERT_LOCATION_HERE (e.g., Boston)"
    [[Zambretti]]
        hemisphere = NORTH
    [[Aeris]]
        client_secret =
        client_id =
    [[DS]]
        api_key = INSERT_DS_API_KEY_HERE

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

# Options for 'MQTTSubscribeService'
[MQTTSubscribeService]
    # This section is for the MQTTSubscribe service.
   
    # Turn the service on and off.
    # Default is: true
    # Only used by the service.
    enable = true
   
    # The MQTT server.
    # Default is localhost.
    host = localhost
   
    # The port to connect to.
    # Default is 1883.
    port = 1883
   
    # Maximum period in seconds allowed between communications with the broker.
    # Default is 60.
    keepalive = 120
   
    # username for broker authentication.
    # Default is None.
    username = None
   
    # password for broker authentication.
    # Default is None.
    password = None
   
    # The binding, loop or archive.
    # Default is: loop
    # Only used by the service.
    binding = loop
   
    # The message handler to use
    [[message_callback]]
        # The format of the MQTT payload.
        # Currently support: individual, json, keyword
        # Must be specified.
        type = individual
   
    # The topics to subscribe to.
    [[topics]]
        # Units for MQTT payloads without unit value.
        # Valid values: US, METRIC, METRICWX
        # Default is: US
        unit_system = US
        msg_id_field = id
        [[[weather/barometer]]]
            [[[[weather/barometer]]]]
                name = barometer
        [[[weather/ExtraTemp1]]]
            [[[[weather/ExtraTemp1]]]]
                name = extraTemp1
        [[[weather/ExtraTemp4]]]
            [[[[weather/ExtraTemp4]]]]
                name = extraTemp4
        [[[weather/extraHumid3]]]
            [[[[weather/extraHumid3]]]]
                name = extraHumid3
        [[[weather/pressure]]]
            [[[[weather/pressure]]]]
                name = pressure
        [[[weather/UV]]]
            [[[[weather/UV]]]]
                name = radiation
                conversion type = float
        [[[weather/oneOum]]]
            [[[[weather/oneOum]]]]
                name = pm1_0
        [[[weather/twofiveum]]]
            [[[[weather/twofiveum]]]]
                name = pm2_5
        [[[weather/tenum]]]
            [[[[weather/tenum]]]]
                name = pm10_0
        [[[particulate/partone]]]
            [[[[particulate/partone]]]]
                name = pm1_0A
        [[[particulate/parttwofive]]]
            [[[[particulate/parttwofive]]]]
                name = pm2_5A
        [[[particulate/partten]]]
            [[[[particulate/partten]]]]
                name = pm10_0A


[Accumulator]
    [[lightning_strike_count]]
        extractor = sum
    [[lightning_distance]]
        extractor = min

skin.conf:

###############################################################################
# SKIN CONFIGURATION FILE                                                     #
# Copyright (c) 2010 Tom Keffer <tke...@gmail.com>                           #
# Updated for the Belchertown Skin by Pat O'Brien, 2019                       #
###############################################################################

[Extras]

    # General Site Defaults
    belchertown_debug = 0
    belchertown_locale = "auto"
    theme = auto
    theme_toggle_enabled = 1
    site_title = "Colonial Village, Knoxville, TN"
    logo_image = ""
    logo_image_dark = ""
    radar_html = ""
    almanac_extras = 1
    beaufort_category = 1

    # Station Observations. Special observation rainWithRainRate combines Daily Rain with Rain Rate in 1 line
    station_observations = "barometer","pressure","rainWithRainRate","lightning_strike_count","extraHumid1","dewpoint","extraTemp2","inTemp","extraTemp1","extraTemp3","extraTemp4","inHumidity","extraHumid2","extraHumid3"
        ##"pm1_0", "pm2_5", "pm10_0", "pm1_0A", "pm2_5A", "pm10_0A"

    # Manifest Settings for Mobile Phones
    manifest_name = "My Weather Website"
    manifest_short_name = "MWW"

    # 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 = 0
    mqtt_websockets_host = "192.168.1.97"
    mqtt_websockets_port = 1883
    mqtt_websockets_ssl = 0
    mqtt_websockets_topic = "weather/barometer"
    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 = 1
    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 = 300000

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

    # Forecast defaults
    forecast_enabled = 1
    forecast_provider = "aeris"
    forecast_api_id = "ipVXLoho5gmCo4dn0qUIK"
    forecast_api_secret = "NSaLIgCPa4BnbPfNwhawcl3hB9iIbxowVewcgKDB"
    forecast_units = "us"
    forecast_lang = "en"
    forecast_stale = 3000
    forecast_aeris_use_metar = 1
    forecast_alert_enabled = 1
    forecast_alert_limit = 4
    forecast_show_daily_forecast_link = 1
    forecast_daily_forecast_link = "https://api.aerisapi.com/forecasts/:auto?&format=json&filter=daynight&limit=7&client_id=ipVXLoho5gmCo4dn0qUIK&client_secret=NSaLIgCPa4BnbPfNwhawcl3hB9iIbxowVewcgKDB"
    aqi_enabled = 1
    aqi_location_enabled = 1
    forecast_interval_hours = 3

    # Earthquake defaults
    earthquake_enabled = 1
    earthquake_maxradiuskm = 1000
    earthquake_stale = 10800
    earthquake_server = USGS


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

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

[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

        # 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 = "Stonecress Weather"
        footer_disclaimer_text = "Never make important decisions from this website."

        # 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        = "Stonecress Station Weather Conditions"
        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 are powered by an Acurite5n1 Personal 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

        # Almanac Popup
        close                       = Close
        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             = 7 Day Forecast
        daily_forecast              = Daily Forecast
        alert_in_effect             = in effect until
        forecast_last_updated       = Last Updated on
       
        # 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_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"
       
        # 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
        records_pressure_records            = Pressure Records
        records_high_pressure                    = Highest Pressure
        records_low_pressure                    = Lowest Pressure

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

    [[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, user.forecast.ForecastVariables
    # Possible encodings are 'html_entities', 'utf8', or 'strict_ascii'
    encoding = html_entities

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

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

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

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




Sorry for the length, I really don't know what's relevant and what's not so I included everything.

Nick Kavanagh

unread,
Jan 14, 2022, 4:05:32 PM1/14/22
to weewx-user
Thank you for the link. This wasn't the answer in this case, but will certainly help me understand more about the functions of mqtt within the belchertown skin.

vince

unread,
Jan 14, 2022, 4:17:02 PM1/14/22
to weewx-user
On Friday, January 14, 2022 at 12:53:06 PM UTC-8 kavanag...@gmail.com wrote:
 However, when I attempt to start, it now returns a very similar error:
no module named 'user.lightning_strikes'

I suspect something in weewx.conf or skin.conf

Yes - you are referencing something that you don't have installed.   Did you just copy somebody's example or something ?

You also just posted all your username+password information in your cut+paste weewx.conf file, so I'd suggest changing those passwords.
 
Reply all
Reply to author
Forward
0 new messages