From e7ddeccd096c54a31f1354ff9b6d8be9ebb4e6af Mon Sep 17 00:00:00 2001 From: Abdellah El Morabit Date: Mon, 2 Dec 2024 15:06:02 +0100 Subject: made a new features file --- source/features.py | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 source/features.py (limited to 'source/features.py') diff --git a/source/features.py b/source/features.py new file mode 100644 index 0000000..c5e532f --- /dev/null +++ b/source/features.py @@ -0,0 +1,162 @@ +import time +import os +import speech_recognition as sr +from gpiozero import CPUTemperature + +# Error Handling +ERROR_BAD_REQUEST = "the request failed, bad request" +ERROR_UNAUTHORIZED = "you do not have permission to make that request" +ERROR_NOT_FOUND = "the request was not found, try again" +SPEECH_NOT_RECOGNIZED = "we couldn't recognize what you said, try again or \n or check your internet connection" +ERROR_TIMEOUT = "the request took too long check youre internet connection" + +# Initialize components and error handling for debugging +try: + lcd_instance = lcd.LCD() +except Exception as e: + print("Error intializing LCD") +try: + cpu_temp = CPUTemperature() +except Exception as e: + print("Error initializing CPU temperature sensor:", e) + +try: + recognizer = sr.Recognizer() +except Exception as e: + print( + "Error initialzing voice recognition, its possible the speech recognition module isn't installed" + ) + +try: + microphone = sr.Microphone() +except Exception as e: + print( + "Error initialzing the microphone \n check if the sound device package is installed" + ) + + +class fe: + + def __init__(self): + self.clear_terminal = clear_terminal() + self.custom_greeting = custom_greeting() + self.joke_of_the_day = joke_of_the_day() + self.pomodoro = pomodoro() + self.system_readings = system_readings() + self.display_uptime = display_uptime() + self.recognize_speech = recognize_speech() + self.save_notes = save_notes() + self.command_center = command_center() + + # clearing the terminal for a cleaner and program like interaction + def clear_terminal(): + os.system("cls" if os.name == "nt" else "clear") + + # Features + def custom_greeting(): + try: + with open("quotes.txt", "r") as file: + quotes = [quote.strip() for quote in file.readlines()] + except FileNotFoundError: + lcd_instance.text("Quotes file missing", 1) + return + + for quote in quotes: + first_line = quote[:16] + second_line = quote[16:32] + lcd_instance.text(first_line, 1) + lcd_instance.text(second_line, 2) + time.sleep(3) + lcd_instance.clear() + + def joke_of_the_day(): + pass + + def pomodoro(): + try: + duration_minutes = int(input("Enter duration in minutes: ")) + duration_seconds = duration_minutes * 60 + print("Pomodoro started for", duration_minutes, "minutes") + lcd_instance.text("Pomodoro Running", 1) + start_count = 0 + count = 0 + while duration_seconds > 0: + lcd_instance.text( + f"Time left: {duration_minutes}:{duration_seconds * 60}", 2 + ) + time.sleep(1) + duration_seconds -= 1 + count += 1 + if count == start_count + 60: + start_count = start + duration_minutes -= 1 + + lcd_instance.text("Time's Up!", 1) + time.sleep(3) + except ValueError: + lcd_instance.text("Invalid input", 1) + time.sleep(2) + + def system_readings(): + while True: + load = os.getloadavg()[0] + temperature = cpu_temp.temperature if cpu_temp else "N/A" + lcd_instance.clear() + lcd_instance.text(f"CPU Load: {load:.2f}", 1) + lcd_instance.text(f"Temp: {temperature}C", 2) + time.sleep(5) + + def display_uptime(): + try: + with open("/proc/uptime") as f: + uptime_seconds = float(f.readline().split()[0]) + uptime_str = time.strftime("%H:%M:%S", time.gmtime(uptime_seconds)) + lcd_instance.text(f"Uptime: {uptime_str}", 1) + time.sleep(3) + except Exception as e: + lcd_instance.text("Error reading uptime", 1) + print("Error:", e) + + def recognize_speech(): + lcd_instance.text("Listening...", 1) + try: + with microphone as source: + recognizer.adjust_for_ambient_noise(source) + audio = recognizer.listen(source) + output = recognizer.recognize_google(audio) + lcd_instance.text("Recognized:", 1) + lcd_instance.text(output[:16], 2) + + print("Speech recognized:", output) + return output + except sr.UnknownValueError: + lcd_instance.text(SPEECH_NOT_RECOGNIZED, 1) + print(SPEECH_NOT_RECOGNIZED) + except sr.RequestError as e: + lcd_instance.text(ERROR_UNAUTHORIZED, 1) + print(ERROR_UNAUTHORIZED, e) + except Exception as e: + lcd_instance.text("Speech Error", 1) + print("Error:", e) + return None + + def save_notes(): + print("Type your notes (type 'stop' to exit):") + while True: + note = input(": ") + if note.lower() in ["stop", "exit", "quit"]: + break + first_line = note[:16] + second_line = note[16:32] + lcd_instance.text(first_line, 1) + lcd_instance.text(second_line, 2) + time.sleep(3) + + # Command center to execute features + def command_center(): + command = recognize_speech().upper() + if command: + command() + else: + lcd_instance.text(ERROR_NOT_FOUND, 1) + print(ERROR_NOT_FOUND) -- cgit v1.2.3-70-g09d2