コアコンセプト¶
全体の仕組み¶
オートメーションからの1つの通知が、送信方法に合わせて形を変えた、複数の異なる通知になります。
- ターゲット - 人は、Recipientの情報をもとに、連絡可能な手段に変換されます
- Deliveries - 該当するDeliveriesが、デフォルトまたはScenariosによって選ばれます
- 通知 - 各deliveryは使えるターゲットを取り出し、それに適した通知を送ります。 そのため、メールは画像付きの本格的なHTMLレイアウトにでき、キッチンのスピーカーには短い音声メッセージが届きます
ターゲット (Target)¶
- 誰に、または何に、どのように通知するか
- 直接ターゲット
- メールアドレス
- 電話番号
entity_idまたはdevice_id(例:Alexaデバイスでアナウンスする場合)- Telegramなどの専用transport向けのカスタムID
- 直接ターゲットに変換できる間接ターゲット
- Recipient機能を使うための
person_id - Home Assistant標準のターゲットセレクター
label_id、floor_id、area_id - グループターゲット(Home Assistantの新旧両方のグループ)
- Recipient機能を使うための
- ターゲットには
discord_channel:839439434のように特定のターゲットカテゴリを指定できます。詳しくはカテゴリ接頭辞をご覧ください - 各ターゲットは、それを最もうまく扱えるインテグレーションがリストから取り出します
- たとえば、Alexa DevicesのNotifyエンティティはAlexa Devices transportが処理し、一般的なNotifyエンティティは機能の少ないNotify Entity transportが処理します
- 詳しくはTargetsをご覧ください
受信者 (Recipient)¶
- 人。メールアドレス、電話番号、モバイルデバイス、カスタムターゲットを任意で持てます
- デフォルトでは、Home Assistantに既にあるユーザーアカウントとPersonエンティティから自動検出されます
- オートメーションで人を指定しやすくなります。すべての通知でJoeのメールアドレスを覚えておく代わりに
person.joe_mctestを使えます。対応するSMSインテグレーションがあれば電話番号にも、TelegramやDiscordなどのカスタム識別子にも使えます - 各受信者にはHome Assistantの
switchエンティティもあり、特定の人への通知を簡単に止められます - 詳しくはPeopleとRecipesをご覧ください
トランスポート (Transport)¶
- Transportは実際に通知を行う技術的な手段で、通常は既にインストールされているHome Assistantのインテグレーションを使います
- Transportアダプターこそが、通常のNotifyグループとSupernotifyの違いです
- Notifyグループは複数チャネルへの通知を簡単にできるように見えますが、実際にはtransportごとに
dataの構造(dataの中のdataも!)やアドレス指定などが異なるため、結局messageだけのような最小限の共通属性に絞らざるを得ません - Supernotifyには、メール、モバイルプッシュ、SMS、Alexaなど一般的なtransport用のアダプターが標準で用意されており、他のあらゆるHome AssistantアクションをラップできるGenericアダプターもあります
- Transportアダプターにより、インターフェースが互いに異なり互換性がない複数のプラットフォームにも、1つの通知を送れます
- 通知をtransportに合わせて調整し、受け付けない属性を除き、
data構造を組み替え、適切なターゲットだけを選び、可能な場合はさらに細かな調整もできます - 各transportにはデフォルト設定があり、多くの調整やデフォルト値を設定できるので、同じ値をすべての通知に書く必要がありません
- 詳しくはTransportsをご覧ください
配信 (Delivery)¶
- Deliveryは、使いたい各通知チャネルを定義します
- 標準で、各transportには同じ名前のdeliveryがあります(例:
email、mobile_push) - 一部のtransportは、
alexa_devices_announce_allやchime_siren_allのような追加のdeliveryを自動作成します - YAMLを使えば、プレーンテキストの
emailに加えてhtml_emailを作ったり、特定の音声アシスタント用のdeliveryを作ったりできます - メール、モバイルプッシュ、SMS、Alexa Devices、Notify Entityのように、ターゲットを明確に選べるtransportは、デフォルトでターゲット処理に含まれます
- その他は、設定、Scenarios、または通知での指定によって含めることができます
- 好きな名前で独自のdeliveryを定義でき、1つのtransportに複数のdeliveryを持たせることもできます(例:
plain_emailとhtml_email) - Generic Transportは、標準transportでまだ対応していない、Home Assistantでできるほぼすべてのことにdeliveryを作るためのツールボックスです
- 詳しくはDeliveriesとRecipesをご覧ください
シナリオ (Scenario)¶
- 名前で、またはHome Assistantの条件によって自動的に有効にできる設定のパッケージ
- Scenariosは、通知の
dataブロックのapply_scenarios値で手動選択するか、Home Assistant標準のconditionsブロックで自動選択できます - 条件にはメッセージのテキストも含まれるため、テラスの鳥に関するFrigateの通知と、窓辺の不審者とで扱いを変えられます
- Scenariosを使えば、夜間は通知を控えめに、祝日は華やかに、または特定のメッセージを優先することができます
- 多くのdeliveryや通知に対する変更を1か所で適用でき、オートメーションでの通知呼び出しを大幅にシンプルにする鍵となります
- 詳しくはScenariosとRecipesをご覧ください
優先度 (Priority)¶
- 通知の緊急度
- Home Assistantの内外を問わず、通知の優先度付けに標準的な方法はありません
- Supernotifyには、一般的な慣習に沿った独自の5段階の方式があり、
minimumからcriticalまであります - 優先度はscenarioやdeliveryのルールに使え、対応するnotifyインテグレーションにも渡せます
- Supernotifyには独自のメールインテグレーションがあり、優先度をOutlookやApple Mailなどが理解できる形に変換します
Info
技術的な詳細に興味がある方向けに、これらのコンセプトに対応するコアクラスのクラス図があります。
基本原則¶
- 通知に必要なのはメッセージだけです。すべてのターゲットを含め、それ以外はすべてデフォルトにできます
- アクション呼び出しで指定したものは、デフォルトより優先されます - これは
target_usageなどのオプションで調整できます - 人物レジストリがターゲット生成に使われるのは、ターゲットが指定されていない場合だけです - 設定とデフォルトの優先順位は Action > Scenario > Delivery > Transport
- 設定方法や呼び出し方にできるだけこだわらない - ターゲットはサブカテゴリに分けても、エンティティID、デバイスID、メールアドレス、電話番号の大きなリストでも構いません -
deliveryなどのアクションdataオプションは、単一の値、リスト、辞書のいずれでも指定できます
開発者向け¶
通知がdelivery、ターゲット、Envelopeをどう流れるかはDeveloper Conceptsを、あわせてDesign Principlesもご覧ください。