Skip to content

Commit 85ad39b

Browse files
committed
Avoid passing MQTT queue in robot interface
1 parent dbca460 commit 85ad39b

4 files changed

Lines changed: 27 additions & 25 deletions

File tree

src/isar/script.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from robot_interface.models.inspection.inspection import Inspection
2626
from robot_interface.models.mission.mission import Mission
2727
from robot_interface.robot_interface import RobotInterface
28-
from robot_interface.telemetry.mqtt_client import MqttTelemetryPublisher
28+
from robot_interface.telemetry.mqtt_client import MqttTelemetryPublisher, TelemetryParameters
2929

3030

3131
def print_setting(
@@ -155,14 +155,14 @@ def inspections_callback(inspection: Inspection, mission: Mission) -> None:
155155
robot_heartbeat_thread.start()
156156
threads.append(robot_heartbeat_thread)
157157

158-
publishers: list[MqttTelemetryPublisher] = robot_interface.get_telemetry_publishers(
159-
queue=events.mqtt_queue,
158+
telemetry_params: list[TelemetryParameters] = robot_interface.get_telemetry_publishers(
160159
robot_name=settings.ROBOT_NAME,
161160
isar_id=settings.ISAR_ID,
162161
)
163-
for publisher in publishers:
164-
publisher.start()
165-
threads.append(publisher)
162+
for telemetry_parameter in telemetry_params:
163+
telemetry_thread = MqttTelemetryPublisher(events.mqtt_queue, telemetry_parameter)
164+
telemetry_thread.start()
165+
threads.append(telemetry_thread)
166166

167167
utility_threads: list[Thread] = robot_interface.get_utility_threads()
168168
for utility_thread in utility_threads:

src/robot_interface/robot_interface.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from robot_interface.models.mission.status import MissionStatus, RobotStatus, TaskStatus
99
from robot_interface.models.mission.task import InspectionTask
1010
from robot_interface.models.robots.media import MediaConfig
11-
from robot_interface.telemetry.mqtt_client import MqttTelemetryPublisher
11+
from robot_interface.telemetry.mqtt_client import MqttTelemetryPublisher, TelemetryParameters
1212

1313

1414
class RobotInterface(metaclass=ABCMeta):
@@ -216,8 +216,8 @@ def generate_media_config(self) -> MediaConfig | None:
216216

217217
@abstractmethod
218218
def get_telemetry_publishers(
219-
self, queue: MQTTQueue, isar_id: str, robot_name: str
220-
) -> list[MqttTelemetryPublisher]:
219+
self, isar_id: str, robot_name: str
220+
) -> list[TelemetryParameters]:
221221
"""
222222
Set up telemetry publisher threads to publish regular updates for pose, battery
223223
level etc. from the robot to the MQTT broker. The publishers on the robot side
@@ -231,8 +231,8 @@ def get_telemetry_publishers(
231231
232232
Returns
233233
-------
234-
List[MqttTelemetryPublisher]
235-
List containing all threads that will be started to publish telemetry.
234+
List[TelemetryParameters]
235+
List containing all parameters needed to start the telemetry threads.
236236
237237
"""
238238
raise NotImplementedError

src/robot_interface/telemetry/mqtt_client.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
from dataclasses import dataclass
12
import json
23
import logging
3-
from queue import Queue
44
import time
55
from collections.abc import Callable
66
from datetime import UTC, datetime
@@ -18,24 +18,27 @@
1818
)
1919
from robot_interface.telemetry.payloads import CloudHealthPayload
2020

21+
@dataclass
22+
class TelemetryParameters:
23+
name: str
24+
method: Callable[[], str]
25+
topic: str
26+
interval: float
2127

2228
class MqttTelemetryPublisher(Thread):
2329
def __init__(
2430
self,
25-
name: str,
2631
mqtt_queue: MQTTQueue,
27-
telemetry_method: Callable,
28-
topic: str,
29-
interval: float,
32+
parameters: TelemetryParameters,
3033
) -> None:
3134
self.mqtt_queue: MQTTQueue = mqtt_queue
32-
self.telemetry_method: Callable = telemetry_method
33-
self.topic: str = f"isar/{settings.ISAR_ID}/{topic}"
34-
self.interval: float = interval
35+
self.telemetry_method: Callable[[], str] = parameters.method
36+
self.topic: str = f"isar/{settings.ISAR_ID}/{parameters.topic}"
37+
self.interval: float = parameters.interval
3538

36-
self.logger: Logger = logging.getLogger("telemetry")
39+
self.logger: Logger = logging.getLogger(f"telemetry - {parameters.name}")
3740

38-
Thread.__init__(self, name=f"Telemetry thread - {name}")
41+
Thread.__init__(self, name=f"Telemetry thread - {parameters.name}")
3942

4043
def stop(self) -> None:
4144
return

tests/test_mocks/robot_interface.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from alitra import Frame, Orientation, Pose, Position
55

66
from isar.models.events import Event
7-
from isar.models.mqtt_queue import MQTTQueue
87
from isar.state_machine.states_enum import States
98
from robot_interface.models.exceptions.robot_exceptions import (
109
RobotCommunicationException,
@@ -17,7 +16,7 @@
1716
from robot_interface.models.robots.media import MediaConfig, MediaConnectionType
1817
from robot_interface.robot_interface import RobotInterface
1918
from robot_interface.telemetry.mqtt_client import (
20-
MqttTelemetryPublisher,
19+
TelemetryParameters,
2120
)
2221
from tests.test_mocks.inspection import stub_image_metadata
2322

@@ -86,8 +85,8 @@ def register_inspection_callback(
8685
return
8786

8887
def get_telemetry_publishers(
89-
self, queue: MQTTQueue, isar_id: str, robot_name: str
90-
) -> list[MqttTelemetryPublisher]:
88+
self, isar_id: str, robot_name: str
89+
) -> list[TelemetryParameters]:
9190
return []
9291

9392
def robot_status(self) -> RobotStatus:

0 commit comments

Comments
 (0)