分析ビルダーの使用開始
分析ビルダーとは
分析ビルダーでは、新しいデータを生成したり、イベントを出力したりするために、ストリーミング データを変換または分析する分析モデルを構築できます。モデルはリアルタイムでデータを処理できます。
グラフィカル環境でモデルを構築するには、事前に構築されたブロックをモデルに結合します。モデル内のブロックは、小さなロジックをパッケージ化し、多数の入力、出力、およびパラメーターを持ちます。各ブロックは、センサーからのデータの受信、計算の実行、条件の検出、出力信号の生成など、特定の機能を実装します。ブロックの構成を定義し、ワイヤーを使用してブロックを接続します。モデルを編集したり、履歴データを使用してデプロイをシミュレートしたり、ライブシステムに対して実行したりできます。詳細については、モデルの理解を参照してください。
分析ビルダーは、次のツールで構成されています。
- モデルマネージャー
分析ビルダーを起動すると、モデルマネージャーが最初に表示されます。使用可能なすべてのモデルが一覧表示され、それらを管理できます。例えば、モデルマネージャーからモデルをテストしてデプロイしたり、モデルを複製または削除したりできます。新しいモデルを作成したり、既存のモデルを編集したりできます。この場合、モデルエディタが呼び出されます。また、独自のモデルの作成を開始する際に役立つサンプルも用意されています。詳細については、モデルマネージャーの使用を参照してください。 - モデル エディタ
モデルエディタでは、モデル内で使用するブロックと、それらの接続方法を定義できます。モデルエディタでは、各ブロックの機能を説明するユーザー表示のドキュメント(いわゆる「ブロックリファレンス」)を利用できます。詳細については、モデルエディタの使用を参照してください。 - インスタンス エディタ
テンプレート パラメーターがモデルで定義されている場合、インスタンス エディタでは、同じモデルの異なるインスタンスを設定し、個別にアクティブ化して管理することができます。インスタンス エディタは、モデル エディタで定義されているテンプレート パラメーターを使用します。詳細については、インスタンスエディタの使用を参照してください。
ブロックは Apama のイベント処理言語(EPL)で実装されています。実行時に EPL コードは Apama コリレーターで実行され、モデルが実行されます。実行時の動作と制限について理解しておくことが重要です。これらについては、後のトピックで説明します。
最初のステップ:最初のモデルの作成
このトピックでは、新しいモデルを追加および設計する方法と、その出力を表示する方法について簡単に説明します。これは、分析ビルダーが提供するすべての機能を、包括的に説明することを意図したものではありません。そのため、説明は最小限にとどめています。詳細については、このドキュメントの残りの部分を参照してください。
以下の手順では、少なくとも1台のデバイスが Things Cloud にすでに登録されている必要があります。これは、すでにメジャーメントを Things Cloud に送信しているデバイスであることが望ましいです。これらの最初のステップでは、Cumulocity IoT Sensor App がインストールされているスマートフォンを使用していることを前提としています。詳細については、Cumulocity IoT Sensor Appを参照してください。
追加するモデルには、次の 3 つのブロックが含まれます。
- デバイスからメジャーメントを受け取る入力ブロック
- 時間の経過に伴うメジャーメントの平均を計算するブロック
- 計算された平均値を Things Cloud のデバイス管理アプリケーションに送信して表示できるようにする出力ブロック
以下のすべての手順を完了すると、モデルは次のようになります。
ステップ 1:分析ビルダーに切り替える
ストリーミング分析アプリケーションのホーム画面で、分析ビルダーの見出しの下に表示される 開く ボタンをクリックします。
または、左側のナビゲータで分析ビルダーをクリックします。
ステップ 2:新しいモデルを追加する
分析ビルダーを起動すると、最初に表示されるページはモデルマネージャーです。
- モデル タブで、ツールバーの 新しいモデル をクリックします。
- 表示されるダイアログボックスでモデル名を入力し、OK をクリックします。
ステップ3:入力ブロックを追加する
モデルはモデルエディタで設計します。モデル名を入力すると、モデルエディタが表示されます。左側に表示されるパレットには、モデルに追加できるすべてのブロックが含まれています。ブロックを追加するには、パレットからキャンバスにブロックをドラッグします。
-
パレットで、入力 を展開します。
-
測定入力 ブロックをキャンバスにドラッグします。 ブロックパラメーター エディタが自動的に表示されます。
備考ブロックパラメーター エディタが表示されない場合(例えば、入力ブロックをキャンバスにドラッグした後、キャンバス上の空きスペースをクリックした)、マウスの左ボタンを使用してブロックをクリックしてブロックパラメーター エディタを表示します。 -
入力ソース に表示されているメニューをクリックします。表示されるダイアログボックスで、デバイスの選択 ボタンをクリックしてデバイスを選択します。このボタンは、デバイスの上にマウスを置くと表示されます。
備考デフォルトでは、入力ブロックはすべての入力ソースを監視しています。つまり、すべての入力 オプションが設定されています。ただし、これらの最初のステップではスマートフォンを使用していることを前提としているため、上記のように 1 つののデバイスを選択する必要があります。 -
フラグメントおよびシリーズ ドロップダウンリスト ボックスから、入力ブロックが監視するフラグメントとシリーズを選択します。 デバイスが以前にデータを送信したことがある場合、ドロップダウンリスト ボックスには 1 つ以上の値が表示され、選択できます。Cumulocity IoT Sensor App の例は、c8y_Gyroscope => gyroscopeY になります。
-
タイムスタンプを無視 チェックボックスをオンにします。 これにより、メジャーメントが受信したときと同じ順序で処理されるようになります。
現在選択されているブロックの詳細情報が必要な場合は、右側のドキュメント ペインでブロックリファレンスをご覧ください。現在ドキュメント ペインが表示されていない場合は、ドキュメントアイコンをクリックします。
ステップ 4:メジャーメントの平均を計算するブロックを追加する
- パレットで、集約 を展開します。
- 平均値 (平均) ブロックをキャンバスにドラッグします。
- ブロックパラメーター エディタで、ウィンドウ期間 (秒) の値を指定します。例えば「10」とします。 指定した秒数は、メジャーメントの平均化の期間を制御するために使用されます。値が小さいほど値の変化にすばやく反応し、値が大きいほど値がより滑らかになります。
ステップ 5:出力ブロックを追加する
-
パレットで、出力 を展開します。
-
測定出力 ブロックをキャンバスにドラッグします。
-
出力先として、入力ブロックと同じデバイスを選択します。
備考入力ブロックのデフォルト オプションである すべての入力 のままにしている場合、出力先を トリガーデバイス に設定する必要があります。ただし、これらの最初のステップでは、単一のデバイスを使用していることを前提としているため、入力ブロックと同じデバイスを選択する必要があります。 -
フラグメント名として「apama_Average」を指定します。
-
シリーズ名として「value」を指定します。
ステップ 6:ブロックを接続する
あるブロックから別のブロックに値を渡すには、ブロックをワイヤーで接続する必要があります。ワイヤーをポート、つまりブロックの左側または右側に表示されている小さな円に接続します。
- 入力ブロックの 値 出力ポートをクリックし、平均値 (平均) ブロックの 値 入力ポートまでマウスをドラッグします。
- 平均値 (平均) ブロックの 平均値 出力ポートをクリックし、出力ブロックの 値 入力ポートまでマウスをドラッグします。
ステップ 7:モデルを保存してモデルマネージャに戻る
-
モデル エディタのツールバーで、保存アイコン をクリックして、新しく作成したモデルを保存します。
-
モデル エディタのツールバーで、閉じるアイコン をクリックしてモデル エディタを終了し、モデルマネージャーに戻ります。
備考保存されたモデルのみがモデルマネージャーの モデル タブにリストされます。新しいモデルを追加し、モデルを保存せずにモデル エディタを終了すると、そのモデルはモデルマネージャーにリストされず、行った編集内容はすべて失われます。
ステップ 8:本稼働モードでモデルをアクティブ化する
新しく追加されたモデルのカードが、モデルマネージャーの モデル タブに表示されます。新しいモデルは自動的にドラフトモードおよび非アクティブ状態に設定されます。ここで、新しいモデルを本稼働モードでアクティブ化します。これによりモデルがデプロイされ、デバイスからのメジャーメントが処理されるようになります。
- 現在 Draft と表示されているカードのドロップダウンメニューをクリックし、Production を選択します。
- 現在 非アクティブ と表示されているカードのトグルボタンをクリックします。これにより状態が アクティブ に変更されます。
ステップ 9:デバイス管理アプリケーションに移動しメジャーメントを表示する
アクティブなモデルから送信されたメジャーメントを表示するには、デバイス管理アプリケーションに切り替える必要があります。詳細については、デバイス管理アプリケーションを参照してください。
-
デバイス管理アプリケーションに移動します。
-
左側のナビゲータで、デバイス、すべてのデバイス の順にクリックします。
-
デバイスを見つけて、その名前をクリックし、デバイスの詳細を表示します。
-
左側の 計測値 をクリックします。これは、デバイスでメジャーメントが利用可能な場合にのみ表示される動的タブです。
結果のページには、デバイスから送信されたデータを視覚化するいくつかのグラフが表示されます。「Apama_average」というタイトルのグラフも表示され、新しく作成したモデルから送信された値を確認できます。この新しいグラフを表示するには、ページをリロードする必要がある場合があります。計測値 タブの詳細については、計測値(メジャーメント)を参照してください。
最初のステップ:サンプルからモデルの作成
このトピックでは、サンプルからモデルを作成する方法の概要を説明します。これは、測定データがない場合にアラームを作成 サンプルに基づいています。新しいモデルでは、指定された期間に新しいメジャーメント データが受信されなかった場合にアラームが作成されます。
このトピックは、分析ビルダーによって提供されるあらゆる可能性を包括的に説明することを目的としたものではありません。そのため説明は最小限に抑えられています。詳細については、このドキュメントの残りの部分を参照してください。
以下の手順では、デバイスがすでに Things Cloud に登録されている必要があります。これは、すでにメジャーメントを Things Cloud に送信しているデバイスであることが望ましいです。これらの最初の手順では、Cumulocity IoT Sensor App がインストールされているスマートフォンを使用していることを前提としています。詳細については、Cumulocity IoT Sensor Appを参照してください。
次の図は、測定データがない場合にアラームを作成 サンプルで定義されているブロックを示しています。
このサンプルでは、事前定義されたテンプレート パラメーターを使用します。サンプルからモデルを作成した後、モデルの複数のインスタンスを作成し、テンプレート パラメーターに異なる値を指定できます。テンプレート パラメーターのないモデルとテンプレート パラメーターのあるモデルの違いについて説明している モデルも参照してください。
次は、サンプル内で定義されているブロックの簡単な説明です。
- 入力は、測定入力 ブロックが、テンプレート パラメーター 入力フラグメントおよびシリーズ で定義された特定の値と一致する新しい受信メジャーメントを待機することから始まります。そのパラメーターの名前は、入力ブロックに表示されるラベルです。
- 測定入力 ブロックからの出力は 不足データ ブロックに渡され、テンプレート パラメーター 持続時間 (秒) で定義された時間内に入力が受信されなかった場合に出力がトリガーされます。
- 不足データ ブロックからの出力は、アラーム出力 ブロックの アラームの作成 入力ポートのトリガーとして使用されます。アラームタイプ テンプレート パラメーターの名前は、出力ブロックに表示されるラベルです。
- 測定入力 ブロックからの出力は、管理オブジェクト入力 ブロックからの入力とともに、テキストの代替 ブロックの オブジェクト 入力ポートへの入力として渡されます。これは、テキストの代替 ブロックの ソース 入力ポートにも渡されます。デバイスまたはデバイスのグループ テンプレート パラメーターの名前は、入力ブロックに表示されるラベルです。
- テキストの代替 ブロックは、プレースホルダーの置換をサポートします。例えば、入力テキストが「#{type} のメジャーメントがありません」の場合、
#{type}
値はメジャーメントの実際のtype
に置き換えられます。詳細については、テキストの代替を参照してください。 - テキストの代替 ブロックは、アラームテキスト テンプレート パラメーターをユーザー入力として使用するように構成されています。必要な置換を適用し、置換を含む文字列を 出力 出力ポートから アラーム出力 ブロックの メッセージ 入力ポートに送信します。
- アラーム出力 ブロックでは、アラームタイプ および アラーム重大度 テンプレート パラメーターを構成する必要があり、不足データ ブロックによってトリガーされるたびにアラームが作成されます。
ステップ 1:サンプルから新しいモデルを作成する
モデルマネージャーの サンプル タブには、分析ビルダーで提供されるすべてのサンプルモデルが一覧表示されます。カードをクリックするだけでサンプルを表示できますが、編集したりデプロイしたりすることはできません。ただし、サンプルからモデルを作成することで、サンプルを独自のモデル開発の基礎として使用できます。
-
モデルマネージャーの サンプル タブに移動します。
-
測定データがない場合にアラームを作成 サンプルのアクションメニュー をクリックし、サンプルからモデルを作成をクリックします。 新しいモデルはモデル エディタにすぐに表示されます。サンプルと同じ名前、説明、タグが付いています。
-
モデルの名前を変更する場合は、ツールバーの左側に表示される モデル設定 をクリックします。表示されるダイアログボックスで新しい名前を指定できます。
-
モデル エディタのツールバーで、保存アイコン をクリックして新しいモデルを保存します。
-
モデル エディタのツールバーで、閉じるアイコン をクリックしてモデル エディタを終了し、モデルマネージャーに戻ります。
備考モデルマネージャーの モデル タブには、保存されたモデルのみがリストされることに注意してください。
ステップ 2:モデルの新しいインスタンスを作成する
サンプルモデルではテンプレート パラメーターを使用します。そのため、サンプルをモデルに変換するときは、いわゆるテンプレートモデルを作成します。モデルマネージャーで、テンプレートモデルを直接アクティブ化することはできません。代わりに、モデルのインスタンスを少なくとも 1 つ作成する必要があります。その後、インスタンス エディタを使用して、そのインスタンスをアクティブ化できます。
- モデルマネージャーの モデル タブで、新しく作成したモデルのカードを見つけます。
- インスタンス エディタを起動するには、現在カードに表示されている 0 インスタンス をクリックします。
- 新しいインスタンス をクリックして、新しいモデルの最初のインスタンスを作成します。
ステップ 3:テンプレート パラメーターの値を入力する
インスタンス エディタでは、作成したインスタンスごとに行が表示されます。テンプレートモデルで定義されているテンプレート パラメーターごとに列が提供され、テンプレート パラメーターの名前が列ヘッダーになります。インスタンスがアクティブでない限り、そのインスタンスの値を調整できます。
すべてのテンプレート パラメーター (列) が画面に表示されない場合は、インスタンス表の下にある水平スクロールバーを使用します。
-
デバイスまたはデバイスのグループ 列ヘッダーの下のフィールドをクリックします。表示されるダイアログボックスで、このインスタンスに使用するデバイスを選択し、デバイスの選択 をクリックします。
-
入力フラグメントおよびシリーズ 列ヘッダーの下のテキストボックスに、監視する測定入力の詳細を次の形式で指定します。
<valueFragmentName>.<valueSeriesName>
例えば、メジャーメントフラグメントが
c8y_Gyroscope
、シリーズがgyroscopeX
の場合、次のように入力する必要があります。c8y_Gyroscope.gyroscopeX
ヒント測定入力 ブロックの定義済みテンプレート パラメーターを変更せずに、デバイスで利用可能なフラグメントとシリーズを確認したい場合は、モデル エディタに戻り、デバイスの入力ブロックをパレットからキャンバスにドラッグして、フラグメントおよびシリーズ ドロップダウン リストボックスを開きます。 これには、使用できるすべての値がリストされます。ただし、この場合は、ドロップダウン リストボックスに表示される=>
の代わりに、ドット (.) を使用する必要があります。使用する値を決定した後は、必ずこのブロックを再度削除してください。 -
接続時間 (秒)、アラームタイプ、アラームテキスト、アラームの重大度 列ヘッダーの下のフィールドには、すでにデフォルト値が含まれています(上記のブロックの説明も参照)。要件に合わせて調整してください。例えば、期間を 30 秒に変更し、アラームタイプの名前を「MyAlarmType」に変更し、事前定義されたアラームテキストを保持し、アラームの重大度を マイナー に設定します。
-
インスタンス エディタのツールバーで、保存 をクリックします。
ステップ 4:インスタンスをアクティブ化する
次に、本稼働モードでインスタンスをアクティブ化します。これによりインスタンスがデプロイされ、デバイスからのメジャーメントが処理されるようになります。
- インスタンス エディタの 実行モード 列で、インスタンスのドロップダウンメニューをクリックし、Production を選択します。
- インスタンス エディタの ステータス 列で、現在 非アクティブ と表示されているボタンをクリックして、ステータスを アクティブ に変更します。
ステップ 5:デバイスからデータを送信する
インスタンスがアクティブ化されたら、デバイスからデータを送信します。インスタンスは、メジャーメントデータが到着し始めるとデバイスの監視を開始し、設定された接続時間内にデータが受信されない場合はアラームを作成します。
スマートフォンからのジャイロスコープ測定の例では、Cumulocity IoT Sensor App の実行中にスマートフォンのディスプレイをオフにするだけで十分です。
ステップ 6:デバイス管理アプリケーションに移動しアラームを表示する
アクティブなインスタンスから送信されたアラームを表示するには、デバイス管理アプリケーションに切り替える必要があります。 詳細については、デバイス管理アプリケーションを参照してください。
- デバイス管理アプリケーションに移動します。
- 左側のナビゲータで デバイス、すべてのデバイス の順にクリックします。
- デバイスを見つけて、その名前をクリックしデバイスの詳細を表示します。
- 左側の アラーム をクリックします。
- 表示されたページで、デバイスから送信されたアラームを確認します。上記のようにインスタンスを編集した場合は、30 秒後に「タイプ c8y_Gyroscope のメジャーメントが欠落しています」というマイナーアラームが表示されます。アラーム タブの詳細については、アラームの操作を参照してください。
モデルの理解
モデル
モデルは、ワイヤーで相互に接続されたブロックのネットワークを持つことができるコンテナです。
モデル内のブロックの動作は、他のブロックに依存しません。モデル内には同じブロックの複数のインスタンスが存在し、構成可能なパラメーターまたはブロックに接続されている入力に応じて、各インスタンスの動作が異なる場合があります。
テンプレート パラメーターを使用しないモデルと、テンプレート パラメーターを使用するモデルの 2 つの異なるタイプのモデルを作成できます。
テンプレート パラメーターのないモデル
モデル内のすべてのブロックは、定義された入力デバイスまたはデバイスのグループを使用し、定義されたパラメーター値を含みます。このようなモデルは、モデルマネージャーですぐにアクティブ化できます。
テンプレート パラメーターを含むモデル
1 つ以上のテンプレート パラメーターが定義されたモデルを「テンプレートモデル」と呼びます。ブロック パラメーターの型がテンプレート パラメーターの型と同じであれば、テンプレート パラメーターは任意の数のブロック パラメーターにバインドできます。
例えば、デバイス名用のテンプレート パラメーターと、しきい値用の別のテンプレート パラメーターを定義できます。これらのテンプレート パラメーターは、後でモデルのさまざまなインスタンスで個別に設定できます。例えば、1 つのテンプレート パラメーターでデバイスを指定し、そのデバイスを複数の入力および出力ブロックに使用できます。または、1 つのインスタンスがしきい値 100 のデバイス ABC を使用し、別のインスタンスがしきい値 200 のデバイス XYZ を使用することができます。テンプレート パラメーターを持つモデルは、モデルマネージャーで直接アクティブ化できません。モデルのインスタンスを少なくとも 1 つ作成する必要があります。その後、インスタンス エディタを使用して各インスタンスを個別にアクティブ化できます。
テンプレート パラメーターのスコープは、それらが定義されているモデルに対してローカルです。つまり、あるモデルで定義されたテンプレート パラメーターは、同じテナントまたはサブテナントにデプロイされている他のモデルでは使用できません。テンプレート パラメーターの名前は、それが定義されているモデルのスコープ内で一意である必要があります。
このタイプのモデルには 2 つの関連するロールがあり、これらは同じ人物でも異なる人物でもかまいません。
- モデル作成者
モデル作成者はモデルを作成し、そのすべてのブロック、パラメーター、ワイヤーを定義します。最も重要なことは、モデル作成者がテンプレート パラメーターを作成し、それらを選択したブロック内の適切なパラメーターにバインドすることです。 - インスタンス管理者
インスタンス管理者は、モデルのインスタンスを作成し、各インスタンスで使用されるテンプレート パラメーターに値を割り当てます。
モデル作成者には、テンプレート パラメーターを定義するための次のオプションがあります。
- インスタンス エディタでデフォルト値として提供されるデフォルト値を持つことができます。インスタンス管理者は、デフォルト値のままにすることも、別の値に変更することもできます。
- 値の設定をオプションにすることもできます。インスタンス管理者は、値を指定するか、値を空白のままにすることができます。
- 値の設定を必須にすることもできます。この場合、インスタンス管理者は値を提供する必要があります。必須値とは、オプションではなく、デフォルト値がない値です。
テンプレートモデル インスタンス
テンプレートモデル インスタンスは、テンプレート パラメーターを持つモデルで使用される値を保持します。
例えば、2 つのデバイスが、デバイスからのデータに対して同様のチェックを行う場合がありますが、それらのチェックには異なるしきい値が使用されます。この場合、使用するデバイスとしきい値を指定して、各デバイスのインスタンスを構成します。
各インスタンスは、個別にアクティブ化、非アクティブ化、または異なる実行モードを使用できます。
ブロック
ブロックはモデルの基本的な処理単位です。各ブロックにはいくつかの事前定義された機能があり、それに応じてデータを処理します。ブロックには、パラメーターのセットと入力ポートと出力ポートのセットを含めることができます。
モデル エディタのパレットでは、次のタイプのブロックを選択できます。
- 入力ブロック
外部ソースからデータを受信します。通常、入力ブロックは Things Cloudインベントリに登録されているデバイス、デバイスグループ、スマートグループ、アセット、またはすべての入力ソースを表します。詳細については、入力ブロックも参照してください。 - 出力ブロック
データを外部ソースに送信します。通常、出力ブロックは Things Cloud インベントリに登録されているデバイスを表します。ただし、指定した受信者にメールまたは SMS を送信するためのブロックもあります。詳細については、出力ブロックを参照してください。 - 処理ブロック
入力ブロックからデータを受信し、その結果のデータを出力ブロックに送信します。詳細については、処理ブロックを参照してください。
ブロックは、その入力ポートを介して別のブロックからデータを受信できます。ブロックは、出力ポートを通じて別のブロックにデータを送信できます。ブロックが異なれば、入力ポートまたは出力ポートの数も異なります。また、ブロックによっては、入力ポートのみまたは出力ポートのみを備えることもあります。ほとんどのブロックでは、すべての入力ポートまたは出力ポートを接続する必要はありません。
ブロックには、ブロックの動作を定義する構成可能なパラメーターを含めることができます。これらのパラメーターは、ブロックの要件に応じて任意または必須のいずれかです。パラメーターは、値またはテンプレート パラメーターを使用して構成できます。
同じブロックを複数回使用する場合、同じパラメーターに異なる値を指定できます。例えば、しきい値 ブロックには しきい値 という名前の構成可能なパラメーターがあります。しきい値 ブロックの 2 つのインスタンスを使用し、このパラメーターをブロックごとに異なるように構成すると、ブロックは異なるしきい値違反を報告します。
入力ブロック
入力ブロックは、外部ソースからデータを受信する特殊なタイプのブロックです。データを配線で理解できる形式に変換し、接続されたブロックにデータを転送します。例えば、入力ブロックが Things Cloud から Measurement
イベントを受け取ると、イベントから必要な情報を抽出し、その情報を接続されたブロックに転送してさらなる処理を行います。
モデルは複数のデバイスからのデータを処理でき、その際に(複数のコアを使用して)スケールアップできます。詳細については、さまざまなデバイスでのモデルの実行を参照してください。
さらに、分析ビルダーは、「ブロードキャスト デバイス」と呼ばれる入力デバイスをサポートします。これらの入力デバイスからの信号は、すべてのデバイスとモデルで利用できます。詳細については、ブロードキャスト デバイスを参照してください。
出力ブロック
出力ブロックは、接続された処理ブロックからデータを受信する特殊なタイプのブロックです。データを外部ソースが理解できる形式に変換し、データを外部ソースに転送します。例えば、出力ブロックが接続された処理ブロックからデータを受け取ると、そのデータを Operation
オブジェクトにパッケージ化し、そのオペレーションを Things Cloud に送信します。
出力ブロックに トリガーデバイス を指定できます。これは、出力をトリガーしたデバイスに出力を送り返すために使用できる特別なデバイスです。モデルは複数のデバイスからのデータを処理でき、その際に(複数のコアを使用して)スケールアップできます。詳細については、さまざまなデバイスでのモデルの実行を参照してください。
他の出力ブロックには、メールを送信するための 電子メールの送信 テキストメッセージを送信するための SMS を送信 があります。これらのブロックは、メールやテキストメッセージを送信できるようにするために、テナント環境が正しく構成されている必要があります。詳細については、SMS プロバイダーも参照してください。他のブロックとは異なり、これらは Things Cloud プラットフォーム内のデバイスに関連付けられていません。
処理ブロック
処理ブロックにはさまざまな種類があります。これらは機能に応じて、モデル エディタのパレットでさまざまなカテゴリにグループ化されています。
カテゴリ | 含まれるブロック |
---|---|
ロジック | データに対して論理演算を実行します。 AND や OR などのブロックがこのカテゴリに含まれます。 |
計算 | データに対して数学的演算を実行します。 相違、しきい値、方向検出、差分、式 などのブロックがこのカテゴリに含まれます。 |
集約 | 値のウィンドウに渡ってデータの集計を実行します。 平均値 (平均) や インテグラル などのブロックがこのカテゴリに含まれます。 |
フロー操作 | データの流れを操作します。 時間遅延、ゲート、パルス、ラッチ値などのブロックがこのカテゴリに含まれます。 |
ユーティリティ | さまざまなユーティリティ関数を提供します。 切り替え や 不足データ などのブロックがこのカテゴリに属します。 |
処理ブロックの例 - しきい値ブロック
次の例は、ブロックパラメーター エディタとともに、モデル エディタでブロックがどのように表示されるかを示しています。これは、入力値がしきい値に違反するかどうか、またはしきい値を超えるかどうかを検出する しきい値 ブロックを示しています。
パラメーターは次の通りです。
- しきい値:
float
タイプ。この値は入力値と比較されます。 - 方向: 調べる方向 - 入力値が定義されたしきい値を上回るか下回るか、またはしきい値を超えるかどうかを示します。
入力ポートは次の通りです。
- 値:
float
タイプ。定義されたしきい値と比較されるブロックへの入力値。 - リセット:
pulse
タイプ。信号を受信すると、ブロックの状態がリセットされ、以前に受信した入力値は使用されなくなります。
出力ポートは次の通りです。
- 違反されたしきい値:
boolean
タイプ。しきい値を超えた場合、true
に設定されます。つまり、入力値が定義されたしきい値の範囲を超えています。 - しきい値内:
boolean
タイプ。しきい値を超えていない場合、true
に設定されます。つまり、入力値は定義されたしきい値の範囲内にあります。 - 超過したしきい値:
pulse
タイプ。入力値がしきい値を超えた場合、しきい値の一方の側からもう一方の側に進むときに信号を送信します。
独自のブロックの作成
Analytics Builder Block SDK を使用すると、カスタムブロックを作成、テスト、パッケージ化し、これらのブロックを分析ビルダーにアップロードできます。
Block SDKは、GitHubの https://github.com/Cumulocity-IoT/apama-analytics-builder-block-sdk から入手できます。詳細については、GitHub のドキュメントを参照してください。
カスタムブロックは、Apama のイベント処理言語(EPL)で作成します。ブロックを作成したら、それを拡張機能にパッケージ化してアップロードできます。拡張機能を構築してアップロードするためのコマンドラインの例は、次の通りです。
analytics_builder build extension --input path --cumulocity_url $C8Y_URL --username $C8Y_USERNAME --password $C8Y_PASSWORD --name customBlocks --restart
拡張機能をアップロードするには、--username
引数で指定されたユーザーは、前提条件にリストされている権限に加えて、Things Cloud の「インベントリ」に対する作成権限を持っている必要があります。
上記のコマンドを実行すると、Apama-ctrl マイクロサービスが再起動されます。再起動をリクエストするには、ユーザーは「CEP 管理」の管理者権限を持っている必要があります。
ワイヤー
1 つのブロックは、ワイヤーを使って別のブロックに接続されます。あるブロックの出力ポートと別のブロックの入力ポート間のすべてのデータ転送は、ワイヤーを使用して行われます。すべての接続は互換性のあるタイプ間で行う必要があります。詳細については、ワイヤーとブロックを参照してください。
ユースケース
リアルタイムのセンサーデータを取得し、このデータを分析する状況を考えてみましょう。簡単にするために、センサーは 1 つだけであり、次のことに関心があると仮定します。
- 一定期間にわたるセンサー読み取り値の平均値を知りたい。
- 定義されたしきい値を使用して、センサー読み取り値の突然の変化を検出したい。
- センサーの読み取り値が特定の範囲内にあることを確認し、読み取り値がその範囲を超えた場合にアラートが作成されるようにしたいと考えている。例えば、圧力のメジャーメントを取得していて、最大圧力がデバイスが処理できる範囲を超えないようにする必要がある。
この例のモデルには、次のブロックがあります。
-
入力ブロックは、デバイス名として 入力デバイス が表示されます。 受信データはリアルタイムかつ連続しており、入力ブロックはセンサーからデータを受け取ります。データは 平均値 (平均)、差分、しきい値 ブロックに渡されます。これらのブロックの入力ポートは、入力ブロックの出力ポートに接続されます。
-
平均値 (平均) ブロックは、一定期間にわたって受信した読み取り値の平均値を求め、これを接続された出力ブロックに渡します。
-
差分 ブロックは、連続する入力値の差を計算し、計算された値を接続された しきい値 ブロックに渡します。
-
モデルには、しきい値 ブロックの 2 つの異なるインスタンスがあります。 しきい値 ブロックは、入力値を定義されたしきい値と比較します。最初のインスタンスは 差分 ブロックに接続されており、差分値がしきい値を超えた場合に違反を報告します。2 番目のインスタンスは入力ブロックに接続されており、入力値がしきい値内にない場合に違反を報告します。
-
モデルには、出力デバイスをデバイス名として示す出力ブロックの 3 つのインスタンスがあります。 最初のインスタンスは、センサー読み取り値の平均を送信します。2 番目のインスタンスは、連続するセンサー読み取り値の変化が設定されたしきい値を超えた場合に出力を生成します。3 番目のインスタンスは、センサー値が設定されたしきい値を超えた場合に出力を生成します。
モデルマネージャーの使用
モデルマネージャーのユーザーインターフェース
モデルマネージャーには 2 つのタブがあります。モデル タブには現在定義されているすべてのモデルが表示され、サンプル タブには独自のモデルの作成を開始するのに役立つサンプルモデルが表示されます。
モデルタブ
モデル タブには、現在の Things Cloud 環境内で利用可能なすべての分析モデルがカードとしてリストされます。ここから新しいモデルを追加したり、既存のモデルを管理したりできます。
モデルを編集するには、そのモデルに表示されているカードをクリックするだけです(既存のモデルの編集 参照)。新しいモデルを追加するか、既存のモデルを編集するとモデル エディタが呼び出され、モデルを構成するブロックとワイヤーを定義します。詳細については、モデル エディタの使用を参照してください。
モデルには 2 つのタイプがあり、これらのモデルのカードの外観は異なります。
-
カードにモード(Draft または Production など)と状態(アクティブ または 非アクティブ)が表示される場合、それはテンプレート パラメーターを持たないモデルに関連します。このようなモデルは、モデルマネージャーですぐにアクティブ化できます。詳細は モデルのデプロイ を参照してください。
デプロイされたモデルのカードに、ランタイムエラーアイコン
が表示されている場合、このモデルはイベントを処理していません。エラーアイコンをクリックすると、問題の内容に関する情報が表示されます。
-
モデルにテンプレート パラメーターがある場合、モデルはテンプレートとして機能します。この場合、定義済みのアクティブなインスタンスの数がカードに表示されます。テンプレートモデルは、モデルマネージャーで直接アクティブ化されません。代わりに、インスタンス エディタを使用して多数のインスタンスを作成し、各インスタンスがテンプレート パラメーターの値を提供します。各インスタンスにはモードがあり、テンプレート パラメーターのないモデルと同様に、インスタンス エディタでアクティブ化および非アクティブ化できます。
インスタンスを編集するには、インスタンスの合計数をクリックするだけです(モデルのインスタンスの編集参照)。これにより、インスタンス エディタが起動されます。詳細については インスタンス エディタの使用 を参照してください。
テンプレートモデルのカードを裏返すと、詳細が表示されます。これを行うには、インスタンスの概要を表示 をクリックします。さまざまなモードのインスタンスの数を確認できます。
テンプレートモデルのカードに
のようなエラーアイコンが表示されている場合、少なくとも 1 つのインスタンスがイベントを処理していません。エラーアイコンをクリックすると、問題の内容に関する情報が表示されます。
モデルにテンプレート パラメーターがない限り、インスタンスはゼロになり、カードにはモードを選択してアクティブにするためのコントロールが表示されます。
モデルに対して表示される各カードの右上には、モデルを管理するためのコマンド(モデルのダウンロードや削除など)を含むアクションメニュー が含まれています。
モデルに説明またはタグが定義されている場合、これがそのモデルのカードに表示されます。モデルの名前、説明、タグを変更したい場合は、モデル エディタで行う必要があります。モデルの名前、説明、タグの変更 を参照してください。
カードのリストが長い場合、モデル名 検索ボックスに名前を入力すると、探しているモデルを簡単に見つけることができます。または、モデル名の一部を入力することもできます。例えば、「test」という単語を入力すると、名前にこの単語が含まれるすべてのモデルが検索されます。入力する文字は、モデル名の任意の位置に含めることができます。これらの検索条件では大文字と小文字が区別されません。検索条件が現在適用されている場合、検索ボックスの横に 検索をクリア と表示されます。これをクリックすると検索がクリアされ、利用可能なカードがすべて表示されます。
フィルターを使用して、表示されるカードの数を減らすこともできます。詳細は モデルとサンプルのフィルタリング を参照してください。
サンプルタブ
サンプル タブには、分析ビルダーでカードとして提供されるすべてのサンプルモデルがリスト表示されます。
サンプルの名前またはその説明がカードに完全に表示されていない場合、名前または説明の上にマウスを置くと、ツールチップに完全な名前または説明が表示されます。
サンプルを表示することはできますが、編集またはデプロイすることはできません。サンプルを表示するには、サンプルに表示されているカードをクリックするだけです。その後、モデル エディタが読み取り専用モードで起動されます。詳細については、サンプルの表示 を参照してください。
サンプルをさらなる開発の基礎として使用する場合、サンプルからモデルを作成できます。その後、要件に応じて新しいモデルを編集し、デプロイできます。詳細については、サンプルからモデルの作成 を参照してください。
サンプル名 検索ボックスに名前または名前の一部(「ジオフェンス」や「メール」など)を入力すると、サンプルを簡単に見つけることができます。モデル タブの モデル名 検索ボックスについて上記で説明したのと同じ方法で、検索条件を入力およびクリアします。サンプルをタグでフィルタリングすることもできます。詳細については、モデルとサンプルのフィルタリング を参照してください。
モデルとサンプルのフィルタリング
モデルマネージャーには、モデル タブと サンプル タブに表示されるカード数を減らすいくつかの方法が用意されており、これにより、探しているモデルやサンプルをすばやく見つけることができます。
フィルタリングは、モデルマネージャーのユーザーインターフェース で説明されている モデル名 またはサンプル名 検索ボックスで指定したモデル名またはサンプル名と組み合わせて使用することもできます。
モデルまたはサンプルをフィルターする
-
モデルマネージャーの モデル または サンプル タブで、ツールバーの その他のフィルター をクリックします。
-
表示されるダイアログボックスで、モデルに対して 1 つ以上のフィルターを選択します。サンプルの場合、タグによるフィルタリングのみが可能です。 モデルタブでは、次の基準に従ってモデルをフィルタリングできます。
- モード 特定のモードのモデルのみを表示できます。例えば、シミュレーションモードとテストモードのモデルのみを表示したい場合、対応するチェックボックスをオンにします。
- ステータス アクティブまたは非アクティブなモデルのみを表示できます。例えば、アクティブなモデルのみを表示したい場合、対応するチェックボックスをオンにします。
- ソースまたはターゲット 特定の入力ソースまたは出力ターゲットを使用するモデルのみを表示できます。ソースまたはターゲットフィルター ドロップダウン リストボックスを開き、1 つ以上の項目を選択して 適用 をクリックします。
- データポイント
特定のデータポイント(例:
c8y_TemperatureMeasurement
)を使用するモデルのみを表示できます。これは、ソースまたはターゲットフィルター ドロップダウン リストボックスで少なくとも 1 つのデバイスが選択されている必要があります。データポイント フィルタードロップダウン リストボックスを開き、1 つ以上のデータポイントを選択して 適用をクリックします。 - タグ 新しいモデルを追加したとき、またはモデル エディタから モデルの編集 ダイアログボックスを呼び出したときに表示される モデルの作成 ダイアログボックスで、特定のタグが定義されているモデルのみを表示できます(新しいモデルの追加 と モデルの名前、説明、タグの変更 参照)。タグでフィルター ドロップダウン リストボックスを開き、1 つ以上のタグを選択して 適用 をクリックします。
例えば、特定のデバイスを使用する本稼働モードのアクティブなモデルのみを表示するなど、複数のタイプのフィルターを組み合わせることができます。
サンプル タブでは、タグのみでサンプルをフィルタリングできます。タグでフィルター ドロップダウン リストボックスを開き、1 つ以上のタグを選択して 適用 をクリックします。
上記のすべてのドロップダウン リストボックスには、選択できる項目の数を減らすために使用できる フィルター 検索ボックスが含まれています。名前または名前の一部を入力できます。例えば、「test」という単語を入力すると、名前にこの単語が含まれる項目のみが表示されます。入力する文字は、名前内の任意の位置に含めることができます。これらのフィルター条件では大文字と小文字が区別されません。すべて チェックボックスをオンにすると、フィルター 検索ボックスの内容に応じて、ドロップダウン リストボックスに現在表示されているすべての項目が選択されます。
-
フィルターの適用 をクリックします。 モデル タブまたは サンプル タブのツールバーに、現在適用されているフィルターの種類が表示されるようになりました。これは モデル タブの例です。
これらのフィルターをクリアする場合は、ツールバーの フィルターをクリア をクリックします。または、特定のフィルターをクリアするには、このフィルターのラベルに表示されている X をクリックするか、ラベルのフィルター名をクリックして、表示されるダイアログボックスでそのフィルター(必要に応じて他のフィルター)の選択を解除します。そのダイアログボックスで フィルターをリセット をクリックすると、すべてのフィルターがクリアされます。
新しいモデルの追加
新しいモデルを追加すると、モデル エディタが起動されます。詳細については、モデル エディタの使用 を参照してください。
サンプルから新しいモデルを作成することもできます。詳細については、サンプルからモデルの作成 を参照してください。
新しいモデルを追加する
-
モデルマネージャーのモデルタブで、ツールバーの新しいモデルをクリックします。
-
表示される モデルの作成 ダイアログボックスに、一意のモデル名を入力します。
任意で、モデルの説明と 1 つ以上のタグを入力できます。タグは、モデルマネージャーでモデルをフィルタリングして、特定のタグが定義されているモデルのみを表示するのに役立ちます(モデルとサンプルのフィルタリング 参照)。タグを追加するには、名前を入力して Enter キーまたは Tab キーを押すだけです。タグは色付きの長方形で表示されます。タグを削除するには、四角形の中に表示されている X をクリックします。このダイアログボックスでは、モデルに重複したタグを入力することができません。このようなタグ名を入力すると、重複したタグは追加されず、元のタグが 1 回点滅します。
-
OKをクリックします。モデル エディタが表示されます。新しいモデルにブロックとワイヤーを追加する方法の概要については、モデルを追加する手順の概要 を参照してください。
既存のモデルの編集
現在モデルマネージャーにリストされている各モデルを、編集(または表示)できます。
モデルがアクティブな場合、編集するとモデルは読み取り専用モードに設定されます。この場合、モデル エディタではモデルの内容のみを表示できます(例えば、ブロック パラメーターを表示できます)。通常通り、モデルを移動したりズームしたりできますが、何も変更することはできません。
モデルを編集する
モデルマネージャーの モデル タブで、モデルに表示されているカードをクリックするだけです(ただし、状態を変更するためのトグルボタンやモードを変更するためのドロップダウン メニューではありません)。
または、カードのアクションメニュー をクリックし、編集をクリックします。
モデルがアクティブな場合、モデルの表示のみが可能であることを通知するダイアログボックスが表示されます。続行 をクリックすると、モデル エディタが表示されモデルを表示できますが、変更することはできません。詳細については、モデル エディタの使用 を参照してください。
モデルのインスタンスの編集
モデル内の 1 つ以上のブロックでテンプレート パラメーターを使用する場合(テンプレート パラメーターの管理 参照)、そのモデルのさまざまなインスタンスをセットアップできます。
各インスタンスは、テンプレート パラメーターに異なる値を使用でき、他のインスタンスから独立してアクティブ化できます。インスタンスは、インスタンス エディタで定義およびアクティブ化されます。
モデルのインスタンスを編集する
モデルマネージャーの モデル タブで、カードの前面にあるインスタンスの合計数をクリックします。
あるいは、次のいずれかを実行することもできます。
- カードのアクションメニュー をクリックし、次にインスタンスをクリックする
- または、インスタンスの概要を表示 をクリックしてカードを裏返し、カードの裏側にある インスタンスの編集 ボタンをクリックする
これにより、インスタンス エディタが起動します。詳細については、インスタンス エディタの使用 を参照してください。
モデルのデプロイ
モデル (またはインスタンス) は 2 つの状態のいずれかになります。現在の状態は、モデルに表示されるカードに常に示されます。
- アクティブ: この状態は、モデルがデプロイされていることを示します。
- 非アクティブ この状態は、モデルが現在デプロイされていないことを示します。
モデルが受け取る入力とその出力に何が起こるかは、モデルが設定されているモードによって異なります。各モデルは次のいずれかのモードに設定できます。
-
Draft: モデルがまだ開発中です(新しいモデルは Draft モードで作成されます)。
-
Test: このモードは、単一のデバイスを使用するモデルのみ許可されます。アクティブな場合、モデルは Apama コレレーターにデプロイされ、デバイスからのメジャーメントとイベントが処理されます。モデルの出力は保存されるだけであり(「仮想デバイス」の
Operation
オブジェクトまたはMeasurement
オブジェクトとして記録)、デバイスには送り返されません。備考テストモードは入力データを消費し、出力データを生成するカスタムブロックを含むモデルにはサポートされません。カスタムブロックは Block SDK を使用して作成されます。詳細については、独自のブロックの作成 を参照してください。 -
Simulation: このモードは、単一デバイスを使用するモデルにのみ許可されます。アクティブな場合、モデルは履歴入力データ(以前受信したデータからリアルタイムで再生)を使用し、Apama コリレーターにデプロイされます。モデルの出力は保存されるだけであり(「仮想デバイス」の
Operation
オブジェクトまたはMeasurement
オブジェクトとして記録されます)、デバイスには送り返されません。シミュレーションを開始するには、入力データが使用される時間範囲を定義する必要があります。時間範囲のすべてのデータが再生されると、モデルは Apama から自動的にアンデプロイされ、モデルの状態は 非アクティブ に変更されます。シミュレーション実行の比較を容易にするために、履歴データ エントリのタイムスタンプは変更されません。詳細については モデルシミュレーション を参照してください。 -
Production: アクティブな場合、モデルは Apama コレレーターにデプロイされ、デバイスからのメジャーメントとイベントが処理されます。モデルの出力は保存され、デバイスに送り返されます。
Draft モードのモデルは、非アクティブ状態のみになります。Test、Simulation、Production(本稼働)モードのモデルは、アクティブ状態または非アクティブ状態のいずれかになります。
JSON ファイルをロードしてモデルをインポートする場合、モデルは常に非アクティブなモデルとしてインポートされます。
モデルをデプロイする
- モデルマネージャーの モデル タブで、デプロイするモデルのカードのドロップダウン メニューをクリックし、Production、Test、Simulation のいずれかを選択します。
- シミュレーションモードを選択した場合、表示されているカレンダーアイコン をクリックし、使用する期間を指定して 適用をクリックします。詳細については、シミュレーション パラメーター を参照してください。
- 現在トグルボタンに 非アクティブ と表示されている場合、このボタンをクリックして状態を アクティブ に変更します。Simulation モードの場合、有効な時間範囲が定義されている場合にのみ、状態を アクティブ に設定できます。
モデルのデプロイ解除
現在 Production モード、Test モード、Simulation モードにあり、トグルボタンに アクティブ と表示されている各モデルのデプロイを解除(非アクティブ化)することができます。
モデルのデプロイを解除すると、モデルは停止され、受信データは処理されなくなります。モデル内に構築された状態はすべて失われます。これは Simulation モードの場合、指定された時間範囲のすべての履歴データが再生される前にモデルが停止されることを意味します。
モデルをアンデプロイする
モデルマネージャーの モデル タブで、デプロイを解除するモデルのカードのトグルボタンをクリックすると、ボタンに 非アクティブ が表示されます。
モデルの複製
現在モデルマネージャーにリストされている各モデルを複製できます。
複製されたモデルには、元のモデルと同じ名前が付けられ、その後に番号記号(#)と数字が続きます。例えば、元のモデルの名前が「My Model」の場合、最初の複製の名前は「My Model #1」になります。モデル名の数字は、後続の複製を作成するたびに 1 ずつ増加します。複製されたモデルには、元のモデルと同じ説明が与えられます。複製を編集し、モデルに意味のある名前と説明を付けることをお勧めします。
モデルを複製する
モデルマネージャーの モデル タブで、複製するモデルのアクションメニュー をクリックし、次に 複製 をクリックします。
複製されたモデルのカードが、モデルマネージャーにすぐに表示されます。
モデルのダウンロード
現在モデルマネージャーにリストされている各モデルをダウンロードできます。 これは、例えば、現在の Things Cloud テナントから別のテナントにモデルを移行する場合に役立ちます。モデルは JSON形式 で保存されます。
モデルをダウンロードする
モデルマネージャーの モデル タブで、ダウンロードするモデルのアクションメニュー をクリックし、次にダウンロードをクリックします。
ダウンロードの動作はブラウザによって異なります。通常、モデルはブラウザのダウンロード場所にダウンロードされます。
モデルのコピー
モデルをダウンロードする代わりに、モデルの JSON コードをクリップボードにコピーし、任意のエディタに貼り付けることができます。
モデルをコピーする
モデルマネージャーの モデル タブで、コピーするモデルのアクションメニュー をクリックし、次に コピー をクリックします。
モデルのアップロード
以前にJSON形式でダウンロードされたモデルをアップロードできます。これは、別の Things Cloud テナントからモデルをアップロードする場合に役立ちます。
モデルをアップロードする
- モデルマネージャーの モデル タブで、ツールバーの モデルのインポート をクリックし、次にアップロードをクリックします。
- 表示されるダイアログボックスで、アップロードするモデルが保存されている場所に移動します。
- モデルを選択し、開く をクリックします。
アップロードされたモデルのカードが、モデルマネージャーに表示されます。
モデルの貼り付け
モデルをアップロードする代わりに、クリップボードからモデルの JSON コードを貼り付けることができます。
モデルを貼り付ける
モデルマネージャーの モデル タブで、ツールバーの モデルのインポート をクリックし、貼り付け をクリックします。
クリップボードにモデルの有効な JSON コードが含まれている場合、モデルマネージャーに貼り付けたモデルのカードが表示されます。
モデルの削除
現在モデルマネージャーにリストされている各モデルを削除できます。現在デプロイされているモデルを削除すると、まずデプロイが解除されてから削除されます。
モデルを削除する
- モデルマネージャーの モデル タブで、削除するモデルのアクションメニュー をクリックし、次に 削除 をクリックします。
- 表示されるダイアログボックスで、削除 をクリックして削除を確認します。
すべてのモデルの再読み込み
表示を更新すると、ページが読み込まれてから他のユーザーが加えた変更が表示されたり、デプロイされたモデルが失敗状態になったかどうかを確認したりできます。
すべてのモデルを再読み込みする
モデルマネージャーの モデル タブで、ツールバーの 再読み込み をクリックします。s
サンプルを見る
サンプルは、常に読み取り専用モードです。モデルマネージャーに現在リストされている各サンプルの内容を表示できます。
例えば、ブロック パラメーターを調べて、サンプルで使用されている各ブロックのドキュメントを表示できます。通常のモデルと同じ方法でサンプルを移動したり、ズームしたりできますが、何も追加したり編集したりすることはできません。ただし、サンプルから新しいモデルを作成することはできます(サンプルからモデルの作成 参照)。
サンプルを表示する
モデルマネージャーの サンプル タブで、サンプルとして表示されているカードをクリックするだけです。
または、カードのアクションメニュー をクリックし、次に 表示 をクリックします。
サンプルからモデルの作成
現在モデルマネージャーにリストされている各サンプルから、新しいモデルを作成できます。新しいモデルには、サンプルと同じ名前、説明、タグが付けられます。
サンプルからモデルを作成する
モデルマネージャーの サンプル タブで、新しいモデルの作成元となるサンプルのアクションメニュー をクリックし、次に サンプルからモデルを作成 をクリックします。
あるいは、現在サンプルがモデル エディタに表示されている場合、ツールバーの サンプルからモデルを作成 をクリックします。
新しいモデルはモデル エディタにすぐに表示され、モデルの各側面を変更できるようになります。
モデル エディタの使用
モデル エディタのユーザーインターフェース
モデルエディタを使用すると、分析モデルをグラフィカルに作成できます。これは、モデルマネージャーでモデルを追加または編集するときに呼び出されます。新しいモデルの追加 および 既存のモデルの編集 を参照してください。
左側のパレットには、モデルに追加できるブロックが含まれています。さまざまなタイプのブロックに対応する、展開/折りたたみ可能なカテゴリがいくつかあります。
中央のキャンバスは、モデルを「描画」するエリアです。ブロックをパレットからキャンバスにドラッグし、ブロックのパラメーターを指定して、ブロックを配線します。キャンバスのコンテンツは、グリッドに合わせて配置されます(グリッドの表示と非表示を切り替える を参照)。
キャンバスの右下の概要エリアにはモデル全体が表示されます。これは、モデルが大きすぎてキャンバスの現在表示されているエリアに収まらない場合に役立ちます。大規模なモデルの操作を参照してください。
右側のドキュメント ペインでは、現在選択されているブロックの参照情報を表示できます。ブロックのドキュメント表示 を参照してください。
モデルの操作
モデルを追加する手順の概要
このトピックでは、新しいモデルを追加および設計する方法の概要を説明します。詳細については、次の手順で参照されているトピックを参照してください。
次のようにモデルを追加して設計します。
-
モデルマネージャーの モデル タブで、新しいモデル をクリックします。表示されるダイアログボックスにモデル名を入力します。新しいモデルの追加 も参照してください。
-
モデル エディタで、必要なブロックをパレットからキャンバスにドラッグします。ブロックの追加 も参照してください。
-
必要に応じてブロックのドキュメントをご覧ください。ブロックのドキュメント表示 も参照してください。
-
ブロックパラメータエディタを使用して、ブロックのパラメータを指定します。ブロックのパラメータの編集 も参照してください。
-
適切なブロックをワイヤーで接続します。2 つのブロック間でワイヤーの追加 も参照してください。
-
変更を保存します。モデルの保存 も参照してください。
備考保存されたモデルのみがモデルマネージャーにリストされます。新しいモデルを追加し、モデルを保存せずにモデル エディタを終了すると、そのモデルはモデルマネージャーにリストされず、行った編集内容はすべて失われます。 -
モデル エディタを終了します。これにより、モデルマネージャーに戻ります。モデル エディタの終了 も参照してください。
-
新しく追加されたモデルは、モデルマネージャーで自動的にドラフトモードに設定されます。テスト、シミュレーション、または運用環境で使用できるようにする場合は、モデルのデプロイ を参照してください。
制限事項を含む詳細な背景情報については、ワイヤーとブロック を参照してください。
モデルの名前、説明、タグの変更
モデル エディタで現在編集している各モデルの名前を変更したり、各モデルの説明を変更したりすることもできます。
タグを追加または削除することもできます。タグはモデルマネージャーで、特定のタグが定義されているモデルのみを表示するのに役立ちます(モデルとサンプルのフィルタリング 参照)。
モデルの名前、説明、タグを変更する
-
モデル エディタで、ツールバーの左側に表示される モデル設定 をクリックします。
-
表示された モデルの編集 ダイアログボックスで、モデルの新しい一意の名前を指定し、説明またはタグを変更します。
タグを追加するには、名前を入力して Enter キーまたは Tab キーを押すだけです。タグは色付きの長方形で表示されます。 タグを削除するには、四角形の中に表示されている X をクリックします。このダイアログでは、モデルに重複したタグを入力することができません。このようなタグ名を入力すると、重複したタグは追加されず、元のタグが 1 回点滅します。
-
OK をクリックします。
モデルの保存
モデル エディタでモデルを保存すると、Things Cloud テナントのインベントリに JSON 形式で保存されます。
モデルを保存する
モデル エディタのツールバーで、保存アイコン をクリックします。
保存アイコン は、モデルに変更が適用されていて、モデルに名前が付けられている場合にのみ有効になります。
モデル エディタの終了
以下のようにモデル エディタを終了すると、モデルマネージャーに戻ります。これにより、別のモデルを編集したり、現在のモデルのモードや状態を変更したりできます。
モデル エディタを終了する
モデル エディタのツールバーで、閉じるアイコン をクリックします。
まだ保存されていない変更がある場合、それらを保存するか破棄するかを尋ねられます。
ブロックとワイヤーの操作
ブロックの追加
パレット内のブロックは、さまざまなカテゴリにグループ化されています。パレット内のブロック上にマウスポインタを移動すると、ブロックの目的を簡単に説明するツールチップが表示されます。ツールチップには、ブロックの名前全体も表示されます。
各ブロックの詳細情報は、ドキュメント ペインに表示されるブロック リファレンスで参照できます。ブロックのドキュメント表示も参照してください。
ブロックを追加する
-
モデル エディタのパレットで、追加したいブロックを含むカテゴリを展開します。
-
パレットからブロックをドラッグし、キャンバスにドロップします。
キャンバス上の既存のブロック上にブロックをドロップすると、そのブロックの上に新しいブロックが作成されます。折りたたまれたグループにブロックをドロップすると、そのグループの下に新しいブロックが作成されます。どちらの場合も、新しいブロックをキャンバスの空きスペースに移動する必要があります。ブロックの移動 も参照してください。
展開されたグループ(グループのコンテンツが表示される)にブロックをドロップすると、新しいブロックがそのグループに追加されます。グループの詳細については、グループでの作業を参照してください。
-
ブロックに必要なパラメーターをすべて指定します。ブロックのパラメーター編集 を参照してください。
備考パラメーターを指定する必要があるブロックを追加すると、ブロックパラメーター エディタ が自動的に表示されます。ただし、ブロックがパラメーターを必要としない場合(OR ブロックなど)表示されません。
ブロックのパラメーター編集
ほとんどのブロック (すべてではありません) には、要件に応じて設定する必要があるパラメーターがあります。
キャンバス上の入力ブロックまたは出力ブロックに「不足データ」と表示される場合、定義された入力ソースまたは出力先が Things Cloud インベントリ内に見つからないことを意味します。その場合、Things Cloud インベントリに移動して、デバイスが登録されていること、またはグループまたはアセットが存在することを確認するか、ブロックパラメーター エディタ(下記参照)で別の既存の入力ソースまたは出力先を選択してください。
キャンバス上のいくつかのブロックのラベルには、最も重要なパラメーターの値が表示されます。例えば、式 ブロックは定義された式を示し、時間遅延 ブロックは定義された遅延を秒単位で示します。
ブロックパラメータ エディタには、現在選択されているブロックを複製および削除するためのコマンドも含まれています。詳細については、ブロックの複製 および ブロックまたはワイヤーの削除 を参照してください。
入力ブロックと出力ブロックでは、使用されている入力ソースと出力先をグローバルに置き換えることができます。詳細については、ソースまたは出力先の置換 を参照してください。
ブロックのパラメーターを編集する
-
モデル エディタのキャンバス上で、編集したいブロックをクリックします。 ブロックパラメーター エディタが表示され、そのブロックに指定できるすべてのパラメータの入力フィールドが提供されます。
-
入力および出力ブロックでは、ダイアログボックスから異なる入力ソースまたは出力先を選択できます。
ダイアログボックスのツリーは、Things Cloud インベントリ内の親/子階層を反映しています。例えば、デバイスのリストには定義された子デバイスが含まれ、デバイスグループのリストには定義されたサブグループが含まれます。これらは展開可能/折りたたみ可能なノードから利用できます。 デフォルトでは、各ノード内に 10 個の項目がアルファベット順に表示されます。インベントリが多い場合は、最初に表示されていないアイテムを表示するには、さらに読み込む をクリックする必要があります。
ダイアログの上部にあるチェックボックスを使用して、表示するエントリをフィルタリングできます。デフォルトでは、定義済みのすべてのデバイス、デバイスグループ、スマートグループ、アセットがダイアログに表示されます。他のマネージドオブジェクトも表示したい場合は、「その他」チェックボックスをオンにしてください。
検索ボックスを使用すると、検索条件に一致する Things Cloud インベントリ内のマネージドオブジェクトを表示できます。検索では大文字と小文字が区別されます。入力する文字は、名前内の任意の位置に含めることができます。ツリーは、入力する文字ごとに更新されます。検索結果が多い場合、最初に表示されていないマネージドオブジェクトを表示するには、さらに読み込む をクリックする必要があります。
検索時に表示されるマネージドオブジェクトは、テナントオプションによって異なります。特定タイプのマネージドオブジェクトのみを表示するように検索を絞り込むことができます。詳細については、デバイス、グループ、アセットの検索 を参照してください。
エントリにカーソルを合わせると表示されるボタンをクリックして、使用する入力ソースまたは出力先を選択します。そのボタンの名前は、現在選択されているエントリによって異なります。
ボタン名 表示対象 説明 選択 入力ブロックの
すべての入力 オプションすべての入力ソースからデータを受信します。 選択 出力ブロックの
トリガーデバイス オプション出力をトリガーしたデバイスに送信されます。 デバイスの選択 入力と出力ブロックの
デバイスデータがデバイスから受信されるか、
出力がデバイスに送信されます。グループのデバイスを選択 入力ブロック内の
グループデータはグループ階層内のすべてのデバイスから
受信されます。
グループから直接データを受信することはできません。アセットの選択 入力と出力ブロックの
アセットデータをアセット自体から受信するか、
出力をアセットに送信します。
アセットのデバイスは無視されます。アセットのデバイスを選択 入力ブロック内の
アセットデータはアセット階層内のすべてのデバイスから
受信されます。ブロックはアセット自体からデータを受け取りません。備考出力ブロックの場合、グループを選択することはできません。この場合、ボタンは提供されません。出力をトリガーしたデバイスに出力を送信するには、代わりに トリガーデバイス を選択します。表示される入力ソースと出力先の最大数は、テナントオプションによって異なります。詳細については、表示される入力ソースと出力先の数の構成 を参照してください。
-
ブロック パラメーターの値を指定する代わりに、テンプレート パラメーターを使用することができます。これにより、モデルのさまざまなインスタンスでこのブロック パラメーターにさまざまな値を使用できるようになります(詳細については、インスタンスエディタの使用 を参照してください)。テンプレート パラメーター ダイアログボックスで一致するタイプのテンプレート パラメーターを作成し、(テンプレートパラメータの管理 参照)、ブロック パラメーターをテンプレート パラメーターを使用するように切り替えます (下記参照) 。ドロップダウン リストボックスから目的のテンプレート パラメーターを選択します。または、ブロック パラメーターエディタ でテンプレート パラメーターを直接作成します(下記参照)。
ブロックパラメーターエディタ には、ドロップダウン リストボックスに次のオプションがあります。
-
: 選択すると、隣接するコントロールを使用してこのパラメータの値を指定できます。この値はブロックパラメータエディタで検証されます。
-
:選択すると、隣接するドロップダウン リストボックスからテンプレート パラメータを選択できます。テンプレート パラメーターは、割り当て先のブロックパラメーターと同じタイプのみ選択できます。不適切なタイプのテンプレート パラメーターは選択できません。テンプレート パラメーターはブロックパラメーター エディタでは検証されません。
新しいテンプレート パラメーターをブロックパラメーター エディタに直接追加する場合は、上のドロップダウン リストボックスのテキストボックスに名前を入力します。入力を開始するとすぐに、その名前のテンプレート パラメーターがまだ存在しない場合、テキストボックスの下に テンプレート パラメーター名の追加 オプションが表示されます。このオプションをクリックすると、新しいテンプレート パラメーターが追加され、テンプレート パラメーター ダイアログボックスで使用できるようになります。新しいテンプレート パラメーターは、ブロックパラメーターと同じ型、オプション、デフォルト値を持ちます。指定した名前のテンプレート パラメーターがすでに存在するが、型に互換性がない場合、名前と型はテキストボックスの下に表示されますが、選択することはできません。
-
-
一部のブロックは、特定のブロックパラメーターの複数行入力をサポートします。例えば、電子メールの送信 ブロックは 本文 パラメーターでこれをサポートし、アラーム出力 ブロックは メッセージ パラメーターでこれをサポートします。入力はテキストボックス内で自動的に折り返され、Enter キーを押すと新しい行でテキストを開始できます。このようなブロックパラメーターの新しいテンプレート パラメーターをブロックパラメーター エディタで直接追加すると(上記の通り)、新しいテンプレート パラメーターの型は自動的に 複数行文字列 に設定されます。
-
一部のブロック(範囲参照 ブロックなど)では、ブロックパラメーター エディタに、キーと値のペアを指定するためのテキストボックスが表示されます。さらにキーと値のペアを指定する必要がある場合、行の追加 をクリックします。最初の行のキーと値のペアが最初に処理されます。 その行の横に表示される移動アイコン を使用して、行を別の位置にドラッグできます。 不要になった行を削除するには、その行の横に表示されている削除アイコン をクリックします。 ブロックパラメーター エディタを終了すると、空の行は自動的に削除されます。
-
必要なパラメーターをすべて指定します。 各ブロックの詳細なリファレンス情報は、ドキュメントペインから入手できます。ブロックのドキュメント表示を参照してください。
ブロックパラメーター エディタを終了するとき、入力はメモリに保持されます(例えば、別のブロックまたはキャンバスをクリックするときなど)。
ブロックのドキュメント表示
ドキュメント ペインでは、現在選択されているブロックの詳細情報を表示できます。これは、ブロックのパラメーター、入力ポート、出力ポートのドキュメントを提供する ブロックリファレンス を示しています。ドキュメント ペインのサイズを変更したり、表示を切り替えたりすることもできます。
ブロックのドキュメントを表示する
-
モデル エディタで、ドキュメントを表示するブロックをクリックします。これは、パレットまたはキャンバス上で行うことができます。
-
現在ドキュメント ペインが表示されていない場合、ドキュメントアイコン を含むエリアをクリックして、ドキュメント ペインを表示します。そのエリアを再度クリックすると、ドキュメント ペインが非表示になります。
-
ドキュメント ペインのサイズを変更する場合(拡大する場合など)、ドキュメントアイコンが含まれるエリアにマウスポインタを移動します。マウスボタンをクリックして押したまま、マウスを左または右にドラッグします(ドキュメント ペインの幅を広くしたり小さくしたりできます)。
ブロックとワイヤーの選択
モデル エディタのキャンバスに現在表示されている 1 つまたは複数のブロックを移動、複製、削除する場合、まず必要なブロックを選択する必要があります。
キャンバス上の単一のブロックを選択するには、そのブロックをクリックするだけです。ブロックの場合、結果の動作は使用するマウスボタンによって異なります。
- マウスでブロックをクリックすると、ブロックが選択され、ブロックパラメーター エディタ が表示されます(ブロックのパラメータ編集 参照)。
- マウスの右ボタンを使用してブロックをクリックすると、ブロックのみが選択されます(ブロックパラメーター エディタは表示されません)。これは、別のブロックにワイヤーを追加する場合など、エディタが邪魔になる場合に役立ちます。
単一のワイヤーを選択するには、ワイヤーをクリックするだけです(この場合、どちらのマウスボタンでも使用できます)。
複数のブロックやワイヤーを同時に選択するには、次のいずれかを実行します。
- Ctrl キーを押しながら、選択する各ブロックとワイヤーをクリックします。
- 複数のブロックとワイヤーを含むエリアを選択するには、キャンバスの空きスペース上でマウスボタンをクリックして押したまま、マウスポインタが十字に変わるまで待ちます。次に、マウスをドラッグして目的のエリアを選択します。必要なブロックとワイヤーをすべて選択したら、マウスボタンを放します。
- すべてのブロックとワイヤーを選択するには、Ctrl+A キーを押します。
選択を解除するには:
- Ctrl キーを押しながら、現在選択されているブロックまたはワイヤーをクリックします。
- すべての選択を解除するには、キャンバスの空きスペースをクリックします。
ブロックの移動
現在キャンバス上に表示されている各ブロックを、別の場所に移動できます。移動されるブロックに 1 つまたは複数のワイヤーが接続されている場合、ワイヤーも移動します。
ブロックを移動する
モデル エディタのキャンバス上で、移動するブロックをクリックし、マウスボタンを押したままブロックを新しい位置にドラッグします。
または、複数のブロックを同時に移動するには、ブロックとワイヤーの選択 の説明に従ってブロックを選択します。次に、マウスボタンをクリックして押したまま、ブロックを新しい場所にすぐにドラッグします(マウスポインタが変わるのを待たないでください)。
ブロックの複製
現在キャンバスに表示されている各ブロックを複製できます。元のブロックとその複製は、両方とも同じパラメーターを持つことになります。
単一のブロックを複製する場合、接続されたワイヤーは自動的には複製されません。ただし、複数のブロックを同時に複製すると、選択したブロック間に接続されたワイヤーが自動的に複製されます。
ブロックを複製する
- モデル エディタのキャンバスで、複製するブロックをクリックし、次のいずれかの操作を行います。
- ブロックパラメータ エディタの下部に表示される 複製 コマンドをクリックします。
- Ctrl+C キーを押してブロックをコピーし、Ctrl+V キーを押してブロックを貼り付けます。
- Ctrl キーを押しながら、複製するブロックを配置する位置までドラッグします。
- 複数のブロックを同時に複製するには、ブロックとワイヤーの選択 の説明に従ってブロックを選択し、上記の手順に進みます。例外:複製 コマンドは、単一のブロックを選択した場合にのみ使用できます。
2 つのブロック間でワイヤー追加
キャンバス上のブロックをワイヤーで接続して、1 つのブロックからの出力が他のブロックの入力として使用されることを示すことができます。
ワイヤーはポート、ブロックの左側または右側に表示される円に接続されます。 各ブロックには、以下を含めることができます。
- 出力ポート(ブロックの右側に表示)
- 入力ポート(ブロックの左側に表示)
ポートの名前を表示するには、ブロックをクリックして選択します。または、マウスポインタをポートの上に移動すると、ツールチップにポート名が表示されます(名前が最初に表示され、その後にポートの説明が表示されます)。
2 つのブロック間で送信できる値の種類、ワイヤーの処理順序、制限などの詳細については、ワイヤーとブロックを参照してください。
2 つのブロック間にワイヤーを追加する
モデル エディタのキャンバス上で、接続するブロックの出力ポートをクリックし、マウスを別のブロックの入力ポートまでドラッグします。
ワイヤーの変更
ワイヤーが現在接続されているブロックまでのパスを変更できます。また、ブロックを別のブロックまたは同じブロックの別のポートに接続するように、再配線することもできます。
ワイヤーではサイクルを作成できません。詳細については、ワイヤーの制限を参照してください。
ワイヤーを変更する
-
モデル エディタのキャンバス上で、変更したいワイヤーをクリックします。 接続されているブロックのポート名が表示され、ワイヤーの両端に接続されているポートが強調表示されます。
-
2 つのブロック間のワイヤーのパスを変更するには、選択したワイヤー上に表示されている正方形のサイズ変更アイコン (
) の 1 つを別の位置にドラッグします。 または、ワイヤーを別のポートに移動するには、入力ポートまたは出力ポートに表示されている菱形の移動アイコン (
) を別のポートにドラッグします(この場合、手のポインタが表示されています)。
ブロックまたはワイヤーの削除
現在キャンバス上に表示されている各ブロックまたはワイヤーを削除できます。ブロックを削除すると、このブロックに接続されているすべてのワイヤーが自動的に削除されます。
ブロックまたはワイヤーを削除する
- モデルエディタのキャンバスで、削除するブロックまたはワイヤーをクリックし、Del キーを押します。 ブロックの場合、ブロックパラメータ エディタの下部に表示されている 削除 コマンドをクリックすることもできます。
- 複数のブロックやワイヤーを同時に削除するには、ブロックとワイヤーの選択 の説明に従ってそれらを選択し、Del キーを押します。
操作の取り消しとやり直し
キャンバスに適用された各変更を元に戻したり、やり直したりできます。例えば、ブロックの削除を元に戻したり、変更したパラメーター値を元に戻したり、ワイヤーの再配線を元に戻したりすることができます。
モデル名またはその説明への変更を元に戻したり、やり直すことはできません。
操作を元に戻す、またはやり直す
- 最後の操作を元に戻すには、モデル エディタのツールバーにある元に戻すアイコン をクリックするか、Ctrl+Z キーを押します。
- 最後の操作をやり直すには、モデル エディタのツールバーにあるやり直しアイコン をクリックするか、Ctrl+Y キーを押します。
上記のアイコンは、元に戻すまたはやり直すことができる操作がある場合にのみ有効になります。
ソースまたは出力先の置換
現在のモデルで使用されている入力ソースまたは出力先を確認し、現在 Things Cloud インベントリに登録されている(デバイス管理アプリケーションで視覚化されている)他の入力ソースまたは出力先と置き換えることができます。
次のルールが適用されます。
-
デバイスを別のデバイスに置き換えることができます。
-
グループを別のグループに置き換えることができます。
-
グループまたはデバイスを すべての入力 オプションで置き換えることができます。
-
すべての入力 オプションをグループまたはデバイスで置き換えることができます。
-
デバイスをグループまたは すべての入力 オプションで置き換える場合:
- 一致するすべての入力デバイスが、選択されたグループまたは すべての入力 に変更されます。
- 一致するすべての出力デバイスがトリガーデバイスに変更されます。
-
グループまたは すべての入力 オプションをデバイスで置き換える場合:
-
グループまたは すべての入力 がデバイスに変更されます。
-
一致するすべてのトリガーデバイスが、指定されたデバイスに変更されます。
備考一度に複数のグループをデバイスに変更すると、最初に指定したデバイスのみがすべてのトリガーデバイスの置き換えに使用されます。
-
-
トリガーデバイス オプションはダイアログで選択できません。
デバイスを置換した後、現在のモデルの入力ブロックと出力ブロックで使用されているメジャーメントが、依然として適切なメジャーメントを参照していることを確認する必要があります。Things Cloud フラグメントとシリーズは置換によって変更されません。これは、新しく定義されたデバイスに適用される場合と適用されない場合があります。
ソースまたは出力先を置き換える
-
モデル エディタのツールバーで、置き換えアイコン をクリックします。このアイコンは、現在のモデルで少なくとも 1 つのソースまたは出力先が定義されている場合にのみ有効になります。この場合、定義されたトリガーデバイスは考慮されません。
-
表示されるダイアログボックスの 現在 ドロップダウン リストボックスで、置き換えるソースまたはターゲットを選択します。モデルで使用されているすべての入力ソースと出力先を選択できます。
-
置換対象 ボックスをクリックしてダイアログボックスを表示します。このダイアログボックスは、ブロックパラメーター エディタで入力ソースまたは出力先を選択するときと同じです。このダイアログボックスの詳細については、ブロックのパラメーター編集 を参照してください。エントリの上にマウスを置くと表示されるボタンをクリックして、代わりに使用する入力ソースまたは出力先を選択します。
-
さらに入力ソースまたは出力先を置き換える場合、行を追加 をクリックします。これは、現在のモデルで複数の入力ソースまたは出力先が定義されている場合にのみ表示されます。
追加の 現在 および 置換対象 ドロップダウン リストボックスを含む新しい行が表示され、置換する入力ソースまたは出力先をもう 1 つ選択できるようになります。以前に置換対象として選択したソースまたはターゲットは、現在 ドロップダウン リストボックスで選択できなくなります。
必要なすべてのソースとターゲットが置換対象として選択されるまで、この手順を繰り返します。現在のモデルにあるソースまたはターゲットと同じ数の行を追加できます。
-
行を削除する場合(選択したデバイスを置換する必要がなくなった場合など)、その行の横にある 削除アイコン をクリックします。これは、ダイアログボックスに現在複数の行が表示されている場合にのみ使用できます。
-
置換 をクリックします。
テンプレート パラメーターの管理
モデルでは、0 個以上のテンプレート パラメーターを指定でき、ブロックパラメーターの定義された値の代わりに使用できます。例えば、ブロックパラメーター エディタで しきい値 ブロックのしきい値として 100 を定義する代わりに、テンプレート パラメーターを割り当てることができます。
モデルにテンプレート パラメータがある場合、モデルの複数のインスタンスを作成し、テンプレート パラメーターに異なる値を指定できます。モデルの理解 を参照してください。テンプレート パラメーターのないモデルとテンプレート パラメーターのあるモデルの違い、およびさまざまなロール(モデル作成者とインスタンス管理者)について説明しています。
テンプレート パラメーターを使用する場合、次で説明するように、まず テンプレート パラメーター ダイアログボックスで、テンプレート パラメーターを定義する必要があります。テンプレート パラメーターを定義した後、ブロックパラメーター エディタで同じタイプの特定のパラメーターに割り当てることができます(ブロックのパラメーター編集 参照)。
テンプレート パラメーターのないモデルは、モデルの単一インスタンスを実行しながら、モデルマネージャーで直接アクティブ化できます。少なくとも 1 つのテンプレート パラメーターを、1 つ以上のブロックパラメーターに割り当てた後にモデルを保存すると、モデルマネージャーでモデルを直接アクティブ化できなくなります。代わりに、モデルのインスタンスを少なくとも 1 つ作成し、インスタンス エディタを使用して、そのインスタンスをアクティブ化する必要があります。詳細については、インスタンス エディタの使用を参照してください。
現在のモデルのインスタンスのテンプレート パラメーターを定義する
-
モデル エディタのツールバーで、テンプレート パラメーター アイコン をクリックして テンプレート パラメーター ダイアログボックスを呼び出します。少なくとも 1 つのテンプレート パラメーターが定義されている場合、上記のアイコンにチェックマーク が表示されます。
このダイアログボックスは最初、空でありモデルで使用するテンプレート パラメーターを作成する必要があります。テンプレート パラメーターがすでに定義されている場合、それらはすべてこのダイアログボックスに表示されます。
テンプレート パラメーターのリストが長い場合は、検索ボックスに名前または名前の一部を入力すると、探しているテンプレート パラメーターを簡単に見つけることができます。検索条件が現在適用されている場合、検索ボックスに X が表示されます。これをクリックすると検索がクリアされ、使用可能なテンプレートパラメーターがすべて表示されます。
テンプレート パラメーターが 1 つ以上のブロックパラメーターに割り当てられた後、使用回数 列はテンプレート パラメーターが使用されている場所の数を示します。例えば、テンプレート パラメーターが 2 か所で使用されている場合、これは 2 つのブロックパラメーターに割り当てられていることを意味します。これらは同じブロック内に存在することも、異なるブロック内に存在することもできます。
-
テンプレート パラメーターを作成するには、新しいテンプレート パラメーター をクリックします。
これにより、ダイアログボックスの下部に空の行が追加されます。新しいテンプレート パラメーター を数回クリックして、空の行をいくつか追加し、次々に入力できます。 -
各テンプレート パラメーターに次の情報を指定します。
-
名前: 現在のモデル内で、テンプレート パラメーターを識別するための一意の名前を入力します。この名前は、後でブロックパラメーター エディタにて選択できます。
-
タイプ: ドロップダウン リストボックスからテンプレート パラメーターの値のタイプを選択します。タイプは、文字列または浮動小数点、ソースまたはターゲット、特定のブロックのパラメーターなどです。
複数行文字列 は、電子メールの送信 ブロックの 本文 パラメーターなどで使用される特別なタイプです。長い入力は デフォルト値 テキストボックスで自動的に折り返され、Enter キーを押すと新しい行でテキストを開始できます。
入力ブロックはデバイスまたはデバイスの範囲を指定し、出力ブロックはデバイス、トリガーデバイス、アセットを指定します。テンプレート パラメーターの場合、同じテンプレート パラメーターとその値を入力ブロックと出力ブロックの両方に使用できます。テンプレート パラメーターがデバイスの範囲を参照するように設定されている場合、それを出力ブロックで使用すると、トリガーデバイスとして扱われます。通常、単一のテンプレート パラメーターはすべての入力ブロックと出力ブロックに使用され、単一のデバイスまたはデバイスの範囲になる可能性があります。この場合、ブロックの出力は、モデル評価をトリガーした範囲内のデバイスに送られます(例えば、モデルがメジャーメントの平均を計算し、メジャーメントに出力すると、デバイスごとに個別に新しいメジャーメントが生成されます)。異なる範囲を参照する異なるテンプレート パラメーターが使用されたとしても、モデルの出力は、モデルの評価をトリガーしたデバイスにのみ送信されます。
-
オプション: オプションの値は空白のままにすることも、インスタンス管理者が後で設定することもできます。このチェックボックスをオンにすると、デフォルト値を指定することはできません。
-
デフォルト値: オプションチェックボックスが選択されていない場合のみ、デフォルト値を指定できます。 例外: ブール型には常に値があり、オプションにすることはできません。デフォルトでは「false」です(デフォルト値のチェックボックスが選択されていません)。
デフォルト値を指定すると、インスタンス管理者が新しいインスタンスを作成するときに、このデフォルト値がインスタンス エディタに提供されます。インスタンスの管理者は、このデフォルト値を変更しないままにすることも、そのインスタンスの必要に応じて変更することもできます。
ソースまたは出力先のデフォルト値を設定する場合、デフォルト値 フィールドをクリックすると追加のダイアログボックスが表示されます。このダイアログボックスは、ブロックパラメーター エディタで別の入力ソースまたは出力先を選択するときと同じです(このダイアログボックスの詳細については、ブロックのパラメータ編集 を参照)。エントリの上にマウスを置くと表示されるボタンをクリックして、使用するソースまたは出力先を選択します。
特定の種類のテンプレートパラメータに対して、独自の選択リストを定義することもできます。詳細については、テンプレート パラメーターの選択リストの追加 を参照してください。
備考必要な値が指定されていないブロックパラメーターがある場合、インスタンスを起動できません。そうしようとすると、エラーが報告されます。 -
-
テンプレート パラメーターはいつでも更新できます。これには、名前、オプションであるかどうか、デフォルト値が含まれます。更新されたテンプレート パラメーターが定義されているすべてのブロックは、新しい値を使用するように自動的に適応されます。唯一の例外はタイプです。タイプを変更できるのは、テンプレート パラメーターがモデルのどのブロックでも使用されていない場合のみです。
-
モデルが非アクティブな場合、テンプレート パラメーターの順序を変更できます。これは、インスタンス エディタでの表示順序に影響します。行の隣に表示される移動アイコン を使用して、行を別の位置にドラッグします。詳細については、インスタンスのフィルタリングと並べ替え を参照してください。
-
テンプレート パラメーターは、モデルのどのブロックでも使用されていない場合にのみ削除できます。テンプレート パラメーターを削除するには、行の横にある削除アイコン をクリックします。
-
OK をクリックして変更をメモリに保存し、ダイアログボックスを閉じます。
備考変更はモデルを保存するときにのみインベントリに書き込まれることに注意してください。モデルの保存 も参照してください。
テンプレート パラメーターの選択一覧の追加
テンプレート パラメーター ダイアログボックスで選択できるいくつかのタイプ(テンプレート パラメーターの管理を参照)では、あらかじめ定義された値を選択できます。そのようなタイプの例は、超過数カウンター ブロックの方向 パラメーターで、上方向 や 下方向 などの定義済みの値が選択できます。
定義済みの値に加えて、文字列、浮動小数点数、ソースまたはターゲット、ジオフェンスなどのタイプに対して独自の選択リストを追加でき、特定の値をデフォルト値として選択することも可能です。選択リストとして定義した値は、モデルのインスタンスを作成するときに選択できるようになります。
選択リストを追加することができる場合、テンプレート パラメーター ダイアログボックスのデフォルト値を追加するテキストボックスの横に選択リストアイコン が表示されます。
すでに選択リストが利用可能な場合、上記のアイコンの代わりにドロップダウン矢印が表示されます。
テンプレート パラメーターで選択一覧を追加する
-
テンプレート パラメーターダイアログボックスで、定義済みのテンプレート パラメーターの デフォルト値 列にある選択リストアイコン をクリックします。
-
表示される 選択一覧 ダイアログボックスで、選択項目の追加 をクリックします。
-
新しい選択項目に、一意の名前と値を指定します。
指定できる値は、現在選択されているテンプレート パラメーターのタイプによって異なります。例えば、タイプとして float が選択されている場合、float 値のみを指定できます。また、ソースまたはターゲット がタイプとして選ばれた場合は、ダイアログボックスから入力ソースまたは出力先を選択できます。 -
少なくとも1つの選択項目を追加します。再度 選択項目の追加 をクリックし、新しい選択のために一意の名前と値を指定します。
-
他のすべての必要な選択が追加されるまで、上記の手順を繰り返します。
-
選択一覧の順序を変更するには、行の横にある移動アイコン を使用して、行を別の位置にドラッグします。
-
選択内容を削除するには、行の横にある削除アイコン をクリックします。
-
OKをクリックして、選択一覧を保存し、選択一覧ダイアログボックスを閉じます。
テンプレート パラメータ ダイアログボックスで、ドロップダウン リストボックスから選択した項目の 1 つをデフォルト値として選択できるようになりました。 -
テンプレートパラメータダイアログボックスで選択したデフォルト値をクリアするには、選択内容の横にあるクリアアイコン をクリックします。
-
選択一覧を編集するには、テンプレート パラメーター ダイアログボックスの デフォルト値 列にあるアクションメニュー をクリックし、次に 編集 をクリックします。これにより、選択一覧 ダイアログボックスが表示されます。
-
選択一覧を完全に削除するには、テンプレート パラメーター ダイアログボックスの デフォルト値 列にあるアクションメニュー をクリックし、次に 削除 をクリックします。表示されたダイアログボックスで OK をクリックします。
項目を別のモデルにコピー
キャンバス上の任意のアイテム (ブロック、グループ、および接続されたワイヤー) をコピーして、別のモデルに貼り付けることができます。このための前提条件は、すべてが同じセッションで行われることです。項目を別のタブまたは別のブラウザに貼り付けようとしても機能しません。
項目を別のモデルにコピーする
-
モデル エディタのキャンバスで、コピーするすべての項目を選択し、Ctrl+C キーを押します。
これは、モデルが現在読み取り専用モードである場合にも機能します。 -
モデル エディタを終了します。モデル エディタの終了も参照してください。
-
モデルマネージャーで、コピーした項目を貼り付けるモデルに切り替えます。これは、既存のモデル(既存のモデルの編集 参照)または最初に作成する必要がある新しいモデルにすることができます(新しいモデルの追加 参照) 。
-
モデル エディタが表示されたら、Ctrl+V キーを押してコピーした項目をモデルに貼り付けます。
グループでの作業
グループとは
ブロックとそれに接続されたワイヤーをグループに配置できます。グループは、折りたたんだり展開したりできる特殊なタイプのブロックです。 グループを展開すると、キャンバス上で行うのと同じ方法でその内容を変更できます。例えば、ワイヤーを追加したり、ブロックパラメーターを編集したりできます。グループにさらにブロックを追加したり、グループからブロックを削除したりすることもできます。グループを折りたたむと、キャンバス上で占めるスペースが減りますが、この場合、グループ内のブロックと配線は表示されません。
グループは、一般的に必要な機能を複数の場所で利用できるようにする必要がある場合に役立ちます。各グループに識別できる名前を付けることができます。グループをコピーして、同じモデルまたは別のモデルに貼り付けることができます。
グループに対して表示されるボックスのサイズは、その内容によって決まります。グループ内のブロックを別の位置に移動すると、ボックスのサイズが自動的に調整されます(ボックスが大きくなったり、小さくなったりします)。同じグループ内の別のブロックへのワイヤーのパスを変更する場合も同じことが当てはまります。
キャンバス上のグループは、ブロックを移動するのと同じ方法で移動します(ブロックの移動 参照)。グループを移動すると、そのグループは常にキャンバス上の他のすべての項目の上に表示されます。グループボックスは透明なので、どのブロックがグループに属しており、どのブロックがボックスに重なっているのかを簡単に確認できます。
グループを入れ子にすることはできません。
グループの追加
現在キャンバス上に表示されているブロック(ブロック間のワイヤーを含む)をグループに追加できます。
空のグループを作成することはできません。まず、次で説明するようにグループを追加する必要があります。グループが存在すると、パレットまたはキャンバスからグループにブロックを追加できます(ブロックの追加 および グループへのブロック移動 参照)。
グループを追加する
-
モデル エディタのキャンバスで、グループに追加する 1 つまたは複数のブロックを選択します。ワイヤーを選択する必要はありません。既存のワイヤーはすべて保持されます。ブロックとワイヤーの選択 を参照してください。
-
モデルエディタのツールバーで、グループアイコン をクリックします。
または、Ctrl+G キーを押します。
グループの折りたたみと展開
キャンバス上により多くのスペースが必要で、グループの内容を表示する必要がない場合は、グループを折りたたむことができます。
グループが折りたたまれている場合、そのグループ内のブロック数を示す数字が折りたたまれたグループに表示されます。
例:
グループの内容を再度表示したい場合(ブロックパラメーターを編集したり、ワイヤーを追加するなど)、グループを展開する必要があります。
モデルを保存すると、各グループの状態(現在折りたたまれているか展開されているか)が保存されます。次回モデルを編集するとき、その内容は最後の保存後と同じように表示されます。
グループを折りたたむまたは展開する
- グループを折りたたむには、グループ名の横にある折りたたみアイコン をクリックします。
- グループを展開するには、折りたたまれたグループの右上にある展開アイコン をクリックします。
グループ名の変更
グループを追加すると、デフォルト名は「グループ」になります。各グループ名を変更して、一意の名前を付けることができます。
グループ名がグループラベルに表示できる長さを超える場合、マウスポインタをグループ名の上に移動すると、ツールチップに名前全体が表示されます。
名前のないグループを作成することはできません。グループ名を削除すると、以前の名前が自動的に再び使用されます。
グループ名を変更する
-
モデル エディタでグループを選択し、グループ名をクリックします。これは、グループが折りたたまれているとき、または展開されているときに行うことができます(グループの折りたたみと展開 参照)。これにより、編集する名前全体が選択されます。
-
新しいグループ名を指定し、Enter キーを押します。
グループへのブロック移動
1 つ以上のブロックをキャンバスから既存のグループに移動できます。既存のワイヤーはすべて保持されます。
ブロックをパレットから既存のグループにドラッグすることもできます。ブロックの追加を参照してください。
ブロックをグループに移動やドラッグできるのは、その内容が表示されている(グループが現在展開されている)場合のみです。グループの折りたたみと展開を参照してください。
ブロックをグループに移動する
- ブロックを移動するグループが折りたたまれていないことを確認します。
- モデル エディタのキャンバスで、グループに移動するブロックを選択します(ブロックとワイヤーの選択 参照)。ブロック間のワイヤーを選択する必要はありません。それらはブロックと一緒に自動的に移動されます。
- 次のいずれかを実行します。
- 選択内容をグループにドラッグし、そこにドロップします。
- ブロックを移動するグループを選択します。 次に、モデル エディタのツールバーにあるグループアイコン をクリックするか、Ctrl+G キーを押します。
グループからキャンバスへのブロック移動
ブロックをグループからキャンバスに移動できます。既存のワイヤーはすべて保持されます。
グループの最後の項目がキャンバスに移動されると、そのグループは自動的に削除されます。すべての項目を同時にキャンバスに移動したい場合、グループ全体のグループを解除するだけです。グループの解除を参照してください。
グループからキャンバスにブロックを移動する
- 1 つ以上のブロックを同時に移動するには:
- 展開されたグループで、移動するブロックを選択します。
- モデル エディタのツールバーでグループ解除アイコン をクリックします。
または、Ctrl+Shift+G キーを押します。
- 単一のブロックを移動するには:
- 展開されたグループで、移動するブロックを選択します。
- ブロックパラメーター エディタの下部に表示される グループ解除 コマンドをクリックします。
グループからブロックとワイヤーの削除
ブロックやワイヤーをグループから削除するのは、キャンバス上で直接削除するのと同じ方法です。唯一の前提条件は、グループが現在展開されている必要があります。ブロックまたはワイヤーの削除 を参照してください。
グループ内の最後の項目が削除されると、そのグループは自動的に削除されます。
グループの複製
現在キャンバスに表示されている各グループを複製できます。元のグループと、その複製の内容は両方とも同じになります。
グループ外のブロックから入ってくるワイヤー、またはグループからグループ外のブロックに向かうワイヤーは複製されません。
グループを別のモデルにコピーすることもできます。項目を別のモデルにコピー を参照してください。
グループを複製する
モデル エディタのキャンバスで、複製するグループをクリックし(グループが現在折りたたまれているか、展開されているかは関係ありません)、次のいずれかの操作を行います。
- Ctrl+C キーを押してグループをコピーし、Ctrl+V キーを押してグループを貼り付けます。
- Ctrl キーを押しながら、複製するグループを配置する位置までドラッグします。。
グループの解除
グループ化を解除すると、そのグループが削除され、そのグループのすべてのブロックがキャンバスに直接表示されます。付属のワイヤーはすべて保持されます。
複数のグループを同時に解除できます。この場合、選択したグループ内またはグループ外でブロックやワイヤーが選択されていないことが重要です。選択されていないと、グループを解除できません。
グループを解除する
- モデル エディタのキャンバスで、グループを解除する 1 つまたは複数のグループを選択します。
グループが現在折りたたまれているか、展開されているかは関係ありません。 - モデル エディタのツールバーで、グループ解除アイコン をクリックします。
または、Ctrl+Shift+G キーを押します。
グループの削除
現在キャンバスに表示されている各グループを削除できます。グループ外のブロックへのワイヤーは削除されます。
グループを削除する
モデルエディタのキャンバスで、削除するグループをクリックし(現在折りたたまれているか、展開されているかは関係ありません)、Del キーを押します。
キャンバスの管理
大規模なモデルの操作
モデルが大きすぎてキャンバスの表示部分に収まらない場合は、マウスを使用して、現在ウィンドウの外側にあるモデルの部分をビューにドラッグできます。これは、キャンバス上で直接行うことも、概要エリアで行うこともできます。概要エリアには常にモデル全体が表示されます。現在、概要エリアが表示されていない場合は、概要の表示と非表示を参照してください。
大規模なモデル内を移動する
-
モデルエディタで、キャンバスの空いているエリア(ブロックやワイヤーが含まれていない)、または概要エリア上の任意の場所にマウスを置きます。
-
マウスボタンをクリックして押したまま、すぐにマウスを目的の方向にドラッグします。キャンバス上に必要なエリアが表示されたら、マウスボタンを放します。
備考キャンバスの空いている場所でマウスボタンを長押しすると、マウスポインタが変化し、代わりにエリア(複数のブロックや接続されたワイヤーなど)を選択できるようになります。ブロックとワイヤーの選択も参照してください。
概要の表示と非表示
モデル全体を示す概要エリアがキャンバスの右下に表示されます。概要が不要な場合は、非表示にすることができます。
概要を表示または非表示に切り替える
概要を非表示にするには、概要エリアのすぐ上に表示される非表示アイコン をクリックします。
概要を表示するには、キャンバスの右下にある表示アイコン をクリックします。
キャンバスのズーム
モデル エディタのツールバーには、キャンバスの現在のズーム率が表示されます。ツールバーのズームアイコンを使用すると、
- ズームアウトすると、キャンバス上のすべてのものが小さくなり、より多くの項目を表示できるようになります。
- ズームインすると、キャンバス上のすべてのものが大きくなりますが、表示できる項目は少なくなります。
キャンバスをズームする
ズームアウトするには、モデル エディタのツールバーでズームアウトアイコン をクリックします。
または、Ctrl キーを押しながらマイナスキーを押します。
ズームインするには、モデル エディタのツールバーでズームインアイコン をクリックします。
または、Ctrl キーを押しながらプラスキーを押します。
グリッドの表示と非表示
キャンバス上のブロック、ワイヤー、グループは常にグリッドにスナップされます。グリッドを表示するかどうかを決定できます。デフォルトでは、グリッドは表示されません。キャンバスをズームすると、それに応じてグリッドもズームされます。
グリッドを表示または非表示に切り替える
モデル エディタで、ツールバーアイコンをクリックして、グリッドの表示/非表示を切り替えます。
グリッドが非表示の場合、アイコンは のようになります。
グリッドが表示されている場合、アイコンは のようになります。
モデルがアクティブ(読み取り専用モード)の場合、グリッドの表示/非表示を切り替えることはできないため、このアイコンは表示されません。
インスタンス エディタの使用
インスタンス エディタのユーザーインターフェース
インスタンス エディタを呼び出すための前提条件は、モデル エディタで 1 つ以上のテンプレート パラメーターが定義されていることです(テンプレート パラメーターの管理 参照)。
インスタンス エディタを使用すると、同じモデルの異なるインスタンスをセットアップできます。各インスタンスのブロックはテンプレート パラメーターに異なる値を使用でき、インスタンスは他のインスタンスから独立してアクティブ化できます。インスタンス エディタはモデルマネージャーから呼び出します(モデルのインスタンスの編集 参照)。
インスタンス エディタには、選択したモデルのインスタンスが表示されます。インスタンスがある場合、表にインスタンスの値、モード、インスタンスがアクティブかどうか表示されます。
インスタンスごとに行が表示されます。テンプレートモデルで定義されているテンプレート パラメーターごとに列が提供され、テンプレート パラメーターの名前が列ヘッダーになります。インスタンスがアクティブでない場合は、そのインスタンスの値を調整できます。
すべてのテンプレート パラメーター(列)を画面に表示できない場合は、水平スクロールバーを使用できます。
表の右側には、各インスタンスのモードとステータスが表示されます。ここからインスタンスをアクティブ化(デプロイ)し、非アクティブ化(アンデプロイ)できます。インスタンスのデプロイ や インスタンスのデプロイ解除を参照してください。
インスタンスに対して表示される各行の右端にはアクションメニュー があり、インスタンスを管理するためのコマンド(インスタンスの削除など)が含まれています。
フィルタリングと並べ替えによって、インスタンスのリストを制御できます。詳細については、インスタンスのフィルタリングと並び替えを参照してください。
エラーアイコン が行の末尾に表示されている場合、対応するインスタンスはイベントを処理していません。詳細については、そのアイコンをクリックしてください。
インスタンスエディタを開くと、最後にインスタンスを編集してからテンプレート パラメーターが変更されており、以前と同じ値のタイプが使用されなくなっている場合があります。インスタンス エディタで指定された値に互換性がある場合、それらは新しい値のタイプに変換されます。互換性のない値(ブール型のチェックボックスやドロップダウン リストボックスに表示される値を含む)は自動的に削除されます。値が削除された各フィールドには、エラーの下線と対応するエラーメッセージが表示されます。
インスタンスの追加
新しいインスタンスを追加すると、インスタンス エディタのテーブルに新しい行が追加されます。その後、必要な値をすぐに入力することも、最初に必要な行をすべて追加してから行を順番に入力することもできます。
インスタンスを追加する
-
インスタンス エディタのツールバーで、新しいインスタンス をクリックします。 これにより、表の下部に新しい行が追加されます。新しいインスタンス(行)は保存されるまで背景色で表示されます。
-
モデルで定義されているように、テンプレート パラメーターの値を入力します。インスタンスの編集 を参照してください。
インスタンスの編集
モデル エディタでブロックの値を指定するのと同じ方法で、インスタンスのパラメーター値を指定します(ブロックのパラメーター編集 参照)。
インスタンス エディタの表には、テンプレート パラメーターのタイプに応じて、さまざまなタイプの入力コントロールが用意されています。
- テンプレート パラメーターの設定に応じて、値を入力できるテキストボックスが提供されています(例えば、string、float、複数行の文字列)。入力内容は入力時に検証されます。例えば、float(浮動小数点値)が必要なテキストボックスに、string 値(文字列)を入力することはできません。
- boolean(ブール値)にはチェックボックスが用意されています。チェックボックスを選択すると、値が
true
に設定されます。 - 別の値を選択できる場合(四捨五入の別のルールを選択する場合など)、ドロップダウン リストボックスが表示されます。
- 入力ソースまたは出力先を編集すると、追加のダイアログボックスが表示されます。このダイアログボックスは、ブロックパラメーター エディタで別の入力ソースまたは出力先を選択するときと同じです(ダイアログボックスの詳細については、ブロックのパラメーター編集 を参照してください)。エントリの上にマウスを置くと表示されるボタンをクリックして、使用する入力ソースまたは出力先を選択します。
編集されているがまだ保存されていないインスタンス(行)は、保存されるまで背景色で表示されます。
テキストボックスにまだ指定されていない値が必要な場合、これが必須フィールドであることを示すメッセージが表示されます。インスタンスを保存してインスタンス エディタを終了し、後で必要な値をすべて設定することができます。インスタンスの欠落フィールドが指定されていない限り、そのインスタンスをアクティブ化することはできません。
インスタンスのデプロイ
各インスタンスを個別にアクティブ化(デプロイ)できます。例えば、1 つのインスタンスを本稼働(Production)モードにし、別のインスタンスをテストモードにすることができます。さまざまなモードの詳細については、モデルのデプロイ を参照してください。この情報は、通常のモデルとテンプレートモデルの両方に適用されます。
インスタンスをアクティブ化すると、そのインスタンスに対するすべての変更が最初に保存され、その後インスタンスがアクティブ化されます。
インスタンスがアクティブ化されると、テンプレート パラメーター値が指定されている場合、その値が取得され、テンプレートパラメーター バインディングを使用するモデル内のブロックパラメーターに適用されます。テンプレート パラメーター値が指定されていない場合、そのテンプレート パラメーターのデフォルト値(存在する場合)が使用されます。必須のテンプレート パラメーターの場合にテンプレート パラメーター値が指定されていない場合、インスタンスはアクティブ化に失敗します。
インスタンスがアクティブになると、最初にインスタンスを非アクティブ化することなく、テンプレート パラメーター値やモードを変更することはできません。いずれかのインスタンスがアクティブな場合、モデルは読み取り専用となり、すべてのインスタンスが非アクティブ化されるまで変更できません。
インスタンスをデプロイする
-
インスタンス エディタの 実行モード 列で、デプロイするインスタンスのドロップダウンメニューをクリックし、Production、Test、Simulation のいずれかを選択します。
Draft モードのインスタンスをアクティブ化することはできません。 -
Simulation モードを選択した場合、表示されているカレンダーアイコン をクリックし、使用する時間範囲を指定して、適用 をクリックします。シミュレーションパラメーター を参照してください。
-
現在、ステータス 列のトグルボタンに 非アクティブ が表示されている場合、このボタンをクリックして状態を アクティブ に変更します。Simulation モードの場合、有効な時間範囲が定義されている場合にのみ、状態を アクティブ に設定できます。 エラーが発生した場合、表の右側にエラーアイコン が表示され、インスタンスをアクティブ化できません。そのエラーアイコンをクリックすると、詳細情報が得られます。
インスタンスのデプロイ解除
現在 Production(本稼働)モード、Test モード、Simulation モードにあり、インスタンス エディタの ステータス 列のトグルボタンに アクティブ と表示されている各インスタンスを非アクティブ化(デプロイ解除)できます。
インスタンスのデプロイを解除すると、インスタンスは停止され、受信データは処理されなくなります。インスタンス内に構築された状態はすべて失われます。Simulation モードの場合、指定された時間範囲のすべての履歴データが再生される前に、インスタンスが停止されることを意味します。
インスタンスをデプロイ解除する
インスタンス エディタの ステータス 列で、デプロイを解除するインスタンスのトグルボタンをクリックすると、ボタンに 非アクティブ が表示されます。
インスタンスのフィルタリングと並び替え
インスタンスの長いリストがある場合、検索ボックスに値を入力することで、探しているインスタンスを簡単に見つけることができます。または、値の一部を入力することもできます。これにより、インスタンス エディタのすべての入力フィールドが検索され、この値を含むインスタンス(行)のみがリスト表示されます。フィルターに一致するすべての値が強調表示されます。検索条件では大文字と小文字は区別されません。検索条件が現在適用されている場合、検索ボックスに X が表示されます。これをクリックすると検索がクリアされ、利用可能なすべてのインスタンスが表示されます。
インスタンス エディタ表の列を並べ替えることもできます。これを行うには、列ヘッダーに表示されている並べ替えアイコン のいずれかをクリックします。これにより、インスタンスがその列の値に従って(アルファベット順または番号順など)並べ替えられます。もう一度クリックすると、列が逆方向に並べ替えられます。そのため、その列の必須値がまだ指定されていないフィールドは、列の最上部または最下部に表示できます。例えば、アクティブなインスタンスを一番上に表示するなど、実行モードとステータスに従ってインスタンスをアルファベット順に並べ替えることもできます。
値を編集しても、インスタンス エディタ表の行の表示には影響しません。検索と並べ替えを再適用する場合、インスタンスを保存して再読み込みする必要があります。
新しいインスタンスを追加しても、インスタンス エディタ表の行の表示には影響しません。並べ替え後に行を追加すると、インスタンスを再読み込みしない限り、その行は常に表の最後に追加されます。
インスタンスの複製
現在インスタンス エディタにリストされている各インスタンス(行)を複製できます。元のインスタンスとその複製は、両方とも同じテンプレート パラメーター値と同じモードを持ちます。ただし、元のインスタンスがアクティブであっても、複製されたインスタンスは常に非アクティブになります。
インスタンスを複製する
インスタンス エディタで、複製するインスタンスのアクションメニュー をクリックし、複製 をクリックします。
複製されたインスタンスの新しい行が、インスタンス エディタの表の一番下にすぐに表示されます。
インスタンスの削除
現在インスタンス エディタにリストされている各インスタンスを削除できます。現在デプロイされているインスタンスを削除すると、まずデプロイが解除されてから削除されます。
インスタンスを削除する
-
インスタンス エディタで、削除するインスタンスのアクションメニュー をクリックし、削除を選択します。
-
表示されるダイアログボックスで、削除を確認するために 削除をクリックします。
インスタンスの保存
必要な情報を指定する必要がある行がまだある場合でも、インスタンスを保存できます。これは、後でその情報を追加する場合に役立ちます。
インスタンスを保存する
インスタンス エディタのツールバーで、保存をクリックします。
このコマンドは、インスタンスに変更が適用されている場合にのみ有効になります。行が背景色で強調表示されているインスタンスのみが保存されます。
インスタンスの再読み込み
表示を更新して、すべてのインスタンスの最新の状態を表示したり、デプロイされたインスタンスが障害状態になったかどうかを確認したりできます。
インスタンスを再読み込みする
インスタンス エディタのツールバーで、再読み込みをクリックします。
再読み込み時に保存されていない変更がある場合、最初にこれらの変更を保存するように求められます。
インスタンス エディタの終了
次のようにインスタンスエディタを終了すると、モデルマネージャーに戻ります。
インスタンス エディタを終了する
インスタンスエディタのツールバーで、閉じるアイコン をクリックします。
終了時に保存されていない変更がある場合、最初にこれらの変更を保存するように求められます。
ワイヤーとブロック
ワイヤーで送信される値
モデル内のブロックは、出力ブロックから入力ブロックへワイヤーで接続されています。
ワイヤーを使用すると、ブロック間で信号と値を渡すことができます。ワイヤー上で送信される値は、接続元の出力ブロックに応じて、次のタイプのいずれかになります。
タイプ | 説明 |
---|---|
boolean |
true または false の値。ブール値は、変更されるまで true または false のままです |
float |
数値。小数にすることができます(固定精度を使用して処理できます)。float 値は、変更されるまで現在の値を維持します |
string |
テキスト値です。文字列値は変更されるまでその値を保持します。 テキスト値。 文字列値は、変更されるまで現在の値を維持します |
pulse |
ある時点の信号。パルスは瞬間的にのみアクティブになります。上記のタイプとは異なり、これらは時間内の 1 つのインスタンスのみを表します。パルス型 を参照してください |
any |
上記の任意のタイプの値です。any 型 を参照してください。 |
ワイヤのータイプは、接続されている出力によって決まります。これはブロックリファレンスで確認できます。同様に、ブロックの入力のタイプ(またはサポートされているタイプ)もブロックリファレンスで確認できます。
値の型
次のタイプは、値の型を示しています。
boolean
string
float
any
(boolean
、string
、またはfloat
値を保持する場合)
値の型は、断続的に読み取られたり、サンプリングされたりするセンサー値などのメジャーメントをモデル化するのに役立ちます。読み取りの間に、測定される物理的特性(温度など)は連続的な特性であるため、依然として何らかの値を持ちます。実際的な理由により、センサーは連続的な出力ストリームを提供せず、定期的にサンプリングしたり、メジャーメントが変化した場合にのみ新しい読み取り値を提供したりすることがあります(センサーが提供する測定解像度の範囲内で)。サンプル ポイント間では、ブロックは、提供される最新の値である最新の値を使用します。一般に、ブロックは新しい値が受信されるまで、値はその値の最新の読み取り値にとどまると想定します。
例えば、一対の温度センサーについて考えてみましょう。1 つは関係なく 10 秒ごとに読み取り値を提供しますが、もう 1 つは値が 0.5 度変化した場合にのみ新しい読み取り値を提供します。これらを 相違 ブロックに接続すると、次の表に示すような入力が得られ、相違 ブロックの 絶対的な相違 出力からの対応する結果が得られます。
時間 | センサー 1 (10秒ごとに読み取る) |
センサー 2 (0.5度ずつ変化すると出力) |
差分ブロック:絶対差分出力 |
---|---|---|---|
10:00:00 | 20.0 | ||
10:00:03 | 22.0 | 2 | |
10:00:10 | 20.0 | 2 | |
10:00:20 | 20.0 | 2 | |
10:00:23 | 22.5 | 2.5 | |
10:00:28 | 23.0 | 3 | |
10:00:30 | 21.1 | 1.9 | |
10:00:35 | 23.5 | 2.4 | |
10:00:40 | 22.8 | 24.0 | 1.2 |
同じタイムスタンプを持つ同じブロックへの 2 つの入力(ブロックの異なる入力ポートへ)は、1 つの出力のみを生成することに注意してください。モデル内の各ワイヤー(および各入力ブロック)には、特定の時点で 1 つの値しか存在できません。入力ブロックは、同じタイムスタンプに対して複数の出力を生成できません。複数のイベントを同時に受信した場合、どのイベントが選択されるかは未定義です。
一般に、ブロックは、以前と同じ boolean
、float
または string
値を受け取るワイヤーに意味があるとはみなしません。ほとんどのブロックは動作を変更しません。これは、上の例の 相違 ブロックなど、あらゆる計算ブロックに当てはまります。センサー 1 からの繰り返し読み取りでも出力は 2 のままです。繰り返し入力を無視する チェックボックスが選択されていない場合(false
)の 不足データ ブロックなど、いくつかの例外があります。
単一のブロックに数値入力とリセットなどのパルス信号がある場合、パルス信号が発生しても新しい値が存在しないということは、その値は同じ値のままとして扱われます。そのため、平均値 (平均) ブロックがリセットされると、その出力は、最後に受信した入力と等しくなります(モデルの開始以来、入力を受信していると仮定します)。以下の例では、平均値 (平均) ブロックの期間は設定されていませんが、出力しきい値は 0.05 に設定されています。これは、新しい入力がない場合でもブロックが新しい出力を生成することを意味します(共通のブロック入力とパラメーター 参照)。
時間 | リセット信号 | センサー2 | 平均値(平均)ブロック出力 | 説明 |
---|---|---|---|---|
10:00:00 | リセット | 出力はありません。まだ入力値がありません | ||
10:00:03 | 22.0 | 22.00 | 履歴がない場合、出力値は入力値となります | |
10:00:23 | 22.5 | この時点までの値はすべて 22 であるため、平均値は依然として 22 です(そのため、新しい出力は生成されません) | ||
10:00:25.22 | 22.05 | 値 22 では平均 20 秒、値 22.5 では 2.22 秒 | ||
10:00:28 | 23.0 | 22.10 | 値 22 では 20 秒、値 22.5 では 5 秒の平均 | |
10:00:30 | リセット | 23.00 | 入力はまだ 23 であり(新しいイベントを受信していないだけです)、リセットでは履歴が破棄されるだけです。履歴がない場合、出力値は入力値となります | |
10:00:35 | 23.5 | |||
10:00:35.56 | 23.05 | 出力が 0.05 変化するときのさまざまな時点での平均 | ||
10:00:36.25 | 23.10 | |||
10:00:37.14 | 23.15 | |||
10:00:38.33 | 23.20 | |||
10:00:40 | 24.0 | 23.25 | 値 23 で 5 秒(リセットから :30 から :35)、値 23.5 で 5 秒(:35 から :40)の平均 |
次のグラフは、平均値 (平均) ブロックへの入力と、このブロックの出力を示しています。
新しい測定入力が発生するまで実効入力値は変化せず、平均値 (平均) ブロックがこの実効値(上のグラフの赤い線)に対して動作することに注目してください。リセットされると、ブロックは現在有効な入力を出力します。これは 2 回目のリセット時の 10:00:30 では 23 です。出力しきい値 パラメーターが設定されている場合、新しい入力が発生しなくても新しい出力が生成され、漸近的に最後の入力値に近づく可能性があることに注意してください。また、この動作は、Apama クエリやストリームクエリとは異なることに注意してください。
平均値 (平均) ブロックが 10 秒のウィンドウで構成されている場合、そのウィンドウは次のように適用されます。
時間 | リセット 信号 |
センサー 2 | 有効 入力値 |
平均値(平均)ブロック出力 | ウィンドウ 履歴の値 |
説明 |
---|---|---|---|---|---|---|
10:00:00 | リセット | |||||
10:00:03 | 22 | 22 | 22.00 | 開始後の最初の値: ウィンドウは空であるため、平均値 (平均) ブロックは出力の入力値を使用します | ||
10:00:23 | 22.5 | 22.5 | 22 | |||
10:00:23 - 10:00:28 | 22.5 | 22.00から22.20に増加 | 22, 22.5 | 22 または 22.5 のウィンドウの割合は時間の経過とともに変化するため、出力も変化します | ||
10:00:28 | 23 | 23 | 22.25 | 22, 22.5 | ||
10:00:28 - 10:00:30 | 23 | 22.25から22.40に増加 | 22, 22.5, 23 | |||
10:00:30 | リセット | 23 | 23.00 | ウィンドウがリセットされ、空になりました。現在の(有効な)入力は 23 なので、平均値 (平均) ブロックはそれを出力に使用します | ||
10:00:35 | 23.5 | 23.5 | 23 | |||
10:00:35 - 10:00:40 | 23.5 | 23.00から23.20に増加 | 23, 23.5 | |||
10:00:40 | 24 | 24 | 23.25 | 23, 23.5 | ウィンドウがいっぱいになりました(リセットから 10 秒) | |
10:00:40 - 10:00:45 | 24 | 23.25から23.75に増加 | 23.5, 24 | |||
10:00:45 | 24 | 24 | 24 | 値 23 は、ウィンドウから最終的に期限切れになります(これは、10 秒前の 10:00:35 まで有効な入力でした) | ||
10:00:45 - 10:00:50 | 24 | 23.75から24に増加 | 23.5, 24 | |||
10:00:50 | 24 | 24 | 24 | 値 23.5 は、ウィンドウから最終的に期限切れになります(これは、10 秒前の 10:00:40 まで有効な入力でした)。ウィンドウには、値 24 の 10 秒相当のメジャーメントが含まれています |
上記では、メジャーメントを受信した後、現在の値がウィンドウ内でのみ重み付けされる(出力値に寄与する)ことに注目してください。メジャーメントを受信した時点では、以前の履歴と比較して重み付けはゼロになります。以前と同様、センサーの値は、新しい値に置き換えられるまで有効な入力のままです(これは、Apama クエリまたはストリーム クエリの時間ベースのウィンドウによる集計とは異なることに注意してください)。例えば、ブロックの有効入力値は 10:00:35 から 10:00:40 まで 23.5 であり、値 23.5 は、ブロックが終了してから 10 秒後の 10:00:50 に最終的にウィンドウから期限切れになります。最初にウィンドウに入ってから 10 秒後ではなく、現在の有効な入力値になります。最後に、ウィンドウが空の場合、ウィンドウの長さがゼロであるため、有効な入力が代わりに出力として使用されることに注意してください。
パルス型
値の型とは対照的に、pulse
型は単一の時点を表します。例えば、これは次の結果である可能性があります。
- ユーザーが瞬間的なアクションのボタンを押す
- デバイスの状態遷移
- ドアを通過する人を検出するセンサー
- リモートデバイスがまだ生きていることを示すハートビートイベント
- モデル内のブロックの状態遷移
通常、ブロックは入力の 1 つに送信されるすべてのパルスに基づいて動作します。パルスは通常、出力ブロックを使用してモデルからの出力をトリガーするために使用、またはモデル内のブロックの状態をリセットするために使用されます。
パルスは瞬間的にアクティブになります。いくつかの点で、これらはモデルが値を処理した後に自動的に false
にリセットされるブール値に似ています。
パルスの繰り返しは通常重要ですが、使用方法によっては必ずしも変化が生じるわけではありません。例えば、入力値を変更せずに 平均値 (平均) ブロックを繰り返しリセットすると、出力値は同じままになります。
any 型
any 型は、任意の型の値を通過するブロック(時間遅延 ブロックや ゲート ブロックなど)で使用されます。
any 型の値は、値型または pulse
型を表すことができます。
型変換
出力ブロックが同じ型であれば、出力ブロックを入力ブロックに接続することは正当です。他のほとんどの接続も許可されており、その場合、次の表に示すような変換が行われます。 は、接続が不正であることを示しています。このような接続を使用してモデルをデプロイしようとすると失敗します。
接続されたブロックが持つ出力タイプ | ||||||
---|---|---|---|---|---|---|
pulse | boolean | float | string | any | ||
型の入力に接続 | pulse | ![]() |
出力が true に変化するとパルス発生 | 出力値が変化するとパルス発生 | 出力値が変化するとパルス発生 | 出力値が変化するとパルス発生(falseへの変化を除く) |
boolean | パルスが発生した場合 true、それ以外の場合 false | ![]() |
ゼロ以外の場合 true | 空の文字列でない場合 true | 値がゼロ以外または空の場合 true | |
float | ![]() |
0 は false、1 は true | ![]() |
![]() |
値の型が float または boolean の場合は許可されるが、その他の値は実行時に失敗する | |
string | ![]() |
true または false | 文字列に変換された数値(技術的表記の場合もある) | ![]() |
文字列値(技術的表記の場合もある) | |
any | ![]() |
![]() |
![]() |
![]() |
![]() |
常に成功する変換のみが許可されます。文字列値は float 値に変換されません。入力変換が機能する場合もありますが、常に機能することは保証できません。
多くの場合、型変換やワイヤーが意味をなす場所について心配する必要はありません。必要な型変換は、すべて自動的に行われます。
一部のブロックはさまざまなタイプの入力を受け入れ、入力タイプに応じて出力タイプまたは動作を変更する場合があります。例えば、ロジックの OR ブロックはブール入力またはパルス入力で動作でき、その出力は入力タイプと同じです。
場合によっては、値を強制的に特定の型として解釈させることが望ましい場合があります。その場合、コンバータ ブロックを使用して、特定の型への変換を強制できます。例えば、パルス ブロックは、上記の変換に従って、ブール値または浮動小数点数をパルスに変換できます。これは、ブール値の場合、ブール値が true に変化したときにパルスを生成することを意味します。float の場合、値が変化したときにパルスを生成します。そのため、2 つの float 出力を OR ブロックに直接接続すると、float 出力のいずれかが 0 以外の場合に true となるブール出力が生成されます。あるいは、2 つの float 出力をそれぞれ パルス ブロックに接続し、そこから OR ブロックの入力に接続すると、いずれかの float 出力の値が変化するたびにパルスが送信されます。これは、パルス ブロックのデフォルトの動作です。
パルス ブロックでは モード パラメーターの設定に応じて、さまざまなタイプのパルス変換が可能です。さまざまなモードでの変換については、次の表で説明します。
出力タイプを持つ From ブロック | ||||||
---|---|---|---|---|---|---|
pulse | boolean | float | string | any | ||
パルスブロックのモードによる動作 | 値変更時(デフォルト) | ![]() |
出力が true に変化するとパルス発生 | 出力値が変化するとパルス発生 | 出力値が変化するとパルス発生 | 出力値が変化するとパルス発生(falseへの変化を除く) |
すべての入力に対して | ![]() |
すべての入力でパルス発生 | すべての入力でパルス発生 | すべての入力でパルス発生 | すべての入力でパルス発生 | |
ゼロ以外の値について | ![]() |
すべての true 入力でパルス発生 | ゼロ以外の入力ごとにパルス発生 | 空でない入力ごとにパルス発生 | 左側のセルに記載されているように、値の型に応じてパルス発生 |
ワイヤーの処理順序
ブロックに複数の入力が接続されている場合、ブロックが入力に基づいて計算を実行する前に、これらすべての入力が計算されます。ブロックの入力が互いに同期していない可能性があります(値の型 の 2 つの温度センサーの例など)、この場合、ブロックは値型入力の最新値を使用します。
単一の値が同じブロックにつながる 2 つ以上のパスに送信される場合、ブロックは両方のパスの最新の値に基づいて計算を実行します。これにより、単一のブロックへの複数のパスが存在する場合でも、一貫した動作が保証されます。
例:
デバイスのメジャーメントを受信すると、平均値 (平均) ブロックの計算が完了し、相違 ブロックが値とその平均の差を計算する前に平均を生成します。
ワイヤーの制限
ブロックの出力は他の複数のブロックに接続できますが、ブロックの入力は 1 つの接続のみを持つことができます。
必要がない場合は、ブロックの入力または出力を未接続のままにすることもできます(ワイヤーの処理順序 で示されている例の 平均値 (平均) ブロックには、サンプル または リセット 入力に何も接続されていません)。
ワイヤーではサイクルを作成できません。これは、ブロックの出力は、次のような接続できないことを意味します。
- 同じブロックの入力
- ソースブロックの入力の 1 つに直接または間接的に接続されているブロックの入力
例えば、Block1、Block2、Block3 の 3 つのブロックがあるとします。次の場合、モデルにはサイクルが含まれます。
- Block1 の出力は Block2 の入力に接続され、Block2 の出力は Block1 の入力に接続されます。
- Block1 の出力は Block2 の入力に接続され、Block2 の出力は Block3 の入力に接続され、Block3 の出力は Block1 の入力に接続されます。
モデル内でサイクルが発生する可能性のある接続が多数あります。 ただし、モデル エディタではサイクルを作成できません。
ブロックの入力と出力
多くのブロックには、使用する必要のない入力または出力があります。
一部のブロックは複数の異なる出力を生成し、モデルは使用可能な出力の一部のみを必要とする場合があります。
一部のブロックには入力、特に使用する必要のない pulse
タイプの入力があります。これらを何も接続しないままにしても問題ありません。これらの入力に関連付けられた操作(リセット など。共通のブロック入力とパラメーター 参照)は、決してトリガーされません。
ブロックは必要に応じて、どの入力が接続されているかを検出できます。例えば、AND ブロックには 5 つの入力がありますが、true
出力を生成するには、true
になるように接続されている入力のみが必要です。
共通のブロック入力とパラメーター
以下にリストされている入力は、ブロックの左側に表示されている共通の入力ポートの名前です。
-
値 入力
ほとんどの計算ブロックには 値 と呼ばれる 1 つのメイン入力があります。これは、ブロックが主な計算を実行する値です。
-
値 1 および 値 2 入力
ブロックには、値 1、値 2 などのラベルが付けられる、同様の入力が多数含まれる場合があります。このような入力は、相違 ブロック(値の型 の例も参照)または AND と OR のロジック ブロックで見つかります。通常、どの入力が使用されるかについては重要な点はありません。
-
リセット入力
一部の内部状態を維持するブロックには、通常は
pulse
タイプである リセット 入力が含まれる場合もあります。これを接続する必要はありませんが、ブロックが計算を実行する読み取り値の範囲を明示的に制御するために使用できます。例えば、車両の走行を監視するモデルは、走行の開始を示すエンジン始動時にリセットされる場合があります。リセット 入力を示す例については、値の型 を参照してください。 -
サンプル 入力と 出力しきい値 パラメーター
ブロックは通常、新しい入力を受信したときに出力を再計算します。一部のブロックは、遅延時間パラメーターの設定(不足データ ブロックや 時間遅延 ブロックなど)が原因で、または出力が 入力値が一定であっても時間の経過とともに変化します。例えば、正の入力を持つ インテグラル ブロックは、ウィンドウが一杯になるまで増加し続ける出力を生成します(または、期間が設定されていない限り、ブロックが無制限のウィンドウで積分を計算している場合は無期限になります)。
現実世界のセンサーと同様、連続的に変化する出力を作成することは現実的ではありません。このようなブロックには、入力値が変化した場合に出力を生成するだけでなく、入力が新しい値を受け取っていないので、出力は大幅に変化していない場合でも、ブロックの再評価と新しい出力の生成をトリガーする サンプル 入力がある場合があります。これは、ブロックの出力がモデル内の後の時点で使用されるため、ブロックの出力を計算する必要がある特定の時点がある場合に便利です。
あるいは、このようなブロックには、出力を再計算する頻度を制御するために使用される 出力しきい値 パラメーターがある場合があります。設定すると、ブロックはその出力がいつ出力しきい値によって変化するかを決定し、それが新しい入力値の結果でなくても、ブロックは出力値を生成します。
出力しきい値は、入力値に存在する誤差範囲(実際の物理センサーは測定する特性において限られた精度と正確さを持っています)と、出力に必要な精度を考慮して設定する必要があります。
出力しきい値の値が大きすぎたり、小さすぎたりしないように注意してください。 値が大きすぎる場合、ブロックは必要なときに新しい出力を生成しません(サンプル 入力が使用されない限り)。値が小さすぎる場合、ブロックは出力を生成する頻度を制限します。値を変更したい場合は、
minimum_wait_time_secs
キーの値を変更するPOST
リクエストを Things Cloud に送信します。詳細については、構成 を参照してください。適切な値のスケールは、入力値の大きさによって異なります。出力しきい値 が設定されていない場合、ブロックは入力を受け取った場合にのみ新しい出力を生成します(これは、値に関する入力を頻繁に受け取っている場合、または サンプル 入力が使用済みの場合、適切かもしれません)。
-
タイムスタンプを無視パラメーター
Things Cloud のメジャーメント、イベント、アラームの場合、ブロックはデフォルトの入力で利用可能なソース タイムスタンプを使用します。ブロックはタイムスタンプに基づいて、入力を並べ替えます(入力ブロックとイベントのタイミング 参照)。ただし、遅延したイベントは多すぎる場合に削除されます。この動作が望ましくない場合(例えば、デバイスの時計が十分に同期していない場合、またはデバイスからのデータが遅延する可能性がある場合)、タイムスタンプを無視 パラメーターを選択して、この動作を無効にすることができます。これが選択されている場合、データのタイムスタンプは無視され、モデルは入力データのタイムスタンプに関係なく、受信するとすぐに入力データを処理します。これにより、タイムスタンプを使用するデフォルトの動作とは異なる結果が生じる可能性があります。最も望ましい動作は、デバイスの性質と Things Cloud への接続によって異なります。
モデルがシミュレーションモードで実行されている場合、タイムスタンプを無視 パラメーターの設定は無視されることに注意してください。ブロックは常にソースのタイムスタンプを使用するため、シミュレーション イベントを再生するときに、データが順番に処理されることが保証され、より現実的な結果が得られます(そして、データがいつ受信されたかの記録はなく、ソースのタイムスタンプのみが記録されます)。シミュレーションモードについて を参照してください。
入力ブロックとイベントのタイミング
入力ブロックは、外部ソース((Things Cloud メジャーメントなど)からのデータをモデルで利用できるようにします。多くのデータソースには、各データにタイムスタンプがあり、メジャーメントまたはイベントが実際に発生した時間を報告します。処理のために Apama システムにデータを送信する際に遅延が発生し、Apama がイベントを順番通りに受信しない可能性があります。
メジャーメントなどのタイムスタンプを持つデータソースは、並べ替えることができます。例えば、操作にはタイムスタンプがないため、順序を変更することなく、受信した通りに処理されます。
分析ビルダーは、タイムスタンプ付きのデータソースを使用するいくつかの入力ブロックを提供します。これらのブロックは、タイムスタンプを無視 パラメーターを提供します。これにより、データの並べ替えを無効にして、受信した入力を処理できるようになります。共通のブロック入力とパラメーター を参照してください。
次の表に、使用可能な入力ブロックをリストし、入力を並べ替えられるかどうかを示します。
入力ブロック | 並べ替え可能 |
---|---|
アラーム入力 | はい |
イベント入力 | はい |
管理オブジェクト入力 | いいえ |
測定入力 | はい |
操作入力 | いいえ |
位置入力 | はい |
データの一部にタイムスタンプが関連付けられているデータソースの場合、入力ブロックは受信したイベントを順序通りに処理できません。これを行うために、入力ブロックは受信したすべてのイベントをリオーダー バッファーに保持し、ソース タイムスタンプから事前に定義された遅延時間までイベントの処理を遅延させます。ソースのタイムスタンプに比べてイベントの処理を遅らせることにより、入力ブロックによりイベントの順序を変更できるようになります。このプロセスの重要なパラメーターは、イベントの遅延時間です。入力ブロックが入力を遅延する時間を秒単位で構成するには、Things Cloud に timedelay_secs
キーの値を変更する POST
リクエストを送信します。詳細については、構成 を参照してください。
入力ブロックは、イベントが順序通りに届かない場合でも、受信される合同タイムスタンプが適切であると仮定します。イベントが定義された秒数を超える遅延で受信された場合(つまり、イベントのタイムスタンプとApamaを実行しているシステムの時間の差)、その時刻のイベントが既にモデルによって処理されている場合、破棄されます。このため、古いイベントが一つのモデルによって処理され、別のモデルによって破棄される可能性があります。
入力ブロックは、イベントが順序通りに配信されない場合でも、定義された遅延時間内に Apama によって受信されると想定しています。定義された秒数(イベントのタイムスタンプと Apama を実行しているシステムの時刻との差)を超える遅延後にイベントを受信した場合、同じタイムスタンプまたはより新しいタイムスタンプのイベントがモデルによってすでに処理されている場合、そのイベントは破棄されます。そのため、古いイベントは、あるモデルによって処理されても別のモデルによって削除される可能性があります。
時間遅延値の設定が低すぎる場合、わずかな遅延によって Apama がイベントを破棄し、誤った結果が生じる可能性があります。遅延時間の値が大きいほど、イベントが処理されるまでの遅延が長くなります。そのため、Apama に配信されるイベントの環境に合わせて、適切な遅延時間の値を選択することが重要です。
コリレーターは、破棄されたイベント数をコリレーター ログファイルに定期的に記録します。ログ調整の構成についての構成 、および Apama-ctrlマイクロサービスのログファイル を参照してください。
出力ブロックとイベントのタイミング
出力ブロックは、モデルからのデータ(Things Cloud のメジャーメントや操作)を外部システム(Things Cloud など)で利用できるようにします。出力ブロックは、同期値または非同期値を生成できます。
同期出力(メジャーメントなど)を生成する出力ブロックからの値は、別のモデルで時間同期的に使用することもでき、同じタイムスタンプの他のデータを使用してモデルで処理することもできます。モデル間の接続 を参照してください。
非同期出力を生成する出力ブロックからの値は、別のモデルでも使用できますが、それは、外部システムからデータを受信したときにのみ時間非同期で行われます。
次の表に、使用可能な出力ブロックをリストし、出力が同期か非同期かを示します。
出力ブロック | 出力の種類 |
---|---|
アラーム出力 | 同期的 |
イベント出力 | 同期的 |
管理オブジェクト出力 | 非同期的 |
測定出力 | 同期的 |
操作出力 | 非同期的 |
ワイヤー上のフラグメントプロパティ
各ワイヤーには、ワイヤーのタイプである主な値(float
、boolean
、string
、pulse
のいずれか)があります。
これに加えて、一部のブロックは値とともに他の情報のフラグメントを提供する場合があります。これらは、値の名前付きプロパティです。これらは、メジャーメントが測定される単位や、データソースの追加のコンテキスト情報など、入力ブロックから提供される他の情報である場合があります。
ほとんどのブロックは入力ワイヤーからの主な値でのみ動作しますが、一部のブロックはこれらのフラグメント プロパティ値を利用して、それらを別の出力ポートに抽出できます(例として、プロパティの抽出 ブロックをご覧ください)。これにより、外部ソースからのより複雑なデータをより柔軟に処理できるようになります。
一連のイベントを識別するためのキー
入力および出力ブロックは、イベントのシリーズ(またはストリーム)を特定するためにキーを指定します。このイベントのシリーズは、入力ブロックに配信する正しいイベントを特定するために使用されます。キーは、複数のブロックパラメータで構成され、他のイベントシリーズと区別されるイベントのシリーズを特定します。例えば:
入力ブロックと出力ブロックは、一連のイベント(または、ストリーム)のキーを指定することによって、一連のイベントを識別します。この一連のイベントは、入力ブロックに配信する正しいイベントを識別するために使用されます。キーは複数のブロックパラメーターで構成され、同じブロックタイプを通じて、その一連のイベントを他の一連のイベントとは区別して識別します。
例:
Measurement
オブジェクトの入力と出力の場合、キーはデバイス、フラグメント、シリーズです。出力ブロックで指定された 単位 パラメーターはキー(情報提供のみです)の一部とみなされず、測定入力 ブロックのパラメーターと一致する必要はありません。Event
オブジェクトの場合、キーはデバイスとイベントタイプです。Alarm
オブジェクトの場合、キーはデバイスとアラームのタイプです。
値とブロックの詳細
はじめに
分析ビルダーは、ブロックを相互に接続して、入力を処理して反応できるモデルを形成するための環境を提供します。分析ビルダーは内部で数種類の値を使用するため、これらの違いを理解することが重要です。次のトピックでは、連続時間値と離散時間値を表す値のタイプと pulse
タイプの区別について説明します。また、ウィンドウ処理やブロックが出力を生成するときのブロック実装の詳細についても説明します。
概要
分析ビルダーでは、連続時間値を表すために値の型 float
、boolean
、string
が使用されます。これらには次のプロパティがあり、モデルを作成するときやカスタムブロックを作成するときに考慮する必要があります。
- 値のワイヤーは、新しい入力があるまでその値を保持します
- 同じ値を繰り返し入力しても、(ほとんどの場合)出力には影響しません
- 定義された期間内に、新しい入力が発生するという保証はありません
これらを、離散イベントを表し、次のプロパティを持つ pulse
タイプと比較してください。
- パルスは単一の時点を表します
- パルスに関連するどの値にも差がない場合でも、パルスの複数の入力には意味があります
- ブロックにパルス用の複数の入力ポートがある場合、異なる時間に異なるポートに発生する入力は、一度に 1 つだけ「認識」されます。ブロック上のパルスの入力ポートは、評価後に自動的に「リセット」されたかのように動作します
これらのプロパティとその背後にある理論的根拠については、次のトピックで検討および説明します。これらのトピックでは、離散数値測定など、これらの区別に当てはまらないケースの処理方法についても説明します。
連続時間物理量の表現としての値
連続時間の値の型、特に float
(数値)型は、通常センサーによる何らかの連続的な物理量またはプロパティのメジャーメントを表すために使用されます。例えば、値は次のいずれかを表す場合があります。
- パイプ内の圧力
- 温度計で測定された温度
- 車軸の回転速度
- オブジェクトの位置
これらはすべて連続的に測定可能な特性であり、本質的にはアナログです。時間と値の両方で(物理的制限内で)どれだけ正確に測定できるかについては、ある程度の精度が存在します。時間精度とは、測定をどのくらいの頻度で実行できるか、また測定時間がどの程度正確に記録されるかを意味します。また、レイテンシ、つまり実際のプロパティの変更とそれが測定できるまでの遅延が発生する場合もあります。値の精度とは、値をどの程度の精度で測定できるかを意味します。通常は少なくとも有効数字 2 桁、まれに有効数字 4 桁または 5 桁を超える精度を区別できます。継続的とは、どの時点でもプロパティの測定が有効であることを意味します。
連続的ではなく、異なる時間に離散的な測定を行うことは、「サンプリング」(https://en.wikipedia.org/wiki/Sampling_(signal_processing) 参照)と呼ばれることがあります。値の精度に関する制限は「量子化誤差」(https://en.wikipedia.org/wiki/Quantization_(signal_processing) 参照)と呼ばれる場合があります。連続値を測定する場合、メジャーメントが取得される速度によってブロックまたはモデルの出力に大きな違いが生じてはなりません。メジャーメントを増やすと、より正確な出力が得られる可能性がありますが、計算に大きな変更を加える必要はありません。
例えば、車軸の回転速度を測定するセンサーは、10 分の 1(0.1)秒ごとに新しいメジャーメントを提供でき、0 ~ 10000 rpm から最も近い 50 rpm までの範囲でのみ測定できる場合があります。10 rpm や 20 rpm の変化では、精度レベルの変化ではないため、メジャーメントが変化しない場合があります。回転している車軸にブレーキをかけて停止させると、すぐには検出されない可能性がありますが、一度 1000 rpm の読み取り値が得られ、その後、車軸が停止した後 0.1 秒後に 0 rpm での読み取り値が得られます(一方、車軸には停止するまでに数十ミリ秒かかり、その期間が経過すると速度が低下します)。
センサーは、通常の周波数で新しいメジャーメントを提供するように接続できます(例えば、8,000 Hz での音声サンプリングや、1 秒あたり 50 フレームでビデオを撮影するカメラなど)。これは、通常のサンプリング入力です。
シンプルで一般的な最適化は、値が前の値と異なる場合にのみ、センサーまたはデバイスが新しいメジャーメントを生成するというものです。多くのセンサーでは、定常値または一定値を(少なくとも量子化限界内で)維持する何かを測定するのが通常であり、同じ値を繰り返し送信することにほとんど価値はありません。これはオンチェンジ入力です。基礎となるサンプリング周波数は依然として存在しますが、新しい値は異なる場合にのみセンサーから送信されます。
定期的なサンプリングと変更時フォームを組み合わせることも可能です。つまり、メジャーメントが異なる場合、または定期的に新しい入力を生成するセンサーです。これはハイブリッド入力です。例えば、上記の回転センサーは、回転速度が変化した場合にのみ値を送信することも、回転速度に関係なく 10 秒ごとに値を送信することもできます。
例として、時間の経過とともに変化する生の値を、次のように考えてみましょう。
しかし、センサーが最も近い整数までしか測定できず、1 秒に 1 回しか測定できないとします。そのため、値には多少の誤差があり、赤いエラーバーで示されています。
通常のサンプリング センサーは均一な入力を生成します。
一方、変化時センサーは値が変化した場合にのみ入力を生成します。
灰色の線は、Apamaのようなリアルタイム処理システムがそのような値をどのように解釈するかを示しています。値は、置き換えられるまで最新の値を保持することが想定されます。また、測定値の間に線を描くことも一般的です。したがって、00:01での値11から00:19での値9に直線が引かれます。しかし、リアルタイムシステムはこれを行うことができません。次の値が何であるかを知らないため、履歴データを見ることで値の間を補完することができます。00:19.5の時点では、持っている情報は値が11であり、その後9であることだけです。値が00:20で8になることはまだ知らされていません。定期的にサンプリングした場合と変更時のみの場合の解釈された灰色の線には違いがないことに注意してください。グラフの中央には、重要な量子化誤差があります(true
の値10.6は11として読み取られます)。また、サンプリング周波数が1秒ごとのため、00:19.5秒の最小値7.4は失われています。
異なる時点で値を入力する
2 つのロボット アームの位置を与える 2 つの位置センサーを考えてみましょう。両方ともオンチェンジ センサーです。2 本のアームが同じ方向と速度で一斉に動く場合、位置センサーは、それらが一定の距離だけ離れるように(または、少なくとも一定の距離に近づくように)、同時に新しい値に更新される必要があります。相違 ブロックの入力が両方のセンサーに接続されている場合、ロボット アームが動いても、相違 ブロックの出力はほぼ一定になります。分析ビルダーはすべての値を同じタイムスタンプで評価するため、2 つのセンサーから値を受信する際に多少の遅延が発生する場合でも、同じクロックからタイムスタンプが供給されている場合(および 測定入力 ブロックの タイムスタンプを無視 パラメーターが設定されていない場合)、次の表に示すように、相違 ブロックは常に同期された出力を生成します。
時間 | 位置センサー1 | 位置センサー2 | 相違ブロックの出力 |
---|---|---|---|
00:00 | 4 | 14 | 10 |
00:01 | 6 | 16 | 10 |
00:02 | 9 | 19 | 10 |
対照的に 2 つのロボット アームが同時に動かず、一方が動き、次にもう一方が動く場合を考えてみましょう。どちらかのアームが動くと、アーム間の距離が変化する場合があります。センサーはオンチェンジ入力であるため、位置が変化した場合にのみ新しい値が得られます。ただし、入力がないことは、対応するロボット アームに位置がないことを意味するわけではありません。アームの位置はそのまま留まっています(誤差範囲内)。
例:
時間 | 位置センサー1 | 位置センサー2 | 相違ブロックの出力 |
---|---|---|---|
00:00 | 9 | 19 | 10 |
00:01 | 11 | 19 | 8 |
00:02 | 13 | 19 | 6 |
00:05 | 13 | 18 | 5 |
00:06 | 13 | 17 | 4 |
00:07 | 13 | 15 | 2 |
太字の数字は実効値を示します。最後の値は、より最新の値に置き換えられていない場合に保持されます。
変更時入力と時間ウィンドウ
変化時入力が 平均値 (平均) ブロックなどの集計ブロックに接続されている場合、ブロックは入力を受信した最新の値を継続的に保持しているものとして扱う必要があります。これは、時間ウィンドウを維持するブロックにとって重要です。ブロックが最後に入力を受け取った($process
アクションが呼び出された)のが時間ウィンドウより前であっても、ウィンドウの内容には最新の値が含まれます。例えば、ウィンドウ期間が 10 秒に設定された 平均値 (平均) ブロックと インテグラル ブロックを考え、次のように入力します。
時間 | 入力値 | ウィンドウの内容 | 平均値 (平均)ブロックの出力 | インテグラル ブロックの出力 |
---|---|---|---|---|
00:00 | 10 | 0: 10 | 10 | 0 |
00:02 | 11 | 0-2: 10 | 10 | 20 |
00:10 | 11 | 0-2: 10, 2-10: 11 | 10.8 | 108 |
00:12 | 11 | 2-12: 11 | 11 | 110 |
00:19 | 9 | 9-19: 11 | 11 | 110 |
00:20 | 8 | 10-19: 11; 19-20: 9 | 10.8 | 108 |
この場合、00:02 に受信したメジャーメントが 00:19 以降の出力にどのように影響しているかに注目してください。これは、00:19 まで置き換えられないためです。また、新しい値が発生しても、平均や積分にはまったく影響を及ぼさないことにも注意してください。まだその値になっていないのです。 唯一の例外は、開始時の 平均値 (平均) ブロックです。空のウィンドウでは、出力が入力値になります。
時間 00:20 でウィンドウがカバーする値については、次の図もご覧ください。
値 9 と 8 のメジャーメント更新のみがウィンドウ内で受信されましたが、ウィンドウ内の平均値は値 11 に近くなります。そのメジャーメント更新は時刻 00:02 に受信されましたが、これは連続値であるため、時刻 00:19 まで 11 の値を保持し続けます。
不足データ などのブロックの場合、しばらく入力がないことがブロックの動作に影響を与える可能性があることに注意してください。不足データ ブロックが 10 秒の期間で構成されている場合、時刻 00:12 にトリガーされます。
平均値 (平均) ブロックと インテグラル ブロックが通常のサンプリング センサーから通常の入力を受け取る場合、ブロックはより多くのメジャーメントを受け取ります。比較可能なテーブルは、次の通りです。
時間 | 入力値 | ウィンドウの内容 | 平均値 (平均) ブロックの出力 | インテグラル ブロックの出力 |
---|---|---|---|---|
00:00 | 10 | 0: 10 | 10 | 0 |
00:01 | 10 | 0-1: 10 | 10 | 10 |
00:02 | 11 | 0-2: 10 | 10 | 20 |
00:03 | 11 | 0-2: 10, 2-3: 11 | 10.333 | 31 |
00:04 | 11 | 0-2: 10, 2-4: 11 | 10.5 | 42 |
00:05 | 11 | 0-2: 10, 2-5: 11 | 10.6 | 53 |
00:06 | 11 | 0-2: 10, 2-6: 11 | 10.667 | 64 |
00:07 | 11 | 0-2: 10, 2-7: 11 | 10.714 | 75 |
00:08 | 11 | 0-2: 10, 2-8: 11 | 10.75 | 86 |
00:09 | 11 | 0-2: 10, 2-9: 11 | 10.778 | 97 |
00:10 | 11 | 0-2: 10, 2-10: 11 | 10.8 | 108 |
00:11 | 11 | 1-2: 10, 2-11: 11 | 10.9 | 109 |
00:12 | 11 | 2-12: 11 | 11 | 110 |
00:13 | 11 | 3-13: 11 | 11 | 110 |
00:14 | 11 | 4-14: 1 | 11 | 110 |
00:15 | 11 | 5-15: 11 | 11 | 110 |
00:16 | 11 | 6-16: 11 | 11 | 110 |
00:17 | 11 | 7-17: 11 | 11 | 110 |
00:18 | 11 | 8-18: 11 | 11 | 110 |
00:19 | 9 | 9-19: 11 | 11 | 110 |
00:20 | 8 | 10-19: 11; 19-20: 9 | 10.8 | 108 |
強調表示された線は、繰り返し測定を行わなかった場合と同じであることに注意してください。これらのブロックが同じ値を繰り返し測定しても、再評価された場合にブロックが計算する内容に違いはありません。
ウィンドウ ブロックの出力タイミング
平均値 (平均) ブロックなどの集約ブロックの場合、入力値の変更の影響は、定期的に再評価されるとブロックの出力が変化し、新しい値に近づくことを意味します。過去にブロックが異なる入力値を受け取った場合、いつでもブロックの再評価が可能であり、それぞれが異なる出力を生成する可能性があります。
変更時入力と時間ウィンドウ の前述の例では、10 秒のウィンドウで 平均値 (平均) ブロックを繰り返し再評価すると、次の結果が得られます。
時間 | 入力値 | 平均値 (平均) ブロックの出力 |
---|---|---|
00:00 | 10 | 10 |
00:01 | 10 | 10 |
00:02 | 11 | 10 |
00:03 | 11 | 10.333 |
00:04 | 11 | 10.5 |
00:05 | 11 | 10.6 |
00:06 | 11 | 10.667 |
00:07 | 11 | 10.714 |
00:08 | 11 | 10.75 |
00:09 | 11 | 10.778 |
00:10 | 11 | 10.8 |
00:11 | 11 | 10.9 |
00:12 | 11 | 11 |
再計算の間隔は、0.5 秒ごと、または 1 秒の端数ごとに、さらにミリ秒ごと、またはさらに短い時間でブロックを再評価することも可能です。ブロックを「継続的に」再評価する(特定の時点での平均値を再計算し、新しい出力を生成する)ことは非現実的です。では、ブロックが評価して出力を生成するのに適切な時期はいつでしょうか?
平均値 (平均) ブロック(および他のブロック)は、出力しきい値 パラメーターを提供します。これが設定されている場合、ブロックは出力が出力しきい値量だけ変化した場合に、新しいメジャーメントを生成するセンサーをエミュレートします。そのため、0.1 に設定すると、00:02 から 00:03 の間に(出力が 10 から 10.333 に変化するとき)いくつかの出力が得られ、00:03 から 00:04 の間に(10.4 に達するとき)に別の出力が得られます。00:04 と 00:05 に正確に出力され、もう 1 つは 00:06 と 00:07(10.7)の間に出力され、次に 00:10、00:11、00:12 に出力されます。ブロックは、最新の出力と比較して出力が出力しきい値を超えて変化する時刻を計算し、その時点で再評価します。そのため、出力は時間的に非常に不規則に発生する可能性がありますが、出力値が常に出力しきい値に等しい量だけ異なるようなタイミングで出力されます。ブロックは、最後の入力と異なる値がない場合でも、新しい入力を再評価します。
モデルは任意の時点で 平均値 (平均) ブロックの出力を使用して計算を実行する必要があるため(例えば、別のメジャーメントと比較するため)、サンプル 入力ポートも再評価を強制して出力値を生成するためのオプションも提供されています。
ウィンドウとバケット
多くのブロック(主に 集約 カテゴリのブロック)は、過去に受信した入力値の時間ベースのウィンドウを維持します。出力は、このウィンドウ内の値に基づいた計算です。通常、このようなブロックでは、このウィンドウを管理する 2 つの異なる方法が提供されます。
- ウィンドウの継続時間を指定するパラメーター値。設定されている場合、ウィンドウは指定された時間より古い解釈値を自動的に期限切れにします(解釈値は、変更時入力と時間ウィンドウ で説明されているように、任意の時点で最後に受信した値です)。パラメーターが指定されていない場合、ブロックはデータを自動的に期限切れにしません。
- リセット入力。信号を受信すると、ウィンドウの内容はクリアされ、ブロックは内容のない状態にリセットされます。
これらを組み合わせて使用することも、どちらも使用しないことも可能ですが、より一般的にはどちらか一方を使用します。
ウィンドウ期間が指定されている場合、ブロックは古いデータを期限切れにすることができなければなりません。これを厳密に正確に実装するには、異なる測定入力をその発生時刻とともに保存することになります。長いウィンドウや高周波入力の場合、大量のデータが保存される可能性があります。過剰な量のデータが保存されるのを避けるため、製品ブロックにはすべてのメジャーメントと時間が保存されません。 代わりに、ウィンドウ期間は同じサイズのバケットに分割されます。ブロックはバケットごとに状態を保存し、その情報を使用してブロックの出力を再計算します。履歴バケットは、完全にウィンドウ内にある場合もあれば、部分的に期限切れになっている場合もあります。バケットの有効期限が部分的に切れている場合、ブロックはそのバケット内の値の小数部分を適用します。この実際的な効果は、値が大きな変動なく変化している場合、ブロックの正確な(ただし、リソース集約的)実装とバケットを使用する実装との間にはわずかな違いしかないことです。出力のシフトを引き起こす入力値の大幅な変動がある場合、個々の測定入力の正確な時間が失われ、有効期限が切れるときに重要な値が持つ影響は最大 1 つのバケットまで時間的に分散されます。製品ブロックでは、精度と効率の間の合理的な妥協点として 20 個のバケットを使用します。
これを説明するために、3 つのバケットと 3 秒のウィンドウを持つ **平均値 (平均)**ブロックをシミュレートすることで効果を誇張します。つまり、各バケットの継続時間は 1 秒です。いくつかの異常な読み取り値(値 1 の連続入力後)は、正確なブロックとバケットベースの 平均 (平均) ブロックの両方の平均に同じように影響しますが、バケットを使用した場合と、各値を発生からちょうど 3 秒後に「正確に」期限切れにした場合の結果を比較することができます。バケットを使用した場合、出力の変化はバケットの持続時間にわたって平滑化されます
異常値の満了のタイミングの精度が低くなるだけでなく、出力の正確な形状が失われることに注意してください。バケット化された平均は、時刻 00:13 と 00:14 の間で均一に変化します。製品ブロックでは 20 個のバケットが使用されるため、この場合の効果はそれほど顕著ではないことに注意してください。
パルス信号
パルスは、ある時点または状態の変化を知らせるために使用されます。パルスのユースケースは次の通りです。
- 人が(例えば駅で)ゲートを通過する
- ボタンが押された(例えば、非常停止ボタンなど)
- マシンが新しい状態になる(例えば、ゲートウェイがリセットされるか電源がオンになる)
- デバイスがネットワークに接続した
Things Cloud では、イベント、アラーム、オペレーション がパルスのソースとして使用されます。
パルスは単なる時間の一点であるかもしれませんが、ソフトウェアのバージョン番号や接続しているネットワークノードなどの追加情報も伝えることができます。これらは プロパティの抽出 ブロックを使用して取得できます。独自のカスタム ブロックを作成している場合、入力がプロパティ フィールドを持つ Value
タイプとして宣言されていれば、これらのブロックにアクセスできます。これは数値型でも使用できます。Value
タイプの詳細については、分析ビルダーブロック SDK のドキュメントを参照してください。
メジャーメントとは対照的に、パルスのタイミングと数は非常に重要であり、後続のパルス間の唯一の違いが受信時間である場合でも、それぞれのパルスは依然として重要です(一方、同じ値を持つ複数のメジャーメントはほとんど意味がありません)。
メジャーメントとは対照的に、パルスはモデルの 1 回の評価に対してのみアクティブになります。モデルの評価では、起動するタイマーを持つすべてのブロック(入力ブロックを含む)と、変更された出力に接続されているすべてのブロックが処理されます。パルスとブール メジャーメントはどちらもブロックの EPL では boolean
タイプで表されますが、その動作は異なります。
- ブールメジャーメントがブロックによって受信された場合、その値は置き換えられるまでその値に「固定」されます。例えば、AND ブロックを使用して温度センサー 1 と 2 が両方ともしきい値を超えているかどうかを確認する場合、高いメジャーメントを受信した後でもその値は真です。
- ブロックがパルスを受信した場合、評価後にリセットされます。例えば、平均値 (平均) ブロックがイベントによってリセットされた場合、リセットはイベントの受信時に発生します。その後、さらなるイベントが受信されない場合、ブロックは将来の値入力でリセットされません。
AND ブロックなどを使用して、複数のパルスを組み合わせるのは依然として有効かつ賢明です。2 つのパルスが同じ時点で発生した場合、それは 1 つの評価になります。例えば、しきい値 ブロックには 超過したしきい値 出力ポートがあり、これは連続値入力がしきい値の一方の側からもう一方の側に移るときにのみ送信されるパルスです。同じデバイス上の 2 つのセンサー(そのため、同じタイムスタンプを持つ)が同時にしきい値を超える可能性があるため、そのような 2 つのしきい値の出力の AND は、両方の入力が新しい値でしきい値を超えた場合にのみトリガーされます。同じタイムスタンプ。 1 つのセンサーがしきい値を超えた後、もう 1 つのセンサーがしきい値を超えた場合、以下のブロックは AND ブロックから出力を提供しないことに注意してください。この 2 つが同時に起こった場合にのみ、これを実行します。
離散時間メジャーメント
数値メジャーメントが、連続時間特性を表さないメジャーメントが使用される場合があります。
例:
- ベルトコンベア上の計量機を通過する荷物の重量
- 測定点を通過する物体のサイズ
- 機械でスキャンまたは印刷されたチケットの値
連続時間値とは対照的に、2 つのメジャーメントが同じ値であっても、これらはそれぞれ重要です。各メジャーメントの時間には何らかの意味があるかもしれませんが、その後のメジャーメント間の時間はそれほど重要ではありません。メジャーメントがわずかに異なるタイミングで受信された場合、または順序が間違っている可能性がある場合でも、これは違いを意味しません(例えば、チケットの価値の合計は、チケットが異なる順序または異なるタイミングで処理された場合でも変わりません。また、値の間の時間は均一である可能性は低いです)。離散時間とは、測定時間のみを指すことに注意してください。値はまだ連続している可能性があります。例えば、重量は連続値ですが、個々の小包の重さを量る場合がありますが、小包の重量は重量のグラムの分数で表現できる場合があります。ベルトコンベア上の 2 つの荷物の間にいる場合、その時点での荷物の重量の「現在値」はありません。値は離散値にすることもできます。例えば、チケットの値は通常、離散値(最も近いセント単位、またはいくつかの事前定義されたチケット値の 1 つなど)になります。
次も比較してください。
https://en.wikipedia.org/wiki/Discrete_time_and_continuous_time および https://en.wikipedia.org/wiki/Continuous_or_discrete_variable
実際には、すべてのメジャーメントは連続時間特性のサンプルです。
離散時間入力を処理する場合、平均値 (平均) ブロックではなく、個別統計 ブロックを使用することが推奨されます。パーセル重さセンサーからの入力を 平均値 (平均) ブロックに接続することも可能ですが、平均値 ブロックは時間によって重みづけされます。
例:
時間 | 入力値 | 連続時間 入力の平均 |
離散時間 入力の平均 |
---|---|---|---|
00:10 | 11 | 11 | 11 |
00:19 | 9 | 11 | 10 |
00:20 | 8 | 10.8 | 9.33 |
これを 変更時入力と時間ウィンドウ の表と比較し、時刻 00:10 以降(00:10 から 00:20 までのウィンドウ内にあるもの)を見てください。連続時間ブロックは、入力が異なる時間に発生した場合に異なる出力を生成しますが、離散時間に基づいて値を平均するブロックは生成しないことに注意してください。
デフォルトでは、メジャーメントは連続時間値として扱われることに注意してください。そのため、例えば 2 つの値の差を計算することができます。
上の例は、2 つのセンサーで受信した最新の重量の差を示します。これらが純粋に離散時間入力である場合、これは特に有用な区別ではない可能性があります。ただし、2 つの離散時間入力間の平均値の差 (または平均値)を比較することには意味があります。個別統計 ブロックの 平均値 出力ポートは、連続時間値を与えます。
モデルとデバイス
さまざまなデバイスでのモデルの実行
モデルは互いに独立して実行されます。つまり、モデルが別のデバイスセットのデータ(Measurement
、Event
、またはOperation
オブジェクトなど)を処理している場合、可能な限りハードウェア並列処理を利用して、特定のデバイスのモデルを並列実行できます。モデルを定義するときは、特定のデバイスのセットのデータを使用するか、複数のデバイスからのデータを使用するように構成できます。各デバイスは個別に処理されます。
各モデルは、次のいずれかを行う必要があります。
-
特定のデバイスのセットから入力を受信し、特定のデバイスのセットに出力を送信します。
-
複数のデバイスセット内の各デバイスから入力を受信し、トリガーデバイスまたはアセットに出力を送信します。アセット出力は、デバイス間の集計の送信にのみ使用できることに注意してください。
デバイスの範囲には、Things Cloud デバイスグループ、スマートグループ、アセット、またはテナント上のすべての入力ソースを含めることができます。モデルがデバイスの範囲を使用する場合、モデルは範囲で参照されるすべてのデバイス上で直接的または間接的に、それ自体がグループでありデバイスメンバー(または「孫」グループメンバー)を持つグループのメンバーを通じて動作します。デバイスは、ゼロ、1 つ、または複数のグループのメンバーになることができます。詳細については、デバイスのグルーピング および アセットの管理 を参照してください。
備考デバイスの範囲に作用するモデルは、モデルがアクティブ化されたときにのみグループメンバーシップを決定します。モデルの実行中にグループのメンバーシップが変更された場合、モデルはグループの新規メンバーまたは削除されたメンバーに対して何ら異なる動作を行いません。グループのメンバーシップが変更された場合は、そのグループを参照するモデルを非アクティブ化し、再度アクティブ化する必要があります。
上記の 2 種類の入力ブロックを混合することはできません(ブロードキャストデバイス 参照)。ただし、特定のデバイスを処理するモデルからのデータは、デバイス範囲のモデルを含む他のモデルとの間で送受信でき、その逆も可能です(モデル間の接続 参照)。
モデルが範囲からデータを消費すると、次に示すように、モデルは複数のインスタンスが実行されているかのように動作し、各インスタンスは各デバイスからのデータを個別に処理します。各インスタンスは異なるデバイスのデータを処理しますが、すべて同じブロックとブロック パラメーターを共有します。ワイヤーの値はインスタンスごとに独立しています。平均値 (平均) ブロックなどのステートフルなブロックは、他のデバイスからのデータとは独立して動作します。特定のデバイスを使用するモデルと同様に、いずれかのブロックが実行時エラーまたは例外を引き起こすと、モデル全体が失敗状態になり、すべてのデバイスのデータ処理が停止します。
通常、入力に複数のデバイス範囲を使用する場合、すべての入力ブロックは同じグループを使用します。異なるグループを使用することも可能です。あるグループにはデバイスがあり、別のグループにはデバイスが存在しない場合、それらのブロックは、そのグループにないデバイスに対して信号を生成することはありません。式 ブロックなどの一部のブロックでは、これは役に立ちません。式 ブロックは、必要な入力がすべて値を受け取った場合にのみ出力を生成しますが、ゲート ブロックの pulse
入力には役立つ場合があります。
モデルに特定のデバイスからのデータを消費する入力がある場合、出力を生成する出力ブロックは、同じまたは異なる特定のデバイスを指定できます。
デバイスの範囲からのデータを消費する入力がモデルにある場合、すべての同期出力ブロックで、トリガーデバイスまたはアセットを指定する必要があります。トリガーデバイスは、そのインスタンスが適用されるデバイス、またはそのインスタンスをトリガーするためにデータを送信したデバイスのデータ(Measurement
、Event
、Operation
)を生成します。このようなモデルの非同期出力ブロックでは、トリガーデバイス、アセット、またはその他の特定のデバイスを指定できます。
モデルに、アセットに属する各デバイスからのデータを消費する入力がある場合、出力ブロックは出力を特定のアセットまたはトリガーデバイスに送信できます。アセット出力は、デバイス間の集約の送信にのみ使用できることに注意してください。
テンプレート パラメーターが出力ブロックに使用される場合、パラメーターの値がデバイスの範囲である場合、これはトリガーデバイスに設定されている場合と同じように扱われます。出力はモデルの評価をトリガーしたデバイスに送られ、グループ内の各デバイスは独立して処理されます。通常、入力と出力の両方に同じテンプレート パラメーターが使用されるため、これらは同じ範囲を参照し、各デバイスは個別に処理されます。
モデル エディタを使用して、入力および出力ブロックを 1 つの入力ソースまたは別の出力先に変更できます。デバイスの範囲とデバイスまたはアセットの間で変更する場合、出力ブロックはトリガーデバイスと指定されたデバイスまたはアセットの間で切り替わり、モデルが使用可能な状態に保たれます。ソースまたは出力先の置換 を参照してください。
テストモードとシミュレーションモードは、特定のデバイスを使用するモデルにのみ許可されます。デバイスのグループを使用してモデルをテストまたはシミュレーションする場合は、モデル エディタを使用して範囲内の単一のデバイスに適用するようにモデルを変更し、テストモードまたはシミュレーションモードでモデルをアクティブにします。これらのモードの詳細については、モデルのデプロイを参照してください。
同時実行レベルの構成
デフォルトでは、分析ビルダー ランタイムは 1 CPU コアを使用してモデルを実行します。CPU コアの数を変更したい場合は、numWorkerThreads
キーの値を変更する POST
リクエストを Things Cloud に送信します。詳細については、構成 を参照してください。
通常、この構成値はシステムで使用可能な CPU コアの数に設定されますが、使用可能なリソースに応じて、これをより多く、またはより少なく構成すると便利な場合があります。デバイス数に合わせて拡張する必要はありません(デバイスあたりのイベント レートが中程度であると仮定すると、数百のデバイスに対して 4 つのワーカースレッドを用意するのが非常に合理的です)。
同時実行レベルを 1 に設定しても、デバイスの範囲を入力として使用するモデルを作成することは可能ですが、これらは範囲内のデバイスごとに独立して動作し続けるため、範囲と単一デバイスの入力や出力を混在させることはできません。
ブロードキャストデバイス
すべてのモデルに適用できる信号があると便利な場合があります。これらは、デバイスからの信号である場合もあれば、デバイスからの信号であるかのように表示される他のシステムからの信号である場合もあります。そのため、分析ビルダーは、ブロードキャスト デバイスと呼ばれるデバイスをサポートしており、これらのデバイスからの信号は、全デバイスのすべてのモデルで利用できます。
ブロードキャストデバイスは、特定のデバイスまたはデバイス範囲からの入力と組み合わせて、任意のモデルの入力として使用できます。下の図は、ブロードキャストデバイスがデバイス範囲内のすべてのデバイスに適用される様子を示しています。式 ブロックなどの処理ブロックに異なる入力として提供することで、デバイス範囲内のデバイスからのシグナルと、ブロードキャストデバイスからのシグナルを組み合わせることができます。
他のデバイスとは異なり、ブロードキャストデバイスは、ブロードキャストデバイスからのデータのみを消費するモデルの同期出力にのみ使用できます。非同期タイプのブロードキャスト出力は、非ブロードキャスト入力を消費するモデルによって生成できます。
また、ブロードキャストデバイスの出力からの同期データを使用してモデルを接続することもできません(どのモデルも、別のモデルの出力であるブロードキャストデバイスからのメジャーメントを使用することはできません)。ブロードキャストデバイスからの非同期出力を使用して、モデルを相互に接続できます(モデルは、別のモデルの出力であるブロードキャストデバイスからの操作を使用することができます)。
ブロードキャスト デバイスの識別
ブロードキャスト デバイスは、そのデバイスのインベントリ内のデバイスオブジェクトのプロパティ(pas_broadcastDevice
または c8y_Kpi
プロパティのいずれか)の存在によって識別されます。そのため、デバイスがブロードキャスト デバイスとみなされるかどうかは、すべてのモデルにわたって、そのデバイスにとってグローバルです。ブロードキャスト デバイスを含むデバイスの範囲を使用することは許可されていません。c8y_Kpi
オブジェクトは通常、KPI ブロックとともに使用されます。そのため、KPI オブジェクトを使用して、複数のデバイスからのメジャーメントを比較することができます。範囲内のすべてのデバイスに対して、1 つの KPI オブジェクトが使用されます。
仮想デバイス
仮想デバイスは、モデルがテストまたはシミュレーションモードでデプロイされるときに使用されます。モデルのデプロイ を参照してください。
仮想デバイスは、Things Cloudインベントリ内の c8y_VirtualDevice
プロパティを持つオブジェクトです。このプロパティは、仮想デバイスのコピー元である実デバイスの識別子を指します。
モデルのアクティベーションで作成された virtualDevice
と、そのデバイスをソースとするメジャーメントを確認するには、creationDate
を使用します。
デフォルトでは、仮想デバイスは 30 日間保持されます。このデフォルトを変更する場合は、テナントオプションを変更する必要があります。つまり、POST /tenant/options
リクエストを送信する必要があります。詳細については、Things Cloud OpenAPI仕様のテナントオプション を参照してください。例えば、仮想デバイスの保存期間を 1 日に設定するには、次のように指定します。
{
"category": "analytics.builder",
"key": "retention.virtualDevicesMaxDays",
"value": "1"
}
詳細については、構成 を参照してください。
仮想デバイスは、デバイス管理アプリケーションに表示されません。これらのエントリを見つけるには、REST 操作を使用してください。
モデル間の接続
出力ブロックと入力ブロックを使用して、複数のモデルを接続できます。測定出力(Things Cloud の Measurement
オブジェクトのため)などの出力ブロックを含むモデルは、一連のイベントを生成し、これは別のモデルの適切な入力ブロック(測定入力 など)で消費されます。詳細については、一連のイベントを識別するためのキー を参照してください。
同じイベント ストリームの入力と出力を使用してモデルが接続されている場合、「チェーン」という用語は、この方法で相互に接続されているすべてのモデルを指すために使用されます。相互に接続されているモデルの個別のグループがある場合、複数のチェーンが存在する可能性があります。
1 つのモデルに特定のキーの一連のイベントを生成する同期出力ブロックがあり、2 番目のモデルにその同じ一連のイベントから消費する入力ブロックがある場合(同じキー パラメーターを持つ)、接続が形成されます。これにより、最初のモデルから 2 番目のモデルへの接続が形成されます。最初のモデルが出力ブロックをトリガーすると、2 番目のモデルが入力ブロックの新しい入力で評価されます。
非同期出力ブロックからの出力を使用して、モデル間の接続を形成することもできます。この場合、最初のモデルが非同期出力ブロックをトリガーすると、出力が生成され、外部システム(Things Cloud など)に送信されます。データは後から外部システムから受信され、そのデータを使用する他のモデルの評価が行われます。
モデル内のワイヤーの処理順序と同様に(ワイヤーの処理順序 参照)、次のことが出力ブロックの場合に適用されます。あるモデルは、別のモデルの入力ブロックが消費する一連のイベントを生成します。
-
単一のモデルは、同じイベントを他の複数のモデルに送信できます。つまり、単一のモデルに単位変換や平均の計算(平均値 (平均) ブロックによる)などの一般的な前処理を実行させ、その値を他の複数のモデルで使用させることが可能です。
-
モデルは、同期出力を使用して形成されたモデル間の接続に関して順番に実行されるため、接続のソースは常に接続のターゲットより前に評価されます。モデルに同じ初期イベントから、すべてトリガーされた複数のブロックからの接続がある場合、それらがすべて最初に評価され、受信モデルはすべての入力を 1 回で評価します。
非同期出力を使用して形成された接続には、特定の実行順序はありません。出力を消費するモデルは、外部システムから出力が返されたときにのみ実行されます。
モデル内のワイヤー制限(ワイヤーの制限 参照)と同様に、出力ブロックと入力ブロックを使用して、モデルを接続する方法にも制限があります。
- すべてのモデルにわたる 1 つのブロックは、特定のキーに対して一連の同期イベントを生成することが許可されます。一連のイベントを識別するためのキー を参照してください。非同期イベントを生成する複数の出力ブロックは、単一モデル内または複数のモデル間で使用できます。
- 同期出力を使用するモデル間に、サイクルを作成することはできません。別のモデルから同期的に生成された入力ブロックを介してイベントを受信するモデルには、他のモデルが消費する同期イベントを生成する出力ブロックを含めることはできません。これは、モデルの 1 つに 2 つの別個のパーツが含まれており、モデル間のワイヤーや接続に関して実際のサイクルがない場合にも当てはまります。非同期出力により、モデル間のサイクルが作成される可能性があります。そのため、モデルが無限に周期的に実行されないよう注意する必要があります。
これらの制限を満たしていないモデルを、すでにアクティブ化されているモデルと組み合わせて使用すると、アクティブ化しようとするとエラーが発生します。これは、モデルのサイクルの最後の要素としてカウントされます。このようなエラーの場合、問題は単一モデルに固有の問題ではなく、モデル間の相互作用にある可能性がありますが、すでにアクティブ化されている既存のモデルは自動的に非アクティブ化されません。例えば、複数のモデルがすべて同じ一連の同期イベントを(同じキーを使用して)生成する場合、最初にアクティブ化されたモデルはデプロイできますが、後続のすべてのモデルはアクティブ化しようとするとエラーを報告します。
例えば、Model1、Model2、Model3 という 3 つのモデルがあります。次の場合、サイクルが存在する可能性があります。
- Model1 の出力ブロックは、Model2 の入力ブロックによって消費される一連の同期イベントを生成します。Model2 には、2 番目の一連の同期イベントを生成する出力ブロックが含まれています。
- Model3 には、Model2 からの一連のイベントを消費する入力ブロックが含まれており、Model3 には、Model1 の入力ブロックによって使用される一連の同期イベントを生成する出力ブロックも含まれています。
これらのモデルのうち、いずれか 2 つをアクティブ化するだけでエラーが発生しないことに注意してください。順番にアクティブ化すると、Model3 のみでエラーが発生します。ただし、Model1 または Model2 が非アクティブ化されている場合は、Model3 がアクティブ化される可能性があります。次の Model3 の例のように、このエラーはいずれかのモデルに、チェーンの一部である入力ブロックから、チェーンの一部である出力ブロックへのリンクが含まれていない場合でも発生します。Model2 からのイベントは、To Model1 Measurement 出力ブロックへのサイクルを形成しませんが、両方とも同じモデル内にあるため、サイクルとしてカウントされます(この場合、そのモデルを 2 つのモデルに分割し、サイクルを削除することで問題を解決できます)。
表示される入力ソースと出力先の数の構成
デフォルトでは、次の場合に最大 10 個の項目が表示されます。
- 別の入力ソースまたは出力先を選択した場合(ブロックのパラメーター編集 参照)
- デバイス、グループ、アセットを置き換えた場合(ソースまたは出力先の置換 参照)
上記の場合に検索ボックスを使用する場合、このデフォルトは検索結果に表示されるアイテムの最大数にも適用されます。さらに読み込む をクリックすると、さらに最大 10 個の項目が表示されます。
このデフォルト値を変更する場合(表示するアイテム数を増やしたり、減らしたりするため)、テナントオプションを変更する必要があります。つまり、POST /tenant/options
リクエストを送信する必要があります。詳細については、Things Cloud OpenAPI仕様のテナントオプション の情報を参照してください。
例えば、値を 20 に設定するには、次のように指定します。
{
"category": "analytics.builder",
"key": "c8yAnalyticsBlocks.queryInventoryPageSize",
"value": "20"
}
詳細については、構成も参照してください。
デバイス / グループ / アセットの検索
デフォルトでは次の場合、デバイス、グループ、アセットのみが表示されます。
- 別の入力ソースまたは出力先を選択した場合(ブロックのパラメーター編集 参照)
- デバイスまたはグループを置き換えた場合(ソースまたは出力先の置換 参照)
上記の場合に検索ボックスを使用すると、Things Cloud インベントリ内の検索条件とフィルター条件に一致するすべての Things Cloud マネージドオブジェクトが、タイプ別にグループ化されて表示されます。そのため、インベントリ内のマネージドオブジェクトを、入力ブロックまたは出力ブロックとして定義することで、分析モデルを構築できます。
特定のタイプのマネージドオブジェクトのみを表示するように検索を制限する場合(例えば、デバイスのみを表示する場合)、テナントオプションを変更する必要があります。つまり、POST /tenant/options
リクエストを送信する必要があります。詳細については、Things Cloud OpenAPI仕様のテナントオプション の情報を参照してください。
例えば、デバイスのみを表示する場合は、次のように指定します。
{
"category": "analytics.builder",
"key": "c8yAnalyticsBlocks.queryInventoryNameSearchAdditionalFilter",
"value": "has(c8y_IsDevice)"
}
値の c8y_IsDevice
は、いわゆるフラグメントです。 自分で作成したフラグメントを含め、Things Cloud が認識している任意のフラグメントを指定できます。
複数の値を組み合わせることができます。例えば、デバイスとデバイスグループのみを表示する場合は、次のように指定します。
{
"category": "analytics.builder",
"key": "c8yAnalyticsBlocks.queryInventoryNameSearchAdditionalFilter",
"value": "has(c8y_IsDevice) or has(c8y_IsDeviceGroup)"
}
このテナントオプションのデフォルト値は not has(c8y_IsVirtualDevice)
です。このテナントオプションを変更しない限り、仮想デバイスは分析モデルでは意味をなさないため表示されません。このテナントオプションの値を変更する場合は、検索結果に表示するすべてのマネージドオブジェクトを必ず指定してください。
詳細については、構成 を参照してください。
モデルシミュレーション
シミュレーションモードについて
モデルをシミュレーションモードでデプロイし、履歴入力データ(Things Cloud メジャーメントなど)に対して実行できます。これにより、新しく開発されたモデルの動作を履歴データに対してテストしたり、既存のモデルを微調整したりすることができます。あるいは、既知のプロパティを持つ一連の履歴データに対して、モデルをテストすることもできます。
モデルマネージャーを使用して、モデルをシミュレーションモードでデプロイします。詳細については、モデルのデプロイ を参照してください。
モデルがシミュレーションモードでデプロイされる場合、仮想デバイス(仮想デバイス 参照)のデータが使用されます。そのため、シミュレートされたモデルは、他の非シミュレートされたモデルと干渉することなく、並行して実行できます。
シミュレートされたモデルは、履歴データの時点で実行されているかのように実行されます。入力データは履歴時間の順序で処理されます。シミュレートされたモデルでは、生成された出力のタイムスタンプに過去の時刻も使用されます。
イベント、アラーム、オペレーションはタイムスタンプを使用して作成されます。ただし、時間の経過とともに、これらのオブジェクトが更新される可能性があります。例えば、アラームをクリアしたり、オペレーションのステータスを変更したりできます。イベント、アラーム、オペレーション オブジェクトへの変更履歴は保持されないため、オブジェクトは、そのプロパティの最新バージョンを使用して、最初のタイムスタンプでのみ再生されます。そのため、これらのオブジェクトへの変更は再生されず、モデルがオブジェクトへの変更に依存している場合、シミュレーションモードの用途は限られます。
シミュレーションを実行すると、履歴データが Things Cloud データベースから Apama コリレーターに再生されます。データベースからクエリされるデータに大幅な遅延がある場合、またはシステムの負荷が高い場合、例外的な状況で入力がドロップされる可能性があります。シミュレートされたモデルは、入力データを通常の速度で処理します。例えば、履歴データエントリが1秒ずつ区切られている場合、それらは1秒間隔で処理されます。これは、1時間の履歴データを使用してモデルをシミュレートすると、シミュレーション時間が約1時間かかることを意味します。
シミュレーションパラメーター
モデルをシミュレーションモードでデプロイするには、モデルマネージャーで開始時刻と終了時刻の2つのパラメーターの値を指定する必要があります。これらの値は、シミュレートされたモデルに送信される履歴データの時間範囲を決定します。
- 履歴データがモデルに送信される開始時刻
- 履歴データがモデルに送信されるまでの終了時刻
指定された時間範囲のすべての履歴データが送信されると、シミュレートされたモデルへのデータの送信が停止されます。
シミュレーションモデルの最大数の構成
デフォルトでは、一度に最大3つのシミュレーションモデルをデプロイできます。
このデフォルト値を変更する場合(一度にデプロイするシミュレーションモデルの数を増やすか、または減らすため)、テナントオプションを変更する必要があります。つまり、POST /tenant/options
リクエストを送信する必要があります。詳細については、Things Cloud OpenAPI仕様にあるテナントオプション の情報を参照してください。
例えば、以下を指定して値を5に設定します。
{
"category": "analytics.builder",
"key": "simulation.maxInstances",
"value": "5"
}
構成 を参照してください。
ドロップされた入力の監視
シミュレートされたモデルは、例外的なケースで遅延入力イベントをドロップすることがあります。すべてのモデルでドロップされた入力イベント数に応じて、アラームが定期的に発生します。ドロップされたイベントの監視 を参照してください。
監視と構成
監視
モデルマネージャーで各モデルの現在のステータスを監視できます。モデルのカードには、このモデルの現在のモード(Production モードなど)、およびモデルがアクティブであるか(デプロイされている)か非アクティブであるかが表示されます。
モデルのデプロイに失敗した場合、または実行中にエラーが発生した場合、モデルのカードにランタイムエラー アイコン が表示されます。
データの処理中にモデルが失敗したかどうかを確認するには、モデルマネージャーですべてのモデルをリロードし、最新の状態を表示します。すべてのモデルの再読み込み を参照してください。
定期ステータスの監視
モデルのカードに表示されるステータスに加えて、Things Cloud オペレーションまたはイベントとして公開される定期的なステータスの生成を有効にすることができます。 status_device_name
および status_period_secs
テナント オプションの設定については、構成 を参照してください。
各オペレーションには、次のパラメーターがあります。
パラメーター | 説明 |
---|---|
models_running |
実行中のデプロイ済みモデルに関する情報 |
models_failed |
失敗したデプロイされたモデルに関する情報 |
chain_diagnostics |
モデルチェーンに関する情報。詳細については、モデル間の接続 を参照してください。 |
apama_status |
Apamaコレレータのステータス メトリクス。多くのステータス名は、Apama REST API 内のキー名に対応します。値は、com.apama.correlator.EngineStatus イベントのgetValues() アクションによって返され、REST API を介して公開されます。 |
モデルのステータス
現在実行中または失敗したデプロイ済みモデルごとに、次の情報が公開されます。
名前 | 説明 |
---|---|
mode |
デプロイされたモデルのモード。シミュレーションモードでデプロイされたモデルの場合、SIMULATION です。それ以外の場合、PRODUCTION です |
modeProperties |
モデルのモード固有のプロパティ。これには、SIMULATION モードで実行されているモデルのシミュレーションの開始時刻と終了時刻が含まれます |
numModelEvaluations |
モデルがデプロイされてから評価された合計回数 |
numBlockEvaluations |
モデルがデプロイされてからモデル内でブロックが評価された合計回数。これは、モデル内の各ブロックの評価数の合計です |
avgBlockEvaluations |
モデル評価ごとに評価されたブロックの平均数 |
numOutputGenerated |
モデルがデプロイされてからモデルによって生成された出力の合計数 |
各モデルに関するこの情報は、モデルのパフォーマンスや動作についての洞察を提供します。例えば、別のモデルよりも numBlockEvaluations
の数がはるかに多いモデルは、たとえ numModelEvaluations
が低くても、ほとんどのリソースを消費していることを示している可能性があります。同様に、モデルが評価回数と比較して期待されるレートで出力を生成しているかどうかを確認するために使用できます。
Apama REST API または EPL プラグインである管理インターフェースを使用して、ステータスを監視できます。詳細については、Apama 製品ドキュメントの次のトピックを参照してください。
チェーン診断
存在するすべてのチェーンについて、次の情報が公開されます。
名前 | 説明 |
---|---|
creationTime |
チェーンが作成された時刻 |
executionCount |
チェーンが評価された回数 (1) |
modelsInEvalOrder |
モデルが評価された順序でのモデル識別子のリスト |
pendingTimersCount |
現在の時刻より遅れている保留中のタイマーの数 |
maxTime |
チェーンの評価にかかる最大時間 (1) |
minTime |
チェーン評価にかかった最小時間 (1) |
meanTime |
チェーンの評価にかかる平均時間 (1) |
execBucket |
チェーンの実行時間統計 (1)、(2) |
(1) チェーンが完全または部分的に評価されると、フィールドが更新されます。チェーンの部分評価とは、チェーンの一部のモデルのみが評価されることを意味します。
(2) 実行時間がバケット範囲内にあった回数を格納するバケットが 21 個あります。各バケットのサイズは、無限に伸びる最後のバケットを除いて、timedelay_secs
を 10 秒で割ったものになります。例えば、timedelay_secs
が 2 秒の場合、最初のバケットにはチェーンの実行に最大 0.2 秒かかった回数が保持され、2 番目のバケットにはチェーンの実行に 0.2 秒を超え 0.4 秒だった回数が保持されます。以下同様に続きます。次の例も参照してください。
バケット | 実行時間範囲 |
---|---|
1 | 0 ー 0.2 |
2 | 0.2 ー 0.4 |
3 | 0.4 ー 0.6 |
… | … |
20 | 3.8 ー 4.0 |
21 | 4.0 ー 無限 |
timedelay_secs
の詳細については、モデルのタイムアウトのキーを参照してください。
最も遅いチェーンのステータス
高スループットのモデルのチェーンが複数のワーカーにデプロイされている場合、チェーンが入力イベントの処理に遅れをとり、まだ処理されていない入力イベントのバックログが作成されることがあります。このようなチェーンは「スローチェーン」と呼ばれます。最も遅いチェーンが 1 秒以上遅延した場合、メッセージがコリレーターログに書き込まれます。
例: “Analytics Builder chain of models “Model 1”, “Model 2”, “Model 3” is slow by 3 seconds."
(分析ビルダーのモデルチェーン “Model 1”, “Model 2”, “Model 3” は 3 秒遅くなります。)
コリレーターログの場所については、Apama-ctrl マイクロサービスのログファイル を参照してください。
最も遅いチェーンに関する次の情報は、apama_status
パラメーター内の Things Cloud のオペレーションまたはイベントとして公開される定期ステータスでも確認できます。
名前 | 説明 |
---|---|
user-analyticsbuilder.slowestChain.models |
最も遅いチェーンに含まれるすべてのモデル |
user-analyticsbuilder.slowestChain.delaySec |
入力イベントの処理においてチェーンが遅れる秒数 |
例
次は、Things Cloud によって公開されるステータス操作データの例です。
{
"creationTime": "2021-01-05T21:48:54.620+02:00",
"deviceId": "6518",
"deviceName": "apama_status",
"id": "8579",
"self": "https://myown.iot.com/devicecontrol/operations/8579",
"status": "PENDING",
"models_running": {
"Package Tracking": {
"mode": "SIMULATION",
"modeProperties":{"startTime":1533160604, "endTime":1533160614},
"numModelEvaluations": 68,
"numBlockEvaluations": 967,
"avgBlockEvaluations": 14.2,
"numOutputGenerated": 50
}
},
"models_failed": {
"Build Pipeline ": {
"mode": "PRODUCTION",
"numModelEvaluations": 214,
"numBlockEvaluations": 671,
"avgBlockEvaluations": 3.13,
"numOutputGenerated": 4
}
},
"chain_diagnostics": {
"780858_780858": {
"creationTime": 1600252455.164188,
"executionCount": 4,
"modelsInEvalOrder": ["780858_780858", "780860_780860"],
"pendingTimersCount": 1,
"timeData": {
"execBucket": [2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
"maxTime": 0.00014781951904296875,
"meanTime": 0.0001152356465657552,
"minTime": 6.29425048828125e-05
}
}
},
"apama_status": {
"user-analyticsbuilder.slowestChain.models": "\"Model 1\", \"Model 2\", \"Model 3\"",
"user-analyticsbuilder.slowestChain.delaySec": "3",
"numJavaApplications": "1",
"numMonitors": "27",
"user-httpServer.eventsTowardsHost": "1646",
"numFastTracked": "183",
"user-httpServer.authenticationFailures": "4",
"numContexts": "5",
"slowestReceiverQueueSize": "0",
"numQueuedFastTrack": "0",
"mostBackedUpInputContext": "<none>",
"user-httpServer.failedRequests": "4",
"slowestReceiver": "<none>",
"numInputQueuedInput": "0",
"user-httpServer.staticFileRequests": "0",
"numReceived": "1690",
"user-httpServer.failedRequests.marginal": "1",
"numEmits": "1687",
"numOutEventsUnAcked": "1",
"user-httpServer.authenticationFailures.marginal": "1",
"user-httpServer.status": "ONLINE",
"numProcesses": "48",
"numEventTypes": "228",
"virtualMemorySize": "3177968",
"numQueuedInput": "0",
"numConsumers": "3",
"numOutEventsQueued": "1",
"uptime": "1383561",
"numListeners": "207",
"numOutEventsSent": "1686",
"mostBackedUpICQueueSize": "0",
"numSnapshots": "0",
"mostBackedUpICLatency": "0",
"numProcessed": "1940",
"numSubListeners": "207"
}
}
ドロップされたイベントの監視
モデルがイベントを受信したときに、コリレーターがイベントを配信または処理するのが遅すぎると、そのイベントがドロップされる可能性があります。入力ブロックとイベントのタイミングを参照してください。ドロップされたイベントの合計数および最後にドロップされたイベントのサンプルが含まれるアラームが定期的に発生します。アラームの詳細については、分析ビルダーのドロップイベントを参照してください。
ドロップされたすべての入力イベントはチャネル AnalyticsDroppedEvents
にも送信されるため、ドロップされたイベントの独自の監視を実装できます。チャネル AnalyticsDroppedEvents
に送信されたドロップされた入力イベントは、タイプ apama.analyticsbuilder.DroppedEvent
のイベント内にパッケージ化されます。これにより、元のドロップされたイベントを抽出し、デバイスごとのドロップされたイベントの数を分類するなどの分析を実行できます。これは、DroppedEvent
イベントを監視し、デバイス識別子や時間ごとに集計し、監視可能な Things Cloud にメジャーメントを送信する EPL を作成することで実現できます。アプリのデプロイ を参照してください。
モデルのライフサイクルの監視
ライフサイクル メッセージは、モデルが作成または削除されるとき、またはモデルが失敗したときにコリレーターログに書き込まれます。ログ メッセージは次のようになります。
Model "Build Pipeline" with PRODUCTION mode has started.
Model "Build Pipeline" with PRODUCTION mode has ended.
Model "Build Pipeline" with PRODUCTION mode has failed with an error:
IllegalArgumentException - Error while validating parameters for the
block "toggle" of type "apama.analyticskit.blocks.core.Toggle":
The "Set Delay" must be finite and positive: -1.
モデルをデプロイすると、既存のモデルまたはチェーンを結合して新しいチェーンを形成できます。チェーンの形成は複数の既存のモデルとチェーンを組み合わせる場合があるため、完了するまでに時間がかかる場合があります。チェーンのアクティブ化が開始および完了するたびに、アクティブ化メッセージがコリレーターログに書き込まれます。
例:
Analytics Builder chain of models "Model 1", "Model 2", "Model 3" is being activated.
Analytics Builder chain of models "Model 1", "Model 2", "Model 3" has been activated.
コリレーターログの場所については、Apama-ctrlマイクロサービスのログファイル を参照してください。
構成
REST リクエストを Things Cloud に送信することで、分析ビルダーの設定、いわゆる「テナント オプション」をカスタマイズできます。REST リクエストで使用できるキー名は、以下のトピックにリストされています。カテゴリ名はキー名とともに必要です。 これは常に analytics.builder
です。
curl コマンドを使用してさまざまなテナント オプションを設定する で、いくつかの具体的な例を見つけることができます。ただし、好きなツールを使用できます。
テナントオプションを変更するには、「オプション管理」の管理者権限が必要です。 詳細については、権限の管理を参照してください。
ステータス レポートのキー
キー名 | 説明 |
---|---|
status_device_name |
ステータス操作が公開される Things Cloud デバイスの名前。デフォルト名は apama_status です |
status_period_secs |
ステータスが公開される頻度(秒単位)。デフォルト値は 0 秒で、ステータス レポートが無効であることを意味します。ステータス レポートを有効にするには、頻度を正の値に設定します |
status_send_type |
ステータスを公開する方法。デフォルト値は OPERATION で、ステータスが Things Cloud オペレーションとして公開されることを意味します。これを、次のいずれかの値に変更できます
|
status_send_keys |
ステータスを公開するときに使用されるフィールド名のカンマ区切りのリスト。設定されていないか空の場合、すべてのフィールドのステータスが公開されます。例えば、次のように指定すると、ステータスには 1 つのメジャーメントにおける、これらのフィールドの値のみが含まれますnumQueuedInput,numListeners,numMonitors |
status_event_type |
ステータスが Things Cloud イベントとして公開される場合はイベント タイプ、ステータスが Things Cloud メジャーメントとして公開される場合はメジャーメントタイプ、デフォルトのタイプは apama_status です |
status_event_text |
ステータスが Things Cloud イベントとして公開される場合のイベントテキスト。デフォルトテキストは Apama Status です |
モデルのタイムアウトのキー
キー名 | 説明 |
---|---|
timedelay_secs |
入力ブロックがイベントが古いと判断するまでの最大遅延(秒単位)。デフォルト値は 1 秒です。入力ブロックとイベントのタイミング を参照してください |
logging_throttle_secs |
スロットリングを秒単位で記録します。定期的なログ メッセージ(例えば、入力ブロックによってドロップされたイベント数の変化を報告するメッセージ)は、この定数で定義された頻度よりも頻繁には表示されません。デフォルト値は 1 秒です。入力ブロックとイベントのタイミング を参照してください |
minimum_wait_time_secs |
最小待機時間(秒単位)。一部のブロックは、出力の変化率に基づいて出力を自動的に生成できます。これにより、そのような出力間の時間の下限が設定されます。共通のブロック入力とパラメーター を参照してください |
シミュレーション モードのためのキー
キー名 | 説明 |
---|---|
simulation.maxInstances |
一度にデプロイされるシミュレーション モデルの最大数。デフォルト値は 3 モデルです。シミュレーション モデルの最大数の構成 を参照してください |
その他のキー
キー名 | 説明 |
---|---|
numWorkerThreads |
ワーカースレッドの数。デフォルト値は1です。同時実行レベルの構成を参照してください。なお、マルチテナント対応のマイクロサービスではワーカースレッド数は変更できません。 |
retention.virtualDevicesMaxDays |
仮想デバイスを保持するための保持期間(日数)。デフォルト値は 30 日です。仮想デバイス を参照してください |
c8yAnalyticsBlocks.queryInventoryPageSize |
入力ソースの選択 や 出力先の選択 ダイアログ ボックスに表示されるアイテム数。デフォルト値は 10 です。表示される入力ソースと出力先の数の構成を参照してください |
c8yAnalyticsBlocks.queryInventoryNameSearchAdditionalFilter |
入力ソースの選択 または 出力先の選択 ダイアログボックスの検索ボックスや、フィルター チェックボックスを使用すると表示されるマネージドオブジェクト。デバイス / グループ / アセットの検索 を参照してください |
ログに記録されたテナント オプション
一部のテナント オプションの値がログに記録されます。これらは次の通りです。
status_device_name
status_period_secs
timedelay_secs
numWorkerThreads
これらのテナント オプションに現在どの値が使用されているかを知りたい場合は、ログでそれらを検索できます。Apama-ctrlマイクロサービスのログファイル を参照してください。
curl コマンドを使用してさまざまなテナント オプションを設定する
POST
リクエストを Things Cloud に送信することで、さまざまなテナントオプションを設定または変更できます。このトピックでは、curl コマンドラインツールを使用してこれを行う方法を説明します。curl の詳細情報については、https://curl.se/を参照してください。また、Things Cloud OpenAPI仕様内のテナントオプション に関する情報も参照してください。
curl コマンドの構文は、作業している環境によって異なります。例えば、Bash UNIX シェルの構文は次の通りです。
curl --user username -X POST -H 'Content-Type: application/json' -d '{"category": "analytics.builder", "key": "keyname", "value": "value"}' -k https://hostname/tenant/options
ここで、
-
username
は、Things Cloud の「オプション管理」に対する管理者権限を持つユーザー名です。curl はパスワードの入力を求めます。または、コロン (:) とパスワードを追加して、username
引数にパスワードを指定することもできます。
例:--user User123:secretpw
テナントに独自の一意のホスト名がない場合は、
username
引数にテナント識別子を指定する必要があります。
例:--user management/User123
または
--user t12345/User123
-
keyname
は、前のトピックにリストされているキーの 1 つです -
value
は、キーに設定される値で、キーに応じて数値または文字列になります -
hostname
は、ユーザーアプリケーションがデプロイされているテナントのホスト名です -
category
は常にanalytics.builder
です
例(Bashシェル):
curl --user User123 -X POST -H 'Content-Type: application/json' -d '{"category": "analytics.builder", "key": "numWorkerThreads", "value": "4"}' -k https://mytenant/tenant/options