Skip to content

Add Pioreactor#893

Open
har1eyk wants to merge 7 commits intoPyLabRobot:mainfrom
har1eyk:add-pioreactor
Open

Add Pioreactor#893
har1eyk wants to merge 7 commits intoPyLabRobot:mainfrom
har1eyk:add-pioreactor

Conversation

@har1eyk
Copy link
Contributor

@har1eyk har1eyk commented Feb 14, 2026

The Pioreactor is a small-volume cultivation bioreactor that pairs well with automated liquid handling.

pioreactor_20mL

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do you happen to have a resource definition for this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Pioreactor is implemented as a skirted 1×1 Plate (PioreactorPlate) with a single circular well (A1) so it can be assigned to existing PlateHolders (e.g. Hamilton_MFX_plateholder_DWP_metal_tapped_10mm_3dprint).

Code: pylabrobot/resources/pioreactor/plates.py

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think maybe we should make PlateHolder accept other resources then. It does not really make sense to index A1 into what is just a single container. I could also imagine Bioreactor (Resource) > Container as a child if people switch out the container frequently

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also in this case I was specifically asking about the adapter "This ANSI-compatible adapter allows the Pioreactor to be placed on the deck."

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why a Plate rather than a single Container instance?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I chose a skirted 1×1 Plate to stay within PLR’s existing deck/labware model. PlateHolders already expect Plates, collision/geometry logic is mature, and well addressing (A1) fits naturally.

While physically it’s a single vessel, modeling it as a Plate avoids adding special-case handling for a Container-like resource on the deck.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rickwierenga
Copy link
Member

does it need a backend to work? is that something that would be valuable to include in PLR?

@har1eyk
Copy link
Contributor Author

har1eyk commented Feb 16, 2026

does it need a backend to work? is that something that would be valuable to include in PLR?

The resource definition itself does not require a PLR backend.

The Pioreactor already exposes its own control layer via HTTP API and job system. In this model, PLR acts purely as an orchestration layer rather than a hardware controller.

I’ve been successfully interfacing with the Pioreactor using simple API calls from PLR scripts (start/stop stirring, OD readings, logging events, etc.).

Conceptually this fits PLR’s existing pattern of integrating with externally-managed devices rather than introducing a new backend.

Longer-term, a lightweight Pioreactor backend could be valuable if deeper synchronization or tighter lifecycle management becomes desirable, but basic interoperability works well via the API alone.

@har1eyk har1eyk requested a review from rickwierenga February 16, 2026 14:27
@rickwierenga
Copy link
Member

Conceptually this fits PLR’s existing pattern of integrating with externally-managed devices rather than introducing a new backend.

so far PLR does not have a pattern of using externally managed devices, this would be a first

why not add the backend for it? the api will be the same for everyone and then it'll just work out of the box

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants