Skip to content

Payloads without topics #32

@DanielHJacobsen

Description

@DanielHJacobsen

From a subscribing to a wildcard-topic (#) cannot be determined from which topic a message received from.

Known which topic a message is received from would be a useful feature. Especially when the topics include auto-generated IDs.(cannot be predicted)

For now I have created my own implementation for this issue with the _on_message_list-method:

def _on_message_list(self, client, userdata, message):
    payload = message.payload.decode('utf-8')
    logger.debug('Received message: %s on topic: %s with QoS: %s' % (payload, message.topic, str(message.qos)))
    if message.topic not in self._messages: 
        self._messages[message.topic] = []
    for sub in self._messages:
        if topic_matches_sub(sub, message.topic):
            appended_msg = '{"topic":"' + topic + '", "payload":' + payload + '}' if self._is_returning_topic_n_value else payload
            self._messages[sub].append(appended_msg)

The messages are returned in JSON-format:

{
   "topic": "some/mqtt/topic/ID", 
   "payload": "payload", 
}

The _is_returning_topic_n_value-field is set within the connection. Default is False (To avoid breaking change)

def connect(self, broker, port=1883, client_id="", clean_session=True, is_returning_topic_n_value=False):
    ...
    """
    `is_returning_topic_n_value` specifies the format of the returned messages on subscription. Either just the values within the topics or the topics and values.
    """
    ...
    self._is_returning_topic_n_value = is_returning_topic_n_value

I hope this helps.

Best regards
Daniel

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions