So, I must be doing something wrong, not sure what though. I am attaching my updated weewx.conf file, and the error that it generated.
On Tuesday, October 14, 2025 at 4:49:43 PM UTC-7 vince wrote: > Your weewx.conf section looks incomplete/incorrect. You are missing all > the configuration info you need to add. > > If you look at the examples in > https://github.com/bellrichm/WeeWX-MQTTSubscribe/tree/master/exampleConfigs > they should give you the basic format needed although you’ll need to figure > out your custom mapping of data to weewx database fields. > > > On Tuesday, October 14, 2025 at 4:28:06 PM UTC-7 James Michael Wall wrote: > >> Also, >> >> Sorry, I forgot to provide WeeWX status, FWIW: >> >> $ systemctl status weewx >> × weewx.service - WeeWX >> Loaded: loaded (/lib/systemd/system/weewx.service; enabled; preset: >> enabled) >> Active: failed (Result: exit-code) since Tue 2025-10-14 16:24:18 >> PDT; 2s ago >> Duration: 903ms >> Docs: https://weewx.com/docs >> Process: 4176 ExecStart=weewxd /etc/weewx/weewx.conf (code=exited, >> status=4) >> Main PID: 4176 (code=exited, status=4) >> CPU: 904ms >> >> Oct 14 16:24:18 Zero2W-1 weewxd[4176]: CRITICAL weewx.engine: **** >> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >> Oct 14 16:24:18 Zero2W-1 weewxd[4176]: CRITICAL weewx.engine: **** >> File "/etc/weewx/bin/user/MQTTSubscribe.py", line 2011, in __init__ >> Oct 14 16:24:18 Zero2W-1 weewxd[4176]: CRITICAL weewx.engine: **** >> super().__init__(service_dict, logger) >> Oct 14 16:24:18 Zero2W-1 weewxd[4176]: CRITICAL weewx.engine: **** >> File "/etc/weewx/bin/user/MQTTSubscribe.py", line 1751, in __init__ >> Oct 14 16:24:18 Zero2W-1 weewxd[4176]: CRITICAL weewx.engine: **** >> raise ValueError("[[topics]] is required.") >> Oct 14 16:24:18 Zero2W-1 weewxd[4176]: CRITICAL weewx.engine: **** >> ValueError: [[topics]] is required. >> Oct 14 16:24:18 Zero2W-1 weewxd[4176]: CRITICAL __main__: Unable to load >> driver: [[topics]] is required. >> Oct 14 16:24:18 Zero2W-1 weewxd[4176]: CRITICAL __main__: **** >> Exiting... >> Oct 14 16:24:18 Zero2W-1 systemd[1]: weewx.service: Main process exited, >> code=exited, status=4/NOPERMISSION >> Oct 14 16:24:18 Zero2W-1 systemd[1]: weewx.service: Failed with result >> 'exit-code'. >> >> On Tuesday, October 14, 2025 at 3:55:38 PM UTC-7 James Michael Wall wrote: >> >>> Hello, >>> >>> I am new to using WeeWX, and am having trouble getting the MQTTSubscribe >>> driver to work properly. I am following the directions found at >>> https://github.com/bellrichm/WeeWX-MQTTSubscribe as best as I can, but >>> some of it is hard for me to understand. My basic understanding of WeeWX >>> and MQTT is very limited, so I am going to do the best I can to explain my >>> problem, provide whatever information necessary, and (hopefully) get this >>> issue resolved so I can get my weather station working. >>> >>> Here is my Hardware/Software Setup Overview: >>> >>> *Weather Station/MQTT Client/MQTT Publisher:* >>> >>> BC-Robotics 1591B Weatherboard >>> <https://bc-robotics.com/shop/raspberry-pi-pico-1591b-weather-board/> >>> with Raspberry Pico 2W >>> <https://www.raspberrypi.com/products/raspberry-pi-pico-2/>, running >>> MicroPython v1.26.1-2025-09-11. This device is collecting, parsing, and >>> sending data from various weather sensors connected to it over WiFi on my >>> local LAN using umqttsimple. This device is set up as an MQTT client, which >>> publishes the sensor data using the topic "weatherpi" to the MQTT broker on >>> the Raspberry Pi Zero 2W listed below. >>> >>> *Weather Reciever/MQTT Server/MQTT Broker/MQTT Subscriber/WeeWX Server:* >>> >>> Raspberry Pi Zero 2W >>> <https://www.raspberrypi.com/products/raspberry-pi-zero-2-w/>, running >>> Raspberry OS "Bookworm" with WeeWX version 5.1.0-4 installed as a Debian >>> package via the WeeWX debian repo instructions. I have installed Mosquitto >>> version 2.0.11, and python3-paho-mqtt 1.6.1-1. I set up Mosquitto to act as >>> an MQTT broker on this device, subscribed to the topic "weatherpi", which >>> is published by the Pico. I have installed the MQTTSubscribe driver per >>> the instructions found in the Github link above. >>> >>> AFAICT, I have everything set up correctly on the Pico, and it is >>> publishing successfully to the Mosquitto MQTT server, but when I run sudo >>> weectl station reconfigure, after going through all the prompts, I get the >>> following error: >>> >>> Traceback (most recent call last): >>> File "/usr/share/weewx/weectl.py", line 75, in <module> >>> main() >>> File "/usr/share/weewx/weectl.py", line 67, in main >>> namespace.func(namespace) >>> File "/usr/share/weewx/weectllib/__init__.py", line 90, in dispatch >>> namespace.action_func(config_dict, namespace) >>> File "/usr/share/weewx/weectllib/station_cmd.py", line 311, in >>> reconfigure_station >>> >>> weectllib.station_actions.station_reconfigure(config_dict=config_dict, >>> File "/usr/share/weewx/weectllib/station_actions.py", line 164, in >>> station_reconfigure >>> config_config(config_dict, >>> File "/usr/share/weewx/weectllib/station_actions.py", line 207, in >>> config_config >>> config_driver(config_dict, driver=driver, no_prompt=no_prompt) >>> File "/usr/share/weewx/weectllib/station_actions.py", line 466, in >>> config_driver >>> settings = weecfg.prompt_for_driver_settings(final_driver, >>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> File "/usr/share/weewx/weecfg/__init__.py", line 520, in >>> prompt_for_driver_settings >>> settings = editor.prompt_for_settings() >>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> File "/etc/weewx/bin/user/MQTTSubscribe.py", line 2424, in >>> prompt_for_settings >>> if len(self.existing_options['topics']) > 1: >>> ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^ >>> File "/usr/lib/python3/dist-packages/configobj/__init__.py", line 554, >>> in __getitem__ >>> val = dict.__getitem__(self, key) >>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> KeyError: 'topics'. >>> >>> In following the directions given in the top of the weewx-user group >>> with regard to posting, I am attaching my weewx.conf file, and system log >>> from the RP Zero using the following command: journalctl -xe | grep weewx >>> to this post. The other information requested is listed above. If you need >>> anything else, please let me know, I am happy to help. >>> >>> -- 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/7df05c00-ba0f-4c71-96c2-91c2fc99c1a6n%40googlegroups.com.
# 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 = 1 # Whether to log successful operations. May get overridden below. log_success = True # Whether to log unsuccessful operations. May get overridden below. log_failure = True # This configuration file was created by ... version = 5.1.0 ############################################################################## # This section is for information about the station. [Station] # Description of the station location, such as your town. location = "Mossyrock, WA" # Latitude in decimal degrees. Negative for southern hemisphere. latitude = 46.51875 # Longitude in decimal degrees. Negative for western hemisphere. longitude = -122.505194 # Altitude of the station, with the unit it is in. This is used only # if the hardware cannot supply a value. altitude = 624, foot # Choose 'foot' or 'meter' for unit # Set to type of station hardware. There must be a corresponding stanza # in this file, which includes a value for the 'driver' option. #station_type = Simulator station_type = MQTTSubscribeDriver ############################################################################## [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 [MQTTSubscribe] # The driver to use. # Only used by the driver. driver = user.MQTTSubscribe # Turn the service on and off. # Default is true. # Only used by the service. enable = true # Controls if validation errors raise an exception (stopping WeeWX from starting) or only logged. # Default is false stop_on_validation_errors = true # The binding, loop or archive. # Default is loop. # Only used by the service. binding = loop # The MQTT server. # Default is localhost. host = localhost # Controls the MQTT logging. # Default is false. log = false # password for broker authentication. # Default is None. password = user_password # The port to connect to. # Default is 1883. port = 1883 # username for broker authentication. # Default is None. username = user # For additional information see, https://github.com/bellrichm/WeeWX-MQTTSubscribe/wiki/Configuring#the-topic-name-sections [[topics]] # Units for MQTT payloads without unit value. # Valid values: US, METRIC, METRICWX. # For more information see, http://weewx.com/docs/customizing.htm#units # Default is US. unit_system = US # The first topic to subscribe to # For additional information see, https://github.com/bellrichm/WeeWX-MQTTSubscribe/wiki/Configuring#the-topic-name-sections [[[weatherpi]]] # When set to false, the topic is not subscribed to. # Valid values: True, False # Default is True subscribe = True # Sets the default value for all fields in this topic. # Setting the value to 'true' "opts out" and the desired fields will need to set 'ignore = true' # Valid values: True, False. # Default is False. ignore = False # Configuration information about the MQTT message format for this topic [[[[message]]]] # The format of the MQTT payload. # Currently support: individual, json, keyword. # Must be specified. type = json # The incoming field name from MQTT. # For additional information see, https://github.com/bellrichm/WeeWX-MQTTSubscribe/wiki/Configuring#the-field-name-sections # Use this template for any fields that need to be configured. # If no fields need to be configured, remove this section. [[[[tempout]]]] # True if the incoming field should not be processed into WeeWX. # Valid values: True, False. # Default is derived from the 'ignore' option at the topic level. ignore = False [[[[humout]]]] # True if the incoming field should not be processed into WeeWX. # Valid values: True, False. # Default is derived from the 'ignore' option at the topic level. ignore = False [[[[bar]]]] # True if the incoming field should not be processed into WeeWX. # Valid values: True, False. # Default is derived from the 'ignore' option at the topic level. ignore = False [[[[windspd]]]] # True if the incoming field should not be processed into WeeWX. # Valid values: True, False. # Default is derived from the 'ignore' option at the topic level. ignore = False [[[[winddir]]]] # True if the incoming field should not be processed into WeeWX. # Valid values: True, False. # Default is derived from the 'ignore' option at the topic level. ignore = False [[[[rainr]]]] # True if the incoming field should not be processed into WeeWX. # Valid values: True, False. # Default is derived from the 'ignore' option at the topic level. ignore = False # True if the incoming data is cumulative. # Valid values: True, False. # Default is False. contains_total = False # The WeeWX name. # Default is the name from MQTT. name = weatherpi # If you have a website, you may specify an URL. The URL is required if you # intend to register your station. The URL must include the scheme, for # example, "http://" or "https://" #station_url = https://www.example.com # The start of the rain year (1=January; 10=October, etc.). This is # downloaded from the station if the hardware supports it. rain_year_start = 1 # Start of week (0=Monday, 6=Sunday) week_start = 6 # This section is for the MQTTSubscribe driver. # The driver to use. # Only used by the driver. driver = user.MQTTSubscribe # Controls if validation errors raise an exception (stopping WeeWX from starting) or only logged. # Default is false stop_on_validation_errors = true ############################################################################## # 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 = false station = replace_me password = replace_me [[WOW]] # This section is for configuring posts to WOW. # If you wish to post to WOW, set the option 'enable' to true, then # specify a station and password. # Use quotes around the password to guard against parsing errors. enable = false station = replace_me password = replace_me [[Wunderground]] # This section is for configuring posts to the Weather Underground. # If you wish to post to the Weather Underground, set the option # 'enable' to true, then specify a station (e.g., 'KORHOODR3'). Use # the station key (find it at # https://www.wunderground.com/member/devices) for the password. enable = false station = replace_me password = replace_me # Set the following to True to have weewx use the WU "Rapidfire" # protocol. Not all hardware can support it. See the User's Guide. rapidfire = False ############################################################################## # This section specifies what reports, using which skins, to generate. [StdReport] # Where the skins reside, relative to WEEWX_ROOT SKIN_ROOT = skins # Where the generated reports should go, relative to WEEWX_ROOT HTML_ROOT = /var/www/html/weewx # Uncomment and change to override logging for reports. # log_success = True # log_failure = True # The database binding indicates which data should be used in reports. data_binding = wx_binding # Each of the following subsections defines a report that will be run. # See the customizing guide to change the units, plot types and line # colors, modify the fonts, display additional sensor data, and other # customizations. Many of those changes can be made here by overriding # parameters, or by modifying templates within the skin itself. [[SeasonsReport]] # The SeasonsReport uses the 'Seasons' skin, which contains the # images, templates and plots for the report. skin = Seasons enable = true [[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 [[FTP]] # FTP'ing the results to a webserver is treated as just another report, # albeit one with an unusual report generator! skin = Ftp # If you wish to use FTP, set "enable" to "true", then fill out the # next four lines. # Use quotes around the password to guard against parsing errors. enable = false user = replace_me password = replace_me server = replace_me # The ftp server name, e.g, www.myserver.org path = replace_me # The destination directory, e.g., /weather # Set to True for an FTP over TLS (FTPS) connection. Not all servers # support this. secure_ftp = False # To upload files from something other than what HTML_ROOT is set # to above, specify a different HTML_ROOT here. #HTML_ROOT = /var/www/html/weewx # Most FTP servers use port 21. port = 21 # Set to 1 to use passive mode, zero for active mode passive = 1 [[RSYNC]] # rsync'ing to a webserver is treated as just another report. skin = Rsync # If you wish to use rsync, you must configure passwordless ssh using # public/private key authentication from the user account that weewx # runs to the user account on the remote machine where the files # will be copied. # # If you wish to use rsync, set "enable" to "true", then # fill out server, user, and path. # The server should appear in your .ssh/config file. # The user is the username used in the identity file. # The path is the destination directory, such as /var/www/html/weather. # Be sure that the user has write permissions on the destination! enable = false server = replace_me user = replace_me path = replace_me # To upload files from something other than what HTML_ROOT is set # to above, specify a different HTML_ROOT here. #HTML_ROOT = /var/www/html/weewx # Rsync can be configured to remove files from the remote server if # they don't exist under HTML_ROOT locally. USE WITH CAUTION: if you # make a mistake in the remote path, you could could unintentionally # cause unrelated files to be deleted. Set to 1 to enable remote file # deletion, zero to allow files to accumulate remotely. delete = 0 # Options in the [[Defaults]] section below will apply to all reports. # What follows are a few of the more popular options you may want to # uncomment, then change. [[Defaults]] # Which language to use for all reports. Not all skins support all # languages. You can override this for individual reports. lang = en # Which unit system to use for all reports. Choices are 'us', 'metric', # or 'metricwx'. You can override this for individual reports. unit_system = us [[[Units]]] # Option "unit_system" above sets the general unit system, but # overriding specific unit groups is possible. These are popular # choices. Uncomment and set as appropriate. The unit is always # in the singular, e.g., 'mile_per_hour', NOT 'miles_per_hour' [[[[Groups]]]] # group_altitude = meter # Options are 'foot' or 'meter' # group_pressure = mbar # Options are 'inHg', 'mmHg', 'mbar', or 'hPa' # group_rain = mm # Options are 'inch', 'cm', or 'mm' # group_rainrate = mm_per_hour # Options are 'inch_per_hour', 'cm_per_hour', or 'mm_per_hour' # group_temperature = degree_C # Options are 'degree_C', 'degree_F', or 'degree_K' # The following line is used to keep the above lines indented # properly. It can be ignored. unused = unused # Uncommenting the following section frequently results in more # attractive formatting of times and dates, but may not work in # your locale. [[[[TimeFormats]]]] # day = %H:%M # week = %H:%M on %A # month = %d-%b-%Y %H:%M # year = %d-%b-%Y %H:%M # rainyear = %d-%b-%Y %H:%M # current = %d-%b-%Y %H:%M # ephem_day = %H:%M # ephem_year = %d-%b-%Y %H:%M # The following line is used to keep the above lines indented # properly. It can be ignored. unused = unused [[[Labels]]] # Users frequently change the labels for these observation types. [[[[Generic]]]] # inHumidity = Inside Humidity # inTemp = Inside Temperature # outHumidity = Outside Humidity # outTemp = Outside Temperature # extraTemp1 = Temperature1 # extraTemp2 = Temperature2 # extraTemp3 = Temperature3 # The following line is used to keep the above lines indented # properly. It can be ignored. unused = unused ############################################################################## # This service converts the unit system coming from the hardware to a unit # system in the database. [StdConvert] # The target_unit affects only the unit system in the database. Once # chosen it cannot be changed without converting the entire database. # Modification of target_unit after starting weewx will result in # corrupt data - the database will contain a mix of US and METRIC data. # # The value of target_unit does not affect the unit system for # reporting - reports can display US, Metric, or any combination of units. # # In most cases, target_unit should be left as the default: US # # In particular, those migrating from a standard wview installation # should use US since that is what the wview database contains. # DO NOT MODIFY THIS VALUE UNLESS YOU KNOW WHAT YOU ARE DOING! target_unit = US # Options are 'US', 'METRICWX', or 'METRIC' ############################################################################## # This section can adjust data using calibration expressions. [StdCalibrate] [[Corrections]] # For each type, an arbitrary calibration expression can be given. # It should be in the units defined in the StdConvert section. # Example: foo = foo + 0.2 ############################################################################## # This section is for quality control checks. If units are not specified, # values must be in the units defined in the StdConvert section. [StdQC] [[MinMax]] barometer = 26, 32.5, inHg pressure = 24, 34.5, inHg outTemp = -40, 120, degree_F inTemp = 10, 120, degree_F outHumidity = 0, 100 inHumidity = 0, 100 windSpeed = 0, 120, mile_per_hour rain = 0, 10, inch ############################################################################## # This section controls the origin of derived values. [StdWXCalculate] [[Calculations]] # How to calculate derived quantities. Possible values are: # hardware - use the value provided by hardware # software - use the value calculated by weewx # prefer_hardware - use value provide by hardware if available, # otherwise use value calculated by weewx pressure = prefer_hardware altimeter = prefer_hardware appTemp = prefer_hardware barometer = prefer_hardware cloudbase = prefer_hardware dewpoint = prefer_hardware ET = prefer_hardware heatindex = prefer_hardware humidex = prefer_hardware inDewpoint = prefer_hardware maxSolarRad = prefer_hardware rainRate = prefer_hardware windchill = prefer_hardware windrun = prefer_hardware ############################################################################## # For hardware that supports it, this section controls how often the # onboard clock gets updated. [StdTimeSynch] # How often to check the weather station clock for drift (in seconds) clock_check = 14400 # How much it can drift before we will correct it (in seconds) max_drift = 5 ############################################################################## # This section is for configuring the archive service. [StdArchive] # If the station hardware supports data logging then the archive interval # will be downloaded from the station. Otherwise, specify it (in seconds). archive_interval = 300 # If possible, new archive records are downloaded from the station # hardware. If the hardware does not support this, then new archive # records will be generated in software. # Set the following to "software" to force software record generation. record_generation = hardware # Whether to include LOOP data in hi/low statistics. loop_hilo = True # Uncomment and change to override logging for archive operations. # log_success = True # log_failure = True # The data binding used to save archive records. data_binding = wx_binding ############################################################################## # This section binds a data store to a database. [DataBindings] [[wx_binding]] # The database must match one of the sections in [Databases]. # This is likely to be the only option you would want to change. database = archive_sqlite # The name of the table within the database. table_name = archive # The manager handles aggregation of data for historical summaries. manager = weewx.manager.DaySummaryManager # The schema defines the structure of the database. # It is *only* used when the database is created. schema = schemas.wview_extended.schema ############################################################################## # This section defines various databases. [Databases] # A SQLite database is simply a single file. [[archive_sqlite]] database_name = weewx.sdb database_type = SQLite # MySQL [[archive_mysql]] database_name = weewx database_type = MySQL ############################################################################## # This section defines defaults for the different types of databases. [DatabaseTypes] # Defaults for SQLite databases. [[SQLite]] driver = weedb.sqlite # Directory in which database files are located, relative to WEEWX_ROOT SQLITE_ROOT = /var/lib/weewx # Defaults for MySQL databases. [[MySQL]] driver = weedb.mysql # The host where the database is located. host = localhost # The user name for logging in to the host. user = weewx # Use quotes around the password to guard against parsing errors. password = weewx ############################################################################## # This section configures the internal weewx engine. [Engine] # This section specifies which services should be run and in what order. [[Services]] prep_services = weewx.engine.StdTimeSynch data_services = 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 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
WeeWX Error Log Oct 17 11:49:25 Zero2W-1 weewxd[8551]: self.setupStation(config_dict) Oct 17 11:49:25 Zero2W-1 weewxd[8551]: File "/usr/share/weewx/weewx/engine.py", line 99, in setupStation Oct 17 11:49:25 Zero2W-1 weewxd[8551]: driver = config_dict[station_type]['driver'] Oct 17 11:49:25 Zero2W-1 weewxd[8551]: ~~~~~~~~~~~^^^^^^^^^^^^^^ Oct 17 11:49:25 Zero2W-1 weewxd[8551]: File "/usr/lib/python3/dist-packages/configobj/__init__.py", line 554, in __getitem__ Oct 17 11:49:25 Zero2W-1 weewxd[8551]: val = dict.__getitem__(self, key) Oct 17 11:49:25 Zero2W-1 weewxd[8551]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Oct 17 11:49:25 Zero2W-1 weewxd[8551]: KeyError: 'MQTTSubscribeDriver' Oct 17 11:49:25 Zero2W-1 systemd[1]: weewx.service: Main process exited, code=exited, status=1/FAILURE Oct 17 11:49:25 Zero2W-1 systemd[1]: weewx.service: Failed with result 'exit-code'.
