From 0d4547e57d8135a924233b2be73dc28e083d3570 Mon Sep 17 00:00:00 2001 From: Gleb Tcivie Date: Mon, 8 Jul 2024 22:24:41 +0300 Subject: [PATCH] Added support for configuring MQTT version for connection --- .env | 8 ++++++++ constants.py | 13 +++++++++++++ main.py | 8 ++++++-- 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 constants.py diff --git a/.env b/.env index 3b13bbe..b80354c 100644 --- a/.env +++ b/.env @@ -16,6 +16,14 @@ MQTT_KEEPALIVE=60 MQTT_TOPIC='msh/israel/#' MQTT_IS_TLS=false +# MQTT protocol version (default: MQTTv5) the public MQTT server supports MQTTv311 +# Options: MQTTv311, MQTTv31, MQTTv5 +MQTT_PROTOCOL=MQTTv311 + +# MQTT callback API version (default: VERSION2) the public MQTT server supports VERSION2 +# Options: VERSION1, VERSION2 +MQTT_CALLBACK_API_VERSION=VERSION2 + # Exporter configuration ## Hide source data in the exporter (default: false) MESH_HIDE_SOURCE_DATA=false diff --git a/constants.py b/constants.py new file mode 100644 index 0000000..377a430 --- /dev/null +++ b/constants.py @@ -0,0 +1,13 @@ +import paho.mqtt.client as mqtt +from paho.mqtt.enums import CallbackAPIVersion + +protocol_map = { + 'MQTTv31': mqtt.MQTTv31, + 'MQTTv311': mqtt.MQTTv311, + 'MQTTv5': mqtt.MQTTv5 +} + +callback_api_version_map = { + 'VERSION1': CallbackAPIVersion.VERSION1, + 'VERSION2': CallbackAPIVersion.VERSION2 +} diff --git a/main.py b/main.py index f4c1690..5de3295 100644 --- a/main.py +++ b/main.py @@ -5,6 +5,8 @@ from datetime import datetime import paho.mqtt.client as mqtt from dotenv import load_dotenv +from constants import callback_api_version_map, protocol_map + try: from meshtastic.mesh_pb2 import MeshPacket from meshtastic.mqtt_pb2 import ServiceEnvelope @@ -87,9 +89,11 @@ if __name__ == "__main__": start_http_server(int(os.getenv('PROMETHEUS_COLLECTOR_PORT', 8000)), registry=registry) # Create an MQTT client + mqtt_protocol = os.getenv('MQTT_PROTOCOL', 'MQTTv5') + mqtt_callback_api_version = os.getenv('MQTT_CALLBACK_API_VERSION', 'VERSION2') mqtt_client = mqtt.Client( - callback_api_version=CallbackAPIVersion.VERSION2, - protocol=mqtt.MQTTv5 + callback_api_version=callback_api_version_map.get(mqtt_callback_api_version, mqtt.CallbackAPIVersion.VERSION2), + protocol=protocol_map.get(mqtt_protocol, mqtt.MQTTv5) ) mqtt_client.on_connect = handle_connect mqtt_client.on_message = handle_message