New Pioreactor release: 24.5.1



  • 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.
  • 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:
    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 :sparkles:statistics​:sparkles:. 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.


  • 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.

  • 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.

How to update

1 Like

Hi everyone,

I’ve tried to update the software but an error occurs “Don’t run as root” whether I try via the UI or via the terminal. I am already at the previous version and I’ve tried to use .
Here is the log :

2024-05-05T10:12:02+0300 [update-app] DEBUG sudo bash /tmp/release_24.5.1/
2024-05-05T10:12:04+0300 [update-app] DEBUG + export LC_ALL=C

  • LC_ALL=C
  • min_version=24.4.11
    ++ pio version
    Traceback (most recent call last):
    File “/usr/local/bin/pio”, line 8, in
    File “/usr/local/lib/python3.11/dist-packages/click/”, line 1157, in call
    return self.main(*args, **kwargs)
    File “/usr/local/lib/python3.11/dist-packages/click/”, line 1078, in main
    rv = self.invoke(ctx)
    File “/usr/local/lib/python3.11/dist-packages/click/”, line 1685, in invoke
    File “/usr/local/lib/python3.11/dist-packages/click/”, line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
    File “/usr/local/lib/python3.11/dist-packages/click/”, line 783, in invoke
    return __callback(*args, **kwargs)
    File “/usr/local/lib/python3.11/dist-packages/click/”, line 33, in new_func
    return f(get_current_context(), *args, **kwargs)
    File “/usr/local/lib/python3.11/dist-packages/pioreactor/cli/”, line 67, in pio
    raise SystemError(“Don’t run as root!”)
    SystemError: Don’t run as root!
  • current_version=

Was there a change from the previous version which may prevent me from updating the software ?

Thanks for your help !

1 Like

Hi @elielD! Sorry about this. We added a small check a few days ago, and there was a bug in it. Please try again: we re-uploaded a new release zip file here you can try.

We’ve also added a new test to make sure we don’t make this mistake again.


Thank you very much, it works !