From aed39b648da3b8210d14c5db8c0ceb2fe1067560 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Mon, 13 Oct 2025 15:00:50 +0800 Subject: [PATCH] Fix workstation startup Update registry --- .../workstation/bioyond_studio/config.py | 2 + unilabos/registry/devices/bioyond.yaml | 19 +- unilabos/registry/devices/laiyu_liquid.yaml | 11 +- unilabos/registry/devices/liquid_handler.yaml | 33 +- .../devices/reaction_station_bioyond.yaml | 802 +------------ unilabos/registry/devices/work_station.yaml | 1006 +---------------- unilabos/resources/graphio.py | 29 + 7 files changed, 171 insertions(+), 1731 deletions(-) diff --git a/unilabos/devices/workstation/bioyond_studio/config.py b/unilabos/devices/workstation/bioyond_studio/config.py index 13f5710b..52ae82e6 100644 --- a/unilabos/devices/workstation/bioyond_studio/config.py +++ b/unilabos/devices/workstation/bioyond_studio/config.py @@ -134,3 +134,5 @@ WORKFLOW_STEP_IDS = { "observe": "" } } + +LOCATION_MAPPING = {} \ No newline at end of file diff --git a/unilabos/registry/devices/bioyond.yaml b/unilabos/registry/devices/bioyond.yaml index 574d18a7..9c647952 100644 --- a/unilabos/registry/devices/bioyond.yaml +++ b/unilabos/registry/devices/bioyond.yaml @@ -54,7 +54,7 @@ workstation.bioyond_dispensing_station: percent_90_3_target_weigh: '' speed: '' temperature: '' - handles: [] + handles: {} result: return_info: return_info schema: @@ -174,7 +174,7 @@ workstation.bioyond_dispensing_station: target_weigh: '' temperature: '' volume: '' - handles: [] + handles: {} result: return_info: return_info schema: @@ -230,12 +230,23 @@ workstation.bioyond_dispensing_station: title: DispenStationSolnPrep type: object type: DispenStationSolnPrep - module: unilabos.devices.workstation.bioyond_studio.dispensing_station:BioyondDispendsingStation + module: unilabos.devices.workstation.bioyond_studio.dispensing_station:BioyondDispensingStation status_types: {} type: python config_info: [] description: '' handles: [] icon: '' - init_param_schema: {} + init_param_schema: + config: + properties: + config: + type: string + required: + - config + type: object + data: + properties: {} + required: [] + type: object version: 1.0.0 diff --git a/unilabos/registry/devices/laiyu_liquid.yaml b/unilabos/registry/devices/laiyu_liquid.yaml index 98201a7d..64c0c182 100644 --- a/unilabos/registry/devices/laiyu_liquid.yaml +++ b/unilabos/registry/devices/laiyu_liquid.yaml @@ -1361,8 +1361,7 @@ laiyu_liquid: mix_liquid_height: 0.0 mix_rate: 0 mix_stage: '' - mix_times: - - 0 + mix_times: 0 mix_vol: 0 none_keys: - '' @@ -1492,11 +1491,9 @@ laiyu_liquid: mix_stage: type: string mix_times: - items: - maximum: 2147483647 - minimum: -2147483648 - type: integer - type: array + maximum: 2147483647 + minimum: -2147483648 + type: integer mix_vol: maximum: 2147483647 minimum: -2147483648 diff --git a/unilabos/registry/devices/liquid_handler.yaml b/unilabos/registry/devices/liquid_handler.yaml index b21ccd7e..99c92333 100644 --- a/unilabos/registry/devices/liquid_handler.yaml +++ b/unilabos/registry/devices/liquid_handler.yaml @@ -3994,8 +3994,7 @@ liquid_handler: mix_liquid_height: 0.0 mix_rate: 0 mix_stage: '' - mix_times: - - 0 + mix_times: 0 mix_vol: 0 none_keys: - '' @@ -4151,11 +4150,9 @@ liquid_handler: mix_stage: type: string mix_times: - items: - maximum: 2147483647 - minimum: -2147483648 - type: integer - type: array + maximum: 2147483647 + minimum: -2147483648 + type: integer mix_vol: maximum: 2147483647 minimum: -2147483648 @@ -5015,8 +5012,7 @@ liquid_handler.biomek: mix_liquid_height: 0.0 mix_rate: 0 mix_stage: '' - mix_times: - - 0 + mix_times: 0 mix_vol: 0 none_keys: - '' @@ -5159,11 +5155,9 @@ liquid_handler.biomek: mix_stage: type: string mix_times: - items: - maximum: 2147483647 - minimum: -2147483648 - type: integer - type: array + maximum: 2147483647 + minimum: -2147483648 + type: integer mix_vol: maximum: 2147483647 minimum: -2147483648 @@ -7807,8 +7801,7 @@ liquid_handler.prcxi: mix_liquid_height: 0.0 mix_rate: 0 mix_stage: '' - mix_times: - - 0 + mix_times: 0 mix_vol: 0 none_keys: - '' @@ -7937,11 +7930,9 @@ liquid_handler.prcxi: mix_stage: type: string mix_times: - items: - maximum: 2147483647 - minimum: -2147483648 - type: integer - type: array + maximum: 2147483647 + minimum: -2147483648 + type: integer mix_vol: maximum: 2147483647 minimum: -2147483648 diff --git a/unilabos/registry/devices/reaction_station_bioyond.yaml b/unilabos/registry/devices/reaction_station_bioyond.yaml index 712108bd..0a4090ea 100644 --- a/unilabos/registry/devices/reaction_station_bioyond.yaml +++ b/unilabos/registry/devices/reaction_station_bioyond.yaml @@ -4,11 +4,11 @@ reaction_station.bioyond: - reaction_station_bioyond class: action_value_mappings: - auto-add_material: + auto-append_to_workflow_sequence: feedback: {} goal: {} goal_default: - material_data: null + web_workflow_name: null handles: {} placeholder_keys: {} result: {} @@ -18,22 +18,21 @@ reaction_station.bioyond: feedback: {} goal: properties: - material_data: - type: object + web_workflow_name: + type: string required: - - material_data + - web_workflow_name type: object result: {} required: - goal - title: add_material参数 + title: append_to_workflow_sequence参数 type: object type: UniLabJsonCommand - auto-create_90_10_vial_feeding_task: + auto-clear_workflows: feedback: {} goal: {} - goal_default: - task_data: null + goal_default: {} handles: {} placeholder_keys: {} result: {} @@ -42,470 +41,13 @@ reaction_station.bioyond: properties: feedback: {} goal: - properties: - task_data: - type: string - required: - - task_data - type: object - result: {} - required: - - goal - title: create_90_10_vial_feeding_task参数 - type: object - type: UniLabJsonCommand - auto-create_batch_90_10_vial_feeding_task: - feedback: {} - goal: {} - goal_default: - batch_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - batch_data: - type: string - required: - - batch_data - type: object - result: {} - required: - - goal - title: create_batch_90_10_vial_feeding_task参数 - type: object - type: UniLabJsonCommand - auto-create_batch_diamine_solution_task: - feedback: {} - goal: {} - goal_default: - batch_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - batch_data: - type: string - required: - - batch_data - type: object - result: {} - required: - - goal - title: create_batch_diamine_solution_task参数 - type: object - type: UniLabJsonCommand - auto-create_diamine_solution_task: - feedback: {} - goal: {} - goal_default: - solution_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - solution_data: - type: string - required: - - solution_data - type: object - result: {} - required: - - goal - title: create_diamine_solution_task参数 - type: object - type: UniLabJsonCommand - auto-create_order: - feedback: {} - goal: {} - goal_default: - parameters: null - task_name: null - workflow_name: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - parameters: - type: object - task_name: - type: string - workflow_name: - type: string - required: - - workflow_name - - task_name - type: object - result: {} - required: - - goal - title: create_order参数 - type: object - type: UniLabJsonCommand - auto-create_resource: - feedback: {} - goal: {} - goal_default: - resource_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - resource_data: - type: string - required: - - resource_data - type: object - result: {} - required: - - goal - title: create_resource参数 - type: object - type: UniLabJsonCommand - auto-delete_material: - feedback: {} - goal: {} - goal_default: - material_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_data: - type: string - required: - - material_data - type: object - result: {} - required: - - goal - title: delete_material参数 - type: object - type: UniLabJsonCommand - auto-device_operation: - feedback: {} - goal: {} - goal_default: - device_id: null - operation: null - parameters: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - device_id: - type: string - operation: - type: string - parameters: - type: object - required: - - device_id - - operation - type: object - result: {} - required: - - goal - title: device_operation参数 - type: object - type: UniLabJsonCommand - auto-dispensing_material_inbound: - feedback: {} - goal: {} - goal_default: - material_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_data: - type: string - required: - - material_data - type: object - result: {} - required: - - goal - title: dispensing_material_inbound参数 - type: object - type: UniLabJsonCommand - auto-dispensing_material_outbound: - feedback: {} - goal: {} - goal_default: - material_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_data: - type: string - required: - - material_data - type: object - result: {} - required: - - goal - title: dispensing_material_outbound参数 - type: object - type: UniLabJsonCommand - auto-drip_back: - feedback: {} - goal: {} - goal_default: - assign_material_name: Reactor - temperature: 25.0 - time: '0' - torque_variation: '1' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - assign_material_name: - default: Reactor - type: string - temperature: - default: 25.0 - type: number - time: - default: '0' - type: string - torque_variation: - default: '1' - type: string + properties: {} required: [] type: object result: {} required: - goal - title: drip_back参数 - type: object - type: UniLabJsonCommand - auto-execute_bioyond_sync_workflow: - feedback: {} - goal: {} - goal_default: - parameters: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - parameters: - type: object - required: - - parameters - type: object - result: {} - required: - - goal - title: execute_bioyond_sync_workflow参数 - type: object - type: UniLabJsonCommandAsync - auto-execute_bioyond_update_workflow: - feedback: {} - goal: {} - goal_default: - parameters: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - parameters: - type: object - required: - - parameters - type: object - result: {} - required: - - goal - title: execute_bioyond_update_workflow参数 - type: object - type: UniLabJsonCommandAsync - auto-liquid_feeding_beaker: - feedback: {} - goal: {} - goal_default: - material_name: '' - volume: '' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_name: - default: '' - type: string - volume: - default: '' - type: string - required: [] - type: object - result: {} - required: - - goal - title: liquid_feeding_beaker参数 - type: object - type: UniLabJsonCommand - auto-liquid_feeding_solvents: - feedback: {} - goal: {} - goal_default: - material_name: '' - volume: '' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_name: - default: '' - type: string - volume: - default: '' - type: string - required: [] - type: object - result: {} - required: - - goal - title: liquid_feeding_solvents参数 - type: object - type: UniLabJsonCommand - auto-liquid_feeding_titration: - feedback: {} - goal: {} - goal_default: - material_name: '' - time: '120' - titration_type: '1' - torque_variation: '2' - volume: '' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_name: - default: '' - type: string - time: - default: '120' - type: string - titration_type: - default: '1' - type: string - torque_variation: - default: '2' - type: string - volume: - default: '' - type: string - required: [] - type: object - result: {} - required: - - goal - title: liquid_feeding_titration参数 - type: object - type: UniLabJsonCommand - auto-liquid_feeding_vials_non_titration: - feedback: {} - goal: {} - goal_default: - material_name: '' - volume: '' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_name: - default: '' - type: string - volume: - default: '' - type: string - required: [] - type: object - result: {} - required: - - goal - title: liquid_feeding_vials_non_titration参数 + title: clear_workflows参数 type: object type: UniLabJsonCommand auto-load_bioyond_data_from_file: @@ -533,74 +75,11 @@ reaction_station.bioyond: title: load_bioyond_data_from_file参数 type: object type: UniLabJsonCommand - auto-material_inbound: - feedback: {} - goal: {} - goal_default: - location_name: null - material_id: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - location_name: - type: string - material_id: - type: string - required: - - material_id - - location_name - type: object - result: {} - required: - - goal - title: material_inbound参数 - type: object - type: UniLabJsonCommand - auto-material_outbound: - feedback: {} - goal: {} - goal_default: - location_name: null - material_id: null - quantity: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - location_name: - type: string - material_id: - type: string - quantity: - type: integer - required: - - material_id - - location_name - - quantity - type: object - result: {} - required: - - goal - title: material_outbound参数 - type: object - type: UniLabJsonCommand auto-merge_workflow_with_parameters: feedback: {} goal: {} goal_default: - name: null - workflows: null + json_str: null handles: {} placeholder_keys: {} result: {} @@ -610,15 +89,10 @@ reaction_station.bioyond: feedback: {} goal: properties: - name: + json_str: type: string - workflows: - items: - type: object - type: array required: - - name - - workflows + - json_str type: object result: {} required: @@ -626,31 +100,6 @@ reaction_station.bioyond: title: merge_workflow_with_parameters参数 type: object type: UniLabJsonCommand - auto-order_query: - feedback: {} - goal: {} - goal_default: - query_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - query_data: - type: string - required: - - query_data - type: object - result: {} - required: - - goal - title: order_query参数 - type: object - type: UniLabJsonCommand auto-post_init: feedback: {} goal: {} @@ -676,33 +125,11 @@ reaction_station.bioyond: title: post_init参数 type: object type: UniLabJsonCommand - auto-reactor_taken_in: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: reactor_taken_in参数 - type: object - type: UniLabJsonCommand - auto-reactor_taken_out: + auto-process_web_workflows: feedback: {} goal: {} goal_default: - order_id: '' - preintake_id: '' + json_str: null handles: {} placeholder_keys: {} result: {} @@ -712,18 +139,15 @@ reaction_station.bioyond: feedback: {} goal: properties: - order_id: - default: '' + json_str: type: string - preintake_id: - default: '' - type: string - required: [] + required: + - json_str type: object result: {} required: - goal - title: reactor_taken_out参数 + title: process_web_workflows参数 type: object type: UniLabJsonCommand auto-reset_workstation: @@ -747,11 +171,11 @@ reaction_station.bioyond: title: reset_workstation参数 type: object type: UniLabJsonCommand - auto-sample_waste_removal: + auto-resource_tree_add: feedback: {} goal: {} goal_default: - waste_data: null + resources: null handles: {} placeholder_keys: {} result: {} @@ -761,119 +185,42 @@ reaction_station.bioyond: feedback: {} goal: properties: - waste_data: + resources: + items: + type: object + type: array + required: + - resources + type: object + result: {} + required: + - goal + title: resource_tree_add参数 + type: object + type: UniLabJsonCommand + auto-set_workflow_sequence: + feedback: {} + goal: {} + goal_default: + json_str: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + json_str: type: string required: - - waste_data + - json_str type: object result: {} required: - goal - title: sample_waste_removal参数 - type: object - type: UniLabJsonCommand - auto-solid_feeding_vials: - feedback: {} - goal: {} - goal_default: - material_name: '' - volume: '' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_name: - default: '' - type: string - volume: - default: '' - type: string - required: [] - type: object - result: {} - required: - - goal - title: solid_feeding_vials参数 - type: object - type: UniLabJsonCommand - auto-start_scheduler: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: start_scheduler参数 - type: object - type: UniLabJsonCommand - auto-stock_material: - feedback: {} - goal: {} - goal_default: - location: null - material_id: null - quantity: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - location: - type: string - material_id: - type: string - quantity: - type: integer - required: - - material_id - - location - - quantity - type: object - result: {} - required: - - goal - title: stock_material参数 - type: object - type: UniLabJsonCommand - auto-stop_scheduler: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: stop_scheduler参数 + title: set_workflow_sequence参数 type: object type: UniLabJsonCommand auto-transfer_resource_to_another: @@ -1064,33 +411,6 @@ reaction_station.bioyond: title: transfer_resource_to_another参数 type: object type: UniLabJsonCommand - auto-validate_workflow_parameters: - feedback: {} - goal: {} - goal_default: - workflows: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - workflows: - items: - type: object - type: array - required: - - workflows - type: object - result: {} - required: - - goal - title: validate_workflow_parameters参数 - type: object - type: UniLabJsonCommand bioyond_sync: feedback: {} goal: @@ -1407,11 +727,8 @@ reaction_station.bioyond: module: unilabos.devices.workstation.bioyond_studio.station:BioyondWorkstation protocol_type: [] status_types: + all_workflows: dict bioyond_status: dict - device_list: dict - scheduler_status: dict - station_info: dict - workflow_parameter_template: dict workstation_status: dict type: python config_info: [] @@ -1431,24 +748,15 @@ reaction_station.bioyond: type: object data: properties: + all_workflows: + type: object bioyond_status: type: object - device_list: - type: object - scheduler_status: - type: object - station_info: - type: object - workflow_parameter_template: - type: object workstation_status: type: object required: - - station_info - bioyond_status - - workflow_parameter_template - - scheduler_status - - device_list + - all_workflows - workstation_status type: object version: 1.0.0 diff --git a/unilabos/registry/devices/work_station.yaml b/unilabos/registry/devices/work_station.yaml index 94250a50..7efdfd22 100644 --- a/unilabos/registry/devices/work_station.yaml +++ b/unilabos/registry/devices/work_station.yaml @@ -6049,11 +6049,11 @@ workstation.bioyond: - work_station class: action_value_mappings: - auto-add_material: + auto-append_to_workflow_sequence: feedback: {} goal: {} goal_default: - material_data: null + web_workflow_name: null handles: {} placeholder_keys: {} result: {} @@ -6063,22 +6063,21 @@ workstation.bioyond: feedback: {} goal: properties: - material_data: - type: object + web_workflow_name: + type: string required: - - material_data + - web_workflow_name type: object result: {} required: - goal - title: add_material参数 + title: append_to_workflow_sequence参数 type: object type: UniLabJsonCommand - auto-create_90_10_vial_feeding_task: + auto-clear_workflows: feedback: {} goal: {} - goal_default: - task_data: null + goal_default: {} handles: {} placeholder_keys: {} result: {} @@ -6087,470 +6086,13 @@ workstation.bioyond: properties: feedback: {} goal: - properties: - task_data: - type: string - required: - - task_data - type: object - result: {} - required: - - goal - title: create_90_10_vial_feeding_task参数 - type: object - type: UniLabJsonCommand - auto-create_batch_90_10_vial_feeding_task: - feedback: {} - goal: {} - goal_default: - batch_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - batch_data: - type: string - required: - - batch_data - type: object - result: {} - required: - - goal - title: create_batch_90_10_vial_feeding_task参数 - type: object - type: UniLabJsonCommand - auto-create_batch_diamine_solution_task: - feedback: {} - goal: {} - goal_default: - batch_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - batch_data: - type: string - required: - - batch_data - type: object - result: {} - required: - - goal - title: create_batch_diamine_solution_task参数 - type: object - type: UniLabJsonCommand - auto-create_diamine_solution_task: - feedback: {} - goal: {} - goal_default: - solution_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - solution_data: - type: string - required: - - solution_data - type: object - result: {} - required: - - goal - title: create_diamine_solution_task参数 - type: object - type: UniLabJsonCommand - auto-create_order: - feedback: {} - goal: {} - goal_default: - parameters: null - task_name: null - workflow_name: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - parameters: - type: object - task_name: - type: string - workflow_name: - type: string - required: - - workflow_name - - task_name - type: object - result: {} - required: - - goal - title: create_order参数 - type: object - type: UniLabJsonCommand - auto-create_resource: - feedback: {} - goal: {} - goal_default: - resource_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - resource_data: - type: string - required: - - resource_data - type: object - result: {} - required: - - goal - title: create_resource参数 - type: object - type: UniLabJsonCommand - auto-delete_material: - feedback: {} - goal: {} - goal_default: - material_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_data: - type: string - required: - - material_data - type: object - result: {} - required: - - goal - title: delete_material参数 - type: object - type: UniLabJsonCommand - auto-device_operation: - feedback: {} - goal: {} - goal_default: - device_id: null - operation: null - parameters: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - device_id: - type: string - operation: - type: string - parameters: - type: object - required: - - device_id - - operation - type: object - result: {} - required: - - goal - title: device_operation参数 - type: object - type: UniLabJsonCommand - auto-dispensing_material_inbound: - feedback: {} - goal: {} - goal_default: - material_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_data: - type: string - required: - - material_data - type: object - result: {} - required: - - goal - title: dispensing_material_inbound参数 - type: object - type: UniLabJsonCommand - auto-dispensing_material_outbound: - feedback: {} - goal: {} - goal_default: - material_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_data: - type: string - required: - - material_data - type: object - result: {} - required: - - goal - title: dispensing_material_outbound参数 - type: object - type: UniLabJsonCommand - auto-drip_back: - feedback: {} - goal: {} - goal_default: - assign_material_name: Reactor - temperature: 25.0 - time: '0' - torque_variation: '1' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - assign_material_name: - default: Reactor - type: string - temperature: - default: 25.0 - type: number - time: - default: '0' - type: string - torque_variation: - default: '1' - type: string + properties: {} required: [] type: object result: {} required: - goal - title: drip_back参数 - type: object - type: UniLabJsonCommand - auto-execute_bioyond_sync_workflow: - feedback: {} - goal: {} - goal_default: - parameters: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - parameters: - type: object - required: - - parameters - type: object - result: {} - required: - - goal - title: execute_bioyond_sync_workflow参数 - type: object - type: UniLabJsonCommandAsync - auto-execute_bioyond_update_workflow: - feedback: {} - goal: {} - goal_default: - parameters: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - parameters: - type: object - required: - - parameters - type: object - result: {} - required: - - goal - title: execute_bioyond_update_workflow参数 - type: object - type: UniLabJsonCommandAsync - auto-liquid_feeding_beaker: - feedback: {} - goal: {} - goal_default: - material_name: '' - volume: '' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_name: - default: '' - type: string - volume: - default: '' - type: string - required: [] - type: object - result: {} - required: - - goal - title: liquid_feeding_beaker参数 - type: object - type: UniLabJsonCommand - auto-liquid_feeding_solvents: - feedback: {} - goal: {} - goal_default: - material_name: '' - volume: '' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_name: - default: '' - type: string - volume: - default: '' - type: string - required: [] - type: object - result: {} - required: - - goal - title: liquid_feeding_solvents参数 - type: object - type: UniLabJsonCommand - auto-liquid_feeding_titration: - feedback: {} - goal: {} - goal_default: - material_name: '' - time: '120' - titration_type: '1' - torque_variation: '2' - volume: '' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_name: - default: '' - type: string - time: - default: '120' - type: string - titration_type: - default: '1' - type: string - torque_variation: - default: '2' - type: string - volume: - default: '' - type: string - required: [] - type: object - result: {} - required: - - goal - title: liquid_feeding_titration参数 - type: object - type: UniLabJsonCommand - auto-liquid_feeding_vials_non_titration: - feedback: {} - goal: {} - goal_default: - material_name: '' - volume: '' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_name: - default: '' - type: string - volume: - default: '' - type: string - required: [] - type: object - result: {} - required: - - goal - title: liquid_feeding_vials_non_titration参数 + title: clear_workflows参数 type: object type: UniLabJsonCommand auto-load_bioyond_data_from_file: @@ -6578,74 +6120,11 @@ workstation.bioyond: title: load_bioyond_data_from_file参数 type: object type: UniLabJsonCommand - auto-material_inbound: - feedback: {} - goal: {} - goal_default: - location_name: null - material_id: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - location_name: - type: string - material_id: - type: string - required: - - material_id - - location_name - type: object - result: {} - required: - - goal - title: material_inbound参数 - type: object - type: UniLabJsonCommand - auto-material_outbound: - feedback: {} - goal: {} - goal_default: - location_name: null - material_id: null - quantity: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - location_name: - type: string - material_id: - type: string - quantity: - type: integer - required: - - material_id - - location_name - - quantity - type: object - result: {} - required: - - goal - title: material_outbound参数 - type: object - type: UniLabJsonCommand auto-merge_workflow_with_parameters: feedback: {} goal: {} goal_default: - name: null - workflows: null + json_str: null handles: {} placeholder_keys: {} result: {} @@ -6655,15 +6134,10 @@ workstation.bioyond: feedback: {} goal: properties: - name: + json_str: type: string - workflows: - items: - type: object - type: array required: - - name - - workflows + - json_str type: object result: {} required: @@ -6671,31 +6145,6 @@ workstation.bioyond: title: merge_workflow_with_parameters参数 type: object type: UniLabJsonCommand - auto-order_query: - feedback: {} - goal: {} - goal_default: - query_data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - query_data: - type: string - required: - - query_data - type: object - result: {} - required: - - goal - title: order_query参数 - type: object - type: UniLabJsonCommand auto-post_init: feedback: {} goal: {} @@ -6721,14 +6170,11 @@ workstation.bioyond: title: post_init参数 type: object type: UniLabJsonCommand - auto-reaction_station_drip_back: + auto-process_web_workflows: feedback: {} goal: {} goal_default: - assign_material_name: null - time: null - torque_variation: null - volume: null + json_str: null handles: {} placeholder_keys: {} result: {} @@ -6738,243 +6184,15 @@ workstation.bioyond: feedback: {} goal: properties: - assign_material_name: - type: string - time: - type: string - torque_variation: - type: string - volume: + json_str: type: string required: - - volume - - assign_material_name - - time - - torque_variation + - json_str type: object result: {} required: - goal - title: reaction_station_drip_back参数 - type: object - type: UniLabJsonCommand - auto-reaction_station_liquid_feed: - feedback: {} - goal: {} - goal_default: - assign_material_name: null - time: null - titration_type: null - torque_variation: null - volume: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - assign_material_name: - type: string - time: - type: string - titration_type: - type: string - torque_variation: - type: string - volume: - type: string - required: - - titration_type - - volume - - assign_material_name - - time - - torque_variation - type: object - result: {} - required: - - goal - title: reaction_station_liquid_feed参数 - type: object - type: UniLabJsonCommand - auto-reaction_station_process_execute: - feedback: {} - goal: {} - goal_default: - task_name: null - workflow_name: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - task_name: - type: string - workflow_name: - type: string - required: - - workflow_name - - task_name - type: object - result: {} - required: - - goal - title: reaction_station_process_execute参数 - type: object - type: UniLabJsonCommand - auto-reaction_station_reactor_taken_out: - feedback: {} - goal: {} - goal_default: - order_id: '' - preintake_id: '' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - order_id: - default: '' - type: string - preintake_id: - default: '' - type: string - required: [] - type: object - result: {} - required: - - goal - title: reaction_station_reactor_taken_out参数 - type: object - type: UniLabJsonCommand - auto-reaction_station_solid_feed_vial: - feedback: {} - goal: {} - goal_default: - assign_material_name: null - material_id: null - time: null - torque_variation: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - assign_material_name: - type: string - material_id: - type: string - time: - type: string - torque_variation: - type: string - required: - - assign_material_name - - material_id - - time - - torque_variation - type: object - result: {} - required: - - goal - title: reaction_station_solid_feed_vial参数 - type: object - type: UniLabJsonCommand - auto-reaction_station_take_in: - feedback: {} - goal: {} - goal_default: - assign_material_name: null - cutoff: null - temperature: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - assign_material_name: - type: string - cutoff: - type: string - temperature: - type: string - required: - - cutoff - - temperature - - assign_material_name - type: object - result: {} - required: - - goal - title: reaction_station_take_in参数 - type: object - type: UniLabJsonCommand - auto-reactor_taken_in: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: reactor_taken_in参数 - type: object - type: UniLabJsonCommand - auto-reactor_taken_out: - feedback: {} - goal: {} - goal_default: - order_id: '' - preintake_id: '' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - order_id: - default: '' - type: string - preintake_id: - default: '' - type: string - required: [] - type: object - result: {} - required: - - goal - title: reactor_taken_out参数 + title: process_web_workflows参数 type: object type: UniLabJsonCommand auto-reset_workstation: @@ -6998,11 +6216,11 @@ workstation.bioyond: title: reset_workstation参数 type: object type: UniLabJsonCommand - auto-sample_waste_removal: + auto-resource_tree_add: feedback: {} goal: {} goal_default: - waste_data: null + resources: null handles: {} placeholder_keys: {} result: {} @@ -7012,119 +6230,42 @@ workstation.bioyond: feedback: {} goal: properties: - waste_data: + resources: + items: + type: object + type: array + required: + - resources + type: object + result: {} + required: + - goal + title: resource_tree_add参数 + type: object + type: UniLabJsonCommand + auto-set_workflow_sequence: + feedback: {} + goal: {} + goal_default: + json_str: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + json_str: type: string required: - - waste_data + - json_str type: object result: {} required: - goal - title: sample_waste_removal参数 - type: object - type: UniLabJsonCommand - auto-solid_feeding_vials: - feedback: {} - goal: {} - goal_default: - material_name: '' - volume: '' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_name: - default: '' - type: string - volume: - default: '' - type: string - required: [] - type: object - result: {} - required: - - goal - title: solid_feeding_vials参数 - type: object - type: UniLabJsonCommand - auto-start_scheduler: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: start_scheduler参数 - type: object - type: UniLabJsonCommand - auto-stock_material: - feedback: {} - goal: {} - goal_default: - location: null - material_id: null - quantity: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - location: - type: string - material_id: - type: string - quantity: - type: integer - required: - - material_id - - location - - quantity - type: object - result: {} - required: - - goal - title: stock_material参数 - type: object - type: UniLabJsonCommand - auto-stop_scheduler: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: stop_scheduler参数 + title: set_workflow_sequence参数 type: object type: UniLabJsonCommand auto-transfer_resource_to_another: @@ -7315,40 +6456,10 @@ workstation.bioyond: title: transfer_resource_to_another参数 type: object type: UniLabJsonCommand - auto-validate_workflow_parameters: - feedback: {} - goal: {} - goal_default: - workflows: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - workflows: - items: - type: object - type: array - required: - - workflows - type: object - result: {} - required: - - goal - title: validate_workflow_parameters参数 - type: object - type: UniLabJsonCommand module: unilabos.devices.workstation.bioyond_studio.station:BioyondWorkstation status_types: + all_workflows: dict bioyond_status: dict - device_list: dict - scheduler_status: dict - station_info: dict - workflow_parameter_template: dict workstation_status: dict type: python config_info: [] @@ -7368,24 +6479,15 @@ workstation.bioyond: type: object data: properties: + all_workflows: + type: object bioyond_status: type: object - device_list: - type: object - scheduler_status: - type: object - station_info: - type: object - workflow_parameter_template: - type: object workstation_status: type: object required: - - station_info - bioyond_status - - workflow_parameter_template - - scheduler_status - - device_list + - all_workflows - workstation_status type: object version: 1.0.0 diff --git a/unilabos/resources/graphio.py b/unilabos/resources/graphio.py index 28eb77c1..b9b63f34 100644 --- a/unilabos/resources/graphio.py +++ b/unilabos/resources/graphio.py @@ -1,12 +1,14 @@ import importlib import inspect import json +import os.path import traceback from typing import Union, Any, Dict, List, Tuple import networkx as nx from pylabrobot.resources import ResourceHolder from unilabos_msgs.msg import Resource +from unilabos.config.config import BasicConfig from unilabos.resources.container import RegularContainer from unilabos.resources.itemized_carrier import ItemizedCarrier from unilabos.ros.msgs.message_converter import convert_to_ros_msg @@ -45,6 +47,29 @@ def canonicalize_nodes_data( if node.get("label") is not None: node_id = node.pop("label") node["id"] = node["name"] = node_id + if not isinstance(node.get("config"), dict): + node["config"] = {} + if not node.get("type"): + node["type"] = "device" + print_status(f"Warning: Node {node.get('id', 'unknown')} missing 'type', defaulting to 'device'", "warning") + if not node.get("name"): + node["name"] = node.get("id") + print_status(f"Warning: Node {node.get('id', 'unknown')} missing 'name', defaulting to {node['name']}", "warning") + if not isinstance(node.get("position"), dict): + node["position"] = {"position": {}} + x = node.pop("x", None) + if x is not None: + node["position"]["position"]["x"] = x + y = node.pop("y", None) + if y is not None: + node["position"]["position"]["y"] = y + z = node.pop("z", None) + if z is not None: + node["position"]["position"]["z"] = z + for k in list(node.keys()): + if k not in ["id", "uuid", "name", "description", "schema", "model", "icon", "parent_uuid", "parent", "type", "class", "position", "config", "data"]: + v = node.pop(k) + node["config"][k] = v # 第二步:处理parent_relation id2idx = {node["id"]: idx for idx, node in enumerate(nodes)} @@ -302,6 +327,10 @@ def read_graphml(graphml_file: str) -> tuple[nx.Graph, ResourceTreeSet, List[Dic "nodes": [node.res_content.model_dump(by_alias=True) for node in resource_tree_set.all_nodes], "links": standardized_links, } + dump_json_path = os.path.join(BasicConfig.working_dir, os.path.basename(graphml_file).rsplit(".")[0] + ".json") + with open(dump_json_path, "w", encoding="utf-8") as f: + f.write(json.dumps(graph_data, indent=4, ensure_ascii=False)) + print_status(f"GraphML converted to JSON and saved to {dump_json_path}", "info") physical_setup_graph = nx.node_link_graph(graph_data, link="links", multigraph=False) handle_communications(physical_setup_graph)