Skip to content

Releases: Pioreactor/pioreactor

25.6.24rc0

24 Jun 17:23

Choose a tag to compare

25.6.24rc0 Pre-release
Pre-release

Upcoming

Enhancements

  • We previously introduced the ability for stirring to "dodge" OD reading by turning itself off during an OD snapshot. This proved useful, but users wanted the generalized ability to modify the RPM to any value during a snapshot. For example, slow down the RPM during a snapshot, instead of stopping stirring. Another use case is to set the RPM during a snapshot to be equal to the RPM when an OD calibration was performed. We've introduced two new stirring configuration parameters, only used when dodging is active:
    1. target_rpm_during_od_reading: the RPM when an OD snapshot is performed.
    2. target_rpm_outside_od_reading: the RPM outside a snapshot.
      We highly recommend having a stirring calibration active while using these.
  • There's a new "Advanced" start option in the UI to modify configuration temporarily when starting a job. The options shown are from the section [<job_name>.config]. This is useful for changing different configurations without changing the config files.
  • The above uses a new convention in pio run CLI command. You can provide configuration overrides with the --config-override option. Example:
    pio run --config-override od_reading.config interval 0.1 od_reading
    
    or
    pio run --config-override stirring.config initial_duty_cycle 25 --config-override mqtt username pp stirring
    
  • You can even use config overrides in experiment profiles (must be applied to the start action.)
    common:
      jobs:
        od_reading:
          actions:
             - type: start
               hours_elapsed: 0.5
               config_overrides:
                 samples_per_second: 0.1
                 ir_led_intensity: 70
             ...
  • We moved our Extended Kalman Filter code out of this repo into it's own Python library: grpredict.
  • Chemostat modal in the UI now shows the computed dilution rate
  • New "Duplicate" profiles button.
  • Experimental: Adding an experimental new feature that will detect a pump malfunction by comparing the OD before and after dosing. If the post-OD falls outside some expected bound (default is 20%), the dosing is paused until a user comes to unpause it. To enable this feature, set dosing_automation.config parameter experimental_detect_pump_malfunction to True.
    • This only applies to the current implementations of turbidostat and chemostat in our software.
    • This feature relies on 1) Accurate initial volume (inputted when you start the automation), 2) accurate pump calibrations, 3) clear media
  • Calibration charts have new crosshairs
  • The config [mqtt] broker_address can now be a list of addresses, separated by ;. Example:
    [mqtt]
    broker_address=pio01.local;100.119.150.2;localhost
    
  • Performance improvements
  • Backing up database now checks if the worker has enough disk space, and skips if not.

Breaking changes

  • In configuration, [stirring.config] parameter target_rpm is renamed to initial_target_rpm. This is better for letting users know that the RPM can be changed during a run.
  • floats are rounded to 12 decimals points in data exports.
  • localtime in data exports have subsecond precision.
  • Changed dosing automation variables names:
  • max_volume to max_working_volume_ml (also changed in config.ini)
  • liquid_volume to current_volume_ml
  • Chemostat and Turbidostat automations stopped using volume kwarg and now use exchange_volume_ml.

Bug fixes

  • included new export dataset yaml for raw OD readings. This was missed in a previous release.
  • experiment profiles now check the syntax of nested actions before starting the execution.

25.6.3

03 Jun 18:24

Choose a tag to compare

25.6.3

(hotfix patch)

Bug fixes

  • update Adafruit-Blinka to fix USB issue.
  • Fix for HardwarePWM on RPi5 on linux kernel 6.6

25.5.22

22 May 18:38

Choose a tag to compare

25.5.22

Enhancements

  • new System logs under Inventory to track logs happening outside of experiments in your cluster.
  • Better organization of logs in the UI. System logs, like calibrations, worker additions, etc. won't show up on the Overview page.
  • Exported data zips have folders for each dataset requested.
  • Improvements to the Kalman filter. For users using the growth-rate model with media dosing, you should see improvements to your growth-rate time series. We recommend the following configuration:
[growth_rate_kalman]
# obs_std ↑ smooths growth rate, rate_std ↑ more responsive growth rate
obs_std=1.5
od_std=0.0025
rate_std=0.25

Note: the acceleration term is removed

  • Added the column hours_since_experiment_created to dataset exports that details hours since experiment was created.
  • A running pump now fires off an incremental dosing event every N seconds (N=0.5 currently) to tell the software its progress. Previously, we would fire off a single event that represented the total amount moved. This is most noticeable when watching the vial volume change over time (looks more accurate over a short period).
  • When a pump runs, it first fires off a dosing_event, which stores information about how much liquid is moved. However, if the pump is stopped early, there was no correction issued to the amount of liquid actually moved. Now, when a pump is stopped early, a negative volume is sent s.t. the delta between the initial amount and new amount is equal to the dosed amount (so when you sum up the volume changes, you get the actual change, as expected).
  • Performance optimizations
  • New image installs only:
    • updated base OS to the latest 25-05-06 Raspberry Pi OS. The big change is using Linux kernel 6.12.

Bug fixes

  • fixed stir bar not spinning on Pioreactor page (UI) in some cases
  • alert user if their OD reading is constant before starting the growth-rate calculator, which would break things.
  • alert user if their software is installed in a non-standard location. If so, try pip uninstall pioreactor -y.
  • Added a warning if the OD calibration is invalid (ex: a constant line)
  • Fix for Raspberry Pi 5 using upstream Adafruit libraries.

25.5.22rc0

22 May 14:14

Choose a tag to compare

25.5.22rc0 Pre-release
Pre-release

Enhancements

  • new System logs under Inventory to track logs happening outside of experiments in your cluster.
  • Better organization of logs in the UI. System logs, like calibrations, worker additions, etc. won't show up on the Overview page.
  • Exported data zips have folders for each dataset requested.
  • Improvements to the Kalman filter. For users using the growth-rate model with media dosing, you should see improvements to your growth-rate time series. We recommend the following configuration:
[growth_rate_kalman]
# obs_std ↑ smooths growth rate, rate_std ↑ more responsive growth rate
obs_std=1.5
od_std=0.0025
rate_std=0.25

Note: the acceleration term is removed

  • Added the column hours_since_experiment_created to dataset exports that details hours since experiment was created.
  • A running pump now fires off an incremental dosing event every N seconds (N=0.5 currently) to tell the software its progress. Previously, we would fire off a single event that represented the total amount moved. This is most noticeable when watching the vial volume change over time (looks more accurate over a short period).
  • When a pump runs, it first fires off a dosing_event, which stores information about how much liquid is moved. However, if the pump is stopped early, there was no correction issued to the amount of liquid actually moved. Now, when a pump is stopped early, a negative volume is sent s.t. the delta between the initial amount and new amount is equal to the dosed amount (so when you sum up the volume changes, you get the actual change, as expected).
  • Performance optimizations
  • New image installs only:
    • updated base OS to the latest 25-05-06 Raspberry Pi OS. The big change is using Linux kernel 6.12.

Bug fixes

  • fixed stir bar not spinning on Pioreactor page (UI) in some cases
  • alert user if their OD reading is constant before starting the growth-rate calculator, which would break things.
  • alert user if their software is installed in a non-standard location. If so, try pio uninstall pioreactor -y.
  • Added a warning if the OD calibration is invalid (ex: a constant line)
  • Fix for Raspberry Pi 5 using upstream Adafruit libraries.

25.5.1

02 May 17:46

Choose a tag to compare

25.5.1

Enhancements

  • new Upload Calibration dialog in the UI

Breaking changes

  • new OD calibrations are of type od600 (instead of od). Nothing needs to change for the user.

Bug fixes

  • stirring calibration was using too many points from the lower bound, this is fixed.
  • fix for stirring calibration in the self-test creating an empty file
  • Fix custom charts that were not fetching from the database correctly due to the backend table being a sqlite3 view (VIEWs don't have ROWID, which was breaking a filter).

25.4.11

11 Apr 11:24

Choose a tag to compare

25.4.11

This contains all the changes from 25.4.3 and 25.4.9, and a hotfix for the heater pcb.

Bug fixes

  • Fix for heater PCB not shutting down correctly.

25.4.9

10 Apr 00:31

Choose a tag to compare

25.4.9 Pre-release
Pre-release

25.4.9

Bug fixes

  • Fix OD Reading not displaying correctly on Pioreactor pages
  • Fix duplicates in Raw OD Reading chart's legend
  • Improvements to pump calibration flow that will ask user what volumes they wish to calibrate for.
  • Fix self-test "REF is correct magnitude"
  • self-tests don't use calibrated OD readings anymore.

25.4.3rc0

03 Apr 18:09

Choose a tag to compare

25.4.3rc0 Pre-release
Pre-release

Upcoming

Enhancements

  • Support for Pioreactor 40mL
    • UI and backend now accommodates the new Pioreactor 40mL. Change the Pioreactor model on the Inventory page.
  • Device models and versions now tracked in the database
    • Models and versions for each Pioreactor are now stored in the workers database table. We're deprecating the [pioreactor] section in config.ini. You can manage models and versions on the Inventory page.
  • Improvements to dosing automation settings:
    • When starting a dosing automation, you can set the initial and max culture volumes.
  • Raw vs. calibrated OD readings now separated
    • When a calibration is applied in the ODReading job:
      • New MQTT topics are published:
        • od_reading/raw_od1 and od_reading/raw_od2 for raw (un-calibrated) values
        • od_reading/calibrated_od1 and od_reading/calibrated_od2 for calibrated values
    • The raw readings will be stored in new database tables, raw_od_readings. The calibrated values still occupy the table od_readings.
    • Existing topics like od_reading/od1, od_reading/od2, and od_reading/ods remain unchanged, but note they may contain either calibrated or raw data depending on calibration status.
    • To display a chart of the raw OD readings when a calibration is being used, switch the config entry raw_optical_density from 0 to 1 in the section [ui.overview.charts]

Breaking changes

  • Changes to pio workers add
    • This command has been updated to better reflect the new model/version management.
  • Removed config parameter max_volume_to_stop.
    • This is now hardcoded into the software. For 20ml, it's 18ml, and for 40ml, it's 38ml.

Bug Fixes

  • Fixed occasional crash on the Overview page in the UI.
  • Stirring dodging now correctly respects the first OD reading.
  • Stirring (and other software PWM-based jobs) now clean up properly more often on disconnect.
  • Fixed issue where dodging background jobs would run a final, incorrect action_to_do_before_reading after OD reading stops.
  • The OD calibration flow now correctly ignores existing calibrations when creating a new one.
  • UI page /pioreactors/<some_unit> now uses that unit's specific configuration from config_<some_unit>.ini.
  • Fix error "cannot schedule new futures after shutdown" when stopping a dosing automation during a pump execution.
  • Reverted a change to job's exit protocol introduced in 25.3.5 that would cause on_disconnected to run twice sometimes.
  • Fixed "manual adjustments" pump actions not firing an MQTT event.
  • Fixed OD calibrations using the wrong min, max thresholds.
  • pio calibrations analyze --device od will use regression weights for OD calibrations (like they do during the OD calibration)

25.4.3

04 Apr 00:04

Choose a tag to compare

25.4.3 Pre-release
Pre-release

25.4.3

Important

Make sure your cluster is on version 24.3.5 before updating!

Enhancements

  • Support for Pioreactor 40mL
    • UI and backend now accommodates the new Pioreactor 40mL. Change the Pioreactor model on the Inventory page.
  • Device models and versions now tracked in the database
    • Models and versions for each Pioreactor are now stored in the workers database table. We're deprecating the [pioreactor] section in config.ini. You can manage models and versions on the Inventory page.
  • Improvements to dosing automation settings:
    • When starting a dosing automation, you can set the initial and max culture volumes.
  • Raw vs. calibrated OD readings now separated
    • When a calibration is applied in the ODReading job:
      • New MQTT topics are published:
        • od_reading/raw_od1 and od_reading/raw_od2 for raw (un-calibrated) values
        • od_reading/calibrated_od1 and od_reading/calibrated_od2 for calibrated values
    • The raw readings will be stored in new database tables, raw_od_readings. The calibrated values still occupy the table od_readings.
    • Existing topics like od_reading/od1, od_reading/od2, and od_reading/ods remain unchanged, but note they may contain either calibrated or raw data depending on calibration status.
    • To display a chart of the raw OD readings when a calibration is being used, switch the config entry raw_optical_density from 0 to 1 in the section [ui.overview.charts]

Breaking changes

  • Changes to pio workers add
    • This command has been updated to better reflect the new model/version management.
  • Removed config parameter max_volume_to_stop.
    • This is now hardcoded into the software. For 20ml, it's 18ml, and for 40ml, it's 38ml.

Bug Fixes

  • Fixed occasional crash on the Overview page in the UI.
  • Stirring dodging now correctly respects the first OD reading.
  • Stirring (and other software PWM-based jobs) now clean up properly more often on disconnect.
  • Fixed issue where dodging background jobs would run a final, incorrect action_to_do_before_reading after OD reading stops.
  • The OD calibration flow now correctly ignores existing calibrations when creating a new one.
  • UI page /pioreactors/<some_unit> now uses that unit's specific configuration from config_<some_unit>.ini.
  • Fix error "cannot schedule new futures after shutdown" when stopping a dosing automation during a pump execution.
  • Reverted a change to job's exit protocol introduced in 25.3.5 that would cause on_disconnected to run twice sometimes.
  • Fixed "manual adjustments" pump actions not firing an MQTT event.
  • Fixed OD calibrations using the wrong min, max thresholds.
  • pio calibrations analyze --device od will use regression weights for OD calibrations (like they do during the OD calibration)

25.3.5

06 Mar 00:54

Choose a tag to compare

25.3.5

Important

You're cluster should be on version 25.1.21 or later before updating!

Enhancements

  • New faster ADC firmware with less noise
    • Upgraded ADC firmware improves signal processing speed and reduces measurement noise, leading to more reliable readings for all sensors.
  • led_intensity is now registered in our database
    • This means that running pio kill --all-jobs (and related pio kill commands) will now also turn off all LEDs, ensuring a complete shutdown of active processes.
  • New option in pio workers add to specify an IPv4 address
    • When adding a new worker, you can now explicitly provide an IPv4 address instead of relying on the default hostname.local. This is useful in networks where mDNS resolution is unreliable or unavailable. Ex: pio workers add <name> -a 192.168.0.3
  • New time option on the Overview page: "Now" for only real-time data
    • The UI now has a “Now” option that filters out historical data, displaying only real-time sensor readings and status updates.
  • Logs for experiment profiles now include an action step number
    • Each log entry related to an experiment profile now contains a step number, making it easier to track progress and diagnose issues in multi-step workflows.
  • Improved outlier detection in nOD and growth rates
    • Our outlier detection algorithms for normal optical density (nOD) and growth rates have been refined, reducing false positives and improving tracking accuracy during experiments.
  • Changing OD readings interval programmatically
    • OD Reading job now exposes interval as a editable published_setting. For example, you can PATCH to http://pioreactor.local/api/workers/<pioreactor_unit>/jobs/update/job_name/od_reading/experiments/<experiment> with body:
      {
        "settings": {
          "interval": 10
        },
      }
      
      to change OD readings interval to 10s.

Breaking Changes

  • idjob_id in pio_metadata_settings table
    • Database schema update: The primary identifier column in pio_metadata_settings has been renamed to job_id.
  • Changed the scaling of smoothing_penalizer
    • The smoothing_penalizer parameter now operates on a scale that is ~100x lower than before.
  • Deprecation of /unit_api/jobs/stop/... endpoint
    • The /unit_api/jobs/stop/... API endpoint is being deprecated in favor of using query parameters:
      • Instead of /unit_api/jobs/stop/job_name, use /unit_api/jobs/stop/?job_name=....
      • The special case /unit_api/jobs/stop/all remains valid and unchanged.
  • Timestamp precision change: From xxxxx milliseconds → xxx milliseconds
    • All timestamps will now be stored with three-digit millisecond precision instead of five. This change optimizes storage efficiency and speeds up queries while maintaining sufficient accuracy for most use cases.

Bug Fixes

  • Fix for "More" button in the Logs UI page
    • Previously, clicking "More" in the Logs UI would default to "Standard" log level instead of retaining the selected filter. Now, it correctly uses the log level chosen by the user.
  • Multiple experiment profiles no longer overwrite each other in MQTT
    • Previously, running multiple experiment profiles could cause MQTT messages to overwrite each other. This is now fixed, but note that the new MQTT topic format introduces job_id, deviating from our usual topic structure.
  • Fix for API returning incorrect responses for Huey-related tasks
    • API responses related to background tasks (e.g., adding a new Pioreactor, syncing configs, updating firmware) were sometimes incorrect or missing details. This has been fixed.
  • Correction to od_reading.config's smoothing_penalizer scaling error
    • A miscalculated scaling factor in od_reading.config caused the smoothing factor to be larger than intended. This has been corrected, and your config.ini file has been automatically updated to reflect the new values.
  • Fix for missing log events in Event Logs after worker unassignment
    • Some log events (such as clean-up and assignment events) were missing when they occurred after a worker was unassigned. These now appear correctly. Additionally, some unrelated log entries that were mistakenly displayed have been removed.
  • Scaling bug fix in the extended Kalman filter affecting nOD detection
    • A bug in the extended Kalman filter was causing outlier detections too frequently. In extreme cases, these detections could compound, driving nOD values negative and corrupting the filter’s internal state. This issue has been fixed with a new, more stable filtering algorithm that significantly improves robustness.