github rhizomatics/supernotify v2.16.0

3 hours ago

Also new - Appliance Autonotify - set up a dishwasher, oven, robot vacuum etc for live activity updates on your phone with no yaml, no blueprints, no automations - just install from HACS and its done.

🚨 Breaking changes

  • Email: direct emails without a sender_name are now from the home's name, as set in Home Assistant's settings, where previously they were from "Home Assistant". Add sender_name: Home Assistant to the transport's options to keep that

✨ Enhancements

  • Email
    • With mode: ha_smtp, addresses set up as recipients in the Home Assistant SMTP integration are sent to with its smtp.send_message action, with the notification's priority, html and images. Other addresses still go by its notify action, where there is one
    • data_keys_select prunes what's passed on to the integration, as it does for Mobile Push and Generic
  • highest, normal and lowest can be used as aliases for critical, medium and minimum as the priority of a notification, for compatibility with Home Assistant's SMTP integration priority added in 2026.9
  • More of what Supernotify shows is now in the Home Assistant language
    • Mobile Push: the camera snooze button, which now also gives the camera's name rather than its entity id, and the Click for Action title given to a link action without one
    • Email: the default subject, heading and preview text, "Home Assistant Notification", and the description of a snapshot image for templates. A default_title configured for the transport still wins
    • Errors from supernotify.snooze, silence and unsnooze, such as an unknown delivery name, are now shown in the user's language, as is the same reason the AI snooze tool is given
    • Kodi and HTML5: the title given to a notification without one, now "Notification" in the Home Assistant language. For HTML5 this was previously "Home Assistant"
    • The message shown on the integrations page when Supernotify fails to start and will retry
    • The repair issue for a scenario condition that can't be checked no longer starts with "Schema error" or "Unknown error" in English
    • What the built-in agent says back is now in the translations, as common.voice_*, so a language can be added there alongside its sentences. English and Italian for now
  • original_trace in the archived notification gives the automation or script run that was in progress when the notification was made, as its trace key and run_id, next to original_context.
    • Left out for a call from outside an automation or script, and for an automation without an id, since Home Assistant keeps no trace for those

🐛 Bug fixes

  • title was missing as a top level field in the archived notification, now appears next to message fields at the top
  • The name is now spelt Supernotify throughout, as in the integration list, rather than sometimes SuperNotify. This changes the device name, and so the friendly names of its entities, e.g. Supernotify Reset overrides, unless the device has been renamed. Entity ids are unchanged
  • Supernotify's entries in the Activity view now have their own icon
  • Integrations now log only at DEBUG level if they are not going to be setup if the underlying integration isn't even installed (removes a good chunk of startup log noise)
  • Chime
    • Script chimes on a delivery with debug set were refused by Home Assistant, from an extra wait field
    • A media player or script chime alias with data no longer has the data of each notification it is used for added to its own, which could carry announce and the like over to later notifications
    • An alias entry with an empty target, or a label with neither domain nor target, no longer stops the whole chime delivery. The label entry is now ignored with a warning at startup
    • A group in an alias entry's target is now expanded to its members, as it already was in a notification's target, rather than being skipped
    • An alias entry's domain must now be one the chime transport supports, and is refused at startup if not
  • Supernotify's own notify entities, for a scenario, delivery or recipient, could make a notification loop forever, held back only by dupe checking, when one was in the target of a delivery, scenario or recipient, or called by something a delivery ran
    • In those targets, a recipient's notify entity is now replaced by the recipient, as it already was in the target of an action call, and a scenario's or delivery's is dropped with a warning
    • Any of them, or their notify actions, called while a notification is being delivered is ignored with a warning
  • Notify Entity
    • The docs example for switching off the default delivery used disabled: false, which isn't a valid option and stopped the configuration loading. It is now enabled: false, as it is for the same examples for Email and Mobile Push, and every transport example in the docs is now checked against the schema
    • Docs corrected: device targets aren't supported, there's no data, and the default delivery is only used for notify entities no other transport takes
  • Mobile Push
    • A push block given in data, such as a sound for the notification, was replaced by Supernotify's own, leaving only the interruption-level. It is now added to, and a critical notification keeps the given sound and volume, with a sound given as just a name also accepted
    • Whether a phone is Android or Apple now comes from the os_name the Companion App registers, rather than guessing from the manufacturer, which is still used if there's no os_name
    • A snapshot_image_path in media without a camera_entity_id is now attached as the image, as it already was for other transports
    • The warning for mobile_push_clear_notification without a tag now gives the keys' real names
    • Docs corrected: there's no separate live view setting - the phone is given the camera to stream only when no image can be got - Android is supported, with every mobile_push_* key now listed, and device discovery and the default delivery are described properly
  • Email
    • The notification's media.snapshot_url was ignored, being only looked for in data, so a snapped image wasn't linked to it and templates were given the attachment instead
    • The SMTP integration's own html and images, or any other key for the integration such as Google Mail's cc, given in data or extra_data were dropped, being only passed on from a data nested inside data. They are now passed on as they are, with a given html winning over message_html. A nested data, as the legacy notify.supernotify needed, is still taken, with a warning
    • sender, sender_name and default_title set in a delivery's own options were ignored, and only the transport's used
    • A direct connection without a sender generated a default delivery that never sent anything, logging only at debug level. As for the Home Assistant SMTP integration, a sender is now needed: there's no default delivery without one, and a warning at startup
    • Templates had a blank line added after every line
    • Docs corrected and extended: what's passed on in data, the footer, when the default delivery is generated, the sender, and that templates are only read once
  • Generic
    • With handle_as_domain, target entities from the domain handled as were dropped, so e.g. handle_as_domain: light on a custom action called it with no lights
    • tts.speak was given its targets in a target field it doesn't accept, rather than the tts entity as its target and media_player entities as media_player_entity_id. Legacy *_say actions now target the media players
    • An action needing entities, such as switch, light, siren, input_text, notify.send_message or tts, with none of the targets in its domain, was still called, doing nothing and recorded as a success. The delivery is now skipped
    • ntfy (deprecated): data_keys_select was ignored for publishes to email or call targets, and those publishes were made without the topic entity that ntfy.publish requires. Each now goes through the topics, and the deprecation is raised as a repair issue as well as logged
    • The notification's own data was changed by mqtt and script deliveries, adding payload or removing variables from the archived copy
    • An action with an empty name after the domain, like notify., was accepted
    • Docs corrected and extended: invalid YAML in the handle_as_domain and data_keys_select examples, the Slack channel example, handle_as_domain: notify_events misspelt, what's passed for tts, script, ntfy and other actions, raw mode, and schema pruning

What's Changed

  • ci: pin shared admin workflows to rhizomatics/.github 1.0.0 by @jeyrb in #282
  • Bump home-assistant/actions/hassfest from 06749dd8c0b54f350bc69c8752456cee498808a3 to 50baf3a307f87100cf550d4ae127746595030d5d by @dependabot[bot] in #288
  • Bump actions/github-script from 8 to 9 by @dependabot[bot] in #287
  • Add ci-ok job as the single required CI check by @jeyrb in #290
  • Update ruff requirement from >=0.16.0 to >=0.16.10 in the astral group across 1 directory by @dependabot[bot] in #286
  • Update types-requests requirement from <3.0.0.0,>=2.33.0.20260906 to >=2.33.0.20261006,<3.0.0.0 by @dependabot[bot] in #284
  • Bump astral-sh/setup-uv from 10.2.0 to 10.3.0 in the astral group by @dependabot[bot] in #291
  • Bump home-assistant/actions/hassfest from 50baf3a307f87100cf550d4ae127746595030d5d to cd6f3635a740c84d8a14f6121a90068b8ece6bf6 by @dependabot[bot] in #292
  • Make the supernotify-dev skill visible to Claude Code by @jeyrb in #295
  • Keep personal Claude Code permissions out of the repo by @jeyrb in #296

Full Changelog: v2.15.0...v2.16.0

Don't miss a new supernotify release

NewReleases is sending notifications on new releases.