|
|
@@ -19,11 +19,12 @@ class MeasurementResult(BaseModel):
|
|
|
status: str
|
|
|
|
|
|
class MQTTHandler:
|
|
|
- def __init__(self, broker="localhost", port=1883):
|
|
|
+ def __init__(self, broker="localhost", port=1883, username=None, password=None):
|
|
|
self.client = mqtt.Client()
|
|
|
self.devices: List[Device] = []
|
|
|
self.measurement_callbacks: Dict[str, Dict[int, Callable]] = {}
|
|
|
|
|
|
+ self.client.username_pw_set(username, password)
|
|
|
self.client.on_connect = self.on_connect
|
|
|
self.client.on_message = self.on_message
|
|
|
|
|
|
@@ -48,7 +49,11 @@ class MQTTHandler:
|
|
|
logger.info(f"Subscribed to {topic}")
|
|
|
|
|
|
def on_connect(self, client, userdata, flags, rc):
|
|
|
- logger.info(f"Connected with result code {rc}")
|
|
|
+ if rc == 0:
|
|
|
+ logger.info("Connected to MQTT Broker!")
|
|
|
+ else:
|
|
|
+ raise ConnectionError(f"Failed to connect, return code {rc}")
|
|
|
+
|
|
|
# Resubscribe to all device topics on reconnect
|
|
|
for device in self.devices:
|
|
|
self._subscribe_device_topics(device.device_id)
|
|
|
@@ -88,7 +93,4 @@ class MQTTHandler:
|
|
|
def cleanup(self):
|
|
|
"""Cleanup MQTT connection"""
|
|
|
self.client.loop_stop()
|
|
|
- self.client.disconnect()
|
|
|
-
|
|
|
-# Create global MQTT handler instance
|
|
|
-mqtt_handler = MQTTHandler()
|
|
|
+ self.client.disconnect()
|