Skip to content

Commit 13e53d3

Browse files
committed
Use payloads for mqtt messages
1 parent ce76a64 commit 13e53d3

File tree

3 files changed

+88
-60
lines changed

3 files changed

+88
-60
lines changed

src/isar/state_machine/state_machine.py

Lines changed: 37 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@
3434
from robot_interface.models.mission.task import TASKS
3535
from robot_interface.robot_interface import RobotInterface
3636
from robot_interface.telemetry.mqtt_client import MqttClientInterface
37+
from robot_interface.telemetry.payloads import (
38+
RobotStatusPayload,
39+
MissionPayload,
40+
TaskPayload,
41+
)
3742
from robot_interface.utilities.json_service import EnhancedJSONEncoder
3843

3944

@@ -482,24 +487,22 @@ def publish_mission_status(self) -> None:
482487
if self.current_mission:
483488
if self.current_mission.error_message:
484489
error_message = self.current_mission.error_message
485-
payload: str = json.dumps(
486-
{
487-
"isar_id": settings.ISAR_ID,
488-
"robot_name": settings.ROBOT_NAME,
489-
"mission_id": self.current_mission.id if self.current_mission else None,
490-
"status": self.current_mission.status if self.current_mission else None,
491-
"error_reason": error_message.error_reason if error_message else None,
492-
"error_description": (
493-
error_message.error_description if error_message else None
494-
),
495-
"timestamp": datetime.now(timezone.utc),
496-
},
497-
cls=EnhancedJSONEncoder,
490+
491+
payload: MissionPayload = MissionPayload(
492+
isar_id=settings.ISAR_ID,
493+
robot_name=settings.ROBOT_NAME,
494+
mission_id=self.current_mission.id if self.current_mission else None,
495+
status=self.current_mission.status if self.current_mission else None,
496+
error_reason=error_message.error_reason if error_message else None,
497+
error_description=(
498+
error_message.error_description if error_message else None
499+
),
500+
timestamp=datetime.now(timezone.utc),
498501
)
499502

500503
self.mqtt_publisher.publish(
501504
topic=settings.TOPIC_ISAR_MISSION,
502-
payload=payload,
505+
payload=json.dumps(payload, cls=EnhancedJSONEncoder),
503506
qos=1,
504507
retain=True,
505508
)
@@ -514,46 +517,41 @@ def publish_task_status(self, task: TASKS) -> None:
514517
if task.error_message:
515518
error_message = task.error_message
516519

517-
payload: str = json.dumps(
518-
{
519-
"isar_id": settings.ISAR_ID,
520-
"robot_name": settings.ROBOT_NAME,
521-
"mission_id": self.current_mission.id if self.current_mission else None,
522-
"task_id": task.id if task else None,
523-
"status": task.status if task else None,
524-
"task_type": task.type,
525-
"error_reason": error_message.error_reason if error_message else None,
526-
"error_description": (
527-
error_message.error_description if error_message else None
528-
),
529-
"timestamp": datetime.now(timezone.utc),
530-
},
531-
cls=EnhancedJSONEncoder,
520+
payload: TaskPayload = TaskPayload(
521+
isar_id=settings.ISAR_ID,
522+
robot_name=settings.ROBOT_NAME,
523+
mission_id=self.current_mission.id if self.current_mission else None,
524+
task_id=task.id if task else None,
525+
status=task.status if task else None,
526+
task_type=task.type if task else None,
527+
error_reason=error_message.error_reason if error_message else None,
528+
error_description=(
529+
error_message.error_description if error_message else None
530+
),
531+
timestamp=datetime.now(timezone.utc),
532532
)
533533

534534
self.mqtt_publisher.publish(
535535
topic=settings.TOPIC_ISAR_TASK,
536-
payload=payload,
536+
payload=json.dumps(payload, cls=EnhancedJSONEncoder),
537537
qos=1,
538538
retain=True,
539539
)
540540

541541
def publish_status(self) -> None:
542542
if not self.mqtt_publisher:
543543
return
544-
payload: str = json.dumps(
545-
{
546-
"isar_id": settings.ISAR_ID,
547-
"robot_name": settings.ROBOT_NAME,
548-
"status": self._current_status(),
549-
"timestamp": datetime.now(timezone.utc),
550-
},
551-
cls=EnhancedJSONEncoder,
544+
545+
payload: RobotStatusPayload = RobotStatusPayload(
546+
isar_id=settings.ISAR_ID,
547+
robot_name=settings.ROBOT_NAME,
548+
status=self._current_status(),
549+
timestamp=datetime.now(timezone.utc),
552550
)
553551

554552
self.mqtt_publisher.publish(
555553
topic=settings.TOPIC_ISAR_STATUS,
556-
payload=payload,
554+
payload=json.dumps(payload, cls=EnhancedJSONEncoder),
557555
qos=1,
558556
retain=True,
559557
)

src/isar/storage/uploader.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from robot_interface.models.inspection.inspection import Inspection
1414
from robot_interface.models.mission.mission import Mission
1515
from robot_interface.telemetry.mqtt_client import MqttClientInterface
16+
from robot_interface.telemetry.payloads import InspectionResultPayload
1617
from robot_interface.utilities.json_service import EnhancedJSONEncoder
1718

1819

@@ -149,21 +150,19 @@ def _publish_inspection_result(
149150
"""
150151
if not self.mqtt_publisher:
151152
return
152-
payload: str = json.dumps(
153-
{
154-
"isar_id": settings.ISAR_ID,
155-
"robot_name": settings.ROBOT_NAME,
156-
"inspection_id": inspection.id,
157-
"inspection_path": inspection_path,
158-
"installation_code": settings.PLANT_SHORT_NAME,
159-
"analysis_to_be_run": inspection.metadata.analysis_type,
160-
"timestamp": datetime.now(timezone.utc),
161-
},
162-
cls=EnhancedJSONEncoder,
153+
154+
payload: InspectionResultPayload = InspectionResultPayload(
155+
isar_id=settings.ISAR_ID,
156+
robot_name=settings.ROBOT_NAME,
157+
inspection_id=inspection.id,
158+
inspection_path=inspection_path,
159+
installation_code=settings.PLANT_SHORT_NAME,
160+
analysis_to_be_run=inspection.metadata.analysis_type,
161+
timestamp=datetime.now(timezone.utc),
163162
)
164163
self.mqtt_publisher.publish(
165164
topic=settings.TOPIC_ISAR_INSPECTION_RESULT,
166-
payload=payload,
165+
payload=json.dumps(payload, cls=EnhancedJSONEncoder),
167166
qos=1,
168167
retain=True,
169168
)

src/robot_interface/telemetry/payloads.py

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
from dataclasses import dataclass
22
from datetime import datetime
3-
from typing import List, Optional
3+
from typing import List, Optional, Union
44

55
from alitra import Pose
6-
from transitions import State
76

8-
from robot_interface.models.mission.status import RobotStatus
97
from robot_interface.models.robots.battery_state import BatteryState
8+
from robot_interface.models.mission.status import RobotStatus, MissionStatus, TaskStatus
9+
from robot_interface.models.mission.task import TaskTypes
10+
from robot_interface.models.exceptions.robot_exceptions import ErrorReason
1011

1112

1213
@dataclass
@@ -54,12 +55,7 @@ class DocumentInfo:
5455
class RobotStatusPayload:
5556
isar_id: str
5657
robot_name: str
57-
robot_status: RobotStatus
58-
previous_robot_status: RobotStatus
59-
current_isar_state: State
60-
current_mission_id: str
61-
current_task_id: str
62-
current_step_id: str
58+
status: RobotStatus
6359
timestamp: datetime
6460

6561

@@ -82,3 +78,38 @@ class RobotHeartbeatPayload:
8278
isar_id: str
8379
robot_name: str
8480
timestamp: datetime
81+
82+
83+
@dataclass
84+
class MissionPayload:
85+
isar_id: str
86+
robot_name: str
87+
mission_id: Optional[str]
88+
status: Optional[MissionStatus]
89+
error_reason: Optional[ErrorReason]
90+
error_description: Optional[str]
91+
timestamp: datetime
92+
93+
94+
@dataclass
95+
class TaskPayload:
96+
isar_id: str
97+
robot_name: str
98+
mission_id: Optional[str]
99+
task_id: Optional[str]
100+
status: Optional[TaskStatus]
101+
task_type: Optional[TaskTypes]
102+
error_reason: Optional[ErrorReason]
103+
error_description: Optional[str]
104+
timestamp: datetime
105+
106+
107+
@dataclass
108+
class InspectionResultPayload:
109+
isar_id: str
110+
robot_name: str
111+
inspection_id: str
112+
inspection_path: Union[str, dict]
113+
installation_code: str
114+
analysis_to_be_run: Optional[str]
115+
timestamp: datetime

0 commit comments

Comments
 (0)