[{"data":1,"prerenderedAt":1428},["ShallowReactive",2],{"navigation":3,"\u002Fget-started\u002Fsetup\u002Fsdk-upgrade":955,"\u002Fget-started\u002Fsetup\u002Fsdk-upgrade-surround":1423},[4,68,205,384,548,741,789],{"title":5,"device":6,"path":7,"stem":8,"children":9,"page":51},"Get Started",null,"\u002Fget-started\u002F","01.get-started",[10,14,52,56,60,64],{"title":11,"path":12,"stem":13,"device":6},"Welcome to UniteLabs","\u002Fget-started\u002Fwelcome\u002F","01.get-started\u002F00.welcome",{"title":15,"device":6,"path":16,"stem":17,"children":18,"page":51},"Setup","\u002Fget-started\u002Fsetup\u002F","01.get-started\u002F01.setup",[19,23,27,31,35,39,43,47],{"title":20,"path":21,"stem":22,"device":6},"Get access","\u002Fget-started\u002Fsetup\u002Fget-access\u002F","01.get-started\u002F01.setup\u002F00.get-access",{"title":24,"path":25,"stem":26,"device":6},"GroundControl","\u002Fget-started\u002Fsetup\u002Fgroundcontrol\u002F","01.get-started\u002F01.setup\u002F10.groundcontrol",{"title":28,"path":29,"stem":30,"device":6},"Network requirements","\u002Fget-started\u002Fsetup\u002Fnetwork-requirements\u002F","01.get-started\u002F01.setup\u002F15.network-requirements",{"title":32,"path":33,"stem":34,"device":6},"Connect to Platform","\u002Fget-started\u002Fsetup\u002Fconnect-to-platform\u002F","01.get-started\u002F01.setup\u002F20.connect-to-platform",{"title":36,"path":37,"stem":38,"device":6},"Set up your development machine","\u002Fget-started\u002Fsetup\u002Fdeveloper-machine\u002F","01.get-started\u002F01.setup\u002F30.developer-machine",{"title":40,"path":41,"stem":42,"device":6},"SDK installation","\u002Fget-started\u002Fsetup\u002Fsdk-installation\u002F","01.get-started\u002F01.setup\u002F40.sdk-installation",{"title":44,"path":45,"stem":46,"device":6},"SDK upgrade","\u002Fget-started\u002Fsetup\u002Fsdk-upgrade\u002F","01.get-started\u002F01.setup\u002F45.sdk-upgrade",{"title":48,"path":49,"stem":50,"device":6},"Connect an AI assistant to the docs","\u002Fget-started\u002Fsetup\u002Fai-assistant\u002F","01.get-started\u002F01.setup\u002F50.ai-assistant",false,{"title":53,"path":54,"stem":55,"device":6},"Control a device","\u002Fget-started\u002Fcontrol-a-device\u002F","01.get-started\u002F02.control-a-device",{"title":57,"path":58,"stem":59,"device":6},"Liquid handling as code","\u002Fget-started\u002Fliquid-handling-as-code\u002F","01.get-started\u002F03.liquid-handling-as-code",{"title":61,"path":62,"stem":63,"device":6},"Automate your workflows","\u002Fget-started\u002Fautomate-your-workflows\u002F","01.get-started\u002F04.automate-your-workflows",{"title":65,"path":66,"stem":67,"device":6},"Self-Paced Setup Guide","\u002Fget-started\u002Fself-onboarding\u002F","01.get-started\u002F90.self-onboarding",{"title":69,"device":6,"path":70,"stem":71,"children":72,"page":51},"How-to","\u002Fhow-to\u002F","02.how-to",[73,127,180,197],{"title":74,"device":6,"path":75,"stem":76,"children":77,"page":51},"Connectors and devices","\u002Fhow-to\u002Fintegrate\u002F","02.how-to\u002F02.integrate",[78,111],{"title":79,"device":6,"path":80,"stem":81,"children":82,"page":51},"Connect a device","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device",[83,87,91,95,99,103,107],{"title":84,"path":85,"stem":86,"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":88,"path":89,"stem":90,"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":92,"path":93,"stem":94,"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":96,"path":97,"stem":98,"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":100,"path":101,"stem":102,"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":104,"path":105,"stem":106,"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":108,"path":109,"stem":110,"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":112,"device":6,"path":113,"stem":114,"children":115,"page":51},"Use a device","\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device",[116,119,123],{"title":24,"path":117,"stem":118,"device":6},"\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002Fgroundcontrol\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device\u002F10.groundcontrol",{"title":120,"path":121,"stem":122,"device":6},"Platform","\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002Fplatform\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device\u002F20.platform",{"title":124,"path":125,"stem":126,"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":128,"device":6,"path":129,"stem":130,"children":131,"page":51},"Workflows","\u002Fhow-to\u002Fautomate\u002F","02.how-to\u002F07.automate",[132,136,140,144,148,152,156,160,164,168,172,176],{"title":133,"path":134,"stem":135,"device":6},"Workflow template","\u002Fhow-to\u002Fautomate\u002Fworkflow-template\u002F","02.how-to\u002F07.automate\u002F10.workflow-template",{"title":137,"path":138,"stem":139,"device":6},"Deploy a workflow","\u002Fhow-to\u002Fautomate\u002Fdeploy-a-workflow\u002F","02.how-to\u002F07.automate\u002F30.deploy-a-workflow",{"title":141,"path":142,"stem":143,"device":6},"Run a workflow","\u002Fhow-to\u002Fautomate\u002Frun-a-workflow\u002F","02.how-to\u002F07.automate\u002F35.run-a-workflow",{"title":145,"path":146,"stem":147,"device":6},"Workflows REST API","\u002Fhow-to\u002Fautomate\u002Fworkflows-api\u002F","02.how-to\u002F07.automate\u002F38.workflows-api",{"title":149,"path":150,"stem":151,"device":6},"CI\u002FCD for workflows","\u002Fhow-to\u002Fautomate\u002Fcicd-for-workflows\u002F","02.how-to\u002F07.automate\u002F40.cicd-for-workflows",{"title":153,"path":154,"stem":155,"device":6},"HITL basics","\u002Fhow-to\u002Fautomate\u002Fbasic-hitl\u002F","02.how-to\u002F07.automate\u002F50.basic-hitl",{"title":157,"path":158,"stem":159,"device":6},"Slack notifications and operator confirmation","\u002Fhow-to\u002Fautomate\u002Fslack-notifications\u002F","02.how-to\u002F07.automate\u002F52.slack-notifications",{"title":161,"path":162,"stem":163,"device":6},"Typed operator inputs","\u002Fhow-to\u002Fautomate\u002Ftyped-operator-inputs\u002F","02.how-to\u002F07.automate\u002F55.typed-operator-inputs",{"title":165,"path":166,"stem":167,"device":6},"Pause and resume a run","\u002Fhow-to\u002Fautomate\u002Fpause-and-resume\u002F","02.how-to\u002F07.automate\u002F57.pause-and-resume",{"title":169,"path":170,"stem":171,"device":6},"Error recovery","\u002Fhow-to\u002Fautomate\u002Fbasic-error-handling\u002F","02.how-to\u002F07.automate\u002F60.basic-error-handling",{"title":173,"path":174,"stem":175,"device":6},"Advanced error handling","\u002Fhow-to\u002Fautomate\u002Fadvanced-error-handling\u002F","02.how-to\u002F07.automate\u002F70.advanced-error-handling",{"title":177,"path":178,"stem":179,"device":6},"Emit lineage events","\u002Fhow-to\u002Fautomate\u002Femitting-lineage-events\u002F","02.how-to\u002F07.automate\u002F90.emitting-lineage-events",{"title":181,"device":6,"path":182,"stem":183,"children":184,"page":51},"Data","\u002Fhow-to\u002Fobserve\u002F","02.how-to\u002F08.observe",[185,189,193],{"title":186,"path":187,"stem":188,"device":6},"File System Connector","\u002Fhow-to\u002Fobserve\u002Ffilesystem-connector\u002F","02.how-to\u002F08.observe\u002F10.filesystem-connector",{"title":190,"path":191,"stem":192,"device":6},"Building an ETL","\u002Fhow-to\u002Fobserve\u002Fbuilding-an-etl\u002F","02.how-to\u002F08.observe\u002F20.building-an-etl",{"title":194,"path":195,"stem":196,"device":6},"Read lineage events","\u002Fhow-to\u002Fobserve\u002Freading-lineage-events\u002F","02.how-to\u002F08.observe\u002F30.reading-lineage-events",{"title":120,"device":6,"path":198,"stem":199,"children":200,"page":51},"\u002Fhow-to\u002Fplatform\u002F","02.how-to\u002F09.platform",[201],{"title":202,"path":203,"stem":204,"device":6},"UniteLabs Desktop","\u002Fhow-to\u002Fplatform\u002Funitelabs-desktop\u002F","02.how-to\u002F09.platform\u002F10.unitelabs-desktop",{"title":206,"device":6,"path":207,"stem":208,"children":209,"page":51},"Concepts","\u002Fconcepts\u002F","04.concepts",[210,248,272,321,360],{"title":211,"device":6,"path":212,"stem":213,"children":214,"page":51},"Labs as code","\u002Fconcepts\u002Flabs-as-code\u002F","04.concepts\u002F01.labs-as-code",[215,219,223],{"title":216,"path":217,"stem":218,"device":6},"Lab as Code","\u002Fconcepts\u002Flabs-as-code\u002Fwhy-code\u002F","04.concepts\u002F01.labs-as-code\u002F00.why-code",{"title":220,"path":221,"stem":222,"device":6},"How it works","\u002Fconcepts\u002Flabs-as-code\u002Fhow-it-works\u002F","04.concepts\u002F01.labs-as-code\u002F01.how-it-works",{"title":224,"device":6,"path":225,"stem":226,"children":227,"page":51},"Use Cases","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases",[228,232,236,240,244],{"title":229,"path":230,"stem":231,"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":233,"path":234,"stem":235,"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":237,"path":238,"stem":239,"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":241,"path":242,"stem":243,"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":245,"path":246,"stem":247,"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":74,"device":6,"path":249,"stem":250,"children":251,"page":51},"\u002Fconcepts\u002Fintegrate\u002F","04.concepts\u002F02.integrate",[252,256,260,264,268],{"title":253,"path":254,"stem":255,"device":6},"Device","\u002Fconcepts\u002Fintegrate\u002Fdevice\u002F","04.concepts\u002F02.integrate\u002F05.device",{"title":257,"path":258,"stem":259,"device":6},"Connector","\u002Fconcepts\u002Fintegrate\u002Fconnector\u002F","04.concepts\u002F02.integrate\u002F10.connector",{"title":261,"path":262,"stem":263,"device":6},"Module","\u002Fconcepts\u002Fintegrate\u002Fmodule\u002F","04.concepts\u002F02.integrate\u002F20.module",{"title":265,"path":266,"stem":267,"device":6},"Action","\u002Fconcepts\u002Fintegrate\u002Faction\u002F","04.concepts\u002F02.integrate\u002F30.action",{"title":269,"path":270,"stem":271,"device":6},"Subscription","\u002Fconcepts\u002Fintegrate\u002Fsubscription\u002F","04.concepts\u002F02.integrate\u002F40.subscription",{"title":273,"device":6,"path":274,"stem":275,"children":276,"page":51},"Liquid handling and robots","\u002Fconcepts\u002Foperate\u002F","04.concepts\u002F03.operate",[277,281,285,289,293,297,301,305,309,313,317],{"title":278,"path":279,"stem":280,"device":6},"Liquid Handling","\u002Fconcepts\u002Foperate\u002Fliquid-handling\u002F","04.concepts\u002F03.operate\u002F10.liquid-handling",{"title":282,"path":283,"stem":284,"device":6},"Modules","\u002Fconcepts\u002Foperate\u002Fmodules\u002F","04.concepts\u002F03.operate\u002F20.modules",{"title":286,"path":287,"stem":288,"device":6},"Deck","\u002Fconcepts\u002Foperate\u002Fdeck\u002F","04.concepts\u002F03.operate\u002F30.deck",{"title":290,"path":291,"stem":292,"device":6},"Labware","\u002Fconcepts\u002Foperate\u002Flabware\u002F","04.concepts\u002F03.operate\u002F40.labware",{"title":294,"path":295,"stem":296,"device":6},"Liquids","\u002Fconcepts\u002Foperate\u002Fliquids\u002F","04.concepts\u002F03.operate\u002F50.liquids",{"title":298,"path":299,"stem":300,"device":6},"Liquid Classes","\u002Fconcepts\u002Foperate\u002Fliquid-classes\u002F","04.concepts\u002F03.operate\u002F60.liquid-classes",{"title":302,"path":303,"stem":304,"device":6},"Parameter Sets","\u002Fconcepts\u002Foperate\u002Fparameter-sets\u002F","04.concepts\u002F03.operate\u002F65.parameter-sets",{"title":306,"path":307,"stem":308,"device":6},"Tips and Tip Tracking","\u002Fconcepts\u002Foperate\u002Ftips\u002F","04.concepts\u002F03.operate\u002F70.tips",{"title":310,"path":311,"stem":312,"device":6},"Simulation","\u002Fconcepts\u002Foperate\u002Fsimulation\u002F","04.concepts\u002F03.operate\u002F80.simulation",{"title":314,"path":315,"stem":316,"device":6},"Error Handling","\u002Fconcepts\u002Foperate\u002Ferror-handling\u002F","04.concepts\u002F03.operate\u002F90.error-handling",{"title":318,"path":319,"stem":320,"device":6},"Robot Arms","\u002Fconcepts\u002Foperate\u002Frobot-arms\u002F","04.concepts\u002F03.operate\u002F95.robot-arms",{"title":128,"device":6,"path":322,"stem":323,"children":324,"page":51},"\u002Fconcepts\u002Fautomate\u002F","04.concepts\u002F07.automate",[325,329,333,337,341,345,349,353,357],{"title":326,"path":327,"stem":328,"device":6},"Workflow","\u002Fconcepts\u002Fautomate\u002Fworkflow\u002F","04.concepts\u002F07.automate\u002F10.workflow",{"title":330,"path":331,"stem":332,"device":6},"Phase","\u002Fconcepts\u002Fautomate\u002Fphase\u002F","04.concepts\u002F07.automate\u002F20.phase",{"title":334,"path":335,"stem":336,"device":6},"Step","\u002Fconcepts\u002Fautomate\u002Fstep\u002F","04.concepts\u002F07.automate\u002F30.step",{"title":338,"path":339,"stem":340,"device":6},"Runs","\u002Fconcepts\u002Fautomate\u002Fruns\u002F","04.concepts\u002F07.automate\u002F40.runs",{"title":342,"path":343,"stem":344,"device":6},"Input","\u002Fconcepts\u002Fautomate\u002Finput\u002F","04.concepts\u002F07.automate\u002F50.input",{"title":346,"path":347,"stem":348,"device":6},"Artifacts","\u002Fconcepts\u002Fautomate\u002Fartifacts\u002F","04.concepts\u002F07.automate\u002F60.artifacts",{"title":350,"path":351,"stem":352,"device":6},"Logs","\u002Fconcepts\u002Fautomate\u002Flogs\u002F","04.concepts\u002F07.automate\u002F70.logs",{"title":354,"path":355,"stem":356,"device":6},"Human in the Loop","\u002Fconcepts\u002Fautomate\u002Fhuman-in-the-loop\u002F","04.concepts\u002F07.automate\u002F80.human-in-the-loop",{"title":314,"path":358,"stem":359,"device":6},"\u002Fconcepts\u002Fautomate\u002Ferror-handling\u002F","04.concepts\u002F07.automate\u002F90.error-handling",{"title":181,"device":6,"path":361,"stem":362,"children":363,"page":51},"\u002Fconcepts\u002Fobserve\u002F","04.concepts\u002F08.observe",[364,368,372,376,380],{"title":365,"path":366,"stem":367,"device":6},"Overview","\u002Fconcepts\u002Fobserve\u002Foverview\u002F","04.concepts\u002F08.observe\u002F10.overview",{"title":369,"path":370,"stem":371,"device":6},"Object Storage","\u002Fconcepts\u002Fobserve\u002Fstorage\u002F","04.concepts\u002F08.observe\u002F10.storage",{"title":373,"path":374,"stem":375,"device":6},"Secrets","\u002Fconcepts\u002Fobserve\u002Fsecrets\u002F","04.concepts\u002F08.observe\u002F20.secrets",{"title":377,"path":378,"stem":379,"device":6},"Data sources","\u002Fconcepts\u002Fobserve\u002Fdata-sources\u002F","04.concepts\u002F08.observe\u002F30.data-sources",{"title":381,"path":382,"stem":383,"device":6},"Data lineage","\u002Fconcepts\u002Fobserve\u002Fdata-lineage\u002F","04.concepts\u002F08.observe\u002F40.data-lineage",{"title":385,"device":6,"path":386,"stem":387,"children":388,"page":51},"Devices","\u002Fdevices\u002F","05.devices",[389,392,440,453,469,506,530],{"title":365,"path":390,"stem":391,"device":6},"\u002Fdevices\u002Foverview\u002F","05.devices\u002F00.overview",{"title":393,"path":394,"page":51,"children":395},"Heater-shakers","\u002Fdevices\u002Fheater-shakers\u002F",[396,417,427],{"title":397,"path":398,"stem":399,"device":400},"QInstruments BioShake","\u002Fdevices\u002Fqinstruments-bioshake\u002F","05.devices\u002F10.qinstruments-bioshake",{"slug":401,"vendor":402,"category":403,"connector":401,"package":404,"models":405,"communication":412,"vendor_software":6,"os":413},"qinstruments-bioshake","QInstruments","Plate Shakers & Temperature Control","unitelabs-qinstruments-bioshake",[406,407,408,409,410,411],"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)",[414,415,416],"windows","linux","macos",{"title":418,"path":419,"stem":420,"device":421},"QInstruments ColdPlate","\u002Fdevices\u002Fqinstruments-coldplate\u002F","05.devices\u002F20.qinstruments-coldplate",{"slug":422,"vendor":402,"category":403,"connector":401,"package":404,"models":423,"communication":412,"vendor_software":6,"os":426},"qinstruments-coldplate",[424,425],"ColdPlate","ColdPlate slim",[414,415,416],{"title":428,"path":429,"stem":430,"device":431},"Inheco Thermoshake","\u002Fdevices\u002Finheco-thermoshake\u002F","05.devices\u002F30.inheco-thermoshake",{"slug":432,"vendor":433,"category":403,"connector":434,"models":435},"inheco-thermoshake","Inheco","inheco-tec-controller",[436,437,438,439],"Thermoshake AC","Thermoshake AC LC","Thermoshake Classic","Thermoshake RM",{"title":441,"path":442,"page":51,"children":443},"Incubation","\u002Fdevices\u002Fincubation\u002F",[444],{"title":445,"path":446,"stem":447,"device":448},"Inheco SCILA","\u002Fdevices\u002Finheco-scila\u002F","05.devices\u002F40.inheco-scila",{"slug":449,"vendor":433,"category":441,"connector":449,"models":450},"inheco-scila",[451,452],"SCILA","SCILA MIX 2-gas mixing device",{"title":454,"path":455,"page":51,"children":456},"Thermal cyclers","\u002Fdevices\u002Fthermal-cyclers\u002F",[457],{"title":458,"path":459,"stem":460,"device":461},"Inheco ODTC","\u002Fdevices\u002Finheco-odtc\u002F","05.devices\u002F50.inheco-odtc",{"slug":462,"vendor":433,"category":463,"connector":462,"models":464},"inheco-odtc","Thermal Cycler",[465,466,467,468],"ODTC 96","ODTC 96XL","ODTC 384","ODTC 384XL",{"title":470,"path":471,"page":51,"children":472},"Readers","\u002Fdevices\u002Freaders\u002F",[473,482,491],{"title":474,"path":475,"stem":476,"device":477},"Agilent Biotek Gen5","\u002Fdevices\u002Fbiotek-gen5\u002F","05.devices\u002F60.biotek-gen5",{"slug":478,"vendor":479,"category":480,"connector":481},"biotek-gen5","Agilent","Readers & Imagers","gen5",{"title":483,"path":484,"stem":485,"device":486},"Biotek Synergy H1","\u002Fdevices\u002Fbiotek-synergy-h1\u002F","05.devices\u002F70.biotek-synergy-h1",{"slug":487,"vendor":479,"category":480,"connector":488,"models":489},"biotek-synergy-h1","agilent-synergy-h1",[490],"BioTek Synergy H1",{"title":492,"path":493,"stem":494,"device":495},"Tecan Infinite 200","\u002Fdevices\u002Ftecan-infinite-200\u002F","05.devices\u002F75.tecan-infinite-200",{"slug":496,"vendor":497,"category":480,"connector":496,"package":498,"models":499,"communication":503,"vendor_software":504,"os":505},"tecan-infinite-200","Tecan","unitelabs-tecan-infinite-200",[500,501,502],"Infinite F200","Infinite M200","Infinite M200 Pro","USB","i-control on Windows only, for its USB driver",[414,415,416],{"title":507,"path":508,"page":51,"children":509},"Tilt & turn","\u002Fdevices\u002Ftilt-and-turn\u002F",[510,520],{"title":511,"path":512,"stem":513,"device":514},"QInstruments TiltStation","\u002Fdevices\u002Fqinstruments-tiltstation\u002F","05.devices\u002F80.qinstruments-tiltstation",{"slug":515,"vendor":402,"category":516,"connector":401,"package":404,"models":517,"communication":412,"vendor_software":6,"os":519},"qinstruments-tiltstation","Plate Tilting",[518],"TiltStation",[414,415,416],{"title":521,"path":522,"stem":523,"device":524},"QInstruments TurnStation","\u002Fdevices\u002Fqinstruments-turnstation\u002F","05.devices\u002F90.qinstruments-turnstation",{"slug":525,"vendor":402,"category":526,"connector":401,"package":404,"models":527,"communication":412,"vendor_software":6,"os":529},"qinstruments-turnstation","Plate Rotating",[528],"TurnStation",[414,415,416],{"title":531,"path":532,"page":51,"children":533},"Robots","\u002Fdevices\u002Frobots\u002F",[534],{"title":535,"path":536,"stem":537,"device":538},"Brooks PreciseFlex 400","\u002Fdevices\u002Fbrooks-preciseflex-400\u002F","05.devices\u002F95.brooks-preciseflex-400",{"slug":539,"vendor":540,"category":531,"connector":539,"package":541,"models":542,"communication":546,"vendor_software":6,"os":547},"brooks-preciseflex-400","Brooks Automation","unitelabs-brooks-preciseflex-400",[543,544,545],"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)",[414,415,416],{"title":549,"device":6,"path":550,"stem":551,"children":552,"page":51},"Liquid Handling and Robots","\u002Fliquid-handling-and-robots\u002F","06.liquid-handling-and-robots",[553,556,568,592,595,640,669,686,703,725],{"title":365,"path":554,"stem":555,"device":6},"\u002Fliquid-handling-and-robots\u002Foverview\u002F","06.liquid-handling-and-robots\u002F00.overview",{"title":286,"device":6,"path":557,"stem":558,"children":559,"page":51},"\u002Fliquid-handling-and-robots\u002Fdeck\u002F","06.liquid-handling-and-robots\u002F10.deck",[560,564],{"title":561,"path":562,"stem":563,"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":565,"path":566,"stem":567,"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":569,"device":6,"path":570,"stem":571,"children":572,"page":51},"Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting",[573,577,581,585,588],{"title":574,"path":575,"stem":576,"device":6},"Basic Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fbasic-pipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F10.basic-pipetting",{"title":578,"path":579,"stem":580,"device":6},"Advanced Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fadvanced-pipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F20.advanced-pipetting",{"title":582,"path":583,"stem":584,"device":6},"Tip Handling","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Ftip-handling\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F30.tip-handling",{"title":298,"path":586,"stem":587,"device":6},"\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F40.liquid-classes",{"title":589,"path":590,"stem":591,"device":6},"Labware Transport","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Flabware-transport\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F50.labware-transport",{"title":310,"path":593,"stem":594,"device":6},"\u002Fliquid-handling-and-robots\u002Fsimulation\u002F","06.liquid-handling-and-robots\u002F30.simulation",{"title":596,"device":6,"path":597,"stem":598,"children":599,"page":51},"Hamilton STAR","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star",[600,604,608,612,616,620,624,628,632,636],{"title":601,"path":602,"stem":603,"device":6},"Positioning & Movement","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fpositioning\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F10.positioning",{"title":605,"path":606,"stem":607,"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":609,"path":610,"stem":611,"device":6},"iSWAP Module","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fiswap\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F30.iswap",{"title":613,"path":614,"stem":615,"device":6},"Using TADM","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Ftadm\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F40.tadm",{"title":617,"path":618,"stem":619,"device":6},"Autoload Module","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fautoload\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F50.autoload",{"title":621,"path":622,"stem":623,"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":625,"path":626,"stem":627,"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":629,"path":630,"stem":631,"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":633,"path":634,"stem":635,"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":637,"path":638,"stem":639,"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":641,"device":6,"path":642,"stem":643,"children":644,"page":51},"Hamilton Vantage","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage",[645,649,653,657,661,665],{"title":646,"path":647,"stem":648,"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":650,"path":651,"stem":652,"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":654,"path":655,"stem":656,"device":6},"IDL Module","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fidl\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F20.idl",{"title":658,"path":659,"stem":660,"device":6},"IPG Module","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fipg\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F30.ipg",{"title":662,"path":663,"stem":664,"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":666,"path":667,"stem":668,"device":6},"CO-RE 96 Head","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fcore96-head\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F50.core96-head",{"title":670,"device":6,"path":671,"stem":672,"children":673,"page":51},"Agilent Bravo","\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo",[674,677,680,683],{"title":582,"path":675,"stem":676,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Ftip-handling\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F10.tip-handling",{"title":574,"path":678,"stem":679,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Fbasic-pipetting\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F20.basic-pipetting",{"title":298,"path":681,"stem":682,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F25.liquid-classes",{"title":605,"path":684,"stem":685,"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":687,"device":6,"path":688,"stem":689,"children":690,"page":51},"Tecan FluentControl","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol",[691,695,699],{"title":692,"path":693,"stem":694,"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":696,"path":697,"stem":698,"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":700,"path":701,"stem":702,"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":704,"device":6,"path":705,"stem":706,"children":707,"page":51},"Tecan Freedom EVO","\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo",[708,712,715,718,722],{"title":709,"path":710,"stem":711,"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":582,"path":713,"stem":714,"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":574,"path":716,"stem":717,"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":719,"path":720,"stem":721,"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":298,"path":723,"stem":724,"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":535,"device":6,"path":726,"stem":727,"children":728,"page":51},"\u002Fliquid-handling-and-robots\u002Fbrooks-preciseflex-400\u002F","06.liquid-handling-and-robots\u002F46.brooks-preciseflex-400",[729,733,737],{"title":730,"path":731,"stem":732,"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":734,"path":735,"stem":736,"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":738,"path":739,"stem":740,"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":290,"device":6,"path":742,"stem":743,"children":744,"page":51},"\u002Flabware\u002F","07.labware",[745,748,752,756,760,764,768,772,776,785],{"title":365,"path":746,"stem":747,"device":6},"\u002Flabware\u002Foverview\u002F","07.labware\u002F00.overview",{"title":749,"path":750,"stem":751,"device":6},"Supported Labware","\u002Flabware\u002Fsupported-labware\u002F","07.labware\u002F05.supported-labware",{"title":753,"path":754,"stem":755,"device":6},"Standard Labware","\u002Flabware\u002Fstandard-labware\u002F","07.labware\u002F10.standard-labware",{"title":757,"path":758,"stem":759,"device":6},"Plates","\u002Flabware\u002Fplates\u002F","07.labware\u002F20.plates",{"title":761,"path":762,"stem":763,"device":6},"Tips and Tip Racks","\u002Flabware\u002Ftips-and-racks\u002F","07.labware\u002F30.tips-and-racks",{"title":765,"path":766,"stem":767,"device":6},"Tubes and Tube Racks","\u002Flabware\u002Ftubes-and-tube-racks\u002F","07.labware\u002F40.tubes-and-tube-racks",{"title":769,"path":770,"stem":771,"device":6},"Troughs","\u002Flabware\u002Ftroughs\u002F","07.labware\u002F50.troughs",{"title":773,"path":774,"stem":775,"device":6},"Carriers and Adapters","\u002Flabware\u002Fcarriers-and-adapters\u002F","07.labware\u002F60.carriers-and-adapters",{"title":777,"device":6,"path":778,"stem":779,"children":780,"page":51},"Hamilton","\u002Flabware\u002Fhamilton\u002F","07.labware\u002F70.hamilton",[781],{"title":782,"path":783,"stem":784,"device":6},"Hamilton MFX Carriers","\u002Flabware\u002Fhamilton\u002Fmfx-carriers\u002F","07.labware\u002F70.hamilton\u002F10.mfx-carriers",{"title":786,"path":787,"stem":788,"device":6},"Shapes","\u002Flabware\u002Fshapes\u002F","07.labware\u002F80.shapes",{"title":790,"device":6,"path":791,"stem":792,"children":793},"Connector Development (CDK)","\u002Fconnector-development\u002F","20.connector-development",[794,796,816,849,873,929],{"title":365,"path":791,"stem":795,"device":6},"20.connector-development\u002Findex",{"title":797,"path":798,"stem":799,"children":800,"page":51},"Getting Started","\u002Fconnector-development\u002Fgetting-started\u002F","20.connector-development\u002F10.getting-started",[801,804,808,812],{"title":365,"path":802,"stem":803,"device":6},"\u002Fconnector-development\u002Fgetting-started\u002Foverview\u002F","20.connector-development\u002F10.getting-started\u002F10.overview",{"title":805,"path":806,"stem":807,"device":6},"What's new","\u002Fconnector-development\u002Fgetting-started\u002Fwhats-new\u002F","20.connector-development\u002F10.getting-started\u002F20.whats-new",{"title":809,"path":810,"stem":811,"device":6},"Installation","\u002Fconnector-development\u002Fgetting-started\u002Finstallation\u002F","20.connector-development\u002F10.getting-started\u002F30.installation",{"title":813,"path":814,"stem":815,"device":6},"Contributing","\u002Fconnector-development\u002Fgetting-started\u002Fcontributing\u002F","20.connector-development\u002F10.getting-started\u002F40.contributing",{"title":817,"path":818,"stem":819,"children":820,"page":51},"Tutorial","\u002Fconnector-development\u002Ftutorial\u002F","20.connector-development\u002F20.tutorial",[821,825,829,833,837,841,845],{"title":822,"path":823,"stem":824,"device":6},"Walkthrough","\u002Fconnector-development\u002Ftutorial\u002Fwalkthrough\u002F","20.connector-development\u002F20.tutorial\u002F00.walkthrough",{"title":826,"path":827,"stem":828,"device":6},"SiLA Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fsila-endpoints\u002F","20.connector-development\u002F20.tutorial\u002F15.sila-endpoints",{"title":830,"path":831,"stem":832,"device":6},"Data Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fdata-endpoints\u002F","20.connector-development\u002F20.tutorial\u002F20.data-endpoints",{"title":834,"path":835,"stem":836,"device":6},"Controls","\u002Fconnector-development\u002Ftutorial\u002Fcontrols\u002F","20.connector-development\u002F20.tutorial\u002F30.controls",{"title":838,"path":839,"stem":840,"device":6},"SiLA Data Types","\u002Fconnector-development\u002Ftutorial\u002Fdata-types\u002F","20.connector-development\u002F20.tutorial\u002F40.data-types",{"title":842,"path":843,"stem":844,"device":6},"Hardware Communication","\u002Fconnector-development\u002Ftutorial\u002Fhardware-communication\u002F","20.connector-development\u002F20.tutorial\u002F90.hardware-communication",{"title":846,"path":847,"stem":848,"device":6},"Build a SiLA client","\u002Fconnector-development\u002Ftutorial\u002Fbuild-a-sila-client\u002F","20.connector-development\u002F20.tutorial\u002F95.build-a-sila-client",{"title":206,"device":6,"path":850,"stem":851,"children":852,"page":51},"\u002Fconnector-development\u002Fconcepts\u002F","20.connector-development\u002F30.concepts",[853,857,861,865,869],{"title":854,"path":855,"stem":856,"device":6},"SiLA","\u002Fconnector-development\u002Fconcepts\u002Fsila\u002F","20.connector-development\u002F30.concepts\u002F00.sila",{"title":858,"path":859,"stem":860,"device":6},"Designing Features","\u002Fconnector-development\u002Fconcepts\u002Ffeatures\u002F","20.connector-development\u002F30.concepts\u002F10.features",{"title":862,"path":863,"stem":864,"device":6},"Designing Endpoints","\u002Fconnector-development\u002Fconcepts\u002Fsila-endpoints\u002F","20.connector-development\u002F30.concepts\u002F15.sila-endpoints",{"title":866,"path":867,"stem":868,"device":6},"Designing Data Types","\u002Fconnector-development\u002Fconcepts\u002Fdata-types\u002F","20.connector-development\u002F30.concepts\u002F20.data-types",{"title":870,"path":871,"stem":872,"device":6},"Connector Architecture","\u002Fconnector-development\u002Fconcepts\u002Farchitecture\u002F","20.connector-development\u002F30.concepts\u002F30.architecture",{"title":874,"path":875,"stem":876,"children":877,"page":51},"Guides","\u002Fconnector-development\u002Fguides\u002F","20.connector-development\u002F40.guides",[878,882,886,890,894,898,902,906,910,914,918,921,925],{"title":879,"path":880,"stem":881,"device":6},"Project Structure","\u002Fconnector-development\u002Fguides\u002Fproject-structure\u002F","20.connector-development\u002F40.guides\u002F10.project-structure",{"title":883,"path":884,"stem":885,"device":6},"Configuration","\u002Fconnector-development\u002Fguides\u002Fconfiguration\u002F","20.connector-development\u002F40.guides\u002F20.configuration",{"title":887,"path":888,"stem":889,"device":6},"Logging","\u002Fconnector-development\u002Fguides\u002Flogging\u002F","20.connector-development\u002F40.guides\u002F21.logging",{"title":891,"path":892,"stem":893,"device":6},"Deployment","\u002Fconnector-development\u002Fguides\u002Fdeployment\u002F","20.connector-development\u002F40.guides\u002F30.deployment",{"title":895,"path":896,"stem":897,"device":6},"Security","\u002Fconnector-development\u002Fguides\u002Fsecurity\u002F","20.connector-development\u002F40.guides\u002F40.security",{"title":899,"path":900,"stem":901,"device":6},"Subscriptions","\u002Fconnector-development\u002Fguides\u002Fsubscriptions\u002F","20.connector-development\u002F40.guides\u002F45.subscriptions",{"title":903,"path":904,"stem":905,"device":6},"Execution Modes","\u002Fconnector-development\u002Fguides\u002Fexecution-modes\u002F","20.connector-development\u002F40.guides\u002F46.execution-modes",{"title":907,"path":908,"stem":909,"device":6},"Constraints and Units","\u002Fconnector-development\u002Fguides\u002Fconstraints-and-units\u002F","20.connector-development\u002F40.guides\u002F47.constraints-and-units",{"title":911,"path":912,"stem":913,"device":6},"Device Variants","\u002Fconnector-development\u002Fguides\u002Fdevice-variants\u002F","20.connector-development\u002F40.guides\u002F48.device-variants",{"title":915,"path":916,"stem":917,"device":6},"Repeated Modules","\u002Fconnector-development\u002Fguides\u002Frepeated-modules\u002F","20.connector-development\u002F40.guides\u002F49.repeated-modules",{"title":314,"path":919,"stem":920,"device":6},"\u002Fconnector-development\u002Fguides\u002Ferror-handling\u002F","20.connector-development\u002F40.guides\u002F50.error-handling",{"title":922,"path":923,"stem":924,"device":6},"Serial Troubleshooting","\u002Fconnector-development\u002Fguides\u002Fserial-troubleshooting\u002F","20.connector-development\u002F40.guides\u002F70.serial-troubleshooting",{"title":926,"path":927,"stem":928,"device":6},"Testing","\u002Fconnector-development\u002Fguides\u002Ftesting\u002F","20.connector-development\u002F40.guides\u002F80.testing",{"title":930,"device":6,"path":931,"stem":932,"children":933},"References","\u002Fconnector-development\u002Freference\u002F","20.connector-development\u002F50.reference\u002Findex",[934,935,939,943,947,951],{"title":930,"path":931,"stem":932,"device":6},{"title":936,"path":937,"stem":938,"device":6},"Naming Conventions","\u002Fconnector-development\u002Freference\u002Fnaming-conventions\u002F","20.connector-development\u002F50.reference\u002F10.naming-conventions",{"title":940,"path":941,"stem":942,"device":6},"Docstring Format","\u002Fconnector-development\u002Freference\u002Fdocstrings\u002F","20.connector-development\u002F50.reference\u002F20.docstrings",{"title":944,"path":945,"stem":946,"device":6},"Feature Metadata","\u002Fconnector-development\u002Freference\u002Ffeature-metadata\u002F","20.connector-development\u002F50.reference\u002F30.feature-metadata",{"title":948,"path":949,"stem":950,"device":6},"Review Checklist","\u002Fconnector-development\u002Freference\u002Freview-checklist\u002F","20.connector-development\u002F50.reference\u002F90.review-checklist",{"title":952,"path":953,"stem":954,"device":6},"Python Environment and Project Management","\u002Fconnector-development\u002Freference\u002Fpython-environment-management\u002F","20.connector-development\u002F50.reference\u002F99.python-environment-management",{"id":956,"title":44,"body":957,"description":1416,"device":6,"extension":1417,"links":6,"meta":1418,"navigation":1061,"path":1419,"seo":1420,"stem":46,"type":1421,"__hash__":1422},"docs\u002F01.get-started\u002F01.setup\u002F45.sdk-upgrade.md",{"type":958,"value":959,"toc":1407},"minimark",[960,965,970,1002,1012,1032,1035,1084,1088,1112,1204,1207,1276,1301,1305,1335,1344,1348,1354,1362,1366,1369,1403],[961,962,964],"h2",{"id":963},"sdk-019-actions-load-at-the-first-call","SDK 0.19: actions load at the first call",[966,967,969],"h3",{"id":968},"what-changed","What changed",[971,972,973,974,982,983,989,990,993,994,997,998,1001],"p",{},"In SDK 0.18 and earlier, ",[975,976,978],"a",{"href":977},"\u002Freference\u002Fpython-sdk\u002Flatest\u002Fclient\u002Fclient\u002FAsyncApiClient\u002F",[979,980,981],"code",{},"AsyncApiClient"," got all modules of a service and all their actions in one request. In SDK 0.19 and later, ",[975,984,986],{"href":985},"\u002Freference\u002Fpython-sdk\u002Flatest\u002Fclient\u002Fservices_client\u002FServicesAsyncClient\u002F#get_service",[979,987,988],{},"get_service",", ",[979,991,992],{},"get_service_by_name"," and ",[979,995,996],{},"list_services"," get only the modules. The SDK gets the actions of a module at the first ",[979,999,1000],{},"await"," or call on that module.",[971,1003,1004,1005,1007,1008,1011],{},"This change applies to ",[979,1006,981],{}," and to ",[979,1009,1010],{},"unitelabs.sdk.connect",".",[971,1013,1014,1015,1017,1018,1024,1025,1031],{},"Before the first ",[979,1016,1000],{}," or call, each module is a ",[975,1019,1021],{"href":1020},"\u002Freference\u002Fpython-sdk\u002Flatest\u002Fcore\u002Fmodule\u002Fmodule_proxy\u002FModuleProxy\u002F",[979,1022,1023],{},"ModuleProxy"," and each action is an ",[975,1026,1028],{"href":1027},"\u002Freference\u002Fpython-sdk\u002Flatest\u002Fcore\u002Faction\u002Faction_proxy\u002FActionProxy\u002F",[979,1029,1030],{},"ActionProxy",". These objects have their names, but they do not know the actions or their schemas.",[971,1033,1034],{},"Calling endpoints is unchanged:",[1036,1037,1042],"pre",{"className":1038,"code":1039,"language":1040,"meta":1041,"style":1041},"language-python shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-default","await service.module_name.action_name()\n\nawait service[\"Module Name\"][\"Action Name\"]()\n","python","",[979,1043,1044,1056,1063],{"__ignoreMap":1041},[1045,1046,1049,1052],"span",{"class":1047,"line":1048},"line",1,[1045,1050,1000],{"class":1051},"sxkbv",[1045,1053,1055],{"class":1054},"sc-9e"," service.module_name.action_name()\n",[1045,1057,1059],{"class":1047,"line":1058},2,[1045,1060,1062],{"emptyLinePlaceholder":1061},true,"\n",[1045,1064,1066,1068,1071,1075,1078,1081],{"class":1047,"line":1065},3,[1045,1067,1000],{"class":1051},[1045,1069,1070],{"class":1054}," service[",[1045,1072,1074],{"class":1073},"sCx38","\"Module Name\"",[1045,1076,1077],{"class":1054},"][",[1045,1079,1080],{"class":1073},"\"Action Name\"",[1045,1082,1083],{"class":1054},"]()\n",[966,1085,1087],{"id":1086},"code-to-change","Code to change",[971,1089,1090,1091,1093,1094,989,1097,989,1100,989,1103,989,1106,993,1109,1011],{},"Code that reads the actions of a module, or the metadata of an action, must ",[979,1092,1000],{}," the module or the action first. To find this code, search for ",[979,1095,1096],{},".actions",[979,1098,1099],{},".parameters",[979,1101,1102],{},".responses",[979,1104,1105],{},".type",[979,1107,1108],{},"isinstance(",[979,1110,1111],{},"hasattr(",[1113,1114,1115,1128],"table",{},[1116,1117,1118],"thead",{},[1119,1120,1121,1125],"tr",{},[1122,1123,1124],"th",{},"SDK 0.18 and earlier",[1122,1126,1127],{},"SDK 0.19 and later",[1129,1130,1131,1144,1160,1180,1192],"tbody",{},[1119,1132,1133,1139],{},[1134,1135,1136],"td",{},[979,1137,1138],{},"module.actions",[1134,1140,1141],{},[979,1142,1143],{},"(await module).actions",[1119,1145,1146,1151],{},[1134,1147,1148],{},[979,1149,1150],{},"module.actions[\"move_by\" + suffix]",[1134,1152,1153,1156,1157],{},[979,1154,1155],{},"getattr(module, \"move_by\" + suffix)"," or ",[979,1158,1159],{},"(await module).actions[\"move_by\" + suffix]",[1119,1161,1162,1175],{},[1134,1163,1164,1167,1168,989,1171,993,1173],{},[979,1165,1166],{},"module.action.type",", and the same for ",[979,1169,1170],{},".id",[979,1172,1099],{},[979,1174,1102],{},[1134,1176,1177],{},[979,1178,1179],{},"(await module.action).type",[1119,1181,1182,1187],{},[1134,1183,1184],{},[979,1185,1186],{},"isinstance(module, Module)",[1134,1188,1189],{},[979,1190,1191],{},"isinstance(await module, Module)",[1119,1193,1194,1199],{},[1134,1195,1196],{},[979,1197,1198],{},"hasattr(module, \"move_by\")",[1134,1200,1201],{},[979,1202,1203],{},"\"move_by\" in (await module).actions",[971,1205,1206],{},"For example, this code lists the actions of a module and their types:",[1036,1208,1210],{"className":1038,"code":1209,"language":1040,"meta":1041,"style":1041},"# SDK 0.18 and earlier\nfor name, action in shaker.shake_controller.actions.items():\n    print(name, action.type)\n\n# SDK 0.19 and later\nfor name, action in (await shaker.shake_controller).actions.items():\n    print(name, action.type)\n",[979,1211,1212,1218,1232,1241,1246,1252,1269],{"__ignoreMap":1041},[1045,1213,1214],{"class":1047,"line":1048},[1045,1215,1217],{"class":1216},"sIsDC","# SDK 0.18 and earlier\n",[1045,1219,1220,1223,1226,1229],{"class":1047,"line":1058},[1045,1221,1222],{"class":1051},"for",[1045,1224,1225],{"class":1054}," name, action ",[1045,1227,1228],{"class":1051},"in",[1045,1230,1231],{"class":1054}," shaker.shake_controller.actions.items():\n",[1045,1233,1234,1238],{"class":1047,"line":1065},[1045,1235,1237],{"class":1236},"sOiAX","    print",[1045,1239,1240],{"class":1054},"(name, action.type)\n",[1045,1242,1244],{"class":1047,"line":1243},4,[1045,1245,1062],{"emptyLinePlaceholder":1061},[1045,1247,1249],{"class":1047,"line":1248},5,[1045,1250,1251],{"class":1216},"# SDK 0.19 and later\n",[1045,1253,1255,1257,1259,1261,1264,1266],{"class":1047,"line":1254},6,[1045,1256,1222],{"class":1051},[1045,1258,1225],{"class":1054},[1045,1260,1228],{"class":1051},[1045,1262,1263],{"class":1054}," (",[1045,1265,1000],{"class":1051},[1045,1267,1268],{"class":1054}," shaker.shake_controller).actions.items():\n",[1045,1270,1272,1274],{"class":1047,"line":1271},7,[1045,1273,1237],{"class":1236},[1045,1275,1240],{"class":1054},[971,1277,1278,1279,1281,1282,1285,1286,1288,1289,1291,1292,1294,1295,1298,1299,1011],{},"Write ",[979,1280,1143],{},", not ",[979,1283,1284],{},"await module.actions",". Python applies ",[979,1287,1000],{}," to all of ",[979,1290,1138],{},", and a ",[979,1293,1023],{}," has no ",[979,1296,1297],{},"actions"," before the ",[979,1300,1000],{},[966,1302,1304],{"id":1303},"errors-occur-at-a-different-time","Errors occur at a different time",[971,1306,1307,1308,1156,1311,1314,1315,993,1318,1321,1322,1324,1325,1327,1328,993,1331,1334],{},"In SDK 0.18 and earlier, a name that is not an action of the module raised ",[979,1309,1310],{},"AttributeError",[979,1312,1313],{},"KeyError"," immediately. In SDK 0.19 and later, ",[979,1316,1317],{},"module.no_such_action",[979,1319,1320],{},"module[\"No Such Name\"]"," give an ",[979,1323,1030],{},". The error occurs at the call or at the ",[979,1326,1000],{},". Thus, ",[979,1329,1330],{},"getattr(module, name, None)",[979,1332,1333],{},"hasattr(module, name)"," cannot show if an action exists.",[971,1336,1337,1338,1341,1342,1011],{},"If your code catches these errors, put the ",[979,1339,1340],{},"try"," around the call or the ",[979,1343,1000],{},[966,1345,1347],{"id":1346},"the-sdk-keeps-the-actions-until-the-process-stops","The SDK keeps the actions until the process stops",[971,1349,1350,1351,1353],{},"The SDK keeps the actions of each module until the Python process stops. A new ",[979,1352,988],{}," call does not get the actions again.",[1355,1356,1359],"callout",{"color":1357,"icon":1358},"warning","i-heroicons-exclamation-triangle",[971,1360,1361],{},"If a connector gets new or changed actions, restart the Python process, for example the Jupyter kernel. If you do not restart it, the SDK can continue to use the old actions.",[966,1363,1365],{"id":1364},"code-for-sdk-018-and-sdk-019","Code for SDK 0.18 and SDK 0.19",[971,1367,1368],{},"If your code must operate on the two versions, use these forms:",[1370,1371,1372,1379,1385],"ul",{},[1373,1374,1375,1376],"li",{},"Calls of actions, for example ",[979,1377,1378],{},"await module.action(...)",[1373,1380,1381,1384],{},[979,1382,1383],{},"getattr(module, name)"," for an action name in a variable",[1373,1386,1387,1393,1394,1396,1397,993,1400,1011],{},[975,1388,1390],{"href":1389},"\u002Freference\u002Fpython-sdk\u002Flatest\u002Fclient\u002Faction_client\u002FActionsAsyncClient\u002F#list_actions",[979,1391,1392],{},"await client.list_actions(module.id)"," for all actions of a module. It returns a list of ",[979,1395,265],{}," objects with ",[979,1398,1399],{},"name",[979,1401,1402],{},"type",[1404,1405,1406],"style",{},"html pre.shiki code .sxkbv, html code.shiki .sxkbv{--shiki-light:#A0111F;--shiki-default:#A0111F;--shiki-dark:#FF7B72}html pre.shiki code .sc-9e, html code.shiki .sc-9e{--shiki-light:#0E1116;--shiki-default:#0E1116;--shiki-dark:#E6EDF3}html pre.shiki code .sCx38, html code.shiki .sCx38{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#A5D6FF}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);}html pre.shiki code .sIsDC, html code.shiki .sIsDC{--shiki-light:#66707B;--shiki-default:#66707B;--shiki-dark:#8B949E}html pre.shiki code .sOiAX, html code.shiki .sOiAX{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#79C0FF}",{"title":1041,"searchDepth":1048,"depth":1058,"links":1408},[1409],{"id":963,"depth":1058,"text":964,"children":1410},[1411,1412,1413,1414,1415],{"id":968,"depth":1065,"text":969},{"id":1086,"depth":1065,"text":1087},{"id":1303,"depth":1065,"text":1304},{"id":1346,"depth":1065,"text":1347},{"id":1364,"depth":1065,"text":1365},"Breaking changes between SDK versions and how to update your code.","md",{},"\u002Fget-started\u002Fsetup\u002Fsdk-upgrade",{"title":44,"description":1416},"howto","QRTF1AxHSSUx_S8qPGy_bL7rhaLgT_-um4UVOvnwJbg",[1424,1426],{"title":40,"description":1425,"path":41},"Install the UniteLabs SDK packages and send your first API request.",{"title":48,"description":1427,"path":49},"Give Claude, Cursor, VS Code or any MCP client direct access to these docs and the API reference of the UniteLabs Python libraries.",1792656140526]