Skip to content
Snippets Groups Projects
smart_alarm_clock.py 2.42 KiB
Newer Older
  • Learn to ignore specific revisions
  • from typing import Optional
    
    
    SurajSSingh's avatar
    SurajSSingh committed
    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)