From b1dae6da17aed9ca764b093a8bb9e03bcd24df31 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Tue, 17 Jun 2025 15:58:56 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E4=B8=8D=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E8=A1=A8=E6=8A=A5=E9=80=81=EF=BC=8C=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E5=91=BD=E4=BB=A4unilabos-register=E6=88=96=E8=80=85?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=90=AF=E5=8A=A8=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- unilabos/app/main.py | 6 ++++++ unilabos/app/mq.py | 5 +++-- unilabos/app/register.py | 10 +++++++--- unilabos/config/config.py | 3 ++- unilabos/ros/nodes/presets/host_node.py | 15 +++++++++------ 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/unilabos/app/main.py b/unilabos/app/main.py index 471df4b..835c57d 100644 --- a/unilabos/app/main.py +++ b/unilabos/app/main.py @@ -73,6 +73,11 @@ def parse_args(): action="store_true", help="Slave模式下跳过等待host服务", ) + parser.add_argument( + "--upload_registry", + action="store_true", + help="启动unilab时同时报送注册表信息", + ) parser.add_argument( "--config", type=str, @@ -117,6 +122,7 @@ def main(): # 设置BasicConfig参数 BasicConfig.is_host_mode = not args_dict.get("without_host", False) BasicConfig.slave_no_host = args_dict.get("slave_no_host", False) + BasicConfig.upload_registry = args_dict.get("upload_registry", False) machine_name = os.popen("hostname").read().strip() machine_name = "".join([c if c.isalnum() or c == "_" else "_" for c in machine_name]) BasicConfig.machine_name = machine_name diff --git a/unilabos/app/mq.py b/unilabos/app/mq.py index fbd57b9..ac744c9 100644 --- a/unilabos/app/mq.py +++ b/unilabos/app/mq.py @@ -172,13 +172,14 @@ class MQTTClient: 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) - def publish_registry(self, device_id: str, device_info: dict): + def publish_registry(self, device_id: str, device_info: dict, print_debug: bool = True): if self.mqtt_disable: return address = f"labs/{MQConfig.lab_id}/registry/" registry_data = json.dumps({device_id: device_info}, ensure_ascii=False, cls=TypeEncoder) self.client.publish(address, registry_data, qos=2) - logger.debug(f"Registry data published: address: {address}, {registry_data}") + if print_debug: + logger.debug(f"Registry data published: address: {address}, {registry_data}") def publish_actions(self, action_id: str, action_info: dict): if self.mqtt_disable: diff --git a/unilabos/app/register.py b/unilabos/app/register.py index 478e1cf..76ad5a5 100644 --- a/unilabos/app/register.py +++ b/unilabos/app/register.py @@ -15,15 +15,15 @@ def register_devices_and_resources(mqtt_client, lab_registry): # 注册设备信息 for device_info in lab_registry.obtain_registry_device_info(): - mqtt_client.publish_registry(device_info["id"], device_info) + mqtt_client.publish_registry(device_info["id"], device_info, False) logger.debug(f"[UniLab Register] 注册设备: {device_info['id']}") # 注册资源信息 for resource_info in lab_registry.obtain_registry_resource_info(): - mqtt_client.publish_registry(resource_info["id"], resource_info) + mqtt_client.publish_registry(resource_info["id"], resource_info, False) logger.debug(f"[UniLab Register] 注册资源: {resource_info['id']}") - time.sleep(20) + time.sleep(10) logger.info("[UniLab Register] 设备和资源注册完成.") @@ -53,6 +53,10 @@ def main(): load_config_from_file(args.config) from unilabos.app.mq import mqtt_client + + # 连接mqtt + mqtt_client.start() + from unilabos.registry.registry import lab_registry # 注册设备和资源 diff --git a/unilabos/config/config.py b/unilabos/config/config.py index 0cf999e..32ebf68 100644 --- a/unilabos/config/config.py +++ b/unilabos/config/config.py @@ -10,8 +10,9 @@ from unilabos.utils import logger class BasicConfig: ENV = "pro" # 'test' config_path = "" - is_host_mode = True # 从registry.py移动过来 + is_host_mode = True slave_no_host = False # 是否跳过rclient.wait_for_service() + upload_registry = False machine_name = "undefined" vis_2d_enable = False diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index e8bd909..a4658de 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -22,6 +22,7 @@ from unilabos_msgs.srv import ( ) # type: ignore from unique_identifier_msgs.msg import UUID +from unilabos.config.config import BasicConfig from unilabos.registry.registry import lab_registry from unilabos.resources.graphio import initialize_resource from unilabos.resources.registry import add_schema @@ -146,13 +147,15 @@ class HostNode(BaseROS2DeviceNode): self.device_status = {} # 用来存储设备状态 self.device_status_timestamps = {} # 用来存储设备状态最后更新时间 + if BasicConfig.upload_registry: + from unilabos.app.mq import mqtt_client - # from unilabos.app.mq import mqtt_client - # - # for device_info in lab_registry.obtain_registry_device_info(): - # mqtt_client.publish_registry(device_info["id"], device_info) - # for resource_info in lab_registry.obtain_registry_resource_info(): - # mqtt_client.publish_registry(resource_info["id"], resource_info) + for device_info in lab_registry.obtain_registry_device_info(): + mqtt_client.publish_registry(device_info["id"], device_info) + for resource_info in lab_registry.obtain_registry_resource_info(): + mqtt_client.publish_registry(resource_info["id"], resource_info) + else: + self.lab_logger().warning("本次启动注册表不报送云端,如果您需要联网调试,请使用unilab-register命令进行单独报送") time.sleep(1) # 等待MQTT连接稳定 # 首次发现网络中的设备 self._discover_devices()