フォーム読み込み中
皆さんこんにちは。IoT ソリューションアーキテクトのTakamasaです。
今回は、お客様からも問合せの多い、デバイス間通信についてです。デバイス間通信というのは、いわゆるSIMが入っているIoTデバイス同士の通信の話になります。
1NCE SIMが入ったデバイス間は直接の通信はできない仕様ですが、デバイス間通信を実現させるための構成例を紹介します。
例えば、以下のようなユースケースが考えられます。
親端末から子機端末に向けてアラートを発報
A端末からB端末に現在の状態を吸い上げる
など
まずはおさらいですが、1NCE(ワンス) というIoT回線の特徴を簡単にまとめてみます。
1回線当たり一括2,200円の支払いのみで、最長10年間、500MBまで利用可能(プリペイド式)
SIMカード1枚からオンラインで購入可能
日本国内に加えて、170以上の国と地域において追加料金なしでローミングサービスを利用可能
SIMカードに加えて、ウェブ上の回線管理ツール(CMP)や、お客さまのシステムとのデータ連携を可能にするAPI、安全にデータを伝送するOpen VPNなどの機能を追加料金なしで利用可能
eSIMやIPSec(各拠点のLANを相互接続する高セキュリティーのネットワーク)、Transit GW(AWS VPC同士を接続)などの機能を、有償の追加オプションとして提供
一番の特徴は、IoT回線でよくありがちな基本料金+従量課金ということではなく、一括で10年間前払いするという部分がとても特徴的ですね。
また今回使ってみるSIM管理プラットフォームについても、2,200円の中で使用できるということなので、気軽にIoTをプロトタイピングしてみるといった使い方でもできそうです。
なお、1NCE(ワンス)SIMカードでは法人ユーザーであれば、どなたでも1枚からWebで購入が可能です。
1NCEのSIM回線プラットフォーム自体には、REST APIや、IMEIロック、SMS送信、回線無効化、追加チャージなど、回線に関わる操作が一元的に管理できるものなっています。
1NCEとしては、いくつかの閉域接続のオプションがあり、その中から要求にあった接続構成を検討していくことになります。
先ずはそもそも前提としてですが、1NCE SIM同士の直接通信はセキュリティなどの観点からサポートしていません。
2つ以上のSIMカード間でのピアツーピア通信はできません。このルールは、同一の顧客のSIMカード間や異なる顧客間のSIMカードに対しても同じです。
SIMカード間のIPトラフィックの直接ルーティングはできません。SIMデバイス間で特定のデータパッケージを交換するには、アプリケーションサーバーが必要です。このアプリケーションサーバーは、理想的には1NCE VPNサービスに接続されています。
したがって、VPNクライアントIP経由で一つのSIMデバイスからデータメッセージを受け取り、その静的IPアドレスによって同じ顧客アカウント内の別のSIMデバイスにリダイレクトすることができます。
1NCEのSIMカードは、グローバルIPアドレスを持っていないというのも、デバイス間通信ができない大きな理由の一つです。SIMカードにグローバルIPアドレスを持っていれば、グローバルIPアドレス間で通信をすることができますが、1NCE SIMの場合、インターネットからアクセス出来ないようにするためにプライベートIPアドレスを割り当てています。1NCEのVPNを利用して、VPNに接続した同士のデバイスなら通信できそうな気もしますが、これもルーティング的に実現できません。
IoTデバイスをボットネットなどに悪用されないようにするために折り返し通信に必ず制御を必要としているためです。
先ほど直接的に通信はできないと書きましたが、直接データを送るのではなく、何かハブ的なものを間に挟んで、データを中継させるという構成であれば、デバイス同士でデータをやりとりさせることが可能です。
先ずは1NCE OSを使った方法になります。
1NCE OSとは、1NCEが提供しているIoTプラットフォームサーバになりますが、データ転送、蓄積、解析などの機能を提供しています。
その中で、Device Controllerという機能を使うことで、1NCE OSからデバイスにデータを送ることが可能です。
構成にすると、このような構成です。
お互いのデバイスから、1NCE APIを叩くことで、そのメッセージの中に送りたいデータを格納させることが可能です。
データサイズは、デバイス側でのプロトコルに依存しており、以下のようになっています。
A maximum CoAP payload size of 1024 bytes
Device Controllerの一番のメリットは、デバイス側の状態を気にすることなく、データを送り込めるというものになっています。
この機能を実現しているものに、SEND_WHEN_ACTIVEというものがあり、これを使うことで、データ送信を1NCE OS内にバッファさせ、送り先のデバイスからの通信が発生した際に、同時に1NCE OSからバッファされていたデータを流しこむことが可能です。
また、CoAP/LwM2Mだけの機能になりますが、デバイス側にAcknowldgeの仕組みを入れていただくことで、そのデータが正しく送信できたのかどうかを確認もすることができるので、よりデータの到達性を確実にすることができます。
ただ、注意点としては、SEND_WHEN_ACTIVEの仕組みとして、データを受け取る側のデバイスからの通信が発生したタイミングで、1NCE OSからデータを送るという仕組みになっているため、受信側デバイスは定期的に1NCE OS側にポーリングのような仕組みを入れる必要があります。
このデバイスがそもそも死活監視のために定期的にデータを送っていればそれの通信で良いですが、それがないようであれば、定期的にUDPなどの小さいデータでよいので、データを1NCE OSに送信する必要があります。
また、送信側デバイスでは、APIを叩く必要があるので、HTTPsプロトコルのサポートと、1NCE APIを叩くための、ユーザー/パスワードをデバイス側に保持する必要がありますので、この部分のセキュリティの担保というのも重要なポイントになってきます。
その他の方法としては、MQTTなどのPub/Subの仕組みを使って、デバイス同士をトピックでぶら下げるような構成が考えられます。
以下が構成図になります。
この構成では、外部のMQTTサーバに、2つのデバイスが任意のトピックにSubscribeしておいて、登録トピックにデータが来た場合に、データを送るような仕組みになります。
MQTT Brokerは、自前でオープンソースのものを構築しても良いですし、他社がサービスとして運用しているMQTT Brokerなどもあるので、要件にあったものを選べればよいと思います。
ただし、インターネット上にあるMQTT Brokerを使用する場合には、暗号化などの考慮する必要があるので注意しましょう。
1NCEの場合は各種閉域サービスもサポートしているので、閉域で接続したうえで自前のMQTT Brokerを構築すれば、通信経路は暗号化されるので、暗号化ヘッダを無視できるというメリットがあります。
この構成のデメリットですが、Device AとDevice Bについては、あくまでも直接通信をしているわけではなく、あくまでもMQTT Brokerというハブを経由してデータをやり取りしているように見せているということです。
また、Pubを受け取るための、通信経路という意味でも常にデバイスはMQTTのセッションを維持し続ける、KeepAliveの仕組みも必要になってくるので、データ量や通信不安定に向けた対策も重要です。
今回はMQTT Brokerを例に作ってみましたが、別にHTTPウェブサーバでも、データの保管と収受ができるサーバであればなんでも実現は可能です。
今回は1NCE SIMを用いたデバイス間通信の実現方法について、いくつか具体的な例を基に、説明していきました。
1NCEの仕様として、どうしてもSIM同士で直接通信はできないのですが、今回のようなINCE OSを経由する方法や、MQTTのPub/Sub構成をとることで、疑似的にデータをやりとりさせることが可能になっています。
これから1NCEを使って、IoTシステムを構築したいと思っている方は是非ソフトバンクもしくは1NCEまでご相談ください。
1NCE(ワンス)SIMカードでは法人ユーザーであれば、どなたでも1枚からWEBで購入が可能で、今回紹介した1NCE SIM管理プラットフォームの機能は、アカウントユーザーであればであれば誰でも無料で試すことができますので、先ずは是非触ってみてください。
1NCE IoTフラットレートはIoTコネクティビティに特化した通信接続サービスです。
▶ 「低容量SIM」ユースケース 資料ダウンロード
条件に該当するページがございません