[{"data":1,"prerenderedAt":1469},["ShallowReactive",2],{"navigation":3,"\u002Fget-started\u002Fsetup\u002Fheadless-install":750,"\u002Fget-started\u002Fsetup\u002Fheadless-install-surround":1464},[4,80,134,364,428,530,567,646],{"title":5,"path":6,"stem":7,"children":8,"page":42},"Get Started","\u002Fget-started","01.get-started",[9,13,17,43,47],{"title":10,"path":11,"stem":12},"Welcome to UniteLabs","\u002Fget-started\u002Fwelcome","01.get-started\u002F00.welcome",{"title":14,"path":15,"stem":16},"How it works","\u002Fget-started\u002Fhow-it-works","01.get-started\u002F01.how-it-works",{"title":18,"path":19,"stem":20,"children":21,"page":42},"Use Cases","\u002Fget-started\u002Fuse-cases","01.get-started\u002F02.use-cases",[22,26,30,34,38],{"title":23,"path":24,"stem":25},"Instrument Control","\u002Fget-started\u002Fuse-cases\u002Flow-level-instrument-control","01.get-started\u002F02.use-cases\u002F10.low-level-instrument-control",{"title":27,"path":28,"stem":29},"Multi-device Control","\u002Fget-started\u002Fuse-cases\u002Fmulti-device-control","01.get-started\u002F02.use-cases\u002F20.multi-device-control",{"title":31,"path":32,"stem":33},"Workflow Orchestration","\u002Fget-started\u002Fuse-cases\u002Fworkflow-orchestration","01.get-started\u002F02.use-cases\u002F30.workflow-orchestration",{"title":35,"path":36,"stem":37},"Custom Apps and LIMS Integration","\u002Fget-started\u002Fuse-cases\u002Fcustom-apps-lims","01.get-started\u002F02.use-cases\u002F40.custom-apps-lims",{"title":39,"path":40,"stem":41},"Scale and Fleet Management","\u002Fget-started\u002Fuse-cases\u002Fscale-and-fleet","01.get-started\u002F02.use-cases\u002F50.scale-and-fleet",false,{"title":44,"path":45,"stem":46},"Lab as Code","\u002Fget-started\u002Fwhy-code","01.get-started\u002F03.why-code",{"title":48,"path":49,"stem":50,"children":51,"page":42},"Setup","\u002Fget-started\u002Fsetup","01.get-started\u002F20.setup",[52,56,60,64,68,72,76],{"title":53,"path":54,"stem":55},"GroundControl","\u002Fget-started\u002Fsetup\u002Fgroundcontrol","01.get-started\u002F20.setup\u002F10.groundcontrol",{"title":57,"path":58,"stem":59},"Network requirements","\u002Fget-started\u002Fsetup\u002Fnetwork-requirements","01.get-started\u002F20.setup\u002F20.network-requirements",{"title":61,"path":62,"stem":63},"Multi-device Networking","\u002Fget-started\u002Fsetup\u002Fmultiple-devices","01.get-started\u002F20.setup\u002F30.multiple-devices",{"title":65,"path":66,"stem":67},"Connect to Platform","\u002Fget-started\u002Fsetup\u002Fconnect-to-platform","01.get-started\u002F20.setup\u002F40.connect-to-platform",{"title":69,"path":70,"stem":71},"Headless install","\u002Fget-started\u002Fsetup\u002Fheadless-install","01.get-started\u002F20.setup\u002F50.headless-install",{"title":73,"path":74,"stem":75},"Raspberry Pi","\u002Fget-started\u002Fsetup\u002Fraspberry-pi","01.get-started\u002F20.setup\u002F55.raspberry-pi",{"title":77,"path":78,"stem":79},"Installation","\u002Fget-started\u002Fsetup\u002Fsdk-installation","01.get-started\u002F20.setup\u002F60.sdk-installation",{"title":81,"path":82,"stem":83,"children":84,"page":42},"Integrate","\u002Fintegrate","02.integrate",[85,89,93,118],{"title":86,"path":87,"stem":88},"What is a connector?","\u002Fintegrate\u002Fwhat-is-a-connector","02.integrate\u002F00.what-is-a-connector",{"title":90,"path":91,"stem":92},"Calling a Connector","\u002Fintegrate\u002Fcontrol-with-code","02.integrate\u002F05.control-with-code",{"title":94,"path":95,"stem":96,"children":97,"page":42},"Concepts","\u002Fintegrate\u002Fconcepts","02.integrate\u002F10.concepts",[98,102,106,110,114],{"title":99,"path":100,"stem":101},"Connector","\u002Fintegrate\u002Fconcepts\u002Fconnector","02.integrate\u002F10.concepts\u002F10.connector",{"title":103,"path":104,"stem":105},"Module","\u002Fintegrate\u002Fconcepts\u002Fmodule","02.integrate\u002F10.concepts\u002F20.module",{"title":107,"path":108,"stem":109},"Action","\u002Fintegrate\u002Fconcepts\u002Faction","02.integrate\u002F10.concepts\u002F30.action",{"title":111,"path":112,"stem":113},"Subscription","\u002Fintegrate\u002Fconcepts\u002Fsubscription","02.integrate\u002F10.concepts\u002F40.subscription",{"title":115,"path":116,"stem":117},"Device","\u002Fintegrate\u002Fconcepts\u002Fdevice","02.integrate\u002F10.concepts\u002F50.device",{"title":119,"path":120,"stem":121,"children":122,"page":42},"Use a connector","\u002Fintegrate\u002Fuse-a-connector","02.integrate\u002F30.use-a-connector",[123,126,130],{"title":53,"path":124,"stem":125},"\u002Fintegrate\u002Fuse-a-connector\u002Fgroundcontrol","02.integrate\u002F30.use-a-connector\u002F10.groundcontrol",{"title":127,"path":128,"stem":129},"Platform","\u002Fintegrate\u002Fuse-a-connector\u002Fplatform","02.integrate\u002F30.use-a-connector\u002F20.platform",{"title":131,"path":132,"stem":133},"UniteLabs SDK & REST API","\u002Fintegrate\u002Fuse-a-connector\u002Fpython","02.integrate\u002F30.use-a-connector\u002F30.python",{"title":135,"path":136,"stem":137,"children":138,"page":42},"Operate","\u002Foperate","03.operate",[139,142,146,186,259],{"title":135,"path":140,"stem":141},"\u002Foperate\u002Foverview","03.operate\u002F00.overview",{"title":143,"path":144,"stem":145},"Your First Protocol","\u002Foperate\u002Fyour-first-protocol","03.operate\u002F05.your-first-protocol",{"title":94,"path":147,"stem":148,"children":149,"page":42},"\u002Foperate\u002Fconcepts","03.operate\u002F10.concepts",[150,154,158,162,166,170,174,178,182],{"title":151,"path":152,"stem":153},"Liquid Handling","\u002Foperate\u002Fconcepts\u002Fliquid-handling","03.operate\u002F10.concepts\u002F10.liquid-handling",{"title":155,"path":156,"stem":157},"Modules","\u002Foperate\u002Fconcepts\u002Fmodules","03.operate\u002F10.concepts\u002F20.modules",{"title":159,"path":160,"stem":161},"Deck","\u002Foperate\u002Fconcepts\u002Fdeck","03.operate\u002F10.concepts\u002F30.deck",{"title":163,"path":164,"stem":165},"Labware","\u002Foperate\u002Fconcepts\u002Flabware","03.operate\u002F10.concepts\u002F40.labware",{"title":167,"path":168,"stem":169},"Liquids","\u002Foperate\u002Fconcepts\u002Fliquids","03.operate\u002F10.concepts\u002F50.liquids",{"title":171,"path":172,"stem":173},"Liquid Classes","\u002Foperate\u002Fconcepts\u002Fliquid-classes","03.operate\u002F10.concepts\u002F60.liquid-classes",{"title":175,"path":176,"stem":177},"Tips and Tip Tracking","\u002Foperate\u002Fconcepts\u002Ftips","03.operate\u002F10.concepts\u002F70.tips",{"title":179,"path":180,"stem":181},"Simulation","\u002Foperate\u002Fconcepts\u002Fsimulation","03.operate\u002F10.concepts\u002F80.simulation",{"title":183,"path":184,"stem":185},"Error Handling","\u002Foperate\u002Fconcepts\u002Ferror-handling","03.operate\u002F10.concepts\u002F90.error-handling",{"title":187,"path":188,"stem":189,"children":190,"page":42},"Guides","\u002Foperate\u002Fguides","03.operate\u002F20.guides",[191,220,232,256],{"title":163,"path":192,"stem":193,"children":194},"\u002Foperate\u002Fguides\u002Flabware","03.operate\u002F20.guides\u002F10.labware\u002Findex",[195,196,200,204,208,212,216],{"title":163,"path":192,"stem":193},{"title":197,"path":198,"stem":199},"Standard Labware","\u002Foperate\u002Fguides\u002Flabware\u002Fstandard-labware","03.operate\u002F20.guides\u002F10.labware\u002F05.standard-labware",{"title":201,"path":202,"stem":203},"Plates","\u002Foperate\u002Fguides\u002Flabware\u002Fplates","03.operate\u002F20.guides\u002F10.labware\u002F10.plates",{"title":205,"path":206,"stem":207},"Tips and Tip Racks","\u002Foperate\u002Fguides\u002Flabware\u002Ftips-and-racks","03.operate\u002F20.guides\u002F10.labware\u002F20.tips-and-racks",{"title":209,"path":210,"stem":211},"Tubes and Tube Racks","\u002Foperate\u002Fguides\u002Flabware\u002Ftubes-and-tube-racks","03.operate\u002F20.guides\u002F10.labware\u002F30.tubes-and-tube-racks",{"title":213,"path":214,"stem":215},"Troughs","\u002Foperate\u002Fguides\u002Flabware\u002Ftroughs","03.operate\u002F20.guides\u002F10.labware\u002F35.troughs",{"title":217,"path":218,"stem":219},"Carriers and Adapters","\u002Foperate\u002Fguides\u002Flabware\u002Fcarriers-and-adapters","03.operate\u002F20.guides\u002F10.labware\u002F40.carriers-and-adapters",{"title":159,"path":221,"stem":222,"children":223,"page":42},"\u002Foperate\u002Fguides\u002Fdeck","03.operate\u002F20.guides\u002F20.deck",[224,228],{"title":225,"path":226,"stem":227},"Building a Deck","\u002Foperate\u002Fguides\u002Fdeck\u002Fbuilding-a-deck","03.operate\u002F20.guides\u002F20.deck\u002F10.building-a-deck",{"title":229,"path":230,"stem":231},"Save\u002FLoad a Deck","\u002Foperate\u002Fguides\u002Fdeck\u002Fsave-load-deck","03.operate\u002F20.guides\u002F20.deck\u002F20.save-load-deck",{"title":233,"path":234,"stem":235,"children":236,"page":42},"Pipetting","\u002Foperate\u002Fguides\u002Fpipetting","03.operate\u002F20.guides\u002F30.pipetting",[237,241,245,249,252],{"title":238,"path":239,"stem":240},"Basic Pipetting","\u002Foperate\u002Fguides\u002Fpipetting\u002Fbasic-pipetting","03.operate\u002F20.guides\u002F30.pipetting\u002F10.basic-pipetting",{"title":242,"path":243,"stem":244},"Advanced Pipetting","\u002Foperate\u002Fguides\u002Fpipetting\u002Fadvanced-pipetting","03.operate\u002F20.guides\u002F30.pipetting\u002F20.advanced-pipetting",{"title":246,"path":247,"stem":248},"Tip Handling","\u002Foperate\u002Fguides\u002Fpipetting\u002Ftip-handling","03.operate\u002F20.guides\u002F30.pipetting\u002F30.tip-handling",{"title":171,"path":250,"stem":251},"\u002Foperate\u002Fguides\u002Fpipetting\u002Fliquid-classes","03.operate\u002F20.guides\u002F30.pipetting\u002F40.liquid-classes",{"title":253,"path":254,"stem":255},"Labware Transport","\u002Foperate\u002Fguides\u002Fpipetting\u002Flabware-transport","03.operate\u002F20.guides\u002F30.pipetting\u002F50.labware-transport",{"title":179,"path":257,"stem":258},"\u002Foperate\u002Fguides\u002Fsimulation","03.operate\u002F20.guides\u002F40.simulation",{"title":260,"path":261,"stem":262,"children":263,"page":42},"Liquid Handler Guides","\u002Foperate\u002Fdevices","03.operate\u002F30.devices",[264,305,330,347],{"title":265,"path":266,"stem":267,"children":268,"page":42},"Hamilton STAR","\u002Foperate\u002Fdevices\u002Fhamilton-star","03.operate\u002F30.devices\u002F10.hamilton-star",[269,273,277,281,285,289,293,297,301],{"title":270,"path":271,"stem":272},"Positioning & Movement","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fpositioning","03.operate\u002F30.devices\u002F10.hamilton-star\u002F10.positioning",{"title":274,"path":275,"stem":276},"Gripper Module","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcore-gripper","03.operate\u002F30.devices\u002F10.hamilton-star\u002F20.core-gripper",{"title":278,"path":279,"stem":280},"iSWAP Module","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fiswap","03.operate\u002F30.devices\u002F10.hamilton-star\u002F30.iswap",{"title":282,"path":283,"stem":284},"Using TADM","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Ftadm","03.operate\u002F30.devices\u002F10.hamilton-star\u002F40.tadm",{"title":286,"path":287,"stem":288},"Autoload Module","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fautoload","03.operate\u002F30.devices\u002F10.hamilton-star\u002F50.autoload",{"title":290,"path":291,"stem":292},"Waste Block","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fwaste-block","03.operate\u002F30.devices\u002F10.hamilton-star\u002F60.waste-block",{"title":294,"path":295,"stem":296},"Complex Mixing","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcomplex-mixing","03.operate\u002F30.devices\u002F10.hamilton-star\u002F66.complex-mixing",{"title":298,"path":299,"stem":300},"Teaching Gripper Paddle Positions","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fgripper-positions","03.operate\u002F30.devices\u002F10.hamilton-star\u002F70.gripper-positions",{"title":302,"path":303,"stem":304},"Training a Custom Deck Position With the iSWAP","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcustom-deck-position","03.operate\u002F30.devices\u002F10.hamilton-star\u002F75.custom-deck-position",{"title":306,"path":307,"stem":308,"children":309,"page":42},"Hamilton Vantage","\u002Foperate\u002Fdevices\u002Fhamilton-vantage","03.operate\u002F30.devices\u002F20.hamilton-vantage",[310,314,318,322,326],{"title":311,"path":312,"stem":313},"Waste Configuration","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fwaste-configuration","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F05.waste-configuration",{"title":315,"path":316,"stem":317},"Covers and Lights","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fcovers-and-lights","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F10.covers-and-lights",{"title":319,"path":320,"stem":321},"IDL Module","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fidl","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F20.idl",{"title":323,"path":324,"stem":325},"IPG Module","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fipg","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F30.ipg",{"title":327,"path":328,"stem":329},"XL Pipettes","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fxl-channels","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F40.xl-channels",{"title":331,"path":332,"stem":333,"children":334,"page":42},"Agilent Bravo","\u002Foperate\u002Fdevices\u002Fagilent-bravo","03.operate\u002F30.devices\u002F30.agilent-bravo",[335,338,341,344],{"title":246,"path":336,"stem":337},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Ftip-handling","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F10.tip-handling",{"title":238,"path":339,"stem":340},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Fbasic-pipetting","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F20.basic-pipetting",{"title":171,"path":342,"stem":343},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Fliquid-classes","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F25.liquid-classes",{"title":274,"path":345,"stem":346},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Fusing-the-gripper","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F30.using-the-gripper",{"title":348,"path":349,"stem":350,"children":351,"page":42},"Tecan FluentControl","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol",[352,356,360],{"title":353,"path":354,"stem":355},"Connect & Run a Method","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol\u002Fconnect-and-run","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol\u002F10.connect-and-run",{"title":357,"path":358,"stem":359},"Sending XML Commands","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol\u002Fsending-xml-commands","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol\u002F20.sending-xml-commands",{"title":361,"path":362,"stem":363},"Full Workflow Example","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol\u002Ffull-workflow-example","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol\u002F30.full-workflow-example",{"title":365,"path":366,"stem":367,"children":368,"page":42},"Device Guides","\u002Fdevice-guides","06.device-guides",[369,372,385,402,415],{"title":365,"path":370,"stem":371},"\u002Fdevice-guides\u002Foverview","06.device-guides\u002F00.overview",{"title":373,"path":374,"stem":375,"children":376,"page":42},"Incubation","\u002Fdevice-guides\u002Fincubation","06.device-guides\u002F20.incubation",[377,381],{"title":378,"path":379,"stem":380},"Inheco ODTC","\u002Fdevice-guides\u002Fincubation\u002Finheco-odtc","06.device-guides\u002F20.incubation\u002F10.inheco-odtc",{"title":382,"path":383,"stem":384},"Inheco SCILA","\u002Fdevice-guides\u002Fincubation\u002Finheco-scila","06.device-guides\u002F20.incubation\u002F20.inheco-scila",{"title":386,"path":387,"stem":388,"children":389,"page":42},"Heater-Shakers","\u002Fdevice-guides\u002Fheater-shakers","06.device-guides\u002F30.heater-shakers",[390,394,398],{"title":391,"path":392,"stem":393},"Inheco Thermoshake","\u002Fdevice-guides\u002Fheater-shakers\u002Finheco-thermoshake","06.device-guides\u002F30.heater-shakers\u002F10.inheco-thermoshake",{"title":395,"path":396,"stem":397},"QInstruments Bioshake","\u002Fdevice-guides\u002Fheater-shakers\u002Fqinstruments-bioshake","06.device-guides\u002F30.heater-shakers\u002F20.qinstruments-bioshake",{"title":399,"path":400,"stem":401},"QInstruments ColdPlate","\u002Fdevice-guides\u002Fheater-shakers\u002Fqinstruments-coldplate","06.device-guides\u002F30.heater-shakers\u002F30.qinstruments-coldplate",{"title":403,"path":404,"stem":405,"children":406,"page":42},"Readers","\u002Fdevice-guides\u002Freaders","06.device-guides\u002F40.readers",[407,411],{"title":408,"path":409,"stem":410},"Biotek Gen5","\u002Fdevice-guides\u002Freaders\u002Fbiotek-gen5","06.device-guides\u002F40.readers\u002F10.biotek-gen5",{"title":412,"path":413,"stem":414},"Biotek Synergy H1","\u002Fdevice-guides\u002Freaders\u002Fbiotek-synergy-h1","06.device-guides\u002F40.readers\u002F20.biotek-synergy-H1",{"title":416,"path":417,"stem":418,"children":419,"page":42},"Tilt & Turn","\u002Fdevice-guides\u002Ftilt-and-turn","06.device-guides\u002F50.tilt-and-turn",[420,424],{"title":421,"path":422,"stem":423},"TurnStation","\u002Fdevice-guides\u002Ftilt-and-turn\u002Fqinstruments-turnstation","06.device-guides\u002F50.tilt-and-turn\u002F10.qinstruments-turnstation",{"title":425,"path":426,"stem":427},"TiltStation","\u002Fdevice-guides\u002Ftilt-and-turn\u002Fqinstruments-tiltstation","06.device-guides\u002F50.tilt-and-turn\u002F20.qinstruments-tiltstation",{"title":429,"path":430,"stem":431,"children":432,"page":42},"Automate","\u002Fautomate","07.automate",[433,437,441,445,494],{"title":434,"path":435,"stem":436},"What is a workflow?","\u002Fautomate\u002Fwhat-is-a-workflow","07.automate\u002F00.what-is-a-workflow",{"title":438,"path":439,"stem":440},"Workflow template","\u002Fautomate\u002Fworkflow-template","07.automate\u002F05.workflow-template",{"title":442,"path":443,"stem":444},"Your First Workflow","\u002Fautomate\u002Fyour-first-workflow","07.automate\u002F08.your-first-workflow",{"title":94,"pages":446,"path":456,"stem":457,"children":458,"page":42},[447,448,449,450,451,452,453,454,455],"workflow","phase","step","runs","input","artifacts","logs","human-in-the-loop","error-handling","\u002Fautomate\u002Fconcepts","07.automate\u002F10.concepts",[459,463,467,471,475,479,483,487,491],{"title":460,"path":461,"stem":462},"Workflow","\u002Fautomate\u002Fconcepts\u002Fworkflow","07.automate\u002F10.concepts\u002F10.workflow",{"title":464,"path":465,"stem":466},"Phase","\u002Fautomate\u002Fconcepts\u002Fphase","07.automate\u002F10.concepts\u002F20.phase",{"title":468,"path":469,"stem":470},"Step","\u002Fautomate\u002Fconcepts\u002Fstep","07.automate\u002F10.concepts\u002F30.step",{"title":472,"path":473,"stem":474},"Runs","\u002Fautomate\u002Fconcepts\u002Fruns","07.automate\u002F10.concepts\u002F40.runs",{"title":476,"path":477,"stem":478},"Input","\u002Fautomate\u002Fconcepts\u002Finput","07.automate\u002F10.concepts\u002F50.input",{"title":480,"path":481,"stem":482},"Artifacts","\u002Fautomate\u002Fconcepts\u002Fartifacts","07.automate\u002F10.concepts\u002F60.artifacts",{"title":484,"path":485,"stem":486},"Logs","\u002Fautomate\u002Fconcepts\u002Flogs","07.automate\u002F10.concepts\u002F70.logs",{"title":488,"path":489,"stem":490},"Human in the Loop","\u002Fautomate\u002Fconcepts\u002Fhuman-in-the-loop","07.automate\u002F10.concepts\u002F80.human-in-the-loop",{"title":183,"path":492,"stem":493},"\u002Fautomate\u002Fconcepts\u002Ferror-handling","07.automate\u002F10.concepts\u002F90.error-handling",{"title":187,"path":495,"stem":496,"children":497,"page":42},"\u002Fautomate\u002Fguides","07.automate\u002F25.guides",[498,502,506,510,514,518,522,526],{"title":499,"path":500,"stem":501},"Deploy a workflow","\u002Fautomate\u002Fguides\u002Fdeploy-a-workflow","07.automate\u002F25.guides\u002F30.deploy-a-workflow",{"title":503,"path":504,"stem":505},"Run a workflow","\u002Fautomate\u002Fguides\u002Frun-a-workflow","07.automate\u002F25.guides\u002F35.run-a-workflow",{"title":507,"path":508,"stem":509},"CI\u002FCD for workflows","\u002Fautomate\u002Fguides\u002Fcicd-for-workflows","07.automate\u002F25.guides\u002F40.cicd-for-workflows",{"title":511,"path":512,"stem":513},"HITL basics","\u002Fautomate\u002Fguides\u002Fbasic-hitl","07.automate\u002F25.guides\u002F50.basic-hitl",{"title":515,"path":516,"stem":517},"Typed operator inputs","\u002Fautomate\u002Fguides\u002Ftyped-operator-inputs","07.automate\u002F25.guides\u002F55.typed-operator-inputs",{"title":519,"path":520,"stem":521},"Error recovery","\u002Fautomate\u002Fguides\u002Fbasic-error-handling","07.automate\u002F25.guides\u002F60.basic-error-handling",{"title":523,"path":524,"stem":525},"Advanced error handling","\u002Fautomate\u002Fguides\u002Fadvanced-error-handling","07.automate\u002F25.guides\u002F70.advanced-error-handling",{"title":527,"path":528,"stem":529},"Workflows REST API","\u002Fautomate\u002Fguides\u002Fworkflows-api","07.automate\u002F25.guides\u002F80.workflows-api",{"title":531,"path":532,"stem":533,"children":534,"page":42},"Observe","\u002Fobserve","08.observe",[535,539,555],{"title":536,"path":537,"stem":538},"Overview","\u002Fobserve\u002Foverview","08.observe\u002F10.overview",{"title":94,"path":540,"stem":541,"children":542,"page":42},"\u002Fobserve\u002Fconcepts","08.observe\u002F20.concepts",[543,547,551],{"title":544,"path":545,"stem":546},"Object Storage","\u002Fobserve\u002Fconcepts\u002Fstorage","08.observe\u002F20.concepts\u002F10.storage",{"title":548,"path":549,"stem":550},"Secrets","\u002Fobserve\u002Fconcepts\u002Fsecrets","08.observe\u002F20.concepts\u002F20.secrets",{"title":552,"path":553,"stem":554},"Data sources","\u002Fobserve\u002Fconcepts\u002Fdata-sources","08.observe\u002F20.concepts\u002F30.data-sources",{"title":187,"path":556,"stem":557,"children":558,"page":42},"\u002Fobserve\u002Fguides","08.observe\u002F30.guides",[559,563],{"title":560,"path":561,"stem":562},"File System Connector","\u002Fobserve\u002Fguides\u002Ffilesystem-connector","08.observe\u002F30.guides\u002F10.filesystem-connector",{"title":564,"path":565,"stem":566},"Building an ETL","\u002Fobserve\u002Fguides\u002Fbuilding-an-etl","08.observe\u002F30.guides\u002F20.building-an-etl",{"title":568,"path":569,"stem":570,"children":571,"page":42},"Technical Reference","\u002Ftechnical-reference","10.technical-reference",[572,576,580,592,603,614,624,635],{"title":573,"path":574,"stem":575},"Introduction","\u002Ftechnical-reference\u002Fplatform-blueprint","10.technical-reference\u002F00.platform-blueprint",{"title":577,"path":578,"stem":579},"REST API","\u002Ftechnical-reference\u002Frest-api","10.technical-reference\u002F01.rest-api",{"title":53,"path":581,"stem":582,"children":583,"page":42},"\u002Ftechnical-reference\u002Fgroundcontrol","10.technical-reference\u002F10.groundcontrol",[584,588],{"title":585,"path":586,"stem":587},"Install & Setup","\u002Ftechnical-reference\u002Fgroundcontrol\u002Finstall","10.technical-reference\u002F10.groundcontrol\u002F10.install",{"title":589,"path":590,"stem":591},"Changelog","\u002Ftechnical-reference\u002Fgroundcontrol\u002Fchangelog","10.technical-reference\u002F10.groundcontrol\u002F20.changelog",{"title":593,"path":594,"stem":595,"children":596,"page":42},"UniteLabs SDK","\u002Ftechnical-reference\u002Fpython-sdk","10.technical-reference\u002F20.python-sdk",[597,600],{"title":585,"path":598,"stem":599},"\u002Ftechnical-reference\u002Fpython-sdk\u002Finstall","10.technical-reference\u002F20.python-sdk\u002F10.install",{"title":589,"path":601,"stem":602},"\u002Ftechnical-reference\u002Fpython-sdk\u002Fchangelog","10.technical-reference\u002F20.python-sdk\u002F20.changelog",{"title":604,"path":605,"stem":606,"children":607,"page":42},"Liquid Handling SDK","\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk","10.technical-reference\u002F30.python-liquid-handling-sdk",[608,611],{"title":585,"path":609,"stem":610},"\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002Finstall","10.technical-reference\u002F30.python-liquid-handling-sdk\u002F10.install",{"title":589,"path":612,"stem":613},"\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002Fchangelog","10.technical-reference\u002F30.python-liquid-handling-sdk\u002F20.changelog",{"title":163,"path":615,"stem":616,"children":617,"page":42},"\u002Ftechnical-reference\u002Flabware","10.technical-reference\u002F40.labware",[618,621],{"title":585,"path":619,"stem":620},"\u002Ftechnical-reference\u002Flabware\u002Finstall","10.technical-reference\u002F40.labware\u002F10.install",{"title":589,"path":622,"stem":623},"\u002Ftechnical-reference\u002Flabware\u002Fchangelog","10.technical-reference\u002F40.labware\u002F20.changelog",{"title":625,"path":626,"stem":627,"children":628,"page":42},"Python Omnibus","\u002Ftechnical-reference\u002Fpython-omnibus","10.technical-reference\u002F50.python-omnibus",[629,632],{"title":585,"path":630,"stem":631},"\u002Ftechnical-reference\u002Fpython-omnibus\u002Finstall","10.technical-reference\u002F50.python-omnibus\u002F10.install",{"title":589,"path":633,"stem":634},"\u002Ftechnical-reference\u002Fpython-omnibus\u002Fchangelog","10.technical-reference\u002F50.python-omnibus\u002F20.changelog",{"title":636,"path":637,"stem":638,"children":639,"page":42},"Python CDK","\u002Ftechnical-reference\u002Fpython-cdk","10.technical-reference\u002F60.python-cdk",[640,643],{"title":585,"path":641,"stem":642},"\u002Ftechnical-reference\u002Fpython-cdk\u002Finstall","10.technical-reference\u002F60.python-cdk\u002F10.install",{"title":589,"path":644,"stem":645},"\u002Ftechnical-reference\u002Fpython-cdk\u002Fchangelog","10.technical-reference\u002F60.python-cdk\u002F20.changelog",{"title":647,"path":648,"stem":649,"children":650},"Connector Development (CDK)","\u002Fconnector-development","20.connector-development",[651,653,672,705,713,744],{"title":647,"path":648,"stem":652},"20.connector-development\u002Findex",{"title":654,"path":655,"stem":656,"children":657,"page":42},"Getting Started","\u002Fconnector-development\u002Fgetting-started","20.connector-development\u002F10.getting-started",[658,661,665,668],{"title":536,"path":659,"stem":660},"\u002Fconnector-development\u002Fgetting-started\u002Foverview","20.connector-development\u002F10.getting-started\u002F10.overview",{"title":662,"path":663,"stem":664},"What's new","\u002Fconnector-development\u002Fgetting-started\u002Fwhats-new","20.connector-development\u002F10.getting-started\u002F20.whats-new",{"title":77,"path":666,"stem":667},"\u002Fconnector-development\u002Fgetting-started\u002Finstallation","20.connector-development\u002F10.getting-started\u002F30.installation",{"title":669,"path":670,"stem":671},"Contributing","\u002Fconnector-development\u002Fgetting-started\u002Fcontributing","20.connector-development\u002F10.getting-started\u002F40.contributing",{"title":673,"path":674,"stem":675,"children":676,"page":42},"Tutorial","\u002Fconnector-development\u002Ftutorial","20.connector-development\u002F20.tutorial",[677,681,685,689,693,697,701],{"title":678,"path":679,"stem":680},"Walkthrough","\u002Fconnector-development\u002Ftutorial\u002Fwalkthrough","20.connector-development\u002F20.tutorial\u002F00.walkthrough",{"title":682,"path":683,"stem":684},"SiLA Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fsila-endpoints","20.connector-development\u002F20.tutorial\u002F10.sila-endpoints",{"title":686,"path":687,"stem":688},"Data Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fdata-endpoints","20.connector-development\u002F20.tutorial\u002F20.data-endpoints",{"title":690,"path":691,"stem":692},"Controls","\u002Fconnector-development\u002Ftutorial\u002Fcontrols","20.connector-development\u002F20.tutorial\u002F30.controls",{"title":694,"path":695,"stem":696},"SiLA Data Types","\u002Fconnector-development\u002Ftutorial\u002Fdata-types","20.connector-development\u002F20.tutorial\u002F40.data-types",{"title":698,"path":699,"stem":700},"Feature","\u002Fconnector-development\u002Ftutorial\u002Fconnector-structure","20.connector-development\u002F20.tutorial\u002F70.connector-structure",{"title":702,"path":703,"stem":704},"Hardware Communication","\u002Fconnector-development\u002Ftutorial\u002Fhardware-communication","20.connector-development\u002F20.tutorial\u002F90.hardware-communication",{"title":94,"path":706,"stem":707,"children":708,"page":42},"\u002Fconnector-development\u002Fconcepts","20.connector-development\u002F30.concepts",[709],{"title":710,"path":711,"stem":712},"SiLA","\u002Fconnector-development\u002Fconcepts\u002Fsila","20.connector-development\u002F30.concepts\u002Fsila",{"title":187,"path":714,"stem":715,"children":716,"page":42},"\u002Fconnector-development\u002Fguides","20.connector-development\u002F40.guides",[717,721,725,729,733,736,740],{"title":718,"path":719,"stem":720},"Configuration","\u002Fconnector-development\u002Fguides\u002Fconfiguration","20.connector-development\u002F40.guides\u002F20.configuration",{"title":722,"path":723,"stem":724},"Deployment","\u002Fconnector-development\u002Fguides\u002Fdeployment","20.connector-development\u002F40.guides\u002F30.deployment",{"title":726,"path":727,"stem":728},"Security","\u002Fconnector-development\u002Fguides\u002Fsecurity","20.connector-development\u002F40.guides\u002F40.security",{"title":730,"path":731,"stem":732},"Subscriptions","\u002Fconnector-development\u002Fguides\u002Fsubscriptions","20.connector-development\u002F40.guides\u002F45.subscriptions",{"title":183,"path":734,"stem":735},"\u002Fconnector-development\u002Fguides\u002Ferror-handling","20.connector-development\u002F40.guides\u002F50.error-handling",{"title":737,"path":738,"stem":739},"Serial Troubleshooting","\u002Fconnector-development\u002Fguides\u002Fserial-troubleshooting","20.connector-development\u002F40.guides\u002F70.serial-troubleshooting",{"title":741,"path":742,"stem":743},"Testing","\u002Fconnector-development\u002Fguides\u002Ftesting","20.connector-development\u002F40.guides\u002F80.testing",{"title":745,"path":746,"stem":747,"children":748},"References","\u002Fconnector-development\u002Freference","20.connector-development\u002F50.reference\u002Findex",[749],{"title":745,"path":746,"stem":747},{"id":751,"title":69,"body":752,"description":1458,"extension":1459,"links":1460,"meta":1461,"navigation":1182,"path":70,"seo":1462,"stem":71,"__hash__":1463},"docs\u002F01.get-started\u002F20.setup\u002F50.headless-install.md",{"type":753,"value":754,"toc":1441},"minimark",[755,759,772,780,785,788,799,802,808,811,851,855,860,867,921,925,936,966,972,976,982,1046,1053,1090,1094,1097,1106,1116,1134,1138,1141,1145,1151,1232,1243,1247,1296,1300,1371,1375,1381,1397,1401,1425,1429,1437],[756,757,758],"p",{},"Connectors are distributed as self-contained executables that bundle their own Python runtime. You can run them directly on any Linux machine without installing GroundControl or Python. This is the typical setup for:",[760,761,762,766,769],"ul",{},[763,764,765],"li",{},"Raspberry Pi devices co-located with instruments",[763,767,768],{},"Headless Linux servers in the lab network",[763,770,771],{},"Environments where a GUI is not practical",[756,773,774,775,779],{},"For workstations and lab PCs with a display, ",[776,777,53],"a",{"href":778},"\u002Fget-started\u002Fsetup\u002Fgroundcontrol\u002F"," is the easier path.",[781,782,784],"h2",{"id":783},"get-the-connector-executable","Get the connector executable",[756,786,787],{},"Contact your UniteLabs representative or download the connector from the UniteLabs connector registry. Executables are named:",[789,790,795],"pre",{"className":791,"code":793,"language":794},[792],"language-text","unitelabs-\u003Cconnector>-\u003Carch>-\u003Cos>-\u003Cversion>\n","text",[796,797,793],"code",{"__ignoreMap":798},"",[756,800,801],{},"For example, on a Raspberry Pi 4 (64-bit):",[789,803,806],{"className":804,"code":805,"language":794},[792],"unitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1\n",[796,807,805],{"__ignoreMap":798},[756,809,810],{},"Common architecture suffixes:",[812,813,814,827],"table",{},[815,816,817],"thead",{},[818,819,820,824],"tr",{},[821,822,823],"th",{},"Architecture",[821,825,826],{},"Suffix",[828,829,830,841],"tbody",{},[818,831,832,836],{},[833,834,835],"td",{},"x86_64 Linux",[833,837,838],{},[796,839,840],{},"x86_64-unknown-linux-gnu",[818,842,843,846],{},[833,844,845],{},"ARM64 Linux (RPi 4\u002F5)",[833,847,848],{},[796,849,850],{},"aarch64-unknown-linux-gnu",[781,852,854],{"id":853},"install-and-configure","Install and configure",[856,857,859],"h3",{"id":858},"_1-place-the-binary","1. Place the binary",[756,861,862,863,866],{},"Create a folder for the connector under ",[796,864,865],{},"\u002Fopt\u002Fconnectors\u002F",":",[789,868,872],{"className":869,"code":870,"language":871,"meta":798,"style":798},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo mkdir -p \u002Fopt\u002Fconnectors\u002Fmicrolab_star\nsudo cp unitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1 \u002Fopt\u002Fconnectors\u002Fmicrolab_star\u002F\nsudo chmod +x \u002Fopt\u002Fconnectors\u002Fmicrolab_star\u002Funitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1\n","bash",[796,873,874,893,907],{"__ignoreMap":798},[875,876,879,883,887,890],"span",{"class":877,"line":878},"line",1,[875,880,882],{"class":881},"sBMFI","sudo",[875,884,886],{"class":885},"sfazB"," mkdir",[875,888,889],{"class":885}," -p",[875,891,892],{"class":885}," \u002Fopt\u002Fconnectors\u002Fmicrolab_star\n",[875,894,896,898,901,904],{"class":877,"line":895},2,[875,897,882],{"class":881},[875,899,900],{"class":885}," cp",[875,902,903],{"class":885}," unitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1",[875,905,906],{"class":885}," \u002Fopt\u002Fconnectors\u002Fmicrolab_star\u002F\n",[875,908,910,912,915,918],{"class":877,"line":909},3,[875,911,882],{"class":881},[875,913,914],{"class":885}," chmod",[875,916,917],{"class":885}," +x",[875,919,920],{"class":885}," \u002Fopt\u002Fconnectors\u002Fmicrolab_star\u002Funitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1\n",[856,922,924],{"id":923},"_2-generate-the-default-config","2. Generate the default config",[756,926,927,928,931,932,935],{},"Run the connector once with the ",[796,929,930],{},"config create"," command to generate a ",[796,933,934],{},"config.json"," with all available fields:",[789,937,939],{"className":869,"code":938,"language":871,"meta":798,"style":798},"cd \u002Fopt\u002Fconnectors\u002Fmicrolab_star\n.\u002Funitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1 --start-cmd \"config create\"\n",[796,940,941,949],{"__ignoreMap":798},[875,942,943,947],{"class":877,"line":878},[875,944,946],{"class":945},"s2Zo4","cd",[875,948,892],{"class":885},[875,950,951,954,957,961,963],{"class":877,"line":895},[875,952,953],{"class":881},".\u002Funitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1",[875,955,956],{"class":885}," --start-cmd",[875,958,960],{"class":959},"sMK4o"," \"",[875,962,930],{"class":885},[875,964,965],{"class":959},"\"\n",[756,967,968,969,971],{},"This writes ",[796,970,934],{}," to the current folder.",[856,973,975],{"id":974},"_3-edit-configjson","3. Edit config.json",[756,977,978,979,981],{},"Open ",[796,980,934],{}," and fill in the instrument-specific settings — typically the connector's hostname or IP address and port it should run on or instrument specifics such as the serial port (This is not required for the Mircolab STAR as it auto-detects the instrument):",[789,983,987],{"className":984,"code":985,"language":986,"meta":798,"style":798},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"serial_port\": \"\",\n  \"sila_server\": {\n    \"hostname\": \"0.0.0.0\",\n    \"port\": 50052,\n    \"tls\": true,\n    \"name\": \"Hamilton Microlab STAR\",\n    ...\n  }\n}\n","json",[796,988,989,994,999,1004,1010,1016,1022,1028,1034,1040],{"__ignoreMap":798},[875,990,991],{"class":877,"line":878},[875,992,993],{},"{\n",[875,995,996],{"class":877,"line":895},[875,997,998],{},"  \"serial_port\": \"\",\n",[875,1000,1001],{"class":877,"line":909},[875,1002,1003],{},"  \"sila_server\": {\n",[875,1005,1007],{"class":877,"line":1006},4,[875,1008,1009],{},"    \"hostname\": \"0.0.0.0\",\n",[875,1011,1013],{"class":877,"line":1012},5,[875,1014,1015],{},"    \"port\": 50052,\n",[875,1017,1019],{"class":877,"line":1018},6,[875,1020,1021],{},"    \"tls\": true,\n",[875,1023,1025],{"class":877,"line":1024},7,[875,1026,1027],{},"    \"name\": \"Hamilton Microlab STAR\",\n",[875,1029,1031],{"class":877,"line":1030},8,[875,1032,1033],{},"    ...\n",[875,1035,1037],{"class":877,"line":1036},9,[875,1038,1039],{},"  }\n",[875,1041,1043],{"class":877,"line":1042},10,[875,1044,1045],{},"}\n",[756,1047,1048,1049,1052],{},"To connect to the UniteLabs cloud, edit the ",[796,1050,1051],{},"cloud_server_endpoint"," block:",[789,1054,1056],{"className":984,"code":1055,"language":986,"meta":798,"style":798},"{\n  \"cloud_server_endpoint\": {\n    \"hostname\": \"\u003Ctenant-id>.unitelabs.io\",\n    \"port\": 443,\n    \"tls\": true\n  }\n}\n",[796,1057,1058,1062,1067,1072,1077,1082,1086],{"__ignoreMap":798},[875,1059,1060],{"class":877,"line":878},[875,1061,993],{},[875,1063,1064],{"class":877,"line":895},[875,1065,1066],{},"  \"cloud_server_endpoint\": {\n",[875,1068,1069],{"class":877,"line":909},[875,1070,1071],{},"    \"hostname\": \"\u003Ctenant-id>.unitelabs.io\",\n",[875,1073,1074],{"class":877,"line":1006},[875,1075,1076],{},"    \"port\": 443,\n",[875,1078,1079],{"class":877,"line":1012},[875,1080,1081],{},"    \"tls\": true\n",[875,1083,1084],{"class":877,"line":1018},[875,1085,1039],{},[875,1087,1088],{"class":877,"line":1024},[875,1089,1045],{},[856,1091,1093],{"id":1092},"_4-test-run","4. Test run",[756,1095,1096],{},"Run the connector directly to verify it starts and connects to the instrument:",[789,1098,1100],{"className":869,"code":1099,"language":871,"meta":798,"style":798},".\u002Funitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1\n",[796,1101,1102],{"__ignoreMap":798},[875,1103,1104],{"class":877,"line":878},[875,1105,1099],{"class":881},[756,1107,1108,1109,1112,1113,1115],{},"Check the logs for any connection errors. Press ",[796,1110,1111],{},"Ctrl+C"," to stop. The default logging config writes a log file in the\nspecified folder in the ",[796,1114,934],{},". For troubleshooting during a headless install, we recommend starting a connector\nin a more verbose mode that prints the logs to the terminal",[789,1117,1119],{"className":869,"code":1118,"language":871,"meta":798,"style":798},".\u002Funitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1 --start-cmd \"connector start -vvv\"\n",[796,1120,1121],{"__ignoreMap":798},[875,1122,1123,1125,1127,1129,1132],{"class":877,"line":878},[875,1124,953],{"class":881},[875,1126,956],{"class":885},[875,1128,960],{"class":959},[875,1130,1131],{"class":885},"connector start -vvv",[875,1133,965],{"class":959},[781,1135,1137],{"id":1136},"register-as-a-systemd-service","Register as a systemd service",[756,1139,1140],{},"For production use, register the connector as a systemd service so it starts automatically on boot and restarts on failure.",[856,1142,1144],{"id":1143},"create-the-service-file","Create the service file",[756,1146,1147,1148,866],{},"Create ",[796,1149,1150],{},"\u002Fetc\u002Fsystemd\u002Fsystem\u002Ful-microlab-star.service",[789,1152,1156],{"className":1153,"code":1154,"language":1155,"meta":798,"style":798},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[Unit]\nDescription=UniteLabs Microlab STAR\nAfter=network.target\nWants=network-online.target\n\n[Service]\nUser=\u003Cyour-user>\nWorkingDirectory=\u002Fopt\u002Fconnectors\u002Fmicrolab_star\nExecStart=\u002Fopt\u002Fconnectors\u002Fmicrolab_star\u002Funitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1\nRestart=on-failure\nRestartSec=10\n\n[Install]\nWantedBy=multi-user.target\n","ini",[796,1157,1158,1163,1168,1173,1178,1184,1189,1194,1199,1204,1209,1215,1220,1226],{"__ignoreMap":798},[875,1159,1160],{"class":877,"line":878},[875,1161,1162],{},"[Unit]\n",[875,1164,1165],{"class":877,"line":895},[875,1166,1167],{},"Description=UniteLabs Microlab STAR\n",[875,1169,1170],{"class":877,"line":909},[875,1171,1172],{},"After=network.target\n",[875,1174,1175],{"class":877,"line":1006},[875,1176,1177],{},"Wants=network-online.target\n",[875,1179,1180],{"class":877,"line":1012},[875,1181,1183],{"emptyLinePlaceholder":1182},true,"\n",[875,1185,1186],{"class":877,"line":1018},[875,1187,1188],{},"[Service]\n",[875,1190,1191],{"class":877,"line":1024},[875,1192,1193],{},"User=\u003Cyour-user>\n",[875,1195,1196],{"class":877,"line":1030},[875,1197,1198],{},"WorkingDirectory=\u002Fopt\u002Fconnectors\u002Fmicrolab_star\n",[875,1200,1201],{"class":877,"line":1036},[875,1202,1203],{},"ExecStart=\u002Fopt\u002Fconnectors\u002Fmicrolab_star\u002Funitelabs-microlab-star-aarch64-unknown-linux-gnu-0.3.1\n",[875,1205,1206],{"class":877,"line":1042},[875,1207,1208],{},"Restart=on-failure\n",[875,1210,1212],{"class":877,"line":1211},11,[875,1213,1214],{},"RestartSec=10\n",[875,1216,1218],{"class":877,"line":1217},12,[875,1219,1183],{"emptyLinePlaceholder":1182},[875,1221,1223],{"class":877,"line":1222},13,[875,1224,1225],{},"[Install]\n",[875,1227,1229],{"class":877,"line":1228},14,[875,1230,1231],{},"WantedBy=multi-user.target\n",[1233,1234,1236],"callout",{"icon":1235},"i-heroicons-information-circle",[756,1237,1238,1239,1242],{},"Name all UniteLabs services with the ",[796,1240,1241],{},"ul-"," prefix — it makes them easy to list and manage together.",[856,1244,1246],{"id":1245},"enable-and-start","Enable and start",[789,1248,1250],{"className":869,"code":1249,"language":871,"meta":798,"style":798},"sudo systemctl daemon-reload\nsudo systemctl enable ul-microlab-star\nsudo systemctl start ul-microlab-star\nsudo systemctl status ul-microlab-star\n",[796,1251,1252,1262,1274,1285],{"__ignoreMap":798},[875,1253,1254,1256,1259],{"class":877,"line":878},[875,1255,882],{"class":881},[875,1257,1258],{"class":885}," systemctl",[875,1260,1261],{"class":885}," daemon-reload\n",[875,1263,1264,1266,1268,1271],{"class":877,"line":895},[875,1265,882],{"class":881},[875,1267,1258],{"class":885},[875,1269,1270],{"class":885}," enable",[875,1272,1273],{"class":885}," ul-microlab-star\n",[875,1275,1276,1278,1280,1283],{"class":877,"line":909},[875,1277,882],{"class":881},[875,1279,1258],{"class":885},[875,1281,1282],{"class":885}," start",[875,1284,1273],{"class":885},[875,1286,1287,1289,1291,1294],{"class":877,"line":1006},[875,1288,882],{"class":881},[875,1290,1258],{"class":885},[875,1292,1293],{"class":885}," status",[875,1295,1273],{"class":885},[856,1297,1299],{"id":1298},"common-service-commands","Common service commands",[789,1301,1303],{"className":869,"code":1302,"language":871,"meta":798,"style":798},"# List all UniteLabs services\nsystemctl list-units | grep ul-\n\n# Check logs\njournalctl -u ul-microlab-star -f\n\n# Restart after a config change\nsudo systemctl restart ul-microlab-star\n",[796,1304,1305,1311,1328,1332,1337,1351,1355,1360],{"__ignoreMap":798},[875,1306,1307],{"class":877,"line":878},[875,1308,1310],{"class":1309},"sHwdD","# List all UniteLabs services\n",[875,1312,1313,1316,1319,1322,1325],{"class":877,"line":895},[875,1314,1315],{"class":881},"systemctl",[875,1317,1318],{"class":885}," list-units",[875,1320,1321],{"class":959}," |",[875,1323,1324],{"class":881}," grep",[875,1326,1327],{"class":885}," ul-\n",[875,1329,1330],{"class":877,"line":909},[875,1331,1183],{"emptyLinePlaceholder":1182},[875,1333,1334],{"class":877,"line":1006},[875,1335,1336],{"class":1309},"# Check logs\n",[875,1338,1339,1342,1345,1348],{"class":877,"line":1012},[875,1340,1341],{"class":881},"journalctl",[875,1343,1344],{"class":885}," -u",[875,1346,1347],{"class":885}," ul-microlab-star",[875,1349,1350],{"class":885}," -f\n",[875,1352,1353],{"class":877,"line":1018},[875,1354,1183],{"emptyLinePlaceholder":1182},[875,1356,1357],{"class":877,"line":1024},[875,1358,1359],{"class":1309},"# Restart after a config change\n",[875,1361,1362,1364,1366,1369],{"class":877,"line":1030},[875,1363,882],{"class":881},[875,1365,1258],{"class":885},[875,1367,1368],{"class":885}," restart",[875,1370,1273],{"class":885},[856,1372,1374],{"id":1373},"back-up-the-service-file","Back up the service file",[756,1376,1377,1378,1380],{},"Store a copy of the service file alongside the connector binary so the setup can be fully reconstructed from ",[796,1379,865],{}," alone:",[789,1382,1384],{"className":869,"code":1383,"language":871,"meta":798,"style":798},"sudo cp \u002Fetc\u002Fsystemd\u002Fsystem\u002Ful-microlab-star.service \u002Fopt\u002Fconnectors\u002Fmicrolab_star\u002F\n",[796,1385,1386],{"__ignoreMap":798},[875,1387,1388,1390,1392,1395],{"class":877,"line":878},[875,1389,882],{"class":881},[875,1391,900],{"class":885},[875,1393,1394],{"class":885}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Ful-microlab-star.service",[875,1396,906],{"class":885},[781,1398,1400],{"id":1399},"notes","Notes",[760,1402,1403,1410,1418],{},[763,1404,1405,1406,1409],{},"The connector binary unpacks a Python runtime into a ",[796,1407,1408],{},".cache\u002F"," directory on first run. This is expected behavior shared across all connectors.",[763,1411,1412,1413,1417],{},"Each connector must use a ",[1414,1415,1416],"strong",{},"unique port"," for its local SiLA 2 server. By convention, assign ports incrementally (50052, 50053, 50054, …) or use a site-specific range.",[763,1419,1420,1421,1424],{},"See ",[776,1422,57],{"href":1423},"\u002Fget-started\u002Fsetup\u002Fnetwork-requirements\u002F"," for firewall rules and other security settings.",[781,1426,1428],{"id":1427},"example-multi-connector-raspberry-pi-setup","Example: multi-connector Raspberry Pi setup",[756,1430,1431,1432,1436],{},"For a complete example of multiple connectors running on a single Raspberry Pi — including folder layout, active services, and troubleshooting — see the ",[776,1433,1435],{"href":1434},"\u002Fget-started\u002Fsetup\u002Fraspberry-pi\u002F","Raspberry Pi deployment example",".",[1438,1439,1440],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":798,"searchDepth":878,"depth":895,"links":1442},[1443,1444,1450,1456,1457],{"id":783,"depth":895,"text":784},{"id":853,"depth":895,"text":854,"children":1445},[1446,1447,1448,1449],{"id":858,"depth":909,"text":859},{"id":923,"depth":909,"text":924},{"id":974,"depth":909,"text":975},{"id":1092,"depth":909,"text":1093},{"id":1136,"depth":895,"text":1137,"children":1451},[1452,1453,1454,1455],{"id":1143,"depth":909,"text":1144},{"id":1245,"depth":909,"text":1246},{"id":1298,"depth":909,"text":1299},{"id":1373,"depth":909,"text":1374},{"id":1399,"depth":895,"text":1400},{"id":1427,"depth":895,"text":1428},"Run connectors as standalone executables on servers, Raspberry Pi, and other headless Linux devices — no GUI required.","md",null,{},{"title":69,"description":1458},"qveMIrFHOJ0gw37ewAew23TbFMDfGOuVwV2UyeuACZ0",[1465,1467],{"title":65,"path":66,"stem":67,"description":1466},"Server-initiated connection — this page explains what it enables and how to turn it on with a single setting.",{"title":73,"path":74,"stem":75,"description":1468},"Running multiple UniteLabs connectors on a Raspberry Pi — folder structure, systemd services, and common operations.",1783607758408]