以下、図面を参照して、実施形態を説明する。以下の説明は、実施形態の技術的思想を具体化するための装置や方法を例示するものであって、実施形態の技術的思想は、以下に説明する構成要素の構造、形状、配置、材質等に限定されるものではない。当業者が容易に想到し得る変形は、当然に開示の範囲に含まれる。説明をより明確にするため、図面において、各要素のサイズ、厚み、平面寸法又は形状等を実際の実施態様に対して変更して模式的に表す場合もある。複数の図面において、互いの寸法の関係や比率が異なる要素が含まれることもある。複数の図面において、対応する要素には同じ参照数字を付して重複する説明を省略する場合もある。いくつかの要素に複数の呼称を付す場合があるが、これら呼称の例はあくまで例示であり、これらの要素に他の呼称を付すことを否定するものではない。また、複数の呼称が付されていない要素についても、他の呼称を付すことを否定するものではない。なお、以下の説明において、「接続」は直接接続のみならず、他の要素を介して接続されることも意味する。
以下、図面を参照しながら本実施の形態について詳細に説明する。
[実施形態の概要]
実施形態は、「もし何々であれば、何々する」というルール情報に従って複数のモジュールを連携させるIoTシステムに関する。
IoTシステムにより連携される対象物であるモジュールは、実世界の物理的なデバイスに限らず、ソフトウェアにより提供されるサービスも含む。サービスはデバイスにインストールされているプログラムによるメールサービス、SNSサービスや、Webサービスサーバにより提供されるWebサービスを含む。
デバイスは、所定機能の実現に利用されるあらゆるものを含む。デバイスは、動作を実行するデバイスやコンテンツを表示するデバイス、データを記憶する記憶装置を含む。
コンテンツは、所定機能に関係する具体的内容を意味し、他との違いが個々に識別可能な具体性を有する。例えば“映画”と言う抽象的概念は含まれず、他のコンテンツとの識別手段として“映画名(題名)”が設定された特定コンテンツが該当する。同様にWebブラウザに表示される“Web画面”と言う抽象的概念は含まれず、特定のURL上に配置された特定のWeb頁も該当する。
デバイスは、外部のデバイスとの間の通信を行うための通信機能を内蔵してもよい。デバイスは、自然界の物理的又は化学的な状態又は現象に対して作用する機能を持ってもよい。自然界に対して受動的作用を行うデバイスは、センサ等を含む。自然界に対して能動的作用を行うデバイスは、ロボット、駆動機構及び表示装置等を含む。デバイスの物理的形態としては、据え置き型に限らず、移動可能な携帯型の形態でもよい。デバイスの物理的形態の例は、ユーザの腕や足に固定するバンド型センサや腰に固定するベルト型センサ、頭部に装着するVRタイプやARタイプのヘッドマウントディスプレイ等のユーザが装着可能な形態を含む。
サービスは、所定の実体/状態/情報の制御を組み合わせて、有償又は無償でユーザに対して所定の動作や状態の変化、あるいはコンテンツやデータ/情報を提供する能動的動作を意味する。実施形態では、ルール情報に従って、ユーザにサービスを提供する。このサービス提供の形態として、実施形態では、各種デバイスを利用した実空間上あるいは物理空間上のサービスとWebサービスなどを利用したサイバ空間上のサービス間の垣根を越えた(跨った)組み合わせ(複合化)サービスを提供してもよい。
ルール情報は、複数のモジュールの組み合わせ方の定義であるルールを記述する情報であり、デバイスやサービスを自由に組み合わせることができる。そのため、ルール情報に基づくIoTシステムは、家庭、会社、社会の様々なシーンで便利な仕組みを実現できる。
ルールの一例は、センサにより検出される状態が特定の状態である場合、あるデバイスが特定の動作を実行するというものである。ルールを記述するルール情報は種々の形式があり、その一例は、特定の状態を示す条件情報(IF部とも称する)と、センサにより検出された状態が特定の状態である場合に実行される特定の動作を示す動作情報(THEN部とも称する)とを含むIF-THEN形式のルールである。しかし、ルール情報の形式は、この形式に限定されない。
一つのルール情報においてIF部とTHEN部の数、すなわち検出する状態の数と、実行する動作の数はそれぞれ一つに限定されない。例えば複数の状態がそれぞれ複数の特定の状態である場合に一つの動作を実行させるようにルール情報を記載してもよい。あるいは、一つの状態が一つの特定の状態である場合に複数の動作を実行させるようにルール情報を記載してもよい。さらに、複数の状態がそれぞれ複数の特定の状態である場合に複数の動作を実行させるようにルール情報を記載してもよい。
IF-THEN形式のルール情報の一例は、これらに限定されないが、
「トレイに200グラム以上の物体が置かれたら、ランプは5秒間光ってお知らせする」、
「温度が26度を超えたら、空調機は冷房モードで動作する」、
「工作機械の振動が10秒以上停止したら、ディスプレイは警告文を20秒間表示して作業員に通知する」、
「外国人が入り口に来たら、音声合成装置は外国語で館内の音声案内を開始する」、
「心拍数が120を超えたら、メールソフトは本人に通知メールを送る」等である。
「温度が26度を超えたら、空調機は冷房モードで運転する」のルール情報では、IoTシステムが連携させるモジュール(この場合、デバイス)は、温度を検出する温度センサ(IFモジュール)と、冷房モードの運転を実行する空調機(THENモジュール)である。
[システム構成]
図1は、実施形態による電子装置を含むIoTシステムの一例を示す。IoTシステムは、クラウドサーバ18と、エッジコンピュータ10と、スマートフォン12a、12b(区別する必要が無い場合、スマートフォン12と総称する)と、ビーコンデバイス14a、14b(区別する必要が無い場合、ビーコンデバイス14と総称する)と、Webサービスサーバ16を含む。
エッジコンピュータ10には、特定アプリケーションとしてのifLink(登録商標)アプリケーション(以下、アプリケーションをアプリと略称する)アプリ22がインストールされている。ifLinkとは、IT-THEN形式のルール情報に基づいて、複数のモジュールを連携させてIoTシステムを作るためのプラットフォームである。ifLinkアプリ22は、クラウドサーバ18からダウンロードされる。
スマートフォン12とビーコンデバイス14とWebサービスサーバ16は、モジュールの例である。エッジコンピュータ10は、無線によりスマートフォン12とビーコンデバイス14に接続される。説明の便宜上、スマートフォン12とビーコンデバイス14の台数はそれぞれ2台であるが、これらの台数は任意であり、3台以上のスマートフォン12とビーコンデバイス14がエッジコンピュータ10に接続されてもよい。
スマートフォン12a、12bの各々には、非特定アプリケーションとしての個別アプリケーション(以下、アプリケーションをアプリと略称する)34a、34b(区別する必要が無い場合、個別アプリ34と総称する)と、IBI(ifLink Beacon Interface)モジュール32a、32b(区別する必要が無い場合、IBIモジュール32と総称する)がインストールされている。第2通信プリケーションとしてのIBIモジュール32は、エッジコンピュータ10との通信のためのインターフェースであるIBI(詳細は後述する)を実装したソフトウェアモジュールである。IBIモジュール32は、クラウドサーバ18からダウンロードされる。IBIモジュール32は、ライブラリであるので、開発者がダウンロードして自社のソフトウェアに組み込み、完成品のソフトウェア(個別アプリケーションソフトウェア)を作る。
ビーコンデバイス14a、14bの各々は、センサ44a、44b(区別する必要が無い場合、センサ44と総称する)と、IBI基板42a、42b(区別する必要が無い場合、IBI基板42と総称する)を含む。スマートフォン12と異なり、ビーコンデバイス14にはアプリケーションがインストールできない。そのため、IBIを実装したIBI基板42がビーコンデバイス14に組み込まれる。ビーコンデバイス14は、センサに限らず、LED等の発光部、LCD等の表示部を備えてもよい。
状態を検出するモジュールはIFモジュールと称し、動作を実行するモジュールはTHENモジュールと称する。
IFモジュールの例は、これらに限定されないが、温度センサ、湿度センサ、ドア、アルコール検知器、開閉センサ、ビーコン、人感センサ、水漏れセンサ、発電椅子、発電床、重さセンサ、複合多機能センサ(光、温度、湿度、加速度、ジャイロ等)、体温計、重量計、マイクロフォン、湿度計、カメラ等を含む。THENモジュールの例は、これらに限定されないが、コミュニケーションロボット、電源タップ、通知用腕時計、リストバンド、LED、電子機器のリモコン、メール送信、マップ表示、音声合成等を含む。
スマートフォン12は、個別アプリ34を実行することにより、IFモジュール又はTHENモジュールとして機能することができる。センサ44を含むビーコンデバイス14は、IFモジュールである。なお、スマートフォン12は、IFモジュールとしてのセンサを内蔵することがある。しかし、センサの出力は個別アプリ34を介して出力され、センサの動作は個別アプリ34を介して制御されるので、センサを内蔵するスマートフォン12も、個別アプリ34を実行することにより、IFモジュールとして機能する。同様に、THENモジュールとしての表示部、ブザー、バイブレータ等を内蔵するスマートフォン12も、個別アプリ34を実行することにより、THENモジュールとして機能する。
なお、一つのモジュールが状態を検出するとともに、動作を実行する機能を有するならば、IFモジュールとTHENモジュールを別個に設ける必要は無く、一つのモジュールとエッジコンピュータ10があれば、IoTシステムが作成される。例えばLED付きの照度センサをエッジコンピュータ10に接続すれば、照度が閾値以上の場合、LEDを点灯させるというIF-THEN形式のルール情報に従うIoTシステムを実現できる。
図1に示すように、スマートフォン12がIFモジュール/THENモジュールとして機能する場合のルール情報の例は、
スマートフォン12を持ったユーザがある場所に近づくと、その場所の情報がスマートフォン12に表示される、
スマートフォン12でゲームをクリアしたら、くす玉(スマートフォン12の画面上のくす玉でもよいし、実際のくす玉でもよい)が割れる、
スマートフォン12で写真を撮影したら、写真が近くの人と共有される、等を含む。
エッジコンピュータ10は、IF-THEN形式のルール情報に従ってモジュールを連携させるためのifLinkアプリ22をクラウドサーバ18からダウンロードして保存している。エッジコンピュータ10の例は、これらに限定されないが、パーソナルコンピュータ、スマートフォン、タブレットコンピュータ、サイネージ、ゲートウェイ、ルータ等を含む。エッジコンピュータ10の設置場所は、トラック、列車、船舶、航空機等の輸送装置、また、病院、工場、アパートメント、個人住宅(音声合成、メール、SNS等)、農業施設、漁業施設、林業施設、学校、公園等の施設を含む。
ifLinkアプリ22は、IFモジュールから送信される信号に基づきIFモジュールが検出した状態が特定の状態であるかどうかを判断し、検出した状態が特定の状態である場合、THENモジュールに特定の動作を実行させる指示を与える。具体的には、ifLinkアプリ22は、ルールメモリ30に記憶されているルール情報に沿った動作を実行するためのIF-THENエンジン24を含む。IF-THENエンジン24は、IFモジュールが検出した状態がルール情報に記載の特定の状態であるか否かを判断し、検出した状態が特定の状態である場合、第1通信アプリケーション(IBIマイクロサービス26)を介して、ルール情報に基づいた特定の動作を実行させるためのAPI(Application Programming Interface)コマンドを発行する。
ifLinkアプリ22(IF-THENエンジン24)は、クラウドサーバ18内に設けられていてもよい。また、クラウドサーバ18とエッジコンピュータ10を別々に設けるのではなく、両者の機能を含む単一の電子装置を設け、単一の電子装置がifLinkアプリ22(IF-THENエンジン24)を内蔵してもよい。
IBIマイクロサービス26は、スマートフォン12(個別アプリ34)又はビーコンデバイス14(センサ44)と無線により通信され、スマートフォン12(個別アプリ34)又はビーコンデバイス14(センサ44)を連携させる。IBIは、ビーコンを利用して、エッジコンピュータ10のifLinkアプリ22と、スマートフォン12の個別アプリ34又はビーコンデバイス14のセンサ44を接続するためのインターフェースである。IBIで使われるビーコンしては、BLE(ブルートゥース(登録商標)・ロウ・エネルギ(Bluetooth(登録商標) Low Energy)機能で使われるアドバータイジング・パケットやWi-Fi(登録商標)のビーコン等が使用され得る。
IBIマイクロサービス26は、スキーマ情報36を含む。IBIマイクロサービス26は、IFモジュールから受信したデータを、スキーマ情報に基づいて、データの送信元モジュールに応じた異なる情報として処理する。例えば、体重計と人数計ではデータの種類が異なる。体重計から送信されたデータは、実数値(kg)であり、人数計から送信されたデータは、整数値(人)である。同様に、IBIマイクロサービス26は、THENモジュールの制御信号を、スキーマ情報に基づいて、データの送信先モジュールに応じた異なる情報として処理する。IBIマイクロサービス26は、スキーマ情報36に応じて、データの種類を決定する。これにより、1つのIBIマイクロサービス26で様々なモジュールからの信号に対応することができるとともに、様々なモジュールに対して制御信号を送信することができる。
このように、スキーマ情報は、スマートフォン12(個別アプリ34)とビーコンデバイス14(センサ44)をIBIマイクロサービス26と接続するための情報である。IBIマイクロサービス26は、スキーマ情報に基づいて、どのスマートフォン12(個別アプリ34)とビーコンデバイス14(センサ44)と接続すべきかを判断する。後述するが、スキーマ情報は、スマートフォン12(個別アプリ34)とビーコンデバイス14(センサ44)の識別情報と、送信/受信する情報を含む。
スマートフォン12とビーコンデバイス14をIBIマイクロサービス26に接続する際に、IoTシステムの開発者がスキーマ情報を設定してもよいが、スマートフォン12(個別アプリ34)とビーコンデバイス14(センサ44)の開発者が、スマートフォン12(個別アプリ34)とビーコンデバイス14(センサ44)毎のスキーマ情報36を作成して、クラウドサーバ18に格納しておいてもよい。IoTシステムの開発者は、クラウドサーバ18からスキーマ情報36をダウンロードして利用してもよい。このように別々の者がスキーマ情報36を作成と利用をしても構わない。
Web用マイクロサービス28は、Webサービスサーバ16にアクセスしてWebサービスを得る。Web用マイクロサービス28の具体的制御例は、これらに限定されないが、HTML(Hyper Text Mark-Up Language)内に指定されたフォーム要素の枠内に必要な情報を自動で書き込む制御やWebページ間の遷移制御を含む。このようにエッジコンピュータ10内にWeb用マイクロサービス28を備えることにより、Webサービスのような高度なサービスをユーザが享受できる。これにより、エッジコンピュータ10は、スマートフォン12とビーコンデバイス14とWebサービスサーバ16により提供されるサービスを連携させることもできる。
ここで、いくつかの用語をさらに説明する。
マイクロサービス:
オブジェクト指向のプログラミング言語を用いたプログラムで形成した制御手段を意味する。マイクロサービスの制御対象は物理的なデバイスに限らず、処理やコンテンツ、情報/データが含まれる。従って、Web頁間の遷移制御や特定Web頁に対応した画面操作などの制御を行うためのAI技術を用いたプログラムソフトも、マイクロサービスの一種あるいはその中の一部に含まれる。同様に、AI技術を用いて例えば特定の映像コンテンツ内に登場する人物の人数を自動抽出するプログラムソフトや、取得データを(例えば統計解析などを利用した)解析するプログラムソフトも、マイクロサービスの一種である。制御手順を規定する際、Java(登録商標)言語やオブジェクティブC言語などのオブジェクト指向のプログラミング言語を用いたプログラムで規定すると、既作成プログラム資産の有効活用(他プログラム内での組み込み(インポート)や呼び出し(APIコマンド発行)等が行える。さらに、OSに依存しないJava言語でプログラムを記述すると、制御手段の汎用性が向上する。
制御用メソッド:
マイクロサービスの一部を構成し、特定の個別詳細機能を実現するための詳細手順を規定したプログラムを意味する。個々の制御用メソッドが、個別詳細機能を実現する最小関数単位、すなわちサブプログラムとして扱われる。IF-THENエンジン24からのAPIコマンドにより、特定の個別詳細機能に対応した制御用メソッド名を対応関数(コマンド)として呼び出せる。これにより、IF-THENエンジン24内で制御用メソッド名に対応した個別詳細機能を実行させることができる。
制御用クラス:
個々の制御用メソッドの中で、共通類似機能毎に集めた集合体の塊を意味する。生成するインスタンス(実体)の初期設定機能に対応した制御用メソッドをコンストラクタと呼ぶ。同一集合体に含まれるコンストラクタ名(コンストラクタに対応する制御用メソッド名)を、制御用クラス名と一致させても良い。マイクロサービスの中で、共通する類似機能毎に制御用メソッドをまとめた管理単位が制御用クラスに相当する。従って、同一使用目的のマイクロサービス内に、複数の異なる制御用クラスが存在しても良い。
制御用パッケージ:
類似機能を持ったクラスの集合を示す。すなわち、類似機能を持ったクラスの集まりをフォルダ単位に分けて管理する仕組みに従って定義される。同一モジュール内に含まれる複数の機能毎に制御用パッケージを分け、それぞれ異なる制御用パッケージ名(制御用パッケージ毎の識別情報)を個々に設定してもよい。従って、個々に設定された制御用パッケージ名(制御用パッケージ毎の識別情報)を利用して、機能毎の内容の識別が可能となる。ここで機能に属するデバイスを制御するための制御用パッケージの名前を設定する場合には、モジュールの製造又は販売メーカの識別情報や、モジュールの種別情報、個々の製造番号などを制御用パッケージ毎の識別情報に利用(設定)しても良い。
APIコマンド:
IF-THENエンジン24から個々のマイクロサービスを操作するためのIF-THENエンジン24とマイクロサービスの間のコミュニケーションツールを示す。マイクロサービスは、制御用パッケージ/制御用クラス/制御用メソッドの階層構造を持つ。個別詳細機能を実現するための詳細手順(プログラム)を示す特定の制御用メソッド名を指定し、制御用メソッド単位での個別詳細機能操作を行う場合が多い。例えばJava言語で記述されたifLinkアプリ22内でこの特定の制御用メソッドの個別詳細機能を実行したい場合、ifLinkアプリ22のクラス内で対応する制御用メソッドが入っている制御用パッケージ内の制御用クラスを先ず組み込む。上記クラス内又はメソッド内で対応する制御用メソッド名を指定することにより、この個別詳細機能が実行される。
[IBIの基本仕様]
次に、エッジコンピュータ10内のifLinkアプリ22とスマートフォン12内の個別アプリ34又はビーコンデバイス14のセンサ44とのインターフェースであるIBIを説明する。実施形態では、BLE機能で使われるアドバータイジング・パケット(以下、ビーコン・パケットと称する)を利用して、データの送信と受信確認を行う例を説明する。このため、IBIモジュール32又はIBI基板42は、少なくともビーコン・パケットを送受信する機能を備える。
IBIマイクロサービス26は、OSが提供するアプリ間連携の仕組み(Android(登録商標)の場合、AIDL)を使ってifLinkアプリ22と通信する。このためには、IBIマイクロサービス26とifLinkアプリ22が同じ端末(エッジコンピュータ2)内に存在することが必要である。しかし、IBIはその制約が無い。
そのため、ifLinkアプリ22がインストールされていないスマートフォン12であっても、IBIモジュール32がインストールされていれば、個別アプリ34とifLinkアプリ22をビーコン・パケットを利用して連携させることができる。これにより、ifLinkの普及を促進することができる。
また、アプリ(IBIモジュール32)をインストールできないデバイス、例えばビーコンデバイス14も、IBIが実装されたIBI基板42を組み込みことにより、ビーコンデバイス14が含む個別の素子、例えばセンサ44とifLinkアプリ22をビーコン・パケットを利用して連携させることができる。
ビーコン・パケットは、スマートフォン12又はビーコンデバイス14とエッジコンピュータ10がブルートゥース接続をするために常時発信している短いパケットである。ビーコン・パケットは、例えば32バイトであり、例えば最初の7バイトがブルートゥース領域、残りの25バイトがユーザ領域である。ユーザ領域は、IBI領域とされ、アプリID/サービスIDと、通信データ部を含む。アプリID/サービスIDは、IoTシステムが連携するモジュールの識別情報である。アプリIDは、スマートフォン12の個別アプリ34やビーコンデバイス14のセンサ44の識別情報であり、サービスIDは、Webサービスサーバ16等のサービスの識別情報である。
IBIは、ビーコン・パケットを用いて簡易的な通信を実現し、その上でifLinkアプリ22と個別アプリ34又はセンサ44を連携するために必要なセンサ値(データ)通知機能とジョブ(Job)通知機能を実現する。センサ値通知機能は、非特定アプリケーションに対する指示(ジョブ通知)であり、IFモジュールとしてのセンサの検出結果をifLinkアプリ22へ送信する機能の一例である。ジョブ通知機能は、ifLinkアプリ22がモジュールに対して処理(ジョブ)を指示する機能の一例である。ifLinkアプリ22は、IFモジュールに対しては、検出結果の送信を指示したり、THENモジュールに対しては、処理の実行を指示する。
IBI通信の基本動作
(1)IoTシステムの開発者は、スマートフォン12(個別アプリ34)をifLinkアプリ22に接続する際、クラウドサーバ18が個別アプリ34のスキーマ情報を格納しているか否か調べる。クラウドサーバ18が個別アプリ34のスキーマ情報を格納していれば、IoTシステムの開発者は個別アプリ34のスキーマ情報をダウンロードする。なお、クラウドサーバ18が個別アプリ34のスキーマ情報を格納していない場合は、開発者は個別アプリ34のスキーマ情報を作成した上で設定する。
(2)IoTシステムの開発者は、IMS設定(スマートフォン内のifLinkマイクロサービス(IMS)に対して、クラウドサーバー18から設定を送りこむことができる機能)を用いて、スキーマ情報36をIBIマイクロサービス26に登録する。
(3)IoTシステムの開発者は、IBIマイクロサービス26に用いて登録されたスキーマ情報36に基づいて通信するスマートフォン12の識別情報(後述するdevicename, deviceserial)を登録(Activation)する。
(4)IBIマイクロサービス26と登録済みのスマートフォン12の個別アプリ34との通信は許可されるが、IBIマイクロサービス26と未登録のスマートフォン12の個別アプリ34との通信は許可されない。
なお、スマートフォン12に限らず、ビーコンデバイス14をifLinkアプリ22に接続する際も、上記と同様な処理が実行されるので、詳細な説明は省略する。
図2は、ビーコン・パケットの送受信の一例を示す。図2(a)は、送達確認無しの場合、図2(b)は、送達確認有りの場合のシーケンス図を示す。なお、送達確認は、IBIモジュール32より上位のプロトコルにて実装される。
ビーコン・パケットは一斉送信(ブロードキャスト通信)されるため、複数台のエッジコンピュータ10が存在すると、複数のifLinkアプリ22がそれぞれ動作してしまう。逆に、複数のifLinkアプリ22からの指示(ジョブ通知)等も重複する可能性がある。しかし、後述するように、受信信号の送信元のIBIモジュール32又はIBI基板42の識別情報(devicename, deviceserial)はスキーマ情報36に登録することができる。このため、IBIマイクロサービス26は、意図しない送信元からのセンサ値通知をフィルタリングすることができる。また、IBIモジュール32のID(後述するMember ID, Module ID)もスキーマ情報36に登録することができる。このため、IBIモジュール32は、自分宛以外の情報をフィルタリングすることができる。
送達確認無しの場合、図2(a)に示すように、送信元(ここでは、個別アプリ34)は、IBIモジュール32へビーコン・パケットの送信要求を送る。IBIモジュール32は、送信間隔Tinterval毎に、送信先(ここでは、IBIマイクロサービス26)へビーコン・パケット(以下、図面ではBeaconと記す)P1を送信する。送信時間はTdurationである。
IBIモジュール32は、ビーコン・パケットの送信開始から一定期間が経過すると、ビーコン・パケットの送信を停止する。
送達確認有りの場合、図2(b)に示すように、個別アプリ34は、IBIモジュール32へビーコン・パケットの送信要求を送る。IBIモジュール32は、IBIマイクロサービス26へビーコン・パケットP1を送信する。送信時間はTdurationである。
IBIマイクロサービス26は、スキャンを実施する。IBIマイクロサービス26は、ビーコン・パケットP1を受信すると、IBIモジュール32へビーコン・パケットの受信応答パケットR1を送信する。送信時間はTdurationである。IBIマイクロサービス26が受信したビーコン・パケットP1はifLinkアプリ22により参照される。
IBIモジュール32は、ビーコン・パケットの送信開始から一定時間(2×Tduration)が経過する迄に受信応答パケットR1を受信すると、個別アプリ34へ送信結果を通知し、ビーコン・パケットの送信を停止する。
IBIモジュール32は、ビーコン・パケットの送信開始から一定時間(2×Tduration)が経過しても受信応答パケットR1を受信しない場合、IBIマイクロサービス26へビーコン・パケットP1を再送信する。再送信は、指定回数(Nretry)まで繰り返される。
図2は、ビーコン・パケットP1が個別アプリ34(送信元)からIBIマイクロサービス26(送信先)へ送信される例を示す。個別アプリ34からIBIマイクロサービス26へ送信される情報の例はセンサ値通知がある。ビーコン・パケットはIBIマイクロサービス26から個別アプリ34へ送信される場合もある。この場合は、ビーコン・パケットを介してセンサ値応答又はジョブ通知がIBIマイクロサービス26から個別アプリ34へ送信される。また、ビーコン・パケットが個別アプリ34からIBIマイクロサービス26へ送信される場合、ビーコン・パケットを介してジョブ結果通知も送信されることがある。
[ビーコン・パケット]
図3は、ビーコン・パケットの構成の一例を示す。図4は、ビーコン・パケットに含まれるデータの一例を示す。
ビーコン・パケットは、32バイトからなる。基本的なデータ構造としては、先頭バイトにデータ部のバイト長(Length)が記載され、それに続いてデータ部が記載され、これが繰り返される。
バイト0のLengthは、データ部が2バイトであることを示し、バイト1~バイト2がデータ部である。
バイト3のLengthは、データ部が28バイトであることを示し、バイト4~バイト31がデータ部である。
データ部の先頭バイトは、そのデータの種別AD typeを示し、データ部の2バイト目からが実データである。バイト1のAD typeが0x01であることは、データの種別はビーコン・パケットのフラグであることを示す。同様に、バイト4のAD typeが0xFFであることは、データの種別はManufacturer Specific Dataであることを示す。
バイト0~バイト6はブルートゥースで規定されている。ユーザが独自に使用できる範囲は、バイト7~バイト31である。
バイト5~バイト6のカンパニーID(Company ID)は、IoTシステムを運用する団体を識別する情報であり、IBIを提案する団体(唯一)の識別情報である。
バイト7~バイト8のメンバID(Member ID:電子装置のユーザの識別情報)は、企業や組織を識別する情報である。予約値(reserved)は、特殊用途での使用を想定しており、通常での利用が禁止される。
バイト9~バイト10のモジュールID(Module ID:非特定アプリケーションの識別情報)は、企業や組織毎のプログラムモジュールの内部識別情報であり、或る利用者のスマートフォン12に或る企業や組織の複数の個別アプリ34がインストールされている場合、これらのデータ構造を識別出来るように個別アプリ34毎にモジュールIDを割り当てることができるようになっている。
バイト11のフレームタイプ(Frame Type)は送信種別(詳細は図5、図6に示す)を示す。
バイト12~バイト31のパラメータ部(Parameters:送信情報)は固有パラメータ(詳細は図10、図12に示す)を示す。
図5は、フレームタイプの構成の一例を示す。フレームタイプは、1バイトからなり、要求/応答を示すREQ/RESフラグ、コマンドに対する応答が必要か否かを示すREPLYフラグ及び実際のコマンド(COMMAND)からなる。センサ値送信の場合、要求は、個別アプリ34からIBIマイクロサービス26へセンサ値を送信することであり、応答は、IBIマイクロサービス26から個別アプリ34へ「センサ値を受信しました」と送信することである。
ビット7はREQ/RESフラグのフィールドであり、送信種別が要求の場合、フラグは0とされ、送信種別が応答の場合、フラグは1とされる。
ビット6はREPLYフラグのフィールドであり、応答が不要な場合、フラグは0とされ、応答が必要な場合、フラグは1とされる。
ビット5~ビット0のコマンドは、1:デバイス登録(未使用)、2:デバイス登録結果(未使用)、3:センサ値通知、4:ジョブ通知、5:ジョブ結果通知である。
図6は、フレームタイプの設定値の一例を示す。例えば、センサ値応答(応答不要)のフレームタイプは、0x03である。センサ値応答(応答要)のフレームタイプは、0x43である。センサ値通知の例は、センサとしての個別アプリ34からIBIマイクロサービス26へのセンサ値の送信である。
センサ値応答のフレームタイプの設定値は、0xC3である。センサ値応答の例は、センサ値通知(応答要)の場合、IBIマイクロサービス26からセンサとしての個別アプリ34へ「センサ値を受信しました」という応答の送信である。
ジョブ通知(応答不要)のフレームタイプの設定値は、0x04である。ジョブ通知(応答要)のフレームタイプは、0x44である。ジョブ通知の例は、IBIマイクロサービス26からTHENモジュールとしての個別アプリ34へ「〇〇動作をして下さい」という指示の送信である。
ジョブ結果通知のフレームタイプは、0xC4である。ジョブ結果通知の例は、THENモジュールとしての個別アプリ34からIBIマイクロサービス26へ「〇〇動作をしました」という応答の送信である。
図7は、ビーコン・パケットに含まれるパラメータ部の構成の一例を示す。パラメータ部は、複数のパラメータを格納する。各パラメータは、TL部とVAL部からなる。TL部は1バイトからなり、TYPEフィールドとLENGTHフィールドからなる。
TYPEフィールドは、ビット7~ビット5からなり、パラメータのタイプを示す。0は予約、1は整数(int)型、2は単精度浮動小数点数(float)型、3は倍精度浮動小数点数(double)型、4は文字列(string)型、5はバイナリ(binary)型を示す。
LENGTHフィールドは、ビット4~ビット0からなり、パラメータのサイズ(=VAL部のサイズ(バイト数)-1)を示す。パラメータのタイプがint型の場合、LENGTHフィールドは0,1,3又は7である。パラメータのタイプがfloat型の場合、LENGTHフィールドは3である。パラメータのタイプがdouble型の場合、LENGTHフィールドは7である。パラメータのタイプがstring型の場合、LENGTHフィールドは0~18である。パラメータのタイプがbinary型の場合、LENGTHフィールドは0~18である。
図8は、TL部の設定値の一例を示す。例えば、タイプがint型であり、サイズが1バイトの場合、TL部の設定値は0x20である。タイプがint型であり、サイズが2バイトの場合、TL部の設定値は0x21である。タイプがint型であり、サイズが4バイトの場合、TL部の設定値は0x23である。タイプがint型であり、サイズが8バイトの場合、TL部の設定値は0x27である。
タイプがfloat型であり、サイズが4バイトの場合、TL部の設定値は0x43である。
タイプがdouble型であり、サイズが8バイトの場合、TL部の設定値は0x67である。
タイプがstring型であり、サイズが1バイトの場合、TL部の設定値は0x80である。タイプがstring型であり、サイズが6バイトの場合、TL部の設定値は0x85である。タイプがstring型であり、サイズが19バイトの場合、TL部の設定値は0x92である。
タイプがbinary型であり、サイズが1バイトの場合、TL部の設定値は0xA0である。タイプがbinary型であり、サイズが19バイトの場合、TL部の設定値は0xB2である。
図9は、実施形態によるスキーマ情報の一例を示す。プロパティとして、デバイス名(devicename)、デバイスシリアル番号(deviceserial)、タイムスタンプ、メンバID(memberid)、モジュールID(moduleid)、パラメータ1(param1)~パラメータ4(param4)が記述されている。デバイス名SampleDevie1はスマートフォン12aに対応し、デバイス名SampleDevie2はスマートフォン12bに対応する。
図10は、センサ値通知のためのビーコン・パケットのパラメータの一例を示す。センサ値通知時のパラメータは、パラメータ1~パラメータ4がこの順にビーコン・パケットに格納される。この例では、バイト12の0x20は、最初のパラメータ(param1)がint型、1バイトであることを示し、バイト13がその値(0)を示す。バイト14の0x43が、次のパラメータ(param2)がfloat型、4バイトであることを示し、バイト15~バイト18がその値(1.2)を示す。この例では、個別アプリ34は2つのセンサ、例えば温度センサと湿度センサ、を備え、センサ値はparam1とparam2に格納され、param1は温度、param2は湿度を示す。パラメータの数は4に限定されず、送信したいデータ次第で、数は可変である。
図11は、センサ値通知のためのビーコン・パケットの送受信の一例を示す。図11(a)は、送達確認無しの場合のシーケンス図、図11(b)は、送達確認有りの場合のシーケンス図を示す。
送達確認無しの場合、図11(a)に示すように、個別アプリ34は、IBIモジュール32へセンサ値を送信する。IBIモジュール32は、送信間隔Tinterval毎に、センサ情報を含むビーコン・パケットをIBIマイクロサービス26へ送信する。送信時間はTdurationである。
IBIモジュール32は、ビーコン・パケットの送信開始から一定時間が経過すると、ビーコン・パケットの送信を停止する。
IBIマイクロサービス26は、DeviceConnectorへnotifyRecvData:voidを送る。DeviceConnectorはifLinkConnectorへsend_data:longを送る。ifLinkConnectorはIEPAServiceへsend_data:intを送る。具体的には、IBIマイクロサービス26は、IBIモジュール32からのビーコン・パケットを受信すると、ビーコン・パケットの妥当性を確認後、ビーコン・パケットからセンサ値を抽出し、notifyRecvData() APIにてDeviceConnectorへ受信したセンサ値を通知する。DeviceConnectorでは、send_data() APIにてifLinkConnectorへセンサ値を送信する。ifLinkConnectorは、send_data() APIにてIEPAServiceへセンサ値を送信する。なお、notifyRecvData()は、IBIマイクロサービス26がDeviceConnectorへセンサ値を通知するためのAPIである。
送達確認有りの場合、図11(b)に示すように、個別アプリ34は、IBIモジュール32へセンサ値を送る。IBIモジュール32は、センサ情報を含むビーコン・パケットをIBIマイクロサービス26へ送信する。送信時間はTdurationである。
IBIマイクロサービス26は、スキャンを実施する。IBIマイクロサービス26は、ビーコン・パケットを受信すると、IBIモジュール32へビーコン・パケットの受信応答パケットを送信する。送信時間はTdurationである。
IBIモジュール32は、ビーコン・パケットの送信開始から一定時間(2×Tduration)が経過する迄に受信応答パケットを受信すると、個別アプリ34へ送信結果を通知し、ビーコン・パケットの送信を停止する。
IBIモジュール32は、ビーコン・パケットの送信開始から一定時間(2×Tduration)が経過しても受信応答パケットを受信しない場合、IBIマイクロサービス26へビーコン・パケットを再送信する。再送信は、指定回数(Nretry)まで繰り返される。
IBIマイクロサービス26は、ビーコン・パケットを受信すると、DeviceConnectorへnotifyRecvData voidを送る。DeviceConnectorはifLinkConnectorへsend_data longを送る。ifLinkConnectorはIEPAServiceへsend_data intを送る。
図12は、ジョブ通知のためのビーコン・パケットのパラメータの一例を示す。ジョブ通知時のパラメータは、センサ値通知時のパラメータと同様に、パラメータ1~パラメータ4がこの順にビーコン・パケットに格納される。この例では、個別アプリ34は2つのセンサ、例えば温度センサと湿度センサ、を備え、温度測定のジョブはparam1に、湿度測定のジョブはparam2に格納される。パラメータの数は4に限定されず、送信したいジョブ次第で、数は可変である。
図13は、ジョブ通知のためのビーコン・パケットの送受信の一例を示す。図13(a)は、送達確認無しの場合のシーケンス図、図13(b)は、送達確認有りの場合のシーケンス図を示す。
送達確認無しの場合、図13(a)に示すように、IEPAServiceはifLinkConnectorへonEpaEvent:voidを送る。ifLinkConnectoはIBIマイクロサービス26へジョブ要求(onJob:boolean)を送信する。具体的には、IEPAServiceは、ジョブ通知が必要になると、onEpaEvent() APIを用いて対象のifLinkConnectorへの通知を行う。そして、ifLinkConnectorは、IEPAServiceからのジョブ通知を受けると、onJob() APIを用いてIBIマイクロサービス26へ通知を行う。
IBIマイクロサービス26は、送信間隔Tinterval毎に、IBIモジュール32へジョブパラメータを含むビーコン・パケットを送信する。送信時間はTdurationである。IBIモジュール32は、ビーコン・パケットを受信すると、個別アプリ34へジョブ通知を送信する。個別アプリ34は、ジョブ通知に応じた動作を実行する。
IBIマイクロサービス26は、ビーコン・パケットの送信開始から一定時間が経過すると、ビーコン・パケットの送信を停止する。
送達確認有りの場合、図13(b)に示すように、IEPAServiceはifLinkConnectorへonEpaEvent:voidを送る。ifLinkConnectoはIBIマイクロサービス26へジョブ要求(onJob:boolean)を送信する。
IBIマイクロサービス26は、IBIモジュール32へジョブパラメータを含むビーコン・パケットを送信する。送信時間はTdurationである。
IBIモジュール32は、スキャンを実行する。IBIモジュール32は、ビーコン・パケットを受信すると、IBIマイクロサービス26へビーコン・パケットの受信応答パケットを送信する。送信時間はTdurationである。IBIモジュール32は、ビーコン・パケットを受信すると、個別アプリ34へジョブ通知を送信する。個別アプリ34は、ジョブ通知に応じた処理を実行する。
IBIマイクロサービス26は、ビーコン・パケットの送信開始から一定時間(2×Tduration)が経過する迄に受信応答パケットを受信すると、ビーコン・パケットの送信を停止する。IBIマイクロサービス26は、ビーコン・パケットの送信開始から一定時間(2×Tduration)が経過しても受信応答パケットを受信しない場合、IBIモジュール32へビーコン・パケットを再送信する。再送信は、指定回数(Nretry)まで繰り返される。
個別アプリ34は、ジョブ通知に応じた動作を実行すると、ジョブ結果をIBIモジュール32へ送信する。IBIモジュール32は、IBIマイクロサービス26へジョブ結果を含むビーコン・パケットを送信する。IBIマイクロサービス26は、ジョブ結果を含むビーコン・パケットを受信すると、IBIモジュール32へビーコン・パケットの受信応答パケットを送信する。
[実装例]
図14は、実施形態による電子装置をIFアプリ(送達確認無し)に実装した場合のビーコン・パケットの送受信の一例を示すシーケンス図である。ここでは、スマートフォン12がセンサを含み、個別アプリ34がセンサ値をifLinkアプリ22に送信する、すなわち個別アプリ34がIFアプリであることを想定する。
スマートフォン12のユーザのメンバIDと、個別アプリ34のモジュールIDが設定される。
個別アプリ34は、Java言語を利用して、ビーコンIFオブジェクトを生成する。ビーコンIFオブジェクトは、IBIモジュール32に含まれるBeaconIfというクラスである。個別アプリ34は、個別アプリ34のメンバIDとモジュールIDを付与してIBIモジュール32を初期化する。
個別アプリ34は、センサからセンサ値を取得する。
個別アプリ34は、センサ値をIBIマイクロサービス26へ送信する際、ビーコンIFオブジェクトのsendSensorNoReply()を呼び出す。センサ値は、HashMap<String,Object>型で指定される。センサ値の例は、param1=0, param2=1.2, param3=test, param4=helloである。
IoTシステムの開発者は、スキーマ情報を生成し、IBIマイクロサービス26に登録する。図15は、この時生成されるスキーマ情報の一例を示す。プロパティとして、アプリケーション名(applicationname)、アプリケーションシリアル番号(applicationserial)、タイムスタンプ、メンバID(memberid)、モジュールID(moduleid)、パラメータ1(param1)~パラメータ4(param4)が記述されている。これにより、IBIマイクロサービス26は、IFアプリである個別アプリ34からのセンサ値を受信することができる。
IBIモジュール32は、センサ値を含むビーコン・パケットをIBIマイクロサービス26へ送信する。図14には示していないが、図11(a)に示したように、IBIモジュール32は、送信間隔Tinterval毎にビーコン・パケットを送信し、ビーコン・パケットの送信開始から一定時間が経過すると、ビーコン・パケットの送信を停止する。
図16は、実施形態による電子装置をTHENアプリ(送達確認無し)に実装した場合のビーコン・パケットの送受信の一例を示すシーケンス図である。ここでは、スマートフォン12がLEDを含み、IBIマイクロサービス26からのジョブ通知に応じて個別アプリ34がLEDを点灯させる、すなわち個別アプリ34がTHENアプリであることを想定する。
スマートフォン12のユーザのメンバIDと、個別アプリ34のモジュールIDが設定される。
個別アプリ34は、Java言語を利用して、ビーコンIFオブジェクトを生成する。ビーコンIFオブジェクトは、IBIモジュール32に含まれるBeaconIfというクラスである。個別アプリ34は、個別アプリ34のメンバIDとモジュールIDを付与してライブラリ(IBIモジュール32)を初期化する。
個別アプリ34は、IBIマイクロサービス26からジョブ通知を受信する際、ビーコンIFオブジェクトのstartScan()を呼び出す。
IBIマイクロサービス26は、ジョブ通知を含むビーコン・パケットをIBIモジュール32へ送信する。図16には示していないが、図13(a)に示したように、IBIマイクロサービス26は、送信間隔Tinterval毎にビーコン・パケットを送信し、ビーコン・パケットの送信開始から一定時間が経過すると、ビーコン・パケットの送信を停止する。
IBIモジュール32がジョブ通知を含むビーコン・パケットを受信すると、個別アプリ34のeventJob()が呼び出される。IBIモジュール32は、eventJob()内にジョブの具体的な処理を実装する。ジョブパラメータは、HashMap<String,Object>型で指定される。ジョブパラメータの例は、param1=0, param2=1.2, param3=test, param4=helloである。
IoTシステムの開発者は、スキーマ情報を生成し、IBIマイクロサービス26に登録する。この時生成されるスキーマ情報の一例は図15の例と同様である。ただし、アプリケーション名がTHENapplication1になる点が異なる。これにより、THENアプリである個別アプリ34は、IBIマイクロサービス26からのジョブ通知を受信することができる。
IBIモジュール32は、ジョブ受信を停止するために、ビーコンIFオブジェクトのstopScan()を呼び出す。
図17は、実施形態による電子装置をIFアプリ(送達確認有り)に実装した場合のビーコン・パケットの送受信の一例を示すシーケンス図である。ここでも、スマートフォン12がセンサを含み、個別アプリ34がセンサ値をifLinkアプリ22に送信する、すなわち個別アプリ34がIFアプリであることを想定する。
スマートフォン12のユーザのメンバIDと、個別アプリ34のモジュールIDが設定される。
個別アプリ34は、Java言語を利用して、ビーコンIFオブジェクトを生成する。ビーコンIFオブジェクトは、IBIモジュール32に含まれるBeaconIfというクラスである。個別アプリ34は、個別アプリ34のメンバIDとモジュールIDを付与してIBIモジュール32を初期化する。
個別アプリ34は、センサからセンサ値を取得する。
個別アプリ34は、センサ値をIBIマイクロサービス26へ送信する際、ビーコンIFオブジェクトのsendSensorWithReply()を呼び出す。センサ値は、HashMap<String,Object>型で指定される。センサ値の例は、param1=0, param2=1.2, param3=test, param4=helloである。
IoTシステムの開発者は、図15に示すようなスキーマ情報を生成し、IBIマイクロサービス26に登録する。これにより、IBIマイクロサービス26は、IFアプリである個別アプリ34からのセンサ値を受信することができる。
IBIモジュール32は、センサ値を含むビーコン・パケットをIBIマイクロサービス26へ送信する。図17には示していないが、図11(b)に示したように、IBIマイクロサービス26は、スキャンを実施し、IBIマイクロサービス26は、ビーコン・パケットを受信すると、IBIモジュール32へビーコン・パケットの受信応答パケットを送信する。送信時間はTdurationである。
IBIモジュール32は、ビーコン・パケットの送信開始から一定時間(2×Tduration)が経過する迄に受信応答パケットを受信すると、個別アプリ34へ送信結果を通知し、ビーコン・パケットの送信を停止する。
IBIモジュール32は、ビーコン・パケットの送信開始から一定時間(2×Tduration)が経過しても受信応答パケットを受信しない場合、IBIマイクロサービス26へビーコン・パケットを再送信する。再送信は、指定回数(Nretry)まで繰り返される。
図18は、実施形態による電子装置をTHENアプリ(送達確認有り)に実装した場合のビーコン・パケットの送受信の一例を示すシーケンス図である。ここでも、スマートフォン12がLEDを含み、IBIマイクロサービス26からのジョブ通知に応じて個別アプリ34がLEDを点灯させる、すなわち個別アプリ34がTHENアプリであることを想定する。
スマートフォン12のユーザのメンバIDと、個別アプリ34のモジュールIDが設定される。
個別アプリ34は、Java言語を利用して、ビーコンIFオブジェクトを生成する。ビーコンIFオブジェクトは、IBIモジュール32に含まれるBeaconIfというクラスである。個別アプリ34は、個別アプリ34のメンバIDとモジュールIDを付与してIBIモジュール32を初期化する。
個別アプリ34は、IBIマイクロサービス26からジョブ通知を受信する際、ビーコンIFオブジェクトのstartScan()を呼び出す。
IBIマイクロサービス26は、ジョブ通知を含むビーコン・パケットをIBIモジュール32へ送信する。
IBIモジュール32は、ジョブ通知を含むビーコン・パケットを受信すると、IBIマイクロサービス26へビーコン・パケットの受信応答パケットを送信する。IBIモジュール32がジョブ通知を含むビーコン・パケットを受信すると、個別アプリ34のeventJob()が呼び出される。IBIモジュール32は、eventJob()内にジョブの具体的な処理を実装する。ジョブパラメータは、HashMap<String,Object>型で指定される。ジョブパラメータの例は、param1=0, param2=1.2, param3=test, param4=helloである。
IoTシステムの開発者は、スキーマ情報を生成し、IBIマイクロサービス26に登録する。この時生成されるスキーマ情報の一例は図15の例と同様である。ただし、アプリケーション名がTHENapplication1になる点が異なる。これにより、THENアプリである個別アプリ34は、IBIマイクロサービス26からのジョブ通知を受信することができる。
個別アプリ34は、ジョブ結果通知をIBIマイクロサービス26へ送信する際、ビーコンIFオブジェクトのsendJobResultWithReply()を呼び出す。ジョブ結果パラメータは、HashMap<String,Object>型で指定される。ジョブ結果パラメータの例は、param1=0, param2=1.2, param3=test, param4=helloである。
IBIモジュール32は、ジョブ結果を含むビーコン・パケットをIBIマイクロサービス26へ送信する。IBIマイクロサービス26は、ビーコン・パケットを受信すると、IBIモジュール32へビーコン・パケットの受信応答パケットを送信する。
IBIモジュール32は、ジョブ受信を停止するために、ビーコンIFオブジェクトのstopScan()を呼び出す。
図19は、実施形態による電子装置の動作をテストするシステムの構成例を示すブロック図である。上述したIBIモジュール32a、32bがスマートフォン12a、12bにインストールされ、IBIマイクロサービス26がエッジコンピュータ10にインストールされる。この状態で、個別アプリ34が正しく動作し、スマートフォン12a、12bとエッジコンピュータ10が互いに通信できることを確認することができる。
図20は、実施形態による電子装置の動作をテストする際のスマートフォン12(例えば、スマートフォン12a)の画面表示の一例を示す。IBIテスタとしてのスマートフォン12aがビーコン・パケットの設定を行う。具体的には、スキャンモードの設定や再送信の繰り返し回数等が設定できる。
スキーマ情報の選択欄で或るスキーマ情報が選択されると、スマートフォン12a内のデータフォルダから或るスキーマ情報が格納されたスキーマファイルがスマートフォン12aに読み込まれる。そのスキーマ情報で送信したいパラメータの設定画面が表示される。
パラメータが入力され、Publishボタンが押されると、指定した送信回数、ビーコン・パケットが他の電子装置、すなわちスマートフォン12bとエッジコンピュータ10に送信される。他の電子装置は、ビーコン・パケットを受信すると、送達確認メッセージをスマートフォン12aへ送信する。スマートフォン12aは、送達確認メッセージを受信すると、「Received by XXXX」のような表示を行う。
スマートフォン12aは、他の電子装置から受信したデータの表示部を有する。受信したデータを表示することにより、他の電子装置が送信しているデータが正しいかを確認することができる。
図21は、実施形態による電子装置を含むIoTシステムの他の例を示す。IoTシステムは、クラウドサーバ18と、エッジコンピュータ10と、実空間上のモジュール(デバイス)102と、サイバ空間上のモジュール(サービス)104を含む。クラウドサーバ18は、ルール情報を記憶する。エッジコンピュータ10は、クラウドサーバ18からダウンロードしたルール情報をルールメモリ30に格納し、ルール情報に基づいてモジュール102、104を連携させる。
モジュール102、104は、エッジコンピュータ10に接続される。モジュール102とエッジコンピュータ10との接続には、無線接続が利用される。無線接続の例は、ブルートゥース、携帯電話回線、Wi-Fi等がある。
クラウドサーバ18とエッジコンピュータ10とは、ネットワーク108を介して互いに通信可能な構成となっている。ネットワーク108は有線ネットワークでも無線ネットワークでもよい。エッジコンピュータ10とネットワーク108との接続及びクラウドサーバ18とネットワーク108との接続は、無線でも有線でもよい。無線接続の例は、ブルートゥース、携帯電話回線、Wi-Fi等がある。有線接続の例は、有線LAN等がある。
図21では、一つのエッジコンピュータ10が示されているが、多数のエッジコンピュータがクラウドサーバ18と通信可能であってもよい。
実空間上のモジュール102の例は、これらに限定されないが、センサ102a、ビーコンデバイス102b、家電102c、スマートフォン(タブレット等の携帯端末も含む)12、HMD(head mounted display)102d、IoT機器102e及びGPS衛星102fを含む。実空間上のモジュール102の全体又はその一部はエッジコンピュータ10の外に配置され、通信回線を介してエッジコンピュータ10に接続されてもよい。あるいは、実空間上のモジュール102の全体又はその一部はエッジコンピュータ10に内蔵されてもよい。内蔵されるモジュール102の例は、これらに限定されないが、温度センサ、圧力センサ及びジャイロを含む。
サイバ空間上のモジュール104の例は、これらに限定されないが、Webサービスサーバ16やIoTサービスサーバ104aを含む。
エッジコンピュータ10は、モジュール102、104の各モジュールを個々に制御する専用ソフトウェアであるマイクロサービスを含む。
マイクロサービス(Micro-service) は、オブジェクト指向のプログラミング言語を用いたプログラムで形成した制御手段を意味する。このマイクロサービスの制御対象(object)は上述したようにデバイスに限らず、処理やコンテンツ、情報/データが含まれる。従って例えば、Web頁間の遷移制御や特定Web頁に対応した画面操作などの制御を行うためのAI技術を用いたプログラムソフトも、マイクロサービスの一種あるいはその中の一部に含まれる。同様にAI技術を用いて例えば特定の映像コンテンツ内に登場する人物の人数を自動抽出するプログラムソフトや、取得データを(例えば統計解析などを利用した)解析するプログラムソフトも、マイクロサービスの一種あるいはその中の一部に含まれる。ここで解析した結果得られた情報やその情報を保存する記録装置は、人間が認識可能な実体/状態/情報として扱われる。また、マイクロサービスは、制御手段の一形態なので、上述したように、マイクロサービスをインストールすることで、エッジコンピュータ10やクラウドサーバ18に拠る制御対象(人間が認識可能な実体/状態/情報)の制御が可能となる。ここで、この“ソフト形態”で詳細手順を規定する場合、Java言語やオブジェクティブC(Objective-C)言語などのオブジェクト指向のプログラミング言語を用いたプログラムで制御手段を形成すると、既作成プログラム資産の有効活用(他プログラム内での組み込み(import)や呼び出し(APIコマンド発行)など)が行える。さらに、OS(operating system)非依存のJava言語でプログラムを記述すると、制御手段としての汎用性が向上する。
マイクロサービスの例は、これらに限定されないが、センサ102a用のセンサマイクロサービス122a、ビーコンデバイス102b用のビーコンマイクロサービス122b、家電102c用の家電連携マイクロサービス122c、スマートフォン12用のIBIマイクロサービス26、HMD102d用のHMDマイクロサービス122d、IoT機器102e用のIoT機器マイクロサービス122e、GPS衛星102f用のGPSマイクロサービス122f、Webサービスサーバ16用のWebサーバ用マイクロサービス16及びIoTサービスサーバ104a用のIoTサーバ用マイクロサービス124を含む。
GPSマイクロサービス122fは、GPS衛星102fから得られたGPS位置情報を取得する。GPS衛星102fは、計測精度の高いRTK-GNSSを含んでもよい。
IoTサーバ用マイクロサービス124は、IoTサービスサーバ104aと連携制御する。さらに、エッジコンピュータ10には、IoTサーバ用マイクロサービス124に限らず、図示してないサイバ空間上で利用可能なあらゆるサービスに個々にアクセスできるマイクロサービスが、Webサーバ用マイクロサービス16と同列に組み込まれてもよい。サイバ空間上のサービスの例としては、これらに限定されないが、証券(特定銘柄の株)の自動売買や特定商品の発注と受け取った商品代金の自動振り込み(課金処理)、映画や音楽の鑑賞券の購入申し込み、旅行等の予約申し込み等のユーザサービスがある。
このようにサイバ空間上の各種サービスに個々にアクセスできるマイクロサービスをエッジコンピュータ10内に組み込むと、サイバ空間上の異なるサービス間をつなげた豊富な連携サービスをユーザが享受できる。
実空間上のモジュール102を制御するマイクロサービス26、122a~122fがWebサーバ用マイクロサービス28と同列にエッジコンピュータ10に組み込まれることで、実空間上のモジュール102が提供するサービス(有体物によるサービス)とサイバ空間上のモジュール104が提供するサービス(無体物によるサービス)をシームレスに違和感なく跨った高度な連携サービスをユーザに提供可能となる。この高度な連携サービスを提供するための“各種サービス間の組み合わせ方法”は、ルール情報で規定される。なお、無体物によるサービスとしては、治療方法、計算方法、情報取得方法、予約情報、教育情報、おすすめ情報等がある。
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を生成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。