New Pioreactor software release: 23.7.18

24.7.18

:bulb:Important: This release intentionally breaks the high-temp plugin, pioled-display-plugin plugin, and temperature-expansion plugin. Don’t update until you’re prepared to update those. The latest version of all plugins are compatible.

Enhancements

  • improvements to the UI’s experiment profile preview.
  • hours_elapsed() is a function in profile expressions, which returns the hours since the profile started.
  • unit() can be used in mqtt fetch expressions. Example: unit():stirring:target_rpm is identical to ::stirring:target_rpm. The latter can be seen as a shortened version of the former.
  • experiment profiles can have a description in the job field (i.e. at the same level as actions).
  • Updated Raspberry Pi OS image to 2024-07-04.
  • Vendoring the TMP1075 library, which also fixes the RPi5 error.
  • In places where the ipv4 is displayed (Inventory page, System tab, pio workers status, etc), all ipv4 addresses are displayed.

Breaking changes

  • remove the temperature_control, dosing_control, and led_control abstractions. These were introduced early in the Pioreactor software as a way to quickly change automations, but they have been more of a wort than a win. While working on the internals of experiment profiles recently, it became more and more clear how poor this abstraction was. The removal of them has some consequences and some backward incompatibilities:

  • updating experiment profiles: experiment profiles that have a *_control job will need to be updated to use *_automation, eventually. For now, we are allowing *_control in profiles: in the backend, we are renaming *_control to *_automations, but a warning will be produced. Later, we’ll remove this renaming and profiles will need to be completely updated. Example:

    experiment_profile_name: start_temp_control
    
    metadata:
      author: Cam DP
    
    common:
      jobs:
        temperature_control:
          actions:
            - type: start
              hours_elapsed: 0
              options:
                automation_name: thermostat
                target_temperature: 30
            - type: stop
              hours_elapsed: 12
        temperature_automation:
          actions:
            - type: update
              hours_elapsed: 6
              options:
                target_temperature: 35
    

    becomes:

    experiment_profile_name: start_temp_control
    
    metadata:
      author: Cam DP
    
    common:
      jobs:
        temperature_automation:
          actions:
            - type: start
              hours_elapsed: 0
              options:
                automation_name: thermostat
                target_temperature: 30
            - type: stop
              hours_elapsed: 12
            - type: update
              hours_elapsed: 6
              options:
                target_temperature: 35
    
    • update plugins. For users using, specifically, the high-temp plugin, or temperature-expansion-kit plugin, new plugins will be released. Look on the forums, or documentation, for update instructions.

The benefits of removing this abstraction is much less code, less overhead, easier developer experience, and overall simplification. Later, we may create a new abstraction, but now we are moving abstractions back to level 0.

  • log in experiment profiles now uses expressions instead of Python string formatting. For example: The unit {unit} is running {job} in experiment {experiment} should be replaced by expressions in the string: The unit ${{unit()}} is running ${{job_name()}} in the experiment ${{experiment}}. Note: {job} is now ${{job_name()}}.
  • cycle_media and cycle_alt_media now publish dosing events, and will be recorded by dosing automations, and the db.

Bug fixes

  • When pausing temperature automations, the heater now turns off and stays off until unpaused. This is the intended behaviour.

Plugins updated

  • pioled-display-plugin, download version >= 0.3.0
  • high-temp-plugin, download version >= 0.3.0
  • temperature-expansion-kit-plugin >= 0.3.1