🤖

iPhoneのオートメーションを使ってアラームを止めたときにSwitchBotのシーンを実行する

2023/12/31に公開

はじめに

SwitchBotのシーンを使えば、「テレビを付ける」、「電気を付ける」といったアクションを一度のコマンドで実行できてとても便利です。
起床の際に定時で実行するようにして目覚めを良くし二度寝を防止している人もいると思います。
ただ、SwithBotのオートメーション機能だけでは事前に設定した時間にしか実行できず、毎日就寝時間に応じてアラームを微調整する身からするとSwitchBot側のスケジュールも変えないといけないのはちょっと不便だと感じていました。
そこでiPhoneのアラームをトリガーにしてSwitchBotのシーンを実行できないかなと考えました。

できるようになること

iPhoneのアラームを止めると同時にSwitchBotのシーンを実行します。
さらに複数アラームを設定していても一度しかシーンが実行されないように工夫を入れます。(こちらが本当に書きたかったところです)

iPhoneのオートメーションからSwitchBotのシーンを呼び出す

手順は以下の通りです。

  1. SwitchBotでシーンを作成する
  2. iPhoneのショートカットに1で作成したシーンを登録する
  3. iPhoneのオートメーションを作成する

順番に説明していきます。

1.SwitchBotでシーンを作成

特に説明不要だと思います。
SwitchBotのアプリから実行したいアクションを選択してシーンを作成します。

2.iPhoneのショートカットに登録

iPhoneオートメーションから呼び出せるように1のシーンをSiriショートカットに追加します。
SwitchBotアプリから「シーンを編集」-> 「他の実行方法」-> 「Siriショートカット」から追加します。
完了するとiPhoneのショートカットアプリで追加されているのが確認できると思います。

3.iPhoneのオートメーションを作成

iPhoneのショートカットアプリから新規オートメーションを作成します。
トリガーをアラームで停止されたときにしてアクションに2で追加されたショートカットを選択すれば完了です。

複数回アラームを停止しても一回だけシーンが実行されるようにする

ここまでで本来やりたかったiPhoneのアラームをトリガーとしてSwitchBotのシーンを実行させることができるようになりました。

ただここで新たな問題が出てきました。
普段私は複数のアラームを10分おきとかに設定しているのですが、
こうするとそれぞれのアラームを停止するタイミングで毎回シーンが実行され、せっかく電気をonにしてたとしても2回目の実行で再度offに戻ってしまいます。
ということでこの問題を解消する方法を考えたいと思います。

いろいろと試行錯誤しましたが、
結局以下のようなフローで実現しています。
ポイントは適当なファイルを作り書き込みを行うことで、その最終更新日から2回目の実行かを判断できるようにしているところです。
この複雑そうに見える処理フローもすべてオートメーション上で完結します。

まずは適当なファイルを作成します。これは最初に一回だけ行う必要があります。
これもiPhoneショートカットから作成できます。(もっと簡単な方法もあるかもしれません)
新規ショートカットから「テキストファイルに追加」アクションを選択します。以下はテスト用に"test"という文字列をtest.txtというファイルに書き込む例です。
これを保存し実行すると指定した場所にファイルが作成されていると思います。


ここからフローチャートに合うように、最初に作ったオートメーションを修正していきます。

ファイル読み込み

ファイルを読み込むには「ファイル」アクションを使います。
ここで先ほど作成したファイルを選択します。

条件作成

条件は「if文」アクションで実現できます。
この時「ファイル」となっているところを「最終変更日」に、「時間フォーマット」は「なし」に変更します。時間フォーマットをなしにするのはその日に一度だけ実行されるようにしたいからですね。

条件のところは「が次と等しくない」にして比較対象は「現在の日付」とします。ここでも日付は「時間フォーマット」「なし」にしておきます。

シーン実行

SwitchBotのシーンショートカットをアクションとして追加します。
長押ししてドラッグすればif文の条件の中に入れられます。

ファイルに書き込み

「テキストファイルに追加」アクションをシーン実行のアクションの直後に追加します。
テキストは「現在の日付」にし、「ファイルパス」等を適切に設定します。ここはファイルの最終変更日を更新できればいいので細かい設定は気にしなくて大丈夫です。

完成!

完成したオートメーションは以下のようになってます。
これでその日初めての実行の際はif文の中に入りSwitchBotのシーンが実行され、2回目以降はifの中に入らないので何も実行されません。

保存する時には自動で実行できるように「実行の前に尋ねる」をoffにしておいた方が良いです。

まとめ

iPhoneオートメーションを駆使し、アラームを止めたときに1日1回だけSwitchBotのシーンを実行する仕組みを作りました。
今回初めてオートメーションをちゃんと使ってみて、できる事の多さにびっくりしたのと、工夫しだいでもっといろんな応用に使えそうだなと感じました。

GitHubで編集を提案

Discussion