MODEにおけるデバイスとのコミュニケーションの方法
MODEでソフトウェアエンジニアをやっている banana-umai です。
今回はMODEプラットフォームにおけるクラウド -> デバイスへのコミュニケーションの方法について紹介したいと思います。MODEではDevice Command(以下Command)とDevice Data Proxy(以下DDP)という2種類の方法によるデバイスへのコミュニケーションの方法が存在します。このドキュメントではそれぞれの方法の特徴をまとめ、それぞれの違いとユースケースを比較したいと思います。
Device Command
Device CommandはMODE CloudからDeviceへのCommandという名前が示す通り状態を持たない一方通行のコミュニケーション方法です。
AppからMODE CloudにCommandを送信すると、MODE Cloudは即座にそのCommandをDeviceに対して送信します。
MODE CloudはAppとDeviceの間の単なるProxyとして働くようなイメージです。Deviceがオフラインの際などにはCommandがDeviceに到達せず、そのまま破棄されます。
詳しい利用方法については以下のオンラインドキュメントを御覧ください。
Device Data Proxy
一方、DDPはデバイス固有のkey-valueストアをDeviceとMODE Cloud間で同期することで実現する状態を持った双方向のコミュニケーション方法です。
Device Data ProxyはMODE CloudとDeviceの間で共有されるKey-Valueストアのようなものです。
AppがMODE Cloud上Key-Valueストア上の任意のデータを更新すると、そのデータはDeviceに対して通知されます。具体的には更新のあったKey-ValueペアがMQTT または WebSocketのコネクションを通じてDeviceに通知されます。
AppがDDPに対して更新を行ったタイミングで、Deviceがオフラインだったとしても、書き込まれたデータ自体はMODE Cloud上のキーバリューストアに保存されるので、Deviceがオンラインに復帰した際に最新のKey-ValueストアがDeviceにロードされます。
より具体的な利用方法はオンラインドキュメントをご覧ください。
比較
Command
Deviceがネットワークに繋がっていない場合など、CommandがDeviceに届かない場合があります。その場合、Commandは破棄されます。そのため、DDPに比べると機能として劣っているようにも感じられるかもしれませんが、状態を管理しなくても良い分、適切なユースケースにおいては、DDPよりも実装が容易になります。
コマンドに対してのDeviceの動作結果がすぐにわかり、コマンドの再送をオペレータが判断しやすい場合には、Commandを利用することでシンプルに機能を実現できると思われます。
DDP
Device/Cloud間で共有されるKVストアという性質上、Deviceがオフラインからオンラインに復帰した際など、最新のKVの情報がDeviceに送信されます。DDPを用いれば、Commandでできることも実現はできます。ただし、コミュニケーションの形がKey-Valueストアを共有するという形で行われるという性質上、状態の管理や一貫性にある程度気を配る必要が生じます。
DDPの使い所としては、Deviceの設定情報や状態をMODE Cloud経由でWEBアプリケーションやSmart Phoneアプリケーションから管理したい、というような場合や、Deviceに特定の動作をさせたいが、オペレーターから動作結果がわかりづらく、かつ(または)、オンラインになったタイミングで実行されてほしいような場合などがあげられます。
以上、MODEプラットフォームではユースケースによって使い分け可能な2種類のデバイスとのコミュニケーション方法を紹介させて頂きました。
※ 別媒体からの転載記事です。
※ 掲載内容は2020年6月当時のものです。