詳細は別記事で書く予定ですが、OBS Studioで配信を開始/終了するたびに宅内の照明などを操作したかったので、OBSのLUAスクリプトで実現しました。そのまんまのサンプルがありそうで見付からなかったので、なんとか各方面のマニュアルやブログを参考に実装しました。
WebHookからの家電操作にはSwitchbotとIFTTTを使います。今回はLEDテープライトを用意しました。
【Works with Alexa認定】スイッチボット(SwitchBot) LED テープライト Alexa RGB 調光調色 マルチカラー 1…
別に電球でもエアコンでもカーテンでも理屈は同じです。また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」という名前で適当なフォルダに保存します。
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 |
obs = obslua source_name = "" prefix = "" suffix = "" -- Script hook for defining the script description function script_description() return [[ 配信開始と終了時にIFTTTのWebhooksサービスを使って通知を送信するスクリプトです。 KeyはIFTTTのWebhooksサービスを使って取得してください。 イベント名はstream_startedとstream_stoppedの2つを作成してください。 システムにcurlがインストールされている必要がありますが、最新のWindows、macOSなら入っていると思います。 by do-gugan ]] end -- 設定項目の作成 function script_properties() local props = obs.obs_properties_create() obs.obs_properties_add_text(props, "key", "Key", obs.OBS_TEXT_DEFAULT) return props end -- 起動時に実行 function script_load(settings) obs.obs_frontend_add_event_callback(function(event) handle_event(event,settings) end) end function handle_event(event,settings) if event == obs.OBS_FRONTEND_EVENT_STREAMING_STARTED then obs.script_log(obs.LOG_INFO, "配信を開始しました。") local event_name = "stream_started" send_webhook("stream_started",settings) elseif event == obs.OBS_FRONTEND_EVENT_STREAMING_STOPPED then obs.script_log(obs.LOG_INFO, "配信を終了しました。") send_webhook("stream_stopped",settings) end end function send_webhook(event_name,settings) -- Webhookのリクエストを送信 local url = "https://maker.ifttt.com/trigger/"..event_name.."/json/with/key/"..obs.obs_data_get_string(settings, "key") local command = 'curl -X POST -H "Content-Type: application/json" "' .. url .. '"' os.execute(command) end |
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マニュアルを参照して希望のイベントがあるか調べてみると良いでしょう。