Releases: amiel-35/notify-switchboard
Releases · amiel-35/notify-switchboard
Release list
v0.7.1
Added
- Home Assistant's own notification drawer (
notify.persistent_notification)
is offered in the Where to tell them and Who to tell pickers. It is
the output a household has before any phone is registered.
Changed
- The whole interface is rewritten in plain language — the setup, the options
menu and its steps, field labels, error messages, warnings, entity names and
the action descriptions — in French, English and Spanish. - People, devices and targets appear under the names your household gave them.
An entity id is shown only where you have to go somewhere and change
something. - Every entry in the output pickers now carries a readable label: another
person's phone reads as the device its owner named, and anything else is
shown in words with its service name in brackets. notify_switchboard.explain, Send somebody a test message and Send a
test message through a target now name devices, presence rules, importance
floors and whereabouts in words instead of raw values. Those sentences are
written in the instance language, which the test result screen now says.- Every reason a message can be dropped has a sentence of its own; until now
delivery_failedandunknown_targetfell back to a generic one. - Importance and presence are picked from translated labels instead of
info/
normal/high/criticalandalways/home_only/away_only. The
stored values are unchanged. README.mdgains "Words used in the interface", mapping each word on the
screen to the term the documentation uses.- Nothing about routing changes: no new option, no new step, no stored data to
migrate. Upgrading from 0.7.0 changes what you read, not what you get.
v0.7.0
Breaking
data.priorityis no longer forwarded to phone (mobile_app) outputs.
Critical alerts now carry the Home Assistant Companion critical keys instead.
If you were settingdata: {priority: high}to make an Android notification
urgent, remove it. Every other kind of output — a barenotify.*service, a
speaker, a webhook — still receivespriorityuntouched.notify.notifyandnotify.send_messageare refused as audience entries,
including when typed by hand.notify.persistent_notificationstays allowed.
Added
- Raise the importance when the house is empty, a new setting on the
What happens when the house is empty step of a target. When nobody in its
audience is home, the message moves up one step: normal becomes important,
important becomes critical. It only bites on a target that notifies absent
people; with ahome_onlypresence rule an empty house means everybody is
dropped anyway. - A silence entity can publish a
min_priorityattribute — thedata:block of
a coreschedulebecomes state attributes — and then holds only the messages
below that floor. A night that keeps the shopping list quiet and lets the leak
alarm through, with no automation of your own. An unreadable floor silences
everything; when several silences are on, the strictest decides. - Make phones ring for critical alerts, a new setting on the Target used
by default step, on by default. Acriticalmessage then reaches a phone
with the Companion critical keys — the iOS critical sound, Android's
alarm_streamchannel. A key you set yourself is never overwritten. - An audience may name a
notify.*service or anotifyentity — a kitchen
speaker, a wall tablet, Telegram, Alexa, a notify group — instead of a person.
Such an output has no presence, no silence, no snooze and no deferral, and
receives only yourdatamerged with the target's default data. Anotify
entity receivesmessageandtitleand nothing else. The pickers list
services; an entity is reached by typing its id. sensor.switchboard_routing_table, listing your targets and people for a
dashboard card. It never exposes a target's default data.notify_switchboard.explaingainsescalatedandoutputs, and its
prioritynow reports the raised importance.- The
acknowledgedevent carriespersonalongsideuser_id.
Changed
sensor.switchboard_routing_tablepublishes nostate_class, so it is not
compiled into long-term statistics; its two attributes are kept out of the
recorder.- A message routed to a
notify.persistent_notificationaudience entry is not
cleared when the alert ends, so it stays on the dashboard next to its own
back-to-normal message.
v0.6.0
Added
docs/migration-guide.md: where to start when you already have a pile of
inlinenotify.mobile_app_*calls andalert:blocks — one target per alert,
observer mode so nothing in your YAML has to change, and a rollback that is
one menu action.README.mdgains a Glossary defining target, person, output,
audience, presence rule, silence, snooze, wake time, deferral, summary,
episode and observer mode.- Two options-menu entries, Advanced settings of a target and Set up
somebody's night, and a checkbox on the step that shows thealert:
snippet. - A five-line recipe for turning a speaker into an output, using core's own
platform: ttsnotify platform, inREADME.mdanddocs/quickstart.md.
Changed
- Adding a target asks five questions — Short identifier, Name, Alert
watched, Who to tell, Watch the alert directly. The other nine moved
to an Advanced settings step with the same choices and the same defaults.
A target created from the basic step alone routes exactly as it would have
before. - The person editor is split the same way: devices and silences on the first
step, Wake time and Sum it all up in one message on a second one. Each
half writes only its own fields, so changing a phone can never erase somebody's
night. - A routing-table row is called a target everywhere — interface, errors,
warnings and documentation, in all three languages. "Rule" survives only in
presence rule. - A silenced person with no wake time is now held until their silence ends,
when that silence publishes its own end (a coreschedule). A silence that
publishes no end — aninput_boolean, a Focus sensor, a temporary
notify_switchboard.silence— still drops the message exactly as before. - The expiry defaults (not very important 120 min, normal 720 min, important
never) are documented defaults, not frozen values: a future version may pick
other numbers. Set your own on How long a message set aside stays useful.
Fixed
notify_switchboard.silenceandnotify_switchboard.unsilencenow release or
re-arm the queue they affect. Lifting a silence by hand used to leave a held
message waiting for the following night.- A message held with no wake time no longer loses its timer when a temporary
silence outlives the night — it used to wait for the next night, which for a
message with an expiry usually meant it never arrived. - Renaming or deleting a silence entity now counts as that silence lifting,
instead of leaving the queue waiting for an "off" that never comes. - The
alert:block shown after saving a target in observer mode no longer
carries anotifiers:list. Pasting it as instructed wired the alert both
ways at once and produced duplicate notifications.
Removed
- The Class field of a target, which nothing ever read. A value already
stored is ignored — not migrated, not deleted — and there is nothing to do by
hand.
v0.5.1
Fixed
- The default
data.tagno longer reaches outputs that cannot read it. 0.5.0
wrote it onto every output of every person, and adapters that validate their
data refused the call outright: since 0.5.0, somebody whose output was a
notify.airplay_*ornotify.satellite_*service received nothing at all.
The default tag now goes to phone (mobile_app) outputs and to
notify.persistent_notificationonly. - A
tagyou set yourself is your own key and still reaches every output.
v0.5.0
Added
- A message set aside for the morning can now expire: not very important after
2 h, normal after 12 h, important never. Change it for the household on the
new How long a message set aside stays useful step, or for one call with
data.ttl_minutes(0means "keep this one whatever the household says").
An expired message is dropped with the new reasonexpired, instead of
announcing at 07:00 that the front door was open at 23:31. - One summary instead of a burst. When more than one message survives the night
for somebody, they get a single notification per device listing them, rather
than eleven banners at the moment they open their eyes. Turn it off per person
with Sum it all up in one message. - A back-to-normal message now reaches only the people who actually received
something for that alert; everybody else is dropped with the new reason
not_notified. Mark your own back-to-normal call with
data.switchboard_done: true. - Every message gets a name (
data.tag,switchboard-<slug>by default), so a
repeat updates the notification already on the phone instead of stacking a
second one. Atagyou set always wins. - When a watched alert ends, the notifications it left on each phone are cleared
and the matching dashboard notification is dismissed. The new target setting
Clear the back-to-normal message extends that to the back-to-normal
message itself. This applies to targets in observer mode only.
Changed
- A message released in the morning is decided again from scratch: somebody who
left the house under ahome_onlytarget is dropped on presence, somebody who
snoozed at 02:00 is dropped as snoozed, a deleted target drops the lot. Its
original importance is kept, so a target whose default changed overnight
cannot silently re-grade it. - A queue is flushed as soon as the last silence turns off, instead of waiting
for the wake time. Somebody with both a night schedule and a Focus sensor
needs both off; the wake time stays the upper bound. sensor.switchboard_dropped_todaygainsexpiredandnot_notifiedin its
reasonsattribute. No new event type.- Upgrading migrates the stored snoozes and deferrals; nothing to do by hand.
v0.4.0
Added
notify_switchboard.explain, a new read-only action. For a target — and
optionally an importance and a person — it answers, per person, whether a
message would be routed, set aside or dropped and why: which silence is on,
when the snooze lifts, which presence rule decided, and which services it
would reach. Nothing is sent and no counter moves.- A fresh install works after one form. Adding the first person also creates a
defaulttarget pointing at them, sonotify.switchboardreaches a real
phone straight away. That target picks up each new person automatically until
you edit it, after which it is yours. - Phones are picked from a list instead of typed. The person editor offers the
instance's notify services, marks the ones registered to that person's own
Home Assistant user and pre-selects them. A service that does not exist yet
can still be typed in. - iOS Focus sensors are proposed as silence entities for a new person. Android's
Do Not Disturb is not;docs/quickstart.mdcarries the one-line template
sensor that bridges it. - Send somebody a test message and Send a test message through a target
in the options menu. Each sends one real message through the ordinary path —
counted, deferred or dropped like any other — and then shows the explanation
for it. - The
alert:block to paste is generated for you on a confirmation step after
saving a target, keyed on that target's own alert. Nothing is written until
you submit that step. - Two new warnings when the configuration cannot work: a person in an audience
with no notify service at all, and a target tied to analert.*that does not
exist.
Changed
- The person editor is two steps: pick the person, then choose their devices,
silences and wake time. Change somebody's devices opens the second step on
what is stored, so the list of discovered phones never silently re-adds an
output you removed.
v0.3.0
Added
- Entity names are translated into French and Spanish. The entity ids are
unchanged in every language, so noalert:, automation or dashboard card
breaks. sensor.switchboard_deferred_today, with itsqueuedattribute, is now a
documented name that will not change. The entity itself is unchanged.- A new warning when somebody in the audience of a target that offers
Acknowledge or Snooze buttons is not linked to a Home Assistant user — the
link needed to tell who pressed a button. Make it in Settings → People.
Changed
- Notifications go out to every device at once, each with a 30 second timeout:
one phone off the network no longer holds back everybody else. The order in
which the delivery events fire is no longer promised; the counts and the
per-person outcomes still are. - The five
notify_switchboard.*actions now exist even when the entry is
unloaded, so an automation naming one no longer fails at startup with "action
not found". Called with nothing loaded, each raises a translated error. - A Companion button press is credited to the person whose
person.*is linked
to the Home Assistant user who pressed it, whatever the device says.
Fixed
- A timer left running when Home Assistant stops, and an error with a traceback
logged at every single shutdown. - Warnings about a missing target or an unusable output now go away once the
cause is fixed, instead of outliving the change they asked for. - Somebody whose delivery raised an unexpected error is no longer missing from
the counters; it counts asdelivery_failedlike any other delivery that
reached nobody. - A person's device is named after the friendly name you set ("Alice Martin")
rather than the entity id ("Alice").
v0.2.0
Added
- Five actions for callers that are not a Companion button — a dashboard card, a
script, an automation:notify_switchboard.acknowledge,snooze,unsnooze,
silenceandunsilence. A refused or invalid call raises a translated error
instead of being logged and swallowed. - A temporary, person-wide silence (
silence/unsilence), from 1 to 1440
minutes. It shows inbinary_sensor.<person>_silencedwith anuntil
attribute, survives a restart, expires on the minute, and is bypassed by a
criticalmessage. Your configured silence entities are read, never touched. - Three optional per-target texts: Wording of the message and Wording of
the back-to-normal message, both templates with the target's alert available
asalert, and Title by default, used whenever a call gives no title. All
three are empty by default. - A warning when the same unknown target or unusable person has been refused
three times — a dashboard card left pointing at a renamed target.
Changed
binary_sensor.<person>_silencedis on when either kind of silence is
running. Itssourcesattribute still lists the configured entities only.- A message silenced only by a temporary silence is dropped rather than held
until morning: an hour of requested quiet should not become tomorrow. A
configured night silence still holds it. - A message held for the morning re-checks the silence before going out and
waits again if the night is still on. Acriticalmessage goes out
regardless. - New Change somebody's devices and Edit a target menu entries open a
form filled with what is stored, and a rejected form hands back what you
typed. Opening a target to change one word no longer resets its other fields
to their defaults. - Acknowledging is credited in the logbook to the person who tapped the card or
the button, not to the integration. - The five actions are callable by any Home Assistant user, by design: the wall
tablet runs under a non-admin account and its cards are the main caller. What
bounds them is the target's own acknowledgement list, not the caller's role.
v0.1.0
Added
- A routing table in the options: people (their notify services, their silence
entities, their wake time) and targets (identifier, name, importance by
default, watchedalert.*, audience, presence rule, acknowledgement, snooze
durations, default data, observer mode). notify.switchboard, plus onenotify.switchboard_<slug>per target, so an
alert:can name its target innotifiers:.- Routing decides per person: audience, presence rule, silence, running snooze,
acriticalbypass and a refusal to call itself. Every drop carries a reason. - Companion buttons: Acknowledge when the target watches an alert and allows
it, and one Snooze n per configured duration. Acknowledging turns the
alert off; a snooze survives a restart. - Night deferral: a message that arrives while somebody is silenced is set aside
and delivered at their wake time, correctly across midnight and across a
daylight-saving change. One that came due while Home Assistant was down goes
out at the next start, not a day later. - Observer mode: watch a target's
alert.*and route on its transitions without
being listed in itsnotifiers:. - Entities:
binary_sensor.<person>_silenced,
sensor.<person>_last_notification,sensor.<person>_active_snoozes,
sensor.switchboard_routed_today,sensor.switchboard_dropped_today(with a
reasonsattribute),sensor.switchboard_deferred_todayand
event.switchboard_delivery. The counters reset at local midnight. - Warnings for an unknown target and for an output that has been unusable —
missing, or failing on every call — more than three times in a row. - A diagnostics dump with message bodies and every default-data value redacted,
plus the routing table, the snoozes, the deferrals and the last twenty
decisions. - Interface, warnings and button labels in English, French and Spanish.
Changed
- The
notify.switchboardentity is the degraded path: it routes to the target
used by default, with normal importance. - Upgrading from 0.0.1 reuses
notify.switchboardinstead of leaving an
unavailable entity beside a newnotify.switchboard_2. Nothing to do by hand.