diff --git a/unilabos/app/controler.py b/unilabos/app/controler.py index 391413f7..f58f53ab 100644 --- a/unilabos/app/controler.py +++ b/unilabos/app/controler.py @@ -29,6 +29,8 @@ def job_add(req: JobAddReq) -> JobData: req.data['action'] = action_name if action_name == "execute_command_from_outer": action_kwargs = {"command": json.dumps(action_kwargs)} + elif "command" in action_kwargs: + action_kwargs = action_kwargs["command"] print(f"job_add:{req.device_id} {action_name} {action_kwargs}") HostNode.get_instance().send_goal(req.device_id, action_name=action_name, action_kwargs=action_kwargs, goal_uuid=req.job_id) return JobData(jobId=req.job_id) diff --git a/unilabos/app/mq.py b/unilabos/app/mq.py index d0975e91..153f94aa 100644 --- a/unilabos/app/mq.py +++ b/unilabos/app/mq.py @@ -55,6 +55,12 @@ class MQTTClient: logger.debug("Payload:", json.dumps(payload_json, indent=2, ensure_ascii=False)) if msg.topic == f"labs/{MQConfig.lab_id}/job/start/": logger.debug("job_add", type(payload_json), payload_json) + if "data" not in payload_json: + payload_json["data"] = {} + if "action" in payload_json: + payload_json["data"]["action"] = payload_json.pop("action") + if "action_kwargs" in payload_json: + payload_json["data"]["action_kwargs"] = payload_json.pop("action_kwargs") job_req = JobAddReq.model_validate(payload_json) data = job_add(job_req) return diff --git a/unilabos/registry/registry.py b/unilabos/registry/registry.py index d8459866..dcaaf9f5 100644 --- a/unilabos/registry/registry.py +++ b/unilabos/registry/registry.py @@ -1,3 +1,4 @@ +import io import json import os import sys @@ -143,6 +144,7 @@ class Registry: + f"total: {len(files)}" ) current_device_number = len(self.device_type_registry) + 1 + from unilabos.app.web.utils.action_utils import get_yaml_from_goal_type for i, file in enumerate(files): data = yaml.safe_load(open(file, encoding="utf-8")) if data: @@ -167,6 +169,7 @@ class Registry: action_config["type"] = self._replace_type_with_class( action_config["type"], device_id, f"动作 {action_name}" ) + action_config["goal_default"] = yaml.safe_load(io.StringIO(get_yaml_from_goal_type(action_config["type"].Goal))) action_config["schema"] = ros_action_to_json_schema(action_config["type"]) self.device_type_registry.update(data)