Skip to content

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

Merged
rickwierenga merged 8 commits into
mainfrom
highres-tundrastore-driver
Aug 26, 2026
Merged

feat(highres): add TundraStore/SteriStore plate store driver#1090
rickwierenga merged 8 commits into
mainfrom
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

@rickwierenga rickwierenga changed the title feat(highres): add TundraStore plate store driver feat(highres): add TundraStore/SteriStore plate store driver Jun 15, 2026
@vikichu

vikichu commented Jul 25, 2026

Copy link
Copy Markdown

Is this compatible with the AmbiStore? The AmbiStore is the same commands as the TundraStore without the refrigeration.

@rickwierenga

Copy link
Copy Markdown
Member Author

should be! do you have one to test it with?

@vikichu

vikichu commented Jul 25, 2026

Copy link
Copy Markdown

Yes! I will test when I find time! Thanks!

@rickwierenga

Copy link
Copy Markdown
Member Author

sweet, I dont have one for testing, so would appreciate the feedback there! the docs I have are actually for tundra store but work just the same on steri. look forward to hearing how it goes, please dont hesitate to reach out

@rickwierenga
rickwierenga force-pushed the v1b1 branch 2 times, most recently from 6af085c to 1ae9dc6 Compare August 1, 2026 20:32
@rickwierenga
rickwierenga changed the base branch from v1b1 to main August 20, 2026 22:57
@rickwierenga
rickwierenga force-pushed the highres-tundrastore-driver branch from 40c8fd7 to 3c7698e Compare August 21, 2026 17:49
@rickwierenga
rickwierenga force-pushed the highres-tundrastore-driver branch from 292e06c to 6556314 Compare August 25, 2026 03:42
@rickwierenga
rickwierenga merged commit 03a0e78 into main Aug 26, 2026
21 checks passed
@rickwierenga
rickwierenga deleted the highres-tundrastore-driver branch August 26, 2026 23:55
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