From 1f96e10f765ac50546f6e909aabab3ab888b7d71 Mon Sep 17 00:00:00 2001 From: YuruC3 Date: Wed, 16 Jul 2025 17:47:42 +0200 Subject: [PATCH] Added thread locking instead of variable lock --- PC_CONTROL_CODE/dockerInflux/mainDocker.py | 58 +++++++++++----------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/PC_CONTROL_CODE/dockerInflux/mainDocker.py b/PC_CONTROL_CODE/dockerInflux/mainDocker.py index 0499c1a..0270722 100644 --- a/PC_CONTROL_CODE/dockerInflux/mainDocker.py +++ b/PC_CONTROL_CODE/dockerInflux/mainDocker.py @@ -28,7 +28,9 @@ TEMPREADINTERVAL = float(os.getenv("TEMPREADINTERVAL", 15)) TEMPSETING = bool(os.getenv("TEMPSETING", True)) -PROCESSTEMPWAITTIME = float(os.getenv("PROCESSTEMPWAITTIME"), 0.75) +PROCESSTEMPWAITTIME = float(os.getenv("PROCESSTEMPWAITTIME", 0.75)) + +BACKOFFTIME = float(os.getenv("BACKOFFTIME", 0.1)) # INFLUXDB config # token = "apg1gysUeCcxdcRTMmosJTenbEppmUNi9rXlANDB2oNadBdWAu2GVTDc_q_dyo0iyYsckKaOvPRm6ba2NK0y_A==" @@ -60,7 +62,7 @@ MDserial = serial.Serial( lastTempReading = time.time() MDtempDict = {} MDict = {} -currentSerialUsage = False +currentSerialUsage = threading.Lock() fluxSending = False currentTime = 0 lastTempReading = 0 @@ -73,15 +75,15 @@ write_api = inflxdb_client.write_api(write_options=SYNCHRONOUS) def getTemp(): - global MDict, fluxSending, currentSerialUsage + global MDict, fluxSending - currentSerialUsage = True + + with currentSerialUsage: + MDserial.write(f"{GETTMPCMND}\n\r".encode()) + time.sleep(1) + MDreturning = MDserial.read_until(" >").decode() - MDserial.write(f"{GETTMPCMND}\n\r".encode()) - time.sleep(1) - MDreturning = MDserial.read_until(" >").decode() - - currentSerialUsage = False + # MDict = {} @@ -142,7 +144,6 @@ def getTemp(): def setSpeed(inSpeeDict: dict): - global currentSerialUsage bpavrg = 0 # default @@ -154,23 +155,21 @@ def setSpeed(inSpeeDict: dict): outfanprcntg = int((bpavrg / (HIGH_FAN_TRSHD - LOW_FAN_TRSHD)) * TEMP_FACTOR) # os.system(f"echo setting {outfanprcntg}%") - currentSerialUsage = True + with currentSerialUsage: - # Set fan speed - if outfanprcntg >= 20: - MDserial.write((f"{SETFANCMND} {str(outfanprcntg)} \n\r").encode()) - print(f"setting {outfanprcntg}%", flush=True) + # Set fan speed + if outfanprcntg >= 20: + MDserial.write((f"{SETFANCMND} {str(outfanprcntg)} \n\r").encode()) + print(f"setting {outfanprcntg}%", flush=True) - currentSerialUsage = False - return 0 - else: - # Set default value - MDserial.write((f"{SETFANCMND} {str(DEFOUTPRCNTG)} \n\r").encode()) + return 0 + else: + # Set default value + MDserial.write((f"{SETFANCMND} {str(DEFOUTPRCNTG)} \n\r").encode()) - currentSerialUsage = False - return 1 + return 1 + - currentSerialUsage = False # If something goes super wrong return -1 @@ -233,7 +232,7 @@ lastTempReading = time.time() def mainCodeHere(): while True: - global MDict, fluxSending, currentTime, lastTempReading, currentSerialUsage + global MDict, fluxSending, currentTime, lastTempReading # https://stackoverflow.com/questions/52578122/not-able-to-send-the-enter-command-on-pyserial # get temperature data, wait for MD1200 to answer and store @@ -241,7 +240,8 @@ def mainCodeHere(): currentTime = time.time() if currentTime - lastTempReading >= TEMPREADINTERVAL: - getTemp() + + getTemp() lastTempReading = currentTime if MDict and TEMPSETING: @@ -270,11 +270,11 @@ def mainCodeHere(): else: print(f"temperature not yet pulled.\nFalling back do default fan speed", flush=True) # os.system(f"echo temperature not yet pulled.\nFalling back do default fan speed") - currentSerialUsage = True + + with currentSerialUsage: + MDserial.write((f"{SETFANCMND} {str(DEFOUTPRCNTG)} \n\r").encode()) - MDserial.write((f"{SETFANCMND} {str(DEFOUTPRCNTG)} \n\r").encode()) - - currentSerialUsage = False + time.sleep(EPPYSLEEPY)