diff --git a/alarm.py b/alarm.py index a76e158c029024034aa4f2d1c7cb51cbc6692599..deb6a2220dd62504adf0440fe8ddae1816d8c092 100644 --- a/alarm.py +++ b/alarm.py @@ -1,35 +1,3 @@ -# # Code adapted from https://raspberrydiy.com/raspberry-pi-alarm-clock/ -# import vlc -# from time import sleep -# # from dataclasses import dataclass, field -# -# # @dataclass -# # class AlarmClock: -# -# # sound: str -# -# -# # Constants -# VLC_INSTANCE = vlc.Instance("--input-repeat=999") -# PLAYER = VLC_INSTANCE.media_player_new() -# SONG = VLC_INSTANCE.media_new("/home/pi/Music/song.mp3") -# VOLUME = 100 -# -# PLAYER.set_media(SONG) -# PLAYER.audio_set_volume(VOLUME) -# -# def play_alarm(volume: int = VOLUME): -# PLAYER.set_media(SONG) -# PLAYER.audio_set_volume(volume) -# -# def stop_alarm(): -# pass -# -# def snooze_alarm(snooze_time: int = 60): -# pass -# -# -# from enum import Enum, auto from datetime import time, datetime @@ -59,30 +27,28 @@ class BaseAlarmClock: return self._wake_time def set_alarm(self, wake_time: time) -> time: - print(f"SETTING ALARM to: {wake_time}") + # print(f"SETTING ALARM to: {wake_time}") self._current_state = AlarmState.SET self._wake_time = wake_time return self._wake_time def start_alarm(self) -> None: - print("STARTING ALARM") + # print("STARTING ALARM") self._current_state = AlarmState.RUNNING def sound_alarm(self) -> None: - print("SOUNDING ALARM") + # print("SOUNDING ALARM") self._current_state = AlarmState.PLAYING def snooze_alarm(self) -> None: - print("SNOOZING ALARM") + # print("SNOOZING ALARM") self._current_state = AlarmState.SNOOZED def stop_alarm(self, deactivate: bool = True) -> None: - print("STOPPING ALARM") - if self._current_state is AlarmState.PLAYING: - print("STOPPED PLAYING ALARM") + # print("STOPPING ALARM") + # if self._current_state is AlarmState.PLAYING: + # print("STOPPED PLAYING ALARM") self._current_state = AlarmState.DEACTIVATED if deactivate else AlarmState.SET - def alarm_check_reached(self, current_time: time = datetime.now().time()) -> bool: - # result = current_time >= self.wake_time if self.current_state is AlarmState.RUNNING else False - # print(f"{result = }") + def alarm_check_reached(self, current_time: time) -> bool: return current_time >= self._wake_time if self._current_state is AlarmState.RUNNING else False diff --git a/simple_alarm_clock.py b/simple_alarm_clock.py index 002a9dceb9714b972814aa0a4edbe07cad0af0f7..0f9f9978ee33e558a86cca664bb32f71375f625f 100644 --- a/simple_alarm_clock.py +++ b/simple_alarm_clock.py @@ -10,31 +10,54 @@ from pynput import keyboard # 4. Snooze Alarm - Stop the alarm sound and wait for some time to play the alarm again # 5. Stop Alarm - If the alarm is active or is playing, stop the alarm (deactivate state) -ALARM_TIME = time(19, 13, 0) +ALARM_TIME = time(15, 5, 0) SNOOZE_KEY = keyboard.Key.up ALARM_OFF_KEY = keyboard.Key.esc SNOOZE_SEC = 5 -def simple_alarm_mode(alarm_clock: BaseAlarmClock): - alarm_clock.start_alarm() - while not alarm_clock.alarm_check_reached(): - print(f"ALARM SLEEPING @: {datetime.now().time()}") - sleep(1) - alarm_clock.sound_alarm() - while alarm_clock.current_state is not AlarmState.DEACTIVATED: - with keyboard.Events() as events: - for event in events: - if event.key == ALARM_OFF_KEY: - alarm_clock.stop_alarm() - break - elif event.key == SNOOZE_KEY: - alarm_clock.snooze_alarm() - sleep(SNOOZE_SEC) - alarm_clock.sound_alarm() - break +class SimpleAlarmClock(BaseAlarmClock): + def set_alarm(self, wake_time: time) -> time: + print(f"SETTING ALARM to: {wake_time}") + return super(SimpleAlarmClock, self).set_alarm(wake_time) + + def start_alarm(self) -> None: + print("STARTING ALARM") + super(SimpleAlarmClock, self).start_alarm() + + def sound_alarm(self) -> None: + print("SOUNDING ALARM") + super(SimpleAlarmClock, self).sound_alarm() + + def snooze_alarm(self) -> None: + print("SNOOZING ALARM") + super(SimpleAlarmClock, 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(SimpleAlarmClock, self).stop_alarm() + + def simple_alarm_mode(self): + 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_clock = BaseAlarmClock(ALARM_TIME) - simple_alarm_mode(alarm_clock) + alarm_clock = SimpleAlarmClock(ALARM_TIME) + alarm_clock.simple_alarm_mode() diff --git a/smart_alarm_clock.py b/smart_alarm_clock.py index 5e6d4919e080e8773f0ee7f402779b9ffe41dffe..12c4eb584fafec5456447f6c955d76716da3dbdc 100644 --- a/smart_alarm_clock.py +++ b/smart_alarm_clock.py @@ -1,5 +1,76 @@ +from typing import Optional + from alarm import BaseAlarmClock, AlarmState from datetime import time, datetime from time import sleep from pynput import keyboard -import vlc \ No newline at end of file +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)