Description: I would like to request support for setting alarms and reminders using intents, the same as assist timers. This feature should allow users to set, manage, and trigger alarms and reminders using voice commands, provide feedback using Satellite TTS, and also include the option to set and receive notifications from the phone companion app. Additionally, the feature should allow modifying alarms and reminders via voice commands and stopping them using the “stop” wake word or by pressing a button on an ESPHome satellite device.
Proposed Implementation
Unified Intent Handling: Use the same voice/intent system as Assist timers (e.g., “Set an alarm for 7 AM” or “Remind me to water the plants at 12 PM”).
Satellite Device Support:
Play customizable ringtones/alerts on satellite devices (e.g., ESPHome satellites, Wyoming Satellite, etc.) when triggered.
TTS announcements (e.g., Alarm: “It’s 7 AM” or Reminder: “Water the plants”).
Assist Companion App:
If an alarm/reminder is created via the mobile app (not via voice satellite), send a push notification instead of playing audio on satellites.
Allow users to snooze/stop alarms from notifications.
Use Cases
A user says, “Wake me up tomorrow at 7 AM.” via bedroom satellite. The next day at 7 AM, the satellite speaker in the bedroom plays a ringtone and announce, “It’s 7 AM.”
A user sets a reminder via the mobile app for “Take medication at 2 PM.” At 2 PM, their phone receives a push notification “Take medication.”
A recurring “Weekdays only” alarm triggers TTS on specific satellites (e.g., kitchen speaker) while ignoring others.
Additional Features:
Recurring events
Snooze options
Notifications integration
Context-aware commands
Satellite TTS for feedback
Phone Companion App for setting and modifying alarms and reminders
“Stop” Wake Word to stop alarms and reminders when ringing.
Stop alarms and reminders when ringing by pressing a button on an ESPHome satellite device (e.g., HA Voice PE).
Allow custom ringtones via media sources or URL inputs.
Rationale: This feature would enhance the functionality of Home Assistant by allowing users to easily set and manage alarms and reminders through natural language, similar to how timers are handled. The addition of Satellite TTS provides audible feedback, making the system more interactive and user-friendly.
I agree that this would be a great feature. It will require solving several problems that we bypassed with timers:
(1) There is no way in HA to manipulate a voice timer which is OK for now because they aren’t around for very long and only ring once. But an alarm that could repeat needs to be visible and (I think) controllable in HA.
(2) Deciding where to ring the alarm is a hard problem. For timers, we always go with the device that the timer was started on. With alarms, though, you probably aren’t going to be next to that specific device. It seems like we would need to know who set the alarm and the best way to contact that person before this would work well.
@omaramin-2000 thank you for writing the alarms and reminders integration. I had some issues with it initially (the alarm didn’t create an entity and then I couldn’t stop the alarm ), which sent me into a rabbit hole of vibe coding. I eventually deviated quite a lot from the original integration so I decided to publish it as a separate one rather than pull request my changes. The new integration focus is more on the alarm clock experience. Compared to the original:
alarms loop on media players until stopped (I dropped support for satellite via announce although satellites can still be used via their associated media player)
alarms can be stopped directly by stopping the media player (e.g. Ok Google, stop; pressing button - more like a traditional alarm clock experince)
added support for HA media browser to select media including support for main media providers/servers and media search support
added companion cards to display, add, edit, disable, delete, snooze and stop alarms
increased control over what will be announced
changes to how items scheduling is managed
I also created a noise generator integration that produce infinite tonal noises which can be used in alarm for a more traditional alarm experience.
As the integration is still in development for 8 months, not all features are yet supported. Plus, I planned to provide both satellite and media player as an option for dual audio output at the same time but I found that could make confusion when alarm/reminder is ringing so, it can struggle to snooze/stop so, my final decision was to provide the choice of setting them independently per alarm/reminder (not both at the same time) plus, it will be harder to code in the integration as it will encounter a huge amount of work and bug surface. But recently, I found an Alarm Clock card that can be used to set alarms on media players almost the same way I used to implement in my integration entekadesign/kobold-alarm-clock-card: Kobold: A multi-alarm clock for Home Assistant. (Mirror of https://codeberg.org/entekadesign/kobold-alarm-clock-card), and when I contacted the owner of that integration to consider collaborating and supporting this card with my integration, he said that he is designing his project for a different purpose, and he couldn’t take on the development of my project now. So, I don’t think it’s currently worth implementing the option for media players in my integration as an alternative to voice satellites, as that could be done easily with automations, using something like Kobold, and so on. Plus, if I include the media player feature, it will make the integration harder to code, and I would likely be overcomplicating it to imitate something that already exists. With that, I have been thinking since yesterday to completely remove this option to just focus on voice satellites.So, tell me what you suggest for that?
There are two functions that are important for me for the alarm clock - for alarms to cycle until stopped (because my daughter can often sleep through her alarm) and the ability to stop alarms by stopping the media player (because my daughter is not allowed to have her phone overnight and I wanted her to be able to stop the alarm easily).
I was able to achieve those functions on media players but not on satellites when using announce because there was no way to programmatically distinguish between transition from the end of the media playback to the next loop, and a button press on the satellite - in both cases playback just stops. I could use the media duration but this was unreliable. So on satellite, I could only reliably achieve either infinite loops or alarm stop on button press, but not both. This is not a problem when using the alarm via a satellite media player. As such, the announce pathway become redundant for me and I dropped it.
Although I still haven’t finished the stable development in my integration, I finally dropped the media player functionality to focus on voice satellites, after struggling with supporting both options for a long time. Since you were able to support media players in your own fork, I’ll leave this part for you (already have updated my documentation to include this) as I will handle the functionality for setting Alarms&Reminders on satellites either using sentences or via the dashboard, and hopefully will improve the rest of features (repeat functionality, LLM handling, actionable mobile notifications, and so on) and will implement the best satellite announcement experience by handling media duration (in plan), stopping using on device stop word, and button press as well (e.g, Voice PE). Anyway, I want to thank you a lot for helping with that by creating a media player-focused version for this project, with the hope of finishing building my integration soon during this moment. Additionally, it will be great if you could help with developing my satellite-focused version as well.
I’m interested in using this. Any special configuration or setup required to get voice assistant intents working?
Truthfully, I want to use the voice satellite to setup the alarm. Then sync the alarm list back to the device and then service the alarm locally in the event it loses connection to my home assistant server.
My server has been reliable, but if an alarm were missed because HA wasn’t available my wife would be really upset.
So far I’ve been able to setup an alarm with the dashboard, but can’t figure out to the voice assistant part, seems like the custom sentences aren’t recognized.
I don’t use the voice assistant intents so I didn’t really test this functionality. You need to enable LLM support in the integration configuration (Settings → Devices & services → HA Alarm Clock → Gear icon). The LLM is able to setup all the aspects of the alarm but I think that with regards to media playback, configuring anything besides the default media will be difficult because the LLM can’t search for media.
I don’t think the satellite will be able to service those alarms locally - the alarms as they are currently programed require functions that the satellite doesn’t have.
This integration focuses mainly on looped playback, ability to stop alarms through the media player, media selection and the cards to manage the alarms. The drawback of the added complexity and flexibility for each alarm are the difficulties this brings when setting alarms with LLM. Saying that, if you are happy with default media, it should be possible.