Since your last message, I’ve tried quite a few things - it’s a bit tough to describe succinctly. I’ve tried the instructions from your previous message as well as cloning the Pioreactor GitHub repository and running the Python functions locally. This is after pointing to the appropriate config file through the GLOBAL_CONFIG
env variable, and I’ve tested on both Windows and WSL2. I’ve also tried mimicking the MQTT messages that I observe from the web client that I’d normally observe when running per the normal instructions (i.e., communication over same network, e.g., through running Python via ssh’ing into the Pioreactor or using the UI).
Before I dive in further, I wanted to check - were you able to verify that stirring could be started from a separate network (e.g., the MQTT web client I linked to earlier)? I’m clearly seeing traffic on the broker I’m using (see details at end), I’m just not able to observe any effect on the actual Pioreactor.
When I run the following script from a local clone in WSL2:
from pioreactor.background_jobs.stirring import Stirrer, RpmFromFrequency
unit = "pioreactor1"
experiment = "test"
st = Stirrer(
target_rpm=300,
unit=unit,
experiment=experiment,
rpm_calculator=RpmFromFrequency()
)
st.start_stirring()
st.block_until_disconnected() # pauses the execution, but stirring continues
I get:
2024-03-04T17:06:28-0500 DEBUG [stirring] Init.
2024-03-04T17:06:28-0500 DEBUG [stirring] Operating with RPM feedback loop.
2024-03-04T17:06:29-0500 DEBUG [PWM@GPIO-17] Initialized GPIO-17 using software-timing, initial frequency = 75.0 hz.
2024-03-04T17:06:29-0500 INFO [stirring] Ready.
2024-03-04T17:06:29-0500 DEBUG [stirring] Starting stirring with 300.0 RPM.
2024-03-04T17:06:30-0500 DEBUG [stirring] stirring is blocking until disconnected.
2024-03-04T17:06:38-0500 WARNING [stirring] Stirring RPM is 0 - attempting to restart it automatically. It may be a temporary stall, target RPM may be too low, or not reading sensor correctly.
2024-03-04T17:06:38-0500 DEBUG [stirring] Kicking stirring
All the while, I’m getting plenty of MQTT traffic from running and stopping the Python script:
{"source": "app", "message": "Disconnected successfully from MQTT.", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:09:02.529828Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590142805
{"source": "app", "message": "Disconnected.", "level": "INFO", "task": "stirring", "timestamp": "2024-03-04T22:09:02.386056Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590142786
pioreactor/pioreactor1/test/stirring/state/$unit
0 1709590142753
pioreactor/pioreactor1/test/stirring/duty_cycle/$settable
0 1709590142738
pioreactor/pioreactor1/test/stirring/measured_rpm/$unit
0 1709590142707
pioreactor/pioreactor1/test/stirring/measured_rpm/$datatype
0 1709590142690
pioreactor/pioreactor1/test/stirring/target_rpm/$datatype
0 1709590142658
pioreactor/pioreactor1/test/stirring/target_rpm/$settable
0 1709590142628
pioreactor/pioreactor1/test/stirring/target_rpm
0 1709590142617
pioreactor/pioreactor1/test/stirring/state/$datatype
0 1709590142606
pioreactor/pioreactor1/test/stirring/state/$settable
0 1709590142596
pioreactor/pioreactor1/test/stirring/duty_cycle/$unit
0 1709590142586
pioreactor/pioreactor1/test/stirring/duty_cycle/$datatype
0 1709590142574
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590142563
pioreactor/pioreactor1/test/stirring/measured_rpm/$settable
0 1709590142551
pioreactor/pioreactor1/test/stirring/measured_rpm
0 1709590142541
pioreactor/pioreactor1/test/stirring/target_rpm/$unit
0 1709590142510
pioreactor/pioreactor1/test/stirring/$properties
0 1709590142487
disconnected
pioreactor/pioreactor1/test/stirring/$state
0 1709590141591
{"source": "app", "message": "Cleaned up GPIO-17.", "level": "DEBUG", "task": "PWM@GPIO-17", "timestamp": "2024-03-04T22:09:01.404261Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590141573
{}
pioreactor/pioreactor1/test/pwms/dc
0 1709590141465
{"source": "app", "message": "Exiting caused by signal Interrupt.", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:09:01.323681Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590141425
{"17": 57.5}
pioreactor/pioreactor1/test/pwms/dc
0 1709590137227
57.5
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590137205
{"setpoint": 300.0, "output_limits_lb": -7.5, "output_limits_ub": 7.5, "Kd": 0.0, "Ki": 0.0, "Kp": 10.0, "integral": 0.0, "proportional": 3000.0, "derivative": 0.0, "latest_input": 0.0, "latest_output": 7.5, "job_name": "stirring", "target_name": "rpm"}
pioreactor/pioreactor1/test/pid_log/rpm
0 1709590137177
{"17": 50.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709590137141
50
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590137104
4
pioreactor/pioreactor1/test/monitor/flicker_led_with_error_code
0 1709590137002
100
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590136986
{"source": "app", "message": "Kicking stirring", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:08:56.729396Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590136961
{"source": "app", "message": "Stirring RPM is 0 - attempting to restart it automatically. It may be a temporary stall, target RPM may be too low, or not reading sensor correctly.", "level": "WARNING", "task": "stirring", "timestamp": "2024-03-04T22:08:56.706303Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590136910
{"17": 100.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709590136861
{"measured_rpm":0.0,"timestamp":"2024-03-04T22:08:56.704400Z"}
pioreactor/pioreactor1/test/stirring/measured_rpm
0 1709590136813
{"17": 57.5}
pioreactor/pioreactor1/test/pwms/dc
0 1709590114241
57.5
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590114189
{"setpoint": 300.0, "output_limits_lb": -7.5, "output_limits_ub": 7.5, "Kd": 0.0, "Ki": 0.0, "Kp": 10.0, "integral": 0.0, "proportional": 3000.0, "derivative": 0.0, "latest_input": 0.0, "latest_output": 7.5, "job_name": "stirring", "target_name": "rpm"}
pioreactor/pioreactor1/test/pid_log/rpm
0 1709590114137
{"17": 50.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709590114114
50
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590114088
4
pioreactor/pioreactor1/test/monitor/flicker_led_with_error_code
0 1709590113979
100
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590113951
{"source": "app", "message": "Kicking stirring", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:08:33.724260Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590113928
{"source": "app", "message": "Stirring RPM is 0 - attempting to restart it automatically. It may be a temporary stall, target RPM may be too low, or not reading sensor correctly.", "level": "WARNING", "task": "stirring", "timestamp": "2024-03-04T22:08:33.704909Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590113906
{"17": 100.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709590113871
{"measured_rpm":0.0,"timestamp":"2024-03-04T22:08:33.704028Z"}
pioreactor/pioreactor1/test/stirring/measured_rpm
0 1709590113847
{"17": 57.5}
pioreactor/pioreactor1/test/pwms/dc
0 1709590091261
57.5
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590091234
{"setpoint": 300.0, "output_limits_lb": -7.5, "output_limits_ub": 7.5, "Kd": 0.0, "Ki": 0.0, "Kp": 10.0, "integral": 0.0, "proportional": 3000.0, "derivative": 0.0, "latest_input": 0.0, "latest_output": 7.5, "job_name": "stirring", "target_name": "rpm"}
pioreactor/pioreactor1/test/pid_log/rpm
0 1709590091142
{"17": 50.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709590091117
50
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590091088
4
pioreactor/pioreactor1/test/monitor/flicker_led_with_error_code
0 1709590091037
100
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590091012
{"source": "app", "message": "Kicking stirring", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:08:10.725132Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590090978
{"source": "app", "message": "Stirring RPM is 0 - attempting to restart it automatically. It may be a temporary stall, target RPM may be too low, or not reading sensor correctly.", "level": "WARNING", "task": "stirring", "timestamp": "2024-03-04T22:08:10.704999Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590090932
{"17": 100.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709590090837
{"measured_rpm":0.0,"timestamp":"2024-03-04T22:08:10.704391Z"}
pioreactor/pioreactor1/test/stirring/measured_rpm
0 1709590090808
{"17": 57.5}
pioreactor/pioreactor1/test/pwms/dc
0 1709590068241
57.5
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590068215
{"setpoint": 300.0, "output_limits_lb": -7.5, "output_limits_ub": 7.5, "Kd": 0.0, "Ki": 0.0, "Kp": 10.0, "integral": 0.0, "proportional": 3000.0, "derivative": 0.0, "latest_input": 0.0, "latest_output": 7.5, "job_name": "stirring", "target_name": "rpm"}
pioreactor/pioreactor1/test/pid_log/rpm
0 1709590068180
{"17": 50.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709590068159
50
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590068134
4
pioreactor/pioreactor1/test/monitor/flicker_led_with_error_code
0 1709590067978
100
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590067948
{"source": "app", "message": "Kicking stirring", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:07:47.729647Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590067930
{"source": "app", "message": "Stirring RPM is 0 - attempting to restart it automatically. It may be a temporary stall, target RPM may be too low, or not reading sensor correctly.", "level": "WARNING", "task": "stirring", "timestamp": "2024-03-04T22:07:47.707061Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590067907
{"17": 100.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709590067865
{"measured_rpm":0.0,"timestamp":"2024-03-04T22:07:47.704848Z"}
pioreactor/pioreactor1/test/stirring/measured_rpm
0 1709590067813
{"17": 57.5}
pioreactor/pioreactor1/test/pwms/dc
0 1709590045229
57.5
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590045199
{"setpoint": 300.0, "output_limits_lb": -7.5, "output_limits_ub": 7.5, "Kd": 0.0, "Ki": 0.0, "Kp": 10.0, "integral": 0.0, "proportional": 3000.0, "derivative": 0.0, "latest_input": 0.0, "latest_output": 7.5, "job_name": "stirring", "target_name": "rpm"}
pioreactor/pioreactor1/test/pid_log/rpm
0 1709590045152
{"17": 50.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709590045126
50
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590045099
4
pioreactor/pioreactor1/test/monitor/flicker_led_with_error_code
0 1709590044971
100
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590044953
{"source": "app", "message": "Kicking stirring", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:07:24.729276Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590044937
{"source": "app", "message": "Stirring RPM is 0 - attempting to restart it automatically. It may be a temporary stall, target RPM may be too low, or not reading sensor correctly.", "level": "WARNING", "task": "stirring", "timestamp": "2024-03-04T22:07:24.705525Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590044906
{"17": 100.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709590044848
{"measured_rpm":0.0,"timestamp":"2024-03-04T22:07:24.704074Z"}
pioreactor/pioreactor1/test/stirring/measured_rpm
0 1709590044806
{"17": 57.5}
pioreactor/pioreactor1/test/pwms/dc
0 1709590022246
57.5
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590022223
{"setpoint": 300.0, "output_limits_lb": -7.5, "output_limits_ub": 7.5, "Kd": 0.0, "Ki": 0.0, "Kp": 10.0, "integral": 0.0, "proportional": 3000.0, "derivative": 0.0, "latest_input": 0.0, "latest_output": 7.5, "job_name": "stirring", "target_name": "rpm"}
pioreactor/pioreactor1/test/pid_log/rpm
0 1709590022172
{"17": 50.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709590022146
50
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590022121
4
pioreactor/pioreactor1/test/monitor/flicker_led_with_error_code
0 1709590021970
100
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709590021956
{"source": "app", "message": "Kicking stirring", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:07:01.735922Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590021942
{"source": "app", "message": "Stirring RPM is 0 - attempting to restart it automatically. It may be a temporary stall, target RPM may be too low, or not reading sensor correctly.", "level": "WARNING", "task": "stirring", "timestamp": "2024-03-04T22:07:01.708595Z"}
pioreactor/pioreactor1/test/logs/app
0 1709590021909
{"17": 100.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709590021872
{"measured_rpm":0.0,"timestamp":"2024-03-04T22:07:01.704971Z"}
pioreactor/pioreactor1/test/stirring/measured_rpm
0 1709590021809
{"17": 57.5}
pioreactor/pioreactor1/test/pwms/dc
0 1709589999227
57.5
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709589999207
{"setpoint": 300.0, "output_limits_lb": -7.5, "output_limits_ub": 7.5, "Kd": 0.0, "Ki": 0.0, "Kp": 10.0, "integral": 0.0, "proportional": 3000.0, "derivative": 0.0, "latest_input": 0.0, "latest_output": 7.5, "job_name": "stirring", "target_name": "rpm"}
pioreactor/pioreactor1/test/pid_log/rpm
0 1709589999159
{"17": 50.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709589999128
50
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709589999104
4
pioreactor/pioreactor1/test/monitor/flicker_led_with_error_code
0 1709589998946
100
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709589998936
{"source": "app", "message": "Kicking stirring", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:06:38.730002Z"}
pioreactor/pioreactor1/test/logs/app
0 1709589998929
{"source": "app", "message": "Stirring RPM is 0 - attempting to restart it automatically. It may be a temporary stall, target RPM may be too low, or not reading sensor correctly.", "level": "WARNING", "task": "stirring", "timestamp": "2024-03-04T22:06:38.709941Z"}
pioreactor/pioreactor1/test/logs/app
0 1709589998910
{"17": 100.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709589998853
{"measured_rpm":0.0,"timestamp":"2024-03-04T22:06:38.704485Z"}
pioreactor/pioreactor1/test/stirring/measured_rpm
0 1709589998810
{"source": "app", "message": "stirring is blocking until disconnected.", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:06:30.304400Z"}
pioreactor/pioreactor1/test/logs/app
0 1709589990407
{"17": 60.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709589989900
60.0
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709589989875
{"source": "app", "message": "Starting stirring with 300.0 RPM.", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:06:29.552764Z"}
pioreactor/pioreactor1/test/logs/app
0 1709589989767
{"source": "app", "message": "Ready.", "level": "INFO", "task": "stirring", "timestamp": "2024-03-04T22:06:29.551499Z"}
pioreactor/pioreactor1/test/logs/app
0 1709589989753
{"17": 100.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709589989669
ready
pioreactor/pioreactor1/test/stirring/$state
0 1709589989652
60.0
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709589989366
300.0
pioreactor/pioreactor1/test/stirring/target_rpm
0 1709589989267
{"source": "app", "message": "Operating with RPM feedback loop.", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:06:28.380097Z"}
pioreactor/pioreactor1/test/logs/app
0 1709589988616
True
pioreactor/pioreactor1/test/stirring/duty_cycle/$settable
0 1709589988589
RPM
pioreactor/pioreactor1/test/stirring/measured_rpm/$unit
0 1709589988581
MeasuredRPM
pioreactor/pioreactor1/test/stirring/measured_rpm/$datatype
0 1709589988574
float
pioreactor/pioreactor1/test/stirring/target_rpm/$datatype
0 1709589988566
True
pioreactor/pioreactor1/test/stirring/target_rpm/$settable
0 1709589988560
string
pioreactor/pioreactor1/test/stirring/state/$datatype
0 1709589988552
True
pioreactor/pioreactor1/test/stirring/state/$settable
0 1709589988540
%
pioreactor/pioreactor1/test/stirring/duty_cycle/$unit
0 1709589988534
float
pioreactor/pioreactor1/test/stirring/duty_cycle/$datatype
0 1709589988522
False
pioreactor/pioreactor1/test/stirring/measured_rpm/$settable
0 1709589988514
RPM
pioreactor/pioreactor1/test/stirring/target_rpm/$unit
0 1709589988503
target_rpm,measured_rpm,duty_cycle,state
pioreactor/pioreactor1/test/stirring/$properties
0 1709589988496
{"source": "app", "message": "Init.", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:06:28.373431Z"}
pioreactor/pioreactor1/test/logs/app
0 1709589988485
init
pioreactor/pioreactor1/test/stirring/$state
0 1709589988476
{"source": "app", "message": "Disconnected successfully from MQTT.", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:06:08.285138Z"}
pioreactor/pioreactor1/test/logs/app
0 1709589968620
{"source": "app", "message": "Disconnected.", "level": "INFO", "task": "stirring", "timestamp": "2024-03-04T22:06:08.133735Z"}
pioreactor/pioreactor1/test/logs/app
0 1709589968609
pioreactor/pioreactor1/test/stirring/state/$unit
0 1709589968600
pioreactor/pioreactor1/test/stirring/duty_cycle/$settable
0 1709589968595
pioreactor/pioreactor1/test/stirring/measured_rpm/$unit
0 1709589968576
pioreactor/pioreactor1/test/stirring/state/$datatype
0 1709589968568
pioreactor/pioreactor1/test/stirring/state/$settable
0 1709589968563
pioreactor/pioreactor1/test/stirring/duty_cycle/$unit
0 1709589968552
pioreactor/pioreactor1/test/stirring/duty_cycle/$datatype
0 1709589968545
pioreactor/pioreactor1/test/stirring/measured_rpm/$datatype
0 1709589968538
pioreactor/pioreactor1/test/stirring/target_rpm/$datatype
0 1709589968529
pioreactor/pioreactor1/test/stirring/target_rpm/$settable
0 1709589968522
pioreactor/pioreactor1/test/stirring/target_rpm
0 1709589968515
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709589968447
pioreactor/pioreactor1/test/stirring/measured_rpm/$settable
0 1709589968427
pioreactor/pioreactor1/test/stirring/measured_rpm
0 1709589968401
pioreactor/pioreactor1/test/stirring/target_rpm/$unit
0 1709589968246
pioreactor/pioreactor1/test/stirring/$properties
0 1709589968234
disconnected
pioreactor/pioreactor1/test/stirring/$state
0 1709589967290
{"source": "app", "message": "Cleaned up GPIO-17.", "level": "DEBUG", "task": "PWM@GPIO-17", "timestamp": "2024-03-04T22:06:07.169059Z"}
pioreactor/pioreactor1/test/logs/app
0 1709589967271
{}
pioreactor/pioreactor1/test/pwms/dc
0 1709589967213
{"source": "app", "message": "Exiting caused by signal Interrupt.", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:06:07.080500Z"}
pioreactor/pioreactor1/test/logs/app
0 1709589967182
EDIT: Here’s an example of traffic when running the Python script via SSH over the same network:
27.48362
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709591446519
{"17": 27.48362}
pioreactor/pioreactor1/test/pwms/dc
0 1709591446262
{"measured_rpm":801.82,"timestamp":"2024-03-04T22:30:46.872577Z"}
pioreactor/pioreactor1/test/stirring/measured_rpm
0 1709591446246
{"setpoint": 300.0, "output_limits_lb": -7.5, "output_limits_ub": 7.5, "Kd": 0.0, "Ki": 0.0, "Kp": 0.009, "integral": -0.0, "proportional": -4.51638, "derivative": 0.0, "latest_input": 801.82, "latest_output": -4.51638, "job_name": "stirring", "target_name": "rpm"}
pioreactor/pioreactor1/test/pid_log/rpm
0 1709591446235
{"source": "app", "message": "stirring is blocking until disconnected.", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:30:38.473562Z"}
pioreactor/pioreactor1/test/logs/app
0 1709591437852
{"17": 32.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709591437423
{"source": "app", "message": "Starting stirring with 300.0 RPM.", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:30:37.725053Z"}
pioreactor/pioreactor1/test/logs/app
0 1709591437389
32.0
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709591437372
{"17": 100.0}
pioreactor/pioreactor1/test/pwms/dc
0 1709591437106
{"source": "app", "message": "Ready.", "level": "INFO", "task": "stirring", "timestamp": "2024-03-04T22:30:37.722432Z"}
pioreactor/pioreactor1/test/logs/app
0 1709591437096
ready
pioreactor/pioreactor1/test/stirring/$state
0 1709591437082
32.0
pioreactor/pioreactor1/test/stirring/duty_cycle
0 1709591436110
300.0
pioreactor/pioreactor1/test/stirring/target_rpm
0 1709591435839
string
pioreactor/pioreactor1/test/stirring/state/$datatype
0 1709591433844
True
pioreactor/pioreactor1/test/stirring/state/$settable
0 1709591433818
%
pioreactor/pioreactor1/test/stirring/duty_cycle/$unit
0 1709591433806
float
pioreactor/pioreactor1/test/stirring/duty_cycle/$datatype
0 1709591433795
False
pioreactor/pioreactor1/test/stirring/measured_rpm/$settable
0 1709591433779
RPM
pioreactor/pioreactor1/test/stirring/target_rpm/$unit
0 1709591433766
target_rpm,measured_rpm,duty_cycle,state
pioreactor/pioreactor1/test/stirring/$properties
0 1709591433760
True
pioreactor/pioreactor1/test/stirring/duty_cycle/$settable
0 1709591433752
RPM
pioreactor/pioreactor1/test/stirring/measured_rpm/$unit
0 1709591433747
MeasuredRPM
pioreactor/pioreactor1/test/stirring/measured_rpm/$datatype
0 1709591433743
float
pioreactor/pioreactor1/test/stirring/target_rpm/$datatype
0 1709591433735
True
pioreactor/pioreactor1/test/stirring/target_rpm/$settable
0 1709591433729
{"source": "app", "message": "Operating with RPM feedback loop.", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:30:34.121096Z"}
pioreactor/pioreactor1/test/logs/app
0 1709591433722
{"source": "app", "message": "Init.", "level": "DEBUG", "task": "stirring", "timestamp": "2024-03-04T22:30:34.031626Z"}
pioreactor/pioreactor1/test/logs/app
0 1709591433424
init
pioreactor/pioreactor1/test/stirring/$state
0 1709591433401
The stirring proceeds as expected in this case.
EDIT: I noticed New Pioreactor release: 24.3.4 (hotfix patch), I will update and try again, though it would be great if you could still give it a go verifying the stirring activation on your end. Thanks again for all your help on this.