Browse Source

add password handling

Silas Gruen 10 months ago
parent
commit
33aa57e3f3
2 changed files with 11 additions and 7 deletions
  1. 8 6
      robot-control/src/api/routes.py
  2. 3 1
      robot-control/src/robot/controller.py

+ 8 - 6
robot-control/src/api/routes.py

@@ -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()

+ 3 - 1
robot-control/src/robot/controller.py

@@ -43,7 +43,9 @@ class RobotController:
         mqtt_config = self.config.get_mqtt_config()  # Add this to config parser
         self.mqtt_handler = MQTTHandler(
             broker=mqtt_config.get('broker'),
-            port=mqtt_config.get('port')
+            port=mqtt_config.get('port'),
+            username=mqtt_config.get('username'),
+            password=mqtt_config.get('password'),
         )
         
         # Register all devices with MQTT handler