ルームコントロール機能を使用すると、サードパーティのIP対応機器を制御でき、ユーザーはZoom Roomsコントローラを通じてその機器を操作できるようになります。管理者は、構成プロファイルを作成して、Zoom Roomから発信IP制御メッセージを追加できます。
注: オーディオ / ビデオ(A/V)用にルームコントロールを使用している場合、複数のNICを持つZoom Roomのコンピュータに個別のネットワークインテ―フェースカード(NIC)を割り当てることができます。NICは、Zoom Room対応のコンピュータに接続されている代替ネットワークに接続されたルームコントロールデバイスから個別に選択できます。この構成により、オーディオ / ビデオのトラフィックをプライマリネットワークから遠ざけることができます。
JSON構成プロファイルをアップロードする前に、Zoom Roomの設定を有効にする必要があります。
ルームコントロールプロファイルを書くには、JSONに関する実用的な知識が必要です。注意すべき点は、JSONがキー:値ペアベースのシステムであり、ファイルを正確にレイアウトするためには構文が重要だということです。JSONの基礎に関する詳細は、オンライン入門コースを参照してください。
どのコーディング言語でも、ファイルを次に処理する人にある程度の配慮を示す必要があります。ルームコントロールに対する特定の要件はありませんが、推奨されています。作成者、バージョン、その他の履歴の記録を残すために、'about'オブジェクトを使用して'adapters'の上に配置することができます。ルームコントロールはこれを解析しませんが、ポータルには残ります。以下はこれを活用するための例です。
{
"about": {
"type": "Medium Conference A",
"version": "v1.2.4",
"design_ref": "\\files\MediumConfA",
"created": "Mon, 21 Oct 2020 16:35:52 GMT"
},
アダプターを設定すると、ルームコントロールがデバイスに接続されます。このセクションは、構成の主要なセクションです。入れ子になったJSON形式内の個々のデバイスは、同様の形式に従う必要があります(この例は、以下のコード例と並行して入れ子になっています)。
{
"adapters": [
{
"model": "iTachIP2SL",
"ip": "[IP_ADDRESS]",
"uuid": "GlobalCache_[UNIT_MAC_ADDRESS]",
"ports": [
{
"id": "sl_sharp_tv",
"name": "Sharp Display",
"settings": {
"baud_rate": "38400",
"flow_control": "FLOW_NONE",
"parity": "PARITY_NO"
},
"methods": [
{
"id": "power",
"name": "Power",
"command": "POWR000%\\x0D",
"params": [
{
"id": "displayOn",
"name": "On",
"value": "0001"
},
{
"id": "displayOff",
"name": "Off",
"value": "0000"
}
],
"type": "actions"
},
...
'methods'の下に、追加のセクション'response_filter'を追加できます。応答フィルタは、以下に定義された応答フィルタがリッスンする接続を理解するのを可能にするビーコンです。この領域には、定義されている関数はありません。応答フィルタが他のセクションでどのように適合するかは、それらのセクションで説明します。
スタイルは、インターフェース要素の視覚的なスタイルを制御します。それほど広範に調整する必要がなく、比較的簡単に学ぶことができます。
インターフェースには多くのアイコンがあります。エアコンからスピーカーフォンまで、さまざまな製品に対応しています。以下のアイコンは現在のリストのものですが、リストは定期的に拡大しています。
| デバイス | 名前 | 画像 |
| エアコン | icon_air_conditioner | |
| ケーブルテレビ | icon_cable_tv | |
| シーリングマイク | icon_ceiling_mic | |
| カーテン | icon_curtain | |
| DVDプレーヤー | icon_dvd_player | |
| Xbox / PS4システム | icon_game_console | |
| HDMI | icon_hdmi | |
| ノートパソコン | icon_laptop | |
| 照明 | icon_light | |
| プロジェクター | icon_projector | |
| ラック機器 | icon_rack_equipment | |
| 衛星放送受信用アンテナ | icon_satellite_dish | |
| スピーカー | icon_speaker | |
| スピーカーフォン | icon_speakerphone | |
| テレビ | icon_tv | |
| 電源 | icon_power | |
| 上 | icon_up | |
| 下 | icon_down | |
| 冷 | icon_cold | |
| 暖 | icon_hot | |
| 乾燥 | icon_dry | |
| 風 | icon_wind | |
スタイル内にはアイコン(上記参照)、メインメソッド、可視性という3つの主要な修飾子があります。
アイコンは、システムを視覚化したものです。デバイスをマークしたり、ボタンに関連付けられたテキストを置き換えたりするために使用できます。以下の例では、'example'というデバイスを定義しています。
{
"adapters": [
{
"model": "ExternalControlSystem",
"ip": "tcp://[USER_IP_ADDRESS]:[USER_PORT]",
"ports": [
{
"id": "example",
"name": "Example Device",
"methods": [
...
'example'をデバイスとして定義すると、このIDをスタイル内で使用できます。たとえば、このexampleデバイスのメインアイコンを簡単に照明に設定することができます。
"styles": [
"example.icon=icon_light",
"example.main_method=power"
]
Zoomは、Googleの公式MDIサイトにあるマテリアルデザインアイコン(MDI)もサポートしています。
これらのアイコンのいずれかを指定するには、以下の形式の従います。
"example.icon=mdi:local_airport:two_tone"
これはすべて小文字である必要があります。アイコン名にはスペースの代わりにアンダースコア (_) を使用します。アイコンをダウンロードできない場合は、デフォルトのアイコンが表示されます。
また、お気づきかもしれませんが、1行内にデバイスのメインメソッドも定義しています。メインメソッドは、定義した参照コマンドをデバイスのタイトルバーに表示し、次のように目立たせます。

電源コマンドをメインメソッドとして定義したので、他のコマンドとは別に上部のバーに表示されています。
3つ目のスタイルタイプは「可視性」です。可視性は、プログラマーが関数を定義した後、その関数をユーザーのインターフェースから完全に非表示するのを可能にします。これは簡単に定義できます。
"example.power.invisible=true"
"device.command.invisible=true"の形式に従うと、このコマンドがRoomsユーザーから完全に非表示になります。
ルールはルームコントロールの自動化エンジンです。ここで自動的に実行される内容を定義します。たとえば、ミーティングがアクティブなときにのみディスプレイをアクティブにする場合は、「meeting_started」と「meeting_ended」(ストックZoomイベント)を使用して有効にします。
"rules": {
"meeting_started": [
"display.power.on",
"camera.power.wake"
]
),
"meeting_ended": [
"display.power.off"
]
}
この例は、システムの電源消費を削減するために使用できます。
1つのルールにつき1つのコマンドでは十分でない場合は、これらのコマンドを簡単にスタックすることもできます。各コマンドは技術的には順番に実行されますが、イベントが同時に実行されていると見なせるほど十分な速度で処理されます。上記の例では、ディスプレイが起動したときにカメラをアクティブにするために「display.power.on」の下に「camera.power.wake」を追加しました。
注:
| タイプ | イベント | 文字列 | Notes |
| ミーティング | |||
| ミーティング | ミーティングが開始しました | zr_meeting_started | |
| ミーティング | ミーティングが終了しました | zr_meeting_ended | |
| ミーティング | ミーティングが開始しました | zr_zoom_meeting_started | このコマンドは、通常のミーティングと相互運用ミーティングを区別するために追加されましたが、meeting_startedとmeeting_endedのコマンドは引き続きサポートされています。 |
| ミーティング | ミーティングが終了しました | zr_zoom_meeting_ended | このコマンドは、通常のミーティングと相互運用ミーティングを区別するために追加されましたが、meeting_startedとmeeting_endedのコマンドは引き続きサポートされています。 |
| ミーティング | ミーティングが開始しました | zr_interop_meeting_started | |
| ミーティング | ミーティングが終了しました | zr_interop_meeting_ended | |
| ミーティング | 着信ミーティング招待が開始しました | zr_meeting_ring_started | |
| ミーティング | 着信ミーティング招待が終了しました | zr_meeting_ring_ended | |
| 次のミーティングアラートがトリガーされました | zr_meeting_item_about_to_start | ||
| ミーティングリスト項目を開始 | zr_meeting_item_start | ||
| ミーティングリスト項目を終了 | zr_meeting_item_stop | ||
| 通話 | |||
| 通話 | 着信通話を開始 | zr_phone_ring_started |
あらゆるタイプの電話の操作(Zoom Phone、オーディオプラン、サードパーティPBX)がこのコマンドをトリガーします |
| 通話 | 着信通話を終了 | zr_phone_ring_ended |
このイベントをトリガーするには、すべての電話の呼び出しタイプが非アクティブである必要があります。 |
| 通話 | 通話が開始しました | zr_phone_call_started |
アクティブなミーティング内のPSTN招待はこのイベントをトリガーしません |
| 通話 | 通話が終了しました | zr_phone_call_ended |
|
| ミーティング内 | |||
| ミーティング内 - ビデオ | ビデオオン(カメラのミュートオフ) | zr_video_started | |
| ミーティング内 - ビデオ | ビデオオフ(カメラのミュートオン) | zr_video_stopped | |
| ミーティング内 - ビデオ | 選択したビデオデバイスが変更されました | zr_video_device_changed | ビデオデバイスの変更イベントは、メインで選択したデバイスが変更された場合にのみトリガーされます。マルチカメラの変更はこのイベントをトリガーしません。 |
| ミーティング内 - オーディオ | マイクオン (マイクミュート解除) | zr_microphone_unmuted | |
| ミーティング内 - オーディオ | マイクオフ (マイクミュート) | zr_microphone_muted | |
| ミーティング内 - オーディオ | 選択したオーディオデバイスが変更されました | zr_audio_device_changed | オーディオデバイスの変更イベントは、メインで選択したデバイスが変更された場合にのみトリガーされます。Danteマイクチャネルの変更は、このイベントをトリガーしません。 |
| ミーティング内 - コンテンツ | ワイヤレス共有が開始しました | zr_share_started | ダイレクト共有、ホワイトボードカメラ共有、カメラ共有、Zoomアプリ共有、Apple Airplay(複数の同時共有の場合、最初のコマンドのみが送信されます)。Digital Signageはこれらのイベントをトリガーしません。 |
| ミーティング内 - コンテンツ | ワイヤレス共有が終了しました | zr_share_ended | このコマンドは、複数共有の最後が終了したときに送信されます。Digital Signageはこれらのイベントをトリガーしません。 |
| ミーティング内 - コンテンツ | HDMI共有が開始しました | zr_hdmi_share_started | Digital Signageはこれらのイベントをトリガーしません。 |
| ミーティング内 - コンテンツ | HDMI共有が停止しました | zr_hdmi_share_ended | Digital Signageはこれらのイベントをトリガーしません。 |
| ミーティング内 - レコーディング | レコーディングが開始しました | zr_recording_started | |
| ミーティング内 - レコーディング | レコーディングが停止しました | zr_recording_ended | |
| 昇格 | ミーティングの昇格 | zr_elevate_to_meeting | このイベントは、Zoom Roomでテレフォニーまたは画面共有セッションが行われているときに、セッションをビデオミーティングに昇格するさせる場合にトリガーされます。 |
| ペアリング | |||
| ペアリング | ユーザーがZRとペアリングされました | zr_user_paired | 各ユーザーは一般的なペアリングイベントをトリガーします。 |
| ペアリング | ユーザーがZRとのペアリングを解除しました | zr_user_unpaired |
すべてのユーザーのペアリング解除は、一般的なペアリング解除イベントをトリガーします。 |
| Digital Signage | |||
| Digital Signage | Digital Signageが開始します | zr_digital_signage_started | |
| Digital Signage | Digital Signageが却下されました | zr_digital_signage_ended | |
| Whiteboard | |||
| Whiteboard | Whiteboardが開きました | zr_whiteboard_started | クラシックWhiteboard、新しいWhiteboard、ミーティング内Whiteboardに適用されます |
| Whiteboard | Whiteboardが終了しました | zr_whiteboard_ended | クラシックWhiteboard、新しいWhiteboard、ミーティング内Whiteboardに適用されます |
| Whiteboard | コンパニオンホワイトボードがZoom Roomに追加されました | zr_companion_whiteboard_connected | |
| Whiteboard | コンパニオンホワイトボードがZoom Roomから削除されました | zr_companion_whiteboard_disconnected | |
| 管理者 | |||
| 稼働時間 | 稼働時間が開始します | zr_operation_time_started | |
| 稼働時間 | 稼働時間が終了します | zr_operation_time_ended | |
| ユーザー検出 | ユーザーが検出されました | zr_people_detected | ハードウェアレイヤーユーザー検出のみに適用されます |
| ユーザー検出 | ユーザーが検出されませんでした | zr_people_not_detected | ハードウェアレイヤーユーザー検出のみに適用されます |
| 音声コマンド | 音声コマンドが有効になりました | zr_voice_command_on | |
| 音声コマンド | 音声コマンドが無効になりました | zr_voice_command_off | |
| Zoom Apps | Zoomアプリが開きました | zr_zoom_app_opened | 任意のアプリを開くと、アプリがすでにミーティングで開いている場合でもこのイベントをトリガーします。 |
| Zoom Apps | Zoomアプリが終了しました | zr_zoom_app_closed | 任意のアプリを閉じると、別のアプリがミーティングで動作中であっても、このイベントをトリガーします。 |
| 管理者 | ルームコントロールが開きました | zr_room_controls_opened | |
| 管理者 | ルームコントロールが終了しました | zr_room_controls_closed | |
| 管理者 | Zoom Roomsの起動が完了しました | zr_room_startup_completed | Zoom Roomの起動、ログイン、ルームコントロールの読み込みが完了しました |
注: 稼働時間イベントの稼働時間はZoom Rooms設定ページで設定します。
また、応答フィルタ用に独自のものを簡単に追加できます。ルールセクション内で、以下で説明するトリガーイベントを使用して、外部からの入力で独自の自動化を稼働させることもできます。
"rules":{
"operation_time_started":[
"light.power.on"
],
"user_customized_event1":[
"light.power.off"
]
}
この例では、「user_customized_event1」で、制御対象の照明をオフにします。これは、ボタンからの入力や、モーションセンサーが非アクティブになった場合や、予約システムのようなサードパーティシステムがミーティングにチェックインしたユーザーがいないことをルームに伝えることで作動するようにできます。この機能は、ユーザーの想像力次第でさまざまな用途に使用できます。
「シーン」はZoom Rooms 5.13.0の新機能です。これにより、ルームコントロール機能の愛用者は自身のユーザー体験にマクロ機能(単一ボタンにスタックされた複数のコマンド)を追加できるようになりました。これは、シーンリコールや、プロジェクター画面を下げる場合やプロジェクターの電源を入れるなど、依存デバイスに役立ちます。
ルールやアダプターと同様に、シーンはJSONファイルの最上位レベルのセクションです。現在、最大20のシーンを設定できます。これらのシーンでは、最大50の独立したコマンドがサポートされます。
一度設定すると、これらの新しいシーンボタンはルームコントロールウィンドウの上部に表示されます。
シーンを設定するには、下記のコードサンプルを参照してください。
このコンテンツをコピーする前に、'//text'セクションは参照用のメモであり、最終的なJSONファイルに含めることはできないことにご留意ください。
"scenes":[
{
"id":"scene_1", //required
"name":"Turn on all lights", //optional, shown if name and icon are empty
"icon":"icon_light", //optional, see icon list
"commands": [ //required
"light1.power.on",
"light2.power.on"
]
},
{
"id":"scene 2",
"name":"Turn off all lights"
"icon":"icon_light"
"commands": [
"light1.power.off",
"light2.power.off"
]
}
]
応答フィルタは、ルームコントロール機能における強力な進歩です。これらのフィルタは、定義されたデバイスから戻ってくるメッセージを読み取り、一致するフレーズを瞬時にスキャンします。このフレーズ(または式)がその接続で識別されると、(上記で説明されているように)ルールトリガーイベントの処理が開始します。
各応答フィルタは、以下の3つの要素で構成されます。
Zoom Roomsコントローラで、[ルームコントロール]
アイコンをタップすると、これらの追加機能にアクセスできます。
ミーティングに参加していない場合は、メインメニューにルームコントロールアイコンがあります。
ミーティング中、コントローラウィンドウの右上にあるアイコンをタップすると、同じルームコントロールが表示されます。
トラブルシューティングは、カスタム設定において重要な部分です。ルームコントロールはシンプルですが、必要に応じて複雑にすることもできます。以下のセクションでは、潜在的な障壁を解決するのに役立ちます。
| エラーコード | 説明 |
| No_Config_Error | JSONプロファイルがウェブポータルに読み込まれていません |
| Json_Syntax_Error | JSONプロファイルに構文エラーが含まれています |
| Json_Config_Error | JSONプロファイルに構成エラーが含まれています |
| IP_Error | 指定したIPへの接続で問題が発生しました |
| IP_Is_Public | 現在公開IPは許可されていません |
| DeviceID_Error | 1つ以上のデバイスIDが正しく設定されていません |
| MethodID_Error | 1つ以上のメソッドが正しく定義されていません |
| ParamID_Error | 1つ以上のパラメータが正しく定義されていません |
| IP2SL_Settings_Error | GC IP2SLでシリアルポートが正しく設定されていません |
| Empty_Device_Error | 1つ以上のJSONプロファイルで定義されていないデバイスが呼び出されました |
| 不明 | 不明なエラーが発生しました |
これらのファイルはさまざまなソースから集められており、開始点としてのみ使用してください。アプリケーションに適合させるために一部の修正が必要になる可能性があります。