[{"data":1,"prerenderedAt":1286},["ShallowReactive",2],{"navigation":3,"\u002Fconnector-development\u002Fconcepts\u002Fdata-types":1020,"\u002Fconnector-development\u002Fconcepts\u002Fdata-types-surround":1281},[4,59,188,271,449,613,802,842,1004],{"title":5,"type":6,"device":6,"path":7,"stem":8,"children":9,"page":41},"Get Started",null,"\u002Fget-started\u002F","01.get-started",[10,15,42,47,51,55],{"title":11,"path":12,"stem":13,"type":14,"device":6},"Welcome to UniteLabs","\u002Fget-started\u002Fwelcome\u002F","01.get-started\u002F00.welcome","landing",{"title":16,"type":6,"device":6,"path":17,"stem":18,"children":19,"page":41},"Setup","\u002Fget-started\u002Fsetup\u002F","01.get-started\u002F01.setup",[20,25,29,33,37],{"title":21,"path":22,"stem":23,"type":24,"device":6},"Get access","\u002Fget-started\u002Fsetup\u002Fget-access\u002F","01.get-started\u002F01.setup\u002F00.get-access","howto",{"title":26,"path":27,"stem":28,"type":24,"device":6},"GroundControl","\u002Fget-started\u002Fsetup\u002Fgroundcontrol\u002F","01.get-started\u002F01.setup\u002F10.groundcontrol",{"title":30,"path":31,"stem":32,"type":24,"device":6},"Connect to Platform","\u002Fget-started\u002Fsetup\u002Fconnect-to-platform\u002F","01.get-started\u002F01.setup\u002F20.connect-to-platform",{"title":34,"path":35,"stem":36,"type":24,"device":6},"Set up your development machine","\u002Fget-started\u002Fsetup\u002Fdeveloper-machine\u002F","01.get-started\u002F01.setup\u002F30.developer-machine",{"title":38,"path":39,"stem":40,"type":24,"device":6},"SDK installation","\u002Fget-started\u002Fsetup\u002Fsdk-installation\u002F","01.get-started\u002F01.setup\u002F40.sdk-installation",false,{"title":43,"path":44,"stem":45,"type":46,"device":6},"Control a device","\u002Fget-started\u002Fcontrol-a-device\u002F","01.get-started\u002F02.control-a-device","tutorial",{"title":48,"path":49,"stem":50,"type":46,"device":6},"Liquid handling as code","\u002Fget-started\u002Fliquid-handling-as-code\u002F","01.get-started\u002F03.liquid-handling-as-code",{"title":52,"path":53,"stem":54,"type":46,"device":6},"Automate your workflows","\u002Fget-started\u002Fautomate-your-workflows\u002F","01.get-started\u002F04.automate-your-workflows",{"title":56,"path":57,"stem":58,"type":6,"device":6},"Self-Paced Setup Guide","\u002Fget-started\u002Fself-onboarding\u002F","01.get-started\u002F90.self-onboarding",{"title":60,"type":6,"device":6,"path":61,"stem":62,"children":63,"page":41},"How-to","\u002Fhow-to\u002F","02.how-to",[64,118,163,180],{"title":65,"type":6,"device":6,"path":66,"stem":67,"children":68,"page":41},"Connectors and devices","\u002Fhow-to\u002Fintegrate\u002F","02.how-to\u002F02.integrate",[69,102],{"title":70,"type":6,"device":6,"path":71,"stem":72,"children":73,"page":41},"Connect a device","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device",[74,78,82,86,90,94,98],{"title":75,"path":76,"stem":77,"type":24,"device":6},"Connector Configuration","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fconnector-configuration\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F10.connector-configuration",{"title":79,"path":80,"stem":81,"type":24,"device":6},"With an executable","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fwith-an-executable\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F20.with-an-executable",{"title":83,"path":84,"stem":85,"type":24,"device":6},"From source","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Ffrom-source\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F30.from-source",{"title":87,"path":88,"stem":89,"type":24,"device":6},"Build your own","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fbuild-yourself\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F40.build-yourself",{"title":91,"path":92,"stem":93,"type":24,"device":6},"Headless install","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fheadless-install\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F50.headless-install",{"title":95,"path":96,"stem":97,"type":24,"device":6},"Raspberry Pi","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fraspberry-pi\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F55.raspberry-pi",{"title":99,"path":100,"stem":101,"type":24,"device":6},"Multi-device Networking","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fmultiple-devices\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F60.multiple-devices",{"title":103,"type":6,"device":6,"path":104,"stem":105,"children":106,"page":41},"Use a device","\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device",[107,110,114],{"title":26,"path":108,"stem":109,"type":24,"device":6},"\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002Fgroundcontrol\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device\u002F10.groundcontrol",{"title":111,"path":112,"stem":113,"type":24,"device":6},"Platform","\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002Fplatform\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device\u002F20.platform",{"title":115,"path":116,"stem":117,"type":24,"device":6},"UniteLabs SDK & REST API","\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002Fpython\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device\u002F30.python",{"title":119,"type":6,"device":6,"path":120,"stem":121,"children":122,"page":41},"Workflows","\u002Fhow-to\u002Fautomate\u002F","02.how-to\u002F07.automate",[123,127,131,135,139,143,147,151,155,159],{"title":124,"path":125,"stem":126,"type":24,"device":6},"Deploy a workflow","\u002Fhow-to\u002Fautomate\u002Fdeploy-a-workflow\u002F","02.how-to\u002F07.automate\u002F30.deploy-a-workflow",{"title":128,"path":129,"stem":130,"type":24,"device":6},"Run a workflow","\u002Fhow-to\u002Fautomate\u002Frun-a-workflow\u002F","02.how-to\u002F07.automate\u002F35.run-a-workflow",{"title":132,"path":133,"stem":134,"type":24,"device":6},"CI\u002FCD for workflows","\u002Fhow-to\u002Fautomate\u002Fcicd-for-workflows\u002F","02.how-to\u002F07.automate\u002F40.cicd-for-workflows",{"title":136,"path":137,"stem":138,"type":24,"device":6},"HITL basics","\u002Fhow-to\u002Fautomate\u002Fbasic-hitl\u002F","02.how-to\u002F07.automate\u002F50.basic-hitl",{"title":140,"path":141,"stem":142,"type":24,"device":6},"Slack notifications and operator confirmation","\u002Fhow-to\u002Fautomate\u002Fslack-notifications\u002F","02.how-to\u002F07.automate\u002F52.slack-notifications",{"title":144,"path":145,"stem":146,"type":24,"device":6},"Typed operator inputs","\u002Fhow-to\u002Fautomate\u002Ftyped-operator-inputs\u002F","02.how-to\u002F07.automate\u002F55.typed-operator-inputs",{"title":148,"path":149,"stem":150,"type":24,"device":6},"Pause and resume a run","\u002Fhow-to\u002Fautomate\u002Fpause-and-resume\u002F","02.how-to\u002F07.automate\u002F57.pause-and-resume",{"title":152,"path":153,"stem":154,"type":24,"device":6},"Error recovery","\u002Fhow-to\u002Fautomate\u002Fbasic-error-handling\u002F","02.how-to\u002F07.automate\u002F60.basic-error-handling",{"title":156,"path":157,"stem":158,"type":24,"device":6},"Advanced error handling","\u002Fhow-to\u002Fautomate\u002Fadvanced-error-handling\u002F","02.how-to\u002F07.automate\u002F70.advanced-error-handling",{"title":160,"path":161,"stem":162,"type":24,"device":6},"Emit lineage events","\u002Fhow-to\u002Fautomate\u002Femitting-lineage-events\u002F","02.how-to\u002F07.automate\u002F90.emitting-lineage-events",{"title":164,"type":6,"device":6,"path":165,"stem":166,"children":167,"page":41},"Data","\u002Fhow-to\u002Fobserve\u002F","02.how-to\u002F08.observe",[168,172,176],{"title":169,"path":170,"stem":171,"type":24,"device":6},"File System Connector","\u002Fhow-to\u002Fobserve\u002Ffilesystem-connector\u002F","02.how-to\u002F08.observe\u002F10.filesystem-connector",{"title":173,"path":174,"stem":175,"type":24,"device":6},"Building an ETL","\u002Fhow-to\u002Fobserve\u002Fbuilding-an-etl\u002F","02.how-to\u002F08.observe\u002F20.building-an-etl",{"title":177,"path":178,"stem":179,"type":24,"device":6},"Read lineage events","\u002Fhow-to\u002Fobserve\u002Freading-lineage-events\u002F","02.how-to\u002F08.observe\u002F30.reading-lineage-events",{"title":111,"type":6,"device":6,"path":181,"stem":182,"children":183,"page":41},"\u002Fhow-to\u002Fplatform\u002F","02.how-to\u002F09.platform",[184],{"title":185,"path":186,"stem":187,"type":24,"device":6},"UniteLabs Desktop","\u002Fhow-to\u002Fplatform\u002Funitelabs-desktop\u002F","02.how-to\u002F09.platform\u002F10.unitelabs-desktop",{"title":189,"type":6,"device":6,"path":190,"stem":191,"children":192},"Technical Reference","\u002Ftechnical-reference\u002F","03.technical-reference",[193,196,201,213,226,235,244,253,262],{"title":194,"path":190,"stem":195,"type":14,"device":6},"Overview","03.technical-reference\u002Findex",{"title":197,"path":198,"stem":199,"type":200,"device":6},"REST API","\u002Ftechnical-reference\u002Frest-api\u002F","03.technical-reference\u002F01.rest-api","reference",{"title":119,"type":6,"device":6,"path":202,"stem":203,"children":204,"page":41},"\u002Ftechnical-reference\u002Fautomate\u002F","03.technical-reference\u002F07.automate",[205,209],{"title":206,"path":207,"stem":208,"type":200,"device":6},"Workflow template","\u002Ftechnical-reference\u002Fautomate\u002Fworkflow-template\u002F","03.technical-reference\u002F07.automate\u002F05.workflow-template",{"title":210,"path":211,"stem":212,"type":200,"device":6},"Workflows REST API","\u002Ftechnical-reference\u002Fautomate\u002Fworkflows-api\u002F","03.technical-reference\u002F07.automate\u002F80.workflows-api",{"title":26,"type":6,"device":6,"path":214,"stem":215,"children":216},"\u002Ftechnical-reference\u002Fgroundcontrol\u002F","03.technical-reference\u002F10.groundcontrol\u002Findex",[217,218,222],{"title":194,"path":214,"stem":215,"type":14,"device":6},{"title":219,"path":220,"stem":221,"type":200,"device":6},"Network requirements","\u002Ftechnical-reference\u002Fgroundcontrol\u002Fnetwork-requirements\u002F","03.technical-reference\u002F10.groundcontrol\u002F10.network-requirements",{"title":223,"path":224,"stem":225,"type":200,"device":6},"Changelog","\u002Ftechnical-reference\u002Fgroundcontrol\u002Fchangelog\u002F","03.technical-reference\u002F10.groundcontrol\u002F20.changelog",{"title":227,"type":6,"device":6,"path":228,"stem":229,"children":230},"UniteLabs SDK","\u002Ftechnical-reference\u002Fpython-sdk\u002F","03.technical-reference\u002F20.python-sdk\u002Findex",[231,232],{"title":194,"path":228,"stem":229,"type":14,"device":6},{"title":223,"path":233,"stem":234,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-sdk\u002Fchangelog\u002F","03.technical-reference\u002F20.python-sdk\u002F20.changelog",{"title":236,"type":6,"device":6,"path":237,"stem":238,"children":239},"Liquid Handling SDK","\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002F","03.technical-reference\u002F30.python-liquid-handling-sdk\u002Findex",[240,241],{"title":194,"path":237,"stem":238,"type":14,"device":6},{"title":223,"path":242,"stem":243,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002Fchangelog\u002F","03.technical-reference\u002F30.python-liquid-handling-sdk\u002F20.changelog",{"title":245,"type":6,"device":6,"path":246,"stem":247,"children":248},"Labware","\u002Ftechnical-reference\u002Flabware\u002F","03.technical-reference\u002F40.labware\u002Findex",[249,250],{"title":194,"path":246,"stem":247,"type":14,"device":6},{"title":223,"path":251,"stem":252,"type":200,"device":6},"\u002Ftechnical-reference\u002Flabware\u002Fchangelog\u002F","03.technical-reference\u002F40.labware\u002F20.changelog",{"title":254,"type":6,"device":6,"path":255,"stem":256,"children":257},"Python Omnibus","\u002Ftechnical-reference\u002Fpython-omnibus\u002F","03.technical-reference\u002F50.python-omnibus\u002Findex",[258,259],{"title":194,"path":255,"stem":256,"type":14,"device":6},{"title":223,"path":260,"stem":261,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-omnibus\u002Fchangelog\u002F","03.technical-reference\u002F50.python-omnibus\u002F20.changelog",{"title":263,"type":6,"device":6,"path":264,"stem":265,"children":266},"Python CDK","\u002Ftechnical-reference\u002Fpython-cdk\u002F","03.technical-reference\u002F60.python-cdk\u002Findex",[267,268],{"title":194,"path":264,"stem":265,"type":14,"device":6},{"title":223,"path":269,"stem":270,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-cdk\u002Fchangelog\u002F","03.technical-reference\u002F60.python-cdk\u002F20.changelog",{"title":272,"type":6,"device":6,"path":273,"stem":274,"children":275,"page":41},"Concepts","\u002Fconcepts\u002F","04.concepts",[276,315,339,387,426],{"title":277,"type":6,"device":6,"path":278,"stem":279,"children":280,"page":41},"Labs as code","\u002Fconcepts\u002Flabs-as-code\u002F","04.concepts\u002F01.labs-as-code",[281,286,290],{"title":282,"path":283,"stem":284,"type":285,"device":6},"Lab as Code","\u002Fconcepts\u002Flabs-as-code\u002Fwhy-code\u002F","04.concepts\u002F01.labs-as-code\u002F00.why-code","explanation",{"title":287,"path":288,"stem":289,"type":285,"device":6},"How it works","\u002Fconcepts\u002Flabs-as-code\u002Fhow-it-works\u002F","04.concepts\u002F01.labs-as-code\u002F01.how-it-works",{"title":291,"type":6,"device":6,"path":292,"stem":293,"children":294,"page":41},"Use Cases","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases",[295,299,303,307,311],{"title":296,"path":297,"stem":298,"type":285,"device":6},"Instrument Control","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Flow-level-instrument-control\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F10.low-level-instrument-control",{"title":300,"path":301,"stem":302,"type":285,"device":6},"Multi-device Control","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fmulti-device-control\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F20.multi-device-control",{"title":304,"path":305,"stem":306,"type":285,"device":6},"Workflow Orchestration","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fworkflow-orchestration\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F30.workflow-orchestration",{"title":308,"path":309,"stem":310,"type":285,"device":6},"Custom Apps and LIMS Integration","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fcustom-apps-lims\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F40.custom-apps-lims",{"title":312,"path":313,"stem":314,"type":285,"device":6},"Scale and Fleet Management","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fscale-and-fleet\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F50.scale-and-fleet",{"title":65,"type":6,"device":6,"path":316,"stem":317,"children":318,"page":41},"\u002Fconcepts\u002Fintegrate\u002F","04.concepts\u002F02.integrate",[319,323,327,331,335],{"title":320,"path":321,"stem":322,"type":285,"device":6},"Device","\u002Fconcepts\u002Fintegrate\u002Fdevice\u002F","04.concepts\u002F02.integrate\u002F05.device",{"title":324,"path":325,"stem":326,"type":285,"device":6},"Connector","\u002Fconcepts\u002Fintegrate\u002Fconnector\u002F","04.concepts\u002F02.integrate\u002F10.connector",{"title":328,"path":329,"stem":330,"type":285,"device":6},"Module","\u002Fconcepts\u002Fintegrate\u002Fmodule\u002F","04.concepts\u002F02.integrate\u002F20.module",{"title":332,"path":333,"stem":334,"type":285,"device":6},"Action","\u002Fconcepts\u002Fintegrate\u002Faction\u002F","04.concepts\u002F02.integrate\u002F30.action",{"title":336,"path":337,"stem":338,"type":285,"device":6},"Subscription","\u002Fconcepts\u002Fintegrate\u002Fsubscription\u002F","04.concepts\u002F02.integrate\u002F40.subscription",{"title":340,"type":6,"device":6,"path":341,"stem":342,"children":343,"page":41},"Liquid handling and robots","\u002Fconcepts\u002Foperate\u002F","04.concepts\u002F03.operate",[344,348,352,356,359,363,367,371,375,379,383],{"title":345,"path":346,"stem":347,"type":285,"device":6},"Liquid Handling","\u002Fconcepts\u002Foperate\u002Fliquid-handling\u002F","04.concepts\u002F03.operate\u002F10.liquid-handling",{"title":349,"path":350,"stem":351,"type":285,"device":6},"Modules","\u002Fconcepts\u002Foperate\u002Fmodules\u002F","04.concepts\u002F03.operate\u002F20.modules",{"title":353,"path":354,"stem":355,"type":285,"device":6},"Deck","\u002Fconcepts\u002Foperate\u002Fdeck\u002F","04.concepts\u002F03.operate\u002F30.deck",{"title":245,"path":357,"stem":358,"type":285,"device":6},"\u002Fconcepts\u002Foperate\u002Flabware\u002F","04.concepts\u002F03.operate\u002F40.labware",{"title":360,"path":361,"stem":362,"type":285,"device":6},"Liquids","\u002Fconcepts\u002Foperate\u002Fliquids\u002F","04.concepts\u002F03.operate\u002F50.liquids",{"title":364,"path":365,"stem":366,"type":285,"device":6},"Liquid Classes","\u002Fconcepts\u002Foperate\u002Fliquid-classes\u002F","04.concepts\u002F03.operate\u002F60.liquid-classes",{"title":368,"path":369,"stem":370,"type":285,"device":6},"Parameter Sets","\u002Fconcepts\u002Foperate\u002Fparameter-sets\u002F","04.concepts\u002F03.operate\u002F65.parameter-sets",{"title":372,"path":373,"stem":374,"type":285,"device":6},"Tips and Tip Tracking","\u002Fconcepts\u002Foperate\u002Ftips\u002F","04.concepts\u002F03.operate\u002F70.tips",{"title":376,"path":377,"stem":378,"type":285,"device":6},"Simulation","\u002Fconcepts\u002Foperate\u002Fsimulation\u002F","04.concepts\u002F03.operate\u002F80.simulation",{"title":380,"path":381,"stem":382,"type":285,"device":6},"Error Handling","\u002Fconcepts\u002Foperate\u002Ferror-handling\u002F","04.concepts\u002F03.operate\u002F90.error-handling",{"title":384,"path":385,"stem":386,"type":285,"device":6},"Robot Arms","\u002Fconcepts\u002Foperate\u002Frobot-arms\u002F","04.concepts\u002F03.operate\u002F95.robot-arms",{"title":119,"type":6,"device":6,"path":388,"stem":389,"children":390,"page":41},"\u002Fconcepts\u002Fautomate\u002F","04.concepts\u002F07.automate",[391,395,399,403,407,411,415,419,423],{"title":392,"path":393,"stem":394,"type":285,"device":6},"Workflow","\u002Fconcepts\u002Fautomate\u002Fworkflow\u002F","04.concepts\u002F07.automate\u002F10.workflow",{"title":396,"path":397,"stem":398,"type":285,"device":6},"Phase","\u002Fconcepts\u002Fautomate\u002Fphase\u002F","04.concepts\u002F07.automate\u002F20.phase",{"title":400,"path":401,"stem":402,"type":285,"device":6},"Step","\u002Fconcepts\u002Fautomate\u002Fstep\u002F","04.concepts\u002F07.automate\u002F30.step",{"title":404,"path":405,"stem":406,"type":285,"device":6},"Runs","\u002Fconcepts\u002Fautomate\u002Fruns\u002F","04.concepts\u002F07.automate\u002F40.runs",{"title":408,"path":409,"stem":410,"type":285,"device":6},"Input","\u002Fconcepts\u002Fautomate\u002Finput\u002F","04.concepts\u002F07.automate\u002F50.input",{"title":412,"path":413,"stem":414,"type":285,"device":6},"Artifacts","\u002Fconcepts\u002Fautomate\u002Fartifacts\u002F","04.concepts\u002F07.automate\u002F60.artifacts",{"title":416,"path":417,"stem":418,"type":285,"device":6},"Logs","\u002Fconcepts\u002Fautomate\u002Flogs\u002F","04.concepts\u002F07.automate\u002F70.logs",{"title":420,"path":421,"stem":422,"type":285,"device":6},"Human in the Loop","\u002Fconcepts\u002Fautomate\u002Fhuman-in-the-loop\u002F","04.concepts\u002F07.automate\u002F80.human-in-the-loop",{"title":380,"path":424,"stem":425,"type":285,"device":6},"\u002Fconcepts\u002Fautomate\u002Ferror-handling\u002F","04.concepts\u002F07.automate\u002F90.error-handling",{"title":164,"type":6,"device":6,"path":427,"stem":428,"children":429,"page":41},"\u002Fconcepts\u002Fobserve\u002F","04.concepts\u002F08.observe",[430,433,437,441,445],{"title":194,"path":431,"stem":432,"type":14,"device":6},"\u002Fconcepts\u002Fobserve\u002Foverview\u002F","04.concepts\u002F08.observe\u002F10.overview",{"title":434,"path":435,"stem":436,"type":285,"device":6},"Object Storage","\u002Fconcepts\u002Fobserve\u002Fstorage\u002F","04.concepts\u002F08.observe\u002F10.storage",{"title":438,"path":439,"stem":440,"type":285,"device":6},"Secrets","\u002Fconcepts\u002Fobserve\u002Fsecrets\u002F","04.concepts\u002F08.observe\u002F20.secrets",{"title":442,"path":443,"stem":444,"type":285,"device":6},"Data sources","\u002Fconcepts\u002Fobserve\u002Fdata-sources\u002F","04.concepts\u002F08.observe\u002F30.data-sources",{"title":446,"path":447,"stem":448,"type":285,"device":6},"Data lineage","\u002Fconcepts\u002Fobserve\u002Fdata-lineage\u002F","04.concepts\u002F08.observe\u002F40.data-lineage",{"title":450,"type":6,"device":6,"path":451,"stem":452,"children":453,"page":41},"Devices","\u002Fdevices\u002F","05.devices",[454,457,505,518,534,571,595],{"title":194,"path":455,"stem":456,"type":14,"device":6},"\u002Fdevices\u002Foverview\u002F","05.devices\u002F00.overview",{"title":458,"path":459,"page":41,"children":460},"Heater-shakers","\u002Fdevices\u002Fheater-shakers\u002F",[461,482,492],{"title":462,"path":463,"stem":464,"type":200,"device":465},"QInstruments BioShake","\u002Fdevices\u002Fqinstruments-bioshake\u002F","05.devices\u002F10.qinstruments-bioshake",{"slug":466,"vendor":467,"category":468,"connector":466,"package":469,"models":470,"communication":477,"vendor_software":6,"os":478},"qinstruments-bioshake","QInstruments","Plate Shakers & Temperature Control","unitelabs-qinstruments-bioshake",[471,472,473,474,475,476],"BioShake 3000 \u002F 3000 elm \u002F 3000 elm DWP","BioShake 3000-T \u002F 3000-T elm","BioShake 5000 elm","BioShake D30 \u002F D30 elm \u002F D30-T \u002F D30-T elm","BioShake Q1 \u002F Q1 (1.2 mm) \u002F Q1 (3.0 mm) \u002F Q2","HeatPlate","serial (RS-232 over USB)",[479,480,481],"windows","linux","macos",{"title":483,"path":484,"stem":485,"type":200,"device":486},"QInstruments ColdPlate","\u002Fdevices\u002Fqinstruments-coldplate\u002F","05.devices\u002F20.qinstruments-coldplate",{"slug":487,"vendor":467,"category":468,"connector":466,"package":469,"models":488,"communication":477,"vendor_software":6,"os":491},"qinstruments-coldplate",[489,490],"ColdPlate","ColdPlate slim",[479,480,481],{"title":493,"path":494,"stem":495,"type":200,"device":496},"Inheco Thermoshake","\u002Fdevices\u002Finheco-thermoshake\u002F","05.devices\u002F30.inheco-thermoshake",{"slug":497,"vendor":498,"category":468,"connector":499,"models":500},"inheco-thermoshake","Inheco","inheco-tec-controller",[501,502,503,504],"Thermoshake AC","Thermoshake AC LC","Thermoshake Classic","Thermoshake RM",{"title":506,"path":507,"page":41,"children":508},"Incubation","\u002Fdevices\u002Fincubation\u002F",[509],{"title":510,"path":511,"stem":512,"type":200,"device":513},"Inheco SCILA","\u002Fdevices\u002Finheco-scila\u002F","05.devices\u002F40.inheco-scila",{"slug":514,"vendor":498,"category":506,"connector":514,"models":515},"inheco-scila",[516,517],"SCILA","SCILA MIX 2-gas mixing device",{"title":519,"path":520,"page":41,"children":521},"Thermal cyclers","\u002Fdevices\u002Fthermal-cyclers\u002F",[522],{"title":523,"path":524,"stem":525,"type":200,"device":526},"Inheco ODTC","\u002Fdevices\u002Finheco-odtc\u002F","05.devices\u002F50.inheco-odtc",{"slug":527,"vendor":498,"category":528,"connector":527,"models":529},"inheco-odtc","Thermal Cycler",[530,531,532,533],"ODTC 96","ODTC 96XL","ODTC 384","ODTC 384XL",{"title":535,"path":536,"page":41,"children":537},"Readers","\u002Fdevices\u002Freaders\u002F",[538,547,556],{"title":539,"path":540,"stem":541,"type":200,"device":542},"Agilent Biotek Gen5","\u002Fdevices\u002Fbiotek-gen5\u002F","05.devices\u002F60.biotek-gen5",{"slug":543,"vendor":544,"category":545,"connector":546},"biotek-gen5","Agilent","Readers & Imagers","gen5",{"title":548,"path":549,"stem":550,"type":200,"device":551},"Biotek Synergy H1","\u002Fdevices\u002Fbiotek-synergy-h1\u002F","05.devices\u002F70.biotek-synergy-h1",{"slug":552,"vendor":544,"category":545,"connector":553,"models":554},"biotek-synergy-h1","agilent-synergy-h1",[555],"BioTek Synergy H1",{"title":557,"path":558,"stem":559,"type":200,"device":560},"Tecan Infinite 200","\u002Fdevices\u002Ftecan-infinite-200\u002F","05.devices\u002F75.tecan-infinite-200",{"slug":561,"vendor":562,"category":545,"connector":561,"package":563,"models":564,"communication":568,"vendor_software":569,"os":570},"tecan-infinite-200","Tecan","unitelabs-tecan-infinite-200",[565,566,567],"Infinite F200","Infinite M200","Infinite M200 Pro","USB","i-control on Windows only, for its USB driver",[479,480,481],{"title":572,"path":573,"page":41,"children":574},"Tilt & turn","\u002Fdevices\u002Ftilt-and-turn\u002F",[575,585],{"title":576,"path":577,"stem":578,"type":200,"device":579},"QInstruments TiltStation","\u002Fdevices\u002Fqinstruments-tiltstation\u002F","05.devices\u002F80.qinstruments-tiltstation",{"slug":580,"vendor":467,"category":581,"connector":466,"package":469,"models":582,"communication":477,"vendor_software":6,"os":584},"qinstruments-tiltstation","Plate Tilting",[583],"TiltStation",[479,480,481],{"title":586,"path":587,"stem":588,"type":200,"device":589},"QInstruments TurnStation","\u002Fdevices\u002Fqinstruments-turnstation\u002F","05.devices\u002F90.qinstruments-turnstation",{"slug":590,"vendor":467,"category":591,"connector":466,"package":469,"models":592,"communication":477,"vendor_software":6,"os":594},"qinstruments-turnstation","Plate Rotating",[593],"TurnStation",[479,480,481],{"title":596,"path":597,"page":41,"children":598},"Robots","\u002Fdevices\u002Frobots\u002F",[599],{"title":600,"path":601,"stem":602,"type":200,"device":603},"Brooks PreciseFlex 400","\u002Fdevices\u002Fbrooks-preciseflex-400\u002F","05.devices\u002F95.brooks-preciseflex-400",{"slug":604,"vendor":605,"category":596,"connector":604,"package":606,"models":607,"communication":611,"vendor_software":6,"os":612},"brooks-preciseflex-400","Brooks Automation","unitelabs-brooks-preciseflex-400",[608,609,610],"PreciseFlex 400, standard reach, 400 \u002F 750 \u002F 1160 mm Z","PreciseFlex 400, extended reach (XR), 400 \u002F 750 \u002F 1160 mm Z","Either on a PreciseFlex linear rail (1.0, 1.5 or 2.0 m)","Ethernet (TCP)",[479,480,481],{"title":614,"type":6,"device":6,"path":615,"stem":616,"children":617,"page":41},"Liquid Handling and Robots","\u002Fliquid-handling-and-robots\u002F","06.liquid-handling-and-robots",[618,621,633,657,660,705,730,747,764,786],{"title":194,"path":619,"stem":620,"type":14,"device":6},"\u002Fliquid-handling-and-robots\u002Foverview\u002F","06.liquid-handling-and-robots\u002F00.overview",{"title":353,"type":6,"device":6,"path":622,"stem":623,"children":624,"page":41},"\u002Fliquid-handling-and-robots\u002Fdeck\u002F","06.liquid-handling-and-robots\u002F10.deck",[625,629],{"title":626,"path":627,"stem":628,"type":24,"device":6},"Building a Deck","\u002Fliquid-handling-and-robots\u002Fdeck\u002Fbuilding-a-deck\u002F","06.liquid-handling-and-robots\u002F10.deck\u002F10.building-a-deck",{"title":630,"path":631,"stem":632,"type":24,"device":6},"Save\u002FLoad a Deck","\u002Fliquid-handling-and-robots\u002Fdeck\u002Fsave-load-deck\u002F","06.liquid-handling-and-robots\u002F10.deck\u002F20.save-load-deck",{"title":634,"type":6,"device":6,"path":635,"stem":636,"children":637,"page":41},"Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting",[638,642,646,650,653],{"title":639,"path":640,"stem":641,"type":24,"device":6},"Basic Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fbasic-pipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F10.basic-pipetting",{"title":643,"path":644,"stem":645,"type":24,"device":6},"Advanced Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fadvanced-pipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F20.advanced-pipetting",{"title":647,"path":648,"stem":649,"type":24,"device":6},"Tip Handling","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Ftip-handling\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F30.tip-handling",{"title":364,"path":651,"stem":652,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F40.liquid-classes",{"title":654,"path":655,"stem":656,"type":24,"device":6},"Labware Transport","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Flabware-transport\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F50.labware-transport",{"title":376,"path":658,"stem":659,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fsimulation\u002F","06.liquid-handling-and-robots\u002F30.simulation",{"title":661,"type":6,"device":6,"path":662,"stem":663,"children":664,"page":41},"Hamilton STAR","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star",[665,669,673,677,681,685,689,693,697,701],{"title":666,"path":667,"stem":668,"type":24,"device":6},"Positioning & Movement","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fpositioning\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F10.positioning",{"title":670,"path":671,"stem":672,"type":24,"device":6},"Gripper Module","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcore-gripper\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F20.core-gripper",{"title":674,"path":675,"stem":676,"type":24,"device":6},"iSWAP Module","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fiswap\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F30.iswap",{"title":678,"path":679,"stem":680,"type":24,"device":6},"Using TADM","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Ftadm\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F40.tadm",{"title":682,"path":683,"stem":684,"type":24,"device":6},"Autoload Module","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fautoload\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F50.autoload",{"title":686,"path":687,"stem":688,"type":24,"device":6},"Waste Block","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fwaste-block\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F60.waste-block",{"title":690,"path":691,"stem":692,"type":24,"device":6},"Complex Mixing","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcomplex-mixing\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F66.complex-mixing",{"title":694,"path":695,"stem":696,"type":24,"device":6},"Teaching Gripper Paddle Positions","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fgripper-positions\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F70.gripper-positions",{"title":698,"path":699,"stem":700,"type":24,"device":6},"Training a Custom Deck Position With the iSWAP","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcustom-deck-position\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F75.custom-deck-position",{"title":702,"path":703,"stem":704,"type":200,"device":6},"Observable Commands","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fobservable-commands\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F80.observable-commands",{"title":706,"type":6,"device":6,"path":707,"stem":708,"children":709,"page":41},"Hamilton Vantage","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage",[710,714,718,722,726],{"title":711,"path":712,"stem":713,"type":24,"device":6},"Waste Configuration","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fwaste-configuration\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F05.waste-configuration",{"title":715,"path":716,"stem":717,"type":24,"device":6},"Covers and Lights","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fcovers-and-lights\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F10.covers-and-lights",{"title":719,"path":720,"stem":721,"type":24,"device":6},"IDL Module","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fidl\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F20.idl",{"title":723,"path":724,"stem":725,"type":24,"device":6},"IPG Module","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fipg\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F30.ipg",{"title":727,"path":728,"stem":729,"type":24,"device":6},"XL Pipettes","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fxl-channels\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F40.xl-channels",{"title":731,"type":6,"device":6,"path":732,"stem":733,"children":734,"page":41},"Agilent Bravo","\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo",[735,738,741,744],{"title":647,"path":736,"stem":737,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Ftip-handling\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F10.tip-handling",{"title":639,"path":739,"stem":740,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Fbasic-pipetting\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F20.basic-pipetting",{"title":364,"path":742,"stem":743,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F25.liquid-classes",{"title":670,"path":745,"stem":746,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Fusing-the-gripper\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F30.using-the-gripper",{"title":748,"type":6,"device":6,"path":749,"stem":750,"children":751,"page":41},"Tecan FluentControl","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol",[752,756,760],{"title":753,"path":754,"stem":755,"type":24,"device":6},"Connect & Run a Method","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002Fconnect-and-run\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol\u002F10.connect-and-run",{"title":757,"path":758,"stem":759,"type":24,"device":6},"Sending XML Commands","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002Fsending-xml-commands\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol\u002F20.sending-xml-commands",{"title":761,"path":762,"stem":763,"type":24,"device":6},"Full Workflow Example","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002Ffull-workflow-example\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol\u002F30.full-workflow-example",{"title":765,"type":6,"device":6,"path":766,"stem":767,"children":768,"page":41},"Tecan Freedom EVO","\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo",[769,773,776,779,783],{"title":770,"path":771,"stem":772,"type":24,"device":6},"Deck & Carriers","\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fdeck-and-carriers\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F10.deck-and-carriers",{"title":647,"path":774,"stem":775,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Ftip-handling\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F20.tip-handling",{"title":639,"path":777,"stem":778,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fbasic-pipetting\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F30.basic-pipetting",{"title":780,"path":781,"stem":782,"type":24,"device":6},"Using the Gripper (RoMa)","\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fusing-the-gripper\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F40.using-the-gripper",{"title":364,"path":784,"stem":785,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F50.liquid-classes",{"title":600,"type":6,"device":6,"path":787,"stem":788,"children":789,"page":41},"\u002Fliquid-handling-and-robots\u002Fbrooks-preciseflex-400\u002F","06.liquid-handling-and-robots\u002F46.brooks-preciseflex-400",[790,794,798],{"title":791,"path":792,"stem":793,"type":24,"device":6},"Teach Positions","\u002Fliquid-handling-and-robots\u002Fbrooks-preciseflex-400\u002Fteach-positions\u002F","06.liquid-handling-and-robots\u002F46.brooks-preciseflex-400\u002F10.teach-positions",{"title":795,"path":796,"stem":797,"type":24,"device":6},"Move a Plate","\u002Fliquid-handling-and-robots\u002Fbrooks-preciseflex-400\u002Fmove-a-plate\u002F","06.liquid-handling-and-robots\u002F46.brooks-preciseflex-400\u002F20.move-a-plate",{"title":799,"path":800,"stem":801,"type":24,"device":6},"Recover from a Stop","\u002Fliquid-handling-and-robots\u002Fbrooks-preciseflex-400\u002Frecover-from-a-stop\u002F","06.liquid-handling-and-robots\u002F46.brooks-preciseflex-400\u002F30.recover-from-a-stop",{"title":245,"type":6,"device":6,"path":803,"stem":804,"children":805,"page":41},"\u002Flabware\u002F","07.labware",[806,809,813,817,821,825,829,833],{"title":194,"path":807,"stem":808,"type":14,"device":6},"\u002Flabware\u002Foverview\u002F","07.labware\u002F00.overview",{"title":810,"path":811,"stem":812,"type":200,"device":6},"Standard Labware","\u002Flabware\u002Fstandard-labware\u002F","07.labware\u002F10.standard-labware",{"title":814,"path":815,"stem":816,"type":200,"device":6},"Plates","\u002Flabware\u002Fplates\u002F","07.labware\u002F20.plates",{"title":818,"path":819,"stem":820,"type":200,"device":6},"Tips and Tip Racks","\u002Flabware\u002Ftips-and-racks\u002F","07.labware\u002F30.tips-and-racks",{"title":822,"path":823,"stem":824,"type":200,"device":6},"Tubes and Tube Racks","\u002Flabware\u002Ftubes-and-tube-racks\u002F","07.labware\u002F40.tubes-and-tube-racks",{"title":826,"path":827,"stem":828,"type":200,"device":6},"Troughs","\u002Flabware\u002Ftroughs\u002F","07.labware\u002F50.troughs",{"title":830,"path":831,"stem":832,"type":200,"device":6},"Carriers and Adapters","\u002Flabware\u002Fcarriers-and-adapters\u002F","07.labware\u002F60.carriers-and-adapters",{"title":834,"type":6,"device":6,"path":835,"stem":836,"children":837,"page":41},"Hamilton","\u002Flabware\u002Fhamilton\u002F","07.labware\u002F70.hamilton",[838],{"title":839,"path":840,"stem":841,"type":24,"device":6},"Hamilton MFX Carriers","\u002Flabware\u002Fhamilton\u002Fmfx-carriers\u002F","07.labware\u002F70.hamilton\u002F10.mfx-carriers",{"title":843,"type":6,"device":6,"path":844,"stem":845,"children":846},"Connector Development (CDK)","\u002Fconnector-development\u002F","20.connector-development",[847,849,873,902,926,982],{"title":194,"path":844,"stem":848,"type":14,"device":6},"20.connector-development\u002Findex",{"title":850,"path":851,"stem":852,"children":853,"page":41},"Getting Started","\u002Fconnector-development\u002Fgetting-started\u002F","20.connector-development\u002F10.getting-started",[854,857,861,865,869],{"title":194,"path":855,"stem":856,"type":285,"device":6},"\u002Fconnector-development\u002Fgetting-started\u002Foverview\u002F","20.connector-development\u002F10.getting-started\u002F10.overview",{"title":858,"path":859,"stem":860,"type":24,"device":6},"What's new","\u002Fconnector-development\u002Fgetting-started\u002Fwhats-new\u002F","20.connector-development\u002F10.getting-started\u002F20.whats-new",{"title":862,"path":863,"stem":864,"type":24,"device":6},"Installation","\u002Fconnector-development\u002Fgetting-started\u002Finstallation\u002F","20.connector-development\u002F10.getting-started\u002F30.installation",{"title":866,"path":867,"stem":868,"type":24,"device":6},"Python Environment and Project Management","\u002Fconnector-development\u002Fgetting-started\u002Fpython-environments\u002F","20.connector-development\u002F10.getting-started\u002F35.python-environments",{"title":870,"path":871,"stem":872,"type":24,"device":6},"Contributing","\u002Fconnector-development\u002Fgetting-started\u002Fcontributing\u002F","20.connector-development\u002F10.getting-started\u002F40.contributing",{"title":874,"path":875,"stem":876,"children":877,"page":41},"Tutorial","\u002Fconnector-development\u002Ftutorial\u002F","20.connector-development\u002F20.tutorial",[878,882,886,890,894,898],{"title":879,"path":880,"stem":881,"type":46,"device":6},"Walkthrough","\u002Fconnector-development\u002Ftutorial\u002Fwalkthrough\u002F","20.connector-development\u002F20.tutorial\u002F00.walkthrough",{"title":883,"path":884,"stem":885,"type":46,"device":6},"SiLA Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fsila-endpoints\u002F","20.connector-development\u002F20.tutorial\u002F15.sila-endpoints",{"title":887,"path":888,"stem":889,"type":46,"device":6},"Data Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fdata-endpoints\u002F","20.connector-development\u002F20.tutorial\u002F20.data-endpoints",{"title":891,"path":892,"stem":893,"type":46,"device":6},"Controls","\u002Fconnector-development\u002Ftutorial\u002Fcontrols\u002F","20.connector-development\u002F20.tutorial\u002F30.controls",{"title":895,"path":896,"stem":897,"type":46,"device":6},"SiLA Data Types","\u002Fconnector-development\u002Ftutorial\u002Fdata-types\u002F","20.connector-development\u002F20.tutorial\u002F40.data-types",{"title":899,"path":900,"stem":901,"type":46,"device":6},"Hardware Communication","\u002Fconnector-development\u002Ftutorial\u002Fhardware-communication\u002F","20.connector-development\u002F20.tutorial\u002F90.hardware-communication",{"title":272,"type":6,"device":6,"path":903,"stem":904,"children":905,"page":41},"\u002Fconnector-development\u002Fconcepts\u002F","20.connector-development\u002F30.concepts",[906,910,914,918,922],{"title":907,"path":908,"stem":909,"type":285,"device":6},"SiLA","\u002Fconnector-development\u002Fconcepts\u002Fsila\u002F","20.connector-development\u002F30.concepts\u002F00.sila",{"title":911,"path":912,"stem":913,"type":6,"device":6},"Designing Features","\u002Fconnector-development\u002Fconcepts\u002Ffeatures\u002F","20.connector-development\u002F30.concepts\u002F10.features",{"title":915,"path":916,"stem":917,"type":6,"device":6},"Designing Endpoints","\u002Fconnector-development\u002Fconcepts\u002Fsila-endpoints\u002F","20.connector-development\u002F30.concepts\u002F15.sila-endpoints",{"title":919,"path":920,"stem":921,"type":6,"device":6},"Designing Data Types","\u002Fconnector-development\u002Fconcepts\u002Fdata-types\u002F","20.connector-development\u002F30.concepts\u002F20.data-types",{"title":923,"path":924,"stem":925,"type":6,"device":6},"Connector Architecture","\u002Fconnector-development\u002Fconcepts\u002Farchitecture\u002F","20.connector-development\u002F30.concepts\u002F30.architecture",{"title":927,"path":928,"stem":929,"children":930,"page":41},"Guides","\u002Fconnector-development\u002Fguides\u002F","20.connector-development\u002F40.guides",[931,935,939,943,947,951,955,959,963,967,971,974,978],{"title":932,"path":933,"stem":934,"type":6,"device":6},"Project Structure","\u002Fconnector-development\u002Fguides\u002Fproject-structure\u002F","20.connector-development\u002F40.guides\u002F10.project-structure",{"title":936,"path":937,"stem":938,"type":24,"device":6},"Configuration","\u002Fconnector-development\u002Fguides\u002Fconfiguration\u002F","20.connector-development\u002F40.guides\u002F20.configuration",{"title":940,"path":941,"stem":942,"type":24,"device":6},"Logging","\u002Fconnector-development\u002Fguides\u002Flogging\u002F","20.connector-development\u002F40.guides\u002F21.logging",{"title":944,"path":945,"stem":946,"type":24,"device":6},"Deployment","\u002Fconnector-development\u002Fguides\u002Fdeployment\u002F","20.connector-development\u002F40.guides\u002F30.deployment",{"title":948,"path":949,"stem":950,"type":24,"device":6},"Security","\u002Fconnector-development\u002Fguides\u002Fsecurity\u002F","20.connector-development\u002F40.guides\u002F40.security",{"title":952,"path":953,"stem":954,"type":24,"device":6},"Subscriptions","\u002Fconnector-development\u002Fguides\u002Fsubscriptions\u002F","20.connector-development\u002F40.guides\u002F45.subscriptions",{"title":956,"path":957,"stem":958,"type":24,"device":6},"Execution Modes","\u002Fconnector-development\u002Fguides\u002Fexecution-modes\u002F","20.connector-development\u002F40.guides\u002F46.execution-modes",{"title":960,"path":961,"stem":962,"type":6,"device":6},"Constraints and Units","\u002Fconnector-development\u002Fguides\u002Fconstraints-and-units\u002F","20.connector-development\u002F40.guides\u002F47.constraints-and-units",{"title":964,"path":965,"stem":966,"type":6,"device":6},"Device Variants","\u002Fconnector-development\u002Fguides\u002Fdevice-variants\u002F","20.connector-development\u002F40.guides\u002F48.device-variants",{"title":968,"path":969,"stem":970,"type":6,"device":6},"Repeated Modules","\u002Fconnector-development\u002Fguides\u002Frepeated-modules\u002F","20.connector-development\u002F40.guides\u002F49.repeated-modules",{"title":380,"path":972,"stem":973,"type":24,"device":6},"\u002Fconnector-development\u002Fguides\u002Ferror-handling\u002F","20.connector-development\u002F40.guides\u002F50.error-handling",{"title":975,"path":976,"stem":977,"type":24,"device":6},"Serial Troubleshooting","\u002Fconnector-development\u002Fguides\u002Fserial-troubleshooting\u002F","20.connector-development\u002F40.guides\u002F70.serial-troubleshooting",{"title":979,"path":980,"stem":981,"type":6,"device":6},"Testing","\u002Fconnector-development\u002Fguides\u002Ftesting\u002F","20.connector-development\u002F40.guides\u002F80.testing",{"title":983,"type":6,"device":6,"path":984,"stem":985,"children":986},"References","\u002Fconnector-development\u002Freference\u002F","20.connector-development\u002F50.reference\u002Findex",[987,988,992,996,1000],{"title":983,"path":984,"stem":985,"type":6,"device":6},{"title":989,"path":990,"stem":991,"type":6,"device":6},"Naming Conventions","\u002Fconnector-development\u002Freference\u002Fnaming-conventions\u002F","20.connector-development\u002F50.reference\u002F10.naming-conventions",{"title":993,"path":994,"stem":995,"type":6,"device":6},"Docstring Format","\u002Fconnector-development\u002Freference\u002Fdocstrings\u002F","20.connector-development\u002F50.reference\u002F20.docstrings",{"title":997,"path":998,"stem":999,"type":6,"device":6},"Feature Metadata","\u002Fconnector-development\u002Freference\u002Ffeature-metadata\u002F","20.connector-development\u002F50.reference\u002F30.feature-metadata",{"title":1001,"path":1002,"stem":1003,"type":6,"device":6},"Review Checklist","\u002Fconnector-development\u002Freference\u002Freview-checklist\u002F","20.connector-development\u002F50.reference\u002F90.review-checklist",{"title":1005,"type":6,"device":6,"path":1006,"stem":1007,"children":1008},"Blog","\u002Fblog\u002F","30.blog",[1009,1012],{"title":1010,"path":1006,"stem":1011,"type":6,"device":6},"UniteLabs Blog","30.blog\u002Findex",{"title":1013,"path":1014,"stem":1015,"children":1016,"page":41},"Python","\u002Fblog\u002Fpython\u002F","30.blog\u002F01.python",[1017],{"title":866,"path":1018,"stem":1019,"type":24,"device":6},"\u002Fblog\u002Fpython\u002Fpython-environment-management\u002F","30.blog\u002F01.python\u002F10.python-environment-management",{"id":1021,"title":919,"body":1022,"description":1274,"device":6,"extension":1275,"links":6,"meta":1276,"navigation":1277,"path":1278,"seo":1279,"stem":921,"type":6,"__hash__":1280},"docs\u002F20.connector-development\u002F30.concepts\u002F20.data-types.md",{"type":1023,"value":1024,"toc":1266},"minimark",[1025,1029,1040,1045,1048,1051,1091,1095,1098,1112,1115,1119,1130,1199,1203,1213,1226,1230,1239,1245,1255,1259,1262],[1026,1027,1028],"p",{},"The types on a connector's signatures are the contract a client relies on. A well-typed endpoint tells the client what a value means, what range it can take, and what unit it is in, without reading any prose.",[1026,1030,1031,1032,1036,1037,1039],{},"For how to declare the types themselves, see the ",[1033,1034,1035],"a",{"href":896},"SiLA Data Types tutorial",". For how to add constraints and units, see ",[1033,1038,960],{"href":961},".",[1041,1042,1044],"h2",{"id":1043},"constrain-every-value","Constrain every value",[1026,1046,1047],{},"Add constraints wherever they apply, to return values as well as parameters, and base them on what the device actually accepts and reports.",[1026,1049,1050],{},"There are two kinds:",[1052,1053,1054,1078],"ul",{},[1055,1056,1057,1061,1062,1066,1067,1066,1070,1073,1074,1077],"li",{},[1058,1059,1060],"strong",{},"Validation constraints",", such as ",[1063,1064,1065],"code",{},"MinimalInclusive",", ",[1063,1068,1069],{},"MaximalInclusive",[1063,1071,1072],{},"Set",", and ",[1063,1075,1076],{},"MinimalLength",", reject invalid input before the command runs.",[1055,1079,1080,1061,1083,1086,1087,1090],{},[1058,1081,1082],{},"Informational constraints",[1063,1084,1085],{},"Unit"," and ",[1063,1088,1089],{},"ContentType",", tell the client what a value means without validating anything.",[1041,1092,1094],{"id":1093},"structured-data","Structured data",[1026,1096,1097],{},"When a response bundles several related values, define a dataclass. A loose tuple or a formatted string makes the client parse your output.",[1026,1099,1100,1101,1104,1105,1107,1108,1111],{},"Don't pass raw XML or JSON as a string. If the payload is small and has a structure, model it as a dataclass. If it has to stay serialized, send it as ",[1063,1102,1103],{},"bytes"," with a ",[1063,1106,1089],{}," constraint, and a ",[1063,1109,1110],{},"Schema"," constraint when a schema exists.",[1026,1113,1114],{},"Lists can't be nested in SiLA: a list holds basic types, structures, constrained types, or custom types, never another list. Wrap the inner list in a structure.",[1041,1116,1118],{"id":1117},"status-values","Status values",[1026,1120,1121,1122,1125,1126,1129],{},"Use an ",[1063,1123,1124],{},"Enum"," for a status or state, not an integer or a bare string. An integer forces the client to look up what ",[1063,1127,1128],{},"3"," means; an enum member carries its meaning in its name. The CDK converts enums into constrained strings based on the member names.",[1131,1132,1137],"pre",{"className":1133,"code":1134,"language":1135,"meta":1136,"style":1136},"language-python shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-default","class DeviceStatus(enum.Enum):\n    IDLE = enum.auto()\n    RUNNING = enum.auto()\n    ERROR = enum.auto()\n","python","",[1063,1138,1139,1167,1179,1189],{"__ignoreMap":1136},[1140,1141,1144,1148,1152,1156,1160,1162,1164],"span",{"class":1142,"line":1143},"line",1,[1140,1145,1147],{"class":1146},"sxkbv","class",[1140,1149,1151],{"class":1150},"sNqAu"," DeviceStatus",[1140,1153,1155],{"class":1154},"sc-9e","(",[1140,1157,1159],{"class":1158},"sOiAX","enum",[1140,1161,1039],{"class":1154},[1140,1163,1124],{"class":1158},[1140,1165,1166],{"class":1154},"):\n",[1140,1168,1170,1173,1176],{"class":1142,"line":1169},2,[1140,1171,1172],{"class":1158},"    IDLE",[1140,1174,1175],{"class":1146}," =",[1140,1177,1178],{"class":1154}," enum.auto()\n",[1140,1180,1182,1185,1187],{"class":1142,"line":1181},3,[1140,1183,1184],{"class":1158},"    RUNNING",[1140,1186,1175],{"class":1146},[1140,1188,1178],{"class":1154},[1140,1190,1192,1195,1197],{"class":1142,"line":1191},4,[1140,1193,1194],{"class":1158},"    ERROR",[1140,1196,1175],{"class":1146},[1140,1198,1178],{"class":1154},[1041,1200,1202],{"id":1201},"binary-data","Binary data",[1026,1204,1205,1206,1208,1209,1212],{},"Use ",[1063,1207,1103],{},", not ",[1063,1210,1211],{},"str",", for raw payloads: file contents, images, or any data without a fixed text encoding. A SiLA string is limited to 2²¹ characters (about 2 MB) and assumes an encoding that may not match the data.",[1026,1214,1215,1216,1218,1219,1222,1223,1039],{},"When the binary format is known, say so with a ",[1063,1217,1089],{}," constraint, such as ",[1063,1220,1221],{},"image\u002Fpng"," or ",[1063,1224,1225],{},"application\u002Fpdf",[1041,1227,1229],{"id":1228},"units","Units",[1026,1231,1232,1235,1236,1238],{},[1058,1233,1234],{},"Expose the unit the device uses."," If the device reports Kelvin, annotate the interface with Kelvin rather than subtracting 273.15 and exposing Celsius. A silent conversion hides a transformation that no client can see or verify, and it becomes a maintenance trap if it is ever wrong. The ",[1063,1237,1085],{}," constraint already tells the client exactly what it is getting.",[1026,1240,1241,1244],{},[1058,1242,1243],{},"Fractional units have two cases."," Some devices genuinely operate in a fractional unit, and their documentation defines the resolution that way, such as 1\u002F10 mm. Expose that as-is, with the scaling documented or a custom unit label. Other devices only use integers because their firmware lacks float support. In that case, convert on the connector side and expose the standard unit. Either way, document the choice.",[1026,1246,1247,1248,1208,1251,1254],{},"Units never go in identifiers (",[1063,1249,1250],{},"timeout",[1063,1252,1253],{},"timeout_ms",") or docstrings. They belong on the signature, where the client can read them.",[1041,1256,1258],{"id":1257},"coordinate-systems","Coordinate systems",[1026,1260,1261],{},"On a liquid handler, report and accept positions in a coordinate system whose origin is the bottom of the tip. Every liquid handler UniteLabs supports uses this origin, so a client moving between two of them doesn't have to work out a new reference frame.",[1263,1264,1265],"style",{},"html pre.shiki code .sxkbv, html code.shiki .sxkbv{--shiki-light:#A0111F;--shiki-default:#A0111F;--shiki-dark:#FF7B72}html pre.shiki code .sNqAu, html code.shiki .sNqAu{--shiki-light:#702C00;--shiki-default:#702C00;--shiki-dark:#FFA657}html pre.shiki code .sc-9e, html code.shiki .sc-9e{--shiki-light:#0E1116;--shiki-default:#0E1116;--shiki-dark:#E6EDF3}html pre.shiki code .sOiAX, html code.shiki .sOiAX{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#79C0FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":1136,"searchDepth":1143,"depth":1169,"links":1267},[1268,1269,1270,1271,1272,1273],{"id":1043,"depth":1169,"text":1044},{"id":1093,"depth":1169,"text":1094},{"id":1117,"depth":1169,"text":1118},{"id":1201,"depth":1169,"text":1202},{"id":1228,"depth":1169,"text":1229},{"id":1257,"depth":1169,"text":1258},"Why connectors use typed structures, enums, binary data, and device-native units.","md",{},true,"\u002Fconnector-development\u002Fconcepts\u002Fdata-types",{"title":919,"description":1274},"KI4RS_Qa29YbQkiifnHgbvlPKjaShZFhnsNzTaIBHgs",[1282,1284],{"title":915,"description":1283,"path":916},"How to choose between SiLA properties and commands, and what makes an endpoint safe to automate.",{"title":923,"description":1285,"path":924},"How a connector splits hardware communication from its SiLA interface, and what happens at startup and shutdown.",1792412975137]