(57)【特許請求の範囲】
【請求項１】
コントローラベースのデバイスのグループ中のコントローラベースのデバイスに対するプログラムを自動的に生成するためのコンピュータ実装方法であって、
ユーザデバイス上のグラフィカルユーザインタフェース(GUI)上に表示された複数のコントローラベースのデバイスからのコントローラベースのデバイスについて、
前記コントローラベースのデバイスのコントローラタイプと、
コントローラベースのデバイスのグループ中の別のコントローラベースのデバイスと通信するために前記コントローラベースのデバイスによって使用されることになる通信プロトコルであって、前記グループが前記複数のコントローラベースのデバイスを含む、通信プロトコルと、
前記コントローラベースのデバイスからのリモート呼出しに基づいて実施されることになる機能と
の選択を受け取るステップと、
前記コントローラタイプ、前記通信プロトコル、および前記機能に基づいて、前記コントローラベースのデバイス上で実行するための第1のコードを生成するステップであって、前記第1のコードが、前記リモート呼出しを含み、前記リモート呼出しをルーティングすることができる、ステップと
を含む方法。
【請求項２】
コントローラベースの各デバイスが、エッジデバイスまたはゲートウェイデバイスのいずれかであり、前記グループが、少なくとも1つのエッジデバイスおよび少なくとも1つのゲートウェイデバイス、または少なくとも2つのゲートウェイデバイスのいずれかを含む、請求項1に記載の方法。
【請求項３】
前記第1のコードが、前記少なくとも1つのゲートウェイデバイスを通して前記リモート呼出しをルーティングする、請求項2に記載の方法。
【請求項４】
前記コントローラベースのデバイスがエッジデバイスであるかゲートウェイデバイスであるかの選択を前記GUIから受け取るステップをさらに含み、前記第1のコードを生成する前記ステップがさらに、前記エッジデバイスまたは前記ゲートウェイデバイスの前記選択に基づく、請求項2に記載の方法。
【請求項５】
前記コントローラベースのデバイスから前記少なくとも1つのゲートウェイデバイスを介して前記リモート呼出しを受け取るステップと、
前記機能を実施するステップと
をさらに含む、請求項2に記載の方法。
【請求項６】
前記第1のコードを、直接にまたは前記ユーザデバイスを介して前記コントローラベースのデバイスにインストールするために送出するステップをさらに含む、請求項1に記載の方法。
【請求項７】
前記機能を実施するための少なくとも1つのパラメータを前記GUIから受け取るステップをさらに含み、前記第1のコードを生成する前記ステップがさらに前記少なくとも1つのパラメータに基づく、請求項1に記載の方法。
【請求項８】
コントローラベースのデバイスのグループに対する自動的なソフトウェア開発のための装置であって、
プロセッサと、
実行可能命令を含むメモリを備え、前記実行可能命令が、前記プロセッサを使用して実行されたときに方法の実行を引き起こし、前記方法が、
ユーザデバイス上のグラフィカルユーザインタフェース(GUI)上に表示された複数のコントローラベースのデバイスからのコントローラベースのデバイスについて、
前記コントローラベースのデバイスのコントローラタイプと、
コントローラベースのデバイスのグループ中の別のコントローラベースのデバイスと通信するために前記コントローラベースのデバイスによって使用されることになる通信プロトコルであって、前記グループが前記複数のコントローラベースのデバイスを含む、通信プロトコルと、
前記コントローラベースのデバイスからのリモート呼出しに基づいて実施されることになる機能と
の選択を受け取るステップと、
前記コントローラタイプ、前記通信プロトコル、および前記機能に基づいて、前記コントローラベースのデバイス上で実行するための第1のコードを生成するステップであって、前記第1のコードが、前記リモート呼出しを含み、前記リモート呼出しをルーティングすることができる、ステップと
を含む、装置。
【請求項９】
コントローラベースの各デバイスが、エッジデバイスまたはゲートウェイデバイスのいずれかであり、前記グループが、少なくとも1つのエッジデバイスおよび少なくとも1つのゲートウェイデバイス、または少なくとも2つのゲートウェイデバイスのいずれかを含む、請求項8に記載の装置。
【請求項１０】
前記第1のコードが、前記少なくとも1つのゲートウェイデバイスを通して前記リモート呼出しをルーティングする、請求項9に記載の装置。
【請求項１１】
前記方法がさらに、前記コントローラベースのデバイスがエッジデバイスであるかゲートウェイデバイスであるかの選択を前記GUIから受け取るステップを含み、前記第1のコードを生成する前記ステップがさらに、前記エッジデバイスまたは前記ゲートウェイデバイスの前記選択に基づく、請求項9に記載の装置。
【請求項１２】
前記方法がさらに、
前記コントローラベースのデバイスから前記少なくとも1つのゲートウェイデバイスを介して前記リモート呼出しを受け取るステップと、
前記機能を実施するステップと
を含む、請求項9に記載の装置。
【請求項１３】
前記方法がさらに、前記第1のコードを、直接にまたは前記ユーザデバイスを介して前記コントローラベースのデバイスにインストールするために送出するステップを含む、請求項8に記載の装置。
【請求項１４】
前記方法がさらに、前記機能を実施するための少なくとも1つのパラメータを前記GUIから受け取るステップを含み、前記第1のコードを生成する前記ステップがさらに前記少なくとも1つのパラメータに基づく、請求項8に記載の装置。
【請求項１５】
コンピュータ命令を記憶するための非一時的なコンピュータ可読媒体であって、前記コンピュータ命令が、少なくとも1つのプロセッサによって実行されたとき、コントローラベースのデバイスのグループ中のコントローラベースのデバイスに対するプログラムを自動的に生成する方法を前記少なくとも1つのプロセッサに実施させ、前記方法が、
コントローラベースのデバイスのグループからの複数のコントローラベースのデバイスを、ユーザデバイス上のグラフィカルユーザインタフェース(GUI)上に表示するステップと、
前記グループからのコントローラベースのデバイスについて、
前記コントローラベースのデバイスのコントローラタイプ、
前記グループ中の別のコントローラベースのデバイスと通信するために前記コントローラベースのデバイスによって使用されることになる通信プロトコル、および
前記コントローラベースのデバイスからのリモート呼出しに基づいて実施されることになる機能
の選択を受け取るステップと、
前記選択をコード仮想化サーバに送るステップと
を含む、非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、一般に、コントローラベースのデバイスのグループに対する自動的なソフトウェア開発のための方法および装置に関する。
【背景技術】
【０００２】
MCU、SoC、モバイルフォン、コンピュータなど、フィールドプログラマブルゲートアレイ(FPGA)および他のコントローラベースのデバイス(例えば、マイクロコントローラベースまたはマイクロプロセッサベースの)の使用は、かなり一般的になってきた。コントローラの、低い製造コスト、可用性、およびカスタマイゼーションは、マイクロコントローラおよびシステムオンチップ(SoC)(例えば、PIC、ARDUINO、RASPBERRY PIなど)が営利企業によっても愛好家によっても同様にデバイスの作成に使用されることの急増につながった。コントローラベースのデバイスは、プロセッサコアおよびメモリを備え、これらのプロセッサコアおよびメモリは、周辺装置との通信において入力/出力データを処理するためにプログラム可能である。このようなコントローラベースのデバイスにはまた、NOR FLASHまたはOTP ROMの形のプログラムメモリ、ならびに少量のランダムアクセスメモリ(RAM)もしばしば備わっている。いくつかのこのようなコントローラベースのデバイスは、より大きいデバイス内における組込み応用例に向けて設計される。このようなコントローラベースのデバイスの実世界応用例は、コントローラベースのデバイスを周辺装置としての従来型オブジェクトまたはシステムと接続して、それによりこのような周辺装置のデジタル化、接続性、さらにはリモート制御を可能にすることを潜在的に含む可能性がある。しかし、クラウド技術をハードウェアおよびソフトウェア技術と組み合わせることの複雑さのせいで、このような実世界応用例を作り出すことにはいくつかの困難が存在する。
【０００３】
一般に、コントローラベースのデバイス、またはこれらのデバイスのグループをプログラムすることは、非常に複雑である。「モノのインターネット(IoT)」が成長するのに伴い、ますます多くのこのようなコントローラベースのデバイスが相互に、かつ/またはインターネットに接続され、プログラミングの複雑さを著しく増大させる。実世界シナリオでは、このようなコントローラベースのデバイスは、相互と、かつ/またはゲートウェイに通信することがあり、したがって、ゲートウェイは、いわゆるエッジデバイスに対して、インターネット通信のためのプロキシになる。エッジデバイスは、1つもしくは複数のゲートウェイを通して通信する場合もあり、または独立したデバイスとして直接に通信する場合もある。グループ内では、すべてのデバイス(ゲートウェイおよびエッジ)は、相互運用性を容易にするために互換性のある方式でプログラムされなければならず、このことはさらに、このようなデバイスをプログラムすることの複雑さを著しく増大させる。さらに、カスタマイゼーションが実装されるたびに互換性を管理することもまた、過度に時間がかかる場合がある。コントローラベースのデバイスのグループをプログラムすることは、ユーザにとって非常に困難である。というのは、コーディングコマンドを記憶すること、階層を理解すること、適正な呼出し構文を利用すること、などをしなければならないからである。1つのデバイスが間違ってプログラムされた場合でも、このデバイスに対する、またはグループ中の別のコントローラベースのデバイスに対する、書かれたプログラムが、実行できないかまたはエラーを生むことがある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
したがって、コントローラベースのデバイスに対するプログラミングを単純化するとともに、コントローラベースのデバイスのグループに対して自動的にそうすることが、当技術分野で必要とされている。
【課題を解決するための手段】
【０００５】
本発明の実施形態は、一般に、コントローラベースのデバイスのグループに対する自動的なソフトウェア開発のための方法および装置に関し、これらは、おおむね図の少なくとも1つに示され、かつ/またはそれに関連して記述され、特許請求の範囲においてより完全に記載される。
【０００６】
本開示のこれらおよび他の特徴および利点は、本開示に関する後続の詳細な記述を添付の図と共に検討することから理解されるであろう。図の全体を通して、同じ参照番号は同じ部分を指す。
【０００７】
上に挙げた本発明の特徴を詳細に理解できるように、実施形態を参照しながら、上に簡潔に要約した本発明についてのより具体的な記述を行うことができるが、これらの実施形態のいくつかは、添付の図面に示されている。しかし、本発明は他の等しく有効な実施形態も許容することができるので、添付の図面は、本発明の典型的な実施形態のみを示すものであり、したがって本発明の範囲を制限するものと考えられるべきではないことに留意されたい。
【図面の簡単な説明】
【０００８】
【図１】本発明の一実施形態による、コントローラベースのデバイスのグループに対する自動的なソフトウェア開発のためのシステム100のブロック図である。
【図２】本発明の一実施形態による、図1のコード仮想化サーバによって実行される、コントローラベースのデバイスのグループに対する自動的なソフトウェア開発の方法の流れ図である。
【図３】本発明の一実施形態による、コントローラベースのデバイスのグループに対する自動的なソフトウェア開発のための、図1のシステム100の様々なデバイスによって実行される方法300の流れ図である。
【図４】本発明の一実施形態による、コントローラベースのデバイスおよび関連する入力を指定するのに使用される、図1のグラフィカルユーザインタフェース(GUI)138のGUI画面を描く図である。
【図５】本発明の一実施形態による、コントローラベースのデバイスおよび関連する入力を指定するのに使用される、図1のGUI138のGUI画面を描く図である。
【図６】本発明の一実施形態による、コントローラベースのデバイスおよび関連する入力を指定するのに使用される、図1のGUI138のGUI画面を描く図である。
【図７】本発明の一実施形態による、コントローラベースのデバイスおよび関連する入力を指定するのに使用される、図1のGUI138のGUI画面を描く図である。
【発明を実施するための形態】
【０００９】
本発明の実施形態は、インタラクティブに動作するエッジデバイスまたはゲートウェイデバイスとして機能するコントローラベースのデバイス(例えば、とりわけマイクロコントローラ、マイクロプロセッサ、SoC、MCUなどのコントローラを有するデバイス)のグループに対する自動的なソフトウェア開発のための方法および装置に関し、より具体的には、少なくとも1つのエッジデバイスおよび少なくとも1つのゲートウェイデバイスを含む相互接続されたコントローラベースのデバイスのグループを形成するエッジデバイス上およびゲートウェイデバイス上で実行するためのプログラムまたはコードを生成することに関する。コントローラベースのデバイスに対するコードは、コントローラベースのデバイス上で実行するためのコード(「第1のコード」)を含み、この第1のコードは、コントローラベースのデバイスに対してリモートにあるデバイス、例えばコード仮想化サーバ上の機能を実行する(「第2のコード」を実行することによって)ためのリモート呼出しを含む。第1のコードは、コントローラベースのデバイス上で実行するための完全なプログラム、またはコードスニペットを指し、コードスニペットは、コントローラベースのデバイスに対する既存のプログラムに含めることができるものである。第1のコードはまた、コントローラベースのデバイスのためのソフトウェア開発キット(SDK)も含む。SDKは、グループ中の任意のコントローラベースのデバイスからのリモート呼出しをコード仮想化サーバにルーティングするために、グループ中のコントローラベースのデバイス(エッジデバイスおよびゲートウェイデバイス)間の通信、およびゲートウェイとコード仮想化サーバとの間の通信を可能にするライブラリを含む。第2のコードは、リモート呼出しによって呼び出された機能を実施するための、コード仮想化サーバ上の1つまたは複数の事前定義済みのプロセスまたはプログラムを含む。
【００１０】
いくつかの実施形態では、コード仮想化サーバはまた、コントローラベースのデバイスに関係する入力に基づいて、第1のコードを自動的に生成する。入力は、コード仮想化サーバに対してリモートにあるユーザデバイス上のグラフィカルユーザインタフェース(GUI)を介して行われる選択である。GUIを介して行われる選択は、グループのコントローラベースのデバイスと、コントローラベースのデバイスのコントローラタイプと、グループ中の別のコントローラベースのデバイスと通信するためにコントローラベースのデバイスによって使用されることになる通信プロトコルと、コントローラベースのデバイスから受け取られたリモート呼出しに基づいて実施されることになる機能とを含む。第1のコードが生成されると、第1のコードは、コード仮想化サーバによって直接に、またはユーザデバイスを介して、コントローラベースのデバイスにインストールされる。グループの各デバイスにインストールされた第1のコードは、グループの様々なデバイス間の相互接続性を可能にし、それにより、グループ中の任意のデバイスから発生したリモート呼出しを、ゲートウェイデバイスを介してコード仮想化サーバにルーティングすることを可能にする。したがって、第1のコードを実行する過程で、コントローラベースのデバイスは、リモートの機能を実施するためのリモート呼出しを、この機能についての入力および/または出力データと共に行い、リモート呼出しおよび入力/出力データは、グループのゲートウェイを介してコード仮想化サーバにルーティングされる。これに応答して、コード仮想化サーバは、入力/出力データに従って第2のコードを実行して、機能を実施する。このようにして、GUIを使用して好都合に入力を提供することによって、ソフトウェア(SDKを含む第1のコード)が、相互接続されたコントローラベースのデバイスのグループ中の各デバイスに対して自動的に生成される。ソフトウェアはグループ全体に対して生成され、コントローラベースの各デバイスをプログラムする複雑さに対処する必要はなく、また、コントローラベースのデバイスのグループ中のエッジデバイスおよびゲートウェイデバイスの相互接続に従って各コントローラベースのデバイスにつき個別にプログラムを構成する必要もない。
【００１１】
本願の譲受人に譲渡された、2007年9月11日に出願された特許出願第11/853,137号、2007年9月11日に出願された特許出願第11/853,143号、および2011年1月28日に出願された特許出願第12/931,292号(現米国特許第8,726,285号)は、ワークフローをリモートに生成し展開し実行するための技法について述べている。本願の譲受人に譲渡された、2014年6月17日に出願された特許出願第14/307,198号、2014年6月17日に出願された特許出願第14/307,208号、2014年6月17日に出願された特許出願第14/307,227号、2014年7月10日に出願された特許出願第14/328,415号、2015年1月9日に出願された特許出願第14/593,151号、および2015年4月13日に出願された特許出願第14/685,064号は、関係する技法のうちでもとりわけ、コードおよびSDKの自動生成、コードおよびSDKの仮想化、コード仮想化のためのリモートプロセス呼出しの生成、のための技法について述べている。列挙した出願は、コントローラを組み込んだコントローラベースのデバイスに対してソフトウェアを自動的に開発し、グラフィカルユーザインタフェースを使用してセンサやアクチュエータなどのハードウェアの使用をコントローラにリモートにマッピングし、ソフトウェアを例えばリモートに実行して、定義されたワークフローを介してこのようなコントローラベースのデバイスの能力を拡張するための技法について述べている。上に列挙した各出願は、参照によりその全体が本明細書に組み込まれる。これらの技法は、コードのスニペットおよび/またはライブラリ(例えばSDK)をコントローラベースのデバイスのメモリに配置することによって機能し、スニペットは、実行されたとき、リモートデバイス上、例えばコード仮想化サーバ上で実行するための機能(もしくはコードの一部)を呼び出し、かつ/または、コード仮想化サーバに対してリモートにあるリモートサービスにデータを送り(直接に、もしくはコード仮想化サーバを介して)、かつ/または、さらに、データに対してリモートサービスによって実施されるべき機能を呼び出す。
【００１２】
本発明の実施形態は、これらの技法を使用して、グループ中のいくつかのコントローラベースのデバイスに対するプログラムを自動的に生成する。グループはエッジデバイスおよびゲートウェイデバイスを含み、エッジデバイスは、ゲートウェイデバイスを介してグループの外部と通信する。このような実施形態により、グループ中のいくつかまたはすべてのデバイスに対してコードが自動的に生成され、このことは、グループ中のデバイスの互換性および相互運用性を維持しながら、グループの機能性を拡張し、追加デバイスのプラグアンドプレイを可能にする。
【００１３】
図1は、本発明の1つまたは複数の実施形態による、コントローラベースのデバイスのグループに対する自動的なソフトウェア開発のためのシステム100のブロック図である。システム100は、複数のエッジデバイス102-1...102-N(エッジデバイス102と総称される)と、ゲートウェイデバイスまたはゲートウェイ108と、ネットワーク110と、ユーザコンピュータ112と、コード仮想化サーバ114と、リモートサービス118とを含む。いくつかの実施形態では、エッジデバイス102は、エッジデバイスとして構成されたゲートウェイデバイス102-Pを含む。
【００１４】
ネットワーク110は、インターネットまたはワイドエリアネットワーク(WAN)またはこれらの組合せを含み、図1に示されるような様々なデバイスに及ぶ1つまたは複数のこのようなネットワークを含む場合がある。システム100のすべてのコンポーネントは、知られている方法およびコンポーネントを使用して、図1に示されるようにネットワーク110にまたは相互に接続される。
【００１５】
エッジデバイス102およびゲートウェイ108は、インターネット110に接続されたコントローラベースのデバイスのグループ(デバイスグループ116またはグループ116)を形成する。グループ116のデバイスは、通信経路106-1...106-Nに沿ってエッジデバイス102とゲートウェイ108との間で通信する。通信経路は一般にワイヤレス経路だが、いくつかの実施形態では、経路は有線である場合もある。加えて、いくつかの実施形態では、コントローラベースのデバイス102は、破線の経路104-1...104-M(104と総称される)に沿ってデバイス102間で通信し、経路104は、1対1、1対多、多対多(例えばメッシュネットワーク)接続性構成、またはこれらの任意の組合せを含む。エッジデバイス102は、ゲートウェイ108を通してグループ116の外部と通信する。単一のゲートウェイ108が描かれているが、ゲートウェイ108と同様の複数のゲートウェイが、グループ116内で使用される場合もあり、またはグループ116と同様の複数のグループに及ぶ場合もある。
【００１６】
エッジデバイス102およびゲートウェイ108のそれぞれは、デバイスコントローラ(DC)120、周辺電子機器(PE)122、およびメモリ124を備える。エッジデバイスは、グループ116の外部のデバイスと通信しないコントローラベースのデバイスであり、ゲートウェイ108は、グループ116の外部のデバイス、例えばコード仮想化サーバ114やユーザデバイス112やリモートサービス118と通信するデバイスである。例えば、また簡潔にするために、エッジデバイス(またはコントローラベースのデバイス)102-Nのみが、デバイスコントローラ120、周辺電子機器122、およびメモリ124を備えるように示されているが、各コントローラベースのデバイス(エッジデバイス102およびゲートウェイ108)は、例えばエッジデバイス102-Nと同様にして、デバイスコントローラおよびメモリを備え、また周辺電子機器を備える場合もある。デバイスコントローラ120は、当技術分野で一般に知られているような、マイクロコントローラ(例えば、PIC、AVRタイプ、ARMタイプなど)、システムオンチップ(SoC、例えばRASPBERRY PI)、マイクロプロセッサ、のうちの1つまたは複数を含む。コントローラのタイプは、例えばこのようなデバイスの用途および必要とされる機能に基づいて、デバイスごとに異なる場合がある。
【００１７】
周辺電子機器122は、次のものに限定されないが、センサ、ライト、オーディオマイクロフォン、スピーカ、アクチュエータ、ディスプレイ、プリンタ、スキャナ、I/Oデバイス、および、デバイスコントローラ120からのデジタル信号を使用して操作できる他の任意のデバイス、を含む。周辺電子機器122は、従来のシステムを管理もしくは操作するためのコンポーネントを含み、または、周辺電子機器122自体が従来のシステムであり、とりわけ、音楽システム、アラーム、家電製品、電気デバイス、電気機械デバイスなどである。
【００１８】
メモリ124は、データおよび実行可能ソフトウェアを記憶するのに使用される任意の形のデジタルストレージである。このようなメモリは、次のものに限定されないが、ランダムアクセスメモリ、読取専用メモリ、ディスクストレージ、光学ストレージなどを含む。メモリ124は、オペレーティングシステム(図示せず)に対応するコンピュータ可読命令と、第1のコードとを記憶し、第1のコードは、プログラム125、またはプログラム125内のコードスニペット126である。第1のコード(簡単にするために126として言及するが、プログラム125またはスニペット126のいずれかを意味するものと理解されるであろう)はさらに、コントローラベースのデバイス102-Nに対してリモートにあるデバイス上、例えばコード仮想化サーバ114上の機能へのリモート呼出し128を含む。第1のコード126はさらに、第1のコード126およびリモート呼出し128をエッジデバイス102-N上で実行するのに必要なライブラリを含むSDK129など、追加のコードコンポーネントも含む。SDK129は、エッジデバイス102-Nがゲートウェイ108を介してコード仮想化サーバ114に、または他のエッジデバイス102に通信できることを保証する。同様に、ゲートウェイについてのSDKは、ゲートウェイからコード仮想化サーバ114への、またはエッジデバイス102への、または他のゲートウェイデバイス(図示せず)への通信を可能にする。
【００１９】
ユーザデバイス112は、パーソナルコンピュータ(PC)、ラップトップ、タブレット、スマートフォンなどのコンピュータであり、ユーザデバイス112は、CPU130、サポート回路132、およびメモリ136を備える。CPU130は、任意の市販のプロセッサ、マイクロプロセッサ、マイクロコントローラなどとすることができる。サポート回路132は、ユーザインタフェース、クロック回路、ネットワーク通信、キャッシュ、電源、I/O回路など、機能性をCPUに提供する周知の回路を含む。I/O回路は、ディスプレイ134、例えば、当技術分野で一般に知られているコンピュータモニタなど様々な標準的またはタッチベースのディスプレイを含む。いくつかの実施形態では、ユーザインタフェースは、キーパッド、電子ボタン、スピーカ、タッチスクリーン、ディスプレイ、または他のユーザ対話メカニズムを含む。メモリ136は、データおよび実行可能ソフトウェアを記憶するのに使用される任意の形のデジタルストレージである。このようなメモリは、次のものに限定されないが、ランダムアクセスメモリ、読取専用メモリ、ディスクストレージ、光学ストレージなどを含む。メモリ136は、オペレーティングシステム(図示せず)に対応するコンピュータ可読命令とグラフィカルユーザインタフェース(GUI)138とを記憶し、GUI138はディスプレイ134上で表示される。GUI138は、ユーザデバイス112にインストールされているか、または、ユーザデバイス112上でブラウザ138を介してレンダリングされる。いくつかの実施形態では、GUIは、コード仮想化サーバ上にあるが、ユーザデバイス112上のブラウザ138を介してユーザデバイス112上でレンダリングされる。
【００２０】
GUI138は、グループ中の所与のコントローラベースのデバイスならびに関連する入力動作モード(エッジまたはゲートウェイ)、コントローラタイプ、通信プロトコル、および機能などについての、選択可能なリストを提示する。これらのリストは、対応する選択をユーザが行えるように、ディスプレイ134上で提示される。いくつかの実施形態では、ユーザは、ユーザデバイス112のユーザインタフェースを使用してGUI138を操作して、グループ116のコントローラベースのデバイス(エッジデバイス102、ゲートウェイ108)のリスト140をロードすることができる。ユーザはまた、例えばチェックボックスまたはラジオボタン(図示せず)を使用して、グループ116中でゲートウェイが使用されているかどうかを指定することもできる。ユーザは、実線の下線で示されるように、コントローラベースのデバイス102-Nに対応するCBD-Nを選択する。選択されたデバイスCBD-Nに対して、GUI138は、関連する入力のリスト、例えば、CBD-Nのデバイスタイプ(エッジまたはゲートウェイ)のリスト141、コントローラタイプのリスト142、通信プロトコルのリスト143、および、CBD-Nまたはグループ116の様々なデバイスに利用可能な機能のリスト144をロードする。いくつかの実施形態では、機能、例えばリスト144中で選択された機能を実施するための少なくとも1つのパラメータをユーザが入力できるように、入力フォームを含むパラメータのリスト145も提示される。さらに、ユーザは、リスト141〜145に対応する入力を、複数のコントローラベースのデバイスに関して提供することもできる。例えば、あるデバイスに対応する入力を提供した後、リスト140中で異なるデバイスを選択することができる。いくつかの実施形態では、コントローラベースのデバイスに関連する1つまたは複数の入力に対応する事前定義済みのリストが、ユーザデバイス112において利用可能であるか、または、ユーザデバイス112に接続されたコントローラベースのデバイスを検出することによってユーザデバイス112において作成される。いくつかの実施形態では、事前定義済みのリストは、コード仮想化サーバ114から取り出される。
【００２１】
リストは、リスト140〜145としてGUI138によって表示され、ユーザは、リスト140〜145中の下線で示されるように、各リストに対応する入力を選択または提供する。例えば、リスト140中で選択されたCBD-Nについて、リスト141中でエッジが選択され、リスト142中でコントローラタイプ1が選択され、リスト143中でプロトコル1が選択され、リスト144中で機能1が選択され、リスト145中でパラメータ1が提供または選択される。コントローラタイプは、限定ではないが、PIC、AVR、ARMなどを含む。通信プロトコルは、マシン間通信プロトコルであり、限定ではないが、MQTT、CoAP、HTTP、HTTPSなどを含む。機能は、グループ116中のコントローラベースのデバイスのためにコード仮想化サーバ114上で実施されるように利用可能な機能であり、例えば、当技術分野で知られているもののうちでもとりわけ、電子メールやテキストメッセージの送信、他の内的に(非公開に)ホストされるサービス(内部データソース(例えば、DB、noSQL DB、ファイルなど))またはインターネットベースのサービス(例えば、TWITTER(登録商標)やFACEBOOK(登録商標)などのソーシャルネットワーク、AMAZONなどのオンラインショッピングポータル、SKYPEなどのVoIPプロバイダ、GOOGLEやDUCKDUCKGOなどの検索エンジン、音声通話、ビデオ通話など)の呼出しである。パラメータは、機能の所望の挙動を達成するための入力属性であり、例えば、使用する電子メールサービス、電子メールアカウントなどである。選択および/または入力は、ユーザデバイス112のメモリ136にローカルに記憶されてもよく、またはコード仮想化サーバ114に直接送られてもよい。このようにして、GUI138を介して行われた選択入力は、コード仮想化サーバ114に提供される。TABLE 1(表1)に、コントローラタイプ、通信プロトコル、およびパラメータの例が含まれる。いくつかの実施形態では、TABLE 1(表1)において考察されるパラメータを追加的に使用して、述べた実施形態と同様にして第1のコードを生成することができ、このようなパラメータの選択は、GUI138を介した入力として取得されてもよく、またはコード仮想化サーバ114に記憶された事前定義済みのデータから取得されてもよい。
【００２２】
【表１】
0006719484.tif 000002
【００２３】
前述のGUI138は、様々な選択を受け取ってこのような選択をコード仮想化サーバ114に通信するための、1つの可能なGUI方式を例証するものであり、本明細書に記載の技法は、GUI138の特定の例証に限定されない。例えば、特許請求の範囲によって定義される本発明の範囲または趣旨を逸脱することなく容易に思いつくであろういくつかのGUI方式のうちでもとりわけ、リストは、同じ画面上で同時に提示されてもよく、または逐次的に提示されてもよく、または組合せで提示されてもよい。例えば、図4〜図7は、本発明の実施形態による代替GUI方式を示す。代替実施形態では、GUI138は、カスタム特定用途向け集積回路(ASIC)上のアルゴリズムを使用して、ユーザデバイス112に関して述べたようなCPU130とサポート回路132とメモリ136との組合せによって提供される機能性を提供することができる。いくつかの実施形態では、I/Oデバイスは、キーパッド、電子ボタン、スピーカ、タッチスクリーン、ディスプレイ、または他のユーザ対話メカニズムを含む。
【００２４】
ユーザデバイス112は、コントローラベースのデバイス(エッジまたはゲートウェイデバイス)をそのソフトウェア生成のために選択して、他の入力(コントローラタイプ、機能、通信プロトコル、機能を実行するためのパラメータなど)を選択するとき、および、開発されたソフトウェア、例えば第1のコード126を受け取るとき、ネットワーク110に結合される。ユーザデバイス112はまた、第1のコードをそれぞれのコントローラベースのデバイスにインストールするとき、直接にまたはネットワーク110を介して、デバイスグループ116中のコントローラベースの(エッジおよびゲートウェイ)デバイスに接続される。いくつかの実施形態では、ユーザデバイス112は、コントローラベースのデバイス上の既存のプログラムにコードのスニペットを挿入するために、またはコントローラベースのデバイスに完全なプログラムをインストールするために、統合開発環境またはIDE(図示せず)を備える。
【００２５】
コード仮想化サーバ114は、本発明の実施形態に関係する機能を実施するようにプログラムされた汎用コンピュータまたは他の電子処理デバイスとすることができる。コード仮想化サーバ114は、CPU150、サポート回路152、およびメモリ154を備え、メモリ154は、命令およびアルゴリズムを含む。CPU150は、任意の市販のプロセッサ、マイクロプロセッサ、マイクロコントローラなどとすることができる。サポート回路152は、ユーザインタフェース、クロック回路、ネットワーク通信、キャッシュ、電源、I/O回路など、機能性をCPUに提供する周知の回路を含む。代替実施形態は、カスタム特定用途向け集積回路(ASIC)上の制御アルゴリズムを使用して、CPU150とサポート回路152とメモリ154との任意の組合せによって提供される機能性を提供することができる。いくつかの実施形態では、ユーザインタフェースは、キーパッド、電子ボタン、スピーカ、タッチスクリーン、ディスプレイ、または他のユーザ対話メカニズムを含む。
【００２６】
メモリ154は、データおよび実行可能ソフトウェアを記憶するのに使用される任意の形のデジタルストレージとすることができる。このようなメモリは、次のものに限定されないが、ランダムアクセスメモリ、読取専用メモリ、ディスクストレージ、光学ストレージなどを含む。メモリ154は、オペレーティングシステム(図示せず)に対応するコンピュータ可読命令、インタフェース156、プロセスプール158、コードジェネレータ160、データベース162、および実行エンジン164を記憶する。
【００２７】
インタフェース156は、ユーザデバイス112がコード仮想化サーバ114と対話するための機能性を提供する。いくつかの実施形態では、インタフェース156はまた、例えばGUI138に対応するGUIソフトウェアを含むこともでき、このGUIソフトウェアは、コード仮想化サーバ114によってユーザデバイス112に送られてよく、または他の方法でユーザデバイス112にインストールされるように提供されてよい。いくつかの実施形態では、インタフェース156は、ユーザデバイス112上でブラウザを通してGUI138をレンダリングするためのソフトウェアを含む。加えて、インタフェース156は、グループ116のコントローラベースのデバイス102、108への、およびリモートサービス118への接続性を提供する。
【００２８】
プロセスプール158は、グループ116のコントローラベースのデバイスから受け取られたリモート呼出しに応答して実施されることになる機能に対応するコードを含む。これらの機能は「コレオグラフ(choreograph)」または「コレオ(choreo)」とも呼ばれ、機能を実施するために実行される対応するコードは、第2のコード166と呼ばれる。以下では、用語「機能」、「コレオグラフ」、「コレオ」は、「第2のコード」166とも呼ばれ、これらの用語は、文脈から別段に明らかでない限り交換可能に使用される。いくつかの実施形態では、機能は、外部サービス、例えばリモートサービス118と対話する。第2のコード166は、第2のコード166の実行をサポートするためのソフトウェア開発キット(SDK)167も含み、SDK167は、機能がリモートサービス118と対話することが必要とされる場合には、リモートサービス118のSDKコンポーネントを含むことがある。プロセスプール158はさらに、例えば前述のようにGUI138によって選択されるように利用可能にされた各機能に対応する機能のリストを含み、リストされた機能に対応する第2のコードを含む。いくつかの実施形態によれば、機能のリストは、表示されてユーザデバイス112のユーザによって機能が選択されるように、GUI138に送られる。
【００２９】
コードジェネレータ160は、コントローラベースのデバイス102-Nに対する第1のコード126を生成し、呼出し128に対応するコードを第1のコード126に埋め込む。コードジェネレータ160はさらに、コントローラベースのデバイス102-N上での第1のコード126の実行をサポートするために第1のコード126に含められるSDK129を生成するための、SDKジェネレータ168を備える。第1のコード126は、コントローラベースのデバイス102-Nに対して、その構成またはデバイスタイプ(エッジ)と、デバイスコントローラ120のコントローラタイプ(コントローラ1)と、グループ116中の他のコントローラベースのデバイスと通信するのに使用される通信プロトコル(プロトコル1)と、リモート呼出し128に応答して実施されることになる機能(機能1)とに基づいて、自動的に生成される。例えば、コードジェネレータ160は、リモート呼出しに基づいて機能1を呼び出すために、第1のコード126中で、第2のコード166についての適切な識別子またはアドレスをリモート呼出し128に組み込む。コードジェネレータ160はさらに、CBD102-Nからのリモート呼出し128をゲートウェイデバイス108にルーティングしてからコード仮想化サーバ114にルーティングするための、適切な通信プロトコルを第1のコード126に組み込む。コードジェネレータ160はさらに、CBD102-Nのコントローラタイプに適したコード126を生成する。いくつかの実施形態では、コードジェネレータ160はさらに、パラメータ1に従ってリモート機能を実施するために、パラメータデータ(パラメータ1)を第1のコード126に組み込む。SDK129は、例えばハードウェア、ソフトウェアプラットフォーム、通信インフラストラクチャ(通信プロトコル、接続タイプなどを含む)、および他のコード実行パラメータに従って必要なコードライブラリを提供することによって、第1のコード126の実行をサポートする。
【００３０】
データベース162は、セキュリティ確保された環境を達成するためにユーザデバイス112またはリモートサービス118をコード仮想化サーバ114に対して認証するための、ユーザ名、識別情報、およびパスワードなど、ユーザデータを含む。いくつかの実施形態では、データベース162はまた、コントローラベースのデバイス(102、108)をコード仮想化サーバ114に対して認証するための認証情報も含む。様々な実施形態によれば、データベース162はさらに、限定ではないが、グループ116中のコントローラベースのデバイスのリストと、グループ116中のコントローラベースの各デバイスのタイプと、グループ116のコントローラベースの各デバイスによって使用される通信プロトコルと、機能を実施する(すなわち第1のコードを実行する)ための既存のパラメータと、のうちの1つまたは複数も含む。インタフェース156は、データベース162からのデータを使用して、GUI138の1つまたは複数のリストをポピュレートすることができる。
【００３１】
実行エンジン164は、コード仮想化サーバ114上のコンポーネントの前述の機能をサポートする。コントローラベースのデバイス102-Nからリモート呼出しを受け取るのに応答して、実行エンジン164は、第2のコード166についての適切なパラメータ(例えば、データベースに記憶されているかまたはGUI138から入力として受け取られた)を使用して、第2のコード166(要求された機能に対応する)を実行する。いくつかの実施形態では、実行エンジン164は、第2のコード166の実行から生成されたデータを、ゲートウェイ108を介してコントローラベースのデバイス102-Nに送る。いくつかの実施形態では、機能または第2のコード166は、リモートサービス118と対話し、実行エンジン164は、リモートサービス118と第2のコード166との間のデータの交換を容易にする。本発明の実施形態により、グループ116のコントローラベースのデバイス(CBD102-N)は、第2のコード166をコード仮想化サーバ114上で実行するためのリモート呼出しを行って、コントローラベースのデバイス102-Nのデバイスコントローラ120が通常なら実施できないはずの機能を実施することができ、グループ116中のデバイスの能力が大きく向上する。
【００３２】
リモートサービス118は、ユーザデバイス112とコード仮想化サーバ114とコントローラベースのデバイス(102、108)とに対してリモートにあるサードパーティサーバまたはデータベース(すなわちデバイス)によって提供される非公開または公開サービスを含む。例えば、リモートサービス118は、サードパーティデータベースおよびサービス(例えば、AMAZON、EBAY、FACEBOOK(登録商標)、APPLE PUSH NOTIFICATIONサーバ、テキストメッセージサーバ、電子メールサーバなど)、または内部データソース(例えば、DB、noSQL DB、ファイルなど)を含む。リモートサービス118へは、ネットワーク110または別のネットワークを介してコード仮想化サーバ114からアクセス可能である。いくつかの実施形態によれば、リモートサービス118は、グループ116のコントローラベースのデバイス102-Nからリモート呼出し128を受け取るのに応答して、第2のコード166が実行されるときに関連パラメータを使用してプロビジョニングされる。
【００３３】
図2は、本発明の実施形態による、コントローラベースのデバイスのグループ116をプログラムするためにコード仮想化サーバ114によって実行される方法200の流れ図を描く。方法200は、例えば、GUI138を介して指示できるように、または図4のGUI画面400を介して示されるように、ゲートウェイデバイスがグループ中で使用されるようなデバイスのグループをプログラムするためのものである。方法200は、ステップ202で開始してステップ204に進み、方法200は、コントローラベースのデバイスの選択をGUI138から受け取る。一実施形態では、選択は、リスト140上のCBD-N(図1の実線の下線で示される)をクリックすることによって行われ、CBD-Nは、グループ116のデバイス102-Nに対応する。別の実施形態では、選択は、図5のGUI画面500上で、コントローラベースのデバイス502(ゲートウェイ)および/または504(エッジ)を選択または追加することによって行われる。
【００３４】
方法200は、ステップ206に進む。ステップ206で、方法200は、ステップ204で選択されたコントローラベースのデバイス(例えば102-N)のデバイスタイプを指定する入力を、GUI138から受け取る。デバイスタイプは、エッジデバイスまたはゲートウェイデバイスを含む。一実施形態では、この選択は、「エッジ」をクリックすることによって行われる(図1のリスト141の実線)。いくつかの実施形態では、デバイスタイプは、例えば図5のGUI画面500を介したコントローラベースのデバイス502、504の選択または追加において示されるように、コントローラベースのデバイスの選択時に指定されてもよい。
【００３５】
方法200はステップ208に進み、方法200は、選択されたコントローラベースのデバイス(例えば102-N)のデバイスコントローラ120のコントローラタイプを指定する入力を、GUI138から受け取る。コントローラタイプは、限定ではないが、マイクロコントローラとマイクロプロセッサとのうちの少なくとも一方、例えば、当技術分野で一般に知られているように、いくつかの類似するコントローラタイプのうちでもとりわけAVR、ARM、PICを含む。いくつかの実施形態では、コントローラタイプは、図1のリスト142からオプションを選択することによって選択される。いくつかの実施形態では、コントローラタイプは、例えばGUI画面500のドロップダウンリスト506を使用して、デバイス詳細を指定することによって選択される。
【００３６】
方法200はステップ210に進み、方法200は、選択されたデバイス(102-N)についての通信プロトコルを指定する入力を、GUI138から受け取る。通常、通信プロトコルは、マシン間(M-to-M)通信プロトコルであり、これは、限定ではないが、HTTP、HTTPS、TCP/IP、MQTT、CoAP、LoRa、ZigBee、Thread、Z-WAVE、Bluetooth(登録商標)、6LOWPAN、または他の知られている通信プロトコルを含む。いくつかの実施形態では、通信プロトコルは、図1のリスト143から選択される。いくつかの実施形態では、通信プロトコルは、図6のGUI画面600中のドロップダウンリスト602から適切なオプションを選択することによって指定される。
【００３７】
方法200はステップ212に進み、方法200は、選択されたデバイス(102-N)によって呼び出されることになる機能(またはコレオ)を指定する入力を、GUI138から受け取る。いくつかの実施形態では、機能は、図1のリスト144から選択される。いくつかの実施形態では、機能は、図7のGUI画面700中の、コレオをリストしたメニュー702から適切なオプションを選択することによって指定される。
【００３８】
方法200は任意選択のステップ214に進み、方法200は、選択された機能を実施するのに必要とされるパラメータを指定する入力を、GUI138から受け取る。パラメータは、機能がデバイス(102-N)から呼び出されたときに機能がどのように動作することになるかを定義する。いくつかの実施形態では、パラメータは、図1のリスト145を使用して指定される。いくつかの実施形態では、パラメータは、例えば図4〜図7に描かれるGUI画面と同様のGUI画面上のフォームを使用して指定される。
【００３９】
ステップ204〜214では、入力は、GUI138から逐次的にまたは同時に受け取られる。さらに、GUI138は、例えば図1のリスト140〜145中の実線の下線によって描かれるように、または図4〜図7のGUI画面によって描かれるように、ユーザデバイス112の入力/出力デバイスを操作して適切な応答を選択するかまたは入力するユーザから、入力を受け取る。限定ではないが、特許請求の範囲によって定義される本明細書に記載の実施形態の範囲および趣旨を逸脱することなく、方法200を実装するために他のGUI方式を使用することもできる。
【００４０】
方法はステップ216に進み、方法200は、ステップ206〜214から受け取られた入力に基づいて、第1のコード、例えば、機能へのリモート呼出し(リモート呼出し128)とSDKとを含む第1のコード126を生成する。例えば、第1のコード126は、デバイスタイプ(エッジ)と、デバイスコントローラ120のコントローラタイプ(コントローラ1)と、グループ116中の他のコントローラベースのデバイスと通信するのに使用される通信プロトコル(プロトコル1)と、リモート呼出し128に応答して実施されることになる機能(機能1)と、パラメータ(パラメータ1)とに基づいて、コントローラベースのデバイス102-Nに対して生成される。第1のコード126は、デバイス102-Nに対するプログラム全体を含むか、または、デバイス102-N上の既存のプログラムに挿入するためのスニペットを含み、コントローラタイプと、通信プロトコルと、リモート呼出しによって実施されることになる機能とに関する情報を含む。具体的には、第1のコード126は、機能(または第2のコード166)を実施するために、デバイス102-Nからのリモート呼出し128を、ゲートウェイ108を介してコード仮想化サーバ114にルーティングするように構成される。機能を動作させるのに必要とされるパラメータが任意選択のステップ214で提供された場合は、第1のコード126はこれらのパラメータも含む。
【００４１】
方法200はステップ218に進み、方法200は、コントローラベースのデバイス102-Nにインストールするために第1のコード126を送る。いくつかの実施形態では、第1のコード126は、ゲートウェイ108を介してコントローラベースのデバイス102-Nに送られる。いくつかの実施形態では、第1のコード126はユーザデバイス112に送られ、ユーザデバイス112は、第1のコードを、コントローラベースのデバイス102-Nに直接にインストールするか、またはゲートウェイ108を介してインストールする。例えば、ユーザデバイス上のGUI138を使用して、コントローラベースのデバイス102-N上の既存のプログラム中のコードスニペットとして第1のコード126を挿入することができる。
【００４２】
ステップ220で、方法200は、別のデバイスが処理されるべきかどうかを照会する。照会への答が肯定的である場合は(オプション「YES」)、方法200は経路222に沿ってステップ204に進み、例えばリスト140からのユーザ選択に基づいて、新しいコントローラベースのデバイスに対応する選択がGUI138から受け取られる。ステップ220で照会への答が否定的である場合(オプション「NO」)、例えばグループ116の所望の数のデバイスに対する第1のコードが生成済みであるときは、方法200はステップ224に進み、方法200は終了する。
【００４３】
方法200は、エッジデバイス102およびゲートウェイ108を含めた、グループ116のいくつかまたはすべてのコントローラベースのデバイスについて繰り返されてよい。本発明の実施形態は、少なくとも1つのゲートウェイデバイスがグループ中で使用されるようなデバイスグループ、例えばデバイスグループ116に対して、プログラムを生成することに関する。ゲートウェイデバイスが使用されない場合、例えば、GUI画面400のチェックボックス402が選択されない場合は、例えば本願の譲受人に譲渡され参照によりその全体が本明細書に組み込まれる2014年6月17日に出願された米国特許出願第14/207,208号に記載のように、単一デバイスGUIを介した単一のデバイスに対するプログラム生成のための技法を使用することができる。
【００４４】
図3は、図1のシステム100の様々なデバイスによって実行される方法300の流れ図を描いており、例えば図2の方法200に従ってプログラムされた、動作しているプログラム済みデバイス102-Nを示す。方法300は、コントローラベースのデバイス102-N、コード仮想化サーバ114、およびリモートサービス118によって実行される。
【００４５】
方法300はステップ302で開始し、方法300は、コントローラベースのデバイス102-N上で第1のコードを実行し始める。ステップ304で、方法300は、第2のコードを実行するためにリモート呼出しをコード仮想化サーバ114に対して行う。ステップ306で、方法300は、ゲートウェイデバイス、例えばグループ116中のゲートウェイ108を通して、リモート呼出しをコード仮想化サーバ114にルーティングする。本発明の実施形態によれば、第1のコード(SDKを含む)は、リモート呼出しがコントローラベースのデバイス102-Nから、直接にまたはグループ116中の別のコントローラベースのデバイスを通して、ゲートウェイ108にルーティングされることを可能にするための接続プロトコルを含み、ゲートウェイ108は、リモート呼出しをコード仮想化サーバ114に通信する。
【００４６】
方法300はステップ308に進み、方法300の実行はコード仮想化サーバ114に移る。ステップ308で、方法300は、所望の機能を実施するための第2のコード166を実行するために、ゲートウェイ108を介して、コントローラベースのデバイス102-Nから発生したリモート呼出しを受け取る。例えば、この機能は、GUI138を使用してリスト144から選択された機能である。
【００４７】
ステップ310で、方法300は、機能を実施するために第2のコードを実行し始める。いくつかの実施形態では、第2のコードは、例えば上で考察されたような、機能についてのパラメータを使用して実行される。いくつかの実施形態では、機能を実施することは、リモートサービス、例えばリモートサービス118へのサービス要求を実施することを含み、第2のコードは、例えばAPIおよび他の利用可能な機能性を使用して、リモートサービス118への要求を処理するための機能性を含む。
【００４８】
ステップ312で、方法300は、コード仮想化サーバ114からリモートサービス118へのリモートサービス要求を開始する。方法300の実行は、ステップ314でリモートサービス118に移り、方法300はリモートサービス要求を処理する。任意選択のステップ316で、方法300は、データが生成された場合はデータをリモートサービス118によってコード仮想化サーバ114に送る。いくつかの実施形態では、リモートサービス118の処理から生成されたデータは、リモートサービス118に対する要求が処理されたことの確認を含む。他の実施形態では、追加のデータがリモートサービス118によって生成される場合がある。
【００４９】
方法300の実行は、任意選択のステップ318でコード仮想化サーバ114に移り、方法300は、データをリモートサービス118から受け取る。任意選択のステップ320で、方法300は、受け取られたデータをコントローラベースのデバイス102-Nに送る。いくつかの実施形態(図示せず)では、リモートサービス118から受け取られたデータは、任意選択のステップ320で、GUIを介して表示されるようにユーザデバイス112に送られる。方法300の実行は、任意選択のステップ322でコントローラベースのデバイス102-Nに移り、方法300は、リモートサービス118からの処理済みデータをコード仮想化サーバ114から受け取る。任意選択のステップ324で、方法300は、コントローラベースのデバイス102-N上で第1のコードを実行し続ける。いくつかの実施形態では、リモートサービス118がステップ314で実施されても、リモートサービス118によってどんなデータも生成されず、このような実施形態では、方法300はステップ314で終了する。いくつかの実施形態では、任意選択のステップ316で、方法300は、リモートサービス118が処理されたことを示すデータを、コード仮想化サーバ114(例えば、任意選択のステップ318、320を経て)およびゲートウェイ108を介して、またはゲートウェイ108のみを介して、コントローラベースのデバイス102-Nに送る。方法300は、任意選択のステップ322でこのデータを受け取り、任意選択のステップ324で第1のコードの実行を継続する。いくつかの実施形態では、コントローラベースのデバイス102-Nは、リモートサービス118からのデータを待機することなく、第1のコードの実行を継続する。いくつかの実施形態では、コントローラベースのデバイス102-Nにおける第1のコードの実行は、ステップ306でリモート呼出しをコード仮想化サーバ114にルーティングした後で終了する。
【００５０】
このようにして、コントローラベースのデバイスの機能性は、本明細書に記載の実施形態に従ってデバイス102-Nおよびグループ116をプログラミングすることによって、著しく拡張される。
【００５１】
例えば、コンピュータセンタ内の環境監視システムが複数の温度センサを備える場合があり、各センサはデバイスコントローラ(エッジデバイスと合わせて)に結合され、デバイスコントローラは、センサデータを収集し、このセンサデータを、集約デバイス(ゲートウェイとして機能する)との互換性を有する通信プロトコルを使用してワイヤレス送受信機を介して集約デバイスに送信する。通信プロトコルは、各エッジデバイスにわたって異なる場合がある。ゲートウェイデバイスは、種々のエッジデバイスから受け取ったデータを集約および/または前処理し、インターネットを介してデータを監視サービスに送信する。本発明の実施形態によれば、1つまたは複数のエッジデバイスは、そのデータを機能に送る(すなわち、機能を別のデバイス上でリモートに実施するためのリモート呼出しを行うことによって)ように構成され、機能は、センサデータが事前定義済みの範囲に含まれるとき、例えば温度が環境監視システムの正常範囲を超えるときに、テキストメッセージを送る。いくつかの実施形態では、ゲートウェイは、特定のエッジデバイスからのデータを機能に送るように構成されてよく、機能は、データが事前定義済みの範囲に含まれるとき、またはいくつかのエッジデバイスから集約されたデータが事前定義済みのパターンに合致するときに、テキストメッセージを送る。各場合に、テキストメッセージを送るための呼出しは、ゲートウェイを通してルーティングされる。デバイスコントローラにそれぞれ結合された追加のセンサ(エッジデバイス)、例えば湿度センサが、環境監視システムに加えられる場合があり、これらの新しいエッジデバイスは、様々な通信プロトコルを有する場合がある。本発明の実施形態は、グラフィカルユーザインタフェースに基づく単純な入力を可能にすることによって、好都合な方式で、適切なコードを用いて新しいエッジデバイスをプログラムすることを可能にし、他のデバイス(例えば温度センサ)とのシームレスな相互接続性を可能にする。例えば、本明細書に記載の実施形態を使用すれば、新しいエッジデバイス(湿度センサ)は、ゲートウェイを通してリモートの機能をシームレスに呼び出すことが可能になる。したがって、本発明の実施形態は、エッジデバイスおよびゲートウェイデバイスの機能性を増強し、エッジデバイスおよびゲートウェイデバイスの限られたキャパシティを、利用可能なリモートサービスのキャパシティまで拡張するとともに、これをシームレスな方式で行う。
【００５２】
さらに、いくつかの実施形態によれば、グループ中の1つまたは複数のゲートウェイは、エッジデバイスとして動作するようにプログラムされる。いくつかの実施形態では、グループ116は複数のゲートウェイデバイスを含み、これらのゲートウェイデバイスの1つまたは複数は、エッジデバイスとして動作するように構成されることが可能であり、少なくとも1つのゲートウェイデバイスは、エッジデバイスとして動作するように構成される。いくつかの実施形態では、グループ116は複数のゲートウェイデバイスのみを含み、これらのゲートウェイデバイスの1つまたは複数は、エッジデバイスとして構成されることが可能であり、少なくとも1つのゲートウェイデバイスは、エッジデバイスとして動作するように構成される。
【００５３】
本明細書において考察された様々な実施形態によって示される技法は、複雑なコントローラプログラミング言語を学習する必要、ならびに接続と定義された通信プロトコルとを追跡する必要を回避することによって、コントローラベースのデバイスのグループに対するソフトウェア開発をユーザにとって迅速かつ容易にする。いくつかの実施形態では、コード仮想化サーバ114は、ユーザデバイス(スマートフォン、コンピュータ、タブレットなど)上のウェブインタフェースまたは任意のGUI(例えば、スマートフォンアプリもしくはコンピュータアプリケーション)を通して、コード生成、展開、リモート再プログラミングへのアクセスを提供する、サービス(図示せず)として実装される。実施形態はモノのインターネット(IoT)デバイスに関して記述されているが、開示される実施形態によって例示される技法が他のいくつかのプログラミング環境にも適用可能であることは、当業者ならすぐに理解するであろう。
【００５４】
本明細書に記載の方法は、種々の実施形態で、ソフトウェア、ハードウェア、またはこれらの組合せにおいて実装される場合がある。方法は、非一時的なコンピュータ可読媒体に記憶されたコンピュータ命令において具体化され、方法を実施するために1つまたは複数のプロセッサによって実行される場合がある。加えて、方法の順序は変更されてもよく、様々な要素が追加、並べ替え、結合、省略、または他の方法で修正されてもよい。本明細書に記載のすべての例は、非限定的な方式で提示されている。本開示の利益を有する当業者には自明となるように、様々な修正および変更を加えることができる。実施形態による実現について、特定の実施形態の文脈で述べた。これらの実施形態は、例証であり限定ではないものとする。多くの変形、修正、追加、および改良が可能である。したがって、本明細書において単数のインスタンスとして記述されたコンポーネントについて、複数のインスタンスが提供される場合もある。様々なコンポーネント、動作、およびデータストアの間の境界は、いくぶん恣意的であり、特定の動作が、具体的な例証的構成の文脈で示されている。他の機能性割振りも想定され、また後続の特許請求の範囲内に含まれる場合がある。最後に、例示的な構成において個別のコンポーネントとして提示された構造および機能性は、結合された構造またはコンポーネントとして実装される場合もある。これらおよび他の変形、修正、追加、および改良も、後続の特許請求の範囲において定義される実施形態の範囲に含まれる場合がある。
【００５５】
上記は本発明の実施形態に向けられているが、本発明の基本的な範囲を逸脱することなく本発明の他の実施形態およびさらなる実施形態を考案することもでき、本発明の範囲は、後続の特許請求の範囲によって決定される。
【符号の説明】
【００５６】
102-1  エッジデバイス
102-N  エッジデバイス
102-P  エッジデバイスとして構成されたゲートウェイデバイス
104-1  経路
104-M  経路
106-1  通信経路
106-2  通信経路
106-N  通信経路
108  ゲートウェイデバイス、ゲートウェイ
110  ネットワーク
112  ユーザコンピュータ、ユーザデバイス
114  コード仮想化サーバ
116  デバイスグループ、グループ
118  リモートサービス
120  デバイスコントローラ
122  周辺電子機器
124  メモリ
125  プログラム
126  コードスニペット、第1のコード
128  リモート呼出し
129  ソフトウェア開発キット(SDK)
130  CPU
132  サポート回路
134  ディスプレイ
136  メモリ
138  グラフィカルユーザインタフェース(GUI)
140  コントローラベースのデバイスのリスト
141  デバイスタイプのリスト
142  コントローラタイプのリスト
143  通信プロトコルのリスト
144  機能のリスト
145  パラメータのリスト
150  CPU
152  サポート回路
154  メモリ
156  インタフェース
158  プロセスプール
160  コードジェネレータ
162  データベース
164  実行エンジン
166  第2のコード
167  ソフトウェア開発キット(SDK)
168  SDKジェネレータ
400  GUI画面
402  チェックボックス
500  GUI画面
600  GUI画面
602  ドロップダウンリスト
700  GUI画面
702  メニュー
【図１】
0006719484.tif 000003
【図２】
0006719484.tif 000004
【図３】
0006719484.tif 000005
【図４】
0006719484.tif 000006
【図５】
0006719484.tif 000007
【図６】
0006719484.tif 000008
【図７】
0006719484.tif 000009