【HomeKit】DiscordのWebhookを利用してオートメーションからプッシュ通知する方法
Appleのオートメーションは個人オートメーションと他人と共有できるホームオートメーションの2種類があります。
この2つは似てるようで実際はかなりの違いがあります。
共有できるホームはとにかく制限があり、個人の方は自由度は高いですが、スマートデバイスの動作をトリガーに出来ません(※操作は可能)
例えばAlexaでは普通にできる「自宅のカギが開いたら通知をする」というオートメーションが組めません。
個人の方は「カギが開いたら」というトリガー設定ができず、ホームはスマホに通知するという設定がそれぞれできません。
双方ともに痒い所に手がとどかない感じなんです。
そこでDiscordのWebhookを利用して、オートメーションでも通知が出来るようするというのが今回の趣旨です。
※ホームオートメーションを組むにはHomePod(mini)やAppleTVなどのハブが必要です。昔はiPadでもハブに設定できましたが、最新iOSではそれが出来なくなりました。
※記事後半では個人オートメーションにも組み込んでいます。
手順
Discordでの作業
ウェブフック用のURLを発行します。
はじめにスマホアプリからやろうとしたのですが、新規発行ができなかったので、スマホのブラウザからやりました。
パソコンのブラウザからでもOKです。
※Discordのアカウントを作成する必要があります。
※通知を受けたいスマホにDiscordのアプリもインストールしてください。
Android、MAC、Windwos、Linux向けにもアプリはあります。
数回クリックするだけでURLを発行できます。

・画像左上から、通知したいチャンネルの歯車マークをクリック(チャンネルの編集)する。
・「連携サービス」「ウェブフック」の順にクリックする。
・「新しいウェブフック」をクリックし、「ウェブフックURLをコピー」をクリックする。
※チャンネル名などは好きに決めてください。
ここで取得したURLを今後使用することになります。Discordでの作業はこれで終了です。
iPhone/iPadでの作業
今回は家族が帰宅したら、Discordで通知するというホームオートメーションを作成してみようと思います。
ホームアプリからオートメーションの新規作成を選びます。

・画像左から、「人が到着」をタップ。
・ホームオートメーションに参加しているメンバーなら、ひとりでも複数でも指定できるので、通知連絡が欲しい人だけをチェック。
・画像一番右、デバイスは選択せずに一番したの「ショートカットに変換」をタップ。
注意点
誰が帰宅したかの判別は出来ないため、人によってメッセージを変えたいのであれば、人数分のホームオートメーションを作成する必要がある。
HomeKitのホームオートメーションでは、「誰かが到着した」というトリガーから「誰が」到着したのかを動的な引数(変数)として受け取ることはできません。
「ショートカットに変換」を使ってスクリプトを組もうとしても、ホームオートメーションはiPhoneではなくホームハブ(Apple TVやHomePodなど)上で実行される仕様上、トリガーを引いた個人のアカウント情報を変数としてアクションに渡すことができないためです。

・「シーンとアクセサリを設定」が残っていたら、バツボタンで消してしまってOKです。
・「アクション検索」に「URL」と入力して検索。
・検索結果から「URLの内容を取得」をタップ。
・「URL」の箇所にDiscordで発行したURLをそのまま貼り付ける。
・方法は「POST」に変更。
・ヘッダは弄らずに、本文に「新規フィールド」を「テキスト」で追加します。

必要な情報を入力したイメージです。
「キー」に「content」を入力。
「テキスト」に通知したい内容を入力。
手順はこれで完了です。簡単ですね。

家族が自宅に着くとDiscordで通知がきます。
それ以外からの通知。やってる事は一緒。
cURLで叩く
curl -X POST -F content="長女が帰宅" https://discord.com/api/webhooks/XXXXXXXXXXXXXXXXXXXXXXXXXXXXWindowsのコマンドプロンプトからでも。
※URL部分を自分で発行したものに要変更。
Pythonに組み込む
import requests
#discordで発行したURL
url = 'https://discord.com/api/webhooks/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
data = {'content': '長女が帰宅'}
requests.post(url, json=data)Python内でちょっとした通知をしたい時に。
エラー処理していないので、送信ミス連発するようなら対策してください。
手軽にいろいろな場面に組み込める。
ちょっとした応用(個人オートメーション)
以前にNoteにしたやつですが、これにDiscord通知も組み込んでみようと思います。
こちらは個人オートメーションに設定するので、人数分の設定が必要になります。

既存の「解錠」ショートカットに「テキスト」と「ショートカット実行」の2つの項目を追加して、呼び出すショートカットに「Discord送信」と言うショートカットを別に作成して指定します。
※Discord送信の処理の中身は画像右。
ショートカットからショートカットを実行しています。
難しいことはしていませんが、「Discord送信」のショートカットを共有しますので欲しい方はどうぞ。
iPhone/iPadで上記URLを開くと、ショートカットのひな形が登録できます。
この様にDiscord送信部分を独立させる事によってどのショートカットからでも簡単に呼び出せます。

URL部分を自分で発行したものに要変更。
解錠ショートカット内のテキストに入力した内容がこちらの「ショートカットの入力」に代入されます。
それから、日付部分を自分の出力したい様に整形しています。

これを実行すると整形された日付がプラスされて通知されます。
ここら辺はほんと好みなのでお好きなように。
Discordにいろいろな情報を集約したい方なんかはこんな方法も良いのではないでしょうか。
しっかし、このショートカットというシステムはほんと取っつきにくいですね。
今回は以上です。
