Skip to content

Conversation

@BioCam
Copy link
Collaborator

@BioCam BioCam commented Nov 24, 2025

Hi everyone,

New PyLabRobot integration: the Inheco Incubator Shaker

inheco_incubator_shaker_physical_setup_overview

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:

Screenshot 2025-11-24 at 17 14 01

in code (see docs notebook for more details):

from pylabrobot.storage.inheco import IncubatorShakerStack, InhecoIncubatorShakerStackBackend

iis_stack_backend = InhecoIncubatorShakerStackBackend(dip_switch_id = 2)
iis_stack = IncubatorShakerStack(backend=iis_stack_backend)

await iis_stack.setup(verbose=True)

# Connected to Inheco Incubator Shaker Stack on /dev/cu.usbserial-130
# DIP switch ID of bottom unit: 2
# Number of connected units: 2
# Unit composition: {0: 'incubator_shaker_mp', 1: 'incubator_shaker_dwp'}

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).

BioCam and others added 30 commits June 13, 2025 23:12
Copy link
Member

Choose a reason for hiding this comment

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

?

Copy link
Contributor

Copilot AI left a 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.

Comment on lines +1447 to +1453
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)
Copy link

Copilot AI Dec 1, 2025

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.

Copilot uses AI. Check for mistakes.
rickwierenga and others added 3 commits December 1, 2025 12:42
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
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