(57)【要約】  コントローラベース遠隔ソリューションを作成および管理するための方法および装置が提供される。方法は、コード仮想化サーバ(CVS)において、GUIから、センサーおよび/またはアクチュエータと通信可能に接続されるとともにそれらを制御するように動作可能なコントローラを含むソリューションの入力、センサーおよび/またはアクチュエータにおける条件、条件が満たされるとコントローラが実行するためのアクション、ならびにソリューションの少なくとも1つのパラメータを受信することを含む。コントローラのプログラム(AGCP)は、入力ソリューションに基づいてCVSで自動的に生成される。プログラムは、条件が満たされるかどうかをチェックするための、かつ条件が満たされるときにアクションを実行するためのコードを含む。AGCPは、ユーザデバイスの記憶域にダウンロードされるか、またはインストールするために少なくとも1つのコントローラに送信される。
2019503549.tif 000002
【特許請求の範囲】
【請求項１】
コントローラベース遠隔ソリューションを作成および管理するためのコンピュータ実施方法であって、
コード仮想化サーバ(CVS)において、前記CVSにとって遠隔のユーザデバイスのグラフィカルユーザインターフェース(GUI)から、前記GUIで設計されたソリューションの入力を受信するステップであって、前記ソリューションが、
センサーまたはアクチュエータのうちの少なくとも1つと通信可能に接続されるとともにそれらを制御するように動作可能な少なくとも1つのコントローラであって、前記CVSおよび前記ユーザデバイスにとって遠隔にある少なくとも1つのコントローラ、
前記センサーまたは前記アクチュエータのうちの前記少なくとも1つにおける条件、
前記少なくとも1つのコントローラによる実行のためのアクションであって、前記条件が満たされると実行されるアクション、および
前記ソリューション用の少なくとも1つのパラメータを含む、ステップと、
前記少なくとも1つのコントローラでの実行のためのプログラムを、前記入力ソリューションに基づいて前記CVSで自動的に生成するステップであって、前記プログラムが、前記条件が満たされるかどうかをチェックするための、かつ前記条件が満たされるときに前記アクションを実行するためのコードを含む、ステップと、
前記CVSから前記ユーザデバイスの記憶域に、自動的に生成されたコントローラプログラム(AGCP)をダウンロードするか、または前記少なくとも1つのコントローラにインストールするために、前記CVSから前記少なくとも1つのコントローラに前記AGCPを送信するステップと
を含む方法。
【請求項２】
コントローラ、センサー、アクチュエータ、条件、アクション、または前記CVSのソリューションライブラリに記憶されたあらかじめ定義されたソリューションテンプレートのうちの少なくとも1つの識別子を、前記GUIでの表示のために前記CVSから前記ユーザデバイスに送信するステップをさらに含み、
前記ソリューションが、あらかじめ定義されたソリューションテンプレートから選択されるか、または、前記ソリューションが、前記少なくとも1つのコントローラ、前記センサーもしくは前記アクチュエータのうちの前記少なくとも1つ、前記条件、前記アクション、前記少なくとも1つのパラメータ、またはそれらの間の関係のうちの1つまたは複数を個別に定義することによって構築される、請求項1に記載の方法。
【請求項３】
前記少なくとも1つのコントローラ、前記少なくとも1つのセンサーもしくは前記アクチュエータ、前記少なくとも1つの条件、前記アクション、または前記パラメータのうちの少なくとも1つのためのステータス情報を、前記少なくとも1つのコントローラに要求するステップと、
要求された前記ステータス情報を受信するステップと、
前記少なくとも1つのコントローラ、前記少なくとも1つのセンサーもしくは前記アクチュエータ、前記少なくとも1つの条件、前記アクション、または前記パラメータのうちの少なくとも1つのステータス情報を求める要求を前記GUIから受信するステップと、
前記GUIにおける表示のために、要求された前記ステータス情報を前記ユーザデバイスに送信するステップと
をさらに含む、請求項1に記載の方法。
【請求項４】
前記少なくとも1つのコントローラ、前記少なくとも1つのセンサーもしくは前記アクチュエータ、前記少なくとも1つの条件、前記アクション、または前記パラメータのうちの少なくとも1つの修正のための入力を、前記GUIから前記CVSにおいて受信するステップであって、前記修正が前記AGCPの変更を必要とする、ステップと、
修正された前記入力に基づいて前記AGCPを自動的に修正または再生成するステップと、
前記コントローラにインストールするために、修正または再生成された前記AGCPを前記少なくとも1つのコントローラに送信するステップと
をさらに含む、請求項3に記載の方法。
【請求項５】
前記パラメータの修正のための入力を前記GUIから前記CVSにおいて受信するステップであって、前記修正が前記AGCPの修正または再生成を必要としない、ステップと、
前記修正に基づいて前記少なくとも1つのパラメータを自動的に更新するステップと
をさらに含み、
前記パラメータの前記修正が、前記少なくとも1つのコントローラ、または前記センサーもしくは前記アクチュエータのうちの前記少なくとも1つにおける構成の変更に関係しない、請求項3に記載の方法。
【請求項６】
前記AGCPが、前記少なくとも1つのコントローラでの実行に適した言語で自動的に生成される、請求項1に記載の方法。
【請求項７】
前記少なくとも1つのコントローラが、入力または出力のうちの少なくとも1つを含み、前記方法が、前記入力または前記出力のうちの前記少なくとも1つへの前記少なくとも1つの条件の割当てを受信するステップをさらに含む、請求項1に記載の方法。
【請求項８】
前記少なくとも1つの遠隔コントローラでの前記AGCPの実行をテストするステップと、
前記GUIでの表示のために、前記テストの結果を前記ユーザデバイスに送信するステップと
をさらに含む、請求項1に記載の方法。
【請求項９】
前記GUIでの表示のために、前記CVSのプロセスライブラリに記憶された少なくとも1つの関数の定義を前記ユーザデバイスに送信するステップをさらに含み、
前記ソリューションが、前記少なくとも1つのコントローラにとって遠隔で実行されるために前記少なくとも1つのコントローラによって呼び出されるための関数をさらに含み、
前記少なくとも1つのコントローラでの実行のためのプログラムを自動的に生成する前記ステップが、前記関数を前記CVSで実行するための、前記少なくとも1つのコントローラからの前記CVSへの遠隔呼出しを、前記AGCPの中に組み込むステップを含み、
前記アクションが、前記遠隔呼出しを発すること、センサーデータもしくはアクチュエータデータを表示のために前記GUIに送信すること、または前記アクチュエータを動作させることのうちの少なくとも1つを含む、請求項1に記載の方法。
【請求項１０】
前記関数を実行するための前記遠隔呼出しを、前記少なくとも1つのコントローラから前記CVSにおいて受信するステップと、
前記関数を前記CVSで実行するステップと、
前記関数の前記実行からのデータを前記少なくとも1つのコントローラに送信するステップと
をさらに含む、請求項9に記載の方法。
【請求項１１】
前記関数を実行する前記ステップが、遠隔サービスをプロビジョニングするステップをさらに含み、前記遠隔サービスが、前記少なくとも1つのコントローラまたは前記CVSによって提供されるサービス以外のサービスである、請求項10に記載の方法。
【請求項１２】
コントローラベース遠隔ソリューションを作成および管理するための装置であって、
プロセッサと、
前記プロセッサを使用して実行されたとき、方法を実施する実行可能命令を備えるメモリと
を備え、前記方法が、
コード仮想化サーバ(CVS)において、前記CVSにとって遠隔のユーザデバイスのグラフィカルユーザインターフェース(GUI)から、前記GUIで設計されたソリューションの入力を受信するステップであって、前記ソリューションが、
センサーまたはアクチュエータのうちの少なくとも1つと通信可能に接続されるとともにそれらを制御するように動作可能な少なくとも1つのコントローラであって、前記CVSおよび前記ユーザデバイスにとって遠隔にある少なくとも1つのコントローラ、
前記センサーまたは前記アクチュエータのうちの前記少なくとも1つにおける条件、
前記少なくとも1つのコントローラによる実行のためのアクションであって、前記条件が満たされると実行されるアクション、および
前記ソリューション用の少なくとも1つのパラメータを含む、ステップと、
前記少なくとも1つのコントローラでの実行のためのプログラムを、前記入力ソリューションに基づいて前記CVSで自動的に生成するステップであって、前記プログラムが、前記条件が満たされるかどうかをチェックするための、かつ前記条件が満たされるときに前記アクションを実行するためのコードを含む、ステップと、
前記CVSから前記ユーザデバイスの記憶域に、自動的に生成されたコントローラプログラム(AGCP)をダウンロードするか、または前記少なくとも1つのコントローラにインストールするために、前記CVSから前記少なくとも1つのコントローラに前記AGCPを送信するステップと
を含む、装置。
【請求項１３】
前記方法が、
前記少なくとも1つのコントローラ、前記少なくとも1つのセンサーもしくは前記アクチュエータ、前記少なくとも1つの条件、前記アクション、または前記パラメータのうちの少なくとも1つのステータス情報を求める要求を前記GUIから受信するステップと、
前記GUIにおける表示のために、要求された前記ステータス情報を前記ユーザデバイスに送信するステップと
をさらに含む、請求項12に記載の装置。
【請求項１４】
前記方法が、
前記少なくとも1つのコントローラ、前記少なくとも1つのセンサーもしくは前記アクチュエータ、前記少なくとも1つの条件、前記アクション、または前記パラメータのうちの少なくとも1つの修正のための入力を、前記GUIから前記CVSにおいて受信するステップと、
前記修正が前記AGCPの変更を必要とする場合、修正された前記入力に基づいて前記AGCPを修正または再生成し、前記コントローラにインストールするために、修正または再生成された前記AGCPを前記少なくとも1つのコントローラに送信すること、または
前記修正が前記AGCPの変更を必要としない場合、前記修正に基づいて前記少なくとも1つのパラメータを更新すること
のうちの1つを自動的に実施するステップと
をさらに含む、請求項13に記載の装置。
【請求項１５】
前記AGCPが、前記CVSで関数を実行するために、前記少なくとも1つのコントローラから前記CVSに遠隔呼出しを発するためのコードを含み、前記アクションが、前記遠隔呼出しを発することのうちの少なくとも1つを含み、前記方法が、
前記関数を実行するための前記遠隔呼出しを、前記少なくとも1つのコントローラから前記CVSにおいて受信するステップと、
前記関数を前記CVSで実行するステップと、
前記関数の前記実行からのデータを前記少なくとも1つのコントローラに送信するステップと
をさらに含む、請求項12に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、一般に、コントローラベース遠隔ソリューションを作成および管理するための方法および装置に関する。
【背景技術】
【０００２】
フィールドプログラマブルゲートアレイ(FPGA)、およびMCU、SoC、モバイルフォン、コンピュータなどの他のコントローラベース(たとえば、マイクロコントローラベースまたはマイクロプロセッサベース)デバイスの使用が、かなり普及している。コントローラの低い製造コスト、利用可能性、およびカスタマイゼーションは、急増するマイクロコントローラおよびシステムオンチップ(SoC)(たとえば、PIC、ARDUINO、RASPBERRY PIなど)が、デバイスの作成用と同様に営利会社および趣味人によって使用されることをもたらしている。コントローラベースデバイスは、電子デバイスまたは周辺デバイスと通信して入力/出力データを処理することに関してプログラム可能なプロセッサコアおよびメモリを含む。NOR FLASHまたはOTP ROMの形態でのプログラムメモリも、しばしば、そのようなコントローラベースデバイス上に含まれ、少量のランダムアクセスメモリ(RAM)も同様である。いくつかのそのようなコントローラベースデバイスは、より大型のデバイス内の組込みアプリケーションのために設計される。そのようなコントローラベースデバイスの実世界アプリケーションは、コントローラベースデバイスを、周辺装置としての実世界オブジェクトまたは実世界システムと接続することを潜在的に含むことができ、それによって、そのような周辺装置のデジタル化、接続性、および遠隔制御さえ可能にする。しかしながら、クラウド技術をハードウェア技術およびソフトウェア技術と組み合わせることの複雑さに起因して、そのような実世界アプリケーションを作る際にいくつかの課題が存在する。
【０００３】
一般に、コントローラベースデバイスまたはそれらのグループをプログラムすることは、非常に複雑である。さらに、そのようなコントローラベースデバイス(または、「コントローラデバイス」もしくは「コントローラ」)が、従来システム、たとえば、様々なアクチュエータおよびセンサーを実世界制御するために使用されるとき、そのようなコントローラをプログラムすることは、なお一層複雑である。「モノのインターネット(IoT)」が発展するにつれて、ますます多くのそのようなコントローラベースデバイスが互いに、かつ/またはインターネットに接続され、プログラミングの複雑さを著しく増大させる。実世界シナリオでは、そのようなコントローラベースデバイスは、互いに、かつ/またはゲートウェイに通信してよく、その結果、ゲートウェイが、いわゆるエッジデバイスのためのインターネット通信用のプロキシになる。エッジデバイスは、1つもしくは複数のゲートウェイを通じて、または独立型デバイスとして直接、通信し得る。グループ内では、すべてのデバイス(ゲートウェイおよびエッジ)は、相互運用性を容易にするために互換性のある方式でプログラムされなければならず、そのことは、さらにそのようなデバイスをプログラムすることの複雑さを著しく増大させる。さらに、カスタマイゼーションが実施されるたびに互換性を管理することはまた、過度に時間がかかることがある。コーディングコマンドを記憶すること、階層を理解すること、適切な呼出しシンタックスを利用することなどを行わなければならないので、コントローラベースデバイスのグループをプログラムすることは、ユーザにとって極めて厄介である。1つのデバイスが間違ってプログラムされても、そのコントローラベースデバイスまたはグループの中の別のコントローラベースデバイスのために書かれたプログラムは動作しないことがあり、またはエラーを生じることがある。
【０００４】
したがって、コントローラベースデバイスのグループに対して自動的にプログラミングを行いながらコントローラベースデバイスのためのプログラミングを簡略化することが、当技術分野において必要である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第8,726,285号明細書
【特許文献２】米国特許第9,235,383号明細書
【特許文献３】米国特許第9,239,705号明細書
【特許文献４】米国特許第9,436,439号明細書
【特許文献５】米国特許出願公開第2009/0070121号明細書
【特許文献６】米国特許出願公開第2009/0070162号明細書
【特許文献７】米国特許出願公開第2015/0199088号明細書
【特許文献８】米国特許出願公開第2015/0286362号明細書
【特許文献９】米国特許出願公開第2016/0327925号明細書
【特許文献１０】米国特許出願公開第2016/0328216号明細書
【発明の概要】
【課題を解決するための手段】
【０００６】
本発明の実施形態は、一般に、実質的に図面のうちの少なくとも1つに関して図示および/または説明し、特許請求の範囲においてより完全に記載するような、コントローラベース遠隔ソリューションを作成および管理するための方法および装置に関する。
【０００７】
本開示のこれらおよび他の特徴および利点は、同様の参照番号が全体を通して同様の部分を指す添付図とともに、本開示の以下の発明を実施するための形態の検討から諒解され得る。
【０００８】
上記で具陳した本発明の特徴が詳細に理解され得るように、上記で簡単に要約した本発明のより詳細な説明が、実施形態への参照によって行われることがあり、そのうちのいくつかが添付の図面に示される。しかしながら、添付の図面は、本発明の典型的な実施形態のみを示し、したがって、本発明が他の等しく効果的な実施形態を認め得るので、その範囲の限定と見なされるべきでないことに留意されたい。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施形態による、コントローラベース遠隔ソリューションを作成および管理するための装置のブロック図である。
【図２】本発明の一実施形態による、図1のコード仮想化サーバのブロック図である。
【図３】本発明の一実施形態による、図1のコード仮想化サーバによって実行されるような、遠隔ソリューションを作成および管理するための方法のフロー図である。
【図４】本発明の一実施形態による、図1のコード仮想化サーバによって実行されるような、遠隔ソリューションを管理するための方法のフロー図である。
【図５】本発明の一実施形態による、コントローラデバイス、コード仮想化サーバ、および遠隔サービスにおける遠隔ソリューションの動作のための方法を示すフロー図である。
【図６】本発明の一実施形態に従って作成および管理される遠隔ソリューションを示す図である。
【発明を実施するための形態】
【００１０】
本発明の実施形態は、コントローラベース遠隔ソリューションを作成および管理するための、より詳細には、アプリケーションシステム(たとえば、水槽、冷蔵庫など)の中に展開されるコントローラデバイス(たとえば、特にマイクロコントローラ、マイクロプロセッサ、SoC、MCUなどのコントローラを有するデバイス)を内蔵する遠隔ソリューションを作成、展開、および管理するための、方法および装置に関する。コントローラデバイスは、センサーおよびアクチュエータを使用してアプリケーションシステムを監視および制御するように動作可能である。本発明の実施形態は、ユーザにとって利用可能なグラフィカルユーザインターフェース(GUI)を使用して、ユーザが、1つもしくは複数のコントローラまたはコントローラのグループにわたって分散されるいくつかのアプリケーションを備えるソリューションを構築すること、およびソリューションを動作可能にするためにコントローラ用のプログラムを自動的に生成することを可能にする。ソリューションのアプリケーションは、たとえば、センサーまたはアクチュエータにおいてアプリケーションシステムに関する指定された条件が満たされるとコントローラによって実行される1つまたは複数のアクションを含む。
【００１１】
ソリューションは、あらかじめ定義されたソリューションテンプレートをGUI上で選択することによって構築される。代替として、ソリューションはまた、空白のテンプレートから始めて、アプリケーションシステム、アクション、コントローラによるアクションをトリガするための条件、コントローラ、アクチュエータ、センサー、およびアプリケーションシステムの間の接続性、またはソリューション用のパラメータを監視および制御するための、コントローラ、アプリケーションシステム、アクチュエータ、およびセンサーのうちの1つまたは複数の詳細を識別または定義することによって、GUIの中で構築されてよい。ソリューション用のパラメータは、コントローラ、アプリケーションシステム、条件、アクション、アクチュエータ、センサー、接続性(接続プロファイル、接続パラメータ、プロトコル)の、動作に関係するパラメータのうちの1つまたは複数、およびコントローラ用のプログラムの実行にとって必要とされる他の動作情報を含み得る。設計されたソリューションに基づいて、アプリケーションシステムの中に展開されるコントローラ用のプログラムは、コード仮想化サーバ(CVS)上のコード生成器(SDK生成器とともに機能してよく、またはSDK生成器を含んでよい)によって自動的に生成され、自動生成コントローラプログラム(AGCP)と呼ばれる。
【００１２】
たとえば、GUIを使用して、ユーザは、あらかじめ定義されたソリューションを選択し、または水槽、冷蔵庫、もしくはボイラーシステムなどのためのコントローラベースソリューションなどの、ソリューションを構築する。ユーザは、関連するコントローラデバイス(コントローラ、およびあらかじめ定義されたソリューションを動作可能にするための、特にセンサー、アクチュエータなどの他のハードウェアを含む)をGUI上で識別し、コントローラデバイス、アプリケーションシステム、およびAGCPを動作させるためのパラメータをさらに提供する。コントローラデバイスに適した言語で、かつコントローラデバイスの処理能力に従って、コントローラデバイス用のAGCPを作成するために、ユーザデバイス上のGUIにおいて受け取られたこれらの入力がCVSに送信される。AGCPは、GUIを介して受け取られたユーザ入力に基づいて集約された既定のプログラムコードを含む。AGCPを実行するためのパラメータはまた、GUI上でユーザによって入力されCVSにおいて受信されてよい。AGCPは、次いで、コントローラデバイス上に展開され、それによって、設計されたソリューションを実施する。いくつかの実施形態では、AGCPと一緒に、AGCPを実行するのを支援するためのソフトウェア構成要素、たとえば、SDKも生成され、そのような構成要素は、AGCPの中に含められるか、コントローラデバイス上に個別に展開されるか、またはコントローラデバイスにとって遠隔にあるがアクセス可能なデバイス上に展開される(すなわち、構成要素が仮想化され得る)。
【００１３】
ソリューションは、既定の時間間隔で、イベントの発生時に、または定義された他の条件で、ステータス更新をリアルタイムでGUIに送信することなどの、追加の機能を含んでよく、展開されたソリューションの遠隔監視を可能にする。さらに、GUIを使用して、ユーザは、設計されたソリューションの任意の部分に修正を加えてよく、AGCPの修正または再生成を引き起こしてよく、そのような修正または再生成されたAGCPをコントローラに再展開してよく、それによって、設計されたソリューションまたは実装されたソリューションを修正する。そのような修正は、ライブ(live)で実施されてよく、すなわち、AGCPの修正または再生成は、修正が指定されるとすぐに実行される。場合によっては、必要とされる修正が、コントローラハードウェアに関係する条件を変化させず、そのような修正は、AGCPの修正または再生成を必要としない。
【００１４】
さらに、AGCPはまた、コントローラにとって遠隔のデバイス上で実行されるべき仮想プログラムへの遠隔呼出しを含んでよく、AGCPの設計された機能の一部が、AGCPを実行するコントローラ上ではなく仮想的に実行されるので、要するにAGCPの一部を仮想化する。コントローラが実行するにはそのような機能が資源集約的すぎることがあるので、AGCPの機能が抽象化または仮想化されて仮想プログラムになる。場合によっては、コントローラがそのような機能を実行することに「対処」できても、当業者が見いだすことになるようないくつかの理由の中でも、そのような機能をコントローラから切り離して抽象化すること、たとえば、より良い信頼性のために、1つではなく複数のコントローラへのそのような機能のプロビジョニングが、場合によっては望ましいことがある。遠隔デバイスは、AGCPを自動的に生成するデバイスと同じかまたは異なってよい。説明を簡単にするために、デバイスはコード仮想化サーバ(CVS)と呼ばれ、仮想プログラムはCVSプログラム(CVSP)と呼ばれることがあり、CVSプログラムは、CVSに記憶され、AGCPを実行するコントローラからの遠隔呼出しをCVSにおいて受信すると実行される。AGCPはまた、遠隔サービスを直接またはCVSPを介してプロビジョニングするためのコードを含み得る。CVSPを介して遠隔サービスをプロビジョニングするとき、CVS上でのCVSPの実行が遠隔サービスのプロビジョニングを引き起こす。遠隔サービスは、CVSまたはコントローラ以外のデバイスによって提供されるサービスである。
【００１５】
アプリケーションシステムの中でのいくつかのコントローラの展開は、所望のソリューションを実施するようにそのようなコントローラをプログラムする観点から、またさらにそのようなソリューションを監視、修正、および別の方法で管理する際に、著しい課題を生じる。詳細には、アプリケーションシステムの異なる構成要素が、アプリケーションシステムを制御するために、異なるアクチュエータおよびセンサーなどの異なる周辺デバイスまたは電子デバイスを必要とすることになる。したがって、そのようなアクチュエータおよびセンサーを制御するためのコントローラは、そのような差異に従ってプログラムされる必要があることになり、そのようなアプリケーションシステム用のソリューションを生成することの複雑さをさらに増大させる。そのようなプログラミングおよび保守の課題は、一般人にとって特に圧倒的であることになる。本明細書で説明する実施形態は、GUIインターフェースをユーザに提供し、アプリケーションシステムの中に展開されるコントローラベース遠隔ソリューションを、単純かつ効果的な方式で生成、監視、修正、および別の方法で管理することを比較的簡単にする。
【００１６】
同一出願人による2011年1月28日に出願された米国特許第8,726,285号、2014年6月17日に出願された第9,235,383号、2014年6月17日に出願された第9,239,705号、2014年6月17日に出願された第9,436,439号、ならびに2007年9月11日に出願された米国特許出願公開第2009/0070121号、2007年9月11日に出願された第2009/0070162号、2015年1月9日に出願された第2015/0199088号、2015年4月13日に出願された第2015/0286362号、2016年3月8日に出願された第2016/0327925号、および2016年5月6日に出願された第2016/0328216号は、その各々が参照によりその全体が本明細書に組み込まれ、コントローラを内蔵するコントローラデバイス用のソフトウェアを開発し、センサーまたはアクチュエータなどのハードウェアの使用を、グラフィカルユーザインターフェースを使用して遠隔でコントローラにマッピングし、定義されたワークフローを介してそのようなコントローラデバイスの能力を拡張するために、たとえば、遠隔でソフトウェアを実行するための技法を記載している。
【００１７】
これらの技法は、コードおよび/またはライブラリの断片をコントローラデバイスのメモリの中に入れることによって機能し、断片は、実行されたとき、1つもしくは複数の何らかのプロセスがコード仮想化サーバ上で実行されるための呼出しを送信し、かつ/または遠隔サービスプロバイダに(直接またはコード仮想化サーバを経由して)データを送信し、かつ/またはデータに対して遠隔サービスプロバイダによって遠隔で実行されるべき関数をさらに呼び出す。本発明の実施形態は、従来の遠隔システムに接続された少なくとも1つのコントローラデバイスを備えるコントローラベース遠隔ソリューションを作成および管理(すなわち、監視および制御)するために、これらの技法を使用する。そのような実施形態を用いると、動的な環境のために、たとえば、コントローラに接続された従来のアプリケーションシステムのために、遠隔ソリューションが作成され得る。様々な実施形態は、コード仮想化サーバにとって遠隔のユーザコンピュータ(すなわち、コードがその上で作成されるとともに部分的に実行され得る「コーディングサーバ」)、コントローラデバイス、およびアプリケーションシステムを使用するユーザによって、特に、コードを変更すること、コードのために入力すること、必要とされる出力を変更すること、コントローラとの使用のために追加の電子デバイス(たとえば、センサー、アクチュエータなど)を構成すること、またはソリューションの構成を変更することを可能にする。
【００１８】
本明細書で使用する「アプリケーションシステム」という用語は、アクチュエータを使用してコントローラデバイスの出力によって制御可能であり、かつセンサーを使用してコントローラデバイスへの入力を介して監視され得る、実世界システムまたは実世界アプリケーションを含む。そのようなアプリケーションシステムは、貯水タンク、ボイラー、冷蔵システムなどの、従来知られているシステムを含み、時々、「従来システム」と呼ばれることもあり、「従来システム」は「アプリケーションシステム」という用語と互換的に使用される。そのような「アプリケーションシステム」は、将来設計され得るシステムを含み、本明細書で説明する技法に従って、センサーまたはアクチュエータを介してそのようなシステムを監視および制御するために、アプリケーションシステムにビルトインまたはアプリケーションシステムにインストールされたコントローラデバイスを利用することができる。
【００１９】
説明する以下の実施形態では、「プロセス」または「プログラム」すなわちAGCPとは、コンテキストから明らかでない限り、実行コントローラデバイスまたはコンピュータ(たとえば、テストするためのサーバ、パーソナルコンピュータ、モバイルデバイスなど)にすでに展開されている、すぐ動作できるコードベースのまたは既定の、プログラムコードを指すものとする。各プロセスは、名称、プロセスID、アイコン、または他の識別子によって、ユーザに対して固有に識別される。「実行」とは、コントローラデバイス上または(局所的なもしくは遠隔の、またはクラウドベースの)コンピュータ上でのプロセスの起動を指すものとする。「バンドル」とは、共通属性(API名、共通パラメータ、SDK、パラメータ名、遠隔サーバなど)によって編成されたプロセスの集合を指すものとする。本明細書で説明する例は、範囲を限定するものでなく、むしろ説明目的のために特定の実施形態を区別する。
【００２０】
本明細書で説明する技法の一例として、アプリケーションシステムは、住宅用雨水採取アプリケーションにおける水槽システムであり、給水グリッド(たとえば、水道事業)との間で供給を制御するためのポンプを含む。たとえば、槽の中の水位が十分である(すなわち、あらかじめ定義されたしきい値を上回る)場合、グリッドからの追加の水が使用されないが、水位がしきい値レベルを下回る場合、槽をしきい値レベルまで満たすためにグリッドからの追加の水が使用されることが望ましいことがある。そのような動作は、水槽、グリッド、およびポンプとともに機能するセンサーおよびアクチュエータが、それらにインストールされることによって成し遂げられる。遠隔のコントローラベース管理ソリューションを作成するために、ユーザは、コントローラ、水位センサー、ポンプ、およびポンプ用のアクチュエータにとって適切なハードウェア構成を設計し、正しい接続を用いてハードウェアを構成し、コントローラごとにプログラムを生成し、そのようなプログラムの実行のために正しいパラメータを供給する必要がある。本発明の実施形態は、ユーザがソリューションを作成および/または修正することを可能にするGUIベースシステムを提供する。
【００２１】
より詳細には、本発明の実施形態は、ユーザがアクセス可能な、ユーザデバイス上のGUIを提供し、特定のソリューションを選択するために、コード仮想化サーバにおいて記憶されたいくつかのソリューションテンプレートを、たとえば、GUIを通じてユーザに提示し、この例では、ユーザは水槽を選択する。いくつかの実施形態では、水槽ソリューションが利用可能でない場合には水槽に最も近いソリューションが選択され、またはGUIにおいてユーザに提示されるいくつかの問合せ(たとえば、コード仮想化サーバにおいて記憶されている)に対する、GUIにおいてユーザによって提供される応答に基づいて、ソリューションがユーザに提案される。いくつかの実施形態では、ユーザは、ソリューションのすべての構成要素を個別に定義し、要するに空白のテンプレートからソリューションを構築する。
【００２２】
いくつかの実施形態によれば、槽の中の水位に基づいてポンプまたはグリッド給水部を作動させることができる水槽ソリューションを選択すると、水槽ソリューションの所望の構成がユーザに提示される。たとえば、水槽ソリューションは、水槽およびポンプとは別に、水槽の中の水のレベルを示すための水位センサー、ポンプを制御するためのアクチュエータを備え、アクチュエータ機能は、開始、停止、および変速を含む。水槽ソリューションは、水位センサー、ポンプ、ポンプ用のアクチュエータ、ネットワーク、および随意にゲートウェイデバイスの間に、ワイヤレス接続または有線接続を確立するための、通信デバイスをさらに含む。インストールされた場合、ゲートウェイデバイスは、一方の側でネットワークと、かつ他方の側で水位センサーおよびポンプアクチュエータとインターフェースする。いくつかの実施形態では、GUIは、ユーザが、たとえば、コントローラ上の所望のピンにマッピングすべきセンサーの出力を指定するとともに、センサーからコントローラによって受信される読取値のタイプ(たとえば、温度または光強度、単位、データフォーマットなどの、入力タイプ)を指定して、アプリケーションシステムのデバイス(ポンプ、センサー)とコントローラとの間の接続をグラフィカルに指定することを可能にする。同様に、ポンプ用のアクチュエータを制御し、またはポンプがデジタル制御装置(アクチュエータとして機能する)を備える場合にはポンプを直接制御するために、コントローラのピンおよびピンの出力タイプがマッピングされ得る。このようにして、ユーザは、GUIにおいてユーザが視認できる遠隔水槽ソリューションを定義する。いくつかの実施形態によれば、あらかじめ定義されたソリューションテンプレートを選択すると、そのようなすべての構成が自動的に定義されGUIにおいて提示される。いくつかの実施形態によれば、GUIは、必要とされるソリューションを決定するために、質問の対話式のセットをユーザに提示し得、ソリューションの要件の中でも、コントローラ、センサー、アクチュエータなどの必要とされるデバイス、それらの間の接続、条件、およびアクションを識別し得る。ユーザは、質問に返答し得るとともにソリューションを設計し得、設計されたソリューションをさらに使用して、必要とされるハードウェアを組み立ててよく、ソリューションのための必要とされる構成を完成させ得る。いくつかの実施形態によれば、ユーザデバイスはCVSと通信し、CVSは、あらかじめ定義されたソリューションテンプレート、ソリューションの個々の構成要素、ソリューションの設計を助けるための質問、またはソリューションを設計する際に役立つ他のリソースを、1つまたは複数の参照ライブラリの中に備える。CVS上の参照ライブラリはユーザデバイスがアクセス可能であり、ユーザデバイスは、あらかじめ定義されたソリューションテンプレート、ソリューションの個々の構成要素、質問、または他のリソースを、GUI上でユーザに表示する。
【００２３】
ユーザがGUIを介して所望のソリューションを確認すると、設計されたソリューションが入力としてCVSに送信される。GUI上で設計されたソリューションの入力に応答して、CVSは、たとえば、上記で説明したような、また図面を参照しながら以下で詳述する方式で、水槽ソリューションにおいて設計されたすべてのコントローラデバイス用のプログラム(AGCP)を自動的に生成する。GUIを使用して、CVSに通信可能に接続されると、ユーザは、AGCPを局所的にダウンロードして、仮想コントローラの環境の中でコードをテストし得る。いくつかの実施形態では、ユーザは、CVSからそれぞれのコントローラにAGCPを直接展開するようにGUIを介して命令してよく、展開されたAGCPをさらにテストしてよい。コントローラデバイス上の展開されたAGCPは、GUIを介してユーザによって監視され得、GUIは、AGCPの実行時のステータス情報、コントローラ、接続されるハードウェア(アクチュエータ、センサーなど)、接続、アクション、条件、および設計されたソリューションの任意の他のパラメータを用いて、CVSによって更新される。必要な場合、ユーザは、ソリューションの作成と同様にGUIを使用して、ソリューションを修正してよい。修正されたソリューションをGUIからの入力として受信すると、CVSは、必要な場合、AGCPを修正または再生成してよく、あるいはCVSは、AGCPが修正または更新される必要がない場合、すでに展開されているAGCPによって使用されるパラメータを更新するだけでよい。AGCPは、修正または再生成される場合、それぞれのコントローラに展開される。必要な場合、ユーザは、たとえば、設計された遠隔ソリューション構成に対して、特に、コントローラを追加し、動作条件またはパラメータを変更し、新たなアクション、そのようなアクションをトリガするための追加の条件を定義するために、GUIを使用してデバイスおよび関連するコードを管理する。
【００２４】
いくつかの実施形態では、AGCPは、そのようなコードをコントローラデバイス上で実行するのに必要とされるリソースの不足に起因してコントローラデバイス上での実行に適さないコードを実行するために、CVSへの遠隔呼出しを行う。いくつかの実施形態では、コントローラデバイスからのそのような呼出しは、コントローラまたはCVSによって提供されない、FACEBOOK(登録商標)、TWITTER(登録商標)、AMAZON(登録商標)、データストレージサービスなどの、1つまたは複数の遠隔サービスと対話するために行われる。これらの遠隔呼出しは、直接コントローラデバイスから遠隔サービスへの呼出しとして、またはCVS(CVSP)上のプログラムへの呼出しとして実施されてよく、そうしたプログラムは、遠隔サービスと対話し、AGCPコードのさらなる実行のためにデータをコントローラデバイスに提供する。
【００２５】
本発明の実施形態は、そのように遠隔ソリューションを設計、展開、監視、修正、または再プログラムなどを行うことが可能であり、遠隔ソリューションは、ユーザデバイス上のGUIを使用してアプリケーションシステムにインストールされた1つまたは複数のコントローラデバイス、およびユーザデバイスにとって遠隔のコード仮想化サーバを含む。
【００２６】
図1は、本発明の1つまたは複数の実施形態による、たとえば、従来システム130(1301，…，130q)またはシステム132(1321，…，132r)のための、コントローラベース遠隔ソリューションを作成および管理するための装置100の概観図である。システム100は、従来システム130に(1対1構成、1対多構成、または多対1構成で)接続された複数のコントローラデバイスまたはエッジデバイス1021、1022，…，102n(エッジデバイス102と総称される)、従来システム132に(1対1構成、1対多構成、または多対1構成で)接続された複数のコントローラデバイスまたはエッジデバイス1031，…，103p(エッジデバイス103と総称される)、コントローラデバイスでもあるゲートウェイ108、ネットワーク110、ユーザデバイス112またはユーザコンピュータ112、コード仮想化サーバ(CVS)114またはコーディングサーバ114、および遠隔サービス118を備える。以下の説明では、エッジデバイス102、103およびゲートウェイ108は、「コントローラデバイス」または「コントローラ」と総称される。コントローラは、ARDUINO、TEXAS INSTRUMENTS LAUNCHPAD、FREESCALE BOARDS KINETIS、ST MICROELECTRONICS STM32、INTEL EDISONなどの、プログラム可能なサブシステムを含む。コントローラはまた、RASPBERRY PIなどのシステムオンチップ(SoC)であってよい。コントローラのいくつかの実施形態は、NEST THERMOSTAT、PHILIPPS HUE、BELKIN、WITHINGSなどの組み立てられた他のデバイスおよびシステムの、プログラムされたコントローラを含む。
【００２７】
エッジデバイス102およびゲートウェイ108は、ネットワーク110に接続されたデバイスのグループ(すなわち、デバイスグループ116)を形成する。デバイスグループ116において、ゲートウェイ108は、通信経路1061、1062，…，106nに沿ってエッジデバイス102と内部的に、かつネットワーク110と外部的に通信する。通信経路は一般にワイヤレス経路であるが、いくつかの実施形態では、経路は有線であってよい。また、いくつかの実施形態では、エッジデバイス102は、破線の経路1041、1042，…，104nに沿ってそれら自体の間で、または直接経路(図示せず)に沿って全部もしくは一部の他のエッジデバイス102に通信し、たとえば、メッシュネットワークを形成する。エッジデバイス103は、ネットワーク110と直接、かつ破線の経路109に沿ってそれら自体の間で通信し、いくつかの実施形態では、各エッジデバイス103は、別のエッジデバイス103と通信することができ、たとえば、メッシュネットワークを形成する。単一のゲートウェイ108が図示されるが、複数のゲートウェイが、グループ116内で使用されてよく、またはデバイスグループ116と類似の複数のグループに広がっていてよい。各エッジデバイス102、各エッジデバイス103、およびゲートウェイ108は、ユーザコンピュータ112から遠隔でまたは直接接続を通じてのいずれかでプログラムされ得るコントローラデバイスである(または、コントローラデバイスを内蔵する)。いくつかの実施形態では、エッジデバイス102、エッジデバイス103、およびゲートウェイ108の各々のコントローラは、コード仮想化サーバ114によってプログラムされ得る。
【００２８】
各デバイス(エッジデバイス102、103、およびゲートウェイ108)は、デバイスコントローラ(DC)およびメモリを含み、電子デバイス(ED)を含むことがある。さらに、たとえば、また簡潔のために、エッジデバイス103pだけがデバイスコントローラ120、電子デバイス122、およびメモリ124を含むように示されるが、各デバイス(エッジデバイス102、103、およびゲートウェイ108)が、デバイスコントローラおよびメモリを含み、電子デバイス(ED)を含むことがある。いくつかのゲートウェイ(図示せず)は、アプリケーションシステムと接続されておらず、またはアプリケーションシステムを制御せず、電子デバイス(ED)を含まないことがある。デバイスコントローラ120は、マイクロコントローラ(たとえば、PIC、AVRタイプ、ARMタイプなど)もしくはSoC(たとえば、RASPBERRY PI)、または当技術分野で一般に知られているようなマイクロプロセッサであってよい。コントローラのタイプは、たとえば、そのようなデバイスのアプリケーション、および必要とされる機能に基づいて、デバイスごとに異なってよい。電子デバイス122は、限定はしないが、センサー、ライト、オーディオスピーカー、アクチュエータ、ディスプレイ、プリンタ、スキャナ、I/Oデバイスなどを含む。電子デバイス122は、システム131、132などのアプリケーションシステムを制御または管理するための構成要素を備える。メモリ124は、データおよび実行可能ソフトウェアを記憶するために使用される任意の形態のデジタルストレージであってよい。そのようなメモリは、限定はしないが、ランダムアクセスメモリ、読取り専用メモリ、ディスクストレージ、光ストレージなどを含む。いくつかの実施形態では、メモリ124は、オペレーティングシステム(図示せず)に対応するコンピュータ可読命令を記憶する。メモリ124は、自動生成コントローラプログラム(AGCP)126または自動的に生成されたコード断片を内蔵するプログラム、呼出し129、たとえば、コード仮想化サーバ114などの遠隔サーバ上で実行されるべき関数の呼出し、ならびにAGCP126およびAGCP126に含まれる呼出し129を含むコードを実行するのに必要なプログラムライブラリ、ソフトウェア開発キット(SDK)を含む、他のコード構成要素128をさらに記憶する。いくつかの実施形態によれば、AGCP126は、コード仮想化サーバ114から受信され、メモリ124にインストールされる。構成要素128はまた、エッジデバイスがゲートウェイ108を経由してコード仮想化サーバ114に通信できること、およびゲートウェイ108がそのような通信を可能にできることを、確実にすることが可能である。
【００２９】
ユーザデバイス112は、CPU140、サポート回路142、およびメモリ144を備える。CPU140は、任意の市販のプロセッサ、マイクロプロセッサ、マイクロコントローラなどであってよい。サポート回路142は、ユーザインターフェース、クロック回路、ネットワーク通信、キャッシュ、電源、I/O回路などの機能をCPUに提供する、よく知られている回路を備える。いくつかの実施形態では、ユーザインターフェースは、キーパッド、電子ボタン、スピーカー、タッチスクリーン、ディスプレイ、または他のユーザ対話メカニズムを備える。メモリ144は、データおよび実行可能ソフトウェアを記憶するために使用される任意の形態のデジタルストレージであってよい。そのようなメモリは、限定はしないが、ランダムアクセスメモリ、読取り専用メモリ、ディスクストレージ、光ストレージなどを含む。メモリ144は、オペレーティングシステム(図示せず)、グラフィカルユーザインターフェース(GUI)146に対応する、コンピュータ可読命令を記憶し、コントローラ103pをテストするための、またはコントローラ103pを展開するための、CVS114からダウンロードされたAGCP126を記憶し得る。従来システムまたはアプリケーションシステム130および/もしくは132のための遠隔コントローラデバイスベースソリューションを設計、展開、修正、または管理するとき、ユーザデバイス112はネットワーク110に接続される。一実施形態では、ユーザデバイス112はまた、AGCPの自動生成中、ネットワーク110を経由してコード仮想化サーバ114に通信可能に接続される。
【００３０】
GUI146は、所与のアプリケーションシステム(131、132)のための所望のソリューションを選択または設計すること、エッジデバイスおよび/またはゲートウェイ用のAGCPを自動的に作成または修正するためにソリューション詳細をCVS114に送信すること、AGCPをテストすること、ならびにAGCPをエッジデバイス102、103および/またはゲートウェイ108に展開することを容易にする。いくつかの実施形態によれば、GUI146は、あらかじめ定義されたソリューションテンプレートのリスト、ソリューションを設計するための個々の構成要素、ソリューションを設計するのを支援するための質問もしくは注釈、またはソリューションに関する他の詳細を、CVS114から取り出すことができる。GUIを使用して、ユーザは、コントローラベース遠隔ソリューションを設計、作成、テスト、および動作可能にし、動作可能にされたソリューションを監視し、そのように作成された遠隔ソリューションを修正および管理する。
【００３１】
設計されたソリューションは、アプリケーションシステムと通信可能に接続されるとともにそれを監視および制御するように動作可能な、もう1つのコントローラデバイスを備える。コントローラデバイスは、1つまたは複数のセンサーを使用して(たとえば、水槽システムの中の水位センサーを使用して)アプリケーションシステムを監視し、あるいはセンサーとして働くアプリケーションシステムの1つまたは複数の要素から(たとえば、ボイラー温度を通信するように構成されたデジタルサーモスタットを備えるボイラーシステムから)システム情報を直接受信する。同様に、コントローラデバイスは、1つまたは複数のアクチュエータ(たとえば、ポンプに接続されたアクチュエータ)を使用してアプリケーションシステムを制御し、あるいはアクチュエータ(ポンプの中に組み込まれたデジタルコントローラ)として働くアプリケーションシステムの1つまたは複数の要素を直接制御する。設計されたソリューションはまた、コントローラデバイスがゲートウェイモードにあるのかそれともエッジモードにあるのかという仕様、アプリケーションシステムを監視および制御するために展開された様々なコントローラデバイス間の接続性詳細、コントローラとセンサー、アクチュエータ、またはアプリケーションシステムの要素との間の接続性詳細を備える。設計されたソリューションはまた、アクチュエータ、センサー、またはアプリケーションシステムの要素の仕様を備えてよい。設計されたソリューションはまた、アプリケーションシステムの条件、および条件が満たされるときに実行されるべきアクションの仕様を備える。設計されたソリューションはまた、(たとえば、アプリケーションシステムに接続されたセンサーまたはアクチュエータによって達成されるような)アプリケーションシステムの条件、およびそのような条件が満たされるときにコントローラデバイスによってとられるべきアクションの定義を備える。設計されたソリューションはまた、コントローラプログラム(AGCP)を実行するためのパラメータ、コントローラデバイスによって発せられた遠隔呼出しに基づいてCVS上で実行されるべき関数用のパラメータ、または遠隔サービスをプロビジョニングするためのパラメータを含み得る。設計されたソリューションはまた、ソリューションの他の構成要素のためのパラメータ、たとえば、コントローラ、アプリケーションシステム、条件、アクション、アクチュエータ、センサー、接続性(接続プロファイル、接続パラメータ、プロトコル)のうちの1つまたは複数のためのパラメータを含み得る。ソリューションのすべての構成要素は、テンプレートとして選択されるか、またはGUIを使用して個別に定義される。設計されたソリューションまたはそれらの構成要素はまた、GUI上でソリューションを構築または設計するのと同様にGUIを使用して修正され得る。
【００３２】
いくつかの実施形態によれば、AGCPは、コントローラデバイスへの展開のためにAGCPが送信される前に、GUIを使用するエミュレートされたコントローラデバイスを使用してテストされ得る。いくつかの実施形態によれば、AGCPは、AGCPをコントローラデバイスに展開した後、GUIを使用してテストされ得る。いくつかの実施形態によれば、GUI146はまた、コントローラから遠隔呼出しを発するとCVS114上で実行され得る関数のリストを取り出すことができる。いくつかの実施形態では、GUI146は、コントローラデバイス用のプログラムを作成するための統合開発環境(IDE)を含む。いくつかの実施形態では、GUI146は、CVS114上に常駐するソフトウェアであり、ユーザデバイス112上でブラウザを介して描画される。
【００３３】
コード仮想化サーバ114は、様々な参照ライブラリ、アプリケーションプログラムインターフェース(API)、ソフトウェア開発キット(SDK)、コード、およびSDK生成ソフトウェアを記憶する。CVS114は、エッジデバイス102、103、およびゲートウェイ108のコントローラの各々の上に展開するための自動生成コントローラプログラム(AGCP)126を、GUI146上で設計されGUI146から受信されたソリューションの入力に基づいて生成する。AGCPは、アプリケーションシステムに関する条件が満たされるときにコントローラによる実行のためにアクションをトリガすることに対応する、コードを含む。たとえば、アプリケーションシステムに接続されたセンサーまたはアクチュエータは、ソリューションにおける条件として定義された状態に到達することがあり、そこでコントローラによる実行のためにアクションがトリガされることになる。アクションは、アクチュエータの状態を変化させること、あるいはコード仮想化サーバ114上での実行のための、または遠隔サービス118と対話するためのプロセスまたは関数に、1つまたは複数の遠隔プロセス呼出しを発することを含み得る。いくつかの実施形態では、コード仮想化サーバ114は、ソリューションに関係するパラメータを記憶する。コード仮想化サーバ114はまた、GUI146から受信された許可または命令に基づいて、コントローラデバイス、たとえば、エッジデバイス102、103、またはゲートウェイ108上にAGCP126を展開する。許可は、知られている技法を使用して、コントローラデバイス上でのAGCPの展開を検証するための、GUI146を介して供給されたログイン資格証明の検証を含む。いくつかの実施形態では、ライブラリは、ソリューションのリスト、必要とされるハードウェア、プロセス、従来システム、およびあらかじめ定義された動作または機能のリストを含む。いくつかの実施形態では(図示せず)、複数のコード仮想化サーバがあってよく、たとえば、編成方式の中でも、各サーバはデバイスの異なるセットに関連し、または各サーバは関数呼出しの異なるセットを実行するように割り当てられる。
【００３４】
遠隔サービス118は、サードパーティのサーバまたはデータベースによって提供されるプライベートサービスまたはパブリックサービスを含む。たとえば、遠隔サービス118は、サードパーティのデータベースおよびサービス(たとえば、AMAZON、EBAY、FACEBOOK、APPLE PUSH NOTIFICATIONサーバ、テキストメッセージサーバ、電子メールサーバなど)、または内部データソース(たとえば、DB、noSQL DB、ファイルなど)を含む。遠隔サービス118は、ネットワーク110または別のネットワークを経由してコード仮想化サーバ114にアクセス可能である。いくつかの実施形態では、遠隔サービス118は、コントローラデバイス(102、103、108)上で実行中のAGCPによって直接アクセスされ得る。
【００３５】
ネットワーク110は、インターネットもしくはワイドエリアネットワーク(WAN)またはその組合せを備え、1つまたは複数のそのようなネットワークを含み得る。システム100のコントローラエッジデバイス103、ゲートウェイ108、ユーザデバイス112、CVS114、および遠隔サービス118は、ネットワーク110を経由して通信可能に接続される。たとえば、図1に示すように、知られている技法を使用して、エッジデバイス103は互いに通信可能に接続され、エッジデバイス102は互いにかつゲートウェイ108に接続される。
【００３６】
図2は、本発明の一実施形態によるコード仮想化サーバ(CVS)114のブロック図を示す。コード仮想化サーバ114は、本発明の実施形態に関係する関数を実行するための特定目的コンピュータとなるようにプログラムされる、汎用コンピュータまたは他の電子処理デバイスであってよい。コード仮想化サーバ114は、CPU200、サポート回路202、ならびに命令およびアルゴリズムを含むメモリ204を備える。CPU200は、デバイスとの間の入力および出力を処理する。CPU200は、任意の市販のプロセッサ、マイクロプロセッサ、マイクロコントローラなどであってよい。サポート回路202は、ユーザインターフェース、クロック回路、ネットワーク通信、キャッシュ、電源、I/O回路などの機能をCPUに提供する、よく知られている回路を備える。代替実施形態は、カスタムの特定用途向け集積回路(ASIC)上で制御アルゴリズムを使用してよい。いくつかの実施形態では、ユーザインターフェースは、キーパッド、電子ボタン、スピーカー、タッチスクリーン、ディスプレイ、または他のユーザ対話メカニズムを備える。メモリ204は、データおよび実行可能ソフトウェアを記憶するために使用される任意の形態のデジタルストレージであってよい。そのようなメモリは、限定はしないが、ランダムアクセスメモリ、読取り専用メモリ、ディスクストレージ、光ストレージなどを含む。
【００３７】
メモリ204は、オペレーティングシステム(図示せず)、インターフェース206、プロセスライブラリ208、SDK生成器210、コード生成器212、ソリューションライブラリ214、実行エンジン216、およびパラメータストア218に対応する、コンピュータ可読命令を記憶する。いくつかの実施形態では、インターフェース206は、GUI207を含むポータルを作り出し、GUI207は、たとえば、GUI146としてのユーザへの提示のためにユーザコンピュータ112に送信される。ユーザは、ユーザコンピュータ112上に提示される1つまたは複数のGUIを使用して、所望のソリューションのうちの1つまたは複数に関する入力を与え、そうした入力は、コントローラデバイス上での実行のためのプログラム(たとえば、AGCP)を、それぞれのコントローラデバイスにとってネイティブな言語で自動的に生成するための、コード生成器212およびSDK生成器210による入力として受信される。
【００３８】
プロセスライブラリ208は、AGCPを実行するコントローラから遠隔呼出しを受信したときに実行するための関数に対応する、プログラムまたはコードを備える。そのようなプログラムは、コード仮想化サーバプログラム(CVSP)209と呼ばれる。各関数またはプログラムは、「コレオグラフ(choreograph)」または「コレオ(choreo)」とも呼ばれる。CVSP209は、コントローラデバイスによって呼び出されると、コード仮想化サーバ114における実行エンジン216を介してCVSP209を実行させる。たとえば、CVSP209は、コントローラデバイスが場合によっては実行できないことになるいくつかの関数を実行する。CVSP209は、コード仮想化サーバ114、ユーザデバイス112、およびコントローラデバイス102、103、または108にとって遠隔のデバイス上で遠隔サービス118(たとえば、特にAMAZON、FACEBOOK、TWITTER)のうちの1つまたは複数を実行またはプロビジョニングするためのコードをさらに含み得る。
【００３９】
プロセスライブラリ208はまた、従来システムに適用可能なすべてのプロセスを含む。たとえば、プロセスライブラリ208は、従来システムの監視される状態(すなわち、条件)に基づいてアクチュエータの状態を変化させるためのプロセス(プログラムまたはコード)を含む。たとえば、水槽ソリューション例では、プロセスライブラリ208は、グリッドからの供給をオフにするためのプロセスを含むことになり、このプロセスは、水槽の中の水位が既定のレベルを上回る場合にトリガされることになる。
【００４０】
SDK生成器210は、コントローラデバイス上でのAGCPの実行をサポートするためのSDKを生成する。SDKは、AGCPと一緒にコントローラデバイスに展開されてよく、エッジデバイス102、103、またはゲートウェイ108の構成要素128の中に含められる。
【００４１】
コード生成器212は、コントローラデバイス上での実行のための、完全なプログラムコード、または完全なプログラムコードの中に挿入するためのコードの断片を作成する。完全なプログラムコードまたはコード断片は、ユーザによって定義されたソリューションの入力に応答して生成される。そのようなコードは、自動生成コントローラプログラム(AGCP)126と呼ばれ、自動生成コントローラプログラム(AGCP)126は、メモリ204に記憶され得る。AGCP126は、ソリューションにおけるユーザによってGUIを使用して定義される場合、コード仮想化サーバ114上のCVSP209への呼出しを含む。いくつかの実施形態によれば、AGCP126は、GUI146から受信されたユーザ入力に基づいて、そこで実行するためにコントローラデバイスに直接送信される。いくつかの実施形態によれば、AGCPは、GUI146から受信されたユーザ入力に基づいてユーザデバイス112にダウンロードされ、ユーザは、次いで、ユーザデバイス112からコントローラデバイスにAGCPを展開し得る。
【００４２】
ソリューションライブラリ214は、従来システムのための、コントローラベースソリューションについてのあらかじめ定義された情報を含む。ソリューションライブラリ214は、いくつかの中でも水槽システム、冷蔵庫、ボイラーシステム、住宅用暖房システムなどの従来システム(たとえば、図1のシステム131、132)またはそれらの構成要素の詳細を含む。従来システムの詳細は、従来システムを監視および管理するために使用され得る、センサー、アクチュエータなどを含む様々な電子デバイスを含む。ソリューションライブラリ214はまた、ハードウェアライブラリ220を備え、ハードウェアライブラリ220は、従来システムのそのような電子デバイスとインターフェースするのに利用可能なコントローラデバイスのリストを備える。
【００４３】
ソリューションライブラリ214は、利用可能なソリューションを内蔵する言語プロンプトおよびいくつかの他の言語学的構成要素または質問、そのようなソリューションのサブ構成要素、ユーザと対話するためのハードウェアライブラリ220のハードウェアをさらに含む。たとえば、ソリューションを内蔵する様々な言語構成要素もしくは質問、その中のサブ構成要素、またはハードウェアは、適切な遠隔ソリューションを選択すること、個々の構成要素を選択することによってソリューションを設計すること、または利用可能なリストの中からハードウェアを選択および/もしくは識別することに関するものなどの、GUIを介して適切な入力をユーザに促すために使用され得る。入力を求めるための質問もしくは言語構成要素のいずれかは、ソリューションライブラリ214の中に1つもしくは複数の言語で記憶されてよく、またはソリューションライブラリ214は、質問もしくは言語構成要素をリアルタイムで生成するために、当技術分野で知られているものなどの動的な言語学的エンジンを内蔵してよく、あるいはそれらの組合せが採用される。ライブラリは、ユーザが容易に与えることのできる入力を引き出すために、いくつかの理解しやすい言語または質問をユーザに提示し、それによって、コードの複雑さおよび技術的専門語を低減または排除する。そのような質問または言語構成要素は、GUI、たとえば、ユーザデバイス112上のGUI146を介して描画される。いくつかの実施形態によれば、GUI146は、CVS114上のライブラリへの参照を伴わないスタンドアロンGUIであり、あらかじめ定義されたソリューションテンプレートのセットを含み、またはユーザがソリューションを定義するための空白のテンプレートを提供する。GUI146用の様々なフォーマットが当業者に見いだされ、そのようなすべてのフォーマットが本明細書で企図される。
【００４４】
水槽ソリューション例では、ソリューションライブラリ214は、ユーザにとって利用可能なソリューション、水槽、1つまたは複数の供給グリッド、ポンプ、関連するパイプなどの水槽システムの構成要素、好適なコントローラデバイスのリスト、およびポンプ用のアクチュエータ、水位センサーなどの電子デバイスなどを容易に識別するための、デスクリプタ「水槽」および他の同義語を含む。ハードウェアライブラリ220は、アクチュエータおよび水位センサーなどの電子デバイスと互換性のあるコントローラデバイスのリスト、ならびにコントローラデバイスおよび電子デバイスに関係するすべてのパラメータを含む。たとえば、パラメータは、アクチュエータの状態(ポンプ「オフ」、「低速で」動作中、「高速」で動作中)、監視されるパラメータ(たとえば、水位)、水位の状態(たとえば、インチ単位で、または「高」、「中」、「低」)を含み得る。いくつかの実施形態では、コントローラデバイスおよび電子デバイスは、単一の複合デバイスとして製造されてよく、ハードウェアライブラリ220は、そのような複合デバイスのリストを含む。
【００４５】
プロセスライブラリ208、ソリューションライブラリ214、およびハードウェアライブラリ220は、一緒に「参照ライブラリ」とも呼ばれ、従来システムのための利用可能なソリューション、そのような従来システムの構成要素、コントローラデバイス、そのような従来システムとインターフェースするのに必要とされる電子デバイス、コントローラデバイスを動作させるのに必要とされる様々なプロセス、およびそれらのパラメータの、網羅的プール(exhaustive pool)を形成する。プロセスライブラリ208、ソリューションライブラリ214、およびハードウェアライブラリ220の各々は、利用可能なソリューションを追加、除去、または編集するために更新され得る。そのような更新は、コントローラデバイス自体のアップグレードを必要とすることなく、コントローラデバイスベース遠隔ソリューションにとって利用可能な機能を拡張するために使用され得る。
【００４６】
パラメータストア218は、ソリューションに関するパラメータデータを備え、たとえば、1つまたは複数のプログラム(AGCP、CVSP)を実行するための、遠隔サービスをプロビジョニングするための、そのようなプログラムまたはサービスの挙動を制御するための、パラメータを含む。そのようなパラメータは、AGCP、CVSP、コントローラデバイス、遠隔サービス、またはそれらの間で交換されるべきデータ(たとえば、メッセージ)にアクセスするための認証詳細を含む。パラメータストア218はまた、接続タイプ、ネットワーク認証詳細などを含む、様々なコントローラデバイス、センサー、およびアクチュエータの間の接続性に関するパラメータを備える。いくつかの実施形態では、パラメータストア218は、センサー(たとえば、特定の測定値が既定のしきい値に到達すること)またはアクチュエータ(たとえば、アクチュエータによるアクションの完了時)における従来システムの条件などの、従来システムの動作に関するパラメータを含む。パラメータストア218はまた、コントローラデバイスに関係するパラメータ、たとえば、コントローラモード(エッジまたはゲートウェイ)、ハードウェアタイプ、プロセッサタイプ、ピン構成、およびセンサーまたはアクチュエータへの接続性を含む。
【００４７】
いくつかの実施形態では、パラメータストア218は、ソリューションのパラメータの特定値を備える。いくつかの実施形態によれば、ソリューションの挙動は、パラメータ値、たとえば、GUI146と類似であるかまたは異なる、ユーザデバイス112以外の遠隔GUIデバイス(図示せず)上の第2のGUIを修正することによって修正され得る。そのような実施形態では、遠隔GUIデバイスは、ネットワーク110に通信可能に接続され、そこの第2のGUIにおいてパラメータ値を表示し、パラメータ値はユーザによって修正され得る。第2のGUIはまた、ソリューションデータ、たとえば、センサーデータおよびアクチュエータデータを表示し得、ユーザは、第2のGUIを使用してパラメータ値、たとえば、条件における限定セットを修正し得る。条件における限定セットの変更は、ソリューションのプログラミング(AGCP、CVSP)を変えることなく、対応するアクションがソリューションによっていつ開始されるのかを変更する。同様に、第2のGUIを使用するユーザは、たとえば、アクチュエータの出力を変化させる、アクチュエータに関係するパラメータ値を修正し得る。アクチュエータの出力の変化は、ソリューションのプログラミング(AGCP、CVSP)を変えることなく、対応する条件が満たされるときに開始されるアクションを変更する。
【００４８】
いくつかの実施形態によれば、値が変更され得るパラメータ、または第2のGUIを介して監視することを必要とするパラメータ値は、ソリューションを構築しながら指定されてよく、または後で指定されてもよい。いくつかの実施形態では、ネットワーク110に接続された第2のサーバ(図示せず)は、監視されるパラメータデータ(たとえば、センサーデータ、アクチュエータデータ)をコントローラデバイスから第2のGUIに送信するために、また監視されるパラメータデータに関連するパラメータ値の修正を受信するために使用される。そのような実施形態では、(第2のGUIを使用して展開または更新されるような)パラメータ値は、CVS114のパラメータストア218と同様に第2のサーバに記憶され、監視されるパラメータデータは、既定の時間間隔で、継続的に、すなわちストリーミングモードで、またはアプリケーションシステムの条件が満たされることなどのイベントに基づいて、第2のサーバによって監視される。第2のサーバは、固定間隔で、継続的にすなわちストリーミングモードで、またはアプリケーションシステムの条件が満たされることなどのイベントに基づいて、このデータ(監視されるパラメータデータ)を第2のGUIにさらに通信する。そのような実施形態では、AGCPおよび/またはCVSPは、第2のサーバに記憶されたパラメータ値を使用して実行される。いくつかの実施形態では、第2のGUIは、第2のサーバによって生成され、遠隔GUIデバイスに描画される。いくつかの実施形態では、第2のサーバはCVS114の一部として実装され、いくつかの実施形態では、第2のサーバは遠隔サービス118として実装される。
【００４９】
限定はしないが、プロファイル218に含まれるパラメータの例が表1に示される。
【００５０】
【表１Ａ】
2019503549.tif 000003
【表１Ｂ】
2019503549.tif 000004
【００５１】
パラメータストア218は、AGCP126ならびに呼び出されるCVSP209および/または遠隔サービス118の所望の挙動によるパラメータを順に含む。本発明のいくつかの実施形態によれば、パラメータストア218は、ユーザデバイス112のGUI146上でユーザによって入力されパラメータストア218に送信されるパラメータを含む。いくつかの実施形態によれば、いくつかのパラメータが、AGCPコード自体を修正することなく、AGCPコードの挙動を制御するように修正され得る。たとえば、遠隔サービスの認証詳細に関するパラメータの修正は、AGCPコードの修正または再生成を必要としないことになる。いくつかの実施形態では、AGCPコードは、パラメータ、たとえば、コントローラ構成に関係するパラメータの修正時に、修正または再生成される必要があり得る。
【００５２】
実行エンジン216は、たとえば、コントローラデバイス112によって呼び出されるCVSP(コレオ)を実行すること、ならびにユーザデバイス112、コード仮想化サーバ114、およびコントローラデバイス102、103、または108にとって遠隔のデバイス上で遠隔サービス118をさらに実行することによって、上記のすべての関数をサポートし、システム100の様々な構成要素間の相互運用性を容易にする。実行エンジン216は、ユーザがユーザデバイス112上のGUI146を介してコントローラデバイスをプログラムすることを可能にするために、上記で説明した機能ブロックの各々を利用し、コード仮想化サーバ114および遠隔サービス118を通じて、拡張された機能をコントローラデバイスに提供する。
【００５３】
いくつかの実施形態では、CVSPを実行した後、CVS114は、コールバックを実行することから得られたデータを、さらなる処理のためにコントローラデバイスに返す。得られたデータは、コントローラデバイスタイプにとってネイティブなフォーマットで送信され、たとえば、コントローラデバイスに記憶されたAGCPの実行を続けることによって、コントローラデバイスがそのようなデータをさらに処理することを可能にする。CVS114は、知られている技法を使用して、得られたデータをコントローラデバイスタイプのネイティブなフォーマットで生成すること、または得られたデータをコントローラデバイスタイプのネイティブなフォーマットに変換することのいずれかを行う。他の実施形態では、得られたデータは、その動作を続けるためにコントローラデバイスによって必要とされず、そのような実施形態では、コード仮想化サーバは、AGCPからの呼出しに応答して実行されたCVSPコード(または、抽象化コード)の実行が完了しているという表示または確認を単に送信する。
【００５４】
説明の簡単のために、本明細書で説明する実施形態は、コード仮想化サーバ114がソリューションを監視および制御するためのGUIを生成することを示す。いくつかの実施形態では、上記で説明したように、ソリューションを監視および制御するためのGUIは、コード仮想化サーバとは異なりコード仮想化サーバにとって遠隔の独立型サーバに実装される。上記でも説明したように、本明細書で説明するコード仮想化サーバ114のいくつかの機能のうちのいずれか1つまたは複数は、当業者が容易に見いだすようなコード仮想化サーバから独立した2つ以上のサーバを介して実装されてよく、そのようなすべての実装形態が本明細書で企図される。
【００５５】
図3は、本発明の実施形態による、コントローラベース遠隔ソリューションを作成するためにコード仮想化サーバ(CVS)114によって実行される方法300のフロー図を示す。いくつかの実施形態では、方法300は、GUI、たとえば、コード仮想化サーバ114のインターフェース206と対話する、ユーザデバイス112のGUI146の操作に応答して実行される。いくつかの実施形態では、GUI146は、たとえば、ユーザデバイス上にINTERNET EXPLORER、GOOGLE CHROME、MOZILLA FIREFOXなどのネットワークブラウザを介して実装されたGUI207である。いくつかの実施形態では、GUI146は、ユーザデバイス112上のスタンドアロンGUIである。
【００５６】
方法300は、ステップ302において開始し、ステップ304に進み、そこにおいて、方法300は、GUI146上で設計されたソリューションの入力をCVS114において受信する。ソリューションは、アプリケーションシステム(たとえば、水槽、ボイラー、冷蔵システム)の中に展開される1つまたは複数のセンサーおよび/またはアクチュエータと通信可能に接続されるとともにそれらを制御するように動作可能な1つまたは複数のコントローラ、たとえば、図1のコントローラ102、103、または108を含む。センサーおよび/またはアクチュエータは、電子デバイス、たとえば、電子デバイス122と呼ばれることもある。コントローラ103および108は、直接CVS114に通信可能に接続され、コントローラ102は、コントローラ108を介してCVS114に通信可能に接続される。すべてのコントローラ(102、103、108)は、CVS114およびユーザデバイス112にとって遠隔にある。ソリューションは、たとえば、センサーおよび/またはアクチュエータにおける、アプリケーションシステムの条件の仕様をさらに含む。条件は、さらなるアクションをとるためにどのソリューションが設計され得るのかに基づいて、センサーの状態(特定のしきい値の数量が測定されること)またはアクチュエータの状態(アクションの完了)を含み得る。ソリューションは、指定された条件が満たされるときにコントローラによって実行されるべきアクションの定義を含む。ソリューションはまた、ソリューション用の1つまたは複数のパラメータ、たとえば、上記で説明したような様々なパラメータを含む。ソリューションはCVS114に記憶され、さらに次のように動作可能にされる。
【００５７】
方法300はステップ306に進み、そこにおいて、方法300は、コントローラ(102、103、108)上での実行のためのプログラムを、CVS114上で自動的に生成する。自動生成コントローラプログラム(AGCP)126は、ソリューションにおいて指定された条件が満たされるかどうかをチェックするためのコード、およびソリューションにおいて指定されたアクションを実行するためのコードを備える。AGCPは、AGCPがそのために生成されているコントローラにとってネイティブな言語で生成される。AGCPはまた、AGCPの実行を支援するためのSDKまたは他のコード構成要素を含み得る。いくつかの実施形態では、SDKまたはコード構成要素は、個別に生成されてよく、AGCPの中に含められなくてよい。AGCPは、データをアクチュエータおよびセンサーと適切に送信および受信するために、コントローラの入力および出力、ならびにそのような入力および出力のセンサーまたはアクチュエータへの割当てを管理するためのコードを含む。たとえば、AGCPは、ユーザによってGUI146上で定義されたソリューションに従って、センサーまたはアクチュエータにおける条件を監視するための、アクチュエータに命令するための、他のコントローラ(たとえば、ゲートウェイ)、CVS114、または直接遠隔サービス118と通信するための、コントローラの特定の入力ポートおよび出力ポート(たとえば、ピン)を登録するためのコードを含む。
【００５８】
方法300はステップ308に進み、そこにおいて、方法300は、たとえば、GUI146を使用するユーザによってコントローラデバイス上にAGCPをインストールするために、ユーザデバイス112上の記憶域(たとえば、メモリ144)にAGCPをダウンロードする。代替として、ステップ308において、方法300は、GUI146から受信された入力に基づいて、インストールのためにAGCPを直接コントローラデバイスに送信する。方法300はステップ310に進み、そこにおいて、方法300は終了する。
【００５９】
方法300に従ってコントローラデバイス上にインストールされたAGCPは、コントローラデバイスによって実行されると、ソリューションの指定された条件が満たされることからチェックするように機能し、条件が満たされると、ソリューションにおいて指定されたアクションを実行する。そのようなアクションは、いくつかのプログラム可能なアクションの中でも、追加のアクションをとるようにアクチュエータを導くこと、CVS114または指定された別のデバイスにステータス情報を送信すること、コントローラデバイスにとって遠隔のプログラムを実行するための遠隔呼出しを発することを含み得る。
【００６０】
図4は、本発明の実施形態による、コントローラベース遠隔ソリューションを管理するためにコード仮想化サーバ(CVS)114によって実行される方法400のフロー図を示す。方法300と同様に、方法400はGUI146の操作に応答して実行される。任意の時間に、必要に応じて方法400のステップのうちの1つだけまたはいくつかが実施され得る。ソリューションを管理(監視および修正)するために、方法400のすべてのステップの実施が必要とは限らない。
【００６１】
方法400は、ステップ402において開始し、随意のステップ404に進み、そこにおいて、方法400は、GUI146を使用して表示するために、コントローラデバイスからの遠隔呼出しに基づいて、あらかじめ定義されたソリューションテンプレート、コントローラ、センサー、アクチュエータ、条件、アクション、またはCVS114上で実行されるための関数のうちの1つまたは複数の識別子をユーザデバイス112に送信する。方法400はステップ406に進み、そこにおいて、方法400は、GUI146上で設計されたソリューションの入力を受信し、たとえば、図3の方法300に従って、ソリューションの様々なコントローラ用のAGCPを作成し、それによって、アプリケーションシステムのためのコントローラベース遠隔ソリューションを作成する。
【００６２】
方法400はステップ408に進み、そこにおいて、方法400は、ソリューションの1つまたは複数の構成要素、たとえば、コントローラ、センサー、アクチュエータ、条件、アクション、またはパラメータに対するステータス情報をコントローラに要求し、ステップ410において、方法400は、要求されたステータス情報を受信する。いくつかの実施形態によれば、コントローラは、たとえば、ステップ408で行われるような、方法からの要求を必要とすることなく、ステータス情報を方法400に自動的に送信する。たとえば、コントローラは、条件が満たされることを含む既定のイベントの発生時に、既定の間隔で、ステータス情報を自動的に送信してよく、またはステータス情報を継続的にストリーミングしてもよい。
【００６３】
方法400は随意のステップ412に進み、そこにおいて、方法400は、ソリューションの1つまたは複数の構成要素、たとえば、コントローラ、センサー、アクチュエータ、条件、アクション、またはパラメータの、ステータス情報を求める要求を、たとえば、GUI146から受信する。方法400はステップ414に進み、そこにおいて、方法400は、GUI146上での表示のために、ステータス情報をユーザデバイス112に送信する。方法400は、たとえば、条件が満たされることを含む既定のイベントの発生時に、既定の間隔で、ステータス情報を自動的に送信してよく、または継続的にステータス情報をユーザデバイスにストリーミングしてもよい。いくつかの実施形態によれば、ステータス情報は随意のステップ412において受信された要求に応答して、ステップ414において送信される。
【００６４】
方法400はステップ416に進み、そこにおいて、方法400は、ソリューションの1つまたは複数の構成要素の修正のための入力をGUI146から受信する。方法400はステップ418に進み、そこにおいて、方法400は、受信された修正に基づいてパラメータストア218の中のパラメータを自動的に更新すること、あるいは受信された修正に基づいてAGCP126を修正または再生成し、修正または再生成されたAGCP126を、修正が受信されるべき対応するコントローラに送信することのいずれかを行う。ソリューション修正がコントローラまたはその構成に関連するとき、たとえば、コントローラタイプまたはプロセッサタイプの変更、センサーまたはアクチュエータに関連するピンの変更であるとき、AGCPが修正または再生成される。コントローラ、センサー、またはアクチュエータにおける構成の変更に関係しないパラメータが修正されるとき、AGCPの修正または再生成は、通常、必要とされない。そのような事例では、パラメータはパラメータストア218上で更新され、したがって、更新されたパラメータはAGCPがアクセス可能である。
【００６５】
方法400はステップ420に進み、そこにおいて、方法は、知られている技法を使用して、コントローラ上でのAGCPの実行のためのテストを開始する。テストは、たとえば、CVS114からAGCPを展開した後に物理的なコントローラ上で、または、たとえば、GUI146およびユーザデバイス112上にダウンロードされたAGCPを使用してエミュレートされたコントローラ上で行われてよい。ステップ422において、方法400は、GUI146上での表示のために、テストの結果をユーザデバイス112に送信する。方法400はステップ424に進み、そこにおいて、方法400は終了する。
【００６６】
図5は、本発明の一実施形態による、コントローラデバイス(デバイス102、103、またはゲートウェイ108)、コード仮想化サーバ114、および遠隔サービス118上での遠隔ソリューションの動作のための方法500を示すフロー図である。方法500は、ステップ502においてコントローラデバイス上で開始し、ステップ504に進み、そこにおいて、方法500は、AGCP126をコントローラデバイス上にインストールする。AGCP126は、コントローラデバイスに関連する既定のプログラムコードまたはプロセス、および対応するSDKを含む。AGCP126は、機能に対応するプログラムを実行するための、遠隔デバイスへの呼出しを含む。たとえば、呼出しは、コード仮想化サーバ114上のCVSP209に導かれ得る。ステップ506において、方法500は、コントローラデバイス上でのコントローラデバイスによるAGCP126の実行を開始する。AGCP126のインストールおよび/または実行は、コード仮想化サーバ114によって、またはユーザデバイス112上のGUI146によって開始され得る。実行中に、AGCPは、どのAGCPが図3の方法300に従って生成されるのかに基づいて、たとえば、ソリューションにおいて指定されるような、接続されたセンサーまたはアクチュエータにおける条件が満たされることを監視する。ステップ508において、条件が満たされるとき、AGCPはソリューションにおいて指定されたアクションを実行する。いくつかの実施形態によれば、アクションは、アクチュエータを動作させること、表示のためにセンサーデータもしくはアクチュエータデータをGUIに送信すること、または遠隔デバイス、たとえば、CVS114上で実行されるためのプロセスに遠隔呼出しを発することを含む。アクチュエータを動作させることは、コントローラ上でのAGCPの通常の実行中に達成され、そのような場合、アクションは、コントローラ上での方法500の実行を継続すべきである。そのような場合、遠隔呼出しは発せられず、方法500の実行はコントローラから移行する必要がなく、方法500は直接ステップ518に進む。
【００６７】
遠隔呼出しを発すること、またはセンサーデータもしくはアクチュエータデータをGUIに送信すること(センサーデータまたはアクチュエータデータをGUIに送信するために発せられる遠隔呼出しであってよい)は、方法500の実行をコントローラからCVS114に移行させることを必要とし、そのような場合、アクションは遠隔呼出しをCVS114に発している。CVS114は、遠隔呼出しに対応するプログラム(CVSP)を備え、遠隔呼出しを受信すると、方法500はCVS114においてステップ510に進み、そこにおいて、方法500はCVSPを実行する。たとえば、方法500は、実行エンジン216を使用してプロセスライブラリ208からのCVSP209を実行する。たとえば、ステップ510において、方法500は、GUI146上での表示のために、センサーデータおよび/またはアクチュエータデータをコントローラからユーザデバイスに送信し得る。いくつかの実施形態によれば、CVSP209の、したがって、遠隔呼出し129の実行の完了時に、方法500はステップ512に進む。
【００６８】
いくつかの実施形態では、AGCP126および遠隔呼出し129は、追加として、遠隔サービス118を実行するように構成され、そのような実施形態では、ステップ510は随意のステップ514および516をさらに備える。ステップ514および516において、方法500の実行は、コントローラデバイス、コード仮想化サーバ、およびユーザデバイスにとって遠隔のデバイスによって実行される遠隔サービス118に移行する。方法500は、ステップ514において遠隔サービス118を実行し、ステップ516に進み、そこにおいて、方法500は、遠隔サービス118の実行によって生成される場合、サービスデータをステップ510に返す。遠隔サービス118の実行を含むCVSP209の実行は、ステップ510において完了する。方法500はステップ512に進み、そこにおいて、方法500の実行は、コード仮想化サーバ114からコントローラデバイスに返される。いくつかの実施形態によれば、方法500の実行と一緒にコントローラデバイスに返されるいかなるデータも、コントローラデバイスの言語にとってネイティブな、またはコントローラデバイスの言語と互換性のあるフォーマットに変換される。ステップ518において、方法500は、コントローラデバイス上でのAGCP126の実行を継続する。いくつかの実施形態では、コード実行は、コード仮想化サーバ114上でステップ510において完了してよく、ステップ512および518においてコードの追加の実行が行われなくてよい。方法500はステップ420に進み、そこにおいて、方法500は終了する。
【００６９】
図6は、本発明の一実施形態に従って作成される遠隔ソリューション600を示す。従来システム630は、槽632、ウォーターグリッド636に接続されたポンプ622-B、雨水採取供給部634、および水位センサー622-Aを備える。本発明の実施形態によれば、ソリューション600は、それぞれ、図1のエッジデバイス102、ゲートウェイデバイス108、ユーザデバイス112、コード仮想化サーバ114、および遠隔サービス118と類似の、エッジデバイス602、ゲートウェイデバイス608、ネットワーク610、ユーザデバイス612、コード仮想化サーバ614、ならびに遠隔サービス618-A、618-B、および618-Cを備える。エッジデバイス602は、ユーザによってユーザデバイス612上のGUI(図示せず)を介して構成されコード仮想化サーバ614によって実施されるソリューションに従って、従来システム630を管理するために、たとえば、ワイヤレス手段606を介して、ゲートウェイデバイス608に通信可能に接続される。さらに、エッジデバイス602と従来システムの構成要素、たとえば、センサー622-Aまたはポンプ622-Bとの間の通信接続は、有線またはワイヤレスであってよい。
【００７０】
ゲートウェイデバイス608およびエッジデバイス602の各々は、方法300に従ってそれぞれのAGCPを用いて構成されたコントローラデバイスである。AGCPは、エッジデバイス602およびゲートウェイデバイス608にとって遠隔のデバイス(たとえば、コード仮想化サーバ614)への呼出しを備える。ゲートウェイデバイス608は、エッジデバイス602からの呼出しをネットワーク610を経由して適切に配信するように構成される。呼出しは、通常、AGCPにおける呼出しに従って、所望の機能を有するプロセスを備えるコード仮想化サーバ614に対して行われる。いくつかの実施形態では、コード仮想化サーバ614および遠隔サービス618-A、618-B、618-Cは、ネットワーク610を経由してゲートウェイ608に通信可能に接続される。いくつかの実施形態では、コード仮想化サーバ614は、CVSPを備えるプロセスライブラリ、および実行エンジンを備える。いくつかの実施形態では、エッジデバイス602からの呼出しは、ゲートウェイ608を経由してコード仮想化サーバ614上のCVSP(図示せず)に対して行われ、コード仮想化サーバ614はCVSPを実行し、次に遠隔サービス、たとえば、NEXMO INC.によって提供されるものなどの通話サービス618-A、またはYAHOO! INC.によって提供されるものなどの天気予報サービス618-B、または水槽システム630のための管理会社に苦情チケットを提起するためのチケット発行システムサービス618-Cのうちの1つまたは複数を実行する。
【００７１】
いくつかの実施形態によれば、通話サービス618-Aは、水槽に問題が検出された場合に、またはユーザによって設定された特定の条件が満たされると、ユーザまたは給排水設備会社に通知するために使用される。たとえば、ユーザは、センサー622-Aによって測定される槽632の中の水位が低い場合、エッジデバイス602が通話サービス618-Aを使用して呼出しを発することによってユーザに通知することを、ユーザデバイスのGUIを使用して入力されたパラメータを介して指定し得る。追加として、エッジデバイス602は、ポンプ622-Bを作動させてグリッド636から槽632に水を供給するように構成される。別の例として、天気予報サービス618-Bは、雨が予想される場合にグリッド給水部636の使用を延期するために、本発明の実施形態によって実施されるようなソリューション600によって使用され得る。たとえば、ユーザは、その日に関する天気予測が雨が降りそうである場合、センサー622-Aによって測定されるような槽632の中の水位が低くても、グリッド636から槽632に水を供給しないという、AGCPまたはCVSPにおける条件を指定し得る。いくつかの実施形態によれば、エッジデバイス602は、水位は低いが予想される雨に起因してグリッド水が供給されていないことをユーザに通知する。本明細書で説明し特許請求の範囲によって定義される実施形態の範囲および趣旨から逸脱することなく、そのようなサービスおよび他のサービスのいくつかの類似のアプリケーションを、当業者は容易に見いだされよう。
【００７２】
本発明の実施形態は、コントローラベース遠隔ソリューションを設計、作成、および展開して従来システムを動作させ管理するための、ソリューション中心の手法を提供する。本発明の実施形態はまた、そのように作成された遠隔ソリューションの管理を行う。本発明の実施形態はまた、たとえば、コード仮想化サーバを用いて更新を実施することによって、コントローラ不備の修正を必要とすることなく遠隔ソリューションの能力の向上を提供する。
【００７３】
本明細書で説明した方法300は、コード仮想化サーバ114に遠隔でアクセスして遠隔ソリューションを作成および管理するために、ユーザコンピュータ112上のGUI146を利用するが、遠隔ソリューションは、たとえば、インターフェース206またはGUI207を使用して、コード仮想化サーバ114に直接アクセスすることによって作成および管理され得る。GUI146は、アプリケーションシステムのためのコントローラベースソリューションを設計、テスト、監視、および修正するための入力を受信するためのツールを提供するために、様々な形態を採り得る。GUI146は、入力を受信し情報または出力を提示するために従来GUIにおいて使用されるいくつかの要素の中でも、選択可能なテキスト、フォームフィールド、ソリューションの要素またはパラメータを表すアイコン、ソリューションの状態を表示するためのグラフおよび表を含み得る。当業者に容易に見いだされることになるように、GUIのそのような様々な変形が、本発明の範囲および趣旨から逸脱することなく、説明した実施形態を実践するために使用され得る。本実施形態はモノのインターネット(IoT)デバイスに関して説明されるが、開示する実施形態によって例示された技法がいくつかの他のプログラミング環境に適用可能であることを、当業者は容易に諒解されよう。
【００７４】
本明細書で説明した方法は、様々な実施形態においてソフトウェア、ハードウェア、またはそれらの組合せで実施され得る。方法は、非一時的コンピュータ可読媒体に記憶されるプロセッサ実行可能命令の中に組み込まれ得る。加えて、方法の順序が変更されてよく、様々な要素が追加されてよく、並び替えられてよく、組み合わせられてよく、省略されてよく、または別の方法で修正されてよい。本明細書で説明したすべての例は、非限定的に提示される。様々な修正および変更が、本開示の利益を有する当業者に明らかであることになるように行われてよい。実施形態による実現が、特定の実施形態のコンテキストで説明されてきた。これらの実施形態は、例示的であり限定的でないことが意図されている。多くの変形、修正、追加、および改善が可能である。したがって、単一の事例として本明細書で説明した構成要素に対して、複数の事例が提供されてよい。様々な構成要素、動作、およびデータ記憶装置の間の境界は、いくぶん恣意的であり、特定の動作が、特定の例示的な構成のコンテキストで図示される。機能の他の割振りが想定され、以下の特許請求の範囲内に入り得る。最後に、例示的な構成において個別構成要素として提示された構造および機能は、組み合わせられた構造または構成要素として実装され得る。これらのおよび他の変形、修正、追加、および改善が、以下の特許請求の範囲で定義するような実施形態の範囲内に入り得る。
【００７５】
上記のことは本発明の実施形態を対象とするが、本発明の他の実施形態およびさらなる実施形態が、それらの基本的範囲から逸脱することなく考案されてよく、それらの範囲は以下の特許請求の範囲によって決定される。
【符号の説明】
【００７６】
100  システム
1021，1022，102n，1031，103p  エッジデバイス
1041，104m  経路
1061，1062，106n  通信経路
108  ゲートウェイ
109  経路
110  ネットワーク
112  ユーザデバイス、ユーザコンピュータ
114  コード仮想化サーバ、コーディングサーバ
116  デバイスグループ
118  遠隔サービス
120  デバイスコントローラ
122  電子デバイス
124  メモリ
126  自動生成コントローラプログラム
128  コード構成要素
129  呼出し
1301，130q  従来システム
1321，132r  アプリケーションシステム
140  CPU
142  サポート回路
144  メモリ
146  グラフィカルユーザインターフェース
200  CPU
202  サポート回路
204  メモリ
206  インターフェース
207  グラフィカルユーザインターフェース
208  プロセスライブラリ
209  コード仮想化サーバプログラム
210  SDK生成器
212  コード生成器
214  ソリューションライブラリ
216  実行エンジン
218  パラメータストア
220  ハードウェアライブラリ
600  遠隔ソリューション
602  エッジデバイス
606  ワイヤレス手段
608  ゲートウェイデバイス
610  ネットワーク
612  ユーザデバイス
614  コード仮想化サーバ
618-A  通話サービス
618-B  天気予報サービス
618-C  チケット発行システムサービス
622-A  水位センサー
622-B  ポンプ
630  水槽システム
632  槽
634  雨水採取供給部
636  ウォーターグリッド、グリッド給水部
【図１】
2019503549.tif 000005
【図２】
2019503549.tif 000006
【図３】
2019503549.tif 000007
【図４】
2019503549.tif 000008
【図５】
2019503549.tif 000009
【図６】
2019503549.tif 000010
【国際調査報告】
2019503549.tif 000011
2019503549.tif 000012