From ff6d3a97a948ffe43fdab7bb1846896a9a43998a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frei?= Date: Wed, 17 Dec 2025 15:11:44 +0100 Subject: [PATCH] Dateien nach "/" hochladen --- berry_yogurt_4_05.py | 80 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 berry_yogurt_4_05.py diff --git a/berry_yogurt_4_05.py b/berry_yogurt_4_05.py new file mode 100644 index 0000000..b877196 --- /dev/null +++ b/berry_yogurt_4_05.py @@ -0,0 +1,80 @@ +from gpiozero import Button, LED # Import libraries +from time import sleep +from signal import pause +from datetime import datetime, timedelta +from pathlib import Path +import pandas as pd +import schedule + +best_before_exeeded = timedelta(seconds=18) # Define thresholds +overdue = timedelta(seconds=30) + +consumption_overview = [] # Key variables +current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + +infrared_sensor = Button(2) # GPIO pins of external hardware +orange_led = LED(4) +red_led = LED(17) + +def on_a_sensor_signal(): # On a signal: update list, save csv and turn off led (if necessary) + current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + if len(consumption_overview) == 0 or consumption_overview[-1]['Status'] == 'Yogurt eaten up': + new_status = "Yogurt open" + passed_time = "pending" + consumption_overview.append({'Status':new_status, 'Time':current_time, 'Consumed In':passed_time}) + else: + new_status = "Yogurt eaten up" + + if len(consumption_overview) > 0 and consumption_overview[-1]['Status'] == 'Yogurt open': + opening_time_str = consumption_overview[-1]['Time'] + else: + opening_time_str = current_time + + opening_time = datetime.strptime(opening_time_str, '%Y-%m-%d %H:%M:%S') + now = datetime.strptime(current_time, '%Y-%m-%d %H:%M:%S') + time_difference = now - opening_time + + consumption_overview.append({'Status':new_status, 'Time':current_time, 'Consumed In':str(time_difference)}) + print(consumption_overview[-1]) + + if len(consumption_overview) > 0 and consumption_overview[-1]['Status'] == 'Yogurt eaten up': + orange_led.off() + print("orange led pin 4 turned off") + red_led.off() + print("red led pin 17 turned off") + df = pd.DataFrame(consumption_overview) + currentDateTime = datetime.now().strftime("%Y%m%d_%H%M%S") + df.to_csv(f"Raspberry Yogurt_{currentDateTime}.csv", index=False) + print("CSV file saved") + +def check(): # Runs periodically the led_check as long as ayogurth is open + schedule.every(6).seconds.do(led_check) + + while not infrared_sensor.is_active and consumption_overview[-1]['Status'] == 'Yogurt open': + schedule.run_pending() + +def led_check(): # Checks if an led needs to be turend on + current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + if len(consumption_overview) > 0 and consumption_overview[-1]['Status'] == 'Yogurt open': + opening_time_str = consumption_overview[-1]['Time'] + else: + opening_time_str = current_time + + opening_time = datetime.strptime(opening_time_str, '%Y-%m-%d %H:%M:%S') + now = datetime.strptime(current_time, '%Y-%m-%d %H:%M:%S') + time_difference = now - opening_time + print("open since", time_difference) + + if overdue > time_difference >= best_before_exeeded: + orange_led.on() + print("ORANGE LED ON", "open since", time_difference) + elif time_difference >= overdue: + orange_led.off() + print("orange led off") + red_led.on() + print("RED LED ON", "open since", time_difference) + +while True: # Keeps the program running to listen for sensor events + infrared_sensor.when_pressed = on_a_sensor_signal + infrared_sensor.when_released = check + pause()