下図のとおり、バンドルされている仮想デバイスを利用して動作を確認していました。前々回のエントリで構成されていたデバイスとデバイスサービスこれらの仮想デバイスは、デバイスからのデータの受け取りやデバイスへのコマンド実行などをテストする目的ではたいへん便利ですが、現実世界とのインタラクションはできません。ブローカを介して)インタラクションできる状態を構成します。EdgeX)を基にしています。こちらをクローンして使います。制御下におきたいデバイスの仕様を整理します。その後、実際にそのデバイスのシミュレータを動作させ、仕様通りに動くことを確認します。今回は、以下のような仕様のデバイスを考えます。形式で配信するデバイス側が定期的にデータを発信するだけでなく、コマンド操作も受け付けるようなデバイスです。値の定期的な自動配信はありません(これは伏線です)。今回は、上記のようなデバイスを模したシミュレータを利用します。同様にまずはこれを起動します。eclipse-mosquitto6de5986ebb1b3715179253857952f143fbf19fa77e201980f8573d96558850fd続けてデバイス(のシミュレータ)の用意です。次のようなスクリプトを起動させます。JSON.stringify(data));});これを起動するには、以下のように作業します。アドレスは適宜読み替えてください。locally...9d52b4956ebbec60dd0f93bdf9750ff915fefd8e8c58d3ce8bc7ba1429693d2bシミュレータの動作確認ブローカの全トピックを購読します。値が届いていることがわかります。{"name":"MQ_DEVICE","cmd":"randfloat32","randfloat32":"28.6"}コマンド操作ができることも確認します。コマンドを配信します。しないと動かないかもしれません。配信されていることが確認できます。メソッドの実行前後で変更されていることも確認できます。{"name":"MQTT_DEVICE","method":"get","cmd":"message","message":"modified-message"}ここまでで、デバイス(のシミュレータ)が動作している状態が作れました。関係なく、ただ単に前述の仕様のデバイスを論理的に作っただけです。デバイスサービスの構成さて、ここからが本題です。制御下におくことを考えます。現実世界に存在するデバイスは、それぞれが異なるセンサやスイッチを持っていて、異なるプロトコルをインタフェイスに持つため、それぞれに応じた適切な方法で値の取得や制御命令の発行をする必要があります。間を取り持ってくれる存在としてデバイスサービスとよばれるマイクロサービスを定義しています。デバイスサービスは、おおむねデバイスの種類ごとに用意するものと思えばよさそうで、つまり、ひとつのデバイスサービスに対してひとつ以上のデバイスの制御を任せられるようです。デバイスサービスは、以下のような役割を持ちます。エンドポイントを提供するコアサービス層からの制御命令を実デバイスに合わせた命令に翻訳して実行し、実デバイスを制御するデバイスから送られてきた情報をコアサービス層に合わせた情報に翻訳し、コアサービス層に届ける事前に定められた場合は、定期的にデバイスに対して特定の処理を行い、結果をコアサービス層に届けるまた、デバイスサービスそのものは、以下のような特徴を持ちます。限った話ではないですが、プラットフォーム系の製品の場合、製品の発展にはエコシステムの成熟が非常に重要です。年の冬とついこの前なので、まだまだこれからですね。つの要素を考える必要があります。他のマイクロサービスの情報などを定義するデバイスプロファイルと実際のデバイスを紐づけてデバイスを定義する。中身は以下の通りです。[]デバイスプロファイルは、デバイスと一対一ではなく、例えばデバイスのモデルごとにひとつ用意するイメージです。行でデバイスのモデルを定義しています。いうモデルである、という想定で書かれています。deviceResources、deviceCommands、coreCommands、の三つのセクションが続いています。セクションでは、デバイスが持っているリソースと、それが持つ値の意味を決めています。型の値を持つと定義されています。型の値を持ち、他のリソースと違って書き換えが可能(W)と定義されていることがわかります。set)ごとに参照または操作されるリソースを紐付けています。値の読み取りを行えるように定義されています。値の取得や変更ができるように定義されています。ここでは実装されていませんが、ひとつのメソッドに複数のリソースを紐付けることも可能です。操作で複数のリソースの値を同時に取得するようにも構成できます。セクションでは、コアサービス層からデバイスに対して実行できるコマンドを定義しています。コマンドを表すものです。値として取り込むように構成されています。リクエストの動作が定義されています。中身は以下の通りです。このファイルは環境依存の固定値を含みます。アドレスを環境に合わせて書き換えてください。"ResponseTopic"このファイルで、実際のデバイスを定義したり、必要なパラメータを指定したりします。内の他のサービスの情報などを指定しています。