ルーム コントロール


概要

ルーム コントロール機能を使用すると、サードパーティ製 IP 対応機器を制御することができ、ユーザーがZoom ルーム コントローラで機器を制御できるようになります。 管理者は、構成プロファイルを作成して、Zoom Room からの発信 IP 制御メッセージを追加できます。

この記事の内容: 

前提条件

構成

ルーム コントロールを有効化する

JSON 構成プロファイルをアップロードする前に、設定を Zoom Rooms で有効にする必要があります。これは、Zoom Rooms 階層の任意のレベルで構成できます。

  1. Zoom ウェブポータルにサインインします。
  2. [ルーム管理] をクリックし、[Zoom Rooms] を選択します。
  3. Zoom Room 名の右側にある [編集] をクリックします。
  4. [デバイス] で、[ルーム コントロールを有効にする] をオン(青)に切り替えます。 
  5. [プロファイルの作成] をクリックします。
  6. このルームの JSON 構成を入力します。

ルーム コントロール プロファイルを作成する

はじめに

ルーム コントロール プロファイルを作成する前に、JSON に関する一部の実用知識が必要です。注意すべき重要な項目は、JSON はキー/値ペアベースのシステムであり、ファイルを正しくレイアウトするためには構文が重要だということです。JSON の基礎についての詳細は、 オンライン イントロコースを参照してください。

どんなコーディング言語でも、ファイルを処理する次の人に失礼のないようにする必要があります。Zoom Rooms ネイティブ ルーム コントロールにおいて具体的な要件はありませんが、そうすることが推奨されます。作成者、バージョン、その他の履歴の記録を残すために、'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  
HDMIicon_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 

 

スタイルには、アイコン(上記参照)、main メソッド、可視性という 3 つの主要な修飾子があります。

アイコンは、システムを視覚化したものです。デバイスをマークしたり、ボタンに関連付けられたテキストを置き換えたりするために使用できます。 以下の例は、'example' というデバイスを定義しています。

{
"adapters": [
{
"model": "ExternalControlSystem",
"ip": "tcp://[USER_IP_ADDRESS]:[USER_PORT]",
"ports": [
{
"id": "example",
"name": "Example Device",
"methods": [
...

'example' がデバイスとして定義されると、この ID をスタイル内で使用できます。例えば、例にしたデバイスの メインアイコンを照明に設定するのは簡単です。

"styles": [
"example.icon=icon_light",
"example.main_method=power"
]

また、お気づきかもしれませんが、1 行以内にデバイスの main メソッドも定義されています。main メソッドは、デバイスのタイトルバーに定義した参照先のコマンドをプルして、次のような請求を行います。

mceclip0.png

電源コマンドを main メソッドとして定義したので、他のコマンドとは別の上のバーに表示されます。

3 番目のスタイルタイプは可視性です。 可視性により、プログラマーは関数を定義できますが、その関数をユーザー インタフェースから完全に隠すことができます。以下のように、簡単に定義できます。

"example.power.invisible=true"

"example.power.invisible=true" の形式に従うと、このコマンドをRooms ユーザーから完全に非表示にできます。  

ルール

ルールはルーム コントロールのオートメーション エンジンです。これは、自然に起こることが定義されている領域です。たとえば、ミーティングがアクティブなときにのみディスプレイをアクティブにしたい場合は、"meeting_started" と "meeting_ended"(ストック Zoom イベント)を利用して、実現できます。  

"styles": {
"meeting_started": [
"display.power.on",
"camera.power.wake"
]
),
"meeting_ended": [
"display.power.off"
]
}

この例を使用すると、システムの電力消費を削減できます。

ルールごとに 1 つのコマンドでは足りない場合、コマンドを簡単にスタックできます。各コマンドは技術的には順番に発生しますが、各イベントが同時に発生しているとみなせるほど迅速に処理します。上記の例では、ディスプレイが起動するときにカメラをアクティブにするために、"display.power.on" の下に "camera.power.wake" を追加しています。

現在、ルール内で利用可能なストック Zoom コマンドはシンプルです。

: 作業時間は、Zoom Rooms 設定ページで設定します。

また、応答フィルター用に独自のユーザーを追加することも簡単です。ルール セクション内では、以下で説明するトリガーイベントを使用して、外部入力で独自のオートメーションを実行することもできます。

"rules":{
"operation_time_started":[
"light.power.on"
],
"user_customized_event1":[
"light.power.off"
]
}

この例では、"user_customized_event1" で、制御対象の照明をオフにします。これは、ボタンからのインプットや、モーション センサーが非アクティブになったり、予約システムのようなサードパーティ製のシステムがミーティングのためにチェックインしているユーザーがいないという最新情報をルームに送信したりすることで、作動します。この機能の使用方法は、想像力許す限り考えられます。

応答フィルター

応答フィルターにより、Zoom Rooms ネイティブ ルーム コントロール機能は強力に進歩しました。応答フィルターは、定義されたデバイスから返ってくるメッセージを読み取り、一致するフレーズを瞬時にスキャンします。この句(または式)がその接続で識別されると、ルール トリガー イベント(上記)が発生します。

各応答フィルターは、次の 3 つの要素で構成されます。

ルーム コントロールを使用する

ルーム コントローラ デバイスで、ルーム コントロール アイコンをタップするだけで、これらの追加機能にアクセスできます。

ミーティングに参加していない場合は、メイン メニューにルーム コントロール アイコンが表示されます。

ミーティング中は、コントローラの右上にあるアイコンをタップすると、同じルーム コントロールが表示されます。

トラブル シューティング

トラブルシューティングは、カスタム構成の重要な部分です。ルーム コントロールはシンプルですが、柔軟性があり、必要に応じて複雑にもなります。以下のセクションは、起こりうる障害を解決するのに役立つはずです。

ルーム コントロールにおけるエラー

エラーコード説明
No_Config_ErrorJSON プロファイルが ウェブポータルに読み込まれていません
Json_Syntax_ErrorJSON プロファイルに構文エラーが含まれています
Json_Config_ErrorJSON プロファイルに構成エラーが含まれています
IP_Error指定された IP への接続中に問題が発生しました
IP_Is_Public現時点ではパブリック IP は許可されていません
DeviceID_Error1 つ以上のデバイス ID が正しく設定されていません
MethodID_Error1 つ以上のメソッドが正しく定義されていません
ParamID_Error1 つ以上のパラメータが正しく定義されていません
IP2SL_Settings_ErrorGC IP2SL でシリアルポートが正しく設定されていません
Empty_Device_ErrorJSON プロファイルで定義されていない 1 つ以上のデバイスが呼び出されています
Unknown不明なエラーが発生しました

サンプル ファイル

これらのファイルはさまざまなソースから集められており、開始点としてのみ使用してください。アプリケーションに合わせて何らかの変更が必要になる可能性があります。