Googleアナリティクス


2015.12.27

メジャメントプロトコルによるIoT事始め

RaspberryPi


モノのインターネット(IoT)への関心が高まるのと軌を一にして、Googleアナリティクスが「ウェブサイト」や「アプリ」の利用状況を記録、分析するツールから、広く「デジタルで捕捉できるものならどんなことでも」記録、分析ツールに進化しています。具体的には最新版のGoogleアナリティクスのバージョンである「ユニバーサルアナリティクス」で実装された、メジャメントプロトコル(Measurement Protocol)とよばれる手段でGoogleアナリティクスに信号を送信することで「モノ」が発したシグナルを記録します。

このブログ記事では、稚拙で原始的ではありますが、そのメジャメントプロトコルを利用した「モノのインターネット(IoT)」のGoogleアナリティクスでの測定を実践してみた一例です。

メジャメントプロトコルとは

Googleアナリティクスにデータを送信する一つの方法です。

決まった方式(=プロトコル)でGoogleアナリティクスサーバーに信号を送信することで、Googleアナリティクスの持つ強力なビジュアライズ機能、分析機能を利用できるようになります。

送信するデータはウェブやアプリだけでなく、デジタル化されていればどんなデータでも送信することが可能です。Googleアナリティクスがもともと持っている、「ページ」、「ページタイトル」、「イベント」、「カスタムディメンション」などはそのまま利用できるので、工夫次第でオフラインデータもあとから分析しやすい形でデータを蓄積することができます。

メジャメントプロトコルの公式情報はこちらで公開されています。(日本語)

 

今回やってみたこと

今回やってみたのは、以下です。

1.手のひらサイズのコンピュータ、ラズベリーパイ(Raspberry Pi)と、人感センサー(赤外線センサーとも、モーションセンサーとも、焦電センサーとも、PIRセンサーとも呼ばれるようです)を利用し、

2.プログラム側はラズベリーパイにインストールしたOS(Raspbian)上で実行できる言語の一つであるPythonを利用して、

3.書斎に人がいることを検知した場合に、メジャメントプロトコルでGoogleアナリティクスに信号を送信し、記録する

 

利用した部品と費用

今回利用した部品等は、以下の通りです。

1.Raspberry Pi 2 Model B (5400円程度)
2.無線LANドングル<Planex GW-USNANO2A>(1100円程度)
3.ブレッドボード(300円程度)
4.ジャンパー線<オス-メス>(10本で300円程度)
5.人感センサーモジュール(500円程度)

1、2はAmazonで、3~5ははいずれも秋月電子通商で購入しました。

完成した現物は以下の通りです。

RaspberryPi_PIR_Sensor_on_BreadBoard

回路

回路というほど大げさなものではありませんが、ブレッドボードとジャンパー線を利用し、ラズベリーパイと赤外線センサーを以下のように接続しました。

Vdd(プラス端子)は、5Vが出力されればラズベリーパイのどのピンに接続してもでも動くはずです。GND(マイナス端子)も同様です。GPIO(General Purpose I/O)は端子番号12番のGIPO18を利用していますが、プログラム側と合わせればどのピンでも大丈夫です。

手書きの回路図はこうなります。

circuit_outlook

イケてる!?回路図の描画ソフト Fritzing(こちらのブログ記事に相当詳しく解説があります)を利用すると、こんな感じです。赤外線センサのSB412Aがパーツとして用意されていなかったので、汎用的な赤外線センサーを利用しています。すみません(汗

Fritzing_image

上記の回路を組む上で、一つだけとまどった点は、赤外線センサーの、プラスマイナスの向きです。よく見ると基板の+、-の記号が印字してありますので、+(赤矢印の端子)をVdd側、-(黒矢印の端子)をGND側に接続します。ちなみに、真ん中の端子がセンサーが反応した時だけ電圧がかかる、信号取り出し用の端子です。

PRIsensor_SB412A

プログラム

プログラムは、Pythonで記述しました。ただ、Python自体を触ったのが2週間前で、この言語はインデントが非常に重要なことも初めて知ったくらいなので、稚拙なコードだと思います。ですが、メジャメントプロトコルを送信する仕組み自体としては多少なりとも参考になる部分があるかと思います。大したコードではありませんが、こちらのファイルのテキストはこちらからダウンロードして頂けます。

pM_py

以下がコードの解説です。

1行目: pythonを動かすエンジンへのパスの設定(と思います)

3行目:GPIO(General Puerpose I/O)を使えるようにするためのライブラリのimport。

4行目:狙ったURLにHTTPリクエストを発生させるpythonのライブラリのimport。このライブラリのおかげでコード側で指定するのは38行目だけで大丈夫になります。

5行目、6行目:時間に関するpythonのライブラリのimport。いつ「在席」のシグナルが送信されたのかをGoogleアナリティクスで記録するために利用しています。それが不要であればこのライブラリも不要です。

8行目:メジャメントプロトコルでリクエストを発生させる先のURLを定数として指定しています。

12行目:ラズベリーパイのピンを、物理的なピンの配置で指定するか、Broadcomチップ準拠で指定するかの設定。この場合、後者で指定しています。

13行目:GPIOの18番に信号を取り込むことを宣言しています。

15行目:ずっと繰り返すことを指定しています。

16行目:2秒に1回センサーの値を読み取り、読み取った回数をmeasureTimeに格納しますが、その準備として初期化しています。

17行目:センサーがOnだった場合の回数を、onTimeに格納しますが、その準備として初期化しています。

19行目:読み取り回数が30回(読み取りは2秒に1回なので、結局1分)になるまで、このブロックのロジックを動かします。

21行目:読み取り回数カウンタ

23行目、25行目:GPIO18番がHIGH(=電圧が発生している)であった場合に変数onTimeをカウントアップしています。

27行目、28行目:動作チェック用に、読み取り回数と、Onだった(=在席していた)回数を表示しています。

29行目:読み取り回数が30回となった時点で、6回以上在席シグナルがあった場合に、40行目までのロジックを動かします。

31行目、32行目:タイムスタンプを適当な形に整形してます。

34行目:変動要素(この場合、整形済のタイムスタンプ)を、cd1(=カスタムディメンションの1番)、及び、dt(=ページタイトル)にくっつけた文字列を作成しています。

36行目:8行目で定義した、不変なリクエスト先URLに、34行目で作成した文字列を連結し、最終的にリクエストを送信するパラメータ付きURLを生成しています。

38行目:HTTPリクエストをPOSTで発生させています。4行目でimportしている、requestsライブラリにより、こんなに簡単です。

40行目:動作確認用の表示

42行目:もし、30回目の読み取りで在席回数が5回以下の場合、44行目を実行します。

46行目:2秒に1回のポーリング(=センサーの値の読み取り)をこの行で指定しています。2を大きくすれば、頻度ゆるくポーリングします。

工夫した点

センサーからの出力がかなり不安定で、室内にいないのに「いる」という信号を送ったり、室内にいるのに(動きがなかった場合など)「いない」という信号を送ってしまう。という問題がありました。

それでは実用に耐えないので、在室するときは在室の信号を出力する「可能性」が高く、不在な時には不在の信号を出力する「可能性」が高いことに目をつけ、1分間に30回チェックして、6回以上在室信号があった場合にのみ、在室を示すデータの送信を行いました。

すると、かなり精度高く在室を捕捉できるようになりました。

測定結果

こちら、pythonの開発環境である、IDLEでの動作確認画面です。2秒に一回のポーリングが、measureTimeとして記録されていること。Ontimeが20回と6回以上に該当するため、「You are On at 2015-12-24 07:29:24」が記録され、(この画面では分からないですが、裏側で)メジャメントプロトコルが稼働しただろうことが分かります。

idle

こちらは、Googleアナリティクスのリアルタイムレポートです。いい感じで記録されてますね。会議室別の稼働モニタリングなら、ページのところを会議室に合わせて、/room1、/room2などと変えると良いかと思います。

リアルタイムレポート

所感

今回の実践で思ったことは、次の通りです。

1.今回実践した内容で、「オフィスで遅くまで残業している人がいないかどうか?」の確認や、「時間帯別にどの会議室がどのくらい使われているのかのモニタリング」など、実際にビジネス上でもメリットを得られる計測が可能になる感覚をつかめた。

2.ハード的にもソフト的にも比較的低コストでIoTをGoogleアナリティクスのメジャメントプロトコルで捕捉することができる

3.GoogleアナリティクスはIoTのデータ蓄積&分析プラットフォームとして、安価で優秀な基盤となる

4.実用レベルまで持ってゆくには、「電気回路」、「プログラミング」、「GAやメジャメントプロトコルの仕様」の3つの知識分野が必要。(「製品」にするには、さらに、センサやラズベリーパイを物理的に格納したり、電源供給を安定させたりする筐体や電源系の知識や組み立てスキルなども必要になりそう。)

5.ということは、「IoT分析 on Googleアナリティクス」は複数の企業のアライアンスで実現するのが現実的かもしれない。

プリンシプルは、「プログラミング」、「GAやメジャメントプロトコルの仕様」については高い知見があります。この記事をご覧の方で、実現したいIoT分析をお持ちの企業様、「電気回路」が得意な企業様などいらっしゃいましたら、ぜひこちらのお問い合わせフォームより、ご連絡ください。


木田和廣

木田和廣

株式会社プリンシプル 副社長/チーフ・エバンジェリスト。
ツールとしては、Googleアナリティクスを中心としながら「データ分析に基づくアクションの価値」や、「ビジネス上の意思決定に使えるデータの取得のベストプラクティス」を書籍、セミナー、トレーニングやお客様とのお打ち合わせによってお伝えしています。このブログもその活動の一貫です。


> の記事一覧

160506_icatch
2016.5.6

【合コン上手】は分析も上手?合コンから考える、GoogleアナリティクスでのKPIの決め方

著者:
160610
2016.6.10

良質なコンテンツって?Google アナリティクスを使ったコンテンツ評価の方法

著者:
GoogleAnalyticsAPIの調べ方
2016.2.3

Google Analytics API の調べ方

著者:
BIツールって何?
2016.3.4

BIツールって何?-Tableauによるデータのビジュアライズ

著者:
01
2016.9.15

【速報】Google アナリティクスが知見を導く! Assistant機能を使ってみた

著者: