Mercurial > code > home > repos > mqtt_metrics
diff mqtt_metrics.py @ 5:8390d5d0d512
one mqtt message can convert to multiple measurements
author | drewp@bigasterisk.com |
---|---|
date | Sat, 10 Aug 2024 23:02:51 -0700 |
parents | cd1b8d7bda78 |
children | bc2a93b306e9 |
line wrap: on
line diff
--- a/mqtt_metrics.py Sat Aug 10 21:16:19 2024 -0700 +++ b/mqtt_metrics.py Sat Aug 10 23:02:51 2024 -0700 @@ -77,21 +77,21 @@ def onMqttMessage(metrics, mqttMessage): message = simplifyMqttMessage(mqttMessage) - metricEvent = tryConverters(message) - if metricEvent: + metricEvents = tryConverters(message) + for metricEvent in metricEvents: metrics.write(message['t'], metricEvent) broadcastToDebugListeners({'message': message, 'metricEvent': metricEvent}) -def tryConverters(message) -> dict | None: - metricEvent = None +def tryConverters(message) -> list[dict]: + metricEvents: list[dict] = [] matchedPats = [] for converter in converters: if not (m := re.search(converter.topic_pattern, message['topic'])): continue if not matchedPats: try: - metricEvent = converter(message, cast(tuple[str], m.groups())) + metricEvents.extend(converter(message, cast(tuple[str], m.groups()))) except Exception: log.error("Error converting mqtt message: topic pattern = %r", converter.topic_pattern, exc_info=True) matchedPats.append(converter.topic_pattern) @@ -99,7 +99,7 @@ if len(matchedPats) > 1: log.warning("Multiple patterns matched: %s", ", ".join(matchedPats)) - return metricEvent + return metricEvents def main():