Dateien nach "/" hochladen
This commit is contained in:
commit
ff6d3a97a9
80
berry_yogurt_4_05.py
Normal file
80
berry_yogurt_4_05.py
Normal file
@ -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()
|
||||
Loading…
x
Reference in New Issue
Block a user