Skip to content

OpenVoiceOS/ovos-skill-alerts

 
 

Repository files navigation

Alerts

Summary

A skill to manage alarms, timers, reminders, events and todos and optionally sync them with a CalDAV service.

Description

The skill provides functionality to create alarms, timers, reminders and todo (lists), remove them by name, time, or type, and ask for what is active. If you choose to syncronize with a DAV server, you can also access your reminders and todo lists from other devices.

Alarms and reminders may be set to recur daily or weekly. An active alert may be snoozed for a specified amount of time while it is active. Any alerts that are not acknowledged will be added to a list of missed alerts that may be read and cleared when requested.

If you were away, your device was off, or the device was napping, ask for a summary of what was missed. The number of notifications missed can be seen on the upper left corner of the Home screen.

Distinction between reminder, event and todo

Events
Appointments, gigs, ... that may (but not necessarily) have a start and end time. Like this you are notified if an e.g. appointment collides with another one. Events may be created with a prenotification in advance

Reminders
Less formal dates that only have a start time.
(Although you can set a repeating reminder also with an endpoint - eg "remind me to take out the trash every day at 7pm until next saturday")

Todos
Non time related "short term memory" for things to do. Todos can be organised in lists. Eg shopping list

Alert
is a bucket term for all of the different types.


Scenarios

Keywords are underlined, alert names italic
if not specifically mentioned (like bread timer, tennis event), the name defaults to the time it is set for (eg 8 AM alarm, 2 minute timer)

Alarms, Timers, Reminders, Events

One time alarms, timers, reminders or events:

  • "Set an alarm for 8 AM."
  • "Set a bread timer for 30 minutes."
  • "Schedule a tennis event for 2 PM on friday spanning 2 hours." ... (events may be created with a prenotification in advance)

HINT: A timer started without a time specified acts like a stop timer counting up from now. To stop it and voice the time delta say "Timer stop".

Recurring alarms, reminders or events:

  • "Set a daily alarm for 8 AM."
  • "Set an alarm for 8 AM on saturdays."
  • "remind me to take out the trash every Thursday and Sunday at 7 PM."

OCP Alarm:
(Alarm triggering Media Player; depends on the OCP capabilities of your device/serveing instance)

  • "wake me up at 8 AM with music." (in general: "... with {media type})
    -> the skill will ask you which media title to play -> lookup media in the media library
  • "wake me with music." (change/set media on an already created alarm; next alarm will be chosen)

Reschedule an existing alarm, timer, reminder or event:
(duration or fixed time)

  • "Reschedule my 8 AM alarm at 9 AM."
  • "Push the tennis event by one hour."
  • "Move my next event one hour earlier."
  • "Extend the bread timer by 2 minutes." (or: Extend the bread timer until 10 am)
  • "Change the 8 AM alarm recurring only mondays and tuesdays."
  • "Change tennis event length to 3 hours."

HINT: You can reschedule the time of a recurring alarm and will be asked if that applies to all or just the next one.

Query:

  • "When is my next alarm?"
  • "Which reminders are scheduled today?"
  • "Are there any events between friday and sunday?" (also: "between friday 10am and 3 pm")
    running timer
  • "How much time is left on my bread timer?"

Cancel:

  • specific type/name: "Cancel my 8 AM alarm." (in general: "cancel my {name} {type}")
  • all / of a type: "Cancel all alerts." / "Cancel all alarms."
  • on a specific day: "Cancel alerts on saturday."
  • in a time period: "Cancel alerts between Friday 8 AM and 10 AM."
  • next: "Cancel my next alarm."

CAUTION: Double check if you "cancel all", especially when using DAV, as it will drop all of the reminder/events.

Active alert (expired and currently speaking or playing):

  • dismiss: "Stop alert."
  • snooze: "Snooze." (factory default is 15 minutes)
  • duration: "Snooze for 1 minute." / "Snooze until 8 AM."

HINT: You can also "snooze" an active reminder/timer with "remind me again at 10 AM." / "extend by 2 minutes".
The alert name must not be mentioned in this instance. Active alerts are always considerred directly editable.

Missed alerts (expired and not acknowledged):

  • "Which alert did i miss?"
  • "Missed any alerts?"

Todo

  • walk the dog
  • shopping
    • milk
    • toast

(When using nextcloud as DAV server, be sure to use the "Tasks" plugin application)

Create:

  • "Remind me to walk the dog"
  • "create a shopping list" (with the option to populate the list afterwards)

Sublist:

  • "add items to the shopping list" -> set the items one by one: eg. milk pling toast pling .. (silence stops recording)
    (list is shown on screen/voiced in advance)

Complete todos:

  • "scratch milk entry from the shopping list"
  • Optionally remove one/multiple; list is shown on screen/voiced : "remove item(s) from the shopping list"
  • Remove all items on the shopping list
  • Remove shopping list
    analogous for non lists:
  • "remove walk the dog note"
  • "remove todo entr(y/ies)"
  • "remove all memos"

(if DAV active, marked as complete on server)

Query:

  • list names : "which lists are stored?" ... "shopping"
  • list items : "which items are on the shopping list?" ... "milk and toast"
  • todo items : "Anything todo?" ... "i should remind you to walk the dog"

DAV

Calendar names:

  • which calendars are available?

Sync: (Supposed to run automatically every x minutes, but can be triggered manually)

  • synchronize calendars

Settings

(this is the default)

{
    "speak_alarm": false,                              # if the alarm should be spoken
    "speak_timer": true,                               # if the timer should be spoken
    "sound_alarm": "<path/to/soundfile>",              # default constant_beep.mp3
    "sound_timer": "<path/to/soundfile>",              # default beep4.mp3
    "snooze_mins": 15,                                 # default snooze time if duration/time is not specified
    "timeout_min": 1,                                  # the duration the user is notified, after which the alert is considered missed
                                                       # (doesn't apply to media -radio/video/..- alarms)
    "play_volume": 90,                                 # volume of the alert sound
    "escalate_volume": true,                           # alarms only - raise volume over time (10% steps, dependent on timeout_min;
                                                       #                                       half the time on max volume = `play_volume`)
    "priority_cutoff": 8
    ...
}

DAV settings see below

Setting up DAV connection

(tested with NextCloud)

By now, you have to edit the credential file manually, this will change in the future
With the startup of the skill, a template file will be created under ~/.local/share/mycroft/filesystem/skills/<skillname>/dav_credentials.json

{
    "<service>": {
        "url": "https://<ip:port>/remote.php/dav",
        "username": "...",
        "password": "...",
        "ssl_verify_cert": "..."                       # if SSL is set up, otherwise delete this line
    },
    "<another service>": ...
}

First setup the credentials, then populate respective parts in the skill settings file settings.json the skill setting get reloaded and the repeating sync event starts (every frequency seconds)

{
    ...,
    "services": "<service>,<another service>",         # comma separated string of services
    "frequency": 15,                                   # the number of minutes between syncronisation; default 15
    "sync_ask": false                                  # If it should be asked if a generated reminder/todo element should be synchronized
}

The skill fetches DAV calendar dates one year in advance. You can set up multiple calendars on the server, the skill will ask to which it should be synced. Errors during connection will be voiced, for specifics check the skill log.

Only events, reminder and todos will be synced. Alarms and timers won't be. Check the timezone on your server/event, as sometimes the timezone is not recognized properly and therefor scheduled incorrectly

Known Bugs / Troubleshooting

Generally, this skill is meant for ovos-core >= 0.0.8 and its dependencies. If you are using an older version, please update or you might experience major problems.
The skill is tested predominantly in german and (to a lesser extent) english, but might lack certain individual speech patterns. Other languages are autotranslated and need to be sanitized. In the alpha phase we like to encourage you to contribute to form a well balanced experience for a wide variety of languages

  • The skill wont understand/misinterpret what i'm saying.
    Check the logs for the intent that was triggered and the utterance that was transcribed. STT might have gotten the words wrong. Maybe change the service (Known issue especially with non english speakers using Whisper)
  • The notification system is not working properly. Missed alerts are not shown.
    The notifications sometimes get mixed up, this is a known issue and it's worked on. Be sure you are using the latest ovos-gui-plugin-shell-companion (#) and have the old ovos-PHAL-plugin-notification-widgets deinstalled.
  • When polpulating a list, the last element is followed by an "unknown" utterance.
    This is a known issue and will be fixed in the next release. It's a problem with the way the skill is handling the input in a response context. It's not critical and can be ignored for now. The list is populated correctly most of the time

Recommended Versions

These aren't hard requirements as preferences may vary, but recommended GUI: skill-ovos-homescreen >= 0.0.3a6 (There is also a PR pending)

Incompatible Skills

This skill has known intent collisions and replaces:

Be sure to remove them before installing this skill.

Contributing Translations

The skill is for the most part autotranslated (except en/de) and needs to be sanitized.
As the examples above show, the skill is using adapt keywords to determine intent. The vocabulary keywords should include a variety of synonym nouns and verbs to satisfy a wide range of speech patterns.

Dates and names are parsed either as a leftover (ie. non keyword) or following a keyword (eg. until.voc until 6 AM) Noise words that should be ignored parsing a reminder name are listed in noise_words.voc
(eg. "remind me to take out the trash -> take out trash)
Dialogs are straight forward most of the time and should include the correct mustache tags from the get go.
These are easy patterns to keep in mind.

If you want to contribute to the translation, please check the vocab folder and add the respective files for your language.
A basic understanding of the intent structure and what to make of it is required.

require("query").one_of("alarm", "reminder", "event", "alert", "remind").optionally("and").optionally("stored")  # <- vocab

In the likely case that questions arise, feel free to contact @sgee_ in matrix chat.

Contact Support

Use this link (Matrix Chat) or submit an issue on GitHub

Credits

NeonGeckoCom NeonDaniel

Category

Productivity Daily

Tags

#OVOS #OpenVoiceOS #alert #alarm #timer #reminder #schedule

Packages

No packages published

Languages

  • Python 89.2%
  • QML 10.8%