Pioreactor

Latest version: v24.12.10

Safety actively analyzes 693883 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 3 of 17

24.5.22

Enhancements
- Significant performance increase by using `force_turbo=1` in the Raspberry Pi. Expect a noticeable improvement in interacting with the Pioreactor. This pushes the Pi to always run "hot" (but we aren't overclocking). This does slightly increase the Pi's internal temperature, so be wary about putting the Pioreactor in very hot environment. _This settings requires a reboot to take affect._
- adding support for changing the port and protocol of the Pioreactor UI webserver in the software. Add the following to your config.ini:

[ui]
port=80
proto=http

This doesn't _set_ the port and proto, that involves changing settings in the lighttpd configuration.

Bug fixes
- more sane defaults for OD reading for v1.1 when using `auto`.
- fix `pios plugins uninstall`
- fix leader not correctly being identified in `pio workers status`
- For RPi Zero W (first gen), sometimes the load_rp2040 script was failing. A new script will retry a few times. This only applies to new images.
- fix `pio workers update-active` using the wrong HTTP verb.
- Fix using ethernet cable to connect Pioreactor to a router: a new simple ethernet nmconnection has been added, and has higher connection priority than the PioreactorLocalLink nmconnection.
- Fix race conditions occurring between stirring and growth-rate when they were started too quickly.

Known issues

- When the local access point would start on a fresh boot, the SSID would start as `pioreactor`, and then change to `pioreactor-<leader-name>` after the next reboot.

24.5.13

Enhancements
- UI chart legend's will support more than 8 Pioreactors.
- UI chart colors are consistent across charts in the Overview.
- reduce the severity of some messages, so there will be less pop-ups in the UI.
- UI performance improvements.
- Upgraded to React 18.3.1
- Removed unused dependencies
- UI's code sections use syntax-highlighting and other nicer features for editing yaml and ini files.
- App performance improvements
- Upgrade paho-mqtt to 2.1
- faster `pio kill`
- faster job start from UI
- more humane error messages.
- updated temperature inference model.
- added exponentiation `**` to profile expressions. Ex: `${{ pio1:growth_rate_calculating:growth_rate.growth_rate ** 0.5 }}`
- added `random()` to profile expressions. This returns a number between 0 and 1. Ex: `${{ 25 + 25 * random() }}`


Bug fixes
- fix `pio plugins` not working on workers.
- fix `enable_dodging_od=0` for background jobs that can dodge OD.
- fix PWM jobs not cleaning up correctly if too many jobs try to end at the same time.
- fix `pio kill` not returning the correct count of jobs being killed.
- fix older Pioreactor HATs, with the ADS1115 chip, not have the method `from_voltage_to_raw_precise`.
- fix "Manage all" not sending the correct dosing command to workers.

24.5.1

Highlights

- initial support for Pioreactor 20ml v1.1! This is our latest iteration of Pioreactor. Even though it's a minor 0.x release, there's lots of positives about it. We encourage you to check out the upgrade kit [here](https://pioreactor.com/collections/upgrade-kits/products/pioreactor-20ml-v1-1-upgrade-kit).
- some further support for tracking the model and version of the Pioreactor you are using. Users can change the version in the config file. For example:

[pioreactor]
model=pioreactor_20ml
version=1.1

If you have a mixed cluster (some 1.0, some 1.1), then you should put this configuration in the _unit specific_ config files.
- For v1.1: New temperature inference algorithm makes reaching the `thermostat` setpoint quicker, and the Pioreactor can reach higher temperatures (our internal testing could easily reach up to 45C in a cool room). This algorithm uses the magic of ✨statistics✨. We may update the themostat PID values in the future, but the default ones work okay for now. A Pioreactor v1.0 update for this algorithm should come out soon, too.

Enhancements

- When using `turbidostat`, there is now a small moving average filter on the raw OD readings. This will prevent the turbidostat from firing when an OD outlier occurs.
- MQTT data is no long persisted between leader power-cycles. This was the cause of a lot of bad UI state issues where users couldn't interact with the Pioreactor via the UI after a power-cycle (intentional or not). We originally persisted the data since we previously used MQTT as more like a database, but our engineering style has moved away from that idea, and we now only use MQTT for "ephemeral" data. Taking out the persistent MQTT data forces this style change. Users shouldn't notice anything different.
- The leader is now the source-of-truth for the cluster's clocks. For example, when a worker boots up, it will ask the leader what the time is, and will periodically continue asking. If the leader has access to the internet, it will pull the correct time (and periodically continue asking). If the leader doesn't have access to the internet, it will use the default time on the Pi. This solves the problem of workers' clocks getting out of sync when powered down, especially in a local-access-point network.

![](https://i.imgur.com/vt5gxyy.png)

- Lots of small UI improvements, including accessibility, empty-state, and loading improvements.
- Previously, we would "kick" stirring by forcing the DC% to 100% for a moment, and then increasing the running DC% slightly. Going forward, we'll actually try the following when the
sensor fails to read a signal: _DC% to 0%_, then _DC% to 100%_, and then a slight increase in the DC%. Why?
- If the mixing fan has stalled, setting the DC% to 0% does nothing, since the fan is already stopped.
- If the mixing fan is running, but the stir bar isn't in sync, this step will align the stir bar and fan again.
- If the mixing fan is running _too fast_, but the sensor isn't reading it, this allows for a small pause.
- The recommend way to upgrade Pioreactors and clusters is now using _release archives_. We have more control over the upgrade process this way. However, users are still welcome use the command line, `pio update`, which is what we use in house.
- A chart legend's in the UI now displays the entire name of the worker, if there is enough room.

Breaking changes

- Temporary Pioreactor labels, set in the UI, are now unique across an experiment.
- config `max_volume_to_warn` was removed, it's now hardcoded as 90% of `max_volume_to_stop`

Bug fixes

- Fix `pio ...` commands that displayed the CLI options not working on workers.
- Potential fix for heater continuing to be on after requested to be turned off.

24.4.11

Enhancements
- Faster app start-up performance, which should translate to faster response times.
- Log when workers change experiment assignments.
- Log when workers change active status.
- Adding `[pioreactor]` section to config.inis
- improvements to calibration charts

Breaking changes
- `pio install-plugin` is now `pio plugins install`. Likewise for `uninstall`.
- `pio list-plugins` is now `pio plugins list`.
- `pios install-plugin` is now `pios plugins install`. Likewise for `uninstall`.

Bug fixes
- fixed Log table in the UI not showing all entries.
- fixed HAT button response in the UI.

24.4.3

Highlights

- The Pioreactor leader can now support multiple experiments! If you have more than one Pioreactor, this change allows you to run multiple experiments simultaneously, assign Pioreactors to different experiments, and manage all experiments concurrently. No more multi-leader set ups - all you need is a single leader and multiple workers! See video [here](https://www.youtube.com/watch?v=7SuR26BQG5c).
- Ability to delete experiments from the UI.
- Better control over your cluster, using the Inventory page in the UI.
- Ship with network configuration of local-link connections: plug in an ethernet from your Pioreactor to your computer, and after invoking `sudo nmcli c PioreactorLocalLink up`, you should be able to visit `http://pioreactor.local` in your browser.

Enhancements
- replace the `ip` file that is written to on startup with a new `network_info.txt` file that contains the hostname, IPv4 address, and MAC addresses.
- Adding the ethernet (wired) mac address to the system tab.
- new Python module for controlling workers: `pioreactor.cluster_management`
- by default, for new installs, the local-access-point SSID is now `pioreactor_<hostname>`.
- UI performance improvements
- New database tables to handle workers (`workers`) and experiments assignments (`experiment_assignments`).
- New `pio workers` CLI to mange your inventory. Try `pio workers --help` to see all the commands available.
- Better error messages when a self-test fails.
- `pio kill` has new options to kill specific actions. Ex: `pio kill --experiment this-exp`, `pio kill --job-source experiment_profile`


Breaking changes
- When a experiment profile **stops early** (i.e. via "stop early" in the UI), it now will halt any jobs that it started. This is a change from how they worked previously, but this new behaviour is less of a surprise to users.
- `pio add-pioreactor <name>` is now `pio workers add <name>`
- `pio cluster-status` is now `pio workers status`
- `utils.publish_ready_to_disconnected_state` changed names to `utils.managed_lifecycle`
- `config.inventory` in the config.ini is no longer used. All that data is now handled in the database on the leader, and managed in the UI or CLI.
- `pio kill <job_name>` is removed, use `pio kill --name <job_name>`.

Bug fixes
- fix for not being able to access `http://pioreactor.local` reliably.
- fix for multiple exporting datasets when selecting "All experiments"

Known bugs
- removing a Pioreactor leader from an experiment will stop any experiment profiles running that are associated to that experiment.

24.3.10

Enhancements
- For better consistency between Pioreactors, we've introduced a new configuration option that will automatically adjust the IR LED intensity to match a target value in the reference photodiode, at the start of OD reading. This means that if your IR LEDs are slightly different between Pioreactors, the IR LED output will be adjusted to match a hardcoded value. To enable this feature, change the `[od_config]` config parameter `ir_led_intensity` value to `auto`. For new installs, this is the default configuration. This _shouldn't_ change your actual OD readings very much (since we normalize raw PD by REF, and increase or decrease in REF is balanced by increase or decrease in PD), but it will make analysis easier.
- Significant UI performance improvements: we are use less MQTT clients, which should mean faster loading, less network overhead, and overall lower resource-usage.

Bug fixes
- Fixes updating automations in experiment profiles

Page 3 of 17

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.