Skip to content

feat(highres): add TundraStore/SteriStore plate store driver#1090

Open
rickwierenga wants to merge 2 commits into
v1b1from
highres-tundrastore-driver
Open

feat(highres): add TundraStore/SteriStore plate store driver#1090
rickwierenga wants to merge 2 commits into
v1b1from
highres-tundrastore-driver

Conversation

@rickwierenga

Copy link
Copy Markdown
Member

Summary

Adds a PyLabRobot driver for the HighRes Biosolutions TundraStore (branded "SteriStore") refrigerated automated plate store. The device exposes a line-based text protocol over TCP port 1000 (ACK! echo → optional data → OK!/ABORTED!/ERROR! completion).

New package pylabrobot/highres/tundrastore/, modeled on the v1b1 Cytomat driver:

  • TundraStoreBackend — transport over pylabrobot.io.socket.Socket, with command framing + error-stack parsing. Mixes in the AutomatedRetrieval, TemperatureController, and (read-only) HumidityController capability backends + Driver. Exposes low-level home / pick(stacker, slot, nest) / place / door / barcode commands and status queries (version, doors, nests, spatula, environment, stacker dimensions).
  • TundraStoreChatterboxBackend — device-free backend for offline testing.
  • TundraStoreResource + Device frontend (racks → stackers, capability registration), mirroring the Cytomat frontend.
  • backend_tests.py — 13 tests driven by real responses captured from hardware (firmware 3.0.0.119, serial HRB-2209-35148), including the real ERROR! home … Unable to close all doors stack.

Validation

  • 13 unit tests pass; ruff format/ruff check and mypy clean.
  • Verified live against the device (read-only queries): version, homed state, nests, doors, temperature (21.9 °C), humidity, and 14-stacker layout all read back correctly through the backend.

Open question / follow-up

The TundraStore has two transfer nests, but the AutomatedRetrieval capability is single-loading-tray. For now the capability uses a configurable loading_tray_nest (default 1); pick/place can address either nest directly. A proper two-nest mapping is left as a follow-up.

The temperature/humidity setter paths (environmentset TEMP …, environment TEMP off) are constructed from the manual's command grammar but not yet hardware-verified (couldn't safely run state changes during testing). Read paths are verified.

🤖 Generated with Claude Code

rick and others added 2 commits June 12, 2026 17:57
Add a PyLabRobot driver for the HighRes Biosolutions TundraStore
(branded "SteriStore") refrigerated automated plate store, which speaks
a line-based text protocol over TCP port 1000.

- TundraStoreBackend: pylabrobot.io.socket.Socket transport with ACK /
  data / completion (OK!/ABORTED!/ERROR!) framing and error-stack parsing.
  Implements AutomatedRetrieval, TemperatureController and (read-only)
  HumidityController capabilities, plus low-level home/pick/place/door/
  barcode commands and status queries (version, doors, nests, spatula,
  environment, stacker dimensions).
- TundraStoreChatterboxBackend for device-free use.
- TundraStore frontend (Resource + Device) modeled on Cytomat.
- Tests driven by real captured firmware-3.0.0.119 responses.

Note: the device has two transfer nests; mapping the single-loading-tray
AutomatedRetrieval model onto both is left as a follow-up — the capability
currently uses a configurable single nest (default 1).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…'s two nests

Add an optional 0-based `tray` argument to AutomatedRetrieval.fetch_plate_to_
loading_tray / store_plate (and the backend abstract methods). `tray=None`
selects the device default, so all existing callers are unaffected.

- Single-tray devices (Cytomat, Heraeus, Liconic) validate via the new
  ensure_single_tray() helper (accept None/0, reject others).
- TundraStore maps tray i -> device nest i+1; the frontend now models both
  nests as TundraStore.nests[0|1] with per-tray plate tracking
  (fetch_plate_to_nest / take_in_plate take a `tray`).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@rickwierenga rickwierenga changed the title feat(highres): add TundraStore plate store driver feat(highres): add TundraStore/SteriStore plate store driver Jun 15, 2026
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.

1 participant