linx5o commited on
Commit
1a52aea
·
1 Parent(s): 2e19dc1

added led control

Browse files
Files changed (1) hide show
  1. app.py +177 -0
app.py CHANGED
@@ -22,6 +22,14 @@ norm_od_graph = None
22
  growth_rate_graph = None
23
  all_graph = False
24
  temp_mqtt_auto = None
 
 
 
 
 
 
 
 
25
 
26
  REQUEST_INTERVAL = 60
27
 
@@ -98,9 +106,13 @@ def on_message_worker(client, userdata, message):
98
  global experiment
99
  global running
100
  global temp_mqtt_auto
 
 
101
  experiment = data.get("experiment", None)
102
  running = data.get("running", [])
103
  temp_mqtt_auto = data.get("temperature_automation", None)
 
 
104
 
105
  def on_message(client, userdata, message):
106
  payload = message.payload.decode("utf-8")
@@ -166,6 +178,20 @@ def get_running_jobs(client, reactor):
166
  while experiment is None and (time.time() - start_time) < timeout:
167
  time.sleep(1)
168
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
169
  async def get_graph(placeholder):
170
  try:
171
  st.session_state["client"].loop_start()
@@ -226,6 +252,15 @@ if submit_button:
226
  st.session_state["temp_auto"] = "Record Temp Only"
227
 
228
  st.session_state["temp"] = None
 
 
 
 
 
 
 
 
 
229
 
230
  # Save the client to the session state
231
  st.session_state["client"] = client
@@ -901,6 +936,148 @@ if st.session_state["experiment"] is not None:
901
 
902
  # st.divider()
903
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
904
  st.header("Graphs")
905
 
906
 
 
22
  growth_rate_graph = None
23
  all_graph = False
24
  temp_mqtt_auto = None
25
+ rpm_mqtt = None
26
+ led_mqtt = None
27
+
28
+ if st.session_state.get("channels", None) is not None:
29
+ st.session_state["channel_a"] = int(st.session_state["channels"].get("A", 0))
30
+ st.session_state["channel_b"] = int(st.session_state["channels"].get("B", 0))
31
+ st.session_state["channel_c"] = int(st.session_state["channels"].get("C", 0))
32
+ st.session_state["channel_d"] = int(st.session_state["channels"].get("D", 0))
33
 
34
  REQUEST_INTERVAL = 60
35
 
 
106
  global experiment
107
  global running
108
  global temp_mqtt_auto
109
+ global rpm_mqtt
110
+ global led_mqtt
111
  experiment = data.get("experiment", None)
112
  running = data.get("running", [])
113
  temp_mqtt_auto = data.get("temperature_automation", None)
114
+ rpm_mqtt = data.get("stirring", None)
115
+ led_mqtt = data.get("leds", None)
116
 
117
  def on_message(client, userdata, message):
118
  payload = message.payload.decode("utf-8")
 
178
  while experiment is None and (time.time() - start_time) < timeout:
179
  time.sleep(1)
180
 
181
+ if st.session_state["jobs"]["temperature_automation"]:
182
+ if temp_mqtt_auto == "thermostat":
183
+ st.session_state["temp_auto"] = "Heat To Temp"
184
+ elif temp_mqtt_auto == "only_record_temperature":
185
+ st.session_state["temp_auto"] = "Record Temp Only"
186
+
187
+ st.session_state["temp"] = None
188
+
189
+ if st.session_state["jobs"]["stirring"]:
190
+ print(rpm_mqtt)
191
+ st.session_state["stirring_speed"] = rpm_mqtt
192
+
193
+ st.session_state["channels"] = led_mqtt
194
+
195
  async def get_graph(placeholder):
196
  try:
197
  st.session_state["client"].loop_start()
 
252
  st.session_state["temp_auto"] = "Record Temp Only"
253
 
254
  st.session_state["temp"] = None
255
+
256
+ if st.session_state["jobs"]["stirring"]:
257
+ print(rpm_mqtt)
258
+ st.session_state["stirring_speed"] = rpm_mqtt
259
+
260
+ st.session_state["channel_a"] = int(led_mqtt.get("A", 0))
261
+ st.session_state["channel_b"] = int(led_mqtt.get("B", 0))
262
+ st.session_state["channel_c"] = int(led_mqtt.get("C", 0))
263
+ st.session_state["channel_d"] = int(led_mqtt.get("D", 0))
264
 
265
  # Save the client to the session state
266
  st.session_state["client"] = client
 
936
 
937
  # st.divider()
938
 
939
+ st.header("LEDS")
940
+
941
+ cols = st.columns(4)
942
+
943
+ with cols[0]:
944
+ st.write("Channel A")
945
+ with st.form("led_form_a"):
946
+ channel_a = st.number_input("Brightness", min_value=0, max_value=100, step=1, value=st.session_state.get("channel_a", 0), key="channel_a")
947
+ channel_a_submit = st.form_submit_button("Update Channel A")
948
+
949
+ with cols[1]:
950
+ st.write("Channel B")
951
+ with st.form("led_form_b"):
952
+ channel_b = st.number_input("Brightness", min_value=0, max_value=100, step=1, value=st.session_state.get("channel_b", 0), key="channel_b")
953
+ channel_b_submit = st.form_submit_button("Update Channel B")
954
+
955
+ with cols[2]:
956
+ st.write("Channel C")
957
+ with st.form("led_form_c"):
958
+ channel_c = st.number_input("Brightness", min_value=0, max_value=100, step=1, value=st.session_state.get("channel_c", 0), key="channel_c")
959
+ channel_c_submit = st.form_submit_button("Update Channel C")
960
+
961
+ with cols[3]:
962
+ st.write("Channel D")
963
+ with st.form("led_form_d"):
964
+ channel_d = st.number_input("Brightness", min_value=0, max_value=100, step=1, value=st.session_state.get("channel_d", 0), key="channel_d")
965
+ channel_d_submit = st.form_submit_button("Update Channel D")
966
+
967
+
968
+ if channel_a_submit:
969
+ pass
970
+
971
+ if channel_b_submit:
972
+ payload = {
973
+ "command": "set_led_intensity",
974
+ "reactor": reactor,
975
+ "experiment": st.session_state["experiment"],
976
+ "brightness": channel_b,
977
+ "led": "B"
978
+ }
979
+
980
+ payload_str = json.dumps(payload)
981
+
982
+ st.session_state["client"].loop_start()
983
+
984
+ st.session_state["client"].publish("pioreactor/control", payload_str, qos=1)
985
+
986
+ time.sleep(1)
987
+
988
+ # Check if the LED automation job is running
989
+ get_running_jobs(st.session_state["client"], reactor)
990
+
991
+ st.session_state["client"].loop_stop()
992
+
993
+ if channel_b == int(led_mqtt.get("B", 0)):
994
+ st.success("LED Intensity updated!")
995
+ else:
996
+ st.error("Failed to update LED Intensity.")
997
+ st.session_state["experiment"] = None
998
+
999
+ for run in running:
1000
+ st.session_state["jobs"][run] = True
1001
+
1002
+ st.session_state["experiment"] = experiment
1003
+
1004
+ time.sleep(3)
1005
+ st.rerun()
1006
+
1007
+ if channel_c_submit:
1008
+ payload = {
1009
+ "command": "set_led_intensity",
1010
+ "reactor": reactor,
1011
+ "experiment": st.session_state["experiment"],
1012
+ "brightness": channel_c,
1013
+ "led": "C"
1014
+ }
1015
+
1016
+ payload_str = json.dumps(payload)
1017
+
1018
+ st.session_state["client"].loop_start()
1019
+
1020
+ st.session_state["client"].publish("pioreactor/control", payload_str, qos=1)
1021
+
1022
+ time.sleep(1)
1023
+
1024
+ # Check if the LED automation job is running
1025
+ get_running_jobs(st.session_state["client"], reactor)
1026
+
1027
+ st.session_state["client"].loop_stop()
1028
+
1029
+ if channel_c == int(led_mqtt.get("C", 0)):
1030
+ st.success("LED Intensity updated!")
1031
+ else:
1032
+ st.error("Failed to update LED Intensity.")
1033
+ st.session_state["experiment"] = None
1034
+
1035
+ for run in running:
1036
+ st.session_state["jobs"][run] = True
1037
+
1038
+ st.session_state["experiment"] = experiment
1039
+
1040
+ time.sleep(3)
1041
+ st.rerun()
1042
+
1043
+ if channel_d_submit:
1044
+ payload = {
1045
+ "command": "set_led_intensity",
1046
+ "reactor": reactor,
1047
+ "experiment": st.session_state["experiment"],
1048
+ "brightness": channel_d,
1049
+ "led": "D"
1050
+ }
1051
+
1052
+ payload_str = json.dumps(payload)
1053
+
1054
+ st.session_state["client"].loop_start()
1055
+
1056
+ st.session_state["client"].publish("pioreactor/control", payload_str, qos=1)
1057
+
1058
+ time.sleep(1)
1059
+
1060
+ # Check if the LED automation job is running
1061
+ get_running_jobs(st.session_state["client"], reactor)
1062
+
1063
+ st.session_state["client"].loop_stop()
1064
+
1065
+ if channel_d == int(led_mqtt.get("D", 0)):
1066
+ st.success("LED Intensity updated!")
1067
+ else:
1068
+ st.error("Failed to update LED Intensity.")
1069
+ st.session_state["experiment"] = None
1070
+
1071
+ for run in running:
1072
+ st.session_state["jobs"][run] = True
1073
+
1074
+ st.session_state["experiment"] = experiment
1075
+
1076
+ time.sleep(3)
1077
+ st.rerun()
1078
+
1079
+ st.divider()
1080
+
1081
  st.header("Graphs")
1082
 
1083