Spaces:
Sleeping
Sleeping
added led control
Browse files
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 |
|