bellrichm / WeeWX-MQTTSubscribe

A WeeWX service and driver that receives data from MQTT.
GNU General Public License v3.0
52 stars 13 forks source link

ValueError: [[topics]] is required. #213

Closed vrishabkakade closed 1 month ago

vrishabkakade commented 1 month ago

I did a fresh install of the latest MQTTSubscribe with Weewx 5 and I get the below error when I start weewx

(weewx-venv) weewx@freedompi:~/weewx-data $ weewxd Using configuration file /home/weewx/weewx-data/weewx.conf Using configuration file /home/weewx/weewx-data/weewx.conf topics_dict {'unit_system': 'METRIC', 'pico/temperature': {'subscribe': 'True', 'ignore': 'False', 'message': {'type': 'individual'}, 'outTemp': > {'ignore': 'False', 'contains_total': 'False', 'name': 'outTemp'}}} topics_dict None Traceback (most recent call last): File "/home/weewx/weewx-venv/bin/weewxd", line 8, in sys.exit(main()) ^^^^^^ File "/home/weewx/weewx-venv/lib/python3.11/site-packages/weewxd.py", line 121, in main engine = weewx.engine.StdEngine(config_dict) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/weewx/weewx-venv/lib/python3.11/site-packages/weewx/engine.py", line 89, in init self.loadServices(config_dict) File "/home/weewx/weewx-venv/lib/python3.11/site-packages/weewx/engine.py", line 157, in loadServices obj = weeutil.weeutil.get_object(svc)(self, config_dict) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/weewx/weewx-data/bin/user/MQTTSubscribe.py", line 2179, in init self.subscriber = MQTTSubscriber.get_subscriber(service_dict, self.logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/weewx/weewx-data/bin/user/MQTTSubscribe.py", line 1829, in get_subscriber return MQTTSubscriberV2MQTT3(service_dict, logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/weewx/weewx-data/bin/user/MQTTSubscribe.py", line 1752, in init raise ValueError("[[topics]] is required.") ValueError: [[topics]] is required.

The simulation works just fine.

Any idea why this would fail? I printed the value for topics_dict and it seems to be picking the correct values, but it also seems to be picking None.

topics_dict {'unit_system': 'METRIC', 'pico/temperature': {'subscribe': 'True', 'name': 'outTemp', 'ignore': 'False', 'message': {'type': 'individual'}}} topics_dict None

This is my configuration.

[MQTTSubscribeDriver]

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

# Controls if validation errors raise an exception (stopping WeeWX from starting) or only logged.
# Default is true
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 = freedompi.local

# Controls the MQTT logging.
# Default is false.
log = false

# password for broker authentication.
# Default is None.
password = 

# The port to connect to.
# Default is 1883.
port = 1883

# username for broker authentication.
# Default is None.
username = weewx

# The TLS options that are passed to tls_set method of the MQTT client.
# For additional information see, https://eclipse.org/paho/clients/python/docs/strptime-format-codes
[[tls]]
    # Turn tls on and off.
    # Default is true.
    enable = false

    # Path to the Certificate Authority certificate files that are to be treated as trusted by this client.
    ca_certs = ""

    # The PEM encoded client certificate and private keys.
    # Default is None
    certfile = None

    # The certificate requirements that the client imposes on the broker.
    # Valid values: none, optional, required
    # Default is required,
    certs_required = required

    # The encryption ciphers that are allowable for this connection. Specify None to use the defaults
    # Default is None.
    ciphers = None

    # The private keys.
    # Default is None
    keyfile = None

    # The version of the SSL/TLS protocol to be used.
    # Valid values: sslv2, sslv23, sslv3, tls, tlsv1, tlsv11, tlsv12.
    # Default is tlsv12.
    tls_version = tlsv12

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

    # The first topic to subscribe to
    # For additional information see, https://github.com/bellrichm/WeeWX-MQTTSubscribe/wiki/Configuring#the-topic-name-sections
    [[[pico/temperature]]]
        # 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 = individual

        # 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.
        [[[[outTemp]]]]
            # 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 = outTemp
bellrichm commented 1 month ago

Looks like you asked the same question here, https://groups.google.com/g/weewx-user/c/5slL-OovOl0/m/pzhXOqUkAgAJ I am going to close this issue and we can work on it via the WeeWX google group post.