以下に、本願の開示するイベント収集方法及び情報処理装置の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
[システム構成]
まず、本実施例に係るセンサネットワークシステムのシステム構成について説明する。図1は、実施例1に係るセンサネットワークシステムのシステム構成を示す図である。図1に示すセンサネットワークシステム1は、センサノード210によってセンシングされたセンシングデータをイベントとして収集し、収集したイベントに応じて各種のサービスを提供するものである。
図1に示すように、センサネットワークシステム1には、サーバノード110と、センサノード210X−1、210X−2及び210Y−1とが収容される。この図1の例では、X家に収容されたセンサノード210X−1及び210X−2と、Y家に収容されたセンサノード210Y−1とからサーバノード110へイベントデータが収集される場合を想定する。なお、以下では、センサノード210X−1、210X−2及び210Y−1を区別なく総称する場合に「センサノード210」と記載する場合がある。
これらセンサノード210とサーバノード110との間は、ネットワーク5を介して通信可能に接続される。かかるネットワーク5の一例としては、有線または無線を問わず、インターネット、LAN(Local Area Network)やVPN(Virtual Private Network)などの通信網が挙げられる。なお、図1の例では、センサノード210を3つ収容する場合を例示したが、少なくとも複数のセンサノードが収容されていればよく、任意の数のセンサノードを収容する場合に適用することができる。
このうち、センサノード210は、センサ付きの通信端末である。かかるセンサノード210の一態様としては、パーソナルコンピュータや周辺機器、AV機器、携帯電話機やPHS(Personal Handyphone System)の携帯端末、家電製品などの各種の機器が挙げられる。また、センサノード210に搭載されるセンサの一態様としては、温度を計測する温度センサ、湿度を計測する湿度センサ、温度および湿度を計測する温湿度センサなどの環境センサが挙げられる。なお、ここでは、センサノード210に搭載されるセンサの例として環境センサを例示したが、センサノード210にはGPS(Global Positioning System)センサ、加速度センサやジャイロセンサなどの任意のセンサを搭載できる。
サーバノード110は、センサネットワークのルートノードとして機能し、イベントに応じて各種のサービスを提供するサーバ装置である。一態様としては、サーバノード110は、センサノード210から受信したイベントを加工する加工処理を実行するモジュールを自装置よりも下位に位置するノードに配備することによってイベントを分散処理させる。かかるモジュールには、サービス提供用のアプリケーションによって実行されるサービス提供処理のトリガーとなるイベントのフィルタリング処理や集約処理が組み込まれる。
ここで、本実施例に係るサーバノード110は、センサネットワークのトポロジを取得する。さらに、本実施例に係るサーバノード110は、トポロジが変更された場合に、各ノードから当該ノードによって出力されるイベントの種別、当該ノードを含む複数のノードを集約する集約属性の属性名及び属性値を取得する。さらに、本実施例に係るサーバノード110は、モジュールが入力とする複数のイベントの種別のうち一部のイベントを出力するノードであり、かつ各ノード間でモジュールに定義された集約属性の属性名と同一の集約属性に属する属性値が同一であるノードを抽出する。さらに、本実施例に係るサーバノード110は、複数のノードが抽出された場合に、センサネットワークのトポロジを参照して、各ノードが収容される上位ノードに当該モジュールを配備する。
このため、本実施例に係るサーバノード110では、センサネットワークのトポロジが変化した場合でも、モジュールによって集約されるイベントが集合するノードのうちできるだけセンシングデータが採取される下位側のノードにモジュールを分散配備できる。したがって、本実施例に係るサーバノード110によれば、センサネットワーク上のノードにモジュールを適切に配備できる結果、センサネットワークのトラフィックを抑制できる。さらに、本実施例に係るサーバノード110では、モジュールを分散配備するので、サーバノード110に負荷が集中することも防止できる。
なお、図1の例では、サーバノード110の下位ノードとしてセンサノード210を図示しているが、後述するように、センサノード210及びサーバノード110間の通信を中継するGWノードがサーバノード110の下位ノードとして含まれる場合もある。以下では、ルートノードであるサーバノード110以外のセンサノード210や後述のGWノード310のことを「下位ノード」と総称する場合がある。
[サーバノードの構成]
続いて、本実施例に係るサーバノードの機能的構成について説明する。図2は、実施例1に係るサーバノード110の機能的構成を示すブロック図である。なお、サーバノード110は、図2に示す機能部以外にも既知のサーバ装置が有する各種の機能部、例えば各種の入力デバイスや音声出力デバイスなどの機能を有するものとする。
図2に示すように、サーバノード110は、モジュール登録部111と、モジュール記憶部111Aと、モジュール定義記憶部111Bと、トポロジ取得部112と、トポロジ記憶部112Aとを有する。さらに、サーバノード110は、イベント受信部113と、イベント記憶部114と、モジュール実行部115と、発生イベント登録部116と、発生イベント情報記憶部116Aとを有する。さらに、サーバノード110は、配備先情報記憶部117Aと、配備先決定部117と、モジュール送信部118とを有する。
モジュール登録部111は、モジュールを登録する処理部である。一態様としては、モジュール登録部111は、モジュールの開発者によって各種のサービス提供処理のトリガーとなるイベントをフィルタリングまたは集約するようにプログラミングされたモジュールのアップロードを受け付ける。すると、モジュール登録部111は、サーバノード110にアップロードされたモジュールを後述のモジュール記憶部111Aに登録する。さらに、モジュール登録部111は、アップロードされたモジュールに関する定義を開発者が使用する端末装置を介して受け付け、受け付けたモジュールに関する定義を後述のモジュール定義記憶部111Bに登録する。
モジュール記憶部111Aは、モジュールを記憶する記憶部である。一例としては、モジュール記憶部111Aは、モジュールがアップロードされた場合に、モジュール登録部111によってモジュールが登録される。他の一例としては、モジュール記憶部111Aは、センサノード210や後述のGWノード310などの下位ノードにモジュールを配備する場合に、後述のモジュール送信部118によって参照される。
一態様としては、モジュール記憶部111Aは、モジュール識別子とバイナリコードが対応付けられたデータを記憶する。ここで言う「モジュール識別子」は、モジュールを識別するための識別子を指す。例えば、C言語でプログラミングされたモジュールには関数名を付与したり、Java(登録商標)言語でプログラミングされたモジュールにはクラス名を付与したりするなど、開発に使用されたプログラム言語に応じて識別子を付与することができる。また、「バイナリコード」は、モジュール本体となるコンパイル済みのバイナリデータを指す。
図3は、モジュール記憶部111Aに記憶される情報の構成例を示す図である。図3の例では、4つのモジュール識別子「温度警告」、「平均温度計算」、「平均湿度計算」及び「不快指数計算」とそのバイナリコードとが対応付けられた例を示している。このうち、「温度警告」は、温度が所定値以上になった場合に警告を実行するモジュールのクラス名を指す。このモジュール「温度警告」が下位ノードに配備された場合には、下位ノードからサーバノード110に送信されるイベントがフィルタリングされることになる。また、「平均温度計算」は、所定期間の温度の平均を計算するモジュールのクラス名を指し、「平均湿度計算」は、所定期間の湿度の平均を計算するモジュールのクラス名を指す。さらに、「不快指数計算」は、及び平均温度と平均湿度から不快指数を計算するモジュールのクラス名を指す。これらモジュール「平均温度計算」、「平均湿度計算」及び「不快指数計算」が下位ノードに配備された場合には、下位ノードからサーバノード110に送信されるイベントが集約されることになる。
なお、図3の例では、モジュールのバイナリコードを記憶する場合を例示したが、必ずしもバイナリ形式でモジュールを記憶する必要はなく、バイナリ形式以外のデータを記憶することとしてもかまわない。例えば、モジュールがスクリプト言語である場合には、スクリプトが記述されたテキストデータを記憶することとしてもよい。また、コンパイル前のソースコードを記憶することとしてもかまわない。この場合には、モジュールがセンサノード210等の下位ノードに配備される段階でコンパイルするか、あるいは配備先の下位ノードでコンパイルさせることとすればよい。
モジュール定義記憶部111Bは、モジュールに関する定義を記憶する記憶部である。一例としては、モジュール定義記憶部111Bは、モジュールとともにモジュールに関する定義がアップロードされた場合に、モジュール登録部111によってモジュールの定義が登録される。他の一例としては、モジュール定義記憶部111Bは、モジュールの配備先を決定するために、後述の配備先決定部117によって参照される。
一態様としては、モジュール定義記憶部111Bは、モジュール識別子、入力イベント型、出力イベント型及び集約属性名が対応付けられたデータを記憶する。ここで言う「入力イベント型」とは、モジュールによって実行される処理の入力となるイベントの型を指す。また、「出力イベント型」とは、モジュールによって実行された処理の出力となるイベントの型を指す。また、「集約属性名」とは、複数のノードを集約する枠組みである集約属性の名称を指す。
図4は、モジュール定義記憶部111Bに記憶される情報の構成例を示す図である。図4に示すモジュール「温度警告」の例では、温度イベントが入力されて警告イベントが出力されることを示す。この「温度警告」の場合には、1度の処理で1つの温度イベントしか入力されないので、集約属性名は付与されていない。また、図4に示すモジュール「平均温度計算」の例では、複数の温度イベントが入力されて平均温度イベントが1つ出力されることを示す。この「平均温度計算」の場合には、1度の処理で複数の温度イベントが入力され、同一のセンサノード210によってセンシングされた温度が対象となるので、集約属性名として温度センサIDが付与されている。さらに、図4に示すモジュール「平均湿度計算」の例についても、モジュール「平均温度計算」の例と同様の理由から、集約属性名として湿度センサIDが付与されている。また、図4に示すモジュール「不快指数計算」の例では、平均温度イベント及び平均湿度イベントが入力されて不快指数イベントが出力されることを示す。この「不快指数計算」の場合には、1度の処理で平均温度イベント及び平均湿度イベントが入力され、同一の家に収容されたセンサノード210によってセンシングされた温度が対象となるので、集約属性名として家IDが付与されている。
トポロジ取得部112は、センサネットワークの接続形態、いわゆるトポロジを取得する処理部である。一態様としては、トポロジ取得部112は、センサネットワークに収容されたセンサノード210や後述のGWノード310を含む下位ノードから、当該下位ノードがどの上位ノードに接続されているかを表すノード間の接続情報を取得する。その上で、トポロジ取得部112は、下位ノードから取得したノード間の接続情報を後述のトポロジ記憶部112Aに登録する。なお、以下では、下位ノードがUPnP(Universal Plug and Play)プロトコル等を用いて上位ノードを自動認識することによって検出した接続情報を取得する場合を想定するが、サーバノード110が下位ノードとの接続状況を認識することとしてもよい。
トポロジ記憶部112Aは、センサネットワークのトポロジを記憶する記憶部である。一例としては、トポロジ記憶部112Aは、下位ノードからノード間の接続情報が取得された場合に、トポロジ取得部112によってノード間の接続情報がトポロジとして登録される。他の一例としては、トポロジ記憶部112Aは、モジュールの配備先を決定するために、後述の配備先決定部117によって参照される。
一態様としては、トポロジ記憶部112Aは、下位ノードID及び上位ノードIDが対応付けられたデータを記憶する。ここで言う「下位ノードID」は、下位ノードを識別するための識別子を指す。また、「上位ノードID」は、下位ノードに接続される上位ノードを識別するための識別子を指す。
図5は、トポロジ記憶部112Aに記憶される情報の構成例を示す図である。図5の例では、図1に示したセンサノード210X−1がX家に収容された温度センサXであり、センサノード210X−2がX家に収容された湿度センサXであり、また、センサノード210Y−1がY家に収容された温湿度センサYである場合を想定している。図5に示す例では、温度センサX、湿度センサX及び温湿度センサYの上位ノードが全てクラウドであるサーバノード110であり、センサノード210とサーバノード110の間にGWノード310などの中継ノードが介在していないことを示す。
イベント受信部113は、イベントを受信する処理部である。一態様としては、イベント受信部113は、センサノード210や後述のGWノード310などの下位ノードからイベントを受信すると、当該イベントを後述のイベント記憶部114に格納する。このとき、イベント受信部113は、下位ノードから受信したイベントを後述の発生イベント登録部116にも出力する。なお、イベント受信部113では、必ずしもセンサノード210によってセンシングされた未加工のイベントが受信されるとは限らず、下位ノードに配備されたモジュールによって加工処理が実行されることにより、加工済みのイベントが受信される場合もある。
イベント記憶部114は、イベントを記憶する記憶部である。このイベント記憶部114は、イベントの発生をトリガーとしてサービスを提供するサービス提供用のアプリケーションに参照させるために設けられる。
一例としては、イベント記憶部114は、下位ノードからイベントが受信された場合に、イベント受信部113によってイベントが登録される。他の一例としては、イベント記憶部114は、モジュールによってイベントが処理された場合に、後述のモジュール実行部115によって処理実行後のイベントが登録される。
一態様としては、イベント記憶部114は、イベント型名、イベント発生時刻及びイベント属性が対応付けられたデータを記憶する。ここで言う「イベント型」は、イベントの種類を識別するための識別子を指す。また、「イベント発生時刻」は、イベントが発生した時刻、すなわちセンサノード210によってセンシングされた時刻を指す。また、「イベント属性」とは、イベントの性質や由来を指し、例えば、イベントとして採取されるセンシングデータ又はそれが加工処理されたデータの種類、イベントが発生した発生ノードや発生ノードを含む複数のノードを集約する集約属性などの属性データの集合を指す。なお、以下では、イベント属性に含まれる各属性データが属性名と属性値のペアを含んで構成される場合を想定して説明を行う。
図6は、イベント記憶部114に記憶される情報の構成例を示す図である。図6に示す1番目のレコードは、2011年7月13日の12時にX家の温度センサXによって28度の温度が計測されたというイベントを示す。また、図6に示す2番目のレコードは、2011年7月13日の12時00分10秒にX家の湿度センサXによって50%の湿度が計測されたというイベントを示す。図6に示す3番目のレコードは、2011年7月13日の12時00分20秒にY家の温湿度センサYによって30度の温度が計測されたというイベントを示す。図6に示す4番目のレコードは、2011年7月13日の12時00分30秒にY家の温湿度センサYによって70%の湿度が計測されたというイベントを示す。
このように、イベント記憶部114に記憶されたイベントは、サービス提供用のアプリケーションによってサービス提供処理を実行するトリガーとして参照される。なお、図6の例では、センサノード210によってセンシングされた未加工のイベントを例示したが、モジュールが下位ノードに配備された場合には、モジュールによって加工処理がなされた新たなイベントも格納されることになる。
モジュール実行部115は、サーバノード110に配備されたモジュールの実行制御を行う処理部である。一態様としては、モジュール実行部115は、イベント受信部113によってイベントが受信された場合に、受信されたイベントを入力イベント型とするモジュールがサーバノード110に配備されているか否かを判定する。このとき、モジュール実行部115は、モジュールがサーバノード110に配備されている場合には、当該モジュールを実行することによってイベントの加工処理を実行する。その後、モジュール実行部115は、モジュールによって加工処理が実行されたデータを新たなイベントとしてイベント記憶部114に格納する。
発生イベント登録部116は、センサノード210やGWノード310などの下位ノードで発生した発生イベントを登録する処理部である。一態様としては、発生イベント登録部116は、イベント受信部113によってイベントが受信された場合に、受信されたイベントが発生イベントとして後述の発生イベント情報記憶部116Aに既に登録されているか否かを判定する。このとき、発生イベント登録部116は、発生イベントとして未だ登録されていない場合には、下位ノードから受信したイベントを後述の発生イベント情報記憶部116Aに登録する。
発生イベント情報記憶部116Aは、発生イベントに関する情報を記憶する記憶部である。この発生イベント情報記憶部116Aは、センサノード210またはGWノード310などの下位ノードでどのようなイベントが発生しているのかを管理するために設けられる。
一例としては、発生イベント情報記憶部116Aは、下位ノードからイベントが受信された場合に、発生イベント登録部116によって発生イベントが登録される。他の一例としては、発生イベント情報記憶部116Aは、モジュールの配備先を決定するために、後述の配備先決定部117によって参照される。
一態様としては、発生イベント情報記憶部116Aは、発生ノードID、発生イベント型及び発生イベント属性が対応付けられたデータを記憶する。ここで言う「発生ノードID」は、発生ノードを識別するための識別子を指す。また、「発生イベント型」は、発生イベントの種類を識別するための識別子を指す。また、「発生イベント属性」は、発生ノードのイベント属性を指す。
図7は、発生イベント情報記憶部116Aに記憶される情報の構成例を示す図である。図7に示す1番目のレコードは、X家の温度センサXで温度が計測されるというイベントが発生していることを示す。また、図7に示す2番目のレコードは、X家の湿度センサXで湿度が計測されるというイベントが発生していることを示す。図7に示す3番目のレコードは、Y家の温湿度センサYで温度が計測されるというイベントが発生していることを示す。図7に示す4番目のレコードは、Y家の温湿度センサYで湿度が計測されるというイベントが発生していることを示す。なお、図7の例では、発生イベントとしてセンサノード210によってセンシングされた未加工のイベントを例示したが、モジュールが下位ノードに配備された場合には、モジュールによって加工処理がなされた新たなイベントも発生イベントとして格納される。
配備先情報記憶部117Aは、モジュールの配備先に関する情報を記憶する記憶部である。一例としては、配備先情報記憶部117Aは、センサネットワークのトポロジに変化があった場合に、後述の配備先決定部117によってアクセスされる。
一態様としては、配備先情報記憶部117Aは、モジュール識別子、入力イベント型、集約属性名、発生イベント属性、発生ノードID及び配備先ノードIDが対応付けられたデータを記憶する。ここで言う「配備先ノードID」は、モジュールが配備されるセンサノード210、後述のGWノード310またはサーバノード110を識別するための識別子を指す。
図8は、配備先情報記憶部117Aに記憶される情報の構成例を示す図である。この図8の例では、センサネットワークのトポロジに変化が検出されて後述の配備先決定部117によるモジュールの配備先の決定が開始された段階のテーブル例を図示している。すなわち、図8に示すように、全カラムのうちモジュール識別子、入力イベント型及び集約属性名がモジュール定義記憶部111Bから複写された段階のテーブル例が図示されている。以降の配備先ノードIDを始めとする残りのカラムが埋められる遷移については、図9や図11などを用いて後述する。
配備先決定部117は、モジュールの配備先を決定する処理部である。一態様としては、配備先決定部117は、トポロジ記憶部112Aが更新された場合、すなわちセンサネットワークのトポロジに変化があった場合に、以下に説明する処理を実行する。
これを説明すると、配備先決定部117は、モジュール定義記憶部111Bに記憶されたモジュールの定義のうちモジュール識別子、入力イベント型及び集約属性名のカラムデータを配備先情報記憶部117Aの該当カラムに書き込む。このとき、配備先情報記憶部117Aは、図8に示すように、発生イベント属性、発生ノードID及び配備先ノードIDのカラムがブランクの状態となる。
続いて、配備先決定部117は、発生イベント情報記憶部116Aに記憶された発生ノードIDのうち、発生イベント型が未配備のモジュールの入力イベント型に含まれる発生ノードIDを抽出する。さらに、配備先決定部117は、前述のように抽出した発生ノードID間で未配備のモジュールに定義された集約属性の属性名と同一の集約属性に属する属性値が同一であるノードを抽出する。その後、配備先決定部117は、抽出結果として得られた発生ノードID及び発生ノードIDに対応付けられた発生イベント属性を配備先情報記憶部117Aに書き込む。
このとき、配備先決定部117は、発生ノードIDが配備先情報記憶部117Aに複数登録された場合には、次のような処理を実行する。すなわち、配備先登録部117は、トポロジ記憶部112Aに記憶された上位ノードIDのうち各発生ノードIDに対応するセンサノード210又は後述のGWノード310が下位ノードとして全て収容され、かつ最も下位ノード側であるノードIDを抽出する。そして、配備先決定部117は、前述のように抽出したノードIDを配備先ノードIDのカラムに登録する。
また、配備先決定部117は、発生ノードIDが配備先情報記憶部117Aに1つ登録された場合には、モジュールを配備するノードに選択の余地がないので、先に抽出結果として得られた発生ノードIDを配備先ノードIDのカラムに登録する。
このようにして配備先情報記憶部117Aに配備先ノードIDが登録されると、モジュール記憶部111Aに記憶されたモジュールが後述のモジュール送信部118によって配備先ノードIDに対応するノードへ送信される。
その後、配備先決定部117は、モジュールの配備によって下位ノードから新たに取得される発生イベントが発生イベント情報記憶部116Aに更新されるまで待機してから、未配備のモジュールがなくなるまでモジュールの配備を繰り返し実行する。
なお、発生ノードIDが配備先情報記憶部117Aに1つも登録されなかった場合には、下位ノードから通知される発生イベントが発生イベント情報記憶部116Aに登録し切れていない可能性がある。この場合には、配備先決定部117は、発生イベント情報記憶部116Aが更新されるまで待機してからモジュールの配備を繰り返し実行する。
モジュール送信部118は、センサノード210または後述のGWノード310などの下位ノードにモジュールを送信する処理部である。一態様としては、モジュール送信部118は、配備先決定部117によって配備先ノードIDが配備先情報記憶部117Aに登録されると、モジュール記憶部111Aに記憶されたモジュールを配備先ノードIDに対応するノードへ送信する。
(1)モジュール配備の具体例1
ここで、図9〜図12を用いて、モジュール配備の具体例1について説明する。図9は、図8に示した配備先情報記憶部117Aからの配備状況の遷移を示す図である。図10は、図7に示した発生イベント情報記憶部116Aからのイベント発生状況の遷移を示す図である。図11は、図9に示した配備先情報記憶部117Aからの配備状況の遷移を示す図である。図12は、図10に示した発生イベント情報記憶部116Aからのイベント発生状況の遷移を示す図である。
モジュールの配備が開始されると、図7に示した発生イベント情報記憶部116Aと図8に示した配備先情報記憶部117Aとの間で発生イベント型及び入力イベント型のカラムが配備先決定部117によって比較される。このとき、モジュール「温度警告」及びモジュール「平均温度計算」の入力イベント型と発生ノードID「温度センサX」及び発生ノードID「温湿度センサY」の発生イベント型が「温度」で一致する。また、モジュール「平均湿度計算」の入力イベント型と発生ノードID「湿度センサX」及び発生ノードID「温湿度センサY」の発生イベント型が「湿度」で一致する。
よって、モジュール「温度警告」、「平均温度計算」及び「平均湿度計算」に関し、発生ノードID「温度センサX」、「湿度センサX」及び「温湿度センサY」が配備先決定部117によって抽出される。
さらに、未配備のモジュール「温度警告」、「平均温度計算」及び「平均湿度計算」に定義された集約属性と、発生ノードID「温度センサX」、「湿度センサX」及び「温湿度センサY」に対応付けられた発生イベント属性とが配備先決定部117によって比較される。
このうち、モジュール「温度警告」は、イベントの集約処理を実行するものではなく、イベントのフィルタリング処理を実行するモジュールである。このように、イベントがフィルタリング処理される場合には、モジュールに集約属性名が定義されず、同一の下位ノードがフィルタリングの対象となるので、モジュール識別子と発生ノードIDが一対一に対応する。この場合には、発生ノードID間で未配備のモジュールに定義された集約属性の属性名と同一の集約属性に属する属性値が同一であるノードは抽出されないが、イベントが発生するノードにモジュールを配備するのが最適である。よって、例外として、発生ノードID間で未配備のモジュールに定義された集約属性名と同一の集約属性に属する属性値が同一であると見做す。したがって、図9に示すように、イベントが発生している発生ノードである「温度センサX」及び「温湿度センサY」がモジュール「温度警告」の配備先とされる。
一方、モジュール「平均温度計算」及び「平均湿度計算」は、いずれもイベントの集約処理を実行するモジュールである。このように、イベントが集約処理される場合には、モジュールに集約属性名は定義されるが、平均値の計算では同一の下位ノードが集約処理の対象となる結果、モジュール識別子と発生ノードIDが一対一に対応することになる。このため、発生ノードID間でモジュールに定義された集約属性の属性名と同一の集約属性に属する属性値が同一であるノードは抽出されるが、発生ノードIDが複数抽出されることはない。よって、図9に示すように、イベントが発生している発生ノードである「温度センサX」及び「温湿度センサY」がモジュール「平均温度計算」及び「平均湿度計算」の配備先と決定される。
このように、図9に示したモジュール「温度警告」、「平均温度計算」及び「平均湿度計算」が温度センサX、湿度センサX及び温湿度センサYの発生ノードに配備される。これによって、発生ノードによって温度イベント及び湿度イベントが加工処理された温度警告イベント、平均温度イベント及び平均湿度イベントが新たにサーバノード110へ通知される。それゆえ、図10に示す網掛け部分のように、発生イベント登録部116によって発生イベント型「温度警告」、「平均温度計算」及び「平均湿度計算」の発生イベントが発生イベント情報記憶部116Aへ登録される。
図10に示す発生イベントが発生イベント情報記憶部116Aに新たに追加されると、配備先決定部117によって次のような処理が実行される。すなわち、図10に示す発生イベント情報記憶部116Aのレコードのうち発生イベント型と、図9に示す配備先情報記憶部117Aに記憶された配備先情報のうち未配備であるモジュールの入力イベント型とのカラムが配備先決定部117によって比較される。
このとき、モジュール「不快指数計算」の入力イベント型と発生ノードID「温度センサX」及び発生ノードID「湿度センサX」の発生イベント型とが「平均温度」及び「平均湿度」で一致する。また、モジュール「不快指数計算」の入力イベント型と発生ノードID「温湿度センサY」の発生イベント型とが「平均温度」及び「平均湿度」で一致する。よって、モジュール「不快指数計算」に関し、発生ノードID「温度センサX」、「湿度センサX」及び「温湿度センサY」の3つの発生ノードが配備先決定部117によって抽出される。
ここで、発生ノードID「温度センサX」、「湿度センサX」及び「温湿度センサY」の発生ノード間で未配備のモジュールに定義された集約属性の属性名と同一の集約属性に属する属性値が同一であるノードが配備先決定部117によって抽出される。
かかるモジュール「不快指数計算」は、イベントの集約処理を実行するモジュールであるので、図4に示すように、モジュール「不快指数計算」に集約属性の属性名「家ID」が定義されている。一方、発生ノードID「温度センサX」及び「湿度センサX」の発生イベント属性には、図10に示すように、属性名「家ID」及び属性値「X家」のペアを含んで構成される集約属性の属性データが含まれる。また、発生ノードID「温湿度センサY」の発生イベント属性には、図10に示すように、属性名「家ID」及び属性値「Y家」のペアを含んで構成される集約属性の属性データが含まれる。
これら発生ノードID「温度センサX」、「湿度センサX」及び「温湿度センサY」の発生ノードは、いずれも集約属性の属性名が「家ID」である。その一方で、発生ノードID「温度センサX」及び「湿度センサX」は、集約属性の属性値「X家」であるのに対し、発生ノードID「温湿度センサY」は、集約属性の属性値「Y家」である。
したがって、モジュール「不快指数計算」は、X家用及びY家用のモジュールとして独立に配備される。すなわち、図11に示す網掛け部分のように、モジュール「不快指数計算」に発生ノードID「温度センサX」及び「湿度センサX」とその発生イベント属性とが配備先情報記憶部117Aの該当カラムに書き込まれる。さらに、図11に示す網掛け部分のように、モジュール「不快指数計算」に発生ノードID「温湿度センサY」とその発生イベント属性とが配備先情報記憶部117Aの該当カラムに書き込まれる。
このうち、X家用のモジュール「不快指数計算」は、発生ノードID「温度センサX」及び「湿度センサX」の2つの発生ノードが存在する。このため、図5に示したトポロジ記憶部112Aに記憶された上位ノードIDのうち発生ノードID「温度センサX」及び「湿度センサX」の両方の発生ノードが下位ノードとして全て収容され、かつ最も下位ノード側であるノードIDを抽出する。図5の例で言えば、発生ノードID「温度センサX」及び「湿度センサY」の発生ノードは、いずれもクラウドであるサーバノード110に接続されており、発生ノード及びサーバノード110の間に後述のGWノード310等の中継ノードが介在していない。このため、図11に示すように、X家用のモジュール「不快指数計算」の配備先ノードIDのカラムには「クラウド」が格納される。これによって、X家用のモジュール「不快指数計算」がサーバノード110に配備されることになる。
一方、Y家用のモジュール「不快指数計算」は、発生ノードID「温湿度センサY」しか存在しない。この場合には、発生ノードである「温湿度センサY」にモジュールを配備するのが最適である。このため、図11に示すように、Y家用のモジュール「不快指数計算」の配備先ノードIDのカラムには「温湿度センサY」が格納される。これによって、Y家用のモジュール「不快指数計算」がセンサノード210Y−1に配備されることになる。
このように、図11に示したX家用のモジュール「不快指数計算」がクラウドに配備されるともに、Y家用のモジュール「不快指数計算」が温湿度センサYに配備される。これによって、クラウドであるサーバノード110によって平均温度イベント及び平均湿度イベントが加工処理される。また、温湿度センサYによって平均温度イベント及び平均湿度イベントが加工処理された不快指数イベントが新たにサーバノード110へ通知される。それゆえ、図12に示す網掛け部分のように、発生ノードIDが「クラウド」となった発生イベント型「不快指数」の発生イベントが発生イベント情報記憶部116Aへ登録される。さらに、発生ノードIDが「温湿度センサY」となった発生イベント型「不快指数」の発生イベントが発生イベント情報記憶部116Aへ登録される。
(2)モジュール配備の具体例2
次に、図13〜図16を用いて、モジュール配備の具体例2について説明する。図13は、図1に示したセンサネットワークにおけるトポロジ変更の一例を示す図である。図14は、図5に示したトポロジ記憶部112Aからのトポロジの遷移を示す図である。図15は、図9に示した配備先情報記憶部117Aからの配備状況の遷移を示す図である。図16は、図10に示した発生イベント情報記憶部116Aからのイベント発生状況の遷移を示す図である。
図13に示すセンサネットワークシステム3は、図1に示したセンサネットワークシステム1と比較して、サーバノード110とセンサノード210X−1及び210X−2との間にGWノード310Xがさらに追加された点が異なる。さらに、センサネットワークシステム3は、サーバノード110とセンサノード210Y−1との間にGWノード310Yがさらに追加された点が異なる。なお、以下では、X家に収容されているGWノード310Xがホームゲートウェイであり、Y家に収容されているGWノード310Yがモバイルゲートウェイである場合を想定する。
これらセンサノード210X−1及び210X−2とGWノード310Xとの間は、ホームネットワーク5Xを介して通信可能に接続される。また、センサノード210Y−1とGWノード310Yとの間は、無線LAN(Local Area Network)5Yを介して通信可能に接続される。
このように、GWノード310X及び310Yが追加された場合には、センサネットワークのトポロジが変化する。図14の例で言えば、図5に示した例ではクラウドであるサーバノード110に直接接続されていた温度センサX及び湿度センサXがホームGW−Xを介してサーバノード110に接続される接続形態に変化している。さらに、図14の例で言えば、図5に示した例ではクラウドであるサーバノード110に直接接続されていた温湿度センサYがモバイルGW−Yを介して接続される接続形態に変化している。なお、図14の例では、図13に示したGWノード310XがX家に収容されたホームGW−Xであり、また、GWノード310YがY家に収容されたモバイルGW−Yである場合を想定している。
そして、図14に示すように、センサネットワークのトポロジが変化した場合には、図11に示す配備先情報記憶部117Aに記憶されていたモジュールの配備設定は破棄され、図8に示すモジュールの配備開始状態から改めてモジュールが再配備される。
なお、図8に示したモジュールの配備開始段階から図9に示したモジュールの配備状況に遷移するまでは、上記の(1)モジュール配備の具体例1と同様であるので、その説明は省略する。また、図7に示したイベント発生状況から図10に示すイベント発生状況に遷移するまでについても、上記の(1)モジュール配備の具体例1と同様であるので、その説明は省略する。
図10に網掛けで示した発生イベントが発生イベント情報記憶部116Aに新たに追加されると、図9に示したモジュールの配備状況が図15に示すモジュールの配備状況に更新される。ここで、図15に示すモジュールの配備状況は、図11に示したモジュールの配備状況と比べて、X家用のモジュール「不快指数計算」がクラウドではなく、ホームGW−Xに配備される点が異なる。
このように、X家用のモジュール「不快指数計算」がホームGW−Xに配備されるのは、発生ノードID「温度センサX」及び「湿度センサX」の両方の発生ノードが収容される上位ノードのうちホームGW−Xの方がクラウドよりも下位ノード側にあるからである。一方、Y家用のモジュール「不快指数計算」は、モバイルGW−Yの追加に関係なく、温湿度センサYに配備される。これは、モバイルGW−Yが追加されても、発生ノードが温湿度センサYだけであることに変化がないからである。
そして、図15に示すように、X家用のモジュール「不快指数計算」の配備先がクラウドからホームGW−Xに変わると、クラウドで加工処理されていた平均温度イベント及び平均湿度イベントがホームGW−Xによって加工処理されるようになる。これに伴って、図16に示す網掛け部分のように、発生ノードIDが「ホームGW−X」となった発生イベント型「不快指数」の発生イベントが発生イベント情報記憶部116Aへ登録される。
なお、モジュール登録部111、トポロジ取得部112、イベント受信部113、モジュール実行部115、発生イベント登録部116、配備先決定部117及びモジュール送信部118には、各種の集積回路や電子回路を採用できる。例えば、集積回路としては、ASIC(Application Specific Integrated Circuit)が挙げられる。また、電子回路としては、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などが挙げられる。
また、上記のモジュール記憶部111A、モジュール定義記憶部111B、トポロジ記憶部112A、イベント記憶部114、発生イベント情報記憶部116A及び配備先情報記憶部117Aなどの記憶部には、半導体メモリ素子や記憶装置を採用できる。例えば、半導体メモリ素子としては、VRAM(Video Random Access Memory)、RAM(Random Access Memory)、ROM(Read Only Memory)やフラッシュメモリ(flash memory)などが挙げられる。また、記憶装置としては、ハードディスク、光ディスクなどの記憶装置が挙げられる。
[センサノードの構成]
次に、本実施例に係るセンサノードの機能的構成について説明する。図17は、実施例1に係るセンサノード210の機能的構成を示すブロック図である。図17に示すセンサノード210は、センサ情報受信部211と、モジュール受信部212と、モジュール実行部213と、イベント送信部214と、トポロジ検出部215と、トポロジ送信部216とを有する。
センサ情報受信部211は、センサノード210に内蔵または付設されたセンサデバイスからセンサ情報を受信する処理部である。一態様としては、センサ情報受信部211は、センサノード210に温度センサが内蔵されている場合には、温度センサによって計測された温度を受信する。他の一態様としては、センサ情報受信部211は、センサノード210に湿度センサが内蔵されている場合には、湿度センサによって計測された湿度を受信する。なお、センサノード210に複数のセンサデバイスが内蔵されている場合には、各々のセンサデバイスに対応してセンサ情報受信部211が設けられる。
モジュール受信部212は、サーバノード110からモジュールを受信する処理部である。このモジュール受信部212によって受信されたモジュールは、モジュールの実行制御を行うモジュール実行部213に出力される。
モジュール実行部213は、センサノード210に配備されたモジュールの実行制御を行う処理部である。一態様としては、モジュール実行部213は、センサ情報受信部211によってセンサ情報が受信された場合に、受信されたセンサ情報を入力イベント型とするモジュールがセンサノード210に配備されているか否かを判定する。このとき、モジュール実行部213は、モジュールがセンサノード210に配備されている場合には、当該モジュールを実行することによってイベントの加工処理を実行する。その後、モジュール実行部213は、モジュールによって加工処理が実行されたデータを新たなイベントとしてイベント送信部214へ出力する。なお、モジュールがセンサノード210に配備されていない場合には、センサ情報を加工処理せずにそのままイベント送信部214へ出力する。
イベント送信部214は、イベントを上位ノードに送信する処理部である。一態様としては、イベント送信部214は、モジュール実行部213によって加工処理されたイベント、あるいはセンサ情報受信部211によってセンサデバイスから受信されたセンサ情報を上位ノードに送信する。このとき、イベント送信部214は、センサ情報を上位ノードに送信する場合には、発生ノードであるセンサノード210のノードID、自装置を含む複数のノードを集約する集約属性の属性名及び属性値をセンサ情報に付加する。その上で、イベント送信部は、センサ情報とともに発生ノードのノードID及び集約属性を含むイベントを上位ノードに送信する。
ここで、上記の「集約属性」の属性名及び属性値は、センサノード210の製造段階でデバイスドライバなどに組み込んでおくことができる。例えば、センサデバイスが温度センサ、湿度センサや温湿度センサである場合には、温度や湿度が計測される枠組みである「家ID」を始め、「部屋ID」や「階ID」などの集約属性をイベントに付加するようにデバイスドライバを構成しておく。その上で、センサノード210がサーバノード110との間で通信コネクションが確立された段階で、既にサービスに加入している他のセンサノード210に先だって付与されている家IDの属性値をサーバノード110から自動的に取得することもできる。なお、サーバノード110にX家またはY家の間取り等が登録されている場合には、「家ID」の他、「部屋ID」や「階ID」などの集約属性の属性値をサーバノード110から自動的に取得することもできる。
トポロジ検出部215は、センサノード210がどの上位ノードに接続されているかを表すノード間の接続情報をトポロジとして検出する処理部である。一態様としては、トポロジ検出部215は、UPnPプロトコル等を用いて、センサノード210と同一のローカルネットワーク内に存在するGWノード310を認識したり、サーバノード110からGWノード310の存在の通知を受けたりすることによってトポロジを検出する。なお、サーバノード110とのネットワーク接続の確立は、サーバノード110のURL等のアドレスを設定しておくことにより実現できる。
トポロジ送信部216は、トポロジ検出部215によって検出されたトポロジをサーバノード110に送信する処理部である。一態様としては、トポロジ送信部216は、センサノード210が接続されている上位ノードのノードIDをサーバノード110に送信する。
[GWノードの構成]
次に、本実施例に係るGWノードの機能的構成について説明する。図18は、実施例1に係るGWノード310の機能的構成を示すブロック図である。図18に示すGWノード310は、イベント受信部311と、モジュール受信部312と、モジュール実行部313と、イベント送信部314と、トポロジ検出部315と、トポロジ送信部316とを有する。
イベント受信部311は、イベントを受信する処理部である。一態様としては、イベント受信部311は、下位ノードであるセンサノード210や他のGWノード310からイベントを受信する。
モジュール受信部312は、サーバノード110からモジュールを受信する処理部である。このモジュール受信部312によって受信されたモジュールは、モジュールの実行制御を行うモジュール実行部313に出力される。
モジュール実行部313は、GWノード310に配備されたモジュールの実行制御を行う処理部である。一態様としては、モジュール実行部313は、イベント受信部311によってイベントが受信された場合に、受信されたイベントを入力イベント型とするモジュールがGWノード310に配備されているか否かを判定する。このとき、モジュール実行部313は、モジュールがGWノード310に配備されている場合には、当該モジュールを実行することによってイベントの加工処理を実行する。その後、モジュール実行部313は、モジュールによって加工処理が実行されたデータを新たなイベントとしてイベント送信部314へ出力する。なお、モジュールがGWノード310に配備されていない場合には、イベントを加工処理せずにそのままイベント送信部314へ出力する。
イベント送信部314は、イベントを上位ノードに送信する処理部である。一態様としては、イベント送信部314は、モジュール実行部313によって加工処理されたイベント、あるいはイベント受信部311によって受信されたイベントを上位ノードに送信する。
トポロジ検出部315は、GWノード310がどの上位ノードに接続されているかを表すノード間の接続情報をトポロジとして検出する処理部である。一態様としては、トポロジ検出部315は、UPnPプロトコル等を用いて、GWノード310と同一のローカルネットワーク内に存在する他のGWノード310を認識したり、サーバノード110から他のGWノード310の存在の通知を受けたりすることによってトポロジを検出する。なお、サーバノード110とのネットワーク接続の確立は、サーバノード110のURL等のアドレスを設定しておくことにより実現できる。
トポロジ送信部316は、トポロジ検出部315によって検出されたトポロジをサーバノード110に送信する処理部である。一態様としては、トポロジ送信部316は、GWノード310が接続されている上位ノードのノードIDをサーバノード110に送信する。
[処理の流れ]
次に、本実施例に係るセンサネットワークシステムの処理の流れについて説明する。なお、ここでは、センサノード210によって実行される(1)全体処理を説明した後に、サーバノード110によって実行される(2)モジュール配備処理を説明することとする。
(1)全体処理
図19は、実施例1に係るセンサノード210における全体処理の手順を示すフローチャートである。この全体処理は、センサノード210の電源がON状態である限り、繰り返し実行される。
図19に示すように、新たな上位ノードを検出した場合(ステップS101肯定)には、センサノード210は、当該上位ノードのノードIDをサーバノード110へ送信する(ステップS102)。なお、新たな上位ノードを検出しなかった場合(ステップS101否定)には、ステップS102の処理を実行せずにステップS103の処理へ移行する。
続いて、サーバノード110からモジュールを受信した場合(ステップS103肯定)には、センサノード210は、サーバノード110から受信したモジュールを配備する(ステップS104)。なお、モジュールを受信しなかった場合(ステップS103否定)には、ステップS104の処理を実行せずにステップS105の処理へ移行する。
そして、センサデバイスからセンサ情報を受信した場合(ステップS105肯定)には、センサノード210は、当該センサ情報を入力イベント型とするモジュールが配備されているか否かをさらに判定する(ステップS106)。なお、センサ情報を受信しなかった場合(ステップS105否定)には、ステップS101の処理に戻る。
このとき、モジュールが配備されている場合(ステップS106肯定)には、センサノード210は、モジュールを実行することによってイベントを加工処理する(ステップS107)。そして、センサノード210は、加工処理が実行されたイベントを上位ノードへ送信する(ステップS108)。
一方、モジュールが配備されていない場合(ステップS106否定)には、センサノード210は、センサデバイスから受信したセンサ情報に発生ノードIDや集約属性などを付加した上で上位ノードへ送信する(ステップS109)。
このようにして、センサノード210は、上記のステップS101〜ステップS109までの処理を電源がOFF状態になるまで繰り返し実行する。
なお、ここでは、センサノード210の全体処理について説明したが、中継ノードであるGWノード310によって実行される全体処理も一部を除き同様である。すなわち、GWノード310の場合には、上記のステップS105においてセンサ情報の代わりにイベントが受信される点が相違する点を除き、センサノード210と同様である。
(2)モジュール配備処理
続いて、本実施例に係るモジュール配備処理について説明する。図20は、実施例1に係るモジュール配備処理の手順を示すフローチャートである。このモジュール配備処理は、センサネットワークのトポロジが変化した場合に処理が起動される。
図20に示すように、サーバノード110は、発生イベント情報記憶部116Aが更新されるのを待機する(ステップS201)。そして、発生イベント情報記憶部116Aが更新されると、全てのモジュールの配備が終了したか否かが判断されるが(ステップS202)、ここではいずれのモジュールについても処理が終了していないので(ステップS202否定)、ステップS203の処理へ移行する。
続いて、サーバノード110は、モジュール定義記憶部111Bに記憶されたモジュールの定義のうちモジュール識別子、入力イベント型及び集約属性名のカラムデータを配備先情報記憶部117Aの該当カラムに格納する(ステップS203)。
そして、サーバノード110は、ステップS203の処理を実行後に、下記に説明するステップS204の処理を実行する。すなわち、サーバノード110は、発生イベント情報記憶部116Aに記憶された発生ノードIDのうち、発生イベント型が未配備のモジュールの入力イベント型に含まれる発生ノードIDを抽出する。さらに、サーバノード110は、前述のように抽出した発生ノードID間で未配備のモジュールに定義された集約属性の属性名と同一の集約属性に属する属性値が同一であるノードを抽出する。
その後、サーバノード110は、抽出結果として得られた発生ノードID及び発生ノードIDに対応付けられた発生イベント属性を配備先情報記憶部117Aに書き込む(ステップS205)。
このとき、発生ノードIDの数が「0」である場合(ステップS206肯定)には、下位ノードから通知される発生イベントが発生イベント情報記憶部116Aに登録し切れていない可能性がある。この場合には、ステップS202の処理に移行する。
ここで、発生ノードIDの数が複数である場合(ステップS207肯定)には、下記に説明するステップS208の処理を実行する。すなわち、サーバノード110は、トポロジ記憶部112Aに記憶された上位ノードIDのうち各発生ノードIDに対応するセンサノード210又はGWノード310が下位ノードとして全て収容され、かつ最も下位ノード側であるノードIDを抽出する。そして、サーバノード110は、前述のように抽出したノードIDを配備先ノードIDのカラムに登録する(ステップS209)。
また、発生ノードIDの数が1つである場合(ステップS207否定)には、サーバノード110は、モジュールを配備するノードに選択の余地がないので、先に抽出結果として得られた発生ノードIDを配備先ノードIDのカラムに登録する(ステップS209)。
続いて、サーバノード110は、モジュール記憶部111Aに記憶されたモジュールを配備先ノードIDに対応するノードへ送信する(ステップS210)。そして、サーバノード110は、発生イベント情報記憶部116Aが更新されるのを待機し(ステップS211)、ステップS202の処理に戻る。
その後、サーバノード110は、全てのモジュールの配備が終了するまで(ステップS202否定)、上記のステップS203〜ステップS211までの処理を繰り返し実行する。そして、全てのモジュールの配備が終了すると(ステップS202肯定)、処理を終了する。
[実施例1の効果]
上述してきたように、本実施例に係るサーバノード110では、センサネットワークのトポロジが変化した場合でも、モジュールによって集約されるイベントが集合するノードのうちできるだけセンシングデータが採取される下位側のノードにモジュールを分散配備できる。したがって、本実施例に係るサーバノード110によれば、センサネットワーク上のノードにモジュールを適切に配備できる結果、センサネットワークのトラフィックを抑制できる。さらに、本実施例に係るサーバノード110では、モジュールを分散配備するので、サーバノード110に負荷が集中することも防止できる。
また、本実施例に係るサーバノード110は、各ノードが収容される上位ノードのうち最下位のノードに当該モジュールを配備する。このため、本実施例に係るサーバノード110では、モジュールによって集約されるイベントが集合するノードの中で最もイベントの発生ノードに近いノードにモジュールを配備できる。それゆえ、本実施例に係るサーバノード110によれば、モジュールの分散配備を適切に実行できる。
さて、上記の実施例1では、イベントを加工処理するモジュールをできるだけ下位のノードに配備することによってネットワークトラフィックを抑制する例について説明したが、必ずしもモジュールが配備される下位ノードでモジュールを実行できるとは限らない。そこで、本実施例では、下位ノードがモジュールを実行可能な場合に限ってモジュールを配備する方法について説明する。
[サーバノードの構成]
図21は、実施例2に係るサーバノード120の機能的構成を示すブロック図である。図21に示すサーバノード120は、図2に示したサーバノード110に比べて、トポロジ取得部121及び配備先決定部122によって実行される処理の一部と、トポロジ記憶部121Aに記憶される情報とが相違する。なお、以下では、上記の実施例1と同様の機能を発揮する機能部については同一の符号を付し、その説明を省略することとする。
トポロジ取得部121は、図2に示したトポロジ取得部112に比べて、下位ノードがどの上位ノードに接続されているかを表すノード間の接続情報を取得する点は共通し、下位ノードがイベントの加工処理を実行可能であるか否かを示す実行可能フラグをさらに取得する点が相違する。
トポロジ記憶部121Aは、図2に示したトポロジ記憶部112Aに比べて、下位ノードID及び上位ノードIDとともに、実行可否フラグがさらに対応付けられている点が相違する。ここで、「実行可否フラグ」とは、下位ノードがモジュールを実行可能であるか否かを表すフラグを指し、例えば、「true」または「false」の真偽値が採用される。図22は、トポロジ記憶部121Aに記憶される情報の構成例を示す図である。図22の例では、温度センサX、湿度センサX及び温湿度センサYの全ての下位ノードでモジュールが実行できず、その上位ノードであるホームGW−X及びモバイルGW−Yと、ルートノードであるクラウドとでしかモジュールが実行できないことを示す。
配備先決定部122は、図2に示した配備先決定部117に比べて、発生イベント型及び入力イベント型を用いたマッチングと、集約属性の属性名及び属性値を用いたマッチングとを経て抽出されたノードであっても、実行可否フラグが「true」でない限り、モジュールの配備先として決定しない点が異なる。
(3)モジュール配備の具体例3
ここで、図23〜図25を用いて、モジュール配備の具体例3について説明する。図23及び図25は、配備先情報記憶部117Aに記憶される情報の構成例を示す図である。図24は、発生イベント情報記憶部116Aに記憶される情報の構成例を示す図である。
図23に示すように、温度センサX、湿度センサX及び温湿度センサYの下位ノードには、実行可否フラグ「false」が設定されているので、モジュールは配備されない。その代わりに、モジュール「温度警告」、「平均温度計算」及び「平均湿度計算」がホームGW−X及びモバイルGW−Yに配備される。これによって、中継ノードであるホームGW−X及びモバイルGW−Yによって温度イベント及び湿度イベントが加工処理された温度警告イベント、平均温度イベント及び平均湿度イベントが新たにサーバノード120へ通知される。それゆえ、図24に示す網掛け部分のように、発生イベント登録部116によって発生イベント型「温度警告」、「平均温度」及び「平均湿度」の発生イベントが発生イベント情報記憶部116Aへ登録される。
図24に網掛けで示した発生イベントが発生イベント情報記憶部116Aに新たに追加されると、図23に示したモジュールの配備状況が図25に示すモジュールの配備状況に更新される。ここで、図25に示すモジュールの配備状況は、図15に示したモジュールの配備状況と比べて、Y家用のモジュール「不快指数計算」が温湿度センサYではなく、モバイルGW−Yに配備されている点が異なる。このように、Y家用のモジュール「不快指数計算」がモバイルGW−Yに配備されるのも、温湿度センサYではモジュールが実行できず、温湿度センサYの実行可否フラグに「false」が設定されているからである。
[処理の流れ]
次に、本実施例に係るセンサネットワークシステムの処理の流れについて説明する。なお、ここでは、センサノード210によって実行される(1)全体処理を説明した後に、サーバノード120によって実行される(2)モジュール配備処理を説明することとする。
(1)全体処理
図26は、実施例2に係るセンサノード210における全体処理の手順を示すフローチャートである。この全体処理は、センサノード210の電源がON状態である限り、繰り返し実行される。なお、図26に示すセンサノード210における全体処理は、図19に示したセンサノード210における全体処理に比べて、ステップS102の代わりにステップS301が実行される点が異なる。
図26に示すように、新たな上位ノードを検出した場合(ステップS101肯定)には、センサノード210は、当該上位ノードのノードIDをサーバノード120へ送信するとともに、イベントの加工処理に関する実行可否フラグを送信する(ステップS301)。なお、新たな上位ノードを検出しなかった場合(ステップS101否定)には、ステップS301の処理を実行せずにステップS103の処理へ移行する。
続いて、サーバノード120からモジュールを受信した場合(ステップS103肯定)には、センサノード210は、サーバノード120から受信したモジュールを配備する(ステップS104)。なお、モジュールを受信しなかった場合(ステップS103否定)には、ステップS104の処理を実行せずにステップS105の処理へ移行する。
そして、センサデバイスからセンサ情報を受信した場合(ステップS105肯定)には、センサノード210は、当該センサ情報を入力イベント型とするモジュールが配備されているか否かをさらに判定する(ステップS106)。なお、センサ情報を受信しなかった場合(ステップS105否定)には、ステップS101の処理に戻る。
このとき、モジュールが配備されている場合(ステップS106肯定)には、センサノード210は、モジュールを実行することによってイベントを加工処理する(ステップS107)。そして、センサノード210は、加工処理が実行されたイベントを上位ノードへ送信する(ステップS108)。
一方、モジュールが配備されていない場合(ステップS106否定)には、センサノード210は、センサデバイスから受信したセンサ情報に発生ノードIDや集約属性などを付加した上で上位ノードへ送信する(ステップS109)。
このように、ステップS108またはステップS109の処理が実行された後は、上記のステップS101に戻り、センサノード210の電源がOFF状態になるまで、ステップS101〜ステップS109までの処理を繰り返し実行する。
なお、ここでは、センサノード210の全体処理について説明したが、中継ノードであるGWノード310によって実行される全体処理も一部を除き同様である。すなわち、GWノード310の場合には、上記のステップS105においてセンサ情報の代わりにイベントが受信される点が相違する点を除き、センサノード210と同様である。
(2)モジュール配備処理
続いて、本実施例に係るモジュール配備処理について説明する。図27は、実施例2に係るモジュール配備処理の手順を示すフローチャートである。このモジュール配備処理は、センサネットワークのトポロジが変化した場合に処理が起動される。なお、図27に示すモジュール配備処理は、図20に示したモジュール配備処理に比べて、ステップS401及びステップS402がさらに実行される点が異なる。
図27に示すように、サーバノード120は、発生イベント情報記憶部116Aが更新されるのを待機する(ステップS201)。そして、発生イベント情報記憶部116Aが更新されると、全てのモジュールの配備が終了したか否かが判断されるが(ステップS202)、ここではいずれのモジュールについても処理が終了していないので(ステップS202否定)、ステップS203の処理へ移行する。
続いて、サーバノード120は、モジュール定義記憶部111Bに記憶されたモジュールの定義のうちモジュール識別子、入力イベント型及び集約属性名のカラムデータを配備先情報記憶部117Aの該当カラムに格納する(ステップS203)。
そして、サーバノード120は、ステップS203の処理を実行後に、下記に説明するステップS204の処理を実行する。すなわち、サーバノード120は、発生イベント情報記憶部116Aに記憶された発生ノードIDのうち、発生イベント型が未配備のモジュールの入力イベント型に含まれる発生ノードIDを抽出する。さらに、サーバノード120は、前述のように抽出した発生ノードID間で未配備のモジュールに定義された集約属性の属性名と同一の集約属性に属する属性値が同一であるノードを抽出する。
その後、サーバノード120は、抽出結果として得られた発生ノードID及び発生ノードIDに対応付けられた発生イベント属性を配備先情報記憶部117Aに書き込む(ステップS205)。
このとき、発生ノードIDの数が「0」である場合(ステップS206肯定)には、下位ノードから通知される発生イベントが発生イベント情報記憶部116Aに登録し切れていない可能性がある。この場合には、ステップS202の処理に移行する。
ここで、発生ノードIDの数が複数である場合(ステップS207肯定)には、下記に説明するステップS208の処理を実行する。すなわち、サーバノード120は、トポロジ記憶部121Aに記憶された上位ノードIDのうち各発生ノードIDに対応するセンサノード210又はGWノード310が下位ノードとして全て収容され、かつ最も下位ノード側であるノードIDを抽出する。
また、発生ノードIDの数が1つである場合(ステップS207否定)には、サーバノード120は、モジュールの配備先ノードの候補として、抽出結果として得られた発生ノードIDを抽出する。
その後、サーバノード120は、前述のように抽出した配備先の候補となるノードの実行可否フラグが「true」または「false」のいずれであるかによってイベントの加工処理が実行可能であるか否かを判定する(ステップS401)。
このとき、配備先の候補となるノードでイベントの加工処理が実行不可能である場合(ステップS401否定)には、サーバノード120は、当該候補の上位ノードを新たな配備先の候補に変更する(ステップS402)。
一方、配備先の候補となるノードでイベントの加工処理が実行可能である場合(ステップS401肯定)には、サーバノード120は、配備先の候補として抽出されていたノードIDを配備先ノードIDのカラムに登録する(ステップS209)。
続いて、サーバノード120は、モジュール記憶部111Aに記憶されたモジュールを配備先ノードIDに対応するノードへ送信する(ステップS210)。そして、サーバノード120は、発生イベント情報記憶部116Aが更新されるのを待機し(ステップS211)、ステップS202の処理に戻る。
その後、サーバノード120は、全てのモジュールの配備が終了するまで(ステップS202否定)、上記のステップS203〜ステップS211までの処理を繰り返し実行する。そして、全てのモジュールの配備が終了すると(ステップS202肯定)、処理を終了する。
[実施例2の効果]
上述してきたように、本実施例に係るサーバノード120は、ノードから当該ノードがモジュールを実行可能であるか否かを表す実行可否情報を取得する。さらに、本実施例に係るサーバノード120は、各ノードが収容される上位ノードのうち、モジュールの実行が可能である旨を表す実行可否情報が取得された上位ノードにモジュールを配備する。このため、本実施例に係るセンサノード120は、モジュールを実行できないノードにモジュールが配備されるのを抑制できるので、ネットワークトラフィックを抑制しつつ、モジュールの分散配備をより適切に実行することができる。
さて、本実施例では、モジュールの配備中は下位ノードにイベントを蓄積させておき、モジュールの配備が終了した段階で蓄積させていたイベントを送信させることによってモジュールの配備中に発生するイベントが破棄されるのを防止する方法について説明する。
[サーバノードの構成]
図28は、実施例3に係るサーバノード130の機能的構成を示すブロック図である。なお、以下では、上記の実施例1と同様の機能を発揮する機能部については同一の符号を付し、その説明を省略することとする。
図28に示すサーバノード130は、図2に示したサーバノード110に比べて、動作モード送信部131をさらに有する点が相違する。動作モード送信部131は、サーバノード130の動作モードを送信する処理部である。一態様としては、動作モード送信部131は、トポロジ記憶部112Aが更新された場合に、モジュールを配備するモジュール配備モードで動作中である旨を示す動作モード情報を下位ノードに送信する。その後、動作モード送信部131は、全てのモジュールの配備が終了した場合に、イベントを収集または処理するイベント収集モードで動作中である旨を示す動作モード情報を下位ノードに送信する。
[センサノードの構成]
図29は、実施例3に係るセンサノード230の機能的構成を示すブロック図である。図29に示すセンサノード230は、図17に示したセンサノード210に比べて、動作モード受信部231と、イベント記憶部232とをさらに有する点が相違する。
このうち、動作モード受信部231は、動作モード送信部131から動作モード情報を受信する処理部である。一態様としては、動作モード受信部231は、動作モード情報としてモジュール配備モードが通知された場合に、図示しない内部メモリで管理しているサーバノード130の動作モードを「モジュール配備モード」に更新する。その上で、動作モード受信部231は、センサデバイスから受信したセンサ情報をイベント記憶部232へ蓄積するようにセンサ情報受信部211へ指示する。さらに、動作モード受信部231は、センサ情報が加工処理されたイベントをイベント記憶部232へ蓄積するようにモジュール実行部213へ指示する。その後、動作モード受信部231は、動作モード情報としてイベント収集モードが通知された場合に、図示しない内部メモリで管理しているサーバノード130の動作モードを「イベント収集モード」に更新する。その上で、動作モード受信部231は、イベント記憶部232に記憶されたイベントをサーバノード130へ送信するようにイベント送信部214へ指示する。
イベント記憶部232は、イベントを記憶する記憶部である。このイベント記憶部232は、サーバノード130がモジュール配備モードである場合に、センサ情報受信部211によって受信されたセンサ情報やモジュール実行部213によって加工処理が実行されたイベントを一時的に蓄積するために使用される。なお、イベント記憶部232のスキーマは、図2に示したイベント記憶部114と同様である。
[GWノードの構成]
図30は、実施例3に係るGWノード330の機能的構成を示すブロック図である。図30に示すGWノード330は、図18に示したGWノード310に比べて、動作モード受信部331と、イベント記憶部332とをさらに有する点が相違する。
このうち、動作モード受信部331は、動作モード送信部131から動作モード情報を受信する処理部である。一態様としては、動作モード受信部331は、動作モード情報としてモジュール配備モードが通知された場合に、図示しない内部メモリで管理しているサーバノード130の動作モードを「モジュール配備モード」に更新する。その上で、動作モード受信部331は、下位ノードから受信したイベントをイベント記憶部332へ蓄積するようにイベント受信部311へ指示する。さらに、動作モード受信部331は、イベントが加工処理された新たなイベントをイベント記憶部332へ蓄積するようにモジュール実行部313へ指示する。その後、動作モード受信部331は、動作モード情報としてイベント収集モードが通知された場合に、図示しない内部メモリで管理しているサーバノード130の動作モードを「イベント収集モード」に更新する。その上で、動作モード受信部331は、イベント記憶部332に記憶されたイベントをサーバノード130へ送信するようにイベント送信部314へ指示する。
イベント記憶部332は、イベントを記憶する記憶部である。このイベント記憶部332は、サーバノード130がモジュール配備モードである場合に、イベント受信部311によって受信されたイベントやモジュール実行部313によって加工処理が実行されたイベントを一時的に蓄積するために使用される。なお、イベント記憶部332のスキーマは、図2に示したイベント記憶部114と同様である。
[処理の流れ]
次に、本実施例に係るセンサネットワークシステムの処理の流れについて説明する。なお、ここでは、センサノード230によって実行される(1)全体処理を説明した後に、サーバノード130によって実行される(2)モジュール配備処理を説明することとする。
(1)全体処理
図31は、実施例3に係るセンサノード230における全体処理の手順を示すフローチャートである。この全体処理は、センサノード230の電源がON状態である限り、繰り返し実行される。
図31に示すように、動作モード情報を受信した場合(ステップS501肯定)には、センサノード230は、図示しない内部メモリで管理しているサーバノード130の動作モードを「モジュール配備モード」に更新する(ステップS502)。なお、動作モード情報を受信していない場合(ステップS501否定)には、ステップS506へ移行する。
続いて、動作モードがイベント収集モードである場合(ステップS503肯定)には、センサノード230は、イベント記憶部232に蓄積中のイベントをサーバノード130へ送信する(ステップS504)。そして、センサノード230は、サーバノード130へ送信し終わったイベントをイベント記憶部232から削除する(ステップS505)。なお、動作モードがイベント収集モードではない場合(ステップS503否定)には、ステップS506へ移行する。
その後、新たな上位ノードを検出した場合(ステップS506肯定)には、センサノード230は、当該上位ノードのノードIDをサーバノード130へ送信する(ステップS507)。なお、新たな上位ノードを検出しなかった場合(ステップS506否定)には、ステップS507の処理を実行せずにステップS508の処理へ移行する。
続いて、サーバノード130からモジュールを受信した場合(ステップS508肯定)には、センサノード230は、サーバノード130から受信したモジュールを配備する(ステップS509)。なお、モジュールを受信しなかった場合(ステップS508否定)には、ステップS509の処理を実行せずにステップS510の処理へ移行する。
そして、センサデバイスからセンサ情報を受信した場合(ステップS510肯定)には、センサノード230は、当該センサ情報を入力イベント型とするモジュールが配備されているか否かをさらに判定する(ステップS511)。なお、センサ情報を受信しなかった場合(ステップS510否定)には、ステップS501の処理に戻る。
このとき、モジュールが配備されている場合(ステップS511肯定)には、センサノード230は、モジュールを実行することによってイベントを加工処理する(ステップS512)。そして、センサノード230は、加工処理が実行されたイベントを上位ノードへ送信する(ステップS513)。
一方、モジュールが配備されていない場合(ステップS511否定)には、センサノード230は、センサデバイスから受信したセンサ情報に発生ノードIDや集約属性などを付加した上で上位ノードへ送信する(ステップS514)。
そして、動作モードがモジュール配備モードである場合(ステップS515肯定)には、センサノード230は、イベントをイベント記憶部232へ蓄積し(ステップS516)、ステップS501に戻って以降の処理を繰り返し実行する。なお、動作モードがモジュール配備モードではない場合(ステップS515否定)には、ステップS501に戻って以降の処理を繰り返し実行する。
なお、ここでは、センサノード230の全体処理について説明したが、中継ノードであるGWノード330によって実行される全体処理も一部を除き同様である。すなわち、GWノード330の場合には、上記のステップS510においてセンサ情報の代わりにイベントが受信される点が相違する点を除き、センサノード230と同様である。
(2)モジュール配備処理
続いて、本実施例に係るモジュール配備処理について説明する。図32は、実施例3に係るモジュール配備処理の手順を示すフローチャートである。このモジュール配備処理は、センサネットワークのトポロジが変化した場合に処理が起動される。なお、図32に示すモジュール配備処理は、図20に示したモジュール配備処理に比べて、ステップS601及びステップS602がさらに実行される点が異なる。
図32に示すように、サーバノード130は、モジュールを配備するモジュール配備モードで動作中である旨を示す動作モード情報を下位ノードへ送信する(ステップS601)。続いて、サーバノード130は、発生イベント情報記憶部116Aが更新されるのを待機する(ステップS201)。
そして、発生イベント情報記憶部116Aが更新されると、全てのモジュールの配備が終了したか否かが判断されるが(ステップS202)、ここではいずれのモジュールについても処理が終了していないので(ステップS202否定)、ステップS203の処理へ移行する。
続いて、サーバノード130は、モジュール定義記憶部111Bに記憶されたモジュールの定義のうちモジュール識別子、入力イベント型及び集約属性名のカラムデータを配備先情報記憶部117Aの該当カラムに格納する(ステップS203)。
そして、サーバノード130は、ステップS203の処理を実行後に、下記に説明するステップS204の処理を実行する。すなわち、サーバノード130は、発生イベント情報記憶部116Aに記憶された発生ノードIDのうち、発生イベント型が未配備のモジュールの入力イベント型に含まれる発生ノードIDを抽出する。さらに、サーバノード130は、前述のように抽出した発生ノードID間で未配備のモジュールに定義された集約属性の属性名と同一の集約属性に属する属性値が同一であるノードを抽出する。
その後、サーバノード130は、抽出結果として得られた発生ノードID及び発生ノードIDに対応付けられた発生イベント属性を配備先情報記憶部117Aに書き込む(ステップS205)。
このとき、発生ノードIDの数が「0」である場合(ステップS206肯定)には、下位ノードから通知される発生イベントが発生イベント情報記憶部116Aに登録し切れていない可能性がある。この場合には、ステップS202の処理に移行する。
ここで、発生ノードIDの数が複数である場合(ステップS207肯定)には、下記に説明するステップS208の処理を実行する。すなわち、サーバノード130は、トポロジ記憶部121Aに記憶された上位ノードIDのうち各発生ノードIDに対応するセンサノード230又はGWノード330が下位ノードとして全て収容され、かつ最も下位ノード側であるノードIDを抽出する。
その後、サーバノード130は、配備先の候補として抽出されていたノードIDを配備先ノードIDのカラムに登録する(ステップS209)。
また、発生ノードIDの数が1つである場合(ステップS207否定)には、サーバノード130は、モジュールを配備するノードに選択の余地がないので、先に抽出結果として得られた発生ノードIDを配備先ノードIDのカラムに登録する(ステップS209)。
続いて、サーバノード130は、モジュール記憶部111Aに記憶されたモジュールを配備先ノードIDに対応するノードへ送信する(ステップS210)。そして、サーバノード130は、発生イベント情報記憶部116Aが更新されるのを待機し(ステップS211)、ステップS202の処理に戻る。
その後、サーバノード130は、全てのモジュールの配備が終了するまで(ステップS202否定)、上記のステップS203〜ステップS211までの処理を繰り返し実行する。
そして、全てのモジュールの配備が終了すると(ステップS202肯定)、サーバノード130は、イベントを収集または処理するイベント処理モードで動作中である旨を示す動作モード情報を下位ノードに送信し(ステップS602)、処理を終了する。
[実施例3の効果]
上述してきたように、本実施例に係るサーバノード130は、モジュールの配備が終了した場合に、ノードに蓄積させていたイベントを出力させる指示をノードへ送信する。これによって、本実施例に係るサーバノード130では、モジュールの配備中に発生するイベントが破棄される事態を防止できる。
さて、上記の実施例1では、イベントを加工処理するモジュールをできるだけ下位のノードに配備させる場合について説明したが、必ずしもモジュールが配備される下位ノードでモジュールを実行させるのが最適であるとは限らない。そこで、本実施例では、下位ノードのノード負荷およびネットワークコストに応じてモジュールを最適に分散配備する方法について説明する。
[サーバノードの構成]
図33は、実施例4に係るサーバノード140の機能的構成を示すブロック図である。図33に示すサーバノード140は、図2に示したサーバノード110に比べて、トポロジ取得部141及び配備先決定部142によって実行される処理の一部と、トポロジ記憶部141Aに記憶される情報とが相違する。なお、以下では、上記の実施例1と同様の機能を発揮する機能部については同一の符号を付し、その説明を省略することとする。
トポロジ取得部141は、図2に示したトポロジ取得部112に比べて、下位ノードがどの上位ノードに接続されているかを表すノード間の接続情報を取得する点は共通し、下位ノードのノード負荷およびネットワークコストをさらに取得する点が相違する。
トポロジ記憶部141Aは、図2に示したトポロジ記憶部112Aに比べて、下位ノードID及び上位ノードIDとともに、ノード負荷、ネットワークコストがさらに対応付けられている点が相違する。ここで言う「ノード負荷」とは、下位ノードの負荷を表す指標値を指し、例えば、CPU使用率やメモリ使用量などが採用される。また、「ネットワークコスト」は、下位ノード及び上位ノードの間におけるネットワーク通信にかかるコストを表す指標値を指す。例えば、ネットワークコストには、携帯電話網等におけるパケット従量制料金のようにネットワーク通信量に応じてコストが増加する場合であれば、通信量単位のコストを採用できる。
図34は、トポロジ記憶部141Aに記憶される情報の構成例を示す図である。図34の例では、温度センサX、湿度センサX及び温湿度センサYの下位ノードが上位ノードよりも負荷が高いことを示す。さらに、図34の例では、モバイルGW−Y及びクラウドの区間以外はネットワークコストがかかる一方で、それ以外のノード間ではネットワークコストがかからないことを示す。
配備先決定部142は、発生イベント型及び入力イベント型を用いたマッチングと、集約属性の属性名及び属性値を用いたマッチングと経て抽出されたノードであっても、必ずしも当該ノードをモジュールの配備先にするとは限らない。一態様としては、配備先決定部142は、上記のマッチングを経て抽出されたノードとその上位ノードとの間におけるネットワークコストの有無を判定する。このとき、配備先決定部142は、上位ノードとの間でネットワークコストが発生する場合には、上記のマッチングを経て抽出されたノードにモジュールを配備する。一方、配備先決定部142は、上位ノードとの間でネットワークコストが発生しない場合には、上記のマッチングを経て抽出されたノードのノード負荷と上位ノードのノード負荷を比較し、ノード負荷が低いノードにモジュールを配備する。なお、ノード負荷およびネットワークコストの片方だけを条件に使用することもできる。
(4)モジュール配備の具体例4
ここで、図35〜図37を用いて、モジュール配備の具体例4について説明する。図35及び図37は、配備先情報記憶部117Aに記憶される情報の構成例を示す図である。図36は、発生イベント情報記憶部116Aに記憶される情報の構成例を示す図である。
図34に示したように、温度センサX及び湿度センサXとホームGW−Xとのノード間でネットワークコストがかからず、温度センサX及び湿度センサXのノード負荷はホームGW−Xのノード負荷よりも高い。また、温湿度センサYとモバイルGW−Yとのノード間でもネットワークコストはかからず、温湿度センサYのノード負荷はモバイルGW−Yのノード負荷よりも高い。したがって、温度センサX、湿度センサX及び温湿度センサYには、モジュールは配備されない。一方、モバイルGW−Yのノード負荷は、クラウドのノード負荷よりも高いが、モバイルGW−Y及びクラウド間ではネットワークコストがかかるので、クラウドにはモジュールは配備されない。したがって、図35に示すように、モジュール「温度警告」、「平均温度計算」及び「平均湿度計算」がホームGW−X及びモバイルGW−Yに配備される。
これによって、中継ノードであるホームGW−X及びモバイルGW−Yによって温度イベント及び湿度イベントが加工処理された温度警告イベント、平均温度イベント及び平均湿度イベントが新たにサーバノード140へ通知される。それゆえ、図36に示す網掛け部分のように、発生イベント登録部116によって発生イベント型「温度警告」、「平均温度」及び「平均湿度」の発生イベントが発生イベント情報記憶部116Aへ登録される。図36に網掛けで示した発生イベントが発生イベント情報記憶部116Aに新たに追加されると、図35に示したモジュールの配備状況が図37に示すモジュールの配備状況に更新される。図37に示すように、発生イベント型「温度警告」、「平均温度」及び「平均湿度」の発生イベントが追加されても、上述したノード負荷とネットワークコストの関係により、ホームGW−X及びモバイルGW−Yにモジュール「不快指数計算」が配備される。
[処理の流れ]
次に、本実施例に係るセンサネットワークシステムの処理の流れについて説明する。なお、ここでは、センサノード240によって実行される(1)全体処理を説明した後に、サーバノード140によって実行される(2)モジュール配備処理を説明することとする。
(1)全体処理
図38は、実施例4に係るセンサノード240における全体処理の手順を示すフローチャートである。この全体処理は、センサノード240の電源がON状態である限り、繰り返し実行される。なお、図38に示すセンサノード240における全体処理は、図19に示したセンサノード210における全体処理に比べて、ステップS102の代わりにステップS701の処理が実行される点が異なる。
図38に示すように、新たな上位ノードを検出した場合(ステップS101肯定)には、センサノード240は、次のような処理を実行する。すなわち、センサノード240は、当該上位ノードのノードIDをサーバノード140へ送信するとともに、自ノードのノード負荷及び上位ノード間のネットワークコストを送信する(ステップS701)。なお、新たな上位ノードを検出しなかった場合(ステップS101否定)には、ステップS701の処理を実行せずにステップS103の処理へ移行する。
続いて、サーバノード140からモジュールを受信した場合(ステップS103肯定)には、センサノード240は、サーバノード140から受信したモジュールを配備する(ステップS104)。なお、モジュールを受信しなかった場合(ステップS103否定)には、ステップS104の処理を実行せずにステップS105の処理へ移行する。
そして、センサデバイスからセンサ情報を受信した場合(ステップS105肯定)には、センサノード240は、当該センサ情報を入力イベント型とするモジュールが配備されているか否かをさらに判定する(ステップS106)。なお、センサ情報を受信しなかった場合(ステップS105否定)には、ステップS101の処理に戻る。
このとき、モジュールが配備されている場合(ステップS106肯定)には、センサノード240は、モジュールを実行することによってイベントを加工処理する(ステップS107)。そして、センサノード240は、加工処理が実行されたイベントを上位ノードへ送信する(ステップS108)。
一方、モジュールが配備されていない場合(ステップS106否定)には、センサノード240は、センサデバイスから受信したセンサ情報に発生ノードIDや集約属性などを付加した上で上位ノードへ送信する(ステップS109)。
なお、ここでは、センサノード240の全体処理について説明したが、中継ノードであるGWノード340によって実行される全体処理も一部を除き同様である。すなわち、GWノード340の場合には、上記のステップS105においてセンサ情報の代わりにイベントが受信される点が相違する点を除き、センサノード240と同様である。
(2)モジュール配備処理
続いて、本実施例に係るモジュール配備処理について説明する。図39は、実施例4に係るモジュール配備処理の手順を示すフローチャートである。このモジュール配備処理は、センサネットワークのトポロジが変化した場合に処理が起動される。なお、図39に示すモジュール配備処理は、図20に示したモジュール配備処理に比べて、ステップS801〜ステップS803の処理がさらに実行される点が異なる。
図39に示すように、サーバノード140は、発生イベント情報記憶部116Aが更新されるのを待機する(ステップS201)。そして、発生イベント情報記憶部116Aが更新されると、全てのモジュールの配備が終了したか否かが判断されるが(ステップS202)、ここではいずれのモジュールについても処理が終了していないので(ステップS202否定)、ステップS203の処理へ移行する。
続いて、サーバノード140は、モジュール定義記憶部111Bに記憶されたモジュールの定義のうちモジュール識別子、入力イベント型及び集約属性名のカラムデータを配備先情報記憶部117Aの該当カラムに格納する(ステップS203)。
そして、サーバノード140は、ステップS203の処理を実行後に、下記に説明するステップS204の処理を実行する。すなわち、サーバノード140は、発生イベント情報記憶部116Aに記憶された発生ノードIDのうち、発生イベント型が未配備のモジュールの入力イベント型に含まれる発生ノードIDを抽出する。さらに、サーバノード140は、前述のように抽出した発生ノードID間で未配備のモジュールに定義された集約属性の属性名と同一の集約属性に属する属性値が同一であるノードを抽出する。
その後、サーバノード140は、抽出結果として得られた発生ノードID及び発生ノードIDに対応付けられた発生イベント属性を配備先情報記憶部117Aに書き込む(ステップS205)。
このとき、発生ノードIDの数が「0」である場合(ステップS206肯定)には、下位ノードから通知される発生イベントが発生イベント情報記憶部116Aに登録し切れていない可能性がある。この場合には、ステップS202の処理に移行する。
ここで、発生ノードIDの数が複数である場合(ステップS207肯定)には、サーバノード140は、下記に説明するステップS208の処理を実行する。すなわち、サーバノード140は、トポロジ記憶部121Aに記憶された上位ノードIDのうち各発生ノードIDに対応するセンサノード240又はGWノード340が下位ノードとして全て収容され、かつ最も下位ノード側であるノードIDを抽出する。
また、発生ノードIDの数が1つである場合(ステップS207否定)には、サーバノード140は、モジュールを配備するノードの候補として、抽出結果として得られた発生ノードIDを抽出する。
続いて、サーバノード140は、前述のように抽出した配備先の候補となるノードとその上位ノードとの間でネットワークコストがかかるか否かを判定する(ステップS801)。このとき、配備先の候補となるノードとその上位ノードとの間でネットワークコストがかからない場合(ステップS801肯定)には、サーバノード140は、配備先の候補となるノードのノード負荷が上位ノードのノード負荷よりも大きいか否かをさらに判定する(ステップS802)。
ここで、配備先の候補となるノードのノード負荷が上位ノードのノード負荷よりも大きい場合(ステップS802肯定)には、サーバノード140は、当該候補の上位ノードを新たな配備先の候補に変更し(ステップS803)、ステップS801の処理に戻る。
一方、配備先の候補となるノードとその上位ノードとの間でネットワークコストがかかる場合(ステップS801否定)には、サーバノード140は、配備先の候補として抽出されていたノードIDを配備先ノードIDのカラムに登録する(ステップS209)。また、配備先の候補となるノードのノード負荷が上位ノードのノード負荷以下である場合(ステップS802否定)にも、上記のステップS209の処理が実行される。
続いて、サーバノード140は、モジュール記憶部111Aに記憶されたモジュールを配備先ノードIDに対応するノードへ送信する(ステップS210)。そして、サーバノード140は、発生イベント情報記憶部116Aが更新されるのを待機し(ステップS211)、ステップS202の処理に戻る。
その後、サーバノード140は、全てのモジュールの配備が終了するまで(ステップS202否定)、上記のステップS203〜ステップS211までの処理を繰り返し実行する。そして、全てのモジュールの配備が終了すると(ステップS202肯定)、処理を終了する。
[実施例4の効果]
上述してきたように、本実施例に係るサーバノード140は、ノードからノードの負荷およびノードと該ノードの上位ノードとの間におけるネットワークコストを取得する。さらに、本実施例に係るサーバノード140は、各ノードが収容される上位ノードのうち、負荷及びネットワークコストが所定の条件を満たす上位ノードにモジュールを配備する。このため、本実施例に係るサーバノード140では、ネットワークトラフィックだけでなく、装置負荷およびネットワークコストの観点からモジュールを配備することができる。したがって、本実施例に係るサーバノード140によれば、モジュールの分散配備を最適化することができる。
次に、本実施例では、センサノードがサーバノードへイベントを送信する場合の送信間隔を制御したり、イベントデータを圧縮したりすることにより、イベントの送信効率を向上させる方法について説明する。
[サーバノードの構成]
図40は、実施例5に係るサーバノード150の機能的構成を示すブロック図である。図40に示すように、サーバノード150は、図2に示したサーバノード110に比べて、モジュール定義記憶部151と、送信制御情報送信部152をさらに有する点が相違する。なお、以下では、上記の実施例1と同様の機能を発揮する機能部については同一の符号を付し、その説明を省略することとする。
このうち、モジュール定義記憶部151は、上記の実施例1と比較して、モジュールに関する定義に加え、イベントの送信制御情報をさらに対応付けて記憶する点が相違する。図41は、モジュール定義記憶部151に記憶される情報の構成例を示す図である。図41に示すように、温度警告は、0秒、すなわち即座に上位ノードに送信することが定められている。また、平均温度及び平均湿度は、600秒(10分)ごとにまとめて送信することが定められている。また、不快指数は、3600秒(1時間)ごとにまとめて送信することが定められている。これらのイベントのうち不快指数は、データを圧縮して送信することが併せて定められている。なお、図中の真偽値が「true」である場合には、データを圧縮する設定であることを表し、図中の真偽値が「false」である場合には、データを圧縮しない設定であることを表す。
送信制御情報送信部152は、モジュール定義記憶部151に記憶された各項目のうち送信間隔およびデータ圧縮の要否を送信制御情報として下位ノードへ送信する処理部である。
[センサノードの構成]
図42は、実施例5に係るセンサノード250の機能的構成を示すブロック図である。図42に示すように、センサノード250は、図17に示したセンサノード210に比べて、送信制御情報受信部251と、イベント送信制御部252とをさらに有する点が相違する。
このうち、送信制御情報受信部251は、送信制御情報送信部152によって送信された送信制御情報を受信する処理部である。このようにして受信された送信制御情報は、後述のイベント送信制御部252へ出力される。
イベント送信制御部252は、送信制御情報にしたがってイベントを上位ノードへ送信するように制御する処理部である。一態様としては、イベント送信制御部252は、送信制御情報に設定された送信間隔でイベントを上位ノードへ送信するようにイベント送信部214を制御する。他の一態様としては、イベント送信制御部252は、送信制御情報にデータを圧縮する設定がなされている場合に、イベントデータを圧縮した上で圧縮後のイベントデータを上位ノードへ送信するようにイベント送信部214を制御する。
[GWノードの構成]
図43は、実施例5に係るGWノード350の機能的構成を示すブロック図である。図43に示すように、GWノード350は、図18に示したGWノード310に比べて、送信制御情報受信部351と、イベント送信制御部352とをさらに有する点が相違する。
このうち、送信制御情報受信部351は、送信制御情報送信部152によって送信された送信制御情報を受信する処理部である。このようにして受信された送信制御情報は、後述のイベント送信制御部352へ出力される。
イベント送信制御部352は、送信制御情報にしたがってイベントを上位ノードへ送信するように制御する処理部である。一態様としては、イベント送信制御部352は、送信制御情報に設定された送信間隔でイベントを上位ノードへ送信するようにイベント送信部314を制御する。他の一態様としては、イベント送信制御部352は、送信制御情報にデータを圧縮する設定がなされている場合に、イベントデータを圧縮した上で圧縮後のイベントデータを上位ノードへ送信するようにイベント送信部314を制御する。
[処理の流れ]
図44は、実施例5に係るセンサノード250における全体処理の手順を示すフローチャートである。この全体処理は、センサノード250の電源がON状態である限り、繰り返し実行される。なお、図44に示すセンサノード250における全体処理は、図19に示したセンサノード210における全体処理に比べて、ステップS108〜ステップS109の代わりにステップS901〜ステップS904の処理が実行される点が異なる。
図44に示すように、新たな上位ノードを検出した場合(ステップS101肯定)には、センサノード250は、当該上位ノードのノードIDをサーバノード150へ送信する(ステップS102)。なお、新たな上位ノードを検出しなかった場合(ステップS101否定)には、ステップS102の処理を実行せずにステップS103の処理へ移行する。
続いて、サーバノード150からモジュールを受信した場合(ステップS103肯定)には、センサノード250は、サーバノード150から受信したモジュールを配備する(ステップS104)。なお、モジュールを受信しなかった場合(ステップS103否定)には、ステップS104の処理を実行せずにステップS105の処理へ移行する。
そして、センサデバイスからセンサ情報を受信した場合(ステップS105肯定)には、センサノード250は、当該センサ情報を入力イベント型とするモジュールが配備されているか否かをさらに判定する(ステップS106)。なお、センサ情報を受信しなかった場合(ステップS105否定)には、ステップS101の処理に戻る。
このとき、モジュールが配備されている場合(ステップS106肯定)には、センサノード250は、モジュールを実行することによってイベントを加工処理する(ステップS107)。そして、センサノード250は、前回にイベントを送信してから送信制御情報に設定された送信間隔が経過するまで待機する(ステップS901)。
一方、モジュールが配備されていない場合(ステップS106否定)には、センサノード250は、次のような処理を実行する。すなわち、センサノード250は、前回にセンサ情報を送信してから送信制御情報に設定された送信間隔が経過するまで待機する(ステップS901)。
そして、送信制御情報にデータを圧縮する設定がなされている場合(ステップS902肯定)には、センサノード250は、イベントデータを圧縮し(ステップS903)、圧縮後のイベントを上位ノードへ送信する(ステップS904)。なお、送信制御情報にデータを圧縮する設定がなされていない場合(ステップS902否定)には、センサノード250は、圧縮せずにイベントを上位ノードへ送信する(ステップS904)。
このようにして、センサノード250は、上記のステップS101〜ステップS107及び上記のステップS901〜ステップS904までの処理を電源がOFF状態になるまで繰り返し実行する。
なお、ここでは、センサノード250の全体処理について説明したが、中継ノードであるGWノード350によって実行される全体処理も一部を除き同様である。すなわち、GWノード350の場合には、上記のステップS105においてセンサ情報の代わりにイベントが受信される点が相違する点を除き、センサノード250と同様である。
[実施例5の効果]
上述してきたように、本実施例に係るサーバノード150は、センサノードがサーバノードへイベントを送信する場合の送信制御情報を下位ノードへ送信する。これによって、本実施例に係るサーバノード150は、センサノードが送信間隔を制御したり、イベントデータを圧縮したりしてイベントを送信することができ、イベントの送信効率を向上させることが可能になる。
次に、本実施例では、モジュールが処理を実行する場合に参照する参照データの一部を下位ノードに配備することにより、下位ノードで実行されるイベントの加工処理を効率よく実行させる方法について説明する。
[サーバノードの構成]
図45は、実施例6に係るサーバノード160の機能的構成を示すブロック図である。図45に示すように、サーバノード160は、図2に示したサーバノード110に比べて、モジュール定義記憶部161と、参照データ記憶部162と、部分参照データ送信部163とをさらに有する点が相違する。なお、以下では、上記の実施例1と同様の機能を発揮する機能部については同一の符号を付し、その説明を省略することとする。
このうち、モジュール定義記憶部161は、上記の実施例1と比較して、モジュールに関する定義に加え、モジュールがイベントを加工処理する場合に参照するテーブル名及びカラムをさらに対応付けて記憶する点が相違する。図46は、モジュール定義記憶部161に記憶される情報の構成例を示す図である。図46に示すように、モジュール「平均温度計算」、「平均湿度計算」及び「不快指数計算」によってイベントが加工処理する場合に参照されるテーブル名はいずれもテーブルAであり、互いに共通している。また、テーブルAの中で参照されるカラムについてもカラムKは、モジュール「平均温度計算」、「平均湿度計算」及び「不快指数計算」に共通して参照される一方で、その他に参照されるカラムは順に「X」、「Y」、「Z」と互いに異なる。
参照データ記憶部162は、モジュールがイベントを加工処理する場合に参照されるデータを記憶する記憶部である。この参照データ記憶部162には、モジュール記憶部111Aに記憶される全てのモジュールによって参照されるデータが記憶されている。
部分参照データ送信部163は、参照データ記憶部162に記憶された参照データのうち、下位ノードに配備するモジュールに対応する部分参照データを抽出した上で下位ノードへ送信する処理部である。一態様としては、部分参照データ送信部163は、モジュールが配備される場合に、当該モジュールに対応する参照テーブル及び参照カラムをモジュール定義記憶部161から読み出す。その上で、部分参照データ送信部163は、参照データ記憶部162に記憶された参照データのうち参照テーブル名及び参照カラムに対応する部分参照データを抽出してモジュールを配備する下位ノードへ送信する。
[センサノードの構成]
図47は、実施例6に係るセンサノード260の機能的構成を示すブロック図である。図47に示すように、センサノード260は、図17に示したセンサノード210に比べて、部分参照データ受信部261と、部分参照データ記憶部262とをさらに有する点が相違する。
このうち、部分参照データ受信部261は、部分参照データ送信部163によって送信された部分参照データを受信する処理部である。このようにして受信された部分参照データは後述の部分参照データ記憶部262に登録される。
部分参照データ記憶部262は、部分参照データを記憶する記憶部である。この部分参照データ記憶部262は、センサノード260に配備されたモジュールによってイベントが加工処理される場合に、モジュール実行部213によって参照される。
[GWノードの構成]
図48は、実施例6に係るGWノード360の機能的構成を示すブロック図である。図48に示すように、GWノード360は、図17に示したGWノード310に比べて、部分参照データ受信部361と、部分参照データ記憶部362とをさらに有する点が相違する。
このうち、部分参照データ受信部361は、部分参照データ送信部163によって送信された部分参照データを受信する処理部である。このようにして受信された部分参照データは後述の部分参照データ記憶部362に登録される。
部分参照データ記憶部362は、部分参照データを記憶する記憶部である。この部分参照データ記憶部362は、GWノード360に配備されたモジュールによってイベントが加工処理される場合に、モジュール実行部313によって参照される。
[処理の流れ]
次に、本実施例に係るセンサネットワークシステムの処理の流れについて説明する。なお、ここでは、センサノード260によって実行される(1)全体処理を説明した後に、サーバノード160によって実行される(2)モジュール配備処理を説明することとする。
(1)全体処理
図49は、実施例6に係るセンサノード260における全体処理の手順を示すフローチャートである。この全体処理は、センサノード260の電源がON状態である限り、繰り返し実行される。なお、図49に示すセンサノード260における全体処理は、図19に示したセンサノード210における全体処理に比べて、ステップS1001〜ステップS1003の処理がさらに実行される点が異なる。
図49に示すように、新たな上位ノードを検出した場合(ステップS101肯定)には、センサノード260は、次のような処理を実行する。すなわち、センサノード260は、当該上位ノードのノードIDをサーバノード160へ送信する(ステップS102)。なお、新たな上位ノードを検出しなかった場合(ステップS101否定)には、ステップS102の処理を実行せずにステップS103の処理へ移行する。
続いて、サーバノード160からモジュールを受信した場合(ステップS103肯定)には、センサノード260は、サーバノード160から受信したモジュールを配備する(ステップS104)。なお、モジュールを受信しなかった場合(ステップS103否定)には、ステップS104の処理を実行せずにステップS1001の処理へ移行する。
ここで、部分参照データを受信した場合(ステップS1001肯定)には、センサノード260は、部分参照データを部分参照データ記憶部262に格納する(ステップS1002)。なお、部分参照データを受信しなかった場合(ステップS1001否定)には、ステップS1002の処理を実行せずにステップS105の処理へ移行する。
そして、センサデバイスからセンサ情報を受信した場合(ステップS105肯定)には、センサノード260は、当該センサ情報を入力イベント型とするモジュールが配備されているか否かをさらに判定する(ステップS106)。なお、センサ情報を受信しなかった場合(ステップS105否定)には、ステップS101の処理に戻る。
このとき、モジュールが配備されている場合(ステップS106肯定)には、センサノード260は、モジュールを実行することによってイベントを加工処理する(ステップS1003)。そして、センサノード260は、加工処理が実行されたイベントを上位ノードへ送信する(ステップS108)。
一方、モジュールが配備されていない場合(ステップS106否定)には、センサノード260は、センサデバイスから受信したセンサ情報に発生ノードIDや集約属性などを付加した上で上位ノードへ送信する(ステップS109)。
なお、ここでは、センサノード260の全体処理について説明したが、中継ノードであるGWノード360によって実行される全体処理も一部を除き同様である。すなわち、GWノード360の場合には、上記のステップS105においてセンサ情報の代わりにイベントが受信される点が相違する点を除き、センサノード260と同様である。
(2)モジュール配備処理
続いて、本実施例に係るモジュール配備処理について説明する。図50は、実施例6に係るモジュール配備処理の手順を示すフローチャートである。このモジュール配備処理は、センサネットワークのトポロジが変化した場合に処理が起動される。なお、図50に示すモジュール配備処理は、図20に示したモジュール配備処理に比べて、ステップS1101〜ステップS1102の処理がさらに実行される点が異なる。
図50に示すように、サーバノード160は、発生イベント情報記憶部116Aが更新されるのを待機する(ステップS201)。そして、発生イベント情報記憶部116Aが更新されると、全てのモジュールの配備が終了したか否かが判断されるが(ステップS202)、ここではいずれのモジュールについても処理が終了していないので(ステップS202否定)、ステップS203の処理へ移行する。
続いて、サーバノード160は、モジュール定義記憶部111Bに記憶されたモジュールの定義のうちモジュール識別子、入力イベント型及び集約属性名のカラムデータを配備先情報記憶部117Aの該当カラムに格納する(ステップS203)。
そして、サーバノード160は、ステップS203の処理を実行後に、下記に説明するステップS204の処理を実行する。すなわち、サーバノード110は、発生イベント情報記憶部116Aに記憶された発生ノードIDのうち、発生イベント型が未配備のモジュールの入力イベント型に含まれる発生ノードIDを抽出する。さらに、サーバノード160は、前述のように抽出した発生ノードID間で未配備のモジュールに定義された集約属性の属性名と同一の集約属性に属する属性値が同一であるノードを抽出する。
その後、サーバノード160は、抽出結果として得られた発生ノードID及び発生ノードIDに対応付けられた発生イベント属性を配備先情報記憶部117Aに書き込む(ステップS205)。
このとき、発生ノードIDの数が「0」である場合(ステップS206肯定)には、下位ノードから通知される発生イベントが発生イベント情報記憶部116Aに登録し切れていない可能性がある。この場合には、ステップS202の処理に移行する。
ここで、発生ノードIDの数が複数である場合(ステップS207肯定)には、下記に説明するステップS208の処理を実行する。すなわち、サーバノード160は、トポロジ記憶部112Aに記憶された上位ノードIDのうち各発生ノードIDに対応するセンサノード260又はGWノード360が下位ノードとして全て収容され、かつ最も下位ノード側であるノードIDを抽出する。そして、サーバノード160は、前述のように抽出したノードIDを配備先ノードIDのカラムに登録する(ステップS209)。
また、発生ノードIDの数が1つである場合(ステップS207否定)には、サーバノード160は、モジュールを配備するノードに選択の余地がないので、先に抽出結果として得られた発生ノードIDを配備先ノードIDのカラムに登録する(ステップS209)。
続いて、サーバノード160は、モジュール記憶部111Aに記憶されたモジュールを配備先ノードIDに対応するノードへ送信する(ステップS210)。そして、サーバノード160は、当該モジュールに対応する参照テーブル及び参照カラムをモジュール定義記憶部161から読み出し、参照データ記憶部162に記憶された参照データのうち参照テーブル名及び参照カラムに対応する部分参照データを読み出す(ステップS1101)。
その上で、サーバノード160は、参照データ記憶部162から読み出した部分参照データをモジュールを配備する下位ノードへ送信する(ステップS1102)。そして、サーバノード160は、発生イベント情報記憶部116Aが更新されるのを待機し(ステップS211)、ステップS202の処理に戻る。
その後、サーバノード160は、全てのモジュールの配備が終了するまで(ステップS202否定)、上記のステップS203〜ステップS211までの処理を繰り返し実行する。そして、全てのモジュールの配備が終了すると(ステップS202肯定)、処理を終了する。
[実施例6の効果]
上述してきたように、本実施例に係るサーバノード160は、モジュールが処理を実行する場合に参照する参照データの一部を下位ノードに配備する。このため、本実施例に係るサーバノード160によれば、下位ノードで実行されるイベントの加工処理を効率よく実行させることができる。
なお、上記の実施例1〜6では、センサネットワークシステムにセンサノードやGWノードが追加される場合を例示したが、開示の装置は、センサネットワークシステムからノードが削除される場合にも同様に適用できる。例えば、サービスに加入していたノードがサービスを解除した場合には、サービス提供用のアプリケーションからセンサネットワークから削除すべきノードのノードIDなどを取得することもできる。また、サーバノードやGWノードが下位ノードによるネットワーク接続を監視しておき、ネットワーク接続が切断された場合に、削除すべきノードとして特定することもできる。
また、上記の実施例1〜6では、ネットワークのトポロジが変化したことを契機にモジュール配備処理を起動する場合を例示したが、モジュールが追加または削除された場合やモジュールの定義が変更された場合にモジュール配備処理を起動することとしてもよい。
なお、開示の装置では、モジュールによって実行されるイベント加工処理やサービス提供用のアプリケーションによって実行されるサービス提供処理のバックグラウンドでモジュール配備処理を実行することもできる。例えば、現用系のサーバノードでイベント加工処理やサービス提供処理を実行しつつ、待機系のサーバノードでモジュール配備処理を実行できる。