Cisco のビデオ会議製品である Cisco Webex Room Kit および Quad Camera には People Count と呼ばれる会議室内の人数をカウントする機能があります。
これは API により HTTP POST を使って抽出あるいは送信が可能ですが、グラフ化するサンプルとして IOT デバイスの情報からグラフを生成可能な ThingSpeak を使って解説していきます。 Room Kit 側のソフトウェアは CE9.6.1 以降または Room OS (Webex 登録)が必要です。
thingspeak.com から無料でアカウントを作ることが可能ですので事前に作成しておきます。
thingspeak チャネルの作成
thingspeak.com にログインし、チャネルを作成します。
Name: Webex Room Kit People Count
Field 1: PeopleCount
それ以外:デフォルトのまま
空のグラフが表示されています。
API Key の取得
API Key から Write の権限のある API Key を取得します
POST のフォーマット
HTTP POST のフォーマットを調査します。
https://jp.mathworks.com/help/thingspeak/writedata.html
Body に api_key と fieldx の Value を json で書き込んでいけばよさそうです。
POST https://api.thingspeak.com/update.json
api_key=XXXXXXXXXXXXXXXX
field1=123
Webex Room Kit マクロエディタ
Webex Room Kit の Web UI から Integration > Macro Editor でマクロエディタを立ち上げます。
PeopleCount を非通話時にもカウントできるようにします。
xapi.config.set('RoomAnalytics PeopleCountOutOfCall', 'On');
また、HTTP POST をカウント変動のたびに投げるため、HTTPClient モードをオンにします。
xapi.config.set('HttpClient Mode', 'On');
これらはそれぞれ CLI コマンドに対応しています。
xconfiguration RoomAnalytics PeopleCountOutOfCall: On
** end
OK
xconfiguration HttpClient Mode: on
** end
OK
Web 設定 や SSH で入れてもよいのですが新規で導入することなどを考え、マクロに入れておきます。
HTTP POST のマクロ
thingsspeak に変数 count を field1 に投稿する postPeopleCount 関数を作成します。API_KEY は環境に合わせた API KEY に変更が必要です。
const url = 'https://api.thingspeak.com/update.json';
const token = "API_KEY";
function postPeopleCount(count) {
var payload = {
"api_key": token,
"field1":count
};
xapi.command('HttpClient Post',
{
Header:
['Content-Type: application/json'],
Url: url
},
JSON.stringify(payload))
.then((result) => {
console.log('HTTP Post was success:' + result.StatusCode);
}).catch((err) => {
console.log('HTTP Post was failed:' + err.message);
});
}
xcommand での Http Postは下記のフォーマットになります。
xcommand //httpclient ?
xCommand HttpClient Allow Hostname Add
Expression(r): <S: 2, 200>
xCommand HttpClient Allow Hostname Clear
xCommand HttpClient Allow Hostname List
xCommand HttpClient Allow Hostname Remove
Id(r): <0..9>
xCommand HttpClient Post
AllowInsecureHTTPS: <False, True> (default False)
Header[N]: <S: 0, 1024>
Url(r): <S: 8, 2048>
xCommand HttpClient Put
AllowInsecureHTTPS: <False, True> (default False)
Header[N]: <S: 0, 1024>
Url(r): <S: 8, 2048>
CA 信頼リスト
なお、Webex Room Kit シリーズをはじめとした CE および Room OS は、HTTP POST で利用できるCA信頼 リストがデフォルトでないため、サーバを信頼できません。AllowInsecureHTTPSを使う手もありますが、パブリックのURL ですので信頼リストをインストールします。
https://api.thingspeak.com/update.json にブラウザでアクセスします。鍵マークをクリックし、証明書からトップレベルの CA を選択した状態でファイルのエクスポートをクリックします。実際のオペレーションはブラウザにより多少異なります。Base64形式で出力する必要があります。
Webex Room Kit の Web UIから Security > Certificate Authorities を選択し、先ほどのファイルをアップロードします。
PeopleCount のマクロ
PeopleCount の変動時に先ほどの POST の関数 postPeopleCount() を走らせるマクロを作成し、マクロ起動時に呼び出す記述をします。
function listenToPeopleCount() {
xapi.status.on('RoomAnalytics PeopleCount Current', state => {
postPeopleCount(state);
});
}
listenToPeopleCount();
完成
これで完成です。 Webex Room Kit がスタンバイモードに入ったケースなど、カウントが取得できていないときは -1 を返しています。
const xapi = require('xapi');
const url = 'https://api.thingspeak.com/update.json';
const token = "##API_KEY##";
xapi.config.set('HttpClient Mode', 'On');
xapi.config.set('RoomAnalytics PeopleCountOutOfCall', 'On');
function postPeopleCount(count) {
var payload = {
"api_key": token,
"field1":count
};
xapi.command('HttpClient Post',
{
Header:
['Content-Type: application/json'],
Url: url
},
JSON.stringify(payload))
.then((result) => {
console.log('HTTP Post was success:' + result.StatusCode);
}).catch((err) => {
console.log('HTTP Post was failed:' + err.message);
});
}
function listenToPeopleCount() {
xapi.status.on('RoomAnalytics PeopleCount Current', state => {
postPeopleCount(state);
});
}
listenToPeopleCount();
参考
Cisco Webex Room シリーズコマンド リファレンス
https://www.cisco.com/c/ja_jp/support/collaboration-endpoints/spark-room-kit-series/products-command-reference-list.html#~tab-englishDocumentation
CE9.6.x - In-Room Control と Macros - USB 入力デバイス、 HTTP POST / PUT と デフォルト UI ボタンの非表示