from typing import Optional from alarm import BaseAlarmClock, AlarmState from datetime import time, datetime from time import sleep from pynput import keyboard import numpy as np import vlc SNOOZE_KEY = keyboard.Key.up ALARM_OFF_KEY = keyboard.Key.esc SNOOZE_SEC = 5 def softmax(arr): val = np.exp(arr) return val / sum(val) class SmartAlarmClock(BaseAlarmClock): def __init__(self, wake_time: Optional[time] = None, vlc_player=None): if wake_time: self.set_alarm(wake_time) super().__init__() def set_alarm(self, wake_time: time) -> time: print(f"SETTING ALARM to: {wake_time}") return super(SmartAlarmClock, self).set_alarm(wake_time) def start_alarm(self) -> None: print("STARTING ALARM") super(SmartAlarmClock, self).start_alarm() def sound_alarm(self) -> None: print("SOUNDING ALARM") super(SmartAlarmClock, self).sound_alarm() def snooze_alarm(self) -> None: print("SNOOZING ALARM") super(SmartAlarmClock, self).snooze_alarm() def stop_alarm(self, deactivate: bool = True) -> None: print("STOPPING ALARM") if self._current_state is AlarmState.PLAYING: print("STOPPED PLAYING ALARM") super(SmartAlarmClock, self).stop_alarm() def smart_alarm_mode(self, model): self.start_alarm() while not self.alarm_check_reached(datetime.now().time()): print(f"ALARM SLEEPING @: {datetime.now().time()}") sleep(1) self.sound_alarm() while self.current_state is not AlarmState.DEACTIVATED: with keyboard.Events() as events: for event in events: if event.key == ALARM_OFF_KEY: self.stop_alarm() break elif event.key == SNOOZE_KEY: self.snooze_alarm() sleep(SNOOZE_SEC) self.sound_alarm() break if __name__ == '__main__': alarm_hour = int(input("What hour do you want the alarm to go off at?")) alarm_minute = int(input("What minute do you want the alarm to go off at?")) alarm_second = int(input("What second do you want the alarm to go off at?")) alarm_time = time(alarm_hour, alarm_minute, alarm_second) alarm_clock_class = SmartAlarmClock(alarm_time) ai_model = None alarm_clock_class.smart_alarm_mode(ai_model)