this is a minor release with some improvements and bug fixes from the last release.
25.2.11
Enhancements
-
New OD Calibration: Introduced a new OD calibration using standards (requires multiple vials). Run:
pio calibrations run --device od
Inspired by the plugin by @odcambc.
-
UI Improvements:
- Improved chart colors.
- Added the ability to choose the level of detail on the new Event Logs page.
-
New OD Reading Option: The OD reading CLI now includes a
--snapshot
option to start the job, take a single reading, and exit. This is useful for scripting. -
New Pump Control CLI: Introduced a new CLI for pumps:
pio run pumps --media 1 --waste 2
This command will add 1ml of media and remove 2ml of waste. The order matters, and pumps can be specified multiple times:
pio run pumps --waste 2 --media 1 --waste 2
This new CLI is really useful for experiment profiles. For example, a chemostat can be “programmed” as (but don’t actually do this, using a dosing automation):
common: jobs: pumps: actions: - type: repeat hours_elapsed: 0 # start immediately repeat_every_hours: 0.5 # every 30m, run the following actions actions: - type: start hours_elapsed: 0 options: media: 1 waste: 2
-
Experiment & System Enhancements:
- Initial support for 40ml model.
- Ability to run multiple experiment profiles per experiment.
- Users can now specify which Pioreactor to update on the Updates page (available only with release archives).
- Stirring calibration is now included as part of the self-test.
- Improved stirring job handling when OD readings have long pauses.
-
Previously, if a worker’s web server was down, an update would be blocked. Now, the leader will first attempt the web server, and if a 5xx error is observed, it will attempt SSH communication instead.
Web API Changes
- Introduced:
GET /unit_api/jobs/running/<job>
GET /api/experiment_profiles/running/experiments/<experiment>
Breaking Changes
-
Calibration Structs:
predict
→x_to_y
ipredict
→y_to_x
- This change makes naming clearer.
-
Plugin Migration (Upcoming):
- Plugins should migrate from
click_some_name
to auto-discovered plugins by importingrun
. - Example migration:
import click from pioreactor.cli.run import run @run.command("my_name") @click.option("--my_option") def my_name(my_option): ...
- Plugins should migrate from
Bug Fixes
- Fixed UI not displaying third-party calibrations.
- Experiment profiles now directly use
unit_api/
, potentially mitigating Huey worker stampedes when starting multiple jobs. - Fixed
pio calibrations run ... -y
not saving as active. - Fixed manual dosing issues in the UI.
- Fixed manual log recording in the UI.
- There was a race condition between
monitor
and a db creation job that was preventing themonitor
job from starting. Awkwardly, this only seemed to happen on power cycles, and only sometimes. This escaped our testing. We’ve fixed it by improving how we initialize the dbs, and how we connect to them.