-
Notifications
You must be signed in to change notification settings - Fork 122
Integrate Inheco Incubator Shaker #765
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Integrate Inheco Incubator Shaker #765
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR integrates support for the Inheco Incubator Shaker Stack, a modular temperature control and shaking device for laboratory automation. The implementation provides a comprehensive async backend for serial communication via FTDI USB, supporting stacks of up to 5 units with different configurations (MP/DWP, with/without shaker).
Key Changes
- Complete backend implementation with CRC-validated serial protocol
- Frontend classes for stack-level and unit-level control
- Enhanced Serial.py with VID:PID-based auto-discovery
- Comprehensive documentation with tutorial notebook
Reviewed changes
Copilot reviewed 8 out of 12 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
pylabrobot/storage/inheco/incubator_shaker_backend.py |
Implements async serial backend with firmware protocol, error handling, and complete API for temperature/shaking control |
pylabrobot/storage/inheco/incubator_shaker.py |
Frontend resource class managing stack geometry and master control commands |
pylabrobot/io/serial.py |
Enhanced with VID:PID auto-discovery for USB devices |
pylabrobot/storage/inheco/__init__.py |
Module exports for new integration |
docs/user_guide/01_material-handling/storage/inheco/incubator_shaker.ipynb |
Tutorial notebook with usage examples |
_typos.toml |
Added firmware command abbreviations to dictionary |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| async def request_thermal_calibration_date(self, stack_index: int) -> str: | ||
| """EEPROM request: Query the date of the last thermal calibration. | ||
|
|
||
| Returns: | ||
| Calibration date in ISO format 'YYYY-MM-DD'. | ||
| """ | ||
| return await self.backend.request_thermal_calibration_date(stack_index=self.index) |
Copilot
AI
Dec 1, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unused parameter: The stack_index parameter is passed to this method but never used in the function body. The method calls self.backend.request_thermal_calibration_date(stack_index=self.index) using self.index instead of the passed stack_index parameter. Either remove the parameter from the method signature or use it correctly.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Hi everyone,
New PyLabRobot integration: the Inheco Incubator Shaker
I've added a thorough docs tutorial to showcase how powerful this small machine is and how to use it programmatically.
Simple overview of the implementation:
in code (see docs notebook for more details):
TODO: test the resource definition I created for it (hence not yet in the docs tutorial, might require a recipe since it is getting a bit beyond basic control).