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