Pioreactor

Latest version: v24.12.10

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

Scan your dependencies

Page 14 of 17

22.9.0

- Stirring now has the ability to restart itself if it detects it has stalled.
- od_normalization has been removed. Instead, there is a small routine `od_statistics` that is called by both `od_blank` and `growth_rate_calculating`. The latter also now stores the required od statistics to storage (previous it was the `od_normalization` job).
- The LEDs in the pioreactor have been moved up 0.5mm.
- Error-handling and user improvements to `pump_calibration`.
- `pid_turbidostat` was removed, replaced with the simpler `turbidostat`.
- Adding new table `pioreactor_unit_activity_data` that makes analysis much easier.
- Adding new table `calibrations`.
- New action `od_calibration` that easily allows you to add an OD600 calibration to your pioreactor. See docs: https://docs.pioreactor.com/user-guide/calibrate-od600
- _paramiko_ library is no longer a dependency
- in `growth_rate_calculating` job, `kalman_filter_outputs` is now included in `published_settings`
- Fix bug that wasn't saving automation events to the database.
- new function `voltage_in_aux` that measures what voltage is in the AUX.
- `od_readings_raw` db table renamed to `od_readings`
- `od_readings_raw.od_reading_v` renamed to `od_readings`
- Changes to `structs.ODReadings` and `structs.ODReading`
- Changes to where job `od_reading` publishes data in MQTT: now `.../od_reading/ods/` and `.../od_reading/od/<channel>`
- Rename `latest_od` property in all automations to `latest_normalized_od`. Later we will introduce `latest_od` which refers to data directly from od_reading job.
- `turbidostat` automation now accepts `target_normalized_od` instead of `target_od`. Likewise for `pid_morbidostat`.
- new config option under `od_config`: `use_calibration` is a boolean to ask the od_reading job to use the current calibration or not.
- `PIDTurbidostat` automation has been nuked completely.
- New base background job, `BackgroundJobWithDodging`, that makes it easy to change an action during od reading

22.7.0

- Subtle changes to how jobs disconnect and clean up. `job.set_state("disconnected")` won't clean up connections to loggers, MQTT, etc, but will signal to the app that it's no longer available to use.
- In `config.ini`, `ir_intensity` -> `ir_led_intensity`
- caches that keep state (like `led_locks`) now use absence and presence to determine state, instead of specific value in the cache.
- `network.inventory` -> `cluster.inventory`
- `network.topology` -> `cluster.topology`
- sql table `experiments.timestamp` -> `experiments.created_at`
- sql table `pioreactor_unit_labels` has new column `created_at`
- Added `TMPDIR` the env variables, which points to `/tmp/`
- Aided development on Windows machines
- Added new LED automation: `light_dark_cycle`. This allows for LEDs to follow a day/night cycle, at a specific LED intensity.
- Leader now accesses other machines always using the `.local` TLD.
- New config option `local_ac_hz`
- New self-test routine that checks if the REF is in the correct PD channel.
- IR REF now uses a moving average of the first few values, instead of only the initial value. This produces much more accurate normalization values.

22.6.0

- You can now edit the config.ini without having to boot a Pioreactor. By adding a file called `config.ini` to the `boot` folder when the SD card is interested in a computer, the `/boot/config.ini` will be merged with the Pioreactor's `config.ini`. This is useful for changing settings before ever starting up your Pioreactor for the first time. See below.
- `config.ini` is now the place where the local-access-point's SSID and passphrase are stored.
- new `pio` command on leader: `pio discover-workers` returns a list of workers on the network (may be a superset of `inventory` in the config.ini)
- new `pios` command on leader: `pios reboot`. Reboots all active workers in the cluster.
- self-test tests run in parallel
- Adding `NOTICE` log level, which will appear in the UI.
- New schemas for `kalman_filter_outputs` and `od_blanks` tables in the db.

22.4.3

- table `led_events` is renamed to `led_change_events`
- automation events returned from `execute` are published to MQTT under the published setting `latest_event`
- new tables `led_automation_events`, `dosing_automation_events`, `temperature_automation_events`
- `pioreactor.automation.events.Event` renamed to `pioreactor.automation.events.AutomationEvent`. The have a second kwarg that accepts a dict of data (must be json-serializable).
- new leader command `pios reboot`: reboot RPis on the network, optionally specific ones with `--unit` flag.
- new CLI tool: `pio log -m <message>` which will post a message to the pioreactors logs (everywhere). Example: this is used internally after systemd finish to log to our system.

22.4.2

- Added ability to add callbacks to ODReader. See `add_pre_read_callback` and `add_post_read_callback`.
- Fix bug associated with user changes.
- `pio logs` no longer uses MQTT. Also, it now prints their entire log file.
- BETA: testing shipping with access-point capabilities. See docs.

22.4.1

- Fix bug associated with user changes.

Page 14 of 17

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.