Analytics Builder の使用開始
Analytics Builder とは
Analytics Builder では、新しいデータを生成したり、イベントを出力したりするために、ストリーミング データを変換または分析する分析モデルを構築できます。モデルはリアルタイムでデータを処理できます。
グラフィカル環境でモデルを構築するには、事前に構築されたブロックをモデルに結合します。モデル内のブロックは、小さなロジックをパッケージ化し、多数の入力、出力、およびパラメーターをもちます。各ブロックは、センサーからのデータの受信、計算の実行、条件の検出、出力信号の生成など、特定の機能を実装します。ブロックの構成を定義し、ワイヤーを使用してブロックを接続します。モデルを編集したり、履歴データを使用してデプロイをシミュレートしたり、ライブシステムに対して実行したりできます。詳細については、モデルの理解 をご覧ください。
Analytics Builder は、次のツールで構成されています。
- モデルマネージャー
Analytics Builder を起動すると、モデルマネージャーが最初に表示されます。使用可能なすべてのモデルが一覧表示され、それらを管理できます。たとえば、モデルマネージャーからモデルをテストしてデプロイしたり、モデルを複製または削除したりできます。新しいモデルを作成したり、既存のモデルを編集したりできます。この場合、モデルエディタが呼び出されます。また、独自のモデルの作成を開始する際に役立つサンプルも用意されています。詳細については、モデルマネージャーの使用をご覧ください。 - モデルエディタ
モデルエディタでは、モデル内で使用するブロックと、それらの接続方法を定義できます。モデルエディタでは、各ブロックの機能を説明するユーザー表示のドキュメント(いわゆるブロックリファレンス)を利用できます。詳細については、モデルエディタの使用をご覧ください。 - インスタンスエディタ
テンプレートパラメーターがモデルで定義されている場合、インスタンスエディタでは、同じモデルの異なるインスタンスを設定し、個別にアクティブ化して管理することができます。インスタンスエディタは、モデルエディタで定義されているテンプレートパラメーターを使用します。詳しくは、インスタンスエディタの使用をご覧ください。
ブロックは Apama のイベント処理言語 (EPL) で実装されています。実行時に EPL コードは Apama コリレーターで実行され、モデルが実行されます。実行時の動作と制限について理解しておくことが重要です。これらについては、後のトピックで説明します。
最初のステップ: 最初のモデルの作成
このトピックでは、新しいモデルを追加および設計する方法と、その出力を表示する方法について簡単に説明します。これは、Analytics Builder が提供するすべての機能を包括的に説明することを意図したものではありません。そのため、説明は最小限にとどめています。詳細については、このドキュメントの残りの部分をご覧ください。
以下の手順では、デバイスが Things Cloud にすでに登録されている必要があります。これは、すでにメジャーメントをThings Cloudに送信しているデバイスであることが望ましいです。これは、たとえば、Cumulocity IoT Sensor Appがインストールされているスマートフォンです (詳細については、ユーザーガイドの Cumulocity IoT Sensor App をご覧ください)。
追加するモデルには、次の 3 つのブロックが含まれます。
- デバイスからメジャーメントを受け取る入力ブロック。
- 時間の経過に伴うメジャーメントの平均を計算するブロック。
- 計算された平均値を Things Cloud のデバイス管理アプリケーションに送信して表示できるようにする出力ブロック。
以下のすべての手順を完了すると、モデルは次のようになります。
ステップ 1: Analytics Builder に切り替える
ストリーミング分析アプリケーションのホーム画面で、Analytics Builder の見出しの下に表示される 開く ボタンをクリックします。
または、左側のナビゲータで Analytics Builder をクリックします。
ステップ 2: 新しいモデルを追加する
Analytics Builder を起動すると最初に表示されるページはモデルマネージャーです。
-
モデル タブで、ツールバーの 新しいモデル をクリックします。
-
表示されるダイアログ ボックスでモデル名を入力し、OK をクリックします。
ステップ 3: 入力ブロックを追加する
モデルはモデルエディタで設計します。 モデル名を入力すると、モデルエディタが表示されます。 左側に表示されるパレットには、モデルに追加できるすべてのブロックが含まれています。 ブロックを追加するには、パレットからキャンバスにブロックをドラッグします。 Things Cloud に登録されている入力デバイスのブロックが 入力 に表示されます。
-
パレットで、入力を展開します。
-
測定入力 ブロックをキャンバスにドラッグします。
ブロックパラメーターエディタが自動的に表示されます。
備考ブロックパラメーターエディタが表示されない場合 (たとえば、入力ブロックをキャンバスにドラッグした後、キャンバス上の空きスペースをクリックした)、マウスの左ボタンを使用してブロックをクリックしてブロックパラメーターエディタを表示します。 -
入力ソース に表示されている 3 つの点をクリックします。 表示されるダイアログ ボックスで、デバイスを選択してください ボタンをクリックしてデバイスを選択します。 このボタンは、デバイスの上にマウスを置くと表示されます。
-
フラグメントおよびシリーズ ドロップダウン リスト ボックスから、入力ブロックが監視するフラグメントとシリーズを選択します。
デバイスが以前にデータを送信したことがある場合、ドロップダウン リスト ボックスには 1 つ以上の値が表示され、選択できます。 Cumulocity IoT Sensor App の例は、c8y_Gyrscope => gyrscopeY になります。
-
タイムスタンプを無視 チェックボックスをオンにします。
これにより、メジャーメントが受信したときと同じ順序で処理されるようになります。
現在選択されているブロックの詳細情報が必要な場合は、右側のドキュメント ペインでブロックリファレンスをご覧ください。 現在ドキュメント ペインが表示されていない場合は、次のアイコンをクリックします。
ステップ 4: メジャーメントの平均を計算するブロックを追加する
-
パレットで、集約を展開します。
-
平均値 (平均) ブロックをキャンバスにドラッグします。
-
ブロックパラメーターエディタで、ウィンドウ期間 (秒) の値 (たとえば、「10」) を指定します。
指定した秒数は、測定の平均化の期間を制御するために使用されます。 値が小さいほど値の変化にすばやく反応し、値が大きいほど値がより滑らかになります。
ステップ 5: 出力ブロックを追加する
-
パレットで、出力を展開します。
-
測定出力 ブロックをキャンバスにドラッグします。
-
出力先として、入力ブロックと同じデバイスを選択します。
-
フラグメント名として「apama_Average」を指定します。
-
シリーズ名として「value」を指定します。
ステップ 6: ブロックを接続する
あるブロックから別のブロックに値を渡すには、ブロックをワイヤーで接続する必要があります。 ワイヤーをポート、つまりブロックの左側または右側に表示されている小さな円に接続します。
-
入力ブロックの 値 出力端子をクリックし、平均値 (平均) ブロックの 値 入力端子までマウスをドラッグします。
-
平均値 (平均) ブロックの 平均値 出力端子をクリックし、出力ブロックの 値 入力端子までマウスをドラッグします。
ステップ 7: モデルを保存し、モデルマネージャーに戻ります。
-
モデルエディタのツールバーで、次のアイコンをクリックして、新しく作成したモデルを保存します。
-
モデルエディタのツールバーで、次のアイコンをクリックしてモデルエディタを終了し、モデルマネージャーに戻ります。
ステップ 8: 本稼働モードでモデルをアクティブ化する
新しく追加されたモデルのカードが、モデルマネージャーの モデル タブに表示されます。 新しいモデルは自動的にドラフトモードおよび非アクティブ状態に設定されます。 ここで、新しいモデルを本稼働モードでアクティブ化します。 これによりモデルがデプロイされ、デバイスからのメジャーメントが処理されるようになります。
-
現在下書きと表示されているカードのドロップダウン メニューをクリックし、本稼働を選択します。
-
現在 非アクティブ と表示されているカードのトグル ボタンをクリックします。 これにより、状態が アクティブ に変更されます。
ステップ 9: デバイス管理に移動し、メジャーメントを表示します。
アクティブなモデルから送信されたメジャーメントを表示するには、デバイス管理アプリケーションに切り替える必要があります。 詳細については、ユーザーガイドのデバイス管理をご覧ください。
-
デバイス管理アプリケーションに移動します。
-
左側のナビゲータで、デバイス、すべてのデバイス の順にクリックします。
-
デバイスを見つけてその名前をクリックし、デバイスの詳細を表示します。
-
左側の 計測値 をクリックします。 これは、デバイスで測定が可能な場合にのみ表示される動的タブです。
結果のページには、デバイスから送信されたデータを視覚化するいくつかのグラフが表示されます。 「Apama_average」というタイトルのグラフも表示され、新しく作成したモデルから送信された値を確認できます。 この新しいグラフを表示するには、ページをリロードする必要がある場合があります。 計測値 タブの詳細については、ユーザー ガイド の デバイス管理 > デバイスの詳細 > 計測値 をご覧ください。
最初のステップ: サンプルからモデルを作成する
このトピックでは、サンプルからモデルを作成する方法の概要を説明します。 これは、測定データがない場合にアラームを作成 サンプルに基づいています。 新しいモデルでは、指定された期間に新しい測定データが受信されなかった場合にアラームが作成されます。
このトピックは、Analytics Builder によって提供されるあらゆる可能性を包括的に説明することを目的としたものではありません。そのため説明は最小限に抑えられています。 詳細については、このドキュメントの残りの部分をご覧ください。
以下の手順では、デバイスがすでに Things Cloud に登録されている必要があります。 これは、すでにメジャーメントを Things Cloud に送信しているデバイスであることが望ましいです。これは、たとえば、Cumulocity IoT Sensor App がインストールされているスマートフォンです (Cumulocity IoT Sensor App を参照) 詳細については、ユーザー ガイドをご覧ください。
次の図は、測定データがない場合にアラームを作成 サンプルで定義されているブロックを示しています。
このサンプルでは、事前定義されたテンプレートパラメーターを使用します。 サンプルからモデルを作成した後、モデルの複数のインスタンスを作成し、テンプレートパラメーターに異なる値を指定できます。 テンプレートパラメーターのないモデルとテンプレートパラメーターのあるモデルの違いについて説明している モデル もご覧ください。
以下は、サンプル内で定義されているブロックの簡単な説明です。
- 入力は、測定入力 ブロックが、テンプレートパラメーター「入力フラグメントおよびシリーズ」で定義された特定の値と一致する新しい受信メジャーメントを待機することから始まります。そのパラメーターの名前は、入力ブロックに表示されるラベルです。
- 測定入力 ブロックからの出力は 不足データ ブロックに渡され、テンプレートパラメーター「間隔 (秒)」で定義された時間内に入力が受信されなかった場合に出力がトリガーされます。
- 不足データ ブロックからの出力は、アラーム出力 ブロックの アラームの作成 入力ポートのトリガーとして使用されます。 アラーム タイプ テンプレートパラメーターの名前は、出力ブロックに表示されるラベルです。
- 測定入力 ブロックからの出力は、マネージドオブジェクト入力 ブロックからの入力とともに、テキストの代替 ブロックの オブジェクト 入力ポートにも入力として渡されます。 これは テキストの代替 ブロックの ソース 入力ポートに渡されます。 デバイスまたはデバイスのグループ テンプレートパラメーターの名前は、入力ブロックに表示されるラベルです。
- テキストの代替 ブロックは、プレースホルダーの置換をサポートします。 たとえば、入力テキストが「#{type} の測定値がありません」の場合、
#{type}
値はメジャーメントの実際のtype
に置き換えられます。 詳細については、テキストの代替 をご覧ください。 - テキストの代替 ブロックは、テンプレートパラメーター「アラーム テキスト」をユーザー入力として使用するように構成されています。 必要な置換を適用し、置換を含む文字列を 出力 出力ポートから アラーム出力 ブロックの メッセージ 入力ポートに送信します。
- アラーム出力 ブロックでは、アラーム タイプ およびテンプレートパラメーター「アラーム重大度」を構成する必要があり、不足データ ブロックによってトリガーされるたびにアラームが作成されます。
ステップ 1: サンプルから新しいモデルを作成する
モデルマネージャーの サンプル タブには、Analytics Builder で提供されるすべてのサンプルモデルが一覧表示されます。 カードをクリックするだけでサンプルを表示できますが、編集したりデプロイしたりすることはできません。 ただし、サンプルからモデルを作成することで、サンプルを独自のモデル開発の基礎として使用できます。
-
モデルマネージャーの サンプル タブに移動します。
-
測定データがない場合にアラームを作成 サンプルのアクション メニューをクリックし、サンプルからモデルを作成 をクリックします。
新しいモデルはモデルエディタにすぐに表示されます。 サンプルと同じ名前、説明、タグが付いています。
-
モデルの名前を変更する場合は、ツールバーの左側に表示されるモデル名をクリックします。 表示される モデル構成 ダイアログ ボックスで新しい名前を指定できます。
-
モデルエディタのツールバーで、次のアイコンをクリックして新しいモデルを保存します。
-
モデルエディタのツールバーで、次のアイコンをクリックしてモデルエディタを終了し、モデルマネージャーに戻ります。
備考モデルマネージャーの モデル タブには、保存されたモデルのみがリストされることに注意してください。
ステップ 2: モデルの新しいインスタンスを作成する
サンプルモデルではテンプレートパラメーターを使用します。 そのため、サンプルをモデルに変換するときは、いわゆるテンプレートモデルを作成します。 モデルマネージャーでテンプレートモデルを直接アクティブ化することはできません。 代わりに、モデルのインスタンスを少なくとも 1 つ作成する必要があります。その後、インスタンスエディタを使用してそのインスタンスをアクティブ化できます。
-
モデルマネージャーの モデル タブで、新しく作成したモデルのカードを見つけます。
-
インスタンスエディタを起動するには、現在カードに表示されている 0 インスタンス をクリックします。
-
新しいインスタンス をクリックして、新しいモデルの最初のインスタンスを作成します。
ステップ 3: テンプレートのパラメーター値を入力します。
インスタンスエディタでは、作成したインスタンスごとに行が表示されます。 テンプレートモデルで定義されているテンプレートパラメーターごとに列が提供され、テンプレートパラメーターの名前が列ヘッダーになります。 インスタンスがアクティブでない限り、そのインスタンスの値を調整できます。
すべてのテンプレートパラメーター (列) が画面に表示されない場合は、インスタンス表の下にある水平スクロール バーを使用します。
-
デバイスまたはデバイスのグループ 列ヘッダーの下のフィールドをクリックします。 表示されるダイアログで、このインスタンスに使用するデバイスを選択し、デバイスの選択 をクリックします。
-
入力フラグメントおよびシリーズ 列ヘッダーの下のテキスト ボックスに、監視する測定入力の詳細を次の形式で指定します。
<valueFragmentName>.<valueSeriesName>
たとえば、測定フラグメントが「c8y_Gyrscope」、シリーズが「gyrscopeX」の場合、次のように入力する必要があります。
c8y_Gyrscope.gyrscopeX
ヒント測定入力 ブロックの定義済みテンプレートパラメーターを変更せずにデバイスで利用可能なフラグメントとシリーズを確認したい場合は、モデルエディタに戻り、デバイスの入力ブロックをパレットから上にドラッグします。キャンバスを開き、フラグメントおよびシリーズ ドロップダウン リスト ボックスを開きます。 これには、使用できるすべての値がリストされます。ただし、この場合は、ドロップダウン リスト ボックスに表示される=>
の代わりに、ドット (.) を使用する必要があります。使用する値を決定した後は、必ずこのブロックを再度削除してください。 -
期間 (秒)、アラーム タイプ、アラーム テキスト、アラーム重大度 列ヘッダーの下のフィールドには、すでにデフォルト値が含まれています (上記のブロックの説明も参照)。 要件に合わせて調整してください。たとえば、期間を 30 秒に変更し、アラームタイプの名前を「MyAlarmType」に変更し、事前定義されたアラームテキストを保持し、アラームの重大度を マイナー に設定します。
-
インスタンスエディタのツールバーで、保存 をクリックします。
ステップ 4: インスタンスをアクティブ化する
次に、本稼働モードでインスタンスをアクティブ化します。 これによりインスタンスがデプロイされ、デバイスからのメジャーメントが処理されるようになります。
-
インスタンスエディタの 実行モード 列で、インスタンスのドロップダウンメニューをクリックし、本稼働 を選択します。
-
インスタンスエディタの ステータス 列で、現在 非アクティブ と表示されているボタンをクリックして、ステータスを アクティブ に変更します。
ステップ 5: デバイスからデータを送信する
インスタンスがアクティブ化されたら、デバイスからデータを送信します。 インスタンスは、測定データが到着し始めるとデバイスの監視を開始し、設定された期間内にデータが受信されない場合はアラームを作成します。
スマートフォンからのジャイロスコープ測定の例では、Cumulocity IoT Sensor App の実行中にスマートフォンのディスプレイをオフにするだけで十分です。
ステップ 6: デバイス管理アプリケーションに移動し、アラームを表示します。
アクティブなインスタンスから送信されたアラームを表示するには、デバイス管理アプリケーションに切り替える必要があります。 詳細については、ユーザーガイドのデバイス管理をご覧ください。
-
デバイス管理アプリケーションに移動します。
-
左側のナビゲータで、デバイス、すべてのデバイス の順にクリックします。
-
デバイスを見つけてその名前をクリックし、デバイスの詳細を表示します。
-
左側の アラーム をクリックします。
-
表示されたページでデバイスから送信されたアラームを確認します。上記のようにインスタンスを編集した場合は、30 秒後に「タイプ c8y_Gyrscope のメジャーメントが欠落しています」というマイナーアラームが表示されます。 アラーム タブの詳細については、ユーザーガイドの デバイスの監視と制御 > アラームの操作 をご覧ください。
モデルの理解
モデル
モデルは、ワイヤーで相互に接続されたブロックのネットワークを持つことができるコンテナです。
モデル内のブロックの動作は、他のブロックに依存しません。モデル内には同じブロックの複数のインスタンスが存在し、構成可能なパラメーターまたはブロックに接続されている入力に応じて、各インスタンスの動作が異なる場合があります。
テンプレートパラメーターを使用しないモデルとテンプレートパラメーターを使用するモデルの 2 つの異なるタイプのモデルを作成できます。
テンプレートパラメーターのないモデル
モデル内のすべてのブロックは、定義された入力デバイスまたはデバイスのグループを使用し、定義されたパラメーター値を含みます。 このようなモデルは、モデルマネージャーですぐにアクティブ化できます。
テンプレートパラメーターを含むモデル
1つ以上のテンプレートパラメーターが定義されたモデルを「テンプレートモデル」と呼びます。 ブロック パラメーターの型がテンプレートパラメーターの型と同じであれば、テンプレートパラメーターは任意の数のブロック パラメーターにバインドできます。
たとえば、デバイス名用のテンプレートパラメーターと、しきい値用の別のテンプレートパラメーターを定義できます。 これらのテンプレートパラメーターは、後でモデルのさまざまなインスタンスで個別に設定できます。 たとえば 1 つのテンプレートパラメーターでデバイスを指定し、そのデバイスを複数の入力および出力ブロックに使用できます。 または、1 つのインスタンスがしきい値 100 のデバイス ABC を使用し、別のインスタンスがしきい値 200 のデバイス XYZ を使用することができます。テンプレートパラメーターを持つモデルは、モデルマネージャーで直接アクティブ化できません。 モデルのインスタンスを少なくとも 1 つ作成する必要があります。その後、インスタンスエディタ を使用して各インスタンスを個別にアクティブ化できます。
テンプレートパラメーターのスコープは、それらが定義されているモデルに対してローカルです。 つまり、あるモデルで定義されたテンプレートパラメーターは、同じテナントまたはサブテナントに展開されている他のモデルでは使用できません。 テンプレートパラメーターの名前は、それが定義されているモデルのスコープ内で一意である必要があります。
このタイプのモデルには 2 つの関連するロールがあり、これは同じ人物である場合もあれば、異なる人物である場合もあります。
-
モデル作成者
モデル作成者はモデルを作成し、そのすべてのブロック、パラメーター、ワイヤーを定義します。 最も重要なことは、モデル作成者がテンプレートパラメーターを作成し、それらを選択したブロック内の適切なパラメーターにバインドすることです。
-
インスタンス管理者
インスタンス管理者は、モデルのインスタンスを作成し、各インスタンスで使用されるテンプレートパラメーターに値を割り当てます。
モデル作成者には、テンプレートパラメーターを定義するための次のオプションがあります。
- インスタンスエディタ でデフォルト値として提供されるデフォルト値を持つことができます。 インスタンス管理者は、デフォルト値のままにすることも、別の値に変更することもできます。
- 値の設定をオプションにすることもできます。 インスタンスの管理者は、値を指定するか、値を空白のままにすることができます。
- 値の設定を必須にすることもできます。この場合、インスタンス管理者は値を提供する必要があります。 必須値とは、オプションではなく、デフォルト値がない値です。
テンプレートモデルインスタンス
テンプレートモデルインスタンスは、テンプレートパラメーターを持つモデルで使用される値を保持します。
たとえば、2 つのデバイスがデバイスからのデータに対して同様のチェックを行う場合がありますが、それらのチェックには異なるしきい値が使用されます。 この場合、使用するデバイスとしきい値を指定して、各デバイスのインスタンスを構成します。
各インスタンスは、個別にアクティブ化、非アクティブ化、または異なる実行モードを使用できます。
ブロック
ブロックはモデルの基本的な処理単位です。 各ブロックにはいくつかの事前定義された機能があり、それに応じてデータを処理します。 ブロックには、パラメーターのセットと入力端子と出力端子のセットを含めることができます。
モデルエディタ のパレットでは、次のタイプのブロックを選択できます。
- 外部ソースからデータを受信する入力ブロック
入力ブロックは通常、Things Cloud インベントリ、デバイス グループ、スマート グループ、またはアセットに登録されているデバイスを表します。 入力ブロック もご覧ください。 - 出力ブロック
データを外部ソースに送信します。 通常、出力ブロックは、Things Cloud インベントリに登録されているデバイスを表します。 ただし、指定した受信者に電子メールまたは SMS を送信するためのブロックもあります。 出力ブロック もご覧ください。 - 処理ブロック
入力ブロックからデータを受信し、結果のデータを出力ブロックに送信します。 処理ブロック もご覧ください。
ブロックは、その入力ポートを介して別のブロックからデータを受信できます。 ブロックは、出力ポートを通じて別のブロックにデータを送信できます。 ブロックが異なれば、入力ポートまたは出力ポートの数も異なります。また、ブロックによっては、入力ポートのみまたは出力ポートのみを備えることもあります。 ほとんどのブロックでは、すべての入力ポートまたは出力ポートを接続する必要はありません。
ブロックには、ブロックの動作を定義する構成可能なパラメーターを含めることができます。 これらのパラメーターは、ブロックの要件に応じてオプションまたは必須のいずれかです。 パラメーターは、値またはテンプレートパラメーターを使用して構成できます。
同じブロックを複数回使用する場合、同じパラメーターに異なる値を指定できます。 たとえば、しきい値 ブロックには しきい値 という名前の構成可能なパラメーターがあります。 しきい値 ブロックの 2 つのインスタンスを使用し、このパラメーターをブロックごとに異なるように構成すると、ブロックは異なるしきい値違反を報告します。
入力ブロック
入力ブロックは、外部ソースからデータを受信する特殊なタイプのブロックです。 データを配線で理解できる形式に変換し、接続されたブロックにデータを転送します。 たとえば、入力ブロックが Things Cloud から Measurement
イベントを受け取ると、イベントから必要な情報を抽出し、その情報を接続されたブロックに転送してさらなる処理を行います。
モデルは複数のデバイスからのデータを処理でき、その際に (複数のコアを使用して) スケールアップできます。 詳細については、さまざまなデバイスのモデル実行 をご覧ください。
さらに、Analytics Builder は、「ブロードキャスト デバイス」と呼ばれる入力デバイスをサポートします。これらの入力デバイスからの信号は、全てのデバイスとモデルで利用できます。詳細については、ブロードキャスト デバイス をご覧ください。
出力ブロック
出力ブロックは、接続された処理ブロックからデータを受信する特殊なタイプのブロックです。 データを外部ソースが理解できる形式に変換し、データを外部ソースに転送します。 たとえば、出力ブロックが接続された処理ブロックからデータを受け取ると、そのデータをOperation
オブジェクトにパッケージ化し、そのオペレーションを Things Cloud に送信します。
出力ブロックに トリガー デバイス を指定できます。 これは、出力をトリガーしたデバイスに出力を送り返すために使用できる特別なデバイスです。 モデルは複数のデバイスからのデータを処理でき、その際に (複数のコアを使用して) スケールアップできます。 詳細については、さまざまなデバイスのモデル実行 をご覧ください。
他の出力ブロックには、電子メールを送信するための 電子メールの送信 があります。他のブロックとは異なり、これらは Things Cloud プラットフォーム内のデバイスに関連付けられていません。
処理ブロック
処理ブロックにはさまざまな種類があります。 これらは、機能に応じて、モデルエディタ のパレットでさまざまなカテゴリにグループ化されています。
このカテゴリには |
次のブロックが含まれます |
---|---|
ロジック | データに対して論理演算を実行します。 AND や OR などのブロックがこのカテゴリに含まれます。 |
計算 | データに対して数学的演算を実行します。 差分、しきい値、方向検出、デルタ、式などのブロックがこのカテゴリに含まれます。 |
集約 | 値のウィンドウにわたってデータの集計を実行します。 平均値 (平均) や インテグラル などのブロックがこのカテゴリに含まれます。 |
フロー操作 | データの流れを操作します。 時間遅延、ゲート、パルス、ラッチ値などのブロックがこのカテゴリに含まれます。 |
ユーティリティ | さまざまなユーティリティ関数を提供します。 切り替え や 不足データ などのブロックがこのカテゴリに属します。 |
処理ブロックの例 - しきい値ブロック
次の例は、ブロックパラメーターエディタ とともに、モデルエディタ でブロックがどのように表示されるかを示しています。 これは、入力値がしきい値に違反するかどうか、またはしきい値を超えるかどうかを検出する しきい値 ブロックを示しています。
パラメーターは次の通りです。
- しきい値:
float
タイプ。 この値は入力値と比較されます。 - 方向: 調べる方向: 入力値が定義されたしきい値を上回るか下回るか、またはしきい値を超えるか。
入力ポートは次の通りです。
- 値:
float
タイプ。 定義されたしきい値と比較されるブロックへの入力値。 - リセット:
pulse
タイプ。 信号を受信すると、ブロックの状態がリセットされ、以前に受信した入力値は使用されなくなります。
出力ポートは次の通りです。
- 違反されたしきい値:
boolean
型。 しきい値を超えた場合、true
に設定されます。 つまり、入力値が定義されたしきい値の範囲を超えています。 - しきい値内:
boolean
型。 しきい値を超えていない場合はtrue
に設定されます。 つまり、入力値は定義されたしきい値の範囲内にあります。 - 超過したしきい値:
pulse
タイプ。 入力値がしきい値を超えたときに、しきい値の一方の側からもう一方の側に進むときに信号を送信します。
独自のブロックの作成
Analytics Builder Block SDK を使用すると、カスタム ブロックを作成、テスト、パッケージ化し、これらのブロックを Analytics Builder にアップロードできます。
Block SDK は、GitHub の https://github.com/SoftwareAG/apama-analytics-builder-block-sdk から入手できます。詳細については、GitHub のドキュメントをご覧ください。
カスタムブロックは、Apama のイベント処理言語 (EPL) で作成します。 ブロックを作成したら、それを拡張機能にパッケージ化してアップロードできます。 拡張機能を構築してアップロードするためのコマンド ラインの例は次の通りです。
Analytics_builder build extension --input path --cumulocity_url $C8Y_URL --username $C8Y_USERNAME --password $C8Y_PASSWORD --namecustomBlocks --restart
拡張機能をアップロードするには、--username
引数で指定されたユーザーは、前提条件 にリストされている権限に加えて、Things Cloud の「インベントリ」に対する作成権限を持っている必要があります。
上記のコマンドを実行すると、Apama-ctrl マイクロサービスが再起動されます。 再起動をリクエストするには、ユーザーは「CEP 管理」の管理権限を持っている必要があります。
ワイヤー
1 つのブロックはワイヤーを使って別のブロックに接続されます。 あるブロックの出力ポートと別のブロックの入力ポート間のすべてのデータ転送は、ワイヤを使用して行われます。 すべての接続は互換性のあるタイプ間で行う必要があります。 詳細については、ワイヤーとブロック をご覧ください。
ユースケース
リアルタイムのセンサーデータを取得し、このデータを分析したい状況を考えてみましょう。 話を簡単にするために、センサーが 1 つだけあり、次のことに興味があると仮定します。
- 一定期間にわたるセンサー読み取り値の平均値を知りたい。
- 定義されたしきい値を使用して、センサー読み取り値の突然の変化を検出したい。
- センサーの読み取り値が特定の範囲内にあることを確認し、読み取り値がその範囲を超えた場合にアラートが作成されるようにしたいと考えている。 たとえば、圧力のメジャーメントを取得していて、最大圧力がデバイスが処理できる範囲を超えないようにする必要がある。
この例のモデルには次のブロックがあります。
-
入力デバイスというデバイス名を示した入力ブロック
受信データはリアルタイムかつ継続的です。 入力ブロックはセンサーからデータを受け取ります。 データは 平均値 (平均)、差分、しきい値 ブロックに渡されます。 これらのブロックの入力ポートは、入力ブロックの出力ポートに接続されます。
-
平均値 (平均) ブロック
このブロックは、一定期間にわたって受信した読み取り値の平均値を求め、これを接続された出力ブロックに渡します。
-
差分 ブロック
このブロックは、連続する入力値の差を計算し、計算された値を接続された しきい値 ブロックに渡します。
-
しきい値 ブロックの 2 つの異なるインスタンス
しきい値 ブロックは、入力値を定義されたしきい値と比較して、入力がしきい値を超えているかどうかを検出します。 最初のインスタンスは 差分 ブロックに接続されており、差分値がしきい値を超えた場合に違反を報告します。 2 番目のインスタンスは入力ブロックに接続されており、入力値がしきい値内にない場合に違反を報告します。
-
出力デバイス というデバイス名を示した出力ブロックの 3 つのインスタンス
最初のインスタンスはセンサー読み取り値の平均を送信します。 2 番目のインスタンスは、連続するセンサー読み取り値の変化が設定されたしきい値を超えた場合に出力を生成します。 3 番目のインスタンスは、センサー値が設定されたしきい値を超えた場合に出力を生成します。
モデルマネージャーの使用
モデルマネージャーのユーザー インターフェース
モデルマネージャーには 2 つのタブがあります。モデル タブには現在定義されているすべてのモデルが表示され、サンプル タブには独自のモデルの作成を開始するのに役立つサンプルモデルが表示されます。
モデルタブ
モデル タブには、現在の Things Cloud 環境内で利用可能なすべての分析モデルがカードとしてリストされます。 ここから新しいモデルを追加したり、既存のモデルを管理したりできます。
モデルを編集するには、そのモデルに表示されているカードをクリックするだけです (既存のモデルの編集 をご覧ください)。 新しいモデルを追加するか既存のモデルを編集するとモデルエディタが呼び出され、モデルを構成するブロックとワイヤーを定義します。モデルエディタの使用 をご覧いただき詳細をご確認ください。
モデルには 2 つのタイプがあり、これらのモデルのカードの外観は異なります。
-
カードにモード(下書き または 本稼働 など) と状態 (アクティブ または 非アクティブ)が表示される場合、それはテンプレートパラメーターを持たないモデルに関係します。このようなモデルは、モデルマネージャーですぐにアクティブ化できます。 詳細については、モデルのデプロイ をご覧ください。
デプロイされたモデルのカードに次のメッセージが表示された場合、このモデルはイベントを処理していません。 エラーアイコンをクリックすると、問題の内容に関する情報が表示されます。
-
モデルにテンプレートパラメーターがある場合、モデルはテンプレートとして機能します。 この場合、定義済みのアクティブなインスタンスの数がカードに表示されます。 テンプレートモデルは、モデルマネージャーで直接アクティブ化されません。 代わりに、インスタンスエディタを使用して多数のインスタンスを作成し、各インスタンスがテンプレートパラメーターの値を提供します。 各インスタンスにはモードがあり、テンプレートパラメーターのないモデルと同様に、インスタンスエディタでアクティブ化および非アクティブ化できます。
インスタンスを編集するには、インスタンスの合計数をクリックするだけです (モデルのインスタンスの編集 もご覧ください) 。 これにより、インスタンスエディタが起動されます。 詳細については、インスタンスエディタの使用 をご覧ください。
テンプレートモデルのカードを裏返すと、詳細が表示されます。 これを行うには、インスタンスの概要を表示 をクリックします。 さまざまなモードのインスタンスの数を確認できます。
テンプレートモデルのカードに次のようなエラー アイコンが表示されている場合は、少なくとも 1 つのインスタンスがイベントを処理していません。 エラー アイコンをクリックすると、問題の内容に関する情報が表示されます。
モデルにテンプレートパラメーターがない限り、インスタンスはゼロになり、カードにはモードを選択してアクティブにするためのコントロールが表示されます。
モデルに対して表示される各カードにはアクション メニュー (カードの右上に表示される 3 つの縦のドット) があり、このメニューにはモデルを管理するためのコマンド (モデルのエクスポートや削除など) が含まれています。
モデルに説明またはタグが定義されている場合、これがそのモデルのカードに表示されます。 モデルの名前、説明、またはタグを変更したい場合は、モデルエディタでこれを行う必要があります。 モデルの名前、説明、およびタグの変更 をご覧ください。
カードのリストが長い場合は、モデル名 検索ボックスに名前を入力すると、探しているモデルを簡単に見つけることができます。 または、モデル名の一部を入力することもできます。 たとえば、「test」という単語を入力すると、名前にこの単語が含まれるすべてのモデルが検索されます。 入力する文字は、モデル名の任意の位置に含めることができます。 これらの検索条件では大文字と小文字が区別されません。 検索条件が現在適用されている場合、検索ボックスの横に 検索をクリア と表示されます。 これをクリックすると検索がクリアされ、利用可能なカードがすべて表示されます。
フィルターを使用して、表示されるカードの数を減らすこともできます。 詳細については、モデルとサンプルのフィルタリング をご覧ください。
サンプルタブ
サンプル タブには、Analytics Builder でカードとして提供されるすべてのサンプル モデルがリストされます。
サンプルの名前またはその説明がカードに完全に表示されていない場合は、名前または説明の上にマウスを置くと、ツールチップに完全な名前または説明が表示されます。
サンプルを表示することはできますが、編集または展開することはできません。 サンプルを表示するには、サンプルに表示されているカードをクリックするだけです。 その後、モデルエディタが読み取り専用モードで起動されます。 詳細については、サンプルの表示 をご覧ください。
サンプルをさらなる開発の基礎として使用する場合は、サンプルからモデルを作成できます。 その後、要件に応じて新しいモデルを編集し、デプロイできます。 詳細については、サンプルからのモデルの作成 をご覧ください。
サンプル名 検索ボックスに名前または名前の一部 (「ジオフェンス」や「Eメール」など) を入力すると、サンプルを簡単に見つけることができます。モデル タブの モデル名 検索ボックスについて上記で説明したのと同じ方法で、検索条件を入力およびクリアします。 サンプルをタグでフィルタリングすることもできます。 詳細については、モデルとサンプルのフィルタリング をご覧ください。
モデルとサンプルのフィルタリング
モデルマネージャーには、モデルタブとサンプルタブに表示されるカードの数を減らすいくつかの方法が用意されており、これにより、探しているモデルやサンプルをすばやく見つけることができます。
フィルタリングは、モデルマネージャーのユーザーインターフェースで説明されているモデル名またはサンプル名検索ボックスで指定したモデル名またはサンプル名と組み合わせて使用することもできます。
モデルまたはサンプルをフィルターするには
-
モデルマネージャーの モデル または サンプル タブで、ツールバーの その他のフィルター をクリックします。
-
表示されるダイアログで、モデルに対して 1 つ以上のフィルターを選択します。 サンプルの場合、タグによるフィルタリングのみが可能です。
モデル タブでは、次の基準に従ってモデルをフィルタリングできます。
-
モード
特定のモードのモデルのみを表示できます。 たとえば、シミュレーションモードとテストモードのモデルのみを表示したい場合は、対応するチェック ボックスをオンにします。
-
ステータス
アクティブまたは非アクティブなモデルのみを表示できます。 たとえば、アクティブなモデルのみを表示したい場合は、対応するチェック ボックスをオンにします。
-
デバイス、グループまたはアセット
入力ブロックと出力ブロックで特定のデバイスを使用するモデル、入力ブロックで特定のグループ、さらには特定のアセットを使用するモデルのみを表示できます。デバイス、グループ、またはアセット名でフィルタードロップダウン リスト ボックスを開き、1 つ以上の項目を選択して、適用 をクリックします。
-
データポイント
c8y_TemperatureMeasurement
などの特定のデータ ポイントを使用するモデルのみを表示できます。 これには、デバイス、グループ、またはアセット名でフィルター ドロップダウン リスト ボックスで少なくとも 1 つのデバイスが選択されている必要があります。 データポイントでフィルター ドロップダウン リスト ボックスを開き、1 つ以上のデータ ポイントを選択して、適用 をクリックします。 -
タグ
モデル構成 ダイアログ ボックスでは、特定のタグが定義されているモデルのみを表示できます。このダイアログ ボックスは、新しいモデルを追加するとき、またはモデルエディタからそのダイアログ ボックスを呼び出すときに表示されます (新しいモデルの追加 およびモデルの変更もご覧ください)。タグでフィルタードロップダウン リスト ボックスを開き、1 つ以上のタグを選択して、適用 をクリックします。
たとえば、特定のデバイスを使用する本稼働モードのアクティブなモデルのみを表示するなど、複数のタイプのフィルタを組み合わせることができます。
サンプル タブでは、タグのみでサンプルをフィルタリングできます。 タグでフィルター ドロップダウン リスト ボックスを開き、1 つ以上のタグを選択して、適用 をクリックします。
上記のすべてのドロップダウン リスト ボックスには、選択できる項目の数を減らすために使用できる フィルター 検索ボックスが含まれています。 名前または名前の一部を入力できます。 たとえば、「test」という単語を入力すると、名前にこの単語が含まれる項目のみが表示されます。 入力する文字は、名前内の任意の位置に含めることができます。 これらのフィルター条件では大文字と小文字が区別されません。 すべて チェック ボックスをクリックすると、フィルタ 検索ボックスの内容に応じて、ドロップダウン リスト ボックスに現在表示されているすべての項目が選択されます。
-
-
フィルタを適用 をクリックします。
モデル タブまたは サンプル タブのツールバーに、現在適用されているフィルターの種類が表示されるようになりました。 これは モデル タブの例です。
これらのフィルターをクリアする場合は、ツールバーの フィルターのクリア をクリックします。 または、特定のフィルタをクリアするには、フィルタ アイコンに表示されている [X] をクリックするか、アイコン内のフィルタ名をクリックして、表示されるダイアログ ボックスでそのフィルタ (および必要に応じて他のフィルタ) の選択を解除します。 そのダイアログ ボックスで フィルターをリセット をクリックすると、すべてのフィルターがクリアされます。
新しいモデルの追加
新しいモデルを追加すると、モデルエディタが起動されます。 詳細については、モデルエディタの使用 をご覧ください。
サンプルから新しいモデルを作成することもできます。 詳細については、サンプルからのモデルの作成 をご覧ください。
新しいモデルを追加するには
-
モデルマネージャーの モデル タブで、ツールバーの 新しいモデル をクリックします。
-
表示される モデル構成 ダイアログ ボックスに、一意のモデル名を入力します。
オプションで、モデルの説明と 1 つ以上のタグを入力できます。
タグは、モデルマネージャーでモデルをフィルタリングして、特定のタグが定義されているモデルのみを表示するのに役立ちます (モデルとサンプルのフィルタリング)。 タグを追加するには、名前を入力して Enter キーまたは Tab キーを押すだけです。 タグは色付きの長方形で表示されます。 タグを削除するには、四角形の中に表示されている X をクリックします。 このダイアログでは、モデルに重複したタグを入力することができません。 このようなタグ名を入力すると、重複したタグは追加されず、元のタグが 1 回点滅します。
-
OK をクリックします。
モデルエディタが表示されます。 新しいモデルにブロックとワイヤーを追加する方法の概要については、モデルを追加する手順の概要 をご覧ください。
既存のモデルの編集
現在モデルマネージャーにリストされている各モデルを編集 (または表示) できます。
モデルがアクティブな場合、編集するとモデルは読み取り専用モードに設定されます。 この場合、モデルエディタではモデルの内容のみを表示できます (たとえば、ブロック パラメーターを表示できます)。 通常どおりモデルを移動したりズームしたりできますが、何も変更することはできません。 そのため、モデルエディタの保存ボタンは無効になります。
モデルを編集するには
モデルマネージャーの モデル タブで、モデルに表示されているカードをクリックするだけです (ただし、状態を変更するためのトグル ボタンやモードを変更するためのドロップダウン メニューではありません)。
または、カードのアクション メニューをクリックし、編集 をクリックします。
モデルがアクティブな場合、モデルの表示のみが可能であることを通知するダイアログが表示されます。 続行 をクリックすると、モデルエディタが表示されモデルを表示できますが、変更することはできません。 詳細については、モデルエディタの使用 をご覧ください。
モデルのインスタンスの編集
モデル内の 1 つ以上のブロックでテンプレートパラメーターを使用する場合 (テンプレートパラメーターの管理もご覧ください)、そのモデルのさまざまなインスタンスをセットアップできます。
各インスタンスは、テンプレートパラメーターに異なる値を使用でき、他のインスタンスから独立してアクティブ化できます。 インスタンスはインスタンスエディタで定義およびアクティブ化されます。
モデルのインスタンスを編集するには
モデルマネージャーの モデル タブで、カードの前面にあるインスタンスの合計数をクリックします。
あるいは、次のいずれかを実行することもできます。
- カードのアクション メニューをクリックし、インスタンス をクリック
- または、インスタンスの概要を表示 をクリックしてカードを裏返し、カードの裏面にある インスタンスの編集 ボタンをクリック
これにより、インスタンスエディタが起動されます。 詳細については、インスタンスエディタの使用 をご覧ください。
モデルのデプロイ
モデル (またはインスタンス) は 2 つの状態のいずれかになります。 現在の状態は、モデルに表示されるカードに常に示されます。
- アクティブ: この状態は、モデルがデプロイされていることを示します。
- 非アクティブ: この状態は、モデルが現在デプロイされていないことを示します。
モデルが受け取る入力とその出力に何が起こるかは、モデルが設定されているモードによって異なります。 各モデルは次のいずれかのモードに設定できます。
-
下書き: このモデルはまだ開発中です。 (新しいモデルはドラフトモードで作成されます。)
-
テスト: このモードは、単一デバイスを使用するモデルにのみ許可されます。 アクティブな場合、モデルは Apama コリレーターにデプロイされ、デバイスからのメジャーメントとイベントが処理されます。 モデルの出力は保存されるだけであり (「仮想デバイス」の
オペレーション
オブジェクトまたはメジャーメント
オブジェクトとして記録)、デバイスには送り返されません。備考テストモードは、入力データを消費し、出力データも生成するカスタム ブロックを含むモデルではサポートされません。 カスタム ブロックは Block SDK を使用して作成されます。 独自のブロックの作成 もご覧ください。 -
シミュレーション: このモードは、単一デバイスを使用するモデルにのみ許可されます。 アクティブな場合、モデルは履歴入力データ (以前に受信したデータからリアルタイムで再生) を使用し、Apama コリレーターにデプロイされます。 モデルの出力は保存されるだけであり (「仮想デバイス」の「操作」オブジェクトまたは「測定」オブジェクトとして記録されます)、デバイスには送り返されません。 シミュレーションを開始するには、入力データが使用される時間範囲を定義する必要があります。 時間範囲のすべてのデータが再生されると、モデルは Apama から自動的にアンデプロイされ、モデルの状態は 非アクティブ に変更されます。 シミュレーション実行の比較を容易にするために、履歴データ エントリのタイムスタンプは変更されません。 モデル シミュレーション もご覧ください。
-
本稼働: アクティブな場合、モデルは Apama コリレーターに展開され、デバイスからのメジャーメントとイベントが処理されます。 モデルの出力は保存され、デバイスに送り返されます。
ドラフトモードのモデルは、非アクティブ状態のみにすることができます。 テスト、シミュレーション、または本稼働モードのモデルは、アクティブ状態または非アクティブ状態のいずれかになります。
JSON ファイルをロードしてモデルをインポートする場合、モデルは常に非アクティブなモデルとしてインポートされます。
モデルをデプロイするには
-
モデルマネージャーの モデル タブで、デプロイするモデルのカードのドロップダウン メニューをクリックし、本稼働、テスト、または シミュレーション のいずれかを選択します。
-
シミュレーションモードを選択した場合は、表示されているカレンダーアイコンをクリックし、使用する期間を指定して、適用 をクリックします。 シミュレーションパラメーター もご覧ください。
-
現在トグルボタンに 非アクティブ と表示されている場合、このボタンをクリックして状態を アクティブ に変更します。 シミュレーションモードの場合、有効な時間範囲が定義されている場合にのみ、状態を アクティブ に設定できます。
モデルのデプロイ解除
現在本稼働モード、テストモード、またはシミュレーションモードにあり、トグル ボタンに アクティブ と表示されている各モデルのデプロイを解除 (つまり、非アクティブ化) することができます。
モデルのデプロイを解除すると、モデルは停止され、受信データは処理されなくなります。 モデル内に構築された状態はすべて失われます。 シミュレーションモードの場合、これは、指定された時間範囲のすべての履歴データが再生される前にモデルが停止されることを意味します。
モデルをアンデプロイするには
モデルマネージャーの モデル タブで、デプロイを解除するモデルのカードのトグル ボタンをクリックすると、ボタンに 非アクティブ が表示されます。
モデルの複製
現在モデルマネージャーにリストされている各モデルを複製できます。
複製されたモデルには、元のモデルと同じ名前が付けられ、その後に番号記号 (#) と数字が続きます。 たとえば、元のモデルの名前が「My Model」の場合、最初の複製の名前は「My Model #1」になります。 モデル名の数字は、後続の複製を作成するたびに 1 ずつ増加します。 複製されたモデルには、元のモデルと同じ説明が与えられます。 複製を編集し、モデルに意味のある名前と説明を付けることをお勧めします。
モデルを複製するには
モデルマネージャーの モデル タブで、複製するモデルのアクション メニューをクリックし、複製 をクリックします。
複製されたモデルのカードがモデルマネージャーにすぐに表示されます。
モデルのエクスポート
現在モデルマネージャーにリストされている各モデルをエクスポートできます。 これは、たとえば、現在の Things Cloud テナントから別のテナントにモデルを転送する場合に役立ちます。 モデルはJSON形式で保存されます。
モデルをエクスポートするには
モデルマネージャーの モデル タブで、エクスポートするモデルのアクション メニューをクリックし、エクスポート をクリックします。
結果の動作はブラウザによって異なります。 モデルは通常、ブラウザのダウンロード場所にエクスポートされます。
モデルのインポート
以前にエクスポートされたモデルを (JSON 形式で) インポートできます。 これは、たとえば、別の Things Cloud テナントからモデルをインポートする場合に役立ちます。
モデルをインポートするには
-
モデルマネージャーの モデル タブで、ツールバーの モデルのインポート をクリックします。
-
表示されるダイアログ ボックスで、インポートするモデルが保存されている場所に移動します。
-
モデルを選択し、開く をクリックします。
インポートされたモデルのカードがモデルマネージャーに表示されます。
モデルの削除
現在モデルマネージャーにリストされている各モデルを削除できます。 現在デプロイされているモデルを削除すると、まずデプロイが解除されてから削除されます。
モデルを削除するには
-
モデルマネージャーの モデル タブで、削除するモデルのアクション メニューをクリックし、削除 をクリックします。
-
表示されるダイアログ ボックスで、削除 をクリックして削除を確認します。
すべてのモデルをリロードする
表示を更新すると、ページが読み込まれてから他のユーザーが加えた変更が表示されたり、デプロイされたモデルが失敗状態になったかどうかを確認したりできます。
すべてのモデルをリロードするには
モデルマネージャーの モデル タブで、ツールバーの 再読み込み をクリックします。
サンプルを見る
サンプルは常に読み取り専用モードです。 モデルマネージャーに現在リストされている各サンプルの内容を表示できます。
たとえば、ブロック パラメーターを調べて、サンプルで使用されている各ブロックのドキュメントを表示できます。 通常のモデルと同じ方法でサンプルを移動したりズームしたりできますが、何も追加したり編集したりすることはできません。 ただし、サンプルから新しいモデルを作成することはできます (サンプルからモデルを作成する もご覧ください)。
サンプルを表示するには
モデルマネージャーの サンプル タブで、サンプルとして表示されているカードをクリックするだけです。
または、カードのアクション メニューをクリックし、表示 をクリックします。
サンプルからモデルを作成する
現在モデルマネージャーにリストされている各サンプルから新しいモデルを作成できます。 新しいモデルには、サンプルと同じ名前、説明、タグが付けられます。
サンプルからモデルを作成するには
モデルマネージャーの サンプル タブで、新しいモデルの作成元となるサンプルのアクション メニューをクリックし、サンプルからモデルを作成 をクリックします。
あるいは、現在サンプルがモデルエディタに表示されている場合は、ツールバーの サンプルからモデルを作成 をクリックします。
新しいモデルはモデルエディタにすぐに表示され、モデルの各側面を変更できるようになります。
モデルエディタ の使用
モデルエディタ のユーザーインターフェース
モデルエディタ を使用すると、分析モデルをグラフィカルに作成できます。 これは、モデルマネージャーでモデルを追加または編集するときに呼び出されます。 新しいモデルの追加 および 既存のモデルの編集 もご覧ください。
左側のパレットには、モデルに追加できるブロックが含まれています。 さまざまなタイプのブロックに対応する、展開/折りたたみ可能なカテゴリがいくつかあります。
中央のキャンバスは、モデルを「描画」する領域です。 ブロックをパレットからキャンバスにドラッグし、ブロックのパラメーターを指定して、ブロックを配線します。 キャンバスのコンテンツはグリッドに合わせて配置されます (グリッドの表示と非表示を切り替える もご覧ください)。
キャンバスの右下の概要領域にはモデル全体が表示されます。 これは、モデルが大きすぎてキャンバスの現在表示されている領域に収まらない場合に役立ちます。 大規模なモデルの操作 もご覧ください。
右側のドキュメント ペインでは、現在選択されているブロックの参照情報を表示できます。 ブロックのドキュメントの表示 もご覧ください。
モデルの操作
モデルを追加する手順の概要
このトピックでは、新しいモデルを追加および設計する方法の概要を説明します。 詳細については、以下の手順で参照されているトピックをご覧ください。
次のようにモデルを追加して設計します。
- モデルマネージャーの モデル タブで、新しいモデル をクリックします。 表示されるダイアログ ボックスにモデル名を入力します。 新しいモデルの追加 もご覧ください。
- モデルエディタで、必要なブロックをパレットからキャンバスにドラッグします。 ブロックの追加 もご覧ください。
- 必要に応じてブロックのドキュメントをご覧ください。 ブロックのドキュメントの表示 もご覧ください。
- ブロックパラメーターエディタ を使用して、ブロックのパラメーターを指定します。 ブロックのパラメーターの編集 もご覧ください。
- 適切なブロックをワイヤーで接続します。 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」です (つまり、デフォルト値のチェックボックスが選択されていません) 。
デフォルト値を指定すると、インスタンス管理者が新しいインスタンスを作成するときに、このデフォルト値がインスタンスエディタに提供されます。 インスタンスの管理者は、このデフォルト値を変更しないままにすることも、そのインスタンスの必要に応じて変更することもできます。
デバイスのデフォルト値を設定する場合、デフォルト値 フィールドをクリックすると追加のダイアログ ボックスが表示されます。 このダイアログ ボックスは、ブロックパラメーターエディタ で別のデバイス、グループ、またはアセットを選択するときと同じです (このダイアログ ボックスの詳細についてはブロックのパラメーターの編集 をご覧ください)。 エントリの上にマウスを置くと表示されるボタンをクリックして、使用するデバイス、グループ、またはアセットを選択します。
備考必要な値が指定されていないブロックパラメーターがある場合、インスタンスを起動できません。 そうしようとすると、エラーが報告されます。 -
-
テンプレートパラメーターはいつでも更新できます。 これには、名前、オプションかどうか、およびデフォルト値が含まれます。 更新されたテンプレートパラメーターが定義されているすべてのブロックは、新しい値を使用するように自動的に適応されます。 唯一の例外はタイプです。 タイプを変更できるのは、テンプレートパラメーターがモデルのどのブロックでも使用されていない場合のみです。
-
モデルが非アクティブな場合は、テンプレートパラメーターの順序を変更できます。 これは、インスタンスエディタ での表示順序に影響します。 行の横に表示される次のコントロールを使用して、行を別の位置にドラッグします。 インスタンスのフィルタリングと並べ替え もご覧ください。
-
テンプレートパラメーターは、モデルのどのブロックでも使用されていない場合にのみ削除できます。 テンプレートパラメーターを削除するには、アクション メニュー (行の最後にある 3 つの縦方向のドット) をクリックし、削除 をクリックします。
-
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 つ以上のテンプレートパラメーターが定義されていることです (テンプレートパラメーターの管理 もご覧ください)。
インスタンスエディタを使用すると、同じモデルの異なるインスタンスをセットアップできます。 各インスタンスのブロックはテンプレートパラメーターに異なる値を使用でき、インスタンスは他のインスタンスから独立してアクティブ化できます。 インスタンスエディタはモデルマネージャーから呼び出します。 モデルのインスタンスの編集 もご覧ください。
インスタンスエディタには、選択したモデルのインスタンスが表示されます。 インスタンスがある場合は、インスタンスの値、モード、およびインスタンスがアクティブかどうか表に表示されます。
インスタンスごとに行が表示されます。 テンプレートモデルで定義されているテンプレートパラメーターごとに列が提供され、テンプレートパラメーターの名前が列ヘッダーになります。 インスタンスがアクティブでない場合は、そのインスタンスの値を調整できます。
すべてのテンプレートパラメーター (列) を画面に表示できない場合は、水平スクロールバーを使用できます。
表の右側には、各インスタンスのモードとステータスが表示されます。 ここからインスタンスをアクティブ化 (デプロイ) し、非アクティブ化 (アンデプロイ) します。 インスタンスのデプロイ および インスタンスのアンデプロイ もご覧ください。
インスタンスに対して表示される各行には、アクション メニュー (行の右端に表示される 3 つの縦のドット) があり、インスタンスを管理するためのコマンド (インスタンスの削除など) が含まれています。
フィルタリングと並べ替えによってインスタンスのリストを制御できます。 詳細については、インスタンスのフィルタリングと並べ替え をご覧ください。
次のエラー アイコンが行の終わり近くに表示されている場合、対応するインスタンスはイベントを処理していません。 詳細については、そのアイコンをクリックしてください。
インスタンスエディタを開くと、最後にインスタンスを編集してからテンプレートパラメーターが変更されており、以前と同じ値のタイプが使用されなくなっている場合があります。 インスタンスエディタで指定された値に互換性がある場合、それらは新しい値の型に変換されます。 互換性のない値 (ブール型のチェック ボックスやドロップダウン リスト ボックスに表示される値を含む) は自動的に削除されます。 値が削除された各フィールドには、エラーの下線と対応するエラー メッセージが表示されます。
インスタンスの追加
新しいインスタンスを追加すると、インスタンスエディタのテーブルに新しい行が追加されます。 その後、必要な値をすぐに入力することも、最初に必要な行をすべて追加してから行を順番に入力することもできます。
インスタンスを追加するには
-
インスタンスエディタのツールバーで、新しいインスタンス をクリックします。
これにより、テーブルの下部に新しい行が追加されます。 新しいインスタンス (行) は、保存されるまで背景色で表示されます。
-
モデルで定義されているように、テンプレートパラメーター値を入力します。 インスタンスの編集 もご覧ください。
インスタンスの編集
モデルエディタでブロックの値を指定するのと同じ方法で、インスタンスのパラメーター値を指定します(ブロックのパラメーターの編集もご覧ください)。
インスタンスエディタのテーブルには、テンプレートパラメーターのタイプに応じて、さまざまなタイプの入力コントロールが用意されています。
- テンプレートパラメーターの設定に応じて値を入力できるテキスト ボックスが提供されます (たとえば、文字列、浮動小数点、または複数行の文字列)。 入力内容は入力時に検証されます。 たとえば、浮動小数点値が必要なテキスト ボックスに文字列値を入力することはできません。
- ブール値にはチェック ボックスが用意されています。 チェックボックスを選択することは、値を「true」に設定することに相当します。
- 別の値を選択できる場合 (たとえば、四捨五入の別のルールを選択する場合)、ドロップダウン リスト ボックスが表示されます。
- デバイス、グループ、またはアセットを編集すると、追加のダイアログ ボックスが表示されます。 このダイアログ ボックスは、ブロックパラメーターエディタで別のデバイス、グループ、またはアセットを選択するときと同じです (ブロックのパラメーターの編集もご覧ください)。 エントリの上にマウスを置くと表示されるボタンをクリックして、使用するデバイス、グループ、またはアセットを選択します。
編集されているがまだ保存されていないインスタンス (行) は、保存されるまで背景色が表示されます。
テキスト ボックスにまだ指定されていない値が必要な場合は、これが必須フィールドであることを示すメッセージが表示されます。 インスタンスを保存してインスタンスエディタを終了し、後で必要な値をすべて設定することができます。 インスタンスの欠落フィールドが指定されていない限り、そのインスタンスをアクティブ化することはできません。
インスタンスのデプロイ
各インスタンスを個別にアクティブ化 (つまり、デプロイ) できます。 たとえば、1 つのインスタンスを本稼働モードにし、別のインスタンスをテストモードにすることができます。 さまざまなモードの詳細については、モデルのデプロイ をご覧ください。 この情報は、通常のモデルとテンプレートモデルの両方に適用されます。
インスタンスをアクティブ化すると、そのインスタンスに対するすべての変更が最初に保存され、その後インスタンスがアクティブ化されます。
インスタンスがアクティブ化されると、テンプレートパラメーター値が指定されている場合、その値が取得され、テンプレートパラメーター バインディングを使用するモデル内のブロック パラメーターに適用されます。 テンプレートパラメーター値が指定されていない場合は、そのテンプレートパラメーターのデフォルト値 (存在する場合) が使用されます。 必須のテンプレートパラメーターの場合にテンプレート パラメーター値が指定されていない場合、インスタンスはアクティブ化に失敗します。
インスタンスがアクティブになると、最初にインスタンスを非アクティブ化することなく、テンプレートパラメーター値やモードを変更することはできません。 いずれかのインスタンスがアクティブな場合、モデルは読み取り専用となり、すべてのインスタンスが非アクティブ化されるまで変更できません。
インスタンスをデプロイするには
-
インスタンスエディタの 実行モード 列で、デプロイするインスタンスのドロップダウン メニューをクリックし、本稼働、テスト、または シミュレーション のいずれかを選択します。
ドラフトモードのインスタンスをアクティブ化することはできません。
-
シミュレーションモードを選択した場合は、表示されているカレンダー アイコンをクリックし、使用する期間を指定して、適用 をクリックします。 シミュレーション パラメーター もご覧ください。
-
現在、ステータス 列のトグル ボタンに 非アクティブ が表示されている場合、このボタンをクリックして状態を アクティブ に変更します。 シミュレーションモードの場合、有効な時間範囲が定義されている場合にのみ、状態を アクティブ に設定できます。
エラーが発生した場合は、表の右側に以下のエラーアイコンが表示され、インスタンスを起動できません。 詳細を表示するには、エラー アイコンをクリックしてください。
インスタンスのデプロイ解除
現在本稼働モード、テストモード、またはシミュレーションモードにあり、インスタンスエディタの ステータス 列のトグル ボタンに アクティブ と表示されている各インスタンスを非アクティブ化 (つまり、デプロイを解除) できます。
インスタンスのデプロイを解除すると、インスタンスは停止され、受信データは処理されなくなります。 インスタンス内に構築された状態はすべて失われます。 シミュレーションモードの場合、これは、指定された時間範囲のすべての履歴データが再生される前にインスタンスが停止されることを意味します。
インスタンスをアンデプロイするには
インスタンスエディタの ステータス 列で、デプロイを解除するインスタンスのトグル ボタンをクリックすると、ボタンに 非アクティブ が表示されます。
インスタンスのフィルタリングと並べ替え
インスタンスの長いリストがある場合は、検索ボックスに値を入力することで、探しているインスタンスを簡単に見つけることができます。 または、値の一部を入力することもできます。 これにより、インスタンスエディタのすべての入力フィールドが検索され、この値を含むインスタンス (行) のみがリストされます。 フィルターに一致するすべての値が強調表示されます。 検索条件では大文字と小文字は区別されません。 検索条件が現在適用されている場合、検索ボックスに X が表示されます。 これをクリックすると検索がクリアされ、利用可能なすべてのインスタンスが表示されます。
インスタンスエディタ テーブルの列を並べ替えることもできます。 これを行うには、マウスを列ヘッダーに移動したときに表示される矢印をクリックします。 これにより、インスタンスがその列の値に従って (たとえば、アルファベット順または数字順に) 並べ替えられます。 もう一度クリックすると、列が逆方向に並べ替えられます。 そのため、その列の必須値がまだ指定されていないフィールドは、列の最上部または最下部に表示できます。 たとえば、アクティブなインスタンスを一番上に表示するなど、実行モードとステータスに従ってインスタンスをアルファベット順に並べ替えることもできます。
値を編集しても、インスタンスエディタ テーブルの行の表示には影響しません。 検索と並べ替えを再適用する場合は、インスタンスを保存して再読み込みする必要があります。
新しいインスタンスを追加しても、インスタンスエディタ テーブルの行の表示には影響しません。 ソート後に行を追加すると、インスタンスを再ロードしない限り、その行は常にテーブルの最後に追加されます。
インスタンスの複製
現在インスタンスエディタにリストされている各インスタンス (行) を複製できます。 元のインスタンスとその複製は両方とも同じテンプレートパラメーター値と同じモードを持ちます。 ただし、元のインスタンスがアクティブであっても、複製されたインスタンスは常に非アクティブになります。
インスタンスを複製するには
インスタンスエディタで、複製するインスタンスのアクション メニューをクリックし、複製 をクリックします。
複製されたインスタンスの新しい行が、インスタンスエディタのテーブルの一番下にすぐに表示されます。
インスタンスの削除
現在インスタンスエディタにリストされている各インスタンスを削除できます。 現在デプロイされているインスタンスを削除すると、まずデプロイが解除されてから削除されます。
インスタンスを削除するには
-
インスタンスエディタで、削除するインスタンスのアクション メニューをクリックし、削除 をクリックします。
-
表示されるダイアログ ボックスで、削除 をクリックして削除を確認します。
インスタンスの保存
必要な情報を指定する必要がある行がまだある場合でも、インスタンスを保存できます。 これは、後でその情報を追加する場合に役立ちます。
インスタンスを保存するには
インスタンスエディタのツールバーで、保存 をクリックします。
このコマンドは、インスタンスに変更が適用されている場合にのみ有効になります。 行が背景色で強調表示されているインスタンスのみが保存されます。
インスタンスのリロード
表示を更新して、すべてのインスタンスの最新の状態を表示したり、デプロイされたインスタンスが障害状態になったかどうかを確認したりできます。
インスタンスを再読み込みするには
インスタンスエディタのツールバーで、再読み込み をクリックします。
リロード時に保存されていない変更がある場合は、最初にこれらの変更を保存するように求められます。
インスタンスエディタを終了する
対応するツールバー ボタンを使用してインスタンスエディタを終了すると、モデルマネージャーに戻ります。
インスタンスエディタを終了するには
インスタンスエディタのツールバーで、[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 | Reset | |||||
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 | Reset | 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, 23.5, 24 | |||
10:00:45 | 24 | 23.75 | 23.5, 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 は偽、1 は真 | 値の型が float または boolean の場合は許可されますが、その他の値は実行時に失敗します | ||||
string | "true" か "false" | 文字列に変換された数値 (技術的表記の場合もあります) | 文字列値 (技術的表記の場合もあります) | |||
any |
常に成功する変換のみが許可されます。 文字列値は浮動小数点値に変換されません。 入力変換が機能する場合もありますが、常に機能することは保証できません。
多くの場合、型変換やワイヤーが意味をなす場所について心配する必要はありません。 必要な型変換はすべて自動的に行われます。
一部のブロックはさまざまなタイプの入力を受け入れ、入力タイプに応じて出力タイプまたは動作を変更する場合があります。 たとえば、論理 OR ブロックはブール入力またはパルス入力で動作でき、その出力はその入力タイプと同じです。
場合によっては、値を強制的に特定の型として解釈させることが望ましい場合があります。その場合、コンバータ ブロックを使用して、特定の型への変換を強制できます。 たとえば、Pulse ブロックは、上記の変換に従って、ブール値または浮動小数点数をパルスに変換できます。 これは、ブール値の場合、ブール値が true に変化したときにパルスを生成することを意味します。 float の場合、値が変化したときにパルスを生成します。 そのため、2 つの float 出力を OR ブロックに直接接続すると、float 出力のいずれかが 0 以外の場合に true となるブール出力が生成されます。 あるいは、2 つの float 出力をそれぞれ Pulse ブロックに接続し、そこから OR ブロックの入力に接続すると、いずれかの float 出力の値が変化するたびにパルスが送信されます。 これは Pulse ブロックのデフォルトの動作です。
Pulse ブロックでは、Mode パラメーターの設定に応じて、さまざまなタイプのパルス変換が可能です。 さまざまなモードでの変換については、次の表で説明します。
出力タイプを持つ From ブロック | ||||||
---|---|---|---|---|---|---|
pulse | boolean | float | string | any | ||
パルスブロックのモードによる動作 | 値変更時 (デフォルト) | 出力が true に変化するとパルスが発生します | 出力値が変化するとパルスが発生します | 出力値が変化するとパルスが発生します | 出力の値が変化するとパルスが発生します (false への変化を除く) | |
すべての入力に対して | すべての入力でパルスが発生します | すべての入力でパルスが発生します | すべての入力でパルスが発生します | すべての入力でパルスが発生します | ||
ゼロ以外の値について | すべての真の入力でパルスが発生します | ゼロ以外の入力ごとにパルスが発生します | 空でない入力ごとにパルスが発生します | 左側のセルに記載されているように、値のタイプに応じてパルスが発生します |
ワイヤーの処理順序
ブロックに複数の入力が接続されている場合、ブロックが入力に基づいて計算を実行する前に、これらすべての入力が計算されます。 ブロックの入力が互いに同期していない可能性があります (値の種類 の 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 がイベントを順番どおりに受信しない可能性があります。
メジャーメントなどのタイムスタンプを持つデータ ソースは並べ替えることができます。 たとえば、操作にはタイムスタンプがないため、順序を変更することなく、受信したとおりに処理されます。
Analytics Builder は、タイムスタンプ付きのデータ ソースを使用するいくつかの入力ブロックを提供します。 これらのブロックは、タイムスタンプを無視 パラメーターを提供します。これにより、データの並べ替えを無効にして、受信した入力を処理できるようになります。 共通のブロック入力とパラメーター もご覧ください。
次の表に、使用可能な入力ブロックをリストし、入力を並べ替えられるかどうかを示します。
入力ブロック | 並べ替え可能 |
---|---|
アラーム入力 | はい |
イベント入力 | はい |
マネージドオブジェクト入力 | いいえ |
測定入力 | はい |
操作入力 | いいえ |
位置入力 | はい |
データの一部にタイムスタンプが関連付けられているデータ ソースの場合、入力ブロックは受信したイベントを順序どおりに処理できません。 これを行うために、入力ブロックは受信したすべてのイベントをリオーダー バッファーに保持し、ソース タイムスタンプから事前に定義された遅延時間までイベントの処理を遅延させます。 ソースのタイムスタンプに比べてイベントの処理を遅らせることにより、入力ブロックによりイベントの順序を変更できるようになります。 このプロセスの重要なパラメーターは、イベントの遅延時間です。 入力ブロックが入力を遅延する時間を秒単位で構成するには、minimum_wait_timelay_secs
キーの値を変更するPOST
リクエストを Things Cloud に送信します。 詳細については、構成 をご覧ください。
入力ブロックは、イベントが順序どおりに配信されない場合でも、定義された遅延時間内に Apama によって受信されると想定しています。 定義された秒数 (つまり、イベントのタイムスタンプと Apama を実行しているシステムの時刻との差) を超える遅延後にイベントを受信した場合、同じイベントが発生した場合、そのイベントはドロップされます。 タイムスタンプ、またはより新しいタイムスタンプはモデルによってすでに処理されています。 そのため、古いイベントは、あるモデルによって処理されても別のモデルによって削除される可能性があります。
時間遅延値の設定が低すぎる場合、わずかな遅延によって Apama がイベントをドロップし、誤った結果が生じる可能性があります。 遅延時間の値が大きいほど、イベントが処理されるまでの遅延が長くなります。 そのため、Apama に配信されるイベントの環境に合わせて、適切な遅延時間の値を選択することが重要です。
コリレーターは、ドロップされたイベントの数をコリレーターログファイルに定期的に記録します。 ログ調整の構成については、構成 および コリレーターログへのアクセス をご覧ください。
出力ブロックとイベントのタイミング
出力ブロックは、モデルからのデータ (Things Cloud の測定や操作) を外部システム (Things Cloud など) で利用できるようにします。 出力ブロックは同期値または非同期値を生成できます。
同期出力 (メジャーメントなど) を生成する出力ブロックからの値は、別のモデルで時間同期的に使用することもでき、同じタイムスタンプの他のデータを使用してモデルで処理することもできます。 モデル間の接続 もご覧ください。
非同期出力を生成する出力ブロックからの値は、別のモデルでも使用できますが、それは外部システムからデータを受信したときにのみ時間非同期で行われます。
次の表に、使用可能な出力ブロックをリストし、出力が同期か非同期かを示します。
出力ブロック | 出力の種類 |
---|---|
アラーム出力 | 同期 |
イベント出力 | 同期 |
管理対象オブジェクトの出力 | 非同期 |
測定出力 | 同期 |
操作出力 | 非同期 |
ワイヤー上のフラグメント プロパティ
各ワイヤーには、ワイヤーのタイプである主な値 (float
、boolean
、string
、またはpulse
のいずれか) があります。
これに加えて、一部のブロックは値とともに他の情報のフラグメントを提供する場合があります。 これらは、値の名前付きプロパティです。 これらは、メジャーメントが測定される単位や、データ ソースの追加のコンテキスト情報など、入力ブロックから提供される他の情報である場合があります。
ほとんどのブロックは入力ワイヤーからの主な値でのみ動作しますが、一部のブロックはこれらのフラグメント プロパティ値を利用して、それらを別の出力ポートに抽出できます (例については、プロパティの抽出 ブロックをご覧ください)。 これにより、外部ソースからのより複雑なデータをより柔軟に処理できるようになります。
一連のイベントを識別するためのキー
入力ブロックと出力ブロックは、一連のイベント (またはストリーム) のキーを指定することによって、一連のイベントを識別します。 この一連のイベントは、入力ブロックに配信する正しいイベントを識別するために使用されます。 キーは複数のブロック パラメーターで構成され、同じブロック タイプを通じてその一連のイベントを他の一連のイベントとは区別して識別します。 例えば:
Measurement
オブジェクトの入力と出力の場合、キーはデバイス、フラグメント、およびシリーズです。 出力ブロックで指定された 単位 パラメーターはキー (情報提供のみです) の一部とみなされず、測定入力 ブロックのパラメーターと一致する必要はありません。Event
オブジェクトの場合、キーはデバイスとイベント型です。alarm
オブジェクトの場合、キーはデバイスとアラームのタイプです。
値とブロックの詳細
導入
Analytics Builder は、ブロックを相互に接続して、入力を処理して反応できるモデルを形成するための環境を提供します。 Analytics Builder は内部で数種類の値を使用するため、これらの違いを理解することが重要です。 次のトピックでは、連続時間値と離散時間値を表す値のタイプとpulse
タイプの区別について説明します。 また、ウィンドウ処理やブロックが出力を生成するときのブロック実装の詳細についても説明します。
まとめ
Analytics Builder では、連続時間値を表すために値の型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 秒に 1 回だけであるということは、00:19.5 秒の最小点 7.4 が失われることを意味します。
異なる時点で値を入力する
2 つのロボット アームの位置を与える 2 つの位置センサーを考えてみましょう。両方ともオンチェンジ センサーです。 2 本のアームが同じ方向と速度で一斉に動く場合、位置センサーは、それらが一定の距離だけ離れるように (または、少なくとも一定の距離に近づくように)、同時に新しい値に更新される必要があります。 相違 ブロックの入力が両方のセンサーに接続されている場合、ロボット アームが動いても、相違 ブロックの出力はほぼ一定になります。Analytics Builder はすべての値を同じタイムスタンプで評価するため、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 |
強調表示された線は、繰り返し測定を行わなかった場合と同じであることに注意してください。 これらのブロックが同じ値を繰り返し測定しても、再評価された場合にブロックが計算する内容に違いはありません。
Window ブロックの出力タイミング
平均値 (平均) ブロックなどの集計ブロックの場合、入力値の変更の影響は、定期的に再評価されるとブロックの出力が変化し、新しい値に近づくことを意味します。 過去にブロックが異なる入力値を受け取った場合、いつでもブロックの再評価が可能であり、それぞれが異なる出力を生成する可能性があります。
オンチェンジ入力と時間枠 の前述の例では、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 では、イベント、アラーム、操作がパルスのソースとして使用されます。 Things Cloud ドキュメントの次のトピックもご覧ください: コンセプトガイド の イベント および オペレーション 、 リファレンス ガイド の デバイス管理ライブラリ > アラーム。
パルスは単なる時間の一点であるかもしれませんが、ソフトウェアのバージョン番号や接続しているネットワークノードなどの追加情報も伝えることができます。 これらは プロパティの抽出 ブロックを使用して取得できます。 独自のカスタム ブロックを作成している場合、入力がプロパティ フィールドを持つValue
タイプとして宣言されていれば、これらのブロックにアクセスできます。 これは数値型でも使用できます。Value
タイプの詳細については、Analytics Builder Block 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 つのデバイス、グループ、またはアセットから別のデバイス、グループ、またはアセットに変更できます。 デバイスのグループとデバイスまたはアセットの間で変更する場合、出力ブロックはトリガー デバイスと指定されたデバイスまたはアセットの間で切り替わり、モデルが使用可能な状態に保たれます。 デバイス、グループ、アセットの置換 もご覧ください。
テストモードとシミュレーションモードは、特定のデバイスを使用するモデルにのみ許可されます。 デバイスのグループを使用してモデルをテストまたはシミュレーションする場合は、モデルエディタを使用してグループ内の単一のデバイスに適用するようにモデルを変更し、テストモードまたはシミュレーションモードでモデルをアクティブにします。 これらのモードの詳細については、モデルのデプロイ をご覧ください。
同時実行レベルの構成
デフォルトでは、Analytics Builder ランタイムは 1 CPU コアを使用してモデルを実行します。 CPU コアの数を変更したい場合は、numWorkerThreads
キーの値を変更するPOST
リクエストを Things Cloud に送信します。 詳細については、構成 をご覧ください。
通常、この構成値はシステムで使用可能な CPU コアの数に設定されますが、使用可能なリソースに応じて、これをより多くまたはより少なく構成すると便利な場合があります。 デバイスの数に合わせて拡張する必要はありません (つまり、デバイスあたりのイベント レートが中程度であると仮定すると、数百のデバイスに対して 4 つのワーカー スレッドを用意するのが非常に合理的です)。
同時実行レベルを 1 に設定しても、デバイスのグループを入力として使用するモデルを作成することは可能ですが、これらはグループ内のデバイスごとに独立して動作し続けるため、グループと単一デバイスの入力を混合したり、入力や出力を混在させることはできません。
ブロードキャストデバイス
すべてのモデルに適用できる信号があると便利な場合があります。 これらは、デバイスからの信号である場合もあれば、デバイスからの信号であるかのように表示される他のシステムからの信号である場合もあります。 そのため、Analytics Builder は、ブロードキャスト デバイスと呼ばれるデバイスをサポートしており、これらのデバイスからの信号は、すべてのデバイスのすべてのモデルで利用できます。
ブロードキャスト デバイスは、特定のデバイスまたはデバイスのグループからの入力とともに、任意のモデルの入力として使用できます。 以下の図は、ブロードキャスト デバイスがデバイス グループ内のすべてのデバイスにどのように適用されるかを示しています。 式 ブロックなどの処理ブロックにさまざまな入力として提供することで、デバイス グループ内のデバイスからの信号とブロードキャスト デバイスからの信号を組み合わせることができます。
他のデバイスとは異なり、ブロードキャスト デバイスは、ブロードキャスト デバイスからのデータのみを消費するモデルの同期出力にのみ使用できます。 非同期タイプのブロードキャスト出力は、非ブロードキャスト入力を消費するモデルによって生成できます。
また、ブロードキャスト デバイスの出力からの同期データを使用してモデルを接続することもできません (つまり、どのモデルも別のモデルの出力であるブロードキャスト デバイスからのメジャーメントを使用することはできません)。 ブロードキャスト デバイスからの非同期出力を使用して、モデルを相互に接続できます (つまり、モデルは、別のモデルの出力であるブロードキャスト デバイスからの操作を使用することができます)。
ブロードキャスト デバイスの識別
ブロードキャスト デバイスは、そのデバイスのインベントリ内のデバイス オブジェクトのプロパティの存在によって識別されます。 pas_broadcastDevice
または c8y_Kpi
プロパティのいずれかの存在。 そのため、デバイスがブロードキャスト デバイスとみなされるかどうかは、すべてのモデルにわたってそのデバイスにとってグローバルです。 ブロードキャスト デバイスを含むデバイスのグループを使用することは許可されていません。 c8y_Kpi
オブジェクトは通常、KPI ブロックとともに使用されます。 そのため、KPI オブジェクトを使用してデバイスのグループからのメジャーメントを比較することができます。グループ内のすべてのデバイスに対して 1 つの KPI オブジェクトが使用されます。
仮想デバイス
仮想デバイスは、モデルがテストモードまたはシミュレーションモードでデプロイされるときに使用されます。 モデルのデプロイ もご覧ください。
仮想デバイスは、c8y_VirtualDevice
プロパティを持つ Things Cloud インベントリ内のオブジェクトです。 このプロパティは、仮想デバイスがコピーである実デバイスの識別子を参照します。
creationDate
を使用して、モデルのアクティベーション用にどの virtualDevice
が作成されたか、およびそのデバイスをソースとして持つ測定を確認します。
デフォルトでは、仮想デバイスは 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 の例のように、チェーンの一部である入力ブロックからチェーンの一部を形成する出力ブロックへのリンクがモデルの 1 つに含まれていない場合でも、エラーが発生します。Model2 からのイベントは含まれません。 モデル1へのメジャーメント 出力ブロックへのサイクルを形成しますが、両方とも同じモデル内にあるため、サイクルとしてカウントされます。 (この場合、そのモデルを 2 つのモデルに分割し、サイクルを削除することで問題を解決できます)。
表示されるデバイス、グループ、アセットの数の構成
デフォルトでは、次の場合に最大 10 個の項目が表示されます。
- デバイス、グループ、またはアセットの選択 ダイアログ ボックスから別のデバイス、グループ、またはアセットを選択する場合 (ブロックのパラメーターの編集)。
- デバイス、グループ、またはアセットを置換するとき (デバイス、グループ、アセットの置換 を参照)。
上記の場合に検索ボックスを使用する場合、このデフォルトは検索結果に表示されるアイテムの最大数にも適用されます。 さらに読み込む をクリックすると、さらに最大 10 個の項目が表示されます。
このデフォルト値を変更する場合 (表示するアイテムの数を増やしたり減らしたりするため)、テナント オプションを変更する必要があります。 つまり、POST /tenant/options
リクエストを送信する必要があります。 詳細については、Things Cloud OpenAPI仕様のテナント オプション の情報をご覧ください。
たとえば、値を 20 に設定するには、次のように指定します。
{
"category": "analytics.builder",
"key": "c8yAnalyticsBlocks.queryInventoryPageSize",
"value": "20"
}
構成 もご覧ください。
デバイス、グループ、アセットの検索
デフォルトでは、次の場合、デバイス、グループ、およびアセットのみが表示されます。
- デバイス、グループ、またはアセットの選択 ダイアログ ボックスから別の項目を選択した場合 ブロックのパラメーターの編集
- デバイスまたはグループを置換するとき (デバイス、グループ、アセットの置換 を参照)。
ただし、上記の場合に検索ボックスを使用すると、検索条件に一致する 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"
}
構成 もご覧ください。
シミュレーション用の代替データ ソースの構成
デフォルトでは、プラットフォーム データベースは、分析モデルのシミュレーションの履歴データを取得するために使用されます。 たとえば、履歴データが個別に保持されている場合など、シミュレーション用に代替データ ソースを構成できます。 データ ソースは、必要なパスとクエリ パラメーターに対する HTTP GET
操作をサポートする必要があります。 GET
操作への応答は、標準の JSON 形式 Things Cloud に準拠する必要があります。 データとクエリ パラメーターの形式については、Things Cloud のドキュメントをご覧ください。
シミュレーションに代替データ ソースを使用する場合は、以下にリストされているテナント オプションを定義する必要があります。 つまり、3 つの別々の POST /tenant/options
リクエストを送信する必要があります。 詳細については、テナント オプション の情報をご覧ください。 Things Cloud OpenAPI仕様。
simulation.dataSource.url
- データ ソースのベース HTTP URLsimulation.dataSource.username
- HTTP 基本認証に使用されるユーザー名simulation.dataSource.password
- HTTP 基本認証に使用されるパスワード
例えば:
{
"カテゴリ": "analytics.builder",
"key": "simulation.dataSource.url",
"値": "http://192.168.1.1/"
}
{
"カテゴリ": "analytics.builder",
"key": "simulation.dataSource.username",
"値": "私の名前"
}
{
"カテゴリ": "analytics.builder",
"key": "simulation.dataSource.password",
"値": "秘密"
}
構成 もご覧ください。
以下のセクションでは、代替データ ソースでサポートする必要があるパスとクエリ パラメーターをリストします。
アラーム
パス: alarm/alarms
クエリパラメーター:
source
- アラームのソースマネージドオブジェクト識別子dateFrom
- アラーム発生の開始日または日時dateTo
- アラーム発生の終了日または日時pageSize
- 返されるレコードの最大数currentPage
- 完全な結果セット内で現在返されるページ (ページ 1 から始まります)
イベント
パス: event/events
クエリパラメーター:
source
- イベントのソースマネージドオブジェクト識別子dateFrom
- イベントの開始日または日時dateTo
- イベントの終了日または日時pageSize
- 返されるレコードの最大数currentPage
- 完全な結果セット内で現在返されるページ (ページ 1 から始まります)
メジャーメント
パス: measurement/measurements
クエリパラメーター:
source
- メジャーメントのソースマネージドオブジェクト識別子dateFrom
- メジャーメントの開始日または日時dateTo
- メジャーメントの終了日または日時pageSize
- 返されるレコードの最大数currentPage
- 完全な結果セット内で現在返されるページ (ページ 1 から始まります)
オペレーション
パス: devicecontrol/operations
クエリパラメーター:
deviceId
- オペレーションのソースデバイス識別子createdFrom
- オペレーションの作成開始時刻createdTo
- オペレーションの作成終了時刻pageSize
- 返されるレコードの最大数currentPage
- 完全な結果セット内で現在返されるページ (ページ 1 から始まります)
ドロップされた入力の監視
例外的に、シミュレートされたモデルは遅延入力イベントをドロップすることがあります。 すべてのモデルにわたってドロップされた入力イベントの数は、user-analytics-oldEventsDropped
という名前のユーザー定義ステータスとして公開されます。 ドロップされたイベントのモニタリング もご覧ください。
監視と構成
監視
モデルマネージャーで各モデルの現在のステータスを監視できます。 モデルのカードには、このモデルの現在のモード (運用モードなど)、およびモデルがアクティブであるか (デプロイされている) か非アクティブであるかが表示されます。
モデルの展開に失敗した場合、または実行中にエラーが発生した場合、モデルのカードに次のメッセージが表示されます。
データの処理中にモデルが失敗したかどうかを確認するには、モデルマネージャーですべてのモデルを再ロードし、最新の状態を表示します。 すべてのモデルをリロードする もご覧ください。
定期ステータスの監視
モデルのカードに表示されるステータスに加えて、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 個あります。 各バケットのサイズは、無限に伸びる最後のバケットを除いて、timelay_secs
を 10 秒で割ったものになります。 たとえば、timelay_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 - 無限 |
timelay_secs
の詳細については、モデル タイムアウトのキー をご覧ください。
最も遅いチェーンのステータス
高スループットのモデルのチェーンが複数のワーカーにデプロイされている場合、チェーンが入力イベントの処理に遅れをとり、まだ処理されていない入力イベントのバックログが作成されることがあります。 このようなチェーンは「スローチェーン」と呼ばれます。 最も遅いチェーンが 1 秒以上遅延した場合、メッセージがコリレーターログに書き込まれます。 例えば: 「Analytics Builder のモデル チェーン「モデル 1」、「モデル 2」、「モデル 3」は 3 秒遅くなります。」 コリレーターログの場所については、「コリレーターログへのアクセス」をご覧ください。
最も遅いチェーンに関する次の情報は、apama_status
パラメーター内の Things Cloud 操作またはイベントとして公開される定期ステータスでも入手できます。
名前 | 説明 |
---|---|
user-analyticsbuilder.slowestChain.models |
最も遅いチェーンに含まれるすべてのモデル |
user-analyticsbuilder.slowestChain.laySec |
入力イベントの処理においてチェーンが遅れる秒数 |
例
以下は、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",
"user-analytics-oldEventsDropped": "1",
"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"
}
}
ドロップされたイベントの監視
モデルがイベントを受信したときに、コリレーターがイベントを配信または処理するのが遅すぎると、そのイベントがドロップされる可能性があります。 入力ブロックとイベント タイミング をご覧ください。
すべてのモデルにわたるドロップされたイベントの合計数は、ステータス操作の一部として定期的に公開されます。 ドロップされたイベントの数のカウントは、ステータス操作の apama_status
パラメーターの user-analytics-oldEventsDropped
という名前のユーザー定義のステータス値として利用できます。 動作の詳細については、定期ステータスの監視もご覧ください。
ドロップされたすべての入力イベントはチャネル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.
コリレーターログの場所については、「コリレーターログへのアクセス」をご覧ください。
監査ログの表示
モデルのアクティブ化と非アクティブ化は監査ログに表示されます。 監査ログには、管理アプリケーションおよび監査 API を介してアクセスできます。 ユーザー ガイド の 管理 > 監査ログの表示 および Audit API をご覧ください。 監査ログへのアクセスの詳細については、Things Cloud OpenAPI仕様 をご覧ください。
監査ログ エントリには、アクションを実行しているユーザーの名前とモデルの現在のモードが含まれます。 テストモードとシミュレーションモードの場合、仮想デバイスの識別子とモード プロパティが提供されます。
以下は監査ログ エントリの例です (読みやすくするために「テキスト」フィールドに改行が追加されています)。
{
"activity": "Activated model",
"application": "apama_ctrl",
"severity": "information",
"text": "TestingModel1:Activated,
Mode:SIMULATION,
OutputDevices:[21628],
startTime:2019-11-06T09:35:10.000Z,
endTime:2019-11-06T09:35:43.000Z,
maxDelaySecsSimulation:2",
"type": "Inventory",
"user": "apama_test_cep_admin"
}
診断情報の表示
診断情報を表示するには、「CEP 管理」の読み取り権限が必要です。 詳細については、ユーザー ガイド の 管理 > 権限の管理 をご覧ください。
「CEP 管理」の読み取り権限がある場合は、モデルマネージャーの下部に診断情報をダウンロードするためのリンクが表示されます。 これらは、ログ ファイルの内容、EPL アプリケーションのコピーなどを含む zip ファイルをダウンロードします。
問題が発生した場合、または EPL アプリケーションをデバッグする場合に、この診断情報を取得すると役立つ場合があります。 サポート チケットを提出する場合は、サポートに提供することも役立ちます。
利用可能な診断の詳細については、トラブルシューティングと診断 をご覧ください。 これには、REST リクエストに使用できる追加のエンドポイントに関する情報も含まれます。
構成
REST リクエストを Things Cloud に送信することで、Analytics Builder の設定、いわゆる「テナント オプション」をカスタマイズできます。 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 モデルです。 シミュレーション モデルの最大数の構成もご覧ください |
simulation.dataSource.url simulation.dataSource.username simulation.dataSource.password |
シミュレーション用の代替データ ソースの URL。 これには、HTTP 基本認証のためのユーザー名とパスワードも必要です。 シミュレーション用の代替データ ソースの構成もご覧ください |
その他のキー
キー名 | 説明 |
---|---|
numWorkerThreads |
ワーカースレッドの数。 デフォルト値は 1 です同時実行レベルの構成もご覧ください |
retention.virtualDevicesMaxDays |
仮想デバイスを保持するための保持期間 (日数)。 デフォルト値は 30 日です。 仮想デバイスもご覧ください |
c8yAnalyticsBlocks.queryInventoryPageSize |
[デバイス、グループ、またはアセットの選択] ダイアログ ボックスに表示されるデバイス、グループ、またはアセットの数。 デフォルト値は 10 です表示されるデバイス、グループ、アセットの数の構成もご覧ください |
c8yAnalyticsBlocks.queryInventoryNameSearchAdditionalFilter |
[デバイス、グループ、またはアセットの選択] ダイアログ ボックスの検索ボックスを使用すると表示されるマネージドオブジェクト。 デバイス、グループ、アセットの検索もご覧ください |
ログに記録されたテナントのオプション
一部のテナント オプションの値がログに記録されます。 これらは次の通りです。
status_device_name
status_period_secs
timelay_secs
numWorkerThreads
これらのテナント オプションに現在どの値が使用されているかを知りたい場合は、コリレーターログでそれらを検索できます。 コリレーターログへのアクセス もご覧ください。
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
は、ユーザー アプリケーションがデプロイされているテナントのホスト名です。 -
「カテゴリ」は常に
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
コリレーターログへのアクセス
コリレーターログには、管理アプリケーションからアクセスできます。 これは、Apama-ctrl マイクロサービスの ログ タブで見つけることができます。 ログを表示するには、マイクロサービスにサブスクライブする必要があります。 マイクロサービスとログ ファイルの詳細については、ユーザー ガイド の 管理 > マイクロサービスの管理と監視 をご覧ください。