配信中を家族に知らせるランプを作る~OBS Studio、IFTTT、SwitchBot連携

世の中、テレワークが増えて、会議中に家族が部屋に入ってこないように知らせるいわゆるON AIRライトが欲しいとずっと思っていました。しかも廊下まで行って手動でON/OFFする必要があると面倒だし絶対忘れまる。実際には会議終わってるのにライトは点きっぱなし、とかいうことに絶対なる。

自分はZoomとかTeams、Meetとクライアントによって色々使うので、汎用的に使用中を検知する方法はまだ思いついてないんですが、とりあえず家族がたまにやるOBS Studioを使った配信ならいけそうな方法を見つけました。(別記事にまとめました)

自分はライブ配信はしないですが、収録には使うので、同様に録画開始/停止をトリガにすれば、「収録中入室禁止」のランプにはなりそうですね。ただ自室の廊下付近に電源を取れる場所がないので、それは別途解決せねばなりません。

ということで、今回は家族の配信部屋前に設置する「配信中」ランプを作ってみます。

座組としては、

  • SwitchBotのLEDテープで光るランプを作る
  • IFTTTのWebHooks(所定のURLにアクセスしてトリガ)からSwitchBot製品を制御
  • OBS StudioのLUAスクリプト配信開始/終了時に上記WebHookのURLを叩く

という流れ。これで完全自動になりますが、場合によっては家族が使っているStream Deckから手動でON/OFFできるようにすることも考えます(IFTTTを経由してもいいし、直接SwitchBotのAPIを叩くとレスポンス上がりそう)。

■ランプの製作

家族はちいかわ(のモモンガ)が好きなので、こちらのランプを魔改造することにします。

バッテリー充電式なので外部の電源入力のON/OFFでは直接点灯制御はできなそう。最悪分解してバッテリー線を切断とかしたらいけるかなくらいで特攻。案の定、充電とは別で電源スイッチを押さないと点灯しません。さらに色が電球色と昼白色か昼光色の色温度の高い色の2色切り替え式で、最初は必ず電球色になります。モモンガの毛色としては違和感ありまくりなので解釈不一致のクレームになってしまいます。これは改造無理なんじゃ…とバラしてみるとこんなランプユニットが出てきました。

カバーの接着も固く、想像にこのユニットを使うのは放棄。上部のモモンガ型のシリコンカバーだけを流用することにします。

発光体としてSwitchBotのLEDテープを使うことにしました。電球タイプでは入ったとしても発熱がスゴそうなので。

IFTTT連携ができればいいのでもっと安いものもありますが、我が家ではSwitchBotを元々使っており、新たにアプリを入れなくてもいいというのでこれにしました。

テープ状のLEDを巻き付けるコアパーツを3Dプリンターで作ります。なんとなく体型に沿うようにしたら結局電球みたいなフォルムに、、まぁ大きさが違うんですが。

ボディのシリコンカバーを固定する底の円盤部分を元のランプユニットのサイズで正確に設計。これでシリコンカバーがカポっとはまります。いかにも配信中であるというプレートも手でもってるように取り付けてみました。実際には3つのパーツで別々に造形しています。プレートは半透明PETG素材で光が透けるようにしてみたんですが、透明度が低いのイマイチでした。

LEDテープを巻き付けた写真を撮るのを忘れてたんですが、このパネルの下に伸びるステーが非常に折れやすく2回折れては補強を増して造形したりして、もう分解したくないので割愛。

■SwitchBot設定

LEDテープはRGBで色も明るさも自由にできますが、当面はON/OFFでいいので、SwitchBotのスマホアプリで解釈一致な毛色を再現してお気に入りに入れておきます。普段はIFTTT経由でON/OFFだけすれば色や明るさは固定されます。

必要があればIFTTTから色や明るさ指定もできるはずなので、録画中は赤とか動作を変えることもできるはず。

■IFTTT設定

配信開始(点灯)と配信終了(消灯)のそれぞれのアプレットを作ります。IF(トリガ)がWebHooksで、THENがSwitchBot制御です。

動作確認も兼ねてスマホアプリへの通知も挟んでいます。

WebHooksの中身はこんだけ。配信開始用アプレットではイベント名を「stream_started」、終了用は「stream_stopped」とします。

SwitchBot側は「LED Strip Light On/Off」モジュールを使います。

WebHooksとして使うURLは、ユーザーアカウントを示すキーと、そのユーザが作った中でどの動作を叩くかを示すイベント名を含みます。そのうちイベント名は上記で指定したものになります。キーはユーザ毎に固定なので、「My Services」→「WebHooks」の画面にいって調べます。

この画面にあるURLの/use/の後の文字列がキーになります。

これを使って、

みたいな形式がトリガ用のURLとなります。これをブラウザなどで開くとアプレットが実行されるわけです。これをstream_startedとstream_stoppedで2つ作っておきます。

■OBS Studio設定

で、OBS Studioの配信開始や終了時に上記URLを(ウインドウを開かず裏でひっそり)開けばいいわけですが、そこら辺は汎用的な情報なので別記事として切り出しました。

■完成!

これが完成したライトです。RGBテープライトなので色味を調整でき、いい感じの白さを出せてると思います(原作知らんからイメージですが)。さすがに耳の中までは光が届いてない感じ。

プレートはX1-Carbonで始めて多色造形したんですが内部サポートが黒になってしまい格子模様がでちゃってます。どうも外枠を黒にすると吊られて内部構造も黒になってしまうぽいので、別パーツにして組み合わせるとかしないとかも。

右の半球のが元から入っていたライトユニット

ライトの熱でシリコンカバーが焦げたり燃えたりしないか不安でしたが、輝度設定としては15%くらいで充分綺麗に光るし、一晩点けたままにしても平気でした。万一参考になさる時は自己責任でお願いします。

別にちいかわでなく、電源供給で(スイッチ無しで)ON/OFFできるランプならもっと簡単にできると思います。

この場合は、こういうスマートコンセント型のデバイスでON/OFFすればいいでしょう。

電源だけは必要にせよ、PCからの線が届かない位置でも、なんなら地球の裏側でも配信の状態を知ることができるので、ニーズがある人の参考になれば幸いです。

OBS Studioの配信にあわせてIFTTTのWebHooksを叩く

詳細は別記事で書く予定ですが、OBS Studioで配信を開始/終了するたびに宅内の照明などを操作したかったので、OBSのLUAスクリプトで実現しました。そのまんまのサンプルがありそうで見付からなかったので、なんとか各方面のマニュアルやブログを参考に実装しました。

WebHookからの家電操作にはSwitchbotとIFTTTを使います。今回はLEDテープライトを用意しました。

別に電球でもエアコンでもカーテンでも理屈は同じです。またIFTTTに対応していればSwitchbot製品でなくてもいけると思います。家電製品操作だけでなくメールやSNS投稿をしたり、Googleドキュメントに記録をしたりとか。IFTTTは何年か前に無料プランで使えることが絞られてあまり名前が挙がることがなくなりましたが、無料プランでも2つのアプレットが作れるので、今回の用途(オンとオフ)だけなら使えるんじゃないかと思います。

  • 手順1. SwitcBotまたは他のIFTTT対応製品を設定
  • 手順2. IFTTTに登録し、SwitchBot(等)サービスと連携
  • 手順3. IFTTTでWebHooksサービスを登録し、個人毎のKeyを取得(あとでOBSにコピペします)
  • 手順4. 開始時アプレットとして、IFにWebHooksを選び、イベント名を「stream_started」とし、THENに好きな動作を設定
  • 手順5. 終了時アプレットとして、IFにWebHooksを選び、イベント名を「stream_stopped」とし、THENに好きな動作を設定

までは別途済ませてあるとします。

■スクリプトの準備

GitHubリポジトリからluaスクリプトをダウンロードするか、以下のコードを「IFTTT_when_stream_star.lua」という名前で適当なフォルダに保存します。

OBS Studioで「ツール」→「スクリプト」を開き、「+」ボタンから保存した.luaスクリプトを選択します。Key欄にIFTTTのWebHooks設定で取得したKeyをコピペします。

・WebHooksキーの取得

設定済みの場合、こちらのページを開いて、URLの赤線の部分があなたのKeyです(/は含まない)。

基本これだけです。最初の確認段階では「スクリプトログ」ボタンを押してログウインドウを開いておきます。そうすると配信開始/終了時に「配信を開始しました。」「配信を終了しました。」などとメッセージが出てスクリプトが反応していることを確認できます。

WebHookを開くのにテキストブラウザのcurlというプログラムを裏で呼び出しています。これはWindows 10 Version 1803以降はプレインストールになってるので特に何もしなくても大丈夫はなず。macOSでもここ最近ものでしたら入っているはずです。

カスタマイズしたい人への参考情報

今回はOBSの動作のフックとして

  • OBS_FRONTEND_EVENT_STREAMING_STARTED(開始)
  • OBS_FRONTEND_EVENT_STREAMING_STOPPED(終了)

を使って、32行目以降のところで処理を記述しています。もしこれ以外のイベントをトリガーにした場合は、APIマニュアルを参照して希望のイベントがあるか調べてみると良いでしょう。

Switchbotの防水温湿度計で車内温度をモニタしてみた

プライムデーで安く買ったのでSwitchbotの防水温湿度計を2つ購入してみました。

こちらはコイン電池で駆動するワイヤレスかつ防水の温湿度計です。数年前からNetatomoのウェザーステーションを屋外に置いてましたがさすがに風雨にさらされてボロボロ。電池もすぐなくなります。

買い直すには高いからなー、と思っていたところ、こちらはなんと1,000円台。防水なので屋外に晒しておけます。ストラップがついているので1つは庭の木の枝にぶら下げておきました。

もうひとつの使い道は定まってないですが、とりあえず真夏の車内がどれほど暑くなるか知りたくてテスト。直射日光を避けるため、運転席のバックポケットに入れてみました。

熱中症警告が出ている7月中旬の日で、午後2時頃がピークでMax 60℃間近まで上がったようです。

クラウンクロスオーバーはスマホアプリからエアコンを遠隔起動できるので、出かける少し前にこれをチェックして必要に応じて事前に冷やしておくという使い方もアリかなと思います。スマートスピーカーと連携させておけば声で今の温度を知ることもできます。例えば「アレクサ、クラウンの温度は?」と聞くと「クラウンは44.9℃です」などと返って来ます。

(エアコンを始動できるMy TOYOTAアプリで室内温度くらい見られてもいいと思うんですが、残念ながらないんですよねー)。

製品の機能としては、一定の温度や湿度になった時にSwitchbotの各種デバイスの動作をトリガできるので、暑くなったらエアコンをつけるなどの「オートメーション」を組んでおけば、ペットや高齢者がいるお部屋でも安心だと思います。なにより防水でこのコスパよ。

ちなみに室内用になりますが温度湿度を表示するディスプレイのついたタイプもあります。

またオートメーションなどで他の機器と連携したりインターネット経由で外出先から温度や湿度を見るにはSwitchbotハブと呼ばれるデバイスとWi-Fi環境も必要です。ハブも何種類かあり、画面無しのミニ、温度湿度ディスプレイと一体化したハブ2、照明器具と一体化したものなど。

また前述のようにGoogleやAmazon(Alexa)といったスマートスピーカーと連携させて声で操作したり温度や湿度を知ることもできます。

■まとめ

物理スイッチをスマホ経由で押すIoTデバイスとして始まったSwitchbotですが、いつのまにか様々な派生商品が出ていて便利になっていますね。我が家では赤外線リモコンブリッジとしてはいまだNatureRemoがメインで徐々にSwitchbotが侵食しているという雰囲気。今後はHomePodから使えるようMatter対応の速さが焦点になってくるのかなと思います。Switchbot ハブ2がいちはやくMatterに対応したと見せかけつつ、これは温度湿度計などの内蔵デバイスが使えますというだけで赤外線デバイスまでMatter経由で使えるわけではありません。赤外線ブリッジとしてはNatureRemo Nanoが先にリリースされました。

逆にこちらは上位モデルのような温度湿度計が内蔵されていないので痛し痒しです。上位モデルのMatter対応は「検討中」とのこと。現状では、HomePodからHey, Siriで利用したければ、NatureRemo Nanoで赤外線ブリッジ、Switchbot ハブ2で温度湿度監視、というハイブリッドが必要そう。
iOS17で「Hey, Siri」が「Siri」だけで済むようになると報じられて、「OK, Google」や「Alexa」よりもシンプルになるので、全部Matterで揃え直そうかなと思ったんですが、どうやら日本語では「Hey」が取れないようです。先行してNatureRemo nanoも購入済みですがちょっとガッカリ。すでにNatureRemoの上位モデルをお持ちの方は急いでnanoを買う必要はないかも?nanoはまた別記事でレビューしようと思います。