🚨 Breaking changes
- Email: direct emails without a
sender_nameare now from the home's name, as set in Home Assistant's settings, where previously they were from "Home Assistant". Addsender_name: Home Assistantto 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 itssmtp.send_messageaction, with the notification's priority, html and images. Other addresses still go by its notify action, where there is one data_keys_selectprunes what's passed on to the integration, as it does for Mobile Push and Generic
- With
highest,normalandlowestcan be given as the priority of a notification, a delivery's priority filter or a priority snooze, forcritical,mediumandminimum, as Home Assistant's SMTP integration names them- 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_titleconfigured for the transport still wins - Errors from
supernotify.snooze,silenceandunsnooze, 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
original_tracein the archived notification gives the automation or script run that was in progress when the notification was made, as its tracekeyandrun_id, next tooriginal_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
- Left out for a call from outside an automation or script, and for an automation without an
🐛 Bug fixes
titlewas missing as a top level field in the archived notification, now appears next tomessagefields at the top- The name is now spelt
Supernotifythroughout, as in the integration list, rather than sometimesSuperNotify. 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
debugset were refused by Home Assistant, from an extrawaitfield - A media player or script chime alias with
datano longer has the data of each notification it is used for added to its own, which could carryannounceand the like over to later notifications - An alias entry with an empty
target, or a label with neitherdomainnortarget, no longer stops the whole chime delivery. The label entry is now ignored with a warning at startup - A
groupin an alias entry'stargetis now expanded to its members, as it already was in a notification's target, rather than being skipped - An alias entry's
domainmust now be one the chime transport supports, and is refused at startup if not
- Script chimes on a delivery with
- 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
targetof 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
notifyactions, 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 nowenabled: 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
- The docs example for switching off the default delivery used
- Mobile Push
- A
pushblock given indata, such as asoundfor the notification, was replaced by Supernotify's own, leaving only theinterruption-level. It is now added to, and acriticalnotification 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_namethe Companion App registers, rather than guessing from the manufacturer, which is still used if there's noos_name - A
snapshot_image_pathinmediawithout acamera_entity_idis now attached as the image, as it already was for other transports - The warning for
mobile_push_clear_notificationwithout 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
- A
- Email
- The notification's
media.snapshot_urlwas ignored, being only looked for indata, so a snapped image wasn't linked to it and templates were given the attachment instead - The SMTP integration's own
htmlandimages, or any other key for the integration such as Google Mail'scc, given indataorextra_datawere dropped, being only passed on from adatanested insidedata. They are now passed on as they are, with a givenhtmlwinning overmessage_html. A nesteddata, as the legacynotify.supernotifyneeded, is still taken, with a warning sender,sender_nameanddefault_titleset in a delivery's ownoptionswere ignored, and only the transport's used- A direct connection without a
sendergenerated a default delivery that never sent anything, logging only at debug level. As for the Home Assistant SMTP integration, asenderis 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, thefooter, when the default delivery is generated, the sender, and that templates are only read once
- The notification's
- Generic
- With
handle_as_domain, target entities from the domain handled as were dropped, so e.g.handle_as_domain: lighton a custom action called it with no lights tts.speakwas given its targets in atargetfield it doesn't accept, rather than thettsentity as its target andmedia_playerentities asmedia_player_entity_id. Legacy*_sayactions now target the media players- An action needing entities, such as
switch,light,siren,input_text,notify.send_messageortts, 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_selectwas ignored for publishes toemailorcalltargets, and those publishes were made without the topic entity thatntfy.publishrequires. Each now goes through the topics, and the deprecation is raised as a repair issue as well as logged - The notification's own
datawas changed bymqttandscriptdeliveries, addingpayloador removingvariablesfrom 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_domainanddata_keys_selectexamples, the Slack channel example,handle_as_domain: notify_eventsmisspelt, what's passed fortts,script,ntfyand other actions,rawmode, and schema pruning
- With
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-beta3