【レビュー】MacのAutomatorでSwitchBotを制御し、Stream DeckやLoupedeckでワンボタン起動させる方法

導入してはじめてわかるSwitchBotの快適性。導入してからかれこれ2年以上は経っているけれど、もはやこれがないと生きていけない身体になりつつある。

最初は「スマホからリモコン感覚で制御できるだけでしょ」

なんて思っていたんだけど、いざ導入してみると、その制御できること自体が便利だけでなく、照明やテレビリモコン、エアコンはもちろん、なんなら家の鍵からPCの起動まで、ありとあらゆるものがSwitchBotで制御できちゃう。

さらにその便利さに拍車をかけるのが、Stream DeckやLoupedeckと呼ばれる、いわゆる左手デバイスたち。これらとSwitchBotを連携させることでさらに便利になる。

▲ランチャーといったシンプルな使い方から、ネイティブ統合対応されたアプリケーションとの連携はバッチリ。非アクティブ時でも特定のアプリを制御できるのが左手デバイスの魅力のひとつ

ただPCをSwitchBotで制御するには、別途SwitchBot スイッチという遠隔操作可能なボタンが必要だったり、PCやMacで制御するには左手デバイスで制御するにはIFTTT経由で制御しなければならなかったりなど、下準備や知識も必要なんだけどね。

▲SwitchBotスイッチは遠隔操作できる物理ボタン。PCの電源ボタンの近くに両面テープでセッティングしておくことで、離れた位置から電源ボタンを押してくれるようになる。PCのボタンだけでなく、照明とか給湯器とか、物理的なボタンを遠隔で操作したいときに便利

先述したとおり、SwitchBotの制御をPCやMacで制御するにはIFTTTというWebサービスにあるWebhookというトリガーが必要。今までは無料で利用できたWebhookがいよいよ有料化。この神がかった連携を無料で動かすための代替を探す旅がはじまった。

▲ふと気がついたらSwitchBotを制御していたAppletsがグレーアウトしていて、右下にはProにならないと使いないぞ的なアイコンが……

ということで、今回はSwitchBotをMacの標準アプリでもあるAutomatorで制御してアプリ化し、LoupedeckやStream Deckのような左手デバイスでワンボタン動作できるようにしていく。

iPhone版アプリからトークンを取得する

まずはSwitchBotを制御するためのトークンを取得する。iPhone版のSwitchBotアプリを起動したら、画面右下にあるプロフィール→設定へと移動。一番下にある、アプリバージョンを10回タップすると出現する開発者オープションから、トークンを取得するをタップすることでトークンが表示される。

▲赤い文字で表示されているトークンは英数字の羅列になっている。これをコピーしておくんだけど、Mac側で使うことになるのでHandoffやメモ経由でペーストできるようにしておくと便利

SwitchBotで制御しているデバイス情報を取得

続けて、SwitchBotで制御しているデバイス情報をターミナルで取得する。入手したデバイス情報はターミナル上で表示させることもできるけど、改行なしで表示されて視認性が悪いので、ユーザーフォルダの直下にテキストで出力させるようにしてみた。

curl --request GET \
  'https://api.switch-bot.com/v1.0/devices' \
  --header 'Authorization: 取得したトークン' \
  --header 'Content-Type: application/json; charset=utf8' \
  | sed 's/{"/\n&/g' \
  | sed '/^$/d' \
  > output.txt

なお、取得したトークンという部分は、先ほどiPhone版のアプリで取得したトークンの文字列に置き換えること。これをターミナルにペーストして実行すれば、ユーザーフォルダ直下のoutput.txtに出力される。

▲こんな感じでiPhone版のSwitchBotアプリで設定したデバイスが一覧で出力される。この中で必要なのはdeviceidの文字列のみ

Automatorでシェルスクリプトを実行させる

ここまでくればあとは簡単。output.txtから制御したいデバイスを確認し、deviceidを控えておく。そして、下記のようなコードを記述しよう。

curl --request POST \
  'https://api.switch-bot.com/v1.0/devices/制御したいデバイスのdeviceid/commands' \
  --header 'Authorization: 取得したトークン' \
  --header 'Content-Type: application/json; charset=utf8' \
  --data-raw '{
    "command": "turnOn",
    "parameter": "default",
    "commandType": "command"
  }'

編集する場所は、制御したいデバイスのdeviceidの部分と取得したトークンの2カ所。あとはAutomatorを起動してアプリケーションを選択。ユーティリティ→シェルスクリプトを実行をダブルクリックし、入力スペースに上記の編集したコードを入力すればOK。

▲入力し終わったら、試しに右上の実行で起動してみよう。問題なく動作したら適当な名前をつけてアプリケーションとして保存しておく

あとは左手デバイスに登録するもよし、Dockに追加するもよし、好きなように使えばOK。今回はSwitchBotスイッチの制御について紹介したけど、同じようなやり方で赤外線リモコンを制御した照明のオンオフもできた。あとはエアコンの設定温度とかオンオフとかも制御できるようになれば完璧かもー。

ちなみに今回このコードを作成するにあたり、ChatGPTが大活躍。コードの知識が浅くても、ChatGPTに「こういう感じで書いてほしい」って頼めば簡単に作成してくれる。例えばテキスト出力してもらうのも、「読みづらいからテキストで出力してもらいたいんだけど」ってChatGPTに聞くだけで、それならばこのコードはどうでしょうかって提案してくれるんだよね。

すごい時代!

■参考リンク:
https://github.com/OpenWonderLabs/SwitchBotAPI?tab=readme-ov-file#send-device-control-commands