(57)【特許請求の範囲】
【請求項１】
コントローラに基づくデバイスのためのコードの挙動を遠隔で修正するためのコンピュータによって実施される方法であって、
コード仮想化サーバにおいてユーザデバイスから修正されたプロファイルを受信するステップであって、前記修正されたプロファイルが、前記コントローラに基づくデバイスのためのコードに関連するプロファイルの修正であり、前記コントローラに基づくデバイスのための前記コードは、前記コントローラに基づくデバイス上で実行するための第1のコードと、前記コード仮想化サーバ上で実行するための第2のコードとを含み、前記第1のコードは、前記コントローラに基づくデバイスから前記コード仮想化サーバへの遠隔の呼び出しを含み、前記遠隔の呼び出しは、前記コード仮想化サーバ上で前記第2のコードを実行することを引き起こすように構成され、前記プロファイルは前記第2のコードを実行するために使用され、前記コントローラに基づくデバイスは、前記ユーザデバイスおよび前記コード仮想化サーバの遠隔にある、ステップと、
前記コード仮想化サーバ上で前記プロファイルを前記修正されたプロファイルによって更新するステップと、
前記コントローラに基づくデバイスから前記コード仮想化サーバにおいて前記遠隔の呼び出しを受信すると、前記更新されたプロファイルを使用して前記コード仮想化サーバ上で前記第2のコードを実行するステップであって、前記更新されたプロファイルを使用して前記第2のコードを前記実行することは、前記コントローラに基づくデバイスのための前記コードの前記挙動を修正することを引き起こす、ステップと
を含む方法。
【請求項２】
更新する前記ステップが、前記修正されたプロファイルの対応するパラメータに従って前記プロファイルの少なくとも1つのパラメータを修正することを含む請求項1に記載の方法。
【請求項３】
複数のコントローラに基づくデバイスのリストを前記コード仮想化サーバからユーザデバイスに送信するステップであって、前記リストは前記ユーザデバイス上に表示するためである、ステップと、
前記コントローラに基づくデバイスのための前記コードの挙動を修正するための、前記複数のコントローラに基づくデバイスからの前記コントローラに基づくデバイスの選択を前記ユーザデバイスから受け取るステップとをさらに含む請求項1に記載の方法。
【請求項４】
前記修正されたプロファイルを使用して更新されるための前記プロファイルを取り出すステップと、
表示するために前記プロファイルを前記ユーザデバイスに送信するステップとをさらに含む請求項3に記載の方法。
【請求項５】
前記リストが、前記ユーザデバイスのグラフィカルユーザインターフェース(GUI)において表示するために送信され、前記選択が、前記GUIを介して受け取られ、前記修正されたプロファイルが、前記GUIを介して受け取られる請求項4に記載の方法。
【請求項６】
前記修正されたプロファイルを使用して更新された後、前記プロファイルを記憶するステップをさらに含む請求項1に記載の方法。
【請求項７】
前記第2のコードを実行することが、前記プロファイルを使用して少なくとも1つの遠隔のサービスのプロビジョニングを開始し、前記遠隔のサービスが、前記コントローラに基づくデバイス、前記ユーザデバイス、および前記コード仮想化サーバの遠隔のデバイス上でプロビジョニングされる請求項1に記載の方法。
【請求項８】
前記少なくとも1つの遠隔のサービスの前記プロビジョニングに関連するデータを、前記少なくとも1つの遠隔のサービスの前記プロビジョニングの後に、前記ユーザデバイスまたは前記コントローラに基づくデバイスのうちの少なくとも1つに送信するステップをさらに含む請求項7に記載の方法。
【請求項９】
コントローラに基づくデバイスのためのコードの挙動を遠隔で修正するための装置であって、前記装置は、
プロセッサと、
前記プロセッサを使用して実行されるときに、
コード仮想化サーバにおいてユーザデバイスから修正されたプロファイルを受信するステップであって、前記修正されたプロファイルが、前記コントローラに基づくデバイスのためのコードに関連するプロファイルの修正であり、前記コントローラに基づくデバイスのための前記コードは、前記コントローラに基づくデバイス上で実行するための第1のコードと、前記コード仮想化サーバ上で実行するための第2のコードとを含み、前記第1のコードは、前記コントローラに基づくデバイスから前記コード仮想化サーバへの遠隔の呼び出しを含み、前記遠隔の呼び出しは、前記コード仮想化サーバ上で前記第2のコードを実行することを引き起こすように構成され、前記プロファイルは前記第2のコードを実行するために使用され、前記コントローラに基づくデバイスは、前記ユーザデバイスおよび前記コード仮想化サーバの遠隔にある、ステップと、
前記コード仮想化サーバ上で前記プロファイルを前記修正されたプロファイルによって更新するステップと、
前記コントローラに基づくデバイスから前記コード仮想化サーバにおいて前記遠隔の呼び出しを受信すると、前記更新されたプロファイルを使用して前記コード仮想化サーバ上で前記第2のコードを実行するステップであって、前記更新されたプロファイルを使用して前記第2のコードを前記実行することは、前記コントローラに基づくデバイスのための前記コードの前記挙動を修正することを引き起こす、ステップと
を含む方法の実行を引き起こす実行可能な命令を含むメモリと
を含む前記コード仮想化サーバを含む、装置。
【請求項１０】
前記コントローラに基づくデバイスを前記プロファイルを含む少なくとも1つのプロファイルと相互に関連付けるインデックスをさらに含む請求項9に記載の装置。
【請求項１１】
前記更新するステップは、前記修正されたプロファイルの対応するパラメータに従って前記プロファイルの少なくとも1のパラメータを修正することを含む請求項9に記載の装置。
【請求項１２】
前記方法が、
ユーザデバイス上に表示するために複数のコントローラに基づくデバイスのリストを前記コード仮想化サーバから前記ユーザデバイスに送信するステップと、
前記コントローラに基づくデバイスのための前記コードの挙動を修正するための、前記複数のコントローラに基づくデバイスからの前記コントローラに基づくデバイスの選択を前記ユーザデバイスから受け取るステップと
をさらに含む請求項9に記載の装置。
【請求項１３】
前記方法が、
前記修正されたプロファイルを使用して更新されるための前記プロファイルを取り出すステップと、
表示するために前記プロファイルを前記ユーザデバイスに送信するステップと
をさらに含む請求項12に記載の装置。
【請求項１４】
前記リストが、前記ユーザデバイスのグラフィカルユーザインターフェース(GUI)において表示するために送信され、前記選択が、前記GUIを介して受け取られ、前記修正されたプロファイルが、前記GUIを介して受け取られる請求項13に記載の装置。
【請求項１５】
前記方法が、前記修正されたプロファイルを使用して更新された後、前記プロファイルを記憶するステップをさらに含む請求項9に記載の装置。
【請求項１６】
前記第2のコードを実行することが、前記プロファイルを使用して少なくとも1つの遠隔のサービスのプロビジョニングを開始し、前記遠隔のサービスが、前記コントローラに基づくデバイス、前記ユーザデバイス、および前記コード仮想化サーバの遠隔のデバイス上でプロビジョニングされる請求項9に記載の装置。
【請求項１７】
前記方法が、前記少なくとも1つの遠隔のサービスの前記プロビジョニングに関連するデータを、前記少なくとも1つの遠隔のサービスの前記プロビジョニングの後に、前記ユーザデバイスまたは前記コントローラに基づくデバイスのうちの少なくとも1つに送信するステップをさらに含む請求項16に記載の装置。
【請求項１８】
少なくとも１つのプロセッサによって実行されると、前記少なくとも１つのプロセッサに、
ユーザデバイス上のグラフィカルユーザインターフェース(GUI)上にコントローラに基づくデバイスのリストを表示するステップと、
前記GUI上に、前記リストからコントローラに基づくデバイスの選択を受け取るステップと、
前記選択を前記ユーザデバイスからコード仮想化サーバに送信するステップと、
前記ユーザデバイス上で、前記コード仮想化サーバから前記コントローラに基づくデバイスのためのコードに関連するプロファイルを受け取るステップと、
前記GUIを介して前記プロファイルを表示するステップと、
前記GUIを介して前記プロファイルの少なくとも1つのパラメータを修正するための入力を受け取るステップと、
前記ユーザデバイスにおいて、前記入力を使用して修正されたプロファイルを生成するステップであって、前記修正されたプロファイルは前記プロファイルの修正である、ステップと、
前記修正されたプロファイルを前記ユーザデバイスから前記コード仮想化サーバに送信するステップと
を含む方法を実行させる、コントローラに基づくデバイスのための前記コードの挙動を遠隔で修正するためのコンピュータ命令を記憶するための非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、概して、コントローラに基づくデバイスのためのコードの挙動を修正するための方法および装置に関する。
【背景技術】
【０００２】
フィールドプログラマブルゲートアレイ(FPGA)、およびMCU、SoC、モバイル電話、コンピュータなどのその他のコントローラに基づくデバイス(たとえば、マイクロコントローラまたはマイクロプロセッサに基づく)の使用が、非常に広まった。コントローラの低い製造コスト、入手のしやすさ、およびカスタマイズが、マイクロコントローラおよびシステムオンチップ(SoC:Systems on a Chip)(たとえば、PIC、ARDUINO、RASPBERRY PIなど)がデバイスの作成のために営利企業および愛好家によって別なく使用されることが急増することにつながった。コントローラに基づくデバイスは、周辺機器と通信して入力/出力データを処理するためにプログラミング可能であるプロセッサコアおよびメモリを含む。少ない量のランダムアクセスメモリ(RAM)だけでなく、NORフラッシュまたはOTP ROMの形態のプログラムメモリも、そのようなコントローラに基づくデバイスに含まれることが多い。いくつかのそのようなコントローラに基づくデバイスは、より大きなデバイス内に組み込まれる用途向けに設計される。
【０００３】
そのようなコントローラに基づくデバイスの実世界の応用は、潜在的に、コントローラに基づくデバイスを周辺機器としての通常の物体またはシステムに接続することを含む可能性があり、それによって、そのような周辺機器のデジタル化、接続性、および遠隔制御さえも可能にする。しかし、そのような実世界の応用が、平均的なユーザ、特に、限られたプログラミングおよびハードウェアの知識を有するかまたはそのような知識をまったく持たないユーザによって使用され得るようにすることには、いくつかの課題がある。
【０００４】
コントローラに基づくデバイスとともに使用するために周辺機器(通常の物体またはシステム)を構成することは、概して非常に複雑である。さらに、コントローラに基づくデバイスのいくつかの応用においては、動的入力に対応するおよび/または動的出力を生成する能力が望ましい可能性がある。動的入力または出力に対応するようにコントローラに基づくデバイスを構成し、プログラミングすることは、すべてのコントローラに基づくデバイスのためのコードを書くかまたは書き換えることを必要とし、コードを書き換えることまたはコントローラに基づくデバイスを再プログラミングすることが周辺機器の階層および周辺機器に好適なコントローラに基づくデバイス、コーディングコマンド、適切な呼び出し構文、ならびにその他のプログラミングパラメータの理解を必要とするので平均的なユーザにとって非常に困難である。正しいコードがなければ、プログラムは動くことができないかまたはエラーを生成することになる。さらに、入力、出力の修正、またはコードの挙動の任意のその他の変更が必要となる度にプログラムを書き換えることは、そのようなコントローラに基づくデバイスの単純で小さなグループにおいてさえ面倒で、時間がかかり過ぎる可能性がある。いくつかの場合、コードを再プログラミングするかまたは書き換えることは、初めてコードをプログラミングするかまたは書くのとほとんど同じぐらいの労力を要する可能性がある。
【０００５】
さらに、「モノのインターネット(IoT)」が大きくなるにつれて、ますます多くのそのようなコントローラに基づくデバイスが互いにおよび/またはインターネットに接続され、所望のコードの挙動を実現することに関連する再プログラミングの複雑さを著しく増やす。そのようなデバイスのグループは、互いに、および/またはゲートウェイがいわゆるエッジデバイスのためのインターネット通信のプロキシになるようにゲートウェイと通信し得る。エッジデバイスは、1つまたは複数のゲートウェイを通じて、または独立したデバイスとして直接通信する可能性がある。グループ内では、すべてのデバイス(ゲートウェイおよびエッジ)が相互運用性を促進するために互換性のある方法でプログラミングされなければならない。所望のコードの挙動を実現するためのカスタマイズに応じて再プログラミングすることに加えて、カスタマイズが実施される度に互換性を管理することも、時間がかかり過ぎる可能性がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願第11/853,137号
【特許文献２】米国特許出願第11/853,143号
【特許文献３】米国特許出願第12/931,292号
【特許文献４】米国特許出願第14/307,198号
【特許文献５】米国特許出願第14/307,208号
【特許文献６】米国特許出願第14/307,227号
【特許文献７】米国特許出願第14/328,415号
【特許文献８】米国特許出願第14/593,151号
【特許文献９】米国特許出願第14/685,064号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
したがって、コントローラに基づくデバイスのためのコードの挙動を修正し、上述の問題のうちの少なくとも一部を低減するニーズが当技術分野に存在する。
【課題を解決するための手段】
【０００８】
本発明の実施形態は、概して、請求項により完全に記載される、実質的に図の少なくとも1つに関連して示され、説明される、コントローラに基づくデバイスのためのコードの挙動を遠隔で修正するための方法および装置に関連する。
【０００９】
本開示のこれらのおよびその他の特徴および利点は、全体を通じて同様の参照番号が同様の部分を指す添付の図面と一緒に本開示の以下の詳細な説明を精査することによって理解され得る。
【００１０】
本発明の上述の特徴が詳細に理解され得るように、上で簡潔に説明された本発明のより具体的な説明が、添付の図面に一部が図示される実施形態を参照することによってなされる可能性がある。しかし、添付の図面は本発明の典型的な実施形態のみを示し、したがって本発明の範囲を限定するとみなされるべきではなく、その理由は本発明がその他の同様に有効な実施形態に通じる可能性があるからであることに留意されたい。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態による、コードの挙動を遠隔で修正するためのシステム100のブロック図である。
【図２】本発明の実施形態による、図1のコード仮想化サーバによって実行されるプロセスに関連するプロファイルを変更することによってコントローラに基づくデバイスのためのコードの挙動を修正するための方法の流れ図である。
【図３】本発明の実施形態による、コントローラに基づくデバイスによって実行するためのコードの挙動を修正するために図1の装置100の様々なデバイスによって実行される方法300の流れ図である。
【図４】本発明の実施形態による、少なくとも1つのコントローラに基づくデバイスのためのコードの挙動を制御するために図1の少なくとも1つのコントローラに基づくデバイスおよびコード仮想化サーバによって実行される方法の流れ図である。
【発明を実施するための形態】
【００１２】
本発明の実施形態は、エッジデバイスおよびゲートウェイデバイス(「コントローラに基づくデバイス」または略して「CBデバイス」とも呼ばれる)のためのコードの挙動を遠隔で修正するための方法および装置に関し、より詳細には、コード自体を変更することなくコントローラに基づくデバイスのためのコードに関連するプロファイルを変更することに関する。コントローラに基づくデバイスのためのコードは、修正されたプロファイルを使用して実行され、それによって、コントローラに基づくデバイスのためのコード全体を書き換えることを必要とせずにコードの挙動を修正する。コントローラに基づくデバイス上に展開されたコード(「第1のコード」)は、遠隔のデバイス、たとえば、サーバ上で機能(「第2のコード」)を実行するための呼び出しを含む。コントローラに基づくデバイス上に展開されたコード(第1のコード)および遠隔の機能(第2のコード)は、コントローラに基づくデバイスのためのまたはコントローラに基づくデバイスに関連するコードを一緒に形成する。プロファイルは、コントローラに基づくデバイス(たとえば、とりわけマイクロコントローラ、マイクロプロセッサ、SoC、MCUなどのコントローラを有するデバイス)のためのそのようなコードに関連付けられ、そのようなコードを実施するために使用される。プロファイルは、修正され、第2のコードを実行する遠隔のデバイスである可能性もある、コントローラに基づくデバイスの遠隔のデバイス、たとえば、コード仮想化サーバ上に記憶される。本発明の実施形態は、ユーザデバイス上のグラフィカルユーザインターフェース(GUI)を使用して、ユーザがユーザデバイスの遠隔のコントローラに基づくデバイスを選択し、コントローラに基づくデバイスのためのコードに関連するプロファイルにアクセスし、プロファイルを遠隔で修正し、修正されたプロファイルを用いてコードの実行を開始することを可能にする。修正されたプロファイルを用いてコードを実施することは、コード自体の修正を必要とせずに所望の修正されたコードの挙動を実現する。結果として、コントローラに基づくデバイスの上で実行するためのコードの挙動が、コントローラに基づくデバイスを再プログラミングする必要なしに遠隔で制御されるかまたは修正される。
【００１３】
本明細書において使用されるとき、用語「コントローラに基づくデバイスに関連するコード」、「コントローラに基づくデバイスのためのコード」、および「コントローラに基づくデバイス上で実行するためのコード」は、そうでないことが文脈から明らかでない限り交換可能なように使用される可能性がある。コントローラに基づくデバイスのためのコードは、コントローラに基づくデバイス上で実行される第1のコードと、コントローラに基づくデバイスの遠隔のデバイス上で実行するための、第1のコードによって呼び出される第2のコードとを含む。第2のコードは、プロファイルを使用して実行され、プロファイルは、したがって、第2のコードに関連付けられる。プロファイルは、第2のコードを実行することを要求する第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の仮想化、コードの仮想化のための遠隔のプロセスの呼び出しの生成のための技術を記載する。列挙された出願は、コントローラを組み込むコントローラに基づくデバイスのためにソフトウェアを自動的に作成し、センサーまたはアクチュエータなどのハードウェアの使用をグラフィカルユーザインターフェースを使用して遠隔でコントローラにマッピングし、定義されたワークフローによってそのようなコントローラに基づくデバイスの能力を拡張するためにソフトウェアをたとえば遠隔で実行するための技術を記載する。上で列挙された出願の各々は、参照によりその全体が本明細書に組み込まれる。
【００１５】
これらの技術は、コードのスニペットおよび/またはライブラリをコントローラに基づくデバイスのメモリに置くことによって機能し、スニペットは、実行されるとき、遠隔のデバイス、たとえば、コード仮想化サーバ上で実行されるための機能(もしくはコードの一部)を呼び出し、および/またはコード仮想化サーバの遠隔にある遠隔のサービスにデータを(直接もしくはコード仮想化サーバを介して)送信し、および/または遠隔のサービスによってデータに対して遠隔で実行される機能をさらに呼び出す。これらの技術は、コントローラに基づくデバイスのためのプログラムを生成することを含む、コントローラに基づくデバイスを含むコントローラに基づくソリューションを作り、管理するために使用される。本発明の実施形態は、これらの技術を使用してコントローラに基づくデバイスのためのプログラムのコードの挙動を修正する。そのような実施形態によって、コードの挙動は、たとえば、コードに関する入力が変更される必要があるか、または異なる出力が必要とされるか、またはそれら両方である動的な環境において修正され得る。さらに、実施形態は、たとえば、コードが実行されるデバイスの遠隔のユーザコンピュータをユーザが使用することによって遠隔でコードの挙動を修正することを可能にする。
【００１６】
図1は、本発明の1つまたは複数の実施形態による、コードの挙動を遠隔で修正するためのシステム100のブロック図である。システム100は、複数のコントローラに基づくデバイス1021 ... 102N (集合的にコントローラに基づくデバイス102と呼ばれる)、複数のコントローラに基づくデバイス1031 ... 103P (集合的にコントローラに基づくデバイス103と呼ばれる)、ゲートウェイ108、インターネット110、ユーザコンピュータ112、コード仮想化サーバ114、任意のデータベース115、および遠隔のサービス118を含む。
【００１７】
コントローラに基づくデバイス102およびゲートウェイ108は、インターネット110に接続されたデバイスのグループ(またはデバイスグループ116)を形成する。デバイスグループ116は、通信経路1061 ... 106Nに沿ってコントローラに基づくデバイス102とゲートウェイ108との間で通信する。通信経路は概してワイヤレス経路であるが、一部の実施形態において、経路は有線である可能性がある。加えて、一部の実施形態において、コントローラに基づくデバイス102は、破線の経路1041 ... 104Nに沿ってそれらのコントローラに基づくデバイス102の間で通信することができる可能性がある。コントローラに基づくデバイス103は、インターネット110と直接通信し、破線の経路109に沿ってそれらのコントローラに基づくデバイス103の間で通信する。単一のゲートウェイ108が示されるが、複数のゲートウェイ108が、グループ内で、またはデバイスグループ116と同様の複数のグループにまたがって使用される可能性がある。コントローラに基づくデバイス102、コントローラに基づくデバイス103、およびゲートウェイ108の各々は、コントローラ、たとえば、ユーザデバイス112から遠隔でかまたはユーザデバイス112からの直接接続を通じてかのどちらかでプログラミングされ得るマイクロコントローラまたはプロセッサを含む。一部の実施形態において、コントローラに基づくデバイス102、コントローラに基づくデバイス103、およびゲートウェイ108の各々のマイクロコントローラは、コード仮想化サーバ114によってプログラミングされる可能性がある。
【００１８】
それぞれのコントローラに基づくデバイス(エッジデバイス102、103、およびゲートウェイ108)は、デバイスコントローラ(DC)、周辺電子機器(PE)、およびメモリを含む。たとえば、簡潔にするために、コントローラに基づくデバイス103Pのみが、デバイスコントローラ120、周辺電子機器122、およびメモリ124を含むように示されるが、各デバイス(エッジデバイス102、103、およびゲートウェイ108)が、デバイスコントローラおよびメモリを含み、周辺電子機器を含む可能性がある。デバイスコントローラ120は、マイクロコントローラ(たとえば、PIC、AVR型、ARM型など)、システムオンチップ(SoC、たとえば、RASPBERRY PI)、または当技術分野で広く知られているマイクロプロセッサのうちの1つまたは複数を含む。コントローラの種類は、たとえば、そのようなデバイスの用途および必要とされる機能に基づいてデバイス毎に異なる可能性がある。周辺電子機器122は、センサー、ライト、オーディオスピーカ、アクチュエータ、ディスプレイ、プリンタ、スキャナ、I/Oデバイスなどを含むがこれらに限定されない。周辺電子機器122は、通常のシステムを管理するかもしくは動作させるための構成要素を含み、または周辺電子機器122は、それ自体が、いくつかある中でもとりわけ、音楽システム、アラーム、家庭用電化製品、電気デバイス、電気機械デバイスなどの通常のシステムである。メモリ124は、データおよび実行可能なソフトウェアを記憶するために使用される任意の形態のデジタルストレージである。そのようなメモリは、ランダムアクセスメモリ、読み出し専用メモリ、ディスクストレージ、光ストレージなどを含むがこれらに限定されない。メモリ124は、オペレーティングシステム(図示せず)に対応するコンピュータ可読命令、コントローラに基づくデバイス103Pの遠隔のデバイス、たとえば、コード仮想化サーバ114上の第2のコードへの呼び出し128をさらに含む第1のコード126を記憶する。第1のコード126は、自動生成コントローラプログラム(AGCP:automatically generated controller program)コードと、第1のコード126および呼び出し128を実行するために必要なライブラリを含むその他のコード構成要素(図示せず)とを含み得る。コード構成要素は、コントローラに基づくデバイスがゲートウェイ108を介してまたはゲートウェイ108なしにコード仮想化サーバ114と通信し得ることを保証することもでき、ゲートウェイ108の同様のコード構成要素は、そのような通信を可能にすることができる。
【００１９】
ユーザデバイス112は、CPU 130、サポート回路132、およびメモリ136を含む。CPU 130は、任意の市販のプロセッサ、マイクロプロセッサ、マイクロコントローラなどである可能性がある。サポート回路132は、ユーザインターフェース、クロック回路、ネットワーク通信、キャッシュ、電源、I/O回路などの機能をCPUに提供するよく知られている回路を含む。I/O回路は、ディスプレイ134、たとえば、当技術分野で広く知られているコンピュータモニタなどの様々な標準的なまたはタッチに基づくディスプレイを含む。一部の実施形態において、ユーザインターフェースは、キーパッド、電子的なボタン、スピーカ、タッチスクリーン、ディスプレイ、またはその他のユーザインタラクションメカニズムを含む。メモリ136は、データおよび実行可能なソフトウェアを記憶するために使用される任意の形態のデジタルストレージである。そのようなメモリは、ランダムアクセスメモリ、読み出し専用メモリ、ディスクストレージ、光ストレージなどを含むがこれらに限定されない。メモリ136は、オペレーティングシステム(図示せず)に対応するコンピュータ可読命令、グラフィカルユーザインターフェース(GUI) 138、本実施形態を使用してコードの挙動の修正が利用可能であるコントローラに基づくデバイスのリスト140、およびコード仮想化サーバ114から受信された1つもしくは複数のプロファイルまたはそれらに対する修正を記憶するためのプロファイルストア142を記憶する。ユーザデバイス112は、コードの挙動を修正するためにコントローラに基づくデバイスを選択し、コードの挙動を修正するために修正されたプロファイルを生成し、送信し、表示するために修正されたコードの実行の結果を受信するときにネットワーク110に結合される。GUI 138は、コード仮想化サーバ114から、コントローラに基づくデバイス(102、103、108)にインストールされたコード(たとえば、第1のコード)の挙動を修正するためにコントローラに基づくデバイス(102、103、108)のリストを取り出す。GUI 138は、リスト140に含まれる1つまたは複数のコントローラに基づくデバイスにインストールされたコードに関連するプロファイルも取り出し、そのような取り出されたプロファイルは、修正の前後にプロファイルストア142に記憶される可能性がある。一部の実施形態において、GUI 138は、ユーザデバイス112のブラウザによってユーザデバイス上でレンダリングされる、コード仮想化サーバ上にあるソフトウェアである。一部の実施形態(図示せず)において、リスト140およびプロファイルストア142は、コード仮想化サーバ114上にあり、ブラウザによってユーザデバイス112上に表示される。
【００２０】
(直接またはブラウザによって表示される) GUI 138は、ディスプレイ134上にレンダリングされる。リスト140は、GUI 138内に選択可能なリスト144として表示され、その選択可能なリスト144から、コントローラに基づくデバイス(CBD1 ... CBDx)のうちの1つまたは複数が、選択され得る。コード仮想化サーバ114からGUI 138によって取り出されるプロファイルの選択可能なリスト146は、選択されたコントローラに基づくデバイスに対応する1つまたは複数のプロファイル(Profile1 ... Profiley)を含む。各プロファイルは、パラメータのリスト148 (Parameter1 ... Parameterz)を含む。ユーザは、リスト140を要求する可能性があり、リスト140は、コード仮想化サーバ114から要求され、一旦取り出されると、リスト144として表示される可能性があり、リスト144から、ユーザは、CBD 145のためのコードの挙動を遠隔で修正するためにCBD1 (または「CBD 145」)を選択する。CBD 145の選択を受け取ると、GUI 138は、CBD 145のためのコード(CBD上で実行されるためのコードおよび/またはそのコードに関連するコード)に関連するプロファイルを取り出し、ユーザによる選択のためにプロファイルのリスト146を提示する。ユーザは、Profile1 (または「プロファイル147」)を選択し、GUI 138は、プロファイル147に含まれるパラメータのリスト148を表示する。ユーザは、望み通りにCBD 145のためのコードの挙動を修正するためにパラメータ149を修正するためにParameter1 (または「パラメータ149」)を選択する。ユーザは、当技術分野で広く知られているI/Oデバイスを使用して1つまたは複数のパラメータを修正する可能性があり、リスト140に含まれる1つまたは複数のコントローラに基づくデバイスに対応する1つまたは複数のパラメータおよびプロファイルを同様に修正する可能性がある。修正されたプロファイルは、たとえば、「保存」ボタン133を使用してプロファイルストア142に記憶され、たとえば、「送信」ボタン135を使用してコード仮想化サーバ114に送信される。上の説明は、1つの可能なGUIのレイアウト構成を示すに過ぎず、本明細書において説明される技術をそのような例示に限定しない。
【００２１】
一部の実施形態(図示せず)において、GUI 138は、さらに、修正されたコードの挙動の結果をディスプレイ134上に表示する。一部の実施形態(図示せず)において、GUI 138は、コントローラに基づくデバイスのためのプログラムを作成および/または修正し、プログラムを試験し、コントローラに基づくデバイス102、103および/またはゲートウェイ108に展開するための統合開発環境(IDE)を含む。代替的な実施形態は、CPU 130、サポート回路132、およびメモリ136の任意の組合せによって提供される機能を、カスタムの特定用途向け集積回路(ASIC)上のアルゴリズムを使用して提供する可能性がある。一部の実施形態において、I/Oデバイスは、キーパッド、電子的なボタン、スピーカ、タッチスクリーン、ディスプレイ、またはその他のユーザインタラクションメカニズムを含む。
【００２２】
コード仮想化サーバ114は、多目的コンピュータ、または本発明の実施形態に関連する機能を実行するための専用コンピュータになるようにプログラミングされるその他の電子的な処理デバイスである可能性がある。コード仮想化サーバ114は、CPU 150、サポート回路152、ならびに命令およびアルゴリズムを含むメモリ154を含む。CPU 150は、任意の市販のプロセッサ、マイクロプロセッサ、マイクロコントローラなどである可能性がある。サポート回路152は、ユーザインターフェース、クロック回路、ネットワーク通信、キャッシュ、電源、I/O回路などの機能をCPUに提供するよく知られている回路を含む。代替的な実施形態は、CPU 150、サポート回路152、およびメモリ154の任意の組合せによって提供される機能を、カスタムの特定用途向け集積回路(ASIC)上の制御アルゴリズムを使用して提供する可能性がある。一部の実施形態において、ユーザインターフェースは、キーパッド、電子的なボタン、スピーカ、タッチスクリーン、ディスプレイ、またはその他のユーザインタラクションメカニズムを含む。一部の実施形態において、ユーザインターフェースは、コントローラに基づくデバイス102、103、および108と通信し得る。
【００２３】
メモリ154は、データおよび実行可能なソフトウェアを記憶するために使用される任意の形態のデジタルストレージである可能性がある。そのようなメモリは、ランダムアクセスメモリ、読み出し専用メモリ、ディスクストレージ、光ストレージなどを含むがこれらに限定されない。メモリは、インターフェース156、プロファイルアップデータ157、プロセスライブラリ158、ソフトウェア開発キット(SDK)ジェネレータ160、コードジェネレータ162、プロファイルデータベース164、実行エンジン166、およびデバイスデータベース178に対応するコンピュータ可読命令を記憶する。
【００２４】
インターフェース156は、ユーザデバイス112がコード仮想化サーバ114とインタラクションするための機能を提供する。一部の実施形態において、インターフェース156は、コード仮想化サーバ114によってユーザデバイスに送信されるか、またはそうでなければユーザデバイス112にインストールするためにユーザに提供される可能性がある、たとえば、GUI 138に対応するGUIソフトウェアを含む可能性もある。一部の実施形態において、インターフェース156は、ユーザデバイス112のブラウザを通じてGUI 138をレンダリングするためのソフトウェアを含む。加えて、インターフェース156は、コントローラに基づくデバイス102、103、108および遠隔のサービス118への接続を提供する。プロファイルアップデータ157は、たとえば、ユーザデバイス112から受信された修正されたプロファイルを使用してプロファイル168を更新する。プロファイルアップデータ157は、修正されたプロファイルの対応するパラメータに従ってプロファイル168の1つまたは複数のパラメータを修正する。さらに、プロファイルアップデータ157は、更新されたプロファイルをプロファイル168にまたはプロファイル168として記憶する。一部の実施形態において、プロファイルアップデータ157は、インターフェース156に含まれる。プロセスライブラリ158は、コントローラに基づくデバイスからの呼び出しを受信すると実行され得るコード(すなわち、「コレオグラフ(choreograph)」または「コレオ(choreo)」とも呼ばれる第2のコード159)を含む。一部の実施形態によれば、第2のコードは、ユーザデバイス112から受信された修正されたプロファイルに基づいて更新されたプロファイルを使用して実行される。一部の実施形態によれば、第2のコードは、特定のコントローラに基づくデバイスから切り離された機能を実行し、そうでなければ、コントローラに基づくデバイスのデバイスコントローラは、それらの機能を実行し得ない。SDKジェネレータ160は、たとえば、ハードウェア、ソフトウェアプラットフォーム、通信インフラストラクチャ、およびその他のコード実行パラメータに応じて必要なコードライブラリを提供することによって、第1のコード、第2のコード、またはそれら両方の実行をサポートするためのSDKを生成する。コードジェネレータ162は、コントローラに基づくデバイスのための第1のコードを生成し、第1のコードは、コントローラに基づくデバイスに関連するプロファイルを使用して第2のコード159を実行するための、コントローラに基づくデバイスからコード仮想化サーバ114への呼び出しを含む。プロファイルデータベース164は、プロセスライブラリ158の少なくとも1つのプロセス(たとえば、第2のコード159)に対応する少なくとも1つのプロファイル168を含む。プロファイル168は、プロセスパラメータ170およびそれらのリスト、ユーザ名、識別情報、およびパスワードなどのユーザデータを含む接続プロファイル172、接続パラメータ174、ならびに第2のコード159の実行に関連するプロトコル176を含む。プロファイル168は、プロファイル名、たとえば、(すべてのサブプロファイルを含む)パラメータの組の名前などのパラメータ、ハードウェアの種類またはプロセッサの種類などのハードウェアプロファイルパラメータを含む可能性もあり、たとえば、Arduino Uno、Arduino Yunは、ハードウェ��の種類の例であり、AVR、ARM、PICは、プロセッサの種類の例である。プロファイルパラメータの例が、限定なしにTable 1(表1)に示される。プロファイル168は、第2のコード159の所望の挙動に応じて設定される。プロファイルデータベース164は、プロファイル168と同様のいくつかのプロファイル(図示せず)を含む。デバイスデータベース178は、コードの挙動が修正される可能性があるコントローラに基づくデバイス102、103、108のリスト182と、プロファイル、たとえば、プロファイル168を1つまたは複数のコントローラに基づくデバイス、たとえば、コントローラに基づくデバイス103Pと関連付けるインデックス184とを含む。プロファイルデータベース164およびデバイスデータベース178に含まれる情報は、コード仮想化サーバ114上の、または任意でネットワーク110上のデバイス上の1つもしくは複数のデータベース、たとえば、データベース115に分散される可能性がある。
【００２５】
本発明の実施形態によれば、プロファイルアップデータ157は、GUI 138を介してユーザデバイス112から受信された修正されたプロファイルを使用してプロファイル168を更新する。コントローラに基づくデバイス103P上で第1のコード126を実行することは、更新されたプロファイル168を使用してコード仮想化サーバ114上で第2のコード159を実行するための呼び出し128を行う。実行エンジン166は、更新されたプロファイル168を使用して第2のコード159を実行し、更新されたプロファイル168に従ったコードの挙動をもたらす。このようにして、コントローラに基づくデバイス103Pに関連するコード(すなわち、第1のコードおよび第2のコード)の挙動が、コード自体を修正することなく、たとえば、コードから遠隔で修正される。
【００２６】
【表１Ａ】
0006626956.tif 000002
【００２７】
【表１Ｂ】
0006626956.tif 000003
【００２８】
実行エンジン166は、装置100の様々な構成要素の間の相互運用性を促進するためにすべての上述の機能をサポートする。実行エンジンは、上述の機能ブロックの各々を利用して、ユーザがユーザデバイス上のGUIを通じてコントローラに基づくデバイスの機能を制御し、修正するためにコントローラに基づくデバイスをプログラミングすることを可能にする。
【００２９】
遠隔のサービス118は、ユーザデバイス112、コード仮想化サーバ114、およびコントローラに基づくデバイス(102、103、108)の遠隔にある第三者サーバまたはデータベース(つまり、デバイス)によって提供される私的なまたは公的なサービスを含む。たとえば、遠隔のサービス118は、第三者データベースおよびサービス(たとえば、AMAZON、EBAY、FACEBOOK、APPLE PUSH NOTIFICATIONのサーバ、テキストメッセージサーバ、電子メールサーバなど)、または内部データソース(たとえば、DB、NoSQL DB、ファイルなど)を含む。遠隔のサービス118は、ネットワーク110または別のネットワークを介してコード仮想化サーバ114によってアクセスされ得る。一部の実施形態によれば、遠隔のサービス118は、実行エンジン166を使用して、更新されたプロファイル168を使用して第2のコード159を実行することによってプロビジョニングされる。
【００３０】
ネットワーク110は、インターネット、または広域ネットワーク(WAN)、または組合せを含み、1つまたは複数のそのようなネットワークを含む可能性がある。装置100のすべての構成要素は、知られている方法および構成要素を使用して、図1に示されたようにネットワーク110または互いに接続される。
【００３１】
図2は、本発明の実施形態による、コントローラに基づくデバイスに関連するコードの実行のために使用されるプロファイルを更新することによって遠隔でコントローラに基づくデバイスに関連するコードの挙動を修正するためにコード仮想化サーバ114によって実行される方法200の流れ図を示す。方法200は、ステップ202で始まり、ステップ204に進む。ステップ204において、コード仮想化サーバ114は、コントローラに基づくデバイス、たとえば、コントローラに基づくデバイス103Pに関連するコード(たとえば、第1のコード126および/または第2のコード159)の実行のために使用されるプロファイルに対応する修正されたプロファイルをユーザデバイス112から受信する。一部の実施形態において、プロファイルアップデータ157は、GUI 138から修正されたプロファイルを受信する。方法200は、ステップ206に進み、ステップ206において、方法200は、修正されたプロファイルを用いてコードの実行のために使用されるプロファイルを更新する。一部の実施形態によれば、プロファイルアップデータ157は、プロファイル168の少なくとも1つのパラメータを、修正されたプロファイルの対応するパラメータと同じ値に修正する。方法200は、ステップ208に進み、ステップ208において、コード仮想化サーバ114上で第2のコード(たとえば、第2のコード159)を実行するためのコントローラに基づくデバイス103Pからの呼び出しを受信すると、方法200は、更新されたプロファイルを使用して第2のコードを実行する。一部の実施形態によれば、実行エンジン166は、更新されたプロファイル168を使用して第2のコード159を実行し、コントローラに基づくデバイス103Pに関連するコードの挙動の修正をもたらす。それから、方法200はステップ210に進み、ステップ210において、方法200は終了する。
【００３２】
図3は、本発明の実施形態による、コードに関連するプロファイルを変更することによって、コントローラに基づくデバイスによって実行するためのコードの挙動を修正するために図1の装置100の様々なデバイスによって実行される方法300の流れ図を示す。ユーザデバイス112は、方法302を実行し、コード仮想化サーバ114は、方法330を実行し、コントローラに基づくデバイス130Pは、方法350を実行し、遠隔のサービス118は、方法360を実行し、方法302、330、350、および360は、相まって方法300の機能を提供する。このことに関して、方法300のステップとして本明細書において説明される様々なステップが参照されるが、各ステップが方法302、330、350、および360のうちの1つでもあることは、明らかである。
【００３３】
ステップ304において、方法300は、上で検討されたように、たとえば、ディスプレイ134上でGUI 138を使用してコントローラに基づくデバイスのリスト140を表示する。リストは、ユーザデバイス112による要求に応答してコード仮想化サーバによって送信されたコントローラに基づくデバイス102、103、108のリスト(たとえば、リスト182)である可能性があり、またはリストは、その他の方法でユーザデバイス112に提供される可能性がある。一部の実施形態において、ユーザデバイス112は、リストをリスト140として記憶する。ステップ306において、方法300は、GUI 138を介してコントローラに基づくデバイス、たとえば、コントローラに基づくデバイス130Pの選択を受け取り、その選択は、ステップ308において、コード仮想化サーバ114に送信される。
【００３４】
方法300の実行は、ステップ332においてコード仮想化サーバ114に移り、ステップ332において、方法300は、1つまたは複数のプロファイル、たとえば、プロファイル168、およびコントローラに基づくデバイス103P上で実行するためのコードに関連するその他のプロファイルを取り出す。方法300は、ステップ334に進み、ステップ334において、プロファイル168およびその他のプロファイルが、修正のためにユーザデバイス112に送信される。
【００３５】
方法300の実行は、ステップ310においてユーザデバイスに移り、ステップ310において、方法300は、たとえば、GUI 138を使用してプロファイル168を含む受信されたプロファイルを表示する。ステップ312において、方法300は、プロファイル168を修正するために、プロファイル、たとえば、プロファイル168の選択を(たとえば、ユーザデバイス112においてユーザによって入力された入力、またはユーザによって選択された別のファイルもしくはデータベースからの入力として)受け取る。ステップ314において、方法300は、修正または更新されるためにプロファイル168に含まれる1つまたは複数のパラメータを表示する。ステップ316において、方法300は、プロファイル168のパラメータを修正するための入力を受け取り、ステップ318において、方法300は、ステップ316において修正されたパラメータを用いて修正されたプロファイルを生成する。方法300は、複数のパラメータに関連する複数の入力を受け取り、それに応じて修正されたプロファイルを生成する可能性がある。一部の実施形態によれば、方法300は、GUI 138を使用して修正されたプロファイルを生成する。さらに、方法300は、任意で、修正されたプロファイルを、たとえば、プロファイルストア142に記憶する。ステップ320において、方法300は、修正されたプロファイルをコード仮想化サーバ114に送信する。
【００３６】
方法300の実行は、ステップ336においてコード仮想化サーバ114に移り、ステップ336において、方法300は、修正されたプロファイルを使用してプロファイル168を更新する。方法300は、修正されたプロファイルの対応するパラメータに従って各パラメータを更新することによってプロファイルアップデータ157を使用してプロファイル168を更新するか、または修正されたプロファイルによってプロファイル168を置き換え、ステップ338において、方法300は、修正されたプロファイルをプロファイル168として記憶する。このようにして、ステップ304〜320およびステップ332〜338は、修正されたプロファイルを使用してプロファイル168を更新することを達成する。簡潔にするために、方法300の検討は、単一のプロファイル、たとえば、プロファイル168に関連してなされるが、方法300のステップは、当業者に容易に想到されるように、複数のプロファイルを組み入れるように拡張され得る。さらなるステップは、コードの挙動を修正するために更新されたプロファイルを使用してコントローラに基づくデバイス103Pに関連するコードを実行することに関する。
【００３７】
ステップ352において、方法300は、コントローラに基づくデバイス103P上で第1のコード126を実行する。方法300は、ステップ354に進み、ステップ354において、第1のコード126は、コード仮想化サーバ114上で第2のコード159を実行するために呼び出し128によってコード仮想化サーバ114を呼び出す。
【００３８】
方法300の実行は、ステップ340においてコード仮想化サーバ114に移り、ステップ340において、方法300は、ユーザデバイス112からの呼び出し128を受信する。ステップ342において、コード仮想化サーバ114は、上述のように、修正されたプロファイルを使用して更新されたプロファイル168を使用して第2のコード159を実行する。更新されたプロファイル168を使用して第2のコード159を実行することは、第2のコード159の挙動の違いを引き起こし、それによって、第1のコード126の挙動を引き起こす。しかし、第1のコード126も第2のコード159も、修正を必要としない。一部の実施形態において、方法300は、第2のコード159の実行の一部として遠隔のサービス118をプロビジョニングするための任意のステップ344を含む。プロファイル168を更新することによって、遠隔のサービス118のプロビジョニングに関連するコードの挙動が、修正される。たとえば、プロファイルの修正は、いくつかある中でもとりわけ、使用される遠隔のサービス(FACEBOOK、AMAZONなど)、使用されるアカウント、表示されるテキストの変更を望み通りにもたらし得る。
【００３９】
任意のステップ344が実行される場合、方法300の実行は、コントローラに基づくデバイス103P、コード仮想化サーバ114、またはユーザデバイス112の遠隔の1つまたは複数のサーバによって提供される可能性がある遠隔のサービス118に移る。ステップ362において、方法300は、第2のコード159に従って、およびたとえば修正されたプロファイル168のパラメータに従って遠隔のサービス118を実行する。ステップ364において、方法300は、遠隔のサービス118の実行の結果として生じるデータをコード仮想化サーバ114に送信する。遠隔のサービス118の実行の結果として生じるデータは、遠隔のサービスのプロビジョニングが成功したかどうかのステータスの更新、または遠隔のサービス118の任意の出力を含み得る。
【００４０】
方法300の実行は、ステップ346においてコード仮想化サーバ114に移り、ステップ346において、方法300は、遠隔のサービス118のプロビジョニングの結果として生じるデータをコントローラに基づくデバイス103Pおよび任意でユーザデバイス112に送信する。
【００４１】
方法300の実行は、ステップ356においてコントローラに基づくデバイス103Pに移り、ステップ356において、方法300は、第1のコード126を実行し続ける。任意のステップ344が実行されない場合、方法300の実行は、ステップ342の後、ステップ356においてコントローラに基づくデバイス103Pに移る。さらに、一部の実施形態において、コントローラに基づくデバイス103P上での第1のコード126の実行は、ステップ354の後、終了し、そのような実施形態において、方法300は、ステップ356を実行しない。
【００４２】
ステップ346において、データは、ユーザデバイス112に送信され、方法300の実行は、ステップ322においてユーザデバイスに移り、ステップ322において、方法300は、たとえば、データを受信し、ディスプレイ134上でGUI 138を介してデータを表示する。
【００４３】
有利なことに、コードに関連するすべてのその他のプロセス、たとえば、コードの開発、試験、展開は、維持される、つまり、そのようなプロセスに対する修正は、必要とされない。したがって、開示される実施形態によってプロファイルを修正することは、コード自体を修正することを必要とせず、開発、試験、および展開のステップを再実行することを必要とせずにコードの挙動を修正することを可能にする。
【００４４】
図4は、本発明の実施形態による、図1の少なくとも1つのコントローラに基づくデバイスのためのコードの挙動を制御するために少なくとも1つのコントローラに基づくデバイス(102、103、108)、たとえば、コントローラに基づくデバイス103Pおよびコード仮想化サーバ114によって実行される方法400の流れ図である。方法400は、ステップ402においてコントローラに基づくデバイス上で始まり、ステップ404に進み、ステップ404において、方法400は、コントローラに基づくデバイス103P上でコード(たとえば、第1のコード126)を実行し始める。第1のコード126は、コントローラに基づくデバイス103Pに関連する予め定義されたプログラムコードまたはプロセスを含む。第1のコード126は、コード仮想化サーバ114によって提供される機能に対する1つまたは複数の呼び出し128を含む。ステップ406において、呼び出しは、コントローラに基づくデバイス103Pからコード仮想化サーバ114に対して行われ、方法400は、コード仮想化サーバ114に切り替わる。方法400は、ステップ408に進み、ステップ408において、方法400は、コード仮想化サーバ114に記憶された第1のプロファイル(またはPROFILE 1)を使用してコード仮想化サーバ114上で呼び出された機能に対応するコード(たとえば、第2のコード159)を実行する。コード仮想化サーバ114上でステップ408を実行すると、ステップ410において、方法400は、コードの実行をコントローラに基づくデバイス103Pに戻す。ステップ412において、方法400は、コントローラに基づくデバイス103P上での第1のコード126の実行を完了する。一部の実施形態において、第1のコード126の実行は、ステップ410においてコード仮想化サーバ114上で完了する可能性があり、ステップ412において、コードの追加的な実行は、行われない可能性がある。方法400はステップ414に進み、ステップ414において、方法400は終了する。
【００４５】
ステップ402〜414は、プロファイル168として記憶されるPROFILE 1を使用してコントローラに基づくデバイス103Pのためのコードを実行することを示す。たとえば、実施形態において、コントローラに基づくデバイス103Pは、温度が所定の値未満に下がるときに暖房をつけるように構成された温度センサーである。温度が所定の値未満に下がるとき、コードが、PROFILE 1を使用して実行される。特に、条件が満たされる(温度が所定の値未満に下がる)と、第1のコード128は、暖房をつけ、遠隔のサービス118をプロビジョニングする(たとえば、FACEBOOK上で予め定義されたテキストを投稿する)ためにコード仮想化サーバ114を(呼び出し128によって)呼び出すように構成される。呼び出し128を受信すると、コード仮想化サーバ114は、ユーザのログイン資格証明情報および予め定義されたテキストを含むPROFILE 1を使用して第2のコード159を実行する。第2のコード159を実行することは、「暖房がつけられました。」と述べるユーザのアカウントからのFACEBOOKの投稿を生成する結果となる。この結果は、コントローラに基づくデバイス103Pのためのコード(第1のコード128および第2のコード159)の第1の挙動である。
【００４６】
本発明の一部の実施形態によれば、第1のプロファイル(PROFILE 1)が、たとえば、図2に関連して説明された方法200、または図3の方法300において説明されたステップ304〜320およびステップ332〜338を使用してユーザによって第2のプロファイル(PROFILE 2)に修正または更新される。それによって、プロファイル168は、PROFILE 2に更新される。それから、方法400が、ステップ402〜414と同様の方法で、たとえば、ステップ422〜434に関連して下で説明されたように、第2のプロファイル、PROFILE 2を使用して実行される。
【００４７】
方法400は、ステップ422においてコントローラに基づくデバイス103P上で始まり、ステップ424に進み、ステップ424において、方法400は、コントローラに基づくデバイス103P上でコード(たとえば、第1のコード126)を実行し始める。第1のコード126は、コントローラに基づくデバイス103Pに関連する予め定義されたプログラムコードまたはプロセスを含む。第1のコード126は、コード仮想化サーバ114によって提供される機能に対する1つまたは複数の呼び出し128を含む。ステップ426において、呼び出し128は、コントローラに基づくデバイス103Pからコード仮想化サーバ114に対して行われ、方法400は、コード仮想化サーバ114に切り替わる。方法400は、ステップ428に進み、ステップ428において、方法400は、コード仮想化サーバ114に記憶された更新されたプロファイル(またはPROFILE 2)を使用してコード仮想化サーバ114上で呼び出された機能に対応するコード(たとえば、第2のコード159)を実行する。コード仮想化サーバ114上でステップ428を実行すると、ステップ430において、方法400は、実行をコントローラに基づくデバイス103Pに戻す。ステップ432において、方法400は、コントローラに基づくデバイス103P上での第1のコード126の実行を完了する。一部の実施形態において、第1のコード126の実行は、ステップ430においてコード仮想化サーバ114上で完了する可能性があり、ステップ432において、コードの追加的な実行は、行われない可能性がある。方法400はステップ434に進み、ステップ434において、方法400は終了する。
【００４８】
ステップ422〜434は、上述の技術を使用してプロファイル168の修正の後にプロファイル168として記憶されるPROFILE 2を使用してコントローラに基づくデバイス103Pのためのコードを実行することを示す。コントローラに基づくデバイス103Pが温度が所定の値未満に下がるときに暖房をつけるように構成された温度センサーである例について続ける。温度が所定の値未満に下がるとき、コードが、今やPROFILE 2を使用して実行される。特に、条件が満たされる(温度が所定の値未満に下がる)と、第1のコード128は、暖房をつけ、遠隔のサービス118をプロビジョニングする(たとえば、TWITTER上で異なるテキストを投稿する)ためにコード仮想化サーバ114を(呼び出し128によって)呼び出すように構成される。呼び出し128を受信すると、コード仮想化サーバ114は、TWITTERのためのユーザのログイン資格証明情報および予め定義されたテキストを含むPROFILE 2を使用して第2のコード159を実行する。第2のコード159を実行することは、「ここは本当に寒い!」と述べるユーザのアカウントからのTWITTERの投稿を生成する結果となる。この結果は、コントローラに基づくデバイス103Pのためのコード(第1のコード128および第2のコード159)の第2の挙動である。このようにして、説明された実施形態は、コード自体を書き換えるかまたは修正する必要なしにコントローラに基づくデバイス103Pのためのコードの挙動を修正することを可能にする。
【００４９】
さらに、説明された例は、異なるサービスのプロビジョニングおよび異なるテキストの投稿に関連して挙動を変えるだけだが、コードとプロファイルとの組合せが、コードの挙動の広範な修正を提供するように構成される可能性がある。コードおよびプロファイルの構成のそのような変化は、これらの請求項において定義される本発明の範囲および精神を逸脱することなく当業者に容易に想到される。本明細書において検討された様々な実施形態によって示された技術は、それぞれのコントローラに基づくデバイスを個々に再プログラミングする必要を避けることによって、コードの挙動を制御または修正することをユーザにとって迅速で容易にする。一部の実施形態において、コード仮想化サーバ114は、既定のウェブインターフェースまたは任意のGUI (たとえば、スマートフォンのアプリもしくはコンピュータのアプリケーション)を通じたコードの生成、展開、遠隔の再プログラミングへのアクセスを提供するサービス(図示せず)として実装される。実施形態は、モノのインターネット(IoT)デバイスに関連して説明されているが、当業者は、開示された実施形態によって例示された技術がいくつかのその他のプログラミング環境に適用可能であることを容易に理解するであろう。
【００５０】
本明細書において説明された方法は、異なる実施形態においてソフトウェア、ハードウェア、またはこれらの組合せで実装される可能性がある。加えて、方法の順序は、変更される可能性があり、様々な要素が、追加されるか、並べ替えられるか、組み合わされるか、省略されるか、またはそれ以外の方法で修正される可能性がある。本明細書において説明されたすべての例は、非限定的に提示されている。様々な修正および変更は、本開示の恩恵を受ける当業者に明らかであろうようになされ得る。実施形態による実現が、特定の実施形態の文脈で説明された。これらの実施形態は、例示的であるように意図されており、限定的であるように意図されていない。多くの変更、修正、追加、および改良が、可能である。したがって、本明細書において単一のインスタンスとして説明された構成要素に関して、複数のインスタンスが提供され得る。様々な構成要素、動作、およびデータストアの間の境界は、ある程度任意的であり、特定の動作は、特定の例示的な構成文脈で示されている。機能のその他の割り当てが考えられ、添付の請求項の範囲内に入る可能性がある。最後に、例示的な構成において別個の構成要素として提示された構造および機能は、組み合わされた構造または構成要素として実装される可能性がある。これらのおよびその他の変更、修正、追加、および改良は、添付の請求項において定義される実施形態の範囲内に入る可能性がある。
【００５１】
以上は本発明の実施形態を対象とするが、本発明のその他のおよびさらなる実施形態が、本発明の基本的な範囲を逸脱することなく案出される可能性があり、本発明の範囲は、添付の請求項によって決定される。
【符号の説明】
【００５２】
100  システム、装置
102  コントローラに基づくデバイス、エッジデバイス
1021 ... 102N  コントローラに基づくデバイス
103  コントローラに基づくデバイス、エッジデバイス
1031 ... 103P  コントローラに基づくデバイス
1041 ... 104N  経路
1061 ... 106N  通信経路
108  ゲートウェイ
110  インターネット
112  ユーザコンピュータ、ユーザデバイス
114  コード仮想化サーバ
115  任意のデータベース
116  デバイスグループ
118  遠隔のサービス
120  デバイスコントローラ
122  周辺電子機器
124  メモリ
126  第1のコード
128  呼び出し
130  CPU
132  サポート回路
133  「保存」ボタン
134  ディスプレイ
135  「送信」ボタン
136  メモリ
138  グラフィカルユーザインターフェース(GUI)
140  リスト
142  プロファイルストア
144  リスト
145  コントローラに基づくデバイス
146  プロファイルの選択可能なリスト
147  プロファイル
148  パラメータのリスト
149  パラメータ
150  CPU
152  サポート回路
154  メモリ
156  インターフェース
157  プロファイルアップデータ
158  プロセスライブラリ
159  第2のコード
160  ソフトウェア開発キット(SDK)ジェネレータ
162  コードジェネレータ
164  プロファイルデータベース
166  実行エンジン
168  プロファイル
170  プロセスパラメータ
172  接続プロファイル
174  接続パラメータ
176  プロトコル
178  デバイスデータベース
182  リスト
184  インデックス
200  方法
300  方法
【図１】
0006626956.tif 000004
【図２】
0006626956.tif 000005
【図３】
0006626956.tif 000006
【図４】
0006626956.tif 000007