導入してはじめてわかるSwitchBotの快適性。導入してからかれこれ2年以上は経っているけれど、もはやこれがないと生きていけない身体になりつつある。
最初は「スマホからリモコン感覚で制御できるだけでしょ」
なんて思っていたんだけど、いざ導入してみると、その制御できること自体が便利だけでなく、照明やテレビリモコン、エアコンはもちろん、なんなら家の鍵からPCの起動まで、ありとあらゆるものがSwitchBotで制御できちゃう。
さらにその便利さに拍車をかけるのが、Stream DeckやLoupedeckと呼ばれる、いわゆる左手デバイスたち。これらとSwitchBotを連携させることでさらに便利になる。
ただPCをSwitchBotで制御するには、別途SwitchBot スイッチという遠隔操作可能なボタンが必要だったり、PCやMacで制御するには左手デバイスで制御するにはIFTTT経由で制御しなければならなかったりなど、下準備や知識も必要なんだけどね。
先述したとおり、SwitchBotの制御をPCやMacで制御するにはIFTTTというWebサービスにあるWebhookというトリガーが必要。今までは無料で利用できたWebhookがいよいよ有料化。この神がかった連携を無料で動かすための代替を探す旅がはじまった。
ということで、今回はSwitchBotをMacの標準アプリでもあるAutomatorで制御してアプリ化し、LoupedeckやStream Deckのような左手デバイスでワンボタン動作できるようにしていく。
iPhone版アプリからトークンを取得する
まずはSwitchBotを制御するためのトークンを取得する。iPhone版のSwitchBotアプリを起動したら、画面右下にあるプロフィール→設定へと移動。一番下にある、アプリバージョンを10回タップすると出現する開発者オープションから、トークンを取得するをタップすることでトークンが表示される。
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に出力される。
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