Releases: Pioreactor/pioreactor
23.12.4rc1
23.12.4rc1
23.12.4rc0
23.12.4rc0
23.11.29
23.11.29
- fix for exporting data from the UI
23.11.28
23.11.28
Breaking changes
- Merged the turbidostat automations into one. You can either select target target nOD or target OD, but not both!
ws_url
in the configuration now requires a fully qualified url. Example:ws://...
orwss://...
.- Removed
morbidostat
dosing automation, users should try to use pid_morbidostat. The morbidostat code is still available to be added as a custom plugin here: https://github.com/Pioreactor/automation-examples/blob/main/dosing/morbidostat.py - Removed
constant_duty_cycle
temperature automation. Again, the code is available here: https://github.com/Pioreactor/automation-examples/blob/main/temperature/constant_duty_cycle.py pid_morbidostat
now explicitly uses the keyword argtarget_normalized_od
, instead oftarget_od
. It always has been nOD.
Enhancements
- Both "Target OD" and "Target nOD" displayed and editable in the UI.
- Previously, if the LED channel was locked (most common when OD reading was running), then any changes to the LED intensity (via the UI) would be silently rejected. This is changed: we have added retry logic that will attempt to keep changing it a few more times (hopefully to avoid the lock)
- Added some light form validation in the automations dialog in the UI.
- New environment variable to skip loading plugins,
SKIP_PLUGINS
. Useful for debugging. Ex:SKIP_PLUGINS=1 pio run stirring
Bug Fixes
- Fix experiment profile validation error
- The "Stop" button is always available now in the "Dosing" tab for "Manage all Pioreactors".
- Fix for Ngrok remote access.
- Fixed a race condition between starting an automation and not getting OD data in time.
- The automation form in the UI for pid_morbidostat was missing
volume
, that's been added now.
23.11.18
23.11.18
- No more waiting around for growth-rate-calculating to get to "Ready" state
- The "Label" step in the New Experiment flow is skipped if there is only 1 active Pioreactor in the cluster.
- Silenced the "LED is locked" warning - now it's a DEBUG level message.
- Fixed bug that wasn't passing lists correctly in
TopicToParserToTable
- Faster boot times.
- Faster UI load times by gzip-ing assets.
- Fixed a bug where a plugin would not be loaded if it's name collided with a module in the stdlib. For example, putting
test.py
in.pioreactor/plugins
would not be loaded, since when we tried to importtest
, it would load the stdlib'stest
, not the local plugin. This has been fixed. - Simplify some UI elements.
- Security improvements.
- Reduce the default LED intensity in
light_dark_cycle
from 50% to 5%. This is more appropriate for sparse cultures. - Fixed a race condition when starting a hotspot with boot config.ini.
- changed how
is_HAT_present
determine is the HAT is on the Pi. Previously, it used the i2c bus to check if the RP2040's firmware was active. This would fail if the HAT was present, but the firmware or i2c wasn't working. Now we check the EEPROM, which is a much more robust test.
23.11.18rc0
Upcoming
- No more waiting around for growth-rate-calculating to get to "Ready" state
- The "Label" step in the New Experiment flow is skipped if there is only 1 active Pioreactor in the cluster.
- Silenced the "LED is locked" warning - now it's a DEBUG level message.
- Fixed bug that wasn't passing lists correctly in
TopicToParserToTable
- Faster boot times.
- Faster UI load times by gzip-ing assets.
- Fixed a bug where a plugin would not be loaded if it's name collided with a module in the stdlib. For example, putting
test.py
in.pioreactor/plugins
would not be loaded, since when we tried to importtest
, it would load the stdlib'stest
, not the local plugin. This has been fixed. - Simplify some UI elements.
- Security improvements.
- Reduce the default LED intensity in
light_dark_cycle
from 50% to 5%. This is more appropriate for sparse cultures. - Fixed a race condition when starting a hotspot with boot config.ini.
23.11.15rc0
Upcoming
- No more waiting around for growth-rate-calculating to get to "Ready" state
- The "Label" step in the New Experiment flow is skipped if there is only 1 active Pioreactor in the cluster.
- Silenced the "LED is locked" warning - now it's a DEBUG level message.
- Fixed bug that wasn't passing lists correctly in
TopicToParserToTable
- Faster boot times.
- Faster UI load times by gzip-ing assets.
- Fixed a bug where a plugin would not be loaded if it's name collided with a module in the stdlib. For example, putting
test.py
in.pioreactor/plugins
would not be loaded, since when we tried to importtest
, it would load the stdlib'stest
, not the local plugin. This has been fixed. - Simplify some UI elements.
- Security improvements.
- Reduce the default LED intensity in
light_dark_cycle
from 50% to 5%. This is more appropriate for sparse cultures.
23.11.08
23.11.08
-
fix bug in
timeout
inStirrer.block_until_rpm_is_close_to_target
that wasn't using time correctly. -
Workers can now also be the local-access-point (aka the "router" in a network). Previously only leaders could.
-
Experiment profiles now support a
log
directive with some dynamic templating:- type: log hours_elapsed: 0.025 options: message: "{job} increasing to 800 RPM" # alerts the message: "stirring increasing to 800 RPM"
See full example here.
-
Experiment profiles now supports changing LEDs like any other job (i.e. they can use
start
,update
andstop
directives). See example here. -
Experiment profile clean up. I think there are less bugs!
-
pio clear_cache
now has anas_int
option to look for ints - useful when clearing caches with ints as keys. -
fix issue where if an extra config.ini was provided in the /boot dir before a worker startup, adding the worker to a cluster would fail due to a permission issue.
-
potential fix for RPi 3B and RPi Zeros not connecting to hotspots: change the
proto
towpa
in your config.ini on the Pioreactor with the local-access-point, and restart that Pioreactor. You config.ini should look like:[local_access_point] ssid=pioreactor passphrase=raspberry proto=wpa
Changing to WPA does weaken the security however! Its easier to unwanted users to get onto this wifi
- Slight change to the API initialization of ADCReader. Take a look if you were using that class.
23.11.06rc0
Upcoming
- fix bug in
timeout
inStirrer.block_until_rpm_is_close_to_target
that wasn't using it correctly. - Workers can now also be the local-access-point (aka the "router" in a network). Previously only leaders could.
- Slight change to the API initialization of ADCReader. Take a look if you were using that class.
- Experiment profiles now support a
log
directive with some dynamic templating:See full example here.- type: log hours_elapsed: 0.025 options: message: "{job} increasing to 800 RPM" # alerts the message: "stirring increasing to 800 RPM"
- Experiment profiles now supports changing LEDs like any other job (i.e. they can use
start
,update
andstop
directives). See example here. pio clear_cache
now has anas_int
option to look for ints - useful when clearing caches with ints as keys.- fix issue where if an extra config.ini was provided in the /boot dir before a worker startup, adding the worker to a cluster would fail due to a permission issue.
- potential fix for RPi 3B and RPi Zeros not connecting to hotspots: change the
proto
towpa
in your config.ini on the Pioreactor with the local-access-point, and restart that Pioreactor. You config.ini should look like:
[local_access_point]
ssid=pioreactor
passphrase=raspberry
proto=wpa
Changing to WPA does weaken the security however!
23.10.23
23.10.23
Bookworm release!
The Raspberry Pi Foundation provides new operating system every few years (built off of Debian's work). Earlier this month, they released RPi OS Bookworm. There are lots of nice changes, but the important details for us:
- New Python version
- New GPIO libraries
- New local-access-point improvements
We strongly recommend you upgrade to this release. However, upgrading to this new operating system requires a full SD rewrite. See steps below on how to preserve and transfer your data.
Optimizations
With some other optimizations, we have significantly improved the performance and responsiveness of the Pioreactor software. You should notice things will feel snappier! For example, the command-line responsiveness is about 33% faster, which means actions from the the UI will start faster. Because of this new performance, we can even squeeze some more data into our algorithms and get improved accuracy.
Along with Python being faster, our database is also faster now => faster inserts, UI graphs, and data exports.
Export and import your existing data into a new image
Note: you don't need to do this. This is only if you want to move existing data to the new Pioreactor.
See instructions here.
Full Changelog
- Replaced
RPi.GPIO
withlgpio
- Python 3.9 is replaced by 3.11
- Ability to choose the x-axis scale in the UI Overview: clock time, or elapsed time. Use (or add)
time_display_mode
under section[ui.overview.settings]
, with valuesclock_time
orhours
respectively. - Fixed bug that was not clearing OD blanks from the UI
- dropped RaspAP for a native solution. The native solution is much simpler, and should show up faster than our RaspAP solution.
- If your leader Raspberry Pi has an ethernet port, you can connect this into an internet-accessible router and give your cluster access to the internet!
- Updated lots of our Python dependencies
- Improved start up time by hiding dependencies
- Added database table to track experiment profile starts.