github rhizomatics/supernotify v2.14.0-beta6

pre-release2 hours ago

🚨 Breaking changes

Python 3.13 and Home Assistant versions 2026.3 and earlier

As previously indicated, support for py3.13 and Home Assistant 2026.2 and earlier is no longer assured now that 2026.10 is released.
It may continue to work on older installations, however the build checks to verify against 2026.2/py3.13 are no longer part of the pre-release or release process.

Scenario and Delivery Conditions

These are now evaluated more thoroughly at start-up, so you may find old overlooked condition errors raising repairs, these are likely to be real problems in the logic.

✨ Enhancements

Assist

  • Snoozing requests don't stop critical notifications, unless the instruction explicit asks to snooze 'even critical'
  • Built-in agent sentence How do I get help on Supernotify answers with a link to the online help page, in English and Italian

Notify Entities

  • Any scenario or delivery can be exposed as a Notify Entity, by adding notify_entity with the name to go after notify.
    • A message sent to a scenario's notify entity is a default notification with that scenario applied, and to a delivery's is one with that delivery selected
    • A repair is raised, and no entity made, if the notify entity, or a notify action of that name, already exists
    • Used as a target of supernotify.notify, it applies its scenario or selects its delivery on that notification
  • Every notify entity, including each recipient's notify.recipient_<name>, also has a legacy notify action of the same name, so the Alert integration can list them in notifiers

Snoozing

  • A TAG snooze also matches the automation or script that sent the notification
    • Matches by entity_id, name or alias
    • Any notification raised by an automation can be paused on its own (pause garage closed for an hour) without adding entity_id to the notify call.
    • The sender is found from the call's context, and a script started by an automation counts both.

Mobile

  • Mobile apps are updated now as they are added and removed, not only when the component starts up
  • If a mobile app is removed, its action goes away - this used to lead
    to stack traces in logs and the entire notification mapped as an error even if other deliveries succeeded.
    • Now it is handled separately from other exceptions and treated as a missed target within the mobile_push transport, which auto raises a repair to remove the device
  • Recipients with manually configured or discovered mobile devices now get them checked at startup, and a repair raised if that mobile is no longer known to Home Assistant. The repair links to the People documentation, and can be dismissed like other repairs.
  • Improved how critical priority is applied for Android mobile apps with Do Not Disturb mode
  • Android commands and TTS operations sent as independent calls
    • The companion app takes notification commands and TTS as the message of a call of their own (message: command_dnd + data.command, message: TTS + data.tts_text), not as data of an ordinary notification.
    • Now each mobile_push_command_* is sent as its own call just before the notification, so the screen is on / Do Not Disturb is off when it arrives
    • mobile_push_tts_text is sent as its own message: TTS call after the notification - one wait for all the devices, 5 seconds by default, since started together the TTS cut off the notification's own sound; new mobile_push_tts_delay changes it (0 for straight away). mobile_push_tts_locale / _engine go with it as tts_text_language / tts_engine
    • for critical, the extra calls carry ttl: 0 + priority: high like the notification (without them the TTS waited for the phone to be unlocked and was then spoken late), and the TTS goes on media_stream: alarm_stream_max (the app puts the volume back afterwards); otherwise mobile_push_alarm_stream / _max pick the stream
    • Tried on a Samsung S26 Ultra

Archive

  • enquire_archive can filter by priority, one or more, ignoring case - before limit, so a month of archive can be searched for its few critical notifications in one call
  • The summary verbosity now includes missed, the count of deliveries asked for but not sent, so a partial_delivery can be explained from a summary list
  • The summary verbosity of enquire_archive leaves out delivery_provenance, about half its size - it is still there at standard and full

🐛 Bug fixes

  • Generic transport with ntfy.publish failed when icon, click or attach was given in data, these are now sent as the action expects
  • Chime sent the tone, duration and volume for a siren nested under a data key, which siren.turn_on rejects, so a siren chime with any of these set would fail. They are now sent as the action expects. Caught by the new automated downstream integration schema checks.
  • Snoozing a mobile device ignored devices that had been selected via a person entity rather than as a direct target. Now it gets snoozed regardless of how selected.
  • Complex conditions could have invalid template conditions (with logic inside {{ and }}) that wouldn't be detected if prior conditions evaluated as false. Now every condition within the conditions is separately checked in strict mode.
  • A scenario's delivery given as a single delivery name, or a list of names, was rejected as invalid configuration in YAML, though documented as a way to switch those deliveries on. Now both are accepted, as well as a mapping.
  • Missing or misspelled entities are also now checked as part of conditions validation, and will be logged rather than disabling the scenario or delivery since the integration that provided the entities might start after Supernotify

📚 Documentation

  • Help section improved, and with more examples of how Google and AI agents like ChatGPT, Claude, Kimi etc can give advice and write YAML
  • Add a recipe for Pyscript usage
  • Add a Rain Alert recipe, using the Alert integration with a scenario notify entity
  • The dashboard recipe now shows how to install the pre-built SuperNotify Cards Dashboard
  • New section on Android Commands and Spoken Text
  • Updated the Targets documentation for the target_usage control

📝 Other changes

  • Home Assistant compatibility for testing moved to 2026.4->2026.10 range
  • For developers, there is now a custom plugin for the Homeassistant REPL developer shell, that makes live objects like scenarios,engine or delivery_registry available as shell variables to acesss via Python
  • Added automated tests for transports to ensure the service calls they make to downstream integrations meet the minimum and don't exceed the maximum of the integrations schemas

⚠️ Deprecated

  • Using ntfy.publish with the Generic transport is deprecated in favour of the ntfy transport. It carries on working, with a warning logged at start up

What's Changed

  • Apply mobile device snoozes to devices resolved from a person by @lollox80 in #269
  • fix: spoken and assistant snoozes leave critical through, unless asked 'even critical' by @lollox80 in #271
  • Tag snooze matches the automation or script that sent the notification by @lollox80 in #270
  • Follow re-paired mobile apps, and raise a repair rather than snooze a missing notify action by @lollox80 in #272
  • mobile_push: critical on Android sounds through Do Not Disturb by @lollox80 in #275
  • enquire_archive: priority filter, missed in summary, no provenance in summary by @lollox80 in #276
  • mobile_push: Android commands and TTS sent as calls of their own by @lollox80 in #277

Full Changelog: v2.13.2...v2.14.0-beta6

Don't miss a new supernotify release

NewReleases is sending notifications on new releases.