IFTTTが2020年10月くらいから多分コマンド4個以上は有料になりました。……以下の文章含めて4ヶ月前くらいから練ってたけど、途中でやる気失ってるのでいつも以上にあやふやですゴメンナサイ。
実は結構前から導入してたSwitchBot Hub mini。リモコン操作が便利で愛用していたけど、なんとHomebridgeのプラグインが存在しないことが判明。SwitchBot(物理スイッチ押すやつ)にはあるのにね?
ふとアイデアが降って来たのでHomebridgeでHomekitに無理矢理対応させてみた話。
色々説明
今回は「Homebridge」「Webhooks」「IFTTT」を活用して、HomePodからSwitchBot Hub miniの赤外線リモコンの操作を行った。
いきなり知らない単語が色々出て来てよく分からない、と言う人のために軽く解説。と言ってもわたしもよく分からん。
・Homebridge
Homekitの「ブリッジ(アクセサリをまとめるもの)」をPC上で仮想的に再現する、常駐型のソフト。エミュレーターみたいな感じ?
作ったブリッジの中にiOS等から操作出来るスイッチとかボタンとかをいっぱい増やせる。これに機能割り当てしていくけど、単独じゃオンにしましたオフにしましたって報告しか出来ない。そこでプラグイン。
プラグインを使うと、そのプラグインが対応する範囲で家電の操作やコマンド実行が出来るようになる。これをHomebridgeが作ったボタンやスイッチのオン・オフに割り当てていくことで、最終的にHomekit非対応の家電が操作出来るようになるというもの。すごい。
ただ今回はSwitchBotHubminiのプラグインがないのがそもそもの原因なので、ちょっと遠回りで解決する。
・Webhooks
元は色々意味あるみたいだけど、今回のこれはIFTTTのトリガーの1つ。
Webのアドレスを生成して、それを踏むことで設定したWebサービスとかに踏んだことを伝える。色々なトリガーになるやつ。
今回はこいつを挟んで色々してもらう。
・IFTTT
なんでもやっちゃう系のやばいやつ。完全にクラウドで動作し、あらゆるWebサービスの動作をトリガーとしてあらゆるWebサービスを自動で操作出来る。本来の用途とはちょっと違うけど、スマートホーム関連で大活躍中のイケメン。
今回の彼のお仕事は「Webhooksが踏まれたらSwitchBotHubminiを動かす」こと。
「IFTTT」「Webhooks」そしてSwitchBotは全てクラウド上で動作するため、特に端末にアプリを必要としない。
SwitchBotシリーズは本来専用アプリで制御する必要があるけど、今回はIFTTTが制御してくれるようになるのでそれすらも不要。純正のホームAppのみで全て完結する。なのでHomebridge環境さえ用意出来れば導入はそれほど難しくなかったり。
実際にどのように動作するのか
なんとなく察しはつくだろうけど、今回のポイントは「HomebridgeのプラグインでWebhooksのトリガーを押す」こと。用いたプラグインは「homebridge-ifttt」。https://github.com/ilcato/homebridge-ifttt (リンク先GitHub)
追加するアクセサリのスイッチのON/OFFそれぞれにWebhooksのURLを設定可能。段階操作は出来ないので、Switchbotで行う動作は出来るだけ簡略化しておく必要がある。
他のプラグインを漁ってみると段階を持たせられるものとかもあったけど、一番使い勝手が良さそうだったこれに決定。
実際の動作順は、
1:ホームAppでスイッチをON/OFFにする
2:Homebridgeに伝わり、対応したWebhooksのURLが踏まれる
3:踏まれたWebhooksをトリガーとして、IFTTTが動作。操作対象はSwitchBot
4:SwitchBotがIFTTTにより実行され、設定したリモコンの信号が送られる
このうち2→4までは全てクラウド上で行われるけど、流石に多少のラグはある(体感3~5秒くらい?)。またHomebridgeさえ常時稼働させておけば、AppleTV等のホームハブを介して遠隔地からの操作も可能(これはHomekitの機能)。
というかこの方法を使えばIFTTTで操作出来るほぼ全てのものをHomebridge経由のiOSデバイス等で操れる。他のシリーズの家電でもいいし、極端な話特定の文章をツイートするとかの全くスマートホームっぽくないことすらも出来てしまうので可能性の塊。
設定手順
Homebridgeの導入は割愛。わたしはMacでやったけど(macOSが一番導入が楽)、WindowsやLinuxでもこの後の手順は変わらない。
・homebridge-iftttの導入
他のプラグインと同様に、以下のコマンドを叩いて終了。
npm install -g homebridge-ifttt
一般的にプラグインのインストールに用いられるコマンド。-gはグローバル領域とやらにインストールすることを意味するらしいけど、詳しくはわたしも知らないので省略。
・Webhooks/IFTTTの設定
SwitchBotのリモコン操作を全てWebhooksに割り当てる。これもまたオンオフ全て分けてアクションにする。こんな感じ。
ある意味これが一番面倒かも。
・HomebridgeのConfigの記述
さっきのGitHubのページにサンプルがあるのでそれを参考に。一応ここにもわたしが使っているサンプルを残しておく。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
{ "platform": "IFTTT", "name": "IFTTT", "makerkey": "xxxxxxx", "accessories": [{ "name": "テレビ", "buttons": [{ "caption": "テレビ", "triggerOn": "tv_on", "triggerOff": "tv_off", "stateful": true }] }, { "name": "照明", "buttons": [{ "caption": "照明", "trigger": "light" }] }, { "name": "エアコン", "buttons": [{ "caption": "電源", "triggerOn": "aircon_on", "triggerOff": "aircon_off" }] }, { "name": "暖房モード", "buttons": [{ "caption": "暖房モード", "triggerOn": "aircon_hot", "triggerOff": "aircon_cool" }] }, { "name": "静音モード", "buttons": [{ "caption": "静音モード", "triggerOn": "airmute_on", "triggerOff": "airmute_off" }] }, { "name": "タイマー", "buttons": [{ "caption": "タイマー", "triggerOn": "airtime_on", "triggerOff": "airtime_off" }] } ]} |
platforms内のmakerkeyにさっき拾ったWebhooksのKeyをそのままコピペ。
accessoriesの中に、アクセサリ名(name)とbuttonsを記述。
buttonsの中に、実際使うボタンの名前(caption)・オン/オフにした時の動作に対応するWebhooksのEvent Name(triggerOn/triggerOff)を記載。要らない項目(delayOffとか)は消してOK。ちなみにtriggerを書いてtriggerOn/Offを消せば、オンにするたび自動でオフに戻って無限にオンに出来るボタンが完成する。リモコンが単一ボタンだったりするときに便利。
1つのアクセサリに複数ボタンを設定すると複数ボタンがまとまって便利。ただSiriでの操作がちょっと面倒になる(複数のスイッチがありますとか聞き返してくる)のでお好みで。
これでSiriなりホームAppなりで操作出来るようになるはず。
尚アクセサリ名等に日本語を使う場合、必ずテキストエディタで文字エンコードをUTF-8にして保存すること。UTF-8以外での日本語だとホームApp上で文字化けするので使いものにならない。テキストエディタで生成したConfigがUTF-8でなく、そのまま上書き保存すると文字化けするパターンもあるので注意。(1敗)
補足
オン/オフの状態はHomebridgeで記録されるもののあくまで表示上でしかないため、他のリモコン(SwitchBotAppや物理リモコン)を使うと実際の状態と表示がずれる。綺麗に使いたいならHomekitでのみ操作するように心掛けるのがベスト。Homekit用のボタン(EveButtonとか)があればいいかも?




