Growing up I had an alarm clock that you put a CD into and it would fade in the CD instead of an alarm noise. I really loved this, though having to wake up super early for school everyday, I will admit that I developed negative associations with the first track on many albums.
I created an improvised version of this a few years ago: a timer switch hooked up to a light, a cassette player and a water heater. When the timer went off all three would turn on. This worked but wasn't great cause nothing faded in.
I remodeled my bedroom last summer and wanted to replace this alarm with something more sophisticated.
I used a Raspberry Pi to do the following: - At the set alarm time, access my media server and generate a playlist of 10 random songs. Start this playlist and slowly increase the volume. - I bought a separate module to hook up to a lamp that points at where I sleep. This module lets me slowly turn up the brightness of the lamp as the music volume increases.
The water heater is hooked up to a timer in my kitchen now. But I just finished building an arduino based wifi switch, so once I get it integrated, that switch will get turned on 5-10 minutes before the alarm is set to go off and heat my water for coffee.
I built a dashboard for all of this using HTMX. It lets you set the alarm time, snooze, play arbitrary playlists, adjust the light etc. I also added a weather widget and I have a JSON file of all important birthdays in my life, so it tells me whos birthday it is when I go to review the weather.
Something that HN may appreciate, I have it setup so when I ssh into the Pi, I get dropped into a tmux session where an instance of emacs is running with the actual alarm code being executed inside of it. This makes editing and trying the new functions sort of like a lisp machine. You get dropped into emacs and can tweak all the scripts and test them in a sort of live environment (you have to restart the server to update the dashboard but everything else is 'live'). I have a dream of rewriting this so it really is a lisp machine and everything can be `c-x c-e`'d to run but I doubt I'll ever get around to that.
I would also like to integrate motorized blinds and open them up when I wake. I'm still researching this, if anyone has recommendations.