diff --git a/unilabos/app/mq.py b/unilabos/app/mq.py index 36bc0337..dbaa57cd 100644 --- a/unilabos/app/mq.py +++ b/unilabos/app/mq.py @@ -164,11 +164,11 @@ class MQTTClient: self.client.publish(address, json.dumps(status), qos=2) logger.critical(f"Device status published: address: {address}, {status}") - def publish_job_status(self, feedback_data: dict, job_id: str, status: str, return_info: Optional[dict] = None): + def publish_job_status(self, feedback_data: dict, job_id: str, status: str, return_info: Optional[str] = None): if self.mqtt_disable: return if return_info is None: - return_info = {} + return_info = "{}" jobdata = {"job_id": job_id, "data": feedback_data, "status": status, "return_info": return_info} self.client.publish(f"labs/{MQConfig.lab_id}/job/list/", json.dumps(jobdata), qos=2) diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index e75413f1..95e3f0c7 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -756,9 +756,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): goal_handle.succeed() self.lab_logger().info(f"设置动作成功: {action_name}") - result_values = { - "return_value": serialize_result_info(execution_error, execution_success, action_return_value) - } + result_values = {} for msg_name, attr_name in action_value_mapping["result"].items(): if hasattr(self.driver_instance, f"get_{attr_name}"): result_values[msg_name] = getattr(self.driver_instance, f"get_{attr_name}")() @@ -772,6 +770,8 @@ class BaseROS2DeviceNode(Node, Generic[T]): for attr_name in result_msg_types.keys(): if attr_name in ["success", "reached_goal"]: setattr(result_msg, attr_name, True) + elif attr_name == "return_info": + setattr(result_msg, attr_name, serialize_result_info(execution_error, execution_success, action_return_value)) self.lab_logger().info(f"动作 {action_name} 完成并返回结果") return result_msg diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index ece98857..91a9fa5a 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -622,7 +622,7 @@ class HostNode(BaseROS2DeviceNode): if uuid_str: for bridge in self.bridges: if hasattr(bridge, "publish_job_status"): - bridge.publish_job_status(result_data, uuid_str, "success", result_data) + bridge.publish_job_status(result_data, uuid_str, "success", result_data.get("return_info", "{}")) def cancel_goal(self, goal_uuid: str) -> None: """取消目标"""