Inheco ODTC Integration
Write, load and start ODTC thermal methods via Python
Store and edit thermal methods, start a run by name, open and close the door, and stream block and lid temperatures in code. No SOAP client to build.
- Models supported
- ODTC 96, 384, 96XL, 384XL
- Connects over
- Ethernet (SiLA 1)
- Vendor software
- None required
- Runs on
- Linux / Windows / MacOS
What You Can Command on the ODTC
Methods, runs, temperatures, the door and device status each arrive as their own callable capability, so your code runs the ODTC directly.
Method Library
Add, replace and delete methods and pre-methods by name, as typed steps or as raw MethodSet XML, without touching the rest of the library.
Method Steps
Plateau temperature and time, ramp slope, overshoot, loops, lid temperature and PID set per step, all typed with their units.
Run Control
Start a stored method by name with live progress and time remaining, and stop it mid-run.
Temperature Monitoring
A live stream of mount, lid, heatsink and ambient temperatures, plus the temperature trace of the last run.
Door Control
Open and close the door from code, so a plate handler can load and unload without an operator.
Status and Recovery
A status stream, device identification, pause and resume between processes, and a reset that re-initializes the ODTC.
Run a Method From Python
Ordinary async Python. Version it, test it, generate it at runtime like any other code.
# find the ODTC, list its methods, run one, read the trace
from unitelabs.sdk import AsyncApiClient
client = AsyncApiClient()
odtc = await client.get_service_by_name(name="Inheco ODTC")
print(await odtc.method_service.get_method_names())
await odtc.door_controller.close()
# resolves when the run finishes
await odtc.method_service.start(method="PCR_30_cycles", priority=1)
trace = await odtc.temperature_provider.get_last_data()
await odtc.door_controller.open()
Know One Connector, and You Know Them All
Three calls bring any instrument online, and the same Python drives whatever comes next.
One API, Every Instrument
Three calls to start: configure(), initialize(), activate(). The same on a liquid handler, a reader or an incubator, whatever the vendor ships underneath.
Ask a Connector What It Can Do
Modules and actions are discoverable at runtime, and parameters carry their own types, units and constraints. You don't need a PDF to find out.
Also Works With…
The same Python script can drive every instrument on the bench. A liquid handler sets up the plate, a thermal cycler can cycle it, and a reader measures it, all from one script.
Inheco ODTC FAQ
The questions automation engineers ask before integrating an ODTC.
Yes. With the UniteLabs connector you call the ODTC from Python: store a thermal method, start it by name, open and close the door, and read block and lid temperatures. It's ordinary async Python, so it can be version-controlled, tested and generated at runtime like any other code.
Over Ethernet, using the ODTC's own SiLA 1 interface. The connector finds the device by the node name on its SiLA label (ODTC_ followed by six characters), and falls back to a static IP or a MAC address sweep where name discovery is unreliable on your network.
The ODTC reports finished commands back to a small event listener on the connector host, so it needs to reach that host on the lab network. On Windows the connector adds the firewall rule itself. Toward your tenant it opens one outbound TLS connection on port 443.
Yes. The ODTC ships with a SiLA 1 interface, and the connector exposes it as a SiLA 2 service on a local gRPC port, grouped into modules you can list at runtime. Find out more about how we use the SiLA 2 standard for instrument interoperability.
Yes. Add or replace a single method or pre-method by name and the rest of the library stays as it is. Build steps as typed data (plateau temperature and time, slope, overshoot, loops, lid temperature, PID set) or push MethodSet XML you already have.
A method's start block temperature has to match the last pre-method or the previous method's post-heating temperature. When it doesn't, the connector says so in the error.
The ODTC 96, ODTC 384, ODTC 96XL and ODTC 384XL, currently. Each method declares whether it targets the 96-well or 384-well block.
Yes. Set the connector to simulated mode and it keeps a method library in memory, preloaded with an example method, so you can add, replace, delete and start methods from your script before a run on hardware.